ERC-721 的鷹架式 Go NFT 專案
Blockchain App Builder 會從您的 NFT 規格檔案進行輸入,並產生功能完整的鏈碼專案。
專案會自動產生 NFT 生命週期類別和函數,包括 CRUD 和非 CRUD 方法。自動支援引數、封送處理 (Marshalling/unmarshalling) 及透明保存功能。
如需與 NFT 不直接相關的鷹架式專案與方法相關資訊,請參閱 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"`
Symbol string `json:"Symbol" final:"ART"`
TokenStandard string `json:"TokenStandard" final:"erc721+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"whole" validate:"regexp=^whole$"`
Behavior []string `json:"Behavior" final:"[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
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" 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 Controller struct {
Ctx trxcontext.TrxContext
}
您可以建立任意數量的類別、函數或檔案,但只有在主要控制器類別中定義的方法才能進行呼叫。其他方法為隱藏。
您可以使用記號 SDK 方法,為您的商業應用程式撰寫自訂方法。
自動產生的 NFT 方法
Blockchain App Builder 會自動產生支援 NFT 和 NFT 生命週期的方法。您可以使用這些方法來初始化 NFT、管理角色和帳戶,以及完成其他 NFT 生命週期工作,而無需進行任何額外的編碼。
Blockchain App Builder 會自動產生支援 NFT 和 NFT 生命週期的方法。您可以使用這些方法來初始化 NFT、管理角色和帳戶,以及完成其他 NFT 生命週期工作,而無需進行任何額外的編碼。控制器方法必須是公用才能呼叫。公用方法名稱開頭為大寫字元。開頭為小寫字元的方法名稱是私密的。
存取控制管理的方法
-
AddTokenAdmin
- 此方法會將使用者新增為鏈碼的
Token Admin
。此方法只能由鏈碼的Token Admin
呼叫。 -
RemoveTokenAdmin
- 此方法會將使用者移除為鏈碼的
Token Admin
。此方法只能由鏈碼的Token Admin
呼叫。您無法使用此方法將您自己移除為Token Admin
。 -
IsTokenAdmin
- 如果函數的呼叫程式是
Token Admin
,此方法會傳回布林值true
,否則會傳回false
。Token Admin
可在區塊鏈網路中的任何其他使用者上呼叫此函數。其他使用者只能對自己的帳戶呼叫此方法。 -
GetAllTokenAdmins
- 此方法會傳回屬於鏈碼之
Token Admin
的所有使用者清單。此方法只能由鏈碼的Token Admin
呼叫。
權杖組態管理方法
-
Init
- 建立鏈碼時會呼叫此方法。每個
Token Admin
都是由adminList
參數中的UserId
和OrgId
資訊來識別。UserId
是執行處理擁有者或登入執行處理之使用者的使用者名稱或電子郵件 ID。OrgId
是目前網路組織中使用者的成員身分服務提供者 (MSP) ID。第一次部署鏈碼時,必須提供adminList
參數。如果您要升級鏈碼,請傳送空白清單 ([]
)。升級時會忽略adminList
參數中的任何其他資訊。 -
GetAllTokens
- 此方法會傳回儲存在狀態資料庫中的所有記號資產。此方法只能由鏈碼的
Token Admin
呼叫。此方法使用 Berkeley DB SQL Rich Query,而且只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫。 -
GetAllTokensByUser
- 此方法會傳回指定使用者擁有的所有權杖資產。此方法使用 Berkeley DB SQL Rich Query,而且只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。 -
GetTokenById
- 如果憑證存在於狀態資料庫中,則此方法會傳回記號物件。只有鏈碼或記號擁有者的
Token Admin
才能呼叫此方法。 -
GetTokenHistory
- 此方法會傳回指定記號 ID 的歷史記錄。此方法只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。任何人都可以呼叫這個方法。
-
getTokenObject
- 這是傳回指定記號 ID 之記號執行處理的公用程式方法。許多自動產生的方法都會使用此方法來擷取記號物件。您可以視需要從自訂方法呼叫此方法。建立記號化資產或類別時,請以對應的
Token
類別更新切換案例,以傳回正確的記號物件。區塊鏈 App 產生器中的ochain sync
命令會在規格檔案中建立權杖化資產時,自動建立交換器案例。因為這個方法為私密,所以它無法直接呼叫,而且只能從其他方法呼叫。 -
OwnerOf
- 此方法會傳回指定記號 ID 之擁有者的帳戶 ID。任何人都可以呼叫這個方法。
-
Name
- 此方法會傳回記號類別的名稱。任何人都可以呼叫這個方法。
-
Symbol
- 此方法會傳回記號類別的符號。任何人都可以呼叫這個方法。
-
TokenURI
- 此方法會傳回指定記號的 URI。任何人都可以呼叫這個方法。
-
TotalSupply
- 此方法會傳回提示的記號總數。此方法只能由鏈碼的
Token Admin
呼叫。 -
TotalNetSupply
- 此方法會傳回有提示記號的總數減去已燒錄記號的數目。此方法只能由鏈碼的
Token Admin
呼叫。
帳戶管理方法
-
CreateAccount
- 此方法會為指定的使用者和記號建立帳戶。必須為任何需要記號的使用者建立帳戶。帳戶會追蹤使用者擁有的 NFT 數目。使用者必須擁有網路中的帳號,才能完成記號相關的作業。每個使用者只能建立一個 NFT 帳戶。
帳戶 ID 是一組英數字元,前面加上
oaccount~
,後面接著目前網路組織中使用者之成員服務提供者 ID (OrgId
) 的 SHA-256 雜湊、執行處理擁有者的使用者名稱或電子郵件 ID (UserId
)、登入執行處理的使用者,以及常數字串nft
。此方法只能由鏈碼的Token Admin
呼叫。 -
BalanceOf
- 此方法會傳回指定使用者保留的 NFT 總數。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。 -
GetAllAccounts
- 此方法會傳回所有帳戶的清單。此方法只能由鏈碼的
Token Admin
呼叫。此方法使用 Berkeley DB SQL Rich Query,而且只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫。 -
GetAccountByUser
- 此方法會傳回指定使用者的帳戶詳細資訊。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。 -
GetUserByAccountId
- 此方法會傳回指定帳戶的使用者詳細資訊。任何使用者都可以呼叫這個方法。
-
GetAccountHistory
- 此方法會傳回指定使用者的帳戶歷史記錄。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。
角色管理方法
-
AddRole
- 此方法會將角色新增至指定的使用者。此方法只能由鏈碼的
Token Admin
呼叫。 -
RemoveRole
- 此方法會從指定的使用者移除角色。此方法只能由鏈碼的
Token Admin
呼叫。 -
GetAccountsByRole
- 此方法會傳回指定角色的所有帳戶 ID 清單。此方法只能由鏈碼的
Token Admin
呼叫。 -
GetUsersByRole
- 此方法會傳回指定角色的所有使用者清單。此方法只能由鏈碼的
Token Admin
呼叫。 -
IsInRole
- 此方法會傳回布林值,指示使用者是否具有指定的角色。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。
交易歷史記錄管理的方法
-
GetAccountTransactionHistory
- 此方法會傳回指定使用者的帳戶交易歷史記錄。此方法可由鏈碼的
Token Admin
或帳戶的擁有者呼叫。 -
GetAccountTransactionHistoryWithFilters
- 此方法會傳回指定使用者的帳戶交易歷史記錄,依
PageSize
、Bookmark
、StartTime
及EndTime
篩選。此方法只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。只有鏈碼的Token Admin
或帳戶擁有者才能呼叫此方法。 -
GetTransactionById
- 此方法會傳回指定交易 ID 的交易歷史記錄。只有鏈碼的
Token Admin
或帳戶擁有者才能呼叫此方法。 -
DeleteHistoricalTransactions
- 此方法會刪除比狀態資料庫中指定時戳還舊的交易。此方法只能由鏈碼的
Token Admin
呼叫。
記號行為管理的方法 - 易懂的行為
-
Create<Token Name>Token
- 此方法會建立 (mints) NFT。資產和關聯的特性會儲存在狀態資料庫中。此交易的呼叫者必須具有權杖帳戶。此交易的來電者會成為 NFT 的擁有者。如果記號設定檔案包含
behaviors
的roles
區段和roles
的minter_role_name
特性,則交易的呼叫者必須具有 minter 角色。否則,任何來電者都可以提示 NFT。 -
Update<Token Name>Token
- 此方法會更新記號特性。只有身為權杖擁有者或建立者的使用者才能呼叫此方法。建立權杖資產之後,只有權杖擁有者可以更新權杖自訂特性。如果使用者同時是記號的記號擁有者和建立者,他們也可以更新
TokenDesc
特性。無法更新權杖描述資料。即使您只想要更新某些特性,也必須將所有記號特性傳遞至此方法。
權杖行為管理方法 - 可傳輸行為
-
SafeTransferFrom
- 此方法會將指定 NFT 的所有權從呼叫程式轉移至另一個帳戶。此方法包含下列驗證:
- 記號已存在且未燒錄。
- 寄件人帳戶與接收者帳戶存在且不是相同的帳戶。
- 寄件者帳戶擁有權杖。
- 函數的呼叫者是寄件者。
-
TransferFrom
- 此方法會將指定 NFT 的所有權從寄件者帳戶轉移至接收者帳戶。呼叫者必須負責傳遞正確的參數。任何使用者都可以呼叫此方法,而不只是記號擁有者。此方法包含下列驗證:
- 記號已存在且未燒錄。
- 寄件人帳戶與接收者帳戶存在且不是相同的帳戶。
- 寄件者帳戶擁有權杖。
權杖行為管理方法 - 可燒錄行為
-
Burn
- 此方法會從呼叫程式的帳戶停用或燒錄指定的 NFT。這個方法的呼叫程式必須要有一個帳戶。除非記號設定檔案包含
burnable
行為,否則無法燒錄記號。如果未在規格檔案的roles
區段中指定burner_role_name
特性,則記號的擁有者可以燒錄記號。如果在roles
區段中指定了burner_role_name
特性,則同時也是權杖礦機 (建立者) 的使用者可以燒錄該權杖。 -
BurnNFT
- 此方法會從呼叫程式的帳戶停用或燒錄指定的 NFT,並傳回記號物件和記號歷史記錄。這個方法的呼叫程式必須要有一個帳戶。除非記號設定檔案包含
burnable
行為,否則無法燒錄記號。如果未在規格檔案的roles
區段中指定burner_role_name
特性,則記號的擁有者可以燒錄記號。如果在roles
區段中指定了burner_role_name
特性,則被指派燃燒器角色的使用者 (也是記號的 minter (建立者) 或擁有者) 可以燒錄記號。
自訂方法
您可以使用記號 SDK 方法,為您的商業應用程式撰寫自訂方法。
下列範例顯示如何在自訂方法中使用 token SDK 方法。呼叫 Sell
方法時,它會張貼變數替代字以供指定價格銷售。
func (t *Controller) Sell(tokenId string, sellingPrice int) (interface{}, error) {
var tokenAsset ArtCollection
_, err := t.Ctx.ERC721Token.Get(tokenId, &tokenAsset)
if err != nil {
return nil, err
}
/** * price is a custom asset
attribute to set the price of a non-fungible token in the
marketplace */
tokenAsset.Price = sellingPrice
/** * on_sale_flag is a
custom asset attribute that maintains non-fungible token selling status in the
marketplace */
tokenAsset.On_sale_flag = true
_, err = t.Ctx.ERC721Token.UpdateToken(tokenAsset)
if err != nil {
return nil, err
}
msg := fmt.Sprintf("Token ID : %s has been posted for selling in the marketplace", tokenId)
return msg, nil
}
NFT SDK 方法
存取控制管理的方法
Token Admin
或 Account Owner
呼叫。您可以使用此功能來確保只有預期的使用者才執行作業。任何未授權的存取都會導致錯誤。若要使用存取控制功能,請從 ../lib/auth
模組匯入 Authorization
類別。import { ERC721Authorization } from '../lib/erc721-auth';
-
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 auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"} trx.DeleteHistoricalTransactions = []string{"Admin"} ad.AddAdmin = []string{"Admin"} ad.RemoveAdmin = []string{"Admin"} ad.GetAllAdmins = []string{"Admin", "OrgAdmin"} ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"} ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"} t.Save = []string{"Admin"} t.GetAllTokens = []string{"Admin", "OrgAdmin"} t.Update = []string{"Admin"} t.GetTokenDecimals = []string{"Admin", "OrgAdmin"} t.GetTokensByName = []string{"Admin", "OrgAdmin"} t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"} t.GetNetTokens = []string{"Admin", "OrgAdmin"} t.Get = []string{"Admin", "OrgAdmin"} t.GetTokenHistory = []string{"Admin", "OrgAdmin"} a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"} a.GetAllAccounts = []string{"Admin"} a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"} a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.History = []string{"Admin", "AccountOwner"} a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"} a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"} a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"} as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetAccountsByRole = []string{"Admin"} r.GetUsersByRole = []string{"Admin"} r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"} tc.InitializeExchangePoolUser = []string{"Admin"} tc.AddConversionRate = []string{"Admin"} tc.UpdateConversionRate = []string{"Admin"} tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.TokenConversion = []string{"Admin", "AnyAccountOwner"} tc.GetExchangePoolUser = []string{"Admin"} 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"} 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
-
IsUserTokenAdmin
- 如果函數的呼叫程式是
Token Admin
,此方法會傳回布林值true
的對應。否則,該方法會傳回false
。 -
AddAdmin
- 此方法會將使用者新增為記號鏈碼的
Token Admin
。 -
RemoveAdmin
- 此方法會將使用者移除為記號鏈碼的
Token Admin
。 -
GetAllAdmins
- 此方法會傳回所有
Token Admin
使用者的清單。 -
GetAllAdminUsers
- 此方法會傳回所有
Token Admin
使用者的清單。
權杖組態管理方法
-
CreateToken
- 此方法會建立記號並將其特性儲存在狀態資料庫中。只有具備 minter 角色的使用者才能呼叫此方法。
-
GetTokenUri
- 此方法會傳回指定記號的記號 URI。
-
TokenUri
- 此方法會傳回指定記號的記號 URI。
-
Symbol
- 此方法會傳回記號類別的符號。
-
Name
- 此方法會傳回記號類別的名稱。
-
OwnerOf
- 此方法會傳回指定記號擁有者的帳戶 ID。
-
TotalSupply
- 此方法會傳回提示的 NFT 總數。
-
GetAllTokens
- 此方法會傳回儲存在狀態資料庫中的所有記號資產。此方法使用 Berkeley DB SQL Rich Query,而且只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫。
-
GetAllTokensByUser
- 此方法會傳回指定帳戶 ID 所擁有的所有記號。此方法使用 Berkeley DB SQL Rich Query,而且只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫。
-
Get
- 此方法會傳回狀態資料庫中存在的指定記號物件。
-
UpdateToken
- 此方法會更新記號特性。只有記號的擁有者或建立者才能呼叫此方法。建立權杖資產之後,只有權杖擁有者可以更新權杖自訂特性。如果使用者同時是記號的記號擁有者和建立者,他們也可以更新
TokenDesc
特性。無法更新權杖描述資料。即使您只想要更新某些特性,也必須將所有記號特性傳遞至此方法。 -
History
- 此方法會傳回指定記號的歷史記錄。
-
GetNewCtx
- 此方法會傳回新的
TrxContext
物件。trxcontext
結構包含所有 SDK 程式庫的參照。只使用此物件來存取 sdk 方法。執行並行交易時,trxcontext
物件會維持 SDK 程式庫中交易存根的相互排斥性。
帳戶管理方法
-
GenerateAccountId
- 此方法會傳回透過串連成員身分服務提供者 ID (
orgId
) 和使用者名稱或電子郵件 ID (userId
) 形成的帳戶 ID,然後建立 SHA-256 雜湊。 -
CreateAccount
- 此方法會為指定的使用者建立帳戶。必須為任何需要記號的使用者建立帳戶。帳戶會追蹤使用者擁有的 NFT 數目。使用者必須擁有網路中的帳號,才能完成記號相關的作業。每個使用者只能建立一個 NFT 帳戶。
帳戶 ID 是一組英數字元,前面加上
oaccount~
,後面接著目前網路組織中使用者之成員服務提供者 ID (org_id
) 的 SHA-256 雜湊、執行處理擁有者的使用者名稱或電子郵件 ID (userId
)、登入執行處理的使用者,以及常數字串nft
。 -
GetAllAccounts
- 此方法會傳回所有帳戶的清單。此方法使用 Berkeley DB SQL Rich Query,而且只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫。
-
History
- 此方法會傳回指定帳戶之帳戶歷史記錄明細的陣列。
-
GetUserByAccountId
- 此方法會傳回指定帳戶的使用者詳細資訊。
-
GetAccountWithStatusByUser
- 此方法會傳回指定使用者的帳戶詳細資訊,包括帳戶狀態。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。 -
GetAccountByUser
- 此方法會傳回指定使用者的帳戶詳細資訊。只有鏈碼的
Token Admin
或帳戶的Account Owner
才能呼叫此方法。 -
BalanceOf
- 此方法會傳回指定使用者保留的 NFT 總數。
角色管理方法
-
AddRoleMember
- 此方法會將角色新增至指定的使用者。
-
RemoveRoleMember
- 此方法會從指定的使用者和記號移除角色。透過建立串連的成員身分服務提供者 ID (
orgId
) 的 SHA-256 雜湊以及使用者名稱或電子郵件 ID (userId
) 來形成帳戶 ID。 -
IsInRole
- 此方法會傳回布林值,指示使用者和記號是否具有指定的角色。透過建立串連的成員身分服務提供者 ID (
orgId
) 的 SHA-256 雜湊以及使用者名稱或電子郵件 ID (userId
) 來形成帳戶 ID。 -
GetAccountsByRole
- 此方法會傳回指定角色的所有帳戶 ID 清單。
-
GetUsersByRole
- 此方法會傳回指定角色的所有使用者清單。
交易歷史記錄管理的方法
-
GetAccountTransactionHistory
- 此方法會傳回指定帳戶之交易歷史記錄明細的陣列。
-
GetAccountTransactionHistoryWithFilters
- 此方法會傳回指定使用者的帳戶交易歷史記錄,依
PageSize
、Bookmark
、startTime
及endTime
篩選。此方法只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。 -
GetTransactionById
- 此方法會傳回
Transaction
資產的歷史記錄。 -
DeleteHistoricalTransactions
- 此方法會從狀態資料庫中刪除早於指定日期的交易。
權杖行為管理 - 易懂的行為
-
GetMaxMintQuantity
- 此方法會傳回記號的最大可移動數量。如果規格檔案中未設定
max_mint_quantity
行為,則預設值為 0,且可提示無限數目的記號。 -
GetTotalMintedTokens
- 此方法會傳回系統中指定記號的可用記號總數。可用的記號淨數目是經過提示的記號總數減去已燒錄的記號數目。
權杖行為管理 - 可傳輸行為
-
SafeTransferFrom
- 此方法會將指定 NFT 的所有權從呼叫程式轉移至另一個帳戶。此方法包含下列驗證:
- 記號已存在且未燒錄。
- 寄件人帳戶與接收者帳戶存在且不是相同的帳戶。
- 寄件者帳戶擁有權杖。
- 函數的呼叫者是寄件者。
-
TransferFrom
- 此方法會將指定 NFT 的所有權從寄件者帳戶轉移至接收者帳戶。呼叫者必須負責傳遞正確的參數。任何使用者都可以呼叫此方法,而不只是記號擁有者。此方法包含下列驗證:
- 記號已存在且未燒錄。
- 寄件人帳戶與接收者帳戶存在且不是相同的帳戶。
- 寄件者帳戶擁有權杖。
權杖行為管理 - 可燒錄行為