メインコンテンツへスキップ

アカウントの管理

OCAP を利用したブロックチェーンにおいて、アカウントとは基本的に、暗号キーのペア(公開キーと秘密キー)によって制御される、アドレスに関連付けられた状態のことです。理解すべき重要な概念は、アカウントが暗黙的に作成されるということです。アカウントは、トークンやアセットの転送など、最初の着信トランザクションを受信するとすぐに、オンチェーンで正式に存在することになります。明示的な createAccount トランザクションは存在しません。

このガイドでは、旧アカウントを新しいキーペアが制御する別のアドレスへ移行する操作を説明します。チェーンには新旧アカウントの移行関係が記録されます。手数料、アセットの規則、アプリケーション側の記録は個別に確認してください。残高の数値が変わらないことや、関連するすべてのデータが移ることを保証する操作ではありません。

アカウントを新しいキーに移行する

migrateAccount は移行先ウォレットのアドレスと公開キーを送信し、元のウォレットで署名します。以下の実装では、移行先は送信元とは異なるアドレスで、そのアドレスのアカウント状態がまだ存在しないことが必要です。これは、次のような複数のシナリオで役立ちます。

  • キーの漏洩:秘密キーが漏洩した疑いがある場合、新しいキーペアのアカウントへ移行し、移行が有効になった後の制御を変更できます。有効になる前は、旧キーを持つ攻撃者も操作できる可能性があります。
  • セキュリティのアップグレード:古いタイプのキーから、より新しく安全なキーに移行したい場合があるかもしれません。

この操作は、ブロックチェーン上の履歴と状態を維持しながら、アカウントの制御を効果的に移転します。

パラメータ

  • from WalletObject (required) — 移行対象の現在のアカウントを表すウォレットオブジェクト。所有権を証明するために、このウォレットでトランザクションに署名する必要があります。
  • to WalletObject (required) — 制御が移転される新しいウォレットオブジェクト。このウォレットのアドレスと対応する公開キーが、新しい移行先アカウントを指定します。旧アドレスを維持したまま公開キーだけを置き換える操作ではありません。

戻り値

migrateAccount メソッドは、文字列としてのトランザクションハッシュに解決される Promise を返します。

ソースに基づく訂正(2026 年 9 月 29 日):上記のアドレスの動作は、@ocap/client と @ocap/tx-protocols 1.20.2 の公開実装で確認しています。以前の「アドレスを変更しない」という説明は誤りでした。この操作には元の秘密キーが必要であり、完全に紛失したキーを復旧するものではありません。詳しくはアカウント移行の解説(英語)を参照してください。

以下は過去の SDK サンプルです。使用前にパッケージの互換性を確認し、利用するテストネットの有効なエンドポイントとエクスプローラーを指定してください。旧サンプルのサービスが現在も利用できることは確認していません。

例

古いウォレットから新しいウォレットにアカウントを移行する方法は次のとおりです。

アカウントの移行

javascript
import Client from '@ocap/client';
import { fromRandom } from '@ocap/wallet';

const client = new Client('https://beta.abtnetwork.io/api');

// oldWallet がアカウントに対して現在承認されているウォレットであると仮定します
const oldWallet = fromRandom();

// 新しいキーセットで新しいウォレットを作成します
const newWallet = fromRandom();

async function migrate() {
  try {
    // 移行する前に、通常は oldWallet のアドレスに資金を供給します。
    // この例では、トランザクション手数料を支払うのに十分な資金があると仮定します。
    // テストトークンは https://faucet.abtnetwork.io/ から入手できます
    console.log(`Migrating account from ${oldWallet.address} to target address ${newWallet.address}`);

    const hash = await client.migrateAccount({
      from: oldWallet,
      to: newWallet,
    });

    console.log('Account migration transaction sent successfully!');
    console.log('Transaction Hash:', hash);
    console.log(`View transaction at: https://beta.abtnetwork.io/explorer/txs/${hash}`);

  } catch (err) {
    console.error('Error migrating account:', err);
  }
}

migrate();

キーを移行してアカウントを保護する方法がわかったので、次はプライマリーキーを共有することなく、他のアカウントに限定的な権限を付与する方法を学びたいと思うかもしれません。詳細については、権限の委任ガイドを参照してください。