< Назад к новостям

SSP Connect получает действие pay

·4 мин. чтения·Автор: SSP Editorial Team
Тёмно-синяя обложка SSP с иконками QR, кошелька, молнии и щита, объявляющая действие pay в SSP Connect

11 февраля 2024 года SSP Connect перестал быть только протоколом просмотра и идентификации и стал также платёжным протоколом. Версия v1.1.0 SSP Wallet добавляет в SSP Connect метод pay, позволяя любому dApp или веб-сайту запросить настоящий он-чейн платёж у пользователя SSP, не перереализовывая внутреннюю кухню кошелька. Форма запроса намеренно мала: три параметра, один из которых сознательно является строкой.

TL;DR

  • SSP Connect теперь предоставляет действие pay наряду с существующими потоками идентификации.
  • Запрос платежа принимает ровно три параметра: chain, address и amount.
  • amount — строка нарочно, чтобы сохранить десятичную точность при передаче.
  • Поток подписания по-прежнему выполняется сквозным образом на двух устройствах пользователя; dApp никогда не видит ключи.
  • Интеграторам следует форматировать amount через BigNumber.toFixed() (или эквивалент) перед отправкой.

Что такое SSP Connect

SSP Connect — это мост между пользователем SSP Wallet и внешним миром. Это тот же лёгкий сессионный протокол, представленный вместе с запуском SSP Wallet, где сам кошелёк — это настоящий мультисиг 2-из-2, разделённый между расширением браузера и SSP Key, живущим на телефоне. До этой версии Connect использовался в основном для запросов только на чтение: спарить сессию, поделиться адресом, подтвердить, что данный пользователь контролирует данный аккаунт. Ключевой момент: секреты никогда не покидают два устройства пользователя; Connect лишь переносит намерения и ответы между ними и доверяющей стороной.

Что делает действие pay

Метод pay расширяет Connect с «скажи мне, кто ты» до «позволь мне попросить у тебя платёж». dApp формирует запрос pay, передаёт его Connect, и пользователю в интерфейсе кошелька предлагается одобрить, изменить или отклонить запрос. Если пользователь одобряет, поток мультисиг-подписания идёт как обычно — расширение готовит, телефон со-подписывает — и итоговая транзакция рассылается. dApp получает чистое подтверждение или чистый отказ и никогда не касается приватного ключа.

Три параметра

chain — строка, называющая поддерживаемый SSP актив, в котором будет произведён платёж, например 'flux'. Параметр обязательный. Значение совпадает с внутренними идентификаторами активов SSP, поэтому интеграторам не нужно учить новую схему именования.

address — получатель платежа, обычная строка в том формате адреса, который ожидает выбранная цепочка. Этот параметр тоже обязательный. SSP выполняет обычную проверку формата и контрольной суммы на принимающей стороне перед показом запроса пользователю.

amount — значение к отправке, выраженное в основной единице этой цепочки. Например, '4.56' означает 4,56 FLUX, а не 4,56 наименьшей неделимой единицы. Параметр обязательный и, что важно, типизирован как строка, а не как число.

Почему «amount» — строка

Числа в JavaScript — это IEEE-754 double, то есть ровно неподходящее представление для денег. 0.1 + 0.2 — это не 0.3, а суммы токенов с 18 знаками после запятой просто не помещаются в double без молчаливого округления. Принуждение amount быть строкой полностью устраняет этот класс ошибок точности на границе протокола: всё, что dApp посчитал внутри — обычно с помощью big-decimal библиотеки — доходит до кошелька без изменений. В заметках о выпуске рекомендуется форматировать значение через BigNumber.toFixed() перед отправкой; это стандартный способ представить big-decimal как точную строку без научной нотации.

Что делать дальше

Если вы поддерживаете dApp или сайт, уже использующий SSP Connect для идентификации, путь обновления короток: сохраните существующую сессию и добавьте запрос pay там, где раньше предложили бы пользователю скопировать адрес. Проверяйте chain по списку поддерживаемых SSP активов, которые вы действительно готовы принимать, проверяйте address на стороне клиента, чтобы пользователь видел ошибки до кошелька, и всегда форматируйте amount через toFixed() (или эквивалент) вашей big-decimal библиотеки, чтобы отправляемая строка точно соответствовала тому, что вы посчитали. Остальное — подтверждение, подпись, трансляцию — кошелёк берёт на себя, не раскрывая ключи вашему origin.

Source: Заметки о выпуске SSP Wallet v1.1.0.

Поделиться статьёй

Похожие статьи