es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MetaMask – Error RPC: ejecución revertida {código: -32000, mensaje: ‘ejecución revertida’} al intentar conectarse al contrato inteligente.

He implementado un contrato inteligente en una red de prueba pública y ahora estoy intentando conectarme a él desde el frontend utilizando ethers js. Pero cuando intento obtener el valor, me muestra los siguientes errores en la consola:

imagen

Estoy utilizando Angular para el frontend y aquí está el código que he escrito:

declare let window: any;
import { Component, OnInit } from '@angular/core';
import { ethers } from 'ethers';
import addresses from '../../environment/contract-address.json';
import Election from '../../blockchain/artifacts/blockchain/contracts/Election.sol/Election.json';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
  title = 'angvote';
  public signer: any;
  public electionContract: any;
  public candidate : any;
  public candidatesList:string[] | undefined;
  constructor(){}

  async ngOnInit(){
    const provider = new ethers.providers.Web3Provider(window.ethereum);
    window.ethereum.enable()

    provider.on("network",(newNetwork: any, oldNetwork: any)=>{
      if (oldNetwork){
        window.location.reload();
      }
    });

    this.signer = provider.getSigner();

    if(await this.signer.getChainId() !== 4){
      alert("¡Por favor cambia a la red Rinkeby!")
    }

    this.electionContract = new ethers.Contract(addresses.electioncontract,Election.abi,this.signer);
    this.candidate = await this.electionContract.candidatesCount();
  }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error en la consola indica que la dirección del contrato no está definida. Esto podría ser debido a varias razones. Una posibilidad es que la dirección del contrato no esté configurada correctamente en el archivo contract-address.json. Otra posibilidad es que el contrato no se haya desplegado correctamente en la testnet.

    Para solucionar este problema, puedes intentar los siguientes pasos:

    1. Verificar la dirección del contrato: Asegúrate de que la dirección del contrato en el archivo contract-address.json coincida con la dirección del contrato desplegado en la testnet. Puedes verificar la dirección del contrato revisando el hash de transacción del despliegue del contrato en un explorador como Etherscan.
    2. Verificar la red: Asegúrate de que estés conectado a la red correcta. En este caso, debes estar conectado a la red de Rinkeby. Puedes verificar esto llamando a await this.signer.getChainId() y comparando el resultado con el ID de red de Rinkeby (4).

    3. Verificar el ABI: Asegúrate de que el ABI del contrato sea correcto. Puedes verificar esto comparando el ABI en el archivo Election.json con el ABI real del contrato desplegado en la testnet.

    4. Verificar el proveedor: Asegúrate de que el proveedor esté configurado correctamente. En este caso, estás usando new ethers.providers.Web3Provider(window.ethereum). Asegúrate de que window.ethereum esté definido y disponible.

    Si ninguno de estos pasos soluciona el problema, es posible que necesites proporcionar más información sobre el despliegue y configuración del contrato y el código front-end.

Comments are closed.