Почему во время ICO транзакция в pending – е?

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

Представлю в виде диалога:

(В)- На момент ожидания перевода на счет проводимого ICO транзакцию просто отменили, было сообщение что Тхид не найден, отправлял с MyEtherWallet. А оказалось что она таки висела в очереди и таки была отправлена на контракт спустя 1 час после отправки. Там пишет что транзы нет, потом оказывается была.

(О) – Когда MEW пишет, что транзакция отправлена, а сеть ее не может обнаружить, это не означает, что транзакция была отменена. В блокчейне вообще ничего не отменяется, во всяком случае само по себе. Просто Etherscan.io умеет искать транзакции исключительно в тех блоках, которые есть в его БД (и подписанные, и еще не подписанные, которые находятся в работе). А когда клиент отправляет со своего кошелька транзакцию в сеть, они должна пройти между нодами и попасть в БД каждой из них. И пока она не попадет в локальную БД Etherscan, он так и будет писать “Unable to locate the Transaction entry”(не найдена) – Это особенности алгоритма синхронизации БД между нодами.

В случае высокой нагрузки, когда транзакций в сети очень много, такое обновление данных может заниматься достаточно много времени – до получаса и более. И тем не менее, рано или поздно все ноды получат уведомление об отправленных транзакциях, тогда ты и сможешь увидеть ее в Etherscan. И это только первая часть марлезонского балета 🙂

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

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

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

Еще раз напомню, как правильно делать переводы в эфире. Есть сервис, который показывает текущее состояние сети: http://ethgasstation.info/json/ethgasAPI.json В нем указан gwei, который вы можете установить при отправке. Например, сейчас такие значения:

{“Average”: 4.0, “safeLow”: 0.050000000000000003, “Fastest”: 46.0, “Cheapest”: 0.0}

Это значит, что если установите gwei = 4, то ваша транзакция выполнится достаточно быстро – в течение 1-2 минут. Но даже если поставить gwei = 0, то все равно ваш перевод имеет шансы дойти, поскольку в сети есть ноды, которые согласны проводить транзакции вообще бесплатно.

Если хотите, чтобы ваш перевод был отправлен в ближайшем блоке и с максимальным приоритетом, тогда нужно ставить gwei = 46 или выше.

И пока она не попадет в локальную БД Etherscan, он так и будет писать “Unable to locate the Transaction entry”. В случае высокой нагрузки, когда транзакций в сети очень много, такое обновление данных может заниматься достаточно кучу времени – до получаса и более. И тем не менее, рано или поздно все ноды получат уведомление об отправленных транзакциях, тогда ты и сможешь увидеть ее в Etherscan. 

(В) – Т.е.  в общую БД транзы проходят вначале через ноды, так? Получается, что первый затык возникает на первой ноде, на которую поступят транзы, в том чсиле и моя? Т.е. первыми идут транзы с более высокой комсой потом все остальные. Транза находится в пендинге – т.е. ожидает принятия ее нодой. Через какое-то время MEW ищет ее в блокчейне и если не находит, то пишет что транза не найдена. Так? При этом она все еще висит не принятой на ноде?

Все похоже на правда за исключением одного. Когда я инвестил в банкор, то отправил транз 20 не меньше. Из которых 1 прошла и одна (как я оптом увидел) была отвергнута контрактом (не прошла). Остальных транз вообще нет. Т.е. штук 18 транз вообще нет ни в каком виде.

http://ethgasstation.info/json/ethgasAPI.json – это инфа тянется по апи я так понимаю, т.е. всегда актуальна?

(О) – Где-то читал, что эта инфа http://ethgasstation.info/json/ethgasAPI.json обновляется каждые 100 блоков в сети эфира. То есть она достаточно актуальна, но не так, чтобы прямо до секунды.

Ее актуальность примерно минут 15.

(В) – Я так понимаю что в МЕВ что-то накрутили. В банкоре пендинг отменялся быстро, в случае с ТенХ – он висел у меня больше получаса. Видимо ребята что-то подделали, что б при ИКО при отмене пендинга народ не зафлуживал сеть новыми переводами. С однйо стороны это хорошо – снимает нагрузку на сеть, с другйо стороны закрывает инвесторам вообще доступ к ико, ибо как только ты отправил транзу и она висит в ожидании тее не ясно – пройдет она или нет. А делать двойные или тройные траты с кошелька как-то не хочется.

(О) – Там накрутить что либо невозможно в принципе. Либо твой кошелек работает в сети, либо не работает, а кошельки у всех участников одинаковые.

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

(В) – Ну когда были проблемы и я несколько раз заново создавал транзакции, то код транзакции всегда один был только если менять газ или GWEI ну или количество эфира

(О) – В случае с ICO менять не буду. потому что по условиям контракта, программный код у него такой. Точнее, будет так, как заложили программисты, описавшие контракт. Они могут зафиксировать оба значения – и газ, и gwei, а могут что-то одно из этих значений. А могут и вообще ничего не фиксировать. Так что нужно читать рекомендацию компании по ico и следовать этой рекомендации, банкор тому подтверждение, собственно. в условиях банкора был максимальный гвеи в контракте указан.

(В) – Более того, кто в TenX отправил транзу с рекомендованным газом но гвеем 60 – прошел, я отправил с гвеем 55 – транза прошла через час. В общем так. количество газа – соглашусь, должно быть соответственно контракту – на гвей контракт повлиять не может, т.к. это комиссия майнерам.

Источник: @aristokrat


Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Пока оценок нет)
Загрузка...

Редактор. Маркетолог. Криптоинвестор с 2014 года.