Projeto TypeScript do Andaime para o Token Taxonomy Framework

O Blockchain App Builder pega a entrada do seu arquivo de especificação de token e gera um projeto de chaincode 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 suportados automaticamente.

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

Modelo

Cada classe de modelo tokenizada estende a classe Token, que por sua vez estende a classe OchainModel. A classe Token é importada de ../lib/token. O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe OchainModel.

import * as yup from 'yup';
import { Id, Mandatory, Validate, ReadOnly } from '../lib/decorators';
import { Token } from '../lib/token';
 
@Id('token_id')
export class Digicur extends Token<Digicur> {
 
    public readonly assetType = 'otoken';
 
    @Mandatory()
    @Validate(yup.string().required().matches(/^[A-Za-z0-9][A-Za-z0-9_-]*$/).max(16))
    public token_id: string;
 
    @ReadOnly('digicur')
    public token_name: string;
 
    @Validate(yup.string().trim().max(256))
    public token_desc: string;
 
    @ReadOnly('fungible')
    public token_type: string;
 
    @ReadOnly(["divisible","mintable","transferable","burnable","holdable","roles"])
    public behaviors: string[];
 
    @ReadOnly({minter_role_name: "minter", burner_role_name: "burner", notary_role_name: "notary"})
    public roles: object;
 
    @ReadOnly({max_mint_quantity: 20000})
    public mintable: object;
 
    @ReadOnly({decimal: 1})
    public divisible: object;
 
    @Validate(yup.number())
    public token_to_currency_ratio: number;
 
    @Validate(yup.string())
    public currency_representation: string;
 
}

Controlador

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

export class DigiCurrCCController extends OchainController{

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

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

Métodos 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 do ciclo de vida do token sem qualquer codificação adicional. Os métodos da Controladora devem ter um decorador @Validator(...params) para serem invocáveis.

Métodos para Gerenciamento de Controle de Acesso

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

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

init
Esse método é chamado quando o chaincode é implantado ou atualizado. Cada Token Admin é identificado pelas informações user_id e org_id no parâmetro obrigatório adminList. O user_id é o nome do usuário ou o ID do e-mail do proprietário da instância ou do usuário que está conectado à instância. O org_id é o ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Qualquer usuário Token Admin pode adicionar e remover outros usuários Token Admin chamando os métodos addAdmin e removeAdmin.
public async init(adminList: TokenAdminAsset[]) {
    await this.Ctx.Admin.initAdmin(adminList);
    return;
}
Parâmetros:
  • adminList array – Um array de informações {user_id, org_id} que especifica a lista de administradores de token. O array adminList é um parâmetro obrigatório.
Exemplo de parâmetro, Mac OSX e Linux CLI:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
Exemplo de parâmetro, CLI do Microsoft Windows:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Exemplo de parâmetro, console do Oracle Blockchain Platform:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
initialize<Token Name>Token
Esse método cria um token e inicializa as propriedades do token. O ativo e suas propriedades são salvos no banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode.
@Validator(Digicur)
    public async initializeDigicurToken(token_asset: Digicur) {
        await this.Ctx.Auth.checkAuthorization('TOKEN.save', 'TOKEN');
        return await this.Ctx.Token.save(token_asset)
    }
Parâmetros:
  • asset: <Token Class> – O ativo de token é passado como parâmetro para esse método. As propriedades do ativo de token são descritas no arquivo de modelo.
Retorna:
  • Com êxito, uma representação JSON do ativo de token que foi criado.
Exemplo de valor de retorno:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 1000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
update<Token Name>Token
Este método atualiza as propriedades do token. Após a criação de um ativo de token, somente a propriedade token_desc e as propriedades personalizadas podem ser atualizadas. Este método pode ser chamado somente por um Token Admin do chaincode.
@Validator(Digicur)
public async updateDigicurToken(token_asset: Digicur) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.update', 'TOKEN');
    return await this.Ctx.Token.update(token_asset);
}
Parâmetros:
  • asset: <Token Class> – O ativo de token é passado como parâmetro para esse método. As propriedades do ativo de token são descritas no arquivo de modelo.
Retorna:
  • Com êxito, uma representação JSON atualizada do ativo de token.
Exemplo de valor de retorno:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_desc": "Digital Currency equiv of dollar",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
    },
    "mintable": {
        "max_mint_quantity": 1000
    },
    "divisible": {
        "decimal": 2
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
getTokenDecimals
Este método retorna o número de casas decimais que foram configuradas para um token fracionário. Se o comportamento divisible não tiver sido especificado para o token, o valor padrão será 0. Esse método só pode ser chamado por um Token Admin ou Org Admin do chaincode.
@Validator(yup.string())
public async getTokenDecimals(token_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Auth.checkAuthorization('TOKEN.getDecimals', 'TOKEN');
    return {
        msg: `Token Id: ${token_id} has ${this.Ctx.Token.getDecimals(token_asset)} decimal places.`
    };
}
Parâmetros:
  • token_id: string – O ID do token.
Retorna:
  • Em caso de sucesso, uma string JSON mostrando o número de casas decimais de token.
Exemplo de valor de retorno:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
getTokenById
Esse método retornará um objeto de token se ele estiver presente no banco de dados de estado. Esse método só pode ser chamado por um Token Admin ou um Org Admin do chaincode.
@Validator(yup.string())
public async getTokenById(token_id: string) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.get', 'TOKEN');
    const token = await this.getTokenObject(token_id);
    return token;
}
Parâmetros:
  • token_id: string – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON que representa o ativo de token.
Exemplo de valor de retorno:
{
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_desc": "Digital Currency equiv of dollar",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
        "burner_role_name": "burner",
        "notary_role_name": "notary"
    },
    "mintable": {
        "max_mint_quantity": 2000
    },
    "divisible": {
        "decimal": 1
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
}
getTokenHistory
Esse método retorna o histórico de token de um ID de token especificado. Qualquer usuário pode chamar esse método.
  @Validator(yup.string())
  public async getTokenHistory(tokenId: string) {
    await this.Ctx.Auth.checkAuthorization("TOKEN.getTokenHistory", "TOKEN");
    return await this.Ctx.Token.history(tokenId);
  }
Parâmetros:
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON que representa o histórico de tokens.
Exemplo de valor de retorno:

[
    {
        "trxId": "0d75f09446a60088afb948c6aca046e261fddcd43df416076201cdc5565f1a35",
        "timeStamp": "2023-09-01T16:48:41.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_desc": "updatedDesc",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    },
    {
        "trxId": "3666344878b043b65d5b821cc79c042ba52aec467618800df5cf14eac69f72fa",
        "timeStamp": "2023-08-31T20:24:55.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    }
]
getAllTokens
Este método retorna todos os tokens armazenados no banco de dados de estado. Esse método só pode ser chamado por um Token Admin ou um Org Admin do chaincode. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
@Validator()
public async getAllTokens() {
    await this.Ctx.Auth.checkAuthorization('TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.Token.getAllTokens();
}
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um objeto JSON que representa todos os ativos de token.
getTokensByName
Este método retorna todos os objetos de token com um nome especificado. Esse método só pode ser chamado por um Token Admin ou Org Admin do chaincode. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
@Validator(yup.string())
public async getTokensByName(token_name: string) {
    await this.Ctx.Auth.checkAuthorization('TOKEN.getTokensByName', 'TOKEN');
    return await this.Ctx.Token.getTokensByName(token_name);
}
Parâmetros:
  • token_name: string – O nome dos tokens a serem recuperados. O nome corresponde à propriedade token_name no arquivo de especificação. O valor é o nome da classe do token.
Retorna:
  • Em caso de sucesso, um objeto JSON de todos os ativos de token que correspondem ao nome.

Métodos para Gerenciamento de Contas

createAccount
Esse método cria uma conta para um usuário e token especificados. Uma conta deve ser criada para qualquer usuário que terá tokens a qualquer momento. As contas rastreiam saldos, saldos em retenção e histórico de transações. Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com oaccount~<token asset name>~ e seguido por um hash do nome de usuário ou do ID de e-mail (user_id) do proprietário da instância ou do usuário que está conectado à instância, o ID do provedor de serviços de associação (org_id) do usuário na organização de rede atual. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada.
  @Validator(yup.string(), yup.string(), yup.string())
  public async createAccount(org_id: string, user_id: string, token_type: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.createAccount", "TOKEN", { org_id });
    return await this.Ctx.Account.createAccount(org_id, user_id, token_type);
  }
Parâmetros:
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
  • token_type: string – O tipo do token, que deve ser fungible.
Retorna:
  • Com êxito, um objeto JSON da conta que foi criado. O parâmetro bapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de valor de retorno:
{
  "assetType": "oaccount",
  "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
  "bapAccountVersion": 0,
  "user_id": "admin",
  "org_id": "Org1MSP",
  "token_type": "fungible",
  "token_id": "",
  "token_name": "",
  "balance": 0,
  "onhold_balance": 0
}
associateTokenToAccount
Este método associa um token fungível a uma conta. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização relevante.
  @Validator(yup.string(), yup.string())
  public async associateTokenToAccount(account_id: string, token_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.associateToken", "TOKEN", { account_id });
    return await this.Ctx.Account.associateToken(account_id, token_id);
  }
Parâmetros:
  • account_id: string – O ID da conta.
  • token_id: string – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON da conta atualizada. O parâmetro bapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de valor de retorno:
{
    "assetType": "oaccount",
    "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
    "bapAccountVersion": 0,
    "user_id": "admin",
    "org_id": "Org1MSP",
    "token_type": "fungible",
    "token_id": "fungible",
    "token_name": "fiatmoneytok",
    "balance": 0,
    "onhold_balance": 0
}
getAccount
Este método retorna os detalhes da conta de um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode, um Org Admin da organização especificada ou o AccountOwner da conta.
@Validator(yup.string(), yup.string(), yup.string())
public async getAccount(token_id: string, org_id: string, user_id: string) {
  const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
  await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccount", "TOKEN", { account_id });
  return await this.Ctx.Account.getAccountWithStatus(account_id);
}
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de sucesso, um objeto de conta JSON que inclui as seguintes propriedades:
  • account_id – O ID da conta de usuário.
  • user_id – O nome do usuário ou o ID do e-mail do usuário.
  • org_id – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • token_id – O ID do token.
  • token_name – O nome do token.
  • balance – O saldo atual da conta.
  • onhold_balance – O saldo atual em retenção da conta.
  • bapAccountVersion – Um parâmetro de objeto de conta para uso interno.
  • status – O status atual da conta do usuário.
Exemplo de valor de retorno:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "user_id": "idcqa",
  "org_id": "appdev",
  "token_type": "fungible",
  "token_id": "t1",
  "token_name": "obptok",
  "balance": 0,
  "onhold_balance": 0
}
getAccountHistory
Este método retorna detalhes do histórico da conta de um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo AccountOwner da conta.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountHistory(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.history", "TOKEN", { account_id });
    return await this.Ctx.Account.history(account_id);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de sucesso, um array de objetos de conta JSON que inclui as seguintes propriedades:
  • trxId – O ID da transação conforme retornado pelo razão.
  • timeStamp – O horário da transação.
  • value – Uma string JSON do objeto de conta.
Exemplo de valor de retorno:
[
    {
      "trxId":"2gsdh17fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":100,
         "onhold_balance":0,
         "bapAccountVersion": 1
   },
   {
      "trxId":"9fd07fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":0,
         "onhold_balance":0,
         "bapAccountVersion": 0
      }
   }
]
getAccountOnHoldBalance
Este método retorna o saldo atual em retenção para uma conta e um token especificados. Esse método só pode ser chamado por um Token Admin do chaincode, um Org Admin da organização especificada ou o AccountOwner da conta.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountOnHoldBalance(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountOnHoldBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountOnHoldBalance(account_id);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Com sucesso, uma representação JSON do saldo atual em espera.
Exemplo de valor de retorno:
{"msg":"Total Holding Balance is: 0","holding_balance":0}
getAllAccounts
Esse método retorna uma lista de todas as contas. Este método pode ser chamado somente por um Token Admin do chaincode. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
@Validator()
public async getAllAccounts() {
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.Account.getAllAccounts();
}
Parâmetros:
  • nenhuma
Retorna:
  • Com sucesso, um array JSON de todas as contas.
getUserByAccountId
Esse método retorna detalhes do usuário (org_id e user_id) para uma conta especificada. Esse método pode ser chamado por qualquer usuário do chaincode.
@Validator(yup.string())
public async getUserByAccountId(account_id: string) {
    return await this.Ctx.Account.getUserByAccountId(account_id);
}
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, um objeto JSON dos detalhes do usuário (org_id, token_id e user_id).
Exemplo de valor de retorno:
{
    "token_id": "digiCurr101",
    "user_id": "user1",
    "org_id": "Org1MSP"
}
getAccountBalance
Esse método retorna o saldo atual de uma conta e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode, um Org Admin da organização especificada ou o AccountOwner da conta.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountBalance(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountBalance(account_id);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Com êxito, uma representação JSON do saldo da conta atual.
Exemplo de valor de retorno:
{"msg":"Current Balance is: 0","user_balance":0}
getAllOrgAccounts
Esse método retorna uma lista de todas as contas de token que pertencem a uma organização especificada. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada.
  @Validator(yup.string())
  public async getAllOrgAccounts(org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAllOrgAccounts", "TOKEN", { org_id });
    return await this.Ctx.Account.getAllOrgAccounts(org_id);
  }
Parâmetros:
  • org_id: string – O ID do prestador de serviço de associação (MSP) da organização.
Retorna:
  • Em caso de êxito, uma lista de todas as contas da organização especificada.
Exemplo de valor de retorno:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "user_id": "idcqa",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    },
    {
        "key": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
            "user_id": "example_minter",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    }
]

Métodos para Gerenciamento de Atribuições

addRole
Esse 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 ou por um Org Admin da organização especificada que também possui a atribuição especificada.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async addRole(token_id: string, role: string, org_id: string, user_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.addRoleMember", "TOKEN", { token_id, org_id, role });
    return await this.Ctx.Token.addRoleMember(role, account_id, token_asset);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser adicionada ao usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de êxito, uma mensagem com detalhes da conta.
Exemplo de valor de retorno:
{"msg":"Successfully added role 'minter' to Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
removeRole
Esse método remove uma atribuição de um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada que também possui a atribuição especificada.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async removeRole(token_id: string, role: string, org_id: string, user_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.removeRoleMember", "TOKEN", { token_id, org_id, role });
    return await this.Ctx.Token.removeRoleMember(role, account_id, token_asset);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser removida do usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de êxito, uma mensagem com detalhes da conta.
Exemplo de valor de retorno:
{"msg":"Successfully removed role 'minter' from Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Esse método retorna uma lista de todos os IDs de conta para uma atribuição e um token especificados. Este método pode ser chamado somente por um Token Admin do chaincode.
@Validator(yup.string(), yup.string())
public async getAccountsByRole(token_id: string, role: string) {
   await this.Ctx.Auth.checkAuthorization('ROLE.getAccountsByRole', 'TOKEN');
   return await this.Ctx.Role.getAccountsByRole(token_id, role);
}
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da função a ser pesquisada.
Retorna:
  • Com êxito, um array JSON de IDs de conta.
Exemplo de valor de retorno:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getAccountsByUser
Esse método retorna uma lista de todos os IDs de conta para um ID de organização e um ID de usuário especificados. Esse método só pode ser chamado pelo Token Admin do chaincode, pelo Org Admin da organização especificada ou pelo Account Owner especificado nos parâmetros.
  @Validator(yup.string(), yup.string())
  public async getAccountsByUser(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountsByUser", "TOKEN", { org_id, user_id });
    return await this.Ctx.Account.getAccountsByUser(org_id, user_id);
  }
Parâmetros:
  • org_id string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Com êxito, um array JSON de IDs de conta.
Exemplo de valor de retorno:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getUsersByRole
Esse método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Este método pode ser chamado somente por um Token Admin do chaincode.
@Validator(yup.string(), yup.string())
public async getUsersByRole(token_id: string, role: string) {
    await this.Ctx.Auth.checkAuthorization('ROLE.getUsersByRole', 'TOKEN');
    return await this.Ctx.Role.getUsersByRole(token_id, role);
}
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da função a ser pesquisada.
Retorna:
  • Em caso de sucesso, um array JSON dos objetos do usuário (org_id, token_id e user_id).
Exemplo de valor de retorno:
{"users":[{"token_id":"digiCurr101","user_id":"user1","org_id":"Org1MSP"}]}
isInRole
Esse método retorna um valor Booliano para indicar se um usuário e token têm uma atribuição especificada. Esse método só pode ser chamado por um Token Admin do chaincode, o AccountOwner da conta ou um Org Admin da organização especificada.
  @Validator(yup.string(), yup.string(), yup.string(), yup.string())
  public async isInRole(token_id: string, org_id: string, user_id: string, role: string) {
    const token_asset = await this.getTokenObject(token_id);
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.isInRole", "TOKEN", { account_id });
    return { result: await this.Ctx.Token.isInRole(role, account_id, token_asset) };
  }
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
  • role: string – O nome da função a ser pesquisada.
Retorna:
  • Em caso de sucesso, uma string JSON do resultado booliano.
Exemplo de valor de retorno:
{"result":"false"}
getOrgAccountsByRole
Esse método retorna informações sobre todas as contas que têm uma atribuição especificada em uma organização especificada. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada.
   @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgAccountsByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgAccountsByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgAccountsByRole(token_id, role, org_id);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do prestador de serviço de associação (MSP) da organização.
Retorna:
  • Em caso de êxito, uma lista de todas as contas com a atribuição especificada na organização especificada.
Exemplo de valor de retorno:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
getOrgUsersByRole
Esse método retorna informações sobre todos os usuários que têm uma atribuição especificada em uma organização especificada. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgUsersByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgUsersByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgUsersByRole(token_id, role, org_id);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do prestador de serviço de associação (MSP) da organização.
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários com a atribuição especificada na organização especificada.
Exemplo de valor de retorno:
{
    "users": [
        {
            "token_id": "token",
            "user_id": "admin",
            "org_id": "Org1MSP"
        },
        {
            "token_id": "token",
            "user_id": "orgAdmin",
            "org_id": "Org1MSP"
        }
    ]
}

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

getAccountTransactionHistory
Esse método retorna um array de detalhes do histórico de transações da conta para um usuário e token especificados. Esse método só pode ser chamado pelo Token Admin do chaincode, um Org Admin da organização especificada ou o AccountOwner da conta.
 @Validator(yup.string(), yup.string(), yup.string())
  public async getAccountTransactionHistory(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistory", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountTransactionHistory(account_id, org_id, user_id.toLowerCase());
  }
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de sucesso, um array de objetos de transação da conta JSON que inclui as seguintes propriedades:
  • transaction_id – O ID da transação.
  • transacted_account – A conta com a qual a transação ocorreu.
  • transaction_type – O tipo de transação.
  • transacted_amount – O valor da transação.
  • timestamp – O horário da transação.
  • balance – O saldo da conta no momento da transação.
  • onhold_balance – O saldo retido no momento da transação.
  • token_id – O ID do token.
  • holding_id – Um identificador exclusivo retornado pelo método holdTokens.
Exemplo de valor de retorno:
[
    {
        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
        "transacted_amount": 20,
        "timestamp": "2021-08-17T06:04:24.000Z",
        "balance": 930,
        "onhold_balance": 0,
        "token_id": "digiCurr101",
        "transaction_type": "BULKTRANSFER",
        "sub_transactions": [
            {
                "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "transaction_type": "DEBIT",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
                "transacted_amount": 10
            },
            {
                "transacted_account": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
                "transaction_type": "DEBIT",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
                "transacted_amount": 10
            }
        ]
    },
    {
        "transaction_id": "otransaction~757864d5369bd0539d044caeb3bb4898db310fd7aa740f45a9938771903d43da",
        "transacted_amount": 50,
        "timestamp": "2021-08-17T06:02:44.000Z",
        "balance": 950,
        "onhold_balance": 0,
        "token_id": "digiCurr101",
        "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
        "transaction_type": "DEBIT"
    }
]
getAccountTransactionHistoryWithFilters
Esse método retorna um array de detalhes do histórico de transações da conta para um usuário e token especificados. Esse método só pode ser chamado pelo Token Admin do chaincode, um Org Admin da organização especificada ou o AccountOwner da conta. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
  @Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())
  public async getAccountTransactionHistoryWithFilters(token_id: string, org_id: string, user_id: string, filters?: Filters) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFilters", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id, org_id, user_id.toLowerCase(), filters);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

ochain invoke GetAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
  {
    "transaction_id": "otransaction~672897b5a4fa78b421c000e4d6d4f71f3d46529bfbb5b4be10bf5471dc35ce89",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:46:04.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
    "transaction_type": "DEBIT",
    "balance": 90,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~467bb67a33aaffca4487f33dcd46c9844efdb5421a2e7b6aa2d53152eb2c6d85",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:45:47.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
    "transaction_type": "DEBIT",
    "balance": 95,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~c6d56ce54a9bbe24597d1d10448e39316dc6f16328bf3c5b0c8ef10e1dfeb397",
    "transacted_amount": 100,
    "timestamp": "2022-04-20T15:44:26.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~deb5fb0906c40506f6c2d00c573b774e01a53dd91499e651d92ac4778b6add6a",
    "transaction_type": "MINT",
    "balance": 100,
    "onhold_balance": 0
  }
]
getSubTransactionById
Esse método retorna um array de detalhes do histórico de transações da conta para um usuário e token especificados. Esse método só pode ser chamado pelo Token Admin do chaincode ou pelo AccountOwner da conta.
  @Validator(yup.string())
  public async getSubTransactionsById(transaction_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getSubTransactionsById", "TOKEN", { transaction_id });
    return await this.Ctx.Account.getSubTransactionsById(transaction_id);
  }
Parâmetros:
  • transaction_id: string – O ID da transação de transferência em lote.
Retorna:
  • Um array de objetos de subtransação de conta no formato JSON para um ID de transação de transferência em massa especificado.
Exemplo:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 80,
        "onhold_balance": 0
    },
    {
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 85,
        "onhold_balance": 0
    }
]
getSubTransactionsByIdWithFilters
Esse método retorna uma matriz de detalhes do histórico de subtransações de conta para uma transação especificada.
  @Validator(yup.string(), yup.object().nullable())
  public async getSubTransactionsByIdWithFilters(transaction_id: string, filters?: SubTransactionFilters) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getSubTransactionsByIdWithFilters", "TOKEN", { transaction_id });
    return await this.Ctx.Account.getSubTransactionsByIdWithFilters(transaction_id, filters);
  } 
Parâmetros:
  • transaction_id: string – O ID da transação.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Retorna:
  • Um array de objetos de subtransação de conta no formato JSON para um ID de transação de transferência em massa especificado.
Exemplo:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
  {
    "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:52:21.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
    "transaction_type": "DEBIT",
    "balance": 80,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 5,
    "timestamp": "2022-04-20T15:52:21.000Z",
    "token_id": "tokenId",
    "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
    "transaction_type": "DEBIT",
    "balance": 85,
    "onhold_balance": 0
  }
]
getTransactionById
Esse método retorna o histórico de um ativo Transaction.
@Validator(yup.string())
    public async getTransactionById(transaction_id: string) {
        return await this.Ctx.Transaction.getTransactionById(transaction_id);
    }
Parâmetros:
  • transaction_id string – O ID do ativo da transação.
Retorna:
  • Com sucesso, um array JSON do histórico da transação.
Exemplo de valor de retorno:
{
    "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
    "history": [
        {
            "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
            "timeStamp": 1629180264,
            "value": {
                "assetType": "otransaction",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                "token_id": "digiCurr101",
                "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                "to_account_id": "",
                "transaction_type": "BULKTRANSFER",
                "amount": 20,
                "timestamp": "2021-08-17T06:04:24.000Z",
                "number_of_sub_transactions": 2,
                "holding_id": ""
            }
        }
    ],
    "sub_transactions": [
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        },
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        }
    ]
}
deleteHistoricalTransactions
Esse método exclui transações mais antigas do banco de dados de estado.
@Validator(yup.date())
    public async deleteHistoricalTransactions(time_to_expiration: Date) {
        await this.Ctx.Auth.checkAuthorization('TRANSACTION.deleteTransactions', 'TOKEN');
        return await this.Ctx.Transaction.deleteTransactions(time_to_expiration);
    }
Parâmetros:
  • time_to_expiration Date – Um timestamp que indica quando excluir transações. Os ativos de transação anteriores ao horário especificado serão excluídos.
Exemplo de valor de retorno:
"payload": {
    "msg": "Successfuly deleted transaction older than date: Thu Aug 19 2021 11:19:36 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
        "otransaction~ec3366dd48b4ce2838f820f2f138648e6e55a07226713e59b411ff31b0d21058"
    ]
}

Métodos para Gerenciamento do Comportamento de Token - Comportamento Mínimo

issueTokens
Esse método mina tokens, que pertencem ao chamador do método. O chamador deve ter uma conta e a função de mineiro. O número de tokens que podem ser cunhados é limitado pela propriedade max_mint_quantity do comportamento mintable no arquivo de especificação. Se a propriedade max_mint_quantity não for especificada, um número ilimitado de tokens poderá ser cunhado. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método só pode ser chamado pelo AccountOwner da conta com a atribuição de minter.
@Validator(yup.string(), yup.number().positive())
public async issueTokens(token_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.mint(quantity, token_asset);
}
Parâmetros:
  • token_id: string – O ID do token.
  • quantity – O número de tokens a serem cunhados.
Retorna:
  • Em caso de êxito, uma mensagem com detalhes da conta.
Exemplo de valor de retorno:
{
    "msg": "Successfully minted 1000 tokens to Account Id: \
oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: user1)  ",
}
getTotalMintedTokens
Este método retorna o número total de tokens cunhados para um token especificado. Esse método só pode ser chamado por um Token Admin ou qualquer Org Admin do chaincode.
@Validator(yup.string())
 public async getTotalMintedTokens(token_id: string) {
     const token_asset = await this.getTokenObject(token_id);
     await this.Ctx.Auth.checkAuthorization('TOKEN.getTotalMintedTokens', 'TOKEN');
     const totalMintedTokens = await this.Ctx.Token.getTotalMintedTokens(token_asset);
     return {
         msg: `Total minted token for Token Id: ${token_id} is ${totalMintedTokens} tokens.`,
         quantity: totalMintedTokens
     };
 }
Parâmetros:
  • token_id: string – O ID do token.
Retorna:
  • Em caso de sucesso, uma string JSON indicando o número total de tokens.
Exemplo de valor de retorno:
{"msg":"Total minted token for Token Id: digiCurr101 is 100 tokens.","quantity":100}
getNetTokens
Este método retorna o número líquido total de tokens disponíveis no sistema para um token especificado. O total do token líquido é a quantidade de tokens restantes depois que os tokens são queimados. Em forma de equação: tokens líquidos = total de tokens cunhados - total de tokens queimados. Se nenhum token for gravado, o número de tokens líquidos será igual ao total de tokens cunhados. Esse método só pode ser chamado por um Token Admin ou qualquer Org Admin do chaincode.
@Validator(yup.string())
public async getNetTokens(token_id: string) {
	const token_asset = await this.getTokenObject(token_id);
	await this.Ctx.Auth.checkAuthorization('TOKEN.getNetTokens', 'TOKEN');
	const netTokens = await this.Ctx.Token.getNetTokens(token_asset);
	return {
		msg: `Net supply of token for Token Id: ${token_id} is ${netTokens} tokens.`,
		quantity: netTokens
	};
}
Parâmetros:
  • token_id: string – O ID do token.
Retorna:
  • Em caso de sucesso, uma string JSON indicando o número líquido de tokens.
Exemplo de valor de retorno:
{"msg":"Net supply of token for Token Id: digiCurr101 is 0 tokens.","quantity":0}

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

transferTokens
Este método transfere tokens do chamador para uma conta especificada. O chamador do método deve ter uma conta. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método só pode ser chamado pelo AccountOwner da conta.
@Validator(yup.string(), yup.string(), yup.string(), yup.number().positive())
public async transferTokens(token_id: string, to_org_id: string, to_user_id: string, quantity: number) {
   const token_asset = await this.getTokenObject(token_id);
   const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
   return await this.Ctx.Token.transfer(to_account_id, quantity, token_asset);
}
Parâmetros:
  • token_id: string – O ID do token.
  • to_org_id: string – O ID do prestador de serviço de associação (MSP) do destinatário (favorecido) na organização atual.
  • to_user_id: string – O nome do usuário ou o ID do e-mail do destinatário.
  • quantity: number – O número de tokens a serem transferidos.
Retorna:
  • Em caso de êxito, uma mensagem com detalhes das contas do pagador e do favorecido.
Exemplo de valor de retorno:
{
    "msg": "Successfully transferred 400 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: user1) to account id: oaccount~digicur~682bb71de419602af74e3f226345ef308445ca51010737900c112435f676152df (Org-Id: Org1MSP, User-Id: user2) ",
}
bulkTransferTokens
Este método é usado para executar a transferência em massa de tokens da conta do chamador para as contas especificadas no objeto flow. As quantidades devem estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no chamador de especificação file.The desse método deve ter uma conta já criada. Esse método só pode ser chamado pelo AccountOwner da conta.
@Validator(yup.string(), yup.array().of(yup.object()))
public async bulkTransferTokens(token_id: string, flow: object[]) {
     const token_asset = await this.getTokenObject(token_id);
     return await this.Ctx.Token.bulkTransfer(flow, token_asset);
}
Parâmetros:
  • token_id: string – O ID do token.
  • flow : object[] – Um array de objetos JSON que especificam receptores e quantidades.
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
    • to_orgId: string – O ID do prestador de serviço de associação (MSP) do destinatário na organização atual.
    • userId: string – O nome do usuário ou o ID do e-mail do destinatário.
    • quantity: number – O número de tokens a serem transferidos.
Retorna:
  • Uma mensagem indicando sucesso.
Exemplo de valor de retorno:
{
    "msg": "Successfully transferred 20 tokens from Account Id           'oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df' (Org-Id: Org1MSP, User-Id: admin).",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "sub_transactions": [
        {
            "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
            "amount": 10
        },
        {
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
            "amount": 10
        }
    ]
}

Métodos para Gerenciamento do Comportamento de Token - Comportamento Holdable

holdTokens
Este método cria uma retenção em nome do proprietário dos tokens com a conta to_account_id. Uma conta notarial é especificada, que é responsável por concluir ou liberar a retenção. Quando a retenção é criada, o saldo de token especificado do pagador é colocado em retenção. Um saldo retido não pode ser transferido até que a retenção seja concluída ou liberada. O chamador desse método deve ter uma conta já criada. Esse método só pode ser chamado pelo AccountOwner da conta.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date())
public async holdTokens(
    token_id: string,
    operation_id: string,
    to_org_id: string,
    to_user_id: string,
    notary_org_id: string,
    notary_user_id: string,
    quantity: number,
    time_to_expiration: Date
) {
    const token_asset = await this.getTokenObject(token_id);
    const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
    const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
    return await this.Ctx.Token.hold(operation_id, to_account_id, notary_account_id, quantity, time_to_expiration, token_asset);
}
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
  • to_org_id: string – O ID do prestador de serviço de associação (MSP) do destinatário na organização atual.
  • to_user_id: string – O nome do usuário ou o ID do e-mail do destinatário.
  • notary_org_id: string – O ID do prestador de serviços de associação (MSP) do notário na organização atual.
  • notary_user_id: string – O nome de usuário ou o ID de e-mail do notário.
  • quantity: number – O número de tokens a serem colocados em espera.
  • time_to_expiration – O horário em que a retenção expira. Especifique 0 para uma retenção permanente. Caso contrário, use o formato RFC-3339. Por exemplo, 2021-06-02T12:46:06Z.
Retorna:
  • Em caso de êxito, uma mensagem com a conta do chamador e os detalhes da retenção.
Exemplo de valor de retorno:
{
  "msg":"AccountId oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP , User-Id: admin) is   successfully holding 10 tokens"
}
executeHoldTokens
Este método conclui uma retenção em um token. Uma quantidade de tokens mantida anteriormente por um proprietário de token é transferida para um receptor. Se o valor quantity for menor que o valor de retenção real, o valor restante estará disponível novamente para o proprietário original dos tokens. Esse método só pode ser chamado pelo ID AccountOwner com a atribuição notary para o ID de operação especificado. A retenção só pode ser concluída pelo notário.
@Validator(yup.string(), yup.string(), yup.number().positive())
public async executeHoldTokens(token_id: string, operation_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.executeHold(operation_id, quantity, token_asset);
}
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
  • quantity: number – O número de tokens em espera a serem transferidos.
Retorna:
  • Em caso de êxito, uma mensagem com o ID da conta do chamador e a quantidade da transação.
Exemplo de valor de retorno:
{
 "msg":"Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin) is successfully executed '10' tokens from Operation Id 'opr_121'."
}
releaseHoldTokens
Este método libera uma retenção de tokens. A transferência não está concluída e todos os tokens retidos estão disponíveis novamente para o proprietário original. Esse método pode ser chamado pelo ID AccountOwner com a atribuição notary dentro do limite de tempo especificado ou pelo pagador, favorecido ou notário após o limite de tempo especificado.
@Validator(yup.string(), yup.string())
public async releaseHoldTokens(token_id: string, operation_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.releaseHold(operation_id, token_asset);
}
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, uma mensagem indicando que a retenção foi liberada.
Exemplo de valor de retorno:
{
 "msg":"Successfully released '10' tokens from Operation Id 'opr_121' to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: user1)."
}
getOnHoldIds
Esse método retorna uma lista de todos os IDs suspensos de uma conta especificada. Esse método pode ser chamado por um Token Admin do chaincode, um Org Admin da organização especificada ou o AccountOwner da conta.
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOnHoldIds(token_id: string, org_id: string, user_id: string) {
    const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getOnHoldIds", "TOKEN", { account_id });
    return await this.Ctx.Account.getOnHoldIds(account_id);
  }
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma lista JSON de IDs de retenção.
Exemplo de valor de retorno:
{"msg":"Holding Ids are: ohold~digicur~digiCurr101~opr_121","holding_ids":["ohold~digicur~digiCurr101~opr_121"]}
getOnHoldDetailsWithOperationId
Este método retorna os detalhes da transação em espera para um ID de operação e token especificados. Este método pode ser chamado por qualquer pessoa.
@Validator(yup.string(), yup.string())
public async getOnHoldDetailsWithOperationId(token_id: string, operation_id: string) {
    return await this.Ctx.Hold.getOnHoldDetailsWithOperationId(token_id, operation_id);
}
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, um objeto de retenção JSON que inclui as seguintes propriedades:
  • holding_id – O ID de retenção da transação.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
  • from_account_id – O ID da conta do proprietário atual dos tokens em espera.
  • to_account_id – O ID da conta do destinatário.
  • notary_account_id – O ID da conta do notário.
  • token_id: string – O ID do token salvo.
  • quantity – A quantidade de tokens que estão em retenção para o ID de retenção.
  • time_to_expiration – A duração até que a retenção expire.
Exemplo de valor de retorno:
{
    "assetType": "ohold",
    "holding_id": "ohold~digicur~digiCurr101~opr_121",
    "operation_id": "opr_121",
    "token_name": "digicur",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "notary_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "token_id": "digiCurr101",
    "quantity": 10,
    "time_to_expiration": "2022-08-01T18:30:00.000Z"
}
getOnHoldBalanceWithOperationId
Este método retorna o saldo retido de um ID de operação e token especificados. Este método pode ser chamado por qualquer pessoa.
@Validator(yup.string(), yup.string())
public async getOnHoldBalanceWithOperationId(token_id: string, operation_id: string) {
    return await this.Ctx.Hold.getOnHoldBalanceWithOperationId(token_id, operation_id);
}
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, uma string JSON indicando o saldo de retenção.
Exemplo de valor de retorno:
{
	"msg": "Current Holding Balance of Operation 'opr_121' for token 'digiCurr101' is: 10",
	"holding_balance": 10
}

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

burnTokens
Este método desativa ou queima tokens da conta do chamador da transação. O chamador desse método deve ter uma conta e a função de gravador. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método pode ser chamado pelo AccountOwner da conta com a atribuição de gravador.
@Validator(yup.string(), yup.number().positive())
public async burnTokens(token_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Token.burn(quantity, token_asset);
}
Parâmetros:
  • token_id: string – O ID do token.
  • quantity – O número de tokens a serem gravados.
Retorna:
  • Em caso de êxito, uma mensagem de êxito com a quantidade de tokens gravados e o ID da conta.
Exemplo de valor de retorno:
{
    "msg": "Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}

Métodos Personalizados

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

Para evitar gastos duplos, não combine várias funções assíncronas que operam nos mesmos pares de chave/valor no banco de dados de estado. Em vez disso, use o método bulkTransferTokens para fazer várias transferências em um método.

O exemplo a seguir mostra como usar métodos SDK de token em métodos personalizados. Quando o método buyTicket é chamado, ele transfere 20 tokens da conta do chamador para a conta do vendedor e retorna a mensagem de transação da transferência.

@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async buyTicket(token_id: string, seller_org_id: string, seller_user_id: string) {
	const token = await this.getTokenObject(token_id);

	/**
	* The following method this.Ctx.Account.generateAccountId(token_id, seller_org_id, seller_user_id) generates account id of the seller.
	*/
	const seller_account_id = await this.Ctx.Account.generateAccountId(token_id, seller_org_id, seller_user_id);

	/**
	* The following method this.Ctx.Token.transfer(seller_account_id, 20, token) transfers the quantity 20 from caller's
	* account & to seller's account.
	*/
	const transaction = await this.Ctx.Token.transfer(seller_account_id, 20, token);

	return transaction;
}

Se você usar mais de um método SDK de token em um método personalizado, não use métodos que afetarão os mesmos pares de chave/valor no banco de dados de estado. O exemplo a seguir mostra a maneira incorreta de fazer várias transferências:

@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async sendTokens(token_id: string, user1_org_id: string, user1_user_id: string, user2_org_id: string, user2_user_id: string) {
    const token = await this.getTokenObject(token_id);
    const user1_account_id = await Account.generateAccountId(token_id, user1_org_id, user1_user_id);
    const user2_account_id = await Account.generateAccountId(token_id, user2_org_id, user2_user_id);
    await token.transfer(user1_account_id, 20);
    await token.transfer(user2_account_id, 30);
}

Em vez disso, use o método bulkTransferTokens para transferir para várias contas da conta do chamador, conforme mostrado no trecho de código a seguir.

bulkTransferTokens(token_id: string, flow: object[])

Observação:

Se você usar mais de um método SDK de token em um método personalizado que possa afetar os mesmos pares de chave/valor no banco de dados de estado, ative a otimização MVCC para códigos de cadeia de token. Para obter mais informações, consulte Otimização MVCC.

Métodos SDK de Token

Métodos para Gerenciamento de Controle de Acesso

O token SDK fornece uma função de controle de acesso. Alguns métodos só podem ser chamados por um Token Admin, Org Admin ou AccountOwner do token. Você pode usar esse recurso para garantir que as operações sejam executadas apenas pelos usuários desejados. Qualquer acesso não autorizado resulta em erro. Para usar a função de controle de acesso, importe a classe Authorization do módulo ../lib/auth.
import { Authorization } from '../lib/auth';
addAdmin
Esse método adiciona um usuário como Token Admin do chaincode do token.
Ctx.Admin.addAdmin(org_id: string, user_id: string)
Parâmetros:
  • user_id – O nome do usuário ou o ID do e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com um objeto JSON que lista detalhes do usuário adicionado como Token Admin do chaincode de token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "msg": "Successfully added Admin (Org_Id: Org1MSP, User_Id: user1)"
}
removeAdmin
Esse método remove um usuário como Token Admin do chaincode do token.
Ctx.Admin.removeAdmin(org_id: string, user_id: string)
Parâmetros:
  • user_id – O nome do usuário ou o ID do e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com um objeto JSON que lista detalhes para o usuário que não é mais um Token Admin do chaincode de token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: user1)"
}
getAllAdmins
Esse método retorna uma lista de todos os usuários que são um Token Admin do chaincode do token.
Ctx.Admin.getAllAdmins()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que lista detalhes de todos os usuários que são um Token Admin do chaincode de token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "admins": [
        {
            "orgId": "Org1MSP",
            "userId": "admin"
        }
    ]
}
checkAuthorization
Use esse método para adicionar uma verificação de controle de acesso a uma operação. Determinados métodos de token só podem ser executados por um Token Admin ou AccountOwner do token ou pelo MultipleAccountOwner para usuários com várias contas. O mapeamento do 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 de controlador gerados automaticamente e métodos personalizados.
export const TOKENACCESS = {
  ADMIN: {
    isUserTokenAdmin: ["Admin", "OrgAdmin"],
    addTokenAdmin: ["Admin"],
    removeTokenAdmin: ["Admin"],
    getAllAdmins: ["Admin", "OrgAdmin"],
    addOrgAdmin: ["Admin", "OrgAdminForOrgId"],
    removeOrgAdmin: ["Admin", "OrgAdminForOrgId"],
    getOrgAdmins: ["Admin", "OrgAdmin"],
  },
  TOKEN: {
    save: ["Admin"],
    getAllTokens: ["Admin", "OrgAdmin"],
    get: ["Admin", "OrgAdmin"],
    update: ["Admin"],
    getDecimals: ["Admin", "OrgAdmin"],
    getTokensByName: ["Admin", "OrgAdmin"],
    addRoleMember: ["Admin", "OrgAdminRoleCheck"],
    removeRoleMember: ["Admin", "OrgAdminRoleCheck"],
    isInRole: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getTotalMintedTokens: ["Admin", "OrgAdmin"],
    getNetTokens: ["Admin", "OrgAdmin"],
    getTokenHistory: ["Admin", "OrgAdmin"],
  },
  ROLE: {
    getAccountsByRole: ["Admin"],
    getOrgAccountsByRole: ["Admin", "OrgAdminForOrgId"],
    getUsersByRole: ["Admin"],
    getOrgUsersByRole: ["Admin", "OrgAdminForOrgId"],
  },
  TRANSACTION: {
    deleteTransactions: ["Admin"],
  },ACCOUNT: {
    createAccount: ["Admin", "OrgAdminForOrgId"],
    associateToken: ["Admin", "OrgAdminForAccountId"],
    getAllAccounts: ["Admin"],
    getAllOrgAccounts: ["Admin", "OrgAdminForOrgId"],
    getAccountsByUser: ["Admin", "OrgAdminForOrgId", "MultipleAccountOwner"],
    getAccount: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    history: ["Admin", "AccountOwner"],
    getAccountTransactionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getAccountTransactionHistoryWithFilters: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getSubTransactionsById: ["Admin", "TransactionInvoker"],
    getSubTransactionsByIdWithFilters: ["Admin", "TransactionInvoker"],
    getAccountBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getAccountOnHoldBalance: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getOnHoldIds: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    getConversionHistory: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
  },
  ACCOUNT_STATUS: {
    get: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    history: ["Admin", "OrgAdminForAccountId", "AccountOwner"],
    activateAccount: ["Admin", "OrgAdminForOrgId"],
    suspendAccount: ["Admin", "OrgAdminForOrgId"],
    deleteAccount: ["Admin", "OrgAdminForOrgId"],
  },
  TOKEN_CONVERSION: {
    initializeExchangePoolUser: ["Admin"],
    addConversionRate: ["Admin"],
    updateConversionRate: ["Admin"],
    getConversionRate: ["Admin", "OrgAdmin", "AnyAccountOwner"],
    getConversionRateHistory: ["Admin", "OrgAdmin", "AnyAccountOwner"],
    tokenConversion: ["Admin", "AnyAccountOwner"],
    getExchangePoolUser: ["Admin"],
  },
}
await this.Ctx.Auth.checkAuthorization(<parameters>);
Parâmetros:
  • classFuncName: string – O valor de mapa entre a classe e os métodos, conforme descrito no arquivo ../lib/constant.ts.
  • ...args – Um argumento de variável em que args[0] usa a constante 'TOKEN' e args[1] usa account_id para adicionar uma verificação de controle de acesso para um AccountOwner. Para adicionar uma verificação de controle de acesso para um MultipleAccountOwner, args[1] usa org_id e args[2] usa user_id.
Retorna:
  • Sobre o sucesso, uma promessa. Em caso de erro, uma rejeição com uma mensagem de erro.
isUserTokenAdmin
Esse método retornará o valor booliano true se o chamador da função for Token Admin. Caso contrário, o método retornará false.
Ctx.Auth.isUserTokenAdmin()
Parâmetros:
  • user_id – O nome do usuário ou o ID do e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Uma resposta booleana e uma mensagem de erro se um erro for encontrado.
addOrgAdmin
Esse método adiciona um usuário como um Org Admin da organização.
Ctx.Admin.addOrgAdmin(org_id, user_id)
Parâmetros:
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como um Org Admin da organização.
Exemplo de valor de retorno:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
Este método remove um usuário como um Org Admin da organização.
Ctx.Admin.removeOrgAdmin(org_id, user_id)
Parâmetros:
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Em caso de êxito, uma mensagem que inclui detalhes do usuário que foi removido como um Org Admin da organização.
Exemplo de valor de retorno:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
getOrgAdmins
Esse método retorna uma lista de todos os usuários que são um Org Admin de uma organização.
Ctx.Admin.getAllOrgAdmins()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um array no formato JSON que contém objetos orgId e userId.
Exemplo de valor de retorno:
{
    "admins": [
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin1"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin2"
        }
    ]
}

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

getTokenDecimals
Esse método retorna o número de casas decimais disponíveis para um token fracionário. Se o comportamento divisible não for especificado, o valor padrão será 0.
Ctx.Token.getTokenDecimals(token_id: string)
Parâmetros:
  • token_id: string – O ID do token.
Retorna:
  • Em caso de sucesso, as casas decimais do token, no tipo de dados de número. Em caso de erro, ele retorna com uma mensagem de erro.
Exemplo de valor de retorno:
1
getAllTokens
Este método retorna todos os ativos de token salvos no banco de dados de estado. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.Token.getAllTokens()
Parâmetros:
  • nenhuma
Retorna:
  • No sucesso, ele retorna uma promessa com todos os ativos de token. Em caso de erro, ele retorna uma mensagem de erro.
Exemplo de valor de retorno:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
        "payload": [
            {
                "key": "token1",
                "valueJson": {
                    "assetType": "otoken",
                    "token_id": "token1",
                    "token_name": "vtok",
                    "token_type": "fungible",
                    "behaviours": [
                        "divisible",
                        "mintable",
                        "transferable",
                        "burnable",
                        "holdable",
                        "roles"
                    ],
                    "roles": {
                        "burner_role_name": "burner",
                        "notary_role_name": "notary"
                    },
                    "mintable": {
                        "max_mint_quantity": 0
                    },
                    "divisible": {
                        "decimal": 1
                    }
                }
            }
        ],
        "encode": "JSON"
    }
}
getTokensByName
Este método retorna todos os ativos de token com o nome especificado. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.Token.getTokensByName(token_name: string)
Parâmetros:
  • token_name: string – O nome do token, que corresponde à propriedade Token_name do modelo. O valor é o nome da classe do token.
Retorna:
  • Ele retorna um array de todos os ativos de token do nome especificado, no formato JSON.
Exemplo de valor de retorno:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "98e0a0a115803d25b843d630e6b23c435a192a03eb0a301fc9375f05da49a8b2",
        "payload": [
            {
                "key": "token1",
                "valueJson": {
                    "assetType": "otoken",
                    "token_id": "token1",
                    "token_name": "vtok",
                    "token_type": "fungible",
                    "behaviours": [
                        "divisible",
                        "mintable",
                        "transferable",
                        "burnable",
                        "holdable",
                        "roles"
                    ],
                    "roles": {
                        "burner_role_name": "burner",
                        "notary_role_name": "notary"
                    },
                    "mintable": {
                        "max_mint_quantity": 0
                    },
                    "divisible": {
                        "decimal": 1
                    }
                }
            }
        ],
        "encode": "JSON"
    }
}
get
Esse método retornará um objeto de token se ele estiver presente no banco de dados de estado.
Ctx.Token.get(token_id: string)
Parâmetros:
  • token_id: string – O ID do token a ser retornado.
Retorna:
  • Com sucesso, uma promessa com a representação JSON do token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "assetType": "otoken",
    "token_id": "token1",
    "token_name": "account",
    "token_desc": "Token 1",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "holdable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter",
        "burner_role_name": "burner",
        "notary_role_name": "notary"
    },
    "mintable": {
        "max_mint_quantity": 20000
    },
    "divisible": {
        "decimal": 1
    },
    "token_to_currency_ratio": 2,
    "currency_representation": "EURO"
}
isTokenType
Este método indica se existe um ativo de token com o ID especificado.
Ctx.Token.isTokenType(token_id: string)
Parâmetros:
  • token_id: string – O ID do token a ser verificado.
Retorna:
  • Em caso de sucesso, uma promessa com verdadeiro se existir um ativo de token com o ID especificado. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
true
save
Este método cria um token e salva suas propriedades no banco de dados de estado.
Ctx.Token.save(token: <Instance of Token Class>,extraMetadata?:any)
Parâmetros:
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com detalhes do token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
   "assetType":"otoken",
   "token_id":"digiCurr101",
   "token_name":"digicur",
   "token_type":"fungible",
   "behaviors":[
      "divisible",
      "mintable",
      "transferable",
      "burnable",
      "roles"
   ],
   "roles":{
      "minter_role_name":"minter"
   },
   "mintable":{
      "max_mint_quantity":1000
   },
   "divisible":{
      "decimal":2
   },
   "currency_name":"DOLLAR",
   "token_to_currency_ratio":1
}
update
Este método atualiza as propriedades do token. Depois que um ativo de token for criado, você atualizará apenas o valor token_desc e suas propriedades personalizadas.
Ctx.Token.update(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com detalhes do token. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
   "assetType":"otoken",
   "token_id":"digiCurr101",
   "token_name":"digicur",
   "token_desc":"Digital Currency equiv of dollar",
   "token_type":"fungible",
   "behaviors":[
      "divisible",
      "mintable",
      "transferable",
      "burnable",
      "roles"
   ],
   "roles":{
      "minter_role_name":"minter"
   },
   "mintable":{
      "max_mint_quantity":1000
   },
   "divisible":{
      "decimal":2
   },
   "currency_name":"DOLLAR",
   "token_to_currency_ratio":1
}
getByRange
Esse método chama o método getStateByRange da malha internamente. Mesmo que qualquer ativo com o ID fornecido seja retornado do razão, esse método converte o ativo no tipo de Ativo chamador.
<Token ClassCtx.Token.getByRange(start_token_id: string, end_token_id: string, token_class_reference?: <Instance of Token Class> )
Parâmetros:
  • startId: string – A chave inicial do intervalo. Esta chave está incluída no intervalo.
  • endId: string – A chave final do intervalo. Esta chave foi excluída do intervalo.
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, uma promessa com um array de <Token Class>. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo:
@validator(yup.string(), yup.string())
public async getDigiCurrGetByRange(start_token_id: string, end_token_id: string) {
   return await this.Ctx.Token.getByRange(start_token_id, end_token_id, DigiCurr);
}
Exemplo de valor de retorno:
[
    {
        "assetType": "otoken",
        "token_id": "token1",
        "token_name": "digicur",
        "token_desc": "Token 1",
        "token_type": "fungible",
        "behaviors": [
            "divisible",
            "mintable",
            "transferable",
            "burnable",
            "holdable",
            "roles"
        ],
        "roles": {
            "minter_role_name": "minter",
            "burner_role_name": "burner",
            "notary_role_name": "notary"
        },
        "mintable": {
            "max_mint_quantity": 20000
        },
        "divisible": {
            "decimal": 0
        },
        "token_to_currency_ratio": 1.5,
        "currency_representation": "USD"
    },
    {
        "assetType": "otoken",
        "token_id": "token2",
        "token_name": "digicur",
        "token_desc": "Token2",
        "token_type": "fungible",
        "behaviors": [
            "divisible",
            "mintable",
            "transferable",
            "burnable",
            "holdable",
            "roles"
        ],
        "roles": {
            "minter_role_name": "minter",
            "burner_role_name": "burner",
            "notary_role_name": "notary"
        },
        "mintable": {
            "max_mint_quantity": 20000
        },
        "divisible": {
            "decimal": 0
        },
        "token_to_currency_ratio": 1,
        "currency_representation": "EURO"
    }
]
history
Este método retorna o histórico do token especificado.
Ctx.Token.history(tokenId)
Parâmetros:
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, uma promessa com um array dos detalhes do histórico da conta para o token especificado. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
[
    {
        "trxId": "0d75f09446a60088afb948c6aca046e261fddcd43df416076201cdc5565f1a35",
        "timeStamp": "2023-09-01T16:48:41.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_desc": "updatedDesc",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    },
    {
        "trxId": "3666344878b043b65d5b821cc79c042ba52aec467618800df5cf14eac69f72fa",
        "timeStamp": "2023-08-31T20:24:55.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    }
]

Métodos para Gerenciamento de Contas

getCallerAccountId
Este método retorna o ID da conta do chamador.
Ctx.Account.getCallerAccountId(token_id: string)
Parâmetros:
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, uma promessa com o ID da conta do chamador. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
generateAccountId
Esse método retorna um ID de conta, que é um conjunto alfanumérico de caracteres, prefixado com oaccount~<token asset name>~ e seguido por um hash do nome de usuário ou ID de e-mail (user_id) do proprietário da instância ou do usuário que fez log-in na instância, o ID do provedor de serviço de associação (org_id) do usuário na organização de rede atual e o ID de token exclusivo (token_id).
Ctx.Account.generateAccountId(token_id: string, org_id: string, user_id: string)
Parâmetros:
  • tokenId: string – O ID do token.
  • orgId: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • userId: string – O nome de usuário ou o ID de e-mail do usuário.
Retorna:
  • Em caso de êxito, uma promessa com o ID da conta gerado. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
createAccount
Esse método cria uma conta para um usuário e token especificados. Todo usuário que tiver tokens a qualquer momento deve ter uma conta. As contas rastreiam o saldo de um usuário, o saldo em espera e o histórico de transações. Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com oaccount~<token asset name>~ e seguido por um hash do nome de usuário ou do ID de e-mail (user_id) do proprietário da instância ou do usuário que está conectado à instância, o ID do provedor de serviços de associação (org_id) do usuário na organização de rede atual. Esse método só pode ser chamado pelo Token Admin do chaincode ou por um Org Admin da organização especificada.
this.Ctx.Account.createAccount(org_id: string, user_id: string, token_type: string)
Parâmetros:
  • org_id: string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome do usuário ou o ID do e-mail do usuário.
  • token_type: string – O tipo do token, que deve ser fungible.
Retorna:
  • Em caso de sucesso, o novo objeto de conta no formato JSON.
Exemplo de valor de retorno:
{
  "assetType": "oaccount",
  "bapAccountVersion": 0,
  "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
  "user_id": "admin",
  "org_id": "Org1MSP",
  "token_type": "fungible",
  "token_id": "",
  "token_name": "",
  "balance": 0,
  "onhold_balance": 0
}
associateTokenToAccount
Este método associa um token fungível a uma conta. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização relevante.
async associateTokenToAccount(account_id: string, token_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
  • token_id: string – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON da conta atualizada.
Exemplo de valor de retorno:
{
    "assetType": "oaccount",
    "bapAccountVersion": 0,
    "account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
    "user_id": "admin",
    "org_id": "Org1MSP",
    "token_type": "fungible",
    "token_id": "fungible",
    "token_name": "fiatmoneytok",
    "balance": 0,
    "onhold_balance": 0
}
getAccountWithStatus
Este método retorna detalhes da conta de uma conta especificada, incluindo o status da conta.
Ctx.Account.getAccountWithStatus(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, uma promessa com os detalhes da conta. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
  "bapAccountVersion": 0,
  "assetType": "oaccount",
  "status": "active",
  "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "user_id": "idcqa",
  "org_id": "appdev",
  "token_type": "fungible",
  "token_id": "t1",
  "token_name": "obptok",
  "balance": 0,
  "onhold_balance": 0
}
getAccount
Este método retorna detalhes da conta de uma conta especificada.
Ctx.Account.getAccount(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, uma promessa com os detalhes da conta. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
   "assetType":"oaccount",
   "bapAccountVersion": 0,
   "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
   "user_id":"user1",
   "org_id":"Org1MSP",
   "token_id":"digiCurr101",
   "token_name":"digicur",
   "balance":0,
   "onhold_balance":0
}
history
Esse método retorna uma matriz dos detalhes do histórico da conta de uma conta especificada.
Ctx.Account.history(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, uma promessa com o array de detalhes do histórico da conta. Em caso de erro, uma rejeição com uma mensagem de erro. O valor de retorno é igual ao método "getAccountHistory".
Exemplo de valor de retorno:
[
    {
      "trxId":"2gsdh17fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":100,
         "onhold_balance":0,
         "bapAccountVersion": 1
   },
   {
      "trxId":"9fd07fff222467e5667be042e33ce18e804b3e065cca15de306f837e416d7c3e",
      "timeStamp":1629718288,
      "value":{
         "assetType":"oaccount",
         "account_id":"oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
         "user_id":"user1",
         "org_id":"Org1MSP",
         "token_id":"digiCurr101",
         "token_name":"digicur",
         "balance":0,
         "onhold_balance":0,
         "bapAccountVersion": 0
      }
   }
]
getAccountOnHoldBalance
Este método retorna o saldo retido de uma conta especificada.
Ctx.Account.getAccountOnHoldBalance(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que mostra o saldo em espera da conta especificada. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
   "holding_balance":0,
   "msg":"Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
getAllAccounts
Esse método retorna uma lista de todas as contas. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.Account.getAllAccounts()
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que lista todas as contas. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
[
           {
               "key": "oaccount~digicur~2e2ef3375ae347cbd7b4d3d7be5cece803f9c36a184aaf2b8d332c5d2dcead52",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~2e2ef3375ae347cbd7b4d3d7be5cece803f9c36a184aaf2b8d332c5d2dcead52",
                   "user_id": "admin",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "bapAccountVersion": 0,
                   "balance": 0,
                   "onhold_balance": 0
               }
           },
           {
               "key": "oaccount~digicur~30080c7e5ba94035af57fbbccbbb495e92515e4b2b3dbcd476eb1c0343e4da65",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~30080c7e5ba94035af57fbbccbbb495e92515e4b2b3dbcd476eb1c0343e4da65",
                   "bapAccountVersion": 0,
                   "user_id": "user1",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "balance": 0,
                   "onhold_balance": 0
               }
           },
           {
               "key": "oaccount~digicur~cbde438258cb01a82f71a9a9f8029243c40c6d836a505432120529c2b3c2ff0c",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~cbde438258cb01a82f71a9a9f8029243c40c6d836a505432120529c2b3c2ff0c",
                   "bapAccountVersion": 0,
                   "user_id": "user2",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "balance": 0,
                   "onhold_balance": 0
               }
           },
           {
               "key": "oaccount~digicur~ecbc3aefcc562d3049c988717940195b30297e95012b7824bbd33a57ca50a626",
               "valueJson": {
                   "assetType": "oaccount",
                   "account_id": "oaccount~digicur~ecbc3aefcc562d3049c988717940195b30297e95012b7824bbd33a57ca50a626",
                   "bapAccountVersion": 0,
                   "user_id": "user3",
                   "org_id": "Org1MSP",
                   "token_id": "digiCurr101",
                   "token_name": "digicur",
                   "balance": 500,
                   "onhold_balance": 0
               }
           }
       ]
getUserByAccountId
Este método retorna os detalhes do usuário de uma conta especificada.
Ctx.Account.getUserByAccountId(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que inclui três propriedades:
    • user_id – O nome do usuário ou o ID do e-mail do usuário.
    • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
    • token_id – O ID do token.
  • Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
   "token_id": "digiCurr101",
   "user_id": "user1",
   "org_id": "Org1MSP"
}
getAccountBalance
Este método retorna o saldo da conta de uma conta especificada.
Ctx.Account.getAccountBalance(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com um objeto JSON que inclui duas propriedades:
    • msg – Uma mensagem mostrando o saldo atual.
    • user_balance – O valor numérico do saldo atual.
  • Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "msg": "Current Balance is: 200",
    "user_balance": 200
}
getAllOrgAccounts
Esse método retorna uma lista de todas as contas de token que pertencem a uma organização especificada.
Ctx.Account.getAllOrgAccounts(org_id: string) 
Parâmetros:
  • org_id: string – O ID do prestador de serviço de associação (MSP) da organização.
Retorna:
  • Em caso de êxito, uma lista de todas as contas da organização especificada.
Exemplo de valor de retorno:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "user_id": "idcqa",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    },
    {
        "key": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~620fcf5deb5fd5a65c0b5b10fda129de0f629ccd232c5891c130e24a574df50a",
            "user_id": "example_minter",
            "org_id": "appdev",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "balance": 0,
            "onhold_balance": 0
        }
    }
]

Métodos para Gerenciamento de Atribuições

addRoleMember
Esse método adiciona uma atribuição a um usuário e token especificados.
Ctx.Token.addRoleMember(role: string, account_id: string, token: <Instance of Token Class>)
Parâmetros:
  • role: string – O nome da atribuição a ser adicionada ao usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • account_id: number – O ID da conta à qual a atribuição será adicionada.
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • No caso de sucesso, uma promessa com uma mensagem de sucesso. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id :          Org1MSP, user_id : user1)"
}
removeRoleMember
Esse método remove uma atribuição de um usuário e token especificados.
Ctx.Token.removeRoleMember(role: string, account_id: string, token: <Instance of Token Class>)
Parâmetros:
  • role: string – O nome da atribuição a ser removida de para o usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • account_id: number – O ID da conta da qual a atribuição será removida.
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • No caso de sucesso, uma promessa com uma mensagem de sucesso. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
  "msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"
}
getAccountsByRole
Esse método retorna uma lista de todas as contas para uma atribuição e um token especificados.
Ctx.Role.getAccountsByRole(token_id: string, role: string)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da função a ser pesquisada.
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que lista todas as contas para a atribuição e o token especificados. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "accounts": [
        "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
        "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"
    ]
}
getAccountsByUser
Esse método retorna uma lista de todos os IDs de conta de um usuário especificado.
async getAccountsByUser(org_id: string, user_id: string)
Parâmetros:
  • org_id string – O ID do prestador de serviço de associação (MSP) do usuário na organização atual.
  • user_id string – O nome do usuário ou o ID do e-mail do usuário.
Retorna:
  • Com êxito, um array JSON de IDs de conta.
Exemplo de valor de retorno:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getUsersByRole
Esse método retorna uma lista de todos os usuários para uma atribuição e um token especificados.
Ctx.Role.getUsersByRole(token_id: string, role: string)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da função a ser pesquisada.
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que lista todos os usuários para a atribuição e o token especificados. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
   "users":[
      {
         "token_id":"digiCurr101",
         "user_id":"user1",
         "org_id":"Org1MSP"
      }
   ]
}
isInRole
Esse método indica se um usuário e um token têm uma atribuição especificada.
Ctx.Token.isInRole(role: string, account_id: string, token: <Instance of Token Class>)
Parâmetros:
  • role: string – O nome da atribuição a ser verificada.
  • account_id: number – O ID da conta a ser verificada.
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, uma promessa com verdadeiro se o usuário tiver a atribuição e falso se o usuário não tiver a atribuição. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{"result":"true"}
roleCheck
Este método verifica se o ID da conta fornecido é membro de qualquer função.
Ctx.Token.roleCheck(account_id: string, token: <Instance of Token Class>)
Parâmetros:
  • account_id: string – O ID da conta a ser verificada.
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Se o ID da conta fizer parte de qualquer atribuição, ele retornará true. Caso contrário, retorna false.
Exemplo de valor de retorno:
{ result: true }
getOrgUsersByRole
Esse método retorna informações sobre todos os usuários que têm uma atribuição especificada em uma organização especificada.
Ctx.Role.getOrgUsersByRole(token_id: string, role: string, org_id: string)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do prestador de serviço de associação (MSP) da organização.
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários com a atribuição especificada na organização especificada.
Exemplo de valor de retorno:
{
    "users": [
        {
            "token_id": "token",
            "user_id": "admin",
            "org_id": "Org1MSP"
        },
        {
            "token_id": "token",
            "user_id": "orgAdmin",
            "org_id": "Org1MSP"
        }
    ]
}
getOrgAccountsByRole
Esse método retorna informações sobre todas as contas que têm uma atribuição especificada em uma organização especificada.
Ctx.Role.getOrgAccountsByRole(token_id: string, role: string, org_id: string)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do prestador de serviço de associação (MSP) da organização.
Retorna:
  • Em caso de êxito, uma lista de todas as contas com a atribuição especificada na organização especificada.
Exemplo de valor de retorno:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}

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

getTransactionById
Esse método retorna o histórico de um ativo Transaction.
async getTransactionById(transaction_id: string)
Parâmetros:
  • transaction_id: string – O ID do ativo da transação.
Retorna:
  • Com êxito, o histórico de ativos da transação.
Exemplo de valor de retorno:
{
    "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
    "history": [
        {
            "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
            "timeStamp": 1629180264,
            "value": {
                "assetType": "otransaction",
                "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                "token_id": "digiCurr101",
                "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                "to_account_id": "",
                "transaction_type": "BULKTRANSFER",
                "amount": 20,
                "timestamp": "2021-08-17T06:04:24.000Z",
                "number_of_sub_transactions": 2,
                "holding_id": ""
            }
        }
    ],
    "sub_transactions": [
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        },
        {
            "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
            "history": [
                {
                    "trxId": "68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
                    "timeStamp": 1629180264,
                    "value": {
                        "assetType": "otransaction",
                        "transaction_id": "otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c81e728d9d4c2f636f067f89cc14862c",
                        "token_id": "digiCurr101",
                        "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
                        "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
                        "transaction_type": "TRANSFER",
                        "amount": 10,
                        "timestamp": "2021-08-17T06:04:24.000Z",
                        "number_of_sub_transactions": 0,
                        "holding_id": ""
                    }
                }
            ]
        }
    ]
}
deleteHistoricalTransactions
Esse método retorna uma matriz dos detalhes do histórico de transações de uma conta especificada.
async deleteHistoricalTransactions(time_to_expiration: Date)
Parâmetros:
  • time_to_expiration: Date – Um timestamp que indica quando excluir transações. Os ativos de transação anteriores ao horário especificado serão excluídos.
Retorna:
  • O valor de retorno é igual ao método "getAccountTransactionHistory".
  • Em caso de êxito, uma promessa com o array de objetos de transação da conta:
    • transaction_id – O ID da transação.
    • transacted_account – A conta com a qual a transação ocorreu.
    • transaction_type – O tipo de transação.
    • transacted_amount – O valor da transação.
    • timestamp – O horário da transação.
    • balance – O saldo da conta no momento da transação.
    • onhold_balance – O saldo retido no momento da transação.
    • sub_transactions – Apenas para transferências em lote, uma lista de transações que fazem parte de uma transferência em lote.
    • holding_id – Um identificador exclusivo retornado pelo método holdTokens.
    • token_id – O ID do token.
  • Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
"payload": {
            "msg": "Successfuly deleted transaction older than date: Thu Aug 19 2021 11:19:36 GMT+0000 (Coordinated Universal Time).",
            "transactions": [
                "otransaction~ec3366dd48b4ce2838f820f2f138648e6e55a07226713e59b411ff31b0d21058"
            ]
        }
getAccountTransactionHistory
Esse método retorna uma matriz dos detalhes do histórico de transações de uma conta especificada.
Ctx.Account.getAccountTransactionHistory(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • O valor de retorno é igual ao método "getAccountTransactionHistory".
  • Em caso de êxito, uma promessa com o array de objetos de transação da conta:
    • transaction_id – O ID da transação.
    • transacted_account – A conta com a qual a transação ocorreu.
    • transaction_type – O tipo de transação.
    • transacted_amount – O valor da transação.
    • timestamp – O horário da transação.
    • balance – O saldo da conta no momento da transação.
    • onhold_balance – O saldo retido no momento da transação.
    • sub_transactions – Apenas para transferências em lote, uma lista de transações que fazem parte de uma transferência em lote.
    • holding_id – Um identificador exclusivo retornado pelo método holdTokens.
    • token_id – O ID do token.
  • Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
[
   {
      "transaction_id":"otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775",
      "transacted_amount":20,
      "timestamp":"2021-08-17T06:04:24.000Z",
      "balance":60,
      "onhold_balance":0,
      "token_id":"digiCurr101",
      "transaction_type":"BULKTRANSFER",
      "sub_transactions":[
         {
            "transacted_account":"oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
            "transaction_type":"CREDIT",
            "transaction_id":"otransaction~68f46c90d0d8d6b93d827e6b9e0152b4845e6e42a61965e63a9bbf1d8e0fc775~c4ca4238a0b923820dcc509a6f75849b",
            "transacted_amount":10
         }
      ]
   },
   {
      "transaction_id":"otransaction~757864d5369bd0539d044caeb3bb4898db310fd7aa740f45a9938771903d43da",
      "transacted_amount":50,
      "timestamp":"2021-08-17T06:02:44.000Z",
      "balance":50,
      "onhold_balance":0,
      "token_id":"digiCurr101",
      "transacted_account":"oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
      "transaction_type":"CREDIT"
   }
]
getAccountTransactionHistoryWithFilters
Esse método retorna uma matriz dos detalhes do histórico de transações de uma conta especificada. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id: string, filters?: Filters)
Parâmetros:
  • account_id: string – O ID da conta.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

ochain invoke getAccountTransactionHistoryWithFilters 'token1' 'appbuilder12' 'user_minter' '{"PageSize":10,"Bookmark":"1","StartTime":"2022-01-25T17:41:42Z","EndTime":"2022-01-25T17:59:10Z"}'

[
    {
        "transaction_id": "otransaction~672897b5a4fa78b421c000e4d6d4f71f3d46529bfbb5b4be10bf5471dc35ce89",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:46:04.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "balance": 90,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~467bb67a33aaffca4487f33dcd46c9844efdb5421a2e7b6aa2d53152eb2c6d85",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:45:47.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "balance": 95,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~c6d56ce54a9bbe24597d1d10448e39316dc6f16328bf3c5b0c8ef10e1dfeb397",
        "transacted_amount": 100,
        "timestamp": "2022-04-20T15:44:26.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~deb5fb0906c40506f6c2d00c573b774e01a53dd91499e651d92ac4778b6add6a",
        "transaction_type": "MINT",
        "balance": 100,
        "onhold_balance": 0
    }
]
getSubTransactionHistory
Este método retorna uma matriz dos detalhes do histórico de transações para uma transação especificada.
await this.Ctx.Account.getSubTransactionHistory(transaction_id)
Parâmetros:
  • transaction_id: string – O ID da transação de transferência em lote.
Exemplo:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 80,
        "onhold_balance": 0
    },
    {
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "balance": 85,
        "onhold_balance": 0
    }
]
getSubTransactionHistoryWithFilters
Esse método retorna uma matriz dos detalhes do histórico de subtransações de uma transação especificada.
await this.Ctx.Account.getSubTransactionHistoryWithFilters(transaction_id: string, filters?: SubTransactionFilters)
Parâmetros:
  • transaction_id: string – O ID da transação de transferência em lote.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

ochain invoke GetAccountSubTransactionHistoryWithFilters 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b' '{"PageSize":10,"Bookmark":"1"}'

[
    {
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c81e728d9d4c2f636f067f89cc14862c",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~16c38d804413ebabf416360d374f76c973d4e71c74adfde73cc40c7c274883b8",
        "transaction_type": "DEBIT",
        "balance": 80,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~6e0f8fe4a6430322170b9c619b04b6c9f1c8d257923f611b866bdf69d7fe6cb8~c4ca4238a0b923820dcc509a6f75849b",
        "transacted_amount": 5,
        "timestamp": "2022-04-20T15:52:21.000Z",
        "token_id": "token1",
        "transacted_account": "oaccount~fbf95683b21bbc91a22205819ac1e2e9c90355d536821ed3fe22b7d23915c248",
        "transaction_type": "DEBIT",
        "balance": 85,
        "onhold_balance": 0
    }
]

Gerenciamento de Comportamento de Token

Os métodos de gerenciamento do ciclo de vida do token são baseados nos padrões do Token Taxonomy Framework. Para usar os métodos de ciclo de vida do token, importe a classe Token do módulo ../lib/token.
import { Token } from '../lib/token';

Métodos para Gerenciamento do Comportamento de Token - Comportamento Mínimo

mint
Esse método gera uma quantidade de tokens, que pertencem ao chamador do método. O chamador deve ter uma conta e a função de mineiro. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação.
Ctx.Token.mint(quantity: number, token: <Instance of Token Class>)
Parâmetros:
  • quantity: number – O número total de tokens a serem cunhados.
  • token: <Instance of Token Class> – O ativo de token a ser cunhado.
Retorna:
  • Em caso de sucesso, uma promessa com uma mensagem de sucesso e detalhes de toAccount. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
  "msg":"Successfully minted 1000 tokens to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}
getTotalMintedTokens
Este método retorna o número total de tokens cunhados.
Ctx.Token.getTotalMintedTokens(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, a quantidade de tokens cunhados, no tipo de dados de número. Em caso de erro, ele retorna com uma mensagem de erro.
Exemplo de valor de retorno:
4000
getNetTokens
Este método retorna a quantidade líquida de tokens que estão disponíveis no sistema. Os tokens líquidos são a quantidade de tokens restantes após os tokens serem queimados. Em forma de equação: tokens líquidos = total de tokens cunhados - total de tokens queimados. Se nenhum token for gravado, o número de tokens líquidos será igual ao total de tokens cunhados.
Ctx.Token.getNetTokens(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, a quantidade de tokens líquidos, no tipo de dados de número. Em caso de erro, ele retorna com uma mensagem de erro.
Exemplo de valor de retorno:
2000
getMaxMintQuantity
Este método retorna a quantidade mínima máxima de um token. Se o comportamento max_mint_quantity não for especificado, o valor padrão será 0, o que permite que qualquer número de tokens seja cunhado.
Ctx.Token.getMaxMintQuantity(token: <Instance of Token Class>)
Parâmetros:
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, a quantidade mínima máxima do token, no tipo de dados de número. Em caso de erro, ele retorna com uma mensagem de erro.
Exemplo de valor de retorno:
20000

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

transfer
Este método transfere tokens do chamador de transação para a conta to_account_id. O chamador desse método deve ter uma conta e a quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação.
Ctx.Token.transfer(to_account_id: string, quantity: number, token: <Instance of Token Class>)
Parâmetros:
  • to_account_id: string – O ID da conta para receber os tokens.
  • quantity: number – O número total de tokens a serem transferidos.
Retorna:
  • No caso de sucesso, uma promessa com uma mensagem de sucesso. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
 "msg":"Successfully transferred 50 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin) to account id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"
}
bulkTransfer
Este método é usado para executar a transferência em massa de tokens da conta do chamador para as contas especificadas no objeto flow. O chamador desse método deve ter uma conta já criada.
Ctx.Token.bulkTransfer(flow: object[], token: <Instance of Token Class>)
Parâmetros:
  • flow: object[] – Um array de objetos JSON especificando os detalhes e a quantidade do receptor. A quantidade de transferência deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Por exemplo:
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
  • token: <Instance of Token Class> – O ativo de token no qual operar.
Retorna:
  • Em caso de sucesso, uma promessa com uma mensagem de sucesso e informações da conta. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

Métodos para Gerenciamento do Comportamento de Token - Comportamento Holdable

hold
Este método cria uma retenção em nome do proprietário dos tokens com a conta to_account_id. Uma conta notarial é especificada, que é responsável por concluir ou liberar a retenção. Quando a retenção é criada, o saldo de token especificado do pagador é colocado em retenção. Um saldo retido não pode ser transferido até que a retenção seja concluída ou liberada. O chamador desse método deve ter uma conta já criada.
Ctx.Token.hold(operation_id: string, to_account_id: string, notary_account_id: string, quantity: number, time_to_expiration: Date, token: <Instance of Token Class>)
Parâmetros:
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
  • to_account_id: string – O ID da conta para receber os tokens.
  • notary__account_id: string – O ID da conta notarial.
  • quantity: number – O número total de tokens a serem colocados em espera.
  • time_to_expiration: Date – A duração até que a retenção expire. Especifique 0 para uma retenção permanente. Caso contrário, use o formato RFC-3339. Por exemplo, 2021-06-02T12.
  • token: <Instance of Token Class> – O ativo de token a ser mantido.
Retorna:
  • No caso de sucesso, uma promessa com uma mensagem de sucesso. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
 "msg": "account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) is successfully holding 10 tokens",
}
executeHold
Este método conclui uma retenção de tokens, transferindo a quantidade especificada de tokens anteriormente em retenção para o destinatário. Se o valor quantity for menor que o valor de retenção real, o valor restante estará disponível novamente para o proprietário original dos tokens. Esse método só pode ser chamado pelo ID AccountOwner com a atribuição notary para o ID de operação especificado. A retenção só pode ser concluída pelo notário.
Ctx.Token.executeHold(operation_id: string, quantity: number, token: <Instance of Token Class>)
Parâmetros:
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
  • quantity: number – O número total de tokens para concluir uma retenção.
  • token: <Instance of Token Class> – O ativo de token para concluir uma retenção.
Retorna:
  • No caso de sucesso, uma promessa com uma mensagem de sucesso. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
 "msg": "user with accountId: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) has successfully executed 5  tokens(digiCurr101) from the hold with Operation Id opr_121",
}
releaseHold
Este método libera uma retenção de tokens. A transferência não está concluída e todos os tokens retidos estão disponíveis novamente para o proprietário original. Esse método pode ser chamado pelo ID AccountOwner com a atribuição notary dentro do limite de tempo especificado ou pelo pagador, favorecido ou notário após o limite de tempo especificado.
Ctx.Token.releaseHold(operation_id: string, token: <Instance of Token Class>)
Parâmetros:
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
  • token: <Instance of Token Class> – O ativo de token para liberar uma retenção.
Retorna:
  • No caso de sucesso, uma promessa com uma mensagem de sucesso. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
  "msg": "Successfully released 5 tokens from Operation Id opr_121 to Account Id: oaccount~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1)",
}
getOnHoldIds
Esse método retorna uma lista de todos os IDs suspensos de uma conta especificada.
Ctx.Account.getOnHoldIds(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, uma promessa com um objeto JSON que lista todos os IDs suspensos da conta especificada. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
   "msg":"Holding Ids are: ohold~digicur~digiCurr101~opr_121",
   "holding_ids":[
      "ohold~digicur~digiCurr101~opr_121"
   ]
}
getOnHoldDetailsWithOperationId
Este método retorna os detalhes da transação em espera para um ID de operação e token especificados.
Ctx.Hold.getOnHoldDetailsWithOperationId(token_id: string, operation_id: string)
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de êxito, um objeto de retenção que inclui as seguintes propriedades:
    • holding_id – O ID de retenção da transação.
    • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
    • from_account_id – O ID da conta do proprietário atual dos tokens em espera.
    • to_account_id – O ID da conta do destinatário.
    • notary_account_id – O ID da conta do notário.
    • token_id: string – O ID do token salvo.
    • quantity – A quantidade de tokens que estão em retenção para o ID de retenção.
    • time_to_expiration – A duração até que a retenção expire.
  • Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
    "assetType": "ohold",
    "holding_id": "ohold~digicur~digiCurr101~opr_121",
    "operation_id": "opr_121",
    "token_name": "digicur",
    "from_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "to_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "notary_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "token_id": "digiCurr101",
    "quantity": 10,
    "time_to_expiration": "2022-08-01T18:30:00.000Z"
}
getOnHoldBalanceWithOperationId
Este método retorna o saldo retido de um ID de operação e token especificados. Este método pode ser chamado por qualquer pessoa.
Ctx.Hold.getOnHoldBalanceWithOperationId(token_id: string, operation_id: string)
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Normalmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, um objeto de promessa com o saldo em espera para o ID de operação e token especificados. Em caso de erro, uma rejeição com uma mensagem de erro
Exemplo de valor de retorno:
{
    "msg": "Current Holding Balance of Operation 'op1' for token 'token1' is: 10",
    "holding_balance": 10
}

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

burn
Este método desativa ou queima tokens da conta do chamador da transação. O chamador desse método deve ter uma conta e a função de gravador. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação.
Ctx.Token.burn(quantity: number, token: <Instance of Token Class>)
Parâmetros:
  • quantity: number – O número total de tokens a serem gravados.
  • token: <Instance of Token Class> – O ativo de token a ser gravado.
Retorna:
  • No caso de sucesso, uma promessa com uma mensagem de sucesso. Em caso de erro, uma rejeição com uma mensagem de erro.
Exemplo de valor de retorno:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}