ERC-1155 的脚手架 Go 令牌项目
Blockchain App Builder 从令牌规范文件中获取输入,并生成一个功能齐全的脚手架链代码项目。
项目自动生成令牌生命周期类和函数,包括 CRUD 和非 CRUD 方法。自动支持参数验证、编集/编集和透明持久性功能。
有关脚手架项目以及与令牌无关的方法的信息,请参见 Scaffolded Go Chaincode Project 。
型号
透明持久性功能或简化的 ORM 在 OchainModel
类中捕获。以下模型显示了整个不可替换的标记。
package model
type ArtCollection struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"artcollection"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"whole" validate:"regexp=^whole$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
Behaviors []string `json:"Behaviors" final:"[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Owner string `json:"Owner,omitempty" validate:"string"`
CreatedBy string `json:"CreatedBy,omitempty" validate:"string"`
TransferredBy string `json:"TransferredBy,omitempty" validate:"string"`
CreationDate string `json:"CreationDate,omitempty" validate:"string"`
TransferredDate string `json:"TransferredDate,omitempty" validate:"string"`
IsBurned bool `json:"IsBurned" validate:"bool"`
BurnedBy string `json:"BurnedBy,omitempty" validate:"string"`
BurnedDate string `json:"BurnedDate,omitempty" validate:"string"`
TokenUri string `json:"TokenUri" mandatory:"true" validate:"string,max=2000"`
TokenMetadata ArtCollectionMetadata `json:"TokenMetadata"`
Price int `json:"Price" validate:"int"`
On_sale_flag bool `json:"On_sale_flag" validate:"bool"`
}
type ArtCollectionMetadata struct {
Painting_name string `json:"Painting_name" validate:"string"`
Description string `json:"Description" validate:"string"`
Image string `json:"Image" validate:"string"`
Painter_name string `json:"Painter_name" validate:"string"`
}
type Loyalty struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"loyalty"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"fungible" validate:"regexp=^fungible$"`
TokenUnit string `json:"TokenUnit" final:"fractional" validate:"regexp=^fractional$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":10000}"`
Divisible map[string]interface{} `json:"Divisible" final:"{\"Decimal\":2}"`
Behaviors []string `json:"Behaviors" final:"[\"divisible\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Currency_name string `json:"Currency_name" validate:"string"`
Token_to_currency_ratio int `json:"Token_to_currency_ratio" validate:"int"`
Metadata interface{} `json:"Metadata,omitempty"`
}
以下模型显示一个小数非可替换标记。type RealEstateProperty struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"realestateproperty"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"fractional" validate:"regexp=^fractional$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":0}"`
Behaviors []string `json:"Behaviors" final:"[\"divisible\",\"mintable\",\"transferable\",\"roles\"]"`
Divisible map[string]interface{} `json:"Divisible" final:"{\"Decimal\":0}"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
CreatedBy string `json:"CreatedBy,omitempty" validate:"string"`
CreationDate string `json:"CreationDate,omitempty" validate:"string"`
IsBurned bool `json:"IsBurned" validate:"bool"`
TokenUri string `json:"TokenUri" mandatory:"true" validate:"string,max=2000"`
Quantity float64 `json:"Quantity,omitempty"`
TokenMetadata RealEstatePropertyMetadata `json:"TokenMetadata"`
PropertySellingPrice int `json:"PropertySellingPrice" validate:"int"`
PropertyRentingPrice int `json:"PropertyRentingPrice" validate:"int"`
}
type RealEstatePropertyMetadata struct {
PropertyType string `json:"PropertyType" validate:"string"`
PropertyName string `json:"PropertyName" validate:"string"`
PropertyAddress string `json:"PropertyAddress" validate:"string"`
PropertyImage string `json:"PropertyImage" validate:"string"`
}
主管
只有一个主控制器。
type Controller struct {
Ctx trxcontext.TrxContext
}
您可以创建任意数量的类、函数或文件,但只能调用在主控制器类中定义的方法。其他方法处于隐藏状态。
您可以使用令牌 SDK 方法为业务应用程序编写定制方法。
自动生成的标记方法
Blockchain App Builder 自动生成支持令牌和令牌生命周期的方法。您可以使用这些方法来初始化令牌、管理角色和账户,以及完成其他令牌生命周期任务,而无需任何额外的编码。控制器方法必须是 public 才能调用。公共方法名称以大写字符开头。以小写字符开头的方法名称是专用的。
访问控制管理方法
-
IsTokenAdmin
- 如果函数的调用方为
Token Admin
,则此方法返回布尔值true
,否则返回false
。此方法只能由链代码的Token Admin
调用。 -
AddTokenAdmin
- 此方法将用户添加为链代码的
Token Admin
。此方法只能由链代码的Token Admin
调用。 -
RemoveTokenAdmin
- 此方法将用户删除为链代码的
Token Admin
。此方法只能由链代码的Token Admin
调用。您无法将自己删除为Token Admin
。 -
GetAllTokenAdmins
- 此方法返回链代码
Token Admin
的所有用户的列表。此方法只能由链代码的Token Admin
调用。
标记配置管理方法
-
Init
- 实例化链代码时会调用此方法。每个
Token Admin
都由adminList
参数中的userId
和orgId
信息标识。userId
是实例所有者或登录到实例的用户的用户名或电子邮件 ID。orgId
是当前网络组织中用户的成员服务提供者 (member service provider,MSP) ID。首次部署链代码时,adminList
参数是必需的。如果要升级链代码,请传递空列表 ([]
)。如果您是最初部署链代码的用户,则在升级链代码时,还可以在adminList
参数中指定新管理员。升级期间将忽略adminList
参数中的任何其他信息。 -
Create<Token Name>Token
- 此方法创建令牌。定义的每个标记都有自己的 create 方法。对于可替换标记,此方法只能由链代码的
Token Admin
调用。对于不可替换的令牌,如果在规范文件中定义了 minter 角色,则具有 minter 角色的任何用户都可以调用此方法来创建 NFT。如果未定义 minter 角色,则任何用户都可以使用此方法创建 (mint) NFT。调用此方法的用户将成为 NFT 的所有者。 -
Update<Token Name>Token
- 此方法更新令牌。定义的每个标记都有自己的更新方法。无法更新不可替换标记的标记元数据或标记 URI。对于可替换标记,此方法只能由链代码的
Token Admin
调用。对于不可替换的令牌,此方法只能由令牌所有者调用。 -
GetTokenHistory
- 此方法返回指定令牌 ID 的历史记录。任何人都可以调用此方法。
-
GetAllTokens
- 此方法返回保存在状态数据库中的所有标记资产。此方法只能由链代码的
Token Admin
调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。 -
GetTokenById
- 如果标记存在于状态数据库中,则此方法将返回标记对象。对于小数 NFT,还会返回所有者列表。此方法只能由链代码的
Token Admin
或令牌所有者调用。 -
GetAllTokensByUser
- 此方法返回指定用户拥有的所有令牌资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。此方法只能由链代码的
Token Admin
或账户所有者调用。 -
OwnerOf
- 此方法返回指定令牌 ID 所有者的账户 ID、组织 ID 和用户 ID。任何人都可以调用此方法。
-
URI
- 此方法返回指定令牌的 URI。任何人都可以调用此方法。
-
Name
- 此方法返回令牌类的名称。任何人都可以调用此方法。
-
TotalSupply
- 此方法返回铸造标记的总数。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。此方法只能由链代码的
Token Admin
调用。 -
TotalNetSupply
- 此方法返回铸造标记的总数减去刻录的标记数。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。此方法只能由链代码的
Token Admin
调用。 -
GetTokensByName
- 此方法返回指定令牌名称的所有令牌资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。此方法只能由链代码的
Token Admin
调用。 -
GetTokenDecimal
- 此方法返回指定标记的小数位数。此方法只能由链代码的
Token Admin
调用。
帐户管理方法
-
CreateAccount
- 此方法为指定用户和关联的令牌账户创建可替换或不可替换令牌的账户。必须为在任何时候都具有令牌的任何用户创建账户。用户帐户跟踪 NFT 帐户和用户具有的可替换令牌帐户。用户必须在网络中有账户才能完成与令牌相关的操作。此方法只能由链代码的
Token Admin
调用。用户帐户具有唯一 ID,该 ID 由
orgId
参数和userId
参数的 SHA-256 散列组成。用户可以具有多个具有唯一账户 ID 的可互换令牌账户。可替换标记帐户 ID 由
orgId
参数的 SHA-256 散列、userId
参数、由波浪号 (~
) 分隔的常量字符串ft
以及表示由波浪号 (~
) 分隔的可替换帐户的索引的计数器编号构成。一个用户只能有一个不可替换的令牌账户。不可替代的令牌帐户 ID 是唯一的,由
orgId
参数的 SHA-256 散列、userId
参数以及用波浪号 (~
) 分隔的常量字符串nft
构成。用户拥有的所有非同质代币(无论是整体代币还是小数代币)都链接到此账户。用户帐户 ID 以
ouaccount~
开头。标记账户 ID 以oaccount~
开头。 -
CreateUserAccount
- 此方法为指定的用户创建帐户。必须为在任何时候都具有令牌的任何用户创建账户。用户帐户跟踪 NFT 帐户和用户具有的可替换令牌帐户。用户必须在网络中有账户才能完成与令牌相关的操作。
帐户 ID 是
orgId
参数和userId
参数的 SHA-256 散列。此方法只能由链代码的Token Admin
调用。 -
CreateTokenAccount
- 此方法创建可替换或不可替换的令牌账户以与用户账户关联。
用户可以具有多个具有唯一账户 ID 的可互换令牌账户。可替换标记帐户 ID 由
orgId
参数的 SHA-256 散列、userId
参数、由波浪号 (~
) 分隔的常量字符串ft
以及表示由波浪号 (~
) 分隔的可替换帐户的索引的计数器编号构成。一个用户只能有一个不可替换的令牌账户。不可替代的令牌帐户 ID 是唯一的,由
orgId
参数的 SHA-256 散列、userId
参数以及用波浪号 (~
) 分隔的常量字符串nft
构成。用户拥有的所有非同质代币(无论是整体代币还是小数代币)都链接到此账户。此方法只能由链代码的
Token Admin
调用。 -
AssociateFungibleTokenAccount
- 此方法将用户的可互换令牌帐户与特定可互换令牌关联。
此方法只能由链代码的
Token Admin
调用。 -
GetAccountHistory
- 此方法返回指定令牌账户的历史记录。这是异步方法。此方法只能由链代码的
Token Admin
或账户所有者调用。 -
GetAccount
- 此方法返回指定用户的令牌账户详细信息。此方法只能由链代码的
Token Admin
或帐户的Account Owner
调用。 -
GetAllAccounts
- 此方法返回所有用户帐户的详细信息。此方法只能由链代码的
Token Admin
调用。 -
GetAccountDetailsByUser
- 此方法返回指定用户的帐户概要以及与用户关联的可替换和不可替换标记的详细信息。此方法只能由链代码的
Token Admin
或帐户的Account Owner
调用。 -
GetUserByAccountId
- 此方法返回指定账户 ID 的用户详细信息。所有用户都可以调用此方法。
角色管理方法
-
AddRole
- 此方法将角色添加到指定的用户和令牌。此方法只能由链代码的
Token Admin
调用。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。指定的用户必须具有与可互换令牌关联的令牌账户,或者具有 NFT 角色的非可替代令牌账户。指定的角色必须存在于标记的规范文件中。 -
IsInRole
- 此方法返回布尔值以指示用户是否具有指定的角色。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。此方法只能由链代码的
Token Admin
或帐户的Account Owner
调用。指定的用户必须具有与可互换令牌关联的令牌账户,或者具有 NFT 角色的非可替代令牌账户。指定的角色必须存在于标记的规范文件中。 -
RemoveRole
- 此方法从指定用户和令牌中删除角色。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。此方法只能由链代码的
Token Admin
调用。指定的用户必须具有与可互换令牌关联的令牌账户,或者具有 NFT 角色的非可替代令牌账户。指定的角色必须存在于标记的规范文件中。 -
GetAccountsByRole
- 此方法返回指定角色和令牌的所有帐户 ID 的列表。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。此方法只能由链代码的
Token Admin
调用。 -
GetUsersByRole
- 此方法返回指定角色和令牌的所有用户的列表。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。此方法只能由链代码的
Token Admin
调用。
事务处理历史记录管理方法
-
GetAccountTransactionHistory
- 此方法返回账户事务处理历史记录。此方法只能由链代码的
Token Admin
或账户所有者调用。对于不可替代的令牌,只能在连接到远程 Oracle Blockchain Platform 网络时调用此方法。 -
GetTransactionById
- 此方法返回指定事务处理 ID 的事务处理详细信息。任何人都可以调用此方法。
-
DeleteHistoricalTransactions
- 此方法从状态数据库删除指定时间戳之前的事务处理。此方法只能由链代码的
Token Admin
调用。
令牌行为管理方法 - 最小行为
-
MintBatch
- 此方法在批处理操作中创建(铸造)多个标记。此方法仅创建可替换标记或小数非可替换标记。
对于可替换标记,如果在规范文件中定义了 minter 角色,则具有 minter 角色的任何用户都可以调用此方法。如果没有,任何用户都可以使用此方法来铸造标记。如果创建或更新令牌时指定了该属性,则不能超过该令牌的
max_mint_quantity
属性。对于不可替换的标记,如果在规范文件中定义了 minter 角色,则具有 minter 角色的任何用户都可以调用此方法。如果没有,任何用户都可以使用此方法来铸造标记。此外,调用方还必须是令牌的创建者。对于可以铸造的小数非同质代币数量没有上限。
不能使用此方法铸造整个不可替换的标记。
令牌行为管理方法 - 可转移行为
-
BatchTransferFrom
- 此方法完成批处理操作,将标记 ID 列表中指定的标记从一个用户转移到另一个用户。
对于 NFT,由于方法转移 NFT 的所有权,因此 NFT 的发件人必须拥有令牌。
对于小数 NFT,如果用户(包括令牌的创建者)转移他们拥有的所有股份,则他们将失去令牌的所有权。如果将令牌的任何份额传输给用户,该用户将自动成为小数 NFT 的所有者之一。
此方法不验证该方法的调用方是否为指定的发送方。所有用户都可以调用此方法。
-
SafeBatchTransferFrom
- 此方法完成批处理操作,将标记 ID 列表中指定的标记从一个用户转移到另一个用户。
对于 NFT,由于方法转移 NFT 的所有权,因此 NFT 的发件人必须拥有令牌。
对于小数 NFT,如果用户(包括令牌的创建者)转移他们拥有的所有股份,则他们将失去令牌的所有权。如果将令牌的任何份额传输给用户,该用户将自动成为小数 NFT 的所有者之一。
方法的调用方必须是指定的发送方。所有用户都可以调用此方法。
-
BalanceOfBatch
- 此方法完成获取令牌账户余额的批处理操作。帐户详细信息在组织 ID、用户 ID 和令牌 ID 的三个单独列表中指定。此方法只能由链代码的
Token Admin
或账户所有者调用。账户所有者只能查看他们拥有的账户的余额详细信息。 -
ExchangeToken
- 此方法在指定帐户之间交换令牌。此方法仅支持在 NFT 和可互换令牌或可互换令牌与 NFT 之间进行交换。此方法只能由账户所有者调用。
令牌行为管理方法 - 可燃行为
SDK 方法
访问控制管理方法
-
CheckAuthorization
- 使用此方法可将访问控制检查添加到操作。这是一个异步函数。大多数自动生成的方法包括访问控制。某些令牌方法只能由令牌的
ERC721Admin
或Account Owner
运行,对于具有多个帐户的用户,只能由MultipleAccountOwner
运行。CheckAuthorization
方法是erc721Auth
类的一部分,您可以通过Ctx
对象访问该类。访问控制映射在oChainUtil.go
文件中进行了介绍,如以下文本所示。可以通过编辑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 var erc721ad ERC721AdminAccess var erc721t ERC721TokenAccess var erc721r ERC721RoleAccess var erc721a ERC721AccountAccess var erc721as ERC721AccountStatusAccess var erc721trx ERC721TransactionAccess var erc1155ad ERC1155AdminAccess var erc1155t ERC1155TokenAccess var erc1155a ERC1155AccountAccess var erc1155as ERC1155AccountStatusAccess var erc1155trx ERC1155TransactionAccess var erc1155role ERC1155RoleAccess 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"} erc721ad.AddAdmin = []string{"Admin"} erc721ad.GetAllAdmins = []string{"Admin"} erc721ad.IsTokenAdmin = []string{"Admin"} erc721ad.RemoveAdmin = []string{"Admin"} erc721trx.DeleteHistoricalTransactions = []string{"Admin"} erc721t.Save = []string{"Admin"} erc721t.GetAllTokens = []string{"Admin"} erc721t.Update = []string{"Admin"} erc721t.GetTokensByName = []string{"Admin"} erc721t.AddRoleMember = []string{"Admin"} erc721t.RemoveRoleMember = []string{"Admin"} erc721t.IsInRole = []string{"Admin", "AccountOwner"} erc721t.Get = []string{"Admin", "TokenOwner"} erc721t.GetAllTokensByUser = []string{"Admin", "AccountOwner"} erc721t.TotalSupply = []string{"Admin"} erc721t.TotalNetSupply = []string{"Admin"} erc721t.History = []string{"Admin"} erc721a.CreateAccount = []string{"Admin"} erc721a.CreateUserAccount = []string{"Admin"} erc721a.CreateTokenAccount = []string{"Admin"} erc721a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"} erc721a.GetAllAccounts = []string{"Admin"} erc721a.History = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"} erc721a.GetAccountByUser = []string{"Admin", "MultipleAccountOwner"} erc721a.BalanceOf = []string{"Admin", "MultipleAccountOwner"} erc721as.Get = []string{"Admin", "AccountOwner"} erc721as.ActivateAccount = []string{"Admin"} erc721as.SuspendAccount = []string{"Admin"} erc721as.DeleteAccount = []string{"Admin"} erc721r.GetAccountsByRole = []string{"Admin"} erc721r.GetUsersByRole = []string{"Admin"} erc1155ad.AddAdmin = []string{"Admin"} erc1155ad.GetAllAdmins = []string{"Admin"} erc1155ad.IsUserTokenAdmin = []string{"Admin"} erc1155ad.RemoveAdmin = []string{"Admin"} erc1155t.AddRoleMember = []string{"Admin"} erc1155t.IsInRole = []string{"Admin"} erc1155t.GetAllTokens = []string{"Admin"} erc1155t.GetAllTokensByUser = []string{"Admin", "AccountOwner"} erc1155t.Get = []string{"Admin", "TokenOwner"} erc1155t.RemoveRoleMember = []string{"Admin"} erc1155t.TotalNetSupply = []string{"Admin"} erc1155t.TotalSupply = []string{"Admin"} erc1155t.GetTokenDecimal = []string{"Admin"} erc1155t.GetTokensByName = []string{"Admin"} erc1155t.GetTotalMintedTokens = []string{"Admin"} erc1155t.GetNetTokens = []string{"Admin"} erc1155t.Save = []string{"Admin"} erc1155t.Update = []string{"Admin"} erc1155trx.DeleteHistoricalTransactions = []string{"Admin"} erc1155role.GetAccountsByRole = []string{"Admin"} erc1155role.GetUsersByRole = []string{"Admin"} erc1155a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"} erc1155a.BalanceOfBatch = []string{"Admin"} erc1155a.CreateAccount = []string{"Admin"} erc1155a.CreateTokenAccount = []string{"Admin"} erc1155a.CreateUserAccount = []string{"Admin"} erc1155a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"} erc1155a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"} erc1155a.GetAccountsByUser = []string{"Admin", "AccountOwner"} erc1155a.GetAccount = []string{"Admin", "AccountOwner"} erc1155a.History = []string{"Admin", "AccountOwner"} erc1155a.GetAllAccounts = []string{"Admin"} erc1155a.ExchangeToken = []string{"AccountOwner"} erc1155a.GetAccountDetailsByUser = []string{"Admin", "AccountOwner"} erc1155as.Get = []string{"Admin", "AccountOwner"} erc1155as.ActivateAccount = []string{"Admin"} erc1155as.SuspendAccount = []string{"Admin"} erc1155as.DeleteAccount = []string{"Admin"} var accessMap TokenAccessControl accessMap.Token = t accessMap.Account = a accessMap.AccountStatus = as accessMap.Hold = h accessMap.Role = r accessMap.Admin = ad accessMap.Auth = auth accessMap.TokenConversion = tc accessMap.ERC721ADMIN = erc721ad accessMap.ERC721TOKEN = erc721t accessMap.ERC721ACCOUNT = erc721a accessMap.ERC721AccountStatus = erc721as accessMap.ERC721ROLE = erc721r accessMap.ERC721TRANSACTION = erc721trx accessMap.ERC1155Account = erc1155a accessMap.ERC1155AccountStatus = erc1155as accessMap.ERC1155Admin = erc1155ad accessMap.ERC1155Token = erc1155t accessMap.ERC1155Transaction = erc1155trx accessMap.ERC1155Role = erc1155role
-
IsUserTokenAdmin
- 如果指定的用户是
Token Admin
,则此方法返回布尔值true
,否则返回false
。该方法只能由令牌链代码的Token Admin
调用。 -
AddAdmin
- 此方法将用户添加为令牌链代码的
Token Admin
。该方法只能由令牌链代码的Token Admin
调用。 -
RemoveAdmin
- 此方法将用户删除为令牌链代码的
Token Admin
。该方法只能由令牌链代码的Token Admin
调用。您无法将自己删除为Token Admin
。 -
GetAllAdminUsers
- 此方法返回所有
Token Admin
用户的列表。
标记配置管理方法
-
Save
- 此方法创建令牌。定义的每个标记都有自己的 create 方法。对于不可替换的令牌,如果在规范文件中定义了 minter 角色,则具有 minter 角色的任何用户都可以调用此方法来创建 NFT。如果没有,任何用户都可以使用此方法创建 (mint) NFT。调用此方法的用户将成为 NFT 的所有者(整体或小数)。
-
Update
- 此方法更新令牌。无法更新不可替换标记的标记元数据或标记 URI。
-
History (Token)
- 此方法返回指定令牌 ID 的历史记录。
-
GetAllTokens
- 此方法返回保存在状态数据库中的所有标记资产。此方法只能由链代码的
Token Admin
调用。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。 -
Get (Token)
- 如果标记存在于状态数据库中,则此方法将返回标记对象。此方法只能由链代码的
Token Admin
或令牌所有者调用。对于小数 NFT,还会返回所有者列表。 -
GetAllTokensByUser
- 此方法返回指定用户拥有的所有令牌资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
OwnerOf
- 此方法返回指定令牌 ID 所有者的账户 ID、组织 ID 和用户 ID。
-
TokenURI
- 此方法返回指定令牌的 URI。任何人都可以调用此方法。
-
Name
- 此方法返回令牌类的名称。任何人都可以调用此方法。
-
TotalSupply
- 此方法返回铸造标记的总数。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。
-
TotalNetSupply
- 此方法返回铸造标记的总数减去刻录的标记数。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。
-
GetTokensByName
- 此方法返回指定令牌名称的所有令牌资产。此方法使用 Berkeley DB SQL 丰富的查询,并且只能在连接到远程 Oracle Blockchain Platform 网络时调用。
-
GetDecimals
- 此方法返回指定标记的小数位数。如果未为该标记指定可整除行为,则返回零个小数位的默认值。
帐户管理方法
-
CreateAccount
- 此方法为指定用户和关联的令牌账户创建可替换或不可替换令牌的账户。必须为在任何时候都具有令牌的任何用户创建账户。用户帐户跟踪 NFT 帐户和用户具有的可替换令牌帐户。用户必须在网络中有账户才能完成与令牌相关的操作。此方法只能由链代码的
Token Admin
调用。用户帐户具有唯一 ID,该 ID 由
orgId
参数和userId
参数的 SHA-256 散列组成。用户可以具有多个具有唯一账户 ID 的可互换令牌账户。可替换标记帐户 ID 由
orgId
参数的 SHA-256 散列、userId
参数、由波浪号 (~
) 分隔的常量字符串ft
以及表示由波浪号 (~
) 分隔的可替换帐户的索引的计数器编号构成。一个用户只能有一个不可替换的令牌账户。不可替代的令牌帐户 ID 是唯一的,由
orgId
参数的 SHA-256 散列、userId
参数以及用波浪号 (~
) 分隔的常量字符串nft
构成。用户拥有的所有非同质代币(无论是整体代币还是小数代币)都链接到此单个非同质代币账户。 -
CreateUserAccount
- 此方法为指定的用户创建帐户。必须为在任何时候都具有令牌的任何用户创建账户。用户帐户跟踪 NFT 帐户和用户具有的可替换令牌帐户。用户必须在网络中有账户才能完成与令牌相关的操作。
帐户 ID 是
orgId
参数和userId
参数的 SHA-256 散列。此方法只能由链代码的Token Admin
调用。 -
CreateTokenAccount
- 此方法创建可替换或不可替换的令牌账户以与用户账户关联。
用户可以具有多个具有唯一账户 ID 的可互换令牌账户。可替换标记帐户 ID 由
orgId
参数的 SHA-256 散列、userId
参数、由波浪号 (~
) 分隔的常量字符串ft
以及表示由波浪号 (~
) 分隔的可替换帐户的索引的计数器编号构成。一个用户只能有一个不可替换的令牌账户。不可替代的令牌帐户 ID 是唯一的,由
orgId
参数的 SHA-256 散列、userId
参数以及用波浪号 (~
) 分隔的常量字符串nft
构成。用户拥有的所有非同质代币(无论是整体代币还是小数代币)都链接到此单个非同质代币账户。此方法只能由链代码的
Token Admin
调用。 -
AssociateTokenToToken
- 此方法将用户的可互换令牌帐户与特定可互换令牌关联。
-
GetAccountHistory
- 此方法返回指定令牌账户的历史记录。
-
GetAccountWithStatus
- 此方法返回指定用户的令牌账户详细信息,包括账户状态。此方法只能由链代码的
Token Admin
或帐户的Account Owner
调用。 -
GetAccount
- 此方法返回指定用户的令牌账户详细信息。此方法只能由链代码的
Token Admin
或帐户的Account Owner
调用。 -
GetAllAccounts
- 此方法返回所有用户帐户的详细信息。
-
GetAccountDetailsByUser
- 此方法返回指定用户的帐户概要以及与用户关联的可替换和不可替换标记的详细信息。
-
GetUserByAccountId
- 此方法返回指定账户 ID 的用户详细信息。
角色管理方法
-
AddRoleMember
- 此方法将角色添加到指定的用户和令牌。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。
-
IsInRole
- 此方法返回布尔值以指示用户是否具有指定的角色。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。
-
RemoveRoleMember
- 此方法从指定用户和令牌中删除角色。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。
-
GetAccountsByRole
- 此方法返回指定角色和令牌的所有帐户 ID 的列表。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。
-
GetUsersByRole
- 此方法返回指定角色和令牌的所有用户的列表。可替换令牌由令牌 ID 指定。不可替代的令牌由令牌名称指定。
事务处理历史记录管理方法
-
GetAccountTransactionHistory
- 此方法返回账户事务处理历史记录。此方法只能由链代码的
Token Admin
或账户所有者调用。对于不可替代的令牌,只能在连接到远程 Oracle Blockchain Platform 网络时调用此方法。 -
GetTransactionById
- 此方法返回指定事务处理 ID 的事务处理详细信息。
-
DeleteHistoricalTransactions
- 此方法从状态数据库删除指定时间戳之前的事务处理。
令牌行为管理方法 - 最小行为
-
MintBatch
- 此方法在批处理操作中创建(铸造)多个标记。此方法仅创建可替换标记或小数非可替换标记。
对于可替换标记,如果在规范文件中定义了 minter 角色,则具有 minter 角色的任何用户都可以调用此方法。如果没有,任何用户都可以使用此方法来铸造标记。如果创建或更新令牌时指定了该属性,则不能超过该令牌的
max_mint_quantity
属性。对于不可替换的标记,如果在规范文件中定义了 minter 角色,则具有 minter 角色的任何用户都可以调用此方法。如果没有,任何用户都可以使用此方法来铸造标记。此外,调用方还必须是令牌的创建者。对于可以铸造的小数非同质代币数量没有上限。
不能使用此方法铸造整个不可替换的标记。
令牌行为管理方法 - 可转移行为
-
BatchTransferFrom
- 此方法完成批处理操作,将标记 ID 列表中指定的标记从一个用户转移到另一个用户。
对于 NFT,由于方法转移 NFT 的所有权,因此 NFT 的发件人必须拥有令牌。
对于小数 NFT,如果用户(包括令牌的创建者)转移他们拥有的所有股份,则他们将失去令牌的所有权。如果将令牌的任何份额传输给用户,该用户将自动成为小数 NFT 的所有者之一。
此方法不验证该方法的调用方是否为指定的发送方。
-
SafeBatchTransferFrom
- 此方法完成批处理操作,将标记 ID 列表中指定的标记从一个用户转移到另一个用户。
对于 NFT,由于方法转移 NFT 的所有权,因此 NFT 的发件人必须拥有令牌。
对于小数 NFT,如果用户(包括令牌的创建者)转移他们拥有的所有股份,则他们将失去令牌的所有权。如果将令牌的任何份额传输给用户,该用户将自动成为小数 NFT 的所有者之一。
方法的调用方必须是指定的发送方。
-
BalanceOfBatch
- 此方法完成获取令牌账户余额的批处理操作。帐户详细信息在组织 ID、用户 ID 和令牌 ID 的三个单独列表中指定。此方法只能由链代码的
Token Admin
或账户所有者调用。账户所有者只能查看他们拥有的账户的余额详细信息。 -
ExchangeToken
- 此方法在指定帐户之间交换令牌。此方法仅支持在 NFT(整体或小数)与可替换令牌或可替换令牌与 NFT(整体或小数)之间进行交换。此方法只能由账户所有者调用。
令牌行为管理方法 - 可燃行为