Лучшая практика: как обработать 120-секундный таймаут контрактных обратных вызовов?

С трюфелем мы получаем хорошую упаковку для контрактов. Но у него есть одна особенность, заставляющая меня болеть:

Пример из документации:

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-секундного периода?
  4. Как получить TX-хэш как можно быстрее? Отправляя с помощью MEW, я немедленно получаю ссылку на транзакцию на etherscan.io - даже если транзакция еще не распространена.

Особенно проблема № 1 вызывает у меня головную боль.

С уважением

1 ответ

Тайм-аут - вещь исключительно трюфельная. В сети не истекает время ожидания, и при разработке приложения с web3 или подобными обертками вы просто продолжаете слушать, пока tx не станет майнером, или страница не закроется.

Когда вы совершаете транзакцию в web3, вы получите txhash как часть ответа, даже до того, как он будет добыт. Вы можете отобразить это пользователю вместе с ожидающим статусом и использовать фильтры Web3, чтобы установить прослушиватель для обратного вызова при его добыче, не сталкиваясь с проблемами тайм-аута.

Другие вопросы по тегам