0

使用 Truffle,我们得到了一个很好的合约包装器。但它有一个让我头疼的功能:

文档中的示例:

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 秒的超时,因为他的交易仍然可能在几分钟后被挖掘(取决于 gas 价格和网络状况)?如果我们谈论的是以太币发送交易,这一点尤其重要。我不想通过声称交易失败(并建议他们重复)来欺骗我的用户。
  2. 它会在哪里出错?在带有第二个参数 ( function(result, error)) 或整个事物 ( .then( function(result) {...} ).catch(e)) 的回调中?我无法在本地使用 Ganache 对其进行测试。
  3. 您如何告知用户交易状态?在这 120 秒期间,您是在任何情况下都显示“交易成功”还是使用某种 throbber(这就是我现在正在考虑的)?
  4. 如何尽快获得 tx-hash?通过使用 MEW 发送,我立即获得了指向 etherscan.io 的交易链接——即使交易尚未传播。

特别是问题 #1 让我很头疼。

问候

4

1 回答 1

1

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

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

于 2018-07-29T22:10:17.153 回答