ウォレットの高度な操作
これらの操作は、アクセス権を変更するか、鍵素材を開示します。 操作ごとに、新たなユーザー操作から開始してください。進行状況を表示してください。 監査のために、返された識別情報や記録を保持してください。
前提条件
ウォレットの設定と認証を完了し、有効なウォレットセッションを取得してください。 デバイス連携には、カメラ、またはQRペイロードをデバイス間で渡す手段も必要です。
別のデバイスを連携する
デバイス2は、短時間のセッションを開始してQRコードを表示します。 デバイス1は、そのコードを読み取り、新たに認証してリクエストを承認します。
import { useState } from 'react';
import { QRScanMode, ShowQRCode, useDeviceLinking } from '@seams/wallet/react';
import type { LinkDeviceFlowEvent, QrLinkedDeviceSessionPayloadV5 } from '@seams/wallet';
function logLinkEvent(event: LinkDeviceFlowEvent): void {
console.log(event.phase, event.status, event.message);
}
// Device 2: `ShowQRCode` runs the whole start/display/expire cycle, including
// picking the target factor and cancelling an abandoned session.
export function NewDeviceLinkCode() {
const [isOpen, setIsOpen] = useState(false);
return (
<>
<button onClick={() => setIsOpen(true)}>Show link code</button>
<ShowQRCode
isOpen={isOpen}
onClose={() => setIsOpen(false)}
onEvent={logLinkEvent}
onError={(error) => console.error('Device link failed', error)}
/>
</>
);
}
// Device 1: scan the code and approve.
export function ApproveLinkedDevice(props: { qrData: QrLinkedDeviceSessionPayloadV5 }) {
const { linkDevice } = useDeviceLinking({
onEvent: logLinkEvent,
onError: (error) => console.error('Device link failed', error),
});
return (
<button onClick={() => void linkDevice(props.qrData, QRScanMode.CAMERA)}>Approve device</button>
);
}デバイス2のShowQRCodeがセッションを開始し、コードを表示します。 画面を閉じると、放置されたセッションをキャンセルします。未完了のQRセッションには有効期限を設定してください。 成功後はデバイス名を表示し、後で識別して取り消せるようにしてください。
ウォレットアカウントを復元する
アカウントレコードのウォレットIDを使い、復元の同期を呼び出します。
これは、既知のウォレットのアカウント状態を同期します。 復元コードの入力と新しい認証方法の確認は、ホストするウォレットメニューが処理します。 ウォレット利用者の復元を参照してください。
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;
}成功結果には、復元したウォレットIDとNEARアカウントIDが含まれます。 返された値でアプリ状態を更新してから、署名操作を表示してください。
Ed25519またはECDSAの鍵をエクスポートする
exportKeyは、対象のエクスポートレーンを特定し、ウォレットオリジンのエクスポートビューアーを1回の呼び出しで開きます。
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() },
});
}exportNearKeyは、ウォレットのNEARアカウントのEd25519レーンをエクスポートします。 exportEvmKeyは、設定済みチェーンのECDSAレーンをエクスポートします。 どちらも既定では認証済みウォレットを使い、KeyExportFlowEventで進行状況を受け取ります。
SDKがレーンを選択し、選択したレーンをウォレットオリジンのビューアーへ直接渡します。 このデバイスに対象のエクスポートレーンや素材がない場合、exportKeyはレーンまたは素材のエラーで拒否します。
期待する結果
- デバイス連携は、独立したデバイス認証情報とレーンを作成します。
- 復元の同期は、復元したウォレットとNEARの識別情報を返します。
- エクスポートは、対象レーンの承認後に保護されたビューアーを開きます。
対処可能な失敗
- QRセッションをキャンセルした場合や期限が切れた場合は、再度開始してください。古いQRペイロードを承認しないでください。
- 復元は失敗結果を返す場合があります。同期が成功するまで、既存のアカウント状態を保持してください。
- このデバイスに対象のエクスポートレーンや素材がない場合は拒否します。エラーを表示してください。SDKは別のレーンを選びません。
- エクスポートの承認やビューアーのエラーが発生したら、現在の開示処理を終了してください。再エクスポート前に新たな認証を求めてください。
次に、リンク済みデバイス、復元・エクスポート・鍵のローテーション、結果とエラーを参照してください。