Как метамаска управляет несколькими транзакциями с одним и тем же адресом?

Я изо всех сил пытаюсь реализовать функциональность, которая отправляет несколько транзакций с использованием одного и того же адреса. здесь адрес отправителя одинаков, но адреса получателя разные. Когда я провел исследование по этому вопросу, я обнаружил, что есть два способа реализовать этот подход:

  • Выполнять все транзакции параллельно, увеличивая одноразовый номер один за другим. Вызовите метод getTransactionCount один раз и увеличьте его счетчик для всех последующих транзакций.

  • Реализуйте очередь, в которой вторая транзакция не выполняется до тех пор, пока не будет добыта первая транзакция.

Когда я проанализировал два вышеупомянутых подхода, я узнал о некоторых проблемах:

  • В подходе 1 может быть возможно, что если одна транзакция завершится неудачно, то все транзакции после этого одноразового номера станут неудачными. Но как метамаска справляется с такими случаями? потому что метамаски также делают то же самое, и мы можем выполнять транзакции одну за другой.

  • В подходе 2 в процессе очереди одна транзакция зависит от предыдущей транзакции и не инициируется до тех пор, пока первая не будет завершена.

По мере того, как я углублялся в этот подход, я обнаружил, что лучшим подходом будет второй. (процесс очереди)

Но я остановился на следующих случаях при реализации второго подхода:

  • Поскольку мы не знаем точное время транзакции, добытой в блоке, как определить временной интервал, чтобы проверить, добыт ли блок транзакции или нет. (Я знаю, что мы используем ropsten.etherscan для проверки статуса транзакции)

  • Если мы даем временной интервал 15 сек. тогда вполне возможно, что транзакция не обрабатывалась в течение 1 часа, и сервер был занят отправкой запроса.

  • Бывает такой случай, когда одна транзакция не могла майнить до 2-3 дней по каким-то причинам. В этом случае, что нам нужно сделать для перезаписи этой транзакции. Каков наилучший подход к этому?

Ответы (1)

Относительно второго подхода:

  • Выбор временного интервала зависит от желаемого времени реакции.
  • Согласно документации etherscan API, максимальная скорость составляет 5 запросов в секунду: временной интервал в 15 секунд вполне разумен.
  • Перезапись транзакции выполняется простым созданием транзакции с тем же одноразовым номером. Повышение цены на газ стимулирует майнеров добывать его вместо старого.

Однако вы не указали причины своего предпочтения подхода 2: я не вижу явного преимущества одного подхода над другим.

В случае подхода 1: если транзакция терпит неудачу (например, из-за того, что было предоставлено недостаточно газа), эта транзакция будет добыта в блоке, а следующие транзакции будут выполняться нормально. Вы, кажется, путаете неудачные и ожидающие транзакции.