Перевести предмет между кошельками с аппаратного кошелька — значит подтвердить на маленьком экране операцию, которую этот экран показывает не полностью. Адрес назначения, который высветит устройство, принадлежит не получателю предмета, а контракту коллекции. Получатель и номер экземпляра спрятаны в поле данных. Если прошивка не умеет разбирать это поле, вы подписываете набор байтов. Отсюда и правило: сверять на экране надо сеть, адрес контракта и расшифрованные аргументы.

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

Что аппаратное устройство защищает, а что нет

Устройство решает одну задачу: закрытый ключ не покидает чип. Против кражи ключа этого достаточно. Против неверного решения — нет. Подпись останется подлинной, даже если подписали не то.

Разница между монетой и коллекционным предметом здесь становится ощутимой. Перевод монеты устройство выводит целиком: адрес получателя, сумма, плата — три поля, каждое читается. Перевод предмета — это вызов функции у постороннего контракта, и на экране от него остаётся адрес этого контракта плюс нечитаемая строка.

Корень трудности описан в стандарте подписи типизированных данных. EIP-712 создан 12 сентября 2017 года, статус Final; в разделе мотивации сказано прямо: подписываемые сообщения сегодня показывают пользователю непрозрачной шестнадцатеричной строкой, почти без сведений о том, из чего сообщение состоит. Для подписи транзакций действует та же логика, и расшифровку берёт на себя прошивка.

Из редакционной практики: владельцы устройств нередко считают экран доказательством безопасности операции. Экран — доказательство её содержания, и только в той мере, в какой прошивка сумела это содержание прочитать.

Как перевести предмет между кошельками с аппаратного кошелька: что выводится на экран

Разберём поля по порядку. Устройство листает их именно так.

Поле на экране Что в нём на самом деле Типичное неверное чтение
Сеть или идентификатор цепочки Сеть, в которой уйдёт транзакция Пропускают, считая, что сеть выбрана в приложении на компьютере
Адрес назначения Адрес контракта коллекции Принимают за адрес получателя предмета и пугаются незнакомого адреса
Сумма Нуль: предмет не переводится как сумма Нуль читают как ошибку или как бесплатность всей операции
Функция или данные Имя вызова, если прошивка его опознала, иначе набор байтов Нечитаемую строку пролистывают, нажимая подтверждение
Аргументы вызова Адрес получателя, номер экземпляра, у второго стандарта ещё и количество Номер из многих цифр сверяют по первым знакам
Плата сети Предельная сумма платы за эту транзакцию Считают платой площадки или роялти коллекции

Второе и четвёртое поля и образуют весь сюжет. Контракт коллекции на экране выглядит как чужой адрес, и это нормально. Нечитаемое поле данных нормальным не является.

Схема из пяти проверок на экране устройства: сеть, адрес контракта коллекции, нулевая сумма, расшифрованная функция, аргументы с получателем и номером
Схема из пяти проверок на экране устройства: сеть, адрес контракта коллекции, нулевая сумма, расшифрованная функция, аргументы с получателем и номером

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

Издержки: комиссии, роялти, газ при подписи на устройстве

Цена операции от выбора устройства не зависит. Структура расходов — зависит.

  • Плата сети берётся за каждую подпись отдельно: разрешение, перевод и отзыв разрешения — три транзакции и три платы.
  • Перевод между своими адресами тарифа торгового сервиса не создаёт: удержания сервиса возникают при продаже.
  • Роялти коллекции при переводе тоже не возникают. ERC-2981 (создан 15 сентября 2020 года, идентификатор интерфейса 0x2a55205a) называет выплату добровольной, поскольку перевод между кошельками сделкой не является.
  • Отменённая на устройстве транзакция платы не стоит, если подпись не поставлена: неподписанное в сеть не уходит.
  • Повторная попытка после отказа устройства — новая транзакция с новой платой, а не продолжение прежней.

Как складывается итоговая сумма по всем транзакциям операции, разобрано в материале о том, как перевести предмет между кошельками и понять структуру комиссий. Удержания на стороне сервиса показывает текст о том, как разобраться в комиссиях площадки.

Хорошая новость про приём предмета на аппаратный адрес. Такой адрес — обычный внешний счёт без кода, и стандарт ERC-1155 (создан 18 июня 2018 года, идентификатор интерфейса 0xd9b67a26) прямо запрещает вызывать на внешнем счёте приёмные функции onERC1155Received и onERC1155BatchReceived. У ERC-721 проверка получателя тоже срабатывает только при наличии кода по адресу. Значит перевод на аппаратный кошелёк не может сорваться из-за отсутствия приёмного интерфейса.

Обратная сторона известна. Приложение-компаньон устройства показывает далеко не все коллекции: предмет на адресе есть, а в списке приложения его нет, и это ни о чём не говорит. Владение проверяется в обозревателе. Интерфейс производителя здесь не судья.

Пошаговый сценарий сверки на экране

  1. До подключения устройства выпишите со страницы предмета адрес контракта и номер экземпляра. Сверять на экране нужно с заранее записанным, а не с тем, что показывает та же страница рядом.
  2. Убедитесь, что приложение нужной сети на устройстве обновлено. Поддержка расшифровки вызовов зависит от версии приложения, и на старой прошивке читаемый ранее перевод превращается в набор байтов.
  3. Соберите транзакцию в кошельке и начните листать экраны устройства. Первым сверяйте идентификатор цепочки.
  4. Сверьте адрес назначения с выписанным адресом контракта целиком, знак за знаком. Совпадение первых четырёх и последних четырёх символов ничего не доказывает.
  5. Проверьте, что сумма нулевая, а имя функции выведено словами. Если на экране только данные без расшифровки, отклоните подпись и разбирайтесь, почему прошивка не опознала вызов.
  6. В аргументах сверьте адрес получателя и номер экземпляра. Для второго стандарта проверьте ещё и количество: единица там не подразумевается по умолчанию.
  7. После подтверждения найдите событие смены владельца в журнале транзакции и убедитесь, что номер в нём тот же, что на экране устройства.

Пятый шаг обычно и вызывает спор. Отказ от подписи кажется потерей времени, пока не вспомнишь, что подпись необратима, а повторная сборка транзакции стоит минуту.

Риски: слепая подпись и схемы вокруг неё

Мошеннические сценарии в этом сегменте построены на одном допущении: человек с устройством подтверждает не читая, полагаясь на само наличие устройства.

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

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

Материалы по теме:

Итог

Аппаратный кошелёк переносит защиту с компьютера на чип, но решение о подписи остаётся за человеком, и в операции с коллекционным предметом это решение приходится принимать по неполному экрану. Читаемая расшифровка вызова — не удобство, а условие осмысленного подтверждения. Нет расшифровки — нет и подписи.

Первоисточники откройте сами. Предупреждение о непрозрачной шестнадцатеричной строке, которую видит подписывающий, и перечень полей домена подписи — в тексте стандарта EIP-712. Условия проверки получателя и предупреждение о возможной безвозвратной потере при небезопасном переводе — в тексте стандарта ERC-721. Данные сверены на 17 октября 2026 года. Что проверить не удалось: единого перечня коллекций и площадок, чьи вызовы умеет расшифровывать конкретная прошивка, производители не публикуют, и глубину поддержки приходится выяснять на самом устройстве до операции.

Частые вопросы

Почему на экране устройства незнакомый адрес, а не адрес получателя?

Так и должно быть. Транзакция адресована контракту коллекции, он и выводится в поле назначения. Адрес человека, которому уходит предмет, лежит в аргументах вызова и виден только после расшифровки поля данных. Сверяйте адрес назначения с адресом контракта со страницы предмета, а получателя ищите ниже, в разобранных аргументах.

Устройство показывает нулевую сумму. Операция не сработает?

Сработает. Предмет не передаётся как сумма: он меняет владельца внутри контракта, а сама транзакция денег не несёт. Нуль в поле суммы — штатная картина для перевода коллекционного предмета. Отличать его нужно от нулевой платы сети: плата ненулевая всегда, и она выводится отдельным экраном.

Что делать, если прошивка не расшифровала поле данных?

Отклонить подпись. Дальше обновить приложение нужной сети на устройстве и повторить сборку транзакции. Если расшифровка не появилась, выполните перевод из интерфейса, который формирует стандартный вызов перевода, а не собственную функцию площадки. Подписывать нечитаемые байты, опираясь на подпись страницы, значит отдавать решение странице.

Может ли перевод на аппаратный кошелёк не дойти из-за проверки получателя?

Нет. Адрес устройства — внешний счёт без кода, и стандарт второго семейства прямо запрещает вызывать на таком счёте приёмные функции, а проверка в первом семействе срабатывает лишь при наличии кода по адресу. Предмет придёт. Другое дело, что приложение производителя может его не отобразить, и проверять владение стоит в обозревателе.

Чем отличается подпись сообщения от подписи транзакции на устройстве?

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

Вердикт

Устройство защищает ключ, а не владельца, и в сегменте коллекционных предметов этот зазор шире, чем при работе с монетами: на экране нет ни картинки, ни имени коллекции, а номер экземпляра выглядит как случайная длинная цифра. Редакционное правило здесь жёсткое: нечитаемое поле данных — повод отклонить подпись, а не повод пролистать экран. Пара выписанных заранее величин, адрес контракта и номер, превращает сверку в механическую процедуру на тридцать секунд. Остальное делает прошивка, если она умеет.

Разборы операций с коллекционными предметами и предупреждения о свежих схемах выходят в нашем Telegram-канале Cryptium.