Projet échafaudé TypeScript NFT pour ERC-721

Blockchain App Builder prend l'entrée de votre fichier de spécification NFT et génère un projet de chaîne de blocs entièrement fonctionnel.

Le projet génère automatiquement des classes et des fonctions de cycle de vie NFT, y compris des méthodes CRUD et non CRUD, ainsi qu'une trousse SDK de segmentation en unités. La validation des arguments, la conversion de paramètres/déconversion des paramètres et la capacité de persistance transparente sont toutes prises en charge automatiquement.

Pour plus d'informations sur le projet échafaudé et les méthodes qui ne sont pas directement liées à des tâches de transfert de contenu, voir Projet de code de chaîne TypeScript échafaudé.

Modèle

Chaque classe de modèle segmentée en unités étend la classe OchainModel. La capacité de persistance transparente, ou ORM simplifié, est saisie dans la 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;

}

Contrôleur

La classe de contrôleur principale étend la classe OchainController. Il n'y a qu'un seul contrôleur principal.

export class DigiCurrCCController extends OchainController{

Vous pouvez créer n'importe quel nombre de classes, de fonctions ou de fichiers, mais seules les méthodes définies dans la classe de contrôleur principale peuvent être appelées. Les autres méthodes sont masquées.

Vous pouvez utiliser les méthodes de la trousse SDK de jeton pour écrire des méthodes personnalisées pour votre application d'affaires.

Méthodes NFT générées automatiquement

Blockchain App Builder génère automatiquement des méthodes pour prendre en charge les NFT et les cycles de vie NFT. Vous pouvez utiliser ces méthodes pour initialiser les NFT, gérer les rôles et les comptes et effectuer d'autres tâches de cycle de vie NFT sans codage supplémentaire. Les méthodes de contrôleur doivent avoir un décorateur @Validator(...params) pour pouvoir être appelées.

Méthodes pour la gestion du contrôle d'accès

addTokenAdmin
Cette méthode ajoute un utilisateur en tant que Token Admin du code de chaîne. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@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);
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • Au succès, un message comprend les détails de l'utilisateur qui a été ajouté comme Token Admin du code de chaîne.
Exemple de valeur renvoyée :
{"msg":"Successfully added Admin (orgId: Org1MSP, userId: User1)"}
removeTokenAdmin
Cette méthode supprime un utilisateur en tant que Token Admin du code de chaîne. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@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);
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un message contenant les détails de l'utilisateur qui a été supprimé comme Token Admin du code de chaîne.
Exemple de valeur renvoyée :
{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: User1)"}
isTokenAdmin
Cette méthode retourne la valeur booléenne true si l'appelant de la fonction est Token Admin, sinon elle retourne false. Un Token Admin peut appeler cette fonction sur tout autre utilisateur du réseau de chaîne de blocs. Les autres utilisateurs ne peuvent appeler cette méthode que sur leur propre compte.
@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);
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • La méthode retourne true si l'appelant est un Token Admin, sinon elle retourne false.
Exemple de valeur renvoyée :
{"result": true}
getAllTokenAdmins
Cette méthode retourne une liste de tous les utilisateurs qui sont des Token Admin du code de chaîne. Cette méthode ne peut être appelée que par la chaîne Token Admin du code de chaîne.
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.getAllAdmins', 'TOKEN');
    return await this.Ctx.ERC721Admin.getAllAdmins();
}
Paramètres :
  • aucune
Retourne :
  • En cas de succès, un tableau admins au format JSON contenant les objets orgId et userId.
Exemple de valeur renvoyée :
{"admins":[{"orgId":"Org1MSP","userId":"admin"}]}

Méthodes de gestion de la configuration de jeton

init
Cette méthode est appelée lorsque le code de chaîne est instancié. Chaque valeur Token Admin est identifiée par les informations userId et orgId dans le paramètre adminList. userId est le nom d'utilisateur ou l'ID courriel du responsable de l'instance ou de l'utilisateur qui est connecté à l'instance. orgId est l'ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation de réseau courante. Le paramètre adminList est obligatoire lors du premier déploiement du code de chaîne. Si vous mettez à niveau le code de chaîne, transmettez une liste vide ([]). Toutes les autres informations du paramètre adminList sont ignorées lors des mises à niveau.
@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;
}
Paramètres :
  • adminList array - Tableau d'informations {orgId, userId} qui spécifie la liste des administrateurs de jetons. Le tableau adminList est un paramètre obligatoire.
getAllTokens
Cette méthode retourne toutes les ressources de jeton enregistrées dans la base de données d'état. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant.
@GetMethod()
@Validator()
public async getAllTokens() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.ERC721Token.getAllTokens();
}
Paramètres :
  • aucune
Retourne :
  • Liste de toutes les ressources de jeton au format JSON.
Exemple de valeur renvoyée :
[
    {
        "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
Cette méthode retourne toutes les ressources de jeton appartenant à un utilisateur spécifié. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne ou par le responsable du compte.
@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);
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • Liste des ressources de jeton au format JSON.
Exemple de valeur renvoyée :
[
    {
        "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
Cette méthode retourne un objet de jeton si le jeton est présent dans la base de données d'état. Cette méthode ne peut être appelée que par Token Admin du code de chaîne ou du responsable du jeton.
@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;
}
Paramètres :
  • tokenId: string - ID du jeton à obtenir.
Retourne :
  • Ressource de jeton au format JSON.
Exemple de valeur renvoyée :
{
    "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
Cette méthode retourne l'historique pour un ID jeton spécifié. Il s'agit d'une méthode asynchrone. Cette méthode ne peut être appelée que lorsqu'elle est connectée au réseau distant Oracle Blockchain Platform. Tout le monde peut appeler cette méthode.
@GetMethod()
@Validator(yup.string())
public async getTokenHistory(tokenId: string) {
   // await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.history', 'TOKEN');
   return await this.Ctx.ERC721Token.history(tokenId);
}
Paramètres :
  • tokenId: string - ID du jeton.
Exemple de valeur renvoyée :
[
    {
        "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
Il s'agit d'une méthode utilitaire qui retourne une instance du jeton pour un ID jeton spécifié. Cette méthode est utilisée par de nombreuses méthodes générées automatiquement pour extraire les objets de jeton. Vous pouvez appeler cette méthode au besoin à partir de vos méthodes personnalisées. Lorsque vous créez une ressource ou une classe segmentée en unités, mettez à jour la casse du commutateur avec la classe Token correspondante pour retourner l'objet de jeton correct. La commande ochain sync dans le générateur d'applications de chaîne de blocs crée automatiquement un cas de commutateur lorsqu'une ressource segmentée en unités est créée dans le fichier de spécification. Cette méthode n'a pas de décorateur de méthode @Validator(), ce qui signifie que cette méthode n'est pas directement utilisable et ne peut être appelée qu'à partir d'autres méthodes.
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}]`);
    }
}
Paramètres :
  • tokenId: string - ID du jeton.
ownerOf
Cette méthode retourne l'ID compte du responsable de l'ID jeton spécifié. Tout le monde peut appeler cette méthode.
@GetMethod()
@Validator(yup.string())
public async ownerOf(tokenId: string) {
   return await this.Ctx.ERC721Token.ownerOf(tokenId);
}
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • Objet JSON de l'ID compte du responsable.
Exemple de valeur renvoyée :
{"owner": "oaccount~d6d22c3167e3c6ab9ee5653e1a008c37c20cc47ebb0229ca0aedfafe64c675b8"}
name
Cette méthode retourne le nom de la classe de jeton. Tout le monde peut appeler cette méthode.
@GetMethod()
@Validator()
public async name() {
   return await this.Ctx.ERC721Token.name();
}
Paramètres :
  • aucune
Retourne :
  • Objet JSON du nom du jeton.
Exemple de valeur renvoyée :
{"tokenName": "artcollection"}
symbol
Cette méthode retourne le symbole de la classe de jeton. Tout le monde peut appeler cette méthode.
@GetMethod()
@Validator()
public async symbol() {
   return await this.Ctx.ERC721Token.symbol();
}
Paramètres :
  • aucune
Retourne :
  • Objet JSON du symbole de jeton.
Exemple de valeur renvoyée :
{"symbol": "PNT"}
tokenURI
Cette méthode retourne l'URI d'un jeton spécifié. Tout le monde peut appeler cette méthode.
@GetMethod()
@Validator(yup.string())
public async tokenURI(tokenId: string) {
   return await this.Ctx.ERC721Token.tokenURI(tokenId);
}
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • En cas de succès, un objet JSON de l'URI du jeton.
Exemple de valeur renvoyée :
{"tokenURI": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\
.ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
totalSupply
Cette méthode retourne le nombre total de jetons frappés. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@GetMethod()
@Validator()
public async totalSupply() {
  await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalSupply', 'TOKEN');
  return await this.Ctx.ERC721Token.totalSupply();
}
Paramètres :
  • aucune
Retourne :
  • En cas de réussite, un objet JSON du nombre de jetons.
Exemple de valeur renvoyée :
{"totalSupply": 3}
totalNetSupply
Cette méthode retourne le nombre total de jetons frappés moins le nombre de jetons brûlés. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@GetMethod()
@Validator()
public async totalNetSupply() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalNetSupply', 'TOKEN');
    return await this.Ctx.ERC721Token.getTotalMintedTokens();
}
Paramètres :
  • aucune
Retourne :
  • En cas de réussite, un objet JSON du nombre de jetons.
Exemple de valeur renvoyée :
{"totalNetSupply": 1}

Méthodes de gestion des comptes

createAccount
Cette méthode crée un compte pour un utilisateur et un jeton spécifiés. Un compte doit être créé pour tout utilisateur qui aura des jetons à tout moment. Les comptes suivent le nombre de transactions NFT d'un utilisateur. Les utilisateurs doivent avoir des comptes dans le réseau pour effectuer les opérations liées aux jetons. Vous ne pouvez créer qu'un seul compte NFT par utilisateur.

Un ID compte est un jeu de caractères alphanumériques, précédé de oaccount~ et suivi d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion (orgId) de l'utilisateur dans l'organisation de réseau courante, du nom d'utilisateur ou de l'ID courriel (userId) du responsable de l'instance ou de l'utilisateur connecté à l'instance, et de la chaîne constante nft. Cette méthode ne peut être appelée que par la chaîne Token Admin du code de chaîne.

@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);
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • tokenType: string - Le seul type de jeton pris en charge est nonfungible.
Retourne :
  • En cas de réussite, un objet JSON du compte qui a été créé. Le paramètre bapAccountVersion est défini dans l'objet de compte pour une utilisation interne.
Exemple de valeur renvoyée :
{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "bapAccountVersion": 0,
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Cette méthode retourne le nombre total de transactions NFT détenues par un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne ou par le responsable du compte.
@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);
 }
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • Objet JSON du nombre NFT courant.
Exemple de valeur renvoyée :
{"totalNfts": 0}
getAllAccounts
Cette méthode retourne une liste de tous les comptes. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant.
@GetMethod()
@Validator()
public async getAllAccounts() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.ERC721Account.getAllAccounts();
}
Paramètres :
  • aucune
Retourne :
  • En cas de succès, un tableau JSON de tous les comptes.
Exemple de valeur renvoyée :
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }    
    }
]
getAccountByUser
Cette méthode retourne les détails du compte pour un utilisateur spécifié. Cette méthode ne peut être appelée que par Token Admin du code de chaîne ou par Account Owner du compte.
@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);
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un objet de compte JSON qui inclut les propriétés suivantes :
  • bapAccountVersion - Paramètre d'objet de compte à usage interne.
  • status - Statut courant du compte d'utilisateur.
  • accountId - ID du compte d'utilisateur.
  • userId - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • orgId - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • tokenType - Type de jeton que détient le compte.
  • noOfNfts - Nombre total de NFT détenues par le compte.
Exemple de valeur renvoyée :
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 0
}
getUserByAccountId
Cette méthode retourne les détails de l'utilisateur d'un compte spécifié. Cette méthode peut être appelée par n'importe quel utilisateur.
@GetMethod()
@Validator(yup.string())
public async getUserByAccountId(accountId: string) {
    return await this.Ctx.ERC721Account.getUserByAccountId(accountId);
}
Paramètres :
  • accountId: string - ID du compte.
Retourne :
  • En cas de réussite, un objet JSON contenant les détails de l'utilisateur (orgId et userId).
Exemple de valeur renvoyée :
{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountHistory
Cette méthode retourne l'historique du compte pour un utilisateur spécifié. Il s'agit d'une méthode asynchrone. Cette méthode ne peut être appelée que par la chaîne Token Admin du code de chaîne ou par le responsable du compte.
@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);
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de succès, un objet JSON de l'historique du compte. Le paramètre bapAccountVersion est défini dans l'objet de compte pour une utilisation interne.
Exemple de valeur renvoyée :
[
    {
        "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
        }
    }
]

Méthodes pour la gestion des rôles

addRole
Cette méthode ajoute un rôle à un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@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);
}
Paramètres :
  • role: string - Nom du rôle à ajouter à l'utilisateur spécifié. Les comportements mintable et burnable correspondent aux propriétés minter_role_name et burner_role_name du fichier de spécification.
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un message avec les détails du compte.
Exemple de valeur renvoyée :
{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRole
Cette méthode supprime un rôle d'un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@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);
}
Paramètres :
  • role: string - Nom du rôle à supprimer de l'utilisateur spécifié. Les comportements mintable et burnable correspondent aux propriétés minter_role_name et burner_role_name du fichier de spécification.
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un message avec les détails du compte.
Exemple de valeur renvoyée :
{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Cette méthode retourne une liste de tous les ID compte pour un rôle spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@GetMethod()
@Validator(yup.string())
public async getAccountsByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getAccountsByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getAccountsByRole(role);
}
Paramètres :
  • role: string - Nom du rôle à rechercher.
Retourne :
  • En cas de succès, un tableau JSON d'ID compte.
Exemple de valeur renvoyée :
{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Cette méthode retourne une liste de tous les utilisateurs pour un rôle spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@GetMethod()
@Validator(yup.string())
public async getUsersByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getUsersByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getUsersByRole(role);
}
Paramètres :
  • role: string - Nom du rôle à rechercher.
Retourne :
  • En cas de succès, un tableau JSON des objets utilisateur (orgId et userId).
Exemple de valeur renvoyée :
{
    "users": [
        {
            "userId": "admin",
            "orgId": "Org1MSP"
        }
    ]
}
isInRole
Cette méthode retourne une valeur booléenne pour indiquer si un utilisateur a un rôle spécifié. Cette méthode ne peut être appelée que par Token Admin du code de chaîne ou par Account Owner du compte.
@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) };
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • role: string - Nom du rôle à rechercher.
Retourne :
  • En cas de succès, une chaîne JSON du résultat booléen.
Exemple de valeur renvoyée :
{"result":"true"}

Méthodes de gestion de l'historique des transactions

getAccountTransactionHistory
Cette méthode retourne l'historique des transactions de compte pour un utilisateur spécifié. Il s'agit d'une méthode asynchrone. Cette méthode ne peut être appelée que par la chaîne Token Admin du code de chaîne ou par le responsable du compte.
@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)
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Exemple de valeur renvoyée :
[
    {
        "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
Cette méthode retourne l'historique des transactions de compte pour un utilisateur spécifié, filtré par PageSize, Bookmark, startTime et endTime. Il s'agit d'une méthode asynchrone. Cette méthode ne peut être appelée que lorsqu'elle est connectée au réseau distant Oracle Blockchain Platform. Cette méthode ne peut être appelée que par la chaîne Token Admin du code de chaîne ou par le responsable du compte.
@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)
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • filters: object - Objet de la classe Filter qui contient quatre attributs : pageSize, bookmark, startTime et endTime.
Exemple de valeur renvoyée :
[
    {
        "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
Cette méthode retourne l'historique des transactions pour un ID transaction spécifié. Il s'agit d'une méthode asynchrone. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne ou par le responsable du compte.
@GetMethod()
@Validator(yup.string())
public async getTransactionById(transactionId: string) {
    return await this.Ctx.ERC721Transaction.getTransactionById(transactionId);
}
Paramètres :
  • transactionId: string - ID de la transaction, qui est le préfixe otransaction~ suivi du code de hachage à 64 bits au format hexadécimal.
Exemple de valeur renvoyée :
{
    "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
Cette méthode supprime les transactions antérieures à un horodatage spécifié dans la base de données d'état. Il s'agit d'une méthode asynchrone. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
@Validator(yup.date())
public async deleteHistoricalTransactions(timeToExpiration: Date) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TRANSACTION.deleteTransactions', 'TOKEN');
    return await this.Ctx.ERC721Transaction.deleteTransactions(timeToExpiration);
}
Paramètres :
  • timestamp: string - Horodatage. Toutes les transactions antérieures à l'horodatage seront supprimées.
Exemple de valeur renvoyée :
{
    "msg": "Successfuly deleted transaction older than date: Thu Apr 07 2022 21:18:59 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
        "otransaction~30513757d8b647fffaafac440d743635f5c1b2e41b25ebd6b70b5bbf78a2643f",
        "otransaction~ac0e908c735297941ba58bb208ee61ff4816a1e54c090d68024f82adf743892b"
    ]
}

Méthodes de gestion du comportement des jetons - Comportement mintable

create<Token Name>Token
Cette méthode crée (mints) un NFT. La ressource et les propriétés associées sont enregistrées dans la base de données d'état. L'appelant de cette transaction doit avoir un compte de jeton. L'appelant de cette transaction devient le propriétaire de la NFT. Si le fichier de spécification de jeton inclut la section roles pour behaviors et la propriété minter_role_name pour roles, l'appelant de la transaction doit avoir le rôle de filtre. Sinon, n'importe quel appelant peut extraire des NFT.
@Validator(< Token Class >)
public async create< Token Name >Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.createToken(tokenAsset);
}
Paramètres :
  • tokenAsset: <Token Class> - Ressource de jeton à extraire. Pour plus d'informations sur les propriétés de la ressource de jeton, voir le fichier de spécification d'entrée.
Retourne :
  • En cas de réussite, un objet de ressource de jeton JSON qui inclut les propriétés suivantes :
  • metadata - Informations JSON décrivant le jeton.
  • createdBy - ID compte de l'utilisateur qui a appelé la transaction pour extraire le jeton.
  • creationDate - Horodatage de la transaction.
  • isBurned - Valeur booléenne qui indique si la table NFT identifiée par tokenId est brûlée.
  • tokenName - Nom du jeton.
  • tokenDesc - Description du jeton.
  • symbol - Symbole du jeton.
  • tokenStandard - Norme du jeton.
  • tokenType - Type de jeton détenu par ce compte.
  • tokenUnit - Unité du jeton.
  • behaviors - Description de tous les comportements de jeton.
  • mintable - Description des propriétés du comportement mintable. La propriété max_mint_quantity spécifie le nombre maximal de transactions NFT de cette classe de jeton pouvant être créées.
  • owner - ID compte du responsable courant du jeton. Au cours du processus de frappe, l'appelant de cette méthode devient le propriétaire du jeton.
  • tokenUri - URI du jeton.
Exemple de valeur renvoyée :
{
    "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
Cette méthode met à jour les propriétés du jeton. Cette méthode ne peut être appelée que par l'utilisateur responsable ou créateur du jeton. Après la création d'une ressource de jeton, seul le responsable du jeton peut mettre à jour les propriétés personnalisées du jeton. Si l'utilisateur est à la fois le responsable et le créateur d'un jeton, il peut également mettre à jour la propriété TokenDesc. Les métadonnées de jeton ne peuvent pas être mises à jour. Vous devez transmettre toutes les propriétés de jeton à cette méthode, même si vous souhaitez mettre à jour uniquement certaines propriétés.
@Validator(<Token Class>)
public async update<Token name>Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.updateToken(tokenAsset);
}
Paramètres :
  • tokenAsset: <Token Class> - Ressource de jeton à mettre à jour. Pour plus d'informations sur les propriétés de la ressource de jeton, voir le fichier de spécification d'entrée.
Retourne :
  • En cas de succès, un objet de ressource de jeton JSON mis à jour
Exemple de valeur renvoyée :
{
    "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
}

Méthodes de gestion du comportement des jetons - Comportement transférable

safeTransferFrom
Il s'agit d'une fonction asynchrone. Cette méthode transfère la propriété de la TNF spécifiée de l'appelant à un autre compte. Cette méthode comprend les validations suivantes :
  • Le jeton existe et n'est pas brûlé.
  • Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
  • Le compte de l'expéditeur est responsable du jeton.
  • L'appelant de la fonction est l'expéditeur.
@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);
}
Paramètres :
  • fromOrgId: string - ID fournisseur de services d'adhésion (MSP) de l'expéditeur et du responsable du jeton dans l'organisation courante.
  • fromUserId: string - Nom d'utilisateur ou ID courriel de l'expéditeur et du responsable du jeton.
  • toOrgId: string - ID fournisseur de services d'adhésion (MSP) du destinataire dans l'organisation courante.
  • toUserId: string - Nom d'utilisateur ou ID courriel du destinataire.
  • tokenId: string - ID du jeton à transférer.
  • data: string - Informations supplémentaires facultatives à stocker dans l'enregistrement de transaction.
Retourne :
  • En cas de succès, un message contenant les détails du compte de l'expéditeur et du destinataire.
Exemple de valeur renvoyée :
{"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
Il s'agit d'une fonction asynchrone. Cette méthode transfère la propriété de la transaction de transfert de fonds nationale spécifiée d'un compte d'expéditeur à un compte de destinataire. Il est de la responsabilité de l'appelant de transmettre les paramètres corrects. Cette méthode peut être appelée par n'importe quel utilisateur, pas seulement par le propriétaire du jeton. Cette méthode comprend les validations suivantes :
  • Le jeton existe et n'est pas brûlé.
  • Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
  • Le compte de l'expéditeur est responsable du jeton.
@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);
}
Paramètres :
  • fromOrgId: string - ID fournisseur de services d'adhésion (MSP) de l'expéditeur dans l'organisation courante.
  • fromUserId: string - Nom d'utilisateur ou ID courriel de l'expéditeur.
  • toOrgId: string - ID fournisseur de services d'adhésion (MSP) du destinataire dans l'organisation courante.
  • toUserId: string - Nom d'utilisateur ou ID courriel du destinataire.
  • tokenId: string - ID du jeton à transférer.
Retourne :
  • En cas de succès, un message contenant les détails du compte de l'expéditeur et du destinataire.
Exemple de valeur renvoyée :
{"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)"}

Méthodes de gestion du comportement des jetons - Comportement brûlable

burn
Cette méthode désactive, ou brûle, le NFT spécifié du compte de l'appelant. L'appelant de cette méthode doit avoir un compte. Un jeton ne peut pas être gravé sauf si le fichier de spécification du jeton inclut le comportement burnable. Si aucune propriété burner_role_name n'est spécifiée dans la section roles du fichier de spécification, le responsable du jeton peut le graver. Si une propriété burner_role_name est spécifiée dans la section roles, l'utilisateur affecté au rôle de brûleur qui est également le créateur ou le responsable du jeton peut brûler le jeton.
@Validator(yup.string())
public async burn(tokenId: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    return await this.Ctx.ERC721Token.burn(tokenAsset);
}
Paramètres :
  • tokenId: string - ID du jeton à graver.
Retourne :
  • En cas de succès, un message avec les détails du compte.
Exemple de valeur renvoyée :
{"msg": "Successfully burned NFT token: 'monalisa1' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
burnNFT
Cette méthode désactive ou grave le NFT spécifié à partir du compte de l'appelant et retourne un objet de jeton et un historique de jeton. L'appelant de cette méthode doit avoir un compte. Un jeton ne peut pas être gravé sauf si le fichier de spécification du jeton inclut le comportement burnable. Si aucune propriété burner_role_name n'est spécifiée dans la section roles du fichier de spécification, le responsable du jeton peut le graver. Si une propriété burner_role_name est spécifiée dans la section roles, l'utilisateur affecté au rôle de brûleur qui est également le créateur ou le responsable du jeton peut brûler le jeton.
@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)};
}
Paramètres :
  • tokenId: string - ID du jeton à graver.
Retourne :
  • En cas de succès, un objet de jeton qui inclut des informations d'historique de jeton.
Exemple de valeur renvoyée :
{
    "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}}]"
}

Méthodes personnalisées

Vous pouvez utiliser les méthodes de la trousse SDK de jeton pour écrire des méthodes personnalisées pour votre application d'affaires.

L'exemple suivant montre comment utiliser des méthodes de trousse SDK de jeton dans des méthodes personnalisées. Lorsque la méthode sell est appelée, elle publie un jeton à vendre pour un prix spécifié.

@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);
    }
}

Méthodes de trousse SDK NFT

Méthodes pour la gestion du contrôle d'accès

La trousse SDK NFT fournit une fonction de contrôle d'accès. Certaines méthodes ne peuvent être appelées que par Token Admin ou Account Owner du jeton. Vous pouvez utiliser cette fonction pour vous assurer que les opérations sont effectuées uniquement par les utilisateurs prévus. Tout accès non autorisé entraîne une erreur. Pour utiliser la fonction de contrôle d'accès, importez la classe Authorization à partir du module ../lib/erc721-auth.
import { ERC721Authorization } from '../lib/erc721-auth';
checkAuthorization
Utilisez cette méthode pour ajouter une vérification de contrôle d'accès à une opération. Il s'agit d'une fonction asynchrone. La plupart des méthodes générées automatiquement incluent le contrôle d'accès. Certaines méthodes de jeton ne peuvent être exécutées que par ERC721Admin ou Account Owner du jeton ou par MultipleAccountOwner pour les utilisateurs ayant plusieurs comptes. La méthode checkAuthorization fait partie de la classe Authorization, à laquelle vous accédez au moyen de l'objet Ctx. Le mappage du contrôle d'accès est décrit dans le fichier ../lib/constant.ts, comme indiqué dans le texte suivant. Vous pouvez modifier le contrôle d'accès en modifiant le fichier ../lib/constant.ts. Pour utiliser votre propre contrôle d'accès ou pour désactiver le contrôle d'accès, supprimez le code de contrôle d'accès des méthodes de contrôleur et des méthodes personnalisées générées automatiquement.
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)
Paramètres :
  • classFuncName: string - Valeur de mappage entre la classe et les méthodes, comme décrit dans le fichier ../lib/constant.ts.
  • ...args - Argument de variable où args[0] prend la constante 'TOKEN' et args[1] prend le paramètre accountId pour ajouter une vérification de contrôle d'accès pour AccountOwner. Pour ajouter une vérification de contrôle d'accès pour MultipleAccountOwner, args[1] prend le paramètre orgId et args[2] prend le paramètre userId.
Retourne :
  • Sur le succès, une promesse. En cas d'erreur, un rejet avec un message d'erreur.
Exemples :

Accès Admin

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

Accès AccountOwner

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

Accès MultipleAccountOwner

await this.Ctx.ERC721Auth.checkAuthorization('ADMIN.isUserTokenAdmin', 'TOKEN', orgId, userId);
isUserTokenAdmin
Cette méthode retourne la valeur booléenne true si l'appelant de la fonction est Token Admin. Sinon, la méthode retourne false. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Auth.isUserTokenAdmin(orgId: string, userId: string)
Paramètres :
  • orgId - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation de réseau courante.
  • userId - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • Une réponse booléenne et un message d'erreur en cas d'erreur.
Exemple :

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

{"result":false}
addAdmin
Cette méthode ajoute un utilisateur en tant que Token Admin du code de chaîne du jeton.
Ctx.ERC721Admin.addAdmin(orgId: string, userId: string)
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un message listant les détails de l'utilisateur ajoutés comme Token Admin du code de chaîne du jeton. En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

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

{"msg": "Successfully added Admin (orgId: Org1MSP, userId: user1)"}
removeAdmin
Cette méthode supprime un utilisateur en tant que Token Admin du code de chaîne du jeton.
Ctx.ERC721Admin.removeAdmin(orgId: string, userId: string)
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un message listant les détails de l'utilisateur supprimé en tant que Token Admin du code de chaîne du jeton. En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

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

{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: user1)"}
getAllAdmins
Cette méthode retourne une liste de tous les utilisateurs Token Admin.
Ctx.ERC721Admin.getAllAdmins()
Paramètres :
  • aucune
Retourne :
  • En cas de succès, une liste de tous les utilisateurs Token Admin. En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

await this.Ctx.ERC721Admin.getAllAdmins()

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

Méthodes de gestion de la configuration de jeton

Les méthodes de gestion de la configuration des jetons sont basées sur la norme ERC-721. Pour utiliser les méthodes de gestion de la configuration des jetons, importez la classe Token à partir du module ../lib/erc721-token.

totalSupply
Cette méthode retourne le nombre total de transactions NFT frappées. Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.totalSupply()
Paramètres :
  • aucune
Retourne :
  • En cas de succès, le total des jetons nets, dans le type de données Nombre. En cas d'erreur, un message d'erreur s'affiche.
Exemple :

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

2000
get
Cette méthode retourne l'objet de jeton spécifié s'il est présent dans la base de données d'état. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.get(tokenId: string)
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • En cas de succès, promesse qui inclut un objet JSON de la ressource de jeton. En cas d'erreur, un rejet avec un message d'erreur
Exemple :

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
Cette méthode indique si une ressource de jeton existe avec l'ID spécifié. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.isTokenType(tokenId: string)
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • En cas de succès, une promesse avec la valeur Vrai s'il existe une ressource de jeton avec l'ID spécifié. En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

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

true
createToken
Cette méthode crée un jeton et enregistre ses propriétés dans la base de données d'état. Cette méthode ne peut être appelée que par les utilisateurs dotés du rôle de mineur. Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.createToken(token: <Instance of Token Class>)
Paramètres :
  • token: <Instance of Token Class> - Ressource de jeton à créer.
Retourne :
  • En cas de succès, un message de promesse contenant les détails du jeton. En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

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
Cette méthode met à jour les propriétés du jeton. Cette méthode ne peut être appelée que par le propriétaire ou le créateur du jeton. Après la création d'une ressource de jeton, seul le responsable du jeton peut mettre à jour les propriétés personnalisées du jeton. Si l'utilisateur est à la fois le responsable et le créateur d'un jeton, il peut également mettre à jour la propriété TokenDesc. Les métadonnées de jeton ne peuvent pas être mises à jour. Vous devez transmettre toutes les propriétés de jeton à cette méthode, même si vous souhaitez mettre à jour uniquement certaines propriétés. Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.updateToken(token: <Instance of Token Class>)
Paramètres :
  • token: <Instance of Token Class> - Ressource de jeton à mettre à jour.
Retourne :
  • En cas de succès, un message de promesse contenant les détails du jeton. En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

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
Cette méthode appelle la méthode getStateByRange de structure en interne. Même si une immobilisation avec le code donné est retournée du grand livre, cette méthode convertit l'immobilisation dans le type d'immobilisation de l'appelant. Il s'agit d'une fonction statique asynchrone.
@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> )
Paramètres :
  • startId: string - Clé de début de l'intervalle. Cette clé est incluse dans l'intervalle.
  • endId: string - Clé de fin de l'intervalle. Cette clé est exclue de l'intervalle.
  • tokenClassReference: <Instance of Token Class> - Ressource de jeton à utiliser.
Retourne :
  • Sur le succès, une promesse avec un tableau de <Token Class>. En cas d'erreur, un rejet avec un message d'erreur.
Exemple de valeur renvoyée :
[
  {
      "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
Cette méthode retourne l'historique pour le jeton spécifié. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.history(tokenId: string)
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • En cas de succès, un itérateur d'interrogation d'historique des promesses pour le jeton spécifié. En cas d'erreur, un rejet avec un message d'erreur.
Exemple de valeur renvoyée :
[
   {
      "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
Cette méthode retourne toutes les ressources de jeton enregistrées dans la base de données d'état. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.getAllTokens()
Paramètres :
  • aucune
Retourne :
  • En cas de succès, une promesse avec toutes les ressources de jeton. En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

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
Cette méthode retourne tous les jetons appartenant à un ID compte spécifié. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.getAllTokensByUser(accountId: string)
Paramètres :
  • accountId: string - ID du compte.
Retourne :
  • En cas de succès, un itérateur d'interrogation d'historique des promesses pour le compte spécifié. En cas d'erreur, un rejet avec un message d'erreur.
Exemple de valeur renvoyée :
{
   "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
Cette méthode retourne l'ID compte du responsable d'un jeton spécifié. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.ownerOf(tokenId: string)
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • En cas de succès, il retourne un itérateur d'interrogation d'historique des promesses pour l'ID jeton spécifié. En cas d'erreur, il rejette avec un message d'erreur
Exemple de valeur renvoyée :
{"owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"}
tokenUri
Cette méthode retourne l'URI pour un jeton spécifié. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.tokenUri(tokenId: string)
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • En cas de succès, il retourne un itérateur d'interrogation d'historique des promesses pour l'ID jeton spécifié. En cas d'erreur, il rejette avec un message d'erreur
Exemple de valeur renvoyée :
{"uri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
getTokenUri
Cette méthode retourne l'URI pour un jeton spécifié. Il s'agit d'une fonction statique asynchrone.
Ctx.ERC721Token.getTokenUri(tokenId: string)
Paramètres :
  • tokenId: string - ID du jeton.
Retourne :
  • En cas de succès, il retourne un itérateur d'interrogation d'historique des promesses pour l'ID jeton spécifié. En cas d'erreur, il rejette avec un message d'erreur
Exemple de valeur renvoyée :
{"tokenUri": https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
symbol
Cette méthode retourne le symbole de la classe de jeton.
Ctx.ERC721Token.symbol()
Paramètres :
  • aucune
Retourne :
  • En cas de succès, un objet JSON avec le symbole de jeton.
Exemple de valeur renvoyée :
{"symbol": "PNT"}

Méthodes de gestion des comptes

generateAccountId
Cette méthode retourne un ID compte, qui est formé par la concaténation de l'ID fournisseur de services d'adhésion (orgId) et du nom d'utilisateur ou de l'ID courriel (userId), puis la création d'un hachage SHA-256.
Ctx.ERC721Account.generateAccountId(orgId: string, userId: string)
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de succès, une promesse avec l'ID compte généré. En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

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

oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507
createAccount
Cette méthode crée un compte pour un utilisateur et un jeton spécifiés. Un compte doit être créé pour tout utilisateur qui aura des jetons à tout moment. Les comptes suivent le nombre de transactions NFT d'un utilisateur. Les utilisateurs doivent avoir des comptes dans le réseau pour effectuer les opérations liées aux jetons. Vous ne pouvez créer qu'un seul compte NFT par utilisateur.

Un ID compte est un jeu de caractères alphanumériques, précédé de oaccount~ et suivi d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion (orgId) de l'utilisateur dans l'organisation de réseau courante, du nom d'utilisateur ou de l'ID courriel (userId) du responsable de l'instance ou de l'utilisateur connecté à l'instance, et de la chaîne constante nft. Cette méthode ne peut être appelée que par la chaîne Token Admin du code de chaîne.

Ctx.ERC721Account.createAccount(orgId: string, userId: string, tokenType: string)
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • tokenType: string - Le seul type de jeton pris en charge est nonfungible.
Retourne :
  • En cas de succès, une promesse avec le nouvel objet de compte. En cas d'erreur, un rejet avec un message d'erreur
Exemple :

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

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
getAllAccounts
Cette méthode retourne une liste de tous les comptes. Cette méthode utilise des interrogations SQL enrichies Berkeley DB et ne peut être appelée que lorsqu'elle est connectée au réseau Oracle Blockchain Platform distant.
Ctx.ERC721Account.getAllAccounts()
Paramètres :
  • aucune
Retourne :
  • En cas de succès, une promesse avec un objet JSON qui répertorie tous les comptes. En cas d'erreur, un rejet avec un message d'erreur.
Exemple de valeur renvoyée :
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }   
    }
]
history
Cette méthode retourne un tableau des détails de l'historique du compte pour un compte spécifié.
Ctx.ERC721Account.history(accountId: string)
Paramètres :
  • accountId: string - ID du compte.
Retourne :
  • En cas de succès, un tableau map[string]interface{} contenant les détails de l'historique du compte spécifié. Les données de compte sont affichées sous la clé value dans le mappage. En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

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
Cette méthode retourne les détails de l'utilisateur pour un compte spécifié.
Ctx.ERC721Account.getUserByAccountId(accountId: string)
Paramètres :
  • accountId: string - ID du compte.
Retourne :
  • En cas de réussite, un objet JSON qui inclut les détails de l'utilisateur dans les propriétés suivantes :
    • orgId - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation de réseau courante.
    • userId - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

await this.Ctx.ERC721Account.getUserByAccountById(accountId)

{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountWithStatusByUser
Cette méthode retourne les détails de l'utilisateur pour un compte spécifié, y compris le statut du compte. Cette méthode ne peut être appelée que par Token Admin du code de chaîne ou par Account Owner du compte.
Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId)
Paramètres :
  • orgId - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un objet de compte JSON qui inclut les propriétés suivantes :
  • accountId - ID du compte d'utilisateur.
  • userId - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • orgId - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • tokenType - Type de jeton que détient le compte.
  • noOfNfts - Nombre total de NFT détenues par le compte.
  • bapAccountVersion - Paramètre d'objet de compte à usage interne.
  • status - Statut courant du compte d'utilisateur.
  • En cas d'erreur, un objet non vide contenant un message d'erreur.
Exemple :

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
Cette méthode retourne les détails de l'utilisateur pour un compte spécifié. Cette méthode ne peut être appelée que par Token Admin du code de chaîne ou par Account Owner du compte.
Ctx.ERC721Account.getAccountByUser(orgId, userId)
Paramètres :
  • orgId - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de réussite, un objet de compte JSON qui inclut les propriétés suivantes :
  • accountId - ID du compte d'utilisateur.
  • userId - Nom d'utilisateur ou ID courriel de l'utilisateur.
  • orgId - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • tokenType - Type de jeton que détient le compte.
  • noOfNfts - Nombre total de NFT détenues par le compte.
  • En cas d'erreur, un objet non vide contenant un message d'erreur.
Exemple :

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

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Cette méthode retourne le nombre total de transactions NFT détenues par l'utilisateur spécifié.
Ctx.ERC721Account.balanceOf(accountId: string)
Paramètres :
  • accountId: string - ID compte de l'utilisateur.
Retourne :
  • En cas de succès, un objet JSON du nombre NFT courant. En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

await this.Ctx.ERC721Account.balanceOf(accountId)

{"totalNfts": 0}

Méthodes pour la gestion des rôles

addRoleMember
Cette méthode ajoute un rôle à un utilisateur et à un jeton spécifiés. Un ID compte est formé par la création d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion concaténé (orgId) et du nom d'utilisateur ou de l'ID courriel (userId). Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.addRoleMember(role: string, accountId: string)
Paramètres :
  • role: string - Nom du rôle à ajouter à l'utilisateur spécifié. Les comportements mintable et burnable correspondent aux propriétés minter_role_name et burner_role_name du fichier de spécification.
  • accountId: string - ID compte sur lequel opérer.
Retourne :
  • En cas de succès, une promesse avec un message incluant le rôle et l'ID compte ajoutés. En cas d'erreur, un rejet avec un message d'erreur
Exemple :

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

{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRoleMember
Cette méthode supprime un rôle d'un utilisateur et d'un jeton spécifiés. Un ID compte est formé par la création d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion concaténé (orgId) et du nom d'utilisateur ou de l'ID courriel (userId). Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.removeRoleMember(role: string, accountId: string)
Paramètres :
  • role: string - Nom du rôle à supprimer de l'utilisateur spécifié. Les comportements mintable et burnable correspondent aux propriétés minter_role_name et burner_role_name du fichier de spécification.
  • accountId: string - ID compte sur lequel opérer.
Retourne :
  • En cas de succès, une promesse avec un message incluant le rôle et l'ID compte supprimés. En cas d'erreur, un rejet avec un message d'erreur
Exemple :

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

{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
isInRole
Cette méthode retourne une valeur booléenne pour indiquer si un utilisateur et un jeton ont un rôle spécifié. Un ID compte est formé par la création d'un hachage SHA-256 de l'ID fournisseur de services d'adhésion concaténé (orgId) et du nom d'utilisateur ou de l'ID courriel (userId). Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.isInRole(role: string, accountId: string)
Paramètres :
  • role: string - Nom du rôle à vérifier pour l'utilisateur spécifié. Les comportements mintable et burnable correspondent aux propriétés minter_role_name et burner_role_name du fichier de spécification.
  • accountId: string - ID compte sur lequel opérer.
Retourne :
  • En cas de succès, promesse qui est vraie si le rôle est présent pour l'ID compte spécifié, sinon fausse. En cas d'erreur, un rejet avec un message d'erreur
Exemple :

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

{"result": "true"}
getAccountsByRole
Cette méthode retourne une liste de tous les ID compte pour un rôle spécifié.
Ctx.ERC721Role.getAccountsByRole(roleName: string)
Paramètres :
  • roleName: string - Nom du rôle à rechercher.
Retourne :
  • En cas de succès, un tableau JSON d'ID compte. En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

await this.Ctx.ERC721Role.getAccountsByRole(userRole)

{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Cette méthode retourne une liste de tous les utilisateurs pour un rôle spécifié.
Ctx.ERC721Role.getUsersByRole(userRole: string)
Paramètres :
  • role: string - Nom du rôle à rechercher.
Retourne :
  • En cas de succès, un tableau JSON d'objets utilisateur. Chaque objet contient le code d'utilisateur et le code d'organisation. En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

await this.Ctx.ERC721Role.getUsersByRole(userRole)

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

Méthodes de gestion de l'historique des transactions

getAccountTransactionHistory
Cette méthode retourne un tableau des détails de l'historique des transactions pour un compte spécifié.
Ctx.ERC721Account.getAccountTransactionHistory(accountId: string)
Paramètres :
  • accountId: string - ID du compte.
Retourne :
  • En cas de succès, un tableau d'objets de transaction de compte au format JSON :
    • transactionId - ID de la transaction.
    • transactedAccount - Compte avec lequel la transaction a eu lieu.
    • transactionType - Type de transaction.
    • timestamp - Heure de la transaction.
    • noOfNfts - Solde du compte de l'appelant.
    • En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

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
Cette méthode retourne l'historique des transactions de compte pour un utilisateur spécifié, filtré par PageSize, Bookmark, startTime et endTime. Cette méthode ne peut être appelée que lorsqu'elle est connectée au réseau distant Oracle Blockchain Platform.
async getAccountTransactionHistoryWithFilters(orgId: string, userId: string, filters?: Filters)
Paramètres :
  • accountId: string - ID du compte.
  • filters: object - Objet de la classe Filter qui contient quatre attributs : pageSize, bookmark, startTime et endTime. Si vide, tous les enregistrements sont retournés. La propriété PageSize détermine le nombre d'enregistrements à retourner. Si PageSize a la valeur 0, la taille de page par défaut est 20. La propriété Bookmark détermine l'index de départ des enregistrements à retourner. Pour plus d'informations, voir la documentation relative à Hyperledger Fabric. Les propriétés StartTime et EndTime doivent être spécifiées au format RFC-3339.
Retourne :
  • En cas de succès, un tableau d'objets de transaction de compte au format JSON :
    • transactionId - ID de la transaction.
    • transactedAccount - Compte avec lequel la transaction a eu lieu.
    • transactionType - Type de transaction.
    • timestamp - Heure de la transaction.
    • noOfNfts - Solde du compte de l'appelant.
    • En cas d'erreur, un objet d'erreur non vide contenant un message d'erreur.
Exemple :

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
Cette méthode retourne l'historique d'une ressource Transaction.
Ctx.ERC721Transaction.getTransactionById(transactionId: string)
Paramètres :
  • transactionId: string - ID de l'immobilisation de transaction.
Exemple :

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
Cette méthode supprime de la base de données d'état les transactions antérieures à une date spécifiée.
Ctx.ERC721Transaction.deleteTransactions(timeToExpiration: Date)
Paramètres :
  • timeToExpiration: Date - La date et l'heure. Les transactions antérieures à l'heure spécifiée seront supprimées.
Exemple :

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"
    }
}

Gestion du comportement des jetons - Comportement à la menthe

getMaxMintQuantity
Cette méthode retourne la quantité minimale maximale d'un jeton. Si le comportement max_mint_quantity n'est pas configuré dans le fichier de spécification, la valeur par défaut est 0 et un nombre infini de jetons peut être frappé.
Ctx.ERC721Token.getMaxMintQuantity(token: <Instance of Token Class>)
Paramètres :
  • token: <Instance of Token Class> - Ressource de jeton à utiliser.
Retourne :
  • En cas de succès, quantité minimale maximale du jeton, dans le type de données numérique. En cas d'erreur, un message d'erreur s'affiche.
Exemple :

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

20000
getTotalMintedTokens
Cette méthode retourne le nombre total de jetons frappés disponibles dans le système pour le jeton spécifié. Le nombre net de jetons disponibles est le nombre total de jetons frappés moins le nombre de jetons brûlés. Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.getTotalMintedTokens()
Paramètres :
  • token: <Instance of Token Class> - Ressource de jeton à utiliser.
Retourne :
  • En cas de succès, le nombre total de jetons frappés, dans le type de données Nombre. En cas d'erreur, un message d'erreur s'affiche.
Exemple :

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

4000

Gestion du comportement des jetons - Comportement transférable

safeTransferFrom
Il s'agit d'une fonction asynchrone. Cette méthode transfère la propriété de la TNF spécifiée de l'appelant à un autre compte. Cette méthode comprend les validations suivantes :
  • Le jeton existe et n'est pas brûlé.
  • Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
  • Le compte de l'expéditeur est responsable du jeton.
  • L'appelant de la fonction est l'expéditeur.
Ctx.ERC721Token.safeTransferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>, data?: string)
Paramètres :
  • fromAccountId: string - ID compte de l'expéditeur dans l'organisation courante.
  • toAccountId: string - ID compte du destinataire dans l'organisation courante.
  • token: <Instance of Token Class> - Ressource de jeton à transférer.
  • data: string - Informations supplémentaires facultatives à stocker dans la transaction.
Retourne :
  • En cas de réussite, une promesse avec un message de réussite qui inclut les détails du compte. Les ID compte ont le préfixe oaccount~. En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

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
Il s'agit d'une fonction asynchrone. Cette méthode transfère la propriété de la transaction de transfert de fonds nationale spécifiée d'un compte d'expéditeur à un compte de destinataire. Il est de la responsabilité de l'appelant de transmettre les paramètres corrects. Cette méthode peut être appelée par n'importe quel utilisateur, pas seulement par le propriétaire du jeton. Cette méthode comprend les validations suivantes :
  • Le jeton existe et n'est pas brûlé.
  • Le compte expéditeur et le compte destinataire existent et ne sont pas le même compte.
  • Le compte de l'expéditeur est responsable du jeton.
Ctx.ERC721Token.transferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>)
Paramètres :
  • fromAccountId: string - ID compte de l'expéditeur dans l'organisation courante.
  • toAccountId: string - ID compte du destinataire dans l'organisation courante.
  • token: <Instance of Token Class> - Ressource de jeton à transférer.
Retourne :
  • En cas de réussite, une promesse avec un message de réussite qui inclut les détails du compte. Les ID compte ont le préfixe oaccount~. En cas d'erreur, un rejet avec un message d'erreur.
\Exemple :

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)"}

Gestion du comportement des jetons - Comportement brûlable

burn
Cette méthode désactive, ou brûle, le NFT spécifié du compte de l'appelant. L'appelant de cette méthode doit avoir un compte. Un jeton ne peut pas être gravé sauf si le fichier de spécification du jeton inclut le comportement burnable. Si aucune propriété burner_role_name n'est spécifiée dans la section roles du fichier de spécification, le responsable du jeton peut le graver. Si une propriété burner_role_name est spécifiée dans la section roles, l'utilisateur affecté au rôle de brûleur qui est également le créateur du jeton peut brûler le jeton. Il s'agit d'une fonction asynchrone.
Ctx.ERC721Token.burn(token: <Instance of Token Class>)
Paramètres :
  • token: <Instance of Token Class> - Ressource de jeton à brûler.
Retourne :
  • En cas de réussite, une promesse avec un message de réussite qui inclut les détails du compte. En cas d'erreur, un rejet avec un message d'erreur.
Exemple :

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

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