このセクションでは、@ocap/wallet パッケージの背後にある基本的な概念を紹介します。Wallet オブジェクトとは何か、その構造、作成するさまざまな方法、そして分散型アイデンティティ (DID) との重要な関係について学びます。
Wallet オブジェクトは、単なるキーペアのコンテナではありません。DID に関連するすべての必要な暗号操作を実行するための、強力で自己完結したユーティリティです。キー、DID タイプ情報、およびそのタイプによって定義されたルールに従ってデータを署名、検証、ハッシュ化するためのメソッドをカプセル化しています。
Wallet オブジェクト
WalletObject は、このライブラリの中心的な部分です。デジタルアイデンティティを管理するために必要なすべての情報と機能を保持しています。すべてのウォレットは、次の主要なプロパティで構成されています。
- type
DIDType(required) — ウォレットの暗号アルゴリズムとエンコーディング形式を定義するオブジェクト。 - secretKey
string | Buffer— 秘密鍵。これは署名操作に必要です。秘密にして、安全に保管してください。 - publicKey
string | Buffer(required) — 公開鍵。秘密鍵から派生します。署名の検証に使用されます。 - address
string(required) — ウォレットに関連付けられた分散型識別子 (DID) 文字列。公開鍵から派生します。
Wallet タイプを理解する
ウォレットの動作は、その type によって完全に決定されます。これは、@arcblock/did パッケージの DIDType オブジェクトです。この type オブジェクトは、使用する暗号アルゴリズムと形式を指定します。
DIDType は、4つの主要な部分で構成されています。
| プロパティ | 説明 |
|---|---|
| role | DID の目的を定義します (例: Account、Application、Node)。 |
| pk | 使用する公開鍵アルゴリズム (例: ED25519, ETHEREUM)。 |
| hash | 使用するハッシュアルゴリズム (例: SHA3, KECCAK)。 |
| address | 最終的な DID 文字列のエンコーディング形式 (例: BASE58, BASE16)。 |
このライブラリは、ArcBlock DID 用の 'default' や 'ethereum' など、一般的な構成のための便利なショートカットを提供します。
また、Application DID の作成など、特定のユースケースのためにカスタムのウォレットタイプを定義することもできます。
Wallet Type Configuration
const { WalletType } = require('@ocap/wallet');
const { types } = require('@ocap/mcrypto');
const appWalletType = WalletType({
role: types.RoleType.ROLE_APPLICATION,
pk: types.KeyType.ED25519,
hash: types.HashType.SHA3,
address: types.EncodingType.BASE58,
});
// これで、このタイプを使用して新しいウォレットを作成できます
// const wallet = fromRandom(appWalletType);Wallet の作成
利用可能な情報に応じて、いくつかの方法でウォレットをインスタンス化できます。次の図は、一般的なプロセスを示しています。

以下は主要なファクトリ関数です。
fromRandom
これは、まったく新しいウォレットを作成する最も簡単な方法です。新しいランダムな秘密鍵を生成し、対応する公開鍵とアドレスを派生させます。
const { fromRandom } = require('@ocap/wallet');
// デフォルトの ArcBlock タイプで新しいウォレットを作成する
const wallet = fromRandom();
console.log('新しいウォレットのアドレス:', wallet.address);
console.log('秘密鍵:', wallet.secretKey);fromSecretKey
すでに秘密鍵を持っている場合にウォレットを復元するには、この関数を使用します。これは、既存のアイデンティティを読み込む最も一般的な方法です。
const { fromSecretKey } = require('@ocap/wallet');
const sk = '0xD67C071...'; // 既存の秘密鍵
const wallet = fromSecretKey(sk);
console.log('復元されたウォレットのアドレス:', wallet.address);fromPublicKey
公開鍵しか持っていない場合は、「読み取り専用」のウォレットを作成できます。このウォレットは署名の検証やアドレスの派生に使用できますが、秘密鍵がないためメッセージの署名には使用できません。
const { fromPublicKey } = require('@ocap/wallet');
const pk = '0xE4852B7...'; // 既存の公開鍵
const wallet = fromPublicKey(pk);
console.log('PK からのアドレス:', wallet.address);
// wallet.sign('message'); // これはエラーをスローしますfromAddress
DID アドレスからウォレットを作成することは、アドレス文字列に埋め込まれたタイプ情報を解析するのに役立ちます。このタイプのウォレットは非常に限定的であり、データの署名や検証はできません。
const { fromAddress } = require('@ocap/wallet');
const did = 'zNKtCNqYWLYWYW3gWRA1vnRykfCBZYHZvzKr';
const wallet = fromAddress(did);
// アドレスから派生したタイプ情報を検査できます
console.log('ウォレットタイプ:', wallet.type);fromJSON
この関数を使用すると、以前に wallet.toJSON() メソッドを使用して作成されたシリアル化された JSON オブジェクトからウォレットを再構築できます。これは、ウォレットの保存と取得に最適です。
const { fromRandom, fromJSON } = require('@ocap/wallet');
// 1. ウォレットを作成してシリアル化する
const originalWallet = fromRandom();
const serialized = originalWallet.toJSON();
// 2. 後で、JSON オブジェクトから復元する
const restoredWallet = fromJSON(serialized);
console.log('正常に復元されました:', originalWallet.address === restoredWallet.address);DID との関係
Wallet オブジェクトと分散型アイデンティティ (DID) は、本質的にリンクされています。
- ウォレットは DID のコントローラーです。 ウォレット内の秘密鍵は所有権の証明であり、所有者は DID に代わってアクションを実行する能力を得ます。
wallet.addressは DID です。 他のユーザーと共有できる公開識別子です。wallet.typeは DID のプロパティを定義します。 DID がどのように構築され、暗号的にどのように動作するかを決定します。
本質的に、@ocap/wallet ライブラリは、@arcblock/did 仕様で定義されたアイデンティティを作成、管理、および利用するための実用的なツールを提供します。
これらのコアコンセプトを念頭に置いて、利用可能なすべてのメソッドとそのパラメータに関する詳細情報については、API リファレンス を参照してください。