- inaword
- Блог о разработке и современных технологиях
- Что делать если транзакция в pending?
- Почему транзакция pending от появляется то исчезает и время ожидания обнуляется?
- Как протолкнуть или удалить запирающую транзакцию
- Суть и особенности транзакций в блокчейне Эфириума
- Транзакции блокчейна Ethereum
- Газ или gas: что это за параметр и как он рассчитывается
- Как газ тратится на хранение данных?
- Для каких целей удерживаются комиссии?
- Транзакции Эфириума: как их проверить и отследить?
- Можно ли отменить транзакции Эфириума? — Да
- Что включают транзакции и их сообщения?
- О блоках с инфоданными по всей совокупности транзакций блокчейна Ethereum
- Оммеры: суть и роль
- Заголовок блока: его содержание
- Логи с инфоданными о транзакционных шагах и сообщениях
- Квитанции транзакций: что она содержит?
- Как сделать перевод без финансовых трат?
- Как сложность блока связана с временем подтверждения транзакции?
inaword
Блог о разработке и современных технологиях
Что делать если транзакция в pending?
DRAFT — ЧЕРНОВИК (Статья находится в процессе доработки)
В последнее время нагрузка на сеть эфира выросла. К тому же часто проводятся ICO которые могут поднять нагрузку на сеть почти в три раза.
Увеличение нагрузки на сеть может привести к ситуации когда ваша транзакция находится в состоянии pending очень долго.
Дело в том что майнеры в первую очередь стараются взять в обработку самые дорогие транзакции. Поэтому у транзакций с большей стоимостью газа шанс обработаться выше. Когда нагрузка на сеть возрастает транзакции с маленькой стоимостью газа могут ожидать своей очереди по несколько дней и даже недель.
На момент написания статьи при нормальной нагрузке на сеть количество транзакций в состоянии pending от 2000 до 4000 тысяч. Когда кто-от начинает ICO количество транзакций в pending может возрасти до 8-11 тысяч. На изображении как раз показан такой резкий скачек.
Когда транзакция очень долго находится в pending пользователь пытается отправить такую же транзакцию но с большим газом, потом еще и еще. В надежде что хоть одна из них пройдет. И все эти транзакции остаются в pending.
Дело в том что транзакции с адреса как-правило обрабатываются в порядке очереди. Поэтому пока не обработана самая первая — запирающая транзакция, остальные будут ждать.
Почему транзакция pending от появляется то исчезает и время ожидания обнуляется?
Когда транзакция попадает в состояние pending, это значит что нода взяла вашу транзакцию к себе в обработку. И сейчас ищет блок. Однако, блок может найти быстрее другая нода, которая не содержит в себе вашу транзакцию. В этом случае нода которая взяла вашу транзакцию «выплевывает» ее и теперь вашу трназакцию в обработку может взять другая нода. В этом случае время обнуляется.
Как протолкнуть или удалить запирающую транзакцию
Стоит отметить, что ожидание транзакции 2-3 часа хоть и не является нормальным, но все же допустимо.
Транзакции в блоке имеют свои уникальные номера — nonce. Если отправить в сеть две транзакции с одинаковым nonce, то только одна из них обработается. А другая будет считаться некорректной. Поэтому нам достаточно повторить транзакцию с тем же nonce но увеличить стоимость газа. В этом случае нода возьмет транзакцию с наибольшей стоимостью в обработку, а запирающую отклонит как некорректную. И мы решим нашу проблему.
Как это сделать?
Итак, если вы хотите именно удалить запирающую транзакцию, то достаточно отправить пустую транзакцию с высокой ценой газа. Возможности установить цена газа нет в кошельке mist или ethereum wallet. Поэтому мы воспользуемся MyEtherWallet .
- Найдите запирающую транзакцию. Для этого зайдите на etherscan.io и введите в поле address адрес с которого отправляли транзакции и нажмите кнопку go.
- Появится список всех транзакций с вашего аккаунта, нажмите на ссылку «pending Txns»
- Перед вами отобразится список всех транзакций в состоянии pending, а также отобразится цена газа. Как правило запирающая транзакция самая первая. Так и есть в мы видим что в первой транзакции цена газа 1 Gwei. А следующая уже за ней в очереди хоть и имеет цену газа 21 Gwei, но не обработается пока не обработается запирающая транзакция. Нажмите на ссылку хэша запирающей транзакции чтобы посмотреть подробности.
- В подробностях скопируйте число none и адрес from (собственно это адрес аккаунта с которого вы отправляли транзакцию)
- Теперь зайдите в на на https://www.myetherwallet.com/ и выберите вкладку Send Offline (Оффлайн перевод).
- Теперь из всех полей нам надо заполнить следующие:
- From Address — указываем адрес с которого отправляли запирающую транзакцию
- To Address — любой существующий адрес
- Gas price — тут нам надо указать цену газа. Наша запирающая транзакция стоила 1 Gwei. Что никуда не годится. Стандартно MyEtherWallet использует цену газа 21 Gwei. Поэтому мы поставим чуть выше — 30 Gwei. Если посмотрим на надпись справа от поля, то увидим там Wei. 1 GWei = 1000000000 Wei. Поэтому нам нужно написать 30000000000.
- nonce — вставляем то значение, которое скопировали в подробностях транзакции
- Value amount — указываем 0
- Теперь наша задача разблокировать кошелек удобным вам способом. Сделайте это самостоятельно. После разблокировки вам будет доступна кнопка generate transaction. Нажимаем на нее. А затем нажмите на send transaction.
- В появившемся окне нажмите синюю кнопку «Yex, I am sure! Make transaction.»
Источник
Суть и особенности транзакций в блокчейне Эфириума
Транзакции, то есть переводы Эфириума между адресами кошельков получателей и отправителей, совершаются с уплатой комиссионных. Цифра платы транзакции Эфириума плавающая — зависит от нагрузки на систему, исчисляется в единицах газ.
Транзакции блокчейна Ethereum
Платёж в структуре Эфириума означает отправку пакета с инфоданными с одного адреса на другой. Транзакция включает:
- Подпись отправителя.
- Адрес получателя Эфириума.
- Стоимость, заполняется в строке VALUE.
- Сумма монет — в строке wei.
- DATA — комментарий.
- GASLIMIT — всё число вычислений данной операции Эфириума.
- GASPRICE — комиссию, которую согласен оплатить отправитель за 1 ед газа.
- To — адрес криптокошелька пользователя, получающего перевод.
Газ или gas: что это за параметр и как он рассчитывается
Газ в Эфириуме, в количестве 1 единицы, сопоставим с запуском одной неделимой, иначе, атомарной, операции или вычисления.
Что такое ценность газа в блокчейне Эфириума? Зависит от готовности пользователя заплатить долю Эфира за расчёт 1 газа и измеряется в единицах Gwei, где:
- Wei — микродоля Эфира, а один ETH=1⁰¹⁸ в Wei.
- Gwei равен миллиарду Wei.
Человек, который совершает транзакцию — отправляет деньги, устанавливает и лимит, и стоимость газа. Произведение этих составляющих равняется максимальному Wei Эфириума.
- пользователь ставит gas limit 40 тыс. при цене 25 Gwei;
- следовательно, готов потратить тысячу триллионов Wei или 0,001 ETH.
При этом, лимит газа означает лишь максимальное количество, которое пользователь готов оплатить.
Практически, операция может обойтись дешевле, тогда неизрасходованный газ вернётся на счёт отправителя Эфириума, а обратный обмен совершится по ставке первого обмена — Эфира в газ.
Если же отправитель оформил транзакцию, но не смог предоставить газ для оплаты — операция в экосистеме Ethereum считается недействительной, а потраченный на попытку перевести средства газ не возвращается.
Перевести определённое количество газа в ETH можно на калькуляторе Эфириума, например, заглянув на ru.investing.com/crypto/gas/gas-eth-converter.
Как газ тратится на хранение данных?
Поняв, что такое gas, уплаченный за передачу средств в системе Ethereum, следует узнать, что газ, тратится на хранение данных Сети.
- Увеличение объёма хранилища влечёт расширение БД всех нод.
- Поэтому, протоколом экосистемы Эфириум предусмотрена стимуляция пользователей уменьшать данные до минимума.
- Когда, по итогам транзакции, объём данных получается сократить, то комиссионное удержание за операцию не начисляется и пользователю поступает компенсация за освобождение места.
Для каких целей удерживаются комиссии?
Газ, которым оплачена транзакция, поступает на счёт того майнера Эфириума, который обеспечил вычисления по конкретной операции. Это компенсация потраченных ресурсов. В свою очередь, майнер видит предложения оплаты за операцию и, в первую очередь, выбирает более дорогие.
Поэтому, когда есть необходимость ускорить транзакцию, владельцы Эфириума назначают повышенную комиссию.
Операции с минимальной платой могут оставаться в Сети довольно долго, пока не найдётся желающий обработать платёж. Одновременно, майнеры вправе публично заявить о минимальной желаемой стоимости платежа.
Транзакции Эфириума: как их проверить и отследить?
Отследить и выполнить проверку транзакций в Сети Эфириума можно с помощью сервисов:
Когда требуется узнать id транзакции в блокчейне Ethereum или проверить состояние транзакции в Сети Ethereum, перечисленные сайты выполняют проверку по одинаковым алгоритмам и выводят равнозначную информацию.
Какой сервис использовать для проверки рекомендаций и транзакций Ethereum зависит от личных предпочтений к интерфейсу сайтов.
В окно поиска вводятся параметры платежа Эфириума — адрес криптокошелька, или токен, код операции, то есть, TxHash или номер блока хэша.
Поиск выведет данные, которые пользователь хочет узнать о платеже Ethereum:
- id то есть, идентификатор;
- статус перевода;
- объём;
- номер кошелька получателя;
- предельное количество газа, назначенное отправителем;
- фактически потраченный газ.
Кроме этого, станут доступны дополнительные параметры сделки.
Можно ли отменить транзакции Эфириума? — Да
Если загруженность blockchain Ethereum высока, а цена транзакции Эфириума назначена маленькая, то перевод может зависнуть на срок от нескольких часов до нескольких недель. Чтобы избежать подобной ситуации, нужно проверить на сайте ethgasstation.info статус Сети и рекомендуемую оплату.
Для отмены транзакции, также, потребуются данные с указанного сайта:
- Оптимальная текущая стоимость операции.
- № криптокошелька Эфириума, откуда был отправлен неудачный перевод.
- Nonce зависшего перевода.
- Во вкладке Send Offline, нужно выбрать тот номер кошелька Эфириума From Adress, с которого была отправлена зависшая транзакция и № адреса, куда будет отправлен новый перевод — этот номер To Adress может быть любым.
- Затем, в строке Value/Amound to Send указывается сумма Эфириума к отправке 0 (ноль) и в строке Gas Price комиссия в GWei.
- Следует учитывать, что, задавая комиссию в Wei, к сумме в GWei нужно добавить девять нулей. Например, 55 GWei = 55000000000 Wei.
Важно! В строке Nonce следует внести параметр именно той транзакции Ethereum, которую нужно изменить, иначе, операция отмены не получится.
После авторизации, останется нажать Send Transaction и зависший платёж Эфириума отменится.
Теперь, чтобы повторить отправку денег, нужно оформить новый перевод, не забыв внести рекомендуемое на данный момент количество газа.
Что включают транзакции и их сообщения?
Нередко, в интернете встречается понятие Машина Эфириум. Эта виртуальная структура функционирует за счёт транзакций — подписанных команд, которые генерируются внешним аккаунтом и отправляются в блокчейн.
Транзакции делятся на 2 типа:
- Просто сообщения.
- Создающие контракты.
Каждая транзакция охватывает уже описанные выше nonce, gasPrice, Wei, gasLimit и to.
Если транзакция Эфириума создаёт контракт, то его адрес остаётся пустым, а value, объём Wei — значит начальный баланс. Кроме этого, только здесь присутствует init — команда, представляющая фрагмент кода транзакции — EVM-code, которая совершается лишь раз.
Data является необязательной строкой, так как может как содержать комментарии, так и не заполняться.
Если речь идёт, например, о смарт контракте Эфириума, который регистрирует доменные имена, то сообщение будет содержать IP-address и имя.
О блоках с инфоданными по всей совокупности транзакций блокчейна Ethereum
Кроме внешних транзакций, поступающих в blockchain и представляющих собой мостики между внешними структурами и системой Эфириум. Есть и контракты, которые сообщаются только внутри машины — через уведомления или, так называемые, внутренние транзакционные передачи.
- Операции внутреннего типа производятся непосредственно смарт-контрактами, не связаны с внешними счетами и не отмечены таким параметром, как gasLimit.
- Узлы с данными обо всех переводах, объединены в криптоблоки и blockchain Эфириума, который представляет собой цепочку объединённых узлов.
В результате, block Ethereum складывается из заголовка, сведений о типах операций в Сети Эфириума — внешних и/или внутренних, заголовков прочих узлов, в частности, оммеров конкретного блока.
Оммеры: суть и роль
Оммером, на английском ommer, называется узел, чей исходный блок тождественен исходному блоку исходного узла конкретного блока. Интервал между узлами в Эфириуме около 15 секунд, что обеспечивает более высокую, чем, например, у Биткоина, обработку транзакций.
Однако в этом моменте кроется проблема. Майнеры Эфириума вычисляют много блоков-конкурентов, которые называются орфанами/потерянными, то есть, найденными, но не попавшими в цепочку blockchain.
Оммеры дают возможность майнерам включить орфан-block в общую цепь и получить вознаграждение. Для этого, оммер должен быть не старше, чем шестой от текущего узла. На оммер большего порядка ссылаться нельзя, поскольку он считается устаревшим, а связанные с ним транзакции усложняют сетевые операции Машины Эфириум.
Награда майнеру за оммер меньше, чем за обычный блок.
Заголовок блока: его содержание
Структура заголовка узла довольно сложная, складывается из:
- Parent Hash — № хэша исходного заголовка, то есть, непосредственно родительского блока.
- Ommers Hash — хэша перечня оммеров настоящего блока.
- Beneficiary — веб-адреса, куда зачисляется комиссия за вычисление узла Эфириума.
- State Root — хэша главного блока, так называемого, trie/дерева состояний, которое, в свою очередь, находится в заголовке и обеспечивает лёгким программным клиентам возможность проводить верификацию.
- Transaction Root – хэша trie/корневого узла Эфириума, охватывает все пересылки, записанные в этот блок.
- Receipts Root — хэша главного узла trie, с отчётами о всех транзакционных операциях рассматриваемого блока Эфириума.
- Logs Bloom/фильтра Блума — принципа построения информации, представляющего собой логи записей.
- Difficulty/сложности расчётов в Сети Эфириума, относящихся к текущему блоку.
- Number/номеру, принадлежащему конкретному узлу, при этом, № генезис-block равен 0, а каждый за ним следующий возрастает на единицу.
- Gas Limit — лимита газа, затраченного на этот блок.
- Gas Used — весь объём газа, потраченный на транзакции этого узла.
- Time stamp: UNIX — метку о времени рождения block.
- Extra Data: допданные для узла.
- Mix Hash — хэша Эфириума, который, одновременно с nonce, удостоверяет, что для конкретного блока было сделано необходимое число расчётов.
- Nonce — хэша, который вместе с mixHash, подтверждает достаточное число вычислений для узла.
Кроме этого, в заголовке каждого block присутствуют 3 структуры trie — статуса Рут(state), транзакций Рут(transactions) и отчётных квитанций Рут(receipts). Эти три структуры именуются patricia-деревьями Меркла — однонаправленными хеш-функциями.
Логи с инфоданными о транзакционных шагах и сообщениях
Логи помогают в отслеживании инфоданных транзакций и комментариев, генерируются при каждой операции. Включают:
- Адрес счёта.
- Темы действий, которые применялись при выполнении транзакций.
- Регистратора самого лога.
- Любые иные данные, связанные с отправкой.
- Место хранения логов — фильтр Блума.
Квитанции транзакций: что она содержит?
Для квитанций данные извлекаются из логов, содержат информацию об операции — № и хеш блока, хеш самой транзакции, потраченный газ, объём газа, задействованного в формировании узла, логи и другие данные.
Как сделать перевод без финансовых трат?
Единицы оплаты перевода допускается выставлять самостоятельно. Поэтому, установив не Gwei, а wei и назначив стоимость перевода в 1 wei за 1 gas, пользователь расплатится ничтожно малой суммой, стремящейся к нулю.
При цене 0 wei платёж не пройдёт, а при 1 wei осуществится с высокой вероятностью.
Такая ситуация обусловлена частичной наполненностью блоков максимально допустимым объёмом транзакций, эквивалентных 6,7 млн gas. Чтобы воспользоваться описанным приёмом — в MyEtherWallet следует открыть вкладку Send Offline/Оффлайн-перевод и выбрать единицы оплаты wei.
В общем случае, скорость транзакций повышается назначением более высокой оплаты в Сети Ethereum. Поэтому, ускорить важную транзакцию, Ethereum можно, назначив максимальную из рекомендуемых плат.
Как сложность блока связана с временем подтверждения транзакции?
Вычислительная трудность/сложность — термин, для описания времени, необходимого для подтверждения конкретного узла Эфириума.
- Генезис-блоку/первому, соответствовала сложность 131072.
- Для подсчёта всех последующих применяется спецформула. И если отдельно взятый узел прошёл валидацию быстрее предшествующего, то система Эфира корректирует сложность его расчёта в большую сторону.
- Аналогично происходит и при обратной ситуации. Если подтверждение очередного узла Эфириума должно занять больше времени, чем запланировано протоколом, сложность, автоматически уменьшается.
В результате, поддерживается постоянная скорость майнинга Эфириума, при которой один блок появляется в среднем, раз в 15 секунд.
Источник