无法存储合同代码,请检查您的汽油限额:以太坊智能合同部署失败:

时间:2018-06-20 12:53:56

标签: blockchain ethereum solidity web3 truffle

我正在学习如何使用solidity,web3和Javascript开发和部署以太坊智能合约

我已成功在 Ganache 上部署了合同。现在,当我尝试使用 Rinkby Test Net 将其部署在 truffle-hdwallet-provider 上时,就会失败。

我已经成功地使用 web3 创建了 truffle-hdwallet-provider 对象,并且我成功获得了帐户列表,但是部署到testnet总是失败。 / p>

  

您可以在此处检查我的部署是否失败。

     

https://rinkeby.etherscan.io/address/0x2f20b8F61813Df4e114D06123Db555325173F178

这是我的deploy script

const HDWalletProvider = require('truffle-hdwallet-provider');
const Web3 = require ('web3');
const {interface, bytecode} = require('./compile');

const provider = new HDWalletProvider(
    'memonics',                         // this is correct 
    'https://rinkeby.infura.io/mylink'  // this is correct 
    );

const web3 = new Web3(provider);

const deploy = async() =>{
    const accounts = await web3.eth.getAccounts();
    console.log('Attempting to deploy from account:', accounts[0]); //This excute fine
    try {
    const result = await new web3.eth.Contract(JSON.parse(interface)).deploy({ data: bytecode, arguments: ['Hi There!']}).send({ from: accounts[0], gas: '1000000'});
    console.log('Contract deployed to ', result.options.address);
    }
    catch(err) {
        console.log('ERROR'); // Here I get error 
    }



};
deploy();

这是我的合同

pragma solidity ^0.4.17;

contract Inbox{
    string public message;

    constructor (string initialMessage) public {
        message = initialMessage;
    }
    function setMessage(string newMessage) public {
        message = newMessage;
    }
}

编辑:我尝试使用 Remix 并成功部署,但是在尝试 truffle-hdwallet-provider 时出现错误:合同代码无法存储,请检查您的气体限制。我绑定了不同的气体值(最大可能),但仍然没有结果。

2 个答案:

答案 0 :(得分:0)

我发现 bytecode 不包含 0x 导致此问题。

通过将 0x 与字节码对应可以解决此问题。

答案 1 :(得分:0)

我遇到了这个问题,并通过将扁平化的代码粘贴到Remix中来解决它,然后给出了更好的错误描述:我在协定中有一个接口,但我没有正确实现(错误的函数签名)。检查您的界面实现。尝试部署“抽象合同”会出现此错误。