Web3js

使用 Infura.io 通過網路瀏覽器連接到 web3 1.0 時出現問題

  • October 28, 2018

我正在嘗試通過網路瀏覽器連接到 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();
}

引用自:https://ethereum.stackexchange.com/questions/61332