TypeScript Proyecto NFT para ERC-721

Blockchain App Builder toma la entrada de su archivo de especificación NFT y genera un proyecto de código de cadenas completamente funcional.

El proyecto genera automáticamente las clases y funciones del ciclo de vida de NFT, incluidos los métodos CRUD y no CRUD, así como un SDK de tokenización. La validación de argumentos, la canalización/anulación de canalización y la capacidad de persistencia transparente se admiten automáticamente.

Para obtener información sobre el proyecto andamio y los métodos que no están directamente relacionados con los NFT, consulte Scaffolded TypeScript Chaincode Project.

Modelo

Cada clase de modelo con token amplía la clase OchainModel. La capacidad de persistencia transparente, o ORM simplificado, se captura en la clase 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;

}

Controlador

La clase de controlador principal amplía la clase OchainController. Solo hay un controlador principal.

export class DigiCurrCCController extends OchainController{

Puede crear cualquier número de clases, funciones o archivos, pero sólo se pueden invocar los métodos definidos en la clase de controlador principal. Los otros métodos están ocultos.

Puede utilizar los métodos SDK de token para escribir métodos personalizados para la aplicación de negocio.

Métodos de NFT generados automáticamente

Blockchain App Builder genera automáticamente métodos para admitir NFT y ciclos de vida de NFT. Puede utilizar estos métodos para inicializar NFT, gestionar roles y cuentas y completar otras tareas del ciclo de vida de NFT sin necesidad de codificación adicional. Los métodos de controlador deben tener un decorador @Validator(...params) para que se pueda invocar.

Métodos para la Gestión del Control de Acceso

addTokenAdmin
Este método agrega un usuario como Token Admin del código de cadenas. Este método solo puede ser llamado por Token Admin del código de cadenas.
@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);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que incluye detalles del usuario que se agregó como Token Admin del código de cadenas.
Ejemplo de Valor de Devolución:
{"msg":"Successfully added Admin (orgId: Org1MSP, userId: User1)"}
removeTokenAdmin
Este método elimina un usuario como Token Admin del código de cadenas. Este método solo puede ser llamado por Token Admin del código de cadenas.
@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);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que incluye detalles del usuario que se eliminó como Token Admin del código de cadenas.
Ejemplo de Valor de Devolución:
{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: User1)"}
isTokenAdmin
Este método devuelve el valor booleano true si el emisor de llamada de la función es Token Admin; de lo contrario, devuelve false. Un Token Admin puede llamar a esta función en cualquier otro usuario de la red de blockchain. Otros usuarios pueden llamar a este método solo en sus propias cuentas.
@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);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • El método devuelve true si el emisor de llamada es Token Admin; de lo contrario, devuelve false.
Ejemplo de Valor de Devolución:
{"result": true}
getAllTokenAdmins
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadenas. Este método solo puede ser llamado por Token Admin del código de cadenas.
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.getAllAdmins', 'TOKEN');
    return await this.Ctx.ERC721Admin.getAllAdmins();
}
Parámetros:
  • ninguno
Devuelve:
  • Cuando se realiza correctamente, una matriz admins en formato JSON que contiene objetos orgId y userId.
Ejemplo de Valor de Devolución:
{"admins":[{"orgId":"Org1MSP","userId":"admin"}]}

Métodos de Gestión de Configuración de Token

init
Este método se llama cuando se crea una instancia del código de cadenas. Cada Token Admin se identifica mediante la información userId y orgId en el parámetro adminList. userId es el nombre de usuario o el ID de correo electrónico del propietario de la instancia o el usuario que está conectado a la instancia. orgId es el ID del proveedor de servicios de miembros (MSP) del usuario en la organización de red actual. El parámetro adminList es obligatorio la primera vez que despliegue el código de cadenas. Si está actualizando el código de cadenas, transfiera una lista vacía ([]). Cualquier otra información del parámetro adminList se ignora durante las actualizaciones.
@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;
}
Parámetros:
  • adminList array: matriz de información {orgId, userId} que especifica la lista de administradores de token. La matriz adminList es un parámetro obligatorio.
getAllTokens
Este método devuelve todos los activos de token que se guardan en la base de datos de estado. Este método solo puede ser llamado por Token Admin del código de cadenas. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
@GetMethod()
@Validator()
public async getAllTokens() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.ERC721Token.getAllTokens();
}
Parámetros:
  • ninguno
Devuelve:
  • Lista de todos los activos de token en formato JSON.
Ejemplo de Valor de Devolución:
[
    {
        "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
Este método devuelve todos los activos de token que son propiedad de un usuario especificado. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. Este método solo lo puede llamar un Token Admin del código de cadenas o el propietario de la cuenta.
@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);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Lista de activos de token en formato JSON.
Ejemplo de Valor de Devolución:
[
    {
        "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
Este método devuelve un objeto de token si el token está presente en la base de datos de estado. Este método solo lo puede llamar un Token Admin del código de cadenas o el propietario del token.
@GetMethod()
@Validator(yup.string())
public async getTokenById(tokenId: string) {
   await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.get', 'TOKEN', { tokenId });
   let token = await this.getTokenObject(tokenId);
   return token;
}
Parámetros:
  • tokenId: string: ID del token que se va a obtener.
Devuelve:
  • El activo de token en formato JSON.
Ejemplo de Valor de Devolución:
{
    "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
Este método devuelve el historial de un ID de token especificado. Se trata de un método asíncrono. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform. Cualquiera puede llamar a este método.
@GetMethod()
@Validator(yup.string())
public async getTokenHistory(tokenId: string) {
   // await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.history', 'TOKEN');
   return await this.Ctx.ERC721Token.history(tokenId);
}
Parámetros:
  • tokenId: string: ID del token.
Ejemplo de Valor de Devolución:
[
    {
        "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
Este es un método de utilidad que devuelve una instancia del token para un ID de token especificado. Este método lo utilizan muchos de los métodos generados automáticamente para recuperar objetos de token. Puede llamar a este método según sea necesario desde sus métodos personalizados. Al crear un activo o una clase con token, actualice el caso de cambio con la clase Token correspondiente para devolver el objeto de token correcto. El comando ochain sync en Blockchain App Builder crea automáticamente un caso de cambio cuando se crea un activo tokenizado en el archivo de especificación. Este método no tiene ningún decorador de método @Validator(), lo que significa que este método no se puede invocar directamente y solo se puede llamar desde otros métodos.
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}]`);
    }
}
Parámetros:
  • tokenId: string: ID del token.
ownerOf
Este método devuelve el ID de cuenta del propietario del ID de token especificado. Cualquiera puede llamar a este método.
@GetMethod()
@Validator(yup.string())
public async ownerOf(tokenId: string) {
   return await this.Ctx.ERC721Token.ownerOf(tokenId);
}
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Objeto JSON del ID de cuenta del propietario.
Ejemplo de Valor de Devolución:
{"owner": "oaccount~d6d22c3167e3c6ab9ee5653e1a008c37c20cc47ebb0229ca0aedfafe64c675b8"}
name
Este método devuelve el nombre de la clase de token. Cualquiera puede llamar a este método.
@GetMethod()
@Validator()
public async name() {
   return await this.Ctx.ERC721Token.name();
}
Parámetros:
  • ninguno
Devuelve:
  • Objeto JSON del nombre del token.
Ejemplo de Valor de Devolución:
{"tokenName": "artcollection"}
symbol
Este método devuelve el símbolo de la clase de token. Cualquiera puede llamar a este método.
@GetMethod()
@Validator()
public async symbol() {
   return await this.Ctx.ERC721Token.symbol();
}
Parámetros:
  • ninguno
Devuelve:
  • Objeto JSON del símbolo de token.
Ejemplo de Valor de Devolución:
{"symbol": "PNT"}
tokenURI
Este método devuelve el URI de un token especificado. Cualquiera puede llamar a este método.
@GetMethod()
@Validator(yup.string())
public async tokenURI(tokenId: string) {
   return await this.Ctx.ERC721Token.tokenURI(tokenId);
}
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Si se realiza correctamente, un objeto JSON del URI de token.
Ejemplo de Valor de Devolución:
{"tokenURI": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\
.ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
totalSupply
Este método devuelve el número total de tokens acuñados. Este método solo puede ser llamado por Token Admin del código de cadenas.
@GetMethod()
@Validator()
public async totalSupply() {
  await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalSupply', 'TOKEN');
  return await this.Ctx.ERC721Token.totalSupply();
}
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, un objeto JSON del recuento de tokens.
Ejemplo de Valor de Devolución:
{"totalSupply": 3}
totalNetSupply
Este método devuelve el número total de tokens acuñados menos el número de tokens quemados. Este método solo puede ser llamado por Token Admin del código de cadenas.
@GetMethod()
@Validator()
public async totalNetSupply() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalNetSupply', 'TOKEN');
    return await this.Ctx.ERC721Token.getTotalMintedTokens();
}
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, un objeto JSON del recuento de tokens.
Ejemplo de Valor de Devolución:
{"totalNetSupply": 1}

Métodos de gestión de cuentas

createAccount
Este método crea una cuenta para un usuario y un token especificados. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. Las cuentas realizan un seguimiento del número de NFT que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con tokens. Solo puede crear una cuenta de NFT por usuario.

Un ID de cuenta es un juego alfanumérico de caracteres, con el prefijo oaccount~ y seguido de un hash SHA-256 del ID de proveedor de servicios de miembros (orgId) del usuario en la organización de red actual, el nombre de usuario o el ID de correo electrónico (userId) del propietario de la instancia o el usuario que está conectado a la instancia y la cadena constante nft. Este método solo puede ser llamado por Token Admin del código de cadenas.

@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);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
  • tokenType: string: el único tipo de token soportado es nonfungible.
Devuelve:
  • Si se realiza correctamente, se crea un objeto JSON de la cuenta. El parámetro bapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de Valor de Devolución:
{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "bapAccountVersion": 0,
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Este método devuelve el número total de NFT que contiene un usuario especificado. Este método solo lo puede llamar un Token Admin del código de cadenas o el propietario de la cuenta.
@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);
 }
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Objeto JSON del recuento de NFT actual.
Ejemplo de Valor de Devolución:
{"totalNfts": 0}
getAllAccounts
Este método devuelve una lista de todas las cuentas. Este método solo puede ser llamado por Token Admin del código de cadenas. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
@GetMethod()
@Validator()
public async getAllAccounts() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.ERC721Account.getAllAccounts();
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una matriz JSON de todas las cuentas.
Ejemplo de Valor de Devolución:
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }    
    }
]
getAccountByUser
Este método devuelve los detalles de la cuenta de un usuario especificado. Este método solo puede ser llamado por un Token Admin del código de cadenas o el Account Owner de la cuenta.
@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);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, un objeto de cuenta JSON que incluye las siguientes propiedades:
  • bapAccountVersion: parámetro de objeto de cuenta para uso interno.
  • status: estado actual de la cuenta de usuario.
  • accountId: ID de la cuenta de usuario.
  • userId: nombre de usuario o ID de correo electrónico del usuario.
  • orgId: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • tokenType: tipo de token que contiene la cuenta.
  • noOfNfts: número total de NFT que tiene la cuenta.
Ejemplo de Valor de Devolución:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 0
}
getUserByAccountId
Este método devuelve los detalles de usuario de una cuenta especificada. Este método puede ser llamado por cualquier usuario.
@GetMethod()
@Validator(yup.string())
public async getUserByAccountId(accountId: string) {
    return await this.Ctx.ERC721Account.getUserByAccountId(accountId);
}
Parámetros:
  • accountId: string: ID de la cuenta.
Devuelve:
  • Si se realiza correctamente, un objeto JSON de los detalles del usuario (orgId y userId).
Ejemplo de Valor de Devolución:
{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountHistory
Este método devuelve el historial de cuentas de un usuario especificado. Se trata de un método asíncrono. Este método solo lo puede llamar el Token Admin del código de cadenas o el propietario de la cuenta.
@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);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, un objeto JSON del historial de la cuenta. El parámetro bapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de Valor de Devolución:
[
    {
        "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étodos de Gestión de Roles

addRole
Este método agrega un rol a un usuario especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@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);
}
Parámetros:
  • role: string: nombre del rol que se va a agregar al usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación.
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, un mensaje con los detalles de la cuenta.
Ejemplo de Valor de Devolución:
{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRole
Este método elimina un rol de un usuario especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@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);
}
Parámetros:
  • role: string: nombre del rol que se va a eliminar del usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación.
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, un mensaje con los detalles de la cuenta.
Ejemplo de Valor de Devolución:
{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Este método devuelve una lista de todos los ID de cuenta para un rol especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@GetMethod()
@Validator(yup.string())
public async getAccountsByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getAccountsByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getAccountsByRole(role);
}
Parámetros:
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de ID de cuenta.
Ejemplo de Valor de Devolución:
{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Este método devuelve una lista de todos los usuarios para un rol especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@GetMethod()
@Validator(yup.string())
public async getUsersByRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ROLE.getUsersByRole', 'TOKEN');
    return await this.Ctx.ERC721Role.getUsersByRole(role);
}
Parámetros:
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de los objetos de usuario (orgId y userId).
Ejemplo de Valor de Devolución:
{
    "users": [
        {
            "userId": "admin",
            "orgId": "Org1MSP"
        }
    ]
}
isInRole
Este método devuelve un valor booleano para indicar si un usuario tiene un rol especificado. Este método solo puede ser llamado por un Token Admin del código de cadenas o el Account Owner de la cuenta.
@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) };
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una cadena JSON del resultado booleano.
Ejemplo de Valor de Devolución:
{"result":"true"}

Métodos para la gestión del historial de transacciones

getAccountTransactionHistory
Este método devuelve el historial de transacciones de la cuenta para un usuario especificado. Se trata de un método asíncrono. Este método solo lo puede llamar el Token Admin del código de cadenas o el propietario de la cuenta.
@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)
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Ejemplo de Valor de Devolución:
[
    {
        "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
Este método devuelve el historial de transacciones de cuenta para un usuario especificado, filtrado por PageSize, Bookmark, startTime y endTime. Se trata de un método asíncrono. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform. Este método solo lo puede llamar el Token Admin del código de cadenas o el propietario de la cuenta.
@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)
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
  • filters: object: objeto de la clase de filtro que contiene cuatro atributos: pageSize, bookmark, startTime y endTime.
Ejemplo de Valor de Devolución:
[
    {
        "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
Este método devuelve el historial de transacciones para un ID de transacción especificado. Se trata de un método asíncrono. Este método solo lo puede llamar un Token Admin del código de cadenas o el propietario de la cuenta.
@GetMethod()
@Validator(yup.string())
public async getTransactionById(transactionId: string) {
    return await this.Ctx.ERC721Transaction.getTransactionById(transactionId);
}
Parámetros:
  • transactionId: string: ID de la transacción, que es el prefijo otransaction~ seguido del hash de 64 bits en formato hexadecimal.
Ejemplo de Valor de Devolución:
{
    "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
Este método suprime transacciones anteriores a un registro de hora especificado en la base de datos de estado. Se trata de un método asíncrono. Este método solo puede ser llamado por Token Admin del código de cadenas.
@Validator(yup.date())
public async deleteHistoricalTransactions(timeToExpiration: Date) {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TRANSACTION.deleteTransactions', 'TOKEN');
    return await this.Ctx.ERC721Transaction.deleteTransactions(timeToExpiration);
}
Parámetros:
  • timestamp: string: un registro de hora. Se suprimirán todas las transacciones anteriores al registro de hora.
Ejemplo de Valor de Devolución:
{
    "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étodos para la gestión del comportamiento del token: comportamiento mínimo

create<Token Name>Token
Este método crea (minta) un NFT. El activo y las propiedades asociadas se guardan en la base de datos de estado. El emisor de llamada de esta transacción debe tener una cuenta de token. El emisor de la llamada de esta transacción se convierte en el propietario de la NFT. Si el archivo de especificación de token incluye la sección roles para behaviors y la propiedad minter_role_name para roles, el emisor de llamada de la transacción debe tener el rol mínimo. De lo contrario, cualquier emisor de llamada puede acuñar NFT.
@Validator(< Token Class >)
public async create< Token Name >Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.createToken(tokenAsset);
}
Parámetros:
  • tokenAsset: <Token Class>: activo de token que acuñar. Para obtener más información sobre las propiedades del activo de token, consulte el archivo de especificación de entrada.
Devuelve:
  • Si se realiza correctamente, un objeto de activo de token JSON que incluye las siguientes propiedades:
  • metadata: información de JSON que describe el token.
  • createdBy: ID de cuenta del usuario que llamó a la transacción para acuñar el token.
  • creationDate: registro de hora de la transacción.
  • isBurned: valor booleano que indica si se ha quemado el NFT identificado por tokenId.
  • tokenName: nombre del token.
  • tokenDesc: descripción del token.
  • symbol: el símbolo del token.
  • tokenStandard: estándar del token.
  • tokenType: tipo de token que tiene esta cuenta.
  • tokenUnit: unidad del token.
  • behaviors: descripción de todos los comportamientos de token.
  • mintable: descripción de las propiedades del comportamiento mintable. La propiedad max_mint_quantity especifica el número máximo de NFT de esta clase de token que se pueden crear.
  • owner: ID de cuenta del propietario actual del token. Durante el proceso de acuñación, el emisor de llamada de este método se convierte en el propietario del token.
  • tokenUri: URI del token.
Ejemplo de Valor de Devolución:
{
    "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
Este método actualiza las propiedades del token. Este método solo puede ser llamado por el usuario que es el propietario o creador del token. Después de crear un activo de token, solo el propietario del token puede actualizar las propiedades personalizadas del token. Si el usuario es propietario y creador de un token, también puede actualizar la propiedad TokenDesc. No se pueden actualizar los metadatos del token. Debe transferir todas las propiedades de token a este método, incluso si desea actualizar solo determinadas propiedades.
@Validator(<Token Class>)
public async update<Token name>Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.updateToken(tokenAsset);
}
Parámetros:
  • tokenAsset: <Token Class>: activo de token que se va a actualizar. Para obtener más información sobre las propiedades del activo de token, consulte el archivo de especificación de entrada.
Devuelve:
  • Si se realiza correctamente, un objeto de activo de token JSON actualizado
Ejemplo de Valor de Devolución:
{
    "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étodos para la gestión del comportamiento de token: comportamiento transferible

safeTransferFrom
Es una función asíncrona. Este método transfiere la propiedad de la NFT especificada del emisor de llamada a otra cuenta. Este método incluye las siguientes validaciones:
  • La ficha existe y no se quema.
  • La cuenta de remitente y la cuenta de receptor existen y no son la misma cuenta.
  • La cuenta del remitente es propietaria del token.
  • El emisor de la función es el emisor.
@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);
}
Parámetros:
  • fromOrgId: string: ID del proveedor de servicios de membresía (MSP) del remitente y el propietario del token en la organización actual.
  • fromUserId: string: nombre de usuario o ID de correo electrónico del remitente y propietario del token.
  • toOrgId: string: ID del proveedor de servicios de membresía (MSP) del receptor en la organización actual.
  • toUserId: string: nombre de usuario o ID de correo electrónico del destinatario.
  • tokenId: string: ID del token que se va a transferir.
  • data: string: información adicional opcional que se almacena en el registro de transacción.
Devuelve:
  • Si se realiza correctamente, un mensaje con los detalles de la cuenta del remitente y del receptor.
Ejemplo de Valor de Devolución:
{"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
Es una función asíncrona. Este método transfiere la propiedad de la NFT especificada de una cuenta de remitente a una cuenta de receptor. Es responsabilidad del emisor de la llamada pasar los parámetros correctos. Cualquier usuario puede llamar a este método, no solo el propietario del token. Este método incluye las siguientes validaciones:
  • La ficha existe y no se quema.
  • La cuenta de remitente y la cuenta de receptor existen y no son la misma cuenta.
  • La cuenta del remitente es propietaria del token.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async transferFrom(fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string, tokenId: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    const fromAccountId = await this.Ctx.ERC721Account.generateAccountId(fromOrgId, fromUserId);
    const toAccountId = await this.Ctx.ERC721Account.generateAccountId(toOrgId, toUserId);
    return await this.Ctx.ERC721Token.transferFrom(fromAccountId, toAccountId, tokenAsset);
}
Parámetros:
  • fromOrgId: string: ID del proveedor de servicios de membresía (MSP) del remitente en la organización actual.
  • fromUserId: string: nombre de usuario o ID de correo electrónico del remitente.
  • toOrgId: string: ID del proveedor de servicios de membresía (MSP) del receptor en la organización actual.
  • toUserId: string: nombre de usuario o ID de correo electrónico del destinatario.
  • tokenId: string: ID del token que se va a transferir.
Devuelve:
  • Si se realiza correctamente, un mensaje con los detalles de la cuenta del remitente y del receptor.
Ejemplo de Valor de Devolución:
{"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étodos para la Gestión del Comportamiento de Token: Comportamiento Quemable

burn
Este método desactiva o quema el NFT especificado de la cuenta del emisor de la llamada. El emisor de la llamada de este método debe tener una cuenta. Un token no se puede grabar a menos que el archivo de especificación de token incluya el comportamiento burnable. Si no se especifica ninguna propiedad burner_role_name en la sección roles del archivo de especificación, el propietario del token puede grabar el token. Si se especifica una propiedad burner_role_name en la sección roles, el usuario asignado al rol de quemador que también es el minter (creador) o propietario del token puede grabar el token.
@Validator(yup.string())
public async burn(tokenId: string) {
    const tokenAsset = await this.getTokenObject(tokenId);
    return await this.Ctx.ERC721Token.burn(tokenAsset);
}
Parámetros:
  • tokenId: string: ID del token que se va a grabar.
Devuelve:
  • Si se realiza correctamente, aparece un mensaje con los detalles de la cuenta.
Ejemplo de Valor de Devolución:
{"msg": "Successfully burned NFT token: 'monalisa1' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
burnNFT
Este método desactiva o graba el NFT especificado de la cuenta del emisor de llamada y devuelve un objeto de token y un historial de tokens. El emisor de la llamada de este método debe tener una cuenta. Un token no se puede grabar a menos que el archivo de especificación de token incluya el comportamiento burnable. Si no se especifica ninguna propiedad burner_role_name en la sección roles del archivo de especificación, el propietario del token puede grabar el token. Si se especifica una propiedad burner_role_name en la sección roles, el usuario asignado al rol de quemador que también es el minter (creador) o propietario del token puede grabar el token.
@Validator(yup.string())
public async burnNFT(tokenId: string) {
    const token = await this.Ctx.ERC721Token.get(tokenId)
    if (token.isBurned === true) {
      throw new Error(`token with tokenId ${tokenId} is already burned`);
    }
    const tokenHistory = await this.Ctx.ERC721Token.history(tokenId);
    await this.burn(tokenId);
    token.tokenId = parseInt(token.tokenId);
    if(Number.isNaN(token.tokenId)) {
      throw new Error(`tokenId is expected to be integer but found ${tokenId}`)
    }
    token.isBurned = true;
    return {...token, tokenHistory: JSON.stringify(tokenHistory)};
}
Parámetros:
  • tokenId: string: ID del token que se va a grabar.
Devuelve:
  • Cuando se realiza correctamente, un objeto de token que incluye información de historial de token.
Ejemplo de Valor de Devolución:
{
    "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étodos personalizados

Puede utilizar los métodos SDK de token para escribir métodos personalizados para la aplicación de negocio.

En el siguiente ejemplo se muestra cómo utilizar métodos SDK de token en métodos personalizados. Cuando se llama al método sell, publica un token a la venta por un precio especificado.

@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étodos de SDK de NFT

Métodos para la Gestión del Control de Acceso

El SDK de NFT proporciona una función de control de acceso. Algunos métodos solo pueden ser llamados por un Token Admin o Account Owner del token. Puede utilizar esta función para asegurarse de que las operaciones solo las llevan a cabo los usuarios previstos. Cualquier acceso no autorizado genera un error. Para utilizar la función de control de acceso, importe la clase Authorization desde el módulo ../lib/erc721-auth.
import { ERC721Authorization } from '../lib/erc721-auth';
checkAuthorization
Utilice este método para agregar una comprobación de control de acceso a una operación. Es una función asíncrona. La mayoría de los métodos generados automáticamente incluyen el control de acceso. Algunos métodos de token solo los puede ejecutar ERC721Admin o Account Owner del token o MultipleAccountOwner para usuarios con varias cuentas. El método checkAuthorization forma parte de la clase Authorization, a la que se accede mediante el objeto Ctx. La asignación de control de acceso se describe en el archivo ../lib/constant.ts, como se muestra en el siguiente texto. Puede modificar el control de acceso editando el archivo ../lib/constant.ts. Para utilizar su propio control de acceso o para desactivar el control de acceso, elimine el código de control de acceso de los métodos de controlador generados automáticamente y los métodos personalizados.
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)
Parámetros:
  • classFuncName: string: valor de asignación entre la clase y los métodos, como se describe en el archivo ../lib/constant.ts.
  • ...args: argumento de variable en el que args[0] toma la constante 'TOKEN' y args[1] toma el parámetro accountId para agregar una comprobación de control de acceso para AccountOwner. Para agregar una comprobación de control de acceso para MultipleAccountOwner, args[1] toma el parámetro orgId y args[2] toma el parámetro userId.
Devuelve:
  • Sobre el éxito, una promesa. En caso de error, un rechazo con un mensaje de error.
Ejemplos:

Acceso a Admin

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

Acceso a AccountOwner

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

Acceso a MultipleAccountOwner

await this.Ctx.ERC721Auth.checkAuthorization('ADMIN.isUserTokenAdmin', 'TOKEN', orgId, userId);
isUserTokenAdmin
Este método devuelve el valor booleano true si el emisor de llamada de la función es Token Admin. De lo contrario, el método devuelve false. Se trata de una función estática asíncrona.
Ctx.ERC721Auth.isUserTokenAdmin(orgId: string, userId: string)
Parámetros:
  • orgId: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización de red actual.
  • userId: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Una respuesta booleana y un mensaje de error si se encuentra uno.
Por ejemplo:

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

{"result":false}
addAdmin
Este método agrega un usuario como Token Admin del código de cadena de token.
Ctx.ERC721Admin.addAdmin(orgId: string, userId: string)
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que muestra los detalles del usuario agregado como Token Admin del código de cadena de token. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

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

{"msg": "Successfully added Admin (orgId: Org1MSP, userId: user1)"}
removeAdmin
Este método elimina un usuario como Token Admin del código de cadena de token.
Ctx.ERC721Admin.removeAdmin(orgId: string, userId: string)
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que muestra los detalles del usuario eliminado como Token Admin del código de cadena de token. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

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

{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: user1)"}
getAllAdmins
Este método devuelve una lista de todos los usuarios Token Admin.
Ctx.ERC721Admin.getAllAdmins()
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, una lista de todos los usuarios Token Admin. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

await this.Ctx.ERC721Admin.getAllAdmins()

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

Métodos de Gestión de Configuración de Token

Los métodos de gestión de configuración de tokens se basan en el estándar ERC-721. Para utilizar los métodos de gestión de configuración de token, importe la clase Token desde el módulo ../lib/erc721-token.

totalSupply
Este método devuelve el número total de NFT acuñadas. Es una función asíncrona.
Ctx.ERC721Token.totalSupply()
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, el total de tokens netos, en el tipo de dato numérico. En caso de error, se devuelve con un mensaje de error.
Por ejemplo:

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

2000
get
Este método devuelve el objeto de token especificado si está presente en la base de datos de estado. Se trata de una función estática asíncrona.
Ctx.ERC721Token.get(tokenId: string)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Si se realiza correctamente, una promesa que incluye un objeto JSON del activo de token. En caso de error, un rechazo con un mensaje de error
Por ejemplo:

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
Este método indica si existe un activo de token con el ID especificado. Se trata de una función estática asíncrona.
Ctx.ERC721Token.isTokenType(tokenId: string)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Si se realiza correctamente, una promesa con true si existe un activo de token con el ID especificado. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

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

true
createToken
Este método crea un token y guarda sus propiedades en la base de datos de estado. Este método solo puede ser llamado por los usuarios con el rol minter. Es una función asíncrona.
Ctx.ERC721Token.createToken(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token que se va a crear.
Devuelve:
  • Si se realiza correctamente, un mensaje de promesa con detalles de token. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

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
Este método actualiza las propiedades del token. Este método solo puede ser llamado por el propietario o creador del token. Después de crear un activo de token, solo el propietario del token puede actualizar las propiedades personalizadas del token. Si el usuario es propietario y creador de un token, también puede actualizar la propiedad TokenDesc. No se pueden actualizar los metadatos del token. Debe transferir todas las propiedades de token a este método, incluso si desea actualizar solo determinadas propiedades. Es una función asíncrona.
Ctx.ERC721Token.updateToken(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token que se va a actualizar.
Devuelve:
  • Si se realiza correctamente, un mensaje de promesa con detalles de token. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

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
Este método llama internamente al método getStateByRange del tejido. Aunque cualquier activo con el ID proporcionado se devuelve desde la contabilidad, este método convierte el activo en el tipo de activo del emisor de llamada. Se trata de una función estática asíncrona.
@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> )
Parámetros:
  • startId: string: clave de inicio del rango. Esta clave se incluye en el rango.
  • endId: string: la clave final del rango. Esta clave se excluye del rango.
  • tokenClassReference: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • Si se realiza correctamente, una promesa con una matriz de <Token Class>. En caso de error, un rechazo con un mensaje de error.
Ejemplo de Valor de Devolución:
[
  {
      "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
Este método devuelve el historial para el token especificado. Se trata de una función estática asíncrona.
Ctx.ERC721Token.history(tokenId: string)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Si se realiza correctamente, un iterador de consulta de historial de promesas para el token especificado. En caso de error, un rechazo con un mensaje de error.
Ejemplo de Valor de Devolución:
[
   {
      "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
Este método devuelve todos los activos de token que se guardan en la base de datos de estado. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. Se trata de una función estática asíncrona.
Ctx.ERC721Token.getAllTokens()
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una promesa con todos los activos de token. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

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
Este método devuelve todos los tokens que son propiedad de un ID de cuenta especificado. Se trata de una función estática asíncrona.
Ctx.ERC721Token.getAllTokensByUser(accountId: string)
Parámetros:
  • accountId: string: ID de la cuenta.
Devuelve:
  • Si se realiza correctamente, un iterador de consulta de historial de promesas para la cuenta especificada. En caso de error, un rechazo con un mensaje de error.
Ejemplo de Valor de Devolución:
{
   "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
Este método devuelve el ID de cuenta del propietario de un token especificado. Se trata de una función estática asíncrona.
Ctx.ERC721Token.ownerOf(tokenId: string)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Si se realiza correctamente, devuelve un iterador de consulta de historial de promesas para el ID de token especificado. En caso de error, se rechaza con un mensaje de error
Ejemplo de Valor de Devolución:
{"owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"}
tokenUri
Este método devuelve el URI para un token especificado. Se trata de una función estática asíncrona.
Ctx.ERC721Token.tokenUri(tokenId: string)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Si se realiza correctamente, devuelve un iterador de consulta de historial de promesas para el ID de token especificado. En caso de error, se rechaza con un mensaje de error
Ejemplo de Valor de Devolución:
{"uri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
getTokenUri
Este método devuelve el URI para un token especificado. Se trata de una función estática asíncrona.
Ctx.ERC721Token.getTokenUri(tokenId: string)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • Si se realiza correctamente, devuelve un iterador de consulta de historial de promesas para el ID de token especificado. En caso de error, se rechaza con un mensaje de error
Ejemplo de Valor de Devolución:
{"tokenUri": https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
symbol
Este método devuelve el símbolo de la clase de token.
Ctx.ERC721Token.symbol()
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, un objeto JSON con el símbolo de token.
Ejemplo de Valor de Devolución:
{"symbol": "PNT"}

Métodos de gestión de cuentas

generateAccountId
Este método devuelve un ID de cuenta, formado por la concatenación del ID de proveedor de servicios de miembros (orgId) y el nombre de usuario o el ID de correo electrónico (userId) y, a continuación, la creación de un hash SHA-256.
Ctx.ERC721Account.generateAccountId(orgId: string, userId: string)
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, una promesa con el ID de cuenta generado. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

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

oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507
createAccount
Este método crea una cuenta para un usuario y un token especificados. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. Las cuentas realizan un seguimiento del número de NFT que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con tokens. Solo puede crear una cuenta de NFT por usuario.

Un ID de cuenta es un juego alfanumérico de caracteres, con el prefijo oaccount~ y seguido de un hash SHA-256 del ID de proveedor de servicios de miembros (orgId) del usuario en la organización de red actual, el nombre de usuario o el ID de correo electrónico (userId) del propietario de la instancia o el usuario que está conectado a la instancia y la cadena constante nft. Este método solo puede ser llamado por Token Admin del código de cadenas.

Ctx.ERC721Account.createAccount(orgId: string, userId: string, tokenType: string)
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
  • tokenType: string: el único tipo de token soportado es nonfungible.
Devuelve:
  • Si se realiza correctamente, una promesa con el nuevo objeto de cuenta. En caso de error, un rechazo con un mensaje de error
Por ejemplo:

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

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
getAllAccounts
Este método devuelve una lista de todas las cuentas. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
Ctx.ERC721Account.getAllAccounts()
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, una promesa con un objeto JSON que muestra todas las cuentas. En caso de error, un rechazo con un mensaje de error.
Ejemplo de Valor de Devolución:
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }   
    }
]
history
Este método devuelve una matriz de los detalles del historial de cuentas para una cuenta especificada.
Ctx.ERC721Account.history(accountId: string)
Parámetros:
  • accountId: string: ID de la cuenta.
Devuelve:
  • Si se realiza correctamente, una matriz map[string]interface{} que contiene los detalles del historial de la cuenta especificada. Los datos de la cuenta se muestran en la clave value del mapa. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

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
Este método devuelve los detalles de usuario de una cuenta especificada.
Ctx.ERC721Account.getUserByAccountId(accountId: string)
Parámetros:
  • accountId: string: ID de la cuenta.
Devuelve:
  • Si se realiza correctamente, un objeto JSON que incluye los detalles del usuario en las siguientes propiedades:
    • orgId: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización de red actual.
    • userId: nombre de usuario o ID de correo electrónico del usuario.
  • En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

await this.Ctx.ERC721Account.getUserByAccountById(accountId)

{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountWithStatusByUser
Este método devuelve los detalles de usuario de una cuenta especificada, incluido el estado de la cuenta. Este método solo puede ser llamado por un Token Admin del código de cadenas o el Account Owner de la cuenta.
Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId)
Parámetros:
  • orgId: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, un objeto de cuenta JSON que incluye las siguientes propiedades:
  • accountId: ID de la cuenta de usuario.
  • userId: nombre de usuario o ID de correo electrónico del usuario.
  • orgId: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • tokenType: tipo de token que contiene la cuenta.
  • noOfNfts: número total de NFT que tiene la cuenta.
  • bapAccountVersion: parámetro de objeto de cuenta para uso interno.
  • status: estado actual de la cuenta de usuario.
  • En caso de error, un objeto no nulo que contiene un mensaje de error.
Por ejemplo:

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
Este método devuelve los detalles de usuario de una cuenta especificada. Este método solo puede ser llamado por un Token Admin del código de cadenas o el Account Owner de la cuenta.
Ctx.ERC721Account.getAccountByUser(orgId, userId)
Parámetros:
  • orgId: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, un objeto de cuenta JSON que incluye las siguientes propiedades:
  • accountId: ID de la cuenta de usuario.
  • userId: nombre de usuario o ID de correo electrónico del usuario.
  • orgId: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • tokenType: tipo de token que contiene la cuenta.
  • noOfNfts: número total de NFT que tiene la cuenta.
  • En caso de error, un objeto no nulo que contiene un mensaje de error.
Por ejemplo:

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

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Este método devuelve el número total de NFT que contiene el usuario especificado.
Ctx.ERC721Account.balanceOf(accountId: string)
Parámetros:
  • accountId: string: ID de cuenta del usuario.
Devuelve:
  • Si se realiza correctamente, un objeto JSON del recuento de NFT actual. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

await this.Ctx.ERC721Account.balanceOf(accountId)

{"totalNfts": 0}

Métodos de Gestión de Roles

addRoleMember
Este método agrega un rol a un usuario y token especificados. Un ID de cuenta se forma mediante la creación de un hash SHA-256 del ID de proveedor de servicios de afiliación concatenado (orgId) y el nombre de usuario o ID de correo electrónico (userId). Es una función asíncrona.
Ctx.ERC721Token.addRoleMember(role: string, accountId: string)
Parámetros:
  • role: string: nombre del rol que se va a agregar al usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación.
  • accountId: string: ID de cuenta para operar.
Devuelve:
  • Una promesa correcta con un mensaje que incluye el rol agregado y el ID de cuenta. En caso de error, un rechazo con un mensaje de error
Por ejemplo:

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

{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRoleMember
Este método elimina un rol de un usuario y token especificados. Un ID de cuenta se forma mediante la creación de un hash SHA-256 del ID de proveedor de servicios de afiliación concatenado (orgId) y el nombre de usuario o ID de correo electrónico (userId). Es una función asíncrona.
Ctx.ERC721Token.removeRoleMember(role: string, accountId: string)
Parámetros:
  • role: string: nombre del rol que se va a eliminar del usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación.
  • accountId: string: ID de cuenta para operar.
Devuelve:
  • Una promesa correcta con un mensaje que incluye el rol eliminado y el ID de cuenta. En caso de error, un rechazo con un mensaje de error
Por ejemplo:

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

{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
isInRole
Este método devuelve un valor booleano para indicar si un usuario y un token tienen un rol especificado. Un ID de cuenta se forma mediante la creación de un hash SHA-256 del ID de proveedor de servicios de afiliación concatenado (orgId) y el nombre de usuario o ID de correo electrónico (userId). Es una función asíncrona.
Ctx.ERC721Token.isInRole(role: string, accountId: string)
Parámetros:
  • role: string: nombre del rol que se va a comprobar para el usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación.
  • accountId: string: ID de cuenta para operar.
Devuelve:
  • Si se realiza correctamente, una promesa que es verdadera si el rol está presente para el ID de cuenta especificado; de lo contrario, es falsa. En caso de error, un rechazo con un mensaje de error
Por ejemplo:

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

{"result": "true"}
getAccountsByRole
Este método devuelve una lista de todos los ID de cuenta para un rol especificado.
Ctx.ERC721Role.getAccountsByRole(roleName: string)
Parámetros:
  • roleName: string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de ID de cuenta. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

await this.Ctx.ERC721Role.getAccountsByRole(userRole)

{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Este método devuelve una lista de todos los usuarios para un rol especificado.
Ctx.ERC721Role.getUsersByRole(userRole: string)
Parámetros:
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de objetos de usuario. Cada objeto contiene el ID de usuario y el ID de organización. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

await this.Ctx.ERC721Role.getUsersByRole(userRole)

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

Métodos para la gestión del historial de transacciones

getAccountTransactionHistory
Este método devuelve una matriz de los detalles del historial de transacciones para una cuenta especificada.
Ctx.ERC721Account.getAccountTransactionHistory(accountId: string)
Parámetros:
  • accountId: string: ID de la cuenta.
Devuelve:
  • Si se realiza correctamente, una matriz de objetos de transacción de cuenta en formato JSON:
    • transactionId: ID de la transacción.
    • transactedAccount: cuenta con la que se realizó la transacción.
    • transactionType: tipo de transacción.
    • timestamp: hora de la transacción.
    • noOfNfts: saldo de la cuenta de emisor de llamada.
    • En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

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
Este método devuelve el historial de transacciones de cuenta para un usuario especificado, filtrado por PageSize, Bookmark, startTime y endTime. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform.
async getAccountTransactionHistoryWithFilters(orgId: string, userId: string, filters?: Filters)
Parámetros:
  • accountId: string: ID de la cuenta.
  • filters: object: objeto de la clase de filtro que contiene cuatro atributos: pageSize, bookmark, startTime y endTime. Si está vacío, se devuelven todos los registros. La propiedad PageSize determina el número de registros que se devolverán. Si PageSize es 0, el tamaño de página por defecto es 20. La propiedad Bookmark determina el índice inicial de los registros que se devolverán. Para obtener más información, consulte la documentación de Hyperledger Fabric. Las propiedades StartTime y EndTime se deben especificar en formato RFC-3339.
Devuelve:
  • Si se realiza correctamente, una matriz de objetos de transacción de cuenta en formato JSON:
    • transactionId: ID de la transacción.
    • transactedAccount: cuenta con la que se realizó la transacción.
    • transactionType: tipo de transacción.
    • timestamp: hora de la transacción.
    • noOfNfts: saldo de la cuenta de emisor de llamada.
    • En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Por ejemplo:

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
Este método devuelve el historial de un activo Transaction.
Ctx.ERC721Transaction.getTransactionById(transactionId: string)
Parámetros:
  • transactionId: string: ID del activo de transacción.
Por ejemplo:

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
Este método elimina de la base de datos de estado las transacciones anteriores a una fecha especificada.
Ctx.ERC721Transaction.deleteTransactions(timeToExpiration: Date)
Parámetros:
  • timeToExpiration: Date: fecha y hora. Se suprimirán las transacciones anteriores a la hora especificada.
Por ejemplo:

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

Gestión del comportamiento del token: comportamiento mínimo

getMaxMintQuantity
Este método devuelve la cantidad mínima máxima de un token. Si el comportamiento max_mint_quantity no está configurado en el archivo de especificación, el valor por defecto es 0 y se puede acuñar un número infinito de tokens.
Ctx.ERC721Token.getMaxMintQuantity(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • Si se realiza correctamente, la cantidad mínima máxima del token, en el tipo de dato numérico. En caso de error, se devuelve con un mensaje de error.
Por ejemplo:

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

20000
getTotalMintedTokens
Este método devuelve el número total de tokens acuñados disponibles en el sistema para el token especificado. El número neto de tokens disponibles es el número total de tokens acuñados menos el número de tokens quemados. Es una función asíncrona.
Ctx.ERC721Token.getTotalMintedTokens()
Parámetros:
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • En caso de éxito, el total de tokens acuñados, en el tipo de dato numérico. En caso de error, se devuelve con un mensaje de error.
Por ejemplo:

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

4000

Gestión de comportamiento de token - Comportamiento transferible

safeTransferFrom
Es una función asíncrona. Este método transfiere la propiedad de la NFT especificada del emisor de llamada a otra cuenta. Este método incluye las siguientes validaciones:
  • La ficha existe y no se quema.
  • La cuenta de remitente y la cuenta de receptor existen y no son la misma cuenta.
  • La cuenta del remitente es propietaria del token.
  • El emisor de la función es el emisor.
Ctx.ERC721Token.safeTransferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>, data?: string)
Parámetros:
  • fromAccountId: string: ID de cuenta del remitente en la organización actual.
  • toAccountId: string: ID de cuenta del receptor en la organización actual.
  • token: <Instance of Token Class>: activo de token que se va a transferir.
  • data: string: información adicional opcional que se almacena en la transacción.
Devuelve:
  • En caso de éxito, una promesa con un mensaje de éxito que incluye los detalles de la cuenta. Los ID de cuenta tienen el prefijo oaccount~. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

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
Es una función asíncrona. Este método transfiere la propiedad de la NFT especificada de una cuenta de remitente a una cuenta de receptor. Es responsabilidad del emisor de la llamada pasar los parámetros correctos. Cualquier usuario puede llamar a este método, no solo el propietario del token. Este método incluye las siguientes validaciones:
  • La ficha existe y no se quema.
  • La cuenta de remitente y la cuenta de receptor existen y no son la misma cuenta.
  • La cuenta del remitente es propietaria del token.
Ctx.ERC721Token.transferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>)
Parámetros:
  • fromAccountId: string: ID de cuenta del remitente en la organización actual.
  • toAccountId: string: ID de cuenta del receptor en la organización actual.
  • token: <Instance of Token Class>: activo de token que se va a transferir.
Devuelve:
  • En caso de éxito, una promesa con un mensaje de éxito que incluye los detalles de la cuenta. Los ID de cuenta tienen el prefijo oaccount~. En caso de error, un rechazo con un mensaje de error.
\Por ejemplo:

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

Gestión del comportamiento del token: comportamiento que se puede grabar

burn
Este método desactiva o quema el NFT especificado de la cuenta del emisor de la llamada. El emisor de la llamada de este método debe tener una cuenta. Un token no se puede grabar a menos que el archivo de especificación de token incluya el comportamiento burnable. Si no se especifica ninguna propiedad burner_role_name en la sección roles del archivo de especificación, el propietario del token puede grabar el token. Si se especifica una propiedad burner_role_name en la sección roles, el usuario asignado al rol de quemador que también es el mínimo (creador) del token puede grabar el token. Es una función asíncrona.
Ctx.ERC721Token.burn(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token que se va a grabar.
Devuelve:
  • En caso de éxito, una promesa con un mensaje de éxito que incluye los detalles de la cuenta. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:

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

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