ERC-1155 的鷹架式 Go Token 專案
Blockchain App Builder 會從您的權杖規格檔案進行輸入,並產生功能完整的鷹架式鏈碼專案。
專案會自動產生權杖生命週期類別和函數,包括 CRUD 和非 CRUD 方法。系統會自動支援引數驗證、封送處理 (Marshall) / 取消封送處理 (unmarshal) 以及通透保存功能。
如需結構化專案與與變數替代字無關的方法相關資訊,請參閱 Scaffolded Go Chaincode Project 。
Model
「通透持續性功能 (Transparent Persistence Capability)」或簡化的 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
}
您可以建立不限數目的類別、函數或檔案,但只能呼叫在 main Controller 類別中定義的方法。其他方法則會隱藏。
您可以使用記號 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
是目前網路組織中使用者的成員服務提供者 (MSP) ID。第一次部署鏈碼時,必須輸入adminList
參數。如果您要升級鏈碼,請傳送空白清單 ([]
)。如果您是初始部署鏈碼的使用者,您也可以在升級鏈碼時,在adminList
參數中指定新的管理員。升級時會忽略adminList
參數中的任何其他資訊。 -
Create<Token Name>Token
- 此方法會建立記號。每個定義的記號都有自己的建立方法。對於有趣的記號,只能由鏈碼的
Token Admin
呼叫此方法。對於無法執行的記號,如果規格檔案中已定義了小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法來建立 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,由
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) 多個記號。此方法只會建立有趣的記號或小數的不可行記號。
對於有趣的記號,如果規格檔案中定義了探勘器角色,則任何具有探勘器角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。如果在建立或更新記號時指定了該特性,您就不能超過記號的
max_mint_quantity
特性。對於無法執行的記號,如果在規格檔案中定義了小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。此外,呼叫者也必須是記號的建立者。對於可進行靜音的小數不可變記號數量,沒有上限。
您無法使用此方法來提示整個不可執行的記號。
權杖行為管理方法 - 可轉移行為
-
BatchTransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
此方法不會驗證方法的呼叫程式是否為指定的寄件者。任何使用者都可以呼叫這個方法。
-
SafeBatchTransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
方法的呼叫程式必須是指定的傳送程式。任何使用者都可以呼叫這個方法。
-
BalanceOfBatch
- 此方法會完成取得權杖帳戶餘額的批次作業。帳戶詳細資料指定於三個不同的組織 ID、使用者 ID 與憑證 ID 清單。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。帳戶擁有者只能查看自己擁有的帳戶的餘額詳細資料。 -
ExchangeToken
- 此方法會在指定的帳戶之間交換記號。此方法僅支援在 NFT 與有趣的記號之間交換,或有趣的記號與 NFT 之間交換。只有帳戶擁有者才能呼叫此方法。
記號行為管理方法 - 可燃行為
SDK 方法
存取控制管理方法
-
IsUserTokenAdmin
- 如果指定的使用者是
Token Admin
,則此方法會傳回布林值true
,否則傳回false
。此方法只能由記號鏈碼的Token Admin
呼叫。 -
AddAdmin
- 此方法會將使用者新增為權杖鏈碼的
Token Admin
。此方法只能由記號鏈碼的Token Admin
呼叫。 -
RemoveAdmin
- 此方法會移除使用者作為記號鏈碼的
Token Admin
。此方法只能由記號鏈碼的Token Admin
呼叫。您無法將自己移除為Token Admin
。 -
GetAllAdminUsers
- 此方法會傳回所有
Token Admin
使用者的清單。 -
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
權杖組態管理方法
-
Save
- 此方法會建立記號。每個定義的記號都有自己的建立方法。若為無用權杖,若規格檔案中已定義小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法來建立 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,由
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) 多個記號。此方法只會建立有趣的記號或小數的不可行記號。
對於有趣的記號,如果規格檔案中定義了探勘器角色,則任何具有探勘器角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。如果在建立或更新記號時指定了該特性,您就不能超過記號的
max_mint_quantity
特性。對於無法執行的記號,如果在規格檔案中定義了小工具角色,則任何具有小工具角色的使用者都可以呼叫此方法。如果沒有,任何使用者都可以使用此方法來提示記號。此外,呼叫者也必須是記號的建立者。對於可進行靜音的小數不可變記號數量,沒有上限。
您無法使用此方法來提示整個不可執行的記號。
權杖行為管理方法 - 可轉移行為
-
BatchTransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
此方法不會驗證方法的呼叫程式是否為指定的寄件者。
-
SafeBatchTransferFrom
- 此方法會完成批次作業,該批次作業會將記號 ID 清單中指定的記號從某個使用者傳輸到另一個使用者。
若為 NFT,因為方法會傳輸 NFT 的所有權,所以 NFT 的寄件者必須擁有該記號。
對於分數 NFT,如果使用者 (包括記號的建立者) 傳輸他們擁有的所有共用,則他們會失去記號的所有權。如果將記號的任何份額轉移給使用者,則該使用者會自動成為分數 NFT 的其中一個擁有者。
方法的呼叫程式必須是指定的傳送程式。
-
BalanceOfBatch
- 此方法會完成取得權杖帳戶餘額的批次作業。帳戶詳細資料指定於三個不同的組織 ID、使用者 ID 與憑證 ID 清單。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。帳戶擁有者只能查看自己擁有的帳戶的餘額詳細資料。 -
ExchangeToken
- 此方法會在指定的帳戶之間交換記號。此方法只支援在 NFT (整個或小數) 與有趣的記號或有趣的記號與 NFT (整個或小數) 之間交換。只有帳戶擁有者才能呼叫此方法。
記號行為管理方法 - 可燃行為