MyContract.methods.addData在Node.js Web3中不起作用

时间:2018-08-08 13:27:07

标签: node.js ethereum solidity web3 web3js

我正在通过/etc/hostsSolidity连接到我的nodejs合同。我能够读取信息,但是在尝试将元素添加到数组时不会添加。

这是我的代码。

web3方法:

solidity

我的bytes32[20] bytesArray; function add(uint8 id, bytes32 s) public { bytesArray[id] = s; } 文件中的呼叫:

nodejs

添加值:

var myContractABI = <the_abi>;
var contractAddress = '0x...';
var myContract = new web3.eth.Contract(myContractABI, contractAddress);
myContract.setProvider(web3.currentProvider);

然后获取值:

myContract.methods.add(0, web3.utils.asciiToHex("some string")).call()
  .then(receipt => {
      console.log(" added? " + receipt); // returns [object Object]
});

该数组返回,但其所有值仍为空,myContract.methods.getArray().call() .then(receipt => { console.log("full array " + receipt); });

我用0x0000000000000000000000000000000000000000000000000000000000000000测试了此联系方式,它工作正常,添加了值,我可以看到它们。但是我需要从Remix开始执行此操作,到目前为止,该操作无效。

1 个答案:

答案 0 :(得分:1)

在下面的代码中使用call是错误的。

myContract.methods.add(0, web3.utils.asciiToHex("some string")).call()
  .then(receipt => {
      console.log(" added? " + receipt); // returns [object Object]
});

这是一个常见错误。 call用于在本地VM上运行功能,并且不会广播到区块链进行挖掘。状态的任何更改都需要使用sendhttps://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send