The assetOrVC 聲明提供了一種靈活的方式,要求使用者出示擁有符合特定標準的鏈上資產(如 NFT)或可驗證憑證(VC)的所有權證明。這對於需要彈性存取控制的場景特別有用,在這些場景中,可以接受多種形式的資格證明。
若有更具體的要求,您可以參考 資產聲明 或 可驗證憑證聲明 的文件。
運作方式
assetOrVC 聲明的核心是 filters 陣列。這個陣列讓您可以定義一組或多組條件。評估這些篩選條件的邏輯如下:
- 篩選條件之間的 OR 邏輯:錢包會獨立評估
filters陣列中的每個篩選物件。使用者只需出示滿足至少一個篩選物件條件的資產或 VC。 - 篩選條件內部的 AND 邏輯:在單一篩選物件中,出示的資產或 VC 必須滿足所有指定的屬性(例如
trustedIssuers、tag)。 - 陣列值的 OR 邏輯:對於接受陣列值的屬性(如
type或trustedIssuers),出示的項目只需匹配陣列中的其中一個值即可。
參數
assetOrVC 聲明物件可透過以下參數進行設定:
| 參數 | 類型 | 描述 | 預設值 |
|---|---|---|---|
type | string | 聲明的類型。必須是 assetOrVC。 | 'assetOrVC' |
description | string | 顯示在使用者錢包中的訊息,用以解釋請求的內容。 | 'Please present NFT to continue.' |
optional | boolean | 若為 true,使用者可以選擇跳過此聲明請求,而不會終止會話。 | false |
filters | object[] | 必要。 一個篩選物件的陣列,用以定義資產或 VC 可接受的標準。 | [] |
篩選物件參數
filters 陣列中的每個物件可以包含以下屬性,以指定所需的標準:
| 參數 | 類型 | 描述 |
|---|---|---|
type | string[] | 僅限 VC。 可接受的 VC 類型名稱陣列(例如 ['ProofOfCommunity'])。 |
address | string | 特定資產或 VC 的 DID 地址。 |
trustedIssuers | string[] | 資產或 VC 的可信任發行者 DID 列表。 |
trustedParents | string[] | 僅限資產。 可信任的父 DID 列表(例如 NFT 集合地址)。 |
tag | string | 資產或 VC 上必須存在的特定標籤。 |
ownerDid | string[] | 一個 DID 陣列。錢包必須證明其控制其中一個 DID 並擁有該資產/VC。預設為已連接使用者的 DID。 |
consumed | boolean | 僅限資產。 指定資產必須處於 consumed(已消耗)或 unconsumed(未消耗)狀態。 |
claimUrl | string | 僅限 VC。 錢包可在此 URL 找到有關所需憑證的更多資訊。 |
acquireUrl | string | 僅限資產。 使用者如果尚未擁有該資產,可前往此 URL 獲取。 |
範例
假設您想授予一個高級活動的入場權限。擁有「VIP 門票」NFT 或「VerifiedMember」憑證的使用者可以獲得入場權。您可以像這樣建構一個 assetOrVC 聲明:
DID Connect Claim Request
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 門控存取 範例。