Contract-Deployment
錯誤:“無法儲存合約程式碼,請檢查您的氣體限制”
這似乎是一個非常普遍的話題,但我在其他問題中找不到解決方案,抱歉再次詢問。我正在關註一個初學者範例,嘗試通過 Infura 節點在 Rinkeby Network 中部署合約。
這是我要部署的契約:
pragma solidity ^0.4.22; contract Inbox { string public message; constructor(string initialMessage) public { message = initialMessage; } function setMessage(string newMessage) public { message = newMessage; } }
這是 Deploy.js
const HDWalletProvider = require('truffle-hdwallet-provider'); const Web3 = require('web3'); const { interface, bytecode } = require('./compile'); const provider = new HDWalletProvider( ' //Mnemonic ', 'https://rinkeby.infura.io/3qmjTiDl43PDhvdhm4WB' ); const web3 = new Web3(provider); const deploy = async () => { const accounts = await web3.eth.getAccounts(); console.log('Deploy from account', accounts[0]); const result = await new web3.eth.Contract(JSON.parse(interface)) .deploy({ data: bytecode, arguments: ['Hi there!'] }) .send({ gas: '1000000', from: accounts[0] }); console.log('Contract deployed to', result.options.address); }; deploy();
當我嘗試使用node deploy.js時,控制台會列印 Deploy 函式的第一個 Console.log ,但在等待之後會顯示:
(node:13776) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: The contract code couldn't be stored, please check your gas limit. (node:13776) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
我希望你們能幫助我,對不起,如果這是一件容易的事情,試著學習它。
你是怎麼得到字節碼的?開頭有'0x’嗎?
您可以嘗試在送出交易時添加“0x”嗎?
.deploy({ data: '0x' + bytecode, arguments: ['Hi there!'] })
如果您將“0x”放在字節碼的前面,它將假定其餘部分為十六進制並不管它。
如果沒有'0x’,它將整個字元串轉換為十六進制。這很糟糕,因為字節碼將是兩倍大小並且完全錯誤。