ERC-1155 的鷹架式 Go Token 專案
Blockchain App Builder 會從您的權杖規格檔案進行輸入,並產生功能完整的鷹架式鏈碼專案。
專案會自動產生權杖生命週期類別和函數,包括 CRUD 和非 CRUD 方法。自動支援引數、封送處理 (Marshalling/unmarshalling) 及透明保存功能。
如需鷹架式專案和方法與記號無關的資訊,請參閱 Scaffolded Go Chaincode Project 。
Model
「通透持續性功能」或簡化的 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 會自動產生支援權杖和權杖生命週期的方法。您可以使用這些方法來初始化記號、管理角色和帳戶,以及完成其他記號生命週期工作,而無需進行任何其他編碼。控制器方法必須是公用才能呼叫。公用方法名稱開頭為大寫字元。開頭為小寫字元的方法名稱是私密的。
存取控制管理的方法
-
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
是目前網路組織中使用者的成員身分服務提供者 (MSP) ID。第一次部署鏈碼時,必須提供adminList
參數。如果您要升級鏈碼,請傳送空白清單 ([]
)。如果您是初始部署鏈碼的使用者,您也可以在升級鏈碼時,在adminList
參數中指定新的管理員。升級時會忽略adminList
參數中的任何其他資訊。 -
Create<Token Name>Token
- 此方法會建立記號。每個定義的記號都有自己的建立方法。對於有趣的記號,此方法只能由鏈碼的
Token Admin
呼叫。對於非有趣的記號,如果在規格檔案中定義了 minter 角色,則具有 minter 角色的任何使用者都可以呼叫此方法來建立 NFT。若未定義 minter 角色,則任何使用者都可使用此方法來建立 (mint) NFT。呼叫此方法的使用者會成為 NFT 的擁有者。 -
Update<Token Name>Token
- 此方法會更新記號。每個定義的記號都有自己的更新方法。您無法更新變數替代字的變數替代字中繼資料或變數替代字 URI。對於有趣的記號,此方法只能由鏈碼的
Token Admin
呼叫。對於非可行的記號,此方法只能由記號擁有者呼叫。 -
GetTokenHistory
- 此方法會傳回指定記號 ID 的歷史記錄。任何人都可以呼叫這個方法。
-
GetAllTokens
- 此方法會傳回儲存在狀態資料庫中的所有記號資產。此方法只能由鏈碼的
Token Admin
呼叫。此方法使用 Berkeley DB SQL Rich Query,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。 -
GetTokenById
- 如果憑證存在於狀態資料庫中,則此方法會傳回記號物件。如果是分數 NFT,也會傳回擁有者清單。只有鏈碼或記號擁有者的
Token Admin
才能呼叫此方法。 -
GetAllTokensByUser
- 此方法會傳回指定使用者擁有的所有權杖資產。此方法使用 Berkeley DB SQL Rich Query,且只能在連線至遠端 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 Rich Query,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。此方法只能由鏈碼的
Token Admin
呼叫。 -
GetTokenDecimal
- 此方法會傳回指定記號的小數位數。此方法只能由鏈碼的
Token Admin
呼叫。
帳戶管理方法
-
CreateAccount
- 此方法會為指定的使用者建立帳戶,並為有趣或不可行的記號建立關聯的記號帳戶。必須為任何需要記號的使用者建立帳戶。使用者帳戶會追蹤使用者擁有的 NFT 帳戶和有趣的記號帳戶。使用者必須擁有網路中的帳號,才能完成記號相關的作業。此方法只能由鏈碼的
Token Admin
呼叫。使用者帳戶具有唯一 ID,由
orgId
參數的 SHA-256 雜湊和userId
參數組成。使用者可以有多個具有唯一帳戶 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
- 此方法會在批次作業中建立 (mints) 多個記號。此方法只會建立有趣的記號或分數非有趣的記號。
對於有趣的記號,如果在規格檔案中定義了 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
- 此方法會建立記號。每個定義的記號都有自己的建立方法。對於非有趣的記號,如果在規格檔案中定義了 minter 角色,則具有 minter 角色的任何使用者都可以呼叫此方法來建立 NFT。如果不是,任何使用者都可以使用此方法來建立 (mint) NFT。呼叫此方法的使用者會成為 NFT 的擁有者 (全部或小數)。
-
Update
- 此方法會更新記號。您無法更新變數替代字的變數替代字中繼資料或變數替代字 URI。
-
History (Token)
- 此方法會傳回指定記號 ID 的歷史記錄。
-
GetAllTokens
- 此方法會傳回儲存在狀態資料庫中的所有記號資產。此方法只能由鏈碼的
Token Admin
呼叫。此方法使用 Berkeley DB SQL Rich Query,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。 -
Get (Token)
- 如果憑證存在於狀態資料庫中,則此方法會傳回記號物件。只有鏈碼或記號擁有者的
Token Admin
才能呼叫此方法。如果是分數 NFT,也會傳回擁有者清單。 -
GetAllTokensByUser
- 此方法會傳回指定使用者擁有的所有權杖資產。此方法使用 Berkeley DB SQL Rich Query,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
-
OwnerOf
- 此方法會傳回指定記號 ID 之擁有者的帳戶 ID、組織 ID 和使用者 ID。
-
TokenURI
- 此方法會傳回指定記號的 URI。任何人都可以呼叫這個方法。
-
Name
- 此方法會傳回記號類別的名稱。任何人都可以呼叫這個方法。
-
TotalSupply
- 此方法會傳回提示的記號總數。有趣的記號是由記號 ID 指定。記號名稱會指定不可使用的記號。
-
TotalNetSupply
- 此方法會傳回有提示記號的總數減去已燒錄記號的數目。有趣的記號是由記號 ID 指定。記號名稱會指定不可使用的記號。
-
GetTokensByName
- 此方法會傳回指定權杖名稱的所有權杖資產。此方法使用 Berkeley DB SQL Rich Query,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
-
GetDecimals
- 此方法會傳回指定記號的小數位數。如果未指定變數替代字的可分割行為,則會傳回零小數位數的預設值。
帳戶管理方法
-
CreateAccount
- 此方法會為指定的使用者建立帳戶,並為有趣或不可行的記號建立關聯的記號帳戶。必須為任何需要記號的使用者建立帳戶。使用者帳戶會追蹤使用者擁有的 NFT 帳戶和有趣的記號帳戶。使用者必須擁有網路中的帳號,才能完成記號相關的作業。此方法只能由鏈碼的
Token Admin
呼叫。使用者帳戶具有唯一 ID,由
orgId
參數的 SHA-256 雜湊和userId
參數組成。使用者可以有多個具有唯一帳戶 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
- 此方法會在批次作業中建立 (mints) 多個記號。此方法只會建立有趣的記號或分數非有趣的記號。
對於有趣的記號,如果在規格檔案中定義了 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 (完整或小數) 之間交換。只有帳戶擁有者才能呼叫此方法。
權杖行為管理方法 - 可燒錄行為