[英]MyContract.methods.addData doesn't work from nodejs web3
我连接到我的Solidity
,通过合同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
测试了这种联系方式,效果很好,可以添加值,并且可以看到它们。 但是我需要从nodejs
进行此nodejs
,到目前为止它仍然无法正常工作。
在下面的代码中使用call
是不正确的。
myContract.methods.add(0, web3.utils.asciiToHex("some string")).call()
.then(receipt => {
console.log(" added? " + receipt); // returns [object Object]
});
这是一个常见的错误。 call
用于在本地VM上运行功能,并且不会广播到区块链进行挖掘。 状态的任何更改都需要使用send
: https : //web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.