< ニュースルームに戻る

SSP Connect に pay アクションを追加

·4 分で読める·SSP Editorial Team 著
QR、ウォレット、稲妻、盾アイコンをあしらった濃紺の 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 は鍵を見ません。
  • 統合者は送信前に amountBigNumber.toFixed()(または等価物)でフォーマットすべきです。

SSP Connect とは

SSP Connect は SSP Wallet ユーザーと外の世界をつなぐ橋です。これはSSP Wallet のローンチとともに導入された、同じ軽量なセッションプロトコルです。そこではウォレット自体が、ブラウザ拡張機能と電話上に常駐する SSP Key の間で分割された、真の 2-of-2 マルチシグになっています。このリリースより前、Connect は主に読み取り専用のリクエストに使われていました。セッションをペアリングする、アドレスを共有する、あるアカウントを特定のユーザーが管理していることを検証するといった用途です。重要な点は、秘密がユーザーの二台のデバイスを決して離れないことです。Connect は意図と応答を、デバイスと依拠当事者の間で運ぶだけです。

pay アクションが行うこと

pay メソッドは Connect を「あなたが誰か教えてくれ」から「あなたに支払いをお願いさせてくれ」へと拡張します。dApp は pay リクエストを構築して Connect に渡し、ユーザーは自分のウォレット UI でそのリクエストの承認、編集、または拒否を求められます。ユーザーが承認すれば、マルチシグの署名フローはいつも通り走り——拡張機能が準備し、電話が共同署名し——結果として得られたトランザクションがブロードキャストされます。dApp が受け取るのは綺麗な確認か綺麗な拒否のいずれかで、秘密鍵に触れることは決してありません。

三つのパラメータ

chain は支払いに使う SSP 対応資産を指定する文字列で、例えば 'flux' のような値です。これは必須です。値は SSP が内部で既に用いている資産識別子と一致するため、統合者が新しい命名規則を学ぶ必要はありません。

address は支払いの宛先で、選ばれたチェーンが期待するアドレス形式の素の文字列です。これも必須です。SSP はリクエストをユーザーに見せる前に、受信側で通常通り形式とチェックサムの検証を行います。

amount は送る額で、そのチェーンの主単位で表現されます。例えば '4.56' は 4.56 FLUX を意味し、4.56 個の最小不可分単位ではありません。これは必須で、しかも重要なことに、数値ではなく文字列として型付けされています。

なぜ「amount」は文字列なのか

JavaScript の数値は IEEE-754 倍精度浮動小数で、これはお金にとってはまさに誤った表現です。0.1 + 0.20.3 ではなく、小数 18 桁のトークン額は黙って丸められずに double に収まりません。amount を文字列に強制することで、この種の精度バグはプロトコル境界で丸ごと回避されます。dApp が内部で——典型的には big-decimal ライブラリで——計算した値は、ウォレットへの旅路を変わらず生き延びます。リリースノートは送信前に BigNumber.toFixed() で値をフォーマットすることを推奨しています。これは big-decimal を指数表記なしの正確な文字列として描画する標準的な方法です。

次にやること

身元確認のために既に SSP Connect を使っている dApp やウェブサイトを運用しているなら、アップグレードの道筋は短いです。既存のセッションは保ったまま、以前ならユーザーにアドレスをコピーしてもらっていた場所に pay リクエストを置きます。chain は本当に受け入れたい SSP 対応資産のリストと照合し、address はクライアント側で検証してユーザーがウォレットに届く前にエラーを見られるようにし、amount は常に自分の big-decimal ライブラリの toFixed()(または等価物)を通してフォーマットしてください。送る文字列が計算した値と完全に一致するためです。残りの確認、署名、ブロードキャストはウォレットが担い、鍵をオリジンに晒すことはありません。

Source: SSP Wallet v1.1.0 リリースノート.

この記事をシェアする

関連記事