Contract-Deployment

錯誤:“無法儲存合約程式碼,請檢查您的氣體限制”

  • May 8, 2018

這似乎是一個非常普遍的話題,但我在其他問題中找不到解決方案,抱歉再次詢問。我正在關註一個初學者範例,嘗試通過 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’,它將整個字元串轉換為十六進制。這很糟糕,因為字節碼將是兩倍大小並且完全錯誤。

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