标记分类框架的基架 Go 项目
Blockchain App Builder 从您的令牌规范文件中获取输入,并生成一个功能完备的链码项目。
该项目自动生成令牌生命周期类和函数,包括 CRUD 和非 CRUD 方法。自动支持参数验证、编集/解编集以及透明的持久性功能。
有关与令牌不直接相关的基架项目和方法的信息,请参见 Scaffolded Go Chaincode Project 。
型号
透明持久性功能(或简化的 ORM)在 OchainModel
类中捕获。
package src
type Digicur struct {
AssetType string `json:"AssetType" final:"otoken"`
Token_id string `json:"Token_id" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
Token_name string `json:"Token_name" final:"digicur"`
Token_desc string `json:"Token_desc" validate:"max=256"`
Token_type string `json:"Token_type" final:"fungible" validate:"regexp=^fungible$"`
Behavior []string `json:"Behavior" final:"[\"divisible\",\"mintable\",\"transferable\",\"burnable\",\"holdable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\",\"burner_role_name\":\"burner\",\"notary_role_name\":\"notary\"}"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
Divisible map[string]interface{} `json:"Divisible" final:"{\"Decimal\":1}"`
Token_to_currency_ratio int `json:"Token_to_currency_ratio" validate:"int"`
Currency_representation string `json:"Currency_representation" validate:"string"`
Metadata interface{} `json:"Metadata,omitempty"`
}
控制器
只有一个主控制器。
type Controller struct {
Ctx trxcontext.TrxContext
}
您可以创建任意数量的类、函数或文件,但只能调用在主控制器类中定义的那些方法。其他方法被隐藏。
您可以使用令牌 SDK 方法为业务应用程序编写定制方法。
如果在定制方法中使用多个令牌 SDK 方法,请勿使用会影响状态数据库中相同键 - 值对的方法。
而是使用 BulkTransferTokens
方法从调用者的帐户转移到多个帐户,如以下代码片段中所示。
BulkTransferTokens(token_id string, flow: []map[string]interface{})
注意:
如果您在定制方法中使用多个令牌 SDK 方法,这些方法可能会影响状态数据库中的相同键 - 值对,请为令牌链代码启用 MVCC 优化。有关更多信息,请参见 MVCC Optimization 。自动生成的令牌方法
Blockchain App Builder 自动生成支持令牌和令牌生命周期的方法。您可以使用这些方法来初始化令牌、管理角色和账户,以及完成其他令牌生命周期任务,而无需额外编码。控制器方法必须为公共且可调用。公共方法名称以大写字符开头。以小写字符开头的方法名称是专用的。
访问控制管理的方法
-
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
调用。 -
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
调用。 -
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
或指定的帐户所有者调用。 -
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
或指定的帐户所有者调用。 -
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
或在参数中指定的Account Owner
调用。 -
IsInRole
- 此方法返回布尔值以指示用户和令牌是否具有指定的角色。此方法只能由链代码的
Token Admin
、指定组织的Org Admin
或帐户的AccountOwner
调用。 -
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
、Org Admin
或Org Auditor
或指定的帐户所有者调用。 -
GetOrgAccountsByRole
- 此方法返回有关在指定组织中具有指定角色的所有帐户的信息。此方法只能由
Token Admin
、Token Auditor
、Org Admin
或Org Auditor
调用。 -
GetOrgUsersByRole
- 此方法返回有关在指定组织中具有指定角色的所有用户的信息。此方法只能由指定组织的
Token Admin
或Token Auditor
或Org Admin
或Org Auditor
调用。
事务处理历史记录管理的方法
-
GetAccountTransactionHistory
- 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由链代码的
Token Admin
、指定组织的Org Admin
或帐户的AccountOwner
调用。 -
GetAccountTransactionHistoryWithFilters
- 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由链代码的
Token Admin
、指定组织的Org Admin
或帐户的AccountOwner
调用。仅当连接到远程 Oracle Blockchain Platform 网络时,才能调用此方法。 -
GetSubTransactionsById
- 此方法返回指定事务处理的子事务处理历史记录详细信息数组。
-
GetSubTransactionsByIdWithFilters
- 此方法返回指定事务处理的子事务处理历史记录详细信息数组。
-
GetTransactionById
- 此方法返回
Transaction
资产的历史记录。 -
DeleteHistoricalTransactions
- 此方法从状态数据库中删除较早的事务处理。
-
GetAccountTransactionHistoryWithFiltersFromRichHistDB
func (t *Controller) GetAccountTransactionHistoryWithFiltersFromRichHistDB(token_id string, org_id string, user_id string, custom_endPoint string, bearer_token string, filters ...account.AccountHistoryFilters) (interface{}, error) { account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id) if err != nil { return nil, err } auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id}) if err != nil && !auth { return nil, fmt.Errorf("error in authorizing the caller %s", err.Error()) } // sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"} transactionArray, err := t.Ctx.Account.GetAccountTransactionHistoryWithFiltersFromRichHistDB(account_id, org_id, user_id, custom_endPoint, bearer_token, filters...) return transactionArray, err }
-
GetAccountTransactionHistory
- 此方法返回指定用户和令牌的账户事务处理历史记录详细信息数组。此方法只能由指定组织的
Token Admin
或Token Auditor
、Org Admin
或Org Auditor
或指定的帐户所有者调用。 -
GetAccountTransactionHistoryWithFilters
- 此方法返回指定用户和令牌的账户事务处理历史记录详细信息的筛选数组。此方法只能由指定组织的
Token Admin
或Token Auditor
、Org Admin
或Org Auditor
或指定的帐户所有者调用。 -
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
值小于实际暂挂值,则剩余金额将再次可供令牌的原始所有者使用。此方法只能由具有notary
角色的AccountOwner
ID 调用。暂停只能由公证人完成。 -
ReleaseHoldTokens
- 此方法释放暂挂令牌。传输未完成,所有保留的令牌将再次提供给原始所有者。此方法可以由具有
notary
角色的Account Owner
ID 在指定时间限制内调用,也可以由付款人、收款人或公证人在指定时间限制之后调用。 -
GetOnHoldIds
- 此方法返回指定帐户的所有持有 ID 的列表。此方法可以由链代码的
Token Admin
、指定组织的Org Admin
或帐户的Account Owner
调用。 -
GetOnHoldDetailsWithOperationId
- 此方法返回指定操作 ID 和令牌的暂挂事务处理详细信息。任何人都可以调用此方法。
-
GetOnHoldBalanceWithOperationId
- 此方法返回指定操作 ID 和令牌的暂挂余额。任何人都可以调用此方法。
-
HoldTokens
- 此方法代表具有
to_account_id
帐户的令牌的所有者创建暂挂。 -
ExecuteHoldTokens
- 此方法完成对令牌的暂挂。令牌所有者以前持有的令牌数量将转移给接收者。如果
quantity
值小于实际暂挂值,则剩余金额将再次可供令牌的原始所有者使用。此方法只能由具有notary
角色的AccountOwner
ID 调用。暂停只能由公证人完成。 -
ReleaseHoldTokens
- 此方法释放暂挂令牌。传输未完成,所有保留的令牌将再次提供给原始所有者。此方法可以由具有
notary
角色的Account Owner
ID 在指定时间限制内调用,也可以由付款人、收款人或公证人在指定时间限制之后调用。 -
GetOnHoldIds
- 此方法返回指定帐户的所有持有 ID 的列表。此方法可由指定组织的
Token Admin
或Token Auditor
、Org Admin
或Org Auditor
或指定的帐户所有者调用。 -
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 方法为业务应用程序编写定制方法。
请务必在使用令牌 SDK 方法时跟踪返回值。此外,为了避免双重支出,请不要将多个异步函数组合在一起,这些函数在状态数据库中对相同的键 - 值对进行操作。而是使用 BulkTransferTokens
方法,在一个方法中进行多个传输。
以下示例说明如何在定制方法中使用令牌 SDK 方法。当调用 BuyTicket
方法时,它将 20 个令牌从调用者的帐户传输到卖方的帐户,并返回传输的事务消息。
func (t *Controller) BuyTicket(TokenId string, SellerOrgId string, SellerUserId string) (interface{}, error){
token, err := t.Ctx.Token.Get(TokenId)
if err != nil {
return nil, err
}
/**
* The following method t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId) generates account id of the seller
*/
sellerAccountId, err := t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId)
if err != nil {
return nil, err
}
/**
* The following method t.Ctx.Token.Transfer(sellerAccountId, 20, token) transfers the quantity 20 from caller's
* account & to seller's account.
*/
transaction, err := t.Ctx.Token.Transfer(sellerAccountId, 20, token)
if err != nil {
return nil, err
}
return transaction, nil
}
标记 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
的所有用户的列表。 -
GetAllAdminUsers
- 此方法返回作为令牌链代码的
Token Admin
的所有用户的列表。 -
CheckAuthorization
- 使用此方法可将访问控制添加到链代码中。许多自动生成的令牌方法都使用访问控制。SDK 接收器与具有访问控制的方法之间的映射在
oChainUtil.go
文件中进行了介绍。要使用您自己的访问控制或禁用访问控制,请从自动生成的控制器方法和定制方法中删除访问控制代码。var t TokenAccess var r RoleAccess var a AccountAccess var as AccountStatusAccess var h HoldAccess var ad AdminAccess var trx TransactionAccess var tc TokenConversionAccess var auth AuthAccess auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"} trx.DeleteHistoricalTransactions = []string{"Admin"} ad.AddAdmin = []string{"Admin"} ad.RemoveAdmin = []string{"Admin"} ad.GetAllAdmins = []string{"Admin", "OrgAdmin"} ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"} ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"} t.Save = []string{"Admin"} t.GetAllTokens = []string{"Admin", "OrgAdmin"} t.Update = []string{"Admin"} t.GetTokenDecimals = []string{"Admin", "OrgAdmin"} t.GetTokensByName = []string{"Admin", "OrgAdmin"} t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"} t.GetNetTokens = []string{"Admin", "OrgAdmin"} t.Get = []string{"Admin", "OrgAdmin"} t.GetTokenHistory = []string{"Admin", "OrgAdmin"} a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"} a.GetAllAccounts = []string{"Admin"} a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"} a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.History = []string{"Admin", "AccountOwner"} a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"} a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"} a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"} as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetAccountsByRole = []string{"Admin"} r.GetUsersByRole = []string{"Admin"} r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"} tc.InitializeExchangePoolUser = []string{"Admin"} tc.AddConversionRate = []string{"Admin"} tc.UpdateConversionRate = []string{"Admin"} tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.TokenConversion = []string{"Admin", "AnyAccountOwner"} tc.GetExchangePoolUser = []string{"Admin"}
-
AddOrgAdmin
- 此方法将用户添加为组织的
Org Admin
。 -
RemoveOrgAdmin
- 此方法将用户删除为组织的
Org Admin
。 -
GetOrgAdmins
- 此方法返回属于组织
Org Admin
的所有用户的列表。
-
AddAdmin
- 此方法将用户添加为令牌链代码的
Token Admin
。 -
RemoveAdmin
- 此方法将用户删除为令牌链代码的
Token Admin
。 -
IsUserTokenAdmin
- 如果函数的调用方为
Token Admin
,则此方法返回布尔值true
。否则,该方法将返回false
。 -
GetAllAdmins
- 此方法返回作为令牌链代码的
Token Admin
的所有用户的列表。 -
GetAllAdminUsers
- 此方法返回作为令牌链代码的
Token Admin
的所有用户的列表。 -
CheckAuthorization
- 使用此方法可将访问控制添加到链代码中。许多自动生成的令牌方法都使用访问控制。SDK 接收器与具有访问控制的方法之间的映射在
oChainUtil.go
文件中进行了介绍。要使用您自己的访问控制或禁用访问控制,请从自动生成的控制器方法和定制方法中删除访问控制代码。var t TokenAccess var r RoleAccess var a AccountAccess var as AccountStatusAccess var h HoldAccess var ad AdminAccess var trx TransactionAccess var tc TokenConversionAccess var auth AuthAccess auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"} trx.DeleteHistoricalTransactions = []string{"Admin"} ad.AddAdmin = []string{"Admin"} ad.RemoveAdmin = []string{"Admin"} ad.GetAllAdmins = []string{"Admin", "OrgAdmin"} ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"} ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"} t.Save = []string{"Admin"} t.GetAllTokens = []string{"Admin", "OrgAdmin"} t.Update = []string{"Admin"} t.GetTokenDecimals = []string{"Admin", "OrgAdmin"} t.GetTokensByName = []string{"Admin", "OrgAdmin"} t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"} t.GetNetTokens = []string{"Admin", "OrgAdmin"} t.Get = []string{"Admin", "OrgAdmin"} t.GetTokenHistory = []string{"Admin", "OrgAdmin"} a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"} a.GetAllAccounts = []string{"Admin"} a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"} a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.History = []string{"Admin", "AccountOwner"} a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"} a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"} a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"} as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetAccountsByRole = []string{"Admin"} r.GetUsersByRole = []string{"Admin"} r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"} tc.InitializeExchangePoolUser = []string{"Admin"} tc.AddConversionRate = []string{"Admin"} tc.UpdateConversionRate = []string{"Admin"} tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.TokenConversion = []string{"Admin", "AnyAccountOwner"} tc.GetExchangePoolUser = []string{"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
- 如果某个令牌对象存在于状态数据库中,则此方法返回该对象。此方法只能由令牌链代码的
Token Admin
调用。 -
History
- 此方法返回指定标记 ID 的标记历史记录。
-
GetAllTokens
- 此方法返回保存在状态数据库中的所有令牌资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
GetTokensByName
- 此方法返回具有指定名称的所有标记资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
IsTokenType
- 此方法测试指定的标记 ID 是否存在标记资产。
-
GetByRange
- 此方法在内部调用网状结构网络
getStateByRange
方法。即使从分类账中返回具有给定 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
调用。 -
AssociateToken
- 此方法将可变令牌与账户关联。此方法只能由链代码的
Token Admin
调用。 -
GetAccountWithStatus
- 此方法返回指定帐户的帐户详细信息,包括帐户状态。
-
GetAccount
- 此方法返回指定帐户的帐户详细信息。
-
GetAccountHistory
- 此方法返回指定帐户的帐户历史记录详细信息数组。
-
GetAccountOnHoldBalance
- 此方法返回指定账户的暂挂余额。
-
GetAllAccounts
- 此方法返回所有帐户的列表。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
GetUserByAccountId
- 此方法返回指定帐户的用户详细信息。
-
GetAccountBalance
- 此方法返回指定帐户的帐户余额。
-
GetAllOrgAccounts
- 此方法返回属于指定组织的所有令牌帐户的列表。
角色管理的方法
-
AddRoleMember
- 此方法将角色添加到指定的用户和令牌。
-
RemoveRoleMember
- 此方法从指定用户和令牌中删除角色。
-
GetAccountsByRole
- 此方法返回指定角色和令牌的所有帐户的列表。
-
GetUsersByRole
- 此方法返回指定角色和令牌的所有用户的列表。
-
IsInRole
- 此方法指示用户和令牌是否具有指定的角色。
-
GetOrgAccountsByRole
- 此方法返回有关在指定组织中具有指定角色的所有帐户的信息。
-
GetOrgUsersByRole
- 此方法返回有关在指定组织中具有指定角色的所有用户的信息。
-
RoleCheck
- 此方法检查提供的帐户 ID 是否是任何角色的成员。
事务处理历史记录管理的方法
-
GetAccountTransactionHistory
- 此方法返回指定账户的事务处理历史记录详细信息数组。
-
GetAccountTransactionHistoryWithFilters
- 此方法返回指定事务处理的事务处理历史记录详细信息数组。仅当连接到远程 Oracle Blockchain Platform 网络时,才能调用此方法。
-
GetSubTransactionsById
- 此方法返回指定事务处理的事务处理历史记录详细信息数组。
-
GetSubTransactionsByIdWithFilters
- 此方法返回指定事务处理的事务处理历史记录详细信息数组。
-
GetTransactionById
- 此方法返回
Transaction
资产的历史记录。 -
DeleteHistoricalTransactions
- 此方法从状态数据库中删除较早的事务处理。
令牌行为管理方法 - 可铸造行为
-
Mint
- 此方法用于生成标记,然后这些标记由该方法的调用方拥有。调用方必须具有帐户和 minter 角色。可铸造的令牌数量受规范文件中
mintable
行为的max_mint_quantity
属性的限制。如果未指定max_mint_quantity
属性,则可以铸造无限数量的标记。数量必须在规范文件中divisible
行为的decimal
参数指定的小数值内。此方法只能由具有 minter 角色的帐户的AccountOwner
调用。 -
GetTotalMintedTokens
- 此方法返回铸造的令牌总数。
-
GetNetTokens
- 此方法返回系统中可用于指定令牌的令牌的净数量。净令牌是指令牌被烧毁后剩余的令牌数量。在方程式中:净代币 = 总铸币代币 - 总烧毁代币。如果未刻录任何令牌,则净令牌数等于铸造的令牌总数。
-
GetMaxMintQuantity
- 此方法返回令牌的最大可铸件数量。如果未指定
max_mint_quantity
行为,则默认值为 0,这允许铸造任意数量的令牌。
令牌行为管理的方法 - 可转移行为
-
Transfer
- 此方法将令牌从调用方转移到指定的帐户。该方法的调用方必须具有帐户。数量必须在规范文件中
divisible
行为的decimal
参数指定的小数值内。此方法只能由帐户的AccountOwner
调用。 -
BulkTransfer
- 此方法将令牌从调用方帐户批量传输到
flow
对象中指定的帐户。此方法的调用方必须已创建帐户。
令牌行为管理的方法 - 可暂挂行为
-
Hold
- 此方法代表具有
to_account_id
帐户的令牌的所有者创建暂挂。指定公证账户,该账户负责完成或释放暂挂。创建暂挂时,付款人的指定标记余额将被暂挂。在暂挂完成或释放之前,无法转移暂挂余额。此方法的调用方必须已创建帐户。 -
ExecuteHold
- 此方法完成对令牌的暂挂,将以前暂挂的指定数量的令牌转移给接收者。如果
quantity
值小于实际暂挂值,则剩余金额将再次可供令牌的原始所有者使用。此方法只能由具有notary
角色的AccountOwner
ID 调用。 -
ReleaseHold
- 此方法释放暂挂令牌。传输未完成,所有保留的令牌将再次提供给原始所有者。此方法可以由具有
notary
角色的Account Owner
ID 在指定时间限制内调用,也可以由付款人、收款人或公证人在指定时间限制之后调用。 -
GetOnHoldIds
- 此方法返回指定用户和令牌的所有持有 ID 的列表。
-
GetOnHoldDetailsWithOperationID
- 此方法返回指定操作 ID 和令牌的暂挂事务处理详细信息。
-
GetOnHoldBalanceWithOperationID
- 此方法返回指定操作 ID 和标记的暂挂余额。
令牌行为管理的方法 - 可燃行为