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

コアコンセプト

このセクションでは、@ocap/wallet パッケージの背後にある基本的な概念を紹介します。Wallet オブジェクトとは何か、その構造、作成するさまざまな方法、そして分散型アイデンティティ (DID) との重要な関係について学びます。

このセクションでは、@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つの主要な部分で構成されています。

プロパティ説明
roleDID の目的を定義します (例: Account、Application、Node)。
pk使用する公開鍵アルゴリズム (例: ED25519, ETHEREUM)。
hash使用するハッシュアルゴリズム (例: SHA3, KECCAK)。
address最終的な DID 文字列のエンコーディング形式 (例: BASE58, BASE16)。

このライブラリは、ArcBlock DID 用の 'default''ethereum' など、一般的な構成のための便利なショートカットを提供します。

また、Application DID の作成など、特定のユースケースのためにカスタムのウォレットタイプを定義することもできます。

Wallet Type Configuration

javascript
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 の作成

利用可能な情報に応じて、いくつかの方法でウォレットをインスタンス化できます。次の図は、一般的なプロセスを示しています。

Core Concepts

以下は主要なファクトリ関数です。

fromRandom

これは、まったく新しいウォレットを作成する最も簡単な方法です。新しいランダムな秘密鍵を生成し、対応する公開鍵とアドレスを派生させます。

javascript
const { fromRandom } = require('@ocap/wallet');

// デフォルトの ArcBlock タイプで新しいウォレットを作成する
const wallet = fromRandom();

console.log('新しいウォレットのアドレス:', wallet.address);
console.log('秘密鍵:', wallet.secretKey);

fromSecretKey

すでに秘密鍵を持っている場合にウォレットを復元するには、この関数を使用します。これは、既存のアイデンティティを読み込む最も一般的な方法です。

javascript
const { fromSecretKey } = require('@ocap/wallet');

const sk = '0xD67C071...'; // 既存の秘密鍵
const wallet = fromSecretKey(sk);

console.log('復元されたウォレットのアドレス:', wallet.address);

fromPublicKey

公開鍵しか持っていない場合は、「読み取り専用」のウォレットを作成できます。このウォレットは署名の検証やアドレスの派生に使用できますが、秘密鍵がないためメッセージの署名には使用できません。

javascript
const { fromPublicKey } = require('@ocap/wallet');

const pk = '0xE4852B7...'; // 既存の公開鍵
const wallet = fromPublicKey(pk);

console.log('PK からのアドレス:', wallet.address);
// wallet.sign('message'); // これはエラーをスローします

fromAddress

DID アドレスからウォレットを作成することは、アドレス文字列に埋め込まれたタイプ情報を解析するのに役立ちます。このタイプのウォレットは非常に限定的であり、データの署名や検証はできません。

javascript
const { fromAddress } = require('@ocap/wallet');

const did = 'zNKtCNqYWLYWYW3gWRA1vnRykfCBZYHZvzKr';
const wallet = fromAddress(did);

// アドレスから派生したタイプ情報を検査できます
console.log('ウォレットタイプ:', wallet.type);

fromJSON

この関数を使用すると、以前に wallet.toJSON() メソッドを使用して作成されたシリアル化された JSON オブジェクトからウォレットを再構築できます。これは、ウォレットの保存と取得に最適です。

javascript
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 リファレンス を参照してください。