[英]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.