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

マルチチェーン接続

DID Connect は相互運用性を念頭に設計されており、その機能は ArcBlock エコシステムを超えて拡張されています。イーサリアムやソラナなどの他の主要なブロックチェーンとシームレスにやり取りするように設定できます。この例では、イーサリアムネットワーク上でアクションを要求する DID Connect セッションを設定する方法を示します。

マルチチェーン機能の鍵は chainInfo オブジェクトであり、セッションのためにユーザーのウォレットにどのネットワークに接続するかを伝えます。

chainInfo オブジェクト

特定のブロックチェーン上でリクエストを開始するには、chainInfo オブジェクトを提供する必要があります。このオブジェクトは、ターゲットネットワークのタイプ、ID、および接続エンドポイントを指定します。

以下は chainInfo オブジェクトのフィールドです:

フィールドタイプ説明必須
typestringブロックチェーンのタイプ。サポートされている値は 'arcblock''ethereum'、および 'solona' です。はい
idstringネットワークのチェーン ID。例えば、イーサリアムメインネットの場合は '1'、Sepolia テストネットの場合は '11155111' です。ethereumsolona の場合
hoststringネットワークの RPC エンドポイント。オプションですが、信頼性の高い通信のために強く推奨されます。いいえ

例: イーサリアムでの署名リクエスト

Sepolia テストネットでユーザーにイーサリアムアカウントを使用してメッセージに署名するようリクエストする方法の例を見ていきましょう。

まず、ターゲットネットワークの chainInfo を定義します。このオブジェクトは、DID Connect セッションを設定するために WalletHandlers に渡されます。

Ethereum Chain Configuration

javascript
const ethereumChainInfo = {
  type: 'ethereum',
  id: '11155111', // Sepolia チェーン ID
  host: 'https://sepolia.infura.io/v3/YOUR_INFURA_PROJECT_ID', // RPC エンドポイントの例
};

次に、この設定を handlers.attach メソッド内で使用します。セッション全体コンテキストを定義するために、authPrincipal クレームに chainInfo を設定できます。複数のチェーンにわたるワークフローを調整する必要がある場合は、個々のクレームに指定することもできます。

Attaching Wallet Handlers

javascript
const { WalletHandlers } = require('@arcblock/did-connect');

// 'authenticator' と 'tokenStorage' はすでに設定されていると仮定します
const handlers = new WalletHandlers({ authenticator, tokenStorage });

handlers.attach({
  app: server, // Express.js アプリのインスタンス
  action: 'eth-signature',

  // 認証リクエスト全体にチェーンコンテキストを設定
  authPrincipal: {
    chainInfo: ethereumChainInfo,
  },

  // 指定されたチェーンで要求されるクレームを定義
  claims: {
    signature: () => ({
      typeUrl: 'eth:personal-data', // 個人署名を要求
      display: 'イーサリアムアカウントを検証するためにメッセージに署名してください',
      origin: 'https://yourapp.com',
      // authPrincipal.chainInfo が設定されている場合、これはオプションです
      chainInfo: ethereumChainInfo,
    }),
  },

  // ウォレットの応答を処理
  onAuth: ({ claims, userDid }) => {
    const signatureClaim = claims.find(c => c.type === 'signature');
    console.log(`ユーザー ${userDid} が署名を提供しました: ${signatureClaim.signature}`);
    // これで、イーサリアムネットワーク上で署名を検証できます
    return { successMessage: 'イーサリアムの署名が検証されました!' };
  },
});

仕組み

  1. アプリケーションが DID Connect QR コードを生成すると、提供されたイーサリアムの chainInfo でエンコードされます。
  2. ユーザーは、ABT Wallet のような互換性のあるウォレットで QR コードをスキャンします。
  3. ウォレットは type: 'ethereum' を認識し、ユーザーに Sepolia イーサリアムネットワークに切り替えるよう促します。
  4. その後、ユーザーは選択したイーサリアムアカウントを使用してメッセージに署名するよう求められます。
  5. 承認されると、ウォレットは署名をアプリケーションに送り返し、アプリケーションは onAuth コールバックで処理できます。

この同じパターンは、chainInfo オブジェクトを適宜変更するだけで、ソラナなどの他のチェーンにも適用できます。この強力な機能により、複数のブロックチェーンエコシステムにわたるアイデンティティと資産を活用する分散型アプリケーションを構築できます。