Proyecto TypeScript andamio para el marco de taxonomía de token

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

El proyecto genera automáticamente clases y funciones de ciclo de vida de token, incluidos los métodos CRUD y no CRUD. La validación de argumentos, la canalización/anulación de canalización y la capacidad de persistencia transparente se admiten automáticamente.

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

Modelo

Cada clase de modelo con token amplía la clase Token, que a su vez amplía la clase OchainModel. La clase Token se importa de ../lib/token. La capacidad de persistencia transparente, o ORM simplificado, se captura en la clase 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

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

export class DigiCurrCCController extends OchainController{

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

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

Métodos de token generados automáticamente

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

Métodos para la gestión del control de acceso

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

init
Se llama a este método cuando se despliega o actualiza el código de cadenas. Cada Token Admin se identifica mediante la información user_id y org_id en el parámetro adminList obligatorio. user_id es el nombre de usuario o el ID de correo electrónico del propietario de la instancia o del usuario que está conectado a la instancia. org_id es el ID de proveedor de servicios de miembros (MSP) del usuario en la organización de red actual.
Cualquier usuario Token Admin puede agregar y eliminar otros usuarios Token Admin llamando a los métodos addAdmin y removeAdmin.
public async init(adminList: TokenAdminAsset[]) {
    await this.Ctx.Admin.initAdmin(adminList);
    return;
}
Parámetros:
  • adminList array: matriz de información {user_id, org_id} que especifica la lista de administradores de tokens. La matriz adminList es un parámetro obligatorio.
Ejemplo de parámetro, Mac OSX y Linux CLI:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
Ejemplo de parámetro, CLI de Microsoft Windows:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Ejemplo de parámetro, consola de Oracle Blockchain Platform:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
initialize<Token Name>Token
Este método crea un token e inicializa las propiedades del token. El activo y sus propiedades se guardan en la base de datos de estado. Este método solo puede ser llamado por un Token Admin del código de cadena.
@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>: el activo de token se transfiere como parámetro a este método. Las propiedades del activo de token se describen en el archivo de modelo.
Devuelve:
  • Una vez realizada correctamente, una representación JSON del activo de token que se ha creado.
Ejemplo 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 actualiza las propiedades del token. Después de crear un activo de token, solo se pueden actualizar la propiedad token_desc y las propiedades personalizadas. Este método solo puede ser llamado por un Token Admin del código de cadena.
@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>: el activo de token se transfiere como parámetro a este método. Las propiedades del activo de token se describen en el archivo de modelo.
Devuelve:
  • Cuando se realiza correctamente, se actualiza la representación JSON del activo de token.
Ejemplo 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 devuelve el número de posiciones decimales configuradas para un token fraccional. Si no se ha especificado el comportamiento divisible para el token, el valor por defecto es 0. Este método solo se puede llamar mediante Token Admin o Org Admin del código de cadenas.
@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: ID del token.
Devuelve:
  • Si se realiza correctamente, una cadena JSON que muestra el número de decimales de token.
Ejemplo de valor de retorno:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
getTokenById
Este método devuelve un objeto de token si está presente en la base de datos de estado. Este método solo se puede llamar mediante Token Admin o Org Admin del código de cadenas.
@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: ID del token.
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON que representa el activo de token.
Ejemplo 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
Este método devuelve el historial de tokens para un ID de token especificado. Cualquier usuario puede llamar a este 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: ID del token.
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON que representa el historial de tokens.
Ejemplo 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 devuelve todos los tokens que se almacenan en la base de datos de estado. Este método solo se puede llamar mediante Token Admin o Org Admin del código de cadenas. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
@Validator()
public async getAllTokens() {
    await this.Ctx.Auth.checkAuthorization('TOKEN.getAllTokens', 'TOKEN');
    return await this.Ctx.Token.getAllTokens();
}
Parámetros:
  • ninguno
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON que representa todos los activos de token.
getTokensByName
Este método devuelve todos los objetos de token con un nombre especificado. Este método solo se puede llamar mediante Token Admin o Org Admin del código de cadenas. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de 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: nombre de los tokens que se van a recuperar. El nombre corresponde a la propiedad token_name en el archivo de especificación. El valor es el nombre de clase del token.
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON de todos los activos de token que coinciden con el nombre.

Métodos para la gestión de cuentas

createAccount
Este método crea una cuenta para un usuario y token especificados. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. Las cuentas realizan un seguimiento de los saldos, los saldos retenidos y el historial de transacciones. Un ID de cuenta es un juego alfanumérico de caracteres, con el prefijo oaccount~<token asset name>~ y seguido de un hash del nombre de usuario o ID de correo electrónico (user_id) del propietario de la instancia o del usuario que está conectado a la instancia, el ID del proveedor de servicios de miembros (org_id) del usuario en la organización de red actual. Este método sólo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización 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: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
  • token_type: string: tipo del token, que debe ser fungible.
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON de la cuenta que se ha creado. El parámetro bapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo 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 asocia un token fungible a una cuenta. Este método solo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización 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: ID de la cuenta.
  • token_id: string: ID del token.
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON de la cuenta actualizada. El parámetro bapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo 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 devuelve los detalles de cuenta de un usuario y token especificados. Este método sólo puede ser llamado por un Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta.
@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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, un objeto de cuenta JSON que incluye las siguientes propiedades:
  • account_id: ID de la cuenta de usuario.
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • token_id: ID del token.
  • token_name: nombre del token.
  • balance: el saldo actual de la cuenta.
  • onhold_balance: saldo retenido actual de la cuenta.
  • bapAccountVersion: parámetro de objeto de cuenta para uso interno.
  • status: estado actual de la cuenta de usuario.
Ejemplo 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 devuelve los detalles del historial de cuentas de un usuario y token especificados. Este método solo puede ser llamado por un Token Admin del código de cadena o el AccountOwner de la cuenta.
  @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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, una matriz de objetos de cuenta JSON que incluye las siguientes propiedades:
  • trxId: ID de la transacción devuelto por el libro mayor.
  • timeStamp: hora de la transacción.
  • value: cadena JSON del objeto de cuenta.
Ejemplo 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 devuelve el saldo retenido actual de una cuenta y token especificados. Este método sólo puede ser llamado por un Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta.
  @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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una representación JSON del saldo de retención actual.
Ejemplo de valor de retorno:
{"msg":"Total Holding Balance is: 0","holding_balance":0}
getAllAccounts
Este método devuelve una lista de todas las cuentas. Este método solo puede ser llamado por un Token Admin del código de cadena. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
@Validator()
public async getAllAccounts() {
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.getAllAccounts', 'TOKEN');
    return await this.Ctx.Account.getAllAccounts();
}
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, una matriz JSON de todas las cuentas.
getUserByAccountId
Este método devuelve los detalles del usuario (org_id y user_id) para una cuenta especificada. Este método puede ser llamado por cualquier usuario del código de cadenas.
@Validator(yup.string())
public async getUserByAccountId(account_id: string) {
    return await this.Ctx.Account.getUserByAccountId(account_id);
}
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON de los detalles del usuario (org_id, token_id y user_id).
Ejemplo de valor de retorno:
{
    "token_id": "digiCurr101",
    "user_id": "user1",
    "org_id": "Org1MSP"
}
getAccountBalance
Este método devuelve el saldo actual de una cuenta y un token especificados. Este método sólo puede ser llamado por un Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta.
  @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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Una vez realizado correctamente, una representación JSON del saldo de cuenta corriente.
Ejemplo de valor de retorno:
{"msg":"Current Balance is: 0","user_balance":0}
getAllOrgAccounts
Este método devuelve una lista de todas las cuentas de token que pertenecen a una organización especificada. Este método sólo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización 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: ID del proveedor de servicios de miembros (MSP) de la organización.
Devuelve:
  • Cuando se realiza correctamente, una lista de todas las cuentas de la organización especificada.
Ejemplo 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 la gestión de roles

addRole
Este método agrega un rol a un usuario y token especificados. Este método sólo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización especificada que también posee el rol especificado.
  @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: ID del token.
  • role: string: nombre del rol que se va a agregar al usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación. Del mismo modo, el rol notary corresponde a la propiedad notary_role_name del archivo de especificación.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, aparece un mensaje con los detalles de la cuenta.
Ejemplo de valor de retorno:
{"msg":"Successfully added role 'minter' to Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
removeRole
Este método elimina un rol de un usuario y token especificados. Este método sólo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización especificada que también posee el rol especificado.
  @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: ID del token.
  • role: string: nombre del rol que se va a eliminar del usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación. Del mismo modo, el rol notary corresponde a la propiedad notary_role_name del archivo de especificación.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, aparece un mensaje con los detalles de la cuenta.
Ejemplo de valor de retorno:
{"msg":"Successfully removed role 'minter' from Account Id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"}
getAccountsByRole
Este método devuelve una lista de todos los ID de cuenta para un rol y token especificados. Este método solo puede ser llamado por un Token Admin del código de cadena.
@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: ID del token.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de ID de cuenta.
Ejemplo de valor de retorno:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getAccountsByUser
Este método devuelve una lista de todos los ID de cuenta para un ID de organización y un ID de usuario especificados. Este método sólo puede ser llamado por el Token Admin del código de cadena, por el Org Admin de la organización especificada o por el Account Owner especificado en los 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: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de ID de cuenta.
Ejemplo de valor de retorno:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getUsersByRole
Este método devuelve una lista de todos los usuarios para un rol y token especificados. Este método solo puede ser llamado por un Token Admin del código de cadena.
@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: ID del token.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • Cuando se realiza correctamente, una matriz JSON de los objetos de usuario (org_id, token_id y user_id).
Ejemplo de valor de retorno:
{"users":[{"token_id":"digiCurr101","user_id":"user1","org_id":"Org1MSP"}]}
isInRole
Este método devuelve un valor booleano para indicar si un usuario y un token tienen un rol especificado. Este método sólo puede ser llamado por un Token Admin del código de cadena, el AccountOwner de la cuenta o un Org Admin de la organización 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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una cadena JSON del resultado booleano.
Ejemplo de valor de retorno:
{"result":"false"}
getOrgAccountsByRole
Este método devuelve información sobre todas las cuentas que tienen un rol especificado en una organización especificada. Este método sólo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización 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: ID del token.
  • role: string: nombre del rol que se va a comprobar.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) de la organización.
Devuelve:
  • Cuando se realiza correctamente, una lista de todas las cuentas con el rol especificado en la organización especificada.
Ejemplo de valor de retorno:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
getOrgUsersByRole
Este método devuelve información sobre todos los usuarios que tienen un rol especificado en una organización especificada. Este método sólo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización 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: ID del token.
  • role: string: nombre del rol que se va a comprobar.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) de la organización.
Devuelve:
  • Cuando se realiza correctamente, una lista de todos los usuarios con el rol especificado en la organización especificada.
Ejemplo 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 la gestión del historial de transacciones

getAccountTransactionHistory
Este método devuelve una matriz de detalles de historial de transacciones de cuenta para un usuario y token especificados. Este método sólo puede ser llamado por el Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta.
 @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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, una matriz de objetos de transacción de cuenta JSON que incluye las siguientes propiedades:
  • transaction_id: ID de la transacción.
  • transacted_account: cuenta con la que se ha realizado la transacción.
  • transaction_type: tipo de transacción.
  • transacted_amount: importe de la transacción.
  • timestamp: hora de la transacción.
  • balance: saldo de cuenta en el momento de la transacción.
  • onhold_balance: saldo retenido en el momento de la transacción.
  • token_id: ID del token.
  • holding_id: identificador único devuelto por el método holdTokens.
Ejemplo 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
Este método devuelve una matriz de detalles de historial de transacciones de cuenta para un usuario y token especificados. Este método sólo puede ser llamado por el Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta. Este método solo se puede llamar cuando está conectado a la red remota de 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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
  • filters: string: parámetro opcional. Si está vacío, se devuelven todos los registros. La propiedad PageSize determina el número de registros que se devolverán. Si PageSize es 0, el tamaño de página por defecto es 20. La propiedad Bookmark determina el índice inicial de los registros que se van a devolver. Para obtener más información, consulte la documentación de Hyperledger Fabric. Las propiedades StartTime y EndTime se deben especificar en formato RFC-3339.
Por ejemplo:

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
Este método devuelve una matriz de detalles de historial de transacciones de cuenta para un usuario y token especificados. Este método solo puede ser llamado por el Token Admin del código de cadena o el AccountOwner de la cuenta.
  @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: ID de la transacción de transferencia masiva.
Devuelve:
  • Matriz de objetos de subtransacción de cuenta en formato JSON para un ID de transacción de transferencia masiva especificado.
Por ejemplo:

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
Este método devuelve una matriz de detalles de historial de subtransacciones de cuenta para una transacción 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: ID de la transacción.
  • filters: string: parámetro opcional. Si está vacío, se devuelven todos los registros. La propiedad PageSize determina el número de registros que se devolverán. Si PageSize es 0, el tamaño de página por defecto es 20. La propiedad Bookmark determina el índice inicial de los registros que se van a devolver. Para obtener más información, consulte la documentación de Hyperledger Fabric. Las propiedades StartTime y EndTime se deben especificar en formato RFC-3339.
Devuelve:
  • Matriz de objetos de subtransacción de cuenta en formato JSON para un ID de transacción de transferencia masiva especificado.
Por ejemplo:

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
Este método devuelve el historial de un activo Transaction.
@Validator(yup.string())
    public async getTransactionById(transaction_id: string) {
        return await this.Ctx.Transaction.getTransactionById(transaction_id);
    }
Parámetros:
  • transaction_id string: ID del activo de transacción.
Devuelve:
  • Si se realiza correctamente, una matriz JSON del historial de la transacción.
Ejemplo 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
Este método suprime las transacciones anteriores de la base de datos 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: registro de hora que indica cuándo suprimir transacciones. Se suprimirán los activos de transacción que tengan una antigüedad superior a la hora especificada.
Ejemplo 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 la gestión del comportamiento de los tokens: comportamiento de Mintable

issueTokens
Este método extrae tokens, que luego son propiedad del emisor del método. La persona que llama debe tener una cuenta y el rol de minter. El número de tokens que se pueden extraer está limitado por la propiedad max_mint_quantity del comportamiento mintable en el archivo de especificación. Si no se especifica la propiedad max_mint_quantity, se puede minar un número ilimitado de tokens. La cantidad debe estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el archivo de especificación. Este método solo puede ser llamado por el AccountOwner de la cuenta con el rol 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: ID del token.
  • quantity: número de tokens para acuñar.
Devuelve:
  • Si se realiza correctamente, aparece un mensaje con los detalles de la cuenta.
Ejemplo 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 devuelve el número total de tokens minados para un token especificado. Este método solo puede ser llamado por un Token Admin o cualquier Org Admin del código de cadena.
@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: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que indica el número total de tokens.
Ejemplo de valor de retorno:
{"msg":"Total minted token for Token Id: digiCurr101 is 100 tokens.","quantity":100}
getNetTokens
Este método devuelve el número neto total de tokens disponibles en el sistema para un token especificado. El total de tokens netos es la cantidad de tokens restantes después de quemar los tokens. En forma de ecuación: tokens netos = total de tokens minados - total de tokens quemados. Si no se graban tokens, el número de tokens de red es igual al total de tokens acuñados. Este método solo puede ser llamado por un Token Admin o cualquier Org Admin del código de cadena.
@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: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que indica el número neto de tokens.
Ejemplo de valor de retorno:
{"msg":"Net supply of token for Token Id: digiCurr101 is 0 tokens.","quantity":0}

Métodos para la gestión del comportamiento de los tokens: comportamiento transferible

transferTokens
Este método transfiere tokens del emisor de llamada a una cuenta especificada. El emisor de la llamada del método debe tener una cuenta. La cantidad debe estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el archivo de especificación. Este método solo puede ser llamado por el AccountOwner de la cuenta.
@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: ID del token.
  • to_org_id: string: ID del proveedor de servicios de afiliación (MSP) del receptor (beneficiario) de la organización actual.
  • to_user_id: string: nombre de usuario o ID de correo electrónico del receptor.
  • quantity: number: número de tokens que se transferirán.
Devuelve:
  • En caso de éxito, un mensaje con detalles para las cuentas de pagador y beneficiario.
Ejemplo 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 se utiliza para realizar una transferencia masiva de tokens de la cuenta de emisor de llamada a las cuentas especificadas en el objeto flow. Las cantidades deben estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el emisor de llamada file.The de la especificación de este método deben tener una cuenta ya creada. Este método solo puede ser llamado por el AccountOwner de la cuenta.
@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: ID del token.
  • flow : object[]: matriz de objetos JSON que especifican receptores y cantidades.
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
    • to_orgId: string: ID del proveedor de servicios de miembros (MSP) del receptor en la organización actual.
    • userId: string: nombre de usuario o ID de correo electrónico del receptor.
    • quantity: number: número de tokens que se transferirán.
Devuelve:
  • Mensaje que indica que se ha realizado correctamente.
Ejemplo 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 la gestión del comportamiento de los tokens: comportamiento retenible

holdTokens
Este método crea una retención en nombre del propietario de los tokens con la cuenta to_account_id. Se especifica una cuenta de notario, que es responsable de completar o liberar la retención. Cuando se crea la retención, el saldo de token especificado del pagador se retiene. Un saldo retenido no se puede transferir hasta que la retención se haya completado o liberado. El emisor de llamada de este método debe tener una cuenta ya creada. Este método solo puede ser llamado por el AccountOwner de la cuenta.
@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: ID del token.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • to_org_id: string: ID del proveedor de servicios de miembros (MSP) del receptor en la organización actual.
  • to_user_id: string: nombre de usuario o ID de correo electrónico del receptor.
  • notary_org_id: string: ID de proveedor de servicios de miembros (MSP) del notario de la organización actual.
  • notary_user_id: string: nombre de usuario o ID de correo electrónico del notario.
  • quantity: number: número de tokens que se van a retener.
  • time_to_expiration: hora a la que caduca la retención. Especifique 0 para una retención permanente. De lo contrario, utilice el formato RFC-3339. Por ejemplo, 2021-06-02T12:46:06Z.
Devuelve:
  • Si se realiza correctamente, un mensaje con la cuenta del emisor de la llamada y los detalles de retención.
Ejemplo de valor de retorno:
{
  "msg":"AccountId oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP , User-Id: admin) is   successfully holding 10 tokens"
}
executeHoldTokens
Este método completa una retención de un token. Una cantidad de tokens previamente retenidos por un propietario de token se transfiere a un receptor. Si el valor quantity es menor que el valor de retención real, la cantidad restante estará disponible de nuevo para el propietario original de los tokens. Este método sólo puede ser llamado por el ID AccountOwner con el rol notary para el ID de operación especificado. La retención solo puede ser completada por el notario.
@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: ID del token.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • quantity: number: número de tokens retenidos para transferir.
Devuelve:
  • Si se realiza correctamente, aparecerá un mensaje con el ID de cuenta del emisor de la llamada y la cantidad de la transacción.
Ejemplo 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 una retención de tokens. La transferencia no se ha completado y todos los tokens retenidos están disponibles de nuevo para el propietario original. El ID AccountOwner con el rol notary puede llamar a este método dentro del límite de tiempo especificado o bien el pagador, el beneficiario o el notario después del límite de tiempo 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: ID del token.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
Devuelve:
  • Si se realiza correctamente, aparece un mensaje que indica que se ha liberado la retención.
Ejemplo 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
Este método devuelve una lista de todos los IDs de tenencia de una cuenta especificada. Un Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta pueden llamar a este método.
  @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: ID del token.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una lista JSON de ID de retención.
Ejemplo de valor de retorno:
{"msg":"Holding Ids are: ohold~digicur~digiCurr101~opr_121","holding_ids":["ohold~digicur~digiCurr101~opr_121"]}
getOnHoldDetailsWithOperationId
Este método devuelve los detalles de la transacción retenida para un ID de operación y token especificados. Este método puede ser invocado por cualquier persona.
@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: ID del token.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
Devuelve:
  • Si se realiza correctamente, un objeto de retención de JSON que incluye las siguientes propiedades:
  • holding_id: ID de la tenencia de la transacción.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • from_account_id: ID de cuenta del propietario actual de los tokens retenidos.
  • to_account_id: ID de cuenta del receptor.
  • notary_account_id: ID de la cuenta del notario.
  • token_id: string: ID del token guardado.
  • quantity: cantidad de tokens que están retenidos para el ID de retención.
  • time_to_expiration: duración hasta que caduca la retención.
Ejemplo 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 devuelve el saldo retenido de un ID de operación y token especificados. Este método puede ser invocado por cualquier persona.
@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: ID del token.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
Devuelve:
  • En caso de éxito, una cadena JSON que indica el balance de retención.
Ejemplo de valor de retorno:
{
	"msg": "Current Holding Balance of Operation 'opr_121' for token 'digiCurr101' is: 10",
	"holding_balance": 10
}

Métodos para la gestión del comportamiento de los tokens: comportamiento que se puede quemar

burnTokens
Este método desactiva o graba tokens de la cuenta del emisor de la llamada de la transacción. El emisor de la llamada de este método debe tener una cuenta y el rol de quemador. La cantidad debe estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el archivo de especificación. AccountOwner de la cuenta con el rol de quemador puede llamar a este método.
@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: ID del token.
  • quantity: número de tokens que se deben grabar.
Devuelve:
  • En caso de éxito, un mensaje de éxito con la cantidad de tokens quemados y el ID de cuenta.
Ejemplo de valor de retorno:
{
    "msg": "Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}

Métodos personalizados

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

Para evitar el doble gasto, no combine varias funciones asíncronas que funcionen en los mismos pares clave-valor en la base de datos de estado. En su lugar, utilice el método bulkTransferTokens para realizar varias transferencias en un método.

En el siguiente ejemplo se muestra cómo utilizar métodos de SDK de token en métodos personalizados. Cuando se llama al método buyTicket, transfiere 20 tokens de la cuenta del emisor de la llamada a la cuenta del vendedor y devuelve el mensaje de transacción de la transferencia.

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

Si utiliza más de un método SDK de token en un método personalizado, no utilice métodos que afecten a los mismos pares clave-valor en la base de datos de estado. En el siguiente ejemplo, se muestra la manera incorrecta de realizar varias transferencias:

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

En su lugar, utilice el método bulkTransferTokens para transferir a varias cuentas desde la cuenta del emisor de la llamada, como se muestra en el siguiente fragmento de código.

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

Note:

Si utiliza más de un método SDK de token en un método personalizado que puede afectar a los mismos pares clave-valor en la base de datos de estado, active la optimización de MVCC para los códigos de cadenas de token. Para obtener más información, consulte Optimización de MVCC.

Métodos de SDK de token

Métodos para la gestión del control de acceso

El SDK de token proporciona una función de control de acceso. Algunos métodos solo pueden ser llamados por un Token Admin, Org Admin o AccountOwner del token. Puede utilizar esta función para asegurarse de que las operaciones solo las realizan los usuarios deseados. Cualquier acceso no autorizado genera un error. Para utilizar la función de control de acceso, importe la clase Authorization del módulo ../lib/auth.
import { Authorization } from '../lib/auth';
addAdmin
Este método agrega un usuario como Token Admin del código de cadena de token.
Ctx.Admin.addAdmin(org_id: string, user_id: string)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de miembros (MSP) del usuario en la organización de red actual.
Devuelve:
  • En caso de éxito, un mensaje de promesa con un objeto JSON que muestra los detalles del usuario agregado como Token Admin del código de cadena de token. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
    "msg": "Successfully added Admin (Org_Id: Org1MSP, User_Id: user1)"
}
removeAdmin
Este método elimina un usuario como Token Admin del código de cadena de token.
Ctx.Admin.removeAdmin(org_id: string, user_id: string)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de miembros (MSP) del usuario en la organización de red actual.
Devuelve:
  • En caso de éxito, un mensaje de promesa con un objeto JSON que muestra los detalles del usuario que ya no es un Token Admin del código de cadena de token. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
    "msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: user1)"
}
getAllAdmins
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadena de token.
Ctx.Admin.getAllAdmins()
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, promesa con un objeto JSON que muestra los detalles de todos los usuarios que son Token Admin del código de cadena de token. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
    "admins": [
        {
            "orgId": "Org1MSP",
            "userId": "admin"
        }
    ]
}
checkAuthorization
Utilice este método para agregar una comprobación de control de acceso a una operación. Algunos métodos de token solo pueden ser ejecutados por Token Admin o AccountOwner del token o por MultipleAccountOwner para usuarios con varias cuentas. La asignación de control de acceso se describe en el archivo ../lib/constant.ts. Puede modificar el control de acceso editando el archivo ../lib/constant.ts. Para utilizar su propio control de acceso o para desactivar el control de acceso, elimine el código de control de acceso de los métodos de controlador generados automáticamente y los métodos personalizados.
export const TOKENACCESS = {
  ADMIN: {
    isUserTokenAdmin: ["Admin", "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: valor de asignación entre la clase y los métodos, como se describe en el archivo ../lib/constant.ts.
  • ...args: un argumento de variable donde args[0] toma la constante 'TOKEN' y args[1] toma account_id para agregar una comprobación de control de acceso para un AccountOwner. Para agregar una comprobación de control de acceso para MultipleAccountOwner, args[1] toma org_id y args[2] toma user_id.
Devuelve:
  • En el éxito, una promesa. En caso de error, un rechazo con un mensaje de error.
isUserTokenAdmin
Este método devuelve el valor booleano true si el emisor de llamada de la función es Token Admin. De lo contrario, el método devuelve false.
Ctx.Auth.isUserTokenAdmin()
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de miembros (MSP) del usuario en la organización de red actual.
Devuelve:
  • Una respuesta booleana y un mensaje de error si se encuentra un error.
addOrgAdmin
Este método agrega un usuario como Org Admin de la organización.
Ctx.Admin.addOrgAdmin(org_id, user_id)
Parámetros:
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que incluye detalles del usuario que se ha agregado como Org Admin de la organización.
Ejemplo de valor de retorno:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
Este método elimina un usuario como Org Admin de la organización.
Ctx.Admin.removeOrgAdmin(org_id, user_id)
Parámetros:
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que incluye detalles del usuario que se ha eliminado como Org Admin de la organización.
Ejemplo de valor de retorno:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
getOrgAdmins
Este método devuelve una lista de todos los usuarios que son Org Admin de una organización.
Ctx.Admin.getAllOrgAdmins()
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, una matriz en formato JSON que contiene objetos orgId y userId.
Ejemplo 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 la gestión de configuración de token

getTokenDecimals
Este método devuelve el número de posiciones decimales disponibles para un token fraccional. Si no se especifica el comportamiento divisible, el valor por defecto es 0.
Ctx.Token.getTokenDecimals(token_id: string)
Parámetros:
  • token_id: string: ID del token.
Devuelve:
  • Si se realiza correctamente, las posiciones decimales del token, en el tipo de dato numérico. Si se produce un error, se devuelve con un mensaje de error.
Ejemplo de valor de retorno:
1
getAllTokens
Este método devuelve todos los activos de token guardados en la base de datos de estado. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
Ctx.Token.getAllTokens()
Parámetros:
  • ninguno
Devuelve:
  • Con el éxito, devuelve una promesa con todos los activos de token. Si se produce un error, devuelve un mensaje de error.
Ejemplo 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 devuelve todos los activos de token con el nombre especificado. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
Ctx.Token.getTokensByName(token_name: string)
Parámetros:
  • token_name: string: nombre del token, que corresponde a la propiedad Token_name del modelo. El valor es el nombre de clase del token.
Devuelve:
  • Devuelve una matriz de todos los activos de token del nombre especificado, en formato JSON.
Ejemplo 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
Este método devuelve un objeto de token si está presente en la base de datos de estado.
Ctx.Token.get(token_id: string)
Parámetros:
  • token_id: string: ID del token que se va a devolver.
Devuelve:
  • En caso de éxito, una promesa con la representación JSON del token. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 si existe un activo de token con el ID especificado.
Ctx.Token.isTokenType(token_id: string)
Parámetros:
  • token_id: string: ID del token que se va a comprobar.
Devuelve:
  • En caso de éxito, una promesa con true si existe un activo de token con el ID especificado. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
true
save
Este método crea un token y guarda sus propiedades en la base de datos de estado.
Ctx.Token.save(token: <Instance of Token Class>,extraMetadata?:any)
Parámetros:
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • En caso de éxito, un mensaje de promesa con detalles de token. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 actualiza las propiedades del token. Después de crear un activo de token, solo actualiza el valor token_desc y sus propiedades personalizadas.
Ctx.Token.update(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • En caso de éxito, un mensaje de promesa con detalles de token. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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
Este método llama internamente al método getStateByRange del tejido. Aunque el libro mayor devuelva cualquier activo con el ID especificado, este método convierte el activo en el tipo de activo de emisor de llamada.
<Token ClassCtx.Token.getByRange(start_token_id: string, end_token_id: string, token_class_reference?: <Instance of Token Class> )
Parámetros:
  • startId: string: clave de inicio del rango. Esta clave está incluida en el rango.
  • endId: string: clave final del rango. Esta clave se excluye del rango.
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • En caso de éxito, una promesa con una matriz de <Token Class>. En caso de error, un rechazo con un mensaje de error.
Por ejemplo:
@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);
}
Ejemplo 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 devuelve el historial para el token especificado.
Ctx.Token.history(tokenId)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • En caso de éxito, una promesa con una matriz de los detalles del historial de cuentas para el token especificado. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 la gestión de cuentas

getCallerAccountId
Este método devuelve el ID de cuenta del emisor de llamada.
Ctx.Account.getCallerAccountId(token_id: string)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • En caso de éxito, una promesa con el ID de cuenta de emisor de llamada. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
generateAccountId
Este método devuelve un ID de cuenta, que es un juego alfanumérico de caracteres, con el prefijo oaccount~<token asset name>~ y seguido de un hash del nombre de usuario o ID de correo electrónico (user_id) del propietario de la instancia o del usuario que está conectado a la instancia, el ID de proveedor de servicios de miembros (org_id) del usuario en la organización de red actual y el ID de token único (token_id).
Ctx.Account.generateAccountId(token_id: string, org_id: string, user_id: string)
Parámetros:
  • tokenId: string: ID del token.
  • orgId: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una promesa con el ID de cuenta generado. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
createAccount
Este método crea una cuenta para un usuario y token especificados. Cada usuario que tenga tokens en cualquier momento debe tener una cuenta. Las cuentas realizan un seguimiento del saldo de un usuario, el saldo retenido y el historial de transacciones. Un ID de cuenta es un juego alfanumérico de caracteres, con el prefijo oaccount~<token asset name>~ y seguido de un hash del nombre de usuario o ID de correo electrónico (user_id) del propietario de la instancia o del usuario que está conectado a la instancia, el ID del proveedor de servicios de miembros (org_id) del usuario en la organización de red actual. Este método sólo puede ser llamado por el Token Admin del código de cadena o por un Org Admin de la organización especificada.
this.Ctx.Account.createAccount(org_id: string, user_id: string, token_type: string)
Parámetros:
  • org_id: string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
  • token_type: string: tipo del token, que debe ser fungible.
Devuelve:
  • Si se realiza correctamente, el nuevo objeto de cuenta en formato JSON.
Ejemplo 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 asocia un token fungible a una cuenta. Este método solo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización relevante.
async associateTokenToAccount(account_id: string, token_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
  • token_id: string: ID del token.
Devuelve:
  • Cuando se realiza correctamente, un objeto JSON de la cuenta actualizada.
Ejemplo 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 devuelve los detalles de una cuenta especificada, incluido el estado de la cuenta.
Ctx.Account.getAccountWithStatus(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, una promesa con los detalles de la cuenta. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 devuelve los detalles de una cuenta especificada.
Ctx.Account.getAccount(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, una promesa con los detalles de la cuenta. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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
Este método devuelve una matriz de los detalles del historial de cuentas para una cuenta especificada.
Ctx.Account.history(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, una promesa con la matriz de detalles del historial de cuentas. En caso de error, un rechazo con un mensaje de error. El valor de retorno es el mismo que el método "getAccountHistory".
Ejemplo 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 devuelve el saldo retenido de una cuenta especificada.
Ctx.Account.getAccountOnHoldBalance(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • Cuando se realiza correctamente, una promesa con un objeto JSON que muestra el saldo retenido de la cuenta especificada. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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
Este método devuelve una lista de todas las cuentas. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
Ctx.Account.getAllAccounts()
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una promesa con un objeto JSON que muestra todas las cuentas. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de 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 devuelve los detalles de usuario de una cuenta especificada.
Ctx.Account.getUserByAccountId(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, promesa con un objeto JSON que incluye tres propiedades:
    • user_id: nombre de usuario o ID de correo electrónico del usuario.
    • org_id: ID del proveedor de servicios de miembros (MSP) del usuario en la organización de red actual.
    • token_id: ID del token.
  • En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
   "token_id": "digiCurr101",
   "user_id": "user1",
   "org_id": "Org1MSP"
}
getAccountBalance
Este método devuelve el saldo de una cuenta especificada.
Ctx.Account.getAccountBalance(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • Si se realiza correctamente, un mensaje de promesa con un objeto JSON que incluye dos propiedades:
    • msg: mensaje que muestra el saldo actual.
    • user_balance: valor numérico del saldo actual.
  • En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
    "msg": "Current Balance is: 200",
    "user_balance": 200
}
getAllOrgAccounts
Este método devuelve una lista de todas las cuentas de token que pertenecen a una organización especificada.
Ctx.Account.getAllOrgAccounts(org_id: string) 
Parámetros:
  • org_id: string: ID del proveedor de servicios de miembros (MSP) de la organización.
Devuelve:
  • Cuando se realiza correctamente, una lista de todas las cuentas de la organización especificada.
Ejemplo 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 la gestión de roles

addRoleMember
Este método agrega un rol a un usuario y token especificados.
Ctx.Token.addRoleMember(role: string, account_id: string, token: <Instance of Token Class>)
Parámetros:
  • role: string: nombre del rol que se va a agregar al usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación. Del mismo modo, el rol notary corresponde a la propiedad notary_role_name del archivo de especificación.
  • account_id: number: ID de cuenta al que agregar el rol.
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • En caso de ejecución correcta, una promesa con un mensaje de ejecución correcta. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
    "msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id :          Org1MSP, user_id : user1)"
}
removeRoleMember
Este método elimina un rol de un usuario y token especificados.
Ctx.Token.removeRoleMember(role: string, account_id: string, token: <Instance of Token Class>)
Parámetros:
  • role: string: nombre del rol que se va a eliminar del usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación. Del mismo modo, el rol notary corresponde a la propiedad notary_role_name del archivo de especificación.
  • account_id: number: ID de cuenta del que se va a eliminar el rol.
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • En caso de ejecución correcta, una promesa con un mensaje de ejecución correcta. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
  "msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"
}
getAccountsByRole
Este método devuelve una lista de todas las cuentas para un rol y token especificados.
Ctx.Role.getAccountsByRole(token_id: string, role: string)
Parámetros:
  • token_id: string: ID del token.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, una promesa con un objeto JSON que muestra todas las cuentas para el rol y el token especificados. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
    "accounts": [
        "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
        "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"
    ]
}
getAccountsByUser
Este método devuelve una lista de todos los ID de cuenta de un usuario especificado.
async getAccountsByUser(org_id: string, user_id: string)
Parámetros:
  • org_id string: ID del proveedor de servicios de miembros (MSP) del usuario en la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de ID de cuenta.
Ejemplo de valor de retorno:
{"accounts":["oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
getUsersByRole
Este método devuelve una lista de todos los usuarios para un rol y token especificados.
Ctx.Role.getUsersByRole(token_id: string, role: string)
Parámetros:
  • token_id: string: ID del token.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, promesa con un objeto JSON que muestra todos los usuarios para el rol y token especificados. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
   "users":[
      {
         "token_id":"digiCurr101",
         "user_id":"user1",
         "org_id":"Org1MSP"
      }
   ]
}
isInRole
Este método indica si un usuario y un token tienen un rol especificado.
Ctx.Token.isInRole(role: string, account_id: string, token: <Instance of Token Class>)
Parámetros:
  • role: string: nombre del rol que se va a comprobar.
  • account_id: number: ID de cuenta que se va a comprobar.
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • En caso de éxito, una promesa con true si el usuario tiene el rol y false si el usuario no tiene el rol. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{"result":"true"}
roleCheck
Este método comprueba si el ID de cuenta proporcionado es miembro de cualquier rol.
Ctx.Token.roleCheck(account_id: string, token: <Instance of Token Class>)
Parámetros:
  • account_id: string: ID de cuenta que se va a comprobar.
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • Si el ID de cuenta forma parte de cualquier rol, devuelve true. En caso contrario, devuelve false.
Ejemplo de valor de retorno:
{ result: true }
getOrgUsersByRole
Este método devuelve información sobre todos los usuarios que tienen un rol especificado en una organización especificada.
Ctx.Role.getOrgUsersByRole(token_id: string, role: string, org_id: string)
Parámetros:
  • token_id: string: ID del token.
  • role: string: nombre del rol que se va a comprobar.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) de la organización.
Devuelve:
  • Cuando se realiza correctamente, una lista de todos los usuarios con el rol especificado en la organización especificada.
Ejemplo de valor de retorno:
{
    "users": [
        {
            "token_id": "token",
            "user_id": "admin",
            "org_id": "Org1MSP"
        },
        {
            "token_id": "token",
            "user_id": "orgAdmin",
            "org_id": "Org1MSP"
        }
    ]
}
getOrgAccountsByRole
Este método devuelve información sobre todas las cuentas que tienen un rol especificado en una organización especificada.
Ctx.Role.getOrgAccountsByRole(token_id: string, role: string, org_id: string)
Parámetros:
  • token_id: string: ID del token.
  • role: string: nombre del rol que se va a comprobar.
  • org_id: string: ID del proveedor de servicios de miembros (MSP) de la organización.
Devuelve:
  • Cuando se realiza correctamente, una lista de todas las cuentas con el rol especificado en la organización especificada.
Ejemplo de valor de retorno:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}

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

getTransactionById
Este método devuelve el historial de un activo Transaction.
async getTransactionById(transaction_id: string)
Parámetros:
  • transaction_id: string: ID del activo de transacción.
Devuelve:
  • Cuando se realiza correctamente, el historial de activos de transacción.
Ejemplo 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
Este método devuelve una matriz de los detalles del historial de transacciones para una cuenta especificada.
async deleteHistoricalTransactions(time_to_expiration: Date)
Parámetros:
  • time_to_expiration: Date: registro de hora que indica cuándo suprimir transacciones. Se suprimirán los activos de transacción que sean anteriores a la hora especificada.
Devuelve:
  • El valor de retorno es el mismo que el método "getAccountTransactionHistory".
  • En caso de éxito, una promesa con la matriz de objetos de transacción de cuenta:
    • transaction_id: ID de la transacción.
    • transacted_account: cuenta con la que se ha realizado la transacción.
    • transaction_type: tipo de transacción.
    • transacted_amount: importe de la transacción.
    • timestamp: hora de la transacción.
    • balance: saldo de cuenta en el momento de la transacción.
    • onhold_balance: saldo retenido en el momento de la transacción.
    • sub_transactions: solo para transferencias masivas, una lista de transacciones que forman parte de una transferencia masiva.
    • holding_id: identificador único devuelto por el método holdTokens.
    • token_id: ID del token.
  • En caso de error, un rechazo con un mensaje de error.
Ejemplo 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
Este método devuelve una matriz de los detalles del historial de transacciones para una cuenta especificada.
Ctx.Account.getAccountTransactionHistory(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • El valor de retorno es el mismo que el método "getAccountTransactionHistory".
  • En caso de éxito, una promesa con la matriz de objetos de transacción de cuenta:
    • transaction_id: ID de la transacción.
    • transacted_account: cuenta con la que se ha realizado la transacción.
    • transaction_type: tipo de transacción.
    • transacted_amount: importe de la transacción.
    • timestamp: hora de la transacción.
    • balance: saldo de cuenta en el momento de la transacción.
    • onhold_balance: saldo retenido en el momento de la transacción.
    • sub_transactions: solo para transferencias masivas, una lista de transacciones que forman parte de una transferencia masiva.
    • holding_id: identificador único devuelto por el método holdTokens.
    • token_id: ID del token.
  • En caso de error, un rechazo con un mensaje de error.
Ejemplo 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
Este método devuelve una matriz de los detalles del historial de transacciones para una cuenta especificada. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform.
await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id: string, filters?: Filters)
Parámetros:
  • account_id: string: ID de la cuenta.
  • filters: string: parámetro opcional. Si está vacío, se devuelven todos los registros. La propiedad PageSize determina el número de registros que se devolverán. Si PageSize es 0, el tamaño de página por defecto es 20. La propiedad Bookmark determina el índice inicial de los registros que se van a devolver. Para obtener más información, consulte la documentación de Hyperledger Fabric. Las propiedades StartTime y EndTime se deben especificar en formato RFC-3339.
Por ejemplo:

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 devuelve una matriz de los detalles del historial de transacciones para una transacción especificada.
await this.Ctx.Account.getSubTransactionHistory(transaction_id)
Parámetros:
  • transaction_id: string: ID de la transacción de transferencia masiva.
Por ejemplo:

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
Este método devuelve una matriz de los detalles del historial de subtransacciones para una transacción especificada.
await this.Ctx.Account.getSubTransactionHistoryWithFilters(transaction_id: string, filters?: SubTransactionFilters)
Parámetros:
  • transaction_id: string: ID de la transacción de transferencia masiva.
  • filters: string: parámetro opcional. Si está vacío, se devuelven todos los registros. La propiedad PageSize determina el número de registros que se devolverán. Si PageSize es 0, el tamaño de página por defecto es 20. La propiedad Bookmark determina el índice inicial de los registros que se van a devolver. Para obtener más información, consulte la documentación de Hyperledger Fabric. Las propiedades StartTime y EndTime se deben especificar en formato RFC-3339.
Por ejemplo:

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

Gestión del comportamiento de los tokens

Los métodos de gestión del ciclo de vida del token se basan en los estándares del marco de taxonomía del token. Para utilizar los métodos de ciclo de vida del token, importe la clase Token del módulo ../lib/token.
import { Token } from '../lib/token';

Métodos para la gestión del comportamiento de los tokens: comportamiento de Mintable

mint
Este método importa una cantidad de tokens, que luego son propiedad del emisor del método. La persona que llama debe tener una cuenta y el rol de minter. La cantidad debe estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el archivo de especificación.
Ctx.Token.mint(quantity: number, token: <Instance of Token Class>)
Parámetros:
  • quantity: number: número total de tokens para acuñar.
  • token: <Instance of Token Class>: activo de token que se va a importar.
Devuelve:
  • En caso de éxito, una promesa con un mensaje de éxito y detalles de toAccount. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 devuelve el número total de tokens acuñados.
Ctx.Token.getTotalMintedTokens(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • Cuando se realiza correctamente, la cantidad de tokens acuñados, en el tipo de dato numérico. Si se produce un error, se devuelve con un mensaje de error.
Ejemplo de valor de retorno:
4000
getNetTokens
Este método devuelve la cantidad neta de tokens que están disponibles en el sistema. Los tokens de red son la cantidad de tokens que quedan después de que los tokens se queman. En forma de ecuación: tokens netos = total de tokens minados - total de tokens quemados. Si no se graban tokens, el número de tokens de red es igual al total de tokens acuñados.
Ctx.Token.getNetTokens(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • Cuando se realiza correctamente, la cantidad de tokens netos, en el tipo de dato de número. Si se produce un error, se devuelve con un mensaje de error.
Ejemplo de valor de retorno:
2000
getMaxMintQuantity
Este método devuelve la cantidad máxima que se puede reducir para un token. Si no se especifica el comportamiento max_mint_quantity, el valor por defecto es 0, lo que permite la minería de cualquier número de tokens.
Ctx.Token.getMaxMintQuantity(token: <Instance of Token Class>)
Parámetros:
  • token: <Instance of Token Class>: activo de token en el que operar.
Devuelve:
  • Si se realiza correctamente, la cantidad máxima mínima del token, en el tipo de dato numérico. Si se produce un error, se devuelve con un mensaje de error.
Ejemplo de valor de retorno:
20000

Métodos para la gestión del comportamiento de los tokens: comportamiento transferible

transfer
Este método transfiere tokens del emisor de llamada de la transacción a la cuenta to_account_id. El emisor de la llamada de este método debe tener una cuenta y la cantidad debe estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el archivo de especificación.
Ctx.Token.transfer(to_account_id: string, quantity: number, token: <Instance of Token Class>)
Parámetros:
  • to_account_id: string: ID de cuenta para recibir los tokens.
  • quantity: number: número total de tokens que se transferirán.
Devuelve:
  • En caso de ejecución correcta, una promesa con un mensaje de ejecución correcta. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 se utiliza para realizar una transferencia masiva de tokens de la cuenta de emisor de llamada a las cuentas especificadas en el objeto flow. El emisor de llamada de este método debe tener una cuenta ya creada.
Ctx.Token.bulkTransfer(flow: object[], token: <Instance of Token Class>)
Parámetros:
  • flow: object[]: matriz de objetos JSON que especifica los detalles y la cantidad del receptor. La cantidad de transferencia debe estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el archivo de especificación. Por ejemplo:
    [{
    	"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>: activo de token en el que operar.
Devuelve:
  • En caso de éxito, una promesa con un mensaje de éxito e información de la cuenta. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 la gestión del comportamiento de los tokens: comportamiento retenible

hold
Este método crea una retención en nombre del propietario de los tokens con la cuenta to_account_id. Se especifica una cuenta de notario, que es responsable de completar o liberar la retención. Cuando se crea la retención, el saldo de token especificado del pagador se retiene. Un saldo retenido no se puede transferir hasta que la retención se haya completado o liberado. El emisor de llamada de este método debe tener una cuenta ya creada.
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: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • to_account_id: string: ID de la cuenta que recibirá los tokens.
  • notary__account_id: string: ID de la cuenta de notario.
  • quantity: number: número total de tokens que se van a retener.
  • time_to_expiration: Date: duración hasta que caduca la retención. Especifique 0 para una retención permanente. De lo contrario, utilice el formato RFC-3339. Por ejemplo, 2021-06-02T12.
  • token: <Instance of Token Class>: activo de token que se va a retener.
Devuelve:
  • En caso de ejecución correcta, una promesa con un mensaje de ejecución correcta. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 completa una retención de tokens, transfiriendo la cantidad especificada de tokens previamente retenidos al receptor. Si el valor quantity es menor que el valor de retención real, la cantidad restante estará disponible de nuevo para el propietario original de los tokens. Este método sólo puede ser llamado por el ID AccountOwner con el rol notary para el ID de operación especificado. La retención solo puede ser completada por el notario.
Ctx.Token.executeHold(operation_id: string, quantity: number, token: <Instance of Token Class>)
Parámetros:
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • quantity: number: número total de tokens para completar una retención.
  • token: <Instance of Token Class>: activo de token sobre el que completar una retención.
Devuelve:
  • En caso de ejecución correcta, una promesa con un mensaje de ejecución correcta. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 una retención de tokens. La transferencia no se ha completado y todos los tokens retenidos están disponibles de nuevo para el propietario original. El ID AccountOwner con el rol notary puede llamar a este método dentro del límite de tiempo especificado o bien el pagador, el beneficiario o el notario después del límite de tiempo especificado.
Ctx.Token.releaseHold(operation_id: string, token: <Instance of Token Class>)
Parámetros:
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • token: <Instance of Token Class>: activo de token sobre el que liberar una retención.
Devuelve:
  • En caso de ejecución correcta, una promesa con un mensaje de ejecución correcta. En caso de error, un rechazo con un mensaje de error.
Ejemplo 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
Este método devuelve una lista de todos los IDs de tenencia de una cuenta especificada.
Ctx.Account.getOnHoldIds(account_id: string)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, una promesa con un objeto JSON que muestra todos los ID de tenencia de la cuenta especificada. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
   "msg":"Holding Ids are: ohold~digicur~digiCurr101~opr_121",
   "holding_ids":[
      "ohold~digicur~digiCurr101~opr_121"
   ]
}
getOnHoldDetailsWithOperationId
Este método devuelve los detalles de la transacción retenida para un ID de operación y token especificados.
Ctx.Hold.getOnHoldDetailsWithOperationId(token_id: string, operation_id: string)
Parámetros:
  • token_id: string: ID del token.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
Devuelve:
  • Si se realiza correctamente, un objeto de retención que incluye las siguientes propiedades:
    • holding_id: ID de la tenencia de la transacción.
    • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
    • from_account_id: ID de cuenta del propietario actual de los tokens retenidos.
    • to_account_id: ID de cuenta del receptor.
    • notary_account_id: ID de la cuenta del notario.
    • token_id: string: ID del token guardado.
    • quantity: cantidad de tokens que están retenidos para el ID de retención.
    • time_to_expiration: duración hasta que caduca la retención.
  • En caso de error, un rechazo con un mensaje de error.
Ejemplo 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 devuelve el saldo retenido de un ID de operación y token especificados. Este método puede ser invocado por cualquier persona.
Ctx.Hold.getOnHoldBalanceWithOperationId(token_id: string, operation_id: string)
Parámetros:
  • token_id: string: ID del token.
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
Devuelve:
  • En caso de éxito, un objeto de promesa con el saldo retenido para el ID de operación y el token especificados. En caso de error, un rechazo con un mensaje de error
Ejemplo de valor de retorno:
{
    "msg": "Current Holding Balance of Operation 'op1' for token 'token1' is: 10",
    "holding_balance": 10
}

Métodos para la gestión del comportamiento de los tokens: comportamiento que se puede quemar

burn
Este método desactiva o graba tokens de la cuenta del emisor de la llamada de la transacción. El emisor de la llamada de este método debe tener una cuenta y el rol de quemador. La cantidad debe estar dentro de los valores decimales especificados por el parámetro decimal del comportamiento divisible en el archivo de especificación.
Ctx.Token.burn(quantity: number, token: <Instance of Token Class>)
Parámetros:
  • quantity: number: número total de tokens para grabar.
  • token: <Instance of Token Class>: activo de token que se va a quemar.
Devuelve:
  • En caso de ejecución correcta, una promesa con un mensaje de ejecución correcta. En caso de error, un rechazo con un mensaje de error.
Ejemplo de valor de retorno:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}