跳到主要內容

資產或 VC 聲明

The assetOrVC 聲明提供了一種靈活的方式,要求使用者出示擁有符合特定標準的鏈上資產(如 NFT)或可驗證憑證(VC)的所有權證明。這對於需要彈性存取控制的場景特別有用,在這些場景中,可以接受多種形式的資格證明。

若有更具體的要求,您可以參考 資產聲明 或 可驗證憑證聲明 的文件。

運作方式

assetOrVC 聲明的核心是 filters 陣列。這個陣列讓您可以定義一組或多組條件。評估這些篩選條件的邏輯如下:

  • 篩選條件之間的 OR 邏輯:錢包會獨立評估 filters 陣列中的每個篩選物件。使用者只需出示滿足至少一個篩選物件條件的資產或 VC。
  • 篩選條件內部的 AND 邏輯:在單一篩選物件中,出示的資產或 VC 必須滿足所有指定的屬性(例如 trustedIssuers、tag)。
  • 陣列值的 OR 邏輯:對於接受陣列值的屬性(如 type 或 trustedIssuers),出示的項目只需匹配陣列中的其中一個值即可。

參數

assetOrVC 聲明物件可透過以下參數進行設定:

參數類型描述預設值
typestring聲明的類型。必須是 assetOrVC。'assetOrVC'
descriptionstring顯示在使用者錢包中的訊息,用以解釋請求的內容。'Please present NFT to continue.'
optionalboolean若為 true,使用者可以選擇跳過此聲明請求,而不會終止會話。false
filtersobject[]必要。 一個篩選物件的陣列,用以定義資產或 VC 可接受的標準。[]

篩選物件參數

filters 陣列中的每個物件可以包含以下屬性,以指定所需的標準:

參數類型描述
typestring[]僅限 VC。 可接受的 VC 類型名稱陣列(例如 ['ProofOfCommunity'])。
addressstring特定資產或 VC 的 DID 地址。
trustedIssuersstring[]資產或 VC 的可信任發行者 DID 列表。
trustedParentsstring[]僅限資產。 可信任的父 DID 列表(例如 NFT 集合地址)。
tagstring資產或 VC 上必須存在的特定標籤。
ownerDidstring[]一個 DID 陣列。錢包必須證明其控制其中一個 DID 並擁有該資產/VC。預設為已連接使用者的 DID。
consumedboolean僅限資產。 指定資產必須處於 consumed(已消耗)或 unconsumed(未消耗)狀態。
claimUrlstring僅限 VC。 錢包可在此 URL 找到有關所需憑證的更多資訊。
acquireUrlstring僅限資產。 使用者如果尚未擁有該資產,可前往此 URL 獲取。

範例

假設您想授予一個高級活動的入場權限。擁有「VIP 門票」NFT 或「VerifiedMember」憑證的使用者可以獲得入場權。您可以像這樣建構一個 assetOrVC 聲明:

DID Connect Claim Request

javascript
const claims = {
  assetOrVC: {
    description: '請出示您的 VIP 門票或會員憑證以進入。',
    filters: [
      // 條件 1:使用者擁有我們官方收藏的 VIP 門票 NFT
      {
        trustedParents: ['zNKoA8Y4m1a3b5C7E9F1G3H5J7K9L1M3N5'], // NFT 收藏的 DID
        tag: 'VIP_TICKET_2024',
        acquireUrl: 'https://example.com/buy-ticket'
      },
      // 條件 2:使用者擁有來自可信賴合作夥伴的 VerifiedMember 憑證
      {
        type: ['VerifiedMember'],
        trustedIssuers: ['zNKjDm4Xsoaffb19UE6QxVeevuaTaLCS1n1S'] // 可信賴合作夥伴的 DID
      }
    ]
  }
};

在這個範例中:

  • 使用者的錢包會首先尋找屬於 trustedParents 收藏且帶有 VIP_TICKET_2024 標籤的資產。
  • 如果找不到這樣的資產,它接著會尋找由指定的 trustedIssuers 發行的 VerifiedMember 類型的可驗證憑證。
  • 如果使用者擁有符合任一條件的項目,他們就可以出示它來滿足聲明。如果兩者皆無,錢包可能會向他們顯示 acquireUrl 以獲取門票。

這種靈活的聲明是建構複雜存取控制系統的強大工具。若想在實際應用中查看它,請參考 NFT 門控存取 範例。