Руководство пользователя: транзакции и неудачные транзакции

Новичок в крипте и web3?

Перейдите в MetaMask Learn, где специально для новичков простым языком объясняются основы web3. Платформа совершенно бесплатна, доступна на нескольких языках и включает такие полезные инструменты, как симуляторы, которые помогут вам освоиться в MetaMask.

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

 

Анатомия блокчейн транзакции

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

Хотите получить дополнительную информацию?

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

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

Для иллюстрации воспользуемся примером. Скажем, что Гильом хочет отправить транзакцию Долорес. У Гильома 1,36 ETH в его аккаунте, и он планирует отправить Долорес 0,5 ETH. Похоже, у Долорес хороший день, даже на медвежьем рынке. 

Гильом открывает кошелек MetaMask, вводит адрес Долорес, настраивает параметры газа, которые ему комфортно платить, и нажимает «Отправить».

На этом этапе транзакция переходит в состояние локального временного удержания, известного как локальный пул памяти, или локальный мемпул. Затем транзакция будет «подхвачена» ближайшим узлом в сети. Приоритет транзакции будет зависеть от настроек газа Гильома (чем больше Гильом готов заплатить за единицу газа, тем быстрее будет обработана его транзакция), и будет передана на другие узлы в сети. Узлы выполнят проверку того, что у Гильома есть нужное количество ETH для списания, а затем фактически выполнят «транзакцию»: реестр будет изменен; 0,5 спишется с баланса Гильома и 0,5 зачислится Долорес. 

«Движущаяся рука, написав, движется дальше»: ETH не перемещается по сети как таковой; это не электронное письмо, отправленное с компьютера Гильома в почтовый ящик Долорес в MetaMask или что-то в этом роде. Гильом отправил запрос, аутентифицированный с помощью его приватных ключей через MetaMask, в сеть, чтобы дебетовать его аккаунт и кредитовать Долорес. И, после процесса проверки, запрограммированного в сетевых протоколах, это было сделано. 

Это все, что нужно для транзакции: запрос к реестру для релокации чего-либо с одного адреса на другой.

 

Когда что-то идет не так

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

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

Если вы отправили транзакцию и она не была завершена, ее статус в MetaMask будет отображаться как «В ожидании». 

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

Информация

Подробнее о расчете газа см. в нашем руководстве по газу здесь.

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

 

Решение проблемы

Ключевой фактор #1: локальная или транслирована в сеть

Когда вы занимаетесь диагностикой проблемы с транзакцией, особенно, когда речь идет об ожидающей транзакции, вам нужно посмотреть, находится ли транзакция все еще в вашем локальном мемпуле или она попала в сеть и застряла там по какой-либо причине. Если она находится только в вашем локальном мемпуле, решение может быть таким же простым, как блокировка и разблокировка вашего кошелька MetaMask (убедитесь, что вы знаете свой пароль и создали резервную копию Secret Recovery Phrase, прежде чем делать это). Если она попала в сеть, решение будет более сложное.

Подробнее об устранении этих проблем, см. ссылки ниже.

Ключевой фактор #2: Nonce

Это слово может означать несколько разных вещей. Это сокращение от «number only used once» (одноразовое случайное число), и в этом контексте это означает «номер транзакции», начиная с первой транзакции, совершенной отправляющим адресом. У вас могут возникнуть серьезные проблемы, если вы, например, запускаете две разные транзакции из разных экземпляров MetaMask, с одним и тем же адресом кошелька в одно и то же время. Транзакции с вашего адреса должны идти в порядке возрастания в соответствии с их nonce.  Однако так же, как nonces могут вызвать зависание транзакции, они могут быть ключом к тому, чтобы транзакцию разблокировать.

Подробнее об этой технике см. здесь.

 

Следующие шаги

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

Как отправить токены из вашего кошелька MetaMask

Как ускорить или отменить транзакцию, ожидающую завершения

Почему моя транзакция завершилась ошибкой «Недостаточно газа»?

Устранение неполадок в Uniswap

Руководство пользователя: Газ

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

 

Часто задаваемые вопросы

В: На одном аккаунте в моем кошельке есть ожидающая или находящаяся в очереди транзакция. Могу ли я начать еще одну транзакцию с другого аккаунта в том же кошельке?
О: Да, можете. Nonce рассчитывается для аккаунта, а не для кошелька.

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 220 из 1842

Статьи в этом разделе