最佳实践:如何处理合约回调的120秒超时?

时间:2018-07-29 19:24:57

标签: ethereum web3 truffle consensys-truffle

有了松露,我们得到了一个很好的合同包装器。但这有一个让我头疼的功能:

来自documentation的示例:

MetaCoin.at(contract_address).then(function(instance) {
  coin = instance;
  return coin.sendCoin(account_two, 3, {from: account_one});
}).then(function(result) {
  // This code block will not be executed until truffle-contract has verified
  // the transaction has been processed and it is included in a mined block.
  // truffle-contract will error if the transaction hasn't been processed in 120 seconds.
})

这引起了四个问题:

  1. 如何防止用户在120秒后超时,因为几分钟后仍可能会进行交易(取决于汽油价格和网络状况)?如果我们正在谈论以太币发送交易,这一点尤其重要。我不想通过指控交易失败(并建议他们重复)来抢夺用户。
  2. 哪里出错?在带有第二个参数(function(result, error))或整个对象(.then( function(result) {...} ).catch(e))的回调中?我无法在Ganache上进行本地测试。
  3. 您如何通知用户交易状态?在任何情况下,您是否都显示了“交易成功”,还是在这120秒的时间内使用了某种类型的rob动功能(这就是我现在正在考虑的功能)?
  4. 如何尽可能快地获取tx哈希?通过MEW发送,即使交易尚未传播,我也立即获得到etherscan.io的交易链接。

特别是问题1使我头疼。

致谢

1 个答案:

答案 0 :(得分:1)

超时只是松露的事情。网络不会超时,并且当使用web3或类似的包装器开发应用程序时,您只需继续收听,直到tx成为矿工或页面关闭为止。

在web3中进行交易时,即使在被挖掘之前,您也会收到txhash作为响应的一部分。您可以将其与待处理状态一起显示给用户,并可以使用Web3的筛选器在挖掘时为回调设置侦听器,而不会遇到超时问题。