Solidity 合約部署失敗 - 但賬戶有大量 ETH
我只是想在
Ethereum MAIN-Net
( notRopsten
或Rinkeby
其他測試網) 上部署一個新契約 - 我收到了這個奇怪的錯誤:Message: sender doesn't have enough funds to send tx. The upfront cost is: 159840000000000000 and the sender's account only has: 158236521250000000
我覺得這很奇怪的原因是,雖然我的賬戶中確實只有21.60 美元,但按照今天的匯率計算,這當然不算多,但這些資金對於簡單的合約部署來說
0.158 ETH
應該還是***足夠的。***特別是考慮到以下幾點:-我成功地部署了這個相同的契約:
- 我的本地開發網路 (
Ganache
) -Total Cost
返回的位置0.01332576 ETH
(約 1.80 美元)- -回到
Rospten Network
哪裡- 大約 1.83 美元Total Cost``0.01342176 ETH
雖然我知道各種測試網和真正的乙太坊區塊鏈之間顯然會有區別,但它不可能真的像 $ 2 on one and more than $ 21號,可以嗎?這就像高出 1,050%。
這裡還有其他我不知道的事情嗎?
非常感謝您對造成這種情況的任何見解。
=================================
更新:
根據@smarx 的建議,我正在添加一些程式碼和上下文:
工具:
-
Truffle
我用來部署我的契約。-在我的本地執行 -Running返回:
ganache``MacBookPro
Truffle Version
Truffle v5.0.4 (core: 5.0.4)<br/> Solidity v0.5.0 (solc-js)<br/> Node v11.10.0<br/>
這是我的部署程式碼 - 我的
truffle.json
文件。require('dotenv').config(); const HDWalletProvider = require('truffle-hdwallet-provider'); module.exports = { networks: { mainnet: { provider: function () { return new HDWalletProvider( process.env.PRODUCTION_MNENOMIC, "https://mainnet.infura.io/vs/${process.env.INFURA_API_KEY}", 15 ) }, from: "0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", network_id: 1, gas: 7992000, gasPrice: 20000000000, confirmations: 2 }, ropsten: { provider: function () { return new HDWalletProvider( process.env.DEV_MNENOMIC, "https://ropsten.infura.io/${process.env.INFURA_API_KEY}" ) }, network_id: 3, gas: 8000000, gasPrice: 20000000000 }, development: { host: "127.0.0.1", port: 8545, network_id: "*" // Match any network id }, }, solc: { optimizer: { enabled: true, runs: 200 } } }
如前所述,此程式碼在我的本地
Ganache
部署和遠端Ropsten
部署上都執行良好。我過去也成功地使用了完全相同的程式碼 - 就像上週一樣 - 將契約部署到mainnet
,所以我知道它已經工作並且至少對某些部署有好處 - 我認為它適用於所有部署。希望這能帶來很多啟示。如果需要更多資訊,請告訴我具體情況。
======================
UPDATE#2 - 以為我會輸入錯誤的確切副本
truffle
給我:1_initial_migration.js ====================== Deploying 'Migrations' ---------------------- Error: *** Deployment Failed *** "Migrations" could not deploy due to insufficient funds * Account: 0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx * Balance: 158236521250000000 wei * Message: sender doesn't have enough funds to send tx. The upfront cost is: 159840000000000000 and the sender's account only has: 158236521250000000 * Try: + Using an adequately funded account + If you are using a local Geth node, verify that your node is synced. at /usr/local/lib/node_modules/truffle/build/webpack:/packages/truffle-deployer/src/deployment.js:364:1 at processTicksAndRejections (internal/process/next_tick.js:81:5) Truffle v5.0.4 (core: 5.0.4) Node v11.10.0
主網配置中的值是 7992000 氣體限制和 20000000000 氣體價格,這導致 0.15984 ETH 的 tx 價格,你的賬戶沒有足夠的。無法開採 gasPrice*gasLimit+value 高於賬戶餘額的 tx,因為它的餘額不夠高。嘗試將氣體限制降低到 7000000。