Truffle-Migration

Truffle 遷移僅在未試執行時執行(試執行中的不同 account0)

  • September 7, 2019

我注意到在遷移中使用 HDWalletProvider 並使用 account 參數,您會在 dryRun 期間獲得隨機/意外的帳戶。我添加了一條安全線,說明地址應該符合預期,但由於 dryRun,這總是失敗。

我可以有一個條件,即遷移中的程式碼僅在不在 DryRun 中執行時才執行?

這是我遷移的一個最小範例(需要將 truffle.js 配置為使用 HDWalletProvider 並將預期地址作為 account0):

const expected = "0xcFbB1f35EF57b96cA51221a331165fF9B2c828FD";

module.exports = function(deployer, network, account) {

 console.log("This accounts are not from HDWalletProvider on dryRun and are always different");
 console.log(account);

 //this fails even if HDWalletProvider is configured correctly in truffle.js
 if (account[0].toLowerCase() !== expected.toLowerCase()) {
   throw new Error(
     `Unexpected account0: account0=${account[0]} instead of ${expected}`
   );
 }
};

只需skipDryRun: true在 truffle-config.js 中添加到您的網路配置。

請參閱:https ://www.trufflesuite.com/docs/truffle/reference/configuration

強烈不推薦在“真實”和“試執行”模式下執行不同的程式碼。這就是為什麼我認為 Truffle 應該在試執行中使用與實際遷移期間使用的帳戶相同的帳戶。

但是,目前,如果您仍想在遷移程式碼中檢測空執行,似乎 Truffle 將“-fork”添加為網路名稱的後綴。也許,這段程式碼會有所幫助:

if (network.split('-')[1] === "fork") {
 // dry-run specific code
}`

引用自:https://ethereum.stackexchange.com/questions/74099