Problemas para conectarse a web3 1.0 a través del navegador web usando Infura.io

Estoy tratando de conectarme a web3 1.0 a través de un navegador web, aunque no veo mucha documentación para 1.0. Este script dice que estoy conectado, pero creo que es la versión anterior, ya que cada vez que intento ejecutar una función 1.0, la función no está definida.

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

esto lanza

 Uncaught TypeError: Cannot set property 'address' of undefined

Funciona bien cuando lo ejecuto localmente, así que creo que no se conecta a la versión 1.0

Respuestas (2)

Veo que aparentemente encontraste una solución. Sin embargo, el código propuesto en la descripción del problema no es correcto y podría haber provocado su error:

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

en realidad debería ser

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

Tenga en cuenta las mayúsculas, que son necesarias ya que en realidad está instanciando una clase aquí. Esto podría haber llevado al undefinedproblema al que te enfrentaste. Además, puede simplificar su código (eliminar una línea) cargando el contrato en la dirección directamente:

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

Esto le ahorra una línea. Vea la documentación completa aquí .

sí, tiene razón, las minúsculas eran para la versión anterior y las mayúsculas son necesarias para la 1.0, arreglé esto en mi secuencia de comandos pero olvidé actualizarlo aquí. ¡Gran captura!

Ahora funciona

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