MyContract.methods.addData 不适用于 nodejs web3
MyContract.methods.addData doesn't work from nodejs web3
我正在通过 nodejs
和 web3
连接到我的 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 上运行,不会广播到区块链进行挖掘。任何状态的改变都需要使用send
:https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send
我正在通过 nodejs
和 web3
连接到我的 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 上运行,不会广播到区块链进行挖掘。任何状态的改变都需要使用send
:https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send