Progetto NFT Go impalcato per ERC-721
Blockchain App Builder prende l'input dal tuo 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 scaffolded e sui metodi non direttamente correlati a NFT, vedere Progetto codice catena go scaffolded.
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"`
}
Controller
C'è solo un controller principale.
type Controller struct {
Ctx trxcontext.TrxContext
}
È possibile creare un numero qualsiasi di classi, funzioni o file, ma solo i metodi definiti nella classe controller principale sono richiamabili. 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 NFT e cicli di vita NFT. È possibile utilizzare questi metodi per inizializzare NFT, gestire ruoli e account e completare altre attività del ciclo di vita NFT senza alcuna codifica aggiuntiva.
Blockchain App Builder genera automaticamente metodi per supportare NFT e cicli di vita NFT. È possibile utilizzare questi metodi per inizializzare NFT, gestire ruoli e account e completare altre attività del ciclo di vita NFT senza alcuna codifica aggiuntiva. I metodi 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 account
- Gestione ruoli
- Gestione cronologia transazioni
- Gestione comportamento token
Metodi per la gestione del controllo degli accessi
-
AddTokenAdmin
- Questo metodo aggiunge un utente come
Token Admin
del codice concatenato. Questo metodo può essere chiamato solo da unToken Admin
del codice concatenato. -
RemoveTokenAdmin
- Questo metodo rimuove un utente come
Token Admin
del codice concatenato. Questo metodo può essere chiamato 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 èToken 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 chiamato solo dalToken Admin
del codice concatenato.
Metodi per la gestione della configurazione token
-
Init
- Questo metodo viene richiamato quando viene creata un'istanza del codice concatenato. Ogni
Token Admin
è identificato dalle informazioniUserId
eOrgId
nel parametroadminList
.UserId
è il nome utente o l'ID e-mail del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza.OrgId
è l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente. Il parametroadminList
è obbligatorio alla prima distribuzione del codice concatenato. Se si sta aggiornando il codice concatenato, passare un elenco vuoto ([]
). 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 chiamato solo da un
Token Admin
del codice concatenato. Questo metodo utilizza query avanzate SQL DB Berkeley 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 avanzate SQL DB Berkeley 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 dell'account. -
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 chiamato solo quando si è connessi 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 chiamare questo metodo in base alle esigenze dai metodi personalizzati. Quando si crea un asset o una classe tokenizzata, aggiornare lo switch case con la classe
Token
corrispondente per restituire l'oggetto token corretto. Il comandoochain sync
in Blockchain App Builder crea automaticamente uno switch case 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 token. Chiunque può chiamare questo metodo.
-
Symbol
- Questo metodo restituisce il simbolo della classe 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 chiamato 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 chiamato 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 NFT di cui dispone un utente. Gli utenti devono disporre di account nella rete per completare le operazioni correlate al token. È possibile creare un solo account 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, il nome utente o l'ID e-mail (UserId
) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza e la stringa costantenft
. Questo metodo può essere chiamato solo dalToken Admin
del codice concatenato. -
BalanceOf
- Questo metodo restituisce il numero totale di NFT detenuti da un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario dell'account. -
GetAllAccounts
- Questo metodo restituisce un elenco di tutti i conti. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. -
GetAccountByUser
- Questo metodo restituisce i dettagli del conto per un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dalAccount 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 del conto per un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario dell'account.
Metodi per gestione ruoli
-
AddRole
- Questo metodo aggiunge un ruolo a un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. -
RemoveRole
- Questo metodo rimuove un ruolo da un utente specificato. Questo metodo può essere chiamato 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 chiamato 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 chiamato 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 chiamato solo da un
Token Admin
del codice concatenato o dalAccount Owner
dell'account.
Metodi per gestione cronologia transazioni
-
GetAccountTransactionHistory
- Questo metodo restituisce la cronologia delle transazioni del 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 del conto per un utente specificato, filtrata in base a
PageSize
,Bookmark
,StartTime
eEndTime
. Questo metodo può essere chiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. Questo metodo può essere chiamato solo da unToken Admin
del codice concatenato o dal proprietario dell'account. -
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 dell'account. -
DeleteHistoricalTransactions
- Questo metodo elimina le transazioni precedenti a un indicatore orario specificato nel database di stato. Questo metodo può essere chiamato solo dal
Token Admin
del codice concatenato.
Metodi per la gestione del comportamento dei token - Comportamento minimo
-
Create<Token Name>Token
- Questo metodo crea (mints) un NFT. L'asset e le proprietà associate vengono salvate nel database di stato. Il chiamante di questa transazione deve avere un account token. Il chiamante di questa transazione diventa il proprietario di 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 avere il ruolo minore. Altrimenti, 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 del token 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 - comportamento trasferibile
-
SafeTransferFrom
- Questo metodo trasferisce la proprietà dell'NFT specificato dal chiamante a un altro conto. Questo metodo include le convalide riportate di seguito.
- Il token esiste e non viene masterizzato.
- Il conto mittente e il conto ricevente esistono e non sono lo stesso conto.
- L'account mittente è proprietario del token.
- Il chiamante della funzione è il mittente.
-
TransferFrom
- Questo metodo trasferisce la proprietà dell'NFT specificato 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 convalide riportate di seguito.
- Il token esiste e non viene masterizzato.
- Il conto mittente e il conto ricevente esistono e non sono lo stesso conto.
- L'account mittente è proprietario del token.
Metodi per la gestione del comportamento dei token - comportamento masterizzabile
-
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 non viene specificata alcuna proprietàburner_role_name
nella sezioneroles
del file di specifica, 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 più piccolo (creatore) del token in grado di masterizzare il token. -
BurnNFT
- Questo metodo disattiva o masterizza l'NFT specificato dall'account del chiamante e restituisce un oggetto token e la cronologia dei 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 non viene specificata alcuna proprietàburner_role_name
nella sezioneroles
del file di specifica, 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 minore (creatore) o il proprietario del token in grado di masterizzare il token.
Metodi personalizzati
È possibile utilizzare i metodi SDK token per scrivere metodi personalizzati per l'applicazione business.
L'esempio seguente mostra come utilizzare i metodi SDK token nei metodi personalizzati. Quando viene chiamato il metodo Sell
, viene pubblicato un token per la vendita a 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 account
- Gestione ruoli
- Gestione cronologia transazioni
- Gestione comportamento token
Metodi per la gestione del controllo degli accessi
Token Admin
o Account Owner
del token. È possibile utilizzare questa funzione per garantire che le operazioni vengano eseguite solo dagli utenti destinatari. Qualsiasi accesso non autorizzato comporta un errore. Per utilizzare la funzione di controllo dell'accesso, importare la classe Authorization
dal modulo ../lib/auth
.import { ERC721Authorization } from '../lib/erc721-auth';
-
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. -
IsUserTokenAdmin
- Questo metodo restituisce una mappa con il valore booleano
true
se il chiamante della funzione è unToken Admin
. Altrimenti, il metodo restituiscefalse
. -
GetAllAdmins
- Questo metodo restituisce un elenco di tutti gli utenti
Token Admin
. -
GetAllAdminUsers
- Questo metodo restituisce un elenco di tutti gli utenti
Token Admin
. -
CheckAuthorization
- Utilizzare questo metodo per aggiungere un controllo di accesso a un'operazione. La maggior parte dei metodi generati automaticamente include il controllo dell'accesso. Alcuni metodi di token possono essere eseguiti solo da un
ERC721Admin
o dalAccount Owner
del token o dalMultipleAccountOwner
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 mostrato nel testo seguente. È possibile modificare il controllo dell'accesso modificando il fileoChainUtil.go
. Per utilizzare il proprio controllo dell'accesso o disabilitare il controllo dell'accesso, rimuovere il codice di controllo dell'accesso dai metodi del controller generati automaticamente e dai metodi personalizzati.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
Metodi per la gestione della configurazione token
-
CreateToken
- Questo metodo crea un token e ne salva le proprietà nel database di stato. Questo metodo può essere chiamato solo dagli utenti con il ruolo minore.
-
GetAllTokens
- Questo metodo restituisce tutti gli asset token salvati nel database di stato. Questo metodo utilizza query avanzate SQL DB Berkeley 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 avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
-
GetTokenUri
- Questo metodo restituisce l'URI del token per un token specificato.
-
History
- Questo metodo restituisce la cronologia per il token specificato.
-
Get
- Questo metodo restituisce l'oggetto token specificato se è presente nel database di stato.
-
OwnerOf
- Questo metodo restituisce l'ID account del proprietario di un token specificato.
-
Name
- Questo metodo restituisce il nome della classe token.
-
Symbol
- Questo metodo restituisce il simbolo della classe token.
-
TokenUri
- Questo metodo restituisce l'URI del token per un token specificato.
-
TotalSupply
- Questo metodo restituisce il numero totale di NFT coniati.
-
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 del token 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à. -
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 di transazione 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 NFT di cui dispone un utente. Gli utenti devono disporre di account nella rete per completare le operazioni correlate al token. È possibile creare un solo account 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, il nome utente o l'ID e-mail (userId
) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza e la stringa costantenft
. -
BalanceOf
- Questo metodo restituisce il numero totale di NFT bloccati dall'utente specificato.
-
GetAllAccounts
- Questo metodo restituisce un elenco di tutti i conti. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
-
GetAccountByUser
- Questo metodo restituisce i dettagli del conto per un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dalAccount Owner
dell'account. -
GetUserByAccountId
- Questo metodo restituisce i dettagli utente per un account specificato.
-
History
- Questo metodo restituisce un array dei dettagli della cronologia account per un account specificato.
-
GetAccountWithStatusByUser
- Questo metodo restituisce i dettagli del conto per un utente specificato, incluso lo stato del conto. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dalAccount Owner
dell'account.
Metodi per gestione ruoli
-
AddRoleMember
- Questo metodo aggiunge un ruolo a un utente specificato.
-
RemoveRoleMember
- Questo metodo rimuove un ruolo da un utente e da un token specificati. Un ID account è formato dalla 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.
-
IsInRole
- Questo metodo restituisce un valore booleano per indicare se un utente e un token hanno un ruolo specificato. Un ID account è formato dalla 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
).
Metodi per gestione cronologia 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 del conto per un utente specificato, filtrata in base a
PageSize
,Bookmark
,startTime
eendTime
. Questo metodo può essere chiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. -
GetTransactionById
- Questo metodo restituisce la cronologia di un asset
Transaction
. -
DeleteHistoricalTransactions
- Questo metodo elimina le transazioni che risalgono a una data precedente a quella specificata dal database di stato.
Gestione comportamento token - comportamento di importanza minore
-
GetMaxMintQuantity
- Questo metodo restituisce la quantità massima estraibile di un token. Se il funzionamento di
max_mint_quantity
non è configurato nel file di specifica, il valore predefinito è 0 e è possibile coniare 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 comportamento token - comportamento trasferibile
-
SafeTransferFrom
- Questo metodo trasferisce la proprietà dell'NFT specificato dal chiamante a un altro conto. Questo metodo include le convalide riportate di seguito.
- Il token esiste e non viene masterizzato.
- Il conto mittente e il conto ricevente esistono e non sono lo stesso conto.
- L'account mittente è proprietario del token.
- Il chiamante della funzione è il mittente.
-
TransferFrom
- Questo metodo trasferisce la proprietà dell'NFT specificato 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 convalide riportate di seguito.
- Il token esiste e non viene masterizzato.
- Il conto mittente e il conto ricevente esistono e non sono lo stesso conto.
- L'account mittente è proprietario del token.
Gestione comportamento token - comportamento masterizzabile
-
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 non viene specificata alcuna proprietàburner_role_name
nella sezioneroles
del file di specifica, 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 più piccolo (creatore) del token in grado di masterizzare il token. Il metodoburn
fa parte del pacchettoERC721Token
, al quale si accede tramite il ricevitore della strutturaCtx
.