J'essaie de déployer mon contrat intelligent simple solidité sur le réseau Rinkeby, mais je reçois toujours l'erreur:
UnhandledPromiseRejectionWarning: Erreur: Le code de contrat n'a pas pu être stocké, veuillez vérifier votre limite de gaz.
Mon code de solidité est simple
pragma solidity ^0.4.18;
contract Greetings{
string public message;
function Greetings(string initialMessage) public{
message = initialMessage;
}
function setMessage(string newMessage) public {
message = newMessage;
}
}
et mon script de déploiement est:
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();
Le plus drôle, c'est que je pouvais déployer avec succès, mais quand j'ai créé un nouveau projet et que j'ai refait le même code, je reçois cette erreur maintenant. Aidez-moi!
Eu exactement le même problème! Il semble que cela soit dû au bogue de la version "0.0.5 de" truffle-hdwallet-provider ". Pendant le cours udemy, il utilisait apparemment "0.0.3".
Si vous procédez comme suit, cela a fonctionné pour moi.
npm uninstall truffle-hdwallet-provider
npm install --save [email protected]
Ensuite, j'ai exécuté le même contrat qui a été déployé avec succès.
Bonne chance!
Ce problème peut être résolu en ajoutant le '0x' comme préfixe du bytecode:
.deploy({ data: '0x' + bytecode, arguments: ['Hi there!'] })
Plus d'informations sur https://ethereum.stackexchange.com/a/47654 .
Je crois que le bytecode est traité comme un numéro unique plutôt que comme une série d'octets. Au lieu de soumettre des données: bytecode, essayez:
data:'0x0' + bytecode
il "conservera" la valeur du bytecode sous forme de chaîne