Proyecto Scaffolded Go 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 cadena 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 andamiaje y los métodos que no están directamente relacionados con los tokens, consulte Scaffolded Go Chaincode Project.

Modelo

La capacidad de persistencia transparente, o ORM simplificado, se captura en la clase OchainModel.

package src
type Digicur struct {
    AssetType               string                 `json:"AssetType" final:"otoken"`
    Token_id                string                 `json:"Token_id" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
    Token_name              string                 `json:"Token_name" final:"digicur"`
    Token_desc              string                 `json:"Token_desc" validate:"max=256"`
    Token_type              string                 `json:"Token_type" final:"fungible" validate:"regexp=^fungible$"`
    Behavior                []string               `json:"Behavior" final:"[\"divisible\",\"mintable\",\"transferable\",\"burnable\",\"holdable\",\"roles\"]"`
    Roles                   map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\",\"burner_role_name\":\"burner\",\"notary_role_name\":\"notary\"}"`
    Mintable                map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
    Divisible               map[string]interface{} `json:"Divisible" final:"{\"Decimal\":1}"`
    Token_to_currency_ratio int                    `json:"Token_to_currency_ratio" validate:"int"`
    Currency_representation string                 `json:"Currency_representation" validate:"string"`
    Metadata                interface{}            `json:"Metadata,omitempty"`
}

Controlador

Solo hay un controlador principal.

type Controller struct {
    Ctx trxcontext.TrxContext
}

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 SDK de token para escribir métodos personalizados para la aplicación de negocio.

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 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: []map[string]interface{})

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 MVCC Optimization.

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 completar otras tareas del ciclo de vida del token sin ninguna codificación adicional. Los métodos de controlador deben ser públicos para poder ser invocados. Los nombres de métodos públicos comienzan con un carácter en mayúscula. Los nombres de métodos que comienzan con un carácter en minúscula son privados.

Métodos de Gestión de Control de Acceso

AddTokenAdmin
Este método agrega un usuario como Token Admin del código de cadena. Este método solo puede ser llamado por un Token Admin del código de cadena.
func (t *Controller) AddTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddTokenAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha agregado como Token Admin del código de cadena.
Ejemplo de valor devuelto:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
Este método elimina un usuario como Token Admin del código de cadena. Este método solo puede ser llamado por un Token Admin del código de cadena.
func (t *Controller) RemoveTokenAdmin(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveAdmin", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.RemoveAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se ha eliminado como Token Admin del código de cadena.
Ejemplo de valor devuelto:
{"msg":"Successfuly 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 pueden llamar a esta función en cualquier otro usuario de la red blockchain. Otros usuarios pueden llamar a este método solo en sus propias cuentas.
func (t *Controller) IsTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.IsTokenAdmin", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil || !auth {
            return false, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Auth.IsUserTokenAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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.
Ejemplo de valor devuelto:
{"result":false}
GetAllTokenAdmins
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadena. Este método solo puede ser llamado por Token Admin o Org Admin del código de cadena.
func (t *Controller) GetAllTokenAdmins() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetAllAdmins", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.GetAllAdmins()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista JSON de administradores que incluye objetos OrgId y UserId.
Ejemplo de valor devuelto:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user2"}]}
AddOrgAdmin
Este método agrega un usuario como Org Admin de la organización. 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 especificada.
func (t *Controller) AddOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddOrgAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se agregó como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método elimina un usuario como 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 la organización especificada.
func (t *Controller) RemoveOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.RemoveOrgAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha eliminado como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "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 cualquier Org Admin.
func (t *Controller) GetOrgAdmins() (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetOrgAdmins", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.GetAllOrgAdmins()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de JSON que incluya objetos OrgId y UserId.
Ejemplo de valor devuelto:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAdmin
Este método agrega un usuario como Token Admin del código de cadena. Este método solo puede ser llamado por un Token Admin del código de cadena.
func (t *Controller) AddTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddTokenAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha agregado como Token Admin del código de cadena.
Ejemplo de valor devuelto:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
Este método elimina un usuario como Token Admin del código de cadena. Este método solo puede ser llamado por un Token Admin del código de cadena.
func (t *Controller) RemoveTokenAdmin(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveAdmin", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.RemoveAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se ha eliminado como Token Admin del código de cadena.
Ejemplo de valor devuelto:
{"msg":"Successfuly 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. Esta función solo puede ser llamada por Token Admin, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) IsTokenAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.IsTokenAdmin", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil || !auth {
            return false, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Auth.IsUserTokenAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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.
Ejemplo de valor devuelto:
{"result":false}
GetAllTokenAdmins
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadena. Este método solo se puede llamar mediante Token Admin o Token Auditor.
func (t *Controller) GetAllTokenAdmins() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetAllAdmins", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Admin.GetAllAdmins()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista JSON de administradores que incluye objetos OrgId y UserId.
Ejemplo de valor devuelto:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user2"}]}
AddOrgAdmin
Este método agrega un usuario como Org Admin de la organización. 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 especificada.
func (t *Controller) AddOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.AddOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.AddOrgAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se agregó como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método elimina un usuario como 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 la organización especificada.
func (t *Controller) RemoveOrgAdmin(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.RemoveOrgAdmin", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.RemoveOrgAdmin(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha eliminado como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "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 se puede llamar mediante Token Admin, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetOrgAdmins() (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Admin.GetOrgAdmins", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Admin.GetAllOrgAdmins()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de JSON que incluya objetos OrgId y UserId.
Ejemplo de valor devuelto:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAuditor
Este método agrega un usuario como Token Auditor del código de cadena. Este método solo puede ser llamado por un Token Admin del código de cadena.
func (t *Controller) AddTokenAuditor(org_id string, user_id string) (interface{}, error)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha agregado como Token Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "f0888dd52f39dfa669275cc8f35d0b47b37b8407d384493d16970fcbb377f937",
        "payload": {
            "msg": "Successfully added Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 268
    }
}
RemoveTokenAuditor
Este método elimina un usuario como Token Auditor del código de cadena. Este método solo puede ser llamado por un Token Admin del código de cadena.
func (t *Controller) RemoveTokenAuditor(org_id string, user_id string) (interface{}, error)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se ha eliminado como Token Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "2f01f48eceaf2dff175f98b96a5bdd22c949f48fc5683ce86d6141cc4892aee3",
        "payload": {
            "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 270
    }
}
GetTokenAuditors
Este método devuelve todos los Token Auditors del código de cadena. Este método solo puede ser llamado por un Token Admin o Token Auditor del código de cadena.
func (t *Controller) GetTokenAuditors() (interface{}, error)
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "18eaa81b04d43db64f28287bab1cf6609e2a1d8ff84852ff73849ddb9a9dfba1",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "auditor_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 269
    }
}
AddOrgAuditor
Este método agrega un usuario como Org Auditor del código de cadena. Este método solo puede ser llamado por un Token Admin o Org Admin del código de cadena.
func (t *Controller) AddOrgAuditor(org_id string, user_id string) (interface{}, error)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha agregado como Org Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "3d5ec46003c68c6208d43c82894bd6da5c0b763339cc5212e09b71d39d0d80e2",
        "payload": {
            "msg": "Successfully added Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 271
    }
}
RemoveOrgAuditor
Este método elimina un usuario como Org Auditor del código de cadena. Este método solo puede ser llamado por un Token Admin o Org Admin del código de cadena.
func (t *Controller) RemoveOrgAuditor(org_id string, user_id string) (interface{}, error)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se ha eliminado como Org Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "713a120641afbc4dfaeac73b82c9fd51df6fcfd7d4d9a82553d3c487bf11f530",
        "payload": {
            "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 273
    }
}
GetOrgAuditors
Este método devuelve todos los Org Auditors del código de cadena. Este método solo se puede llamar mediante Token Admin, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetOrgAuditors() (interface{}, error)
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "07656bf434616d7a3d7fe4fb81dc80c8cc608991648adfd9f6f2f2b9f6ddf468",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "cb"
                },
                {
                    "OrgId": "CB",
                    "UserId": "issuer_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 272
    }
}

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

Init
Este método se llama cuando se despliega el código de cadena. 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 conectado a la instancia. org_id es el ID del proveedor de servicios de afiliación (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 AddTokenAdmin y RemoveTokenAdmin.
func (t *Controller) Init(adminList []admin.TokenAdminAsset) (interface{}, error) {
    list, err := t.Ctx.Admin.InitAdmin(adminList)
    if err != nil {
        return nil, fmt.Errorf("initializing admin list failed %s", err.Error())
    }
    return list, nil
}
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, macOS y CLI de Linux:
'[{"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.
func (t *Controller) InitializeDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Save", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Save(&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 pueden variar y se describen en el archivo de especificación de token. No incluya parámetros que estén marcados como de solo lectura en el archivo de especificación.

    Puede especificar el parámetro asset en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Visual Studio Code: utilice la GUI para transferir parámetros individuales que corresponden a los campos de clase de token.

    CLI/Postman: transfiera una cadena JSON serializada que incluya los campos de especificación de token, como se muestra en el siguiente ejemplo.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Devuelve:
  • En caso de éxito, una representación JSON del activo de token que se creó.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "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.
func (t *Controller) UpdateDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Update", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Update(&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 pueden variar y se describen en el archivo de especificación de token. No incluya parámetros que estén marcados como de solo lectura en el archivo de especificación.

    Puede especificar el parámetro asset en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Visual Studio Code: utilice la GUI para transferir parámetros individuales que corresponden a los campos de clase de token.

    CLI/Postman: transfiera una cadena JSON serializada que incluya los campos de especificación de token, como se muestra en el siguiente ejemplo.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Devuelve:
  • Cuando se realiza correctamente, se actualiza una representación JSON del activo de token.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenDecimals
Este método devuelve el número de decimales que se han configurado para un token fraccionario. Si no se ha especificado el comportamiento divisible para el token, el valor por defecto es 0. Este método solo puede ser llamado por un Token Admin o Org Admin del código de cadena.
func (t *Controller) GetTokenDecimals(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenDecimals", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    tokenDecimal, err := t.Ctx.Token.GetTokenDecimals(token_id)
    if err != nil {
        return nil, fmt.Errorf("Error in GetTokenDecimals %s", err.Error())
    }
    response := make(map[string]interface{})
    response["msg"] = fmt.Sprintf("Token Id: %s has %d decimal places.", token_id, tokenDecimal)
    return response, nil
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que muestra el número de decimales de token.
Ejemplo de valor devuelto:
{"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 puede ser llamado por un Token Admin o Org Admin del código de cadena.
func (t *Controller) GetTokenById(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Get", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    tokenAsset, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return tokenAsset.Interface(), err
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, un objeto JSON que represente el activo de token.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "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.
func (t *Controller) GetTokenHistory(token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenHistory", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.History(token_id)
}
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • En caso de éxito, un objeto JSON que represente el historial de tokens.
Ejemplo de valor devuelto:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetAllTokens
Este método devuelve todos los tokens que se almacenan en la base de datos de estado. Este método solo puede ser llamado por un Token Admin o Org Admin del código de cadena.
func (t *Controller) GetAllTokens() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetAllTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetAllTokens()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, un objeto JSON que represente todos los activos de token.
Ejemplo de valor devuelto:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 2,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
Este método devuelve todos los objetos de token con un nombre especificado. Este método solo puede ser llamado por un Token Admin o Org Admin del código de cadena. Este método utiliza consultas enriquecidas de Berkeley DB SQL y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
func (t *Controller) GetTokensByName(token_name string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokensByName", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.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:
  • Si se realiza correctamente, un objeto JSON de todos los activos de token que coinciden con el nombre.
Ejemplo de valor devuelto:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
Init
Este método se llama cuando se despliega el código de cadena. 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 conectado a la instancia. org_id es el ID del proveedor de servicios de afiliación (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 AddTokenAdmin y RemoveTokenAdmin.
func (t *Controller) Init(adminList []admin.TokenAdminAsset) (interface{}, error) {
    list, err := t.Ctx.Admin.InitAdmin(adminList)
    if err != nil {
        return nil, fmt.Errorf("initializing admin list failed %s", err.Error())
    }
    return list, nil
}
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, macOS y CLI de Linux:
'[{"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.
func (t *Controller) InitializeDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Save", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Save(&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 pueden variar y se describen en el archivo de especificación de token. No incluya parámetros que estén marcados como de solo lectura en el archivo de especificación.

    Puede especificar el parámetro asset en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Visual Studio Code: utilice la GUI para transferir parámetros individuales que corresponden a los campos de clase de token.

    CLI/Postman: transfiera una cadena JSON serializada que incluya los campos de especificación de token, como se muestra en el siguiente ejemplo.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Devuelve:
  • En caso de éxito, una representación JSON del activo de token que se creó.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "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.
func (t *Controller) UpdateDigicurToken(asset Digicur) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Update", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.Update(&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 pueden variar y se describen en el archivo de especificación de token. No incluya parámetros que estén marcados como de solo lectura en el archivo de especificación.

    Puede especificar el parámetro asset en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Visual Studio Code: utilice la GUI para transferir parámetros individuales que corresponden a los campos de clase de token.

    CLI/Postman: transfiera una cadena JSON serializada que incluya los campos de especificación de token, como se muestra en el siguiente ejemplo.

    "{\"token_id\":\"USD\",\"token_desc\":\"token_desc value\",\"Currency_Name\":\"Currency_Name value\"}"

Devuelve:
  • Cuando se realiza correctamente, se actualiza una representación JSON del activo de token.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenDecimals
Este método devuelve el número de decimales que se han configurado para un token fraccionario. 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, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetTokenDecimals(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenDecimals", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    tokenDecimal, err := t.Ctx.Token.GetTokenDecimals(token_id)
    if err != nil {
        return nil, fmt.Errorf("Error in GetTokenDecimals %s", err.Error())
    }
    response := make(map[string]interface{})
    response["msg"] = fmt.Sprintf("Token Id: %s has %d decimal places.", token_id, tokenDecimal)
    return response, nil
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que muestra el número de decimales de token.
Ejemplo de valor devuelto:
{"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, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetTokenById(token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.Get", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    tokenAsset, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return tokenAsset.Interface(), err
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, un objeto JSON que represente el activo de token.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenHistory
Este método devuelve el historial de tokens para un ID de token especificado. Este método solo se puede llamar mediante Token Admin, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetTokenHistory(token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokenHistory", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.History(token_id)
}
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • En caso de éxito, un objeto JSON que represente el historial de tokens.
Ejemplo de valor devuelto:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
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, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetAllTokens() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetAllTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Token.GetAllTokens()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, un objeto JSON que represente todos los activos de token.
Ejemplo de valor devuelto:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 2,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
Este método devuelve todos los objetos de token con un nombre especificado. Este método solo se puede llamar mediante Token Admin, Token Auditor, Org Admin o Org Auditor. Este método utiliza consultas enriquecidas de Berkeley DB SQL y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
func (t *Controller) GetTokensByName(token_name string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTokensByName", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.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:
  • Si se realiza correctamente, un objeto JSON de todos los activos de token que coinciden con el nombre.
Ejemplo de valor devuelto:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]

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 el 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 afiliación (org_id) del usuario de la organización de red actual. Este método solo puede ser llamado por un Token Admin del código de cadena o un Org Admin de la organización especificada.
unc (t *Controller) CreateAccount(org_id string, user_id string, token_type string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.CreateAccount", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.CreateAccount(org_id, user_id, token_type)
}
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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:
  • En caso de éxito, un objeto JSON de la cuenta que se creó. El parámetro BapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de valor devuelto:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "BapAccountVersion": 0,
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0,
   "OnHoldBurnBalance":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.
func (t *Controller) AssociateTokenToAccount(account_id string, token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.AssociateToken", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.AssociateToken(account_id, token_id)
}
Parámetros:
  • account_id string: ID de la cuenta.
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, un objeto JSON de la cuenta actualizada. El parámetro BapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de valor devuelto:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0, 
"OnHoldBurnBalance":0
}
GetAccount
Este método devuelve los detalles de la cuenta para un usuario y token especificados. Este método solo 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.
func (t *Controller) GetAccount(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccount", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountWithStatus(account_id)
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un objeto de cuenta JSON que incluya las siguientes propiedades:
  • AccountId: ID de la cuenta de usuario.
  • UserId: nombre de usuario o ID de correo electrónico del usuario.
  • OrgId: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • TokenId: ID del token.
  • Balance: saldo actual de la cuenta.
  • BalanceOnHold: saldo actual retenido de la cuenta.
  • OnHoldBurnBalance – El balance actual retenido a la espera de la aprobación de la combustión.
  • BapAccountVersion: parámetro de objeto de cuenta para uso interno.
  • Status: estado actual de la cuenta.
Ejemplo de valor devuelto:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "OnHoldBurnBalance": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccountHistory
Este método devuelve los detalles del historial de cuentas para 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.
func (t *Controller) GetAccountHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.History", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.History(account_id)
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una matriz de objetos de cuenta JSON que incluye las siguientes propiedades:
  • TxId: ID de transacción de la transacción devuelta por el libro mayor.
  • Timestamp: hora de la transacción.
  • IsDelete: valor booleano que indica si el registro se ha suprimido.
  • Value: cadena JSON del objeto de cuenta. El parámetro BapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de valor devuelto:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
Este método devuelve el saldo actual retenido para una cuenta y un token especificados. Este método solo 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.
func (t *Controller) GetAccountOnHoldBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountOnHoldBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountOnHoldBalance(account_id)
      return response, err
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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 retenido actual.
Ejemplo de valor devuelto:
{
    "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 solo puede ser llamado por un Token Admin del código de cadena. Este método utiliza consultas enriquecidas de Berkeley DB SQL y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
func (t *Controller) GetAllAccounts() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllAccounts", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Account.GetAllAccounts()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una matriz JSON de todas las cuentas.
Ejemplo de valor devuelto:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
Este método devuelve los detalles del usuario (org_id y user_id) para una cuenta especificada. Cualquier usuario del código de cadenas puede llamar a este método.
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(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 devuelto:
{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}
GetAccountBalance
Este método devuelve el saldo actual de una cuenta y un token especificados. Este método solo 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.
func (t *Controller) GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountBalance(account_id)
      return response, err
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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 cuenta corriente.
Ejemplo de valor devuelto:
{"msg":"Current Balance of oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f 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 solo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización especificada.
func (t *Controller) GetAllOrgAccounts(org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllOrgAccounts", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAllOrgAccounts(org_id)
}
Parámetros:
  • org_id: string: ID del proveedor de servicios de membresía (MSP) de la organización.
Devuelve:
  • Si se realiza correctamente, se muestra una lista de todas las cuentas de la organización especificada.
Ejemplo de valor devuelto:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]
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 el 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 afiliación (org_id) del usuario de la organización de red actual. Este método solo puede ser llamado por un Token Admin del código de cadena o un Org Admin de la organización especificada.
func (t *Controller) CreateAccount(org_id string, user_id string, token_type string, daily_limits ...account.AccountDailyLimits) (interface{}, error) {
auth, err := t.Ctx.Auth.CheckAuthorization("Account.CreateAccount", "TOKEN", map[string]string{"org_id": org_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}
return t.Ctx.Account.CreateAccount(org_id, user_id, token_type, daily_limits...)
}
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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.
  • daily_limits: JSON: objeto que especifica la cantidad máxima de tokens que se pueden utilizar en transacciones diariamente (max_daily_amount) y el número máximo de transacciones que se pueden completar diariamente (max_daily_transactions).

    Puede especificar el parámetro daily_limits en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Código de Visual Studio: { "max_daily_amount": 1000, "max_daily_transactions": 100 }

    CLI/Postman: "{\"max_daily_amount\":1000,\"max_daily_transactions\":100}"

Devuelve:
  • En caso de éxito, un objeto JSON de la cuenta que se creó. El parámetro BapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de valor devuelto:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "BapAccountVersion": 0,
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0,
   "OnHoldBurnBalance":0,
   "max_daily_amount": 1000,
   "max_daily_transactions": 100
}
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.
func (t *Controller) AssociateTokenToAccount(account_id string, token_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.AssociateToken", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.AssociateToken(account_id, token_id)
}
Parámetros:
  • account_id string: ID de la cuenta.
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, un objeto JSON de la cuenta actualizada. El parámetro BapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de valor devuelto:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0, 
"OnHoldBurnBalance":0
}
GetAccount
Este método devuelve los detalles de la cuenta para un usuario y token especificados. Este método solo se puede llamar mediante Token Admin o Token Auditor, un Org Admin o Org Auditor de la organización especificada o el AccountOwner de la cuenta.
func (t *Controller) GetAccount(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccount", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountWithStatus(account_id)
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un objeto de cuenta JSON que incluya las siguientes propiedades:
  • AccountId: ID de la cuenta de usuario.
  • UserId: nombre de usuario o ID de correo electrónico del usuario.
  • OrgId: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • TokenId: ID del token.
  • Balance: saldo actual de la cuenta.
  • BalanceOnHold: saldo actual retenido de la cuenta.
  • OnHoldBurnBalance: el saldo actual retenido a la espera de la aprobación de la quema.
  • BapAccountVersion: parámetro de objeto de cuenta para uso interno.
  • Status: estado actual de la cuenta.
Ejemplo de valor devuelto:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "OnHoldBurnBalance": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccountHistory
Este método devuelve los detalles del historial de cuentas para 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.
func (t *Controller) GetAccountHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.History", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.History(account_id)
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una matriz de objetos de cuenta JSON que incluye las siguientes propiedades:
  • TxId: ID de transacción de la transacción devuelta por el libro mayor.
  • Timestamp: hora de la transacción.
  • IsDelete: valor booleano que indica si el registro se ha suprimido.
  • Value: cadena JSON del objeto de cuenta. El parámetro BapAccountVersion se define en el objeto de cuenta para uso interno.
Ejemplo de valor devuelto:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
GetAccountOnHoldBalance
Este método devuelve el saldo actual retenido para una cuenta y un token especificados. Este método solo puede ser llamado por Token Admin o Token Auditor, Org Admin o Org Auditor de la organización especificada o el propietario de la cuenta especificado.
func (t *Controller) GetAccountOnHoldBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountOnHoldBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountOnHoldBalance(account_id)
      return response, err
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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 retenido actual.
Ejemplo de valor devuelto:
{
    "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 solo puede ser llamado por un Token Admin o Token Auditor del código de cadena. Este método utiliza consultas enriquecidas de Berkeley DB SQL y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
func (t *Controller) GetAllAccounts() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllAccounts", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.Account.GetAllAccounts()
}
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una matriz JSON de todas las cuentas.
Ejemplo de valor devuelto:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
Este método devuelve los detalles del usuario (org_id y user_id) para una cuenta especificada. Este método solo puede ser llamado por Token Admin o Token Auditor, o por un Org Admin o Org Auditor de la organización especificada.
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(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 devuelto:
{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}
GetAccountBalance
Este método devuelve el saldo actual de una cuenta y un token especificados. Este método solo puede ser llamado por Token Admin o Token Auditor, Org Admin o Org Auditor de la organización especificada o el propietario de la cuenta especificado.
func (t *Controller) GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountBalance", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      response, err := t.Ctx.Account.GetAccountBalance(account_id)
      return response, err
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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 cuenta corriente.
Ejemplo de valor devuelto:
{"msg":"Current Balance of oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f 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 solo puede ser llamado por Token Admin o Token Auditor, o por un Org Admin o Org Auditor de la organización especificada.
func (t *Controller) GetAllOrgAccounts(org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAllOrgAccounts", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAllOrgAccounts(org_id)
}
Parámetros:
  • org_id: string: ID del proveedor de servicios de membresía (MSP) de la organización.
Devuelve:
  • Si se realiza correctamente, se muestra una lista de todas las cuentas de la organización especificada.
Ejemplo de valor devuelto:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]

Métodos para la gestión de roles

AddRole
Este método agrega un rol a un usuario y token especificados. 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 especificada que también tenga el rol especificado.
func (t *Controller) AddRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.AddRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.AddRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • user_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 afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, se mostrará un mensaje con los detalles de la cuenta.
Ejemplo de valor devuelto:
 {"msg":"Successfully added role minter to 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 solo puede ser llamado por un Token Admin del código de cadena o un Org Admin de la organización especificada que también tenga el rol especificado.
func (t *Controller) RemoveRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.RemoveRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.RemoveRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • user_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 afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, se mostrará un mensaje con los detalles de la cuenta.
Ejemplo de valor devuelto:
{"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 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.
func (t *Controller) GetAccountsByRole(token_id string, user_role string) (interface{}, error) {
    auth, err:= t.Ctx.Auth.CheckAuthorization("Role.GetAccountsByRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Role.GetAccountsByRole(token_id, user_role)
}
Parámetros:
  • token_id string: ID del token.
  • user_role string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, una matriz JSON de ID de cuenta.
Ejemplo de valor devuelto:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetAccountsByUser
Este método devuelve una lista de todos los IDs de cuenta para un ID de organización y un ID de usuario especificados. Este método solo puede ser llamado por un Token Admin del código de cadena, un Org Admin de la organización especificada o por el Account Owner especificado en los parámetros.
func (t *Controller) GetAccountsByUser(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountsByUser", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountsByUser(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una matriz JSON de ID de cuenta.
Ejemplo de valor devuelto:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
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 o por el Account Owner especificado en los parámetros.
func (t *Controller) GetUsersByRole(token_id string, user_role string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetUsersByRole", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetUsersByRole(token_id, user_role)
}
Parámetros:
  • token_id string: ID del token.
  • user_role string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de los objetos de usuario (org_id y user_id).
Ejemplo de valor devuelto:
{"Users":[{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}]}
IsInRole
Este método devuelve un valor booleano para indicar si un usuario y un token tienen un rol especificado. Este método solo puede ser llamado por Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta.
func (t *Controller) IsInRole(token_id string, org_id string, user_id string, user_role string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.IsInRole", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      result, err := t.Ctx.Token.IsInRole(user_role, account_id, tokenAssetValue.Interface())
      if err != nil {
            return nil, fmt.Errorf("error in IsInRole %s", err.Error())
      }
      response := make(map[string]interface{})
      response["result"] = result
      return response, nil
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
  • user_role string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, una cadena JSON del resultado booleano.
Ejemplo de valor devuelto:
{"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 solo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización especificada.
func (t *Controller) GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgAccountsByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgAccountsByRole(token_id, user_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 membresía (MSP) de la organización.
Devuelve:
  • En caso de éxito, una lista de todas las cuentas con el rol especificado en la organización especificada.
Ejemplo de valor devuelto:
{
    "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 solo puede ser llamado por un Token Admin del código de cadena o por un Org Admin de la organización especificada.
func (t *Controller) GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgUsersByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgUsersByRole(token_id, user_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 membresía (MSP) de la organización.
Devuelve:
  • En caso de éxito, una lista de todos los usuarios con el rol especificado en la organización especificada.
Ejemplo de valor devuelto:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
AddRole
Este método agrega un rol a un usuario y token especificados. 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 especificada que también tenga el rol especificado.
func (t *Controller) AddRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.AddRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.AddRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • user_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 afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, se mostrará un mensaje con los detalles de la cuenta.
Ejemplo de valor devuelto:
 {"msg":"Successfully added role minter to 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 solo puede ser llamado por un Token Admin del código de cadena o un Org Admin de la organización especificada que también tenga el rol especificado.
func (t *Controller) RemoveRole(token_id string, user_role string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.RemoveRoleMember", "TOKEN", map[string]string{"org_id": org_id, "token_id": token_id, "role": user_role})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Token.RemoveRoleMember(user_role, account_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • user_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 afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, se mostrará un mensaje con los detalles de la cuenta.
Ejemplo de valor devuelto:
{"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 todos los ID de cuenta para un rol y token especificados. Este método solo se puede llamar mediante Token Admin o Token Auditor.
func (t *Controller) GetAccountsByRole(token_id string, user_role string) (interface{}, error) {
    auth, err:= t.Ctx.Auth.CheckAuthorization("Role.GetAccountsByRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Role.GetAccountsByRole(token_id, user_role)
}
Parámetros:
  • token_id string: ID del token.
  • user_role string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, una matriz JSON de ID de cuenta.
Ejemplo de valor devuelto:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetAccountsByUser
Este método devuelve una lista de todos los IDs de cuenta para un ID de organización y un ID de usuario especificados. Este método solo lo pueden llamar Token Admin o Token Auditor, Org Admin o Org Auditor de la organización especificada, o bien Account Owner especificado en los parámetros.
func (t *Controller) GetAccountsByUser(org_id string, user_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountsByUser", "TOKEN", map[string]string{"org_id": org_id, "user_id": user_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetAccountsByUser(org_id, user_id)
}
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una matriz JSON de ID de cuenta.
Ejemplo de valor devuelto:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetUsersByRole
Este método devuelve una lista de todos los usuarios para un rol y token especificados. Este método solo se puede llamar mediante Token Admin o Token Auditor.
func (t *Controller) GetUsersByRole(token_id string, user_role string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetUsersByRole", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetUsersByRole(token_id, user_role)
}
Parámetros:
  • token_id string: ID del token.
  • user_role string: nombre del rol que se va a buscar.
Devuelve:
  • Si se realiza correctamente, una matriz JSON de los objetos de usuario (org_id y user_id).
Ejemplo de valor devuelto:
{"Users":[{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}]}
IsInRole
Este método devuelve un valor booleano para indicar si un usuario y un token tienen un rol especificado. Este método solo puede ser llamado por Token Admin o Token Auditor, un Org Admin o Org Auditor de la organización especificada o el propietario de la cuenta especificado.
func (t *Controller) IsInRole(token_id string, org_id string, user_id string, user_role string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Token.IsInRole", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      result, err := t.Ctx.Token.IsInRole(user_role, account_id, tokenAssetValue.Interface())
      if err != nil {
            return nil, fmt.Errorf("error in IsInRole %s", err.Error())
      }
      response := make(map[string]interface{})
      response["result"] = result
      return response, nil
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
  • user_role string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, una cadena JSON del resultado booleano.
Ejemplo de valor devuelto:
{"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 solo se puede llamar mediante Token Admin, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgAccountsByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgAccountsByRole(token_id, user_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 membresía (MSP) de la organización.
Devuelve:
  • En caso de éxito, una lista de todas las cuentas con el rol especificado en la organización especificada.
Ejemplo de valor devuelto:
{
    "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 solo puede ser llamado por Token Admin o Token Auditor, o por un Org Admin o Org Auditor de la organización especificada.
func (t *Controller) GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Role.GetOrgUsersByRole", "TOKEN", map[string]string{"org_id": org_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Role.GetOrgUsersByRole(token_id, user_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 membresía (MSP) de la organización.
Devuelve:
  • En caso de éxito, una lista de todos los usuarios con el rol especificado en la organización especificada.
Ejemplo de valor devuelto:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}

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 solo puede ser llamado por Token Admin del código de cadena, un Org Admin de la organización especificada o el AccountOwner de la cuenta.
func (t *Controller) GetAccountTransactionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistory", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      transactionArray, err := t.Ctx.Account.GetAccountTransactionHistory(account_id, org_id, user_id)
      return transactionArray, err
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, una matriz de objetos de transacción de cuenta JSON que incluye las siguientes propiedades:
  • balance – El saldo de la cuenta.
  • holding_id: ID de una cuenta de haberes.
  • onhold_balance – El saldo retenido.
  • timestamp: hora de la transacción.
  • token_id: ID del token.
  • transacted_account: cuenta con la que se realizó la transacción.
  • transacted_amount: importe de la transacción.
  • transaction_id: ID de la transacción.
  • transaction_type: tipo de transacción.
Ejemplo de valor devuelto:
[{
    "balance": 199,
    "onhold_balance": 0,
    "timestamp": "2021-08-16T17:42:32.905+05:30",
    "token_id": "digiCurr101",
    "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "transacted_amount": 1,
    "transaction_id": "otransaction~c8a9fa001aba6e0d8391b034655889df47eb5103713840b999a4ab41f5e57b38",
    "transaction_type": "DEBIT"
}, {
    "balance": 200,
    "onhold_balance": 0,
    "timestamp": "2021-08-16T17:41:59.262+05:30",
    "token_id": "digiCurr101",
    "transacted_account": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "transacted_amount": 100,
    "transaction_id": "otransaction~65a0bf8ae8108baa7495fbab91c205651c055e9f480f6808753287173026aa69",
    "transaction_type": "MINT"
}]
GetAccountTransactionHistoryWithFilters
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 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.
func (t *Controller) GetAccountTransactionHistoryWithFilters(token_id string, org_id string, user_id string, filters ...account.AccountHistoryFilters) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      // sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"}
      transactionArray, err := t.Ctx.Account.GetAccountTransactionHistoryWithFilters(account_id, org_id, user_id, filters...)
      return transactionArray, err
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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~3f9c306b0ef6994885939c1a6eb5f063b06617ecb932d4a043f323ba53d55f9f",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:27:13.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa324
1abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9200,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~f1d37c3abd5c85c0a399f246d8eb68257c49ab4fe4cdfd3501908583c51c421e",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:27:02.000Z",
    "token_id": "token1",
    "transaction_type": "BULKTRANSFER",
    "number_of_sub_transactions": 2,
    "balance": 9600,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b",
    "transacted_amount": 200,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transaction_type": "BULKTRANSFER",
    "number_of_sub_transactions": 2,
    "balance": 9800,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~07331a1f7be99d6750973674a783da9ec9ca17df23747cdf52d388865d93f9a",
    "transacted_amount": 10000,
    "timestamp": "2022-02-15T18:26:30.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~88b62f329f20fffc6fc9231cb51019a5e9550c78b657123d140897
62397d2b55",
    "transaction_type": "MINT",
    "balance": 10000,
    "onhold_balance": 0
  }
]
GetSubTransactionsById
Este método devuelve una matriz de detalles de historial de subtransacciones para una transacción especificada.
func (t *Controller) GetSubTransactionsById(transaction_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsById", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsById(transaction_id)
}
Parámetros:
  • transaction_id string: ID de la transacción.
Por ejemplo:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
    "transaction_type": "DEBIT",
    "balance": 9900,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9800,
    "onhold_balance": 0
  }
]
GetSubTransactionsByIdWithFilters
Este método devuelve una matriz de detalles de historial de subtransacciones para una transacción especificada.
func (t *Controller) GetSubTransactionsByIdWithFilters(transaction_id string, filters ...account.SubTransactionFilters) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsByIdWithFilters", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.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.
Por ejemplo:

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

[
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
"transaction_type": "DEBIT",
"balance": 9900,
"onhold_balance": 0
},
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
"transaction_type": "DEBIT",
"balance": 9800,
"onhold_balance": 0
}
]
GetTransactionById
Este método devuelve el historial de un activo Transaction.
func (t *Controller) GetTransactionById(transaction_id string) (interface{}, error) {
    return t.Ctx.Transaction.GetTransactionById(transaction_id)
}
Parámetros:
  • transaction_id string: ID del activo de transacción.
Devuelve:
  • En caso de éxito, una matriz JSON del historial de la transacción.
Ejemplo de valor devuelto:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
Este método suprime las transacciones más antiguas de la base de datos de estado.
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Transaction.DeleteHistoricalTransactions", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Transaction.DeleteHistoricalTransactions(timestamp)
}
Parámetros:
  • timestamp string: registro de hora que indica cuándo se deben suprimir las transacciones. Se suprimirán los activos de transacción que sean anteriores a la hora especificada.
GetAccountTransactionHistoryWithFiltersFromRichHistDB
func (t *Controller) GetAccountTransactionHistoryWithFiltersFromRichHistDB(token_id string, org_id string, user_id string, custom_endPoint string, bearer_token string, filters ...account.AccountHistoryFilters) (interface{}, error) {
account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
if err != nil {
return nil, err
}
auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}
// sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"}
transactionArray, err := t.Ctx.Account.GetAccountTransactionHistoryWithFiltersFromRichHistDB(account_id, org_id, user_id, custom_endPoint, bearer_token, filters...)
return transactionArray, err
}
Parámetros:
  • token_id: string: ID del token que se debe acuñar.
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
  • custom_endpoint: punto final de servicio RESTful de la base de datos de historial enriquecida.
  • bearer_token: token de autorización de acceso para el punto final de servicio RESTful.
  • 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.
GetAccountTransactionHistory
Este método devuelve una matriz de detalles de historial de transacciones de cuenta para un usuario y token especificados. Este método solo lo pueden llamar Token Admin o Token Auditor, Org Admin o Org Auditor de la organización especificada, o bien el propietario de la cuenta especificada.
func (t *Controller) GetAccountTransactionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
if err != nil {
return nil, err
}
auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistory", "TOKEN", map[string]string{"account_id": account_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}



transactionArray, err := t.Ctx.Account.GetAccountTransactionHistory(account_id, org_id, user_id)
return transactionArray, err
}
Parámetros:
  • token_id: string: ID del token.
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Ejemplo de valor devuelto:
[
            {
                "transaction_id": "otransaction~64c5a4830949eae1424600f3d4a438c6f603a7c3ea31a68e374b899803999e22",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:37:28.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REJECT_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~a4537ef34a955b023b7c205b9abf06a6c79e4fdd761fb24f41b8eb34126b66c0",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:32.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "APPROVE_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~6237a759422bd9fb112742e8cd7e6450df5a74a32236d9b1005571afed8904a4",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:18.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~06b35071415d74aa1a7c18449149c937d886cae76a832c44cf8d98e84586e76e",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:35:46.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            }
 ]
GetAccountTransactionHistoryWithFilters
Este método devuelve una matriz filtrada de detalles del historial de transacciones de la cuenta para un usuario y token especificados. Este método solo lo pueden llamar Token Admin o Token Auditor, Org Admin o Org Auditor de la organización especificada, o bien el propietario de la cuenta especificada.
func (t *Controller) GetAccountTransactionHistoryWithFilters(token_id string, filters ...account.AccountHistoryFilters) (interface{}, error) {
org_id, err := t.Ctx.Model.GetTransientMapKeyAsString(constants.OrgIdCC)
if err != nil {
return nil, err
}
user_id, err := t.Ctx.Model.GetTransientMapKeyAsString(constants.UserIdCC)
if err != nil {
return nil, err
}
account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
if err != nil {
return nil, err
}
auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"account_id": account_id})
if err != nil && !auth {
return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
}



// sample format of filter: []string{"3", "", "2022-01-16T15:16:36+00:00", "2022-01-17T15:16:36+00:00"}
transactionArray, err := t.Ctx.Account.GetReconciledTransactionHistory(account_id, org_id, user_id, filters...)
return transactionArray, err
}
Parámetros:
  • token_id: string: ID del token.
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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.
Ejemplo de valor devuelto:
[
            {
                "transaction_id": "otransaction~64c5a4830949eae1424600f3d4a438c6f603a7c3ea31a68e374b899803999e22",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:37:28.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REJECT_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~a4537ef34a955b023b7c205b9abf06a6c79e4fdd761fb24f41b8eb34126b66c0",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:32.000Z",
                "balance": 550,
                "onhold_balance": 10,
                "token_id": "USD",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "APPROVE_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~6237a759422bd9fb112742e8cd7e6450df5a74a32236d9b1005571afed8904a4",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:36:18.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            },
            {
                "transaction_id": "otransaction~06b35071415d74aa1a7c18449149c937d886cae76a832c44cf8d98e84586e76e",
                "transacted_amount": 10,
                "timestamp": "2024-12-11T13:35:46.000Z",
                "balance": 540,
                "onhold_balance": 10,
                "token_id": "USD",
                "category": "category value",
                "description": "description value",
                "transacted_account": "oaccount~9d9806fa92aa0c4fdb34eaffac6e830181b5d47e64fbce752195e83024125ca0",
                "transaction_type": "REQUEST_MINT",
                "transacted_org_id": "CB",
                "transacted_user_id'": "creator_user_cb"
            }
 ]
GetSubTransactionsById
Este método devuelve una matriz de detalles de historial de subtransacciones para una transacción especificada. Este método solo puede ser llamado por Token Admin, Token Auditor o el AccountOwner que llamó a la transacción.
func (t *Controller) GetSubTransactionsById(transaction_id string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsById", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetSubTransactionsById(transaction_id)
}
Parámetros:
  • transaction_id string: ID de la transacción.
Por ejemplo:

ochain invoke GetAccountSubTransactionHistory 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
    "transaction_type": "DEBIT",
    "balance": 9900,
    "onhold_balance": 0
  },
  {
    "transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
    "transacted_amount": 100,
    "timestamp": "2022-02-15T18:26:57.000Z",
    "token_id": "token1",
    "transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
    "transaction_type": "DEBIT",
    "balance": 9800,
    "onhold_balance": 0
  }
]
GetSubTransactionsByIdWithFilters
Este método devuelve una matriz de detalles de historial de subtransacciones para una transacción especificada.
func (t *Controller) GetSubTransactionsByIdWithFilters(transaction_id string, filters ...account.SubTransactionFilters) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetSubTransactionsByIdWithFilters", "TOKEN", map[string]string{"transaction_id": transaction_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.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.
Por ejemplo:

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

[
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c4ca4238a0b923820dcc509a6f75849b",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~6600eb38d365552b76f41d4186acece104f31eae331a440f963e6fa75b62ff21",
"transaction_type": "DEBIT",
"balance": 9900,
"onhold_balance": 0
},
{
"transaction_id": "otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b~c81e728d9d4c2f636f067f89cc14862c",
"transacted_amount": 100,
"timestamp": "2022-02-15T18:26:57.000Z",
"token_id": "token1",
"transacted_account": "oaccount~obptok~26e046c8ba8b98da2cdabb78113d67200581ea3d4eea5aa3241abd3598e05d05",
"transaction_type": "DEBIT",
"balance": 9800,
"onhold_balance": 0
}
]
GetTransactionById
Este método devuelve el historial de un activo Transaction. Este método solo puede ser llamado por un Token Admin o Token Auditor, un Org Admin o Org Auditor de la organización especificada, o por un participante en la transacción (emisor, destinatario, notario).
func (t *Controller) GetTransactionById(transaction_id string) (interface{}, error) {
    return t.Ctx.Transaction.GetTransactionById(transaction_id)
}
Parámetros:
  • transaction_id string: ID del activo de transacción.
Devuelve:
  • En caso de éxito, una matriz JSON del historial de la transacción.
Ejemplo de valor devuelto:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
Este método suprime las transacciones más antiguas de la base de datos de estado.
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error) {
      auth, err := t.Ctx.Auth.CheckAuthorization("Transaction.DeleteHistoricalTransactions", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Transaction.DeleteHistoricalTransactions(timestamp)
}
Parámetros:
  • timestamp string: registro de hora que indica cuándo se deben suprimir las transacciones. Se suprimirán los activos de transacción que sean anteriores a la hora especificada.

Métodos para la gestión del comportamiento del token: comportamiento minable

IssueTokens
Este método acuña tokens, que luego son propiedad del emisor de llamada 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 extraer 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 AccountOwner de la cuenta con el rol minter.
func (t *Controller) IssueTokens(token_id string, quantity float64) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Mint(quantity, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • quantity float64: número de tokens que se deben acuñar.
Devuelve:
  • En caso de éxito, se mostrará un mensaje con los detalles de la cuenta.
Ejemplo de valor devuelto:
{"msg":"Successfully minted 100 tokens to account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetTotalMintedTokens
Este método devuelve el número total de tokens acuñados para un token especificado. Este método solo puede ser llamado por un Token Admin o Org Admin del código de cadena.
func (t *Controller) GetTotalMintedTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTotalMintedTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetTotalMintedTokens(tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que indique el número total de tokens.
Ejemplo de valor devuelto:
{"msg":"total minted amount for token with id digiCurr101 is 1000","quantity":1000}
GetNetTokens
Este método devuelve el número neto total de tokens disponibles en el sistema para un token especificado. El total neto de tokens es la cantidad de tokens que quedan después de que los tokens se queman. En forma de ecuación tokens netos = total de tokens acuñados - total de tokens quemados. Si no se queman tokens, el número de tokens netos es igual al total de tokens acuñados. Este método solo puede ser llamado por un Token Admin o Org Admin del código de cadena.
func (t *Controller) GetNetTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetNetTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetNetTokens(tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que indique el número neto de tokens.
Ejemplo de valor devuelto:
{"msg":"net minted amount for token with id digiCurr101 is 1000","quantity":1000}
RequestMint
Este método puede ser llamado por un minter para enviar una solicitud al notario minter para crear una cantidad especificada de tokens.
func (t *Controller) RequestMint(token_id string, operation_id string, notary_org_id string, notary_user_id string, quantity float64, timeToExpiration string, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
 }
return t.Ctx.Token.Hold(operation_id, "", notary_account_id, quantity, timeToExpiration, tokenAssetValue.Interface(), constants.HoldMint, info_details...)
}
Parámetros:
  • token_id: string: ID del token que se debe acuñar.
  • operation_id: string: ID de operación único que representa la solicitud de moneda.
  • notary_org_id: string – El ID del proveedor de servicios de membresía (MSP) del notario menor que procesará la solicitud.
  • notary_user_id: string: nombre de usuario o ID de correo electrónico del notario menor que procesará la solicitud.
  • quantity: number: cantidad de tokens que se deben acuñar.
  • TimeToExpiration: el tiempo después del cual caduca la solicitud de extracción y ya no es válida.
  • info_details: JSON: objeto que especifica la categoría (category) y la descripción (description) de la solicitud.

    Puede especificar el parámetro info_details en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Código de Visual Studio: { "category": "category value", "description": "description value" }

    CLI/Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Ejemplo de valor devuelto:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveMint
Este método puede ser llamado por un notario de minter para aprobar una solicitud de acuñación.
func (t *Controller) ApproveMint(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ExecuteHold(operation_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id: string: ID del token que se debe acuñar.
  • operation_id: string: ID de operación único que representa la solicitud de moneda.
Ejemplo de valor devuelto:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectMint
Este método puede ser llamado por un notario de minter para rechazar una solicitud de acuñación.
func (t *Controller) RejectMint(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id: string: ID del token que se debe acuñar.
  • operation_id: string: ID de operación único que representa la solicitud de moneda.
Ejemplo de valor devuelto:
{
 msg: "Successfully rejected mint request with Operation Id 'operation1' to mint 100 tokens of token id token"
}
IssueTokens
Este método acuña tokens, que luego son propiedad del emisor de llamada del método.
func (t *Controller) IssueTokens(token_id string, quantity float64, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
 }
return t.Ctx.Token.Mint(quantity, tokenAssetValue.Interface(), info_details...)
}
Parámetros:
  • token_id: string: ID del token.
  • quantity: el número de tokens que se deben acuñar.
  • info_details: JSON: objeto que especifica la categoría (category) y la descripción (description) de la solicitud.

    Puede especificar el parámetro info_details en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Código de Visual Studio: { "category": "category value", "description": "description value" }

    CLI/Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Ejemplo de valor devuelto:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
GetTotalMintedTokens
Este método devuelve el número total de tokens acuñados para un token especificado. Este método solo se puede llamar mediante Token Admin, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetTotalMintedTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetTotalMintedTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetTotalMintedTokens(tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que indique el número total de tokens.
Ejemplo de valor devuelto:
{"msg":"total minted amount for token with id digiCurr101 is 1000","quantity":1000}
GetNetTokens
Este método devuelve el número neto total de tokens disponibles en el sistema para un token especificado. El total neto de tokens es la cantidad de tokens que quedan después de que los tokens se queman. En forma de ecuación tokens netos = total de tokens acuñados - total de tokens quemados. Si no se queman tokens, el número de tokens netos es igual al total de tokens acuñados. Este método solo se puede llamar mediante Token Admin, Token Auditor, Org Admin o Org Auditor.
func (t *Controller) GetNetTokens(token_id string) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Token.GetNetTokens", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    return t.Ctx.Token.GetNetTokens(tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, una cadena JSON que indique el número neto de tokens.
Ejemplo de valor devuelto:
{"msg":"net minted amount for token with id digiCurr101 is 1000","quantity":1000}

Métodos para la gestión del comportamiento del token - Comportamiento transferible

TransferTokens
Este método transfiere tokens del emisor de llamada a una cuenta especificada. El emisor de 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 AccountOwner de la cuenta.
func (t *Controller) TransferTokens(token_id string, to_org_id string, to_user_id string, quantity float64) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Transfer(to_account_id, quantity, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • to_org_id string: ID del proveedor de servicios de membresía (MSP) del receptor en la organización actual.
  • to_user_id string: nombre de usuario o ID de correo electrónico del receptor.
  • quantity float64: número de tokens que se van a transferir.
Devuelve:
  • En caso de éxito, un mensaje con detalles para ambas cuentas.
Ejemplo de valor devuelto:
{"msg":"successfully transferred 1 tokens from account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) to account oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : admin)"}
BulkTransferTokens
Este método transfiere tokens de forma masiva desde la cuenta del 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 de especificación file.The de este método debe tener una cuenta ya creada. Este método solo puede ser llamado por AccountOwner de la cuenta.
func (t *Controller) BulkTransferTokens(token_id string, flow[]map[string]interface{}) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.BulkTransfer(flow, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • flow[]map[string]interface{}: matriz de objetos JSON que especifica las cantidades y los detalles del receptor.
    • to_org_id string: ID del proveedor de servicios de membresía (MSP) del receptor en la organización actual.
    • to_user_id string: nombre de usuario o ID de correo electrónico del receptor.
    • quantity float64: número de tokens que se van a transferir.
    Puede especificar el parámetro flow en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.
    Código de Visual Studio:
    [
      { "to_org_id": "Org1MSP", "to_user_id": "user1", "quantity": 10 },
      { "to_org_id": "Org1MSP", "to_user_id": "user2", "quantity": 10 }
    ]
    
    CLI / Postman:
    "[{ \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user1\", \"quantity\": 10 }, { \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user2\", \"quantity\": 10 }]"
Devuelve:
  • Mensaje que indica que se ha realizado correctamente.
Ejemplo de valor devuelto:
{
    "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"
        }
    ]
}
TransferTokens
Este método transfiere tokens del emisor de llamada a una cuenta especificada.
func (t *Controller) TransferTokens(token_id string, to_org_id string, to_user_id string, quantity float64, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
if err != nil {
return nil, err
 }
return t.Ctx.Token.Transfer(to_account_id, quantity, tokenAssetValue.Interface(), info_details...)
}
Parámetros:
  • token_id: string: ID del token.
  • to_org_id: string: ID del proveedor de servicios de membresía (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 van a transferir.
  • info_details: JSON: objeto que especifica la categoría (category) y la descripción (description) de la solicitud.

    Puede especificar el parámetro info_details en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Código de Visual Studio: { "category": "category value", "description": "description value" }

    CLI/Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Ejemplo de valor devuelto:
{
 msg: "Successfully transferred 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) to account id: oaccount~7yuijg39b4e1e4136dd86a806020c97a930909325340481b8fdhjklliugbv699 (Org-Id: Org1MSP, User-Id: user)",
}
BulkTransferTokens
Este método transfiere tokens de forma masiva desde la cuenta del 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 de especificación file.The de este método debe tener una cuenta ya creada. Este método solo puede ser llamado por AccountOwner de la cuenta.
func (t *Controller) BulkTransferTokens(token_id string, flow[]map[string]interface{}) (interface{}, error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.BulkTransfer(flow, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • flow[]map[string]interface{}: matriz de objetos JSON que especifica las cantidades y los detalles del receptor.
    • to_org_id string: ID del proveedor de servicios de membresía (MSP) del receptor en la organización actual.
    • to_user_id string: nombre de usuario o ID de correo electrónico del receptor.
    • quantity float64: número de tokens que se van a transferir.
    Puede especificar el parámetro flow en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.
    Código de Visual Studio:
    [
      { "to_org_id": "Org1MSP", "to_user_id": "user1", "quantity": 10 },
      { "to_org_id": "Org1MSP", "to_user_id": "user2", "quantity": 10 }
    ]
    
    CLI / Postman:
    "[{ \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user1\", \"quantity\": 10 }, { \"to_org_id\": \"Org1MSP\", \"to_user_id\": \"user2\", \"quantity\": 10 }]"
Devuelve:
  • Mensaje que indica que se ha realizado correctamente.
Ejemplo de valor devuelto:
{
    "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 del token - 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 la llamada de este método debe tener una cuenta ya creada. Este método solo puede ser llamado por AccountOwner de la cuenta.
func (t *Controller) HoldTokens(token_id string, operation_id string, to_org_id string, to_user_id string, notary_org_id string, notary_user_id string, quantity float64, TimeToExpiration string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(token_id)
      if err != nil {
            return nil, err
      }
      notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
      if err != nil {
            return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
      }
      to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
      if err != nil {
            return nil, fmt.Errorf("error in getting to_account id from org_id: %s and user_id: %s with token_id: %s, error %s ", to_org_id, to_user_id, token_id, err.Error())
      }
      return t.Ctx.Token.Hold(operation_id, to_account_id, notary_account_id, quantity, TimeToExpiration, tokenAssetValue.Interface())
}
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 membresía (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 del proveedor de servicios de membresía (MSP) del notario en la organización actual.
  • notary_user_id string: nombre de usuario o ID de correo electrónico del notario.
  • quantity float64: número de tokens que se deben 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:
  • En caso de éxito, un mensaje con la cuenta del emisor de la llamada y los detalles de retención.
Ejemplo de valor devuelto:
{"msg":"AccountId oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) is successfully holding 2 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, el importe restante vuelve a estar disponible para el propietario original de los tokens. Este método solo puede ser llamado por el ID AccountOwner con el rol notary. La retención solo la puede completar el notario.
func (t *Controller) ExecuteHoldTokens(token_id string, operation_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ExecuteHold(operation_id, quantity, tokenAssetValue.Interface())
}
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 float64: número de tokens retenidos que se van a transferir.
Devuelve:
  • En caso de éxito, un mensaje con el ID de cuenta del emisor de la llamada y la cantidad de la transacción.
Ejemplo de valor devuelto:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
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. Este método puede ser llamado por el ID Account Owner con el rol notary dentro del límite de tiempo especificado o por el pagador, el beneficiario o el notario después del límite de tiempo especificado.
func (t *Controller) ReleaseHoldTokens(token_id string, operation_id string) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
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, se muestra un mensaje que indica que la retención se ha liberado.
Ejemplo de valor devuelto:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
Este método devuelve una lista de todos los IDs de retención de una cuenta especificada. Este método se puede llamar mediante Token Admin del código de cadena, un Org Admin de la organización especificada o el Account Owner de la cuenta.
func (t *Controller) GetOnHoldIds(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetOnHoldIds", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetOnHoldIDs(account_id)
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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. Un ID de retención es una concatenación del tipo de activo ohold, el nombre del token, el ID de token y el ID de operación.
Ejemplo de valor devuelto:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationId
Este método devuelve los detalles de la transacción retenida para un token e ID de operación especificados. Este método puede ser llamado por cualquiera.
func (t *Controller) GetOnHoldDetailsWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.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:
  • En caso de éxito, un objeto de retención JSON que incluya las siguientes propiedades:
  • HoldingId: ID de tenencia de la transacción.
  • OperationId: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • FromAccountId: ID de cuenta del propietario actual de los tokens retenidos.
  • ToAccountId: ID de cuenta del receptor.
  • NotaryAccountId: ID de cuenta del notario.
  • TokenId: ID del token guardado.
  • Quantity: cantidad de tokens que están retenidos para el ID de tenencia.
  • TimeToExpiration: la duración hasta que caduque la retención.
Ejemplo de valor devuelto:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationId
Este método devuelve el saldo retenido para un token e ID de operación especificados. Este método puede ser llamado por cualquiera.
func (t *Controller) GetOnHoldBalanceWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.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 indique el saldo de retención.
Ejemplo de valor devuelto:
{
	"holding_balance": 10,
	"msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}
HoldTokens
Este método crea una retención en nombre del propietario de los tokens con la cuenta to_account_id.
func (t *Controller) HoldTokens(token_id string, operation_id string, to_org_id string, to_user_id string, notary_org_id string, notary_user_id string, quantity float64, timeToExpiration string, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
}
to_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, to_org_id, to_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting to_account id from org_id: %s and user_id: %s with token_id: %s, error %s ", to_org_id, to_user_id, token_id, err.Error())
 }
return t.Ctx.Token.Hold(operation_id, to_account_id, notary_account_id, quantity, timeToExpiration, tokenAssetValue.Interface(), constants.HoldTransfer, info_details...)
}
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 membresía (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 del proveedor de servicios de membresía (MSP) del notario en 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 deben 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.
  • info_details: JSON: objeto que especifica la categoría (category) y la descripción (description) de la solicitud.

    Puede especificar el parámetro info_details en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Código de Visual Studio: { "category": "category value", "description": "description value" }

    CLI/Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Ejemplo de valor devuelto:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) is successfully holding 100 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, el importe restante vuelve a estar disponible para el propietario original de los tokens. Este método solo puede ser llamado por el ID AccountOwner con el rol notary. La retención solo la puede completar el notario.
func (t *Controller) ExecuteHoldTokens(token_id string, operation_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ExecuteHold(operation_id, quantity, tokenAssetValue.Interface())
}
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 float64: número de tokens retenidos que se van a transferir.
Devuelve:
  • En caso de éxito, un mensaje con el ID de cuenta del emisor de la llamada y la cantidad de la transacción.
Ejemplo de valor devuelto:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
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. Este método puede ser llamado por el ID Account Owner con el rol notary dentro del límite de tiempo especificado o por el pagador, el beneficiario o el notario después del límite de tiempo especificado.
func (t *Controller) ReleaseHoldTokens(token_id string, operation_id string) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
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, se muestra un mensaje que indica que la retención se ha liberado.
Ejemplo de valor devuelto:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
Este método devuelve una lista de todos los IDs de retención de una cuenta especificada. Este método lo pueden llamar Token Admin o Token Auditor, Org Admin o Org Auditor de la organización especificada o el propietario de la cuenta especificado.
func (t *Controller) GetOnHoldIds(token_id string, org_id string, user_id string) (interface{}, error) {
      account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetOnHoldIds", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.Account.GetOnHoldIDs(account_id)
}
Parámetros:
  • token_id string: ID del token.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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. Un ID de retención es una concatenación del tipo de activo ohold, el nombre del token, el ID de token y el ID de operación.
Ejemplo de valor devuelto:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationId
Este método devuelve los detalles de la transacción retenida para un token e ID de operación especificados. This method can be called only by the Token Admin, Token Auditor, or transaction participant (sender, recipient, notary).
func (t *Controller) GetOnHoldDetailsWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.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:
  • En caso de éxito, un objeto de retención JSON que incluya las siguientes propiedades:
  • HoldingId: ID de tenencia de la transacción.
  • OperationId: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • FromAccountId: ID de cuenta del propietario actual de los tokens retenidos.
  • ToAccountId: ID de cuenta del receptor.
  • NotaryAccountId: ID de cuenta del notario.
  • TokenId: ID del token guardado.
  • Quantity: cantidad de tokens que están retenidos para el ID de tenencia.
  • TimeToExpiration: la duración hasta que caduque la retención.
Ejemplo de valor devuelto:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationId
Este método devuelve el saldo retenido para un token e ID de operación especificados. This method can be called only by the Token Admin, Token Auditor, or transaction participant (sender, recipient, notary).
func (t *Controller) GetOnHoldBalanceWithOperationId(token_id string, operation_id string) (interface{} error) {
    return t.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 indique el saldo de retención.
Ejemplo de valor devuelto:
{
	"holding_balance": 10,
	"msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

Métodos para la Gestión del Comportamiento del Token - Comportamiento Quemable

BurnTokens
Este método desactiva o quema tokens de la cuenta del emisor de llamada de la transacción. La persona que llama a 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. Este método puede ser llamado por el Account Owner de la cuenta con el rol de quemador.
func (t *Controller) BurnTokens(token_id string, quantity float64) (interface{} error) {
    tokenAssetValue, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, err
    }
    return t.Ctx.Token.Burn(quantity, tokenAssetValue.Interface())
}
Parámetros:
  • token_id string: ID del token.
  • quantity float64: número de tokens que se van a grabar.
Devuelve:
  • En caso de éxito, un mensaje de éxito con la cantidad de tokens quemados y el ID de cuenta.
Ejemplo de valor devuelto:
{"msg":"Successfully burned 1 tokens from account id: oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e (org_id : Org1MSP, user_id : user2)"}
RequestBurn
Este método puede ser llamado por un quemador para enviar una solicitud al notario del quemador para destruir una cantidad especificada de tokens, que deben ser menores o iguales a su saldo disponible. Cuando se inicia una solicitud de consumo, el importe especificado se deduce inmediatamente del saldo disponible y se agrega al campo onhold_burn_balance. Si se aprueba la solicitud, los tokens se queman. Si se rechaza la solicitud, los tokens se devuelven del campo onhold_burn_balance al saldo disponible.
func (t *Controller) RequestBurn(token_id string, operation_id string, notary_org_id string, notary_user_id string, quantity float64, timeToExpiration string, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
notary_account_id, err := t.Ctx.Account.GenerateAccountId(token_id, notary_org_id, notary_user_id)
if err != nil {
return nil, fmt.Errorf("error in getting notary account id from org_id: %s and user_id: %s with token_id: %s, error %s ", notary_org_id, notary_user_id, token_id, err.Error())
 }
return t.Ctx.Token.Hold(operation_id, "", notary_account_id, quantity, timeToExpiration, tokenAssetValue.Interface(), constants.HoldBurn, info_details...)
}
Parámetros:
  • token_id: string: ID del token que se va a grabar.
  • operation_id: string: el ID de operación único que representa la solicitud de grabación.
  • notary_org_id: string – El ID del proveedor de servicios de membresía (MSP) del notario del quemador que procesará la solicitud.
  • notary_user_id: string: nombre de usuario o ID de correo electrónico del notario del quemador que procesará la solicitud.
  • quantity: number: cantidad de tokens que se queman.
  • time_to_expiration: el tiempo después del cual caduca la solicitud de grabación y ya no es válida.
  • info_details: JSON: objeto que especifica la categoría (category) y la descripción (description) de la solicitud.

    Puede especificar el parámetro info_details en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Código de Visual Studio: { "category": "category value", "description": "description value" }

    CLI/Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Ejemplo de valor devuelto:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveBurn
Este método puede ser llamado por un notario del quemador para aprobar una solicitud de grabación.
func (t *Controller) ApproveBurn(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ExecuteHold(operation_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id: string: ID del token que se va a grabar.
  • operation_id: string: el ID de operación único que representa la solicitud de grabación.
Ejemplo de valor devuelto:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectBurn
Este método puede ser llamado por un notario de quemadores para rechazar una solicitud de quemado.
func (t *Controller) RejectBurn(token_id string, operation_id string) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
}
return t.Ctx.Token.ReleaseHold(operation_id, tokenAssetValue.Interface())
}
Parámetros:
  • token_id: string: ID del token que se va a grabar.
  • operation_id: string: el ID de operación único que representa la solicitud de grabación.
Ejemplo de valor devuelto:
{
 msg: "Successfully rejected burn request with Operation Id 'operation1' to burn 100 tokens of token id token",
}
GetAccountOnHoldBurnBalance
Este método devuelve el balance de consumo retenido para un usuario especificado. Este método solo lo pueden llamar los usuarios Token Admin, Token Auditor, Org Admin, Org Auditor o el propietario de la cuenta.
func (t *Controller) GetAccountOnHoldBurnBalance(token_id string, org_id string, user_id string) (interface{}, error) {
    account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
    if err != nil {
        return nil, err
    }
    auth, err := t.Ctx.Auth.CheckAuthorization("Account.GetAccountOnHoldBurnBalance", "TOKEN", map[string]string{"account_id": account_id})
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    response, err := t.Ctx.Account.GetAccountOnHoldBurnBalance(account_id)
    return response, err
}
Parámetros:
  • token_id: string: ID del token que se va a grabar.
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Ejemplo de valor devuelto:
{
  "msg": "Total On Hold Burning Balance is: 10",
  "onhold_burn_balance": 10
}
BurnTokens
Este método desactiva o quema tokens de la cuenta del emisor de llamada de la transacción.
func (t *Controller) BurnTokens(token_id string, quantity float64, info_details ...token.InfoDetails) (interface{}, error) {
tokenAssetValue, err := t.getTokenObject(token_id)
if err != nil {
return nil, err
 }
return t.Ctx.Token.Burn(quantity, tokenAssetValue.Interface(), info_details...)
}
Parámetros:
  • token_id: string: ID del token.
  • quantity: número de tokens que se van a grabar.
  • info_details: JSON: objeto que especifica la categoría (category) y la descripción (description) de la solicitud.

    Puede especificar el parámetro info_details en un formato diferente si utiliza Visual Studio Code frente a la CLI o una recopilación Postman.

    Código de Visual Studio: { "category": "category value", "description": "description value" }

    CLI/Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

Ejemplo de valor devuelto:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}

Métodos personalizados

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

Asegúrese de realizar un seguimiento del valor de retorno cuando utilice los métodos SDK de token. Además, para evitar el gasto doble, no combine varias funciones asíncronas que funcionen en los mismos pares clave-valor de la base de datos de estado. En su lugar, utilice el método BulkTransferTokens para realizar varias transferencias en un solo 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 llamada a la cuenta del vendedor y devuelve el mensaje de transacción de la transferencia.

func (t *Controller) BuyTicket(TokenId string, SellerOrgId string, SellerUserId string) (interface{}, error){
	token, err := t.Ctx.Token.Get(TokenId)
	if err != nil {
		return nil, err
	}
	
	/**
	* The following method t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId) generates account id of the seller
	*/
	sellerAccountId, err := t.Ctx.Account.GenerateAccountId(TokenId, SellerOrgId, SellerUserId)
    if err != nil {
		return nil, err
	}   

	/**
	* The following method t.Ctx.Token.Transfer(sellerAccountId, 20, token) transfers the quantity 20 from caller's
	* account & to seller's account.
	*/
    transaction, err := t.Ctx.Token.Transfer(sellerAccountId, 20, token)
    if err != nil {
		return nil, err
	}
    return transaction, nil
}

Métodos de SDK de token

Métodos de Gestión de Control de Acceso

El SDK de token proporciona una función de control de acceso. Algunos métodos solo pueden ser llamados por Token Admin, Org Admin o AccountOwner del token. Puede utilizar esta función para asegurarse de que las operaciones sólo las realizan los usuarios previstos. Cualquier acceso no autorizado genera un error. Para utilizar la función de control de acceso, importe la clase Authorization desde el módulo ../lib/auth.
import { Authorization } from '../lib/auth';
AddAdmin
Este método agrega un usuario como Token Admin del código de cadena de token.
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
Devuelve:
  • Si se ha realizado correctamente, se ha agregado un mensaje de éxito y detalles para el usuario Token Admin. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
Este método elimina un usuario como Token Admin del código de cadena de token.
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
Devuelve:
  • Si se ha realizado correctamente, se ha eliminado un mensaje de éxito y los detalles del usuario Token Admin. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsUserTokenAdmin
Este método devuelve el valor booleano true si el emisor de llamada de la función es un Token Admin. De lo contrario, el método devuelve false.
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
Devuelve:
  • Respuesta booleana y mensaje de error si se encuentra un error.
Ejemplo de valor devuelto:
{"result":false}
GetAllAdmins
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadena de token.
Ctx.GetAllAdmins() (interface{}, error)
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de todos los usuarios que son Token Admin del código de cadena de token. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadena de token.
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de todos los usuarios que son Token Admin del código de cadena de token en formato map[string]interface{}. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
Utilice este método para agregar control de acceso al código de cadenas. Muchos de los métodos de token generados automáticamente utilizan el control de acceso. La asignación entre el receptor de SDK y los métodos que tienen control de acceso se describe en el archivo oChainUtil.go. Para usar su propio control de acceso o desactivar el control de acceso, elimine el código de control de acceso de los métodos de controlador y métodos personalizados generados automáticamente.
var t TokenAccess
      var r RoleAccess
      var a AccountAccess
      var as AccountStatusAccess
      var h HoldAccess
      var ad AdminAccess
      var trx TransactionAccess
      var tc TokenConversionAccess
      var auth AuthAccess

      auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"}

      trx.DeleteHistoricalTransactions = []string{"Admin"}
      ad.AddAdmin = []string{"Admin"}
      ad.RemoveAdmin = []string{"Admin"}
      ad.GetAllAdmins = []string{"Admin", "OrgAdmin"}
      ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"}
      ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"}
      t.Save = []string{"Admin"}
      t.GetAllTokens = []string{"Admin", "OrgAdmin"}
      t.Update = []string{"Admin"}
      t.GetTokenDecimals = []string{"Admin", "OrgAdmin"}
      t.GetTokensByName = []string{"Admin", "OrgAdmin"}
      t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"}
      t.GetNetTokens = []string{"Admin", "OrgAdmin"}
      t.Get = []string{"Admin", "OrgAdmin"}
      t.GetTokenHistory = []string{"Admin", "OrgAdmin"}
      a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"}
      a.GetAllAccounts = []string{"Admin"}
      a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.History = []string{"Admin", "AccountOwner"}
      a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"}
      a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"}
      a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"}

      as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"}

      r.GetAccountsByRole = []string{"Admin"}
      r.GetUsersByRole = []string{"Admin"}
      r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"}
      r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"}

      tc.InitializeExchangePoolUser = []string{"Admin"}
      tc.AddConversionRate = []string{"Admin"}
      tc.UpdateConversionRate = []string{"Admin"}
      tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.TokenConversion = []string{"Admin", "AnyAccountOwner"}
      tc.GetExchangePoolUser = []string{"Admin"}
Ctx.Auth.CheckAuthorization(classFuncName string, args ...string) (bool, error)
Parámetros:
  • classFuncName string: valor de asignación entre los receptores y los métodos, como se describe en el archivo oChainUtil.go.
  • args: argumento de variable, donde args[0] es la constante TOKEN y args[1] es el argumento account_id, si es necesario.
Devuelve:
  • Respuesta booleana y 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) (interface{}, error)
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se agregó como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método elimina un usuario como Org Admin de una organización.
Ctx.Admin.RemoveOrgAdmin(org_id, user_id) (interface{}, error)
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha eliminado como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "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() (interface{}, error)
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de JSON que incluya objetos OrgId y UserId.
Ejemplo de valor devuelto:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddAdmin
Este método agrega un usuario como Token Admin del código de cadena de token.
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
Devuelve:
  • Si se ha realizado correctamente, se ha agregado un mensaje de éxito y detalles para el usuario Token Admin. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
Este método elimina un usuario como Token Admin del código de cadena de token.
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
Devuelve:
  • Si se ha realizado correctamente, se ha eliminado un mensaje de éxito y los detalles del usuario Token Admin. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsUserTokenAdmin
Este método devuelve el valor booleano true si el emisor de llamada de la función es un Token Admin. De lo contrario, el método devuelve false.
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
Parámetros:
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
  • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
Devuelve:
  • Respuesta booleana y mensaje de error si se encuentra un error.
Ejemplo de valor devuelto:
{"result":false}
GetAllAdmins
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadena de token.
Ctx.GetAllAdmins() (interface{}, error)
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de todos los usuarios que son Token Admin del código de cadena de token. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
Este método devuelve una lista de todos los usuarios que son Token Admin del código de cadena de token.
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de todos los usuarios que son Token Admin del código de cadena de token en formato map[string]interface{}. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
Utilice este método para agregar control de acceso al código de cadenas. Muchos de los métodos de token generados automáticamente utilizan el control de acceso. La asignación entre el receptor de SDK y los métodos que tienen control de acceso se describe en el archivo oChainUtil.go. Para usar su propio control de acceso o desactivar el control de acceso, elimine el código de control de acceso de los métodos de controlador y métodos personalizados generados automáticamente.
var t TokenAccess
      var r RoleAccess
      var a AccountAccess
      var as AccountStatusAccess
      var h HoldAccess
      var ad AdminAccess
      var trx TransactionAccess
      var tc TokenConversionAccess
      var auth AuthAccess

      auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"}

      trx.DeleteHistoricalTransactions = []string{"Admin"}
      ad.AddAdmin = []string{"Admin"}
      ad.RemoveAdmin = []string{"Admin"}
      ad.GetAllAdmins = []string{"Admin", "OrgAdmin"}
      ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"}
      ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"}
      t.Save = []string{"Admin"}
      t.GetAllTokens = []string{"Admin", "OrgAdmin"}
      t.Update = []string{"Admin"}
      t.GetTokenDecimals = []string{"Admin", "OrgAdmin"}
      t.GetTokensByName = []string{"Admin", "OrgAdmin"}
      t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"}
      t.GetNetTokens = []string{"Admin", "OrgAdmin"}
      t.Get = []string{"Admin", "OrgAdmin"}
      t.GetTokenHistory = []string{"Admin", "OrgAdmin"}
      a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"}
      a.GetAllAccounts = []string{"Admin"}
      a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.History = []string{"Admin", "AccountOwner"}
      a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"}
      a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"}
      a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"}

      as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"}

      r.GetAccountsByRole = []string{"Admin"}
      r.GetUsersByRole = []string{"Admin"}
      r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"}
      r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"}

      tc.InitializeExchangePoolUser = []string{"Admin"}
      tc.AddConversionRate = []string{"Admin"}
      tc.UpdateConversionRate = []string{"Admin"}
      tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.TokenConversion = []string{"Admin", "AnyAccountOwner"}
      tc.GetExchangePoolUser = []string{"Admin"}
Ctx.Auth.CheckAuthorization(classFuncName string, args ...string) (bool, error)
Parámetros:
  • classFuncName string: valor de asignación entre los receptores y los métodos, como se describe en el archivo oChainUtil.go.
  • args: argumento de variable, donde args[0] es la constante TOKEN y args[1] es el argumento account_id, si es necesario.
Devuelve:
  • Respuesta booleana y 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) (interface{}, error)
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se agregó como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método elimina un usuario como Org Admin de una organización.
Ctx.Admin.RemoveOrgAdmin(org_id, user_id) (interface{}, error)
Parámetros:
  • org_id string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha eliminado como Org Admin de la organización.
Ejemplo de valor devuelto:
{
    "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() (interface{}, error)
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una lista de JSON que incluya objetos OrgId y UserId.
Ejemplo de valor devuelto:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAuditor
Este método agrega un usuario como Token Auditor del código de cadena.
t.Ctx.Admin.AddTokenAuditor(org_id, user_id)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha agregado como Token Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "f0888dd52f39dfa669275cc8f35d0b47b37b8407d384493d16970fcbb377f937",
        "payload": {
            "msg": "Successfully added Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 268
    }
}
RemoveTokenAuditor
Este método elimina un usuario como Token Auditor del código de cadena.
t.Ctx.Admin.RemoveTokenAuditor(org_id, user_id)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se ha eliminado como Token Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "2f01f48eceaf2dff175f98b96a5bdd22c949f48fc5683ce86d6141cc4892aee3",
        "payload": {
            "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 270
    }
}
GetTokenAuditors
Este método devuelve todos los Token Auditors del código de cadena.
t.Ctx.Admin.GetAllTokenAuditors()
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "18eaa81b04d43db64f28287bab1cf6609e2a1d8ff84852ff73849ddb9a9dfba1",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "auditor_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 269
    }
}
AddOrgAuditor
Este método agrega un usuario como Org Auditor del código de cadena.
t.Ctx.Admin.AddOrgAuditor(org_id, user_id)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • Si se ha realizado correctamente, un mensaje que incluye detalles del usuario que se ha agregado como Org Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "3d5ec46003c68c6208d43c82894bd6da5c0b763339cc5212e09b71d39d0d80e2",
        "payload": {
            "msg": "Successfully added Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 271
    }
}
RemoveOrgAuditor
Este método elimina un usuario como Org Auditor del código de cadena.
t.Ctx.Admin.RemoveOrgAuditor(org_id, user_id)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un mensaje que incluye detalles del usuario que se ha eliminado como Org Auditor del código de cadena.
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "713a120641afbc4dfaeac73b82c9fd51df6fcfd7d4d9a82553d3c487bf11f530",
        "payload": {
            "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 273
    }
}
GetOrgAuditors
Este método devuelve todos los Org Auditors del código de cadena.
t.Ctx.Admin.GetAllOrgAuditors()
Ejemplo de valor devuelto:
{
    "returnCode": "Success",
    "error": "",
    "result": {
        "txid": "07656bf434616d7a3d7fe4fb81dc80c8cc608991648adfd9f6f2f2b9f6ddf468",
        "payload": {
            "auditors": [
                {
                    "OrgId": "CB",
                    "UserId": "cb"
                },
                {
                    "OrgId": "CB",
                    "UserId": "issuer_user_cb"
                }
            ]
        },
        "encode": "JSON",
        "sourceURL": "cb-oabcs1-bom.blockchain.ocp.example.com:20010",
        "blockNumber": 272
    }
}

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

Save
Este método crea un token y guarda sus propiedades en la base de datos de estado.
Ctx.Token.Save(args ...interface{}) (interface{}, error)
Parámetros:
  • token_id: string: ID del token que se va a devolver.
  • args: argumento de variable, donde el primer argumento args[0] es una referencia de los datos struct del token del tipo necesario para agregar al libro mayor.
Devuelve:
  • Si se ha realizado correctamente, un objeto interface{} con detalles sobre el token que se ha guardado en la base de datos de estado. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
Update
Este método actualiza las propiedades del token. Después de crear un activo de token, solo puede actualizar el valor token_desc y sus propiedades personalizadas.
Ctx.Token.Update(args ...interface{}) (interface{}, error)
Parámetros:
  • Activo que contiene una referencia a los datos de token struct del tipo necesario para actualizar en el libro mayor.
Devuelve:
  • En caso de éxito, un mensaje de promesa con detalles de token. En caso de error, rechazo con un mensaje de error.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "roles"],
    "Roles": {
        "minter_role_name": "minter"
    },
    "Mintable": {
        "Max_mint_quantity": 1000
    },
    "Divisible": {
        "Decimal": 2
    },
    "Currency_name": "",
    "Token_to_currency_ratio": 1
}
GetTokenDecimals
Este método devuelve el número de decimales disponibles para un token fraccionario. Si no se especifica el comportamiento divisible, el valor por defecto es 0.
Ctx.Token.GetTokenDecimals(token_id string) (int, error)
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, los decimales del token, en el tipo de dato numérico. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
1
Get
Este método devuelve un objeto de token si está presente en la base de datos de estado. Este método solo puede ser llamado por un Token Admin del código de cadena de token.
Ctx.Get(Id string, result ...interface{}) (interface{}, error)
Parámetros:
  • token_id: string: ID del token que se va a devolver.
  • result: argumento de variable, donde el primer argumento result[0] es una referencia de un objeto Token vacío del tipo necesario.
Devuelve:
  • En caso de éxito, una asignación con los datos del activo de token. El argumento de variable result[0] contiene los datos del token. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "Behavior": ["divisible", "mintable", "transferable", "burnable", "holdable", "roles"],
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter",
        "notary_role_name": "notary"
    },
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "Divisible": {
        "Decimal": 1
    },
    "Token_to_currency_ratio": 1,
    "Currency_representation": "DOLLAR"
}
History
Este método devuelve el historial de tokens para un ID de token especificado.
Ctx.Token.History(tokenId string) (interface{}, error)
Parámetros:
  • tokenId: string: ID del token.
Devuelve:
  • En caso de éxito, una matriz de JSON que representa el historial de tokens.
Ejemplo de valor devuelto:
[
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:46:33Z",
        "TxId": "12333b8a4f63aa9b3a34072efcbd7df546c6d1e7d82a7a9596e899383656d6f7",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "updated description",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2023-09-01T16:04:25Z",
        "TxId": "99702e2dad7554a5ee4716a0d01d3e394cbce39bea8bade265d8911f30ebad0b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "Currency_name1": "",
            "Divisible": {
                "Decimal": 2
            },
            "Mintable": {
                "Max_mint_quantity": 1000
            },
            "Roles": {
                "minter_role_name": "minter"
            },
            "Token_desc": "",
            "Token_id": "token",
            "Token_name": "fiatmoneytok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetAllTokens
Este método devuelve todos los activos de token que se guardan en la base de datos de estado. Este método utiliza consultas enriquecidas de Berkeley DB SQL y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
Ctx.Token.GetAllTokens()  (interface{}, error)
Parámetros:
  • ninguno
Devuelve:
  • En caso de éxito, una matriz de una asignación de todos los activos de token. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
GetTokensByName
Este método devuelve todos los activos de token con el nombre especificado. Este método utiliza consultas enriquecidas de Berkeley DB SQL y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
Ctx.Token.GetTokensByName(token_name string) (interface{}, error)
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 una asignación de todos los activos de token del nombre especificado.
Ejemplo de valor devuelto:
"payload": [
    {
        "key": "t1",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "Currency_name value",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "Token_desc value",
            "Token_id": "t1",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 999,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    },
    {
        "key": "obp2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "divisible",
                "mintable",
                "transferable",
                "holdable",
                "burnable",
                "roles"
            ],
            "Currency_name": "",
            "Divisible": {
                "Decimal": 8
            },
            "Mintable": {
                "Max_mint_quantity": 10000
            },
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter",
                "notary_role_name": "notary"
            },
            "Token_desc": "",
            "Token_id": "obp2",
            "Token_name": "obptok",
            "Token_to_currency_ratio": 0,
            "Token_type": "fungible",
            "Token_unit": "fractional"
        }
    }
]
IsTokenType
Este método prueba si existe un activo de token para un ID de token especificado.
Ctx.Model.IsTokenType(token_id: string) error
Parámetros:
  • token_id: string: ID del token que se va a comprobar.
Devuelve:
  • Si existe un activo de token con el ID especificado, se produce un error nulo. De lo contrario, un objeto de error no nulo que contenga un mensaje de error.
Ejemplo de valor devuelto:
nil
GetByRange
Este método llama al método getStateByRange del tejido internamente. Aunque cualquier activo con el ID determinado se devuelva desde la contabilidad, este método convierte el activo en el tipo de activo emisor de llamada.
Ctx.Token.GetByRange(startId string, endId string, asset ...interface{}) ([]map[string]interface{}, error)
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.
  • asset[0]: un segmento vacío del token del tipo necesario. Si el método se ejecuta correctamente, contiene el resultado solicitado.
Devuelve:
  • En caso de éxito, un segmento de asignaciones que contiene los detalles del activo de token para los tokens en los que el valor token_id está en el rango especificado. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
[{
    "Key": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "oaccount",
        "Balance": 99,
        "BalanceOnHold": 1,
        "OnHoldBurnBalance": 0,
        "BapAccountVersion": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "u1"
    }
}, {
    "Key": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
    "Record": {
        "AccountId": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
        "AssetType": "oaccount",
        "Balance": 0,
        "BalanceOnHold": 0,
        "OnHoldBurnBalance": 0,
        "BapAccountVersion": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "u2"
    }
}, {
    "Key": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
    "Record": {
        "AccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "AssetType": "oaccount",
        "Balance": 0,
        "BapAccountVersion": 0,
        "BalanceOnHold": 0,
        "OnHoldBurnBalance": 0,
        "OrgId": "Org1MSP",
        "TokenId": "t1",
        "TokenName": "loyaltok123",
        "UserId": "admin"
    }
}, {
    "Key": "oadmin~Org1MSP~admin",
    "Record": {
        "AssetType": "oadmin",
        "Key": "oadmin~Org1MSP~admin",
        "OrgId": "Org1MSP",
        "UserId": "admin"
    }
}, {
    "Key": "ohold~loyaltok123~t1~op1",
    "Record": {
        "AssetType": "ohold",
        "FromAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "HoldingId": "ohold~loyaltok123~t1~op1",
        "NotaryAccountId": "oaccount~loyaltok123~ac30c5ca924a2c7def61acf596d91e0cca70bc8cd233179df4efb2791b56336b",
        "OperationId": "op1",
        "Quantity": 1,
        "TimeToExpiration": "0",
        "ToAccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "TokenId": "t1",
        "TokenName": "loyaltok123"
    }
}, {
    "Key": "ometadata~loyaltok123~t1",
    "Record": {
        "AssetType": "ometadata",
        "Metadata_id": "ometadata~loyaltok123~t1",
        "Token_id": "t1",
        "Token_name": "loyaltok123",
        "Total_minted_amount": 100,
        "Total_supply": 100
    }
}, {
    "Key": "orole~t1~minter~oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
    "Record": {
        "AccountID": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "AssetType": "orole",
        "Key": "orole~t1~minter~oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "RoleName": "minter",
        "TokenId": "t1"
    }
}, {
    "Key": "otransaction~4a774f6493f6521cab9eda96822cb3bb4103c0738ee2dbb9a193b868ace36fa5",
    "Record": {
        "Amount": 100,
        "AssetType": "otransaction",
        "FromAccountId": "",
        "HoldingId": "",
        "NumberOfSubTransactions": 0,
        "Timestamp": "2021-08-25T23:04:42+05:30",
        "ToAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "TokenId": "t1",
        "TransactionId": "otransaction~4a774f6493f6521cab9eda96822cb3bb4103c0738ee2dbb9a193b868ace36fa5",
        "TransactionType": "MINT"
    }
}, {
    "Key": "otransaction~69f3cefbcb64b73f01a0eadff87169f456873ccebe61ca8da3eef3f465f0c129",
    "Record": {
        "Amount": 1,
        "AssetType": "otransaction",
        "FromAccountId": "oaccount~loyaltok123~a4bd3d8abfb1708198971311df77bb527233bcf9121ff95b0526bc056c4b8974",
        "HoldingId": "ohold~loyaltok123~t1~op1",
        "NumberOfSubTransactions": 0,
        "Timestamp": "2021-08-25T23:06:13+05:30",
        "ToAccountId": "oaccount~loyaltok123~aef96c40d99e09ef17f9bdda7038e8fbe829a327bae2b4d8d9fcf752190f3ff0",
        "TokenId": "t1",
        "TransactionId": "otransaction~69f3cefbcb64b73f01a0eadff87169f456873ccebe61ca8da3eef3f465f0c129",
        "TransactionType": "ONHOLD"
    }
}, {
    "Key": "t1",
    "Record": {
        "AssetType": "otoken",
        "Behavior": ["divisible", "mintable", "transferable", "burnable", "holdable", "roles"],
        "Currency_Name": "a",
        "Divisible": {
            "Decimal": 2
        },
        "Effective_From_Date": "2020-09-09T00:00:00Z",
        "Mintable": {
            "Max_mint_quantity": 10000
        },
        "Roles": {
            "minter_role_name": "minter"
        },
        "Token_To_Currency_Ratio": 1,
        "Token_desc": "",
        "Token_id": "t1",
        "Token_name": "loyaltok123",
        "Token_type": "fungible"
    }
}]

Métodos para la gestión de cuentas

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 el 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 afiliación (org_id) del usuario de 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) (string, error)
Parámetros:
  • token_id: string: ID del token.
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de la organización actual.
  • user_id: string: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, el ID de cuenta generado. En caso de error, rechazo con un mensaje de error.
Ejemplo de valor devuelto:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
CreateAccount
Este método crea una cuenta para un usuario y token especificados. Todos los usuarios que tengan tokens en cualquier momento deben 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 el 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 afiliación (org_id) del usuario de la organización de red actual. Este método solo puede ser llamado por el Token Admin del código de cadena.
t.Ctx.Account.CreateAccount(org_id string, user_id string, token_type string)
Parámetros:
  • org_id: string: ID del proveedor de servicios de afiliación (MSP) del usuario de 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:
  • En caso de éxito, el objeto de cuenta que se creó. En caso de error, rechazo con un mensaje de error.
Ejemplo de valor devuelto:
{
 "AssetType":"oaccount",
"AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "BapAccountVersion": 0,
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0,
   "OnHoldBurnBalance":0
}
AssociateToken
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.
t.Ctx.Account.AssociateToken(account_id, token_id)
Parámetros:
  • account_id string: ID de la cuenta.
  • token_id string: ID del token.
Devuelve:
  • En caso de éxito, un objeto JSON de la cuenta actualizada.
Ejemplo de valor devuelto:
{ 
"AssetType":"oaccount", 
"AccountId":"oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb", 
"BapAccountVersion": 0,
"UserId":"admin", 
"OrgId":"Org1MSP", 
"AccountType":"fungible", 
"TokenId":"token1", 
"TokenName":"loyaltok", 
"Balance":0, 
"BalanceOnHold":0, 
"OnHoldBurnBalance":0
}
GetAccountWithStatus
Este método devuelve los detalles de la cuenta para una cuenta especificada, incluido el estado de la cuenta.
Ctx.Account.GetAccountWithStatus(account_id string) (interface{}, error)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, los detalles de la cuenta solicitada. En caso de error, rechazo con un mensaje de error.
Ejemplo de valor devuelto:
{
  "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
  "AssetType": "oaccount",
  "Balance": 95,
  "BalanceOnHold": 0,
  "OnHoldBurnBalance": 0,
  "BapAccountVersion": 8,
  "OrgId": "appdev",
  "Status": "active",
  "TokenId": "obp1",
  "TokenName": "obptok",
  "TokenType": "fungible",
  "UserId": "idcqa"
}
GetAccount
Este método devuelve los detalles de la cuenta para una cuenta especificada.
Ctx.Account.GetAccount(account_id string) (Account, error)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, los detalles de la cuenta solicitada. En caso de error, rechazo con un mensaje de error.
Ejemplo de valor devuelto:
{
    "AssetType": "oaccount",
    "BapAccountVersion": 0,
    "AccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "UserId": "user1",
    "OrgId": "Org1MSP",
    "TokenId": "digiCurr101",
    "TokenName": "digicur",
    "Balance": 0,
    "BalanceOnHold": 0,
    "OnHoldBurnBalance": 0
}
GetAccountHistory
Este método devuelve una matriz de los detalles del historial de cuentas para una cuenta especificada.
Ctx.Account.History(account_id string) ([]interface{}, error)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • Una vez realizada correctamente, una matriz map[string]interface{} que contiene los detalles del historial de cuentas. Los datos de la cuenta se muestran en la clave Value del mapa. En caso de error, un objeto de error no nulo que contiene un mensaje de error. El valor devuelto es el mismo que el método GetAccountHistory.
Ejemplo de valor devuelto:
[
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:31:15Z",
      "TxId": "adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 100,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 1,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:30:23Z",
      "TxId": "8fbeda2ba60ba175091faae5ae369247775f2cba45c4d6d1ead6f0b05be84743",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "t1",
          "TokenName": "obptok",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  },
  {
      "IsDelete": "false",
      "Timestamp": "2023-08-28T19:29:54Z",
      "TxId": "19bb296ae71709e91b097ba5d9ebd7f7522095880382fbf5913334a46a6026aa",
      "Value": {
          "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
          "AssetType": "oaccount",
          "Balance": 0,
          "BalanceOnHold": 0,
          "OnHoldBurnBalance": 0,
          "BapAccountVersion": 0,
          "OrgId": "Org1MSP",
          "TokenId": "",
          "TokenName": "",
          "TokenType": "fungible",
          "UserId": "idcqa"
      }
  }
]
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:
  • En caso de éxito, un objeto de promesa con el saldo retenido actual y un mensaje de éxito. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
   "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 Berkeley DB SQL y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
Ctx.func (t *Controller) GetAllAccounts() (interface{}, error)
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, una matriz de JSON que muestra todas las cuentas.
Ejemplo de valor devuelto:
"payload": [
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 100,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0, 
            "BapAccountVersion": 1,
            "OrgId": "appdev",
            "TokenId": "t1",
            "TokenName": "obptok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    }
]
GetUserByAccountId
Este método devuelve los detalles de usuario de una cuenta especificada.
Ctx.Account.GetUserByAccountById(account_id string) (interface{}, error)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, una promesa con un objeto JSON que incluya tres propiedades:
    • user_id: nombre de usuario o ID de correo electrónico del usuario.
    • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
    • token_id: ID del token.
  • En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
   "org_id":"Org1MSP",
   "token_id":"digiCurr101",
   "user_id":"user1"
}
GetAccountBalance
Este método devuelve el saldo de la cuenta para una cuenta especificada.
Ctx.GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • En caso de éxito, una interfaz con una cadena de mensaje y el saldo actual. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "msg": "Current Balance of +p2uaMTsU9D74l9XpHQ2c55ic/2gbO4NZITC4Zq4P8E= 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) (interface{}, error)
Parámetros:
  • org_id: string: ID del proveedor de servicios de membresía (MSP) de la organización.
Devuelve:
  • Si se realiza correctamente, se muestra una lista de todas las cuentas de la organización especificada.
Ejemplo de valor devuelto:
[
    {
        "key": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
        "valueJson": {
            "AccountId": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "idcqa"
        }
    },
    {
        "key": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
        "valueJson": {
            "AccountId": "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850",
            "AssetType": "oaccount",
            "Balance": 0,
            "BalanceOnHold": 0,
            "OnHoldBurnBalance": 0,
            "BapAccountVersion": 0,
            "OrgId": "appdev",
            "TokenId": "token",
            "TokenName": "fiatmoneytok",
            "TokenType": "fungible",
            "UserId": "example_minter"
        }
    }
]

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, tokenAsset interface{}) (interface{}, error)
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.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, devuelve un mapa con un mensaje de éxito que indica la adición del rol a la cuenta. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
   "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, tokenAsset interface{}) (interface{}, error)
Parámetros:
  • role: string: nombre del rol que se va a eliminar para el usuario especificado. Los comportamientos mintable y burnable corresponden a las propiedades minter_role_name y burner_role_name del archivo de especificación. 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 eliminar el rol.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • Cuando se realiza correctamente, devuelve un mapa con un mensaje que indica que se ha eliminado el rol de la cuenta. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
  "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, user_role string) (interface{}, error)
Parámetros:
  • token_id: string: ID del token.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, una matriz JSON de ID de cuenta. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"accounts":["oaccount~obptok~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
GetUsersByRole
Este método devuelve una lista de todos los usuarios para un rol y token especificados.
Ctx.Role.GetUsersByRole(token_id string, user_role string) (interface{}, error)
Parámetros:
  • token_id: string: ID del token.
  • role: string: nombre del rol que se va a buscar.
Devuelve:
  • En caso de éxito, una matriz JSON de objetos de usuario. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "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, tokenAsset interface{}) (bool, error)
Parámetros:
  • role: string: nombre del rol que se va a comprobar.
  • account_id: number: ID de cuenta que se debe comprobar.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • Cuando se realiza correctamente, devuelve un mapa con un mensaje que indica que se ha eliminado el rol de la cuenta. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "result": false
}
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, user_role string, org_id string) (interface{}, error)
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 membresía (MSP) de la organización.
Devuelve:
  • En caso de éxito, una lista de todas las cuentas con el rol especificado en la organización especificada.
Ejemplo de valor devuelto:
{
    "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.
Ctx.Role.GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error)
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 membresía (MSP) de la organización.
Devuelve:
  • En caso de éxito, una lista de todos los usuarios con el rol especificado en la organización especificada.
Ejemplo de valor devuelto:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
RoleCheck
Este método comprueba si el ID de cuenta proporcionado es miembro de cualquier rol.
Ctx.Token.RoleCheck(account_id string, tokenAsset interface{}) (bool, error)
Parámetros:
  • account_id: string: ID de cuenta que se debe comprobar.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • Si la cuenta especificada tiene algún rol, un mensaje de éxito y el valor booleano true. De lo contrario, el valor booleano false. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{ result: true }

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

GetAccountTransactionHistory
Este método devuelve una matriz de los detalles del historial de transacciones de una cuenta especificada.
Ctx.Account.GetAccountTransactionHistory(account_id string) (interface{}, error)
Parámetros:
  • account_id: string: ID de la cuenta.
Devuelve:
  • El valor devuelto es el mismo que el método GetAccountTransactionHistory.
  • En caso de éxito, una matriz de objetos de transacción de cuenta JSON.
  • En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
[
  {
      "NumberOfSubTransactions": 2,
      "balance": 160,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:51:48Z",
      "token_id": "t1",
      "transacted_amount": 20,
      "transaction_id": "otransaction~bd3e8d7d0bcdbed0469a2fccfe95f7ebbeb1987d8385bccf5c84bf80251e748c",
      "transaction_type": "BULKTRANSFER"
  },
  {
      "balance": 180,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:14Z",
      "token_id": "t1",
      "transacted_account": "oaccount~692a7465c01e36b694cb8ae86e6c6584240aa1f865fde54f95f32429eadd4097",
      "transacted_amount": 10,
      "transaction_id": "otransaction~250996f1df6a36a1b647f522efcaaf48fd70452d711c247fc4cd475b8e752b08",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 190,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:47:08Z",
      "token_id": "t1",
      "transacted_account": "oaccount~bb5a0b57d895327c8a8cd1f267310cbf3ae542bc854fab8188b5083a969d72fb",
      "transacted_amount": 10,
      "transaction_id": "otransaction~664325a25ae6b19b23693c66f83811184e0a78fabb49122359a2dbf209f32976",
      "transaction_type": "DEBIT"
  },
  {
      "balance": 200,
      "onhold_balance": 0,
      "timestamp": "2023-09-06T06:46:46Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~7f49564b1eb61d4c8be0ef61cd5e635b533ca533907944e4ec500f390237fd6b",
      "transaction_type": "MINT"
  },
  {
      "balance": 100,
      "onhold_balance": 0,
      "timestamp": "2023-08-28T19:31:15Z",
      "token_id": "t1",
      "transacted_account": "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4",
      "transacted_amount": 100,
      "transaction_id": "otransaction~adde470a63860ec1013bd5c5987e8a506a48942a91b0f39fc8e561374042bd27",
      "transaction_type": "MINT"
  }
]
GetAccountTransactionHistoryWithFilters
Este método devuelve una matriz de los detalles del historial de transacciones de una transacción especificada. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform.
t.Ctx.Account.GetAccountTransactionHistoryWithFilters (transaction_id: string, filters?: SubTransactionFilters)
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.
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"}'

[
    {
        "balance": 90,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:43:36Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~dd9986d3686e52264935558e42026fbf8a9af48b06a3256a58b453f5ada4e636",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 95,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:43:22Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~5e53424de3d691cf6b2a55ea3dc478c555d8784111c11847e594194d6c2e7755",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 100,
        "onhold_balance": 0,
        "timestamp": "2022-04-20T19:42:54Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~b63935592a702d30bedb87ae97b9b1ba7d0f346716adc4f5a4192220bf410d4e",
        "transacted_amount": 100,
        "transaction_id": "otransaction~94c467825ce9f66cc69958d38b169022a69eebc66b75b7d6e0b0585af2c3c228",
        "transaction_type": "MINT"
    }
]
GetSubTransactionsById
Este método devuelve una matriz de los detalles del historial de transacciones de una transacción especificada.
t.Ctx.Account.GetSubTransactionsById(transaction_id string)
Parámetros:
  • transaction_id: string: ID de la transacción.
Por ejemplo:

ochain invoke GetSubTransactionsById 'otransaction~21972b4d206bd52ea77924efb259c67217edb23b4386580d1bee696f6f864b9b'

[
    {
        "balance": 80,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c81e728d9d4c2f636f067f89cc14862c",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 85,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c4ca4238a0b923820dcc509a6f75849b",
        "transaction_type": "DEBIT"
    }
]
GetSubTransactionsByIdWithFilters
Este método devuelve una matriz de los detalles del historial de transacciones de una transacción especificada.
t.Ctx.Account.GetSubTransactionsByIdWithFilters(transaction_id string, filters ...SubTransactionFilters)
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.
Por ejemplo:

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

[
    {
        "balance": 80,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~7a4d67118e623a876b77c67e76b819269a8d4a509aece5d2263fb274a9beb3b8",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c81e728d9d4c2f636f067f89cc14862c",
        "transaction_type": "DEBIT"
    },
    {
        "balance": 85,
        "onhold_balance": 0,
        "timestamp": "2022-04-21T05:02:33Z",
        "token_id": "tokenId",
        "transacted_account": "oaccount~0642308fc4c514c257ebf04326c63f990e2531bfd59d0b952056094da61e04ab",
        "transacted_amount": 5,
        "transaction_id": "otransaction~33de5d63058d5e9abc011bc850878dfb7ac3080495729aed345c45b2f21735fa~c4ca4238a0b923820dcc509a6f75849b",
        "transaction_type": "DEBIT"
    }
]
GetTransactionById
Este método devuelve el historial de un activo Transaction.
t.Ctx.Transaction.GetTransactionById(transaction_id string)
Parámetros:
  • transaction_id string: ID del activo de transacción.
Ejemplo de valor devuelto:
{
    "history": [
        {
            "IsDelete": "false",
            "Timestamp": "2021-08-16 20:19:05.028 +0530 IST",
            "TxId": "67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
            "Value": {
                "Amount": 3,
                "AssetType": "otransaction",
                "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "HoldingId": "ohold~digicur~digiCurr101~op2",
                "NumberOfSubTransactions": 0,
                "Timestamp": "2021-08-16T20:19:05+05:30",
                "ToAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
                "TokenId": "digiCurr101",
                "TransactionId": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220",
                "TransactionType": "RELEASEHOLD"
            }
        }
    ],
    "transaction_id": "otransaction~67042154a6853011d111b13f73943f06d2a6ae3cfb9a84cb104482c359eb2220"
}
DeleteHistoricalTransactions
Este método suprime las transacciones más antiguas de la base de datos de estado.
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error)
Parámetros:
  • time_to_expiration: Date: registro de hora que indica cuándo se deben suprimir las transacciones. Se suprimirán los activos de transacción que sean anteriores a la hora especificada.
Ejemplo de valor devuelto:
"payload": {
    "msg": "Successfuly deleted transaction older than date:2021-08-18T05:43:30Z",
    "transactions": [
        "otransaction~57d81f681aa215bb73d6c017d16be8b283d3fcb50051c85891a97d1d407fc342"
    ]
}

Métodos para la gestión del comportamiento del token: comportamiento minable

Mint
Este método acuña tokens, que luego son propiedad del emisor de llamada 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 extraer 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 AccountOwner de la cuenta con el rol minter.
Ctx.Token.Mint(quantity float64, tokenAsset interface{}) (interface{}, error)
Parámetros:
  • quantity: number: número de tokens que se deben acuñar.
  • tokenAsset: referencia al activo de token a la moneda.
Devuelve:
  • En caso de éxito, se mostrará un mensaje que indica que se ha realizado correctamente. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
  "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(tokenAsset interface{}) (map[string]interface{}, error)
Parámetros:
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, un mensaje de éxito y una asignación del total de tokens acuñados en el tipo de datos de número. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"msg":"total minted amount for token with id digiCurr101 is 0","quantity":0}
GetNetTokens
Este método devuelve la cantidad neta de tokens que están disponibles en el sistema para un token especificado. Los tokens netos son la cantidad de tokens que quedan después de que los tokens se queman. En forma de ecuación: tokens netos = tokens totales acuñados - tokens totales quemados. Si no se queman tokens, el número de tokens netos es igual al total de tokens acuñados.
Ctx.Token.GetNetTokens(tokenAsset interface{}) (map[string]interface{}, error)
Parámetros:
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, un mensaje de éxito y una asignación de la cantidad neta de tokens en el tipo de datos de número. En caso de error, se mostrará un mensaje.
Ejemplo de valor devuelto:
{"msg":"net minted amount for token with id digiCurr101 is 0","quantity":0}
GetMaxMintQuantity
Este método devuelve la cantidad mínima máxima para un token. Si no se especifica el comportamiento max_mint_quantity, el valor por defecto es 0, que permite la extracción de cualquier número de tokens.
Ctx.Token.GetMaxMintQuantity(token_id string) (float64, error)
Parámetros:
  • token_id: string: ID de token que se va a comprobar.
Devuelve:
  • En caso de éxito, la cantidad mínima máxima del token, en el tipo de dato numérico. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
20000

Métodos para la gestión del comportamiento del token - Comportamiento transferible

Transfer
Este método transfiere tokens del emisor de llamada a una cuenta especificada. El emisor de 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 AccountOwner de la cuenta.
Ctx.Token.Transfer(to_account_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
Parámetros:
  • to_account_id: string: ID de cuenta para recibir los tokens.
  • quantity: number: número total de tokens que se van a transferir.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, se mostrará un mensaje que indica que se ha realizado correctamente. En caso de error, un objeto de error no nulo que contiene un mensaje de error. El valor devuelto es el mismo que el método TransferTokens.
Ejemplo de valor devuelto:
{     "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 transfiere tokens de forma masiva desde la cuenta del emisor de llamada a las cuentas especificadas en el objeto flow. El emisor de la llamada de este método debe tener una cuenta ya creada.
Ctx.Token.BulkTransfer(flow []map[string]interface{}, tokenAsset interface{}) (interface{}, error)
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
    }]
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, un mensaje de éxito que incluye el número de tokens transferidos. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "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 del token - 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 la 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 float64, TimeToExpiration string, tokenAsset)) (interface{}, error)
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 para recibir los tokens.
  • notary__account_id: string: ID de la cuenta de notario.
  • quantity: number: número total de tokens que se deben retener.
  • time_to_expiration: date: la duración hasta que caduque la retención. Especifique 0 para una retención permanente. De lo contrario, utilice el formato RFC-3339. Por ejemplo, 2021-06-02T12.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, se mostrará un mensaje que indica que se ha realizado correctamente. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
 "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, el importe restante vuelve a estar disponible para el propietario original de los tokens. Este método solo puede ser llamado por el ID AccountOwner con el rol notary.
Ctx.Token.ExecuteHold(operation_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
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 que se deben retener.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, se mostrará un mensaje que indica que se ha realizado correctamente. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"msg":"Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) has successfully executed '1' tokens(digiCurr101) from the hold with Operation Id 'op1'"}
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. Este método puede ser llamado por el ID Account Owner con el rol notary dentro del límite de tiempo especificado o por el pagador, el beneficiario o el notario después del límite de tiempo especificado.
Ctx.Token.ReleaseHold(operation_id string, tokenAsset interface{}) (interface{}, error)
Parámetros:
  • operation_id: string: ID único para identificar la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, se mostrará un mensaje que indica que se ha realizado correctamente. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{"msg":"Successfully released '3' tokens from Operation Id 'op2' to Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetOnHoldIds
Este método devuelve una lista de todos los ID de retención de un usuario y token especificados.
Ctx.Account.GetOnHoldIDs(account_id string) (map[string]interface{}, error)
Parámetros:
  • token_id: ID del token.
  • org_id: ID del proveedor de servicios de membresía (MSP) del usuario en la organización de red actual.
  • user_id: nombre de usuario o ID de correo electrónico del usuario.
Devuelve:
  • En caso de éxito, un objeto JSON con la lista de ID de retención. Un ID de retención se forma concatenando el tipo de activo (ohold), el nombre del token, el ID de token y el ID de operación.
Ejemplo de valor devuelto:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationID
Este método devuelve los detalles de la transacción retenida para un identificador de operación y token especificados.
Ctx.Hold.GetOnHoldDetailsWithOperationID(token_id string, operation_id string) (Hold, error)
Parámetros:
  • token_id: string: ID del token.
  • operation_id: string: ID único que identifica la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
Devuelve:
  • El valor devuelto es el mismo que el método GetOnHoldDetailsWithOperationId.
  • En caso de éxito, un objeto de promesa que incluye los detalles de la transacción retenida para el ID de operación y el token especificados. El objeto de retención incluye las siguientes propiedades:
    • holding_id: ID de 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 cuenta del notario.
    • token_id: string: ID del token guardado.
    • quantity: cantidad de tokens que están retenidos para el ID de tenencia.
    • time_to_expiration: la duración hasta que caduque la retención.
  • En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "AssetType": "ohold",
    "HoldingId": "ohold~digicur~digiCurr101~op1",
    "OperationId": "op1",
    "TokenName": "digicur",
    "FromAccountId": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "ToAccountId": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e",
    "NotaryAccountId": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df",
    "TokenId": "digiCurr101",
    "Quantity": 2,
    "TimeToExpiration": "0"
}
GetOnHoldBalanceWithOperationID
Este método devuelve el saldo retenido para un identificador y token de operación especificados.
Ctx.Hold.GetOnHoldBalanceWithOperationID(token_id string, operation_id string) (map[string]interface{}, error)
Parámetros:
  • token_id: string: ID del token.
  • operation_id: string: ID único que identifica la operación de retención. Normalmente, la aplicación cliente transfiere este ID.
Devuelve:
  • En caso de éxito, el saldo retenido del token e ID de operación especificados. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
    "holding_balance": 10,
    "msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

Métodos para la Gestión del Comportamiento del Token - Comportamiento Quemable

Burn
Este método desactiva o quema tokens de la cuenta del emisor de llamada de la transacción. La persona que llama a 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 float64 , tokenAsset interface{}) (interface{}, error)
Parámetros:
  • quantity: number: número total de tokens que se van a quemar.
  • tokenAsset: el argumento tokenAsset contiene la referencia de los datos de token en los que se va a operar.
Devuelve:
  • En caso de éxito, se mostrará un mensaje que indica que se ha realizado correctamente. En caso de error, un objeto de error no nulo que contiene un mensaje de error.
Ejemplo de valor devuelto:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}