令牌分类框架的基架 TypeScript 项目
Blockchain App Builder 从您的令牌规范文件中获取输入,并生成一个功能完备的链码项目。
该项目自动生成令牌生命周期类和函数,包括 CRUD 和非 CRUD 方法。自动支持参数验证、编集/解编集以及透明的持久性功能。
有关与令牌不直接相关的基架项目和方法的信息,请参见 Scaffolded TypeScript Chaincode Project 。
型号
每个标记化的模型类都扩展 Token 类,这反过来又扩展了 OchainModel 类。Token 类是从 ../lib/token 导入的。透明持久性功能(或简化的 ORM)在 OchainModel 类中捕获。
import * as yup from 'yup';
import { Id, Mandatory, Validate, ReadOnly } from '../lib/decorators';
import { Token } from '../lib/token';
@Id('token_id')
export class Digicur extends Token<Digicur> {
public readonly assetType = 'otoken';
@Mandatory()
@Validate(yup.string().required().matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/).max(16))
public token_id: string;
@ReadOnly('digicur')
public token_name: string;
@Validate(yup.string().trim().max(256))
public token_desc: string;
@ReadOnly('fungible')
public token_type: string;
@ReadOnly(["divisible","mintable","transferable","burnable","holdable","roles"])
public behaviors: string[];
@ReadOnly({minter_role_name: "minter", burner_role_name: "burner", notary_role_name: "notary"})
public roles: object;
@ReadOnly({max_mint_quantity: 20000})
public mintable: object;
@ReadOnly({decimal: 1})
public divisible: object;
@Validate(yup.number())
public token_to_currency_ratio: number;
@Validate(yup.string())
public currency_representation: string;
}
控制器
主控制器类扩展了 OchainController 类。只有一个主控制器。
export class DigiCurrCCController extends OchainController{
您可以创建任意数量的类、函数或文件,但只能调用在主控制器类中定义的那些方法。其他方法被隐藏。
您可以使用令牌 SDK 方法为业务应用程序编写定制方法。
自动生成的令牌方法
Blockchain App Builder 自动生成支持令牌和令牌生命周期的方法。您可以使用这些方法来初始化令牌、管理角色和账户,以及完成其他令牌生命周期任务,而无需额外编码。控制器方法必须具有可调用的 @Validator(...params) 装饰器。
访问控制管理的方法
-
addTokenAdmin - 此方法将用户添加为链代码的
Token Admin。此方法只能由链代码的Token Admin调用。 -
removeTokenAdmin - 此方法将用户删除为链代码的
Token Admin。此方法只能由链代码的Token Admin调用。 -
isTokenAdmin - 如果函数的调用方为
Token Admin,则此方法返回布尔值true,否则返回false。Token Admin或Org Admin可以在区块链网络中的任何其他用户上调用此功能。其他用户只能在自己的账户上调用此方法。 -
getAllTokenAdmins - 此方法返回链代码为
Token Admin的所有用户的列表。此方法只能由链代码的Token Admin或任何Org Admin调用。 -
addOrgAdmin - 此方法将用户添加为组织的
Org Admin。此方法只能由链代码的Token Admin或指定组织的Org Admin调用。 -
removeOrgAdmin - 此方法将用户删除为组织的
Org Admin。此方法只能由链代码的Token Admin或指定组织的Org Admin调用。 -
getOrgAdmins - 此方法返回属于组织
Org Admin的所有用户的列表。此方法只能由链代码的Token Admin或任何组织的Org Admin调用。
-
addTokenAdmin - 此方法将用户添加为链代码的
Token Admin。此方法只能由链代码的Token Admin调用。 -
removeTokenAdmin - 此方法将用户删除为链代码的
Token Admin。此方法只能由链代码的Token Admin调用。 -
isTokenAdmin - 如果函数的调用方为
Token Admin,则此方法返回布尔值true,否则返回false。Token Admin、Token Auditor、任何Org Admin或任何Org Auditor可以在区块链网络中的任何其他用户上调用此功能。其他用户只能在自己的账户上调用此方法。 -
getAllTokenAdmins - 此方法返回链代码为
Token Admin的所有用户的列表。此方法只能由链代码的Token Admin或Token Auditor调用。 -
addOrgAdmin - 此方法将用户添加为组织的
Org Admin。此方法只能由链代码的Token Admin或指定组织的Org Admin调用。 -
removeOrgAdmin - 此方法将用户删除为组织的
Org Admin。此方法只能由链代码的Token Admin或指定组织的Org Admin调用。 -
getOrgAdmins - 此方法返回属于组织
Org Admin的所有用户的列表。此方法只能由Token Admin、Token Auditor、任何Org Admin或任何Org Auditor调用。 -
addTokenAuditor - 此方法将用户添加为链代码的
Token Auditor。此方法只能由链代码的Token Admin调用。 -
removeTokenAuditor - 此方法将用户删除为链代码的
Token Auditor。此方法只能由链代码的Token Admin调用。 -
getTokenAuditors - 此方法返回链代码的所有
Token Auditors。此方法只能由链代码的Token Admin或Token Auditor调用。 -
addOrgAuditor - 此方法将用户添加为链代码的
Org Auditor。此方法只能由链代码的Token Admin或Org Admin调用。 -
removeOrgAuditor - 此方法将用户删除为链代码的
Org Auditor。此方法只能由链代码的Token Admin或Org Admin调用。 -
getOrgAuditors - 此方法返回链代码的所有
Org Auditors。此方法只能由Token Admin、Token Auditor、Org Admin或Org Auditor调用。
标记配置管理的方法
-
init - 部署或升级链代码时会调用此方法。每个
Token Admin都由必需的adminList参数中的user_id和org_id信息标识。user_id是实例所有者或登录到实例的用户的用户名或电子邮件 ID。org_id是当前网络组织中用户的成员服务提供商 (Membership Service Provider,MSP) ID。 -
initialize<Token Name>Token - 此方法创建令牌并初始化令牌属性。资产及其属性保存在状态数据库中。此方法只能由链代码的
Token Admin调用。 -
update<Token Name>Token - 此方法更新令牌属性。创建标记资产后,只能更新
token_desc属性和定制属性。此方法只能由链代码的Token Admin调用。 -
getTokenDecimals - 此方法返回为小数标记配置的小数位数。如果未为标记指定
divisible行为,则默认值为 0。此方法只能由链代码的Token Admin或Org Admin调用。 -
getTokenById - 如果某个令牌对象存在于状态数据库中,则此方法返回该对象。此方法只能由链代码的
Token Admin或Org Admin调用。 -
getTokenHistory - 此方法返回指定标记 ID 的标记历史记录。任何用户都可以调用此方法。
-
getAllTokens - 此方法返回存储在状态数据库中的所有令牌。此方法只能由链代码的
Token Admin或Org Admin调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。 -
getTokensByName - 此方法返回具有指定名称的所有令牌对象。此方法只能由链代码的
Token Admin或Org Admin调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
init - 部署或升级链代码时会调用此方法。每个
Token Admin都由必需的adminList参数中的user_id和org_id信息标识。user_id是实例所有者或登录到实例的用户的用户名或电子邮件 ID。org_id是当前网络组织中用户的成员服务提供商 (Membership Service Provider,MSP) ID。 -
initialize<Token Name>Token - 此方法创建令牌并初始化令牌属性。资产及其属性保存在状态数据库中。此方法只能由链代码的
Token Admin调用。 -
update<Token Name>Token - 此方法更新令牌属性。创建标记资产后,只能更新
token_desc属性和定制属性。此方法只能由链代码的Token Admin调用。 -
getTokenDecimals - 此方法返回为小数标记配置的小数位数。如果未为标记指定
divisible行为,则默认值为 0。此方法只能由Token Admin、Token Auditor、Org Admin或Org Auditor调用。 -
getTokenById - 如果某个令牌对象存在于状态数据库中,则此方法返回该对象。此方法只能由
Token Admin、Token Auditor、Org Admin或Org Auditor调用。 -
getTokenHistory - 此方法返回指定标记 ID 的标记历史记录。此方法只能由
Token Admin、Token Auditor、Org Admin或Org Auditor调用。 -
getAllTokens - 此方法返回存储在状态数据库中的所有令牌。此方法只能由
Token Admin、Token Auditor、Org Admin或Org Auditor调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。 -
getTokensByName - 此方法返回具有指定名称的所有令牌对象。此方法只能由
Token Admin、Token Auditor、Org Admin或Org Auditor调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
账户管理方法
-
createAccount - 此方法为指定的用户和令牌创建帐户。必须为在任何时候将具有令牌的任何用户创建账户。账户跟踪余额、暂挂余额和事务处理历史记录。账户 ID 是一组字母数字字符,以
oaccount~<token asset name>~为前缀,后跟实例所有者或登录到实例的用户的用户的用户名或电子邮件 ID (user_id) 的散列,即当前网络组织中用户的成员资格服务提供商 ID (org_id)。此方法只能由链代码的Token Admin或指定组织的Org Admin调用。 -
associateTokenToAccount - 此方法将可变令牌与账户关联。此方法只能由链代码的
Token Admin或相关组织的Org Admin调用。 -
getAccount - 此方法返回指定用户和令牌的帐户详细信息。此方法只能由链代码的
Token Admin、指定组织的Org Admin或帐户的AccountOwner调用。 -
getAccountHistory - 此方法返回指定用户和令牌的帐户历史记录详细信息。此方法只能由链代码的
Token Admin或帐户的AccountOwner调用。 -
getAccountOnHoldBalance - 此方法返回指定账户和令牌的当前暂挂余额。此方法只能由链代码的
Token Admin、指定组织的Org Admin或帐户的AccountOwner调用。 -
getAllAccounts - 此方法返回所有帐户的列表。此方法只能由链代码的
Token Admin调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。 -
getUserByAccountId - 此方法返回指定帐户的用户详细信息(
org_id和user_id)。链代码的任何用户都可以调用此方法。 -
getAccountBalance - 此方法返回指定帐户和令牌的当前余额。此方法只能由链代码的
Token Admin、指定组织的Org Admin或帐户的AccountOwner调用。 -
getAllOrgAccounts - 此方法返回属于指定组织的所有令牌帐户的列表。此方法只能由链代码的
Token Admin或指定组织的Org Admin调用。
-
createAccount - 此方法为指定的用户和令牌创建帐户。必须为在任何时候将具有令牌的任何用户创建账户。账户跟踪余额、暂挂余额和事务处理历史记录。账户 ID 是一组字母数字字符,以
oaccount~<token asset name>~为前缀,后跟实例所有者或登录到实例的用户的用户的用户名或电子邮件 ID (user_id) 的散列,即当前网络组织中用户的成员资格服务提供商 ID (org_id)。此方法只能由链代码的Token Admin或指定组织的Org Admin调用。 -
associateTokenToAccount - 此方法将可变令牌与账户关联。此方法只能由链代码的
Token Admin或相关组织的Org Admin调用。 -
getAccount - 此方法返回指定用户和令牌的帐户详细信息。此方法只能由指定组织的
Token Admin或Token Auditor、Org Admin或Org Auditor或帐户的AccountOwner调用。 -
getAccountHistory - 此方法返回指定用户和令牌的帐户历史记录详细信息。此方法只能由链代码的
Token Admin或帐户的AccountOwner调用。 -
getAccountOnHoldBalance - 此方法返回指定账户和令牌的当前暂挂余额。此方法只能由指定组织的
Token Admin或Token Auditor、Org Admin或Org Auditor或帐户的AccountOwner调用。 -
getAllAccounts - 此方法返回所有帐户的列表。此方法只能由
Token Admin或Token Auditor调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。 -
getUserByAccountId - 此方法返回指定帐户的用户详细信息(
org_id和user_id)。此方法可由指定组织的Token Admin或Token Auditor或Org Admin或Org Auditor调用。 -
getAccountBalance - 此方法返回指定帐户和令牌的当前余额。此方法只能由指定组织的
Token Admin或Token Auditor、Org Admin或Org Auditor或帐户的AccountOwner调用。 -
getAllOrgAccounts - 此方法返回属于指定组织的所有令牌帐户的列表。此方法只能由指定组织的
Token Admin或Token Auditor或Org Admin或Org Auditor调用。
角色管理的方法
-
addRole - 此方法将角色添加到指定的用户和令牌。此方法只能由链代码的
Token Admin或同时具有指定角色的指定组织的Org Admin调用。 -
removeRole - 此方法从指定用户和令牌中删除角色。此方法只能由链代码的
Token Admin或同时具有指定角色的指定组织的Org Admin调用。 -
getAccountsByRole - 此方法返回指定角色和令牌的所有账户 ID 的列表。此方法只能由链代码的
Token Admin调用。 -
getAccountsByUser - 此方法返回指定组织 ID 和用户 ID 的所有帐户 ID 的列表。此方法只能由链代码的
Token Admin、指定组织的Org Admin或参数中指定的Account Owner调用。 -
getUsersByRole - 此方法返回指定角色和令牌的所有用户的列表。此方法只能由链代码的
Token Admin调用。 -
isInRole - 此方法返回布尔值以指示用户和令牌是否具有指定的角色。此方法只能由链代码的
Token Admin、帐户的AccountOwner或指定组织的Org Admin调用。 -
getOrgAccountsByRole - 此方法返回有关在指定组织中具有指定角色的所有帐户的信息。此方法只能由链代码的
Token Admin或指定组织的Org Admin调用。 -
getOrgUsersByRole - 此方法返回有关在指定组织中具有指定角色的所有用户的信息。此方法只能由链代码的
Token Admin或指定组织的Org Admin调用。
-
addRole - 此方法将角色添加到指定的用户和令牌。此方法只能由链代码的
Token Admin或同时具有指定角色的指定组织的Org Admin调用。 -
removeRole - 此方法从指定用户和令牌中删除角色。此方法只能由链代码的
Token Admin或同时具有指定角色的指定组织的Org Admin调用。 -
getAccountsByRole - 此方法返回指定角色和令牌的所有账户 ID 的列表。此方法只能由
Token Admin或Token Auditor调用。 -
getAccountsByUser - 此方法返回指定组织 ID 和用户 ID 的所有帐户 ID 的列表。此方法只能由指定组织的
Token Admin或Token Auditor、Org Admin或Org Auditor或参数中指定的Account Owner调用。 -
getUsersByRole - 此方法返回指定角色和令牌的所有用户的列表。此方法只能由
Token Admin或Token Auditor调用。 -
isInRole - 此方法返回布尔值以指示用户和令牌是否具有指定的角色。此方法只能由指定的组织的
Token Admin或Token Auditor、帐户的AccountOwner或Org Admin或Org Auditor调用。 -
getOrgAccountsByRole - 此方法返回有关在指定组织中具有指定角色的所有帐户的信息。此方法只能由
Token Admin、Token Auditor、Org Admin或Org Auditor调用。 -
getOrgUsersByRole - 此方法返回有关在指定组织中具有指定角色的所有用户的信息。此方法只能由指定组织的
Org Admin或Org Auditor通过Token Admin或Token Auditor调用。
事务处理历史记录管理的方法
-
getAccountTransactionHistory - 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由链代码的
Token Admin、指定组织的Org Admin或帐户的AccountOwner调用。 -
getAccountTransactionHistoryWithFilters - 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由链代码的
Token Admin、指定组织的Org Admin或帐户的AccountOwner调用。仅当连接到远程 Oracle Blockchain Platform 网络时,才能调用此方法。 -
getSubTransactionsById - 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由链代码的
Token Admin或帐户的AccountOwner调用。 -
getSubTransactionsByIdWithFilters - 此方法返回指定事务处理的账户子事务处理历史记录详细信息数组。
-
getTransactionById - 此方法返回
Transaction资产的历史记录。 -
deleteHistoricalTransactions - 此方法从状态数据库中删除较早的事务处理。
-
getAccountTransactionHistoryWithFiltersFromRichHistDB - 您可以将数据同步到富历史记录数据库,然后使用链代码 API 调用提取数据。此方法从富历史记录数据库中获取事务处理历史记录。使用此方法之前,必须先启用 Oracle REST Data Services (ORDS) 和 OAuth 来运行 Oracle Autonomous Database,如 Oracle Blockchain Platform Digital Assets Edition 中的 Oracle Database View Definitions for Wholesale CBDC 中所述。
-
getAccountTransactionHistory - 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由指定组织的
Token Admin或Token Auditor、Org Admin或Org Auditor或帐户的AccountOwner调用。 -
getAccountTransactionHistoryWithFilters - 此方法返回指定用户和令牌的账户事务处理历史记录详细信息的筛选数组。此方法只能由指定组织的
Token Admin或Token Auditor、Org Admin或Org Auditor或帐户的AccountOwner调用。 -
getSubTransactionsById - 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由调用该事务处理的
Token Admin、Token Auditor或AccountOwner调用。 -
getSubTransactionsByIdWithFilters - 此方法返回指定事务处理的账户子事务处理历史记录详细信息数组。
-
getTransactionById - 此方法返回
Transaction资产的历史记录。此方法只能由Token Admin或Token Auditor、指定组织的Org Admin或Org Auditor或事务处理参与者(发件人、收件人或公证人)调用。 -
deleteHistoricalTransactions - 此方法从状态数据库中删除较早的事务处理。
令牌行为管理方法 - 可铸造行为
-
issueTokens - 此方法用于生成标记,然后这些标记由该方法的调用方拥有。调用方必须具有帐户和 minter 角色。可铸造的令牌数量受规范文件中
mintable行为的max_mint_quantity属性的限制。如果未指定max_mint_quantity属性,则可以铸造无限数量的标记。数量必须在规范文件中divisible行为的decimal参数指定的小数值内。此方法只能由具有 minter 角色的帐户的AccountOwner调用。 -
getTotalMintedTokens - 此方法返回指定标记的铸造标记总数。此方法只能由链代码的
Token Admin或任何Org Admin调用。 -
getNetTokens - 此方法返回系统中指定令牌的可用令牌净总数。净令牌总数是令牌被烧毁后剩余的令牌数量。在方程式中:净代币 = 总铸币代币 - 总烧毁代币。如果未刻录任何令牌,则净令牌数等于铸造的令牌总数。此方法只能由链代码的
Token Admin或任何Org Admin调用。
-
requestMint - 矿工可以调用此方法,向矿工公证人发送请求以创建指定数量的令牌。
-
approveMint - 矿工公证人可以调用此方法来批准铸造请求。
-
rejectMint - 矿工公证人可以调用此方法来拒绝铸造请求。
-
issueTokens - 此方法用于生成标记,然后这些标记由该方法的调用方拥有。
-
getTotalMintedTokens - 此方法返回指定标记的铸造标记总数。此方法只能由
Token Admin、Token Auditor、Org Admin或Org Auditor调用。 -
getNetTokens - 此方法返回系统中指定令牌的可用令牌净总数。净令牌总数是令牌被烧毁后剩余的令牌数量。在方程式中:净代币 = 总铸币代币 - 总烧毁代币。如果未刻录任何令牌,则净令牌数等于铸造的令牌总数。此方法只能由
Token Admin、Token Auditor、Org Admin或Org Auditor调用。
令牌行为管理的方法 - 可转移行为
令牌行为管理的方法 - 可暂挂行为
-
holdTokens - 此方法代表具有
to_account_id帐户的令牌的所有者创建暂挂。指定公证账户,该账户负责完成或释放暂挂。创建暂挂时,付款人的指定标记余额将被暂挂。在暂挂完成或释放之前,无法转移暂挂余额。此方法的调用方必须已创建帐户。此方法只能由帐户的AccountOwner调用。 -
executeHoldTokens - 此方法完成对令牌的暂挂。令牌所有者以前持有的令牌数量将转移给接收者。如果
quantity值小于实际暂挂值,则剩余金额将再次可供令牌的原始所有者使用。此方法只能由具有指定操作 ID 的notary角色的AccountOwnerID 调用。暂停只能由公证人完成。 -
releaseHoldTokens - 此方法释放暂挂令牌。传输未完成,所有保留的令牌将再次提供给原始所有者。此方法可以由具有
notary角色的AccountOwnerID 在指定时间限制内调用,也可以由付款人、收款人或公证人在指定时间限制之后调用。 -
getOnHoldIds - 此方法返回指定帐户的所有持有 ID 的列表。此方法可以由链代码的
Token Admin、指定组织的Org Admin或帐户的AccountOwner调用。 -
getOnHoldDetailsWithOperationId - 此方法返回指定操作 ID 和令牌的暂挂事务处理详细信息。任何人都可以调用此方法。
-
getOnHoldBalanceWithOperationId - 此方法返回指定操作 ID 和令牌的暂挂余额。任何人都可以调用此方法。
-
holdTokens - 此方法代表具有
to_account_id帐户的令牌的所有者创建暂挂。 -
executeHoldTokens - 此方法完成对令牌的暂挂。令牌所有者以前持有的令牌数量将转移给接收者。如果
quantity值小于实际暂挂值,则剩余金额将再次可供令牌的原始所有者使用。此方法只能由具有指定操作 ID 的notary角色的AccountOwnerID 调用。暂停只能由公证人完成。 -
releaseHoldTokens - 此方法释放暂挂令牌。传输未完成,所有保留的令牌将再次提供给原始所有者。此方法可以由具有
notary角色的AccountOwnerID 在指定时间限制内调用,也可以由付款人、收款人或公证人在指定时间限制之后调用。 -
getOnHoldIds - 此方法返回指定帐户的所有持有 ID 的列表。此方法可由链代码的
Token Admin或Token Auditor、指定组织的Org Admin或Org Auditor或帐户的AccountOwner调用。 -
getOnHoldDetailsWithOperationId - 此方法返回指定操作 ID 和令牌的暂挂事务处理详细信息。此方法可以由链代码的
Token Admin或Token Auditor调用,也可以由事务处理参与者(发件人、收件人、公证人)调用。 -
getOnHoldBalanceWithOperationId - 此方法返回指定操作 ID 和令牌的暂挂余额。此方法可以由链代码的
Token Admin或Token Auditor调用,也可以由事务处理参与者(发件人、收件人、公证人)调用。
令牌行为管理的方法 - 可燃行为
-
requestBurn - 刻录器可以调用此方法,向刻录器公证器发送请求以销毁指定数量的标记,这些标记必须小于或等于其可用余额。刻录请求开始时,会立即从可用余额中扣除指定的金额,并将其添加到
onhold_burn_balance字段。如果请求获得批准,则会刻录令牌。如果请求被拒绝,令牌将从onhold_burn_balance字段返回到可用余额。 -
approveBurn - 燃烧器公证人可以调用此方法来批准燃烧请求。
-
rejectBurn - 燃烧器公证人可以调用此方法来拒绝燃烧请求。
-
getAccountOnHoldBurnBalance - 此方法返回指定用户的暂挂消耗余额。此方法只能由
Token Admin、Token Auditor、Org Admin、Org Auditor或帐户所有者调用。 -
burnTokens - 此方法从交易调用者的账户中停用或刻录令牌。
自定义方法
您可以使用令牌 SDK 方法为业务应用程序编写定制方法。
为了避免双重支出,请不要组合对状态数据库中的相同键 - 值对进行操作的多个异步函数。而是使用 bulkTransferTokens 方法在一个方法中进行多个传输。
以下示例说明如何在定制方法中使用令牌 SDK 方法。当调用 buyTicket 方法时,它将 20 个令牌从调用者的帐户传输到卖方的帐户,并返回传输的事务消息。
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async buyTicket(token_id: string, seller_org_id: string, seller_user_id: string) {
const token = await this.getTokenObject(token_id);
/**
* The following method this.Ctx.Account.generateAccountId(token_id, seller_org_id, seller_user_id) generates account id of the seller.
*/
const seller_account_id = await this.Ctx.Account.generateAccountId(token_id, seller_org_id, seller_user_id);
/**
* The following method this.Ctx.Token.transfer(seller_account_id, 20, token) transfers the quantity 20 from caller's
* account & to seller's account.
*/
const transaction = await this.Ctx.Token.transfer(seller_account_id, 20, token);
return transaction;
}
如果在定制方法中使用多个令牌 SDK 方法,请勿使用会影响状态数据库中相同键 - 值对的方法。以下示例显示了创建多个传输的错误方式:
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async sendTokens(token_id: string, user1_org_id: string, user1_user_id: string, user2_org_id: string, user2_user_id: string) {
const token = await this.getTokenObject(token_id);
const user1_account_id = await Account.generateAccountId(token_id, user1_org_id, user1_user_id);
const user2_account_id = await Account.generateAccountId(token_id, user2_org_id, user2_user_id);
await token.transfer(user1_account_id, 20);
await token.transfer(user2_account_id, 30);
}
而是使用 bulkTransferTokens 方法从调用者的帐户转移到多个帐户,如以下代码片段中所示。
bulkTransferTokens(token_id: string, flow: object[])
注意:
如果您在定制方法中使用多个令牌 SDK 方法,这些方法可能会影响状态数据库中的相同键 - 值对,请为令牌链代码启用 MVCC 优化。有关更多信息,请参见 MVCC Optimization 。标记 SDK 方法
访问控制管理的方法
Token Admin、Org Admin 或 AccountOwner 调用。您可以使用此功能来确保操作仅由预期用户执行。任何未经授权的访问都会导致错误。要使用访问控制功能,请从 ../lib/auth 模块导入 Authorization 类。import { Authorization } from '../lib/auth';-
addAdmin - 此方法将用户添加为令牌链代码的
Token Admin。 -
removeAdmin - 此方法将用户删除为令牌链代码的
Token Admin。 -
isUserTokenAdmin - 如果函数的调用方为
Token Admin,则此方法返回布尔值true。否则,该方法将返回false。 -
getAllAdmins - 此方法返回作为令牌链代码的
Token Admin的所有用户的列表。 -
checkAuthorization - 使用此方法可将访问控制检查添加到操作。某些令牌方法只能由令牌的
Token Admin或AccountOwner运行,也可以由具有多个帐户的用户使用MultipleAccountOwner运行。访问控制映射在../lib/constant.ts文件中进行了介绍。您可以通过编辑../lib/constant.ts文件来修改访问控制。要使用您自己的访问控制或禁用访问控制,请从自动生成的控制器方法和定制方法中删除访问控制代码。export const TOKENACCESS = { ADMIN: { isUserTokenAdmin: ["Admin", "OrgAdmin"], addTokenAdmin: ["Admin"], removeTokenAdmin: ["Admin"], getAllAdmins: ["Admin", "OrgAdmin"], addOrgAdmin: ["Admin", "OrgAdminForOrgId"], removeOrgAdmin: ["Admin", "OrgAdminForOrgId"], getOrgAdmins: ["Admin", "OrgAdmin"], }, TOKEN: { save: ["Admin"], getAllTokens: ["Admin", "OrgAdmin"], get: ["Admin", "OrgAdmin"], update: ["Admin"], getDecimals: ["Admin", "OrgAdmin"], getTokensByName: ["Admin", "OrgAdmin"], addRoleMember: ["Admin", "OrgAdminRoleCheck"], removeRoleMember: ["Admin", "OrgAdminRoleCheck"], isInRole: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getTotalMintedTokens: ["Admin", "OrgAdmin"], getNetTokens: ["Admin", "OrgAdmin"], getTokenHistory: ["Admin", "OrgAdmin"], }, ROLE: { getAccountsByRole: ["Admin"], getOrgAccountsByRole: ["Admin", "OrgAdminForOrgId"], getUsersByRole: ["Admin"], getOrgUsersByRole: ["Admin", "OrgAdminForOrgId"], }, TRANSACTION: { deleteTransactions: ["Admin"], },ACCOUNT: { createAccount: ["Admin", "OrgAdminForOrgId"], associateToken: ["Admin", "OrgAdminForAccountId"], getAllAccounts: ["Admin"], getAllOrgAccounts: ["Admin", "OrgAdminForOrgId"], getAccountsByUser: ["Admin", "OrgAdminForOrgId", "MultipleAccountOwner"], getAccount: ["Admin", "OrgAdminForAccountId", "AccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getSubTransactionsById: ["Admin", "TransactionInvoker"], getSubTransactionsByIdWithFilters: ["Admin", "TransactionInvoker"], getAccountBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getAccountOnHoldBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getOnHoldIds: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getConversionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"], }, ACCOUNT_STATUS: { get: ["Admin", "OrgAdminForAccountId", "AccountOwner"], history: ["Admin", "OrgAdminForAccountId", "AccountOwner"], activateAccount: ["Admin", "OrgAdminForOrgId"], suspendAccount: ["Admin", "OrgAdminForOrgId"], deleteAccount: ["Admin", "OrgAdminForOrgId"], }, TOKEN_CONVERSION: { initializeExchangePoolUser: ["Admin"], addConversionRate: ["Admin"], updateConversionRate: ["Admin"], getConversionRate: ["Admin", "OrgAdmin", "AnyAccountOwner"], getConversionRateHistory: ["Admin", "OrgAdmin", "AnyAccountOwner"], tokenConversion: ["Admin", "AnyAccountOwner"], getExchangePoolUser: ["Admin"], }, } -
addOrgAdmin - 此方法将用户添加为组织的
Org Admin。 -
removeOrgAdmin - 此方法将用户删除为组织的
Org Admin。 -
getOrgAdmins - 此方法返回属于组织
Org Admin的所有用户的列表。
-
addAdmin - 此方法将用户添加为令牌链代码的
Token Admin。 -
removeAdmin - 此方法将用户删除为令牌链代码的
Token Admin。 -
isUserTokenAdmin - 如果函数的调用方为
Token Admin,则此方法返回布尔值true。否则,该方法将返回false。 -
getAllAdmins - 此方法返回作为令牌链代码的
Token Admin的所有用户的列表。 -
checkAuthorization - 使用此方法可将访问控制检查添加到操作。某些令牌方法只能由令牌的
Token Admin或AccountOwner运行,也可以由具有多个帐户的用户使用MultipleAccountOwner运行。访问控制映射在../lib/constant.ts文件中进行了介绍。您可以通过编辑../lib/constant.ts文件来修改访问控制。要使用您自己的访问控制或禁用访问控制,请从自动生成的控制器方法和定制方法中删除访问控制代码。export const TOKENACCESS = { ADMIN: { isUserTokenAdmin: ["Admin", "OrgAdmin"], addTokenAdmin: ["Admin"], removeTokenAdmin: ["Admin"], getAllAdmins: ["Admin", "OrgAdmin"], addOrgAdmin: ["Admin", "OrgAdminForOrgId"], removeOrgAdmin: ["Admin", "OrgAdminForOrgId"], getOrgAdmins: ["Admin", "OrgAdmin"], }, TOKEN: { save: ["Admin"], getAllTokens: ["Admin", "OrgAdmin"], get: ["Admin", "OrgAdmin"], update: ["Admin"], getDecimals: ["Admin", "OrgAdmin"], getTokensByName: ["Admin", "OrgAdmin"], addRoleMember: ["Admin", "OrgAdminRoleCheck"], removeRoleMember: ["Admin", "OrgAdminRoleCheck"], isInRole: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getTotalMintedTokens: ["Admin", "OrgAdmin"], getNetTokens: ["Admin", "OrgAdmin"], getTokenHistory: ["Admin", "OrgAdmin"], }, ROLE: { getAccountsByRole: ["Admin"], getOrgAccountsByRole: ["Admin", "OrgAdminForOrgId"], getUsersByRole: ["Admin"], getOrgUsersByRole: ["Admin", "OrgAdminForOrgId"], }, TRANSACTION: { deleteTransactions: ["Admin"], },ACCOUNT: { createAccount: ["Admin", "OrgAdminForOrgId"], associateToken: ["Admin", "OrgAdminForAccountId"], getAllAccounts: ["Admin"], getAllOrgAccounts: ["Admin", "OrgAdminForOrgId"], getAccountsByUser: ["Admin", "OrgAdminForOrgId", "MultipleAccountOwner"], getAccount: ["Admin", "OrgAdminForAccountId", "AccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getSubTransactionsById: ["Admin", "TransactionInvoker"], getSubTransactionsByIdWithFilters: ["Admin", "TransactionInvoker"], getAccountBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getAccountOnHoldBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getOnHoldIds: ["Admin", "OrgAdminForAccountId", "AccountOwner"], getConversionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"], }, ACCOUNT_STATUS: { get: ["Admin", "OrgAdminForAccountId", "AccountOwner"], history: ["Admin", "OrgAdminForAccountId", "AccountOwner"], activateAccount: ["Admin", "OrgAdminForOrgId"], suspendAccount: ["Admin", "OrgAdminForOrgId"], deleteAccount: ["Admin", "OrgAdminForOrgId"], }, TOKEN_CONVERSION: { initializeExchangePoolUser: ["Admin"], addConversionRate: ["Admin"], updateConversionRate: ["Admin"], getConversionRate: ["Admin", "OrgAdmin", "AnyAccountOwner"], getConversionRateHistory: ["Admin", "OrgAdmin", "AnyAccountOwner"], tokenConversion: ["Admin", "AnyAccountOwner"], getExchangePoolUser: ["Admin"], }, } -
addOrgAdmin - 此方法将用户添加为组织的
Org Admin。 -
removeOrgAdmin - 此方法将用户删除为组织的
Org Admin。 -
getOrgAdmins - 此方法返回属于组织
Org Admin的所有用户的列表。 -
addTokenAuditor - 此方法将用户添加为链代码的
Token Auditor。 -
removeTokenAuditor - 此方法将用户删除为链代码的
Token Auditor。 -
getTokenAuditors - 此方法返回链代码的所有
Token Auditors。 -
addOrgAuditor - 此方法将用户添加为链代码的
Org Auditor。 -
removeOrgAuditor - 此方法将用户删除为链代码的
Org Auditor。 -
getOrgAuditors - 此方法返回链代码的所有
Org Auditors。
标记配置管理的方法
-
save - 此方法创建令牌并将其属性保存在状态数据库中。
-
update - 此方法更新令牌属性。创建令牌资产后,仅更新
token_desc值及其定制属性。 -
getTokenDecimals - 此方法返回小数标记的可用小数位数。如果未指定
divisible行为,则默认值为 0。 -
get - 如果某个令牌对象存在于状态数据库中,则此方法返回该对象。
-
history - 此方法返回指定标记的历史记录。
-
getAllTokens - 此方法返回保存在状态数据库中的所有令牌资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
getTokensByName - 此方法返回具有指定名称的所有标记资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
isTokenType - 此方法指示是否存在具有指定 ID 的标记资产。
-
getByRange - 此方法在内部调用网状结构网络
getStateByRange方法。即使从分类账中返回具有给定 ID 的任何资产,此方法也会将资产强制转换为调用方资产类型。
账户管理方法
-
getCallerAccountId - 此方法返回调用者的帐户 ID。
-
generateAccountId - 此方法返回帐户 ID,该 ID 是一组字母数字字符,前缀为
oaccount~<token asset name>~,后跟实例所有者或登录到实例的用户的用户的用户名或电子邮件 ID (user_id) 的散列、当前网络组织中用户的成员资格服务提供商 ID (org_id) 以及唯一令牌 ID (token_id)。 -
createAccount - 此方法为指定的用户和令牌创建帐户。每个在任何时候都有令牌的用户都必须有一个帐户。账户跟踪用户的余额、暂挂余额和事务处理历史记录。账户 ID 是一组字母数字字符,以
oaccount~<token asset name>~为前缀,后跟实例所有者或登录到实例的用户的用户的用户名或电子邮件 ID (user_id) 的散列,即当前网络组织中用户的成员资格服务提供商 ID (org_id)。此方法只能由链代码的Token Admin或指定组织的Org Admin调用。 -
associateTokenToAccount - 此方法将可变令牌与账户关联。此方法只能由链代码的
Token Admin或相关组织的Org Admin调用。 -
getAccountWithStatus - 此方法返回指定帐户的帐户详细信息,包括帐户状态。
-
getAccount - 此方法返回指定帐户的帐户详细信息。
-
history - 此方法返回指定帐户的帐户历史记录详细信息数组。
-
getAccountOnHoldBalance - 此方法返回指定账户的暂挂余额。
-
getAllAccounts - 此方法返回所有帐户的列表。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
getUserByAccountId - 此方法返回指定帐户的用户详细信息。
-
getAccountBalance - 此方法返回指定帐户的帐户余额。
-
getAllOrgAccounts - 此方法返回属于指定组织的所有令牌帐户的列表。
角色管理的方法
-
addRoleMember - 此方法将角色添加到指定的用户和令牌。
-
removeRoleMember - 此方法从指定用户和令牌中删除角色。
-
getAccountsByRole - 此方法返回指定角色和令牌的所有帐户的列表。
-
getAccountsByUser - 此方法返回指定用户的所有帐户 ID 的列表。
-
getUsersByRole - 此方法返回指定角色和令牌的所有用户的列表。
-
isInRole - 此方法指示用户和令牌是否具有指定的角色。
-
getOrgAccountsByRole - 此方法返回有关在指定组织中具有指定角色的所有帐户的信息。
-
getOrgUsersByRole - 此方法返回有关在指定组织中具有指定角色的所有用户的信息。
-
roleCheck - 此方法检查提供的帐户 ID 是否是任何角色的成员。
事务处理历史记录管理的方法
-
getAccountTransactionHistory - 此方法返回指定账户的事务处理历史记录详细信息数组。
-
getAccountTransactionHistoryWithFilters - 此方法返回指定账户的事务处理历史记录详细信息数组。仅当连接到远程 Oracle Blockchain Platform 网络时,才能调用此方法。
-
getSubTransactionHistory - 此方法返回指定事务处理的事务处理历史记录详细信息数组。
-
getSubTransactionHistoryWithFilters - 此方法返回指定事务处理的子事务处理历史记录详细信息数组。
-
getTransactionById - 此方法返回
Transaction资产的历史记录。 -
deleteHistoricalTransactions - 此方法返回指定账户的事务处理历史记录详细信息数组。
令牌行为管理
../lib/token 模块导入 Token 类。
import { Token } from '../lib/token';令牌行为管理方法 - 可铸造行为
-
mint - 此方法会生成一定数量的令牌,然后这些令牌归方法的调用者所有。调用方必须具有帐户和 minter 角色。数量必须在规范文件中
divisible行为的decimal参数指定的小数值内。 -
getTotalMintedTokens - 此方法返回铸造的令牌总数。
-
getNetTokens - 此方法返回系统中可用的令牌的净数量。净令牌是指令牌被烧毁后剩余的令牌数量。在方程式中:净代币 = 总铸币代币 - 总烧毁代币。如果未刻录任何令牌,则净令牌数等于铸造的令牌总数。
-
getMaxMintQuantity - 此方法返回令牌的最大可铸件数量。如果未指定
max_mint_quantity行为,则默认值为 0,这允许铸造任意数量的令牌。
令牌行为管理的方法 - 可转移行为
-
transfer - 此方法将令牌从事务处理调用方传输到
to_account_id账户。此方法的调用方必须具有帐户,且数量必须在规范文件中divisible行为的decimal参数指定的十进制值内。 -
bulkTransfer - 此方法将令牌从调用方帐户批量传输到
flow对象中指定的帐户。此方法的调用方必须已创建帐户。
令牌行为管理的方法 - 可暂挂行为
-
hold - 此方法代表具有
to_account_id帐户的令牌的所有者创建暂挂。指定公证账户,该账户负责完成或释放暂挂。创建暂挂时,付款人的指定标记余额将被暂挂。在暂挂完成或释放之前,无法转移暂挂余额。此方法的调用方必须已创建帐户。 -
executeHold - 此方法完成对令牌的暂挂,将以前暂挂的指定数量的令牌转移给接收者。如果
quantity值小于实际暂挂值,则剩余金额将再次可供令牌的原始所有者使用。此方法只能由具有指定操作 ID 的notary角色的AccountOwnerID 调用。暂停只能由公证人完成。 -
releaseHold - 此方法释放暂挂令牌。传输未完成,所有保留的令牌将再次提供给原始所有者。此方法可以由具有
notary角色的AccountOwnerID 在指定时间限制内调用,也可以由付款人、收款人或公证人在指定时间限制之后调用。 -
getOnHoldIds - 此方法返回指定帐户的所有持有 ID 的列表。
-
getOnHoldDetailsWithOperationId - 此方法返回指定操作 ID 和令牌的暂挂事务处理详细信息。
-
getOnHoldBalanceWithOperationId - 此方法返回指定操作 ID 和令牌的暂挂余额。任何人都可以调用此方法。
令牌行为管理的方法 - 可燃行为