Progetto token TypeScript impalcato 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 e sui metodi scaffolded non direttamente correlati ai token, vedere Progetto Chaincode TypeScript in grassetto.
Modello
Ogni classe di modello tokenizzata estende la classe OchainModel
. La funzionalità di persistenza trasparente o ORM semplificato viene acquisita nella classe OchainModel
. Il seguente modello mostra un token intero non fungibile.
import * as yup from "yup";
import { Id, Mandatory, Validate, Default, Embedded, Derived, ReadOnly } from "../../lib/decorators";
import { OchainModel } from "../../lib/ochain-model";
import { STRATEGY } from "../../lib/utils";
import { EmbeddedModel } from "../../lib/ochain-embedded-model";
export class ArtCollectionMetadata extends EmbeddedModel<ArtCollectionMetadata> {
@Validate(yup.string())
public painting_name: string;
@Validate(yup.string())
public description: string;
@Validate(yup.string())
public image: string;
@Validate(yup.string())
public painter_name: string;
}
@Id("tokenId")
export class ArtCollection extends OchainModel<ArtCollection> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("artcollection")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("nonfungible")
public tokenType: string;
@ReadOnly("whole")
public tokenUnit: string;
@ReadOnly(["indivisible","singleton","mintable","transferable","burnable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 20000 })
public mintable: object;
@Validate(yup.string())
public owner: string;
@Validate(yup.string())
public createdBy: string;
@Validate(yup.string())
public transferredBy: string;
@Validate(yup.string())
public creationDate: string;
@Validate(yup.string())
public transferredDate: string;
@Validate(yup.bool())
public isBurned: boolean;
@Validate(yup.string())
public burnedBy: string;
@Validate(yup.string())
public burnedDate: string;
@Mandatory()
@Validate(yup.string().required().max(2000))
public tokenUri: string;
@Embedded(ArtCollectionMetadata)
public tokenMetadata: ArtCollectionMetadata;
@Validate(yup.number())
public price: number;
@Validate(yup.boolean())
public on_sale_flag: boolean;
}
@Id("tokenId")
export class Loyalty extends OchainModel<Loyalty> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("loyalty")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("fungible")
public tokenType: string;
@ReadOnly("fractional")
public tokenUnit: string;
@ReadOnly(["divisible","mintable","transferable","burnable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 10000 })
public mintable: object;
@ReadOnly({ decimal: 2 })
public divisible: object;
@Validate(yup.string())
public currency_name: string;
@Validate(yup.number())
public token_to_currency_ratio: number;
}
Il modello seguente mostra un token frazionario non fungibile.export class RealEstatePropertyMetadata extends EmbeddedModel<RealEstatePropertyMetadata> {
@Validate(yup.string())
public propertyType: string;
@Validate(yup.string())
public propertyName: string;
@Validate(yup.string())
public propertyAddress: string;
@Validate(yup.string())
public propertyImage: string;
}
@Id("tokenId")
export class RealEstateProperty extends OchainModel<RealEstateProperty> {
public readonly assetType = "otoken";
@Mandatory()
@Validate(
yup
.string()
.required()
.matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/)
.max(16)
)
public tokenId: string;
@ReadOnly("realestateproperty")
public tokenName: string;
@Validate(yup.string().trim().max(256))
public tokenDesc: string;
@ReadOnly("erc1155+")
public tokenStandard: string;
@ReadOnly("nonfungible")
public tokenType: string;
@ReadOnly("fractional")
public tokenUnit: string;
@ReadOnly(["divisible","mintable","transferable","roles"])
public behaviors: string[];
@ReadOnly({ minter_role_name: "minter" })
public roles: object;
@ReadOnly({ max_mint_quantity: 0 })
public mintable: object;
@Validate(yup.number().positive())
public quantity: number;
@Validate(yup.string())
public createdBy: string;
@Validate(yup.string())
public creationDate: string;
@ReadOnly({ decimal: 0 })
public divisible: object;
@Validate(yup.bool())
public isBurned: boolean;
@Mandatory()
@Validate(yup.string().required().max(2000))
public tokenUri: string;
@Embedded(RealEstatePropertyMetadata)
public tokenMetadata: RealEstatePropertyMetadata;
@Validate(yup.number())
public propertySellingPrice: number;
@Validate(yup.number())
public propertyRentingPrice: number;
}
Controllore
La classe controller principale estende la classe OchainController
. C'è un solo controller principale.
export class DigiCurrCCController extends OchainController{
È 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 token generati automaticamente
Blockchain App Builder genera automaticamente metodi per supportare i token e i 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 disporre di un decorator @Validator(...params)
per poter essere richiamati.
- 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
-
isTokenAdmin
- Questo metodo restituisce il valore booleano
true
se il chiamante della funzione è un valoreToken Admin
, altrimenti restituiscefalse
. Questo metodo può essere richiamato solo da unToken Admin
del codice concatenato. -
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. Impossibile rimuovere se stesso comeToken Admin
. -
getAllTokenAdmins
- Questo metodo restituisce un elenco di tutti gli utenti che sono un
Token Admin
del codice concatenato. Questo metodo può essere richiamato solo da unToken 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 ([]
). Se si è l'utente che ha inizialmente distribuito il codice concatenato, è inoltre 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 (con menta) NFT. L'utente che chiama questo metodo diventa il proprietario dell'NFT. -
update<Token Name>Token
- Questo metodo aggiorna i token. Ogni token definito ha un proprio metodo di aggiornamento. Impossibile aggiornare i metadati del token o l'URI del token dei 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 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. -
getTokenById
- Questo metodo restituisce un oggetto token se il token è presente nel database di stato. Per gli 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 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. -
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 di token. Chiunque può chiamare questo metodo.
-
totalSupply
- Questo metodo restituisce il numero totale di token coniati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token. 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. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token. Questo metodo può essere richiamato 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 rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. Questo metodo può essere richiamato 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 richiamato 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 gli 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 detenuti da un utente. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato.Un account utente dispone di 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
, dal parametrouserId
, dalla stringa costanteft
separata dal simbolo tilde (~
) e da un numero di contatore che indica l'indice del conto fungibile 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, sia interi che 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. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete.
Un ID account è un hash SHA-256 del parametro
orgId
e del parametrouserId
. Questo metodo può essere richiamato 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
, dal parametrouserId
, dalla stringa costanteft
separata dal simbolo tilde (~
) e da un numero di contatore che indica l'indice del conto fungibile 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, sia interi che frazionari, sono collegati a questo account.Questo metodo può essere richiamato 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 richiamato solo da un
Token Admin
del codice concatenato. -
getAccountHistory
- Questo metodo restituisce la cronologia per un account token specificato. Si tratta di un metodo asincrono. Questo metodo può essere chiamato solo da un
Token Admin
del codice concatenato o dal proprietario del conto. -
getAccount
- Questo metodo restituisce i dettagli dell'account token per un utente specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato o dall'Account Owner
dell'account. -
getAllAccounts
- Questo metodo restituisce i dettagli di tutti gli account utente. Questo metodo può essere richiamato 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 richiamato solo da un
Token Admin
del codice concatenato o dall'Account 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 la gestione dei ruoli
-
addRole
- Questo metodo aggiunge un ruolo a un utente e a un token specificati. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del 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 sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato o dall'Account 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 un token specificati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token. Questo metodo può essere richiamato solo da un
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 sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato. -
getUsersByRole
- Questo metodo restituisce una lista di tutti gli utenti per un ruolo e un token specificati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato.
Metodi per la gestione della cronologia delle 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 del conto. 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 richiamato solo da un
Token Admin
del codice concatenato.
Metodi per la gestione del comportamento dei token - Funzionamento minimo
-
mintBatch
- Questo metodo crea (mint) più token in un'operazione batch. Questo metodo crea solo token fungibili o token non fungibili frazionari.
Per i token 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 coniare i token. Impossibile coniare più della 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 coniare i token. Inoltre, il chiamante deve essere anche il creatore del token. Non esiste un limite massimo per la quantità di token frazionari non fungibili che possono essere coniati.
Impossibile utilizzare questo metodo per coniare un token non fungibile intero.
Metodi per la gestione del comportamento dei token - Funzionamento 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 gli NFT, poiché il metodo trasferisce la proprietà dell'NFT, il mittente dell'NFT deve possedere il token.
Per gli NFT frazionari, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari dell'NFT frazionario.
Questo metodo non verifica 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 gli NFT, poiché il metodo trasferisce la proprietà dell'NFT, il mittente dell'NFT deve possedere il token.
Per gli NFT frazionari, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari dell'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 di account. I proprietari dei conti possono visualizzare i dettagli del saldo solo per i conti di loro proprietà. -
exchangeToken
- Questo metodo scambia i token tra i conti specificati. Questo metodo supporta solo lo scambio tra un NFT e un token fungibile o un token fungibile e un NFT. Il NFT può essere intero o frazionario. Questo metodo può essere richiamato solo dal proprietario dell'account.
Metodi per la gestione del comportamento dei token - Funzionamento attivabile
-
burnBatch
- Questo metodo disattiva o brucia i token fungibili e non fungibili specificati. Qualsiasi utente con il ruolo di bruciatore può chiamare questo metodo.
-
burnNFT
- Questo metodo disattiva o masterizza il token non fungibile specificato e restituisce un oggetto token e una cronologia token. Qualsiasi utente con il ruolo di bruciatore può chiamare questo metodo.
Metodi SDK
- 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
-
checkAuthorization
- Utilizzare questo metodo per aggiungere un controllo dell'accesso a un'operazione. Questa è una funzione asincrona. Alcuni metodi token possono essere eseguiti solo da
Token Admin
oAccountOwner
del token o daMultipleAccountOwner
per gli utenti con più account. Il mapping del controllo dell'accesso viene descritto nel file../lib/constant.ts
. È possibile modificare il controllo dell'accesso modificando il file../lib/constant.ts
. 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.ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, TOKEN: { save: ["Admin"], getAllTokens: ["Admin"], get: ["Admin"], update: ["Admin"], getDecimals: ["Admin"], getTokensByName: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], getTotalMintedTokens: ["Admin"], getNetTokens: ["Admin"], getTokenHistory: ["Admin"], }, ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], }, TRANSACTION: { deleteTransactions: ["Admin"], }, ACCOUNT: { createAccount: ["Admin"], associateToken: ["Admin"], getAllAccounts: ["Admin"], getAccountsByUser: ["Admin", "MultipleAccountOwner"], getAccount: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], getSubTransactionsById: ["Admin", TRANSACTION_INVOKER], getSubTransactionsByIdWithFilters: ["Admin", TRANSACTION_INVOKER], getAccountBalance: ["Admin", "AccountOwner"], getAccountOnHoldBalance: ["Admin", "AccountOwner"], getOnHoldIds: ["Admin", "AccountOwner"], getConversionHistory: ["Admin", "AccountOwner"], }, ACCOUNT_STATUS: { get: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], activateAccount: ["Admin"], suspendAccount: ["Admin"], deleteAccount: ["Admin"], }, TOKEN_CONVERSION: { initializeExchangePoolUser: ["Admin"], addConversionRate: ["Admin"], updateConversionRate: ["Admin"], getConversionRate: ["Admin", "AnyAccountOwner"], getConversionRateHistory: ["Admin", "AnyAccountOwner"], tokenConversion: ["Admin", "AnyAccountOwner"], getExchangePoolUser: ["Admin"], }, ERC721ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, ERC721TOKEN: { getAllTokens: ["Admin"], getAllTokensByUser: ["Admin", "AccountOwner"], get: ["Admin", TOKEN_OWNER], getTokensByName: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], totalSupply: ["Admin"], totalNetSupply: ["Admin"], history: ["Admin"], }, ERC721ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], }, ERC721TRANSACTION: { deleteTransactions: ["Admin"], }, ERC721ACCOUNT: { createAccount: ["Admin"], getAllAccounts: ["Admin"], getAccountByUser: ["Admin", "MultipleAccountOwner"], history: ["Admin", "AccountOwner"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], balanceOf: ["Admin", "MultipleAccountOwner"], }, ERC1155ADMIN: { isUserTokenAdmin: ["Admin"], addAdmin: ["Admin"], removeAdmin: ["Admin"], getAllAdmins: ["Admin"], }, ERC1155TOKEN: { getAllTokens: ["Admin"], get: ["Admin", TOKEN_OWNER], getAllTokensByUser: ["Admin", "AccountOwner"], totalSupply: ["Admin"], totalNetSupply: ["Admin"], getTokensByName: ["Admin"], getDecimals: ["Admin"], addRoleMember: ["Admin"], removeRoleMember: ["Admin"], isInRole: ["Admin", "AccountOwner"], save: ["Admin"], update: ["Admin"], }, ERC1155ACCOUNT: { createAccount: ["Admin"], createUserAccount: ["Admin"], createTokenAccount: ["Admin"], associateFungibleTokenToAccount: ["Admin", "AccountOwner"], getAccountsByUser: ["Admin", "AccountOwner"], getAccount: ["Admin", "AccountOwner"], history: ["Admin", "AccountOwner"], getAllAccounts: ["Admin"], balanceOfBatch: ["Admin"], getAccountTransactionHistory: ["Admin", "AccountOwner"], getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"], exchangeToken: ["AccountOwner"], getAccountDetailsByUser: ["Admin", "AccountOwner"], }, ERC1155ROLE: { getAccountsByRole: ["Admin"], getUsersByRole: ["Admin"], },
-
isUserTokenAdmin
- Questo metodo restituisce il valore booleano
true
se l'utente specificato è unToken Admin
efalse
in caso contrario. 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. Impossibile rimuovere se stesso comeToken Admin
. -
getAllAdmins
- Questo metodo restituisce un elenco di tutti gli utenti
Token Admin
.
Metodi per la gestione della configurazione dei 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 dell'NFT (intero o frazionario).
-
update
- Questo metodo aggiorna i token. Impossibile aggiornare i metadati del token o l'URI del token dei 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 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. -
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. -
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.
-
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 di token. Chiunque può chiamare questo metodo.
-
totalSupply
- Questo metodo restituisce il numero totale di token coniati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token.
-
totalNetSupply
- Questo metodo restituisce il numero totale di token coniati meno il numero di token bruciati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token.
-
getTokensByName
- Questo metodo restituisce tutti gli asset token per un nome token 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.
-
getDecimals
- Questo metodo restituisce il numero di posizioni decimali per un token specificato. Se il comportamento divisibile non viene 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 gli 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. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato.Un account utente dispone di 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
, dal parametrouserId
, dalla stringa costanteft
separata dal simbolo tilde (~
) e da un numero di contatore che indica l'indice del conto fungibile 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, sia interi che 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. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete.
Un ID account è un hash SHA-256 del parametro
orgId
e del parametrouserId
. Questo metodo può essere richiamato 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
, dal parametrouserId
, dalla stringa costanteft
separata dal simbolo tilde (~
) e da un numero di contatore che indica l'indice del conto fungibile 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, sia interi che frazionari, sono collegati a questo singolo account token non fungibile.Questo metodo può essere richiamato 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, incluso lo stato 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. -
getAccount
- Questo metodo restituisce i dettagli dell'account token per un utente specificato. Questo metodo può essere richiamato solo da un
Token Admin
del codice concatenato o dall'Account 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 la gestione dei ruoli
-
AddRoleMember
- Questo metodo aggiunge un ruolo a un utente e a un token specificati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token.
-
isInRole
- Questo metodo restituisce un valore booleano per indicare se un utente dispone di un ruolo specificato. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token.
-
removeRoleMember
- Questo metodo rimuove un ruolo da un utente e un token specificati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token.
-
getAccountsByRole
- Questo metodo restituisce un elenco di tutti gli ID account per un ruolo e un token specificati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token.
-
getUsersByRole
- Questo metodo restituisce una lista di tutti gli utenti per un ruolo e un token specificati. I token fungibili sono specificati dall'ID token. I token non fungibili sono specificati dal nome del token.
Metodi per la gestione della cronologia delle 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 del conto. 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.
-
deleteTransactions
- Questo metodo elimina le transazioni prima di un indicatore orario specificato dal database di stato.
Metodi per la gestione del comportamento dei token - Funzionamento minimo
-
mintBatch
- Questo metodo crea (mint) più token in un'operazione batch. Questo metodo crea solo token fungibili o token non fungibili frazionari.
Per i token 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 coniare i token. Impossibile coniare più della 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 coniare i token. Inoltre, il chiamante deve essere anche il creatore del token. Non esiste un limite massimo per la quantità di token frazionari non fungibili che possono essere coniati.
Impossibile utilizzare questo metodo per coniare un token non fungibile intero.
Metodi per la gestione del comportamento dei token - Funzionamento 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 gli NFT, poiché il metodo trasferisce la proprietà dell'NFT, il mittente dell'NFT deve possedere il token.
Per gli NFT frazionari, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari dell'NFT frazionario.
Questo metodo non verifica 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 gli NFT, poiché il metodo trasferisce la proprietà dell'NFT, il mittente dell'NFT deve possedere il token.
Per gli NFT frazionari, se un utente (incluso il creatore del token) trasferisce tutte le azioni di cui è proprietario, perde la proprietà del token. Se una qualsiasi parte di un token viene trasferita a un utente, tale utente diventa automaticamente uno dei proprietari dell'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 di account. I proprietari dei conti possono visualizzare i dettagli del saldo solo per i conti di loro proprietà. -
exchangeToken
- Questo metodo scambia i token tra i conti 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 richiamato solo dal proprietario dell'account.
Metodi per la gestione del comportamento dei token - Funzionamento attivabile