Статьи

Сколько времени может длиться транзакция в сети Ethereum?

При использовании любой платежной системы одним из важнейших показателей эффективности является значение максимальной скорости проведения транзакций. Одними из лучших в этом контексте являются американские платежные системы Visa и Mastercard. В них транзакции производятся почти мгновенно, например, пропускная способность системы Visa превышает 65,000 операций в секунду.

Возможности платежной системы Visa согласно их рекламе в «Visa Fact Sheet» (информация за 2018 год):

На практике процесс проведения транзакций в платежных системах типа Visa/Mastercard занимает намного больше времени, что связано с необходимостью проведения всех этапов проведения банковского платежа (авторизация клиента, собственно транзакция и окончательное проведение платежа, занимающее до несколько дней).

Этапы проведения платежа Mastercard:

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

Иллюстрация упрощенного механизма прохождения биткоин-транзакции, при котором используется transaction pool (по другому называется mempool):

Прохождение транзакции, созданной в кошельке MyEtherWallet в сети Etehreum (необработанные транзакции находятся в одноименном пуле):

Возможности криптовалютных платежных систем не безграничны. Они используются в качестве платежного средства всего несколько лет (биткоин появился только в январе 2009 года), поэтому не лишены недостатков.

Самыми большими проблемами популярных криптовалют являются: низкая скорость проведения транзакций (малая пропускная способность) и высокие комиссии при большой загруженности сети.

В сети Etehreum средняя скорость прохождения транзакции в мае 2021 года не достигает и пары десятков платежей в секунду, в сети биктоин — еще меньше.

За сутки в сети Etehreum обрабатывается более 1.7 млн. транзакций (19.7 tx/s):

Сравнение пропускной способности разных платежных систем (Visa в настоящее время имеет еще большую скорость — не менее 65 тысяч транзакций в секунду ):

Проблемы с криптовалютными транзакциями

В связи с постоянным притоком новых пользователей, использующих авторитетные цифровые активы (например, биткоин, Ethereum и т.д.), все сильнее проявляется малая пропускная способность их сетей (низкая масштабируемость). Малое быстродействие приводит к замедлению времени проведения транзакций, а также увеличению издержек, связанных с оплатой транзакций.

Чтобы избежать зависания транзакций нужно устанавливать размер комиссии (Txn Fee) на уровне, соответствующем загруженности сети. Соответствующие данные для сети Ethereum есть на страницах с данными по Gas Price, например, на Ethereum Gas Tracker сайта Etherscan. Здесь приводятся данные по прогнозируемому времени подтверждения транзакции с минимальным, средним и высоким уровнем оплаты:

В большинстве случаев установка среднего значения fee в кошельке обеспечивает достаточно быстрое проведение транзакции.

Для биткоина при выборе размера комиссии можно воспользоваться данными с авторитетных Bitcoin Fee-калькуляторов (подробнее в статье «Как уменьшить стоимость транзакции в сети Bitcoin»).

Иногда происходят анекдотические ситуации, когда пользователи случайно или умышленно (например, хакеры мстят недобросовестной бирже) устанавливают размер комиссии больше суммы самой транзакции. При этом сумма потраченных на оплату комиссии сети может достигать фантастических значений (некоторые примеры таких случаев рассматриваются в статье «Никогда такого не было и вот опять: перевод одного доллара с комиссией в 80 тысяч»). Для борьбы с этим в сети Ethereum были внедрены некоторые обновления во время хардфорка Berlin, а также планируется реализация ряда других изменений.

О размере комиссии для проведения транзакций в сети Etehereum

В большинстве случаев значение комиссии, которое автоматически устанавливает кошелек, например, MyEtherWallet, обеспечивает приемлемое время проведения транзакции. Иногда все же стоит внимательнее изучить текущий размер комиссии на одном из онлайн-ресурсов (например, Etherscan) и подкорректировать ее, сэкономив средства (уменьшив размер потраченного газа) или обеспечить ее быстрое включение в блокчейн (увеличить gas fee).

Если выставить размер газа меньше рекомендуемого, появится риск попадания транзакции в длинную очередь ожидающих (иначе говоря, попасть в мемпул (Mempool), TX-Pool или TX-Queue). Это происходит из-за того, что майнеры в первую очередь обрабатывают транзакции с наибольшим размером комиссии, которая сейчас полностью отдается им. Ситуация изменится после реализации обновления EIP-1559, но пока дела обстоят именно так.

Несовершенство механизма оплаты транзакций приводит к тому, что при слишком низкой комиссии, выставленной пользователем, платеж долгое время не обрабатывается, так как транзакция-кандидат бродит от одного узла к другому, не обрабатываясь (не включается в блок):

Низкая пропускная способность сети Ethereum приводит к огромным задержкам в виде десятков и сотен тысяч «зависших» транзакций:

Учитывая пропускную способность сети (16.5 txs/s после хардфорка Berlin), время обработки всех pending-транзакций в приведенном выше примере займет не менее 180,000/16.5=10,909 секунд (три часа), даже если в Mempool не будут добавляться новые транзакции. На практике зависшая транзакция может «гулять» по сети и более длительный период времени.

Пример Ethereum-транзакции, ожидающей подтверждения более пяти дней:

Что делать для отмены зависших (pending) транзакций в сети Ethereum можно узнать в статье «Как отменить или заменить транзакцию, зависшую в сети Ethereum».

При работе с криптовалютами желательно использовать холодные кошельки, например, MyEtherWallet для Ethereum (подробнее в статье «Работа с кошельком MEW в «холодном» режиме») и Electrum для Bitcoin (подробнее в статье «Использование кошелька Electrum для холодного хранения биткоинов»).

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

От чего зависит время прохождения транзакции в сети Ethereum и как его оптимизировать?

Подписанная кошельком транзакция в сети Etehreum подтверждается и включается в блокчейн несколькими путями, большинство из которых предусматривает пребывание в течение некоторого времени в статусе ожидания (pending). Если сеть мало загружена и выставлен достаточный размер комиссии, то транзакция может быть включена в ближайший блок и проведена в течение нескольких секунд. В противном случае ее ожидает долгое «пребывание в нирване».

Возможные пути подтверждения Ethereum-транзакции:

Время прохождения транзакций в сетях Ethereum, Bitcoin (а также у ряда других криптовалют со схожими блокчейнами) в основном зависит от двух факторов:

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

Частота генерации блоков в PoW-блокчейнах регулируется с помощью изменения сложности майнинга. В сети биткоина целевое время между блоками равно 10 минутам, в сети Ethereum — 13-15 секунд. Чем меньше время между блоками, тем больше пропускная способность сети. Время между блоками не может быть слишком малым из-за проблем с обеспечением синхронной работы такой сети на глобальном уровне.

Количество информации, которую может вместить один блок ограничено его (максимально возможным) размером и набором включаемых в него данных. Таким образом, для увеличения быстродействия (без сокращения времени между блоками) проще всего увеличить размер блока. Кроме того, увеличить количество обрабатываемых транзакций можно за счет оптимизации, удаления и/или вынесения определенной служебной информации за пределы блока. Такая хитрость (вынесение подписей транзакций вне содержимого основного блока) используется в сети биткоин после обновления SegWit 24.08.2017 года. После форка Taproot уменьшиться количество подписей в одном блоке, что дополнительно увеличит быстродействие BTC-транзакций и снизит комиссии.

Еще одним способом увеличения быстродействия является разгрузка сети путем введения в систему дополнительных каналов связи, позволяющих осуществлять практически мгновенное проведение платежей, например, технология Lighting Network. В основной сети биткоина заранее создаются хеш-контракты блокировки сумм, которые затем используются для мгновенного проведения транзакций с помощью долговых расписок через дополнительный канал связи с помощью Lightning-протокола. Блокчейн биткоина при этом используется только для фиксации факта выделения средств в выделенный канал, а также для фиксации итогового баланса после закрытия канала.

В сети Ethereum значительное увеличение масштабируемости произойдет после добавления в сеть дополнительных цепочек, связанных с основным блокчейном. Развертывание сети с PoW и PoS-сегментами полностью решит проблему быстродействия, но пока у Ethereum используется только PoW-блокчейн, pending-транзакции будут успешно существовать.

В PoW-сети Ethereum майнинг-пулы (либо крупные соло-майнеры, имеющие свои full nodes) сами решают, какие транзакции будут включены в блок.

Взаимодействие пользователей, полных узлов (майнинг-пулов) и PoW-майнеров при работе с транзакциями:

До включения в блок транзакции хранятся в общем pending-пуле, из которого самые «жирные» транзакции отбираются майнинг-узлами (пулами) в свой собственный список (уменьшенную копию всего мемпула).

Иллюстрация, поясняющая суть работы майнеров по отбору транзакций для последующего создания блоков:

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

Чем выше размер gas price подписанной кошельком транзакции, тем больше вероятность, что она будет включена в блок:

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

Можно ли отправить ETH-транзакцию с размером комиссии, равным одному Gwei?

Транзакции, имеющие мизерный размер комиссии, теоретически могут попасть в список какого-нибудь узла, но будут обработаны (включены в блок) в последнюю очередь.

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

Пример транзакции с минимальным размером комиссии (Gas Price равен 1 Gwei), созданной и включенной в блок пулом Ethermine:

В этот же блок Ethermine включил и другие транзакции с минимальной комиссией:

Созданные «экономными» пользователями транзакции даже если и попадут в список кандидатов на включение в блок конкретного узла (TX-queue), через несколько часов из него исключаются, уступая место более выгодным и сползая все дальше в конец общего pending-списка всей сети. Транзакция Ethereum может быть исключена из мемпула (ее баланс будет возвращен на кошелек пользователя за вычетом комиссии) по следующим причинам:

  • изменились значения, ранее заложенные в транзакцию (например, nonce и баланс кошелька);
  • достигнут лимит количества (length limit) транзакций-кандидатов (tx-queue-size) в списке узла;
  • достигнут лимит максимального количества транзакций, установленный для одного отправителя (tx-queue-per-sender);
  • достигнут лимит памяти узла (tx-queue-mem-limit);
  • появилась другая транзакция с тем же самым nonce с того же адреса отправителя, при этом ее gas price больше, чем у предыдущей. В этом случае новая транзакция заменит старую. Это условие позволяет решить вопрос с «зависшими» транзакциями (подробнее в статье «Как отменить или заменить транзакцию, зависшую в сети Ethereum»).

Сколько времени может «болтаться» в сети неподтвержденная транзакция?

Невозможно точно узнать, когда транзакция будет обработана или исключена из общего мемпула как в сети биткоина, так и Ethereum, так как на это влияет слишком много факторов. Во время нахождения в мемпуле какого-либо узла транзакция может быть обработана (включена в блок), либо исключена узлом из списка (dropped), либо снова передана в сеть (re-broadcasted), где ее может подхватить другой узел и все-таки включить в блок.

В сети биткоин имеется таймаут, согласно которому любая транзакция после нахождения в мемпуле более 336 часов (14 дней) будет из него удалена (верно для версий Bitcoin Core 0.14+).

У Ethereum фиксированного лимита общего таймаута для транзакций нет. После исключения транзакции из списка одного узла и повторной отправки в сеть она будет блуждать по сети до тех пор, пока не будет отменена отправителем, либо все узлы исключат ее из списка без повторной отправки в сеть.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

English English Русский Русский