Desde una truffle develop
consola, ¿hay alguna forma de obtener la instancia del contrato desde la dirección del contrato?
Tengo un ec2 remoto con truffle/geth instalado y una instancia de desarrollo de truffle en ejecución. Desde una truffle develop
consola local, he implementado mis contratos en esa red remota (usando el truffle migrate --compile-all --reset --network remote_network_name
). Los contratos se implementaron con éxito y tengo una dirección donde se almacena el contrato.
En una truffle develop
consola en el servidor remoto, he intentado Contract_Name.deployed().then(function(instance) {app = instance; })
obtener la instancia, pero obtengo un Contract_Name is undefined
error.
Desde una truffle develop
consola en el servidor remoto, ¿hay alguna forma de obtener la instancia del contrato desde la dirección del contrato?
¿ Quizás algo como MyContract = new Contract.at("ContractAddress")
?
Hay una manera mucho más fácil cuando se usa trufa.
Primero incluye el artefacto del contrato, igual que cuando creas un nuevo contrato en truffle.
let MiContrato = artefactos.require("./MiContrato.sol");
luego en script:
let myContract = await MyContract.at('dirección de mi contrato');
De esta manera, no es necesario tomar el ABI de otro archivo, etc.
Personalmente, en Truffle, prefiero no tener que saber o necesitar la dirección de mi contrato implementado para obtener su instancia. Es posible que no recuerde la dirección de su contrato o que la dirección haya quedado enterrada en lo profundo de la terminal a medida que los nuevos contenidos empujan a los viejos hacia arriba.
El camino a seguir para obtener una instancia de contrato implementada sin conocer la dirección del contrato es usar el deployed()
método del contrato de la siguiente manera:
const deployedContractInstance = await MyContract.deployed()
¡Y eso es!
Ahora tiene acceso a todos los atributos y métodos que expone su contrato, por ejemplo, puede obtener la dirección simplemente haciendo deployedContractInstance.address
.
¡Resuelto! Necesita dos cosas para obtener la instancia de un contrato en una red remota:
truffle migrate --compile-all --reset --network remote_network_name
en su consola de desarrollo de truffle local, Truffle creará una representación de objeto json de su contrato en su build/
directorio local. Dentro de ese objeto json, puede encontrar la matriz ABI de su contrato.Con esos dos datos, puede ingresar a su consola de desarrollo de trufas en el servidor remoto y obtener una instancia de su contrato a través de estos comandos:
var MyContract = new web3.eth.Contract(abiArray);
var contractInstance = await MyContract.at(contractAddress);
NOTA: esto supone que está utilizando web3.js versión 0.2xx. Si está utilizando web3.js 1.0, consulte esta documentación .
ismael
build/
directorio con los artefactos de implementación en el servidor remoto.BreakingBadCódigo
ismael