Con truffle-contract , todo lo que necesitaba hacer para obtener la instancia del contrato era algo como esto:
const getContract = require('truffle-contract')
const contractJSON = require('./MyContract.json')
const contract = getContract(contractJSON)
contract.setProvider(web3.currentProvider)
const instance = await contract.deployed()
return instance
MyContract.json
archivo es el artefacto de construcción de Truffle.Pero dado que la instancia creada por truffle-contract devuelve promesas en lugar del PromiEvent que vino con la versión 1.0 de Web3, decidí que quería usar la v1.0 Web3 normal para obtener la instancia del contrato. En otras palabras, ya no quería confiar en el contrato de trufa.
Desafortunadamente, no estoy tan familiarizado con la API de contrato en el nuevo 1.0 Web3. Este es mi intento:
const contract = new web3.eth.Contract(contractJSON.abi)
contract.methods.get().call()
La primera línea está bien, pero la segunda arroja el siguiente error:
Este objeto de contrato aún no tiene una dirección configurada, primero configure una dirección.
Veo que esto tiene sentido porque la documentación parece indicar que puede establecer una dirección para que sepa dónde encontrar la instancia implementada.
¿Significa esto que tendría que ir a mi Consola Truffle (también conocida como testrpc) para encontrar la dirección del contrato y copiar y pegar esto cada vez? Espero que no, porque con truffle-contrat, todo lo que tenía que hacer era incluir el archivo JSON y lo resolvió por mí.
¿Cómo se supone que debo obtener esta dirección y pasarla?
No pude encontrar dónde estaba almacenada la dirección porque el archivo JSON que tomé era una versión desactualizada. Fue uno que se generó antes de migrar a Truffle. Resulta que el archivo JSON se actualiza cada vez que Truffle ejecuta sus migraciones. Y con eso, agregará la dirección de la instancia de contrato implementada.
Tuve que profundizar en sus documentos para encontrarlo aquí: https://github.com/trufflesuite/truffle/tree/develop/packages/truffle-contract-schema#networks
A partir de ahí, fue fácil encontrar la dirección implementada previamente. El código final se parece a esto:
const networkId = await web3.eth.net.getId()
const deployedAddress = contractJSON.networks[networkId].address
const contract = new web3.eth.Contract(contractJSON.abi, deployedAddress)
usuario19510
MyContract.json
debe incluir la dirección, por lo que puede leerlo desde allí si lo desea.adrianmc
adrianmc
usuario19510
build/contracts
. Después de una búsqueda rápida, me parece que ahí es donde deberías encontrar la dirección. Yo no uso Truffle, así que no tengo nada útil para hurgar, lo siento.adrianmc
adrianmc