合约代码无法存储,请检查您的gas limit : Ethereum Smart Contract Deployment Failed:

问题描述 投票:0回答:4

我正在学习如何使用 Solidity、Web3.js 和 JavaScript 开发和部署以太坊智能合约。

我已经在 Ganache 上成功部署了一个合约。现在,当我尝试使用 `truffle-hdwallet-provider 将它部署到 Rinkby 测试网上时。它只是失败了。

我已经使用 truffle-hdwallet-provider 成功创建了一个 web3 对象,并且我成功获得了帐户列表,但是部署到测试网总是失败。

您可以在这里查看我的部署失败:https://rinkeby.etherscan.io/address/0x2f20b8F61813Df4e114D06123Db555325173F178

这是我的部署脚本

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 时出现此错误:

合约代码无法存储,请检查您的gas limit。

我绑定了不同的 gas 值(可能达到最大值)但仍然没有结果。

ethereum solidity web3js truffle
4个回答
0
投票

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


0
投票

在字节码之前的

'0x0' +
中使用这个
deploy

.deploy({ data:'0x0' + bytecode })
.send({ gas: "1000000", gasPrice: "5000000000", from: accounts[0] });

0
投票

我发现不包括

0x
的字节码导致了这个问题。

通过连接

0x
与字节码,我能够让它工作。


0
投票

当部署到 sepolia 网络时,我这样做了并且效果很好:

const result = await new web3.eth.Contract(interface)
.deploy({data: '0x' + bytecode, arguments: ['Hello there']})
.send({from: accounts[0], gas: '1000000'})

只需在字节码后面加上'0x'

© www.soinside.com 2019 - 2024. All rights reserved.