Web3js 1.0.x: contract.at no es una función

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 deployedtodo, desde el abi hasta la dirección, parece que la obtención del contrato realmente funcionó.

¿Cómo llamas a tu función pública?

Respuestas (2)

atEl 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 MyContractcomo 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 calltambié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