Solidity

部署到測試網和主網的成本差距很大

  • April 13, 2021

我有一個簡單的 100 行合約,其中包含 6 個功能,我想部署到主網上。當我通過 Truffle 將它部署到 Rinkeby 測試網時,我得到以下結果:

Summary
=======
> Total deployments:   2
> Final cost:          0.01959998 ETH

但是,當我嘗試部署到主網時,我得到以下資訊:

Message:  sender doesn't have enough funds to send tx. The upfront cost is: 260000000000000000 and the sender's account only has: 11370852144167560

這相當於超過 500 美元。這肯定不能準確嗎?

以下是我的松露配置:

live: {
 networkCheckTimeout: 100000000,
 provider: function() {
   return new HDWalletProvider(
     privateKeys.split(','), // Array of account private keys
     `https://mainnet.infura.io/v3/${process.env.INFURA_API_KEY}`
   )
 },
 network_id: "1",
 gas: 4000000,
 gasPrice: 65000000000, // 65Gwei
},

我將合約部署到 Remix 上的測試網,估計費用為 6721074 gwei,目前約為 15 美元。

乙太坊需要預先gas * gasPrice支付交易費用,它會退回未使用的gas,但必須提前支付gas。

配置具有gas = 4MgasPrice = 65 gwei因此對於您必須擁有的每筆交易4 * 10^6 * 65 * 10^9 = 26 * 10^16 wei = 0.26 ether

在 truffle-config (200k gas) 中將 gasPrice 設置得足夠低,並在遷移腳本中為每個合約部署和交易單獨設置 gas。使用 ganache 部署來計算每個合約需要多少。例如,如果合約需要 1234567 用於在 ganache 中部署,則在主網中設置為 1300000。

還要注意,主網中的 gasPrice 比 rinkeby 高得多,使用低 gasPrice 可能會導致 truffle 超時,它會認為部署失敗。

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