Хеш UserOperation идентифицирует операцию ERC-4337, а хеш блокчейн-транзакции — транзакцию с пакетом операций. Это разные ключи поиска. Свяжите их через чек UserOperation, затем прочитайте собственный результат операции и движение актива. Одного общего статуса транзакции пакета недостаточно, чтобы подтвердить задуманный платёж.
Почему обозреватель не находит выданный кошельком хеш
ERC-4337 описывает сбор UserOperations bundler-ом и отправку через контракт EntryPoint. Поэтому первоначальная ссылка кошелька может относиться к операции, которая ещё ждёт включения, а не к обычной уже переданной транзакции Ethereum. Шестнадцатеричный вид значения сам по себе не объясняет его назначение и не определяет правильный способ поиска.
Не определяйте тип ссылки только по числу символов. Проверьте исходное название поля: UserOperation hash, transaction hash либо внутренний номер запроса провайдера. Эти значения указывают на разные записи. Сохраните сеть и первоначальную ссылку до её замены догадкой. Пустая выдача обычного обозревателя ещё не доказывает пропажу средств, если искали идентификатор другого типа.
| Ссылка или результат | Что обозначает | Чего не доказывает отдельно |
|---|---|---|
| UserOperation hash | Отправленную операцию аккаунта | Включение содержащей её транзакции |
| Хеш внешней транзакции | Транзакцию bundler-а с пакетом | Успех каждой операции пакета |
| EntryPoint и сеть | Контекст исполнения | Нужный актив, получателя и зачисление сервисом |
| Success чека операции | Завершение её выполнения без revert | Что выполнено именно ожидавшееся платёжное действие |
| Движение нужного актива | Перевод с конкретными участниками | Последующее внутреннее зачисление платформы |
Проследите путь от принятия до включения
В спецификации RPC ERC-7769 определены связанные методы поиска. Успешный ответ eth_sendUserOperation означает принятие в пул операций клиента в рамках описанной проверки. Это не чек транзакции и не подтверждение, что задуманное действие уже выполнено. Между получением идентификатора и проверкой результата остаются отдельные этапы.
После включения поиск операции может дать хеш содержащей её транзакции. Чек UserOperation содержит собственный результат и вложенный чек всего пакета. В описании метода Pimlico оба идентификатора показаны в одном ответе. Пользуйтесь этой связью вместо попыток преобразовать один хеш в другой правкой строки или выбором случайной похожей записи.
- Установите сеть и подтвердите, что выдан именно UserOperation hash. Сохраните указанные аккаунт и EntryPoint, если интерфейс их показывает.
- Запросите чек через поддерживаемый трекер кошелька или подходящий поиск bundler-а.
- Если чек найден, получите содержащийся transactionHash и откройте его в обозревателе правильной сети.
- Сопоставьте чек с собственной операцией и аккаунтом. Прочитайте success операции, а не только общий результат пакета.
- Проверьте получателя, контракт токена и реальную переданную сумму. Успешное действие может оказаться не тем платежом, который ожидался.
- Если получатель — сервис, отдельно сверьте заявку или депозит и передайте поддержке связанные идентификаторы.
Успешный пакет может включать неудачное действие
Интерфейс EntryPoint содержит событие UserOperationEvent с хешем операции и признаком успеха. По нему различают результат отдельной UserOperation внутри большой транзакции. Важно выбрать собственное событие: соседняя операция того же пакета не подтверждает ваш перевод только потому, что записана в том же чеке.
Вымышленный пример: пакет содержит Cedar и Maple. Общая транзакция завершилась успешно. Вызов аккаунта Cedar выполнен, а вызов Maple завершился revert. Пользователь Maple не может объявить платёж успешным по зелёному статусу пакета. Ему нужен результат Maple и относящаяся к нему причина сбоя, если источник позволяет её установить. Названия здесь условные и не обозначают реальный платёж.
Даже успех собственной операции не отменяет проверки движения актива. Подписанное действие могло оказаться разрешением расходования, настройкой аккаунта или другим вызовом. Кошелёк либо приложение также могут обрабатывать результат внутри своего вызова. Блокчейн способен успешно выполнить полученное действие, хотя оно не соответствует ожидавшемуся пользователем переводу. Поэтому смотрят и смысл, и фактические последствия.
Пустой ответ не заменяет окончательный результат
Pimlico описывает null при недоступном чеке. С учётом метода и провайдера могут потребоваться проверка включения, сети, поддержки запроса и охвата истории. Такой ответ нельзя универсально считать доказательством неудачи, возврата или разрешением немедленно платить второй раз. Сначала нужно понять, что именно искал конкретный источник данных.
У провайдеров бывают ограничения поиска. В руководстве Alchemy описано ограниченное окно исторического сканирования и способ его задания. Поиск не в том диапазоне отличается от подтверждения, что операции никогда не существовало. Не предполагайте одинаковое хранение истории на всех RPC-адресах и одинаковый смысл любых пустых ответов.
Документация ERC-4337 отдельно описывает связь с EntryPoint. Имеют значение сеть и поддерживаемая версия контракта. Скопированный идентификатор, проверенный на другой цепи или в неподдерживаемом контексте, не отвечает на вопрос о первоначальном платеже. При обращении поддержке сохраните этот контекст, а не только короткую подпись «хеш».
Отделите расходы пакета от суммы платежа
Отправителем внешней транзакции может выступать bundler, а не аккаунт, чью операцию вы начали. Незнакомый внешний sender поэтому сам по себе ещё не доказывает подмену кошелька. Восстанавливайте действия по аккаунту UserOperation и её эффектам. При этом получателя и актив всё равно проверяют: техническое объяснение внешнего отправителя не удостоверяет правильность назначения средств.
Общий расход газа транзакции также относится к другой области, чем стоимость отдельной операции. Спонсирование добавляет ещё один уровень учёта, а не обещание бесплатности любых действий и не подтверждение платежа. В разборе поддержке отделяйте сумму токенов, сетевые расходы и сервисные списания. Без указания единиц и уровня сравнения легко сопоставить несвязанные величины.
- Сеть, версия приложения и точное название типа ссылки, выданной интерфейсом.
- UserOperation hash, найденный хеш транзакции, соответствующие EntryPoint и аккаунт.
- Результат самой операции и доступная ошибка исполнения вместо одного зелёного статуса пакета.
- Контракт актива, ожидаемые получатель и сумма, номер принимающей заявки или депозита.
Пока результат исходной попытки неизвестен, выясните его до подписи нового платежа. Пересборка способна создать другую операцию. Отсутствие ответа в интерфейсе не означает, что прежняя уже не выполнится. Для поиска публичного чека и содержащей его транзакции поддержке не нужны сид-фраза и приватный ключ. Не раскрывайте их ради сопоставления двух хешей.
Для анализа движения токенов есть отдельный разбор чеков ERC-20 помимо Success. При обмене без регистрации отличайте номер заявки от обоих блокчейн-идентификаторов. Раздел как работает сервис описывает обменный процесс, но не делает UserOperation hash взаимозаменяемым с доказательствами транзакции, нужными принимающей платформе.
Частые вопросы
Что означает UserOperation в ERC 4337 для поиска платежа?
Это операция аккаунта в соответствующем процессе отправки. Её хеш отличается от хеша содержащей транзакции, который получают через связанный поиск после включения.
Может ERC 4337 bundler включить неудачную операцию в успешный пакет?
Да, общий чек относится к пакету, а UserOperation имеет собственный результат. Найдите нужную операцию и прочитайте её результат до вывода об успехе платежа.
Наличие хеша ERC 4337 UserOperation подтверждает оплату?
Нет, первоначальное принятие операции ещё не доказывает включение и нужное движение актива. Найдите чек и проверьте реальные эффекты на правильной сети.
По теме на сайте
Источники
- ercs.ethereum.org/ERCS/erc-4337
- ercs.ethereum.org/ERCS/erc-7769
- docs.pimlico.io/references/bundler/endpoints/eth_getUserOperationReceipt
- github.com/eth-infinitism/account-abstraction/blob/develop/contracts/interfaces/IEntryPoint.sol
- www.alchemy.com/docs/wallets/api-reference/bundler-api/bundler-api-endpoints/eth-get-user-operation-receipt
- docs.erc4337.io/core-standards/erc-4337