Solidity

Solidity 合約部署失敗 - 但賬戶有大量 ETH

  • March 11, 2019

我只是想在Ethereum MAIN-Net( not RopstenRinkeby其他測試網) 上部署一個新契約 - 我收到了這個奇怪的錯誤:

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應該還是***足夠的。***特別是考慮到以下幾點:

-我成功地部署了這個相同的契約:

  1. 我的本地開發網路 ( Ganache) -Total Cost返回的位置0.01332576 ETH(約 1.80 美元)
  2. -回到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。

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