Синхронные запросы не поддерживаются при развертывании смарт-контракта с использованием web3

Я пытаюсь развернуть смарт-контракт локально, используя Web3, Truffle и Testrpc. Я использовал Truffle для компиляции смарт-контракта и получил следующий код для извлечения ABI и байт-кода. В том же скрипте я пытаюсь развернуть контракт, используя web3.eth.contract.deploy (приведенный в этой документации: https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#deploy), но возникает эта ошибка:

Error: Synchronous requests are not supported

Что мне делать, чтобы обойти это?

Вот сценарий для справки:

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 («закончено»);


person Bill Chen    schedule 14.08.2017    source источник
comment
Вы нашли решение этой проблемы? У меня точно такая же проблема.   -  person Leopold Joy    schedule 03.09.2017


Ответы (1)


Я считаю, что это проблема с использованием TestRPC в качестве провайдера web3. Переход на локальный экземпляр geth решил проблему.

person Bill Chen    schedule 10.09.2017
comment
Да, я считаю, что вы правы. У меня тоже была эта проблема, и я считаю, что это просто проблема с версией. Я открыл его здесь: github.com/ethereum/web3.js/issues/1038 < / а> - person Dan-Nolan; 13.09.2017