Поиск ответа на вопрос: Почему во время 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 - транза прошла через час. В общем так. количество газа - соглашусь, должно быть соотвественно контракту - на гвей контракт повлиять не может, т.к. это комса майнерам.