Projeto NFT TypeScript andaimes para ERC-721

O Blockchain App Builder pega a entrada do seu arquivo de especificação NFT e gera um projeto de chaincode com andaimes totalmente funcional.

O projeto gera automaticamente classes e funções do ciclo de vida do NFT, incluindo métodos CRUD e não CRUD, bem como um SDK de tokenização. Validação de argumentos, marshalling/unmarshalling e capacidade de persistência transparente são suportados automaticamente.

Para obter informações sobre o projeto andaime e os métodos que não estão diretamente relacionados aos NFTs, consulte Scaffolded TypeScript Chaincode Project.

Modelo

Cada classe de modelo tokenizada estende a classe OchainModel. O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe OchainModel.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

}

Controladora

A classe do controlador principal estende a classe OchainController. Há apenas um controlador principal.

export class DigiCurrCCController extends OchainController{

Você pode criar qualquer número de classes, funções ou arquivos, mas apenas os métodos que são definidos dentro da classe do controlador principal são invocáveis. Os outros métodos estão ocultos.

Você pode usar os métodos SDK de token para criar métodos personalizados para seu aplicativo de negócios.

Métodos NFT Gerados Automaticamente

O Blockchain App Builder gera automaticamente métodos para suportar NFTs e ciclos de vida NFT. Você pode usar esses métodos para inicializar NFTs, gerenciar atribuições e contas e concluir outras tarefas de ciclo de vida do NFT sem qualquer codificação adicional. Os métodos da Controladora devem ter um decorador @Validator(...params) para serem chamados.

Métodos de Gerenciamento de Controle de Acesso

addTokenAdmin
Esse método adiciona um usuário como um Token Admin do chaincode. Este método só pode ser chamado por um Token Admin do chaincode.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como um Token Admin do chaincode.
Exemplo de Valor de Retorno:
{"msg":"Successfully added Admin (orgId: Org1MSP, userId: User1)"}
removeTokenAdmin
Este método remove um usuário como um Token Admin do chaincode. Este método só pode ser chamado por um Token Admin do chaincode.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como Token Admin do chaincode.
Exemplo de Valor de Retorno:
{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: User1)"}
isTokenAdmin
Esse método retornará o valor booliano true se o chamador da função for Token Admin; caso contrário, retornará false. Um Token Admin pode chamar essa função em qualquer outro usuário na rede blockchain. Outros usuários só podem chamar esse método em suas próprias contas.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • O método retornará true se o chamador for um Token Admin; caso contrário, retornará false.
Exemplo de Valor de Retorno:
{"result": true}
getAllTokenAdmins
Esse método retorna uma lista de todos os usuários que são um Token Admin do chaincode. Este método só pode ser chamado pelo Token Admin do chaincode.
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ADMIN.getAllAdmins', 'TOKEN');
    return await this.Ctx.ERC721Admin.getAllAdmins();
}
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um array admins no formato JSON que contém objetos orgId e userId.
Exemplo de Valor de Retorno:
{"admins":[{"orgId":"Org1MSP","userId":"admin"}]}

Métodos de Gerenciamento de Configuração de Token

init
Esse método é chamado quando o chaincode é instanciado. Cada Token Admin é identificado pelas informações userId e orgId no parâmetro adminList. userId é o nome de usuário ou o ID de e-mail do proprietário da instância ou do usuário que está conectado à instância. O orgId é o ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual. O parâmetro adminList é obrigatório na primeira vez que você implanta o chaincode. Se você estiver fazendo upgrade do chaincode, informe uma lista vazia ([]). Qualquer outra informação no parâmetro adminList é ignorada durante os upgrades.
@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 - Um array de informações {orgId, userId} que especifica a lista de administradores de token. O array adminList é um parâmetro obrigatório.
getAllTokens
Este método retorna todos os ativos de token salvos no banco de dados de estado. Este método só pode ser chamado por um Token Admin do chaincode. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
@GetMethod()
@Validator()
public async getAllTokens() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.ERC721Token.getAllTokens();
}
Parâmetros:
  • nenhuma
Retorna:
  • Uma lista de todos os ativos de token no formato JSON.
Exemplo de Valor de Retorno:
[
    {
        "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 retorna todos os ativos de token pertencentes a um usuário especificado. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo proprietário da conta.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Uma lista de ativos de token no formato JSON.
Exemplo de Valor de Retorno:
[
    {
        "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
Esse método retornará um objeto de token se o token estiver presente no banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode ou do proprietário do 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 - O ID do token a ser obtido.
Retorna:
  • O ativo de token no formato JSON.
Exemplo de Valor de Retorno:
{
    "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 retorna o histórico de um ID de token especificado. Este é um método assíncrono. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Qualquer um pode chamar esse 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 - O ID do token.
Exemplo de Valor de Retorno:
[
    {
        "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 é um método utilitário que retorna uma instância do token para um ID de token especificado. Esse método é usado por muitos dos métodos gerados automaticamente para extrair objetos de token. Você pode chamar esse método conforme necessário em seus métodos personalizados. Quando você criar um ativo ou uma classe tokenizada, atualize o caso de alternância com a classe Token correspondente para retornar o objeto de token correto. O comando ochain sync no Blockchain App Builder cria automaticamente um caso de alternância quando um ativo tokenizado é criado no arquivo de especificação. Esse método não tem decorador de método @Validator(), o que significa que esse método não é diretamente invocável e só pode ser chamado de outros 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 - O ID do token.
ownerOf
Este método retorna o ID da conta do proprietário do ID do token especificado. Qualquer um pode chamar esse método.
@GetMethod()
@Validator(yup.string())
public async ownerOf(tokenId: string) {
   return await this.Ctx.ERC721Token.ownerOf(tokenId);
}
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Um objeto JSON do ID da conta do proprietário.
Exemplo de Valor de Retorno:
{"owner": "oaccount~d6d22c3167e3c6ab9ee5653e1a008c37c20cc47ebb0229ca0aedfafe64c675b8"}
name
Esse método retorna o nome da classe de token. Qualquer um pode chamar esse método.
@GetMethod()
@Validator()
public async name() {
   return await this.Ctx.ERC721Token.name();
}
Parâmetros:
  • nenhuma
Retorna:
  • Um objeto JSON do nome do token.
Exemplo de Valor de Retorno:
{"tokenName": "artcollection"}
symbol
Esse método retorna o símbolo da classe de token. Qualquer um pode chamar esse método.
@GetMethod()
@Validator()
public async symbol() {
   return await this.Ctx.ERC721Token.symbol();
}
Parâmetros:
  • nenhuma
Retorna:
  • Um objeto JSON do símbolo de token.
Exemplo de Valor de Retorno:
{"symbol": "PNT"}
tokenURI
Este método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
@GetMethod()
@Validator(yup.string())
public async tokenURI(tokenId: string) {
   return await this.Ctx.ERC721Token.tokenURI(tokenId);
}
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON do URI do token.
Exemplo de Valor de Retorno:
{"tokenURI": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\
.ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
totalSupply
Este método retorna o número total de tokens cunhados. Este método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator()
public async totalSupply() {
  await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalSupply', 'TOKEN');
  return await this.Ctx.ERC721Token.totalSupply();
}
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um objeto JSON da contagem de tokens.
Exemplo de Valor de Retorno:
{"totalSupply": 3}
totalNetSupply
Este método retorna o número total de tokens cunhados menos o número de tokens gravados. Este método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator()
public async totalNetSupply() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.totalNetSupply', 'TOKEN');
    return await this.Ctx.ERC721Token.getTotalMintedTokens();
}
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um objeto JSON da contagem de tokens.
Exemplo de Valor de Retorno:
{"totalNetSupply": 1}

Métodos de Gerenciamento de Conta

createAccount
Esse método cria uma conta para um usuário e token especificados. Uma conta deve ser criada para qualquer usuário que tenha tokens a qualquer momento. As contas rastreiam o número de NFTs que um usuário tem. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Você pode criar apenas uma conta NFT por usuário.

Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com oaccount~ e seguido por um hash SHA-256 do ID do provedor de serviços de associação (orgId) do usuário na organização de rede atual, o nome de usuário ou o ID de e-mail (userId) do proprietário da instância ou do usuário que está conectado à instância e a string constante nft. Este método só pode ser chamado pelo Token Admin do chaincode.

@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
  • tokenType: string - O único tipo de token suportado é nonfungible.
Retorna:
  • Em caso de sucesso, um objeto JSON da conta que foi criada. O parâmetro bapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "bapAccountVersion": 0,
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Este método retorna o número total de NFTs que um usuário especificado mantém. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo proprietário da conta.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Um objeto JSON da contagem atual de NFT.
Exemplo de Valor de Retorno:
{"totalNfts": 0}
getAllAccounts
Este método retorna uma lista de todas as contas. Este método só pode ser chamado por um Token Admin do chaincode. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
@GetMethod()
@Validator()
public async getAllAccounts() {
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.ERC721Account.getAllAccounts();
}
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um array JSON de todas as contas.
Exemplo de Valor de Retorno:
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }    
    }
]
getAccountByUser
Este método retorna detalhes da conta para um usuário especificado. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo Account Owner da conta.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, um objeto de conta JSON que inclui as seguintes propriedades:
  • bapAccountVersion - Um parâmetro de objeto de conta para uso interno.
  • status - O status atual da conta do usuário.
  • accountId - O ID da conta de usuário.
  • userId - O nome de usuário ou o ID de e-mail do usuário.
  • orgId - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • tokenType - O tipo de token que a conta contém.
  • noOfNfts - O número total de NFTs mantidos pela conta.
Exemplo de Valor de Retorno:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 0
}
getUserByAccountId
Este método retorna os detalhes do usuário de uma conta especificada. Esse método pode ser chamado por qualquer usuário.
@GetMethod()
@Validator(yup.string())
public async getUserByAccountId(accountId: string) {
    return await this.Ctx.ERC721Account.getUserByAccountId(accountId);
}
Parâmetros:
  • accountId: string - O ID da conta.
Retorna:
  • Em caso de sucesso, um objeto JSON dos detalhes do usuário (orgId e userId).
Exemplo de Valor de Retorno:
{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountHistory
Este método retorna o histórico da conta de um usuário especificado. Este é um método assíncrono. Esse método só pode ser chamado pelo Token Admin do chaincode ou pelo proprietário da conta.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, um objeto JSON do histórico da conta. O parâmetro bapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
[
    {
        "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 Gerenciamento de Atribuições

addRole
Esse método adiciona uma atribuição a um usuário especificado. Este método só pode ser chamado por um Token Admin do chaincode.
@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 - O nome da atribuição a ser adicionada ao usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação.
  • orgId: string - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRole
Esse método remove uma atribuição de um usuário especificado. Este método só pode ser chamado por um Token Admin do chaincode.
@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 - O nome da atribuição a ser removida do usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação.
  • orgId: string - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
{"msg": "Successfully removed role 'minter' from Account Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Esse método retorna uma lista de todos os IDs de conta de uma função especificada. Este método só pode ser chamado por um Token Admin do chaincode.
@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 - O nome da atribuição a ser pesquisada.
Retorna:
  • Em caso de sucesso, um array JSON de IDs de conta.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Esse método retorna uma lista de todos os usuários de uma função especificada. Este método só pode ser chamado por um Token Admin do chaincode.
@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 - O nome da atribuição a ser pesquisada.
Retorna:
  • Em caso de sucesso, um array JSON dos objetos do usuário (orgId e userId).
Exemplo de Valor de Retorno:
{
    "users": [
        {
            "userId": "admin",
            "orgId": "Org1MSP"
        }
    ]
}
isInRole
Este método retorna um valor booliano para indicar se um usuário tem uma função especificada. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo Account Owner da conta.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
  • role: string - O nome da atribuição a ser pesquisada.
Retorna:
  • Em caso de sucesso, uma string JSON do resultado Booliano.
Exemplo de Valor de Retorno:
{"result":"true"}

Métodos do Gerenciamento do Histórico de Transações

getAccountTransactionHistory
Este método retorna o histórico de transações da conta para um usuário especificado. Este é um método assíncrono. Esse método só pode ser chamado pelo Token Admin do chaincode ou pelo proprietário da conta.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Exemplo de Valor de Retorno:
[
    {
        "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
Esse método retorna o histórico de transações da conta para um usuário especificado, filtrado por PageSize, Bookmark, startTime e endTime. Este é um método assíncrono. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esse método só pode ser chamado pelo Token Admin do chaincode ou pelo proprietário da conta.
@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 - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
  • filters: object - Um objeto da classe Filtro que contém quatro atributos: pageSize, bookmark, startTime e endTime.
Exemplo de Valor de Retorno:
[
    {
        "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 retorna o histórico de transações para um ID de transação especificado. Este é um método assíncrono. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo proprietário da conta.
@GetMethod()
@Validator(yup.string())
public async getTransactionById(transactionId: string) {
    return await this.Ctx.ERC721Transaction.getTransactionById(transactionId);
}
Parâmetros:
  • transactionId: string - O id da transação, que é o prefixo otransaction~ seguido pelo hash de 64 bits no formato hexadecimal.
Exemplo de Valor de Retorno:
{
    "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 exclui transações anteriores a um timestamp especificado no banco de dados de estado. Este é um método assíncrono. Este método só pode ser chamado por um Token Admin do chaincode.
@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 - Um timestamp. Todas as transações antes do carimbo de data e hora serão excluídas.
Exemplo de Valor de Retorno:
{
    "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 do Gerenciamento de Comportamento de Token - Comportamento Mintable

create<Token Name>Token
Esse método cria (aponta) um NFT. O ativo e as propriedades associadas são salvos no banco de dados de estado. O chamador desta transação deve ter uma conta de token. O chamador desta transação se torna o proprietário do NFT. Se o arquivo de especificação de token incluir a seção roles para behaviors e a propriedade minter_role_name para roles, o chamador da transação deverá ter a atribuição de minerador. Caso contrário, qualquer chamador pode cunhar NFTs.
@Validator(< Token Class >)
public async create< Token Name >Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.createToken(tokenAsset);
}
Parâmetros:
  • tokenAsset: <Token Class> - O ativo de token a ser cunhado. Para obter mais informações sobre as propriedades do ativo de token, consulte o arquivo de especificação de entrada.
Retorna:
  • Em caso de sucesso, um objeto de ativo de token JSON que inclui as seguintes propriedades:
  • metadata - Informações JSON que descrevem o token.
  • createdBy - O ID da conta do usuário que chamou a transação para cunhar o token.
  • creationDate - O carimbo de data e hora da transação.
  • isBurned - Um valor booliano que indica se o NFT identificado por tokenId foi gravado.
  • tokenName - O nome do token.
  • tokenDesc - A descrição do token.
  • symbol - O símbolo do token.
  • tokenStandard - O padrão do token.
  • tokenType - O tipo de token mantido por essa conta.
  • tokenUnit - A unidade do token.
  • behaviors - Uma descrição de todos os comportamentos de token.
  • mintable - Uma descrição das propriedades do comportamento de mintable. A propriedade max_mint_quantity especifica o número máximo de NFTs dessa classe de token que podem ser criados.
  • owner - O ID da conta do proprietário atual do token. Durante o processo de cunhagem, o chamador desse método se torna o proprietário do token.
  • tokenUri - O URI do token.
Exemplo de Valor de Retorno:
{
    "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
Esse método atualiza as propriedades do token. Esse método só pode ser chamado pelo usuário que é o proprietário ou criador do token. Depois que um ativo de token é criado, somente o proprietário do token pode atualizar as propriedades personalizadas do token. Se o usuário for proprietário do token e criador de um token, ele também poderá atualizar a propriedade TokenDesc. Os metadados do token não podem ser atualizados. Você deve passar todas as propriedades de token para este método, mesmo que queira atualizar apenas determinadas propriedades.
@Validator(<Token Class>)
public async update<Token name>Token(tokenAsset: <Token Class>) {
    return await this.Ctx.ERC721Token.updateToken(tokenAsset);
}
Parâmetros:
  • tokenAsset: <Token Class> - O ativo de token a ser atualizado. Para obter mais informações sobre as propriedades do ativo de token, consulte o arquivo de especificação de entrada.
Retorna:
  • Em caso de sucesso, um objeto de ativo de token JSON atualizado
Exemplo de Valor de Retorno:
{
    "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 do Gerenciamento de Comportamento de Token - Comportamento Transferível

safeTransferFrom
Esta é uma função assíncrona. Este método transfere a propriedade do NFT especificado do chamador para outra conta. Este método inclui as seguintes validações:
  • O token existe e não foi gravado.
  • A conta do remetente e a conta do recebedor existem e não são a mesma conta.
  • A conta do remetente possui o token.
  • O chamador da função é o remetente.
@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 - O ID do provedor de serviços de associação (MSP) do remetente e do proprietário do token na organização atual.
  • fromUserId: string - O nome de usuário ou o ID de e-mail do remetente e do proprietário do token.
  • toOrgId: string - O ID do provedor de serviços de associação (MSP) do destinatário na organização atual.
  • toUserId: string - O nome de usuário ou o ID de e-mail do destinatário.
  • tokenId: string - O ID do token a ser transferido.
  • data: string - Informações adicionais opcionais a serem armazenadas no registro da transação.
Retorna:
  • Em caso de sucesso, uma mensagem com os detalhes da conta do remetente e do destinatário.
Exemplo de Valor de Retorno:
{"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
Esta é uma função assíncrona. Este método transfere a propriedade do NFT especificado de uma conta do remetente para uma conta do recebedor. É responsabilidade do chamador passar os parâmetros corretos. Esse método pode ser chamado por qualquer usuário, não apenas pelo proprietário do token. Este método inclui as seguintes validações:
  • O token existe e não foi gravado.
  • A conta do remetente e a conta do recebedor existem e não são a mesma conta.
  • A conta do remetente possui o 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 - O ID do provedor de serviços de associação (MSP) do remetente na organização atual.
  • fromUserId: string - O nome de usuário ou o ID de e-mail do remetente.
  • toOrgId: string - O ID do provedor de serviços de associação (MSP) do destinatário na organização atual.
  • toUserId: string - O nome de usuário ou o ID de e-mail do destinatário.
  • tokenId: string - O ID do token a ser transferido.
Retorna:
  • Em caso de sucesso, uma mensagem com os detalhes da conta do remetente e do destinatário.
Exemplo de Valor de Retorno:
{"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 de Gerenciamento de Comportamento de Token - Comportamento Queimável

burn
Esse método desativa ou grava o NFT especificado da conta do chamador. O chamador desse método deve ter uma conta. Um token não pode ser gravado, a menos que o arquivo de especificação de token inclua o comportamento burnable. Se nenhuma propriedade burner_role_name for especificada na seção roles do arquivo de especificação, o proprietário do token poderá gravar o token. Se uma propriedade burner_role_name for especificada na seção roles, o usuário atribuiu a atribuição de gravador que também é o minter (criador) ou o proprietário do token poderá gravar o 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 - O ID do token a ser gravado.
Retorna:
  • Em caso de sucesso, uma mensagem com os detalhes da conta.
Exemplo de Valor de Retorno:
{"msg": "Successfully burned NFT token: 'monalisa1' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
burnNFT
Esse método desativa ou grava o NFT especificado da conta do chamador e retorna um objeto de token e um histórico de token. O chamador desse método deve ter uma conta. Um token não pode ser gravado, a menos que o arquivo de especificação de token inclua o comportamento burnable. Se nenhuma propriedade burner_role_name for especificada na seção roles do arquivo de especificação, o proprietário do token poderá gravar o token. Se uma propriedade burner_role_name for especificada na seção roles, o usuário atribuiu a atribuição de gravador que também é o minter (criador) ou o proprietário do token poderá gravar o 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 - O ID do token a ser gravado.
Retorna:
  • Em caso de sucesso, um objeto de token que inclui informações de histórico de token.
Exemplo de Valor de Retorno:
{
    "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

Você pode usar os métodos SDK de token para criar métodos personalizados para seu aplicativo de negócios.

O exemplo a seguir mostra como usar métodos SDK de token em métodos personalizados. Quando o método sell é chamado, ele publica um token para venda por um preço 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 SDK NFT

Métodos de Gerenciamento de Controle de Acesso

O NFT SDK fornece uma função de controle de acesso. Alguns métodos só podem ser chamados por um Token Admin ou Account Owner do token. Você pode usar esse recurso para garantir que as operações sejam executadas apenas pelos usuários pretendidos. Qualquer acesso não autorizado resulta em um erro. Para usar a função de controle de acesso, importe a classe Authorization do módulo ../lib/erc721-auth.
import { ERC721Authorization } from '../lib/erc721-auth';
checkAuthorization
Use esse método para adicionar uma verificação de controle de acesso a uma operação. Esta é uma função assíncrona. A maioria dos métodos gerados automaticamente inclui controle de acesso. Determinados métodos de token só podem ser executados pelo ERC721Admin ou Account Owner do token ou pelo MultipleAccountOwner para usuários com várias contas. O método checkAuthorization faz parte da classe Authorization, que você acessa por meio do objeto Ctx. O mapeamento de controle de acesso é descrito no arquivo ../lib/constant.ts, conforme mostrado no texto a seguir. Você pode modificar o controle de acesso editando o arquivo ../lib/constant.ts. Para usar seu próprio controle de acesso ou desativar o controle de acesso, remova o código de controle de acesso dos métodos de controlador gerados automaticamente e 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 - O valor do mapa entre a classe e os métodos, conforme descrito no arquivo ../lib/constant.ts.
  • ...args - Um argumento de variável em que args[0] usa a constante 'TOKEN' e args[1] usa o parâmetro accountId para adicionar uma verificação de controle de acesso para um AccountOwner. Para adicionar uma verificação de controle de acesso para um MultipleAccountOwner, args[1] usa o parâmetro orgId e args[2] usa o parâmetro userId.
Retorna:
  • Sobre o sucesso, uma promessa. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplos de:

Admin acesso

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

Acesso a AccountOwner

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

Acesso a MultipleAccountOwner

await this.Ctx.ERC721Auth.checkAuthorization('ADMIN.isUserTokenAdmin', 'TOKEN', orgId, userId);
isUserTokenAdmin
Esse método retornará o valor booliano true se o chamador da função for Token Admin. Caso contrário, o método retornará false. Esta é uma função estática assíncrona.
Ctx.ERC721Auth.isUserTokenAdmin(orgId: string, userId: string)
Parâmetros:
  • orgId - O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
  • userId - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Uma resposta booleana e uma mensagem de erro se um erro for encontrado.
Exemplo:

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

{"result":false}
addAdmin
Esse método adiciona um usuário como Token Admin do chaincode do token.
Ctx.ERC721Admin.addAdmin(orgId: string, userId: string)
Parâmetros:
  • orgId: string - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que lista detalhes do usuário adicionado como Token Admin do chaincode do token. Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

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

{"msg": "Successfully added Admin (orgId: Org1MSP, userId: user1)"}
removeAdmin
Esse método remove um usuário como Token Admin do chaincode do token.
Ctx.ERC721Admin.removeAdmin(orgId: string, userId: string)
Parâmetros:
  • orgId: string - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que lista detalhes do usuário removido como Token Admin do chaincode do token. Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

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

{"msg": "Successfully removed Admin (orgId: Org1MSP, userId: user1)"}
getAllAdmins
Esse método retorna uma lista de todos os usuários Token Admin.
Ctx.ERC721Admin.getAllAdmins()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários Token Admin. Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

await this.Ctx.ERC721Admin.getAllAdmins()

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

Métodos de Gerenciamento de Configuração de Token

Os métodos de gerenciamento de configuração de token são baseados no padrão ERC-721. Para usar os métodos de gerenciamento de configuração de token, importe a classe Token do módulo ../lib/erc721-token.

totalSupply
Esse método retorna o número total de NFTs cunhados. Esta é uma função assíncrona.
Ctx.ERC721Token.totalSupply()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, o total de tokens líquidos, no tipo de dados de número. Em caso de erro, ele retorna com uma mensagem de erro.
Exemplo:

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

2000
get
Este método retornará o objeto de token especificado se ele estiver presente no banco de dados de estado. Esta é uma função estática assíncrona.
Ctx.ERC721Token.get(tokenId: string)
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Em caso de sucesso, uma promessa que inclui um objeto JSON do ativo de token. Em caso de erro, uma rejeição com uma mensagem de erro
Exemplo:

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 se existe um ativo de token com o ID especificado. Esta é uma função estática assíncrona.
Ctx.ERC721Token.isTokenType(tokenId: string)
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Em caso de sucesso, uma promessa com verdadeiro se existir um ativo de token com o ID especificado. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

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

true
createToken
Este método cria um token e salva suas propriedades no banco de dados de estado. Esse método só pode ser chamado por usuários com a atribuição minter. Esta é uma função assíncrona.
Ctx.ERC721Token.createToken(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> - O ativo de token a ser criado.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com detalhes do token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

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
Esse método atualiza as propriedades do token. Esse método só pode ser chamado pelo proprietário ou criador do token. Depois que um ativo de token é criado, somente o proprietário do token pode atualizar as propriedades personalizadas do token. Se o usuário for proprietário do token e criador de um token, ele também poderá atualizar a propriedade TokenDesc. Os metadados do token não podem ser atualizados. Você deve passar todas as propriedades de token para este método, mesmo que queira atualizar apenas determinadas propriedades. Esta é uma função assíncrona.
Ctx.ERC721Token.updateToken(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> - O ativo de token a ser atualizado.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com detalhes do token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

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
Esse método chama o método fabric getStateByRange internamente. Embora qualquer ativo com o ID fornecido seja retornado do razão, esse método converte o ativo no tipo de Ativo chamador. Esta é uma função estática assí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 - A chave inicial do intervalo. Essa chave está incluída no intervalo.
  • endId: string - A chave final do intervalo. Esta chave é excluída do intervalo.
  • tokenClassReference: <Instance of Token Class> - O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, uma promessa com um array de <Token Class>. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
[
  {
      "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 retorna o histórico do token especificado. Esta é uma função estática assíncrona.
Ctx.ERC721Token.history(tokenId: string)
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Em caso de sucesso, um iterador de consulta do histórico de promessas para o token especificado. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
[
   {
      "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 retorna todos os ativos de token salvos no banco de dados de estado. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esta é uma função estática assíncrona.
Ctx.ERC721Token.getAllTokens()
Parâmetros:
  • nenhuma
Retorna:
  • No sucesso, uma promessa com todos os ativos de token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

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 retorna todos os tokens pertencentes a um ID de conta especificado. Esta é uma função estática assíncrona.
Ctx.ERC721Token.getAllTokensByUser(accountId: string)
Parâmetros:
  • accountId: string - O ID da conta.
Retorna:
  • Em caso de sucesso, um iterador de consulta do histórico de promessas para a conta especificada. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
{
   "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 retorna o ID da conta do proprietário de um token especificado. Esta é uma função estática assíncrona.
Ctx.ERC721Token.ownerOf(tokenId: string)
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Em caso de sucesso, ele retorna um iterador de consulta do histórico de promessas para o ID de token especificado. Em caso de erro, ele rejeita com uma mensagem de erro
Exemplo de Valor de Retorno:
{"owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"}
tokenUri
Esse método retorna o URI de um token especificado. Esta é uma função estática assíncrona.
Ctx.ERC721Token.tokenUri(tokenId: string)
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Em caso de sucesso, ele retorna um iterador de consulta do histórico de promessas para o ID de token especificado. Em caso de erro, ele rejeita com uma mensagem de erro
Exemplo de Valor de Retorno:
{"uri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
getTokenUri
Esse método retorna o URI de um token especificado. Esta é uma função estática assíncrona.
Ctx.ERC721Token.getTokenUri(tokenId: string)
Parâmetros:
  • tokenId: string - O ID do token.
Retorna:
  • Em caso de sucesso, ele retorna um iterador de consulta do histórico de promessas para o ID de token especificado. Em caso de erro, ele rejeita com uma mensagem de erro
Exemplo de Valor de Retorno:
{"tokenUri": https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
symbol
Esse método retorna o símbolo da classe de token.
Ctx.ERC721Token.symbol()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um objeto JSON com o símbolo de token.
Exemplo de Valor de Retorno:
{"symbol": "PNT"}

Métodos de Gerenciamento de Conta

generateAccountId
Esse método retorna um ID de conta, formado pela concatenação do ID do provedor de serviços de associação (orgId) e do nome de usuário ou do ID de e-mail (userId) e, em seguida, pela criação de um hash SHA-256.
Ctx.ERC721Account.generateAccountId(orgId: string, userId: string)
Parâmetros:
  • orgId: string - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma promessa com o ID da conta gerada. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

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

oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507
createAccount
Esse método cria uma conta para um usuário e token especificados. Uma conta deve ser criada para qualquer usuário que tenha tokens a qualquer momento. As contas rastreiam o número de NFTs que um usuário tem. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Você pode criar apenas uma conta NFT por usuário.

Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com oaccount~ e seguido por um hash SHA-256 do ID do provedor de serviços de associação (orgId) do usuário na organização de rede atual, o nome de usuário ou o ID de e-mail (userId) do proprietário da instância ou do usuário que está conectado à instância e a string constante nft. Este método só pode ser chamado pelo Token Admin do chaincode.

Ctx.ERC721Account.createAccount(orgId: string, userId: string, tokenType: string)
Parâmetros:
  • orgId: string - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId: string - O nome de usuário ou o ID de e-mail do usuário.
  • tokenType: string - O único tipo de token suportado é nonfungible.
Retorna:
  • Em caso de sucesso, uma promessa com o novo objeto de conta. Em caso de erro, uma rejeição com uma mensagem de erro
Exemplo:

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 retorna uma lista de todas as contas. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.ERC721Account.getAllAccounts()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que lista todas as contas. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
[
    {
        "key": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "valueJson": {
            "assetType": "oaccount",
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "userId": "admin",
            "orgId": "Org1MSP",
            "tokenType": "nonfungible",
            "noOfNfts": 1
        }   
    }
]
history
Este método retorna um array dos detalhes do histórico da conta para uma conta especificada.
Ctx.ERC721Account.history(accountId: string)
Parâmetros:
  • accountId: string - O ID da conta.
Retorna:
  • Em caso de sucesso, um array map[string]interface{} que contém os detalhes do histórico da conta para a conta especificada. Os dados da conta são mostrados na chave value no mapa. Em caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo:

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 retorna os detalhes do usuário de uma conta especificada.
Ctx.ERC721Account.getUserByAccountId(accountId: string)
Parâmetros:
  • accountId: string - O ID da conta.
Retorna:
  • Em caso de sucesso, um objeto JSON que inclui detalhes do usuário nas seguintes propriedades:
    • orgId - O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
    • userId - O nome de usuário ou o ID de e-mail do usuário.
  • Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

await this.Ctx.ERC721Account.getUserByAccountById(accountId)

{
  "userId": "admin",
  "orgId": "Org1MSP"
}
getAccountWithStatusByUser
Este método retorna detalhes do usuário para uma conta especificada, incluindo o status da conta. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo Account Owner da conta.
Ctx.ERC721Account.getAccountWithStatusByUser(orgId, userId)
Parâmetros:
  • orgId - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, um objeto de conta JSON que inclui as seguintes propriedades:
  • accountId - O ID da conta de usuário.
  • userId - O nome de usuário ou o ID de e-mail do usuário.
  • orgId - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • tokenType - O tipo de token que a conta contém.
  • noOfNfts - O número total de NFTs mantidos pela conta.
  • bapAccountVersion - Um parâmetro de objeto de conta para uso interno.
  • status - O status atual da conta do usuário.
  • Em caso de erro, um objeto não nulo que contém uma mensagem de erro.
Exemplo:

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 retorna detalhes do usuário para uma conta especificada. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo Account Owner da conta.
Ctx.ERC721Account.getAccountByUser(orgId, userId)
Parâmetros:
  • orgId - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • userId - O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, um objeto de conta JSON que inclui as seguintes propriedades:
  • accountId - O ID da conta de usuário.
  • userId - O nome de usuário ou o ID de e-mail do usuário.
  • orgId - O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • tokenType - O tipo de token que a conta contém.
  • noOfNfts - O número total de NFTs mantidos pela conta.
  • Em caso de erro, um objeto não nulo que contém uma mensagem de erro.
Exemplo:

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

{
    "assetType": "oaccount",
    "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "userId": "admin",
    "orgId": "Org1MSP",
    "tokenType": "nonfungible",
    "noOfNfts": 0
}
balanceOf
Este método retorna o número total de NFTs que o usuário especificado mantém.
Ctx.ERC721Account.balanceOf(accountId: string)
Parâmetros:
  • accountId: string - O ID da conta do usuário.
Retorna:
  • Em caso de sucesso, um objeto JSON da contagem atual de NFT. Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

await this.Ctx.ERC721Account.balanceOf(accountId)

{"totalNfts": 0}

Métodos de Gerenciamento de Atribuições

addRoleMember
Esse método adiciona uma atribuição a um usuário e token especificados. Um ID de conta é formado pela criação de um hash SHA-256 do ID do provedor de serviços de associação concatenado (orgId) e do nome de usuário ou ID de e-mail (userId). Esta é uma função assíncrona.
Ctx.ERC721Token.addRoleMember(role: string, accountId: string)
Parâmetros:
  • role: string - O nome da atribuição a ser adicionada ao usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação.
  • accountId: string - O ID da conta no qual operar.
Retorna:
  • Em caso de sucesso, uma promessa com uma mensagem incluindo a atribuição e o ID da conta adicionados. Em caso de erro, uma rejeição com uma mensagem de erro
Exemplo:

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

{"msg": "Successfully added role 'minter' to Account Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin)"}
removeRoleMember
Esse método remove uma atribuição de um usuário e token especificados. Um ID de conta é formado pela criação de um hash SHA-256 do ID do provedor de serviços de associação concatenado (orgId) e do nome de usuário ou ID de e-mail (userId). Esta é uma função assíncrona.
Ctx.ERC721Token.removeRoleMember(role: string, accountId: string)
Parâmetros:
  • role: string - O nome da atribuição a ser removida do usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação.
  • accountId: string - O ID da conta no qual operar.
Retorna:
  • Em caso de sucesso, uma promessa com uma mensagem incluindo a função removida e o ID da conta. Em caso de erro, uma rejeição com uma mensagem de erro
Exemplo:

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 retorna um valor booliano para indicar se um usuário e um token têm uma função especificada. Um ID de conta é formado pela criação de um hash SHA-256 do ID do provedor de serviços de associação concatenado (orgId) e do nome de usuário ou ID de e-mail (userId). Esta é uma função assíncrona.
Ctx.ERC721Token.isInRole(role: string, accountId: string)
Parâmetros:
  • role: string - O nome da atribuição a ser verificada para o usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação.
  • accountId: string - O ID da conta no qual operar.
Retorna:
  • Em caso de sucesso, uma promessa que será verdadeira se a função estiver presente para o ID de conta especificado; caso contrário, será falsa. Em caso de erro, uma rejeição com uma mensagem de erro
Exemplo:

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

{"result": "true"}
getAccountsByRole
Esse método retorna uma lista de todos os IDs de conta de uma função especificada.
Ctx.ERC721Role.getAccountsByRole(roleName: string)
Parâmetros:
  • roleName: string - O nome da atribuição a ser pesquisada.
Retorna:
  • Em caso de sucesso, um array JSON de IDs de conta. Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

await this.Ctx.ERC721Role.getAccountsByRole(userRole)

{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
getUsersByRole
Esse método retorna uma lista de todos os usuários de uma função especificada.
Ctx.ERC721Role.getUsersByRole(userRole: string)
Parâmetros:
  • role: string - O nome da atribuição a ser pesquisada.
Retorna:
  • Em caso de sucesso, um array JSON de objetos do usuário. Cada objeto contém o ID usuário e o ID organização. Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

await this.Ctx.ERC721Role.getUsersByRole(userRole)

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

Métodos do Gerenciamento do Histórico de Transações

getAccountTransactionHistory
Este método retorna um array dos detalhes do histórico de transações de uma conta especificada.
Ctx.ERC721Account.getAccountTransactionHistory(accountId: string)
Parâmetros:
  • accountId: string - O ID da conta.
Retorna:
  • Em caso de sucesso, um array de objetos de transação de conta no formato JSON:
    • transactionId - O ID da transação.
    • transactedAccount - A conta com a qual a transação ocorreu.
    • transactionType - O tipo de transação.
    • timestamp - O horário da transação.
    • noOfNfts - O saldo da conta do chamador.
    • Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

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
Esse método retorna o histórico de transações da conta para um usuário especificado, filtrado por PageSize, Bookmark, startTime e endTime. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
async getAccountTransactionHistoryWithFilters(orgId: string, userId: string, filters?: Filters)
Parâmetros:
  • accountId: string - O ID da conta.
  • filters: object - Um objeto da classe Filtro que contém quatro atributos: pageSize, bookmark, startTime e endTime. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Retorna:
  • Em caso de sucesso, um array de objetos de transação de conta no formato JSON:
    • transactionId - O ID da transação.
    • transactedAccount - A conta com a qual a transação ocorreu.
    • transactionType - O tipo de transação.
    • timestamp - O horário da transação.
    • noOfNfts - O saldo da conta do chamador.
    • Em caso de erro, um objeto de erro não nulo que contém uma mensagem de erro.
Exemplo:

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
Esse método retorna o histórico de um ativo Transaction.
Ctx.ERC721Transaction.getTransactionById(transactionId: string)
Parâmetros:
  • transactionId: string - O ID do ativo da transação.
Exemplo:

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 exclui transações anteriores a uma data especificada do banco de dados de estado.
Ctx.ERC721Transaction.deleteTransactions(timeToExpiration: Date)
Parâmetros:
  • timeToExpiration: Date - A data e a hora. As transações anteriores ao horário especificado serão excluídas.
Exemplo:

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

Gerenciamento de Comportamento de Token - Comportamento Mintable

getMaxMintQuantity
Esse método retorna a quantidade mínima máxima de um token. Se o comportamento max_mint_quantity não estiver configurado no arquivo de especificação, o valor padrão será 0 e um número infinito de tokens poderá ser cunhado.
Ctx.ERC721Token.getMaxMintQuantity(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> - O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, a quantidade mínima máxima do token, no tipo de dados de número. Em caso de erro, ele retorna com uma mensagem de erro.
Exemplo:

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

20000
getTotalMintedTokens
Este método retorna o número total cunhado de tokens disponíveis no sistema para o token especificado. O número líquido de tokens disponíveis é o número total de tokens cunhados menos o número de tokens queimados. Esta é uma função assíncrona.
Ctx.ERC721Token.getTotalMintedTokens()
Parâmetros:
  • token: <Instance of Token Class> - O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, o total de tokens cunhados, no tipo de dados de número. Em caso de erro, ele retorna com uma mensagem de erro.
Exemplo:

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

4000

Gerenciamento de Comportamento de Token - Comportamento Transferível

safeTransferFrom
Esta é uma função assíncrona. Este método transfere a propriedade do NFT especificado do chamador para outra conta. Este método inclui as seguintes validações:
  • O token existe e não foi gravado.
  • A conta do remetente e a conta do recebedor existem e não são a mesma conta.
  • A conta do remetente possui o token.
  • O chamador da função é o remetente.
Ctx.ERC721Token.safeTransferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>, data?: string)
Parâmetros:
  • fromAccountId: string - O ID da conta do remetente na organização atual.
  • toAccountId: string - O ID da conta do recebedor na organização atual.
  • token: <Instance of Token Class> - O ativo de token a ser transferido.
  • data: string - Informações adicionais opcionais a serem armazenadas na transação.
Retorna:
  • Em caso de sucesso, uma promessa com uma mensagem de sucesso que inclui detalhes da conta. Os IDs de conta têm o prefixo oaccount~. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

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
Esta é uma função assíncrona. Este método transfere a propriedade do NFT especificado de uma conta do remetente para uma conta do recebedor. É responsabilidade do chamador passar os parâmetros corretos. Esse método pode ser chamado por qualquer usuário, não apenas pelo proprietário do token. Este método inclui as seguintes validações:
  • O token existe e não foi gravado.
  • A conta do remetente e a conta do recebedor existem e não são a mesma conta.
  • A conta do remetente possui o token.
Ctx.ERC721Token.transferFrom(fromAccountId: string, toAccountId: string, token: <Instance of Token Class>)
Parâmetros:
  • fromAccountId: string - O ID da conta do remetente na organização atual.
  • toAccountId: string - O ID da conta do recebedor na organização atual.
  • token: <Instance of Token Class> - O ativo de token a ser transferido.
Retorna:
  • Em caso de sucesso, uma promessa com uma mensagem de sucesso que inclui detalhes da conta. Os IDs de conta têm o prefixo oaccount~. Em caso de erro, uma rejeição com uma mensagem de erro.
\Por exemplo:

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

Gerenciamento de Comportamento de Token - Comportamento Queimável

burn
Esse método desativa ou grava o NFT especificado da conta do chamador. O chamador desse método deve ter uma conta. Um token não pode ser gravado, a menos que o arquivo de especificação de token inclua o comportamento burnable. Se nenhuma propriedade burner_role_name for especificada na seção roles do arquivo de especificação, o proprietário do token poderá gravar o token. Se uma propriedade burner_role_name for especificada na seção roles, o usuário atribuiu a atribuição de gravador que também é o minter (criador) do token poderá gravar o token. Esta é uma função assíncrona.
Ctx.ERC721Token.burn(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> - O ativo de token a ser gravado.
Retorna:
  • Em caso de sucesso, uma promessa com uma mensagem de sucesso que inclui detalhes da conta. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:

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

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