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
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 undefined
problema 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í .
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();
}
ryan d