如何解决无法使用web3js从smartcontract读取数据
我无法从智能合约中读取数据
我这里有以下js脚本:(bcc-js.js)
var contract_address = "0x88e304D8638c31DaC3336917bbE4A152927198D8";
var contract_abi = '[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"name":"spender",{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},"name":"epoch","type":"uint256"},"name":"totalSupply","name":"LogRebase","name":"previousOwner","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","name":"from","name":"to","name":"Transfer",{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_",{"internalType":"address","name":"allowance","outputs":[{"internalType":"uint256",{"internalType":"uint256","name":"approve","outputs":[{"internalType":"bool","type":"bool"}],"name":"who","name":"balanceOf","name":"decimals","name":"subtractedValue","name":"decreaseAllowance","name":"addedValue","name":"increaseAllowance","name":"name","outputs":[{"internalType":"string","type":"string"}],{"inputs":[{"internalType":"uint256","name":"supplyDelta","name":"rebase","name":"renounceOwnership","outputs":[],"name":"symbol","name":"transfer","name":"transferFrom","name":"transferOwnership","type":"function"}]';
window.addEventListener('load',async () => {
// Modern dapp browsers...
if (window.ethereum) {
window.web3 = new Web3(ethereum);
try {
await ethereum.enable();
var accounts= await web3.eth.getAccounts();
var option={from: accounts[0] };
var contract = new web3.eth.Contract(contract_abi,contract_address);
var supply = await contract.methods.totalSupply().call();
//const agiAccountBalance = await agiContract.methods.balanceOf(accounts[0]).call();
document.getElementById('totalSupply').innerHTML = supply;
ethereum.on('accountsChanged',async (accounts) => {
await ethereum.enable();
var accounts= await web3.eth.getAccounts();
var option={from: accounts[0] };
var contract = new web3.eth.Contract(abi,address);
console.log(accounts[0]);
var supply = await contract.methods.totalSupply().call();
})
} catch (error) {
// User denied account access...
console.log(error)
}
}
// Legacy dapp browsers...
else if (window.web3) {
window.web3 = new Web3(web3.currentProvider);
// Acccounts always exposed
web3.eth.sendTransaction({/* ... */});
}
// Non-dapp browsers...
else {
document.getElementById('wallet').innerHTML = "Use '<a href='https://metamask.io/' target='_blank' >Metamask</a>' on a Desktop or use <a href='https://play.google.com/store/apps/details?id=com.wallet.crypto.trustapp&hl=en' target='_blank'>TrustWallet</a>' on a mobile";
}
});
我想在UI(index.html)上打印totalSupply
<div class="col-lg-3 col-md-6">
<div class="count-box">
<i class="icofont-simple-smile"></i>
<span data-toggle="counter-up"><p id="totalSupply">490</p></span>
<p>Addresses</p>
</div>
</div>
运行时出现此错误
TypeError: Cannot read property '0' of undefined
at bcc-js.js:14
inpage.js:1 Uncaught TypeError: t is not a function
at inpage.js:1
at inpage.js:1
at n (inpage.js:1)
at inpage.js:1
at inpage.js:1
at i (inpage.js:1)
at inpage.js:1
at inpage.js:1
at c (inpage.js:1)
at inpage.js:1
要在UI上看到totalSupply,我需要做什么?
文件js文件已正确连接到我的UI,我测试了另一个代码,该代码已正常工作
解决方法
您的问题可能来自第var accounts= await web3.eth.getAccounts();
行
应该改为var accounts= await window.web3.eth.getAccounts();
。
在您的代码中,account []未定义,因此var option={from: accounts[0] };
引发错误。
还有一点,“选项”是一个javascript保留关键字。例如,使用“选项”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。