使用区块链应用程序构建器支持令牌化
您可以使用区块链应用程序构建器来管理令牌的完整生命周期。您可以对现有资产进行标记,并自动生成令牌类和方法以用于令牌生命周期管理。
标记化
令牌化是一个过程,物理或数字资产由令牌表示,令牌可以传输,跟踪和存储在区块链上。通过将资产表示为令牌,您可以使用区块链分类账来建立资产的状态和所有权,并使用标准区块链平台功能来转移资产的所有权。
区块链应用程序构建器包括令牌化支持:令牌类和方法自动生成,并提供其他令牌方法,以便开发人员可以为令牌创建复杂的业务逻辑。自动生成的项目包含令牌生命周期类和函数、CRUD 方法和其他令牌 SDK 方法,并支持参数自动验证、编集/解编集和透明持久性功能。可以使用这些控制器方法初始化令牌、控制访问、设置帐户、管理角色以及管理令牌的生命周期。
下图显示了区块链应用程序构建器实施的令牌体系结构,包括令牌 API 和令牌 SDK。
标记和账户/余额模型
区块链应用程序构建器支持可替换和非可替换令牌。可替换令牌具有可互换的值。任何可替换令牌的数量都与同一类令牌的任何其他相等数量具有相同的值。不可替代的代币是独一无二的。令牌也可以是整数或小数。分数标记可以根据指定的小数位数细分为较小的部分。
令牌也可以通过行为来描述。可替换令牌支持的行为包括:mintable
、transferable
、divisible
、holdable
、burnable
和 roles
(minter
、burner
和 holder
)。对于不可替代的令牌,支持的行为包括:mintable
、transferable
、singleton
、indivisible
、burnable
和 roles
(minter
和 burner
)。
标记功能使用账户/余额模型将标记化资产表示为账户中的余额。账户类似于典型的银行账户,存款和转账以及其他州/省转换会影响账户余额。对每个账户的余额进行全局跟踪,以确保事务处理金额有效。还会跟踪暂挂余额(用于可替换令牌)和事务处理历史记录。
任何在任何点拥有令牌或完成令牌相关操作的用户都必须拥有网络上的帐户。每个帐户都由唯一 ID (account_id
) 标识。帐户 ID 是通过将实例所有者或登录到实例的用户的用户名或电子邮件 ID (user_id
) 与当前网络组织中用户的成员服务提供者 ID (org_id
) 相结合来创建的。提供的就绪方法可用于创建账户。由于账户 ID 包括组织 ID,因此可以在多个组织中支持用户。
令牌标准
区块链应用程序构建器扩展了令牌分类框架,ERC-721 标准和 ERC-1155 标准的标准和分类,以定义令牌的解剖和行为。ERC-1155 是同时支持可替换和非可替换令牌 (NFT) 的标准。ERC-721 是 NFT 的标准。令牌分类框架是由令牌分类倡议开发的。有关详细信息,请参阅标记分类框架。
标准 | 支持的标记类型 |
---|---|
标记分类框架 |
|
ERC-721 |
|
ERC-1155 |
|
标记流
由于区块链应用程序构建器通过扩展输入规范文件语法来支持令牌化,因此,您可以使用 CLI 或 Visual Studio Code 来创建特定于令牌的项目,方式与创建其他项目相同。有关更多信息,请参见 Input Specification File 。
- 确定要使用的令牌标准。
- 决定要指定的标记行为(
mintable
、transferable
、divisible
、indivisible
、singleton
、holdable
、burnable
和roles
)。 - 在输入规范文件中定义标记资产及其属性。
- 从输入规范文件中支架链代码项目。这将创建一个基架项目,包括包含令牌资产定义及其属性的模型,以及包含令牌行为和方法的控制器。
- 部署并测试链代码项目。
- 将部署令牌链代码,传递到初始化方法的列表中用户将成为链代码的
Token Admin
用户。 - 令牌化资产已初始化,这将创建
token_id
,这是该特定令牌实例的唯一标识符。 - 必须为将拥有令牌或完成令牌相关操作的每个用户创建帐户。
- 如果为令牌指定了
roles
行为,则必须先将角色添加到用户,然后用户才能完成与令牌相关的操作。 - 然后,可以根据为令牌资产指定的行为使用令牌生命周期方法。例如,您可以调用方法来为帐户创建薄荷令牌。
访问控制
Token Admin
或 Token Minter
。通过基于所有权的控制,您可以限制用户访问他们不拥有的资产。通过基于所有权的访问控制,拥有资产的用户可以调用特定方法,例如 Token Owner
或 Account Owner
。有关方法的访问控制的特定信息,请参见以下主题中介绍的方法的各个条目:
- 令牌管理
- 部署令牌链代码时,可以分配
Token Admin
用户。Token Admin
用户信息保存在状态数据库中。Token Admin
用户可以为其他用户授予和删除Token Admin
权限。Token Admin
用户无法删除自己的Token Admin
特权。Token Admin
用户可以将Org Admin
、minter、Burner 或 notary 角色分配给任何用户。 - 组织管理员
- 扩展的标记分类框架方法支持
Org Admin
角色。Token Admin
用户可以将Org Admin
角色分配给任何用户。Org Admin
用户具有管理权限,但仅在其组织内。他们可以创建帐户或查看帐户余额,但仅限于组织中的用户。Org Admin
具有 minter、burner 或 notary 角色的用户可以将该角色分配给其组织中的其他用户。 - 标记 Minter
- 分配有 minter 角色的用户是
Token Minter
,可以铸币令牌。 - 标记燃烧器
- 分配有刻录程序角色的用户是
Token Burner
,可以刻录标记。 - 令牌公证
- 分配有公证人角色的用户是
Token Notary
。Token Notary
在付款人和收款人之间的事务处理中充当第三方。Token Notary
可以触发从付款人到收款人的令牌传输完成,也可以将令牌返回到付款人的帐户。 - Vault Manager
- 分配有 Vault 角色的用户是
Vault Manager
。Vault Manager
可以解锁锁锁定的 NFT。保管库角色仅适用于扩展的 ERC-721 和 ERC-1155 标准。将 Vault 角色分配给用户是锁定 NFT 的先决条件。只能为每个链代码分配一个用户 vault 角色。
在某些方法中还结合了基于角色的访问控制和基于所有权的访问控制。例如,基于角色的访问控制允许具有 minter 角色的用户创建令牌。使用基于所有权的访问控制,不可替换的令牌所有者可以修改令牌的定制属性,但不能修改令牌元数据。当具有 minter 角色的用户创建不可替换的令牌 (non-fungible token,NFT) 时,他们成为 NFT 的所有者。作为该 NFT 的所有者,他们可以修改自定义属性(对于艺术品收集令牌,令牌价格是自定义属性)。令牌创建者将 NFT 传输给其他用户后,第二个用户成为所有者,创建令牌的用户不再是令牌的所有者。由于基于所有权的访问控制,新所有者现在可以更新定制属性值,但以前的所有者无法再更新。由于基于角色的访问控制,上一个所有者仍可以铸造 NFT,但新用户不能。
您还可以编写自己的访问控制功能,或者禁用访问控制。控制访问的自动生成的代码如下例所示。
await this.Ctx.<Token Standard>Auth.checkAuthorization(...)
auth, err := t.Ctx.<Token Standard>Auth.CheckAuthorization(...)
注意:
要删除自动生成的访问控制功能,请从 TypeScript 或 Go 项目中删除上一行代码。MVCC 优化
Hyperledger Fabric 数据库使用多版本并发控制 (multi-version concurrency control,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 优化。
要将优化与以前版本的区块链应用程序构建器中创建的链代码一起使用,请完成以下步骤:
- 安装最新版本的 Blockchain App Builder 后,请按 Upgrading Chaincode Projects in the CLI 和 Upgrading Chaincode Projects in Visual Studio Code 中所述升级链代码。
- 编辑链代码的根文件夹中的
.ochain.json
文件,将enableMvccOptimization
设置为true
。 - 同步链代码,这将添加优化并在链代码的根文件夹中创建两个新文件夹:
statedb
和tokens
。有关同步的更多信息,请参见 Synchronize Specification File Changes With Generated Source Code 和 Synchronize Specification File Changes With Generated Source Code 。
解决 MVCC_READ_CONFLICT 错误的其他方法,包括生成此错误时请求客户端应用程序重试请求,或者在将并发请求发送到区块链网络之前使用队列捕获这些请求。有关更多信息,请参见 Hyperledger Fabric 文档中的读写集语义。
注意:
MVCC 优化不适用于包含 Oracle Blockchain Platform 和 Hyperledger Fabric 对等节点的混合网络,也不适用于在本地 Hyperledger Fabric 网络上进行测试。不要在混合网络上启用 MVCC 优化,因为这可能会导致对等节点之间不一致。