Ошибка: «Код контракта не может быть сохранен, пожалуйста, проверьте свой лимит газа» [дубликат]

Кажется, это очень распространенная тема, но я не смог найти решение в других вопросах, извините за повторный вопрос. Я следую примеру новичка , пытаясь развернуть контракт в сети Rinkeby через узел Infura.

Это контракт, который я хочу развернуть:

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 , консоль печатает первый Console.log функции Deploy, но после ожидания он говорит:

(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.

Я надеюсь, что вы можете помочь мне, ребята, извините, если это простая вещь, пытаясь научиться этому.

на вашем аккаунте есть эфиры?
@BadrBellaj Да, я положил несколько эфиров с faucet.rinkeby.io на свой аккаунт.
@Guillermo Как ты получил байт-код? У него есть «0x» в начале?
@Исмаэль Нет, это не так. Я получаю свой байт-код из моего compile.js, я экспортирую его через: module.exports = solc.compile(source, 1).contracts[':Inbox'];
@gbiatturi Можете ли вы попробовать добавить «0x» при отправке транзакции?.deploy({ data: '0x' + bytecode, arguments: ['Hi there!'] })
Решение, предложенное @Ismael, сработало для меня. Вопрос также является дубликатом этого вопроса
Пожалуйста, не добавляйте «спасибо» в качестве ответа. Вместо этого проголосуйте за ответы, которые вы считаете полезными. - Из обзора
@мирг. Точка принята, я обновлю свой ответ. Я сказал спасибо, потому что у меня так мало репутации, что мой голос не считается.

Ответы (1)

Как вы получили байт-код? У него есть «0x» в начале?

Можете ли вы попробовать добавить «0x» при отправке транзакции?

.deploy({ data: '0x' + bytecode, arguments: ['Hi there!'] })

Если вы поместите «0x» перед байт-кодом, он будет считать, что остальное находится в шестнадцатеричном формате, и оставит его в покое.

Если нет «0x», вся строка будет преобразована в шестнадцатеричный формат. Это плохо, потому что байт-код будет в два раза больше и совершенно неправильным.