メインコンテンツまでスキップ

スマートアカウントの作成と復元

wallet_prepareSmartAccountは、dappへの導入用にPaliスマートアカウントを作成します。Paliはアカウントを導出し、設定されたファクトリーからデプロイし、必要に応じて要求されたバリデーターをインストールします。その後、要求元のdappにアカウントを接続し、永続的なアカウントメタデータをローカルのウォレット状態に書き込みます。

ローカルのウォレット状態は、Paliが操作できるスマートアカウントを表します。スマートアカウントは、パスキーバリデーター、ECDSAバリデーター、複合バリデーター、または作成後にインストールされたガーディアン復旧モジュールで制御されます。

スマートアカウントとファクトリーの構成​

スマートアカウントシステムは、次の要素で構成されます。

  • **ファクトリー:**決定的なアドレスを計算し、初期モジュールデータを使ってアカウントをデプロイします。
  • **スマートアカウント:**呼び出しを実行し、インストール済みモジュールを追跡して、バリデーターモジュールに署名の承認を求めます。
  • **バリデーター:**操作を許可します。PaliはECDSA、P-256 WebAuthnパスキー、複合バリデーターに対応しています。
  • **エグゼキューター:**アカウントの機能を拡張します。Paliはガーディアン復旧をエグゼキューターモジュールとして使用します。

ファクトリーのアカウントパラメーターには次のものがあります。

パラメーター意味
saltウォレットのアンカー、アカウント番号、チェーン、アカウントのバージョンからPaliが導出する、決定的なデプロイ用ソルト。
initialValidator初期デプロイに使うバリデーターモジュール。Paliは決定的なセットアップのために、ウォレットが管理するECDSAバリデーターを使用します。
initDataエンコード済みのバリデーター初期化データ。

デプロイ後、Paliは1回のスマートアカウントの一括処理で、要求されたバリデーターをインストールし、初期バリデーターを削除できます。この仕組みにより、dappがパスキー制御のアカウントを要求しても、Paliは初回のデプロイ経路を決定的に保てます。

パスキーで制御するアカウントの作成​

const smartAccount = await window.ethereum.request({
method: 'wallet_prepareSmartAccount',
params: [
{
label: 'Pali Wallet Passkey',
authenticator: { id: 'p256-webauthn' },
},
],
});

dappがauthenticatorを省略すると、Paliは既定でパスキーの処理を使用します。{ id: 'p256-webauthn' }のようにidだけを指定し、ウォレットが管理する認証情報の選択・作成をPaliに任せてください。外部のECDSA所有者には、引き続き以下の明示的な確認手順を使用します。

ECDSAスマートアカウントの作成​

const smartAccount = await window.ethereum.request({
method: 'wallet_prepareSmartAccount',
params: [
{
label: 'Team account',
authenticator: {
id: 'ecdsa',
config: {
owners: ['0xOwnerAddress'],
threshold: 1,
},
},
},
],
});

すでにローカルのPaliウォレットアカウントであるECDSA所有者は、ウォレット管理の所有者として扱われます。外部ECDSA所有者アドレスは、今後のスマートアカウント操作を承認できるため、明示的な警告と確認の後にだけ許可されます。

作成とデプロイの動作​

dappがスマートアカウントを要求すると、次の処理が行われます。

  1. Paliは、アクティブなチェーンにPaliスマートアカウント基盤が設定されていることを確認します。
  2. 次の決定的なアカウント記述子とカウンターファクチュアルアドレスを導出します。
  3. 要求された認証器を作成または正規化します。
  4. dappのホスト、アカウントのラベル、認証器の種類、外部ECDSA所有者を表示します。
  5. アカウントをローカルに作成し、初期バリデーターと共にオンチェーンにデプロイします。
  6. 要求されたバリデーターが初期バリデーターと異なる場合、スマートアカウントの実行を通じて、要求されたバリデーターをインストールし、初期バリデーターをアンインストールします。
  7. 確認を待ち、永続的なスマートアカウントメタデータを保存して、アカウントをdappに接続します。

生成されたアドレスがすでにローカルに存在する場合、Paliはそのローカルのスマートアカウントを再利用できます。

アドレスを決めるもの​

スマートアカウントのアドレスは、ファクトリー、アカウント実装、初期バリデーターの初期化データ、Paliの決定的なデプロイ用ソルトから導出されます。Paliはウォレットのアンカーとアカウント番号からソルトを導出するため、ランダムなローカル状態ではなく、ウォレットのメタデータからアカウントを復旧できます。

ローカルのPaliデータを失った場合​

スマートアカウントを復旧するPaliの設定画面
復旧画面では、Paliで作成したアカウントの再構築や、ガーディアン復旧による有効なバリデーターの置き換えを通じて、スマートアカウントへのアクセスを取り戻せます。

ブラウザープロファイル、拡張機能のストレージ、ローカルのスマートアカウントメタデータを失った場合、復旧方法はアカウントの現在のモジュールによって異なります。

  • Paliで作成した決定的なアカウントは、ウォレットのアンカー、チェーン、アカウント番号、ファクトリー設定から再構築できます。
  • パスキーバリデーターは、今後の操作を許可するために、対応するWebAuthn認証情報を引き続き必要とします。
  • 元の承認方法が使えない場合、ガーディアン復旧により、設定された待機期間後に有効なバリデーターを置き換えられます。

Paliの復旧は自己管理型です。サーバーのバックドアではなく、アカウントにインストールされたモジュールを回避することもできません。

RP IDと認証情報名​

ブラウザーまたはオペレーティングシステムのパスキーアサーション画面
復旧と実行には、対象のパスキー認証情報によるWebAuthnアサーションが必要です。

拡張機能オリジンのWebAuthnで実際に使われるRP IDは、ウォレット側の処理で指定されない限り、ブラウザーが決定します。Paliは既定の共有認証情報にPali Wallet Passkeyという名前を付け、要求されたアカウントのラベルをユーザー向けのアカウント関連付けに使用します。