使用区块链应用程序构建器支持标记化

您可以使用区块链应用程序构建器来管理令牌的完整生命周期。您可以对现有资产进行标记化,并自动生成用于标记生命周期管理的标记类和方法。

标记化

令牌化是一个过程,其中物理或数字资产由令牌表示,可以在区块链上传输,跟踪和存储。通过将资产表示为令牌,您可以使用区块链分类账来建立资产的状态和所有权,并使用标准区块链平台功能来转移资产的所有权。

区块链应用程序构建器包括令牌化支持:自动生成令牌类和方法,并提供其他令牌方法,以便开发人员可以为令牌创建复杂的业务逻辑。自动生成的项目包含令牌生命周期类和函数、CRUD 方法以及其他令牌 SDK 方法,并支持参数的自动验证、编集/解编集和透明持久性功能。可以使用这些控制器方法来初始化令牌、控制访问、设置帐户、管理角色以及管理令牌的生命周期。

下图显示了 Blockchain App Builder 实施的令牌架构,包括令牌 API 和令牌 SDK。标记体系结构图

自动生成的标记 API
Blockchain App Builder 自动生成支持令牌和令牌生命周期的方法。您可以使用这些方法来初始化令牌、管理角色和账户,以及完成其他令牌生命周期任务,而无需任何额外的编码。
令牌 SDK
令牌 SDK 包含可帮助您为令牌应用程序开发复杂业务逻辑的方法。
多版本并发控制 (MVCC) 优化
令牌链代码的 MVCC 优化可以减少传输、薄荷、烧毁和暂挂操作的错误。

标记和账户/余额模型

区块链应用程序构建器支持可替代和非可替代的令牌。可替换的标记具有可互换的值。任何数量的可替换令牌的值都与同一类别令牌的任何其他相同数量的值相同。不可替代的令牌是唯一的。令牌也可以是整数或小数。可以根据指定的小数位数将小数标记细分为较小的部分。

令牌也可以通过行为来描述。可替换令牌支持的行为包括:mintabletransferabledivisibleholdableburnablerolesminterburnerholder)。不可替代的令牌支持的行为包括:mintabletransferablesingletonindivisibleburnablerolesminterburner)。

标记功能使用账户/余额模型将标记化资产表示为账户中的余额。账户类似于典型的银行账户,其中存款和转账以及其他状态转换会影响账户余额。全局跟踪每个账户的余额,以确保事务处理金额有效。还会跟踪暂挂余额(用于可替换令牌)和事务处理历史记录。

任何在任何时间点拥有令牌或完成令牌相关操作的用户都必须在网络上拥有一个帐户。每个帐户都由唯一的 ID (account_id) 标识。通过将实例所有者或登录到实例的用户的用户的用户名或电子邮件 ID (user_id) 与当前网络组织中用户的成员服务提供者 ID (org_id) 相结合来创建账户 ID。为创建账户提供了现成可用的方法。由于账户 ID 包含组织 ID,因此可以跨多个组织支持用户。

令牌标准

区块链应用程序构建器扩展了令牌分类框架,ERC-721 标准和 ERC-1155 标准的标准和分类,以定义令牌的解剖和行为。ERC-1155 是同时支持可替代和非可替代代币 (NFT) 的标准。ERC-721 是 NFT 的标准。Token Taxonomy Framework 是由 Token Taxonomy Initiative 开发的。有关详细信息,请参阅令牌分类框架

下表介绍了 Blockchain App Builder 支持的令牌类型:
标准 支持的标记类型
标记分类框架
  • 分数可替换标记
ERC-721
  • 整个不可替换令牌
ERC-1155
  • 整个可替换令牌
  • 分数可替换标记
  • 整个不可替换令牌
  • 小数非可替换标记

标记流

由于区块链应用程序构建器通过扩展输入规范文件语法支持令牌化,因此,您可以使用 CLI 或 Visual Studio Code 创建其他项目的方式创建特定于令牌的项目。有关更多信息,请参见 Input Specification File

标记工作流图
典型的标记化流遵循以下基本步骤:
  • 确定要使用的标记标准。
  • 确定要指定哪些标记行为(mintabletransferabledivisibleindivisiblesingletonholdableburnableroles)。
  • 在输入规范文件中定义标记资产及其属性。
  • 从输入规范文件中支架链代码项目。这将创建一个基架式项目,包括包含令牌资产定义及其属性的模型以及包含令牌行为和方法的控制器。
  • 部署并测试链代码项目。
部署基于令牌的项目后,创建令牌和完成生命周期操作的典型流遵循以下步骤:
  • 将部署令牌链代码,并且传递到初始化方法的列表中的用户将成为链代码的 Token Admin 用户。
  • 标记化资产已初始化,该资产创建 token_id,即该特定标记实例的唯一标识符。
  • 必须为将拥有令牌或完成与令牌相关的操作的每个用户创建帐户。
  • 如果为令牌指定了 roles 行为,则必须先将角色添加到用户,然后用户才能完成与令牌相关的操作。
  • 然后,可以根据为令牌资产指定的行为使用令牌生命周期方法。例如,您可以调用一种方法来为帐户创建令牌。

访问控制

令牌化支持包括访问控制功能,该功能支持基于角色的控制机制和基于所有权的控制机制。通过基于角色的控制,用户可以调用具有关联角色的特定方法,例如 Token AdminToken Minter。通过基于所有权的控制,您可以限制用户访问他们不拥有的资产。通过基于所有权的访问控制,拥有资产的用户可以调用特定方法,例如 Token OwnerAccount Owner。有关方法的访问控制的特定信息,请参见以下主题中介绍的方法的各个条目:
基于角色的访问控制支持以下角色:
令牌管理
部署令牌链代码时,可以分配 Token Admin 用户。Token Admin 用户信息保存在状态数据库中。Token Admin 用户可以为其他用户授予和删除 Token Admin 特权。Token Admin 用户无法删除自己的 Token Admin 特权。Token Admin 用户可以将 Org Admin、minter、刻录器或公证人角色分配给任何用户。
组织管理员
扩展的标记分类框架方法支持 Org Admin 角色。Token Admin 用户可以将 Org Admin 角色分配给任何用户。Org Admin 用户具有管理权限,但仅在其组织内。他们可以创建帐户或查看帐户余额,但只能为其组织中的用户创建帐户或查看帐户余额。具有矿工、燃烧器或公证人角色的 Org Admin 用户可以将该角色分配给其组织中的其他用户。
令牌 Minter
分配了 minter 角色的用户是 Token Minter,并且可以 mint 标记。
Token Burner
分配有刻录器角色的用户是 Token Burner,并且可以刻录令牌。
令牌公证
分配有公证人角色的用户是 Token NotaryToken Notary 在付款人与收款人之间的交易中充当第三方。Token Notary 可以触发从付款人到收款人的令牌转移完成,也可以将令牌返回到付款人的账户。
Vault Manager
分配有 Vault 角色的用户是 Vault ManagerVault Manager 可以解锁锁的 NFT。Vault 角色仅适用于扩展的 ERC-721 和 ERC-1155 标准。将 Vault 角色分配给用户是锁定 NFT 的先决条件。每个链代码只能向一个用户分配 Vault 角色。
基于所有权的访问控制支持以下角色:
账户所有者
任何具有帐户的用户都是 Account Owner
令牌所有者
当前拥有不可替换令牌的任何用户都是该令牌的 Token Owner

在某些方法中,还结合了基于角色的访问控制和基于所有权的访问控制。例如,基于角色的访问控制允许具有 minter 角色的用户创建令牌。通过基于所有权的访问控制,不可替代的令牌所有者可以修改令牌的定制属性,但不能修改令牌元数据。当具有 minter 角色的用户创建不可替换令牌 (non-fungible token,NFT) 时,它们将成为 NFT 的所有者。作为该 NFT 的所有者,他们可以修改自定义属性(对于艺术品集合令牌,令牌价格是一个自定义属性)。令牌创建者将 NFT 传输给其他用户后,第二个用户将成为所有者,创建令牌的用户不再是令牌的所有者。由于基于所有权的访问控制,新所有者现在可以更新定制属性值,但以前的所有者不再可以。由于基于角色的访问控制,以前的所有者仍然可以铸造 NFT,但新用户不能。

您还可以编写自己的访问控制功能,或禁用访问控制。以下示例显示了控制访问的自动生成的代码。

TypeScript:
await this.Ctx.<Token Standard>Auth.checkAuthorization(...)
开始:
auth, err := t.Ctx.<Token Standard>Auth.CheckAuthorization(...)

注意:

要删除自动生成的访问控制函数,请从 TypeScript 或 Go 项目中删除上一行代码。

MVCC 优化

Hyperledger Fabric 数据库使用多版本并发控制 (MVCC) 来避免双重支出和数据不一致。更新相同状态时,记录的新版本将覆盖旧版本。如果块中存在更新相同密钥的并发请求,则可能会生成 MVCC_READ_CONFLICT 错误。

要减少传输、薄荷、刻录和暂挂操作的 MVCC 错误,可以为令牌链代码启用 MVCC 优化。此优化仅适用于 Oracle Blockchain Platform。默认情况下,将禁用优化。要启用优化,请完成适用的以下步骤。

  • CLI:使用 ochain init 命令指定布尔 -m--enable_mvcc_optimization 参数。默认情况下,该参数设置为 false。要启用优化,请将 -m true 添加到 ochain init 命令行。
  • Visual Studio Code:在创建链代码时,在创建链代码窗口中选择启用 MVCC 优化

要将优化用于在早期版本的区块链应用程序构建器中创建的链代码,请完成以下步骤:

  1. 安装最新版本的区块链应用程序构建器后,请按 Upgrading Chaincode Projects in the CLIUpgrading Chaincode Projects in Visual Studio Code 中所述升级链代码。
  2. 编辑链代码根文件夹中的 .ochain.json 文件以将 enableMvccOptimization 设置为 true
  3. 同步链代码,添加优化并在链代码的根文件夹中创建两个新文件夹:statedbtokens。有关同步的更多信息,请参见 Synchronize Specification File Changes With Generated Source CodeSynchronize Specification File Changes With Generated Source Code

解决 MVCC_READ_CONFLICT 错误的其他方法,包括生成此错误时让客户机应用程序重试请求,或在将并发请求发送到区块链网络之前使用队列捕获并发请求。有关更多信息,请参见 Hyperledger Fabric 文档中的读写集语义

注意:

MVCC 优化不适用于同时包括 Oracle Blockchain Platform 和 Hyperledger Fabric 对等节点的混合网络,也不适用于本地 Hyperledger Fabric 网络上的测试。请勿在混合网络上启用 MVCC 优化,因为这可能会导致对等节点之间的不一致。