鏈上DAPP系統開發|智慧合約DAPP開發搭建

电报nft119發表於2024-03-14

  釋出合約的位元組碼到某個區塊鏈網路,網路地址和deployer賬戶,這些我們可以在hardhat.config.js檔案中配置。


  整合外掛:


  hardhat工作流還支援外掛機制,外掛能夠將特定邏輯作為hook function(鉤子函式)插入到對應的task(任務)當中,所以,當我們執行某個任務時,需要確認它是否依賴了某個外掛,否則它可能有與預期不同的行為。


  引入外掛的方式是,首先使用npm安裝這個外掛,DAPP智慧合約13z開4z77發z558,再於hardhat.config.js配置檔案頭部引入即可。


  HRE執行環境變數:


  當我們在JS檔案中引入hardhat時,HRE會被插入執行環境。一些外掛可能會擴充HRE,將他們的實用函式方法插入到HRE中,類似地,我們也可以使用這種方法構建特定的hardhat外掛。但一般來說,我們不需要這麼做。


  HRE會在我們執行npx hardhat run任務時被自動插入到全域性變數中去,我們可以透過這種方法編寫某些簡單的合約釋出指令碼或合約互動指令碼。


  3.2單元測試


  編寫合約的第二步是編寫合約的單元測試。當我們執行npx hardhat test任務時,hardhat會自動尋找./test資料夾下的單元測試並執行它們。這個預設的地址可以在hardhat.config.js配置檔案中使用path.tests修改:


  //Rewrite the./test folder to./tests


  paths:{


  tests:‘./tests’,


  },


  執行測試所需要安裝的依賴可以在這個指南上找到:


  與傳統的單元測試一樣,使用Mocha作為單元測試框架。對於合約特定的變數型別,我們使用Waffle和chai作為斷言庫。


  一般來說,我們在hardhat.config.js配置檔案頭部引入測試輔助外掛 nomiclabs/hardhat-waffle可以幫助我們解決大部分問題,而不需要額外手動安裝mocha,waffle和chai並進行配置,與前一小節所提到的HRE相關,它們會被自動插入HRE執行環境。


  關於合約事件,合約方法呼叫,BigNumber等完整的斷言庫範例可以在這個檔案中找到:


  注意:合約的單元測試中可以使用contractInstance.connect(signer)來隨意改變呼叫合約的外部賬戶。


  3.3改善測試效率


  編寫單元測試首先需要我們在測試鉤子中編寫釋出合約的程式碼,這意味著,我們需要在每次beforeEach鉤子中重新發布我們的合約並使其從零狀態開始執行。


  即使hardhat支援在記憶體中執行區塊鏈並整合了單元測試流程,但這樣反覆的釋出合約也會極大拖慢測試速度。


  因此,就單元測試的最佳實踐,我向大家推薦hardhat-deploy外掛。


  hardhat-deploy外掛支援使用evm_snapshot快速地跳轉到某個高度的區塊鏈狀態,因此,我們可以使用它在單元測試中維護測試前、中、後以及各種特定高度狀態,極大地加快測試速度。


  注意,引入hardhat-deploy外掛,需要修改對應的 nomiclabs/hardhat-ethers外掛來源,這可能會導致在未來的npm install中帶來版本衝突,如果你遇到了版本衝突,可以使用npm install--force跳過版本依賴檢查,強制安裝兩者。


  “devDependencies”:{


  “ nomiclabs/hardhat-ethers”:“npm:hardhat-deploy-ethers”,


  “hardhat-deploy”:“^0.11.2”,


  …


  }


  簡單來說,在單元測試中,我們可以使用:


  await deployments.fixture([‘SomeContractName’]);


  來確保在測試執行前跳回某個狀態。如果你需要更加複雜和自定義的fixture(而非直接跳回某個合約釋出後的乾淨狀態)可以使用deployments.createFixture來建立自定義fixture,具體的範例程式碼和指南可以在這裡尋找到:


  值得注意的是,使用hardhat-deploy外掛會同時改變我們釋出合約的程式碼邏輯(正如其名)它支援在./deploy資料夾下編寫每個合約的釋出指令碼。事實上,預設的deployments.fixture正會退回這些釋出指令碼所敘述的合約狀態。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70020115/viewspace-2935164/,如需轉載,請註明出處,否則將追究法律責任。

相關文章