我是 Solidity 的新手,我正在通过一个简单的 web 应用程序来探索它。我有一个 Web 应用程序,它接受一些详细信息和一个按钮,应将详细信息部署到智能合约创建的块中。详细信息已从 remix IDE 成功部署,但通过 Web 应用程序进入时出现以下异常。
inpage.js:1 Uncaught Error: Invalid number of arguments to Solidity function
at Object.InvalidNumberOfSolidityArgs (inpage.js:1)
at u.validateArgs (inpage.js:1)
at u.toPayload (inpage.js:1)
at u.sendTransaction (inpage.js:1)
at u.execute (inpage.js:1)
at HTMLButtonElement.<anonymous> ((index):231)
at HTMLButtonElement.dispatch (jquery-3.2.1.slim.min.js:3)
at HTMLButtonElement.q.handle (jquery-3.2.1.slim.min.js:3)
在网上冲浪时,我发现这可能是因为web3.eth.accounts[0]
返回“未定义”,这就是我的情况。
相反,虽然在web3.eth
控制台上显示它确实在索引 0 处显示帐户和MetaMask地址。我读到它可能是因为web3js 1.0
MetaMask 可能还不完全支持,但我无法找到解决方案。
还有如何检查我正在使用的 web3 的版本,以及如何在必要时将其降级。
这就是我尝试访问的方式web3.eth.accounts[0]
web3.eth.defaultAccount = web3.eth.accounts[0];
console.log(web3.eth.defaultAccount); // returns undefined
我也尝试了以下方法,但无济于事:
var myAccount;
web3.eth.getAccounts(function(err,res){
if(!err)
{
myAccount = res;
console.log(myAccount);
}
});
这将返回帐户地址,但 myAccount 变量在 getAccounts 方法之外使用时再次返回“未定义”。在 if 部分中编写进一步的逻辑也无助于给出上述异常。
我已经尝试了一些事情,但无法找到解决方案。如果我有任何误解,请指导和纠正。
编辑
你可以在这里找到源代码。 https://github.com/anishsamant/Solidity-Demo
请参阅Courses.sol以获取 Solidity 文件 请参阅index.html以获取 Web 应用程序。