assetOrVC 声明提供了一种灵活的方式,可以要求用户出示其拥有链上资产(如 NFT)或符合指定标准集的可验证凭证(VC)的所有权证明。这对于需要灵活访问控制的场景特别有用,因为这些场景可以接受多种形式的资格证明。
如需更具体的请求,您可以参考资产声明或可验证凭证声明的文档。
工作原理
assetOrVC 声明的核心是 filters 数组。该数组允许您定义一个或多个条件集。评估这些筛选器的逻辑如下:
- 筛选器之间的或逻辑:钱包会独立评估
filters数组中的每个筛选器对象。用户只需出示满足至少一个筛选器对象条件的资产或 VC 即可。 - 筛选器内部的与逻辑:在单个筛选器对象内,出示的资产或 VC 必须满足所有指定的属性(例如
trustedIssuers、tag)。 - 数组值的或逻辑:对于接受数组值的属性(如
type或trustedIssuers),出示的项只需匹配数组中的一个值即可。
参数
assetOrVC 声明对象配置有以下参数:
| Parameter | Type | Description | Default |
|---|---|---|---|
type | string | 声明的类型。必须是 assetOrVC。 | 'assetOrVC' |
description | string | 在用户钱包中显示的消息,解释请求的内容。 | 'Please present NFT to continue.' |
optional | boolean | 如果为 true,用户可以选择跳过此声明请求而不会终止会话。 | false |
filters | object[] | **必需。**一个筛选器对象数组,用于定义资产或 VC 的可接受标准。 | [] |
筛选器对象参数
filters 数组中的每个对象都可以包含以下属性来指定所需的标准:
| Parameter | Type | Description |
|---|---|---|
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 门控访问 示例。