Progetto TypeScript impalcato per struttura tassonomia token

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 Token, che a sua volta estende la classe OchainModel. La classe Token viene importata da ../lib/token. La funzionalità di persistenza trasparente, o ORM semplificato, viene acquisita nella classe OchainModel.

import * as yup from 'yup';
import { Id, Mandatory, Validate, ReadOnly } from '../lib/decorators';
import { Token } from '../lib/token';
 
@Id('token_id')
export class Digicur extends Token<Digicur> {
 
    public readonly assetType = 'otoken';
 
    @Mandatory()
    @Validate(yup.string().required().matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/).max(16))
    public token_id: string;
 
    @ReadOnly('digicur')
    public token_name: string;
 
    @Validate(yup.string().trim().max(256))
    public token_desc: string;
 
    @ReadOnly('fungible')
    public token_type: string;
 
    @ReadOnly(["divisible","mintable","transferable","burnable","holdable","roles"])
    public behaviors: string[];
 
    @ReadOnly({minter_role_name: "minter", burner_role_name: "burner", notary_role_name: "notary"})
    public roles: object;
 
    @ReadOnly({max_mint_quantity: 20000})
    public mintable: object;
 
    @ReadOnly({decimal: 1})
    public divisible: object;
 
    @Validate(yup.number())
    public token_to_currency_ratio: number;
 
    @Validate(yup.string())
    public currency_representation: string;
 
}

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.

Metodi per la gestione del controllo degli accessi

addTokenAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async addTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization('ADMIN.addAdmin', 'TOKEN');
    return await this.Ctx.Admin.addAdmin(org_id, user_id);
}
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Token Admin del codice concatenato.
Esempio di valore restituito:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: User1)"}
removeTokenAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async removeTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization('ADMIN.removeAdmin', 'TOKEN');
    return await this.Ctx.Admin.removeAdmin(org_id, user_id);
}
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Token Admin del codice concatenato.
Esempio di valore restituito:
{"msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: User1)"}
isTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è Token Admin, altrimenti restituisce false. Un Token Admin o Org Admin può chiamare questa funzione su qualsiasi altro utente della rete blockchain. Altri utenti possono chiamare questo metodo solo sui propri account.
@Validator(yup.string(), yup.string())
  public async isTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.isUserTokenAdmin", "TOKEN");
    return await this.Ctx.Auth.isUserTokenAdmin(org_id, user_id);
  }
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Il metodo restituisce true se il chiamante è Token Admin, altrimenti restituisce false.
getAllTokenAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Token Admin del codice concatenato. Questo metodo può essere chiamato solo dal Token Admin o da qualsiasi Org Admin del codice concatenato.
@Validator()
public async getAllTokenAdmins() {
    await this.Ctx.Auth.checkAuthorization('ADMIN.getAllAdmins', 'TOKEN');
    return await this.Ctx.Admin.getAllAdmins();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array admins in formato JSON contenente oggetti orgId e userId.
Esempio di valore restituito:
{"admins":[{"org_id":"Org1MSP","user_id":"admin"}]}
addOrgAdmin
Questo metodo aggiunge un utente come Org Admin dell'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
@Validator(yup.string(), yup.string())
  public async addOrgAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.addOrgAdmin", "TOKEN", { org_id });
    return await this.Ctx.Admin.addOrgAdmin(org_id, user_id);
  }
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
Questo metodo rimuove un utente come Org Admin dell'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
@Validator(yup.string(), yup.string())
  public async removeOrgAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.removeOrgAdmin", "TOKEN", { org_id });
    return await this.Ctx.Admin.removeOrgAdmin(org_id, user_id);
  }
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
getOrgAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Org Admin di un'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin di qualsiasi organizzazione.
  @Validator()
  public async getOrgAdmins() {
    await this.Ctx.Auth.checkAuthorization("ADMIN.getOrgAdmins", "TOKEN");
    return await this.Ctx.Admin.getAllOrgAdmins();
  }
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array in formato JSON contenente oggetti orgId e userId.
Esempio di valore restituito:
{
    "admins": [
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin1"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin2"
        }
    ]
}
addTokenAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async addTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization('ADMIN.addAdmin', 'TOKEN');
    return await this.Ctx.Admin.addAdmin(org_id, user_id);
}
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Token Admin del codice concatenato.
Esempio di valore restituito:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: User1)"}
removeTokenAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async removeTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization('ADMIN.removeAdmin', 'TOKEN');
    return await this.Ctx.Admin.removeAdmin(org_id, user_id);
}
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Token Admin del codice concatenato.
Esempio di valore restituito:
{"msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: User1)"}
isTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è Token Admin, altrimenti restituisce false. Un Token Admin, Token Auditor, qualsiasi Org Admin o qualsiasi Org Auditor può chiamare questa funzione su qualsiasi altro utente della rete blockchain. Altri utenti possono chiamare questo metodo solo sui propri account.
@Validator(yup.string(), yup.string())
  public async isTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.isUserTokenAdmin", "TOKEN");
    return await this.Ctx.Auth.isUserTokenAdmin(org_id, user_id);
  }
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Il metodo restituisce true se il chiamante è Token Admin, altrimenti restituisce false.
getAllTokenAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Token Admin del codice concatenato. Questo metodo può essere chiamato solo dall'indirizzo Token Admin o Token Auditor del codice concatenato.
@Validator()
public async getAllTokenAdmins() {
    await this.Ctx.Auth.checkAuthorization('ADMIN.getAllAdmins', 'TOKEN');
    return await this.Ctx.Admin.getAllAdmins();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array admins in formato JSON contenente oggetti orgId e userId.
Esempio di valore restituito:
{"admins":[{"org_id":"Org1MSP","user_id":"admin"}]}
addOrgAdmin
Questo metodo aggiunge un utente come Org Admin dell'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
@Validator(yup.string(), yup.string())
  public async addOrgAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.addOrgAdmin", "TOKEN", { org_id });
    return await this.Ctx.Admin.addOrgAdmin(org_id, user_id);
  }
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
Questo metodo rimuove un utente come Org Admin dell'organizzazione. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
@Validator(yup.string(), yup.string())
  public async removeOrgAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.removeOrgAdmin", "TOKEN", { org_id });
    return await this.Ctx.Admin.removeOrgAdmin(org_id, user_id);
  }
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
getOrgAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Org Admin di un'organizzazione. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, qualsiasi Org Admin o qualsiasi Org Auditor.
  @Validator()
  public async getOrgAdmins() {
    await this.Ctx.Auth.checkAuthorization("ADMIN.getOrgAdmins", "TOKEN");
    return await this.Ctx.Admin.getAllOrgAdmins();
  }
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array in formato JSON contenente oggetti orgId e userId.
Esempio di valore restituito:
{
    "admins": [
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin1"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin2"
        }
    ]
}
addTokenAuditor
Questo metodo aggiunge un utente come Token Auditor del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
public async addTokenAuditor(org_id: string, user_id: string)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Token Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "cd81f6c4c9e7c18ece357dbf5c139ef66ef2d6566be3b14de5f6d0a3fd4bb2f0",
        "payload": {
            "msg": "Successfully added Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20009",
        "blockNumber": 196
    }
}
removeTokenAuditor
Questo metodo rimuove un utente come Token Auditor del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
public async removeTokenAuditor(org_id: string, user_id: string)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Token Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "a886a6040fbc76374a3c78c89ab0ffc9f7b8391cc5239b169bf3b878cf40c67b",
        "payload": {
            "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 219
    }
}
getTokenAuditors
Questo metodo restituisce tutti i valori Token Auditors del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor del codice concatenato.
public async getTokenAuditors()
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "payload": {
            "auditors": [
                {
                    "org_id": "CB",
                    "user_id": "auditor_user_cb"
                }
            ]
        },
        "encode": "JSON"
    }
}
addOrgAuditor
Questo metodo aggiunge un utente come Org Auditor del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
public async addOrgAuditor(org_id: string, user_id: string)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "44bbad35a1478cb714e32f7cfd551897868a203520aab9cea5771d3aadc1cf03",
        "payload": {
            "msg": "Successfully added Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20009",
        "blockNumber": 198
    }
}
removeOrgAuditor
Questo metodo rimuove un utente come Org Auditor del codice concatenato. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
public async removeOrgAuditor(org_id: string, user_id: string)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "c3bc720461004a53b37c68d4bb264858b88d980bc093a0a3ebb62a32974fb306",
        "payload": {
            "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 221
    }
}
getOrgAuditors
Questo metodo restituisce tutti i valori Org Auditors del codice concatenato. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor.
public async getOrgAuditors()
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "payload": {
            "auditors": [
                {
                    "org_id": "FI1",
                    "user_id": "auditor_user_fi1"
                },
                {
                    "org_id": "FI2",
                    "user_id": "auditor_user_fi2"
                }
            ]
        },
        "encode": "JSON"
    }
}

Metodi per la gestione della configurazione token

init
Questo metodo viene richiamato quando il codice concatenato viene distribuito o aggiornato. Ogni Token Admin è identificato dalle informazioni user_id e org_id nel parametro obbligatorio adminList. user_id è il nome utente o l'ID e-mail del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza. org_id è l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Qualsiasi utente Token Admin può aggiungere e rimuovere altri utenti Token Admin chiamando i metodi addAdmin e removeAdmin.
public async init(adminList: TokenAdminAsset[]) {
    await this.Ctx.Admin.initAdmin(adminList);
    return;
}
Parametri:
  • adminList array: array di informazioni {user_id, org_id} che specifica la lista di amministratori di token. L'array adminList è un parametro obbligatorio.
Esempio di parametro, CLI macOS e CLI Linux:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
Esempio di parametro, CLI Microsoft Windows:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Esempio di parametro, console di Oracle Blockchain Platform:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
initialize<Token Name>Token
Questo metodo crea un token e inizializza le proprietà del token. L'asset e le relative proprietà vengono salvati nel database di stato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(Digicur)
    public async initializeDigicurToken(token_asset: Digicur) {
        await this.Ctx.Auth.checkAuthorization('TOKEN.save', 'TOKEN');
        return await this.Ctx.Token.save(token_asset)
    }
Parametri:
  • asset <Token Class>: l'asset token viene passato come parametro a questo metodo. Le proprietà dell'asset token possono variare e sono descritte nel file di specifica del token. Non includere parametri contrassegnati come di sola lettura nel file di specifica.

    È possibile specificare il parametro asset in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Visual Studio Code: utilizzare la GUI per passare i singoli parametri corrispondenti ai campi della classe di token.

    CLI / Postman: passa una stringa JSON serializzata che include i campi di specifica del token, come mostrato nell'esempio seguente.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Restituisce:
  • In caso di operazione riuscita, una rappresentazione JSON dell'asset token creato.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 1000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
update<Token Name>Token
Questo metodo aggiorna le proprietà del token. Dopo la creazione di un asset token, è possibile aggiornare solo la proprietà token_desc e le proprietà personalizzate. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(Digicur)
public async updateDigicurToken(token_asset: Digicur) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.update', 'TOKEN');
    return await this.Ctx.Token.update(token_asset);
}
Parametri:
  • asset <Token Class>: l'asset token viene passato come parametro a questo metodo. Le proprietà dell'asset token possono variare e sono descritte nel file di specifica del token. Non includere parametri contrassegnati come di sola lettura nel file di specifica.

    È possibile specificare il parametro asset in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Visual Studio Code: utilizzare la GUI per passare i singoli parametri corrispondenti ai campi della classe di token.

    CLI / Postman: passa una stringa JSON serializzata che include i campi di specifica del token, come mostrato nell'esempio seguente.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Restituisce:
  • Una volta completata, una rappresentazione JSON aggiornata dell'asset token.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_desc": "Digital Currency equiv of dollar",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 1000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
getTokenDecimals
Questo metodo restituisce il numero di posizioni decimali configurate per un token frazionario. Se il comportamento divisible non è stato specificato per il token, il valore predefinito è 0. Questo metodo può essere chiamato solo da un Token Admin o Org Admin del codice concatenato.
@Validator(yup.string())
public async getTokenDecimals(token_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Auth.checkAuthorization('TOKEN.getDecimals', 'TOKEN');
    return {
        msg: `Token Id: ${token_id} has ${this.Ctx.Token.getDecimals(token_asset)} decimal places.`
    };
}
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che mostra il numero di posizioni decimali del token.
Esempio di valore restituito:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
getTokenById
Questo metodo restituisce un oggetto token se è presente nel database di stato. Questo metodo può essere chiamato solo da un Token Admin o da un Org Admin del codice concatenato.
@Validator(yup.string())
public async getTokenById(token_id: string) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.get', 'TOKEN');
    const token = await this.getTokenObject(token_id);
    return token;
}
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta l'asset token.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_desc": "Digital Currency equiv of dollar",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
        "burner_role_name": "burner",
        "notary_role_name": "notary"
    },
    "mintable": {
        "max_mint_quantity": 2000
    },
    "divisible": {
        "decimal": 1
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
getTokenHistory
Questo metodo restituisce la cronologia del token per un ID token specificato. Qualsiasi utente può chiamare questo metodo.
  @Validator(yup.string())
  public async getTokenHistory(tokenId: string) {
    await this.Ctx.Auth.checkAuthorization("TOKEN.getTokenHistory", "TOKEN");
    return await this.Ctx.Token.history(tokenId);
  }
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta la cronologia del token.
Esempio di valore restituito:

[
    {
        "trxId": "0d75f09446a60088afb948c6aca046e261fddcd43df416076201cdc5565f1a35",
        "timeStamp": "2023-09-01T16:48:41.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_desc": "updatedDesc",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    },
    {
        "trxId": "3666344878b043b65d5b821cc79c042ba52aec467618800df5cf14eac69f72fa",
        "timeStamp": "2023-08-31T20:24:55.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    }
]
getAllTokens
Questo metodo restituisce tutti i token memorizzati nel database di stato. Questo metodo può essere chiamato solo da un Token Admin o da un Org 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.
@Validator()
public async getAllTokens() {
    await this.Ctx.Auth.checkAuthorization('TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.Token.getAllTokens();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta tutti gli asset token.
getTokensByName
Questo metodo restituisce tutti gli oggetti token con un nome specificato. Questo metodo può essere chiamato solo da un Token Admin o Org 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.
@Validator(yup.string())
public async getTokensByName(token_name: string) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.getTokensByName', 'TOKEN');
    return await this.Ctx.Token.getTokensByName(token_name);
}
Parametri:
  • token_name: string: il nome dei token da recuperare. Il nome corrisponde alla proprietà token_name nel file di specifica. Il valore è il nome della classe del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON di tutti gli asset token corrispondenti al nome.
init
Questo metodo viene richiamato quando il codice concatenato viene distribuito o aggiornato. Ogni Token Admin è identificato dalle informazioni user_id e org_id nel parametro obbligatorio adminList. user_id è il nome utente o l'ID e-mail del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza. org_id è l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Qualsiasi utente Token Admin può aggiungere e rimuovere altri utenti Token Admin chiamando i metodi addAdmin e removeAdmin.
public async init(adminList: TokenAdminAsset[]) {
    await this.Ctx.Admin.initAdmin(adminList);
    return;
}
Parametri:
  • adminList array: array di informazioni {user_id, org_id} che specifica la lista di amministratori di token. L'array adminList è un parametro obbligatorio.
Esempio di parametro, CLI macOS e CLI Linux:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
Esempio di parametro, CLI Microsoft Windows:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Esempio di parametro, console di Oracle Blockchain Platform:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
initialize<Token Name>Token
Questo metodo crea un token e inizializza le proprietà del token. L'asset e le relative proprietà vengono salvati nel database di stato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(Digicur)
    public async initializeDigicurToken(token_asset: Digicur) {
        await this.Ctx.Auth.checkAuthorization('TOKEN.save', 'TOKEN');
        return await this.Ctx.Token.save(token_asset)
    }
Parametri:
  • asset <Token Class>: l'asset token viene passato come parametro a questo metodo. Le proprietà dell'asset token possono variare e sono descritte nel file di specifica del token. Non includere parametri contrassegnati come di sola lettura nel file di specifica.

    È possibile specificare il parametro asset in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Visual Studio Code: utilizzare la GUI per passare i singoli parametri corrispondenti ai campi della classe di token.

    CLI / Postman: passa una stringa JSON serializzata che include i campi di specifica del token, come mostrato nell'esempio seguente.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Restituisce:
  • In caso di operazione riuscita, una rappresentazione JSON dell'asset token creato.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 1000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
update<Token Name>Token
Questo metodo aggiorna le proprietà del token. Dopo la creazione di un asset token, è possibile aggiornare solo la proprietà token_desc e le proprietà personalizzate. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(Digicur)
public async updateDigicurToken(token_asset: Digicur) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.update', 'TOKEN');
    return await this.Ctx.Token.update(token_asset);
}
Parametri:
  • asset <Token Class>: l'asset token viene passato come parametro a questo metodo. Le proprietà dell'asset token possono variare e sono descritte nel file di specifica del token. Non includere parametri contrassegnati come di sola lettura nel file di specifica.

    È possibile specificare il parametro asset in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Visual Studio Code: utilizzare la GUI per passare i singoli parametri corrispondenti ai campi della classe di token.

    CLI / Postman: passa una stringa JSON serializzata che include i campi di specifica del token, come mostrato nell'esempio seguente.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Restituisce:
  • Una volta completata, una rappresentazione JSON aggiornata dell'asset token.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_desc": "Digital Currency equiv of dollar",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 1000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
getTokenDecimals
Questo metodo restituisce il numero di posizioni decimali configurate per un token frazionario. Se il comportamento divisible non è stato specificato per il token, il valore predefinito è 0. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor.
@Validator(yup.string())
public async getTokenDecimals(token_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Auth.checkAuthorization('TOKEN.getDecimals', 'TOKEN');
    return {
        msg: `Token Id: ${token_id} has ${this.Ctx.Token.getDecimals(token_asset)} decimal places.`
    };
}
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che mostra il numero di posizioni decimali del token.
Esempio di valore restituito:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
getTokenById
Questo metodo restituisce un oggetto token se è presente nel database di stato. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor.
@Validator(yup.string())
public async getTokenById(token_id: string) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.get', 'TOKEN');
    const token = await this.getTokenObject(token_id);
    return token;
}
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta l'asset token.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_desc": "Digital Currency equiv of dollar",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
        "burner_role_name": "burner",
        "notary_role_name": "notary"
    },
    "mintable": {
        "max_mint_quantity": 2000
    },
    "divisible": {
        "decimal": 1
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
getTokenHistory
Questo metodo restituisce la cronologia del token per un ID token specificato. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor.
  @Validator(yup.string())
  public async getTokenHistory(tokenId: string) {
    await this.Ctx.Auth.checkAuthorization("TOKEN.getTokenHistory", "TOKEN");
    return await this.Ctx.Token.history(tokenId);
  }
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta la cronologia del token.
Esempio di valore restituito:

[
    {
        "trxId": "0d75f09446a60088afb948c6aca046e261fddcd43df416076201cdc5565f1a35",
        "timeStamp": "2023-09-01T16:48:41.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_desc": "updatedDesc",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    },
    {
        "trxId": "3666344878b043b65d5b821cc79c042ba52aec467618800df5cf14eac69f72fa",
        "timeStamp": "2023-08-31T20:24:55.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    }
]
getAllTokens
Questo metodo restituisce tutti i token memorizzati nel database di stato. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
@Validator()
public async getAllTokens() {
    await this.Ctx.Auth.checkAuthorization('TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.Token.getAllTokens();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che rappresenta tutti gli asset token.
getTokensByName
Questo metodo restituisce tutti gli oggetti token con un nome specificato. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
@Validator(yup.string())
public async getTokensByName(token_name: string) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.getTokensByName', 'TOKEN');
    return await this.Ctx.Token.getTokensByName(token_name);
}
Parametri:
  • token_name: string: il nome dei token da recuperare. Il nome corrisponde alla proprietà token_name nel file di specifica. Il valore è il nome della classe del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON di tutti gli asset token corrispondenti al nome.

Metodi per la gestione degli account

createAccount
Questo metodo crea un account per un utente e un token specificati. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. I conti tengono traccia dei saldi, dei saldi in sospeso e della cronologia delle transazioni. Un ID account è un set alfanumerico di caratteri, preceduto da oaccount~<token asset name>~ e seguito da un hash del nome utente o dell'ID e-mail (user_id) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza, l'ID del provider di servizi di appartenenza (org_id) dell'utente nell'organizzazione di rete corrente. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
  @Validator(yup.string(), yup.string(), yup.string())
  public async createAccount(org_id: string, user_id: string, token_type: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.createAccount", "TOKEN", { org_id });
    return await this.Ctx.Account.createAccount(org_id, user_id, token_type);
  }
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • token_type: string: il tipo di token, che deve essere fungible.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dell'account creato. Il parametro bapAccountVersion è definito nell'oggetto account per uso interno.
Esempio di valore restituito:
{
  "assetType": "oaccount",
  "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
  "bapAccountVersion": 0,
  "user_id": "admin",
  "org_id": "Org1MSP",
  "token_type": "fungible",
  "token_id": "",
  "token_name": "",
  "balance": 0,
  "onhold_balance": 0
}
associateTokenToAccount
Questo metodo associa un token fungibile a un account. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione pertinente.
  @Validator(yup.string(), yup.string())
  public async associateTokenToAccount(account_id: string, token_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.associateToken", "TOKEN", { account_id });
    return await this.Ctx.Account.associateToken(account_id, token_id);
  }
Parametri:
  • account_id: string – L'ID dell'account.
  • token_id: string: l'ID del token.
Restituisce:
  • Una volta completato, un oggetto JSON dell'account aggiornato. Il parametro bapAccountVersion è definito nell'oggetto account per uso interno.
Esempio di valore restituito:
{
    "assetType": "oaccount",
    "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
    "bapAccountVersion": 0,
    "user_id": "admin",
    "org_id": "Org1MSP",
    "token_type": "fungible",
    "token_id": "fungible",
    "token_name": "fiatmoneytok",
    "balance": 0,
    "onhold_balance": 0
}
getAccount
Questo metodo restituisce i dettagli dell'account per un utente e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
@Validator(yup.string(), yup.string(), yup.string())
public async getAccount(token_id: string, org_id: string, user_id: string) {
  const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
  await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccount", "TOKEN", { account_id });
  return await this.Ctx.Account.getAccountWithStatus(account_id);
}
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto account JSON che include le seguenti proprietà:
  • account_id: l'ID dell'account utente.
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • token_id: l'ID del token.
  • token_name: il nome del token.
  • balance: il saldo corrente del conto.
  • onhold_balance – Il saldo corrente del conto.
  • bapAccountVersion: parametro dell'oggetto account per uso interno.
  • status: lo stato corrente dell'account utente.
Esempio di valore restituito:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "user_id": "idcqa",
  "org_id": "appdev",
  "token_type": "fungible",
  "token_id": "t1",
  "token_name": "obptok",
  "balance": 0,
  "onhold_balance": 0
}
getAccountHistory
Questo metodo restituisce i dettagli della cronologia dell'account per un utente e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountHistory(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.history", "TOKEN", { account_id });
    return await this.Ctx.Account.history(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un array di oggetti account JSON che include le proprietà riportate di seguito.
  • trxId: l'ID transazione della transazione restituito dal libro contabile.
  • timeStamp – Il tempo della transazione.
  • value: stringa JSON dell'oggetto account.
Esempio di valore restituito:
[
    {
      "trxId":"2gsdh17fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":100,
         "onhold_balance":0,
         "bapAccountVersion": 1
   },
   {
      "trxId":"9fd07fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":0,
         "onhold_balance":0,
         "bapAccountVersion": 0
      }
   }
]
getAccountOnHoldBalance
Questo metodo restituisce il saldo in sospeso corrente per un conto e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountOnHoldBalance(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountOnHoldBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountOnHoldBalance(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, una rappresentazione JSON del saldo in sospeso corrente.
Esempio di valore restituito:
{"msg":"Total Holding Balance is: 0","holding_balance":0}
getAllAccounts
Questo metodo restituisce un elenco di tutti i conti. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
@Validator()
public async getAllAccounts() {
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.Account.getAllAccounts();
}
Parametri:
  • nessuno
Restituisce:
  • Al successo, un array JSON di tutti gli account.
getUserByAccountId
Questo metodo restituisce i dettagli utente (org_id e user_id) per un account specificato. Questo metodo può essere chiamato da qualsiasi utente del codice concatenato.
@Validator(yup.string())
public async getUserByAccountId(account_id: string) {
    return await this.Ctx.Account.getUserByAccountId(account_id);
}
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dei dettagli utente (org_id, token_id e user_id).
Esempio di valore restituito:
{
    "token_id": "digiCurr101",
    "user_id": "user1",
    "org_id": "Org1MSP"
}
getAccountBalance
Questo metodo restituisce il saldo corrente per un conto e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountBalance(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountBalance(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, una rappresentazione JSON del saldo del conto corrente.
Esempio di valore restituito:
{"msg":"Current Balance is: 0","user_balance":0}
getAllOrgAccounts
Questo metodo restituisce un elenco di tutti i conti token appartenenti a un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
  @Validator(yup.string())
  public async getAllOrgAccounts(org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAllOrgAccounts", "TOKEN", { org_id });
    return await this.Ctx.Account.getAllOrgAccounts(org_id);
  }
Parametri:
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli account per l'organizzazione specificata.
Esempio di valore restituito:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "user_id": "idcqa",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    },
    {
        "key": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
            "user_id": "example_minter",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    }
]
createAccount
Questo metodo crea un account per un utente e un token specificati. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. I conti tengono traccia dei saldi, dei saldi in sospeso e della cronologia delle transazioni. Un ID account è un set alfanumerico di caratteri, preceduto da oaccount~<token asset name>~ e seguito da un hash del nome utente o dell'ID e-mail (user_id) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza, l'ID del provider di servizi di appartenenza (org_id) dell'utente nell'organizzazione di rete corrente. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
@Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())

public async createAccount(org_id: string, user_id: string, token_type: string, daily_limits: DailyLimits) {
await this.Ctx.Auth.checkAuthorization("ACCOUNT.createAccount", "TOKEN", { org_id });
return await this.Ctx.Account.createAccount(org_id, user_id, token_type, daily_limits);
}
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • token_type: string: il tipo di token, che deve essere fungible.
  • daily_limits: JSON: oggetto che specifica la quantità massima di token che è possibile utilizzare nelle transazioni giornaliere (max_daily_amount) e il numero massimo di transazioni che è possibile completare quotidianamente (max_daily_transactions).

    È possibile specificare il parametro daily_limits in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Codice Visual Studio: { "max_daily_amount": 1000, "max_daily_transactions": 100 }

    CLI / Postman: "{\"max_daily_amount\":1000,\"max_daily_transactions\":100}"

Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dell'account creato. Il parametro bapAccountVersion è definito nell'oggetto account per uso interno.
Esempio di valore restituito:
{
  "assetType": "oaccount",
  "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
  "bapAccountVersion": 0,
  "user_id": "admin",
  "org_id": "Org1MSP",
  "token_type": "fungible",
  "token_id": "",
  "token_name": "",
  "balance": 0,
  "onhold_balance": 0,
  "onhold_burn_balance": 0,
  "max_daily_amount": 1000,
  "max_daily_transactions": 100
}
associateTokenToAccount
Questo metodo associa un token fungibile a un account. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione pertinente.
  @Validator(yup.string(), yup.string())
  public async associateTokenToAccount(account_id: string, token_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.associateToken", "TOKEN", { account_id });
    return await this.Ctx.Account.associateToken(account_id, token_id);
  }
Parametri:
  • account_id: string – L'ID dell'account.
  • token_id: string: l'ID del token.
Restituisce:
  • Una volta completato, un oggetto JSON dell'account aggiornato. Il parametro bapAccountVersion è definito nell'oggetto account per uso interno.
Esempio di valore restituito:
{
    "assetType": "oaccount",
    "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
    "bapAccountVersion": 0,
    "user_id": "admin",
    "org_id": "Org1MSP",
    "token_type": "fungible",
    "token_id": "fungible",
    "token_name": "fiatmoneytok",
    "balance": 0,
    "onhold_balance": 0
}
getAccount
Questo metodo restituisce i dettagli dell'account per un utente e un token specificati. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor, un Org Admin o Org Auditor dell'organizzazione specificata, o il AccountOwner dell'account.
@Validator(yup.string(), yup.string(), yup.string())
public async getAccount(token_id: string, org_id: string, user_id: string) {
  const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
  await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccount", "TOKEN", { account_id });
  return await this.Ctx.Account.getAccountWithStatus(account_id);
}
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto account JSON che include le seguenti proprietà:
  • account_id: l'ID dell'account utente.
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • token_id: l'ID del token.
  • token_name: il nome del token.
  • balance: il saldo corrente del conto.
  • onhold_balance – Il saldo corrente del conto.
  • bapAccountVersion: parametro dell'oggetto account per uso interno.
  • status: lo stato corrente dell'account utente.
Esempio di valore restituito:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "user_id": "idcqa",
  "org_id": "appdev",
  "token_type": "fungible",
  "token_id": "t1",
  "token_name": "obptok",
  "balance": 0,
  "onhold_balance": 0
}
getAccountHistory
Questo metodo restituisce i dettagli della cronologia dell'account per un utente e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountHistory(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.history", "TOKEN", { account_id });
    return await this.Ctx.Account.history(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un array di oggetti account JSON che include le proprietà riportate di seguito.
  • trxId: l'ID transazione della transazione restituito dal libro contabile.
  • timeStamp – Il tempo della transazione.
  • value: stringa JSON dell'oggetto account.
Esempio di valore restituito:
[
    {
      "trxId":"2gsdh17fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":100,
         "onhold_balance":0,
         "bapAccountVersion": 1
   },
   {
      "trxId":"9fd07fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":0,
         "onhold_balance":0,
         "bapAccountVersion": 0
      }
   }
]
getAccountOnHoldBalance
Questo metodo restituisce il saldo in sospeso corrente per un conto e un token specificati. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor, un Org Admin o Org Auditor dell'organizzazione specificata, o il AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountOnHoldBalance(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountOnHoldBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountOnHoldBalance(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, una rappresentazione JSON del saldo in sospeso corrente.
Esempio di valore restituito:
{"msg":"Total Holding Balance is: 0","holding_balance":0}
getAllAccounts
Questo metodo restituisce un elenco di tutti i conti. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
@Validator()
public async getAllAccounts() {
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.Account.getAllAccounts();
}
Parametri:
  • nessuno
Restituisce:
  • Al successo, un array JSON di tutti gli account.
getUserByAccountId
Questo metodo restituisce i dettagli utente (org_id e user_id) per un account specificato. Questo metodo può essere chiamato da un Token Admin o Token Auditor, o da un Org Admin o Org Auditor dell'organizzazione specificata.
@Validator(yup.string())
public async getUserByAccountId(account_id: string) {
    return await this.Ctx.Account.getUserByAccountId(account_id);
}
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dei dettagli utente (org_id, token_id e user_id).
Esempio di valore restituito:
{
    "token_id": "digiCurr101",
    "user_id": "user1",
    "org_id": "Org1MSP"
}
getAccountBalance
Questo metodo restituisce il saldo corrente per un conto e un token specificati. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor, un Org Admin o Org Auditor dell'organizzazione specificata, o il AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountBalance(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountBalance(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, una rappresentazione JSON del saldo del conto corrente.
Esempio di valore restituito:
{"msg":"Current Balance is: 0","user_balance":0}
getAllOrgAccounts
Questo metodo restituisce un elenco di tutti i conti token appartenenti a un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor, o da un Org Admin o Org Auditor dell'organizzazione specificata.
  @Validator(yup.string())
  public async getAllOrgAccounts(org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAllOrgAccounts", "TOKEN", { org_id });
    return await this.Ctx.Account.getAllOrgAccounts(org_id);
  }
Parametri:
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli account per l'organizzazione specificata.
Esempio di valore restituito:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "user_id": "idcqa",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    },
    {
        "key": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
            "user_id": "example_minter",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    }
]

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 o da un Org Admin dell'organizzazione specificata che detiene anche il ruolo specificato.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async addRole(token_id: string, role: string, org_id: string, user_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.addRoleMember", "TOKEN", { token_id, org_id, role });
    return await this.Ctx.Token.addRoleMember(role, account_id, token_asset);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da aggiungere all'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg":"Successfully added role 'minter' to Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
removeRole
Questo metodo rimuove un ruolo da un utente e da un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata che detiene anche il ruolo specificato.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async removeRole(token_id: string, role: string, org_id: string, user_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.removeRoleMember", "TOKEN", { token_id, org_id, role });
    return await this.Ctx.Token.removeRoleMember(role, account_id, token_asset);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da rimuovere dall'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg":"Successfully removed role 'minter' from Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Questo metodo restituisce un elenco di tutti gli ID account per un ruolo e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async getAccountsByRole(token_id: string, role: string) {
   await this.Ctx.Auth.checkAuthorization('ROLE.getAccountsByRole', 'TOKEN');
   return await this.Ctx.Role.getAccountsByRole(token_id, role);
}
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • Una volta completato, un array JSON di ID account.
Esempio di valore restituito:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getAccountsByUser
Questo metodo restituisce un elenco di tutti gli ID account per un ID organizzazione e un ID utente specificati. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato, dal Org Admin dell'organizzazione specificata, o dal Account Owner specificato nei parametri.
  @Validator(yup.string(), yup.string())
  public async getAccountsByUser(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountsByUser", "TOKEN", { org_id, user_id });
    return await this.Ctx.Account.getAccountsByUser(org_id, user_id);
  }
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, un array JSON di ID account.
Esempio di valore restituito:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getUsersByRole
Questo metodo restituisce un elenco di tutti gli utenti per un ruolo e un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async getUsersByRole(token_id: string, role: string) {
    await this.Ctx.Auth.checkAuthorization('ROLE.getUsersByRole', 'TOKEN');
    return await this.Ctx.Role.getUsersByRole(token_id, role);
}
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON degli oggetti utente (org_id, token_id e user_id).
Esempio di valore restituito:
{"users":[{"token_id":"digiCurr101","user_id":"user1","org_id":"Org1MSP"}]}
isInRole
Questo metodo restituisce un valore booleano per indicare se un utente e un token hanno un ruolo specificato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato, il AccountOwner dell'account o un Org Admin dell'organizzazione specificata.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async isInRole(token_id: string, org_id: string, user_id: string, role: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.isInRole", "TOKEN", { account_id });
    return { result: await this.Ctx.Token.isInRole(role, account_id, token_asset) };
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON del risultato booleano.
Esempio di valore restituito:
{"result":"false"}
getOrgAccountsByRole
Questo metodo restituisce informazioni su tutti i conti con un ruolo specificato in un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
   @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgAccountsByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgAccountsByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgAccountsByRole(token_id, role, org_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti i clienti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
getOrgUsersByRole
Questo metodo restituisce informazioni su tutti gli utenti con un ruolo specificato in un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgUsersByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgUsersByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgUsersByRole(token_id, role, org_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli utenti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "users": [
        {
            "token_id": "token",
            "user_id": "admin",
            "org_id": "Org1MSP"
        },
        {
            "token_id": "token",
            "user_id": "orgAdmin",
            "org_id": "Org1MSP"
        }
    ]
}
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 o da un Org Admin dell'organizzazione specificata che detiene anche il ruolo specificato.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async addRole(token_id: string, role: string, org_id: string, user_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.addRoleMember", "TOKEN", { token_id, org_id, role });
    return await this.Ctx.Token.addRoleMember(role, account_id, token_asset);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da aggiungere all'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg":"Successfully added role 'minter' to Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
removeRole
Questo metodo rimuove un ruolo da un utente e da un token specificati. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata che detiene anche il ruolo specificato.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async removeRole(token_id: string, role: string, org_id: string, user_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.removeRoleMember", "TOKEN", { token_id, org_id, role });
    return await this.Ctx.Token.removeRoleMember(role, account_id, token_asset);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da rimuovere dall'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg":"Successfully removed role 'minter' from Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Questo metodo restituisce un elenco di tutti gli ID account per un ruolo e un token specificati. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor.
@Validator(yup.string(), yup.string())
public async getAccountsByRole(token_id: string, role: string) {
   await this.Ctx.Auth.checkAuthorization('ROLE.getAccountsByRole', 'TOKEN');
   return await this.Ctx.Role.getAccountsByRole(token_id, role);
}
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • Una volta completato, un array JSON di ID account.
Esempio di valore restituito:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getAccountsByUser
Questo metodo restituisce un elenco di tutti gli ID account per un ID organizzazione e un ID utente specificati. Questo metodo può essere chiamato solo da Token Admin o Token Auditor, da Org Admin o Org Auditor dell'organizzazione specificata, o da Account Owner specificato nei parametri.
  @Validator(yup.string(), yup.string())
  public async getAccountsByUser(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountsByUser", "TOKEN", { org_id, user_id });
    return await this.Ctx.Account.getAccountsByUser(org_id, user_id);
  }
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, un array JSON di ID account.
Esempio di valore restituito:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getUsersByRole
Questo metodo restituisce un elenco di tutti gli utenti per un ruolo e un token specificati. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor.
@Validator(yup.string(), yup.string())
public async getUsersByRole(token_id: string, role: string) {
    await this.Ctx.Auth.checkAuthorization('ROLE.getUsersByRole', 'TOKEN');
    return await this.Ctx.Role.getUsersByRole(token_id, role);
}
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON degli oggetti utente (org_id, token_id e user_id).
Esempio di valore restituito:
{"users":[{"token_id":"digiCurr101","user_id":"user1","org_id":"Org1MSP"}]}
isInRole
Questo metodo restituisce un valore booleano per indicare se un utente e un token hanno un ruolo specificato. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor, il AccountOwner dell'account, o un Org Admin o Org Auditor dell'organizzazione specificata.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async isInRole(token_id: string, org_id: string, user_id: string, role: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.isInRole", "TOKEN", { account_id });
    return { result: await this.Ctx.Token.isInRole(role, account_id, token_asset) };
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON del risultato booleano.
Esempio di valore restituito:
{"result":"false"}
getOrgAccountsByRole
Questo metodo restituisce informazioni su tutti i conti con un ruolo specificato in un'organizzazione specificata. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor.
   @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgAccountsByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgAccountsByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgAccountsByRole(token_id, role, org_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti i clienti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
getOrgUsersByRole
Questo metodo restituisce informazioni su tutti gli utenti con un ruolo specificato in un'organizzazione specificata. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor, da un Org Admin o Org Auditor dell'organizzazione specificata.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgUsersByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgUsersByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgUsersByRole(token_id, role, org_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli utenti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "users": [
        {
            "token_id": "token",
            "user_id": "admin",
            "org_id": "Org1MSP"
        },
        {
            "token_id": "token",
            "user_id": "orgAdmin",
            "org_id": "Org1MSP"
        }
    ]
}

Metodi per gestione cronologia transazioni

getAccountTransactionHistory
Questo metodo restituisce un array di dettagli della cronologia delle transazioni conto per un utente e un token specificati. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
 @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountTransactionHistory(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistory", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountTransactionHistory(account_id, org_id, user_id.toLowerCase());
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un array di oggetti transazione account JSON che include le proprietà riportate di seguito.
  • transaction_id: l'ID della transazione.
  • transacted_account – Il conto con cui è avvenuta la transazione.
  • transaction_type: tipo di transazione.
  • transacted_amount: l'importo della transazione.
  • timestamp – Il tempo della transazione.
  • balance – Il saldo del conto al momento della transazione.
  • onhold_balance – Il saldo in sospeso al momento della transazione.
  • token_id: l'ID del token.
  • holding_id: identificativo univoco restituito dal metodo holdTokens.
Esempio di valore restituito:
[
    {
        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
        "transacted_amount": 20,
        "timestamp": "2021-08-17T06:04:24.000Z",
        "balance": 930,
        "onhold_balance": 0,
        "token_id": "digiCurr101",
        "transaction_type": "BULKTRANSFER",
        "sub_transactions": [
            {
                "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "transaction_type": "DEBIT",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
                "transacted_amount": 10
            },
            {
                "transacted_account": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
                "transaction_type": "DEBIT",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
                "transacted_amount": 10
            }
        ]
    },
    {
        "transaction_id": "otransaction~757864d5369bd0539d044caeb3bb4898db310fd7aa740f45a9938771903d43da",
        "transacted_amount": 50,
        "timestamp": "2021-08-17T06:02:44.000Z",
        "balance": 950,
        "onhold_balance": 0,
        "token_id": "digiCurr101",
        "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
        "transaction_type": "DEBIT"
    }
]
getAccountTransactionHistoryWithFilters
Questo metodo restituisce un array di dettagli della cronologia delle transazioni conto per un utente e un token specificati. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account. Questo metodo può essere chiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
  @Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())
  public async getAccountTransactionHistoryWithFilters(token_id: string, org_id: string, user_id: string, filters?: Filters) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFilters", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id, org_id, user_id.toLowerCase(), filters);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio:

ochain invoke GetAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
  {
    "transaction_id": "otransaction~672897b5a4fa78b421c000e4d6d4f71f3d46529bfbb5b4be10bf5471dc35ce89",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:46:04.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
    "transaction_type": "DEBIT",
    "balance": 90,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~467bb67a33aaffca4487f33dcd46c9844efdb5421a2e7b6aa2d53152eb2c6d85",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:45:47.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
    "transaction_type": "DEBIT",
    "balance": 95,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~c6d56ce54a9bbe24597d1d10448e39316dc6f16328bf3c5b0c8ef10e1dfeb397",
    "transacted_amount": 100,
    "timestamp": "2022-04-20T15:44:26.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~deb5fb0906c40506f6c2d00c573b774e01a53dd91499e651d92ac4778b6add6a",
    "transaction_type": "MINT",
    "balance": 100,
    "onhold_balance": 0
  }
]
getSubTransactionsById
Questo metodo restituisce un array di dettagli della cronologia delle transazioni conto per un utente e un token specificati. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato o dal AccountOwner dell'account.
  @Validator(yup.string())
  public async getSubTransactionsById(transaction_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getSubTransactionsById", "TOKEN", { transaction_id });
    return await this.Ctx.Account.getSubTransactionsById(transaction_id);
  }
Parametri:
  • transaction_id: string: l'ID della transazione di trasferimento di massa.
Restituisce:
  • Array di oggetti transazione secondaria conto in formato JSON per un ID transazione trasferimento di massa specificato.
Esempio:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 80,
        "onhold_balance": 0
    },
    {
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 85,
        "onhold_balance": 0
    }
]
getSubTransactionsByIdWithFilters
Questo metodo restituisce un array di dettagli della cronologia delle transazioni secondarie conto per una transazione specificata.
  @Validator(yup.string(), yup.object().nullable())
  public async getSubTransactionsByIdWithFilters(transaction_id: string, filters?: SubTransactionFilters) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getSubTransactionsByIdWithFilters", "TOKEN", { transaction_id });
    return await this.Ctx.Account.getSubTransactionsByIdWithFilters(transaction_id, filters);
  } 
Parametri:
  • transaction_id: string: l'ID della transazione.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Restituisce:
  • Array di oggetti transazione secondaria conto in formato JSON per un ID transazione trasferimento di massa specificato.
Esempio:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
  {
    "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:52:21.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
    "transaction_type": "DEBIT",
    "balance": 80,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:52:21.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
    "transaction_type": "DEBIT",
    "balance": 85,
    "onhold_balance": 0
  }
]
getTransactionById
Questo metodo restituisce la cronologia di un asset Transaction.
@Validator(yup.string())
    public async getTransactionById(transaction_id: string) {
        return await this.Ctx.Transaction.getTransactionById(transaction_id);
    }
Parametri:
  • transaction_id string: l'ID dell'asset transazione.
Restituisce:
  • Una volta completata la transazione, un array JSON della cronologia.
Esempio di valore restituito:
{
    "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
    "history": [
        {
            "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
            "timeStamp": 1629180264,
            "value": {
                "assetType": "otransaction",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                "token_id": "digiCurr101",
                "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                "to_account_id": "",
                "transaction_type": "BULKTRANSFER",
                "amount": 20,
                "timestamp": "2021-08-17T06:04:24.000Z",
                "number_of_sub_transactions": 2,
                "holding_id": ""
            }
        }
    ],
    "sub_transactions": [
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        },
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        }
    ]
}
deleteHistoricalTransactions
Questo metodo elimina le transazioni meno recenti dal database di stato.
@Validator(yup.date())
    public async deleteHistoricalTransactions(time_to_expiration: Date) {
        await this.Ctx.Auth.checkAuthorization('TRANSACTION.deleteTransactions', 'TOKEN');
        return await this.Ctx.Transaction.deleteTransactions(time_to_expiration);
    }
Parametri:
  • time_to_expiration Date: indicatore orario che indica quando eliminare le transazioni. I cespiti transazione precedenti all'ora specificata verranno eliminati.
Esempio di valore restituito:
"payload": {
    "msg": "Successfuly deleted transaction older than date: Thu Aug 19 2021 11:19:36 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
        "otransaction~ec3366dd48b4ce2838f820f2f138648e6e55a07226713e59b411ff31b0d21058"
    ]
}
getAccountTransactionHistoryWithFiltersFromRichHistDB
È possibile sincronizzare i dati nel database della cronologia avanzata e quindi recuperare i dati utilizzando le chiamate API del codice concatenato. Questo metodo recupera la cronologia delle transazioni dal database della cronologia avanzata. Prima di poter utilizzare questo metodo, è necessario eseguire Oracle Autonomous Database con Oracle REST Data Services (ORDS) e OAuth abilitati, come descritto in Oracle Database View Definitions for Wholesale CBDC in Oracle Blockchain Platform Digital Assets Edition.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.object().nullable())
public async getAccountTransactionHistoryWithFiltersFromRichHistDB(token_id: string, org_id: string, user_id: string, custom_endpoint: string, bearer_token: string, filters?: Filters) {
const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFilters", "TOKEN", { account_id });
return await this.Ctx.Account.getAccountTrxHistoryWithFiltersFromRichHistDB(account_id, org_id, user_id.toLowerCase(), custom_endpoint, bearer_token, filters);
}
Parametri:
  • token_id: string: l'ID del token da zecca.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • custom_endpoint: endpoint del servizio RESTful del database della cronologia RTF.
  • bearer_token: token di autorizzazione di accesso per l'endpoint del servizio RESTful.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
getAccountTransactionHistory
Questo metodo restituisce un array di dettagli della cronologia delle transazioni conto per un utente e un token specificati. Questo metodo può essere chiamato solo da Token Admin o Token Auditor, un Org Admin o Org Auditor dell'organizzazione specificata, o il AccountOwner dell'account.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string())
public async getAccountTransactionHistory(token_id: string, org_id: string, user_id: string) {
const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistory", "TOKEN", { account_id });
return await this.Ctx.Account.getAccountTransactionHistory(account_id, org_id, user_id.toLowerCase());
}
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Esempio di valore restituito:
[
            {
                "transaction_id": "otransaction~64c5a4830949eae1424600f3d4a438c6f603a7c3ea31a68e374b899803999e22",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:37:28.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REJECT_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~a4537ef34a955b023b7c205b9abf06a6c79e4fdd761fb24f41b8eb34126b66c0",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:32.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "APPROVE_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~6237a759422bd9fb112742e8cd7e6450df5a74a32236d9b1005571afed8904a4",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:18.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~06b35071415d74aa1a7c18449149c937d886cae76a832c44cf8d98e84586e76e",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:35:46.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            }
 ]
getAccountTransactionHistoryWithFilters
Questo metodo restituisce un array filtrato di dettagli della cronologia delle transazioni account per un utente e un token specificati. Questo metodo può essere chiamato solo da Token Admin o Token Auditor, un Org Admin o Org Auditor dell'organizzazione specificata, o il AccountOwner dell'account.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())
public async getAccountTransactionHistoryWithFilters(token_id: string, org_id: string, user_id: string, filters?: Filters) {
const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFilters", "TOKEN", { account_id });
return await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id, org_id, user_id.toLowerCase(), filters);
}
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio di valore restituito:
[
            {
                "transaction_id": "otransaction~64c5a4830949eae1424600f3d4a438c6f603a7c3ea31a68e374b899803999e22",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:37:28.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REJECT_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~a4537ef34a955b023b7c205b9abf06a6c79e4fdd761fb24f41b8eb34126b66c0",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:32.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "APPROVE_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~6237a759422bd9fb112742e8cd7e6450df5a74a32236d9b1005571afed8904a4",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:18.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~06b35071415d74aa1a7c18449149c937d886cae76a832c44cf8d98e84586e76e",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:35:46.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            }
 ]
getSubTransactionsById
Questo metodo restituisce un array di dettagli della cronologia delle transazioni conto per un utente e un token specificati. Questo metodo può essere chiamato solo da Token Admin, Token Auditor o AccountOwner che ha chiamato la transazione.
  @Validator(yup.string())
  public async getSubTransactionsById(transaction_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getSubTransactionsById", "TOKEN", { transaction_id });
    return await this.Ctx.Account.getSubTransactionsById(transaction_id);
  }
Parametri:
  • transaction_id: string: l'ID della transazione di trasferimento di massa.
Restituisce:
  • Array di oggetti transazione secondaria conto in formato JSON per un ID transazione trasferimento di massa specificato.
Esempio:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 80,
        "onhold_balance": 0
    },
    {
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 85,
        "onhold_balance": 0
    }
]
getSubTransactionsByIdWithFilters
Questo metodo restituisce un array di dettagli della cronologia delle transazioni secondarie conto per una transazione specificata.
  @Validator(yup.string(), yup.object().nullable())
  public async getSubTransactionsByIdWithFilters(transaction_id: string, filters?: SubTransactionFilters) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getSubTransactionsByIdWithFilters", "TOKEN", { transaction_id });
    return await this.Ctx.Account.getSubTransactionsByIdWithFilters(transaction_id, filters);
  } 
Parametri:
  • transaction_id: string: l'ID della transazione.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Restituisce:
  • Array di oggetti transazione secondaria conto in formato JSON per un ID transazione trasferimento di massa specificato.
Esempio:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
  {
    "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:52:21.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
    "transaction_type": "DEBIT",
    "balance": 80,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:52:21.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
    "transaction_type": "DEBIT",
    "balance": 85,
    "onhold_balance": 0
  }
]
getTransactionById
Questo metodo restituisce la cronologia di un asset Transaction. Questo metodo può essere chiamato solo da un Token Admin o Token Auditor, da un Org Admin o Org Auditor dell'organizzazione specificata, o da un partecipante alla transazione (mittente, destinatario o notaio).
@Validator(yup.string())
    public async getTransactionById(transaction_id: string) {
        return await this.Ctx.Transaction.getTransactionById(transaction_id);
    }
Parametri:
  • transaction_id string: l'ID dell'asset transazione.
Restituisce:
  • Una volta completata la transazione, un array JSON della cronologia.
Esempio di valore restituito:
{
    "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
    "history": [
        {
            "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
            "timeStamp": 1629180264,
            "value": {
                "assetType": "otransaction",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                "token_id": "digiCurr101",
                "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                "to_account_id": "",
                "transaction_type": "BULKTRANSFER",
                "amount": 20,
                "timestamp": "2021-08-17T06:04:24.000Z",
                "number_of_sub_transactions": 2,
                "holding_id": ""
            }
        }
    ],
    "sub_transactions": [
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        },
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        }
    ]
}
deleteHistoricalTransactions
Questo metodo elimina le transazioni meno recenti dal database di stato.
@Validator(yup.date())
    public async deleteHistoricalTransactions(time_to_expiration: Date) {
        await this.Ctx.Auth.checkAuthorization('TRANSACTION.deleteTransactions', 'TOKEN');
        return await this.Ctx.Transaction.deleteTransactions(time_to_expiration);
    }
Parametri:
  • time_to_expiration Date: indicatore orario che indica quando eliminare le transazioni. I cespiti transazione precedenti all'ora specificata verranno eliminati.
Esempio di valore restituito:
"payload": {
    "msg": "Successfuly deleted transaction older than date: Thu Aug 19 2021 11:19:36 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
        "otransaction~ec3366dd48b4ce2838f820f2f138648e6e55a07226713e59b411ff31b0d21058"
    ]
}

Metodi per la gestione del comportamento dei token - Comportamento minimo

issueTokens
Questo metodo estrae i token, che sono quindi di proprietà del chiamante del metodo. Il chiamante deve avere un account e il ruolo minore. Il numero di token che è possibile coniare è limitato dalla proprietà max_mint_quantity del comportamento mintable nel file di specifica. Se la proprietà max_mint_quantity non viene specificata, è possibile coniare un numero illimitato di token. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato solo dal AccountOwner dell'account con il ruolo minore.
@Validator(yup.string(), yup.number().positive())
public async issueTokens(token_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.mint(quantity, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • quantity: il numero di token da identificare.
Restituisce:
  • In caso di successo, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{
    "msg": "Successfully minted 1000 tokens to Account Id: \
oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: user1)  ",
}
getTotalMintedTokens
Questo metodo restituisce il numero totale di token coniati per un token specificato. Questo metodo può essere chiamato solo da un Token Admin o da qualsiasi Org Admin del codice concatenato.
@Validator(yup.string())
 public async getTotalMintedTokens(token_id: string) {
     const token_asset = await this.getTokenObject(token_id);
     await this.Ctx.Auth.checkAuthorization('TOKEN.getTotalMintedTokens', 'TOKEN');
     const totalMintedTokens = await this.Ctx.Token.getTotalMintedTokens(token_asset);
     return {
         msg: `Total minted token for Token Id: ${token_id} is ${totalMintedTokens} tokens.`,
         quantity: totalMintedTokens
     };
 }
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il numero totale di token.
Esempio di valore restituito:
{"msg":"Total minted token for Token Id: digiCurr101 is 100 tokens.","quantity":100}
getNetTokens
Questo metodo restituisce il numero netto totale di token disponibili nel sistema per un token specificato. Il totale token netto è la quantità di token rimanenti dopo la masterizzazione dei token. In forma di equazione: token netti = token coniati totali - token bruciati totali. Se non vengono bruciati token, il numero di token netti è uguale al totale dei token coniati. Questo metodo può essere chiamato solo da un Token Admin o da qualsiasi Org Admin del codice concatenato.
@Validator(yup.string())
public async getNetTokens(token_id: string) {
	const token_asset = await this.getTokenObject(token_id);
	await this.Ctx.Auth.checkAuthorization('TOKEN.getNetTokens', 'TOKEN');
	const netTokens = await this.Ctx.Token.getNetTokens(token_asset);
	return {
		msg: `Net supply of token for Token Id: ${token_id} is ${netTokens} tokens.`,
		quantity: netTokens
	};
}
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il numero netto di token.
Esempio di valore restituito:
{"msg":"Net supply of token for Token Id: digiCurr101 is 0 tokens.","quantity":0}
requestMint
Questo metodo può essere chiamato da un minter per inviare una richiesta al notaio minore per creare una quantità specificata di token.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date(), yup.object().nullable())
public async requestMint( token_id: string, operation_id: string, notary_org_id: string, notary_user_id: string, quantity: number, time_to_expiration: Date, info_details?: InfoDetails) {

const token_asset = await this.getTokenObject(token_id);
const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
return await this.Ctx.Token.hold(operation_id, null, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.MINT, info_details);

}
Parametri:
  • token_id: string: l'ID del token da zecca.
  • operation_id: string: l'ID operazione univoco che rappresenta la richiesta mint.
  • notary_org_id: string – L'ID MSP (Membership Service Provider) del notaio minore che elaborerà la richiesta.
  • notary_user_id: string – Il nome utente o l'ID e-mail del notaio minore che elaborerà la richiesta.
  • quantity: number: la quantità di token da mint.
  • time_to_expiration – Il tempo dopo il quale la richiesta di conio scade e non è più valida.
  • info_details: JSON: un oggetto che specifica la categoria (category) e la descrizione (description) della richiesta.

    È possibile specificare il parametro info_details in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Codice Visual Studio: { "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Esempio di valore restituito:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) has successfully submitted request to mint 100 tokens",
}
approveMint
Questo metodo può essere chiamato da un notaio minore per approvare una richiesta di conio.
@Validator(yup.string(), yup.string())
public async approveMint(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.executeHold(operation_id, token_asset);
}
Parametri:
  • token_id: string: l'ID del token da zecca.
  • operation_id: string: l'ID operazione univoco che rappresenta la richiesta mint.
Esempio di valore restituito:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
rejectMint
Questo metodo può essere chiamato da un notaio minore per rifiutare una richiesta di conio.
@Validator(yup.string(), yup.string())
public async rejectMint(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.releaseHold(operation_id, token_asset);
}
Parametri:
  • token_id: string: l'ID del token da zecca.
  • operation_id: string: l'ID operazione univoco che rappresenta la richiesta mint.
Esempio di valore restituito:
{
 msg: "Successfully rejected mint request with Operation Id 'operation1' to mint 100 tokens of token id token"
}
issueTokens
Questo metodo estrae i token, che sono quindi di proprietà del chiamante del metodo.
@Validator(yup.string(), yup.number().positive(), yup.object().nullable())
public async issueTokens(token_id: string, quantity: number, info_details?: InfoDetails) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.mint(quantity, token_asset, info_details);
}
Parametri:
  • token_id: string: l'ID del token.
  • quantity: il numero di token da identificare.
  • info_details: JSON: un oggetto che specifica la categoria (category) e la descrizione (description) della richiesta.

    È possibile specificare il parametro info_details in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Codice Visual Studio: { "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Esempio di valore restituito:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
getTotalMintedTokens
Questo metodo restituisce il numero totale di token coniati per un token specificato. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor.
@Validator(yup.string())
 public async getTotalMintedTokens(token_id: string) {
     const token_asset = await this.getTokenObject(token_id);
     await this.Ctx.Auth.checkAuthorization('TOKEN.getTotalMintedTokens', 'TOKEN');
     const totalMintedTokens = await this.Ctx.Token.getTotalMintedTokens(token_asset);
     return {
         msg: `Total minted token for Token Id: ${token_id} is ${totalMintedTokens} tokens.`,
         quantity: totalMintedTokens
     };
 }
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il numero totale di token.
Esempio di valore restituito:
{"msg":"Total minted token for Token Id: digiCurr101 is 100 tokens.","quantity":100}
getNetTokens
Questo metodo restituisce il numero netto totale di token disponibili nel sistema per un token specificato. Il totale token netto è la quantità di token rimanenti dopo la masterizzazione dei token. In forma di equazione: token netti = token coniati totali - token bruciati totali. Se non vengono bruciati token, il numero di token netti è uguale al totale dei token coniati. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin o Org Auditor.
@Validator(yup.string())
public async getNetTokens(token_id: string) {
	const token_asset = await this.getTokenObject(token_id);
	await this.Ctx.Auth.checkAuthorization('TOKEN.getNetTokens', 'TOKEN');
	const netTokens = await this.Ctx.Token.getNetTokens(token_asset);
	return {
		msg: `Net supply of token for Token Id: ${token_id} is ${netTokens} tokens.`,
		quantity: netTokens
	};
}
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il numero netto di token.
Esempio di valore restituito:
{"msg":"Net supply of token for Token Id: digiCurr101 is 0 tokens.","quantity":0}

Metodi per la gestione del comportamento dei token - comportamento trasferibile

transferTokens
Questo metodo trasferisce i token dal chiamante a un account specificato. Il chiamante del metodo deve avere un account. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
@Validator(yup.string(), yup.string(), yup.string(), yup.number().positive())
public async transferTokens(token_id: string, to_org_id: string, to_user_id: string, quantity: number) {
   const token_asset = await this.getTokenObject(token_id);
   const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
   return await this.Ctx.Token.transfer(to_account_id, quantity, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • to_org_id: string - L'ID del fornitore di servizi di appartenenza (MSP) del destinatario (beneficiario) nell'organizzazione corrente.
  • to_user_id: string: il nome utente o l'ID e-mail del destinatario.
  • quantity: number: il numero di token da trasferire.
Restituisce:
  • In caso di successo, un messaggio con dettagli sia per i conti del responsabile pagamento che per quelli del beneficiario.
Esempio di valore restituito:
{
    "msg": "Successfully transferred 400 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: user1) to account id: oaccount~digicur~682bb71de419602af74e3f226345ef308445ca51010737900c112435f676152df (Org-Id: Org1MSP, User-Id: user2) ",
}
bulkTransferTokens
Questo metodo trasferisce i token in blocco dal conto chiamante ai conti specificati nell'oggetto flow. Le quantità devono essere comprese nei valori decimali specificati dal parametro decimal del comportamento divisible nel chiamante specifica file.The di questo metodo devono avere un conto già creato. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
@Validator(yup.string(), yup.array().of(yup.object()))
public async bulkTransferTokens(token_id: string, flow: object[]) {
     const token_asset = await this.getTokenObject(token_id);
     return await this.Ctx.Token.bulkTransfer(flow, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • flow : object[]: array di oggetti JSON che specificano ricevitori e quantità.
    • to_orgId: string - L'ID MSP (Membership Service Provider) del destinatario nell'organizzazione corrente.
    • userId: string: il nome utente o l'ID e-mail del destinatario.
    • quantity: number: il numero di token da trasferire.
    È possibile specificare il parametro flow in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.
    Visual Studio Code:
    [
      { "to_org_id": "Org1MSP", "to_user_id": "user1", "quantity": 10 },
      { "to_org_id": "Org1MSP", "to_user_id": "user2", "quantity": 10 }
    ]
    
    CLI / Postman:
    "[{ \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user1\", \"quantity\": 10 }, { \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user2\", \"quantity\": 10 }]"
Restituisce:
  • Messaggio che indica successo.
Esempio di valore restituito:
{
    "msg": "Successfully transferred 20 tokens from Account Id           'oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df' (Org-Id: Org1MSP, User-Id: admin).",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "sub_transactions": [
        {
            "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
            "amount": 10
        },
        {
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
            "amount": 10
        }
    ]
}
transferTokens
Questo metodo trasferisce i token dal chiamante a un account specificato.
@Validator(yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.object().nullable())
public async transferTokens(token_id: string, to_org_id: string, to_user_id: string, quantity: number, info_details?: InfoDetails) {
const token_asset = await this.getTokenObject(token_id);
const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
return await this.Ctx.Token.transfer(to_account_id, quantity, token_asset, info_details);
}
Parametri:
  • token_id: string: l'ID del token.
  • to_org_id: string - L'ID del fornitore di servizi di appartenenza (MSP) del destinatario (beneficiario) nell'organizzazione corrente.
  • to_user_id: string: il nome utente o l'ID e-mail del destinatario.
  • quantity: number: il numero di token da trasferire.
  • info_details: JSON: un oggetto che specifica la categoria (category) e la descrizione (description) della richiesta.

    È possibile specificare il parametro info_details in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Codice Visual Studio: { "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Esempio di valore restituito:
{
 msg: "Successfully transferred 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) to account id: oaccount~7yuijg39b4e1e4136dd86a806020c97a930909325340481b8fdhjklliugbv699 (Org-Id: Org1MSP, User-Id: user)",
}
bulkTransferTokens
Questo metodo trasferisce i token in blocco dal conto chiamante ai conti specificati nell'oggetto flow. Le quantità devono essere comprese nei valori decimali specificati dal parametro decimal del comportamento divisible nel chiamante specifica file.The di questo metodo devono avere un conto già creato. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
@Validator(yup.string(), yup.array().of(yup.object()))
public async bulkTransferTokens(token_id: string, flow: object[]) {
     const token_asset = await this.getTokenObject(token_id);
     return await this.Ctx.Token.bulkTransfer(flow, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • flow : object[]: array di oggetti JSON che specificano ricevitori e quantità.
    • to_orgId: string - L'ID MSP (Membership Service Provider) del destinatario nell'organizzazione corrente.
    • userId: string: il nome utente o l'ID e-mail del destinatario.
    • quantity: number: il numero di token da trasferire.
    È possibile specificare il parametro flow in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.
    Visual Studio Code:
    [
      { "to_org_id": "Org1MSP", "to_user_id": "user1", "quantity": 10 },
      { "to_org_id": "Org1MSP", "to_user_id": "user2", "quantity": 10 }
    ]
    
    CLI / Postman:
    "[{ \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user1\", \"quantity\": 10 }, { \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user2\", \"quantity\": 10 }]"
Restituisce:
  • Messaggio che indica successo.
Esempio di valore restituito:
{
    "msg": "Successfully transferred 20 tokens from Account Id           'oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df' (Org-Id: Org1MSP, User-Id: admin).",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "sub_transactions": [
        {
            "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
            "amount": 10
        },
        {
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
            "amount": 10
        }
    ]
}

Metodi per la gestione del comportamento dei token - comportamento bloccabile

holdTokens
Questo metodo crea un blocco per conto del proprietario dei token con l'account to_account_id. Viene specificato un conto notarile, che è responsabile del completamento o del rilascio del blocco. Quando viene creato il blocco, il saldo del token specificato dal responsabile pagamento viene bloccato. Impossibile trasferire un saldo bloccato finché il blocco non viene completato o rilasciato. Per il chiamante di questo metodo deve essere già stato creato un account. Questo metodo può essere chiamato solo dal AccountOwner dell'account.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date())
public async holdTokens(
    token_id: string,
    operation_id: string,
    to_org_id: string,
    to_user_id: string,
    notary_org_id: string,
    notary_user_id: string,
    quantity: number,
    time_to_expiration: Date
) {
    const token_asset = await this.getTokenObject(token_id);
    const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
    const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
    return await this.Ctx.Token.hold(operation_id, to_account_id, notary_account_id, quantity, time_to_expiration, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • to_org_id: string - L'ID MSP (Membership Service Provider) del destinatario nell'organizzazione corrente.
  • to_user_id: string: il nome utente o l'ID e-mail del destinatario.
  • notary_org_id: string – L'ID MSP (Membership Service Provider) del notaio nell'organizzazione corrente.
  • notary_user_id: string – Il nome utente o l'ID e-mail del notaio.
  • quantity: number: il numero di token da mettere in attesa.
  • time_to_expiration: l'ora di scadenza del blocco. Specificare 0 per un blocco permanente. In alternativa utilizzare il formato RFC-3339. Ad esempio, 2021-06-02T12:46:06Z.
Restituisce:
  • In caso di successo, un messaggio con l'account del chiamante e i dettagli del blocco.
Esempio di valore restituito:
{
  "msg":"AccountId oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP , User-Id: admin) is   successfully holding 10 tokens"
}
executeHoldTokens
Questo metodo completa il blocco di un token. Una quantità di token precedentemente detenuti da un proprietario di token viene trasferita a un ricevente. Se il valore quantity è inferiore al valore di blocco effettivo, l'importo rimanente sarà nuovamente disponibile per il proprietario originale dei token. Questo metodo può essere richiamato solo dall'ID AccountOwner con il ruolo notary per l'ID operazione specificato. La presa può essere completata solo dal notaio.
@Validator(yup.string(), yup.string(), yup.number().positive())
public async executeHoldTokens(token_id: string, operation_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.executeHold(operation_id, quantity, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • quantity: number: il numero di token in sospeso da trasferire.
Restituisce:
  • In caso di operazione riuscita, un messaggio con l'ID conto del chiamante e la quantità della transazione.
Esempio di valore restituito:
{
 "msg":"Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin) is successfully executed '10' tokens from Operation Id 'opr_121'."
}
releaseHoldTokens
Questo metodo rilascia un blocco sui token. Il trasferimento non è stato completato e tutti i token bloccati sono di nuovo disponibili per il proprietario originale. Questo metodo può essere richiamato dall'ID AccountOwner con il ruolo notary entro il limite di tempo specificato o dal responsabile pagamento, dal beneficiario o dal notaio dopo il limite di tempo specificato.
@Validator(yup.string(), yup.string())
public async releaseHoldTokens(token_id: string, operation_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.releaseHold(operation_id, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di esito positivo, viene visualizzato un messaggio che indica che il blocco è stato rilasciato.
Esempio di valore restituito:
{
 "msg":"Successfully released '10' tokens from Operation Id 'opr_121' to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: user1)."
}
getOnHoldIds
Questo metodo restituisce un elenco di tutti gli ID azienda per un conto specificato. Questo metodo può essere chiamato da un Token Admin del codice concatenato, un Org Admin dell'organizzazione specificata, o il AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOnHoldIds(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getOnHoldIds", "TOKEN", { account_id });
    return await this.Ctx.Account.getOnHoldIds(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, un elenco JSON di ID in sospeso.
Esempio di valore restituito:
{"msg":"Holding Ids are: ohold~digicur~digiCurr101~opr_121","holding_ids":["ohold~digicur~digiCurr101~opr_121"]}
getOnHoldDetailsWithOperationId
Questo metodo restituisce i dettagli della transazione in sospeso per un ID operazione e un token specificati. Questo metodo può essere chiamato da chiunque.
@Validator(yup.string(), yup.string())
public async getOnHoldDetailsWithOperationId(token_id: string, operation_id: string) {
    return await this.Ctx.Hold.getOnHoldDetailsWithOperationId(token_id, operation_id);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON contiene le proprietà riportate di seguito.
  • holding_id – L'ID di deposito della transazione.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • from_account_id: l'ID account del proprietario corrente dei token in sospeso.
  • to_account_id: l'ID del conto del destinatario.
  • notary_account_id – L'ID account del notaio.
  • token_id: string: l'ID del token salvato.
  • quantity: la quantità di token in sospeso per l'ID holding.
  • time_to_expiration: la durata fino alla scadenza del blocco.
Esempio di valore restituito:
{
    "assetType": "ohold",
    "holding_id": "ohold~digicur~digiCurr101~opr_121",
    "operation_id": "opr_121",
    "token_name": "digicur",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "notary_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "token_id": "digiCurr101",
    "quantity": 10,
    "time_to_expiration": "2022-08-01T18:30:00.000Z"
}
getOnHoldBalanceWithOperationId
Questo metodo restituisce il saldo in sospeso per un ID operazione e un token specificati. Questo metodo può essere chiamato da chiunque.
@Validator(yup.string(), yup.string())
public async getOnHoldBalanceWithOperationId(token_id: string, operation_id: string) {
    return await this.Ctx.Hold.getOnHoldBalanceWithOperationId(token_id, operation_id);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il saldo del blocco.
Esempio di valore restituito:
{
	"msg": "Current Holding Balance of Operation 'opr_121' for token 'digiCurr101' is: 10",
	"holding_balance": 10
}
holdTokens
Questo metodo crea un blocco per conto del proprietario dei token con l'account to_account_id.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date(), yup.object().nullable())
  public async holdTokens( token_id: string, operation_id: string, to_org_id: string, to_user_id: string, notary_org_id: string, notary_user_id: string, quantity: number, time_to_expiration: Date, info_details?: InfoDetails) {
    const token_asset = await this.getTokenObject(token_id);
    const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
    const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
    return await this.Ctx.Token.hold(operation_id, to_account_id, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.TRANSFER, info_details);
  }
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • to_org_id: string - L'ID MSP (Membership Service Provider) del destinatario nell'organizzazione corrente.
  • to_user_id: string: il nome utente o l'ID e-mail del destinatario.
  • notary_org_id: string – L'ID MSP (Membership Service Provider) del notaio nell'organizzazione corrente.
  • notary_user_id: string – Il nome utente o l'ID e-mail del notaio.
  • quantity: number: il numero di token da mettere in attesa.
  • time_to_expiration: l'ora di scadenza del blocco. Specificare 0 per un blocco permanente. In alternativa utilizzare il formato RFC-3339. Ad esempio, 2021-06-02T12:46:06Z.
  • info_details: JSON: un oggetto che specifica la categoria (category) e la descrizione (description) della richiesta.

    È possibile specificare il parametro info_details in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Codice Visual Studio: { "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Esempio di valore restituito:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) is successfully holding 100 tokens",
}
executeHoldTokens
Questo metodo completa il blocco di un token. Una quantità di token precedentemente detenuti da un proprietario di token viene trasferita a un ricevente. Se il valore quantity è inferiore al valore di blocco effettivo, l'importo rimanente sarà nuovamente disponibile per il proprietario originale dei token. Questo metodo può essere richiamato solo dall'ID AccountOwner con il ruolo notary per l'ID operazione specificato. La presa può essere completata solo dal notaio.
@Validator(yup.string(), yup.string(), yup.number().positive())
public async executeHoldTokens(token_id: string, operation_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.executeHold(operation_id, quantity, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • quantity: number: il numero di token in sospeso da trasferire.
Restituisce:
  • In caso di operazione riuscita, un messaggio con l'ID conto del chiamante e la quantità della transazione.
Esempio di valore restituito:
{
 "msg":"Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin) is successfully executed '10' tokens from Operation Id 'opr_121'."
}
releaseHoldTokens
Questo metodo rilascia un blocco sui token. Il trasferimento non è stato completato e tutti i token bloccati sono di nuovo disponibili per il proprietario originale. Questo metodo può essere richiamato dall'ID AccountOwner con il ruolo notary entro il limite di tempo specificato o dal responsabile pagamento, dal beneficiario o dal notaio dopo il limite di tempo specificato.
@Validator(yup.string(), yup.string())
public async releaseHoldTokens(token_id: string, operation_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.releaseHold(operation_id, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di esito positivo, viene visualizzato un messaggio che indica che il blocco è stato rilasciato.
Esempio di valore restituito:
{
 "msg":"Successfully released '10' tokens from Operation Id 'opr_121' to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: user1)."
}
getOnHoldIds
Questo metodo restituisce un elenco di tutti gli ID azienda per un conto specificato. Questo metodo può essere chiamato da un Token Admin o Token Auditor del codice concatenato, un Org Admin o Org Auditor dell'organizzazione specificata, o il AccountOwner dell'account.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOnHoldIds(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getOnHoldIds", "TOKEN", { account_id });
    return await this.Ctx.Account.getOnHoldIds(account_id);
  }
Parametri:
  • token_id: string: l'ID del token.
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, un elenco JSON di ID in sospeso.
Esempio di valore restituito:
{"msg":"Holding Ids are: ohold~digicur~digiCurr101~opr_121","holding_ids":["ohold~digicur~digiCurr101~opr_121"]}
getOnHoldDetailsWithOperationId
Questo metodo restituisce i dettagli della transazione in sospeso per un ID operazione e un token specificati. Questo metodo può essere chiamato da un Token Admin o Token Auditor del codice concatenato o da un partecipante alla transazione (mittente, destinatario, notaio).
@Validator(yup.string(), yup.string())
public async getOnHoldDetailsWithOperationId(token_id: string, operation_id: string) {
    return await this.Ctx.Hold.getOnHoldDetailsWithOperationId(token_id, operation_id);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON contiene le proprietà riportate di seguito.
  • holding_id – L'ID di deposito della transazione.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • from_account_id: l'ID account del proprietario corrente dei token in sospeso.
  • to_account_id: l'ID del conto del destinatario.
  • notary_account_id – L'ID account del notaio.
  • token_id: string: l'ID del token salvato.
  • quantity: la quantità di token in sospeso per l'ID holding.
  • time_to_expiration: la durata fino alla scadenza del blocco.
Esempio di valore restituito:
{
    "assetType": "ohold",
    "holding_id": "ohold~digicur~digiCurr101~opr_121",
    "operation_id": "opr_121",
    "token_name": "digicur",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "notary_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "token_id": "digiCurr101",
    "quantity": 10,
    "time_to_expiration": "2022-08-01T18:30:00.000Z"
}
getOnHoldBalanceWithOperationId
Questo metodo restituisce il saldo in sospeso per un ID operazione e un token specificati. Questo metodo può essere chiamato da un Token Admin o Token Auditor del codice concatenato o da un partecipante alla transazione (mittente, destinatario, notaio).
@Validator(yup.string(), yup.string())
public async getOnHoldBalanceWithOperationId(token_id: string, operation_id: string) {
    return await this.Ctx.Hold.getOnHoldBalanceWithOperationId(token_id, operation_id);
}
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, una stringa JSON che indica il saldo del blocco.
Esempio di valore restituito:
{
	"msg": "Current Holding Balance of Operation 'opr_121' for token 'digiCurr101' is: 10",
	"holding_balance": 10
}

Metodi per la gestione del comportamento dei token - comportamento masterizzabile

burnTokens
Questo metodo disattiva o brucia i token dall'account del chiamante della transazione. Il chiamante di questo metodo deve avere un account e il ruolo di bruciatore. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Questo metodo può essere chiamato dal AccountOwner dell'account con il ruolo di masterizzatore.
@Validator(yup.string(), yup.number().positive())
public async burnTokens(token_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.burn(quantity, token_asset);
}
Parametri:
  • token_id: string: l'ID del token.
  • quantity: il numero di token da masterizzare.
Restituisce:
  • Al successo, un messaggio di successo con la quantità di token bruciati e l'ID account.
Esempio di valore restituito:
{
    "msg": "Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}
requestBurn
Questo metodo può essere chiamato da un bruciatore per inviare una richiesta al notaio del bruciatore per distruggere una determinata quantità di token, che deve essere inferiore o uguale al loro saldo disponibile. Quando viene avviata una richiesta di masterizzazione, l'importo specificato viene immediatamente detratto dal saldo disponibile e aggiunto al campo onhold_burn_balance. Se la richiesta viene approvata, i token vengono masterizzati. Se la richiesta viene rifiutata, i token vengono restituiti dal campo onhold_burn_balance al saldo disponibile.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date(), yup.object().nullable())

public async requestBurn( token_id: string, operation_id: string, notary_org_id: string, notary_user_id: string, quantity: number, time_to_expiration: Date, info_details?: InfoDetails ) {

const token_asset = await this.getTokenObject(token_id);
const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
return await this.Ctx.Token.hold(operation_id, null, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.BURN, null, description);
}
Parametri:
  • token_id: string: l'ID del token da masterizzare.
  • operation_id: string: l'ID operazione univoco che rappresenta la richiesta di masterizzazione.
  • notary_org_id: string – L'ID MSP (Membership Service Provider) del notaio bruciatore che elaborerà la richiesta.
  • notary_user_id: string – Il nome utente o l'ID email del notaio del masterizzatore che elaborerà la richiesta.
  • quantity: number: la quantità di token da bruciare.
  • time_to_expiration – Il tempo trascorso il quale la richiesta di masterizzazione scade e non è più valida.
  • info_details: JSON: un oggetto che specifica la categoria (category) e la descrizione (description) della richiesta.

    È possibile specificare il parametro info_details in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Codice Visual Studio: { "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Esempio di valore restituito:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) has successfully submitted request to mint 100 tokens",
}
approveBurn
Questo metodo può essere chiamato da un notaio bruciatore per approvare una richiesta di masterizzazione.
@Validator(yup.string(), yup.string())
public async approveBurn(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.executeHold(operation_id, token_asset);
}
Parametri:
  • token_id: string: l'ID del token da masterizzare.
  • operation_id: string: l'ID operazione univoco che rappresenta la richiesta di masterizzazione.
Esempio di valore restituito:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
rejectBurn
Questo metodo può essere chiamato da un notaio bruciatore per rifiutare una richiesta di masterizzazione.
@Validator(yup.string(), yup.string())
public async rejectBurn(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.releaseHold(operation_id, token_asset);
}
Parametri:
  • token_id: string: l'ID del token da masterizzare.
  • operation_id: string: l'ID operazione univoco che rappresenta la richiesta di masterizzazione.
Esempio di valore restituito:
{
 msg: "Successfully rejected burn request with Operation Id 'operation1' to burn 100 tokens of token id token",
}
getAccountOnHoldBurnBalance
Questo metodo restituisce il saldo di masterizzazione in sospeso per un utente specificato. Questo metodo può essere chiamato solo da Token Admin, Token Auditor, Org Admin, Org Auditor, o dal proprietario dell'account.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string())
public async getAccountOnHoldBurnBalance(token_id: string, org_id: string, user_id: string) {
  const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
  await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountOnHoldBurnBalance", "TOKEN", { account_id });
  return await this.Ctx.Account.getAccountOnHoldBurnBalance(account_id);
}
Parametri:
  • token_id: string: l'ID del token da masterizzare.
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Esempio di valore restituito:
{
  "msg": "Total On Hold Burning Balance is: 10",
  "onhold_burn_balance": 10
}
burnTokens
Questo metodo disattiva o brucia i token dall'account del chiamante della transazione.
@Validator(yup.string(), yup.number().positive(), yup.object().nullable())

public async burnTokens(token_id: string, quantity: number, info_details?: InfoDetails) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.burn(quantity, token_asset, info_details);
}
Parametri:
  • token_id: string: l'ID del token.
  • quantity: il numero di token da masterizzare.
  • info_details: JSON: un oggetto che specifica la categoria (category) e la descrizione (description) della richiesta.

    È possibile specificare il parametro info_details in un formato diverso se si utilizza Visual Studio Code rispetto all'interfaccia CLI o a una raccolta Postman.

    Codice Visual Studio: { "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Esempio di valore restituito:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}

Metodi personalizzati

È possibile utilizzare i metodi SDK token per scrivere metodi personalizzati per l'applicazione business.

Per evitare la doppia spesa, non combinare più funzioni asincrone che operano sulle stesse coppie chiave-valore nel database di stato. In alternativa, utilizzare il metodo bulkTransferTokens per eseguire più trasferimenti in un unico metodo.

L'esempio seguente mostra come utilizzare i metodi SDK token nei metodi personalizzati. Quando viene chiamato il metodo buyTicket, trasferisce 20 token dall'account del chiamante all'account del venditore e restituisce il messaggio di transazione del trasferimento.

@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async buyTicket(token_id: string, seller_org_id: string, seller_user_id: string) {
	const token = await this.getTokenObject(token_id);

	/**
	* The following method this.Ctx.Account.generateAccountId(token_id, seller_org_id, seller_user_id) generates account id of the seller.
	*/
	const seller_account_id = await this.Ctx.Account.generateAccountId(token_id, seller_org_id, seller_user_id);

	/**
	* The following method this.Ctx.Token.transfer(seller_account_id, 20, token) transfers the quantity 20 from caller's
	* account & to seller's account.
	*/
	const transaction = await this.Ctx.Token.transfer(seller_account_id, 20, token);

	return transaction;
}

Se si utilizzano più metodi SDK token in un metodo personalizzato, non utilizzare metodi che influiranno sulle stesse coppie chiave-valore nel database di stato. L'esempio seguente mostra il modo errato di effettuare più trasferimenti:

@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async sendTokens(token_id: string, user1_org_id: string, user1_user_id: string, user2_org_id: string, user2_user_id: string) {
    const token = await this.getTokenObject(token_id);
    const user1_account_id = await Account.generateAccountId(token_id, user1_org_id, user1_user_id);
    const user2_account_id = await Account.generateAccountId(token_id, user2_org_id, user2_user_id);
    await token.transfer(user1_account_id, 20);
    await token.transfer(user2_account_id, 30);
}

Utilizzare invece il metodo bulkTransferTokens per eseguire il trasferimento a più account dall'account del chiamante, come mostrato nello snippet di codice riportato di seguito.

bulkTransferTokens(token_id: string, flow: object[])

Nota

Se si utilizzano più metodi SDK token in un metodo personalizzato che potrebbe influire sulle stesse coppie chiave-valore nel database di stato, abilitare l'ottimizzazione MVCC per i codici concatenati token. Per ulteriori informazioni, vedere MVCC Optimization.

Metodi SDK token

Metodi per la gestione del controllo degli accessi

L'SDK token fornisce una funzione di controllo dell'accesso. Alcuni metodi possono essere richiamati solo da Token Admin, Org Admin o AccountOwner del token. È possibile utilizzare questa funzione per garantire che le operazioni vengano eseguite solo dagli utenti destinatari. Qualsiasi accesso non autorizzato comporta un errore. Per utilizzare la funzione di controllo dell'accesso, importare la classe Authorization dal modulo ../lib/auth.
import { Authorization } from '../lib/auth';
addAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato del token.
Ctx.Admin.addAdmin(org_id: string, user_id: string)
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • In caso di operazione riuscita, un messaggio promettente con un oggetto JSON che elenca i dettagli per l'utente aggiunto come Token Admin del codice concatenato del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "msg": "Successfully added Admin (Org_Id: Org1MSP, User_Id: user1)"
}
removeAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato del token.
Ctx.Admin.removeAdmin(org_id: string, user_id: string)
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • In caso di operazione riuscita, un messaggio promessa con un oggetto JSON che elenca i dettagli per l'utente che non è più un Token Admin del codice concatenato del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: user1)"
}
isUserTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è un valore Token Admin. Altrimenti, il metodo restituisce false.
Ctx.Auth.isUserTokenAdmin()
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • Una risposta booleana e un messaggio di errore se si verifica un errore.
getAllAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono Token Admin del codice concatenato del token.
Ctx.Admin.getAllAdmins()
Parametri:
  • nessuno
Restituisce:
  • In caso di successo, una promessa con un oggetto JSON che elenca i dettagli per tutti gli utenti che sono un Token Admin del codice concatenato del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "admins": [
        {
            "orgId": "Org1MSP",
            "userId": "admin"
        }
    ]
}
checkAuthorization
Utilizzare questo metodo per aggiungere un controllo di accesso a un'operazione. Alcuni metodi di token possono essere eseguiti solo da un Token Admin o AccountOwner del token o da MultipleAccountOwner 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.
export const TOKENACCESS = {
  ADMIN: {
    isUserTokenAdmin: ["Admin", "OrgAdmin"],
    addTokenAdmin: ["Admin"],
    removeTokenAdmin: ["Admin"],
    getAllAdmins: ["Admin", "OrgAdmin"],
    addOrgAdmin: ["Admin", "OrgAdminForOrgId"],
    removeOrgAdmin: ["Admin", "OrgAdminForOrgId"],
    getOrgAdmins: ["Admin", "OrgAdmin"],
  },
  TOKEN: {
    save: ["Admin"],
    getAllTokens: ["Admin", "OrgAdmin"],
    get: ["Admin", "OrgAdmin"],
    update: ["Admin"],
    getDecimals: ["Admin", "OrgAdmin"],
    getTokensByName: ["Admin", "OrgAdmin"],
    addRoleMember: ["Admin", "OrgAdminRoleCheck"],
    removeRoleMember: ["Admin", "OrgAdminRoleCheck"],
    isInRole: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getTotalMintedTokens: ["Admin", "OrgAdmin"],
    getNetTokens: ["Admin", "OrgAdmin"],
    getTokenHistory: ["Admin", "OrgAdmin"],
  },
  ROLE: {
    getAccountsByRole: ["Admin"],
    getOrgAccountsByRole: ["Admin", "OrgAdminForOrgId"],
    getUsersByRole: ["Admin"],
    getOrgUsersByRole: ["Admin", "OrgAdminForOrgId"],
  },
  TRANSACTION: {
    deleteTransactions: ["Admin"],
  },ACCOUNT: {
    createAccount: ["Admin", "OrgAdminForOrgId"],
    associateToken: ["Admin", "OrgAdminForAccountId"],
    getAllAccounts: ["Admin"],
    getAllOrgAccounts: ["Admin", "OrgAdminForOrgId"],
    getAccountsByUser: ["Admin", "OrgAdminForOrgId", "MultipleAccountOwner"],
    getAccount: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    history: ["Admin", "AccountOwner"],
    getAccountTransactionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getAccountTransactionHistoryWithFilters: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getSubTransactionsById: ["Admin", "TransactionInvoker"],
    getSubTransactionsByIdWithFilters: ["Admin", "TransactionInvoker"],
    getAccountBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getAccountOnHoldBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getOnHoldIds: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getConversionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
  },
  ACCOUNT_STATUS: {
    get: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    history: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    activateAccount: ["Admin", "OrgAdminForOrgId"],
    suspendAccount: ["Admin", "OrgAdminForOrgId"],
    deleteAccount: ["Admin", "OrgAdminForOrgId"],
  },
  TOKEN_CONVERSION: {
    initializeExchangePoolUser: ["Admin"],
    addConversionRate: ["Admin"],
    updateConversionRate: ["Admin"],
    getConversionRate: ["Admin", "OrgAdmin", "AnyAccountOwner"],
    getConversionRateHistory: ["Admin", "OrgAdmin", "AnyAccountOwner"],
    tokenConversion: ["Admin", "AnyAccountOwner"],
    getExchangePoolUser: ["Admin"],
  },
}
await this.Ctx.Auth.checkAuthorization(<parameters>);
Parametri:
  • classFuncName: string: il valore della mappa tra la classe e i metodi descritto nel file ../lib/constant.ts.
  • ...args: argomento di variabile in cui args[0] accetta la costante 'TOKEN' e args[1] utilizza account_id per aggiungere un controllo dell'accesso per un AccountOwner. Per aggiungere un controllo dell'accesso per un MultipleAccountOwner, args[1] accetta org_id e args[2] accetta user_id.
Restituisce:
  • Una promessa, una promessa. In caso di errore, un rifiuto con un messaggio di errore.
addOrgAdmin
Questo metodo aggiunge un utente come Org Admin dell'organizzazione.
Ctx.Admin.addOrgAdmin(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
Questo metodo rimuove un utente come Org Admin dell'organizzazione.
Ctx.Admin.removeOrgAdmin(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
getOrgAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Org Admin di un'organizzazione.
Ctx.Admin.getAllOrgAdmins()
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array in formato JSON contenente oggetti orgId e userId.
Esempio di valore restituito:
{
    "admins": [
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin1"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin2"
        }
    ]
}
addAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato del token.
Ctx.Admin.addAdmin(org_id: string, user_id: string)
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • In caso di operazione riuscita, un messaggio promettente con un oggetto JSON che elenca i dettagli per l'utente aggiunto come Token Admin del codice concatenato del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "msg": "Successfully added Admin (Org_Id: Org1MSP, User_Id: user1)"
}
removeAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato del token.
Ctx.Admin.removeAdmin(org_id: string, user_id: string)
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • In caso di operazione riuscita, un messaggio promessa con un oggetto JSON che elenca i dettagli per l'utente che non è più un Token Admin del codice concatenato del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: user1)"
}
isUserTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è un valore Token Admin. Altrimenti, il metodo restituisce false.
Ctx.Auth.isUserTokenAdmin()
Parametri:
  • user_id: il nome utente o l'ID e-mail dell'utente.
  • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
Restituisce:
  • Una risposta booleana e un messaggio di errore se si verifica un errore.
getAllAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono Token Admin del codice concatenato del token.
Ctx.Admin.getAllAdmins()
Parametri:
  • nessuno
Restituisce:
  • In caso di successo, una promessa con un oggetto JSON che elenca i dettagli per tutti gli utenti che sono un Token Admin del codice concatenato del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "admins": [
        {
            "orgId": "Org1MSP",
            "userId": "admin"
        }
    ]
}
checkAuthorization
Utilizzare questo metodo per aggiungere un controllo di accesso a un'operazione. Alcuni metodi di token possono essere eseguiti solo da un Token Admin o AccountOwner del token o da MultipleAccountOwner 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.
export const TOKENACCESS = {
  ADMIN: {
    isUserTokenAdmin: ["Admin", "OrgAdmin"],
    addTokenAdmin: ["Admin"],
    removeTokenAdmin: ["Admin"],
    getAllAdmins: ["Admin", "OrgAdmin"],
    addOrgAdmin: ["Admin", "OrgAdminForOrgId"],
    removeOrgAdmin: ["Admin", "OrgAdminForOrgId"],
    getOrgAdmins: ["Admin", "OrgAdmin"],
  },
  TOKEN: {
    save: ["Admin"],
    getAllTokens: ["Admin", "OrgAdmin"],
    get: ["Admin", "OrgAdmin"],
    update: ["Admin"],
    getDecimals: ["Admin", "OrgAdmin"],
    getTokensByName: ["Admin", "OrgAdmin"],
    addRoleMember: ["Admin", "OrgAdminRoleCheck"],
    removeRoleMember: ["Admin", "OrgAdminRoleCheck"],
    isInRole: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getTotalMintedTokens: ["Admin", "OrgAdmin"],
    getNetTokens: ["Admin", "OrgAdmin"],
    getTokenHistory: ["Admin", "OrgAdmin"],
  },
  ROLE: {
    getAccountsByRole: ["Admin"],
    getOrgAccountsByRole: ["Admin", "OrgAdminForOrgId"],
    getUsersByRole: ["Admin"],
    getOrgUsersByRole: ["Admin", "OrgAdminForOrgId"],
  },
  TRANSACTION: {
    deleteTransactions: ["Admin"],
  },ACCOUNT: {
    createAccount: ["Admin", "OrgAdminForOrgId"],
    associateToken: ["Admin", "OrgAdminForAccountId"],
    getAllAccounts: ["Admin"],
    getAllOrgAccounts: ["Admin", "OrgAdminForOrgId"],
    getAccountsByUser: ["Admin", "OrgAdminForOrgId", "MultipleAccountOwner"],
    getAccount: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    history: ["Admin", "AccountOwner"],
    getAccountTransactionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getAccountTransactionHistoryWithFilters: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getSubTransactionsById: ["Admin", "TransactionInvoker"],
    getSubTransactionsByIdWithFilters: ["Admin", "TransactionInvoker"],
    getAccountBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getAccountOnHoldBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getOnHoldIds: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getConversionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
  },
  ACCOUNT_STATUS: {
    get: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    history: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    activateAccount: ["Admin", "OrgAdminForOrgId"],
    suspendAccount: ["Admin", "OrgAdminForOrgId"],
    deleteAccount: ["Admin", "OrgAdminForOrgId"],
  },
  TOKEN_CONVERSION: {
    initializeExchangePoolUser: ["Admin"],
    addConversionRate: ["Admin"],
    updateConversionRate: ["Admin"],
    getConversionRate: ["Admin", "OrgAdmin", "AnyAccountOwner"],
    getConversionRateHistory: ["Admin", "OrgAdmin", "AnyAccountOwner"],
    tokenConversion: ["Admin", "AnyAccountOwner"],
    getExchangePoolUser: ["Admin"],
  },
}
await this.Ctx.Auth.checkAuthorization(<parameters>);
Parametri:
  • classFuncName: string: il valore della mappa tra la classe e i metodi descritto nel file ../lib/constant.ts.
  • ...args: argomento di variabile in cui args[0] accetta la costante 'TOKEN' e args[1] utilizza account_id per aggiungere un controllo dell'accesso per un AccountOwner. Per aggiungere un controllo dell'accesso per un MultipleAccountOwner, args[1] accetta org_id e args[2] accetta user_id.
Restituisce:
  • Una promessa, una promessa. In caso di errore, un rifiuto con un messaggio di errore.
addOrgAdmin
Questo metodo aggiunge un utente come Org Admin dell'organizzazione.
Ctx.Admin.addOrgAdmin(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
Questo metodo rimuove un utente come Org Admin dell'organizzazione.
Ctx.Admin.removeOrgAdmin(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Admin dell'organizzazione.
Esempio di valore restituito:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
getOrgAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Org Admin di un'organizzazione.
Ctx.Admin.getAllOrgAdmins()
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array in formato JSON contenente oggetti orgId e userId.
Esempio di valore restituito:
{
    "admins": [
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin1"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin2"
        }
    ]
}
addTokenAuditor
Questo metodo aggiunge un utente come Token Auditor del codice concatenato.
this.Ctx.Admin.addTokenAuditor(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Token Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "cd81f6c4c9e7c18ece357dbf5c139ef66ef2d6566be3b14de5f6d0a3fd4bb2f0",
        "payload": {
            "msg": "Successfully added Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20009",
        "blockNumber": 196
    }
}
removeTokenAuditor
Questo metodo rimuove un utente come Token Auditor del codice concatenato.
this.Ctx.Admin.removeTokenAuditor(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Token Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "a886a6040fbc76374a3c78c89ab0ffc9f7b8391cc5239b169bf3b878cf40c67b",
        "payload": {
            "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 219
    }
}
getTokenAuditors
Questo metodo restituisce tutti i valori Token Auditors del codice concatenato.
this.Ctx.Admin.getAllTokenAuditors()
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "payload": {
            "auditors": [
                {
                    "org_id": "CB",
                    "user_id": "auditor_user_cb"
                }
            ]
        },
        "encode": "JSON"
    }
}
addOrgAuditor
Questo metodo aggiunge un utente come Org Auditor del codice concatenato.
this.Ctx.Admin.addOrgAuditor(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente aggiunto come Org Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "44bbad35a1478cb714e32f7cfd551897868a203520aab9cea5771d3aadc1cf03",
        "payload": {
            "msg": "Successfully added Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20009",
        "blockNumber": 198
    }
}
removeOrgAuditor
Questo metodo rimuove un utente come Org Auditor del codice concatenato.
this.Ctx.Admin.removeOrgAuditor(org_id, user_id)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che include i dettagli dell'utente rimosso come Org Auditor del codice concatenato.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "c3bc720461004a53b37c68d4bb264858b88d980bc093a0a3ebb62a32974fb306",
        "payload": {
            "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 221
    }
}
getOrgAuditors
Questo metodo restituisce tutti i valori Org Auditors del codice concatenato.
this.Ctx.Admin.getAllOrgAuditors()
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "payload": {
            "auditors": [
                {
                    "org_id": "FI1",
                    "user_id": "auditor_user_fi1"
                },
                {
                    "org_id": "FI2",
                    "user_id": "auditor_user_fi2"
                }
            ]
        },
        "encode": "JSON"
    }
}

Metodi per la gestione della configurazione token

save
Questo metodo crea un token e ne salva le proprietà nel database di stato.
Ctx.Token.save(token: <Instance of Token Class>,extraMetadata?:any)
Parametri:
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio promessa con dettagli token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "assetType":"otoken",
   "token_id":"digiCurr101",
   "token_name":"digicur",
   "token_type":"fungible",
   "behaviors":[
      "divisible",
      "mintable",
      "transferable",
      "burnable",
      "roles"
   ],
   "roles":{
      "minter_role_name":"minter"
   },
   "mintable":{
      "max_mint_quantity":1000
   },
   "divisible":{
      "decimal":2
   },
   "currency_name":"DOLLAR",
   "token_to_currency_ratio":1
}
update
Questo metodo aggiorna le proprietà del token. Dopo aver creato un asset token, è possibile aggiornare solo il valore token_desc e le relative proprietà personalizzate.
Ctx.Token.update(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio promessa con dettagli token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "assetType":"otoken",
   "token_id":"digiCurr101",
   "token_name":"digicur",
   "token_desc":"Digital Currency equiv of dollar",
   "token_type":"fungible",
   "behaviors":[
      "divisible",
      "mintable",
      "transferable",
      "burnable",
      "roles"
   ],
   "roles":{
      "minter_role_name":"minter"
   },
   "mintable":{
      "max_mint_quantity":1000
   },
   "divisible":{
      "decimal":2
   },
   "currency_name":"DOLLAR",
   "token_to_currency_ratio":1
}
getTokenDecimals
Questo metodo restituisce il numero di posizioni decimali disponibili per un token frazionario. Se il comportamento divisible non è specificato, il valore predefinito è 0.
Ctx.Token.getTokenDecimals(token_id: string)
Parametri:
  • token_id: string: l'ID del token.
Restituisce:
  • In caso di esito positivo, le posizioni decimali del token, nel tipo di dati numerico. In caso di errore, viene restituito con un messaggio di errore.
Esempio di valore restituito:
1
get
Questo metodo restituisce un oggetto token se è presente nel database di stato.
Ctx.Token.get(token_id: string)
Parametri:
  • token_id: string: l'ID del token da restituire.
Restituisce:
  • Al successo, una promessa con la rappresentazione JSON del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "token_id": "token1",
    "token_name": "account",
    "token_desc": "Token 1",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "holdable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner",
        "notary_role_name": "notary"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "divisible": {
        "decimal": 1
    },
    "token_to_currency_ratio": 2,
    "currency_representation": "EURO"
}
history
Questo metodo restituisce la cronologia per il token specificato.
Ctx.Token.history(tokenId)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una promessa con un array dei dettagli della cronologia dell'account per il token specificato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
[
    {
        "trxId": "0d75f09446a60088afb948c6aca046e261fddcd43df416076201cdc5565f1a35",
        "timeStamp": "2023-09-01T16:48:41.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_desc": "updatedDesc",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    },
    {
        "trxId": "3666344878b043b65d5b821cc79c042ba52aec467618800df5cf14eac69f72fa",
        "timeStamp": "2023-08-31T20:24:55.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    }
]
getAllTokens
Questo metodo restituisce tutti gli asset token salvati nel database di stato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
Ctx.Token.getAllTokens()
Parametri:
  • nessuno
Restituisce:
  • Al successo, restituisce una promessa con tutti gli asset token. In caso di errore, restituisce un messaggio di errore.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
        "payload": [
            {
                "key": "token1",
                "valueJson": {
                    "assetType": "otoken",
                    "token_id": "token1",
                    "token_name": "vtok",
                    "token_type": "fungible",
                    "behaviours": [
                        "divisible",
                        "mintable",
                        "transferable",
                        "burnable",
                        "holdable",
                        "roles"
                    ],
                    "roles": {
                        "burner_role_name": "burner",
                        "notary_role_name": "notary"
                    },
                    "mintable": {
                        "max_mint_quantity": 0
                    },
                    "divisible": {
                        "decimal": 1
                    }
                }
            }
        ],
        "encode": "JSON"
    }
}
getTokensByName
Questo metodo restituisce tutti gli asset token con il nome specificato. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
Ctx.Token.getTokensByName(token_name: string)
Parametri:
  • token_name: string – Il nome del token, che corrisponde alla proprietà Token_name del modello. Il valore è il nome della classe del token.
Restituisce:
  • Restituisce un array di tutti gli asset token del nome specificato, in formato JSON.
Esempio di valore restituito:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
        "payload": [
            {
                "key": "token1",
                "valueJson": {
                    "assetType": "otoken",
                    "token_id": "token1",
                    "token_name": "vtok",
                    "token_type": "fungible",
                    "behaviours": [
                        "divisible",
                        "mintable",
                        "transferable",
                        "burnable",
                        "holdable",
                        "roles"
                    ],
                    "roles": {
                        "burner_role_name": "burner",
                        "notary_role_name": "notary"
                    },
                    "mintable": {
                        "max_mint_quantity": 0
                    },
                    "divisible": {
                        "decimal": 1
                    }
                }
            }
        ],
        "encode": "JSON"
    }
}
isTokenType
Questo metodo indica se esiste un asset token con l'ID specificato.
Ctx.Token.isTokenType(token_id: string)
Parametri:
  • token_id: string: l'ID del token da controllare.
Restituisce:
  • In caso di operazione riuscita, una promessa con true se esiste un asset token con l'ID specificato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
true
getByRange
Questo metodo chiama internamente il metodo fabric getStateByRange. Anche se qualsiasi cespite con l'ID specificato viene restituito dal libro contabile, questo metodo inserisce il cespite nel tipo di cespite chiamante.
<Token ClassCtx.Token.getByRange(start_token_id: string, end_token_id: string, token_class_reference?: <Instance of Token Class> )
Parametri:
  • startId: string: la chiave di partenza dell'intervallo. Questa chiave è inclusa nell'intervallo.
  • endId: string: la chiave finale dell'intervallo. Questa chiave è esclusa dall'intervallo.
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • Al successo, una promessa con una serie di <Token Class>. In caso di errore, un rifiuto con un messaggio di errore.
Esempio:
@validator(yup.string(), yup.string())
public async getDigiCurrGetByRange(start_token_id: string, end_token_id: string) {
   return await this.Ctx.Token.getByRange(start_token_id, end_token_id, DigiCurr);
}
Esempio di valore restituito:
[
    {
        "assetType": "otoken",
        "token_id": "token1",
        "token_name": "digicur",
        "token_desc": "Token 1",
        "token_type": "fungible",
        "behaviors": [
            "divisible",
            "mintable",
            "transferable",
            "burnable",
            "holdable",
            "roles"
        ],
        "roles": {
            "minter_role_name": "minter",
            "burner_role_name": "burner",
            "notary_role_name": "notary"
        },
        "mintable": {
            "max_mint_quantity": 20000
        },
        "divisible": {
            "decimal": 0
        },
        "token_to_currency_ratio": 1.5,
        "currency_representation": "USD"
    },
    {
        "assetType": "otoken",
        "token_id": "token2",
        "token_name": "digicur",
        "token_desc": "Token2",
        "token_type": "fungible",
        "behaviors": [
            "divisible",
            "mintable",
            "transferable",
            "burnable",
            "holdable",
            "roles"
        ],
        "roles": {
            "minter_role_name": "minter",
            "burner_role_name": "burner",
            "notary_role_name": "notary"
        },
        "mintable": {
            "max_mint_quantity": 20000
        },
        "divisible": {
            "decimal": 0
        },
        "token_to_currency_ratio": 1,
        "currency_representation": "EURO"
    }
]

Metodi per la gestione degli account

getCallerAccountId
Questo metodo restituisce l'ID account del chiamante.
Ctx.Account.getCallerAccountId(token_id: string)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di successo, una promessa con l'ID account chiamante. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
generateAccountId
Questo metodo restituisce un ID account, che è un set alfanumerico di caratteri, preceduto da oaccount~<token asset name>~ e seguito da un hash del nome utente o dell'ID e-mail (user_id) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza, l'ID del provider di servizi di appartenenza (org_id) dell'utente nell'organizzazione di rete corrente e l'ID token univoco (token_id).
Ctx.Account.generateAccountId(token_id: string, org_id: string, user_id: string)
Parametri:
  • tokenId: string: l'ID del token.
  • orgId: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di successo, una promessa con l'ID conto generato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
createAccount
Questo metodo crea un account per un utente e un token specificati. Ogni utente che ha token in qualsiasi momento deve avere un account. Gli account tengono traccia del saldo, del saldo in sospeso e della cronologia delle transazioni di un utente. Un ID account è un set alfanumerico di caratteri, preceduto da oaccount~<token asset name>~ e seguito da un hash del nome utente o dell'ID e-mail (user_id) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza, l'ID del provider di servizi di appartenenza (org_id) dell'utente nell'organizzazione di rete corrente. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato o da un Org Admin dell'organizzazione specificata.
this.Ctx.Account.createAccount(org_id: string, user_id: string, token_type: string)
Parametri:
  • org_id: string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id: string: il nome utente o l'ID e-mail dell'utente.
  • token_type: string: il tipo di token, che deve essere fungible.
Restituisce:
  • Al termine, il nuovo oggetto account in formato JSON.
Esempio di valore restituito:
{
  "assetType": "oaccount",
  "bapAccountVersion": 0,
  "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
  "user_id": "admin",
  "org_id": "Org1MSP",
  "token_type": "fungible",
  "token_id": "",
  "token_name": "",
  "balance": 0,
  "onhold_balance": 0
}
associateTokenToAccount
Questo metodo associa un token fungibile a un account. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o da un Org Admin dell'organizzazione pertinente.
async associateTokenToAccount(account_id: string, token_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
  • token_id: string: l'ID del token.
Restituisce:
  • Una volta completato, un oggetto JSON dell'account aggiornato.
Esempio di valore restituito:
{
    "assetType": "oaccount",
    "bapAccountVersion": 0,
    "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
    "user_id": "admin",
    "org_id": "Org1MSP",
    "token_type": "fungible",
    "token_id": "fungible",
    "token_name": "fiatmoneytok",
    "balance": 0,
    "onhold_balance": 0
}
getAccountWithStatus
Questo metodo restituisce i dettagli del conto per un conto specificato, incluso lo stato del conto.
Ctx.Account.getAccountWithStatus(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • Al successo, una promessa con i dettagli dell'account. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "user_id": "idcqa",
  "org_id": "appdev",
  "token_type": "fungible",
  "token_id": "t1",
  "token_name": "obptok",
  "balance": 0,
  "onhold_balance": 0
}
getAccount
Questo metodo restituisce i dettagli del conto per un conto specificato.
Ctx.Account.getAccount(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • Al successo, una promessa con i dettagli dell'account. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "assetType":"oaccount",
   "bapAccountVersion": 0,
   "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
   "user_id":"user1",
   "org_id":"Org1MSP",
   "token_id":"digiCurr101",
   "token_name":"digicur",
   "balance":0,
   "onhold_balance":0
}
history
Questo metodo restituisce un array dei dettagli della cronologia account per un account specificato.
Ctx.Account.history(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • Al successo, una promessa con la serie di dettagli della cronologia dell'account. In caso di errore, un rifiuto con un messaggio di errore. Il valore restituito è uguale al metodo getAccountHistory.
Esempio di valore restituito:
[
    {
      "trxId":"2gsdh17fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":100,
         "onhold_balance":0,
         "bapAccountVersion": 1
   },
   {
      "trxId":"9fd07fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":0,
         "onhold_balance":0,
         "bapAccountVersion": 0
      }
   }
]
getAccountOnHoldBalance
Questo metodo restituisce il saldo in sospeso per un conto specificato.
Ctx.Account.getAccountOnHoldBalance(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, una promessa con un oggetto JSON che mostra il saldo in sospeso per il conto specificato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "holding_balance":0,
   "msg":"Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
getAllAccounts
Questo metodo restituisce un elenco di tutti i conti. Questo metodo utilizza query avanzate SQL DB Berkeley e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
Ctx.Account.getAllAccounts()
Parametri:
  • nessuno
Restituisce:
  • Una promessa con un oggetto JSON che elenca tutti gli account. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
[
           {
               "key": "oaccount~digicur~2e2ef3375ae347cbd7b4d3d7be5cece803f9c36a184aaf2b8d332c5d2dcead52",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~2e2ef3375ae347cbd7b4d3d7be5cece803f9c36a184aaf2b8d332c5d2dcead52",
                   "user_id": "admin",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "bapAccountVersion": 0,
                   "balance": 0,
                   "onhold_balance": 0
               }
           },
           {
               "key": "oaccount~digicur~30080c7e5ba94035af57fbbccbbb495e92515e4b2b3dbcd476eb1c0343e4da65",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~30080c7e5ba94035af57fbbccbbb495e92515e4b2b3dbcd476eb1c0343e4da65",
                   "bapAccountVersion": 0,
                   "user_id": "user1",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "balance": 0,
                   "onhold_balance": 0
               }
           },
           {
               "key": "oaccount~digicur~cbde438258cb01a82f71a9a9f8029243c40c6d836a505432120529c2b3c2ff0c",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~cbde438258cb01a82f71a9a9f8029243c40c6d836a505432120529c2b3c2ff0c",
                   "bapAccountVersion": 0,
                   "user_id": "user2",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "balance": 0,
                   "onhold_balance": 0
               }
           },
           {
               "key": "oaccount~digicur~ecbc3aefcc562d3049c988717940195b30297e95012b7824bbd33a57ca50a626",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~ecbc3aefcc562d3049c988717940195b30297e95012b7824bbd33a57ca50a626",
                   "bapAccountVersion": 0,
                   "user_id": "user3",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "balance": 500,
                   "onhold_balance": 0
               }
           }
       ]
getUserByAccountId
Questo metodo restituisce i dettagli utente per un account specificato.
Ctx.Account.getUserByAccountId(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, una promessa con un oggetto JSON che include tre proprietà:
    • user_id: il nome utente o l'ID e-mail dell'utente.
    • org_id: l'ID MSP (Membership Service Provider) dell'utente nell'organizzazione di rete corrente.
    • token_id: l'ID del token.
  • In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "token_id": "digiCurr101",
   "user_id": "user1",
   "org_id": "Org1MSP"
}
getAccountBalance
Questo metodo restituisce il saldo del conto per un conto specificato.
Ctx.Account.getAccountBalance(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un messaggio promettente con un oggetto JSON che include due proprietà:
    • msg: messaggio che mostra il saldo corrente.
    • user_balance: il valore numerico del saldo corrente.
  • In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "msg": "Current Balance is: 200",
    "user_balance": 200
}
getAllOrgAccounts
Questo metodo restituisce un elenco di tutti i conti token appartenenti a un'organizzazione specificata.
Ctx.Account.getAllOrgAccounts(org_id: string) 
Parametri:
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli account per l'organizzazione specificata.
Esempio di valore restituito:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "user_id": "idcqa",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    },
    {
        "key": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
            "user_id": "example_minter",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    }
]

Metodi per gestione ruoli

addRoleMember
Questo metodo aggiunge un ruolo a un utente e a un token specificati.
Ctx.Token.addRoleMember(role: string, account_id: string, token: <Instance of Token Class>)
Parametri:
  • role: string: il nome del ruolo da aggiungere all'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • account_id: number: l'ID account a cui aggiungere il ruolo.
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • Al successo, una promessa con un messaggio di successo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id :          Org1MSP, user_id : user1)"
}
removeRoleMember
Questo metodo rimuove un ruolo da un utente e da un token specificati.
Ctx.Token.removeRoleMember(role: string, account_id: string, token: <Instance of Token Class>)
Parametri:
  • role: string: il nome del ruolo da rimuovere all'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica. Analogamente, il ruolo notary corrisponde alla proprietà notary_role_name del file di specifica.
  • account_id: number: l'ID account da cui rimuovere il ruolo.
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • Al successo, una promessa con un messaggio di successo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
  "msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"
}
getAccountsByRole
Questo metodo restituisce un elenco di tutti gli account per un ruolo e un token specificati.
Ctx.Role.getAccountsByRole(token_id: string, role: string)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, una promessa con un oggetto JSON che elenca tutti gli account per il ruolo e il token specificati. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
        "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"
    ]
}
getAccountsByUser
Questo metodo restituisce un elenco di tutti gli ID account per un utente specificato.
async getAccountsByUser(org_id: string, user_id: string)
Parametri:
  • org_id string - L'ID MSP (Membership Service Provider) dell'utente nell'organizzazione corrente.
  • user_id string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una volta completato, un array JSON di ID account.
Esempio di valore restituito:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getUsersByRole
Questo metodo restituisce un elenco di tutti gli utenti per un ruolo e un token specificati.
Ctx.Role.getUsersByRole(token_id: string, role: string)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, una promessa con un oggetto JSON che elenca tutti gli utenti per il ruolo e il token specificati. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "users":[
      {
         "token_id":"digiCurr101",
         "user_id":"user1",
         "org_id":"Org1MSP"
      }
   ]
}
isInRole
Questo metodo indica se un utente e un token hanno un ruolo specificato.
Ctx.Token.isInRole(role: string, account_id: string, token: <Instance of Token Class>)
Parametri:
  • role: string: il nome del ruolo da controllare.
  • account_id: number – L'ID account da controllare.
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, una promessa con true se l'utente dispone del ruolo e false se l'utente non dispone del ruolo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{"result":"true"}
getOrgAccountsByRole
Questo metodo restituisce informazioni su tutti i conti con un ruolo specificato in un'organizzazione specificata.
Ctx.Role.getOrgAccountsByRole(token_id: string, role: string, org_id: string)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti i clienti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
getOrgUsersByRole
Questo metodo restituisce informazioni su tutti gli utenti con un ruolo specificato in un'organizzazione specificata.
Ctx.Role.getOrgUsersByRole(token_id: string, role: string, org_id: string)
Parametri:
  • token_id: string: l'ID del token.
  • role: string: il nome del ruolo da controllare.
  • org_id: string – L'ID MSP (Membership Service Provider) dell'organizzazione.
Restituisce:
  • In caso di operazione riuscita, un elenco di tutti gli utenti con il ruolo specificato nell'organizzazione specificata.
Esempio di valore restituito:
{
    "users": [
        {
            "token_id": "token",
            "user_id": "admin",
            "org_id": "Org1MSP"
        },
        {
            "token_id": "token",
            "user_id": "orgAdmin",
            "org_id": "Org1MSP"
        }
    ]
}
roleCheck
Questo metodo controlla se l'ID conto fornito è membro di un ruolo qualsiasi.
Ctx.Token.roleCheck(account_id: string, token: <Instance of Token Class>)
Parametri:
  • account_id: string – L'ID account da controllare.
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • Se l'ID account fa parte di un ruolo qualsiasi, restituisce true. Altrimenti, restituisce false.
Esempio di valore restituito:
{ result: true }

Metodi per gestione cronologia transazioni

getAccountTransactionHistory
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per un conto specificato.
Ctx.Account.getAccountTransactionHistory(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • Il valore restituito è uguale al metodo getAccountTransactionHistory.
  • In caso di successo, una promessa con l'array di oggetti transazione conto:
    • transaction_id: l'ID della transazione.
    • transacted_account – Il conto con cui è avvenuta la transazione.
    • transaction_type: tipo di transazione.
    • transacted_amount: l'importo della transazione.
    • timestamp – Il tempo della transazione.
    • balance – Il saldo del conto al momento della transazione.
    • onhold_balance – Il saldo in sospeso al momento della transazione.
    • sub_transactions: solo per i trasferimenti di massa, un elenco di transazioni che fanno parte di un trasferimento di massa.
    • holding_id: identificativo univoco restituito dal metodo holdTokens.
    • token_id: l'ID del token.
  • In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
[
   {
      "transaction_id":"otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
      "transacted_amount":20,
      "timestamp":"2021-08-17T06:04:24.000Z",
      "balance":60,
      "onhold_balance":0,
      "token_id":"digiCurr101",
      "transaction_type":"BULKTRANSFER",
      "sub_transactions":[
         {
            "transacted_account":"oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
            "transaction_type":"CREDIT",
            "transaction_id":"otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
            "transacted_amount":10
         }
      ]
   },
   {
      "transaction_id":"otransaction~757864d5369bd0539d044caeb3bb4898db310fd7aa740f45a9938771903d43da",
      "transacted_amount":50,
      "timestamp":"2021-08-17T06:02:44.000Z",
      "balance":50,
      "onhold_balance":0,
      "token_id":"digiCurr101",
      "transacted_account":"oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
      "transaction_type":"CREDIT"
   }
]
getAccountTransactionHistoryWithFilters
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per un conto specificato. Questo metodo può essere chiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id: string, filters?: Filters)
Parametri:
  • account_id: string – L'ID dell'account.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio:

ochain invoke getAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
    {
        "transaction_id": "otransaction~672897b5a4fa78b421c000e4d6d4f71f3d46529bfbb5b4be10bf5471dc35ce89",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:46:04.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "balance": 90,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~467bb67a33aaffca4487f33dcd46c9844efdb5421a2e7b6aa2d53152eb2c6d85",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:45:47.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "balance": 95,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~c6d56ce54a9bbe24597d1d10448e39316dc6f16328bf3c5b0c8ef10e1dfeb397",
        "transacted_amount": 100,
        "timestamp": "2022-04-20T15:44:26.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~deb5fb0906c40506f6c2d00c573b774e01a53dd91499e651d92ac4778b6add6a",
        "transaction_type": "MINT",
        "balance": 100,
        "onhold_balance": 0
    }
]
getSubTransactionHistory
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per una transazione specificata.
await this.Ctx.Account.getSubTransactionHistory(transaction_id)
Parametri:
  • transaction_id: string: l'ID della transazione di trasferimento di massa.
Esempio:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 80,
        "onhold_balance": 0
    },
    {
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 85,
        "onhold_balance": 0
    }
]
getSubTransactionHistoryWithFilters
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni secondarie per una transazione specificata.
await this.Ctx.Account.getSubTransactionHistoryWithFilters(transaction_id: string, filters?: SubTransactionFilters)
Parametri:
  • transaction_id: string: l'ID della transazione di trasferimento di massa.
  • filters: string: parametro facoltativo. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione di pagina predefinita è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, consultare la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate nel formato RFC-3339.
Esempio:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
    {
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "balance": 80,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "balance": 85,
        "onhold_balance": 0
    }
]
getTransactionById
Questo metodo restituisce la cronologia di un asset Transaction.
async getTransactionById(transaction_id: string)
Parametri:
  • transaction_id: string: l'ID dell'asset transazione.
Restituisce:
  • In caso di operazione riuscita, la cronologia degli asset della transazione.
Esempio di valore restituito:
{
    "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
    "history": [
        {
            "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
            "timeStamp": 1629180264,
            "value": {
                "assetType": "otransaction",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                "token_id": "digiCurr101",
                "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                "to_account_id": "",
                "transaction_type": "BULKTRANSFER",
                "amount": 20,
                "timestamp": "2021-08-17T06:04:24.000Z",
                "number_of_sub_transactions": 2,
                "holding_id": ""
            }
        }
    ],
    "sub_transactions": [
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        },
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        }
    ]
}
deleteHistoricalTransactions
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per un conto specificato.
async deleteHistoricalTransactions(time_to_expiration: Date)
Parametri:
  • time_to_expiration: Date: indicatore orario che indica quando eliminare le transazioni. I cespiti transazione precedenti all'ora specificata verranno eliminati.
Restituisce:
  • Il valore restituito è uguale al metodo getAccountTransactionHistory.
  • In caso di successo, una promessa con l'array di oggetti transazione conto:
    • transaction_id: l'ID della transazione.
    • transacted_account – Il conto con cui è avvenuta la transazione.
    • transaction_type: tipo di transazione.
    • transacted_amount: l'importo della transazione.
    • timestamp – Il tempo della transazione.
    • balance – Il saldo del conto al momento della transazione.
    • onhold_balance – Il saldo in sospeso al momento della transazione.
    • sub_transactions: solo per i trasferimenti di massa, un elenco di transazioni che fanno parte di un trasferimento di massa.
    • holding_id: identificativo univoco restituito dal metodo holdTokens.
    • token_id: l'ID del token.
  • In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
"payload": {
            "msg": "Successfuly deleted transaction older than date: Thu Aug 19 2021 11:19:36 GMT+0000 (Coordinated Universal Time).",
            "transactions": [
                "otransaction~ec3366dd48b4ce2838f820f2f138648e6e55a07226713e59b411ff31b0d21058"
            ]
        }

Gestione comportamento token

I metodi di gestione del ciclo di vita dei token si basano sugli standard del token Taxonomy Framework. Per utilizzare i metodi del ciclo di vita del token, importare la classe Token dal modulo ../lib/token.
import { Token } from '../lib/token';

Metodi per la gestione del comportamento dei token - Comportamento minimo

mint
Questo metodo estrae una quantità di token, che sono quindi di proprietà del chiamante del metodo. Il chiamante deve avere un account e il ruolo minore. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica.
Ctx.Token.mint(quantity: number, token: <Instance of Token Class>)
Parametri:
  • quantity: number: il numero totale di token da mint.
  • token: <Instance of Token Class>: l'asset token da zecca.
Restituisce:
  • Al successo, una promessa con un messaggio di successo e dettagli toAccount. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
  "msg":"Successfully minted 1000 tokens to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}
getTotalMintedTokens
Questo metodo restituisce il numero totale di token generati.
Ctx.Token.getTotalMintedTokens(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, la quantità di token coniati, nel tipo di dati numerico. In caso di errore, viene restituito con un messaggio di errore.
Esempio di valore restituito:
4000
getNetTokens
Questo metodo restituisce la quantità netta di token disponibili nel sistema. I token netti sono la quantità di token rimanenti dopo che i token sono stati bruciati. In forma di equazione: token netti = token coniati totali - token bruciati totali. Se non vengono bruciati token, il numero di token netti è uguale al totale dei token coniati.
Ctx.Token.getNetTokens(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, la quantità di token netti, nel tipo di dati del numero. In caso di errore, viene restituito con un messaggio di errore.
Esempio di valore restituito:
2000
getMaxMintQuantity
Questo metodo restituisce la quantità massima estraibile per un token. Se il comportamento di max_mint_quantity non viene specificato, il valore predefinito è 0, che consente di coniare un numero qualsiasi di token.
Ctx.Token.getMaxMintQuantity(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, la quantità massima estraibile del token, nel tipo di dati numerico. In caso di errore, viene restituito con un messaggio di errore.
Esempio di valore restituito:
20000

Metodi per la gestione del comportamento dei token - comportamento trasferibile

transfer
Questo metodo trasferisce i token dal chiamante transazione al conto to_account_id. Il chiamante di questo metodo deve avere un conto e la quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica.
Ctx.Token.transfer(to_account_id: string, quantity: number, token: <Instance of Token Class>)
Parametri:
  • to_account_id: string – L'ID account per ricevere i token.
  • quantity: number: il numero totale di token da trasferire.
Restituisce:
  • Al successo, una promessa con un messaggio di successo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
 "msg":"Successfully transferred 50 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin) to account id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"
}
bulkTransfer
Questo metodo trasferisce i token in blocco dal conto chiamante ai conti specificati nell'oggetto flow. Per il chiamante di questo metodo deve essere già stato creato un account.
Ctx.Token.bulkTransfer(flow: object[], token: <Instance of Token Class>)
Parametri:
  • flow: object[]: array di oggetti JSON che specifica i dettagli e la quantità del ricevente. La quantità di trasferimento deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica. Ad esempio:
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
  • token: <Instance of Token Class>: l'asset token su cui eseguire l'operazione.
Restituisce:
  • Al successo, una promessa con un messaggio di successo e informazioni sull'account. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

Metodi per la gestione del comportamento dei token - comportamento bloccabile

hold
Questo metodo crea un blocco per conto del proprietario dei token con l'account to_account_id. Viene specificato un conto notarile, che è responsabile del completamento o del rilascio del blocco. Quando viene creato il blocco, il saldo del token specificato dal responsabile pagamento viene bloccato. Impossibile trasferire un saldo bloccato finché il blocco non viene completato o rilasciato. Per il chiamante di questo metodo deve essere già stato creato un account.
Ctx.Token.hold(operation_id: string, to_account_id: string, notary_account_id: string, quantity: number, time_to_expiration: Date, token: <Instance of Token Class>)
Parametri:
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • to_account_id: string – L'ID dell'account per ricevere i token.
  • notary__account_id: string – L'ID del conto notarile.
  • quantity: number: il numero totale di token da mettere in attesa.
  • time_to_expiration: Date: la durata fino alla scadenza del blocco. Specificare 0 per un blocco permanente. In alternativa utilizzare il formato RFC-3339. Ad esempio, 2021-06-02T12.
  • token: <Instance of Token Class>: l'asset token da contenere.
Restituisce:
  • Al successo, una promessa con un messaggio di successo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
 "msg": "account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) is successfully holding 10 tokens",
}
executeHold
Questo metodo completa un blocco sui token, trasferendo la quantità specificata di token precedentemente in sospeso al ricevente. Se il valore quantity è inferiore al valore di blocco effettivo, l'importo rimanente sarà nuovamente disponibile per il proprietario originale dei token. Questo metodo può essere richiamato solo dall'ID AccountOwner con il ruolo notary per l'ID operazione specificato. La presa può essere completata solo dal notaio.
Ctx.Token.executeHold(operation_id: string, quantity: number, token: <Instance of Token Class>)
Parametri:
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • quantity: number: il numero totale di token per completare un blocco.
  • token: <Instance of Token Class>: l'asset token per completare un blocco.
Restituisce:
  • Al successo, una promessa con un messaggio di successo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
 "msg": "user with accountId: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) has successfully executed 5  tokens(digiCurr101) from the hold with Operation Id opr_121",
}
releaseHold
Questo metodo rilascia un blocco sui token. Il trasferimento non è stato completato e tutti i token bloccati sono di nuovo disponibili per il proprietario originale. Questo metodo può essere richiamato dall'ID AccountOwner con il ruolo notary entro il limite di tempo specificato o dal responsabile pagamento, dal beneficiario o dal notaio dopo il limite di tempo specificato.
Ctx.Token.releaseHold(operation_id: string, token: <Instance of Token Class>)
Parametri:
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
  • token: <Instance of Token Class>: l'asset token su cui rilasciare un blocco.
Restituisce:
  • Al successo, una promessa con un messaggio di successo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
  "msg": "Successfully released 5 tokens from Operation Id opr_121 to Account Id: oaccount~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1)",
}
getOnHoldIds
Questo metodo restituisce un elenco di tutti gli ID azienda per un conto specificato.
Ctx.Account.getOnHoldIds(account_id: string)
Parametri:
  • account_id: string – L'ID dell'account.
Restituisce:
  • Una promessa con un oggetto JSON che elenca tutti gli ID di deposito per l'account specificato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "msg":"Holding Ids are: ohold~digicur~digiCurr101~opr_121",
   "holding_ids":[
      "ohold~digicur~digiCurr101~opr_121"
   ]
}
getOnHoldDetailsWithOperationId
Questo metodo restituisce i dettagli della transazione in sospeso per un ID operazione e un token specificati.
Ctx.Hold.getOnHoldDetailsWithOperationId(token_id: string, operation_id: string)
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, un oggetto di blocco che include le proprietà riportate di seguito.
    • holding_id – L'ID di deposito della transazione.
    • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
    • from_account_id: l'ID account del proprietario corrente dei token in sospeso.
    • to_account_id: l'ID del conto del destinatario.
    • notary_account_id – L'ID account del notaio.
    • token_id: string: l'ID del token salvato.
    • quantity: la quantità di token in sospeso per l'ID holding.
    • time_to_expiration: la durata fino alla scadenza del blocco.
  • In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
    "assetType": "ohold",
    "holding_id": "ohold~digicur~digiCurr101~opr_121",
    "operation_id": "opr_121",
    "token_name": "digicur",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "notary_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "token_id": "digiCurr101",
    "quantity": 10,
    "time_to_expiration": "2022-08-01T18:30:00.000Z"
}
getOnHoldBalanceWithOperationId
Questo metodo restituisce il saldo in sospeso per un ID operazione e un token specificati. Questo metodo può essere chiamato da chiunque.
Ctx.Hold.getOnHoldBalanceWithOperationId(token_id: string, operation_id: string)
Parametri:
  • token_id: string: l'ID del token.
  • operation_id: string: ID univoco che identifica l'operazione di blocco. In genere questo ID viene passato dall'applicazione client.
Restituisce:
  • In caso di operazione riuscita, un oggetto promessa con il saldo in sospeso per l'ID operazione e il token specificati. In caso di errore, un rifiuto con un messaggio di errore
Esempio di valore restituito:
{
    "msg": "Current Holding Balance of Operation 'op1' for token 'token1' is: 10",
    "holding_balance": 10
}

Metodi per la gestione del comportamento dei token - comportamento masterizzabile

burn
Questo metodo disattiva o brucia i token dall'account del chiamante della transazione. Il chiamante di questo metodo deve avere un account e il ruolo di bruciatore. La quantità deve essere compresa nei valori decimali specificati dal parametro decimal del comportamento divisible nel file di specifica.
Ctx.Token.burn(quantity: number, token: <Instance of Token Class>)
Parametri:
  • quantity: number: il numero totale di token da masterizzare.
  • token: <Instance of Token Class>: l'asset token da masterizzare.
Restituisce:
  • Al successo, una promessa con un messaggio di successo. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}