我在通过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个区块之内进行挖掘,等等。”
我为这个问题而疯狂,我已经尝试了一切。
有人有同样的问题吗?我该如何解决?或者如何将交易发送到智能合约?奇怪的是,我可以轻而易举地完成所有这些工作,因此我认为合同或网络都没有问题。