Metamask: cómo acceder/llamar a las funciones del contrato desplegado usando Metamask

Estoy aprendiendo Solidez. He configurado Metamask, truffle y testrpc. Puedo enviar ether de una cuenta a otra a través de metamask. Pero quiero que Metamask acceda a mi contrato implementado y llame a mis funciones de contrato.

Pregunta : ¿Puedo probar e interactuar con mi contrato implementado usando metamask?

Respuestas (5)

No usar Metamask solo, pero puedes combinarlo con otras herramientas. Una de esas herramientas es MyEtherWallet ; vaya a la pestaña "Contratos", ingrese la dirección del contrato y ABI, haga clic en Acceder y luego elija "Metamask/Mist" como el medio por el cual desea acceder a su billetera. Luego, MyEtherWallet le brindará la interfaz de usuario para construir la transacción y, cuando sea el momento de transmitirla, le brindará una ventana emergente de Metamask para firmarla y transmitirla.

gracias por la respuesta. ¿Puedo usar "MyEtherWallet" para probar contratos?
En la parte superior derecha de MyEtherWallet hay un menú desplegable para seleccionar a qué nodo Ethereum conectarse. Si tiene un servidor de red de prueba privado que se ejecuta con su contrato de prueba, puede elegir "Personalizado" de esa lista e ingresar la dirección de su nodo local para conectarse directamente a él para la prueba.
@MidnightLightning No estoy seguro de entender lo que está sucediendo. ¿Significa esto que está utilizando MEW para ayudarlo a firmar y autorizar el contrato para permitir que Metamask se ejecute en su nombre?
@Strawberry, MEW es una herramienta que ensambla la transacción; armando un mensaje que diga "Soy la cuenta A y quiero ejecutar la función B en el contrato C". Formatear la transacción correctamente es en lo que MEW es bueno. Pero luego, para que la cadena de bloques apruebe esa transacción, se debe proporcionar una prueba de que la "Cuenta A" realmente la aprobó (firma). Entonces, MEW le pregunta a Metamask "¿podría firmar esta transacción que creé?", y Metamask muestra un cuadro de diálogo que indica "Este sitio quiere que firme en su nombre, ¿es genial?". ¿Eso tiene sentido?

Metamask es excelente para las interacciones del lado del cliente con contratos inteligentes y sus funciones. Si está instalado, puede acceder a la web3 que se inyecta en su navegador:

// Get the contract instance using your contract's abi and address:
const contractInstance = web3.eth.contract(abi).at(contractAddress);

// Call a function of the contract:
contractInstance.someFunction({ from: sender, value: someValue, gas: limit },
  (err, res) => { /** do something with results **/ });

Incluso puede acceder a la cuenta actualmente seleccionada en metamask con web3.eth.accounts[0].

Esto requerirá algo de desarrollo frontal, pero es bastante sencillo.

La otra alternativa es usar Ethereum Wallet > Contracts > Watch Contract. Nuevamente, ingrese la dirección del contrato y abi, y podrá acceder a todas las funciones del contrato a través de la interfaz de usuario de Ethereum Wallet.

Gracias por la respuesta. Su respuesta es buena, ¿podría elaborarla un poco más y decirme cómo encajan estos componentes? Como soy un principiante y sé cómo escribir algunos contratos inteligentes y probarlo. Pero no me queda claro cómo encajan los diferentes componentes en el mundo real (no solo para las pruebas). Por ejemplo, cómo funcionan juntos MetaMask, web3, truffle, testrpc, etc. Sé que testrpc es solo para pruebas, y estoy usando todos los componentes anteriores (excepto web3) para las pruebas, pero me gustaría profundizar un poco más, es decir, el desarrollo frontal. Gracias.
web3 no es compatible con Metamask desde enero de 2021, por lo que su respuesta no funciona, consulte: docs.metamask.io/guide/…

Ejemplo:

web3 = new Web3(web3.currentProvider);
  let myContract = new web3.eth.Contract(abi, address);
  let amount = 1;
  amount = web3.utils.toWei(amount.toString(), 'ether');
  let response = await myContract.methods
    .createPayment(1, address)  //function in contract
    .send({
      from: window.web3.currentProvider.selectedAddress,
      to: address,
      value: amount,
      gasPrice: '20000000000' 
    });
  console.log("response: ", response);

MyEtherWallet y Mist wallet ahora están obsoletos .
Una de las mejores alternativas a estos es la billetera MyCrypto . También lo recomiendan los desarrolladores de MEW y mist . Tiene una interfaz de usuario web simple y también hay versiones de escritorio disponibles.

Esto funciona en 2022, cambie el abiy addressy póngalo en su archivo HTML:

    async function loadWeb3() {
      if (window.ethereum) {
        window.web3 = new Web3(window.ethereum);
        window.ethereum.enable();
      }
    }

    async function loadContract() {
      let abi = [] // your abi here
      let address = "0xa1b2c3d4..."  // your contract address here
      return await new window.web3.eth.Contract(abi, address);
    }
    async function getCurrentAccount() {
      const accounts = await ethereum.request({ method: 'eth_requestAccounts' });
      return accounts[0];
    }

    async function run() {
      await loadWeb3();
      window.contract = await loadContract();
      const account = await getCurrentAccount();
      let result = await window.contract.methods.mint().send({ from: account });
    }

    if (typeof window.ethereum !== 'undefined') {
      run()
    }

consulte: https://ethereum.stackexchange.com/a/131437/30431