标记化
代币化是一个过程,其中物理或数字资产由代币表示,代币可以传输,跟踪和存储在区块链上。
通过将资产表示为代币,您可以使用区块链分类账来建立资产的状态和所有权,并使用标准区块链平台功能来转移资产的所有权。
区块链应用程序构建器包括标记化支持:自动生成标记类和方法,并提供其他标记方法,以便开发人员可以为标记创建复杂的业务逻辑。自动生成的项目包含标记生命周期类和函数、CRUD 方法以及其他标记 SDK 方法,并支持自动验证参数、编集/解编集和透明持久性功能。您可以使用这些控制器方法来初始化令牌、控制访问、设置账户、管理角色以及管理令牌的生命周期。
下图显示了区块链应用构建器实施的令牌体系结构,包括令牌 API 和令牌 SDK。
令牌和账户/余额模型
Blockchain App Builder 支持可变和非可变代币。
实物代币具有可互换值。任何数量的可替换令牌与同一类令牌的任何其他相同数量具有相同的值。非实物代币是独一无二的。令牌也可以是整数或小数。小数标记可以根据指定的小数位数细分为较小的部分。
令牌也可以通过行为进行描述。可替换令牌的支持行为包括: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,因此可以跨多个组织支持用户。
标记标准
Blockchain App Builder 扩展了代币分类框架,ERC-721 标准和 ERC-1155 标准的标准和分类,以定义代币的解剖结构和行为。
ERC-1155 是支持可变代币和非可变代币 (NFT) 的标准。ERC-721 是 NFT 的标准。令牌分类框架是由令牌分类计划 (Token Taxonomy Initiative) 开发的。有关详细信息,请参阅令牌分类框架。
标准 | 支持的标记类型 |
---|---|
标记分类框架 |
|
ERC-721 |
|
ERC-1155 |
|
标记流
由于区块链应用构建器通过扩展输入规范文件语法来支持标记化,因此您可以创建特定于标记的项目,就像使用 CLI 或 Visual Studio Code 创建其他项目一样。
有关使用区块链应用程序构建器创建项目的更多信息,请参阅输入规范文件。

- 确定要使用的令牌标准。
- 决定要指定的标记行为(
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 角色的用户可以将该角色分配给其组织中的其他用户。 - Token Minter
- 分配了 minter 角色的用户是
Token Minter
,可以生成标记。 - Token Burner
- 分配有刻录角色的用户是
Token Burner
,可以刻录标记。 - 令牌公证人
- 分配了公证角色的用户是
Token Notary
。Token Notary
在付款人与收款人之间的交易中作为第三方。Token Notary
可以触发从付款人到收款人的令牌转移的完成,也可以将令牌返回到付款人的账户。 - Vault Manager
- 分配有 Vault 角色的用户是
Vault Manager
。Vault Manager
可以解锁锁锁定的 NFT。Vault 角色仅适用于扩展的 ERC-721 和 ERC-1155 标准。将 Vault 角色分配给用户是锁定 NFT 的先决条件。每个链代码只能向一个用户分配 Vault 角色。 - 令牌审计员
- 仅限数字资产版本:扩展的令牌分类框架方法支持
Token Auditor
角色。此角色与Token Admin
角色类似,但具有只读访问权限。 - 组织审计员
- 仅限数字资产版本:扩展的令牌分类框架方法支持
Org Auditor
角色。此角色与Org Admin
角色类似,但具有只读访问权限。
在某些方法中,还结合了基于角色的访问控制和基于所有权的访问控制。例如,基于角色的访问控制允许具有 minter 角色的用户创建令牌。通过基于所有权的访问控制,不可换名的令牌所有者可以修改令牌的定制属性,但不能修改令牌元数据。当具有 minter 角色的用户创建不可替换令牌 (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 数据库使用多版本并发控制 (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 文档中的 Read-Write set semantics 。
注意:
MVCC 优化不适用于包含 Oracle Blockchain Platform 和 Hyperledger Fabric 对等点的混合网络,也不适用于在本地 Hyperledger Fabric 网络上进行测试。请勿在混合网络上启用 MVCC 优化,因为这可能导致对等方之间的不一致。