¿Los métodos Truffle generan automáticamente excepciones de tiempo de espera?

¿Las funciones de la biblioteca de Solidity generan excepciones automáticamente si se produce un error de tiempo de espera ? Por ejemplo, ¿qué sucede si la llamada al método sendCoin() en esta página de documentación de Truffle se agota (nunca se completa)?:

http://truffleframework.com/docs/getting_started/contratos

Si es así, ¿dónde puedo leer sobre las mejores prácticas para estructurar su código de manejo de excepciones/errores para manejar los tiempos de espera y sobre las medidas de recuperación sugeridas que se deben tomar para este tipo específico de error?

Respuestas (1)

¿Las funciones de la biblioteca de Solidity generan excepciones automáticamente si se produce un error de tiempo de espera?

Si bien Truffle se embarca en un compilador, no es truffle el que ejecuta directamente el código compilado de solidity smart-contrats. Este es el papel de la EVM. Como EVM no es asíncrono por naturaleza de la red, parece imposible tener lo que podríamos llamar un timeout.

¿Qué sucede si la llamada al método sendCoin() en esta página de documentación de Truffle se agota (nunca se completa)?

Su pregunta podría ser más relevante que el manejo de la conexión a través de JavaScript y, en nuestro caso, el uso de bibliotecas de la suite truffle.

La documentación del artefacto de trufa y la documentación del contrato de trufa indican el uso promised functionspara la mayoría de las interacciones con la red. Puede utilizar theny catchpara gestionar su solicitud.

parece que las herramientas implementan algún tipo de tiempo de espera , así que sí. Después de 240 segundos, la solicitudpromiseseríarejectedy activaría elcatchmétodo asociado.

Si no fuera así, supongo que algunas promesas podrían atascarse para siempre y las siguientes instrucciones de su proceso JS nunca se ejecutarían.

Debajo de un fragmento simple para manejar una solicitud con truffle-contractla biblioteca:

const myEthAddress = '0x0...A';
const myContractAddress = '0x0...F';
const myContractABI = require('myContractABI.json');
myContractABI.setProvider(myWeb3Instance.currentProvider);

myContract.at(myContractAddress).then( instance => {
            return instance.mySolidityMethod(arg1, arg2, { from: myEthAddress, gas : "1200000" });  
        }).then( res => {
            //  success of transaction
            console.log(res);
            return true;

        }).catch( e => {
            // transaction failure, error or timeout
            console.log(err); 
            return false;
        });
    }

Por ahora, truffle-contractno implementa ningún indicador que pueda usarse para dividir el comportamiento entre el tiempo de espera y la respuesta de falla de transacción específica, lo que probablemente no se considere tan crítico como Ethereum, ya que se supone que una red es resistente.

Solo devuelve una cadena para la que podría intentar crear una coincidencia para dividir el proceso según el tiempo de espera o no, si cree que vale la pena.

Encontrará la cadena actual en el repositorio truffle-contract .

Gracias. ¿Alguna idea de si el desarrollador del contrato inteligente puede configurar el valor del tiempo de espera? Por ejemplo, ¿que sean 30 segundos en lugar de 240?
el desarrollador de contratos inteligentes no tiene nada que ver con eso, sería su desarrollador de JavaScript quien debería hacer las modificaciones. (S) tendría que bifurcar su propia versión de contrato de trufa ya que el valor de tiempo de espera está codificado en la biblioteca
Excelente, gracias. Al menos sé dónde está ese valor de tiempo de espera.