MyContract.methods.addData 不适用于 nodejs web3

MyContract.methods.addData doesn't work from nodejs web3

我正在通过 nodejsweb3 连接到我的 Solidity 合同。我能够读取信息,但在尝试将元素添加到数组时未添加。

这是我的代码。

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 测试了这个联系人,它工作正常,添加了值并且我能够看到它们。但我需要从 nodejs 执行此操作,但到目前为止它还没有用。

在下面的代码中使用 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