跳到主要內容

多鏈連接

DID Connect 的設計考慮了互通性,將其功能擴展到 ArcBlock 生態系統之外。您可以對其進行設定,以與其他主要區塊鏈(例如 Ethereum 和 Solana)無縫互動。本範例將示範如何設定 DID Connect 會話以請求在 Ethereum 網路上執行操作。

多鏈功能的關鍵在於 chainInfo 物件,它會告知使用者的錢包在該會話中要連接到哪個網路。

chainInfo 物件

要在特定區塊鏈上發起請求,您必須提供一個 chainInfo 物件。該物件指定了目標網路的類型、ID 和連接端點。

以下是 chainInfo 物件的欄位:

FieldTypeDescriptionRequired
typestring區塊鏈的類型。支援的值為 'arcblock'、'ethereum' 和 'solona'。是
idstring網路的鏈 ID。例如,Ethereum 主網為 '1',Sepolia 測試網為 '11155111'。ethereum、solona 需提供
hoststring網路的 RPC 端點。雖然是選填的,但強烈建議提供以確保可靠的通訊。否

範例:在 Ethereum 上請求簽名

讓我們透過一個範例,說明如何請求使用者使用其在 Sepolia 測試網上的 Ethereum 帳戶簽署一則訊息。

首先,定義目標網路的 chainInfo。此物件將傳遞給 WalletHandlers 以設定 DID Connect 會話。

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: 'Sign a message to verify your Ethereum account',
      origin: 'https://yourapp.com',
      // 如果設定了 authPrincipal.chainInfo,此項為選填
      chainInfo: ethereumChainInfo,
    }),
  },

  // 處理錢包的回應
  onAuth: ({ claims, userDid }) => {
    const signatureClaim = claims.find(c => c.type === 'signature');
    console.log(`User ${userDid} provided a signature: ${signatureClaim.signature}`);
    // 您現在可以在 Ethereum 網路上驗證簽名
    return { successMessage: 'Ethereum signature verified!' };
  },
});

運作原理

  1. 當您的應用程式產生 DID Connect QR 碼時,它將會使用您提供的 Ethereum chainInfo 進行編碼。
  2. 使用者使用相容的錢包(如 ABT Wallet)掃描 QR 碼。
  3. 錢包會識別 type: 'ethereum' 並提示使用者切換到 Sepolia Ethereum 網路。
  4. 然後,系統會要求使用者使用他們選擇的 Ethereum 帳戶簽署該訊息。
  5. 批准後,錢包會將簽名傳回您的應用程式,您可以在 onAuth 回呼中處理該簽名。

同樣的模式也可以應用於像 Solana 這樣的其他鏈,只需相應地更改 chainInfo 物件即可。這個強大的功能讓您可以建立能夠在多個區塊鏈生態系統中利用身份和資產的去中心化應用程式。