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

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

Что происходит с сегментом сейчас

Предметы живут по двум стандартам. ERC-721 имеет статус Final и создан 24 января 2018 года: один идентификатор — один неделимый предмет. ERC-1155 тоже Final, создан 17 июня 2018 года, и допускает, чтобы один контракт держал и неделимые предметы, и делимые балансы под разными идентификаторами. Мобильный кошелёк показывает их по-разному, и это первое, что стоит опознать перед отправкой.

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

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

Отличий три, и ни одно не делает операцию безопаснее. Разберём по порядку.

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

Второе — техническое. Площадки в операции нет, расчёта нет, посредника нет: вызывается функция контракта. В ERC-721 это transferFrom и две версии safeTransferFrom, одна из которых принимает дополнительные данные. Безопасная версия после переноса проверяет, является ли получатель контрактом, и если да — вызывает у него onERC721Received, ожидая строго определённое возвращаемое значение. Обычный transferFrom такой проверки не делает. Перенос на нулевой адрес стандарт запрещает.

Третье — доказательное, и оно же самое неприятное. Сеть не различает ваши адреса и чужие. Ключ есть — предмет ваш. Ключа нет — предмета нет. Фраза «это же мой кошелёк» не имеет силы: если ключа к адресу у вас нет, предмет недоступен, и отменить перенос нельзя ничем.

Как подтвердить принадлежность второго адреса

Три проверки, по возрастанию надёжности. Делаются один раз на кошелёк и запоминаются навсегда.

Проверка контрольной суммы идёт первой. ERC-55 в статусе Final от 14 января 2016 года описывает запись адреса смешанным регистром: регистр каждой буквы определяется битом хеша. Стандарт приводит цифры — в среднем 15 контрольных бит на адрес и вероятность 0,0247%, что случайно опечатанный адрес пройдёт проверку; это примерно в 50 раз лучше прежней схемы ICAP. Если кошелёк показывает адрес целиком строчными буквами, контрольной суммы в нём нет.

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

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

Издержки: комиссии, роялти, газ

Конкретных тарифов здесь не будет: плата зависит от сети, загрузки и момента, меняется в течение часа и проверяется на дату операции в самом кошельке. Полезнее механика.

Параметр Перевод на свой адрес Отправка третьему лицу Продажа через площадку
Роялти создателю коллекции Не возникает: продажи нет, стандарт ERC-2981 называет выплату добровольной Не возникает по тем же основаниям, хотя смена владельца происходит Удерживается площадкой, если она поддерживает стандарт и решила его соблюдать
Комиссия площадки Отсутствует: площадка в операции не участвует Отсутствует при прямом вызове контракта Удерживается из суммы сделки по тарифу площадки
Плата за вычисления в сети Платит отправитель, размер зависит от сети и загрузки Платит отправитель, порядок тот же Платит та сторона, которая подписывает операцию переноса
Перенос нескольких предметов В ERC-1155 возможен один пакетный вызов, стандарт указывает на экономию издержек Та же возможность, если предметы в одном контракте ERC-1155 Зависит от механики площадки, часто по одной сделке на предмет
Возможность отмены Отсутствует после подтверждения операции сетью Отсутствует, возврат возможен лишь добровольно получателем Отсутствует после расчёта, спор решается правилами площадки

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

Пошаговый сценарий с телефона

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

Что видно в окне подтверждения на малом экране

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

Расчёт редакции по длине адреса. Шестнадцатеричная часть адреса — 40 знаков. Сверка по четырём первым и четырём последним охватывает 8 знаков из 40. Непроверенными остаются 32 знака, что даёт 16 в тридцать второй степени возможных середин — порядка 3,4 × 10 в 38 степени. Контрольная сумма ERC-55 здесь не поможет: подобранный двойник генерируется сразу с корректным регистром.
Сверяйте середину адреса, а не края. Адреса-двойники подбирают именно под совпадение первых и последних символов, и в усечённом виде такой адрес выглядит идентично вашему. Если кошелёк не показывает адрес целиком, скопируйте его в текстовое поле и сравните посимвольно.

Второй усечённый элемент — имя коллекции. Оно приходит из метаданных, а метаданные задаёт проект, и подменить их проще, чем адрес контракта. Доверяйте адресу контракта, а имя считайте подписью на картинке. Подпись подделывают легко.

Риски и мошеннические схемы сегмента

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

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

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

Итог

  • Стандарт предмета и адрес контракта опознаны до начала операции.
  • Владение вторым адресом подтверждено подписью сообщения, а не записью в заметках.
  • Адрес получателя сверен по средним знакам, а не по первым и последним четырём.
  • Сеть в окне подтверждения совпадает с сетью, в которой живёт предмет.
  • На втором адресе есть нативная монета для оплаты будущих операций.
  • Скрытые поля окна раскрыты: адрес контракта, идентификатор, метод вызова.
  • Идентификатор операции сохранён, запись о владении проверена по обозревателю.

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

Нужно ли платить роялти, если я переношу предмет на свой второй кошелёк?

Нет. Стандарт ERC-2981 называет выплату роялти добровольной именно потому, что перенос между кошельками не означает продажи, и отличить одно от другого на уровне функции контракта нельзя. Удержание возникает тогда, когда в операции участвует площадка, решившая стандарт соблюдать. При прямом вызове контракта площадки нет.

Можно ли перенести несколько предметов одной операцией?

Зависит от стандарта. В ERC-1155 предусмотрен пакетный перенос нескольких идентификаторов сразу, и стандарт прямо упоминает экономию издержек при таком вызове. Предметы по ERC-721 переносятся по одному: каждый вызов касается одного идентификатора. Если предметы лежат в разных контрактах, объединить их в один вызов не получится.

Что делать, если предмет отправлен не на тот адрес?

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

Почему кошелёк показывает адрес контракта вместо названия коллекции?

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

Вердикт

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

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