Progetto NFT a ponte TypeScript per ERC-721

Blockchain App Builder prende l'input dal file di specifica NFT e genera un progetto di codice concatenato impalcato completamente funzionale.

Il progetto genera automaticamente classi e funzioni del ciclo di vita NFT, inclusi i metodi CRUD e non CRUD, nonché un SDK di tokenizzazione. La convalida degli argomenti, il marshalling/unmarshalling e la capacità di persistenza trasparente sono tutti supportati automaticamente.

Per informazioni sul progetto e sui metodi scaffolded non direttamente correlati agli NFT, vedere Progetto Chaincode TypeScript in grassetto.

Modello

Ogni classe di modello tokenizzata estende la classe OchainModel. La funzionalità di persistenza trasparente o ORM semplificato viene acquisita nella classe OchainModel.

import * as yup from 'yup';
import { Id, Mandatory, Validate, Default, Embedded, Derived, ReadOnly } from '../../lib/decorators';
import { OchainModel } from '../../lib/ochain-model';
import { STRATEGY } from '../../lib/utils';
import { EmbeddedModel } from '../../lib/ochain-embedded-model';

export class ArtCollectionMetadata extends EmbeddedModel<ArtCollectionMetadata> {
    @Validate(yup.string())
    public painting_name: string;

    @Validate(yup.string())
    public description: string;

    @Validate(yup.string())
    public image: string;

    @Validate(yup.string())
    public painter_name: string;

}
    
@Id('tokenId')       
export class ArtCollection extends OchainModel<ArtCollection> {

    public readonly assetType = 'otoken';
        
    @Mandatory()
    @Validate(yup.string().required().matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/).max(16))
    public tokenId: string;

    @ReadOnly('artcollection')
    public tokenName: string;

    @Validate(yup.string().trim().max(256))
    public tokenDesc: string;

    @ReadOnly('ART')
    public symbol: string;

    @ReadOnly('erc721+')
    public tokenStandard: string;

    @ReadOnly('nonfungible')
    public tokenType: string;

    @ReadOnly('whole')
    public tokenUnit: string;

      @ReadOnly(["indivisible","singleton","mintable","transferable","burnable","roles"])
    public behaviors: string[];

    @ReadOnly({minter_role_name: "minter"})
    public roles: object;

    @ReadOnly({max_mint_quantity: 20000})
    public mintable: object;

    @Validate(yup.string())
    public owner: string;

    @Validate(yup.string())
    public createdBy: string;

    @Validate(yup.string())
    public transferredBy: string;

    @Validate(yup.string())
    public creationDate: string;

    @Validate(yup.string())
    public transferredDate: string;

    @Validate(yup.bool())
    public isBurned: boolean;

    @Validate(yup.string())
    public burnedBy: string;

    @Validate(yup.string())
    public burnedDate: string;

    @Validate(yup.string().max(2000))
    public tokenUri: string;
    
    @Embedded(ArtCollectionMetadata)
    public metadata: ArtCollectionMetadata;

    @Validate(yup.number())
    public price: number;

    @Validate(yup.boolean())
    public on_sale_flag: boolean;

}

Controller

La classe controller principale estende la classe OchainController. C'è un solo controller principale.

export class DigiCurrCCController extends OchainController{

È possibile creare un numero qualsiasi di classi, funzioni o file, ma è possibile richiamare solo i metodi definiti all'interno della classe controller principale. Gli altri metodi sono nascosti.

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

Metodi NFT generati automaticamente

Blockchain App Builder genera automaticamente metodi per supportare i cicli di vita NFT e NFT. È possibile utilizzare questi metodi per inizializzare NFT, gestire ruoli e account e completare altri task del ciclo di vita NFT senza alcuna codifica aggiuntiva. I metodi controller devono disporre di un decorator @Validator(...params) per poter essere richiamati.

Metodi per la gestione del controllo dell'accesso

addTokenAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async addTokenAdmin(orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.addAdmin', 'TOKEN');
    return await this.Ctx.ERC721Admin.addAdmin(orgId, userId);
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: 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 (orgId: Org1MSP, userId: User1)"}
removeTokenAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string())
public async removeTokenAdmin(orgId: string, userId: string) {
   await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.removeAdmin', 'TOKEN');
   return await this.Ctx.ERC721Admin.removeAdmin(orgId, userId);
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: 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 (orgId: Org1MSP, userId: User1)"}
isTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è un valore Token Admin, altrimenti restituisce false. Un Token Admin può chiamare questa funzione su qualsiasi altro utente della rete blockchain. Altri utenti possono chiamare questo metodo solo sui propri account.
@GetMethod()
@Validator(yup.string(), yup.string())
public async isTokenAdmin(orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.isUserTokenAdmin', 'TOKEN');
    return await this.Ctx.ERC721Auth.isUserTokenAdmin(orgId, userId);
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Il metodo restituisce true se il chiamante è un Token Admin, altrimenti restituisce false.
Esempio di valore restituito:
{"result": true}
getAllTokenAdmins
Questo metodo restituisce un elenco di tutti gli utenti che sono un Token Admin del codice concatenato. Questo metodo può essere richiamato solo dal Token Admin del codice concatenato.
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.getAllAdmins', 'TOKEN');
    return await this.Ctx.ERC721Admin.getAllAdmins();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array admins in formato JSON contenente gli oggetti orgId e userId.
Esempio di valore restituito:
{"admins":[{"orgId":"Org1MSP","userId":"admin"}]}

Metodi per la gestione della configurazione dei token

init
Questo metodo viene chiamato quando viene creata un'istanza del codice concatenato. Ogni Token Admin viene identificato dalle informazioni userId e orgId nel parametro adminList. userId è il nome utente o l'ID di posta elettronica del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza. orgId è l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione di rete corrente. Il parametro adminList è obbligatorio la prima volta che si distribuisce il codice concatenato. Se si sta aggiornando il codice concatenato, passare una lista vuota ([]). Qualsiasi altra informazione nel parametro adminList viene ignorata durante gli aggiornamenti.
@Validator(yup.array().of(yup.object()).nullable())
public async init(adminList: ERC721TokenAdminAsset[]) {
   await this.Ctx.ERC721Admin.initAdmin(adminList);
   await this.Ctx.ERC721Token.saveClassInfo(<NFT_NAME>);
   await this.Ctx.ERC721Token.saveDeleteTransactionInfo();
   return;
}
Parametri:
  • adminList array: un array di informazioni {orgId, userId} che specifica la lista degli amministratori di token. L'array adminList è un parametro obbligatorio.
getAllTokens
Questo metodo restituisce tutti gli asset token salvati nel database di stato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
@GetMethod()
@Validator()
public async getAllTokens() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.ERC721Token.getAllTokens();
}
Parametri:
  • nessuno
Restituisce:
  • Lista di tutti gli asset token in formato JSON.
Esempio di valore restituito:
[
    {
        "key": "monalisa",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:48.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    },
    {
        "key": "monalisa1",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa1",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:59.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    }
]
getAllTokensByUser
Questo metodo restituisce tutti gli asset token di proprietà di un utente specificato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal proprietario del conto.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAllTokensByUser(orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.getAllTokensByUser', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Token.getAllTokensByUser(accountId);
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Lista di asset token in formato JSON.
Esempio di valore restituito:
[
    {
        "key": "monalisa",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:48.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    },
    {
        "key": "monalisa1",
        "valueJson": {
            "metadata": {
                "PaintingName": "Mona_Lisa",
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa1",
            "tokenName": "ravinft",
            "tokenDesc": "token Description",
            "symbol": "PNT",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "createdBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "creationDate": "2022-04-07T21:17:59.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "NftBasePrice": 100
        }
    }
]
getTokenById
Questo metodo restituisce un oggetto token se il token è presente nel database di stato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal proprietario del token.
@GetMethod()
@Validator(yup.string())
public async getTokenById(tokenId: string) {
   await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.get', 'TOKEN', { tokenId });
   let token = await this.getTokenObject(tokenId);
   return token;
}
Parametri:
  • tokenId: string: l'ID del token da ottenere.
Restituisce:
  • Asset token in formato JSON.
Esempio di valore restituito:
{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "transferredDate": "2022-04-05T09:28:30.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}
getTokenHistory
Questo metodo restituisce la cronologia per un ID token specificato. Si tratta di un metodo asincrono. Questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform. Chiunque può chiamare questo metodo.
@GetMethod()
@Validator(yup.string())
public async getTokenHistory(tokenId: string) {
   // await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.history', 'TOKEN');
   return await this.Ctx.ERC721Token.history(tokenId);
}
Parametri:
  • tokenId: string: l'ID del token.
Esempio di valore restituito:
[
    {
        "trxId": "ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timeStamp": 1649150910,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "transferredDate": "2022-04-05T09:28:30.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "price": 100,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timeStamp": 1649149545,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "transferredDate": "2022-04-05T09:05:45.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "price": 100,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "702e61cc8d6d2982521023d0d5f3195900f35e146d6a90ef66daae551e6075d2",
        "timeStamp": 1649147729,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "isBurned": false,
            "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
            "price": 100,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timeStamp": 1649147442,
        "value": {
            "metadata": {
                "painting_name": "Mona_Lisa",
                "description": "Mona Lisa Painting",
                "image": "monalisa.jpeg",
                "painter_name": "Leonardo_da_Vinci"
            },
            "assetType": "otoken",
            "tokenId": "monalisa",
            "tokenName": "artcollection",
            "tokenDesc": "token description",
            "symbol": "ART",
            "tokenStandard": "erc721+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2022-04-05T08:30:42.000Z",
            "isBurned": false,
            "tokenUri": "\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
            "price": 100,
            "on_sale_flag": false
        }
    }
]
getTokenObject
Questo è un metodo di utility che restituisce un'istanza del token per un ID token specificato. Questo metodo viene utilizzato da molti dei metodi generati automaticamente per recuperare gli oggetti token. È possibile richiamare questo metodo in base alle esigenze dai metodi personalizzati. Quando si crea un asset o una classe tokenizzata, aggiornare il caso di scambio con la classe Token corrispondente per restituire l'oggetto token corretto. Il comando ochain sync in Blockchain App Builder crea automaticamente un caso di scambio quando un asset tokenizzato viene creato nel file di specifica. Questo metodo non dispone di alcun decorator del metodo @Validator(), il che significa che questo metodo non è direttamente richiamabile e può essere richiamato solo da altri metodi.
public async getTokenObject<T extends OchainModel<any>>(tokenId: string): Promise<T> {
   if (!tokenId) {
        throw Error('TokenID cannot be null/empty.');
    }
    const token = await this.Ctx.ERC721Token.get(tokenId);
    if (token.tokenName && token.assetType && token.assetType === 'otoken') {
        let tokenAsset;
        switch (token.tokenName) {
           case '<NFT_NAME in lowercase>':
               tokenAsset = new <NFT_NAME>(token, false, true);
               return tokenAsset;
           default:
               throw new Error(`No token exists with ID [${tokenId}]`);
        }
    } else {
        throw new Error(`No token exists with ID [${tokenId}]`);
    }
}
Parametri:
  • tokenId: string: l'ID del token.
ownerOf
Questo metodo restituisce l'ID account del proprietario dell'ID token specificato. Chiunque può chiamare questo metodo.
@GetMethod()
@Validator(yup.string())
public async ownerOf(tokenId: string) {
   return await this.Ctx.ERC721Token.ownerOf(tokenId);
}
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • Oggetto JSON dell'ID account del proprietario.
Esempio di valore restituito:
{"owner": "oaccount~d6d22c3167e3c6ab9ee5653e1a008c37c20cc47ebb0229ca0aedfafe64c675b8"}
name
Questo metodo restituisce il nome della classe di token. Chiunque può chiamare questo metodo.
@GetMethod()
@Validator()
public async name() {
   return await this.Ctx.ERC721Token.name();
}
Parametri:
  • nessuno
Restituisce:
  • Oggetto JSON del nome token.
Esempio di valore restituito:
{"tokenName": "artcollection"}
symbol
Questo metodo restituisce il simbolo della classe di token. Chiunque può chiamare questo metodo.
@GetMethod()
@Validator()
public async symbol() {
   return await this.Ctx.ERC721Token.symbol();
}
Parametri:
  • nessuno
Restituisce:
  • Oggetto JSON del simbolo del token.
Esempio di valore restituito:
{"symbol": "PNT"}
tokenURI
Questo metodo restituisce l'URI di un token specificato. Chiunque può chiamare questo metodo.
@GetMethod()
@Validator(yup.string())
public async tokenURI(tokenId: string) {
   return await this.Ctx.ERC721Token.tokenURI(tokenId);
}
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dell'URI token.
Esempio di valore restituito:
{"tokenURI": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\
.ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
totalSupply
Questo metodo restituisce il numero totale di token coniati. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@GetMethod()
@Validator()
public async totalSupply() {
  await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalSupply', 'TOKEN');
  return await this.Ctx.ERC721Token.totalSupply();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON del conteggio dei token.
Esempio di valore restituito:
{"totalSupply": 3}
totalNetSupply
Questo metodo restituisce il numero totale di token coniati meno il numero di token bruciati. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@GetMethod()
@Validator()
public async totalNetSupply() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalNetSupply', 'TOKEN');
    return await this.Ctx.ERC721Token.getTotalMintedTokens();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON del conteggio dei token.
Esempio di valore restituito:
{"totalNetSupply": 1}

Metodi per la gestione degli account

createAccount
Questo metodo crea un account per un utente e un token specificati. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. Gli account tengono traccia del numero di operazioni NFT di cui dispone un utente. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete. È possibile creare un solo conto NFT per utente.

Un ID account è un set alfanumerico di caratteri, preceduto da oaccount~ e seguito da un hash SHA-256 dell'ID provider di servizi di appartenenza (orgId) dell'utente nell'organizzazione di rete corrente, dal nome utente o dall'ID di posta elettronica (userId) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza e dalla stringa costante nft. Questo metodo può essere richiamato solo dal Token Admin del codice concatenato.

@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:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
  • tokenType: string: l'unico tipo di token supportato è nonfungible.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dell'account creato. Il parametro bapAccountVersion viene definito nell'oggetto conto per uso interno.
Esempio di valore restituito:
{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "bapAccountVersion": 0,
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Questo metodo restituisce il numero totale di operazioni NFT detenute da un utente specificato. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal proprietario del conto.
@GetMethod()
@Validator(yup.string(), yup.string())
 public async balanceOf(orgId: string, userId: string) {
     await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.balanceOf', 'TOKEN', { orgId, userId });
     const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
     return await this.Ctx.ERC721Account.balanceOf(accountId);
 }
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Oggetto JSON del conteggio NFT corrente.
Esempio di valore restituito:
{"totalNfts": 0}
getAllAccounts
Questo metodo restituisce un elenco di tutti i conti. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
@GetMethod()
@Validator()
public async getAllAccounts() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.ERC721Account.getAllAccounts();
}
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un array JSON di tutti gli account.
Esempio di valore restituito:
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }    
    }
]
getAccountByUser
Questo metodo restituisce i dettagli dell'account per un utente specificato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato o dall'Account Owner dell'account.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAccountByUser(orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAccountByUser', 'TOKEN', { orgId, userId });
    return await this.Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId);
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto account JSON che include le proprietà riportate di seguito.
  • bapAccountVersion: parametro dell'oggetto conto per uso interno.
  • status: lo stato corrente dell'account utente.
  • accountId: l'ID dell'account utente.
  • userId: il nome utente o l'ID e-mail dell'utente.
  • orgId: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • tokenType: il tipo di token che contiene il conto.
  • noOfNfts - Il numero totale di NFT detenuti dal conto.
Esempio di valore restituito:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 0
}
getUserByAccountId
Questo metodo restituisce i dettagli utente di un account specificato. Questo metodo può essere chiamato da qualsiasi utente.
@GetMethod()
@Validator(yup.string())
public async getUserByAccountId(accountId: string) {
    return await this.Ctx.ERC721Account.getUserByAccountId(accountId);
}
Parametri:
  • accountId: string: l'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON dei dettagli utente (orgId e userId).
Esempio di valore restituito:
{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountHistory
Questo metodo restituisce la cronologia dell'account per un utente specificato. Si tratta di un metodo asincrono. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato o dal proprietario del conto.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAccountHistory(orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.history', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Account.history(accountId);
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON della cronologia dell'account. Il parametro bapAccountVersion viene definito nell'oggetto conto per uso interno.
Esempio di valore restituito:
[
    {
        "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timeStamp": 1649151044,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 5,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timeStamp": 1649151022,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 4,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 2
        }
    },
    {
        "trxId": "ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timeStamp": 1649150910,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 3,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timeStamp": 1649149545,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 2,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    },
    {
        "trxId": "e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timeStamp": 1649147442,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 1,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "d2d1f9c898707ae831e9361bc25da6369eac37b10c87dc04d18d6f3808222f08",
        "timeStamp": 1649137534,
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion" : 0,
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    }
]

Metodi per la gestione dei ruoli

addRole
Questo metodo aggiunge un ruolo a un utente specificato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string(), yup.string())
public async addRole(role: string, orgId: string, userId: string) {
   const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
   await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.addRoleMember', 'TOKEN');
   return await this.Ctx.ERC721Token.addRoleMember(role, accountId);
}
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.
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRole
Questo metodo rimuove un ruolo da un utente specificato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@Validator(yup.string(), yup.string(), yup.string())
public async removeRole(role: string, orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.removeRoleMember', 'TOKEN');
    return await this.Ctx.ERC721Token.removeRoleMember(role, accountId);
}
Parametri:
  • 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.
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Questo metodo restituisce un elenco di tutti gli ID account per un ruolo specificato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@GetMethod()
@Validator(yup.string())
public async getAccountsByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getAccountsByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getAccountsByRole(role);
}
Parametri:
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON di ID account.
Esempio di valore restituito:
{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Questo metodo restituisce un elenco di tutti gli utenti per un ruolo specificato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@GetMethod()
@Validator(yup.string())
public async getUsersByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getUsersByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getUsersByRole(role);
}
Parametri:
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON degli oggetti utente (orgId e userId).
Esempio di valore restituito:
{
    "users": [
        {
            "userId": "admin",
            "orgId": "Org1MSP"
        }
    ]
}
isInRole
Questo metodo restituisce un valore booleano per indicare se un utente dispone di un ruolo specificato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato o dall'Account Owner dell'account.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string())
public async isInRole(orgId: string, userId: string, role: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.isInRole', 'TOKEN',{ accountId });
    return { result: await this.Ctx.ERC721Token.isInRole(role, accountId) };
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: 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":"true"}

Metodi per la gestione della cronologia delle transazioni

getAccountTransactionHistory
Questo metodo restituisce la cronologia delle transazioni conto per un utente specificato. Si tratta di un metodo asincrono. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato o dal proprietario del conto.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAccountTransactionHistory(orgId: string, userId: string) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAccountTransactionHistory', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Account.getAccountTransactionHistory(accountId)
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Esempio di valore restituito:
[
    {
        "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timestamp": "2022-04-05T09:30:44.000Z",
        "tokenId": "monalisa1",
        "noOfNfts": 1,
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "BURN"
    },
    {
        "transactionId": "otransaction~a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timestamp": "2022-04-05T09:30:22.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getAccountTransactionHistoryWithFilters
Questo metodo restituisce la cronologia delle transazioni conto per un utente specificato, filtrata in base a PageSize, Bookmark, startTime e endTime. Si tratta di un metodo asincrono. Questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform. Questo metodo può essere chiamato solo dal Token Admin del codice concatenato o dal proprietario del conto.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.object().nullable())
public async getAccountTransactionHistoryWithFilters(orgId: string, userId: string, filters ?: Filters) {
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAccountTransactionHistoryWithFilters', 'TOKEN', { accountId });
    return await this.Ctx.ERC721Account.getAccountTransactionHistoryWithFilters(accountId, filters)
}
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
  • filters: object: oggetto della classe Filtro contenente quattro attributi: pageSize, bookmark, startTime e endTime.
Esempio di valore restituito:
[
    {
        "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timestamp": "2022-04-05T09:30:44.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "BURN"
    },
    {
        "transactionId": "otransaction~a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timestamp": "2022-04-05T09:30:22.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getTransactionById
Questo metodo restituisce la cronologia delle transazioni per un ID transazione specificato. Si tratta di un metodo asincrono. Questo metodo può essere chiamato solo da un Token Admin del codice concatenato o dal proprietario del conto.
@GetMethod()
@Validator(yup.string())
public async getTransactionById(transactionId: string) {
    return await this.Ctx.ERC721Transaction.getTransactionById(transactionId);
}
Parametri:
  • transactionId: string: l'ID della transazione, che è il prefisso otransaction~ seguito dall'hash a 64 bit in formato esadecimale.
Esempio di valore restituito:
{
    "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
    "history": [
        {
            "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
            "timeStamp": 1649151044,
            "value": {
                "assetType": "otransaction",
                "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
                "tokenId": "monalisa1",
                "fromAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "toAccountId": "",
                "triggeredByAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "transactionType": "BURN",
                "timestamp": "2022-04-05T09:30:44.000Z",
            }
        }
    ]
}
deleteHistoricalTransactions
Questo metodo elimina le transazioni più vecchie di un indicatore orario specificato nel database di stato. Si tratta di un metodo asincrono. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato.
@Validator(yup.date())
public async deleteHistoricalTransactions(timeToExpiration: Date) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TRANSACTION.deleteTransactions', 'TOKEN');
    return await this.Ctx.ERC721Transaction.deleteTransactions(timeToExpiration);
}
Parametri:
  • timestamp: string: un indicatore orario. Tutte le transazioni precedenti all'indicatore orario verranno eliminate.
Esempio di valore restituito:
{
    "msg": "Successfuly deleted transaction older than date: Thu Apr 07 2022 21:18:59 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
        "otransaction~30513757d8b647fffaafac440d743635f5c1b2e41b25ebd6b70b5bbf78a2643f",
        "otransaction~ac0e908c735297941ba58bb208ee61ff4816a1e54c090d68024f82adf743892b"
    ]
}

Metodi per la gestione del comportamento dei token - Funzionamento minimo

create<Token Name>Token
Questo metodo crea (mint) un NFT. L'asset e le proprietà associate vengono salvati nel database di stato. Il chiamante di questa transazione deve disporre di un account token. Il chiamante di questa transazione diventa il proprietario dell'NFT. Se il file di specifica del token include la sezione roles per behaviors e la proprietà minter_role_name per roles, il chiamante della transazione deve disporre del ruolo secondario. In caso contrario, qualsiasi chiamante può coniare NFT.
@Validator(< Token Class >)
public async create< Token Name >Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.createToken(tokenAsset);
}
Parametri:
  • tokenAsset: <Token Class>: asset token da coniare. Per ulteriori informazioni sulle proprietà dell'asset token, vedere il file di specifica di input.
Restituisce:
  • In caso di operazione riuscita, un oggetto asset token JSON che include le proprietà riportate di seguito.
  • metadata: informazioni JSON che descrivono il token.
  • createdBy: l'ID account dell'utente che ha chiamato la transazione per coniare il token.
  • creationDate: l'indicatore orario della transazione.
  • isBurned: un valore booleano che indica se l'NFT identificato da tokenId viene masterizzato.
  • tokenName: il nome del token.
  • tokenDesc: la descrizione del token.
  • symbol: il simbolo del token.
  • tokenStandard: lo standard del token.
  • tokenType: il tipo di token posseduto da questo account.
  • tokenUnit: l'unità del token.
  • behaviors: descrizione di tutti i comportamenti dei token.
  • mintable: una descrizione delle proprietà del comportamento mintable. La proprietà max_mint_quantity specifica il numero massimo di NFT di questa classe di token che è possibile creare.
  • owner: l'ID account del proprietario corrente del token. Durante il processo di conio, il chiamante di questo metodo diventa il proprietario del token.
  • tokenUri: l'URI del token.
Esempio di valore restituito:
{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
    "price": 100,
    "on_sale_flag": false
}
update<Token Name>Token
Questo metodo aggiorna le proprietà del token. Questo metodo può essere chiamato solo dall'utente che è il proprietario o il creatore del token. Dopo la creazione di un asset token, solo il proprietario del token può aggiornare le proprietà personalizzate del token. Se l'utente è sia proprietario che creatore di un token, può anche aggiornare la proprietà TokenDesc. Impossibile aggiornare i metadati del token. È necessario passare tutte le proprietà del token a questo metodo, anche se si desidera aggiornare solo determinate proprietà.
@Validator(<Token Class>)
public async update<Token name>Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.updateToken(tokenAsset);
}
Parametri:
  • tokenAsset: <Token Class>: l'asset token da aggiornare. Per ulteriori informazioni sulle proprietà dell'asset token, vedere il file di specifica di input.
Restituisce:
  • In caso di operazione riuscita, un oggetto asset token JSON aggiornato
Esempio di valore restituito:
{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}

Metodi per la gestione del comportamento dei token - Funzionamento trasferibile

safeTransferFrom
Questa è una funzione asincrona. Questo metodo trasferisce la proprietà dell'NFT specificato dal chiamante a un altro conto. Questo metodo include le seguenti convalide:
  • Il token esiste e non viene masterizzato.
  • L'account mittente e l'account ricevente esistono e non sono lo stesso account.
  • L'account mittente è proprietario del token.
  • Il chiamante della funzione è il mittente.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.string().max(2000))
public async safeTransferFrom(fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string, tokenId: string, data?: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    const fromAccountId = await this.Ctx.ERC721Account.generateAccountId(fromOrgId, fromUserId);
    const toAccountId = await this.Ctx.ERC721Account.generateAccountId(toOrgId, toUserId);
    return await this.Ctx.ERC721Token.safeTransferFrom(fromAccountId, toAccountId, tokenAsset, data);
}
Parametri:
  • fromOrgId: string: l'ID del provider di servizi di appartenenza (MSP) del mittente e del proprietario del token nell'organizzazione corrente.
  • fromUserId: string: il nome utente o l'ID di posta elettronica del mittente e del proprietario del token.
  • toOrgId: string: l'ID del provider di servizi di appartenenza (MSP) del destinatario nell'organizzazione corrente.
  • toUserId: string: il nome utente o l'ID e-mail del destinatario.
  • tokenId: string: l'ID del token da trasferire.
  • data: string: informazioni aggiuntive facoltative da memorizzare nel record transazione.
Restituisce:
  • In caso di operazione riuscita, un messaggio con i dettagli dell'account del mittente e del destinatario.
Esempio di valore restituito:
{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
transferFrom
Questa è una funzione asincrona. Questo metodo trasferisce la proprietà dell'operazione NFT specificata da un conto mittente a un conto ricevente. È responsabilità del chiamante passare i parametri corretti. Questo metodo può essere richiamato da qualsiasi utente, non solo dal proprietario del token. Questo metodo include le seguenti convalide:
  • Il token esiste e non viene masterizzato.
  • L'account mittente e l'account ricevente esistono e non sono lo stesso account.
  • L'account mittente è proprietario del token.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async transferFrom(fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string, tokenId: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    const fromAccountId = await this.Ctx.ERC721Account.generateAccountId(fromOrgId, fromUserId);
    const toAccountId = await this.Ctx.ERC721Account.generateAccountId(toOrgId, toUserId);
    return await this.Ctx.ERC721Token.transferFrom(fromAccountId, toAccountId, tokenAsset);
}
Parametri:
  • fromOrgId: string: l'ID del provider di servizi di appartenenza (MSP) del mittente nell'organizzazione corrente.
  • fromUserId: string: il nome utente o l'ID e-mail del mittente.
  • toOrgId: string: l'ID del provider di servizi di appartenenza (MSP) del destinatario nell'organizzazione corrente.
  • toUserId: string: il nome utente o l'ID e-mail del destinatario.
  • tokenId: string: l'ID del token da trasferire.
Restituisce:
  • In caso di operazione riuscita, un messaggio con i dettagli dell'account del mittente e del destinatario.
Esempio di valore restituito:
{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1) to Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}

Metodi per la gestione del comportamento dei token - Funzionamento attivabile

burn
Questo metodo disattiva o brucia l'NFT specificato dall'account del chiamante. Il chiamante di questo metodo deve avere un account. Impossibile masterizzare un token a meno che il file di specifica del token non includa il comportamento burnable. Se nella sezione roles del file di specifica non viene specificata alcuna proprietà burner_role_name, il proprietario del token può masterizzare il token. Se nella sezione roles è specificata una proprietà burner_role_name, l'utente ha assegnato il ruolo di masterizzatore che è anche il creatore o il proprietario del token può masterizzare il token.
@Validator(yup.string())
public async burn(tokenId: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    return await this.Ctx.ERC721Token.burn(tokenAsset);
}
Parametri:
  • tokenId: string: l'ID del token da masterizzare.
Restituisce:
  • In caso di operazione riuscita, un messaggio con i dettagli dell'account.
Esempio di valore restituito:
{"msg": "Successfully burned NFT token: 'monalisa1' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
burnNFT
Questo metodo disattiva o masterizza l'NFT specificato dall'account del chiamante e restituisce un oggetto token e una cronologia token. Il chiamante di questo metodo deve avere un account. Impossibile masterizzare un token a meno che il file di specifica del token non includa il comportamento burnable. Se nella sezione roles del file di specifica non viene specificata alcuna proprietà burner_role_name, il proprietario del token può masterizzare il token. Se nella sezione roles è specificata una proprietà burner_role_name, l'utente ha assegnato il ruolo di masterizzatore che è anche il creatore o il proprietario del token può masterizzare il token.
@Validator(yup.string())
public async burnNFT(tokenId: string) {
    const token = await this.Ctx.ERC721Token.get(tokenId)
    if (token.isBurned === true) {
      throw new Error(`token with tokenId ${tokenId} is already burned`);
    }
    const tokenHistory = await this.Ctx.ERC721Token.history(tokenId);
    await this.burn(tokenId);
    token.tokenId = parseInt(token.tokenId);
    if(Number.isNaN(token.tokenId)) {
      throw new Error(`tokenId is expected to be integer but found ${tokenId}`)
    }
    token.isBurned = true;
    return {...token, tokenHistory: JSON.stringify(tokenHistory)};
}
Parametri:
  • tokenId: string: l'ID del token da masterizzare.
Restituisce:
  • In caso di operazione riuscita, un oggetto token che include informazioni sulla cronologia token.
Esempio di valore restituito:
{
    "assetType": "otoken",
    "tokenId": 1,
    "tokenName": "artcollection",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2023-08-22T07:36:50.000Z",
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "isBurned": true,
    "tokenUri": "example.com",
    "price": 120,
    "on_sale_flag": false,
    "tokenHistory": "[{\"trxId\":\"732438a85b5e8fc76c5254e54602b29d583543b103fafb5a28c0df384428bb50\",\"timeStamp\":\"2023-08-22T07:36:50.000Z\",\"value\":{\"assetType\":\"otoken\",\"tokenId\":\"1\",\"tokenName\":\"artcollection\",\"symbol\":\"ART\",\"tokenStandard\":\"erc721+\",\"tokenType\":\"nonfungible\",\"tokenUnit\":\"whole\",\"behaviors\":[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"],\"roles\":{\"minter_role_name\":\"minter\"},\"mintable\":{\"max_mint_quantity\":20000},\"createdBy\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"creationDate\":\"2023-08-22T07:36:50.000Z\",\"owner\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"isBurned\":false,\"tokenUri\":\"example.com\",\"price\":120,\"on_sale_flag\":false}}]"
}

Metodi personalizzati

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

L'esempio riportato di seguito mostra come utilizzare i metodi SDK token nei metodi personalizzati. Quando viene chiamato il metodo sell, pubblica un token in vendita per un prezzo specificato.

@Validator(yup.string(), yup.number())
public async sell(token_id: string, selling_price: number) {
    try { 
        const token = await this.Ctx.ERC721Token.get(token_id);
        const t = new ArtCollection(token)
 /**  * price is a custom asset
      attribute to set the price of a non-fungible token in the
      marketplace  */
        t.price =  selling_price;
 /**  * on_sale_flag is a
      custom asset attribute that maintains non-fungible token selling status in the
      marketplace  */
        t.on_sale_flag = true;
        await this.Ctx.ERC721Token.updateToken(t);
        let msg = `Token ID : '${token_id}' has been posted for selling in the marketplace'`;
        return {msg}
        } catch(error) {
            throw new Error(error.message);
    }
}

Metodi SDK NFT

Metodi per la gestione del controllo dell'accesso

NFT SDK fornisce una funzione di controllo dell'accesso. Alcuni metodi possono essere chiamati solo da un Token Admin o Account Owner del token. È possibile utilizzare questa funzione per garantire che le operazioni vengano eseguite solo dagli utenti previsti. Qualsiasi accesso non autorizzato genera un errore. Per utilizzare la funzione di controllo dell'accesso, importare la classe Authorization dal modulo ../lib/erc721-auth.
import { ERC721Authorization } from '../lib/erc721-auth';
checkAuthorization
Utilizzare questo metodo per aggiungere un controllo dell'accesso a un'operazione. Questa è una funzione asincrona. La maggior parte dei metodi generati automaticamente includono il controllo dell'accesso. Alcuni metodi token possono essere eseguiti solo da ERC721Admin o Account Owner del token o da MultipleAccountOwner per gli utenti con più account. Il metodo checkAuthorization fa parte della classe Authorization, alla quale si accede tramite l'oggetto Ctx. Il mapping del controllo dell'accesso è descritto nel file ../lib/constant.ts, come illustrato nel testo seguente. È possibile modificare il controllo dell'accesso modificando il file ../lib/constant.ts. Per utilizzare il proprio controllo dell'accesso o per disabilitare il controllo dell'accesso, rimuovere il codice di controllo dell'accesso dai metodi e dai metodi personalizzati generati automaticamente dal controller.
export const TOKENACCESS = {
  ADMIN: {
    isUserTokenAdmin: ['Admin', 'MultipleAccountOwner'],
    addAdmin: ['Admin'],
    removeAdmin: ['Admin'],
    getAllAdmins: ['Admin'],
  },
  TOKEN: {
    save: ['Admin'],
    getAllTokens: ['Admin'],
    get: ['Admin'],
    update: ['Admin'],
    getDecimals: ['Admin'],
    getTokensByName: ['Admin'],
    addRoleMember: ['Admin'],
    removeRoleMember: ['Admin'],
    isInRole: ['Admin', 'AccountOwner'],
    getTotalMintedTokens: ['Admin'],
    getNetTokens: ['Admin'],
  },
  ROLE: {
    getAccountsByRole: ['Admin'],
    getUsersByRole: ['Admin'],
  },
  TRANSACTION: {
    deleteTransactions: ['Admin'],
  },
  ACCOUNT: {
    createAccount: ['Admin'],
    getAllAccounts: ['Admin'],
    getAccountsByUser: ['Admin', 'MultipleAccountOwner'],
    getAccount: ['Admin', 'AccountOwner'],
    history: ['Admin', 'AccountOwner'],
    getAccountTransactionHistory: ['Admin', 'AccountOwner'],
    getAccountBalance: ['Admin', 'AccountOwner'],
    getAccountOnHoldBalance: ['Admin', 'AccountOwner'],
    getOnHoldIds: ['Admin', 'AccountOwner'],
  },
  ERC721ADMIN: {
    isUserTokenAdmin: ['Admin'],
    addAdmin: ['Admin'],
    removeAdmin: ['Admin'],
    getAllAdmins: ['Admin'],
  }, 
  ERC721TOKEN: {
    getAllTokens: ['Admin'],
    getAllTokensByUser: ['Admin', 'AccountOwner'],
    get: ['Admin', TOKEN_OWNER],
    getTokensByName: ['Admin'],
    addRoleMember: ['Admin'],
    removeRoleMember: ['Admin'],
    isInRole: ['Admin', 'AccountOwner'],
    totalSupply: ['Admin'],
    totalNetSupply: ['Admin'],
    history: ['Admin'],
  },
  ERC721ROLE: {
    getAccountsByRole: ['Admin'],
    getUsersByRole: ['Admin'],
  },
  ERC721TRANSACTION: {
    deleteTransactions: ['Admin'],
  },
  ERC721ACCOUNT: {
    createAccount: ['Admin'],
    getAllAccounts: ['Admin'],
    getAccountsByUser: ['Admin', 'MultipleAccountOwner'],
    history: ['Admin', 'AccountOwner'],
    getAccountTransactionHistory: ['Admin', 'AccountOwner'],
    getAccountTransactionHistoryWithFilters: ['Admin', 'AccountOwner'],
    balanceOf: ['Admin', 'MultipleAccountOwner'],
  }
}
Ctx.ERC721Auth.checkAuthorization(classFuncName: string, ...args)
Parametri:
  • classFuncName: string: il valore della mappa tra la classe e i metodi, come descritto nel file ../lib/constant.ts.
  • ...args: un argomento di variabile in cui args[0] accetta la costante 'TOKEN' e args[1] accetta il parametro accountId per aggiungere un controllo di accesso per un AccountOwner. Per aggiungere un controllo dell'accesso per un MultipleAccountOwner, args[1] accetta il parametro orgId e args[2] accetta il parametro userId.
Restituisce:
  • In caso di successo, una promessa. In caso di errore, un rifiuto con un messaggio di errore.
Esempi:

Admin accesso

await this.Ctx.ERC721Auth.checkAuthorization('ADMIN.addAdmin', 'TOKEN');

AccountOwner accesso

await this.Ctx.ERC721Auth.checkAuthorization('ACCOUNT.getAccountBalance', 'TOKEN', accountId);

MultipleAccountOwner accesso

await this.Ctx.ERC721Auth.checkAuthorization('ADMIN.isUserTokenAdmin', 'TOKEN', orgId, userId);
isUserTokenAdmin
Questo metodo restituisce il valore booleano true se il chiamante della funzione è un valore Token Admin. In caso contrario il metodo restituisce false. Si tratta di una funzione statica asincrona.
Ctx.ERC721Auth.isUserTokenAdmin(orgId: string, userId: string)
Parametri:
  • orgId: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione di rete corrente.
  • userId: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • Una risposta booleana e un messaggio di errore in caso di errore.
Esempio:

await this.Ctx.Auth.isUserTokenAdmin('Org1MSP', 'user1');

{"result":false}
addAdmin
Questo metodo aggiunge un utente come Token Admin del codice concatenato del token.
Ctx.ERC721Admin.addAdmin(orgId: string, userId: string)
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che elenca i dettagli per l'utente aggiunto come Token Admin del codice concatenato del token. In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Admin.addAdmin(orgId, userId)

{"msg": "Successfully added Admin (orgId: Org1MSP, userId: user1)"}
removeAdmin
Questo metodo rimuove un utente come Token Admin del codice concatenato del token.
Ctx.ERC721Admin.removeAdmin(orgId: string, userId: string)
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un messaggio che elenca i dettagli per l'utente rimosso come Token Admin del codice concatenato del token. In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Admin.RemoveAdmin(orgId, userId)

{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: user1)"}
getAllAdmins
Questo metodo restituisce un elenco di tutti gli utenti Token Admin.
Ctx.ERC721Admin.getAllAdmins()
Parametri:
  • nessuno
Restituisce:
  • In caso di successo, un elenco di tutti gli utenti Token Admin. In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Admin.getAllAdmins()

{
    "admins": [
        {
            "orgId": "Org1MSP",
            "userId": "admin"
        }
    ]
}

Metodi per la gestione della configurazione dei token

I metodi di gestione della configurazione dei token si basano sullo standard ERC-721. Per utilizzare i metodi di gestione della configurazione dei token, importare la classe Token dal modulo ../lib/erc721-token.

totalSupply
Questo metodo restituisce il numero totale di operazioni NFT coniate. Questa è una funzione asincrona.
Ctx.ERC721Token.totalSupply()
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, i token netti totali, nel tipo di dati numero. In caso di errore, viene restituito un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.totalSupply(tokenAsset);

2000
get
Questo metodo restituisce l'oggetto token specificato se è presente nel database di stato. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.get(tokenId: string)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, una promessa che include un oggetto JSON dell'asset token. In caso di errore, un rifiuto con un messaggio di errore
Esempio:

await this.Ctx.ERC721Token.get(tokenId);

{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "transferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "transferredDate": "2022-04-05T09:28:30.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}
isTokenType
Questo metodo indica se esiste un asset token con l'ID specificato. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.isTokenType(tokenId: string)
Parametri:
  • tokenId: string: l'ID del token.
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:

await this.Ctx.ERC721Token.isTokenType(tokenId);

true
createToken
Questo metodo crea un token e ne salva le proprietà nel database di stato. Questo metodo può essere richiamato solo dagli utenti con il ruolo di minter. Questa è una funzione asincrona.
Ctx.ERC721Token.createToken(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset token da creare.
Restituisce:
  • In caso di operazione riuscita, un messaggio di promessa con i dettagli del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.createToken(tokenAsset);

{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
    "price": 100,
    "on_sale_flag": false
}
updateToken
Questo metodo aggiorna le proprietà del token. Questo metodo può essere chiamato solo dal proprietario o dal creatore del token. Dopo la creazione di un asset token, solo il proprietario del token può aggiornare le proprietà personalizzate del token. Se l'utente è sia proprietario che creatore di un token, può anche aggiornare la proprietà TokenDesc. Impossibile aggiornare i metadati del token. È necessario passare tutte le proprietà del token a questo metodo, anche se si desidera aggiornare solo determinate proprietà. Questa è una funzione asincrona.
Ctx.ERC721Token.updateToken(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset del token da aggiornare.
Restituisce:
  • In caso di operazione riuscita, un messaggio di promessa con i dettagli del token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.updateToken(tokenAsset)

{
    "metadata": {
        "painting_name": "Mona_Lisa",
        "description": "Mona Lisa Painting",
        "image": "monalisa.jpeg",
        "painter_name": "Leonardo_da_Vinci"
    },
    "assetType": "otoken",
    "tokenId": "monalisa",
    "tokenName": "artcollection",
    "tokenDesc": "token description",
    "symbol": "ART",
    "tokenStandard": "erc721+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-04-05T08:30:42.000Z",
    "isBurned": false,
    "tokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "price": 100,
    "on_sale_flag": true
}
getByRange
Questo metodo chiama internamente il metodo fabric getStateByRange. Anche se dal libro contabile viene restituito un cespite con l'ID specificato, questo metodo lo inserisce nel tipo di cespite chiamante. Si tratta di una funzione statica asincrona.
@validator(yup.string(), yup.string())
public async getDigiCurrGetByRange(startId: string, endId: string) {
   return await this.Ctx.ERC721TOken.getByRange(startId, endId, PaintingNft);
}
Ctx.ERC721Token.getByRange(startId: string, endId: string, tokenClassReference?: <Instance of Token Class> )
Parametri:
  • startId: string: la chiave iniziale dell'intervallo. Questa chiave è inclusa nell'intervallo.
  • endId: string: la chiave finale dell'intervallo. Questa chiave è esclusa dall'intervallo.
  • tokenClassReference: <Instance of Token Class>: l'asset token su cui eseguire le operazioni.
Restituisce:
  • In caso di successo, una promessa con un array di <Token Class>. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
[
  {
      "metadata":{
         "painting_name":"Mona_Lisa",
         "description":"Mona Lisa Painting",
         "image":"monalisa.jpeg",
         "painter_name":"Leonardo_da_Vinci"
      },
      "assetType":"otoken",
      "tokenId":"monalisa",
      "tokenName":"artcollection",
      "tokenDesc":"token description",
      "symbol":"ART",
      "tokenStandard":"erc721+",
      "tokenType":"nonfungible",
      "tokenUnit":"whole",
      "behaviors":[
         "indivisible",
         "singleton",
         "mintable",
         "transferable",
         "burnable",
         "roles"
      ],
      "roles":{
         "minter_role_name":"minter"
      },
      "mintable":{
         "max_mint_quantity":20000
      },
      "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
      "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
      "transferredBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
      "creationDate":"2022-04-05T08:30:42.000Z",
      "transferredDate":"2022-04-05T09:28:30.000Z",
      "isBurned":false,
      "tokenUri":"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
      "price":100,
      "on_sale_flag":true
   }
]
history
Questo metodo restituisce la cronologia per il token specificato. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.history(tokenId: string)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, un iteratore di query della cronologia delle promesse per il token specificato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
[
   {
      "trxId":"e17a3154d5271be0492cbc7c12390b3480fec5a792d1cb1083e5335de56ebbd9",
      "timeStamp":1622614032,
      "isDelete":false,
      "value":{
         "metadata":{
            "painting_name":"Mona_Lisa",
            "description":"Mona Lisa Painting",
            "image":"monalisa.jpeg",
            "painter_name":"Leonardo_da_Vinci"
         },
         "assetType":"otoken",
         "tokenId":"monalisa",
         "tokenName":"artcollection",
         "tokenDesc":"token description",
         "symbol":"ART",
         "tokenStandard":"erc721+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "burnable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "creationDate":"2022-04-05T08:30:42.000Z",
         "isBurned":false,
         "tokenUri":"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
         "price":100,
         "on_sale_flag":"true"
      }
   },
   {
      "trxId":"dbcc4da410ad4d4a80996f090b313240f3f3d08aa2b5086afa8d0921f7b4c1e5",
      "timeStamp":1622643853,
      "isDelete":false,
      "value":{
         "metadata":{
            "painting_name":"Mona_Lisa",
            "description":"Mona Lisa Painting",
            "image":"monalisa.jpeg",
            "painter_name":"Leonardo_da_Vinci"
         },
         "assetType":"otoken",
         "tokenId":"monalisa",
         "tokenName":"artcollection",
         "tokenDesc":"token description",
         "symbol":"ART",
         "tokenStandard":"erc721+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "burnable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "transferredBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
         "creationDate":"2022-04-05T08:30:42.000Z",
         "transferredDate":"2022-04-05T09:28:30.000Z",
         "isBurned":false,
         "tokenUri":"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
         "price":100,
         "on_sale_flag":true
      }
   }
]
getAllTokens
Questo metodo restituisce tutti gli asset token salvati nel database di stato. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.getAllTokens()
Parametri:
  • nessuno
Restituisce:
  • In caso di successo, una promessa con tutti gli asset token. In caso di errore, un rifiuto con un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.getAllTokens();

{
   "returnCode":"Success",
   "error":"",
   "result":{
      "txid":"98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
      "payload":[
         "           "{
            "metadata":{
               "painting_name":"Mona_Lisa",
               "description":"Mona Lisa Painting",
               "image":"monalisa.jpeg",
               "painter_name":"Leonardo_da_Vinci"
            },
            "assetType":"otoken",
            "tokenId":"monalisa",
            "tokenName":"artcollection",
            "tokenDesc":"token description",
            "symbol":"ART",
            "tokenStandard":"erc721+",
            "tokenType":"nonfungible",
            "tokenUnit":"whole",
            "behaviors":[
               "indivisible",
               "singleton",
               "mintable",
               "transferable",
               "burnable",
               "roles"
            ],
            "roles":{
               "minter_role_name":"minter"
            },
            "mintable":{
               "max_mint_quantity":20000
            },
            "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate":"2022-04-05T08:30:42.000Z",
            "isBurned":false,
            "tokenUri":"\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
            "price":100,
            "on_sale_flag":false
         }"       "
      ],
      "encode":"JSON"
   }
}
getAllTokensByUser
Questo metodo restituisce tutti i token di proprietà di un ID account specificato. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.getAllTokensByUser(accountId: string)
Parametri:
  • accountId: string: l'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un iteratore di query della cronologia delle promesse per l'account specificato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio di valore restituito:
{
   "returnCode":"Success",
   "error":"",
   "result":{
      "txid":"98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
      "payload":[
         "           "{
            "metadata":{
               "painting_name":"Mona_Lisa",
               "description":"Mona Lisa Painting",
               "image":"monalisa.jpeg",
               "painter_name":"Leonardo_da_Vinci"
            },
            "assetType":"otoken",
            "tokenId":"monalisa",
            "tokenName":"artcollection",
            "tokenDesc":"token description",
            "symbol":"ART",
            "tokenStandard":"erc721+",
            "tokenType":"nonfungible",
            "tokenUnit":"whole",
            "behaviors":[
               "indivisible",
               "singleton",
               "mintable",
               "transferable",
               "burnable",
               "roles"
            ],
            "roles":{
               "minter_role_name":"minter"
            },
            "mintable":{
               "max_mint_quantity":20000
            },
            "owner":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "createdBy":"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate":"2022-04-05T08:30:42.000Z",
            "isBurned":false,
            "tokenUri":"\"https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg\"",
            "price":100,
            "on_sale_flag":false
         }"       "
      ],
      "encode":"JSON"
   }
ownerOf
Questo metodo restituisce l'ID account del proprietario di un token specificato. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.ownerOf(tokenId: string)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, restituisce un iteratore di query della cronologia promessa per l'ID token specificato. In caso di errore, viene rifiutato con un messaggio di errore
Esempio di valore restituito:
{"owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"}
tokenUri
Questo metodo restituisce l'URI per un token specificato. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.tokenUri(tokenId: string)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, restituisce un iteratore di query della cronologia promessa per l'ID token specificato. In caso di errore, viene rifiutato con un messaggio di errore
Esempio di valore restituito:
{"uri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
getTokenUri
Questo metodo restituisce l'URI per un token specificato. Si tratta di una funzione statica asincrona.
Ctx.ERC721Token.getTokenUri(tokenId: string)
Parametri:
  • tokenId: string: l'ID del token.
Restituisce:
  • In caso di operazione riuscita, restituisce un iteratore di query della cronologia promessa per l'ID token specificato. In caso di errore, viene rifiutato con un messaggio di errore
Esempio di valore restituito:
{"tokenUri": https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
symbol
Questo metodo restituisce il simbolo della classe di token.
Ctx.ERC721Token.symbol()
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON con il simbolo del token.
Esempio di valore restituito:
{"symbol": "PNT"}

Metodi per la gestione degli account

generateAccountId
Questo metodo restituisce un ID account, formato dalla concatenazione dell'ID provider di servizi di appartenenza (orgId) e del nome utente o dell'ID e-mail (userId), quindi dalla creazione di un hash SHA-256.
Ctx.ERC721Account.generateAccountId(orgId: string, userId: string)
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, una promessa con l'ID account generato. In caso di errore, un rifiuto con un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.generateAccountId(orgId, userId)

oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507
createAccount
Questo metodo crea un account per un utente e un token specificati. È necessario creare un account per qualsiasi utente che avrà token in qualsiasi momento. Gli account tengono traccia del numero di operazioni NFT di cui dispone un utente. Per completare le operazioni relative ai token, gli utenti devono disporre di account nella rete. È possibile creare un solo conto NFT per utente.

Un ID account è un set alfanumerico di caratteri, preceduto da oaccount~ e seguito da un hash SHA-256 dell'ID provider di servizi di appartenenza (orgId) dell'utente nell'organizzazione di rete corrente, dal nome utente o dall'ID di posta elettronica (userId) del proprietario dell'istanza o dell'utente che ha eseguito il login all'istanza e dalla stringa costante nft. Questo metodo può essere richiamato solo dal Token Admin del codice concatenato.

Ctx.ERC721Account.createAccount(orgId: string, userId: string, tokenType: string)
Parametri:
  • orgId: string: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: string: il nome utente o l'ID e-mail dell'utente.
  • tokenType: string: l'unico tipo di token supportato è nonfungible.
Restituisce:
  • In caso di operazione riuscita, una promessa con il nuovo oggetto cliente. In caso di errore, un rifiuto con un messaggio di errore
Esempio:

await this.Ctx.ERC721Account.CreateAccount(orgId, userId, tokenType)

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
getAllAccounts
Questo metodo restituisce un elenco di tutti i conti. Questo metodo utilizza query rich SQL di Berkeley DB e può essere richiamato solo quando si è connessi alla rete remota di Oracle Blockchain Platform.
Ctx.ERC721Account.getAllAccounts()
Parametri:
  • nessuno
Restituisce:
  • In caso di operazione riuscita, 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~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }   
    }
]
history
Questo metodo restituisce un array dei dettagli della cronologia dell'account per un account specificato.
Ctx.ERC721Account.history(accountId: string)
Parametri:
  • accountId: string: l'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un array map[string]interface{} contenente i dettagli della cronologia degli account per l'account specificato. I dati dell'account vengono visualizzati sotto la chiave value nella mappa. In caso di errore, un oggetto di errore non nullo contenente un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.history(accountId)

[
    {
        "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timeStamp": 1649151044,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timeStamp": 1649151022,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 2
        }
    },
    {
        "trxId": "ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timeStamp": 1649150910,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timeStamp": 1649149545,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    },
    {
        "trxId": "e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timeStamp": 1649147442,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }
    },
    {
        "trxId": "d2d1f9c898707ae831e9361bc25da6369eac37b10c87dc04d18d6f3808222f08",
        "timeStamp": 1649137534,
        "value": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 0
        }
    }
]
getUserByAccountId
Questo metodo restituisce i dettagli utente per un account specificato.
Ctx.ERC721Account.getUserByAccountId(accountId: string)
Parametri:
  • accountId: string: l'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON che include i dettagli utente nelle seguenti proprietà:
    • orgId: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione di rete corrente.
    • userId: il nome utente o l'ID e-mail dell'utente.
  • In caso di errore, un rifiuto con un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.getUserByAccountById(accountId)

{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountWithStatusByUser
Questo metodo restituisce i dettagli utente per un account specificato, incluso lo stato dell'account. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato o dall'Account Owner dell'account.
Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId)
Parametri:
  • orgId: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto account JSON che include le proprietà riportate di seguito.
  • accountId: l'ID dell'account utente.
  • userId: il nome utente o l'ID e-mail dell'utente.
  • orgId: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • tokenType: il tipo di token che contiene il conto.
  • noOfNfts - Il numero totale di NFT detenuti dal conto.
  • bapAccountVersion: parametro dell'oggetto conto per uso interno.
  • status: lo stato corrente dell'account utente.
  • In caso di errore, un oggetto non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId)

{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 0
}
getAccountByUser
Questo metodo restituisce i dettagli utente per un account specificato. Questo metodo può essere richiamato solo da un Token Admin del codice concatenato o dall'Account Owner dell'account.
Ctx.ERC721Account.getAccountByUser(orgId, userId)
Parametri:
  • orgId: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • userId: il nome utente o l'ID e-mail dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto account JSON che include le proprietà riportate di seguito.
  • accountId: l'ID dell'account utente.
  • userId: il nome utente o l'ID e-mail dell'utente.
  • orgId: l'ID del provider di servizi di appartenenza (MSP) dell'utente nell'organizzazione corrente.
  • tokenType: il tipo di token che contiene il conto.
  • noOfNfts - Il numero totale di NFT detenuti dal conto.
  • In caso di errore, un oggetto non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.getUserByAccountById(orgId, userId)

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Questo metodo restituisce il numero totale di operazioni NFT bloccate dall'utente specificato.
Ctx.ERC721Account.balanceOf(accountId: string)
Parametri:
  • accountId: string: l'ID account dell'utente.
Restituisce:
  • In caso di operazione riuscita, un oggetto JSON del conteggio NFT corrente. In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.balanceOf(accountId)

{"totalNfts": 0}

Metodi per la gestione dei ruoli

addRoleMember
Questo metodo aggiunge un ruolo a un utente e a un token specificati. Un ID account viene formato mediante la creazione di un hash SHA-256 dell'ID provider di servizi di appartenenza concatenato (orgId) e del nome utente o dell'ID e-mail (userId). Questa è una funzione asincrona.
Ctx.ERC721Token.addRoleMember(role: string, accountId: string)
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.
  • accountId: string: l'ID account su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, una promessa con un messaggio che include il ruolo aggiunto e l'ID account. In caso di errore, un rifiuto con un messaggio di errore
Esempio:

await this.Ctx.ERC721Token.addRoleMember(role, accountId);

{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRoleMember
Questo metodo rimuove un ruolo da un utente e un token specificati. Un ID account viene formato mediante la creazione di un hash SHA-256 dell'ID provider di servizi di appartenenza concatenato (orgId) e del nome utente o dell'ID e-mail (userId). Questa è una funzione asincrona.
Ctx.ERC721Token.removeRoleMember(role: string, accountId: string)
Parametri:
  • 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.
  • accountId: string: l'ID account su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, una promessa con un messaggio che include il ruolo rimosso e l'ID account. In caso di errore, un rifiuto con un messaggio di errore
Esempio:

await this.Ctx.ERC721Token.removeRoleMember(role, accountId);

{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
isInRole
Questo metodo restituisce un valore booleano per indicare se un utente e un token hanno un ruolo specificato. Un ID account viene formato mediante la creazione di un hash SHA-256 dell'ID provider di servizi di appartenenza concatenato (orgId) e del nome utente o dell'ID e-mail (userId). Questa è una funzione asincrona.
Ctx.ERC721Token.isInRole(role: string, accountId: string)
Parametri:
  • role: string: il nome del ruolo da controllare per l'utente specificato. I comportamenti mintable e burnable corrispondono alle proprietà minter_role_name e burner_role_name del file di specifica.
  • accountId: string: l'ID account su cui eseguire l'operazione.
Restituisce:
  • In caso di operazione riuscita, una promessa vera se il ruolo è presente per l'ID account specificato, altrimenti falsa. In caso di errore, un rifiuto con un messaggio di errore
Esempio:

await this.Ctx.ERC721Token.isInRole(role, accountId, tokenAsset)

{"result": "true"}
getAccountsByRole
Questo metodo restituisce un elenco di tutti gli ID account per un ruolo specificato.
Ctx.ERC721Role.getAccountsByRole(roleName: string)
Parametri:
  • roleName: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON di ID account. In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Role.getAccountsByRole(userRole)

{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Questo metodo restituisce un elenco di tutti gli utenti per un ruolo specificato.
Ctx.ERC721Role.getUsersByRole(userRole: string)
Parametri:
  • role: string: il nome del ruolo da cercare.
Restituisce:
  • In caso di operazione riuscita, un array JSON di oggetti utente. Ogni oggetto contiene l'ID utente e l'ID organizzazione. In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Role.getUsersByRole(userRole)

{
    "users": [
        {
            "userId": "admin",
            "orgId": "Org1MSP"
        }
    ]
}

Metodi per la gestione della cronologia delle transazioni

getAccountTransactionHistory
Questo metodo restituisce un array dei dettagli della cronologia delle transazioni per un conto specificato.
Ctx.ERC721Account.getAccountTransactionHistory(accountId: string)
Parametri:
  • accountId: string: l'ID dell'account.
Restituisce:
  • In caso di operazione riuscita, un array di oggetti transazione conto in formato JSON:
    • transactionId: l'ID della transazione.
    • transactedAccount - Il conto con cui ha avuto luogo la transazione.
    • transactionType: il tipo di transazione.
    • timestamp: l'ora della transazione.
    • noOfNfts: il saldo del conto chiamante.
    • In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.GetAccountTransactionHistory(accountId)

[
    {
        "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
        "timestamp": "2022-04-05T09:30:44.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "BURN"
    },
    {
        "transactionId": "otransaction~a605f1fa62e511c2945fce5437f983a5e70ec814b82520d3ecd2d81e3ecf53a3",
        "timestamp": "2022-04-05T09:30:22.000Z",
        "tokenId": "monalisa1",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getAccountTransactionHistoryWithFilters
Questo metodo restituisce la cronologia delle transazioni conto per un utente specificato, filtrata in base a PageSize, Bookmark, startTime e endTime. Questo metodo può essere richiamato solo quando è connesso alla rete remota di Oracle Blockchain Platform.
async getAccountTransactionHistoryWithFilters(orgId: string, userId: string, filters?: Filters)
Parametri:
  • accountId: string: l'ID dell'account.
  • filters: object: oggetto della classe Filtro contenente quattro attributi: pageSize, bookmark, startTime e endTime. Se vuoto, vengono restituiti tutti i record. La proprietà PageSize determina il numero di record da restituire. Se PageSize è 0, la dimensione predefinita della pagina è 20. La proprietà Bookmark determina l'indice iniziale dei record da restituire. Per ulteriori informazioni, vedere la documentazione di Hyperledger Fabric. Le proprietà StartTime e EndTime devono essere specificate in formato RFC-3339.
Restituisce:
  • In caso di operazione riuscita, un array di oggetti transazione conto in formato JSON:
    • transactionId: l'ID della transazione.
    • transactedAccount - Il conto con cui ha avuto luogo la transazione.
    • transactionType: il tipo di transazione.
    • timestamp: l'ora della transazione.
    • noOfNfts: il saldo del conto chiamante.
    • In caso di errore, un oggetto di errore non nullo che contiene un messaggio di errore.
Esempio:

await this.Ctx.ERC721Account.getAccountTransactionHistoryWithFilters(accountId, filters)

[
    {
        "transactionId": "otransaction~ca4c07bf04240345de918cbf1f4f3da4b4d0ab044c5b8bea94343e427d9ed4e7",
        "timestamp": "2022-04-05T09:28:30.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "CREDIT"
    },
    {
        "transactionId": "otransaction~cfb52ffc8c34c7fd86210fcf8c5f53d9f92a056c45ed3a33671d638020c1f9cb",
        "timestamp": "2022-04-05T09:05:45.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~e7747b3001a170f88688620956320e9402e1dd8edad8afb4818a08a34647337c",
        "timestamp": "2022-04-05T08:30:42.000Z",
        "tokenId": "monalisa",
        "transactedAccount": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "transactionType": "MINT"
    }
]
getTransactionById
Questo metodo restituisce la cronologia di un asset Transaction.
Ctx.ERC721Transaction.getTransactionById(transactionId: string)
Parametri:
  • transactionId: string: l'ID del cespite transazione.
Esempio:

await this.Ctx.ERC721Transaction.getTransactionById(transactionId)

{
    "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
    "history": [
        {
            "trxId": "6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
            "timeStamp": 1649151044,
            "value": {
                "assetType": "otransaction",
                "transactionId": "otransaction~6ffd0d94f234c12444a5d5aa559563b59dff4d2280b573fea956dc632bdaf5d4",
                "tokenId": "monalisa1",
                "fromAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "toAccountId": "",
                "triggeredByAccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
                "transactionType": "BURN",
                "timestamp": "2022-04-05T09:30:44.000Z",
            }
        }
    ]
}
deleteHistoricalTransactions
Questo metodo elimina dal database di stato le transazioni che risalgono a una data precedente a quella specificata.
Ctx.ERC721Transaction.deleteTransactions(timeToExpiration: Date)
Parametri:
  • timeToExpiration: Date: la data e l'ora. Le transazioni precedenti all'ora specificata verranno eliminate.
Esempio:

await this.Ctx.ERC721Transaction.deleteTransactions(timeToExpiration)

{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "62ad6753cf2bfa54816b4c2f0ea325478b1cb1b84f8e13e6742c00f277310081",
        "payload": {
            "msg": "Successfuly deleted transaction older than date: Fri Apr 08 2022 00:00:00 GMT+0000 (Coordinated Universal Time).",
            "transactions": [
                "otransaction~e687531b71d943da2fb129638784fb93a96e7698013dfc51c8c6bf4f5f797059",
                "otransaction~18446adf59b669e12990a1cf3ea0a7a15764f967fa694cf263aee0cd5a21d952",
                "otransaction~5560d4b5e0b0d0b9a6e97dcd7f81241a5daf56497a7b6819c6a55cebacc106f2",
                "otransaction~f0a0a64ec1a0c92ac732706dd75ffbd3feecd9c48fc79e42c551485edf0542cb"
            ]
        },
        "encode": "JSON"
    }
}

Gestione del comportamento dei token - Comportamento minimo

getMaxMintQuantity
Questo metodo restituisce la quantità minima massima di un token. Se il funzionamento di max_mint_quantity non è configurato nel file di specifica, il valore predefinito è 0 e è possibile creare un numero infinito di token.
Ctx.ERC721Token.getMaxMintQuantity(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset token su cui eseguire le operazioni.
Restituisce:
  • In caso di operazione riuscita, la quantità minima massima del token nel tipo di dati numerico. In caso di errore, viene restituito un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.getMaxMintQuantity(tokenAsset);

20000
getTotalMintedTokens
Questo metodo restituisce il numero totale di token coniati disponibili nel sistema per il token specificato. Il numero netto di token disponibili è il numero totale di token coniati meno il numero di token bruciati. Questa è una funzione asincrona.
Ctx.ERC721Token.getTotalMintedTokens()
Parametri:
  • token: <Instance of Token Class>: l'asset token su cui eseguire le operazioni.
Restituisce:
  • In caso di operazione riuscita, il totale dei token coniati, nel tipo di dati numerico. In caso di errore, viene restituito un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.getTotalMintedTokens(tokenAsset);

4000

Gestione del comportamento dei token - Funzionamento trasferibile

safeTransferFrom
Questa è una funzione asincrona. Questo metodo trasferisce la proprietà dell'NFT specificato dal chiamante a un altro conto. Questo metodo include le seguenti convalide:
  • Il token esiste e non viene masterizzato.
  • L'account mittente e l'account ricevente esistono e non sono lo stesso account.
  • L'account mittente è proprietario del token.
  • Il chiamante della funzione è il mittente.
Ctx.ERC721Token.safeTransferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>, data?: string)
Parametri:
  • fromAccountId: string: l'ID account del mittente nell'organizzazione corrente.
  • toAccountId: string: l'ID conto del ricevente nell'organizzazione corrente.
  • token: <Instance of Token Class>: l'asset token da trasferire.
  • data: string - Informazioni aggiuntive facoltative da memorizzare nella transazione.
Restituisce:
  • In caso di operazione riuscita, una promessa con un messaggio di operazione riuscita che include i dettagli dell'account. Gli ID account hanno il prefisso oaccount~. In caso di errore, un rifiuto con un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.safeTransferFrom(fromAccountId, toAccountId, tokenAsset, data);

{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
transferFrom
Questa è una funzione asincrona. Questo metodo trasferisce la proprietà dell'operazione NFT specificata da un conto mittente a un conto ricevente. È responsabilità del chiamante passare i parametri corretti. Questo metodo può essere richiamato da qualsiasi utente, non solo dal proprietario del token. Questo metodo include le seguenti convalide:
  • Il token esiste e non viene masterizzato.
  • L'account mittente e l'account ricevente esistono e non sono lo stesso account.
  • L'account mittente è proprietario del token.
Ctx.ERC721Token.transferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>)
Parametri:
  • fromAccountId: string: l'ID account del mittente nell'organizzazione corrente.
  • toAccountId: string: l'ID conto del ricevente nell'organizzazione corrente.
  • token: <Instance of Token Class>: l'asset token da trasferire.
Restituisce:
  • In caso di operazione riuscita, una promessa con un messaggio di operazione riuscita che include i dettagli dell'account. Gli ID account hanno il prefisso oaccount~. In caso di errore, un rifiuto con un messaggio di errore.
\Ad esempio:

await this.Ctx.ERC721Token.transferFrom(fromAccountId, toAccountId, tokeAsset, data);

{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1) to Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}

Gestione del comportamento dei token - Comportamento utilizzabile

burn
Questo metodo disattiva o brucia l'NFT specificato dall'account del chiamante. Il chiamante di questo metodo deve avere un account. Impossibile masterizzare un token a meno che il file di specifica del token non includa il comportamento burnable. Se nella sezione roles del file di specifica non viene specificata alcuna proprietà burner_role_name, il proprietario del token può masterizzare il token. Se nella sezione roles è specificata una proprietà burner_role_name, l'utente ha assegnato il ruolo di masterizzatore che è anche il creatore (minter) del token può masterizzare il token. Questa è una funzione asincrona.
Ctx.ERC721Token.burn(token: <Instance of Token Class>)
Parametri:
  • token: <Instance of Token Class>: l'asset del token da masterizzare.
Restituisce:
  • In caso di operazione riuscita, una promessa con un messaggio di operazione riuscita che include i dettagli dell'account. In caso di errore, un rifiuto con un messaggio di errore.
Esempio:

await this.Ctx.ERC721Token.burn(tokenAsset);

{msg": "Successfully burned NFT token: 'monalisa1' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}