Hardhat
Hardhat 中的任務和腳本之間的界限在哪裡模糊?
這是一個關於Hardhat的問題,它是促進在乙太坊上建構的任務執行器。
您可以編寫可以使用所有 Hardhat 功能的自定義腳本。一個經典案例是為您的智能合約編寫部署腳本。
從創建任務:
任務是帶有一些關聯元數據的 JavaScript 非同步函式。Hardhat 使用此元數據為您自動執行某些操作。處理參數解析、驗證和幫助消息。
兩者之間有什麼區別,什麼時候應該與另一個相比?
首先要知道的是,幾乎所有可以對任務執行的操作都可以通過腳本完成,反之亦然。但是有些事情只能通過任務或腳本來完成,而這兩者都可以完成,但其中一個更容易。
任務
您可以對任務而不是腳本做的最重要的事情是覆蓋另一個任務。例如,您可以在執行測試之前做一些事情:
task("test", async (args, hre, runSuper) => { // do something return runSuper() })
自定義任務呢?在這種情況下,您無法處理腳本無法完成的任務。使用任務的主要原因是插入 Hardhat 的參數解析器。因此,如果您正在處理令牌並想要檢查某個網路中某個地址的餘額以獲取該令牌,您可以執行以下操作:
hh balance --address 00x4403B5d2Fed270D18b6d83122C818c2413D9BC05 --network mainnet
(安全帽速記
hh
在哪裡)。腳本
您可以使用腳本但不能使用任務做的一件事是直接使用 node.js 執行它們。也就是說,而不是
hh run my-script.js
你可以做
node my-script.js
所以你可以做一些事情,例如將額外的標誌傳遞給
node
二進製文件。這也允許您使用另一個二進製文件執行腳本,ts-node
例如ndb
或mocha
。請記住,如果您這樣做,您需要顯式導入安全帽執行時環境:
const hre = require("hardhat")
或者,您可以執行以下操作:
node --require hardhat/register my-scripts.js
擁有與使用
hh run
.使用腳本的另一個原因是使用不同的庫解析參數,例如command ,而不是使用 Hardhat 自己的解析器。
請注意,如果您這樣做,您將無法再使用
--network
參數指定網路。在這種情況下,您需要設置HARDHAT_NETWORK
環境變數:HARDHAT_NETWORK=rinkeby node my-scripts.js