我有一份合同是做一次恢复:
function recover(bytes32 h, uint8 v, bytes32 r, bytes32 s) public returns (address) {
return ecrecover(h, v, r, s);
}它在我的松露单元测试中很好。
console.log(await ecdsa.recover.call('0xbec921276c8067fe0c82def3e5ecfd8447f1961bc85768c2a56e6bd26d3c0c53', '0x1b', '0x6c5b9b4deb51a4733784657abac3e1dcef04086979a500397456b948981ccbc1', '0x2944200fb10074295baa04db6c048dc120ee9f3b48a42cbe4223242f07cc8e85')); 但是当我使用web3@1.0.0和NodeJs中的合约ABI时,我会收到一个错误:
const contract = new this.web3.eth.Contract(this.abi.abi, this.abi.networks['5777'].address);
await contract.methods.recover.call('0xbec921276c8067fe0c82def3e5ecfd8447f1961bc85768c2a56e6bd26d3c0c53', '0x1b', '0x6c5b9b4deb51a4733784657abac3e1dcef04086979a500397456b948981ccbc1', '0x2944200fb10074295baa04db6c048dc120ee9f3b48a42cbe4223242f07cc8e85', (err, result) => { console.log(err); console.log(result);});
{ Error: types/values length mismatch (count={"types":4,"values":0}, value={"types":[{"name":"h","type":"bytes32"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"values":[]}, version=4.0.27)发布于 2019-04-23 20:52:41
使用web3 v1,您应该使用方法而不是调用(https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-call)传递参数。
像这样的东西应该能起作用
await contract.methods.recover(
'0xbec921276c8067fe0c82def3e5ecfd8447f1961bc85768c2a56e6bd26d3c0c53',
'0x1b',
'0x6c5b9b4deb51a4733784657abac3e1dcef04086979a500397456b948981ccbc1',
'0x2944200fb10074295baa04db6c048dc120ee9f3b48a42cbe4223242f07cc8e85'
).call((err, result) => {
console.log(err);
console.log(result);
});https://ethereum.stackexchange.com/questions/69870
复制相似问题