Estoy tratando de seguir este flujo para acceder a un contrato que se ha extraído anteriormente:
var MyContract = new web3.eth.Contract(abiJSON);
// instantiate by address
var contractInstance = MyContract.at(address);
Desafortunadamente, contractInstance no funciona y obtengo un contract.at no es un error de función. Sospecho que tiene algo que ver con la versión más reciente de web3js, pero no estoy seguro de qué usar en su lugar.
Acabo de probar:
var deployed = new web3.eth.Contract(jsonAbi, address)
Pero luego, cuando intento llamar a mi función pública en el contrato, aparece un error:
TypeError: Cannot read property 'call' of undefined
Si miro deployed
todo, desde el abi hasta la dirección, parece que la obtención del contrato realmente funcionó.
at
El método está en desuso desde web3.js v1.0.x.
En su lugar, puede utilizar este formato:
var myContract = new web3.eth.Contract(abiInterface, contractAddress);
Dado un contrato implementado en address
, con ABI definido como abiJSON
, usando web3@1.0.0-beta.35
, el código correspondiente para llamar a una función especificada en ese contrato es el siguiente:
La creación de instancias MyContract
como se mencionó originalmente es correcta. Sin embargo, la configuración de la dirección del contrato ha cambiado en Web3 1.0 [1]: var MyContract = new web3.eth.Contract(abiJSON); MyContract.options.address = address;
Alternativamente, establecer la dirección durante la creación también es válido, como se hace correctamente en el código provisto: var deployed = new web3.eth.Contract(abiJSON, address);
Aparte de que la at()
función no está disponible, la función call
también ha cambiado en Web3 1.0 a lo siguiente [2]: MyContract.methods.myPublicFunction(<parameters>).call(<callback>);
Ejemplo usando la devolución de llamada: MyContract.methods.myPublicFunction().call(function(error, result){ console.error(error); console.log(result);
}
También es posible utilizar la Promesa devuelta como una forma de volver a leer los resultados.
[1] https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#options-address
[2] https://web3js.readthedocs.io/en/1.0/web3-eth-contract .html#methods-mymethod-call
¡Quédate súper!
/javi
Prashant Prabhakar Singh