Что значит подписать сообщение в кошельке: транзакция и подпись

Что значит подписать сообщение в кошельке: чем подпись отличается от транзакции, что такое permit, Permit2 и setApprovalForAll и как читать окно подписи.

Редакция CoinDropster · Обновлено:

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

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

Транзакция и подпись: в чём разница

Кошелёк умеет делать две принципиально разные вещи. Их легко перепутать, потому что в обоих случаях открывается окно с кнопкой «Подтвердить».

  • Транзакция — это операция, которая отправляется в сеть, изменяет состояние блокчейна и требует комиссии (газа). Перевод, свап, апрув, клейм — всё это транзакции. Результат виден в истории кошелька и в обозревателе блоков.
  • Подпись сообщения — это криптографическое доказательство того, что ты контролируешь адрес и согласен с конкретным текстом или набором данных. Сама по себе она ничего не отправляет в сеть и газа не стоит.

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

Виды подписей, которые встречаются чаще всего

  1. personal_sign. Подпись простого текста. Так работает вход на сайт через кошелёк: тебе показывают читаемое сообщение, например с названием сайта и одноразовым кодом. Обычно это безопасно, пока текст понятен и не содержит слов о разрешениях, переводах или передаче прав.
  2. Структурированные данные (EIP-712). Кошелёк показывает не одну строку, а набор полей: кто, что, сколько, до какого срока. Это стандартный способ подписывать ордера на торговых площадках и разрешения на списание. Читать такие окна сложнее, но именно в полях и содержится смысл.
  3. Permit. Подпись по стандарту EIP-2612 позволяет разрешить адресу тратить твой токен без отдельной транзакции апрува. Поддерживают его не все токены. Поля, которые нужно проверить: spender (кому), value (сколько) и deadline (до какого времени).
  4. Permit2. Общий контракт для разрешений, который используют некоторые приложения. Ты один раз даёшь ему апрув, а дальше конкретные лимиты задаются подписями. Удобно, но означает, что подпись с широкими параметрами работает как полноценный апрув.
  5. setApprovalForAll. Это не подпись, а транзакция, но её часто показывают в похожем окне. Она даёт указанному адресу право перемещать все NFT выбранной коллекции, а не один. Срока и лимита у неё нет, пока ты сам её не отзовёшь.
  6. Слепая подпись. Ситуация, когда кошелёк показывает не расшифрованные поля, а длинную шестнадцатеричную строку или хеш. Прочитать смысл невозможно, и ты соглашаешься, не зная, на что именно.

Как читать окно подписи

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

  1. Откуда запрос. Кошелёк показывает домен сайта. Он должен совпадать с тем, куда ты шёл осознанно. Если ты попал сюда по ссылке из чата или рекламы, сначала прочитай статью о поддельных сайтах клейма.
  2. Что за действие. Вход, ордер, разрешение на токен, разрешение на NFT? Если окно не называет действие понятными словами, это повод остановиться.
  3. Кто получатель. Поле spender, operator или to. Незнакомый адрес без объяснения, зачем он нужен, — плохой знак.
  4. Какой объём. Конкретная сумма или «неограниченно»? Для токена бесконечное значение означает, что адрес сможет забрать весь баланс этого токена сейчас и в будущем. Для NFT аналог — «все токены коллекции».
  5. Какой срок. Поле deadline или expiration. Разрешение без срока или со сроком в далёком будущем дольше остаётся опасным.
  6. Можно ли прочитать. Если вместо полей показан набор байтов, не подписывай. Многие аппаратные кошельки по умолчанию отключают такие подписи, и включать эту настройку без крайней необходимости не стоит.

Дополнительное правило: ни одна легитимная подпись не просит ввести или показать seed-фразу. Это не подпись, а кража. Как хранить фразу и ключи, разобрано в статье о хранении seed-фразы.

Если уже подписал, и что делать заранее

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

Практические привычки, которые снижают риск:

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

В каталоге CoinDropster у каждого проекта есть страница со статусом и ключевыми фактами, а смена статуса — Potential, Confirmed, Snapshot, Verification, Reward available или Distributed — отслеживается. Это помогает понимать, на какой стадии проект и можно ли вообще ожидать запрос на клейм: если статус не предполагает раздачи, просьба «срочно подтвердить кошелёк» вызывает вопросы. Чек-листы в приложении помогают держать дедлайны под рукой, чтобы не действовать в спешке. Смотреть отслеживаемые аирдропы →