Projeto de Token Scaffolded TypeScript para ERC-1155

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

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

Para obter informações sobre o projeto e os métodos scaffolded que não estão diretamente relacionados a tokens, consulte Projeto Chaincode TypeScript andaime.

Modelo

Cada classe de modelo tokenizado estende a classe OchainModel. O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe OchainModel. O modelo a seguir mostra um token inteiro não fungível.

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("erc1155+")
  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;

  @Mandatory()
  @Validate(yup.string().required().max(2000)) 
  public tokenUri: string;

  @Embedded(ArtCollectionMetadata)
  public tokenMetadata: ArtCollectionMetadata;

  @Validate(yup.number())
  public price: number;
  
  @Validate(yup.boolean())
  public on_sale_flag: boolean;
  
}

@Id("tokenId")
export class Loyalty extends OchainModel<Loyalty> {
  public readonly assetType = "otoken";

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

  @ReadOnly("loyalty")
  public tokenName: string;

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

  @ReadOnly("erc1155+")
  public tokenStandard: string;

  @ReadOnly("fungible")
  public tokenType: string;

  @ReadOnly("fractional")
  public tokenUnit: string;

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

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

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

  @ReadOnly({ decimal: 2 })
  public divisible: object;

  @Validate(yup.string())
  public currency_name: string;
  
  @Validate(yup.number())
  public token_to_currency_ratio: number;
  
}
O modelo a seguir mostra um token fracionário não fungível.
export class RealEstatePropertyMetadata extends EmbeddedModel<RealEstatePropertyMetadata> {
  @Validate(yup.string())
  public propertyType: string;
  
  @Validate(yup.string())
  public propertyName: string;
  
  @Validate(yup.string())
  public propertyAddress: string;
  
  @Validate(yup.string())
  public propertyImage: string;
  
}
    
@Id("tokenId")
export class RealEstateProperty extends OchainModel<RealEstateProperty> {
  public readonly assetType = "otoken";

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

  @ReadOnly("realestateproperty")
  public tokenName: string;

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

  @ReadOnly("erc1155+")
  public tokenStandard: string;

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

  @ReadOnly("fractional")
  public tokenUnit: string;

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

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

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

  @Validate(yup.number().positive())
  public quantity: number;

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

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

  @ReadOnly({ decimal: 0 })
  public divisible: object;

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

  @Mandatory()
  @Validate(yup.string().required().max(2000))
  public tokenUri: string;

  @Embedded(RealEstatePropertyMetadata)
  public tokenMetadata: RealEstatePropertyMetadata;

  @Validate(yup.number())
  public propertySellingPrice: number;
  
  @Validate(yup.number())
  public propertyRentingPrice: number;
  
}

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 definidos na classe do controlador principal são invocáveis. Os outros métodos estão ocultos.

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

Métodos de Token Gerados Automaticamente

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

Métodos para Gerenciamento de Controle de Acesso

isTokenAdmin
Este método retornará o valor Booliano true se o chamador da função for um Token Admin, caso contrário, retornará false. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getAccountDetailsByUser(orgId: string, userId: string) {
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.getAccountDetailsByUser", "TOKEN", {
    accountId: userAccountId,
  });
  return await this.Ctx.ERC1155Account.getAccountDetailsByUser(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 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}
addTokenAdmin
Este método adiciona um usuário como um Token Admin do chaincode. Esse 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.ERC1155Auth.checkAuthorization("ERC1155ADMIN.addAdmin", "TOKEN");
  return await this.Ctx.ERC1155Admin.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 ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como Token Admin do chaincode.
Exemplo de Valor de Retorno:
{"msg":"Successfully added Admin (OrgId: appDev, UserId: user1)"}
removeTokenAdmin
Este método remove um usuário como um Token Admin do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode. Você não pode se remover como um Token Admin.
@Validator(yup.string(), yup.string())
public async removeTokenAdmin(orgId: string, userId: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ADMIN.removeAdmin", "TOKEN");
  return await this.Ctx.ERC1155Admin.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 ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Token Admin do chaincode.
Exemplo de Valor de Retorno:
{"msg": "Successfully removed Admin (OrgId: appDev, UserId: user1)"}
getAllTokenAdmins
Este método retorna uma lista de todos os usuários que são um Token Admin do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator()
public async getAllTokenAdmins() {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ADMIN.getAllAdmins", "TOKEN");
  return await this.Ctx.ERC1155Admin.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": "appdev",
      "userId": "user2"
    },
    {
      "orgId": "appdev",
      "userId": "user1"
    }
  ]
}

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

init
Esse método é chamado quando o chaincode é instanciado. Todo Token Admin é identificado pelas informações userId e orgId no parâmetro adminList. O 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 ([]). Se você for o usuário que implantou inicialmente o chaincode, também poderá especificar novos administradores no parâmetro adminList quando estiver fazendo upgrade do chaincode. Qualquer outra informação no parâmetro adminList será ignorada durante os upgrades.
@Validator(yup.array().of(yup.object()).nullable())
public async init(adminList: ERC1155TokenAdminAsset[]) {
  await this.Ctx.ERC1155Admin.initAdmin(adminList);
  await this.Ctx.ERC1155Token.saveClassInfo(<1st NFT Token Name>);
  await this.Ctx.ERC1155Token.saveClassInfo(<2nd NFT Token Name>);
  .
  .
  await this.Ctx.ERC1155Token.saveClassInfo(<nth NFT Token Name>);
  // await this.Ctx.ERC1155Token.saveDeleteTransactionInfo();
  return;
}
Parâmetros:
  • adminList array – Um array de informações do {orgId, userId} que especifica a lista de administradores de token. O array adminList é um parâmetro obrigatório.
create<Token Name>Token
Este método cria tokens. Cada token definido tem seu próprio método de criação. Para tokens fungíveis, esse método só pode ser chamado por um Token Admin do chaincode. Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método para criar um NFT. Se a função de minter não estiver definida, qualquer usuário poderá usar esse método para criar NFTs (mint). O usuário que chama esse método se torna o proprietário do NFT.
Tokens Fungíveis:
@Validator(<Token Class>)
public async create<Token Name>Token(tokenAsset: <Token Class>) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.save", "TOKEN");
  return await this.Ctx.ERC1155Token.save(tokenAsset);
}
Tokens Não Fungíveis:
@Validator(<Token Class>, yup.number())
public async create<Token Name>Token(tokenAsset: <Token Class>, quantity: number) {
  return await this.Ctx.ERC1155Token.save(tokenAsset, quantity);
}
Parâmetros:
  • tokenAsset: <Token Class> – O ativo de token. As propriedades do ativo são definidas no arquivo de modelo.
  • quantity: number – Apenas para tokens não fungíveis, o número de tokens para hortelã. O único valor suportado para esse parâmetro é 1.
Retorna:
  • Em caso de sucesso, o ativo de token no formato JSON, que inclui as informações a seguir, dependendo do tipo de token.
  • tokenMetadata – Informações JSON que descrevem o token.
  • createdBy – O ID da conta do chamador, que é o usuário que cunhou o token. Não é possível editar esta propriedade.
  • creationDate – O carimbo de data e hora da transação de cunhagem. Não é possível editar esta propriedade.
  • isBurned – Essa propriedade indica se o token foi gravado. Não é possível editar esta propriedade.
  • tokenName – O nome do token. Não é possível editar esta propriedade.
  • tokenDesc – A descrição do token.
  • symbol – O símbolo do token. Não é possível editar esta propriedade.
  • tokenStandard – O padrão do token. Não é possível editar esta propriedade.
  • tokenType – O tipo do token (fungível ou não fungível). Não é possível editar esta propriedade.
  • tokenUnit – A unidade do token (inteira ou fracionária). Não é possível editar esta propriedade.
  • behaviors – Uma lista de comportamentos de token. Não é possível editar esta propriedade.
  • mintable – As propriedades relacionadas à cunhagem. O valor max_mint_quantity define o número máximo de tokens que podem ser criados para a classe de token.
  • owner – O ID da conta do proprietário atual, que é o chamador do método.
  • tokenUri – O URI do token.
  • quantity – A quantidade do token.
Exemplo de Valor de Retorno (NFT Inteiro):
{
    "tokenMetadata": {
        "paintingName": "monalisa",
        "description": "monalisa painting",
        "image": "image link",
        "painterName": "Leonardo da Vinci"
    },
    "assetType": "otoken",
    "quantity": 1,
    "tokenId": "artnft",
    "tokenName": "artcollection",
    "tokenDesc": "artcollection nft",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 500
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-12-29T04:08:35.000Z",
    "isBurned": false,
    "tokenUri": "tu",
    "price": 10000,
    "onSaleFlag": false
}
Exemplo de Valor de Retorno (Token Fungível):
{
    "assetType": "otoken",
    "tokenId": "Loyalty",
    "tokenName": "loyalty",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "fungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 10000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "Dollar"
}
Exemplo de Valor de Retorno (NFT Fracionado):
{
    "tokenMetadata": {
        "painting_name": "paint",
        "description": "Painting Description"
    },
    "assetType": "otoken",
    "tokenId": "realEstate",
    "tokenName": "realestate",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "quantity": 100,
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2023-06-14T04:20:14.000Z",
    "divisible": {
        "decimal": 2
    },
    "isBurned": false,
    "tokenUri": "www.realestate.example.com",
    "price": 1000,
    "on_sale_flag": true
}
update<Token Name>Token
Este método atualiza tokens. Cada token definido tem seu próprio método de atualização. Você não pode atualizar metadados de token ou o URI de token de tokens não fungíveis. Para tokens fungíveis, esse método só pode ser chamado por um Token Admin do chaincode. Para tokens não fungíveis, esse método só pode ser chamado pelo proprietário do token.
Tokens Fungíveis:
@Validator(<Token Class>)
public async update<Token Name>Token(tokenAsset: <Token Class>) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.update", "TOKEN");
  return await this.Ctx.ERC1155Token.update(tokenAsset);
}
Tokens Não Fungíveis:
@Validator(<Token Class>)
public async update<Token Name>Token(tokenAsset: <Token Class>) {
  return await this.Ctx.ERC1155Token.update(tokenAsset);
}
Parâmetros:
  • tokenAsset: <Token Class> – O ativo de token. As propriedades do ativo são definidas no arquivo de modelo.
Retorna:
  • Em caso de sucesso, o ativo de token atualizado no formato JSON.
Exemplo de Valor de Retorno (NFT Inteiro):
{
    "tokenMetadata": {
        "paintingName": "monalisa",
        "description": "monalisa painting",
        "image": "image link",
        "painterName": "Leonardo da Vinci"
    },
    "assetType": "otoken",
    "quantity": 1,
    "tokenId": "artnft",
    "tokenName": "artcollection",
    "tokenDesc": "artcollection nft",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 500
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-12-29T04:08:35.000Z",
    "isBurned": false,
    "tokenUri": "tu",
    "price": 10000,
    "onSaleFlag": false
}
getTokenHistory
Este método retorna o histórico de um ID de token especificado. Qualquer um pode chamar esse método.
@GetMethod()
@Validator(yup.string())
public async getTokenHistory(tokenId: string) {
  return await this.Ctx.ERC1155Token.getTokenHistory(tokenId);
}
Parâmetros:
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, um array JSON que contém o histórico de tokens.
Exemplo de Valor de Retorno (Token Fungível):
[
    {
        "trxId": "ef4af760c3d7ee5e273196231d59fb91cafe6ca0f78c64747e87bc9bcbb3334b",
        "timeStamp": "2023-09-04T02:36:20.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "LoyaltyToken",
            "tokenName": "loyalty",
            "tokenDesc": "Updated Fungible Whole",
            "tokenStandard": "erc1155+",
            "tokenType": "fungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 10000
            },
            "divisible": {
                "decimal": 2
            },
            "currency_name": "Rupees"
        }
    },
    {
        "trxId": "4fb391a8903633a12a545cd2ecfb57f5575241325abf59995e2a4ed96572bb09",
        "timeStamp": "2023-09-04T02:35:07.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "LoyaltyToken",
            "tokenName": "loyalty",
            "tokenDesc": "Fungible Whole",
            "tokenStandard": "erc1155+",
            "tokenType": "fungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 10000
            },
            "divisible": {
                "decimal": 2
            },
            "currency_name": "Dollar"
        }
    }
]
Exemplo de Valor de Retorno (NFT Fracionado):
[
    {
        "txId": "99bca74f401465206da7499cbf704dd443b3c3d94e348b1d6682ab5ee1864a08",
        "timestamp": "2023-06-20T01:09:18.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "FNFT",
            "tokenName": "realestate",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 100,
            "createdBy": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
            "creationDate": "2023-06-20T00:53:13.000Z",
            "divisible": {
                "decimal": 2
            },
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 2000,
            "on_sale_flag": true,
            "owners": [
                {
                    "accountId": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
                    "tokenShare": 90
                },
                {
                    "accountId": "oaccount~3cddfdaa855900579d963aa6f755a4aed1f3a474a2462c1b45bd7f36df673224",
                    "tokenShare": 10
                }
            ]
        }
    },
    {
        "txId": "d517c61f40e7d6af2f04fe6d337b3e5108eb57030c9dc823793498fd4fed671b",
        "timestamp": "2023-06-20T00:53:13.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "FNFT",
            "tokenName": "realestate",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 100,
            "createdBy": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
            "creationDate": "2023-06-20T00:53:13.000Z",
            "divisible": {
                "decimal": 2
            },
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 2000,
            "on_sale_flag": true,
            "owners": [
                {
                    "accountId": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
                    "tokenShare": 100
                }
            ]
        }
    }
]
Exemplo de Valor de Retorno (NFT Inteiro):
[
    {
        "trxId": "92ac6b56112acdba724dd49924d2420a7899c013c61aa40d272e8ab391a65e0f",
        "timeStamp": "2023-09-04T02:28:48.000Z",
        "value": {
            "tokenMetadata": {
                "painting_name": "monalisa",
                "description": "monalisa painting",
                "image": "image link",
                "painter_name": "Leonardo da Vinci"
            },
            "assetType": "otoken",
            "tokenId": "artnft",
            "tokenName": "artcollection",
            "tokenDesc": "Updated Token Description",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 1,
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2023-09-04T02:27:19.000Z",
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 10000,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "27697dd4a8dba53bad073aa95587cd1ef173b02fd95d771a60273d301fd3bcbe",
        "timeStamp": "2023-09-04T02:27:19.000Z",
        "value": {
            "tokenMetadata": {
                "painting_name": "monalisa",
                "description": "monalisa painting",
                "image": "image link",
                "painter_name": "Leonardo da Vinci"
            },
            "assetType": "otoken",
            "tokenId": "artnft",
            "tokenName": "artcollection",
            "tokenDesc": "artcollection nft",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 1,
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2023-09-04T02:27:19.000Z",
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 10000,
            "on_sale_flag": true
        }
    }
]
[
    {
        "trxId": "ebda1f31543f8906b7ec50a631afff6b8318a3d63c84f3e73be6785cc2ff31ff",
        "timeStamp": "2023-06-20T01:14:08.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "NFT",
            "tokenName": "artcollection",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 1,
            "createdBy": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
            "creationDate": "2023-06-20T01:14:08.000Z",
            "owner": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
            "isBurned": false,
            "tokenUri": "www.NFT.example.com",
            "price": 2000,
            "on_sale_flag": true
        }
    }
]
getAllTokens
Este método retorna todos os ativos de token que são salvos no banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
@GetMethod()
@Validator(yup.string())
public async getTokenHistory(tokenId: string) {
  return await this.Ctx.ERC1155Token.getTokenHistory(tokenId);
}
Parâmetros:
  • nenhuma
Retorna:
  • Uma lista de todos os ativos de token no formato JSON.
Exemplo de Valor de Retorno:
[
  {
    "key": "tokenOne",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "tokenTwo",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenTwo",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "art",
    "valueJson": {
      "assetType": "otoken",
      "quantity": 1,
      "tokenId": "art",
      "tokenName": "artcollection",
      "tokenStandard": "erc1155+",
      "tokenType": "nonfungible",
      "tokenUnit": "whole",
      "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter"
      },
      "mintable": {
        "max_mint_quantity": 20000
      },
      "owner": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "createdBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "creationDate": "2022-12-08T08:52:57.000Z",
      "isBurned": true,
      "tokenUri": "art.example.com",
      "transferredBy": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
      "transferredDate": "2022-12-08T08:59:17.000Z",
      "burnedBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "burnedDate": "2022-12-08T09:01:28.000Z"
    }
  },
  {
    "key": "FNFT",
    "valueJson": {
        "assetType": "otoken",
        "tokenId": "FNFT",
        "tokenName": "realestate",
        "tokenStandard": "erc1155+",
        "tokenType": "nonfungible",
        "tokenUnit": "fractional",
        "behaviors": [
            "divisible",
            "mintable",
            "transferable",
            "burnable",
            "roles"
        ],
        "roles": {
            "minter_role_name": "minter",
            "burner_role_name": "burner"
        },
        "mintable": {
            "max_mint_quantity": 20000
        },
        "quantity": 100,
        "createdBy": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
        "creationDate": "2023-06-20T00:53:13.000Z",
        "divisible": {
            "decimal": 2
        },
        "isBurned": false,
        "tokenUri": "www.FNFT.example.com",
        "price": 2000,
        "on_sale_flag": true
    }
  }
]
getTokenById
Este método retorna um objeto de token se o token estiver presente no banco de dados de estado. Para NFTs fracionais, a lista de proprietários também é retornada. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo proprietário do token.
@GetMethod()
@Validator(yup.string())
public async getTokenById(tokenId: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getTokenById", "TOKEN", { tokenId });
  return await this.Ctx.ERC1155Token.getTokenById(tokenId);
}
Parâmetros:
  • tokenId: string – O ID do token a ser obtido.
Exemplo de Valor de Retorno (NFT Inteiro):
{
  "assetType": "otoken",
  "quantity": 1,
  "tokenId": "art",
  "tokenName": "artcollection",
  "tokenStandard": "erc1155+",
  "tokenType": "nonfungible",
  "tokenUnit": "whole",
  "behaviors": [
    "indivisible",
    "singleton",
    "mintable",
    "transferable",
    "burnable",
    "roles"
  ],
  "roles": {
    "minter_role_name": "minter"
  },
  "mintable": {
    "max_mint_quantity": 20000
  },
  "owner": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
  "createdBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
  "creationDate": "2022-12-08T08:52:57.000Z",
  "isBurned": true,
  "tokenUri": "art.example.com",
  "transferredBy": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "transferredDate": "2022-12-08T08:59:17.000Z",
  "burnedBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
  "burnedDate": "2022-12-08T09:01:28.000Z"
}
Exemplo de Valor de Retorno (Token Fungível):
{
    "assetType": "otoken",
    "tokenId": "Loyalty",
    "tokenName": "loyalty",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "fungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 10000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "Dollar"
}
Exemplo de Valor de Retorno (NFT Fracionado):
{
    "tokenMetadata": {
        "painting_name": "paint",
        "description": "Painting Description"
    },
    "assetType": "otoken",
    "tokenId": "realEstate",
    "tokenName": "realestate",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "quantity": 100,
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2023-06-14T04:20:14.000Z",
    "divisible": {
        "decimal": 2
    },
    "isBurned": false,
    "tokenUri": "www.realestate.example.com",
    "price": 1000,
    "on_sale_flag": true,
    "owners": [
        {
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "tokenShare": 100
        }
    ]
}
getAllTokensByUser
Este método retorna todos os ativos de token pertencentes a um usuário especificado. Este método usa consultas avançadas de SQL do Berkeley DB 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 = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getAllTokensByUser", "TOKEN", { accountId });
  return await this.Ctx.ERC1155Token.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 ID de e-mail do usuário.
Exemplo de Valor de Retorno:
[
  {
    "key": "tokenOne",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "nftToken",
    "valueJson": {
      "assetType": "otoken",
      "quantity": 1,
      "tokenId": "nftToken",
      "tokenName": "artcollection",
      "tokenStandard": "erc1155+",
      "tokenType": "nonfungible",
      "tokenUnit": "whole",
      "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter"
      },
      "mintable": {
        "max_mint_quantity": 20000
      },
      "owner": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "createdBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "creationDate": "2022-12-08T09:10:21.000Z",
      "isBurned": false,
      "tokenUri": "example.com"
    }
  }
]
ownerOf
Este método retorna o ID da conta, o ID da organização e o ID do usuário 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.ERC1155Token.ownerOf(tokenId);
}
Parâmetros:
  • tokenId: string – O ID do token.
Exemplo de Valor de Retorno (NFT Inteiro):
{
    "accountId": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
    "orgId": "appdev",
    "userId": "idcqa"
}
Exemplo de Valor de Retorno (NFT Fracionado):
[
    {
        "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
        "orgId": "Org1MSP",
        "userId": "admin"
    },
    {
        "accountId": "oaccount~74108eca702bab6d8548e740254f2cc7955d886885251d52d065042172a59db0",
        "orgId": "Org1MSP",
        "userId": "user"
    }
]
URI
Este método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
@GetMethod()
@Validator(yup.string())
public async URI(tokenId: string) {
  return await this.Ctx.ERC1155Token.tokenURI(tokenId);
}
Parâmetros:
  • tokenId: string – O ID do token.
Exemplo de Valor de Retorno:
{
    "tokenUri": "example.com"
}
name
Este método retorna o nome da classe de token. Qualquer um pode chamar esse método.
@GetMethod()
@Validator(yup.string())
public async name(tokenId: string) {
  return await this.Ctx.ERC1155Token.name(tokenId);
}
Parâmetros:
  • tokenId: string – O ID do token.
Exemplo de Valor de Retorno:
{"tokenName": "artcollection"}
totalSupply
Este método retorna o número total de tokens cunhados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator(yup.object())
public async totalSupply(tokenDetail: TokenDetail) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.totalSupply", "TOKEN");
  const token = await this.Ctx.ERC1155Token.getTokenByIdOrName(tokenDetail);
  return await this.Ctx.ERC1155Token.totalSupply(token);
}
Parâmetros:
  • tokenDetails: TokenDetail – Os detalhes que especificam o token. Para tokens fungíveis, use o seguinte formato:
    {"tokenId":"token1"}
    Para tokens não fungíveis, use o seguinte formato:
    {"tokenName":"artCollection"}
Exemplo de Valor de Retorno:
{"totalSupply": 110}
totalNetSupply
Este método retorna o número total de tokens cunhados menos o número de tokens gravados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator(yup.object())
public async totalNetSupply(tokenDetail: TokenDetail) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.totalNetSupply", "TOKEN");
  const token = await this.Ctx.ERC1155Token.getTokenByIdOrName(tokenDetail);
  return await this.Ctx.ERC1155Token.totalNetSupply(token);
}
Parâmetros:
  • tokenDetails: TokenDetail – Os detalhes que especificam o token. Para tokens fungíveis, use o seguinte formato:
    {"tokenId":"token1"}
    Para tokens não fungíveis, use o seguinte formato:
    {"tokenName":"artCollection"}
Exemplo de Valor de Retorno:
{"totalNetSupply": 105}
getTokensByName
Este método retorna todos os ativos de token para um nome de token especificado. Este método usa consultas avançadas de SQL do Berkeley DB 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.
@GetMethod()
@Validator(yup.string())
public async getTokensByName(tokenName: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getTokensByName", "TOKEN");
  return await this.Ctx.ERC1155Token.getTokensByName(tokenName);
}
Parâmetros:
  • tokenName: string – O nome do token.
Exemplo de Valor de Retorno:
[
  {
    "key": "tokenOne",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "tokenTwo",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenTwo",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  }
]
getTokenDecimal
Este método retorna o número de casas decimais para um token especificado. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator(yup.string())
public async getTokenDecimal(tokenId: string) {
  const token = await this.Ctx.ERC1155Token.get(tokenId);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getDecimals", "TOKEN");
  return {
    msg: `Token Id: ${tokenId} has ${this.Ctx.ERC1155Token.getDecimals(token)} decimal places.`,
  };
}
Parâmetros:
  • tokenId: string – O ID do token.
Exemplo de Valor de Retorno:
{
    "msg": "Token Id: tokenOne has 2 decimal places."
}

Métodos para Gerenciamento de Contas

createAccount
Este método cria uma conta para um usuário especificado e contas de token associadas para tokens fungíveis ou não fungíveis. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário mantém. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Esse método só pode ser chamado por um Token Admin do chaincode.

Uma conta de usuário tem um ID exclusivo, formado por um hash SHA-256 do parâmetro orgId e do parâmetro userId.

Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro orgId, o parâmetro userId, a string constante ft separada pelo símbolo til (~) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~).

Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro orgId, do parâmetro userId e da string constante nft separada pelo símbolo til (~). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a esta conta.

Os IDs de conta do usuário começam com ouaccount~. Os IDs da conta de token começam com oaccount~.

@Validator(yup.string(), yup.string(), yup.boolean(), yup.boolean())
public async createAccount(orgId: string, userId: string, ftAccount: boolean, nftAccount: boolean) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.createAccount", "TOKEN");
  return await this.Ctx.ERC1155Account.createAccount(orgId, userId, ftAccount, nftAccount);
}
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 ID de e-mail do usuário.
  • ftAccount: boolean – Se for verdadeiro, uma conta de token fungível será criada e associada à conta de usuário.
  • nftAccount: boolean – Se for verdadeiro, uma conta de token não fungível será criada e associada à conta de usuário.
Retorna:
  • No caso de sucesso, um objeto JSON da conta que foi criada.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~cf20877546f52687f387e7c91d88b9722c97e1a456cc0484f40c747f7804feae",
  "userId": "user1",
  "orgId": "appdev",
  "totalAccounts": 2,
  "totalFtAccounts": 1,
  "associatedFtAccounts": [
    {
      "accountId": "oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b",
      "tokenId": ""
    }
  ],
  "associatedNftAccount": "oaccount~73c3e835dac6d0a56ca9d8def08269f83cefd59b9d297fe2cdc5a9083828fa58"
}
createUserAccount
Este método cria uma conta para um usuário especificado. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token.

ID da conta é um hash SHA-256 do parâmetro orgId e do parâmetro userId. Esse método só pode ser chamado por um Token Admin do chaincode.

@Validator(yup.string(), yup.string())
  public async createUserAccount(orgId: string, userId: string) {
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.createUserAccount", "TOKEN");
    return await this.Ctx.ERC1155Account.createUserAccount(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 ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um objeto JSON da conta de usuário que foi criado.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "userId": "user2",
  "orgId": "appdev",
  "totalAccounts": 0,
  "totalFtAccounts": 0,
  "associatedFtAccounts": [],
  "associatedNftAccount": ""
}
createTokenAccount
Este método cria uma conta de token fungível ou não fungível para associar a uma conta de usuário.

Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro orgId, o parâmetro userId, a string constante ft separada pelo símbolo til (~) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~).

Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro orgId, do parâmetro userId e da string constante nft separada pelo símbolo til (~). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a esta conta.

Esse método só pode ser chamado por um Token Admin do chaincode.

@Validator(yup.string(), yup.string(), yup.string())
  public async createTokenAccount(orgId: string, userId: string, tokenType: TokenType) {
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.createTokenAccount", "TOKEN");
    return await this.Ctx.ERC1155Account.createTokenAccount(orgId, userId, tokenType);
  }
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 ID de e-mail do usuário.
  • tokenType: TokenType – O tipo de conta de token a ser criada. Os únicos tipos de token suportados são nonfungible e fungible.
Retorna:
  • No caso de sucesso, um objeto JSON da conta de token que foi criada.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "userId": "user2",
  "orgId": "appdev",
  "totalAccounts": 1,
  "totalFtAccounts": 1,
  "associatedFtAccounts": [
    {
      "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
      "tokenId": ""
    }
  ],
  "associatedNftAccount": ""
}
associateFungibleTokenAccount
Este método associa a conta de token fungível de um usuário a um token fungível específico.

Esse método só pode ser chamado por um Token Admin do chaincode.

@Validator(yup.string(), yup.string(), yup.string())
public async associateFungibleTokenToAccount(orgId: string, userId: string, tokenId: string) {
  const accountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.associateFungibleTokenToAccount", "TOKEN", { accountId });
  return await this.Ctx.ERC1155Account.associateTokenToToken(accountId, tokenId);
}
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 ID de e-mail do usuário.
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON da conta de usuário, que mostra que o token fungível foi associado à conta de token. Por exemplo, no exemplo a seguir, o primeiro objeto no array associatedFtAccounts mostra que o ID da conta do token fungível e o ID do token estão associados.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "userId": "user2",
  "orgId": "appdev",
  "totalAccounts": 1,
  "totalFtAccounts": 1,
  "associatedFtAccounts": [
    {
      "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
      "tokenId": "tokenOne"
    }
  ],
  "associatedNftAccount": ""
}
getAccountHistory
Este método retorna o histórico de uma conta de token especificada. 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(), yup.string(), yup.string())
public async getAccountHistory(orgId: string, userId: string, tokenId?: string) {
  const userAccountId = await this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  const userAccount = await this.Ctx.ERC1155Account.getAccount(userAccountId, tokenId);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.history", "TOKEN", { accountId: userAccountId });
  return await this.Ctx.ERC1155Account.getAccountHistory(userAccount.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 ID de e-mail do usuário.
  • tokenId?: string – Para uma conta de token não fungível, uma string vazia. Para uma conta de token fungível, o ID do token.
Retorna:
  • No caso de sucesso, um array de objetos JSON que descreve o histórico da conta.
Exemplo de Valor de Retorno:
[
  {
    "trxId": "89f462697f3c988024b2c248cbda21f9eb7e96567e56dd8db64ada96a4845a7f",
    "timeStamp": "2022-12-08T07:15:10.000Z",
    "value": {
      "assetType": "oaccount",
      "bapAccountVersion": 1,
      "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
      "userId": "user2",
      "orgId": "appdev",
      "tokenType": "fungible",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "balance": 110
    }
  },
  {
    "trxId": "30dd4fe0746350c85a5000996974487010a0a8fee73d6b2e480c3ca330a6d31f",
    "timeStamp": "2022-12-08T06:43:10.000Z",
    "value": {
      "assetType": "oaccount",
      "bapAccountVersion": 0,
      "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
      "userId": "user2",
      "orgId": "appdev",
      "tokenType": "fungible",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "balance": 0
    }
  },
  {
    "trxId": "6226c0455cc3a4f99c3fd7ed8b1d36b8e93f863e42ab61a9b0d399f2d69d2f3d",
    "timeStamp": "2022-12-08T06:41:51.000Z",
    "value": {
      "assetType": "oaccount",
      "bapAccountVersion": 0,
      "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
      "userId": "user2",
      "orgId": "appdev",
      "tokenType": "fungible",
      "tokenId": "",
      "balance": 0
    }
  }
]
getAccount
Este método retorna detalhes da conta de token 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(), yup.string())
public async getAccount(orgId: string, userId: string, tokenId?: string) {
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.getAccount", "TOKEN", { accountId: userAccountId });
  return await this.Ctx.ERC1155Account.getAccountWithStatus(userAccountId, tokenId);
}
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 ID de e-mail do usuário.
  • tokenId?: string – Para uma conta de token não fungível, uma string vazia. Para uma conta de token fungível, o ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON que inclui detalhes da conta de token. O parâmetro bapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de valor de retorno (conta de token não fungível):
{
  "assetType": "oaccount",
  "bapAccountVersion": 1,
  "status": "active",
  "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "nonfungible",
  "noOfNfts": 1
}
Exemplo de valor de retorno (conta de token fungível):
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "fungible",
  "tokenId": "t1",
  "tokenName": "loyalty",
  "balance": 100
}
getAllAccounts
Este método retorna detalhes de todas as contas de usuário. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator()
public async getAllAccounts() {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.getAllAccounts", "TOKEN");
  return await this.Ctx.ERC1155Account.getAllAccounts();
}
Parâmetros:
  • nenhuma
Retorna:
  • No sucesso, um array JSON de todas as contas.
Exemplo de Valor de Retorno:
[
        {
            "assetType": "ouaccount",
            "accountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
            "userId": "idcqa",
            "orgId": "appdev",
            "totalAccounts": 2,
            "totalFtAccounts": 1,
            "associatedFtAccounts": [
                {
                    "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
                    "tokenId": "loy1"
                }
            ],
            "associatedNftAccount": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371"
        },
        {
            "assetType": "ouaccount",
            "accountId": "ouaccount~9501bb774c156eb8354dfe489250ea91f757523d70f08ee494bda98bb352003b",
            "userId": "user1_minter",
            "orgId": "appdev",
            "totalAccounts": 2,
            "totalFtAccounts": 1,
            "associatedFtAccounts": [
                {
                    "accountId": "oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c",
                    "tokenId": "loy1"
                }
            ],
            "associatedNftAccount": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446"
        },
    ]
getAccountDetailsByUser
Este método retorna um resumo de conta para um usuário especificado e detalhes de tokens fungíveis e não fungíveis que estão associados ao usuário. 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 getAccountDetailsByUser(orgId: string, userId: string) {
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.getAccountDetailsByUser", "TOKEN", {
    accountId: userAccountId,
  });
  return await this.Ctx.ERC1155Account.getAccountDetailsByUser(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 ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um objeto de conta JSON que inclui e resumo de conta para o usuário especificado e detalhes de tokens fungíveis e não fungíveis associados ao usuário. Para tokens não fungíveis fracionários, a propriedade tokenShare na seção associatedNFTs mostra o compartilhamento que o usuário possui.
Exemplo de Valor de Retorno:
{
    "userAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
    "associatedFTAccounts": [
        {
            "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
            "tokenId": "FT",
            "balance": 50
        }
    ],
    "associatedNFTAccount": {
        "accountId": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "associatedNFTs": [
            {
                "nftTokenId": "FNFT",
                "tokenShare": 100
            },
            {
                "nftTokenId": "FNFT2",
                "tokenShare": 110
            },
            {
                "nftTokenId": "NFT"
            }
        ]
    }
}
getUserByAccountId
Este método retorna os detalhes do usuário de um ID de conta especificado. Este método pode ser chamado por qualquer usuário.
@GetMethod()
@Validator(yup.string())
public async getUserByAccountId(accountId: string) {
  return await this.Ctx.ERC1155Account.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:
{
  "orgId": "appdev"
  "userId": "user2",
}

Métodos para Gerenciamento de Atribuições

addRole
Este método adiciona uma atribuição a um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token.
@Validator(yup.string(), yup.string(), yup.string(), yup.object())
public async addRole(orgId: string, userId: string, role: string, tokenDetail: TokenDetail) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.addRoleMember", "TOKEN");
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  const token = await this.Ctx.ERC1155Token.getTokenByIdOrName(tokenDetail);
  return await this.Ctx.ERC1155Token.addRoleMember(role, userAccountId, token);
}
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 ID de e-mail do usuário.
  • role: string – O nome da função a ser adicionada ao usuário especificado.
  • tokenDetails: TokenDetail – Os detalhes que especificam o token. Para tokens fungíveis, use o seguinte formato:
    {"tokenId":"token1"}
    Para tokens não fungíveis, use o seguinte formato:
    {"tokenName":"artCollection"}
Retorna:
  • No caso de êxito, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
{
  "msg": "Successfully added role 'minter' to Account Id: oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a (Org-Id: appdev, User-Id: idcqa)"
}
isInRole
Este método retorna um valor booliano para indicar se um usuário tem uma função especificada. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo Account Owner da conta. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string(), yup.object())
public async isInRole(orgId: string, userId: string, role: string, tokenDetail: TokenDetail) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.removeRoleMember", "TOKEN");
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  const token = await this.Ctx.ERC1155Token.getTokenByIdOrName(tokenDetail);
  return await this.Ctx.ERC1155Token.isInRole(role, userAccountId, token);
}
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 ID de e-mail do usuário.
  • role: string – O nome da função a ser pesquisada.
  • tokenDetails: TokenDetail – Os detalhes que especificam o token. Para tokens fungíveis, use o seguinte formato:
    {"tokenId":"token1"}
    Para tokens não fungíveis, use o seguinte formato:
    {"tokenName":"artCollection"}
Exemplo de Valor de Retorno:
{
    "result": true,
    "msg": "Account Id oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a (Org-Id: appdev, User-Id: idcqa) has minter role"
}
removeRole
Este método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um Token Admin do chaincode. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token.
@Validator(yup.string(), yup.string(), yup.string(), yup.object())
public async removeRole(orgId: string, userId: string, role: string, tokenDetail: TokenDetail) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.removeRoleMember", "TOKEN");
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  const token = await this.Ctx.ERC1155Token.getTokenByIdOrName(tokenDetail);
  return await this.Ctx.ERC1155Token.removeRoleMember(role, userAccountId, token);
}
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 ID de e-mail do usuário.
  • role: string – O nome da atribuição a ser removida do usuário especificado.
  • tokenDetails: TokenDetail – Os detalhes que especificam o token. Para tokens fungíveis, use o seguinte formato:
    {"tokenId":"token1"}
    Para tokens não fungíveis, use o seguinte formato:
    {"tokenName":"artCollection"}
Exemplo de Valor de Retorno:
{
  "msg": "Successfully removed role 'minter' from Account Id: oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b (Org-Id: appdev, User-Id: user1)"
}
getAccountsByRole
Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator(yup.string(), yup.object())
public async getAccountsByRole(role: string, tokenDetail: TokenDetail) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ROLE.getAccountsByRole", "TOKEN");
  const token = await this.Ctx.ERC1155Token.getTokenByIdOrName(tokenDetail);
  return await this.Ctx.ERC1155Token.getAccountsByRole(role, token);
}
Parâmetros:
  • role: string – O nome da função a ser pesquisada.
  • tokenDetails: TokenDetail – Os detalhes que especificam o token. Para tokens fungíveis, use o seguinte formato:
    {"tokenId":"token1"}
    Para tokens não fungíveis, use o seguinte formato:
    {"tokenName":"artCollection"}
Exemplo de Valor de Retorno:
{
  "accounts": [
    "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
    "oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b"
  ]
}
getUsersByRole
Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um Token Admin do chaincode.
@GetMethod()
@Validator(yup.string(), yup.object())
public async getUsersByRole(role: string, tokenDetail: TokenDetail) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ROLE.getUsersByRole", "TOKEN");
  const token = await this.Ctx.ERC1155Token.getTokenByIdOrName(tokenDetail);
  return await this.Ctx.ERC1155Token.getUsersByRole(role, token);
}
Parâmetros:
  • role: string – O nome da função a ser pesquisada.
  • tokenDetails: TokenDetail – Os detalhes que especificam o token. Para tokens fungíveis, use o seguinte formato:
    {"tokenId":"token1"}
    Para tokens não fungíveis, use o seguinte formato:
    {"tokenName":"artCollection"}
Exemplo de Valor de Retorno:
{
    "users": [
        {
            "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
            "orgId": "appdev",
            "userId": "user2"
        },
        {
            "accountId": "oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b",
            "orgId": "appdev",
            "userId": "user1"
        }
    ]
}

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

getAccountTransactionHistory
Este método retorna o histórico de transações da conta. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo proprietário da conta. Para tokens não fungíveis, esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string())
public async getAccountTransactionHistory(orgId: string, userId: string, tokenId?: string) {
  const userAccountId = await this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.getAccountTransactionHistory", "TOKEN", {
    accountId: userAccountId,
  });
  const account = await this.Ctx.ERC1155Account.getAccount(userAccountId, tokenId);
  return await this.Ctx.ERC1155Account.getAccountTransactionHistory(account.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 ID de e-mail do usuário.
  • tokenId?: string – Para uma conta de token não fungível, uma string vazia. Para uma conta de token fungível, o ID do token.
Exemplo de Valor de Retorno:
[
    {
        "transactionId": "otransaction~3a6b23c3003626f3947e990eddbd7ac23398d2200e2eb3eac745e6ddfae140bc~7c88c736df38d5622512f1e8dcdd50710eb47c953f1ecb24ac44790a9e2f475b",
        "timestamp": "2023-06-06T14:48:08.000Z",
        "tokenId": "FNFT",
        "transactedAmount": 10,
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446",
        "transactionType": "DEBIT",
        "balance": 90
    },
    {
        "transactionId": "otransaction~3a6b23c3003626f3947e990eddbd7ac23398d2200e2eb3eac745e6ddfae140bc~178e3730bc5bee50d02f1464a4eebf733a051905f651e5789039adb4a3edc114",
        "timestamp": "2023-06-06T14:48:08.000Z",
        "tokenId": "NFT",
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~c369929e28e78de06c72d020f1418c9a154a7dd280b2e22ebb4ea4485e249124~a7cefb22ff39ee7e36967be71de27da6798548c872061a62dabc56d88d50b930",
        "timestamp": "2023-06-06T14:47:08.000Z",
        "tokenId": "NFT",
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~114a1bc78d04be48ee6dc140c32c042ee9481cb118959626f090eec744522422~e4eb15d9354f694230df8835ade012100d82aa43672896a2c7125a86e3048f9f",
        "timestamp": "2023-06-05T17:17:57.000Z",
        "tokenId": "FNFT",
        "transactedAmount": 100,
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "transactionType": "MINT",
        "balance": 100
    }
]
getTransactionById
Este método retorna os detalhes da transação para um ID de transação especificado. Qualquer um pode chamar esse método.
@GetMethod()
@Validator(yup.string())
public async getTransactionById(transactionId: string) {
  return await this.Ctx.ERC1155Transaction.getTransactionById(transactionId);
}
Parâmetros:
  • transactionId: string – O ID da transação.
Exemplo de Valor de Retorno:
{
  "transactionId": "otransaction~9ea7b05ab099f7ff4db8342b8c3609031f1d54f11205906e7f1fe88661fe3cbe~33b59ce0c89e96c1e16449f24301581e8e71954f38ad977c7eb6f065e87f2a53",
  "history": [
    {
      "trxId": "9ea7b05ab099f7ff4db8342b8c3609031f1d54f11205906e7f1fe88661fe3cbe",
      "timeStamp": "2022-12-08T09:01:28.000Z",
      "value": {
        "assetType": "otransaction",
        "transactionId": "otransaction~9ea7b05ab099f7ff4db8342b8c3609031f1d54f11205906e7f1fe88661fe3cbe~33b59ce0c89e96c1e16449f24301581e8e71954f38ad977c7eb6f065e87f2a53",
        "tokenId": "tokenOne",
        "fromAccountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
        "toAccountId": "",
        "transactionType": "BURN",
        "amount": 5,
        "timestamp": "2022-12-08T09:01:28.000Z",
        "triggeredByUserAccountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc"
      }
    }
  ]
}
deleteHistoricalTransactions
Este método exclui transações antes de um timestamp especificado do banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode.
@Validator(yup.date())
public async deleteHistoricalTransactions(time_to_expiration: Date) {
  await this.Ctx.ERC1155Auth.checkAuthorization("TRANSACTION.deleteTransactions", "TOKEN");
  return await this.Ctx.ERC1155Transaction.deleteTransactions(time_to_expiration);
}
Parâmetros:
  • timestamp: string – Todas as transações antes desse carimbo de data/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 para Gerenciamento de Comportamento de Token - Comportamento Mintable

mintBatch
Este método cria (mints) vários tokens em uma operação em batch. Este método cria apenas tokens fungíveis ou tokens fracionários não fungíveis.

Para tokens fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Você não poderá usar mais do que a propriedade max_mint_quantity do token se essa propriedade tiver sido especificada quando o token foi criado ou atualizado.

Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens fracionários não fungíveis que podem ser cunhados.

Você não pode usar este método para cunhar um token inteiro não fungível.

@Validator(yup.string(), yup.string(), yup.array().of(yup.string()), yup.array().of(yup.number()))
public async mintBatch(orgId: string, userId: string, tokenIds: string[], quantity: number[]) {
  const accountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
  return await this.Ctx.ERC1155Token.mintBatch(accountId, tokenIds, quantity);
}
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 ID de e-mail do usuário.
  • tokenIds: string[] – A lista de IDs de token para os quais os tokens da moeda serão usados.
  • quantity: number[] – A lista de quantidades de tokens para hortelã, correspondente ao array de ID de token.
Retorna:
  • No caso de sucesso, um objeto JSON que inclui detalhes sobre os tokens cunhados.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully minted batch of tokens for User-Account-Id ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38 (Org-Id: appdev, User-Id: idcqa).",
    "details": [
        {
            "msg": "Successfully minted 100 tokens of fractional tokenId: plot55 to Org-Id: appdev, User-Id: idcqa"
        },
        {
            "msg": "Successfully minted 100 tokens of tokenId: loyalty to Token-Account-Id oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e"
        }
    ]
}

Métodos para Gerenciamento de Comportamento de Token - Comportamento Transferível

batchTransferFrom
Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.

Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.

Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.

Este método não valida se o chamador do método é o remetente especificado. Este método pode ser chamado por qualquer usuário.

@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.array().of(yup.string()), yup.array().of(yup.number()))
public async batchTransferFrom(
  fromOrgId: string,
  fromUserId: string,
  toOrgId: string,
  toUserId: string,
  tokenIds: string[],
  quantity: number[]
) {
  const fromAccountId = this.Ctx.ERC1155Account.generateAccountId(fromOrgId, fromUserId, ACCOUNT_TYPE.USER_ACCOUNT);
  const toAccountId = this.Ctx.ERC1155Account.generateAccountId(toOrgId, toUserId, ACCOUNT_TYPE.USER_ACCOUNT);
  return await this.Ctx.ERC1155Token.batchTransferFrom(fromAccountId, toAccountId, tokenIds, quantity);
}
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 ID de e-mail do destinatário.
  • tokenIds: string[] – Uma lista de IDs de token para transferência dos tokens.
  • quantity: number[] – A lista de quantidades de tokens a serem transferidos, correspondente ao array de ID do token.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes para cada transferência de token.
Exemplo de Valor de Retorno:
[
    {
        "msg": "Successfully transferred NFT token: 'FNFT' of '10' quantity from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred 10 FT token: 'FT' from Account-Id: oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred NFT token: 'NFT' from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    }
]
safeBatchTransferFrom
Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.

Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.

Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.

O chamador do método deve ser o remetente especificado. Este método pode ser chamado por qualquer usuário.

@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.array().of(yup.string()), yup.array().of(yup.number()))
public async safeBatchTransferFrom(
  fromOrgId: string,
  fromUserId: string,
  toOrgId: string,
  toUserId: string,
  tokenIds: string[],
  quantity: number[]
) {
  const fromAccountId = this.Ctx.ERC1155Account.generateAccountId(fromOrgId, fromUserId, ACCOUNT_TYPE.USER_ACCOUNT);
  const toAccountId = this.Ctx.ERC1155Account.generateAccountId(toOrgId, toUserId, ACCOUNT_TYPE.USER_ACCOUNT);
  return await this.Ctx.ERC1155Token.safeBatchTransferFrom(fromAccountId, toAccountId, tokenIds, quantity);
}
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 ID de e-mail do destinatário.
  • tokenIds: string[] – Uma lista de IDs de token para transferência dos tokens.
  • quantity: number[] – A lista de quantidades de tokens a serem transferidos, correspondente ao array de ID do token.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes para cada transferência de token.
Exemplo de Valor de Retorno:
[
    {
        "msg": "Successfully transferred NFT token: 'FNFT' of '10' quantity from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred 10 FT token: 'FT' from Account-Id: oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred NFT token: 'NFT' from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    }
]
balanceOfBatch
Este método conclui uma operação em lote que obtém o saldo de contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs usuário e IDs token. Esse método só pode ser chamado por um Token Admin do chaincode ou pelos proprietários da conta. Os proprietários da conta só podem ver os detalhes do saldo das contas de sua propriedade.
@GetMethod()
@Validator(yup.array().of(yup.string()), yup.array().of(yup.string()), yup.array().of(yup.string()))
public async balanceOfBatch(orgIds: string[], userIds: string[], tokenIds: string[]) {
  let callerAccountCheck = false;
  try {
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.balanceOfBatch", "TOKEN");
  } catch (err) {
    callerAccountCheck = true;
  }
  const accountIds = await this.Ctx.ERC1155Account.generateAccountIds(orgIds, userIds, callerAccountCheck);
  return await this.Ctx.ERC1155Account.balanceOfBatch(accountIds, tokenIds);
}
Parâmetros:
  • orgIds: string[] – Uma lista dos IDs do provedor de serviços de associação (MSP) na organização atual.
  • userIds: string[] – Uma lista dos IDs de nome de usuário ou e-mail.
  • tokenIds: string[] – Uma lista dos IDs de token.
Exemplo de Valor de Retorno:

No exemplo a seguir, o ID do token FNFT representa um token não fungível fracionário e o ID do token FT representa um token fungível.

[
    {
        "orgId": "appdev",
        "userId": "idcqa",
        "userAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "tokenAccountId": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "tokenId": "FNFT",
        "balance": 100
    },
    {
        "orgId": "appdev",
        "userId": "idcqa",
        "userAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "tokenAccountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
        "tokenId": "FT",
        "balance": 50
    },
    {
        "orgId": "appdev",
        "userId": "user1_minter",
        "userAccountId": "ouaccount~9501bb774c156eb8354dfe489250ea91f757523d70f08ee494bda98bb352003b",
        "tokenAccountId": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446",
        "tokenId": "FNFT",
        "balance": 10
    }
]
exchangeToken
Este método troca tokens entre contas especificadas. Este método suporta apenas a troca entre um NFT e um token fungível ou um token fungível e um NFT. O NFT pode ser inteiro ou fracionário. Esse método só pode ser chamado pelo proprietário da conta.
@Validator(yup.string(), yup.string(), yup.string(), yup.number(), yup.string(), yup.string(), yup.string(), yup.number())
  public async exchangeToken(
    fromTokenId: string,
    fromOrgId: string,
    fromUserId: string,
    fromTokenQuantity: number,
    toTokenId: string,
    toOrgId: string,
    toUserId: string,
    toTokenQuantity: number
  ) {
    const fromUserAccountId = this.Ctx.ERC1155Account.generateAccountId(fromOrgId, fromUserId, ACCOUNT_TYPE.USER_ACCOUNT);
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155ACCOUNT.exchangeToken", "TOKEN", { accountId: fromUserAccountId });
    const toUserAccountId = this.Ctx.ERC1155Account.generateAccountId(toOrgId, toUserId, ACCOUNT_TYPE.USER_ACCOUNT);
    return await this.Ctx.ERC1155Token.exchangeToken(
      fromTokenId,
      fromUserAccountId,
      fromTokenQuantity,
      toTokenId,
      toUserAccountId,
      toTokenQuantity
    );
  }
Parâmetros:
  • fromTokenId: string – O ID do token que o remetente possui.
  • fromOrgId: string – O ID do prestador de serviço de associação (MSP) do remetente na organização atual.
  • fromUserId: string – O nome de usuário ou ID de e-mail do remetente.
  • fromTokenQuantity: number – A quantidade de tokens do remetente para troca com o destinatário.
  • toTokenId: string – O ID do token que o receptor possui.
  • 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 ID de e-mail do destinatário.
  • toTokenQuantity: number – A quantidade de tokens do receptor para trocar com o remetente.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes de troca de token.
Exemplo de Valor de Retorno:
{
    "msg": "Succesfully exchanged 10 tokens of type nonfungible with tokenId: [r1] from Account oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (OrgId: appdev, UserId: idcqa) to 10 tokens of type fungible with tokenId: [loy1] from Account oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c (OrgId: appdev, UserId: user1_minter)"
}

Métodos para Gerenciamento de Comportamento de Token - Comportamento Queimável

burnBatch
Este método desativa ou queima os tokens fungíveis e não fungíveis especificados. Qualquer usuário com a função de queimador pode chamar esse método.
@Validator(yup.string(), yup.string(), yup.array().of(yup.string()), yup.array().of(yup.number()))
public async burnBatch(orgId: string, userId: string, tokenIds: string[], quantity: number[]) {
    const accountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId, ACCOUNT_TYPE.USER_ACCOUNT);
    return await this.Ctx.ERC1155Token.burn(accountId, tokenIds, quantity);
}
Parâmetros:
  • orgId: string – O ID do provedor de serviços de associação (MSP) na organização atual.
  • userId: string – O nome de usuário ou ID de e-mail.
  • tokenIds: string[] – A lista dos IDs de token a serem gravados
  • quantity: number[] – A lista de quantidades de tokens a serem gravadas, correspondente ao array de ID do token.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes sobre as operações de gravação.
Exemplo de Valor de Retorno:
[
  {
    "msg": "Successfully burned NFT token: 'art' from Account-Id: oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6 (Org-Id: appdev, User-Id: idcqa)"
  },
  {
    "msg": "Successfully burned 5 tokens of tokenId: tokenOne from Account-ID oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a (Org-Id: appdev, User-Id: idcqa)"
  },
  {
    "msg": "Successfully burned 2 token share of tokenId: FNFT from Account-ID oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a (Org-Id: AutoF1377358917, User-Id: idcqa)"
  }
]
burnNFT
Este método desativa ou grava o token não fungível especificado e retorna um objeto de token e um histórico de token. Qualquer usuário com a função de queimador pode chamar esse método.
@Validator(yup.string(), yup.string(), yup.string())
public async burnNFT(orgId: string, userId: string, tokenId: string): Promise<any> {
    const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId);
    const token = await this.Ctx.ERC1155Token.get(tokenId);
    if (token.tokenType !== TOKEN_TYPE.NON_FUNGIBLE) {
      
      throw new Error(`The Token with id ${tokenId} is not a nonfungible token`);
    }
    if (token.isBurned === true) {
      throw new Error(`token with tokenId ${tokenId} is already burned`);
    }
    let tokenBurnQuantity = 1;
    const tokenUnit = token.tokenUnit;
    if (tokenUnit === TOKEN_UNIT.FRACTIONAL) {
       const owners = await this.Ctx.ERC1155Token.getFractionalNFTOwners(tokenId);
       if (owners.length !== 1) {
         throw new Error(`Token with tokenId ${tokenId} has multiple owners`);
       }
      tokenBurnQuantity = token.quantity;
    }
    const tokenHistory = await this.Ctx.ERC1155Token.getTokenHistory(tokenId);
    await this.Ctx.ERC1155Token.burn(userAccountId, [tokenId], [tokenBurnQuantity]);
    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:
  • orgId: string – O ID do provedor de serviços de associação (MSP) na organização atual.
  • userId: string – O nome de usuário ou ID de e-mail.
  • tokenId: string – O ID do token não fungível a ser gravado
Retorna:
  • Em caso de sucesso, um objeto de token no formato JSON que inclui informações de histórico de token.
Exemplo de Valor de Retorno:
{
    "assetType": "otoken",
    "tokenId": 1,
    "tokenName": "artcollection",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "quantity": 1,
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2023-08-22T07:32:40.000Z",
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "isBurned": true,
    "tokenUri": "example.com",
    "price": 120,
    "onSaleFlag": false,
    "tokenHistory": "[{\"trxId\":\"21a932750f2d4ccffd62eda5678a577cadde0513ed7c7a307f24cd7713a1818b\",\"timeStamp\":\"2023-08-22T07:32:40.000Z\",\"value\":{\"assetType\":\"otoken\",\"tokenId\":\"1\",\"tokenName\":\"artcollection\",\"tokenStandard\":\"erc1155+\",\"tokenType\":\"nonfungible\",\"tokenUnit\":\"whole\",\"behaviors\":[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"],\"roles\":{\"minter_role_name\":\"minter\"},\"mintable\":{\"max_mint_quantity\":20000},\"quantity\":1,\"createdBy\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"creationDate\":\"2023-08-22T07:32:40.000Z\",\"owner\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"isBurned\":false,\"tokenUri\":\"example.com\",\"price\":120,\"onSaleFlag\":false}}]"
}

Métodos SDK

Métodos para Gerenciamento de Controle de Acesso

isUserTokenAdmin
Este método retornará o valor Booliano true se o usuário especificado for um Token Admin e false caso contrário. O método só pode ser chamado por um Token Admin do chaincode do token.
Ctx.ERC1155Auth.isUserTokenAdmin(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 ID de e-mail do usuário.
Exemplo de Valor de Retorno:
{
  "result": true
}
addAdmin
Esse método adiciona um usuário como Token Admin do código de cadeia do token. O método só pode ser chamado por um Token Admin do chaincode do token.
Ctx.ERC1155Admin.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 ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que lista detalhes do usuário adicionados como Token Admin do chaincode do token.
Exemplo de Valor de Retorno:
{
  "msg": "Successfully added Admin (OrgId: appDev, UserId: user1)"
}
removeAdmin
Esse método remove um usuário como um Token Admin do chaincode do token. O método só pode ser chamado por um Token Admin do chaincode do token. Você não pode se remover como um Token Admin.
Ctx.ERC1155Admin.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 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.
Exemplo de Valor de Retorno:
{
  "msg": "Successfully removed Admin (OrgId: appDev, UserId: user1)"
}
getAllAdmins
Esse método retorna uma lista de todos os usuários do Token Admin.
Ctx.ERC1155Admin.getAllAdmins()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários Token Admin, identificados por ID da organização e ID do usuário.
Exemplo de Valor de Retorno:
{
  "admins": [
    {
      "orgId": "appdev",
      "userId": "idcqa"
    },
    {
      "orgId": "appdev",
      "userId": "user1"
    }
  ]
}
checkAuthorization
Use este método para adicionar uma verificação de controle de acesso a uma operação. Esta é uma função assíncrona. Determinados métodos de token só podem ser executados pelo Token Admin ou AccountOwner do token ou pelo MultipleAccountOwner para usuários com várias contas. O mapeamento de controle de acesso é descrito no arquivo ../lib/constant.ts. 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 do controlador gerados automaticamente e dos métodos personalizados.
ADMIN: {
   isUserTokenAdmin: ["Admin"],
   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"],
   getTokenHistory: ["Admin"],
 },
 ROLE: {
   getAccountsByRole: ["Admin"],
   getUsersByRole: ["Admin"],
 },
 TRANSACTION: {
   deleteTransactions: ["Admin"],
 },
 ACCOUNT: {
   createAccount: ["Admin"],
   associateToken: ["Admin"],
   getAllAccounts: ["Admin"],
   getAccountsByUser: ["Admin", "MultipleAccountOwner"],
   getAccount: ["Admin", "AccountOwner"],
   history: ["Admin", "AccountOwner"],
   getAccountTransactionHistory: ["Admin", "AccountOwner"],
   getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"],
   getSubTransactionsById: ["Admin", TRANSACTION_INVOKER],
   getSubTransactionsByIdWithFilters: ["Admin", TRANSACTION_INVOKER],
   getAccountBalance: ["Admin", "AccountOwner"],
   getAccountOnHoldBalance: ["Admin", "AccountOwner"],
   getOnHoldIds: ["Admin", "AccountOwner"],
   getConversionHistory: ["Admin", "AccountOwner"],
 },
 ACCOUNT_STATUS: {
   get: ["Admin", "AccountOwner"],
   history: ["Admin", "AccountOwner"],
   activateAccount: ["Admin"],
   suspendAccount: ["Admin"],
   deleteAccount: ["Admin"],
 },
 TOKEN_CONVERSION: {
   initializeExchangePoolUser: ["Admin"],
   addConversionRate: ["Admin"],
   updateConversionRate: ["Admin"],
   getConversionRate: ["Admin", "AnyAccountOwner"],
   getConversionRateHistory: ["Admin", "AnyAccountOwner"],
   tokenConversion: ["Admin", "AnyAccountOwner"],
   getExchangePoolUser: ["Admin"],
 },
 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"],
   getAccountByUser: ["Admin", "MultipleAccountOwner"],
   history: ["Admin", "AccountOwner"],
   getAccountTransactionHistory: ["Admin", "AccountOwner"],
   getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"],
   balanceOf: ["Admin", "MultipleAccountOwner"],
 },
 ERC1155ADMIN: {
   isUserTokenAdmin: ["Admin"],
   addAdmin: ["Admin"],
   removeAdmin: ["Admin"],
   getAllAdmins: ["Admin"],
 },
 ERC1155TOKEN: {
   getAllTokens: ["Admin"],
   get: ["Admin", TOKEN_OWNER],
   getAllTokensByUser: ["Admin", "AccountOwner"],
   totalSupply: ["Admin"],
   totalNetSupply: ["Admin"],
   getTokensByName: ["Admin"],
   getDecimals: ["Admin"],
   addRoleMember: ["Admin"],
   removeRoleMember: ["Admin"],
   isInRole: ["Admin", "AccountOwner"],
   save: ["Admin"],
   update: ["Admin"],
 },
 ERC1155ACCOUNT: {
   createAccount: ["Admin"],
   createUserAccount: ["Admin"],
   createTokenAccount: ["Admin"],
   associateFungibleTokenToAccount: ["Admin", "AccountOwner"],
   getAccountsByUser: ["Admin", "AccountOwner"],
   getAccount: ["Admin", "AccountOwner"],
   history: ["Admin", "AccountOwner"],
   getAllAccounts: ["Admin"],
   balanceOfBatch: ["Admin"],
   getAccountTransactionHistory: ["Admin", "AccountOwner"],
   getAccountTransactionHistoryWithFilters: ["Admin", "AccountOwner"],
   exchangeToken: ["AccountOwner"],
   getAccountDetailsByUser: ["Admin", "AccountOwner"],
 },
 ERC1155ROLE: {
   getAccountsByRole: ["Admin"],
   getUsersByRole: ["Admin"],
 },
Ctx.ERC1155Auth.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] pega a constante 'TOKEN' e args[1] pega account_id para adicionar uma verificação de controle de acesso para um AccountOwner. Para adicionar uma verificação de controle de acesso para uma MultipleAccountOwner, args[1] usa a org_id e args[2] usa a user_id.
Retorna:
  • No sucesso, uma promessa. No erro, uma rejeição com uma mensagem de erro.

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

save
Este método cria tokens. Cada token definido tem seu próprio método de criação. Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método para criar um NFT. Caso contrário, qualquer usuário poderá usar esse método para criar NFTs (mint). O usuário que chama esse método se torna o proprietário do NFT (inteiro ou fracionário).
Ctx.ERC1155Token.save(tokenAsset: <Token Class>, quantity?: number);
Parâmetros:
  • tokenAsset: <Token Class> – O ativo de token. As propriedades do ativo são definidas no arquivo de modelo.
  • quantity: number – Apenas para tokens não fungíveis, o número de tokens para hortelã. O único valor suportado para esse parâmetro é 1.
Retorna:
  • Em caso de sucesso, o ativo de token no formato JSON, que pode incluir as informações a seguir.
  • tokenMetadata – Informações JSON que descrevem o token.
  • createdBy – O ID da conta do chamador, que é o usuário que cunhou o token. Não é possível editar esta propriedade.
  • creationDate – O carimbo de data e hora da transação de cunhagem. Não é possível editar esta propriedade.
  • isBurned – Essa propriedade indica se o token foi gravado. Não é possível editar esta propriedade.
  • tokenName – O nome do token. Não é possível editar esta propriedade.
  • tokenDesc – A descrição do token.
  • symbol – O símbolo do token. Não é possível editar esta propriedade.
  • tokenStandard – O padrão do token. Não é possível editar esta propriedade.
  • tokenType – O tipo do token (fungível ou não fungível). Não é possível editar esta propriedade.
  • tokenUnit – A unidade do token (inteira ou fracionária). Não é possível editar esta propriedade.
  • behaviors – Uma lista de comportamentos de token. Não é possível editar esta propriedade.
  • mintable – As propriedades relacionadas à cunhagem. O valor max_mint_quantity define o número máximo de tokens que podem ser criados para a classe de token.
  • owner – O ID da conta do proprietário atual, que é o chamador do método.
  • tokenUri – O URI do token.
  • quantity – A quantidade do token.
Exemplo de Valor de Retorno (NFT Inteiro):
{
    "tokenMetadata": {
        "paintingName": "monalisa",
        "description": "monalisa painting",
        "image": "image link",
        "painterName": "Leonardo da Vinci"
    },
    "assetType": "otoken",
    "quantity": 1,
    "tokenId": "artnft",
    "tokenName": "artcollection",
    "tokenDesc": "artcollection nft",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 500
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-12-29T04:08:35.000Z",
    "isBurned": false,
    "tokenUri": "tu",
    "price": 10000,
    "onSaleFlag": false
}
Exemplo de Valor de Retorno (Token Fungível):
{
    "assetType": "otoken",
    "tokenId": "Loyalty",
    "tokenName": "loyalty",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "fungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 10000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "Dollar"
}
Exemplo de Valor de Retorno (NFT Fracionado):
{
    "tokenMetadata": {
        "painting_name": "paint",
        "description": "Painting Description"
    },
    "assetType": "otoken",
    "tokenId": "realEstate",
    "tokenName": "realestate",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "quantity": 100,
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2023-06-14T04:20:14.000Z",
    "divisible": {
        "decimal": 2
    },
    "isBurned": false,
    "tokenUri": "www.realestate.example.com",
    "price": 1000,
    "on_sale_flag": true
}
update
Este método atualiza tokens. Você não pode atualizar metadados de token ou o URI de token de tokens não fungíveis.
Ctx.ERC1155Token.update(tokenAsset: any);
Parâmetros:
  • tokenAsset: <Token Class> – O ativo de token. As propriedades do ativo são definidas no arquivo de modelo.
Retorna:
  • Em caso de sucesso, o ativo de token atualizado no formato JSON.
Exemplo de Valor de Retorno (NFT Inteiro):
{
    "tokenMetadata": {
        "paintingName": "monalisa",
        "description": "monalisa painting",
        "image": "image link",
        "painterName": "Leonardo da Vinci"
    },
    "assetType": "otoken",
    "quantity": 1,
    "tokenId": "artnft",
    "tokenName": "artcollection",
    "tokenDesc": "artcollection nft",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "whole",
    "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 500
    },
    "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2022-12-29T04:08:35.000Z",
    "isBurned": false,
    "tokenUri": "tu",
    "price": 10000,
    "onSaleFlag": false
}
history (Token)
Este método retorna o histórico de um ID de token especificado.
Ctx.ERC1155Token.history(tokenId: string)
Parâmetros:
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, um array JSON que contém o histórico de tokens.
Exemplo de Valor de Retorno (Token Fungível):
[
    {
        "trxId": "ef4af760c3d7ee5e273196231d59fb91cafe6ca0f78c64747e87bc9bcbb3334b",
        "timeStamp": "2023-09-04T02:36:20.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "LoyaltyToken",
            "tokenName": "loyalty",
            "tokenDesc": "Updated Fungible Whole",
            "tokenStandard": "erc1155+",
            "tokenType": "fungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 10000
            },
            "divisible": {
                "decimal": 2
            },
            "currency_name": "Rupees"
        }
    },
    {
        "trxId": "4fb391a8903633a12a545cd2ecfb57f5575241325abf59995e2a4ed96572bb09",
        "timeStamp": "2023-09-04T02:35:07.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "LoyaltyToken",
            "tokenName": "loyalty",
            "tokenDesc": "Fungible Whole",
            "tokenStandard": "erc1155+",
            "tokenType": "fungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 10000
            },
            "divisible": {
                "decimal": 2
            },
            "currency_name": "Dollar"
        }
    }
]
Exemplo de Valor de Retorno (NFT Fracionado):
[
    {
        "txId": "99bca74f401465206da7499cbf704dd443b3c3d94e348b1d6682ab5ee1864a08",
        "timestamp": "2023-06-20T01:09:18.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "FNFT",
            "tokenName": "realestate",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 100,
            "createdBy": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
            "creationDate": "2023-06-20T00:53:13.000Z",
            "divisible": {
                "decimal": 2
            },
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 2000,
            "on_sale_flag": true,
            "owners": [
                {
                    "accountId": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
                    "tokenShare": 90
                },
                {
                    "accountId": "oaccount~3cddfdaa855900579d963aa6f755a4aed1f3a474a2462c1b45bd7f36df673224",
                    "tokenShare": 10
                }
            ]
        }
    },
    {
        "txId": "d517c61f40e7d6af2f04fe6d337b3e5108eb57030c9dc823793498fd4fed671b",
        "timestamp": "2023-06-20T00:53:13.000Z",
        "value": {
            "assetType": "otoken",
            "tokenId": "FNFT",
            "tokenName": "realestate",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 100,
            "createdBy": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
            "creationDate": "2023-06-20T00:53:13.000Z",
            "divisible": {
                "decimal": 2
            },
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 2000,
            "on_sale_flag": true,
            "owners": [
                {
                    "accountId": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
                    "tokenShare": 100
                }
            ]
        }
    }
]
Exemplo de Valor de Retorno (NFT Inteiro):
[
    {
        "trxId": "92ac6b56112acdba724dd49924d2420a7899c013c61aa40d272e8ab391a65e0f",
        "timeStamp": "2023-09-04T02:28:48.000Z",
        "value": {
            "tokenMetadata": {
                "painting_name": "monalisa",
                "description": "monalisa painting",
                "image": "image link",
                "painter_name": "Leonardo da Vinci"
            },
            "assetType": "otoken",
            "tokenId": "artnft",
            "tokenName": "artcollection",
            "tokenDesc": "Updated Token Description",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 1,
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2023-09-04T02:27:19.000Z",
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 10000,
            "on_sale_flag": true
        }
    },
    {
        "trxId": "27697dd4a8dba53bad073aa95587cd1ef173b02fd95d771a60273d301fd3bcbe",
        "timeStamp": "2023-09-04T02:27:19.000Z",
        "value": {
            "tokenMetadata": {
                "painting_name": "monalisa",
                "description": "monalisa painting",
                "image": "image link",
                "painter_name": "Leonardo da Vinci"
            },
            "assetType": "otoken",
            "tokenId": "artnft",
            "tokenName": "artcollection",
            "tokenDesc": "artcollection nft",
            "tokenStandard": "erc1155+",
            "tokenType": "nonfungible",
            "tokenUnit": "whole",
            "behaviors": [
                "indivisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter",
                "burner_role_name": "burner"
            },
            "mintable": {
                "max_mint_quantity": 20000
            },
            "quantity": 1,
            "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "creationDate": "2023-09-04T02:27:19.000Z",
            "owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "isBurned": false,
            "tokenUri": "www.FNFT.example.com",
            "price": 10000,
            "on_sale_flag": true
        }
    }
]
getAllTokens
Este método retorna todos os ativos de token que são salvos no banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.ERC1155Token.getAllTokens()
Parâmetros:
  • nenhuma
Exemplo de Valor de Retorno:
[
  {
    "key": "tokenOne",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "tokenTwo",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenTwo",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "art",
    "valueJson": {
      "assetType": "otoken",
      "quantity": 1,
      "tokenId": "art",
      "tokenName": "artcollection",
      "tokenStandard": "erc1155+",
      "tokenType": "nonfungible",
      "tokenUnit": "whole",
      "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter"
      },
      "mintable": {
        "max_mint_quantity": 20000
      },
      "owner": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "createdBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "creationDate": "2022-12-08T08:52:57.000Z",
      "isBurned": true,
      "tokenUri": "art.example.com",
      "transferredBy": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
      "transferredDate": "2022-12-08T08:59:17.000Z",
      "burnedBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "burnedDate": "2022-12-08T09:01:28.000Z"
    }
  },
  {
    "key": "FNFT",
    "valueJson": {
        "assetType": "otoken",
        "tokenId": "FNFT",
        "tokenName": "realestate",
        "tokenStandard": "erc1155+",
        "tokenType": "nonfungible",
        "tokenUnit": "fractional",
        "behaviors": [
            "divisible",
            "mintable",
            "transferable",
            "burnable",
            "roles"
        ],
        "roles": {
            "minter_role_name": "minter",
            "burner_role_name": "burner"
        },
        "mintable": {
            "max_mint_quantity": 20000
        },
        "quantity": 100,
        "createdBy": "oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a",
        "creationDate": "2023-06-20T00:53:13.000Z",
        "divisible": {
            "decimal": 2
        },
        "isBurned": false,
        "tokenUri": "www.FNFT.example.com",
        "price": 2000,
        "on_sale_flag": true
    }
  },
]
get (Token)
Este método retorna 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 pelo proprietário do token.
this.Ctx.ERC1155Token.get(tokenId: string)
Parâmetros:
  • tokenId: string – O ID do token a ser obtido.
Exemplo de Valor de Retorno (NFT Inteiro):
{
  "assetType": "otoken",
  "quantity": 1,
  "tokenId": "art",
  "tokenName": "artcollection",
  "tokenStandard": "erc1155+",
  "tokenType": "nonfungible",
  "tokenUnit": "whole",
  "behaviors": [
    "indivisible",
    "singleton",
    "mintable",
    "transferable",
    "burnable",
    "roles"
  ],
  "roles": {
    "minter_role_name": "minter"
  },
  "mintable": {
    "max_mint_quantity": 20000
  },
  "owner": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
  "createdBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
  "creationDate": "2022-12-08T08:52:57.000Z",
  "isBurned": true,
  "tokenUri": "example.com",
  "transferredBy": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "transferredDate": "2022-12-08T08:59:17.000Z",
  "burnedBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
  "burnedDate": "2022-12-08T09:01:28.000Z"
}
Exemplo de Valor de Retorno (Token Fungível):
{
    "assetType": "otoken",
    "tokenId": "Loyalty",
    "tokenName": "loyalty",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "fungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 10000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "Dollar"
}
Exemplo de Valor de Retorno (NFT Fracionado):
{
    "tokenMetadata": {
        "painting_name": "paint",
        "description": "Painting Description"
    },
    "assetType": "otoken",
    "tokenId": "realEstate",
    "tokenName": "realestate",
    "tokenDesc": "Token Description",
    "tokenStandard": "erc1155+",
    "tokenType": "nonfungible",
    "tokenUnit": "fractional",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "quantity": 100,
    "createdBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "creationDate": "2023-06-14T04:20:14.000Z",
    "divisible": {
        "decimal": 2
    },
    "isBurned": false,
    "tokenUri": "www.realestate.example.com",
    "price": 1000,
    "on_sale_flag": true,
    "owners": [
        {
            "accountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "tokenShare": 100
        }
    ]
}
getAllTokensByUser
Este método retorna todos os ativos de token pertencentes a um usuário especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.ERC1155Token.getAllTokensByUser(accountId: string)
Parâmetros:
  • accountId: string – O ID da conta do usuário.
Exemplo de Valor de Retorno:
[
  {
    "key": "tokenOne",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "nftToken",
    "valueJson": {
      "assetType": "otoken",
      "quantity": 1,
      "tokenId": "nftToken",
      "tokenName": "artcollection",
      "tokenStandard": "erc1155+",
      "tokenType": "nonfungible",
      "tokenUnit": "whole",
      "behaviors": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter"
      },
      "mintable": {
        "max_mint_quantity": 20000
      },
      "owner": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "createdBy": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
      "creationDate": "2022-12-08T09:10:21.000Z",
      "isBurned": false,
      "tokenUri": "example.com"
    }
  }
]
ownerOf
Este método retorna o ID da conta, o ID da organização e o ID do usuário do proprietário do ID do token especificado.
Ctx.ERC1155Token.ownerOf(tokenId: string)
Parâmetros:
  • tokenId: string – O ID do token.
Exemplo de Valor de Retorno:
{
    "accountId": "oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6",
    "orgId": "appdev",
    "userId": "idcqa"
}
tokenURI
Este método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
Ctx.ERC1155Token.tokenURI(tokenId: string)
Parâmetros:
  • tokenId: string – O ID do token.
Exemplo de Valor de Retorno:
{
    "tokenUri": "example.com"
}
name
Este método retorna o nome da classe de token. Qualquer um pode chamar esse método.
Ctx.ERC1155Token.name(tokenId: string)
Parâmetros:
  • tokenId: string – O ID do token.
Exemplo de Valor de Retorno:
{"tokenName": "artcollection"}
totalSupply
Este método retorna o número total de tokens cunhados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Ctx.ERC1155Token.totalSupply(token: any)
Parâmetros:
  • token: any – O ativo de token.
Exemplo de Valor de Retorno:
{"totalSupply": 110}
totalNetSupply
Este método retorna o número total de tokens cunhados menos o número de tokens gravados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Ctx.ERC1155Token.totalNetSupply(token: any)
Parâmetros:
  • token: any – O ativo de token.
Exemplo de Valor de Retorno:
{"totalNetSupply": 105}
getTokensByName
Este método retorna todos os ativos de token para um nome de token especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.ERC1155Token.getTokensByName(tokenName: string)
Parâmetros:
  • tokenName: string – O nome do token.
Exemplo de Valor de Retorno:
[
  {
    "key": "tokenOne",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenOne",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  },
  {
    "key": "tokenTwo",
    "valueJson": {
      "assetType": "otoken",
      "tokenId": "tokenTwo",
      "tokenName": "moneytok",
      "tokenStandard": "erc1155+",
      "tokenType": "fungible",
      "tokenUnit": "fractional",
      "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "roles"
      ],
      "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner"
      },
      "mintable": {
        "max_mint_quantity": 1000
      },
      "divisible": {
        "decimal": 2
      }
    }
  }
]
getDecimals
Este método retorna o número de casas decimais para um token especificado. Se o comportamento divisível não for especificado para o token, o valor padrão de zero casas decimais será retornado.
Ctx.ERC1155Token.getDecimals(token)
Parâmetros:
  • token: any – O ativo de token.
Exemplo de Valor de Retorno:
2

Métodos para Gerenciamento de Contas

createAccount
Este método cria uma conta para um usuário especificado e contas de token associadas para tokens fungíveis ou não fungíveis. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Esse método só pode ser chamado por um Token Admin do chaincode.

Uma conta de usuário tem um ID exclusivo, formado por um hash SHA-256 do parâmetro orgId e do parâmetro userId.

Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro orgId, o parâmetro userId, a string constante ft separada pelo símbolo til (~) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~).

Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro orgId, do parâmetro userId e da string constante nft separada pelo símbolo til (~). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a essa única conta de token não fungível.

Ctx.ERC1155Account.createAccount(orgId: string, userId: string, ftAccount: boolean, nftAccount: boolean)
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 ID de e-mail do usuário.
  • ftAccount: boolean – Se for verdadeiro, uma conta de token fungível será criada e associada à conta de usuário.
  • nftAccount: boolean – Se for verdadeiro, uma conta de token não fungível será criada e associada à conta de usuário.
Retorna:
  • No caso de sucesso, um objeto JSON da conta que foi criada.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~cf20877546f52687f387e7c91d88b9722c97e1a456cc0484f40c747f7804feae",
  "userId": "user1",
  "orgId": "appdev",
  "totalAccounts": 2,
  "totalFtAccounts": 1,
  "associatedFtAccounts": [
    {
      "accountId": "oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b",
      "tokenId": ""
    }
  ],
  "associatedNftAccount": "oaccount~73c3e835dac6d0a56ca9d8def08269f83cefd59b9d297fe2cdc5a9083828fa58"
}
createUserAccount
Este método cria uma conta para um usuário especificado. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token.

Um ID de conta é um hash SHA-256 do parâmetro orgId e do parâmetro userId. Esse método só pode ser chamado por um Token Admin do chaincode.

Ctx.ERC1155Account.createUserAccount(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 ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um objeto JSON da conta de usuário que foi criado.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "userId": "idcqa",
  "orgId": "appdev",
  "totalAccounts": 0,
  "totalFtAccounts": 0,
  "associatedFtAccounts": [],
  "associatedNftAccount": ""
}
createTokenAccount
Este método cria uma conta de token fungível ou não fungível para associar a uma conta de usuário.

Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro orgId, o parâmetro userId, a string constante ft separada pelo símbolo til (~) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~).

Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro orgId, do parâmetro userId e da string constante nft separada pelo símbolo til (~). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a essa única conta de token não fungível.

Esse método só pode ser chamado por um Token Admin do chaincode.

Ctx.ERC1155Account.createTokenAccount(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 ID de e-mail do usuário.
  • tokenType: TokenType – O tipo de conta de token a ser criada. Os únicos tipos de token suportados são nonfungible e fungible.
Retorna:
  • No caso de sucesso, um objeto JSON da conta de token que foi criada.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "userId": "idcqa",
  "orgId": "appdev",
  "totalAccounts": 1,
  "totalFtAccounts": 1,
  "associatedFtAccounts": [
    {
      "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
      "tokenId": ""
    }
  ],
  "associatedNftAccount": ""
}
associateTokenToToken
Este método associa a conta de token fungível de um usuário a um token fungível específico.
Ctx.ERC1155Account.associateTokenToToken(accountId: string, tokenId: string)
Parâmetros:
  • accountId: string – O ID da conta do usuário.
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON da conta de usuário, que mostra que o token fungível foi associado à conta de token. Por exemplo, no exemplo a seguir, o primeiro objeto no array associatedFtAccounts mostra que o ID da conta do token fungível e o ID do token estão associados.
Exemplo de Valor de Retorno:
{
  "assetType": "ouaccount",
  "accountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc",
  "userId": "idcqa",
  "orgId": "appdev",
  "totalAccounts": 1,
  "totalFtAccounts": 1,
  "associatedFtAccounts": [
    {
      "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
      "tokenId": "tokenOne"
    }
  ],
  "associatedNftAccount": ""
}
getAccountHistory
Este método retorna o histórico de uma conta de token especificada.
Ctx.ERC1155Account.getAccountHistory(accountId: string)
Parâmetros:
  • accountId: string – O ID da conta do usuário.
Retorna:
  • No caso de sucesso, um array de objetos JSON que descreve o histórico da conta.
Exemplo de Valor de Retorno:
[
    {
        "trxId": "a2cfc6fc064334d6b9931cdf67193711ec2ff5c50a4714f11855fe7384f00e35",
        "timeStamp": "2023-06-06T14:44:31.000Z",
        "value": {
            "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
            "assetType": "oaccount",
            "bapAccountVersion": 1,
            "balance": 100,
            "orgId": "appdev",
            "tokenId": "loy1",
            "tokenName": "loyalty",
            "tokenType": "fungible",
            "userId": "idcqa"
        }
    },
    {
        "trxId": "de483cf7505ae4e7018c4b604c3ab9327c2fb1f802d9408e22735667c1d6997f",
        "timeStamp": "2023-06-06T14:43:23.000Z",
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion": 0,
            "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
            "userId": "idcqa",
            "orgId": "appdev",
            "tokenType": "fungible",
            "tokenId": "loy1",
            "tokenName": "loyalty",
            "balance": 0
        }
    },
    {
        "trxId": "db053e653d3ad9aa5b7b6e04b7cd51aacfbb413272d857a155b60d2a6a12bf4d",
        "timeStamp": "2023-06-05T16:59:08.000Z",
        "value": {
            "assetType": "oaccount",
            "bapAccountVersion": 0,
            "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
            "userId": "idcqa",
            "orgId": "appdev",
            "tokenType": "fungible",
            "tokenId": "",
            "balance": 0
        }
    }
]
getAccountWithStatus
Este método retorna detalhes da conta de token, incluindo o status 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.
Ctx.ERC1155Account.GetAccountWithStatus(accountId, tokenId...)
Parâmetros:
  • userAccountId: string – O ID da conta do usuário.
  • tokenId?: string – Para uma conta de token não fungível, uma string vazia. Para uma conta de token fungível, o ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON que inclui detalhes da conta de token, incluindo o status da conta.
Exemplo de valor de retorno (conta de token não fungível):
{
    "assetType": "oaccount",
    "bapAccountVersion": 1,
    "status": "active",
    "accountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
    "userId": "idcqa",
    "orgId": "appdev",
    "tokenType": "nonfungible",
    "noOfNfts": 1
  }
Exemplo de valor de retorno (conta de token fungível):
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "accountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "userId": "idcqa",
  "orgId": "appdev",
  "tokenType": "fungible",
  "tokenId": "t1",
  "tokenName": "loyalty",
  "balance": 0
}
getAccount
Este método retorna detalhes da conta de token para um usuário especificado. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo Account Owner da conta.
Ctx.ERC1155Account.getAccount(userAccountId: string, tokenId: string)
Parâmetros:
  • userAccountId: string – O ID da conta do usuário.
  • tokenId?: string – Para uma conta de token não fungível, uma string vazia. Para uma conta de token fungível, o ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON que inclui detalhes da conta de token. O parâmetro bapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de valor de retorno (conta de token não fungível):
{
    "assetType": "oaccount",
    "bapAccountVersion": 0,
    "accountId": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
    "userId": "idcqa",
    "orgId": "appdev",
    "tokenType": "nonfungible",
    "noOfNfts": 3
}
Exemplo de valor de retorno (conta de token fungível):
{
    "assetType": "oaccount",
    "bapAccountVersion": 0,
    "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
    "userId": "idcqa",
    "orgId": "appdev",
    "tokenType": "fungible",
    "tokenId": "loy1",
    "tokenName": "loyalty",
    "balance": 50
}
getAllAccounts
Este método retorna detalhes de todas as contas de usuário.
Ctx.ERC1155Account.getAllAccounts()
Parâmetros:
  • nenhuma
Exemplo de Valor de Retorno:
[
        {
            "assetType": "ouaccount",
            "accountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
            "userId": "idcqa",
            "orgId": "appdev",
            "totalAccounts": 2,
            "totalFtAccounts": 1,
            "associatedFtAccounts": [
                {
                    "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
                    "tokenId": "loy1"
                }
            ],
            "associatedNftAccount": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371"
        },
        {
            "assetType": "ouaccount",
            "accountId": "ouaccount~9501bb774c156eb8354dfe489250ea91f757523d70f08ee494bda98bb352003b",
            "userId": "user1_minter",
            "orgId": "appdev",
            "totalAccounts": 2,
            "totalFtAccounts": 1,
            "associatedFtAccounts": [
                {
                    "accountId": "oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c",
                    "tokenId": "loy1"
                }
            ],
            "associatedNftAccount": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446"
        },
    ]
getAccountDetailsByUser
Este método retorna um resumo de conta para um usuário especificado e detalhes de tokens fungíveis e não fungíveis que estão associados ao usuário.
Ctx.ERC1155Account.getAccountDetailsByUser(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 ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um objeto de conta JSON que inclui e resumo de conta para o usuário especificado e detalhes de tokens fungíveis e não fungíveis associados ao usuário. Para tokens não fungíveis fracionários, a propriedade tokenShare na seção associatedNFTs mostra o compartilhamento que o usuário possui
Exemplo de Valor de Retorno:
{
    "userAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
    "associatedFTAccounts": [
        {
            "accountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
            "tokenId": "FT",
            "balance": 50
        }
    ],
    "associatedNFTAccount": {
        "accountId": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "associatedNFTs": [
            {
                "nftTokenId": "FNFT",
                "tokenShare": 100
            },
            {
                "nftTokenId": "FNFT2",
                "tokenShare": 110
            },
            {
                "nftTokenId": "NFT"
            }
        ]
    }
}
getUserByAccountId
Este método retorna os detalhes do usuário de um ID de conta especificado.
Ctx.ERC1155Account.getUserByAccountId(accountId: string)
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:
{
    "orgId": "appdev",
    "userId": "idcqa"
}

Métodos para Gerenciamento de Atribuições

AddRoleMember
Este método adiciona uma atribuição a um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Ctx.ERC1155Token.addRoleMember(role: string, userAccountId: string, token: any)
Parâmetros:
  • userAccountId: string – O ID da conta do usuário.
  • role: string – O nome da função a ser adicionada ao usuário especificado.
  • token: any – O ativo de token.
Retorna:
  • No caso de êxito, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
{
  "msg": "Successfully added role 'minter' to Account Id: oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a (Org-Id: appdev, User-Id: idcqa)"
}
isInRole
Este método retorna um valor booliano para indicar se um usuário tem uma função especificada. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Ctx.ERC1155Token.isInRole(role: string, userAccountId: string, token: any)
Parâmetros:
  • userAccountId: string – O ID da conta do usuário.
  • role: string – O nome da função a ser pesquisada.
  • token: any – O ativo de token.
Exemplo de Valor de Retorno:
{
    "result": true,
    "msg": "Account Id oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a (Org-Id: appdev, User-Id: idcqa) has minter role"
}
removeRoleMember
Este método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Ctx.ERC1155Token.removeRoleMember(role: string, userAccountId: string, token: any)
Parâmetros:
  • userAccountId: string – O ID da conta do usuário.
  • role: string – O nome da atribuição a ser removida do usuário especificado.
  • token: any – O ativo de token.
Exemplo de Valor de Retorno:
{
  "msg": "Successfully removed role 'minter' from Account Id: oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b (Org-Id: appdev, User-Id: user1)"
}
getAccountsByRole
Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Ctx.ERC1155Token.getAccountsByRole(role: string, token: any)
Parâmetros:
  • role: string – O nome da função a ser pesquisada.
  • token: any – O ativo de token.
Exemplo de Valor de Retorno:
{
  "accounts": [
    "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
    "oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b"
  ]
}
getUsersByRole
Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Ctx.ERC1155Token.getUsersByRole(role: string, token: any)
Parâmetros:
  • role: string – O nome da função a ser pesquisada.
  • token: any – O ativo de token.
Exemplo de Valor de Retorno:
{
    "users": [
        {
            "accountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
            "orgId": "appdev",
            "userId": "idcqa"
        },
        {
            "accountId": "oaccount~60bb20c14a83f6e426e1437c479c5891e1c6477dfd7ad18b73acac5d80bc504b",
            "orgId": "appdev",
            "userId": "user1"
        }
    ]
}

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

getAccountTransactionHistory
Este método retorna o histórico de transações da conta. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo proprietário da conta. Para tokens não fungíveis, esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.ERC1155Account.getAccountTransactionHistory(accountId: string)
Parâmetros:
  • accountId: string – O ID da conta de token.
Exemplo de Valor de Retorno:
[
    {
        "transactionId": "otransaction~3a6b23c3003626f3947e990eddbd7ac23398d2200e2eb3eac745e6ddfae140bc~7c88c736df38d5622512f1e8dcdd50710eb47c953f1ecb24ac44790a9e2f475b",
        "timestamp": "2023-06-06T14:48:08.000Z",
        "tokenId": "FNFT",
        "transactedAmount": 10,
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446",
        "transactionType": "DEBIT",
        "balance": 90
    },
    {
        "transactionId": "otransaction~3a6b23c3003626f3947e990eddbd7ac23398d2200e2eb3eac745e6ddfae140bc~178e3730bc5bee50d02f1464a4eebf733a051905f651e5789039adb4a3edc114",
        "timestamp": "2023-06-06T14:48:08.000Z",
        "tokenId": "NFT",
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446",
        "transactionType": "DEBIT"
    },
    {
        "transactionId": "otransaction~c369929e28e78de06c72d020f1418c9a154a7dd280b2e22ebb4ea4485e249124~a7cefb22ff39ee7e36967be71de27da6798548c872061a62dabc56d88d50b930",
        "timestamp": "2023-06-06T14:47:08.000Z",
        "tokenId": "NFT",
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "transactionType": "MINT"
    },
    {
        "transactionId": "otransaction~114a1bc78d04be48ee6dc140c32c042ee9481cb118959626f090eec744522422~e4eb15d9354f694230df8835ade012100d82aa43672896a2c7125a86e3048f9f",
        "timestamp": "2023-06-05T17:17:57.000Z",
        "tokenId": "FNFT",
        "transactedAmount": 100,
        "triggeredByUserAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "transactedAccount": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "transactionType": "MINT",
        "balance": 100
    }
]
getTransactionById
Este método retorna os detalhes da transação para um ID de transação especificado.
Ctx.ERC1155Transaction.getTransactionById(transactionId: string)
Parâmetros:
  • transactionId: string – O ID da transação.
Exemplo de Valor de Retorno:
{
  "transactionId": "otransaction~9ea7b05ab099f7ff4db8342b8c3609031f1d54f11205906e7f1fe88661fe3cbe~33b59ce0c89e96c1e16449f24301581e8e71954f38ad977c7eb6f065e87f2a53",
  "history": [
    {
      "trxId": "9ea7b05ab099f7ff4db8342b8c3609031f1d54f11205906e7f1fe88661fe3cbe",
      "timeStamp": "2022-12-08T09:01:28.000Z",
      "value": {
        "assetType": "otransaction",
        "transactionId": "otransaction~9ea7b05ab099f7ff4db8342b8c3609031f1d54f11205906e7f1fe88661fe3cbe~33b59ce0c89e96c1e16449f24301581e8e71954f38ad977c7eb6f065e87f2a53",
        "tokenId": "tokenOne",
        "fromAccountId": "oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a",
        "toAccountId": "",
        "transactionType": "BURN",
        "amount": 5,
        "timestamp": "2022-12-08T09:01:28.000Z",
        "triggeredByUserAccountId": "ouaccount~24ffd4d32a028a85b4b960f5d55536c837b5429bc7f346150adfa904ec2937cc"
      }
    }
  ]
}
deleteTransactions
Este método exclui transações antes de um timestamp especificado do banco de dados de estado.
Ctx.ERC1155Transaction.deleteTransactions(referenceTime: Date)
Parâmetros:
  • referenceTime: Date – Todas as transações antes desse carimbo de data/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 para Gerenciamento de Comportamento de Token - Comportamento Mintable

mintBatch
Este método cria (mints) vários tokens em uma operação em batch. Este método cria apenas tokens fungíveis ou tokens fracionários não fungíveis.

Para tokens fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Você não poderá usar mais do que a propriedade max_mint_quantity do token se essa propriedade tiver sido especificada quando o token foi criado ou atualizado.

Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens fracionários não fungíveis que podem ser cunhados.

Você não pode usar este método para cunhar um token inteiro não fungível.

Ctx.ERC1155Token.mintBatch(accountId: string, tokenIds: string[], quantities: number[])
Parâmetros:
  • accountId: string – O ID da conta do usuário.
  • tokenIds: string[] – A lista de IDs de token para os quais os tokens da moeda serão usados.
  • quantity: number[] – A lista de quantidades de tokens para hortelã, correspondente ao array de ID de token.
Retorna:
  • No caso de sucesso, um objeto JSON que inclui detalhes sobre os tokens cunhados.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully minted batch of tokens for User-Account-Id ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38 (Org-Id: appdev, User-Id: idcqa).",
    "details": [
        {
            "msg": "Successfully minted 100 tokens of fractional tokenId: plot55 to Org-Id: appdev, User-Id: idcqa"
        },
        {
            "msg": "Successfully minted 100 tokens of tokenId: loyalty to Token-Account-Id oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e"
        }
    ]
}

Métodos para Gerenciamento de Comportamento de Token - Comportamento Transferível

batchTransferFrom
Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.

Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.

Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.

Este método não valida se o chamador do método é o remetente especificado.

Ctx.ERC1155Token.batchTransferFrom(fromUserAccountId: string, toUserAccountId: string, tokenIds: string[], quantities: number[])
Parâmetros:
  • fromUserAccountId: string – O ID da conta do remetente e do proprietário do token na organização atual.
  • toUserAccountId: string – O ID da conta do destinatário.
  • tokenIds: string[] – Uma lista de IDs de token para transferência dos tokens.
  • quantity: number[] – A lista de quantidades de tokens a serem transferidos, correspondente ao array de ID do token.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes para cada transferência de token.
Exemplo de Valor de Retorno:
[
    {
        "msg": "Successfully transferred NFT token: 'FNFT' of '10' quantity from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred 10 FT token: 'FT' from Account-Id: oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred NFT token: 'NFT' from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    }
]
safeBatchtransferFrom
Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.

Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.

Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.

O chamador do método deve ser o remetente especificado.

Ctx.ERC1155Token.safeBatchTransferFrom(fromUserAccountId: string, toUserAccountId: string, tokenIds: string[], quantities: number[])
Parâmetros:
  • fromUserAccountId: string – O ID da conta do remetente e do proprietário do token na organização atual.
  • toUserAccountId: string – O ID da conta do destinatário.
  • tokenIds: string[] – Uma lista de IDs de token para transferência dos tokens.
  • quantity: number[] – A lista de quantidades de tokens a serem transferidos, correspondente ao array de ID do token.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes para cada transferência de token.
Exemplo de Valor de Retorno:
[
    {
        "msg": "Successfully transferred NFT token: 'FNFT' of '10' quantity from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred 10 FT token: 'FT' from Account-Id: oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c (Org-Id: appdev, User-Id: user1_minter)"
    },
    {
        "msg": "Successfully transferred NFT token: 'NFT' from Account-Id: oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (Org-Id: appdev, User-Id: idcqa) to Account-Id: oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446 (Org-Id: appdev, User-Id: user1_minter)"
    }
]
balanceOfBatch
Este método conclui uma operação em lote que obtém o saldo de contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs usuário e IDs token. Esse método só pode ser chamado por um Token Admin do chaincode ou pelos proprietários da conta. Os proprietários da conta só podem ver os detalhes do saldo das contas de sua propriedade.
Ctx.ERC1155Account.balanceOfBatch(accountIds: string[], tokenIds: string[])
Parâmetros:
  • accountIds: string[] – Uma lista dos IDs de contas de usuário.
  • tokenIds: string[] – Uma lista dos IDs de token.
Exemplo de Valor de Retorno:
[
    {
        "orgId": "appdev",
        "userId": "idcqa",
        "userAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "tokenAccountId": "oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371",
        "tokenId": "FNFT",
        "balance": 100
    },
    {
        "orgId": "appdev",
        "userId": "idcqa",
        "userAccountId": "ouaccount~412de5e3998dcd100973e1bad6e8729fddc1c7ff610beab8376d733a35c51f38",
        "tokenAccountId": "oaccount~21206f309941a2a23c4f158a0fe1b8f12bb8e2b0c9a2e1358f5efebc0c7d410e",
        "tokenId": "FT",
        "balance": 50
    },
    {
        "orgId": "appdev",
        "userId": "user1_minter",
        "userAccountId": "ouaccount~9501bb774c156eb8354dfe489250ea91f757523d70f08ee494bda98bb352003b",
        "tokenAccountId": "oaccount~dcee860665db8740cb77b846e823752185a1e9a185814d0acb305890f5903446",
        "tokenId": "FNFT",
        "balance": 10
    }
]
exchangeToken
Este método troca tokens entre contas especificadas. Este método suporta apenas a troca entre um NFT (inteiro ou fracionário) e um token fungível ou um token fungível e um NFT (inteiro ou fracionário). Esse método só pode ser chamado pelo proprietário da conta.
Ctx.ERC1155Token.exchangeToken( fromTokenId: string, fromUserAccountId: string, fromTokenQuantity: number, toTokenId: string, toUserAccountId: string, toTokenQuantity: number)
Parâmetros:
  • fromTokenId: string – O ID do token que o remetente possui.
  • fromUserAccountId: string – O ID da conta do remetente.
  • fromTokenQuantity: number – A quantidade de tokens do remetente para troca com o destinatário.
  • toTokenId: string – O ID do token que o receptor possui.
  • toUserAccountId: string – O ID da conta do destinatário.
  • toTokenQuantity: number – A quantidade de tokens do receptor para trocar com o remetente.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes de troca de token.
Exemplo de Valor de Retorno:
{
    "msg": "Succesfully exchanged 10 tokens of type nonfungible with tokenId: [r1] from Account oaccount~e88276a3be547e31b567346bdddde52d37734da4d5fae83ab2e5c98a10097371 (OrgId: appdev, UserId: idcqa) to 10 tokens of type fungible with tokenId: [loy1] from Account oaccount~1089ee5122f367ee0ca38c6660298f4b81f199627e4f67f3691c0f628237974c (OrgId: appdev, UserId: user1_minter)"
}

Métodos para Gerenciamento de Comportamento de Token - Comportamento Queimável

burn
Este método desativa ou queima os tokens fungíveis e não fungíveis especificados.
Ctx.ERC1155Token.burn(accountId: string, tokenIds: string[], quantities: number[])
Parâmetros:
  • accountId: string – O ID da conta do usuário.
  • tokenIds: string[] – A lista de IDs de token a serem gravados.
  • quantity: number[] – A lista de quantidades de tokens a serem gravadas, correspondente ao array de ID do token.
Retorna:
  • Em caso de sucesso, uma mensagem com detalhes sobre as operações de gravação.
Exemplo de Valor de Retorno:
[
  {
    "msg": "Successfully burned NFT token: 'art' from Account-Id: oaccount~76cb672eeb1bd535899562a840d0c15a356db89e24bc8b43ac1dba845a4282c6 (Org-Id: appdev, User-Id: idcqa)"
  },
  {
    "msg": "Successfully burned 5 tokens of tokenId: tokenOne from Account-ID oaccount~1422a74d262a3a55a37cd9023ef8836f765d0be7b49d397696b9961d7434d22a (Org-Id: appdev, User-Id: idcqa)"
  },
  {
    "msg": "Successfully burned 2 token share of tokenId: FNFT from Account-ID oaccount~87bcb699d507368ee3966cd03ee6d7736ffc55dde8c0f0e16b14866334ac504a (Org-Id: AutoF1377358917, User-Id: idcqa)"
  }
]