ERC-1155 的鷹架式 Go Token 專案
Blockchain App Builder 會從您的權杖規格檔案進行輸入,並產生功能完整的鷹架式鏈碼專案。
專案會自動產生記號週期類別和函數,包括 CRUD 和非 CRUD 方法。系統會自動支援引數驗證、封送處理 (Marshal) / 解除封送處理 (unmarshal) 以及透明保存功能。
如需鷹架專案的相關資訊,以及與記號無關的方法,請參閱 Scaffolded Go Chaincode Project 。
Model
在 OchainModel
類別中擷取「通透保存功能 (Transparent Persistence Capability)」或簡化的 ORM。下列模型顯示整個不可行記號。
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。如果未定義較小的角色,任何使用者都可以使用此方法來建立 (提示) 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
- 這個方法會傳回經過 minted 記號減去燒錄記號數目的總數。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可行的記號。鏈碼的
Token Admin
只能呼叫此方法。 -
GetTokensByName
- 此方法會傳回指定記號名稱的所有記號資產。此方法使用 Berkeley DB SQL 豐富查詢,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。鏈碼的
Token Admin
只能呼叫此方法。 -
GetTokenDecimal
- 此方法會傳回指定記號的小數位數。鏈碼的
Token Admin
只能呼叫此方法。
帳戶管理方法
-
CreateAccount
- 此方法會為指定的使用者和關聯的記號帳戶建立好玩或不可行記號的帳戶。必須為任何時候會有權杖的任何使用者建立帳戶。使用者帳戶會追蹤使用者擁有的 NFT 帳戶和有趣的權杖帳戶。使用者必須在網路中擁有帳戶,才能完成權杖相關作業。鏈碼的
Token Admin
只能呼叫此方法。使用者帳戶具有唯一 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
- 此方法會在批次作業中建立 (提示) 多重記號。此方法只會建立有趣的記號或小數的不可行記號。
對於有趣的記號,如果在規格檔案中定義了較小的角色,則具有較小角色的任何使用者都可以呼叫此方法。如果不是,任何使用者都可以使用此方法來提示記號。如果在建立或更新記號時指定了該特性,您就不能超過記號的
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
- 此方法會建立記號。每個定義的記號都有自己的建立方法。對於非功能權杖,如果是在規格檔案中定義較小的角色,則具有較小角色的任何使用者都可以呼叫此方法來建立 NFT。否則,任何使用者都可以使用此方法來建立 (提示) 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
- 這個方法會傳回經過 minted 記號減去燒錄記號數目的總數。變數替代字是由變數替代字 ID 指定。記號名稱指定了不可行的記號。
-
GetTokensByName
- 此方法會傳回指定記號名稱的所有記號資產。此方法使用 Berkeley DB SQL 豐富查詢,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
-
GetDecimals
- 此方法會傳回指定記號的小數位數。如果記號未指定可分割行為,則會傳回零小數位數的預設值。
帳戶管理方法
-
CreateAccount
- 此方法會為指定的使用者和關聯的記號帳戶建立好玩或不可行記號的帳戶。必須為任何時候會有權杖的任何使用者建立帳戶。使用者帳戶會追蹤使用者擁有的 NFT 帳戶和有趣的權杖帳戶。使用者必須在網路中擁有帳戶,才能完成權杖相關作業。鏈碼的
Token Admin
只能呼叫此方法。使用者帳戶具有唯一 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
- 此方法會在批次作業中建立 (提示) 多重記號。此方法只會建立有趣的記號或小數的不可行記號。
對於有趣的記號,如果在規格檔案中定義了較小的角色,則具有較小角色的任何使用者都可以呼叫此方法。如果不是,任何使用者都可以使用此方法來提示記號。如果在建立或更新記號時指定了該特性,您就不能超過記號的
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 (整數或分數) 之間交換。只有帳戶擁有者才能呼叫此方法。
記號行為管理方法 - 可燒錄行為