復元とエクスポート
復元は、ユーザーがアクセスを取り戻す操作です。エクスポートは、システム外へ鍵を取り出す操作です。 通常の署名は、引き続きシェアを使います。
以下のフローは、ウォレット利用者のアクセスと鍵を対象とします。 管理型テナントルートの復元、テナント管理のルート復元、計画中のデプロイ移行は、異なる境界で動作します。 復元と移行を参照してください。
シール済み情報による更新
シール済み情報による更新は、意図しないiframeやページの再読み込み後に、封印済みの署名素材を復元します。 ウォレットオリジンのIndexedDBに封印済みセッション素材を保存し、稼働中のサーバーの参加と、有効なサーバー側セッション状態に依存します。
復元するのは、トランザクションの署名機能だけです。 エクスポート、新規デバイス登録、鍵のローテーション、委任エージェントレーンの作成には、新たな操作承認が必要です。
エクスポート
エクスポートは機密性の高い操作です。 新たな操作限定の承認、ルートのポリシー承認、正確なレーンへの紐づけ、監査記録、公開鍵の一致確認が必要です。 素材を返すのは、承認済みのエクスポート経路だけです。
復元
ホストするウォレットメニューは、まず未使用の復元コードを受け取り、次に新しいパスキーかGoogleとメールOTPによるサインインを所有者に選んでもらいます。 どちらの方法でも、パスキーのみ、メールのみ、両方を使うウォレットを復元できます。 コードが復元を承認し、新しい認証方法も自身の要素検証を完了する必要があります。
最終処理は、保存済みの鍵マニフェストを検証し、公開鍵とアドレスを維持します。 1つの不可分な操作で、コードを1つ消費し、新しい認証方法とデバイス権限を追加します。 既存の認証方法、リンク済みデバイス、ウォレットセッションは有効なままです。 復元はアクセスを追加します。侵害されたアクセスの取り消しは、別の操作です。
復元完了後は、新しい方法の通常ログインで、新たなウォレットセッションを作成します。 最終処理前にキャンセルした場合、予約の期限後にコードを再利用できます。 消費済みのコードでは、別の復元を承認できません。
アカウント同期の実装例
syncAccountは、アカウント状態を同期します。 前述の復元コードと新しい認証要素の手順は、ホストメニューが管理します。 ウォレットとアカウントの識別情報は、同期結果の成功分岐からだけ読み取ってください。
実行可能なTypeScriptの実装例
import type { SeamsWeb } from '@seams/wallet';
type SyncAccountResult = Awaited<ReturnType<SeamsWeb['recovery']['syncAccount']>>;
export async function recoverWalletAccount(
seams: SeamsWeb,
walletId: string,
): Promise<SyncAccountResult> {
const result = await seams.recovery.syncAccount({ walletId });
if (!result.success) {
throw new Error(result.error);
}
console.log('wallet account restored', result.walletId, result.nearAccountId);
return result;
}エクスポートの実装例
ウォレットオリジンのビューアーが鍵素材を開示する前に、対象のEd25519またはECDSAレーンを特定します。
実行可能なTypeScriptの実装例
import { logWalletEvents, type SeamsWeb } from '@seams/wallet';
export async function exportNearKey(seams: SeamsWeb): Promise<void> {
await seams.keys.exportKey({
kind: 'ed25519',
options: { onEvent: logWalletEvents() },
});
}
export async function exportEvmKey(seams: SeamsWeb): Promise<void> {
await seams.keys.exportKey({
kind: 'ecdsa',
chainTarget: 'tempo-testnet',
options: { onEvent: logWalletEvents() },
});
}