< 返回新闻中心

SSP Connect 新增 pay 动作

·阅读 4 分钟·作者:SSP Editorial Team
深蓝色 SSP 封面,带二维码、钱包、闪电与盾牌图标,宣布 SSP Connect 的 pay 动作

2024 年 2 月 11 日,SSP Connect 从一个只用于查看与身份的协议升级为支付协议。SSP Wallet v1.1.0 版本为 SSP Connect 增加了 pay 方法,让任何 dApp 或网站都能向 SSP 用户发起一次真实的链上支付请求,而无需重新实现钱包的底层管道。请求的形态被刻意保持得很小:三个参数,其中一个特意定义为字符串。

TL;DR

  • SSP Connect 在已有身份流程之外新增了 pay 动作。
  • 一次支付请求恰好包含三个参数:chainaddressamount
  • amount 故意是字符串,用以在传输中保留小数精度。
  • 签名流程仍然端到端跑在用户的两台设备上,dApp 从不接触私钥。
  • 集成方应在发送前使用 BigNumber.toFixed()(或等价方式)格式化 amount

SSP Connect 是什么

SSP Connect 是 SSP Wallet 用户与外部世界之间的桥梁。它正是与 SSP Wallet 上线 同期推出的那套轻量会话协议——在该方案中,钱包本身是一个真正的 2-of-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 双精度浮点数,对金钱来说恰恰是错误的表示。0.1 + 0.2 并不等于 0.3,18 位小数的代币金额根本无法在不发生静默舍入的情况下塞进一个 double。把 amount 强制为字符串,在协议边界处一次性消除了整类精度 bug:dApp 内部计算出来的数值——通常借助某种 big-decimal 库——可以原样无损地抵达钱包。发布说明建议在发送前使用 BigNumber.toFixed() 来格式化数值,这是把 big-decimal 渲染为精确、非科学计数法字符串的标准做法。

接下来该做什么

如果你维护着一个已经使用 SSP Connect 做身份验证的 dApp 或网站,升级路径很短:保留现有会话,并在原先提示用户复制地址的位置加上一个 pay 请求。把 chain 校验为你真正愿意接受的 SSP 支持资产清单中的一项,在客户端先校验 address,让用户在抵达钱包前看到错误;并始终通过你那套 big-decimal 库的 toFixed()(或等价方法)来格式化 amount,使发送出去的字符串与你内部计算的数值完全一致。剩下的——确认、签名、广播——由钱包负责,自始至终都不会向你的 origin 暴露任何私钥。

Source: SSP Wallet v1.1.0 发布说明.

分享本文

相关文章