Probleme beim Herstellen einer Verbindung zu web3 1.0 über einen Webbrowser mit Infura.io

Ich versuche, über einen Webbrowser eine Verbindung zu web3 1.0 herzustellen, sehe jedoch nicht viel Dokumentation für 1.0. Dieses Skript sagt, ich bin verbunden, aber ich denke, es ist die vorherige Version, da jedes Mal, wenn ich versuche, eine 1.0-Funktion auszuführen, die Funktion undefiniert ist -

<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()) });

Das wirft

 Uncaught TypeError: Cannot set property 'address' of undefined

Es funktioniert gut, wenn ich es lokal ausführe, also denke ich, dass es keine Verbindung zu Version 1.0 herstellt

Antworten (2)

Ich sehe, dass Sie anscheinend eine Lösung gefunden haben. Der in der Problembeschreibung vorgeschlagene Code ist jedoch nicht korrekt und könnte zu Ihrem Fehler geführt haben:

var AK = new web3.eth.contract(...)

Sollte eigentlich sein

var AK = new web3.eth.Contract(...)

Beachten Sie die Großschreibung, die erforderlich ist, da Sie hier tatsächlich eine Klasse instanziieren. Dies könnte zu dem undefinedProblem geführt haben, mit dem Sie konfrontiert waren. Außerdem können Sie Ihren Code vereinfachen (eine Zeile entfernen), indem Sie den Vertrag direkt unter Adresse laden:

var AK = new web3.eth.Contract(ABI, address)

Dadurch sparen Sie eine Zeile. Die vollständige Dokumentation finden Sie hier .

Ja, Sie haben Recht, die Kleinschreibung war für die ältere Version und die Großschreibung wird für 1.0 benötigt. Ich habe dies in meinem Skript behoben, aber vergessen, es hier zu aktualisieren. Toller Fang!

Es funktioniert jetzt

<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();
}