Progetto Scaffolded Go Token per ERC-1155
Blockchain App Builder prende l'input dal file di specifica del token e genera un progetto di codice concatenato impalcato completamente funzionale.
Il progetto genera automaticamente classi e funzioni del ciclo di vita dei token, 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 impalcato e sui metodi non direttamente correlati ai token, vedere Progetto codice catena go impalcato.
Modello
La funzionalità di persistenza trasparente, o ORM semplificato, viene acquisita nella classe OchainModel
. Il modello seguente mostra un token intero non fungibile.
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"`
}
Il modello seguente mostra un token non fungibile frazionario.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"`
}
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 token generati automaticamente
Blockchain App Builder genera automaticamente metodi per supportare token e cicli di vita dei token. È possibile utilizzare questi metodi per inizializzare i token, gestire ruoli e account e completare altri task del ciclo di vita dei token 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
-
IsTokenAdmin
- Questo metodo restituisce il valore booleano
true
se il chiamante della funzione èToken Admin
, altrimenti restituiscefalse
. Questo metodo può essere chiamato solo dalToken Admin
del codice concatenato. -
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 rimuovere se stessi comeToken Admin
. -
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 ([]
). Se si è l'utente che ha inizialmente distribuito il codice concatenato, è anche possibile specificare nuovi amministratori nel parametroadminList
durante l'aggiornamento del codice concatenato. Qualsiasi altra informazione nel parametroadminList
viene ignorata durante gli aggiornamenti. -
Create<Token Name>Token
- Questo metodo crea i token. Ogni token definito ha il proprio metodo di creazione. Per i token fungibili, questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. Per i token non fungibili, se il ruolo minter è definito nel file di specifica, qualsiasi utente con il ruolo minter può chiamare questo metodo per creare un NFT. Se il ruolo minter non è definito, qualsiasi utente può utilizzare questo metodo per creare (mint) NFT. L'utente che chiama questo metodo diventa il proprietario del NFT. -
Update<Token Name>Token
- Questo metodo aggiorna i token. Ogni token definito ha il proprio metodo di aggiornamento. Impossibile aggiornare i metadati del token o l'URI del token di token non fungibili. Per i token fungibili, questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. Per i token non fungibili, questo metodo può essere chiamato solo dal proprietario del token. -
GetTokenHistory
- Questo metodo restituisce la cronologia per un ID token specificato. Chiunque può chiamare questo metodo.
-
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. -
GetTokenById
- Questo metodo restituisce un oggetto token se il token è presente nel database di stato. Per i NFT frazionari, viene restituito anche l'elenco dei proprietari. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario del token. -
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. -
OwnerOf
- Questo metodo restituisce l'ID account, l'ID organizzazione e l'ID utente del proprietario dell'ID token specificato. Chiunque può chiamare questo metodo.
-
URI
- Questo metodo restituisce l'URI di un token specificato. Chiunque può chiamare questo metodo.
-
Name
- Questo metodo restituisce il nome della classe token. Chiunque può chiamare questo metodo.
-
TotalSupply
- Questo metodo restituisce il numero totale di token coniati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token. 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. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. -
GetTokensByName
- Questo metodo restituisce tutti gli asset token per un nome token 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. -
GetTokenDecimal
- Questo metodo restituisce il numero di posizioni decimali per un token specificato. 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 specificato e account token associati per token fungibili o non fungibili. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. L'account utente tiene traccia dell'account NFT e degli account token fungibili di cui dispone un utente. Gli utenti devono disporre di account nella rete per completare le operazioni correlate al token. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato.Un account utente ha un ID univoco, formato da un hash SHA-256 del parametro
orgId
e del parametrouserId
.Un utente può avere più account token fungibili con ID account univoci. Gli ID account token fungibili sono formati da un hash SHA-256 del parametro
orgId
, il parametrouserId
, la stringa costanteft
separata dal simbolo tilde (~
) e un numero contatore che indica l'indice del conto fungibile che viene creato separato dal simbolo tilde (~
).Un utente può avere un solo account token non fungibile. Gli ID account token non fungibili sono univoci e sono formati da un hash SHA-256 del parametro
orgId
, del parametrouserId
e della stringa costantenft
separati dal simbolo tilde (~
). Tutti i token non fungibili di proprietà di un utente, siano essi interi o frazionari, sono collegati a questo account.Gli ID account utente iniziano con
ouaccount~
. Gli ID account token iniziano conoaccount~
. -
CreateUserAccount
- Questo metodo crea un account per un utente specificato. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. L'account utente tiene traccia dell'account NFT e degli account token fungibili di cui dispone un utente. Gli utenti devono disporre di account nella rete per completare le operazioni correlate al token.
Un ID account è un hash SHA-256 del parametro
orgId
e del parametrouserId
. Questo metodo può essere chiamato solo da unToken Admin
del codice concatenato. -
CreateTokenAccount
- Questo metodo crea un account token fungibile o non fungibile da associare a un account utente.
Un utente può avere più account token fungibili con ID account univoci. Gli ID account token fungibili sono formati da un hash SHA-256 del parametro
orgId
, il parametrouserId
, la stringa costanteft
separata dal simbolo tilde (~
) e un numero contatore che indica l'indice del conto fungibile che viene creato separato dal simbolo tilde (~
).Un utente può avere un solo account token non fungibile. Gli ID account token non fungibili sono univoci e sono formati da un hash SHA-256 del parametro
orgId
, del parametrouserId
e della stringa costantenft
separati dal simbolo tilde (~
). Tutti i token non fungibili di proprietà di un utente, siano essi interi o frazionari, sono collegati a questo account.Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. -
AssociateFungibleTokenAccount
- Questo metodo associa l'account token fungibile di un utente a un token fungibile particolare.
Questo metodo può essere chiamato solo dal
Token Admin
del codice concatenato. -
GetAccountHistory
- Questo metodo restituisce la cronologia per un account token specificato. Questo è un metodo asincrono. Questo metodo può essere chiamato solo dal
Token Admin
del codice concatenato o dal proprietario dell'account. -
GetAccount
- Questo metodo restituisce i dettagli dell'account token per un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dalAccount Owner
dell'account. -
GetAllAccounts
- Questo metodo restituisce i dettagli di tutti gli account utente. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. -
GetAccountDetailsByUser
- Questo metodo restituisce un riepilogo dell'account per un utente specificato e i dettagli dei token fungibili e non fungibili associati all'utente. 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 ID account specificato. Questo metodo può essere chiamato da qualsiasi utente.
Metodi per gestione ruoli
-
AddRole
- Questo metodo aggiunge un ruolo a un utente e a un token specificati. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token. L'utente specificato deve disporre di un account token associato al token fungibile o di un account token non fungibile per i ruoli NFT. Il ruolo specificato deve esistere nel file di specifica per il token. -
IsInRole
- Questo metodo restituisce un valore booleano per indicare se un utente dispone di un ruolo specificato. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token. Questo metodo può essere chiamato solo dal
Token Admin
del codice concatenato o dalAccount Owner
dell'account. L'utente specificato deve disporre di un account token associato al token fungibile o di un account token non fungibile per i ruoli NFT. Il ruolo specificato deve esistere nel file di specifica per il token. -
RemoveRole
- Questo metodo rimuove un ruolo da un utente e da un token specificati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token. Questo metodo può essere chiamato solo dal
Token Admin
del codice concatenato. L'utente specificato deve disporre di un account token associato al token fungibile o di un account token non fungibile per i ruoli NFT. Il ruolo specificato deve esistere nel file di specifica per il token. -
GetAccountsByRole
- Questo metodo restituisce un elenco di tutti gli ID account per un ruolo e un token specificati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token. Questo metodo può essere chiamato solo dal
Token Admin
del codice concatenato. -
GetUsersByRole
- Questo metodo restituisce un elenco di tutti gli utenti per un ruolo e un token specificati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token. Questo metodo può essere chiamato solo dal
Token Admin
del codice concatenato.
Metodi per gestione cronologia transazioni
-
GetAccountTransactionHistory
- Questo metodo restituisce la cronologia delle transazioni del conto. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario dell'account. Per i token non fungibili, questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform. -
GetTransactionById
- Questo metodo restituisce i dettagli della transazione per un ID transazione specificato. Chiunque può chiamare questo metodo.
-
DeleteHistoricalTransactions
- Questo metodo elimina le transazioni prima di un indicatore orario specificato dal database di stato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato.
Metodi per la gestione del comportamento dei token - Comportamento minimo
-
MintBatch
- Questo metodo crea (mette) più token in un'operazione batch. Questo metodo crea solo token fungibili o token non fungibili frazionari.
Per i token fungibili, se il ruolo più piccolo è definito nel file di specifica, qualsiasi utente con il ruolo più piccolo può chiamare questo metodo. In caso contrario, qualsiasi utente può utilizzare questo metodo per creare token. Non è possibile creare più di una proprietà
max_mint_quantity
del token, se tale proprietà è stata specificata al momento della creazione o dell'aggiornamento del token.Per i token non fungibili, se il ruolo minter è definito nel file di specifica, qualsiasi utente con il ruolo minter può chiamare questo metodo. In caso contrario, qualsiasi utente può utilizzare questo metodo per creare token. Inoltre, il chiamante deve essere anche il creatore del token. Non esiste un limite superiore alla quantità di token non fungibili frazionari che possono essere coniati.
Non è possibile utilizzare questo metodo per coniare un token intero non fungibile.
Metodi per la gestione del comportamento dei token - comportamento trasferibile
-
BatchTransferFrom
- Questo metodo completa un'operazione batch che trasferisce i token specificati in una lista di ID token da un utente a un altro utente.
Per i NFT, poiché il metodo trasferisce la proprietà del NFT, il mittente del NFT deve possedere il token.
Per le NFT frazionarie, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, allora perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari del NFT frazionario.
Questo metodo non convalida che il chiamante del metodo sia il mittente specificato. Questo metodo può essere chiamato da qualsiasi utente.
-
SafeBatchTransferFrom
- Questo metodo completa un'operazione batch che trasferisce i token specificati in una lista di ID token da un utente a un altro utente.
Per i NFT, poiché il metodo trasferisce la proprietà del NFT, il mittente del NFT deve possedere il token.
Per le NFT frazionarie, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, allora perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari del NFT frazionario.
Il chiamante del metodo deve essere il mittente specificato. Questo metodo può essere chiamato da qualsiasi utente.
-
BalanceOfBatch
- Questo metodo completa un'operazione batch che recupera il saldo dei conti token. I dettagli dell'account sono specificati in tre elenchi separati di ID organizzazione, ID utente e ID token. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dai proprietari dell'account. I proprietari del conto possono visualizzare i dettagli del saldo solo per i conti di loro proprietà. -
ExchangeToken
- Questo metodo scambia i token tra gli account specificati. Questo metodo supporta solo lo scambio tra un NFT e un token fungibile o un token fungibile e un NFT. Questo metodo può essere chiamato solo dal proprietario dell'account.
Metodi per la gestione del comportamento dei token - comportamento masterizzabile
-
BurnBatch
- Questo metodo disattiva, o brucia, i token fungibili e non fungibili specificati. Qualsiasi utente può chiamare questo metodo.
-
BurnNFT
- Questo metodo disattiva o brucia il token non fungibile specificato e restituisce un oggetto token e la cronologia token. Qualsiasi utente con il ruolo di masterizzatore può chiamare questo metodo.
Metodi SDK
- 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
-
IsUserTokenAdmin
- Questo metodo restituisce il valore booleano
true
se l'utente specificato è unToken Admin
e altrimentifalse
. Il metodo può essere chiamato solo da unToken Admin
del codice concatenato del token. -
AddAdmin
- Questo metodo aggiunge un utente come
Token Admin
del codice concatenato del token. Il metodo può essere chiamato solo da unToken Admin
del codice concatenato del token. -
RemoveAdmin
- Questo metodo rimuove un utente come
Token Admin
del codice concatenato del token. Il metodo può essere chiamato solo da unToken Admin
del codice concatenato del token. Non è possibile rimuovere se stessi comeToken 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. Questa è una funzione asincrona. La maggior parte dei metodi generati automaticamente include il controllo dell'accesso. Alcuni metodi di token possono essere eseguiti solo da
ERC721Admin
oAccount Owner
del token o da unMultipleAccountOwner
per gli utenti con più account. Il metodoCheckAuthorization
fa parte della classeerc721Auth
, a cui si accede tramite l'oggettoCtx
. 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
.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
Metodi per la gestione della configurazione token
-
Save
- Questo metodo crea i token. Ogni token definito ha il proprio metodo di creazione. Per i token non fungibili, se il ruolo minter è definito nel file di specifica, qualsiasi utente con il ruolo minter può chiamare questo metodo per creare un NFT. In caso contrario, qualsiasi utente può utilizzare questo metodo per creare (mint) NFT. L'utente che chiama questo metodo diventa il proprietario del NFT (intero o frazionario).
-
Update
- Questo metodo aggiorna i token. Impossibile aggiornare i metadati del token o l'URI del token di token non fungibili.
-
History (Token)
- Questo metodo restituisce la cronologia per un ID token specificato.
-
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. -
Get (Token)
- 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. Per i NFT frazionari, viene restituito anche l'elenco dei proprietari. -
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.
-
OwnerOf
- Questo metodo restituisce l'ID account, l'ID organizzazione e l'ID utente del proprietario dell'ID token specificato.
-
TokenURI
- Questo metodo restituisce l'URI di un token specificato. Chiunque può chiamare questo metodo.
-
Name
- Questo metodo restituisce il nome della classe token. Chiunque può chiamare questo metodo.
-
TotalSupply
- Questo metodo restituisce il numero totale di token coniati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token.
-
TotalNetSupply
- Questo metodo restituisce il numero totale di token coniati meno il numero di token bruciati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token.
-
GetTokensByName
- Questo metodo restituisce tutti gli asset token per un nome token specificato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
-
GetDecimals
- Questo metodo restituisce il numero di posizioni decimali per un token specificato. Se il comportamento divisibile non è specificato per il token, viene restituito il valore predefinito di zero posizioni decimali.
Metodi per la gestione degli account
-
CreateAccount
- Questo metodo crea un account per un utente specificato e account token associati per token fungibili o non fungibili. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. L'account utente tiene traccia dell'account NFT e degli account token fungibili di cui dispone un utente. Gli utenti devono disporre di account nella rete per completare le operazioni correlate al token. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato.Un account utente ha un ID univoco, formato da un hash SHA-256 del parametro
orgId
e del parametrouserId
.Un utente può avere più account token fungibili con ID account univoci. Gli ID account token fungibili sono formati da un hash SHA-256 del parametro
orgId
, il parametrouserId
, la stringa costanteft
separata dal simbolo tilde (~
) e un numero contatore che indica l'indice del conto fungibile che viene creato separato dal simbolo tilde (~
).Un utente può avere un solo account token non fungibile. Gli ID account token non fungibili sono univoci e sono formati da un hash SHA-256 del parametro
orgId
, del parametrouserId
e della stringa costantenft
separati dal simbolo tilde (~
). Tutti i token non fungibili di proprietà di un utente, siano essi interi o frazionari, sono collegati a questo singolo account token non fungibile. -
CreateUserAccount
- Questo metodo crea un account per un utente specificato. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. L'account utente tiene traccia dell'account NFT e degli account token fungibili di cui dispone un utente. Gli utenti devono disporre di account nella rete per completare le operazioni correlate al token.
Un ID account è un hash SHA-256 del parametro
orgId
e del parametrouserId
. Questo metodo può essere chiamato solo da unToken Admin
del codice concatenato. -
CreateTokenAccount
- Questo metodo crea un account token fungibile o non fungibile da associare a un account utente.
Un utente può avere più account token fungibili con ID account univoci. Gli ID account token fungibili sono formati da un hash SHA-256 del parametro
orgId
, il parametrouserId
, la stringa costanteft
separata dal simbolo tilde (~
) e un numero contatore che indica l'indice del conto fungibile che viene creato separato dal simbolo tilde (~
).Un utente può avere un solo account token non fungibile. Gli ID account token non fungibili sono univoci e sono formati da un hash SHA-256 del parametro
orgId
, del parametrouserId
e della stringa costantenft
separati dal simbolo tilde (~
). Tutti i token non fungibili di proprietà di un utente, siano essi interi o frazionari, sono collegati a questo singolo account token non fungibile.Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato. -
AssociateTokenToToken
- Questo metodo associa l'account token fungibile di un utente a un token fungibile particolare.
-
GetAccountHistory
- Questo metodo restituisce la cronologia per un account token specificato.
-
GetAccountWithStatus
- Questo metodo restituisce i dettagli dell'account token per un utente specificato, incluso lo stato dell'account. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dalAccount Owner
dell'account. -
GetAccount
- Questo metodo restituisce i dettagli dell'account token per un utente specificato. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dalAccount Owner
dell'account. -
GetAllAccounts
- Questo metodo restituisce i dettagli di tutti gli account utente.
-
GetAccountDetailsByUser
- Questo metodo restituisce un riepilogo dell'account per un utente specificato e i dettagli dei token fungibili e non fungibili associati all'utente.
-
GetUserByAccountId
- Questo metodo restituisce i dettagli utente di un ID account specificato.
Metodi per gestione ruoli
-
AddRoleMember
- Questo metodo aggiunge un ruolo a un utente e a un token specificati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token.
-
IsInRole
- Questo metodo restituisce un valore booleano per indicare se un utente dispone di un ruolo specificato. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token.
-
RemoveRoleMember
- Questo metodo rimuove un ruolo da un utente e da un token specificati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token.
-
GetAccountsByRole
- Questo metodo restituisce un elenco di tutti gli ID account per un ruolo e un token specificati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token.
-
GetUsersByRole
- Questo metodo restituisce un elenco di tutti gli utenti per un ruolo e un token specificati. I token fungibili vengono specificati dall'ID token. I token non fungibili sono specificati dal nome token.
Metodi per gestione cronologia transazioni
-
GetAccountTransactionHistory
- Questo metodo restituisce la cronologia delle transazioni del conto. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario dell'account. Per i token non fungibili, questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform. -
GetTransactionById
- Questo metodo restituisce i dettagli della transazione per un ID transazione specificato.
-
DeleteHistoricalTransactions
- Questo metodo elimina le transazioni prima di un indicatore orario specificato dal database di stato.
Metodi per la gestione del comportamento dei token - Comportamento minimo
-
MintBatch
- Questo metodo crea (mette) più token in un'operazione batch. Questo metodo crea solo token fungibili o token non fungibili frazionari.
Per i token fungibili, se il ruolo più piccolo è definito nel file di specifica, qualsiasi utente con il ruolo più piccolo può chiamare questo metodo. In caso contrario, qualsiasi utente può utilizzare questo metodo per creare token. Non è possibile creare più di una proprietà
max_mint_quantity
del token, se tale proprietà è stata specificata al momento della creazione o dell'aggiornamento del token.Per i token non fungibili, se il ruolo minter è definito nel file di specifica, qualsiasi utente con il ruolo minter può chiamare questo metodo. In caso contrario, qualsiasi utente può utilizzare questo metodo per creare token. Inoltre, il chiamante deve essere anche il creatore del token. Non esiste un limite superiore alla quantità di token non fungibili frazionari che possono essere coniati.
Non è possibile utilizzare questo metodo per coniare un token intero non fungibile.
Metodi per la gestione del comportamento dei token - comportamento trasferibile
-
BatchTransferFrom
- Questo metodo completa un'operazione batch che trasferisce i token specificati in una lista di ID token da un utente a un altro utente.
Per i NFT, poiché il metodo trasferisce la proprietà del NFT, il mittente del NFT deve possedere il token.
Per le NFT frazionarie, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, allora perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari del NFT frazionario.
Questo metodo non convalida che il chiamante del metodo sia il mittente specificato.
-
SafeBatchTransferFrom
- Questo metodo completa un'operazione batch che trasferisce i token specificati in una lista di ID token da un utente a un altro utente.
Per i NFT, poiché il metodo trasferisce la proprietà del NFT, il mittente del NFT deve possedere il token.
Per le NFT frazionarie, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, allora perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari del NFT frazionario.
Il chiamante del metodo deve essere il mittente specificato.
-
BalanceOfBatch
- Questo metodo completa un'operazione batch che recupera il saldo dei conti token. I dettagli dell'account sono specificati in tre elenchi separati di ID organizzazione, ID utente e ID token. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dai proprietari dell'account. I proprietari del conto possono visualizzare i dettagli del saldo solo per i conti di loro proprietà. -
ExchangeToken
- Questo metodo scambia i token tra gli account specificati. Questo metodo supporta solo lo scambio tra un NFT (intero o frazionario) e un token fungibile o un token fungibile e un NFT (intero o frazionario). Questo metodo può essere chiamato solo dal proprietario dell'account.
Metodi per la gestione del comportamento dei token - comportamento masterizzabile