Solidity

Truffle v5 的 gas 用完了,但 Truffle v4 部署了合約

  • March 7, 2021

使用 Truffle v4 成功部署合約,但 Truffle v5truffle migrate命令失敗。

我的部署過程:

1) delete buidl/ folder

2) truffle compile

3) truffle migrate

松露 v5

我得到的錯誤是:

Error:  *** Deployment Failed ***
"ContractName" ran out of gas. Something in the constructor (ex: infinite loop) 
caused gas estimation to fail. Try:
* Making your contract constructor more efficient
* Setting the gas manually in your config or as a deployment parameter
* Using the solc optimizer settings in 'truffle.js'
* Setting a higher network block limit if you are on a
private network or test client (like ganache).

at C:\Users\dziug\AppData\Roaming\npm\node_modules\truffle\build\webpack:\packages\truffle-deployer\src\deployment.js:364:1
at process._tickCallback (internal/process/next_tick.js:68:7)
Truffle v5.0.0 (core: 5.0.0)
Node v10.4.0

的 truffle-config.js看起來像這樣:

module.exports = {
 networks: {
   development: {
     host: 'localhost',
     port: 8545,
     network_id: '*',
 compilers: {
   solc: { 
     version: "^0.4.24",
     optimizer: {
       enabled: true,
       runs: 200
     }
   }
 }

然後我安裝了truffle v4並嘗試遷移同一個合約:

1) npm uninstall -g truffle

2) npm install -g truffle@4.1.15

3) delete buidl/ folder

4) truffle compile

5) truffle migrate

它有效。我也可以將它部署在 rinkeby 上。

Remix 不會部署它

javascript VM:“創建 ContractName 錯誤:交易執行失敗”

但是,我可以通過 Remix 將它部署到 Rinkeby

我需要使用 truffle v5 部署此合約,因為我將開發 Solidity 0.5.* 合約,該合約將與我現在嘗試部署的合約進行通信,否則我將無法使用 javascript 進行測試。

我要部署的契約是:https ://github.com/cryptocopycats/awesome-cryptokitties/tree/master/contracts

有幾個修復和添加。合約從 KittyCore.sol 開始

檢查@goodvibration答案。它應該在大多數情況下工作。

我不推薦下面分享的答案,它會忽略EIP-170,希望有更好的答案

我只能使用以下方法進行遷移: ganache-cli --gasLimit=0x1fffffffffffff --allowUnlimitedContractSize -e 1000000000

–allowUnlimitedContractSize: “在調試時允許無限的合約大小。通過啟用此標誌,將繞過 EVM 中對 24KB 的合約大小限制(請參閱 EIP-170)的檢查。啟用此標誌將導致 ganache-cli 的行為與生產不同環境。”

**-e {number}:**為所有 10 個帳戶提供這麼多的乙太幣

的 truffle-config.js看起來像這樣:

module.exports = {
 networks: {
   development: {
     host: 'localhost',
     port: 8545,
     network_id: '*',
     gas: 0x1fffffffffffff
   },
 }
}

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