¿Por qué llamar a .at() es mucho más lento que .deployed()?

Estoy tratando de crear una función de ayuda que me permita cambiar entre una .deployed()llamada a mi contrato y una con una dirección fija usando .at(). La segunda llamada (que se comenta en el código a continuación) es extremadamente lenta. Estoy haciendo alrededor de 1-2 llamadas por segundo (buscando un evento) contra una red de prueba local y mantiene Chrome vinculado al 100% usando el segundo método. El primer método es unas 20 veces más rápido. ¿Por qué es así y cómo lo soluciono?

getContractDeploy: function() {
    contract_deploy = App.contracts.CONTRACTX.deployed();
    //contract_deploy = App.contracts.CONTRACTX.at(contract_address);
  return contract_deploy;
},

Respuestas (1)

Si está usando truffle, entonces está usando truffle-contract para administrar contratos.

En cuanto a la implementación de at, realiza una llamada adicional web3.eth.getCodepara garantizar que haya un contrato en la dirección proporcionada.

La implementación de deployedes más simple y solo se basa en la información del artefacto del contrato.

No es una buena idea haber .at()llamado a la ruta activa, o al menos almacenar en caché el resultado si la dirección no cambia con frecuencia.

Si no desea el cheque, supongo que podría falsificar un artefacto json en la memoria y usarlo para instanciar el contrato con deployed()...