Account Abstractionの威力:RaisePay Walletの技術的概要
現在のブロックチェーン技術は、従来の手法では乗り越えられない限界に直面しています。ブロックチェーン分野では、新しい革新的なソリューションが求められているのです。
ここで議論する限界は、スケーラビリティの問題に起因するものではありません。Ethereumコミュニティはロールアップ中心のアプローチに取り組んできており、Optimism、Arbitrum、ZkSync、Starkwareといった複数のL2ソリューションがメインネット上で稼動し、その成果が現れ始めています。各ソリューションは、チェーン全体のスループットを秒間に数十から数千トランザクションまで向上させ、低い取引手数料やカスタム署名検証といった便利な仕組みを提供しています。
そして、最も注目すべきソリューションがAccount Abstraction(アカウント抽象化、以下AA)です。このソリューションがもたらす威力について、実際に構築している製品Raise Wallet、RaisePayをもとにしてわかりやすく説明します。
ウォレットのUXが抱える問題
中央集権型ウォレット — 暗号通貨取引所
なぜ多くのユーザーが、暗号資産を中央集権型取引所に置くことを好むのでしょうか?答えは簡単で、即時のアクセス性に加えて、パスワード紛失を気にすることなく使えるからです。端的にいうと「Web2と同様のUXを提供しているから」です。ユーザーは基礎となる技術を理解する必要がなく、暗号資産を簡単に利用することができます。しかし、資産を取引所に依存することで、大手取引所が倒産し、何千人ものユーザーが一銭も手にすることができなくなったことは記憶に新しいでしょう。
セルフカストディ・ウォレット(ホット&コールド)
セキュリティ面では一歩前進ですが、既存のセルフカストディは、ユーザーがウォレットの秘密鍵/公開鍵の生成やシードフレーズを保管する必要性など、ブロックチェーン技術をある程度理解していることが前提になります。秘密鍵が失われると、資金は永久に失われ、回復する方法は一切存在しません。秘密鍵の紛失や漏洩は、業界のベテランにとっても恐ろしいことです。このようなウォレットのUXで、10億人の暗号ユーザーを取り込むことができるわけがないでしょう。主流採用を考えるのであれば、何かもっと良い方法があるはずです。
AAによるハイブリッドアプローチ
AAは、暗号ウォレットと決済のUXに革命を起こす可能性を秘めています。zkSyncのAAのネイティブ統合、カスタム署名検証、ソーシャルリカバリーのサポートによって、ユーザーにとってアクセス可能で使いやすい、画期的なウォレット体験を生み出すことができるのです。では、どのようにこれを実現するのかを説明していきましょう!
ウォレットの作成とサインイン
Netflixの購読料を定期的に支払い、Airbnbでアパートを借り、週末にTinderでスワイプしている友人を想像してください。多くの人は、暗号ウォレットのインストールや、暗号資産を生活に取り入れることも考えたことがないはずです。これが現段階での典型的なオンライン決済ユーザーの状態です。
暗号決済ソリューションが社会に受け入れられるようにするには、ユーザーが以下のことを簡単にできるようにすることが重要です:
- ウォレットの作成
- オンランプ資金の取得
- ウォレットへのアクセスとトランザクションの承認
- ウォレットへのアクセス権を失った場合の回復
RaisePayのソリューションが加盟店のチェックアウトページに統合されると、ユーザーは加盟店のウェブサイトを離れることなく、また、アプリや拡張機能をダウンロードする手間なくウォレットを作成できます。
そして、このプロセスにおいてセキュリティを犠牲にすることは一切なく、zkSync上のカスタム署名認証とAAを活用することによって実現できます。さらに、最新のパスワードレス認証プロトコルである「WebAuthn」を使用することで、指紋やシステムピン確認を通じてトランザクションへの署名、セキュリティ強化が可能になります。各署名は、その後、オンチェーンで検証されます。このように、WebAuthnを統合することによって、ユーザーにとってシームレスで安全な決済体験が実現されるのです。
舞台裏で何が起きているのかを概説していきましょう:
1.ウォレットの作成:クライアント側はブラウザのAPIにリクエストして、システム認証機能内のユーザーに対してキーペアとなる新しいクレデンシャルを作成します。このキーペアはID(credentialId)と公開鍵で構成されています。クレデンシャルIDは、ブラウザに関連するキーペアでデータに署名要求するために使用されます。
次に、そのコンストラクタに渡された認証データを用いて、ユーザーのアカウントを抽象化したものを配置します。WebAuthnの場合は、公開鍵を渡す形です。これによって、ユーザートランザクションは指紋認証を使用して署名できるようになります。ユーザーAAは、トランザクションからカスタム署名を抽出し、正しいキーによる署名を検証します。
2. ウォレットのサインイン:ログインでは、ランダムな文字列を生成し、ブラウザにユーザーの指紋で署名し、ウォレットのスマートコントラクトでEIP-1271関数「isSignatureValid」を使用して検証します。
署名が有効であれば、ユーザーがトランザクションに署名できることが確認され、次のステップに進むことができます。Raiseの実装では、ES256やRS256といったWebAuthnで使用されている署名アルゴリズムをスマートコントラクト内で使用して検証を行います。このプロセスはバックエンドとの通信を必要とせず、zkSyncネットワークが稼働している限りウォレットは機能します。将来的には、ウォレットのフロントエンドをIPFSに移行し、分散化のレベルを高める予定です。
3. トランザクションの署名:トランザクションに署名するには、ブラウザにトランザクションの署名を生成するよう要求します。その後、署名はブロックチェーンに送信・検証されます。署名が有効な場合、トランザクションは処理されます。このプロセスによって、トランザクションが承認され、安全が保証されます。
信頼できないWebサイトが信頼できるWebサイトのクレデンシャルを使ってデータに署名することを防ぐため、全てのクレデンシャル(キーペア)は何らかのソースにバインドされています。例えば、example.comが生成したクレデンシャルをsample.comが使用してデータに署名することはできません。
ソーシャルリカバリー
ユーザーが自身のウォレットにアクセスできなくなった場合、ソーシャルリカバリーを使用して復元することができます。ソーシャルリカバリーは、ウォレットを復元しようとする人の真正を確認できるスマートコントラクトやユーザーであるガーディアンの概念に基づいて構築されています。ガーディアンは、近親者やメール認証、ソーシャルメディア認証、電話番号認証など、様々なオプションから選択することが可能です。ユーザーは自身のアカウントに最大7人の保護者を定義でき、その保護者がRaisePay Walletのユーザーでない(専門知識がない)場合でも、メールメッセージに従って回復を承認することができる仕組みです。
ガーディアンは基本的にスマートコントラクトのアドレスで、ユーザーの認証要求を承認または拒否します。Raiseでは、デフォルトのガーディアンとしてRaise Guardianを実装しています。将来的には、独立したサービスが私たちのウォレットのためにガーディアンを作成するプログラムを導入し、簡単にシステムに統合できるようにする予定です。
RaisePay Walletの連携によって得られる利点
1.メタマスクのような接続性
ユーザーウォレットを分散型アプリケーション(dApps)やゲームに接続するために使用されるwagmiやweb3-reactライブラリ用のコネクタを実装しました。これによって、数行のコードを追加するだけで、RaisePay Walletを追加することが可能です。私たちのソリューションは、他のライブラリにも統合することができます。
Raiseのウォレットでは、1つのトランザクションしか承認されないメタマスクとは異なり、ユーザーが複数のトランザクションを同時に処理することが可能です。ユーザーは全てのトランザクションをトランザクションページで確認でき、そこでトランザクションの総資産が計算されるので、ユーザーは(USDT/USDC)のなどのステーブルコインによるコスト管理がしやすくなります。
RaisePay Walletは、ユーザーがWeb3ストアで商品を購入する際に、1回のトランザクションで全ての購入処理を完了できるため、個別の承認が不要になります。これは、承認と送金トランザクションを一括して行うことで可能となり、ユーザーにとってより利便性の高いプロセスを実現します。同様に、ゲーム上でのトランザクション処理が大幅に低減されることも想像できるでしょう。
3. パーミッション付きセッション
RaisePay Walletでは、NFTゲームなど、複数のトランザクションを必要とするWeb3アプリケーションのために、ユーザーが特定のパーミッションでセッションを作成することができます。RaiseAuthnウェブワーカー内で新しいキーペアを作成し、新しいキーペアアドレスでウォレットのスマートコントラクトメソッド「createSession」を呼び出すことによって、ユーザーのウォレットはRaiseAuthnから要求されたセッション署名によって署名されたトランザクションを渡すことができます。このセッションは、使用できるトークンやガス料金の上限を制限したり、どのコントラクトを呼び出し、どのようなアクションが可能かを定義するために使用できます。例えるなら、スマートフォンやMacOSのアプリのパーミッション設定に似ています。
QRコード、ログインコード、ログインリンクを通じてセッションを共有することで、ノートパソコンのブラウザからモバイルデバイスへ、その逆も簡単に行うことができます。これによって、モバイルアプリケーションの内部キーペアのアドレスのみをラップトップのブラウザに転送し、モバイルウォレットの新しいセッションを作成する必要があるため、キーペアの共有が不要になるのです。つまり、ユーザーの好みに応じて、無制限と制限付きの両方のアクセスを許可することができます。
AAによって、WalletConnectのようなプロトコルは不要になります。
これは、利用できなくなる可能性のある外部ブリッジを使用して共有される単一認証に依存するのではなく、単一アカウントに対して複数の認証を使用できることによって実現します。これによって、ユーザーエクスペリエンスとウォレットのセキュリティが大幅に向上します。
4. USDT/USDC/RAISEでの手数料の支払い
Raiseのウォレットのコンセプトは、ユーザーがEtherを購入する必要なくウォレットを使用できるようにすることです。これはzkSyncを使用することで可能となり、「ペイマスター」(トランザクションのカスタムデータに指定された場合、トランザクションに対して支払いを行うことができるスマートコントラクト)を作成することができます。このペイマスターは、支払ったEtherと引き換えに別のトークンで支払いすることもできますし、補助金モデルの一環としてユーザーに無料でトランザクションを提供することも可能です。
現在の設定では、ユーザーのアカウント作成を補助し、取引手数料をステーブルコインで支払うことができます。将来的には、ユーザーがクレジットカード決済を利用してAA作成料を支払うオプションを実装する機能など、シームレスな商取引に対応した柔軟な設定が可能になります。
5. サブスクリプション
ユーザーのウォレットがスマートコントラクトであることによって、ユーザー向けのサブスクの実装が可能になりました。ユーザーは、自身のウォレットに追加することで、サブスクへの申し込みが可能になります。定期購読の設定や登録管理はウォレットのサブスクリプションのセクションで簡単にできます。
一方のサービス提供側は、サブスク条件に従って、定期的にユーザーのウォレットから指定量のトークンを取得できます。この機能によって、ユーザーはサブスクリプションをより合理的かつ効率的に管理でき、サービス提供者は確実に定期支払いを受けられるようになります。
まとめ
この記事では、RaisePay Wallet の技術的な概要を説明しました。今後の記事で各セクションを深く掘り下げ、RaisePay Walletの統合方法についてより詳細な情報を提供していく予定です。RaiseFinanceでは、市場で最もシームレスでユーザーフレンドリーな暗号通貨による決済体験を創造することに専念しています。RaisePay Walletは、業界で最高のソリューションを提供するという私たちのミッションを着実に実現させていきます。