我想通过智能合约将参数发送给函数,但尝试了不同的方法,但是它总是给我错误。
我的固定文件是
pragma solidity ^0.4.18;
import "./ConvertLib.sol";
contract Check {
function multiply(uint a) public pure returns(uint){
return a*a;
}
}
我成功连接到Web3,并创建了合约实例inst。当我尝试执行功能
console.log(inst.multiply.call()(function(err,result){console.log("r-->"+result);}));
它给我错误
Invalid number of arguments to Solidity function
如果我添加这样的参数
console.log(inst.multiply(2).call()(function(err,result){console.log("r-->"+result);}));
或这样
console.log(inst.multiply.call(2)(function(err,result){console.log("r-->"+result);}));
它给我这个错误
Error: The MetaMask Web3 object does not support synchronous methods like eth_call without a callback parameter.
我正在使用Web3版本0.20.3
答案 0 :(得分:0)
我在Hello World合同中遇到了同样的问题,拔了好一会儿之后,我尝试了以下方法:
console.log(inst.multiply(2, function(err,result){console.log("r-->"+result);}));
也就是说,将回调函数作为最后一个参数传递。如文档中所述,“默认情况下,所有功能(Solidity的功能)都使用同步HTTP请求。如果要发出异步请求,则可以将可选的回调作为最后一个参数传递给大多数函数。所有回调都使用错误第一个回调样式:“
web3.eth.getBlock(48, function(error, result){
if(!error)
console.log(JSON.stringify(result));
else
console.error(error);
})
答案 1 :(得分:0)
尝试这样的事情:
inst.methods [multiply](2).call()。then(data => ...)。catch(err => {...})