Truffle v5 的 gas 用完了,但 Truffle v4 部署了合約
使用 Truffle v4 成功部署合約,但 Truffle v5
truffle 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 }, } }