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 impalcati non direttamente correlati ai token, vedere Progetto Chaincode TypeScript impalcato.
Modello
Ogni classe di modello tokenizzato estende la classe OchainModel
. La funzionalità di persistenza trasparente, o ORM semplificato, viene acquisita nella classe OchainModel
. Il modello seguente 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 non fungibile frazionario.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;
}
Controller
La classe del controller principale estende la classe OchainController
. C'è solo un controller principale.
export class DigiCurrCCController extends OchainController{
È 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 del controller devono avere un decoratore @Validator(...params)
da richiamare.
- 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 da unToken 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 da unToken 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 detenuti da 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 da un
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 da un
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 da un
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 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 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. -
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 da un
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. Il NFT può essere intero o frazionario. 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 con il ruolo di masterizzatore 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
. -
getAllAdmins
- 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. Alcuni metodi di 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 è 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 disabilitare il controllo dell'accesso, rimuovere il codice di controllo dell'accesso dai metodi del controller generati automaticamente e dai metodi personalizzati.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"], },
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. -
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, incluso lo stato dell'account, per un utente specificato. 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.
-
deleteTransactions
- 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