私のシンプルな堅牢性スマートコントラクトをリンケビーネットワークに展開しようとしていますが、エラーが発生し続けます。
UnhandledPromiseRejectionWarning:エラー:契約コードを保存できませんでした。ガス制限を確認してください。
私の連帯コードはシンプルです
pragma solidity ^0.4.18;
contract Greetings{
string public message;
function Greetings(string initialMessage) public{
message = initialMessage;
}
function setMessage(string newMessage) public {
message = newMessage;
}
}
そして私の展開スクリプトは:
const HDWalletProvider = require('truffle-hdwallet-provider');
const Web3 = require('web3');
const { interface,bytecode} = require('./compile');
const provider = new HDWalletProvider(
'twelve Word mnemonic...',
'https://rinkeby.infura.io/GLm6McXWuaih4gqq8nTY'
);
const web3 = new Web3(provider);
const deploy = async () => {
accounts = await web3.eth.getAccounts();
console.log('attempting to deploy from account',accounts[0]);
const result = await new web3.eth.Contract(JSON.parse(interface))
.deploy({data:bytecode, arguments:['Hello World']})
.send({from: accounts[0], gas:'1000000'});
console.log('Contract deployed to', result.options.address);
};
deploy();
面白いことに、以前は正常にデプロイできましたが、新しいプロジェクトを作成して同じコードを再度実行すると、このエラーが発生します。助けてください!
まったく同じ問題がありました! 「truffle-hdwallet-provider」バージョン0.0.5のバグが原因のようです。 udemyコースでは、明らかに「0.0.3」を使用していました。
次の操作を行っても問題ない場合は、それでうまくいきました。
npm uninstall truffle-hdwallet-provider
npm install --save [email protected]
次に、正常に展開された同じ契約を実行しました。
幸運を!
この問題は、バイトコードのプレフィックスとして「0x」を追加することで解決できます。
.deploy({ data: '0x' + bytecode, arguments: ['Hi there!'] })
詳細は https://ethereum.stackexchange.com/a/47654 にあります。
バイトコードは一連のバイトではなく単一の数値として扱われていると思います。 data:bytecodeを送信する代わりに、次のことを試してください。
data:'0x0' + bytecode
バイトコード値を文字列として「保持」します