Руководство пользователя: транзакции и неудачные транзакции
Does this article need to be translated?
Submit translations, corrections, and suggestions on GitHub, or reach out on our Community forums.
Новичок в крипте и web3?
Перейдите в MetaMask Learn, где основы web3 объясняются простым языком специально для новичков. Платформа совершенно бесплатна, доступна на нескольких языках и включает такие полезные инструменты, как симуляторы, которые помогут вам освоиться в MetaMask.
Эта статья содержит пояснения и ссылки на ресурсы, связанные с транзакциями и причинами их неудачи. Также ниже приведены ссылки на распространенные сценарии неудачных транзакций и способы устранения причин неудачи:
- Anatomy of a blockchain transaction
- Common problems
- Main fixes
- Дополнительные ресурсы и последующие шаги
- FAQs
Сущность блокчейн-транзакции
Когда мы говорим о «транзакциях» в публичной блокчейн-сети, мы имеем в виду взаимодействие между двумя адресами. Иными словами, токены, взаимозаменяемые или нет, или иные криптоактивы «пересылаются» с одного адреса на другой. Существуют также транзакции, называемые «внутренними транзакциями», которые представляют собой взаимодействие между смарт-контрактами и, по большей части, выходят за рамки этой статьи.
Хотите получить дополнительную информацию?
Чтобы узнать подробнее о блокчейн-сетях и о том, как они работают, ознакомьтесь с нашей вводной статьей здесь, а если вы встречаете много незнакомых слов, обратитесь к нашему глоссарию.
Для ясности, на самом деле ничего никуда не отправляется. Сеть блокчейна с поддержкой смарт-контрактов, такая, как Ethereum, имеет ряд различных компонентов или функций. Одной из них является то, что мы бы назвали «компьютером». Это Виртуальная машина Ethereum или EVM, которая способна запускать программы («смарт-контракты»). «Основой» системы, является распределенный реестр: представьте себе электронную таблицу, в которой содержатся все адреса кошельков Ethereum и напротив каждого адреса указан тип криптоактива, который он содержит.
Для иллюстрации воспользуемся примером. Скажем, Гильом хочет совершить транзакцию с Долорес. На счете Гильома есть 1,36 ETH, и он планирует отправить Долорес 0,5 ETH. Похоже, у Долорес хороший день, даже при «медвежьем» рынке.
Гильом открывает кошелек MetaMask, вводит адрес Долорес, настраивает параметры газа, который ему комфортно оплатить, и нажимает «Отправить».
На этом этапе транзакция переходит в состояние локального временного удержания, известного как локальный пул памяти или локальный мемпул. Затем транзакция «подхватывается» ближайшим узлом в сети. Приоритет транзакции будет зависеть от настроек газа Гильома (чем больше Гильом готов заплатить за единицу газа, тем быстрее будет обработана его транзакция), и она будет передана в другие узлы сети. Узлы выполнят проверку того, что у Гильома есть нужное количество ETH для списания, а затем фактически выполнят «транзакцию»: реестр изменяется, 0,5 списывается с баланса Гильома и 0,5 зачисляется Долорес.
Теперь пути назад нет, ведь ETH не перемещается по сети как таковой, это не электронное письмо, отправленное с компьютера Гильома в почтовый ящик Долорес в MetaMask или что-то в этом роде. Гильом отправил в сеть запрос, аутентифицированный с помощью его закрытых ключей через MetaMask, о списании средств с его счета и зачислении средств на счета Долорес. Этот запрос был исполнен после выполнения проверки, запрограммированной в протоколах сети.
Все, что нужно для транзакции, — запрос к реестру о закреплении чего-либо за новым адресом вместо старого.
Когда что-то идет не так
Все может пойти не так по ряду причин. Ошибки часто могут носить «программный характер»: баг в MetaMask, неправильная конфигурация сети, которую вы пытаетесь использовать, или ошибка подключения.
Распространенная проблема заключается в том, что пользователь, пытаясь заплатить меньше за свою транзакцию, устанавливает очень низкий лимит газа, а сеть настолько перегружена, что ни в одном блоке нет места для такой «дешевой» транзакции, иногда в течение очень долгого времени. В конце концов, эта транзакция станет «устаревшей», и пользователь будет вынужден ее отменить.
Если вы отправили транзакцию и она не была завершена, ее статус в MetaMask будет отображаться как «ожидающая».
Наиболее вероятной причиной неудачи отправленной транзакции является нехватка газа: у вас «закончился газ», другими словами, стоимость транзакции в газе, умноженная на цену газа, давала общую сумму нативной валюты сети, превышающую сумму в вашем кошельке.
Информация
Подробнее о расчете газа см. в нашем руководстве по газу здесь.
Это может произойти по ряду причин и нужно учитывать, какую транзакцию вы пытаетесь выполнить. Минтинг NFT во время пика сетевого трафика может потребовать очень много газа. Если вы пробуете новую или экспериментальную транзакцию, возможно, стоит проверить ее в тестовой сети прежде, чем платить комиссию в реальной сети.
Решение проблемы
Ключевой фактор №1: транзакция сохранена локально или уже передана в сеть
Когда вы занимаетесь диагностикой проблемы с транзакцией, особенно, когда речь идет об ожидающей транзакции, вам нужно посмотреть, находится ли транзакция все еще в вашем локальном мемпуле или она попала в сеть и застряла там по какой-либо причине. Если она находится только в вашем локальном мемпуле, этот вопрос можно просто решить блокировкой и последующей разблокировкой вашего кошелька MetaMask (прежде чем сделать это, убедитесь, что вы знаете свой пароль и создали резервную копию секретной фразы для восстановления). Если она уже попала в сеть, решение будет сложнее.
Подробнее об устранении этих проблем, см. ссылки ниже.
Ключевой фактор №2: одноразовый код
Этот термин может означать несколько разных вещей. Это сокращение от «number only used once» (одноразовое случайное число), и в этом контексте это означает «номер транзакции», начиная с первой транзакции, совершенной отправляющим адресом. У вас могут возникнуть серьезные проблемы, если вы, например, запускаете две разные транзакции из разных экземпляров MetaMask, с одним и тем же адресом кошелька в одно и то же время. **Транзакции с вашего адреса должны идти в порядке возрастания в соответствии с их одноразовым кодом. ** Однако так же, как одноразовые коды могут вызвать зависание транзакции, они могут быть ключом к тому, чтобы транзакцию разблокировать.
For more on that technique, see here.
Next steps
Если у вас есть неудачная или ожидающая транзакция, обратитесь за помощью к следующим ресурсам.
Как отправить токены из вашего кошелька MetaMask
Как ускорить или отменить ожидающую транзакцию
Почему моя транзакция завершилась ошибкой «Недостаточно газа»? How can I fix it?
Руководство пользователя по газу
Могу ли я отменить уже подтвержденную транзакцию?
Часто задаваемые вопросы
В. На одном счете в моем кошельке есть ожидающая или находящаяся в очереди транзакция. Могу ли я инициировать еще одну транзакцию по другому счету в том же кошельке?
A: Yes, you can. Одноразовый код рассчитывается для каждого счета, а не для кошелька в целом.