Руководство пользователя: транзакции и неудачные транзакции
Новичок в крипте и web3?
Перейдите в MetaMask Learn, где основы web3 объясняются простым языком специально для новичков. Платформа совершенно бесплатна, доступна на нескольких языках и включает такие полезные инструменты, как симуляторы, которые помогут вам освоиться в MetaMask.
Эта статья содержит пояснения и ссылки на ресурсы, связанные с транзакциями и причинами их неудачи. Также ниже приведены ссылки на распространенные сценарии неудачных транзакций и способы устранения причин неудачи:
- Анатомия блокчейн-транзакции
- Распространенные проблемы
- Основные исправления
- Дополнительные ресурсы и последующие шаги
- Часто задаваемые вопросы
Анатомия блокчейн-транзакции
Когда мы говорим о «транзакциях» в публичной блокчейн-сети, мы имеем в виду взаимодействие между двумя адресами. Иными словами, токены, взаимозаменяемые или нет, или иные криптоактивы «пересылаются» с одного адреса на другой. Существуют также транзакции, называемые «внутренними транзакциями», которые представляют собой взаимодействие между смарт-контрактами и, по большей части, выходят за рамки этой статьи.
Хотите получить дополнительную информацию?
Чтобы узнать подробнее о блокчейн-сетях и о том, как они работают, ознакомьтесь с нашей вводной статьей здесь, а если вы встречаете много незнакомых слов, обратитесь к нашему глоссарию.
Для ясности, на самом деле ничего никуда не отправляется. Сеть блокчейна с поддержкой смарт-контрактов, такая, как Ethereum, имеет ряд различных компонентов или функций. Одной из них является то, что мы бы назвали «компьютером». Это Виртуальная машина Ethereum или EVM, которая способна запускать программы («смарт-контракты»). The backbone of the system, however, is a distributed ledger: imagine a spreadsheet that contains, on one side, every single Ethereum account address, and each address has a column for each type of crypto-asset that it holds.
Для иллюстрации воспользуемся примером. Скажем, Гильом хочет совершить транзакцию с Долорес. На счете Гильома есть 1,36 ETH, и он планирует отправить Долорес 0,5 ETH. Похоже, у Долорес хороший день, даже при «медвежьем» рынке.
Guillaume opens up his MetaMask, enters Dolores' address, configures the gas parameters that he's comfortable with paying, and hits'send'.
На этом этапе транзакция переходит в состояние локального временного удержания, известного как локальный пул памяти или локальный мемпул. Затем транзакция «подхватывается» ближайшим узлом в сети. Приоритет транзакции будет зависеть от настроек газа Гильома (чем больше Гильом готов заплатить за единицу газа, тем быстрее будет обработана его транзакция), и она будет передана в другие узлы сети. Узлы выполнят проверку того, что у Гильома есть нужное количество ETH для списания, а затем фактически выполнят «транзакцию»: реестр изменяется, 0,5 списывается с баланса Гильома и 0,5 зачисляется Долорес.
Теперь пути назад нет, ведь ETH не перемещается по сети как таковой, это не электронное письмо, отправленное с компьютера Гильома в почтовый ящик Долорес в MetaMask или что-то в этом роде. Гильом отправил в сеть запрос, аутентифицированный с помощью его закрытых ключей через MetaMask, о списании средств с его счета и зачислении средств на счета Долорес. Этот запрос был исполнен после выполнения проверки, запрограммированной в протоколах сети.
Все, что нужно для транзакции, — запрос к реестру о закреплении чего-либо за новым адресом вместо старого.
Когда что-то идет не так, как надо
Все может пойти не так по ряду причин. Ошибки часто могут носить «программный характер»: баг в MetaMask, неправильная конфигурация сети, которую вы пытаетесь использовать, или ошибка подключения.
Распространенная проблема заключается в том, что пользователь, пытаясь заплатить меньше за свою транзакцию, устанавливает очень низкий лимит газа, а сеть настолько перегружена, что ни в одном блоке нет места для такой «дешевой» транзакции, иногда в течение очень долгого времени. В конце концов, эта транзакция станет «устаревшей», и пользователь будет вынужден ее отменить.
Если вы отправили транзакцию и она не была завершена, ее статус в MetaMask будет отображаться как «ожидающая».
If you sent a transaction, and it failed, the most likely cause is a lack of gas: you "ran out of gas", in other words, the transaction had a cost in gas that, when multiplied by the gas price, resulted in a total amount of the network's native currency that was greater than what you had in your account.
Информация
Подробнее о расчете газа см. в нашем руководстве по газу здесь.
Это может произойти по ряду причин и нужно учитывать, какую транзакцию вы пытаетесь выполнить. Минтинг NFT во время пика сетевого трафика может потребовать очень много газа. Если вы пробуете новую или экспериментальную транзакцию, возможно, стоит проверить ее в тестовой сети прежде, чем платить комиссию в реальной сети.
Решение проблемы
Ключевой фактор №1: локальная или переданная в сеть
Когда вы занимаетесь диагностикой проблемы с транзакцией, особенно, когда речь идет об ожидающей транзакции, вам нужно посмотреть, находится ли транзакция все еще в вашем локальном мемпуле или она попала в сеть и застряла там по какой-либо причине. If it is just in your local mempool, the solution could be as simple as locking, and unlocking, your MetaMask (make sure you know your password and have your Secret Recovery Phrase backed up before you do). Если она уже попала в сеть, решение будет сложнее.
Подробнее об устранении этих проблем, см. ссылки ниже.
Ключевой фактор №2: одноразовый код
Этот термин может означать несколько разных вещей. Это сокращение от «number only used once» (одноразовое случайное число), и в этом контексте это означает «номер транзакции», начиная с первой транзакции, совершенной отправляющим адресом. You can get yourself into real trouble if, for example, you're firing two different transactions from different instances of MetaMask with the same account address at the same time. **Транзакции с вашего адреса должны идти в порядке возрастания в соответствии с их одноразовым кодом. ** Однако так же, как одноразовые коды могут вызвать зависание транзакции, они могут быть ключом к тому, чтобы транзакцию разблокировать.
Подробнее об этой методике см. здесь..
Следующие шаги
Если у вас есть неудачная или ожидающая транзакция, обратитесь за помощью к следующим ресурсам.
How to send tokens from your MetaMask account
Как ускорить или отменить ожидающую транзакцию
Почему моя транзакция завершилась ошибкой «Недостаточно газа»? Как это исправить?
Могу ли я отменить уже подтвержденную транзакцию?
Часто задаваемые вопросы
В. На одном счете в моем кошельке есть ожидающая или находящаяся в очереди транзакция. Могу ли я инициировать еще одну транзакцию по другому счету в том же кошельке?
А: Да, вы можете. Одноразовый код рассчитывается для каждого счета, а не для кошелька в целом.