Progetto NFT Go impalcato per ERC-721
Blockchain App Builder prende l'input dal file di specifica NFT e genera un progetto di codice concatenato impalcato completamente funzionale.
Il progetto genera automaticamente classi e funzioni del ciclo di vita NFT, inclusi i metodi CRUD e non CRUD. La convalida degli argomenti, il marshalling/unmarshalling e la capacità di persistenza trasparente sono tutti supportati automaticamente.
Per informazioni sul progetto e sui metodi scaffolded non direttamente correlati agli NFT, vedere Scaffolded Go Chaincode Project.
Modello
La funzionalità di persistenza trasparente o ORM semplificato viene acquisita nella classe 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"`
}
Controllore
C'è un solo controller principale.
type Controller struct {
Ctx trxcontext.TrxContext
}
È possibile creare un numero qualsiasi di classi, funzioni o file, ma è possibile richiamare solo i metodi definiti all'interno della classe controller principale. Gli altri metodi sono nascosti.
È possibile utilizzare i metodi SDK token per scrivere metodi personalizzati per l'applicazione business.
Metodi NFT generati automaticamente
Blockchain App Builder genera automaticamente metodi per supportare i cicli di vita NFT e NFT. È possibile utilizzare questi metodi per inizializzare NFT, gestire ruoli e account e completare altri task del ciclo di vita NFT senza alcuna codifica aggiuntiva.
Blockchain App Builder genera automaticamente metodi per supportare i cicli di vita NFT e NFT. È possibile utilizzare questi metodi per inizializzare NFT, gestire ruoli e account e completare altri task del ciclo di vita NFT senza alcuna codifica aggiuntiva. I metodi del controller devono essere pubblici per poter essere richiamati. I nomi dei metodi pubblici iniziano con un carattere maiuscolo. I nomi dei metodi che iniziano con un carattere minuscolo sono privati.
- Gestione del controllo dell'accesso
- Gestione configurazione token
- Gestione degli account
- Gestione ruoli
- Gestione cronologia transazioni
- Gestione del comportamento dei token
Metodi per la gestione del controllo dell'accesso
-
AddTokenAdmin
- Questo metodo aggiunge un utente come
Token Admin
del codice concatenato. Questo metodo può essere richiamato solo da unToken Admin
del codice concatenato. -
RemoveTokenAdmin
- Questo metodo rimuove un utente come
Token Admin
del codice concatenato. Questo metodo può essere richiamato solo da unToken Admin
del codice concatenato. Non è possibile utilizzare questo metodo per rimuovere se stessi comeToken Admin
. -
IsTokenAdmin
- Questo metodo restituisce il valore booleano
true
se il chiamante della funzione è un valoreToken Admin
, altrimenti restituiscefalse
. UnToken Admin
può chiamare questa funzione su qualsiasi altro utente della rete blockchain. Altri utenti possono chiamare questo metodo solo sui propri account. -
GetAllTokenAdmins
- Questo metodo restituisce un elenco di tutti gli utenti che sono un
Token Admin
del codice concatenato. Questo metodo può essere richiamato solo dalToken Admin
del codice concatenato.
Metodi per la gestione della configurazione dei token
-
Init
- Questo metodo viene chiamato quando viene creata un'istanza del codice concatenato. Ogni
Token Admin
viene identificato dalle informazioniUserId
eOrgId
nel parametroadminList
.UserId
è il nome utente o l'ID di posta elettronica del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza.OrgId
è l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione di rete corrente. Il parametroadminList
è obbligatorio la prima volta che si distribuisce il codice concatenato. Se si sta aggiornando il codice concatenato, passare una lista vuota ([]
). Qualsiasi altra informazione nel parametroadminList
viene ignorata durante gli aggiornamenti. -
GetAllTokens
- Questo metodo restituisce tutti gli asset token salvati nel database di stato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. -
GetAllTokensByUser
- Questo metodo restituisce tutti gli asset token di proprietà di un utente specificato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario del conto. -
GetTokenById
- Questo metodo restituisce un oggetto token se il token è presente nel database di stato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario del token. -
GetTokenHistory
- Questo metodo restituisce la cronologia per un ID token specificato. Questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform. Chiunque può chiamare questo metodo.
-
getTokenObject
- Questo è un metodo di utility che restituisce un'istanza del token per un ID token specificato. Questo metodo viene utilizzato da molti dei metodi generati automaticamente per recuperare gli oggetti token. È possibile richiamare questo metodo in base alle esigenze dai metodi personalizzati. Quando si crea un asset o una classe tokenizzata, aggiornare il caso di scambio con la classe
Token
corrispondente per restituire l'oggetto token corretto. Il comandoochain sync
in Blockchain App Builder crea automaticamente un caso di scambio quando un asset tokenizzato viene creato nel file di specifica. Poiché questo metodo è privato, non è direttamente richiamabile e può essere chiamato solo da altri metodi. -
OwnerOf
- Questo metodo restituisce l'ID account del proprietario dell'ID token specificato. Chiunque può chiamare questo metodo.
-
Name
- Questo metodo restituisce il nome della classe di token. Chiunque può chiamare questo metodo.
-
Symbol
- Questo metodo restituisce il simbolo della classe di token. Chiunque può chiamare questo metodo.
-
TokenURI
- Questo metodo restituisce l'URI di un token specificato. Chiunque può chiamare questo metodo.
-
TotalSupply
- Questo metodo restituisce il numero totale di token coniati. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. -
TotalNetSupply
- Questo metodo restituisce il numero totale di token coniati meno il numero di token bruciati. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato.
Metodi per la gestione degli account
-
CreateAccount
- Questo metodo crea un account per un utente e un token specificati. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. Gli account tengono traccia del numero di operazioni NFT di cui dispone un utente. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete. È possibile creare un solo conto NFT per utente.
Un ID account è un set alfanumerico di caratteri, preceduto da
oaccount~
e seguito da un hash SHA-256 dell'ID provider di servizi di appartenenza (OrgId
) dell'utente nell'organizzazione di rete corrente, dal nome utente o dall'ID di posta elettronica (UserId
) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza e dalla stringa costantenft
. Questo metodo può essere richiamato solo dalToken Admin
del codice concatenato. -
BalanceOf
- Questo metodo restituisce il numero totale di operazioni NFT detenute da un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario del conto. -
GetAllAccounts
- Questo metodo restituisce un elenco di tutti i conti. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. -
GetAccountByUser
- Questo metodo restituisce i dettagli dell'account per un utente specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato o dall'Account Owner
dell'account. -
GetUserByAccountId
- Questo metodo restituisce i dettagli utente di un account specificato. Questo metodo può essere chiamato da qualsiasi utente.
-
GetAccountHistory
- Questo metodo restituisce la cronologia dell'account per un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario del conto.
Metodi per la gestione dei ruoli
-
AddRole
- Questo metodo aggiunge un ruolo a un utente specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. -
RemoveRole
- Questo metodo rimuove un ruolo da un utente specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. -
GetAccountsByRole
- Questo metodo restituisce un elenco di tutti gli ID account per un ruolo specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. -
GetUsersByRole
- Questo metodo restituisce un elenco di tutti gli utenti per un ruolo specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. -
IsInRole
- Questo metodo restituisce un valore booleano per indicare se un utente dispone di un ruolo specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato o dall'Account Owner
dell'account.
Metodi per la gestione della cronologia delle transazioni
-
GetAccountTransactionHistory
- Questo metodo restituisce la cronologia delle transazioni conto per un utente specificato. Questo metodo può essere chiamato dal
Token Admin
del codice concatenato o dal proprietario del conto. -
GetAccountTransactionHistoryWithFilters
- Questo metodo restituisce la cronologia delle transazioni conto per un utente specificato, filtrata in base a
PageSize
,Bookmark
,StartTime
eEndTime
. Questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform. Questo metodo può essere chiamato solo da unToken Admin
del codice concatenato o dal proprietario del conto. -
GetTransactionById
- Questo metodo restituisce la cronologia delle transazioni per un ID transazione specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario del conto. -
DeleteHistoricalTransactions
- Questo metodo elimina le transazioni più vecchie di un indicatore orario specificato nel database di stato. Questo metodo può essere richiamato solo dal
Token Admin
del codice concatenato.
Metodi per la gestione del comportamento dei token - Funzionamento minimo
-
Create<Token Name>Token
- Questo metodo crea (mint) un NFT. L'asset e le proprietà associate vengono salvati nel database di stato. Il chiamante di questa transazione deve disporre di un account token. Il chiamante di questa transazione diventa il proprietario dell'NFT. Se il file di specifica del token include la sezione
roles
perbehaviors
e la proprietàminter_role_name
perroles
, il chiamante della transazione deve disporre del ruolo secondario. In caso contrario, qualsiasi chiamante può coniare NFT. -
Update<Token Name>Token
- Questo metodo aggiorna le proprietà del token. Questo metodo può essere chiamato solo dall'utente che è il proprietario o il creatore del token. Dopo la creazione di un asset token, solo il proprietario del token può aggiornare le proprietà personalizzate del token. Se l'utente è sia proprietario che creatore di un token, può anche aggiornare la proprietà
TokenDesc
. Impossibile aggiornare i metadati del token. È necessario passare tutte le proprietà del token a questo metodo, anche se si desidera aggiornare solo determinate proprietà.
Metodi per la gestione del comportamento dei token - Funzionamento trasferibile
-
SafeTransferFrom
- Questo metodo trasferisce la proprietà dell'NFT specificato dal chiamante a un altro conto. Questo metodo include le seguenti convalide:
- Il token esiste e non viene masterizzato.
- L'account mittente e l'account ricevente esistono e non sono lo stesso account.
- L'account mittente è proprietario del token.
- Il chiamante della funzione è il mittente.
-
TransferFrom
- Questo metodo trasferisce la proprietà dell'operazione NFT specificata da un conto mittente a un conto ricevente. È responsabilità del chiamante passare i parametri corretti. Questo metodo può essere richiamato da qualsiasi utente, non solo dal proprietario del token. Questo metodo include le seguenti convalide:
- Il token esiste e non viene masterizzato.
- L'account mittente e l'account ricevente esistono e non sono lo stesso account.
- L'account mittente è proprietario del token.
Metodi per la gestione del comportamento dei token - Funzionamento attivabile
-
Burn
- Questo metodo disattiva o brucia l'NFT specificato dall'account del chiamante. Il chiamante di questo metodo deve avere un account. Impossibile masterizzare un token a meno che il file di specifica del token non includa il comportamento
burnable
. Se nella sezioneroles
del file di specifica non viene specificata alcuna proprietàburner_role_name
, il proprietario del token può masterizzare il token. Se nella sezioneroles
è specificata una proprietàburner_role_name
, l'utente ha assegnato il ruolo di masterizzatore che è anche il creatore (minter) del token può masterizzare il token. -
BurnNFT
- Questo metodo disattiva o masterizza l'NFT specificato dall'account del chiamante e restituisce un oggetto token e una cronologia token. Il chiamante di questo metodo deve avere un account. Impossibile masterizzare un token a meno che il file di specifica del token non includa il comportamento
burnable
. Se nella sezioneroles
del file di specifica non viene specificata alcuna proprietàburner_role_name
, il proprietario del token può masterizzare il token. Se nella sezioneroles
è specificata una proprietàburner_role_name
, l'utente ha assegnato il ruolo di masterizzatore che è anche il creatore o il proprietario del token può masterizzare il token.
Metodi personalizzati
È possibile utilizzare i metodi SDK token per scrivere metodi personalizzati per l'applicazione business.
L'esempio riportato di seguito mostra come utilizzare i metodi SDK token nei metodi personalizzati. Quando viene chiamato il metodo Sell
, pubblica un token in vendita per un prezzo specificato.
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
}
Metodi SDK NFT
- Gestione del controllo dell'accesso
- Gestione configurazione token
- Gestione degli account
- Gestione ruoli
- Gestione cronologia transazioni
- Gestione del comportamento dei token
Metodi per la gestione del controllo dell'accesso
Token Admin
o Account Owner
del token. È possibile utilizzare questa funzione per garantire che le operazioni vengano eseguite solo dagli utenti previsti. Qualsiasi accesso non autorizzato genera un errore. Per utilizzare la funzione di controllo dell'accesso, importare la classe Authorization
dal modulo ../lib/auth
.import { ERC721Authorization } from '../lib/erc721-auth';
-
CheckAuthorization
- Utilizzare questo metodo per aggiungere un controllo dell'accesso a un'operazione. La maggior parte dei metodi generati automaticamente includono il controllo dell'accesso. Alcuni metodi token possono essere eseguiti solo da un
ERC721Admin
o dall'Account Owner
del token o daMultipleAccountOwner
per gli utenti con più account. Il metodoCheckAuthorization
fa parte del pacchettoerc721Auth
, al quale si accede tramite la strutturaCtx
(ricevitore). Il mapping del controllo dell'accesso è descritto nel fileoChainUtil.go
, come illustrato nel testo seguente. È possibile modificare il controllo dell'accesso modificando il fileoChainUtil.go
. Per utilizzare il proprio controllo dell'accesso o per disabilitare il controllo dell'accesso, rimuovere il codice di controllo dell'accesso dai metodi e dai metodi personalizzati generati automaticamente dal controller.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
- Questo metodo restituisce una mappa con il valore booleano
true
se il chiamante della funzione è un valoreToken Admin
. In caso contrario il metodo restituiscefalse
. -
AddAdmin
- Questo metodo aggiunge un utente come
Token Admin
del codice concatenato del token. -
RemoveAdmin
- Questo metodo rimuove un utente come
Token Admin
del codice concatenato del token. -
GetAllAdmins
- Questo metodo restituisce un elenco di tutti gli utenti
Token Admin
. -
GetAllAdminUsers
- Questo metodo restituisce un elenco di tutti gli utenti
Token Admin
.
Metodi per la gestione della configurazione dei token
-
CreateToken
- Questo metodo crea un token e ne salva le proprietà nel database di stato. Questo metodo può essere richiamato solo dagli utenti con il ruolo di minter.
-
GetTokenUri
- Questo metodo restituisce l'URI del token per un token specificato.
-
TokenUri
- Questo metodo restituisce l'URI del token per un token specificato.
-
Symbol
- Questo metodo restituisce il simbolo della classe di token.
-
Name
- Questo metodo restituisce il nome della classe di token.
-
OwnerOf
- Questo metodo restituisce l'ID account del proprietario di un token specificato.
-
TotalSupply
- Questo metodo restituisce il numero totale di operazioni NFT coniate.
-
GetAllTokens
- Questo metodo restituisce tutti gli asset token salvati nel database di stato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
-
GetAllTokensByUser
- Questo metodo restituisce tutti i token di proprietà di un ID account specificato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
-
Get
- Questo metodo restituisce l'oggetto token specificato se è presente nel database di stato.
-
UpdateToken
- Questo metodo aggiorna le proprietà del token. Questo metodo può essere chiamato solo dal proprietario o dal creatore del token. Dopo la creazione di un asset token, solo il proprietario del token può aggiornare le proprietà personalizzate del token. Se l'utente è sia proprietario che creatore di un token, può anche aggiornare la proprietà
TokenDesc
. Impossibile aggiornare i metadati del token. È necessario passare tutte le proprietà del token a questo metodo, anche se si desidera aggiornare solo determinate proprietà. -
History
- Questo metodo restituisce la cronologia per il token specificato.
-
GetNewCtx
- Questo metodo restituisce un nuovo oggetto
TrxContext
. La strutturatrxcontext
contiene riferimenti a tutte le librerie SDK. Accedere ai metodi sdk utilizzando solo questo oggetto. L'oggettotrxcontext
mantiene l'esclusività reciproca degli stub delle transazioni nelle librerie SDK quando sono in esecuzione transazioni concorrenti.
Metodi per la gestione degli account
-
GenerateAccountId
- Questo metodo restituisce un ID account, formato dalla concatenazione dell'ID provider di servizi di appartenenza (
orgId
) e del nome utente o dell'ID e-mail (userId
), quindi dalla creazione di un hash SHA-256. -
CreateAccount
- Questo metodo crea un account per un utente specificato. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. Gli account tengono traccia del numero di operazioni NFT di cui dispone un utente. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete. È possibile creare un solo conto NFT per utente.
Un ID account è un set alfanumerico di caratteri, preceduto da
oaccount~
e seguito da un hash SHA-256 dell'ID provider di servizi di appartenenza (org_id
) dell'utente nell'organizzazione di rete corrente, dal nome utente o dall'ID di posta elettronica (userId
) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza e dalla stringa costantenft
. -
GetAllAccounts
- Questo metodo restituisce un elenco di tutti i conti. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
-
History
- Questo metodo restituisce un array dei dettagli della cronologia dell'account per un account specificato.
-
GetUserByAccountId
- Questo metodo restituisce i dettagli utente per un account specificato.
-
GetAccountWithStatusByUser
- Questo metodo restituisce i dettagli dell'account per un utente specificato, incluso lo stato dell'account. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato o dall'Account Owner
dell'account. -
GetAccountByUser
- Questo metodo restituisce i dettagli dell'account per un utente specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato o dall'Account Owner
dell'account. -
BalanceOf
- Questo metodo restituisce il numero totale di operazioni NFT bloccate dall'utente specificato.
Metodi per la gestione dei ruoli
-
AddRoleMember
- Questo metodo aggiunge un ruolo a un utente specificato.
-
RemoveRoleMember
- Questo metodo rimuove un ruolo da un utente e un token specificati. Un ID account viene formato mediante la creazione di un hash SHA-256 dell'ID provider di servizi di appartenenza concatenato (
orgId
) e del nome utente o dell'ID e-mail (userId
). -
IsInRole
- Questo metodo restituisce un valore booleano per indicare se un utente e un token hanno un ruolo specificato. Un ID account viene formato mediante la creazione di un hash SHA-256 dell'ID provider di servizi di appartenenza concatenato (
orgId
) e del nome utente o dell'ID e-mail (userId
). -
GetAccountsByRole
- Questo metodo restituisce un elenco di tutti gli ID account per un ruolo specificato.
-
GetUsersByRole
- Questo metodo restituisce un elenco di tutti gli utenti per un ruolo specificato.
Metodi per la gestione della cronologia delle transazioni
-
GetAccountTransactionHistory
- Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per un conto specificato.
-
GetAccountTransactionHistoryWithFilters
- Questo metodo restituisce la cronologia delle transazioni conto per un utente specificato, filtrata in base a
PageSize
,Bookmark
,startTime
eendTime
. Questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform. -
GetTransactionById
- Questo metodo restituisce la cronologia di un asset
Transaction
. -
DeleteHistoricalTransactions
- Questo metodo elimina dal database di stato le transazioni che risalgono a una data precedente a quella specificata.
Gestione del comportamento dei token - Comportamento minimo
-
GetMaxMintQuantity
- Questo metodo restituisce la quantità minima massima di un token. Se il funzionamento di
max_mint_quantity
non è configurato nel file di specifica, il valore predefinito è 0 e è possibile creare un numero infinito di token. -
GetTotalMintedTokens
- Questo metodo restituisce il numero netto totale di token disponibili nel sistema per il token specificato. Il numero netto di token disponibili è il numero totale di token coniati meno il numero di token bruciati.
Gestione del comportamento dei token - Funzionamento trasferibile
-
SafeTransferFrom
- Questo metodo trasferisce la proprietà dell'NFT specificato dal chiamante a un altro conto. Questo metodo include le seguenti convalide:
- Il token esiste e non viene masterizzato.
- L'account mittente e l'account ricevente esistono e non sono lo stesso account.
- L'account mittente è proprietario del token.
- Il chiamante della funzione è il mittente.
-
TransferFrom
- Questo metodo trasferisce la proprietà dell'operazione NFT specificata da un conto mittente a un conto ricevente. È responsabilità del chiamante passare i parametri corretti. Questo metodo può essere richiamato da qualsiasi utente, non solo dal proprietario del token. Questo metodo include le seguenti convalide:
- Il token esiste e non viene masterizzato.
- L'account mittente e l'account ricevente esistono e non sono lo stesso account.
- L'account mittente è proprietario del token.
Gestione del comportamento dei token - Comportamento utilizzabile
-
Burn
- Questo metodo disattiva o brucia l'NFT specificato dall'account del chiamante. Il chiamante di questo metodo deve avere un account. Impossibile masterizzare un token a meno che il file di specifica del token non includa il comportamento
burnable
. Se nella sezioneroles
del file di specifica non viene specificata alcuna proprietàburner_role_name
, il proprietario del token può masterizzare il token. Se nella sezioneroles
è specificata una proprietàburner_role_name
, l'utente ha assegnato il ruolo di masterizzatore che è anche il creatore (minter) del token può masterizzare il token. Il metodoburn
fa parte del pacchettoERC721Token
, al quale si accede tramite il ricevitore della strutturaCtx
.