Solidity
部署到測試網和主網的成本差距很大
我有一個簡單的 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 = 4M
,gasPrice = 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 超時,它會認為部署失敗。