2017-08-14 3 views
2

Je tente de déployer un contrat intelligent localement en utilisant Web3, Truffle et Testrpc. J'ai utilisé Truffle pour compiler un contrat intelligent et avoir le code suivant pour extraire l'ABI et le bytecode. Dans le même script, je suis en train de déployer le contrat en utilisant web3.eth.contract.deploy (donné dans cette documentation: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#deploy) mais ont été obtenir cette erreur:Les demandes synchrones ne sont pas prises en charge lors du déploiement d'un contrat intelligent à l'aide de web3

Error: Synchronous requests are not supported 

Que dois-je faire pour se déplacer ce?

Voici le script de référence:

let fs = require("fs"); 
let Web3 = require('web3'); // https://www.npmjs.com/package/web3 
var TestRPC = require("ethereumjs-testrpc"); 

let web3 = new Web3(); 
web3.setProvider(TestRPC.provider()); 

let source = fs.readFileSync("../SmartContracts/build/contracts/TheContract.json"); 
let JSONObject = JSON.parse(source); 

// ABI and bytecode description as JSON structure 
let abi = JSONObject.abi 
let bytecode = JSONObject.unlinked_binary; 

// Create Contract proxy class 
let contractSettings = { 
    from: addr, 
    gas: 1000000, 
    data: bytecode 
} 
let SampleContract = new web3.eth.Contract(abi, contractSettings); 

let deploySettings = { 
    data: bytecode, 
    from: addr 
} 

SampleContract.deploy(deploySettings) 
    .send({ 
    from: addr, 
    gas: 1500000, 
    gasPrice: '30000000000000' 
    }) 
    .on('error', function(error){ 
    console.log("error"); 
    }) 
    .on('transactionHash', function(transactionHash){ 
    console.log("transaction hash"); 
    }) 
    .on('receipt', function(receipt){ 
    console.log("receipt") // contains the new contract address 
    }) 
    .on('confirmation', function(confirmationNumber, receipt){ 
    console.log("confirmation"); 
    }) 
    .then(function(newContractInstance){ 
    console.log(newContractInstance.options.address) // instance with the new contract address 
    }); 

console.log ("fini");

+0

Avez-vous trouvé une solution à cela? J'ai le même problème. –

Répondre

0

Je crois que c'est un problème avec l'utilisation de TestRPC en tant que fournisseur web3. Passer à une instance geth locale semblait avoir résolu le problème.

+0

Oui, je crois que vous avez raison. J'ai aussi eu ce problème et je crois que c'est juste un problème de version. Je l'ai ouvert ici: https://github.com/ethereum/web3.js/issues/1038 –