# アカウントの管理

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

このガイドでは、アカウントを新しいキーセットに移行するという、重要なアカウント管理操作に焦点を当てます。これは、アドレス、残高、またはアセットを変更することなくアカウントの所有権を変更できる、不可欠なセキュリティ機能です。


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

`migrateAccount` 関数を使用すると、既存のアカウントアドレスを新しい公開キーに関連付けることができます。これは、次のような複数のシナリオで役立ちます。

* **キーの漏洩**：秘密キーが漏洩した疑いがある場合、アカウントを新しい安全なキーペアに移行して不正アクセスを防ぐことができます。
* **セキュリティのアップグレード**：古いタイプのキーから、より新しく安全なキーに移行したい場合があるかもしれません。

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

### パラメータ

<x-field-group>
  <x-field data-name="from" data-type="WalletObject" data-required="true">
    <x-field-desc markdown>移行対象の現在のアカウントを表すウォレットオブジェクト。所有権を証明するために、このウォレットでトランザクションに署名する必要があります。</x-field-desc>
  </x-field>
  <x-field data-name="to" data-type="WalletObject" data-required="true">
    <x-field-desc markdown>制御が移転される新しいウォレットオブジェクト。このウォレットの公開キーが、アカウントアドレスの新しい権限になります。</x-field-desc>
  </x-field>
</x-field-group>

### 戻り値

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

### 例

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

```javascript アカウントの移行 icon=logos: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 new keys associated with ${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();
```

---

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