Web3 + Node.js与合同问题交互

时间:2018-09-23 10:53:10

标签: node.js ethereum smartcontracts web3 web3js

我在通过web3.js 1.0进行智能合约交互时遇到问题。 我已经用geth实现了一个私有网络,在其中我已经部署了一个智能合约,并且我将通过nodejs中的web3与它进行交互。我可以通过薄雾完全与之交互,但是我无法使用web3。特别是,我尝试使用

将交易发送到智能合约

myContract.methods.myMethod(param1, param2).send(options)

或者通过签署交易并发送原始交易,我收到交易哈希,并且看到交易已提交,但是交易从未被挖掘,并且收到消息:“错误:交易未在50个区块内被挖掘”。

合同方法如下:

contract MyContract{
    uint256 myVar1;
    uint256 myVar2;
    function setValues(uint256 value1, uint256 value2) public{
        myVar1 = value1;
        myVar2 = value2;
    }
}

我试图通过这种方式与合同进行互动:

var web3 = new Web3(new Web3.providers.WebsocketProvider('ws://127.0.0.1:8546');
var contract = new web3.eth.Contract(contractAbi, contractAddress, {
        from: myAddress //created by web3.eth.personal.newAccount(myPassword)
    });

var block = await web3.eth.getBlock("latest");
var gasLimit = block.gasLimit;
var gasPrice = await contract.methods.setValues(0,0).estimateGas();

contract.methods.setValues(0,0).send({
    gas: gasLimit,
    gasPrice: Math.round(gasPrice + gasPrice*20/100)  //I've tried with different value
})
  .on('transactionHash', function(hash){
      console.log("transactionHash",hash);  //I receive only this event
  })
  .on('confirmation', function(confirmationNumber, receipt){
      console.log("confirmation", confirmationNumber, receipt);
  })
  .on('receipt', function(receipt){
      console.log("receipt", receipt);
  })
  .on('error', function(error){
      console.log("error", error)
  });

我可以看到区块链,但是我再也看不到该交易,并且在挖掘了很多区块之后,我看到了错误:“交易未在50个区块之内进行挖掘,等等。”

我为这个问题而疯狂,我已经尝试了一切。

有人有同样的问题吗?我该如何解决?或者如何将交易发送到智能合约?奇怪的是,我可以轻而易举地完成所有这些工作,因此我认为合同或网络都没有问题。

0 个答案:

没有答案