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?
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.
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.
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 abi
y address
y 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()
}
Sí.
MedianocheRelámpago
Fresa
MedianocheRelámpago