Руководство пользователя: транзакции и неудачные транзакции
Новичок в крипте и web3?
Перейдите в MetaMask Learn, где специально для новичков простым языком объясняются основы web3. Платформа совершенно бесплатна, доступна на нескольких языках и включает такие полезные инструменты, как симуляторы, которые помогут вам освоиться в MetaMask.
Эта статья содержит пояснения и ссылки на ресурсы, связанные с транзакциями и причинами их сбоя. Также ниже приведены ссылки на распространенные сценарии неудачных транзакций и способы их устранения:
- [Анатомия блокчейн транзакции](zendesk hash)
- [Распростра ненные проблемы](zendesk hash)
- [Основные способы решения](zendesk hash)
- [Дополнительные ресурсы и последующие шаги](zendesk hash)
- [Часто задаваемые вопросы](zendesk hash)
Анатомия блокчейн транзакции
Когда мы говорим о «транзакциях» в публичной сети блокчейн, мы имеем в виду взаимодействие между двумя адресами. Иными словами, токены, взаимозаменяемые или нет, или иные криптоактивы «пересылаются» с одного адреса на другой. Существуют также транзакции, называемые «внутренними транзакциями», которые представляют собой взаимодействия между смарт-контрактами и, по большей части, выходят за рамки этой статьи.
Хотите получить дополнительную информацию?
Чтобы узнать больше о сетях блокчейна и о том, как они работают, ознакомьтесь с нашей вводной статьей здесь, а если вы встречаете много незнакомых слов, обратитесь к нашему глоссарию.
Для ясности, на самом деле ничего никуда не отправляется. Сеть блокчейна с поддержкой смарт-контрактов, такая, как 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 могут вызвать зависание транзакции, они могут быть ключом к тому, чтобы транзакцию разблокировать.
Подробнее об этой технике см. здесь.