跳到主要内容

资产或 VC 声明

assetOrVC 声明提供了一种灵活的方式,可以要求用户出示其拥有链上资产(如 NFT)或符合指定标准集的可验证凭证(VC)的所有权证明。这对于需要灵活访问控制的场景特别有用,因为这些场景可以接受多种形式的资格证明。

如需更具体的请求,您可以参考资产声明或可验证凭证声明的文档。

工作原理

assetOrVC 声明的核心是 filters 数组。该数组允许您定义一个或多个条件集。评估这些筛选器的逻辑如下:

  • 筛选器之间的或逻辑:钱包会独立评估 filters 数组中的每个筛选器对象。用户只需出示满足至少一个筛选器对象条件的资产或 VC 即可。
  • 筛选器内部的与逻辑:在单个筛选器对象内,出示的资产或 VC 必须满足所有指定的属性(例如 trustedIssuers、tag)。
  • 数组值的或逻辑:对于接受数组值的属性(如 type 或 trustedIssuers),出示的项只需匹配数组中的一个值即可。

参数

assetOrVC 声明对象配置有以下参数:

ParameterTypeDescriptionDefault
typestring声明的类型。必须是 assetOrVC。'assetOrVC'
descriptionstring在用户钱包中显示的消息,解释请求的内容。'Please present NFT to continue.'
optionalboolean如果为 true,用户可以选择跳过此声明请求而不会终止会话。false
filtersobject[]**必需。**一个筛选器对象数组,用于定义资产或 VC 的可接受标准。[]

筛选器对象参数

filters 数组中的每个对象都可以包含以下属性来指定所需的标准:

ParameterTypeDescription
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 门控访问 示例。