Web3js
使用 Infura.io 通過網路瀏覽器連接到 web3 1.0 時出現問題
我正在嘗試通過網路瀏覽器連接到 web3 1.0,但我沒有看到太多 1.0 的文件。該腳本說我已連接,但我認為它是以前的版本,因為每當我嘗試執行 1.0 函式時,我得到的函式是未定義的 -
<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.34/dist/web3.min.js"></script> <script> function initweb3 () { web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/My Api Key")); } window.addEventListener('load',initweb3); if(web3.isConnected()) { alert("Web3 Connected!"); } else { alert("Web3 Not Conected"); } var abi = JSON.parse('[{"MY ABI"}]') var AK = new web3.eth.contract(abi); // Set Contract Address AK.options.address = "Contract Address"; AK.methods.balanceOf("Address to get balance of").call().then(function(balance) { alert("Balance is " + balance.toString()) });
這拋出
Uncaught TypeError: Cannot set property 'address' of undefined
當我在本地執行時它工作正常,所以我認為它沒有連接到 1.0 版
我看到您顯然找到了解決方案。但是,問題描述中提出的程式碼不正確,可能導致您的錯誤:
var AK = new web3.eth.contract(...)
實際上應該是
var AK = new web3.eth.Contract(...)
請注意大寫字母,這是必要的,因為您實際上是在此處實例化一個類。這可能導致
undefined
您面臨的問題。此外,您可以通過直接在地址載入合約來簡化程式碼(刪除一行):var AK = new web3.eth.Contract(ABI, address)
這為您節省了一行。請參閱此處的完整文件。
現在可以使用
<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js@1.0.0-beta.34/dist/web3.min.js"></script>
var web3 = new Web3(); if(web3.setProvider(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/MY API KEY'))){ web3.eth.net.isListening(); }