¿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?
¿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 functions
para la mayoría de las interacciones con la red. Puede utilizar then
y catch
para gestionar su solicitud.
parece que las herramientas implementan algún tipo de tiempo de espera , así que sí. Después de 240 segundos, la solicitudpromise
seríarejected
y activaría elcatch
mé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-contract
la 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-contract
no 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 .
Roberto Oschler
Como uno
Roberto Oschler