Projeto Go do Scaffolded para o Token Taxonomy Framework

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

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

Para obter informações sobre o projeto e os métodos scaffolded que não estão diretamente relacionados a tokens, consulte Projeto de Código de Cadeia do Andaime Go.

Modelo

O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe 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"`
}

Controladora

Há apenas um controlador principal.

type Controller struct {
    Ctx trxcontext.TrxContext
}

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

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

Se você usar mais de um método de token SDK em um método personalizado, não use métodos que afetarão os mesmos pares de chave/valor no banco de dados de estado.

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

BulkTransferTokens(token_id string, flow: []map[string]interface{})

Observação:

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

Métodos de Token Gerados Automaticamente

O Blockchain App Builder gera automaticamente métodos para suportar tokens e ciclos de vida de token. Você pode usar esses métodos para inicializar tokens, gerenciar atribuições e contas e concluir outras tarefas de ciclo de vida de token sem qualquer codificação adicional. Os métodos do controlador devem ser públicos para serem invocáveis. Os nomes de métodos públicos começam com um caractere maiúsculo. Os nomes de métodos que começam com um caractere minúsculo são privados.

Métodos para Gerenciamento de Controle de Acesso

AddTokenAdmin
Este método adiciona um usuário como um Token Admin do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode.
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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como Token Admin do chaincode.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
Este método remove um usuário como um Token Admin do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode.
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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Token Admin do chaincode.
Exemplo de Valor de Retorno:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsTokenAdmin
Este método retornará o valor Booliano true se o chamador da função for um Token Admin, caso contrário, retornará false. Um Token Admin ou Org Admin pode chamar essa função em qualquer outro usuário da rede blockchain. Outros usuários só podem chamar esse método em suas próprias contas.
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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • O método retornará true se o chamador for um Token Admin, caso contrário, retornará false.
Exemplo de Valor de Retorno:
{"result":false}
GetAllTokenAdmins
Este método retorna uma lista de todos os usuários que são um Token Admin do chaincode. Esse método só pode ser chamado pelo Token Admin ou Org Admin do chaincode.
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:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista JSON de administradores que inclui objetos OrgId e UserId.
Exemplo de Valor de Retorno:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user2"}]}
AddOrgAdmin
Esse método adiciona um usuário como um Org Admin da organização. Esse método só pode ser chamado por uma Token Admin do chaincode ou por uma Org Admin da organização 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método remove um usuário como um Org Admin de uma organização. Esse método só pode ser chamado por uma Token Admin do chaincode ou por uma Org Admin da organização 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
Esse método retorna uma lista de todos os usuários que são um Org Admin de uma organização. Esse método só pode ser chamado por uma Token Admin do chaincode ou por qualquer 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:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista JSON que inclui objetos OrgId e UserId.
Exemplo de Valor de Retorno:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAdmin
Este método adiciona um usuário como um Token Admin do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode.
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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como Token Admin do chaincode.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully added Token Admin (Org_Id: Org1MSP, User_Id: user1)"
}
RemoveTokenAdmin
Este método remove um usuário como um Token Admin do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode.
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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Token Admin do chaincode.
Exemplo de Valor de Retorno:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsTokenAdmin
Este método retornará o valor Booliano true se o chamador da função for um Token Admin, caso contrário, retornará false. Essa função só pode ser chamada por uma Token Admin, Token Auditor, Org Admin ou 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • O método retornará true se o chamador for um Token Admin, caso contrário, retornará false.
Exemplo de Valor de Retorno:
{"result":false}
GetAllTokenAdmins
Este método retorna uma lista de todos os usuários que são um Token Admin do chaincode. Esse método só pode ser chamado por uma Token Admin ou 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:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista JSON de administradores que inclui objetos OrgId e UserId.
Exemplo de Valor de Retorno:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user2"}]}
AddOrgAdmin
Esse método adiciona um usuário como um Org Admin da organização. Esse método só pode ser chamado por uma Token Admin do chaincode ou por uma Org Admin da organização 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método remove um usuário como um Org Admin de uma organização. Esse método só pode ser chamado por uma Token Admin do chaincode ou por uma Org Admin da organização 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
Esse método retorna uma lista de todos os usuários que são um Org Admin de uma organização. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista JSON que inclui objetos OrgId e UserId.
Exemplo de Valor de Retorno:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAuditor
Este método adiciona um usuário como um Token Auditor do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) AddTokenAuditor(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como Token Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 remove um usuário como um Token Auditor do chaincode. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) RemoveTokenAuditor(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Token Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 retorna todos os Token Auditors do chaincode. Esse método só pode ser chamado por uma Token Admin ou Token Auditor do chaincode.
func (t *Controller) GetTokenAuditors() (interface{}, error)
Exemplo de Valor de Retorno:
{
    "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 adiciona um usuário como um Org Auditor do chaincode. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode.
func (t *Controller) AddOrgAuditor(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como Org Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 remove um usuário como um Org Auditor do chaincode. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode.
func (t *Controller) RemoveOrgAuditor(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Org Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 retorna todos os Org Auditors do chaincode. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou Org Auditor.
func (t *Controller) GetOrgAuditors() (interface{}, error)
Exemplo de Valor de Retorno:
{
    "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 Gerenciamento de Configuração de Token

Init
Este método é chamado quando o chaincode é implantado. Todo Token Admin é identificado pelas informações user_id e org_id no parâmetro adminList obrigatório. O user_id é o nome de usuário ou o ID de e-mail do proprietário da instância ou do usuário que está conectado à instância. O org_id é o ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Qualquer usuário Token Admin pode adicionar e remover outros usuários Token Admin chamando os métodos AddTokenAdmin e 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 – Um array de informações do {user_id, org_id} que especifica a lista de administradores de token. O array adminList é um parâmetro obrigatório.
Exemplo de parâmetro, macOS e CLI do Linux:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
Exemplo de parâmetro, CLI do Microsoft Windows:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Exemplo de parâmetro, console do Oracle Blockchain Platform:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
Initialize<Token Name>Token
Esse método cria um token e inicializa as propriedades do token. O ativo e suas propriedades são salvos no banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode.
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> – O ativo de token é passado como parâmetro para esse método. As propriedades do ativo de token podem variar e são descritas no arquivo de especificação de token. Não inclua parâmetros marcados como somente leitura no arquivo de especificação.

    Você especifica o parâmetro asset em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

    Visual Studio Code: Use a GUI para passar parâmetros individuais que correspondem aos campos de classe de token.

    CLI / Postman: Informe uma string JSON serializada que inclua os campos de especificação de token, conforme mostrado no exemplo a seguir.

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

Retorna:
  • No caso de sucesso, uma representação JSON do ativo de token que foi criado.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_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 atualiza as propriedades do token. Após a criação de um ativo de token, somente a propriedade token_desc e as propriedades personalizadas podem ser atualizadas. Esse método só pode ser chamado por um Token Admin do chaincode.
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> – O ativo de token é passado como parâmetro para esse método. As propriedades do ativo de token podem variar e são descritas no arquivo de especificação de token. Não inclua parâmetros marcados como somente leitura no arquivo de especificação.

    Você especifica o parâmetro asset em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

    Visual Studio Code: Use a GUI para passar parâmetros individuais que correspondem aos campos de classe de token.

    CLI / Postman: Informe uma string JSON serializada que inclua os campos de especificação de token, conforme mostrado no exemplo a seguir.

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

Retorna:
  • Em caso de sucesso, uma representação JSON atualizada do ativo de token.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "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 retorna o número de casas decimais que foram configuradas para um token fracionário. Se o comportamento divisible não tiver sido especificado para o token, o valor padrão será 0. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode.
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 – O ID do token.
Retorna:
  • No caso de sucesso, uma string JSON mostrando o número de casas decimais do token.
Exemplo de Valor de Retorno:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
GetTokenById
Este método retorna um objeto de token se estiver presente no banco de dados de estado. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode.
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 – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON que representa o ativo de token.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "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 retorna o histórico de token para um ID de token especificado. Qualquer usuário pode chamar esse 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 – O ID do token.
Retorna:
  • No caso de sucesso, um objeto JSON que representa o histórico de tokens.
Exemplo de Valor de Retorno:
[
    {
        "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 retorna todos os tokens que são armazenados no banco de dados de estado. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode.
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:
  • nenhuma
Retorna:
  • Em caso de sucesso, um objeto JSON que representa todos os ativos de token.
Exemplo de Valor de Retorno:
"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 retorna todos os objetos de token com um nome especificado. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode. Este método usa consultas ricas em SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do 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 – O nome dos tokens a serem recuperados. O nome corresponde à propriedade Token_name no arquivo de especificação. O valor é o nome da classe do token.
Retorna:
  • No caso de sucesso, um objeto JSON de todos os ativos de token que correspondem ao nome.
Exemplo de Valor de Retorno:
"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 é chamado quando o chaincode é implantado. Todo Token Admin é identificado pelas informações user_id e org_id no parâmetro adminList obrigatório. O user_id é o nome de usuário ou o ID de e-mail do proprietário da instância ou do usuário que está conectado à instância. O org_id é o ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Qualquer usuário Token Admin pode adicionar e remover outros usuários Token Admin chamando os métodos AddTokenAdmin e 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 – Um array de informações do {user_id, org_id} que especifica a lista de administradores de token. O array adminList é um parâmetro obrigatório.
Exemplo de parâmetro, macOS e CLI do Linux:
'[{"user_id":"userid", "org_id":"OrgMSPId"}]'
Exemplo de parâmetro, CLI do Microsoft Windows:
"[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"
Exemplo de parâmetro, console do Oracle Blockchain Platform:
["[{\"user_id\":\"userid\", \"org_id\":\"OrgMSPId\"}]"]
Initialize<Token Name>Token
Esse método cria um token e inicializa as propriedades do token. O ativo e suas propriedades são salvos no banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode.
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> – O ativo de token é passado como parâmetro para esse método. As propriedades do ativo de token podem variar e são descritas no arquivo de especificação de token. Não inclua parâmetros marcados como somente leitura no arquivo de especificação.

    Você especifica o parâmetro asset em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

    Visual Studio Code: Use a GUI para passar parâmetros individuais que correspondem aos campos de classe de token.

    CLI / Postman: Informe uma string JSON serializada que inclua os campos de especificação de token, conforme mostrado no exemplo a seguir.

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

Retorna:
  • No caso de sucesso, uma representação JSON do ativo de token que foi criado.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_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 atualiza as propriedades do token. Após a criação de um ativo de token, somente a propriedade token_desc e as propriedades personalizadas podem ser atualizadas. Esse método só pode ser chamado por um Token Admin do chaincode.
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> – O ativo de token é passado como parâmetro para esse método. As propriedades do ativo de token podem variar e são descritas no arquivo de especificação de token. Não inclua parâmetros marcados como somente leitura no arquivo de especificação.

    Você especifica o parâmetro asset em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

    Visual Studio Code: Use a GUI para passar parâmetros individuais que correspondem aos campos de classe de token.

    CLI / Postman: Informe uma string JSON serializada que inclua os campos de especificação de token, conforme mostrado no exemplo a seguir.

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

Retorna:
  • Em caso de sucesso, uma representação JSON atualizada do ativo de token.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "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 retorna o número de casas decimais que foram configuradas para um token fracionário. Se o comportamento divisible não tiver sido especificado para o token, o valor padrão será 0. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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 – O ID do token.
Retorna:
  • No caso de sucesso, uma string JSON mostrando o número de casas decimais do token.
Exemplo de Valor de Retorno:
{"msg":"Token Id: digiCurr101 has 1 decimal places."}
GetTokenById
Este método retorna um objeto de token se estiver presente no banco de dados de estado. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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 – O ID do token.
Retorna:
  • Em caso de sucesso, um objeto JSON que representa o ativo de token.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "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 retorna o histórico de token para um ID de token especificado. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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 – O ID do token.
Retorna:
  • No caso de sucesso, um objeto JSON que representa o histórico de tokens.
Exemplo de Valor de Retorno:
[
    {
        "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 retorna todos os tokens que são armazenados no banco de dados de estado. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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:
  • nenhuma
Retorna:
  • Em caso de sucesso, um objeto JSON que representa todos os ativos de token.
Exemplo de Valor de Retorno:
"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 retorna todos os objetos de token com um nome especificado. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou Org Auditor. Este método usa consultas ricas em SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do 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 – O nome dos tokens a serem recuperados. O nome corresponde à propriedade Token_name no arquivo de especificação. O valor é o nome da classe do token.
Retorna:
  • No caso de sucesso, um objeto JSON de todos os ativos de token que correspondem ao nome.
Exemplo de Valor de Retorno:
"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 Gerenciamento de Contas

CreateAccount
Este método cria uma conta para um usuário e token especificados. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. As contas rastreiam saldos, saldos em retenção e histórico de transações. Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com oaccount~<token asset name>~ e seguido por um hash do nome do usuário ou do ID de e-mail (user_id) do proprietário da instância ou do usuário que está conectado à instância, o ID do provedor de serviços de associação (org_id) do usuário na organização de rede atual. Esse método só pode ser chamado por um Token Admin do chaincode ou um Org Admin da organização 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
  • token_type: string – O tipo do token, que deve ser fungible.
Retorna:
  • No caso de sucesso, um objeto JSON da conta que foi criada. O parâmetro BapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "BapAccountVersion": 0,
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0,
   "OnHoldBurnBalance":0
}
AssociateTokenToAccount
Este método associa um token fungível a uma conta. Esse método só pode ser chamado por um Token Admin do código de cadeia ou por um Org Admin da organização 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 – O ID da conta.
  • token_id string – O ID do token.
Retorna:
  • No caso de sucesso, um objeto JSON da conta atualizada. O parâmetro BapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
{ 
"AssetType":"oaccount", 
"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 retorna detalhes da conta para um usuário e token especificados. Esse método só pode ser chamado por uma Token Admin do chaincode, uma Org Admin da organização especificada ou a AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, um objeto de conta JSON que inclui as seguintes propriedades:
  • AccountId – O ID da conta de usuário.
  • UserId – O nome de usuário ou ID de e-mail do usuário.
  • OrgId – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • TokenId – O ID do token.
  • Balance – O saldo atual da conta.
  • BalanceOnHold – O saldo atual em retenção da conta.
  • OnHoldBurnBalance – O saldo em retenção atual aguardando a gravação da aprovação.
  • BapAccountVersion – Um parâmetro de objeto de conta para uso interno.
  • Status – O status atual da conta do usuário.
Exemplo de Valor de Retorno:
{
  "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 retorna detalhes do histórico da conta para um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um array de objetos de conta JSON que inclui as seguintes propriedades:
  • TxId – O ID da transação conforme retornado pelo razão.
  • Timestamp – O horário da transação.
  • IsDelete – Um valor booliano que indica se o registro foi excluído.
  • Value – Uma string JSON do objeto de conta. O parâmetro BapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
[
  {
      "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 retorna o saldo atual em retenção para uma conta e um token especificados. Esse método só pode ser chamado por uma Token Admin do chaincode, uma Org Admin da organização especificada ou a AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, uma representação JSON do saldo em retenção atual.
Exemplo de Valor de Retorno:
{
    "holding_balance": 0,
    "msg": "Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
Esse método retorna uma lista de todas as contas. Esse método só pode ser chamado por um Token Admin do chaincode. Este método usa consultas ricas em SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do 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:
  • nenhuma
Retorna:
  • No sucesso, um array JSON de todas as contas.
Exemplo de Valor de Retorno:
[
    {
        "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 retorna detalhes do usuário (org_id e user_id) para uma conta especificada. Este método pode ser chamado por qualquer usuário do chaincode.
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(account_id)
}
Parâmetros:
  • account_id string – O ID da conta.
Retorna:
  • Em caso de sucesso, um objeto JSON dos detalhes do usuário (org_id, token_id e user_id).
Exemplo de Valor de Retorno:
{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}
GetAccountBalance
Este método retorna o saldo atual de uma conta e token especificados. Esse método só pode ser chamado por uma Token Admin do chaincode, uma Org Admin da organização especificada ou a AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma representação JSON do saldo da conta atual.
Exemplo de Valor de Retorno:
{"msg":"Current Balance of oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f is 0","user_balance":0}
GetAllOrgAccounts
Este método retorna uma lista de todas as contas de token que pertencem a uma organização especificada. Esse método só pode ser chamado por uma Token Admin do chaincode ou por uma Org Admin da organização 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 – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • No caso de sucesso, uma lista de todas as contas da organização especificada.
Exemplo de Valor de Retorno:
[
    {
        "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 cria uma conta para um usuário e token especificados. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. As contas rastreiam saldos, saldos em retenção e histórico de transações. Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com oaccount~<token asset name>~ e seguido por um hash do nome do usuário ou do ID de e-mail (user_id) do proprietário da instância ou do usuário que está conectado à instância, o ID do provedor de serviços de associação (org_id) do usuário na organização de rede atual. Esse método só pode ser chamado por um Token Admin do chaincode ou um Org Admin da organização 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
  • token_type: string – O tipo do token, que deve ser fungible.
  • daily_limits: JSON – Um objeto que especifica a quantidade máxima de tokens que podem ser usados em transações diárias (max_daily_amount) e o número máximo de transações que podem ser concluídas diariamente (max_daily_transactions).

    Você especifica o parâmetro daily_limits em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

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

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

Retorna:
  • No caso de sucesso, um objeto JSON da conta que foi criada. O parâmetro BapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~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 associa um token fungível a uma conta. Esse método só pode ser chamado por um Token Admin do código de cadeia ou por um Org Admin da organização 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 – O ID da conta.
  • token_id string – O ID do token.
Retorna:
  • No caso de sucesso, um objeto JSON da conta atualizada. O parâmetro BapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
{ 
"AssetType":"oaccount", 
"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 retorna detalhes da conta para um usuário e token especificados. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, uma Org Admin ou Org Auditor da organização especificada ou a AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, um objeto de conta JSON que inclui as seguintes propriedades:
  • AccountId – O ID da conta de usuário.
  • UserId – O nome de usuário ou ID de e-mail do usuário.
  • OrgId – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • TokenId – O ID do token.
  • Balance – O saldo atual da conta.
  • BalanceOnHold – O saldo atual em retenção da conta.
  • OnHoldBurnBalance – O saldo em retenção atual aguardando aprovação de gravação.
  • BapAccountVersion – Um parâmetro de objeto de conta para uso interno.
  • Status – O status atual da conta do usuário.
Exemplo de Valor de Retorno:
{
  "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 retorna detalhes do histórico da conta para um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou pelo AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um array de objetos de conta JSON que inclui as seguintes propriedades:
  • TxId – O ID da transação conforme retornado pelo razão.
  • Timestamp – O horário da transação.
  • IsDelete – Um valor booliano que indica se o registro foi excluído.
  • Value – Uma string JSON do objeto de conta. O parâmetro BapAccountVersion é definido no objeto de conta para uso interno.
Exemplo de Valor de Retorno:
[
  {
      "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 retorna o saldo atual em retenção para uma conta e um token especificados. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, uma Org Admin ou Org Auditor da organização especificada ou pelo proprietário da conta especificada.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, uma representação JSON do saldo em retenção atual.
Exemplo de Valor de Retorno:
{
    "holding_balance": 0,
    "msg": "Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
Esse método retorna uma lista de todas as contas. Esse método só pode ser chamado por uma Token Admin ou Token Auditor do chaincode. Este método usa consultas ricas em SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do 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:
  • nenhuma
Retorna:
  • No sucesso, um array JSON de todas as contas.
Exemplo de Valor de Retorno:
[
    {
        "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 retorna detalhes do usuário (org_id e user_id) para uma conta especificada. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, ou por uma Org Admin ou Org Auditor da organização especificada.
func (t *Controller) GetUserByAccountId(account_id string) (interface{}, error) {
    return t.Ctx.Account.GetUserByAccountById(account_id)
}
Parâmetros:
  • account_id string – O ID da conta.
Retorna:
  • Em caso de sucesso, um objeto JSON dos detalhes do usuário (org_id, token_id e user_id).
Exemplo de Valor de Retorno:
{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}
GetAccountBalance
Este método retorna o saldo atual de uma conta e token especificados. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, uma Org Admin ou Org Auditor da organização especificada ou pelo proprietário da conta especificada.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma representação JSON do saldo da conta atual.
Exemplo de Valor de Retorno:
{"msg":"Current Balance of oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f is 0","user_balance":0}
GetAllOrgAccounts
Este método retorna uma lista de todas as contas de token que pertencem a uma organização especificada. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, ou por uma Org Admin ou Org Auditor da organização 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 – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • No caso de sucesso, uma lista de todas as contas da organização especificada.
Exemplo de Valor de Retorno:
[
    {
        "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 Gerenciamento de Atribuições

AddRole
Este método adiciona uma atribuição a um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada que também tenha a função especificada.
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 – O ID do token.
  • user_role string – O nome da função a ser adicionada ao usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de êxito, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
 {"msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
RemoveRole
Este método remove uma atribuição de um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada que também tenha a atribuição especificada.
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 – O ID do token.
  • user_role string – O nome da atribuição a ser removida do usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de êxito, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
{"msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"}
GetAccountsByRole
Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode.
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 – O ID do token.
  • user_role string – O nome da função a ser pesquisada.
Retorna:
  • No caso de sucesso, um array JSON de IDs de conta.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetAccountsByUser
Este método retorna uma lista de todos os IDs de conta para um ID organização e ID usuário especificados. Esse método só pode ser chamado por uma Token Admin do chaincode, uma Org Admin da organização especificada ou pela Account Owner especificada nos 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um array JSON de IDs de conta.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetUsersByRole
Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Esse método só pode ser chamado por uma Token Admin do chaincode ou pela Account Owner especificada nos 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 – O ID do token.
  • user_role string – O nome da função a ser pesquisada.
Retorna:
  • Em caso de sucesso, um array JSON dos objetos do usuário (org_id e user_id).
Exemplo de Valor de Retorno:
{"Users":[{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}]}
IsInRole
Este método retorna um valor Booliano para indicar se um usuário e um token têm uma função especificada. Esse método só pode ser chamado pelo Token Admin do chaincode, por um Org Admin da organização especificada ou pelo AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
  • user_role string – O nome da função a ser pesquisada.
Retorna:
  • No caso de sucesso, uma string JSON do resultado Booliano.
Exemplo de Valor de Retorno:
{"result":false}
GetOrgAccountsByRole
Este método retorna informações sobre todas as contas que têm uma função especificada em uma organização especificada. Esse método só pode ser chamado por uma Token Admin do chaincode ou por uma Org Admin da organização 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 – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • No caso de sucesso, uma lista de todas as contas com a função especificada na organização especificada.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
GetOrgUsersByRole
Este método retorna informações sobre todos os usuários que têm uma função especificada em uma organização especificada. Esse método só pode ser chamado por uma Token Admin do chaincode ou por uma Org Admin da organização 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 – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários com a função especificada na organização especificada.
Exemplo de Valor de Retorno:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
AddRole
Este método adiciona uma atribuição a um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada que também tenha a função especificada.
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 – O ID do token.
  • user_role string – O nome da função a ser adicionada ao usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de êxito, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
 {"msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
RemoveRole
Este método remove uma atribuição de um usuário e token especificados. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada que também tenha a atribuição especificada.
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 – O ID do token.
  • user_role string – O nome da atribuição a ser removida do usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de êxito, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
{"msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"}
GetAccountsByRole
Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Esse método só pode ser chamado por uma Token Admin ou 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 – O ID do token.
  • user_role string – O nome da função a ser pesquisada.
Retorna:
  • No caso de sucesso, um array JSON de IDs de conta.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetAccountsByUser
Este método retorna uma lista de todos os IDs de conta para um ID organização e ID usuário especificados. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, uma Org Admin ou Org Auditor da organização especificada ou pela Account Owner especificada nos 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 – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um array JSON de IDs de conta.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~2de8db6b91964f8c9009136831126d3cfa94e1d00c4285c1ea3e6d1f36479ed4"
    ]
}
GetUsersByRole
Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Esse método só pode ser chamado por uma Token Admin ou 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 – O ID do token.
  • user_role string – O nome da função a ser pesquisada.
Retorna:
  • Em caso de sucesso, um array JSON dos objetos do usuário (org_id e user_id).
Exemplo de Valor de Retorno:
{"Users":[{"org_id":"Org1MSP","token_id":"digiCurr101","user_id":"user1"}]}
IsInRole
Este método retorna um valor Booliano para indicar se um usuário e um token têm uma função especificada. Esse método só pode ser chamado pelo Token Admin ou Token Auditor, um Org Admin ou Org Auditor da organização especificada ou pelo proprietário da conta especificada.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
  • user_role string – O nome da função a ser pesquisada.
Retorna:
  • No caso de sucesso, uma string JSON do resultado Booliano.
Exemplo de Valor de Retorno:
{"result":false}
GetOrgAccountsByRole
Este método retorna informações sobre todas as contas que têm uma função especificada em uma organização especificada. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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 – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • No caso de sucesso, uma lista de todas as contas com a função especificada na organização especificada.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
GetOrgUsersByRole
Este método retorna informações sobre todos os usuários que têm uma função especificada em uma organização especificada. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, ou por uma Org Admin ou Org Auditor da organização 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 – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários com a função especificada na organização especificada.
Exemplo de Valor de Retorno:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}

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

GetAccountTransactionHistory
Este método retorna um array de detalhes do histórico de transações da conta para um usuário e token especificados. Esse método só pode ser chamado pelo Token Admin do chaincode, por um Org Admin da organização especificada ou pelo AccountOwner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, um array de objetos de transação de conta JSON que inclui as seguintes propriedades:
  • balance – O saldo da conta.
  • holding_id – O ID de uma conta suspensa.
  • onhold_balance – O saldo em retenção.
  • timestamp – O horário da transação.
  • token_id – O ID do token.
  • transacted_account – A conta com a qual a transação ocorreu.
  • transacted_amount – O valor da transação.
  • transaction_id – O ID da transação.
  • transaction_type – O tipo de transação.
Exemplo de Valor de Retorno:
[{
    "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 retorna um array de detalhes do histórico de transações da conta para um usuário e token especificados. Esse método só pode ser chamado pelo Token Admin do chaincode, por um Org Admin da organização especificada ou pelo AccountOwner da conta. Esse método só pode ser chamado quando conectado à rede remota do 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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

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

[
  {
    "transaction_id": "otransaction~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 retorna uma matriz de detalhes do histórico de subtransações para uma transação 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 – O ID da transação.
Exemplo:

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 retorna uma matriz de detalhes do histórico de subtransações para uma transação 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 – O ID da transação.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

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 retorna o histórico de um ativo Transaction.
func (t *Controller) GetTransactionById(transaction_id string) (interface{}, error) {
    return t.Ctx.Transaction.GetTransactionById(transaction_id)
}
Parâmetros:
  • transaction_id string – O ID do ativo da transação.
Retorna:
  • No caso de sucesso, um array JSON do histórico da transação.
Exemplo de Valor de Retorno:
{
    "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 exclui transações mais antigas do banco de dados 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 – Um timestamp que indica quando excluir transações. Os ativos de transação anteriores ao horário especificado serão excluídos.
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 – O ID do token para mint.
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
  • custom_endpoint – O ponto final do serviço RESTful do banco de dados de histórico avançado.
  • bearer_token – O token de autorização de acesso para o ponto final do serviço RESTful.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
GetAccountTransactionHistory
Este método retorna um array de detalhes do histórico de transações da conta para um usuário e token especificados. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, uma Org Admin ou Org Auditor da organização especificada ou pelo proprietário da conta 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 – O ID do token.
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Exemplo de Valor de Retorno:
[
            {
                "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 retorna um array filtrado de detalhes do histórico de transações da conta para um usuário e token especificados. Esse método só pode ser chamado por uma Token Admin ou Token Auditor, uma Org Admin ou Org Auditor da organização especificada ou pelo proprietário da conta 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 – O ID do token.
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo de Valor de Retorno:
[
            {
                "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 retorna uma matriz de detalhes do histórico de subtransações para uma transação especificada. Esse método só pode ser chamado por um Token Admin, Token Auditor ou pelo AccountOwner que chamou a transação.
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 – O ID da transação.
Exemplo:

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 retorna uma matriz de detalhes do histórico de subtransações para uma transação 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 – O ID da transação.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

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 retorna o histórico de um ativo Transaction. Este método só pode ser chamado por um Token Admin ou Token Auditor, um Org Admin ou Org Auditor da organização especificada ou por um participante da transação (remetente, destinatário, notário).
func (t *Controller) GetTransactionById(transaction_id string) (interface{}, error) {
    return t.Ctx.Transaction.GetTransactionById(transaction_id)
}
Parâmetros:
  • transaction_id string – O ID do ativo da transação.
Retorna:
  • No caso de sucesso, um array JSON do histórico da transação.
Exemplo de Valor de Retorno:
{
    "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 exclui transações mais antigas do banco de dados 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 – Um timestamp que indica quando excluir transações. Os ativos de transação anteriores ao horário especificado serão excluídos.

Métodos para Gerenciamento de Comportamento de Token - Comportamento Mintable

IssueTokens
Este método cunha tokens, que são então de propriedade do chamador do método. O chamador deve ter uma conta e a função de mineiro. O número de tokens que podem ser cunhados é limitado pela propriedade max_mint_quantity do comportamento mintable no arquivo de especificação. Se a propriedade max_mint_quantity não for especificada, um número ilimitado de tokens poderá ser cunhado. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método só pode ser chamado pelo AccountOwner da conta com a atribuição de minter.
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 – O ID do token.
  • quantity float64 – O número de tokens para hortelã.
Retorna:
  • No caso de êxito, uma mensagem com detalhes da conta.
Exemplo de Valor de Retorno:
{"msg":"Successfully minted 100 tokens to account oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"}
GetTotalMintedTokens
Este método retorna o número total de tokens cunhados para um token especificado. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode.
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 – O ID do token.
Retorna:
  • No caso de sucesso, uma string JSON indicando o número total de tokens.
Exemplo de Valor de Retorno:
{"msg":"total minted amount for token with id digiCurr101 is 1000","quantity":1000}
GetNetTokens
Este método retorna o número líquido total de tokens disponíveis no sistema para um token especificado. O total de tokens líquidos é a quantidade de tokens restantes após os tokens serem gravados. Em forma de equação, tokens líquidos = total de tokens cunhados - total de tokens gravados. Se nenhum token for gravado, o número de tokens líquidos será igual ao total de tokens cunhados. Esse método só pode ser chamado por uma Token Admin ou Org Admin do chaincode.
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 – O ID do token.
Retorna:
  • No caso de sucesso, uma string JSON indicando o número líquido de tokens.
Exemplo de Valor de Retorno:
{"msg":"net minted amount for token with id digiCurr101 is 1000","quantity":1000}
RequestMint
Este método pode ser chamado por um mineiro para enviar uma solicitação ao notário do mineiro para criar uma quantidade 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 – O ID do token para mint.
  • operation_id: string – O ID de operação exclusivo que representa a solicitação de hortelã.
  • notary_org_id: string – O ID do MSP (Membership Service Provider) do notário do mineiro que processará a solicitação.
  • notary_user_id: string – O nome de usuário ou o ID de email do notário do mineiro que processará a solicitação.
  • quantity: number – A quantidade de tokens para hortelã.
  • TimeToExpiration – O tempo após o qual a solicitação de cunhagem expira e não é mais válida.
  • info_details: JSON – Um objeto que especifica a categoria (category) e a descrição (description) da solicitação.

    Você especifica o parâmetro info_details em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

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

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

Exemplo de Valor de Retorno:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveMint
Este método pode ser chamado por um notário mineiro para aprovar uma solicitação de cunhagem.
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 – O ID do token para mint.
  • operation_id: string – O ID de operação exclusivo que representa a solicitação de hortelã.
Exemplo de Valor de Retorno:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectMint
Este método pode ser chamado por um notário mineiro para rejeitar uma solicitação de cunhagem.
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 – O ID do token para mint.
  • operation_id: string – O ID de operação exclusivo que representa a solicitação de hortelã.
Exemplo de Valor de Retorno:
{
 msg: "Successfully rejected mint request with Operation Id 'operation1' to mint 100 tokens of token id token"
}
IssueTokens
Este método cunha tokens, que são então de propriedade do chamador do 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 – O ID do token.
  • quantity – O número de tokens a serem hortelã.
  • info_details: JSON – Um objeto que especifica a categoria (category) e a descrição (description) da solicitação.

    Você especifica o parâmetro info_details em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

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

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

Exemplo de Valor de Retorno:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
GetTotalMintedTokens
Este método retorna o número total de tokens cunhados para um token especificado. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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 – O ID do token.
Retorna:
  • No caso de sucesso, uma string JSON indicando o número total de tokens.
Exemplo de Valor de Retorno:
{"msg":"total minted amount for token with id digiCurr101 is 1000","quantity":1000}
GetNetTokens
Este método retorna o número líquido total de tokens disponíveis no sistema para um token especificado. O total de tokens líquidos é a quantidade de tokens restantes após os tokens serem gravados. Em forma de equação, tokens líquidos = total de tokens cunhados - total de tokens gravados. Se nenhum token for gravado, o número de tokens líquidos será igual ao total de tokens cunhados. Esse método só pode ser chamado por uma Token Admin, Token Auditor, Org Admin ou 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 – O ID do token.
Retorna:
  • No caso de sucesso, uma string JSON indicando o número líquido de tokens.
Exemplo de Valor de Retorno:
{"msg":"net minted amount for token with id digiCurr101 is 1000","quantity":1000}

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

TransferTokens
Este método transfere tokens do chamador para uma conta especificada. O chamador do método deve ter uma conta. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método só pode ser chamado pelo AccountOwner da conta.
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 – O ID do token.
  • to_org_id string – O ID do provedor de serviços de associação (MSP) do destinatário na organização atual.
  • to_user_id string – O nome de usuário ou ID de e-mail do destinatário.
  • quantity float64 – O número de tokens a serem transferidos.
Retorna:
  • No caso de sucesso, uma mensagem com detalhes para ambas as contas.
Exemplo de Valor de Retorno:
{"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
Esse método transfere tokens em massa da conta do chamador para as contas especificadas no objeto flow. As quantidades devem estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no chamador file.The de especificação deste método deve ter uma conta já criada. Esse método só pode ser chamado pelo AccountOwner da conta.
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 – O ID do token.
  • flow[]map[string]interface{} – Um array de objetos JSON que especificam detalhes e quantidades do receptor.
    • to_org_id string – O ID do provedor de serviços de associação (MSP) do destinatário na organização atual.
    • to_user_id string – O nome de usuário ou ID de e-mail do destinatário.
    • quantity float64 – O número de tokens a serem transferidos.
    Você especifica o parâmetro flow em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.
    Visual Studio Code:
    [
      { "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 }]"
Retorna:
  • Uma mensagem indicando êxito.
Exemplo de Valor de Retorno:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}
TransferTokens
Este método transfere tokens do chamador para uma conta 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 – O ID do token.
  • to_org_id: string – O ID do provedor de serviços de associação (MSP) do destinatário (favorecido) na organização atual.
  • to_user_id: string – O nome de usuário ou ID de e-mail do destinatário.
  • quantity: number – O número de tokens a serem transferidos.
  • info_details: JSON – Um objeto que especifica a categoria (category) e a descrição (description) da solicitação.

    Você especifica o parâmetro info_details em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

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

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

Exemplo de Valor de Retorno:
{
 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
Esse método transfere tokens em massa da conta do chamador para as contas especificadas no objeto flow. As quantidades devem estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no chamador file.The de especificação deste método deve ter uma conta já criada. Esse método só pode ser chamado pelo AccountOwner da conta.
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 – O ID do token.
  • flow[]map[string]interface{} – Um array de objetos JSON que especificam detalhes e quantidades do receptor.
    • to_org_id string – O ID do provedor de serviços de associação (MSP) do destinatário na organização atual.
    • to_user_id string – O nome de usuário ou ID de e-mail do destinatário.
    • quantity float64 – O número de tokens a serem transferidos.
    Você especifica o parâmetro flow em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.
    Visual Studio Code:
    [
      { "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 }]"
Retorna:
  • Uma mensagem indicando êxito.
Exemplo de Valor de Retorno:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

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

HoldTokens
Esse método cria uma retenção em nome do proprietário dos tokens com a conta to_account_id. Uma conta do notário é especificada, que é responsável por concluir ou liberar a retenção. Quando a retenção é criada, o saldo de token especificado do pagador é colocado em retenção. Um saldo retido não pode ser transferido até que a retenção seja concluída ou liberada. O chamador desse método deve ter uma conta já criada. Esse método só pode ser chamado pelo AccountOwner da conta.
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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • to_org_id string – O ID do provedor de serviços de associação (MSP) do destinatário na organização atual.
  • to_user_id string – O nome de usuário ou ID de e-mail do destinatário.
  • notary_org_id string – O ID do notário do provedor de serviços de associação (MSP) na organização atual.
  • notary_user_id string – O nome de usuário ou ID de e-mail do notário.
  • quantity float64 – O número de tokens a serem colocados em espera.
  • time_to_expiration – O horário em que a retenção expira. Especifique 0 para uma retenção permanente. Caso contrário, use o formato RFC-3339. Por exemplo, 2021-06-02T12:46:06Z.
Retorna:
  • Em caso de sucesso, uma mensagem com a conta do chamador e os detalhes da retenção.
Exemplo de Valor de Retorno:
{"msg":"AccountId oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) is successfully holding 2 tokens"}
ExecuteHoldTokens
Este método conclui uma retenção em um token. Uma quantidade de tokens mantidos anteriormente por um proprietário de token é transferida para um destinatário. Se o valor quantity for menor que o valor de retenção real, o valor restante será disponibilizado novamente para o proprietário original dos tokens. Esse método só pode ser chamado pelo ID AccountOwner com a atribuição notary. A retenção só pode ser concluída pelo notário.
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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • quantity float64 – O número de tokens em espera a serem transferidos.
Retorna:
  • Com êxito, uma mensagem com o ID da conta do chamador e a quantidade da transação.
Exemplo de Valor de Retorno:
{"msg":"Account Id oaccount~digicur~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 uma retenção de tokens. A transferência não foi concluída e todos os tokens retidos estão disponíveis novamente para o proprietário original. Esse método pode ser chamado pelo ID Account Owner com a função notary dentro do limite de tempo especificado ou pelo pagador, favorecido ou notário após o limite de tempo 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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de êxito, uma mensagem indicando que a retenção foi liberada.
Exemplo de Valor de Retorno:
{"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 retorna uma lista de todos os IDs de retenção de uma conta especificada. Esse método pode ser chamado pelo Token Admin do chaincode, um Org Admin da organização especificada ou pelo Account Owner da conta.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma lista JSON de IDs de retenção. Um ID de retenção é uma concatenação do tipo de ativo ohold, o nome do token, o ID do token e o ID da operação.
Exemplo de Valor de Retorno:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationId
Este método retorna os detalhes da transação em retenção para um ID e token de operação especificados. Este método pode ser chamado por qualquer pessoa.
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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, um objeto de retenção JSON que inclui as seguintes propriedades:
  • HoldingId – O ID de retenção da transação.
  • OperationId – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • FromAccountId – O ID da conta do proprietário atual dos tokens em retenção.
  • ToAccountId – O ID da conta do destinatário.
  • NotaryAccountId – O ID da conta do notário.
  • TokenId – O ID do token salvo.
  • Quantity – A quantidade de tokens que estão em retenção para o ID de retenção.
  • TimeToExpiration – A duração até a suspensão expirar.
Exemplo de Valor de Retorno:
{
    "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 retorna o saldo em retenção para um ID e token de operação especificados. Este método pode ser chamado por qualquer pessoa.
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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, uma string JSON indicando o saldo de retenção.
Exemplo de Valor de Retorno:
{
	"holding_balance": 10,
	"msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}
HoldTokens
Esse método cria uma retenção em nome do proprietário dos tokens com a conta 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 – O ID do token.
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • to_org_id: string – O ID do provedor de serviços de associação (MSP) do destinatário na organização atual.
  • to_user_id: string – O nome de usuário ou ID de e-mail do destinatário.
  • notary_org_id: string – O ID do notário do provedor de serviços de associação (MSP) na organização atual.
  • notary_user_id: string – O nome de usuário ou ID de e-mail do notário.
  • quantity: number – O número de tokens a serem colocados em espera.
  • time_to_expiration – O horário em que a retenção expira. Especifique 0 para uma retenção permanente. Caso contrário, use o formato RFC-3339. Por exemplo, 2021-06-02T12:46:06Z.
  • info_details: JSON – Um objeto que especifica a categoria (category) e a descrição (description) da solicitação.

    Você especifica o parâmetro info_details em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

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

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

Exemplo de Valor de Retorno:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) is successfully holding 100 tokens",
}
ExecuteHoldTokens
Este método conclui uma retenção em um token. Uma quantidade de tokens mantidos anteriormente por um proprietário de token é transferida para um destinatário. Se o valor quantity for menor que o valor de retenção real, o valor restante será disponibilizado novamente para o proprietário original dos tokens. Esse método só pode ser chamado pelo ID AccountOwner com a atribuição notary. A retenção só pode ser concluída pelo notário.
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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • quantity float64 – O número de tokens em espera a serem transferidos.
Retorna:
  • Com êxito, uma mensagem com o ID da conta do chamador e a quantidade da transação.
Exemplo de Valor de Retorno:
{"msg":"Account Id oaccount~digicur~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 uma retenção de tokens. A transferência não foi concluída e todos os tokens retidos estão disponíveis novamente para o proprietário original. Esse método pode ser chamado pelo ID Account Owner com a função notary dentro do limite de tempo especificado ou pelo pagador, favorecido ou notário após o limite de tempo 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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de êxito, uma mensagem indicando que a retenção foi liberada.
Exemplo de Valor de Retorno:
{"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 retorna uma lista de todos os IDs de retenção de uma conta especificada. Esse método pode ser chamado pelo Token Admin ou Token Auditor, um Org Admin ou Org Auditor da organização especificada ou pelo proprietário da conta especificada.
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 – O ID do token.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma lista JSON de IDs de retenção. Um ID de retenção é uma concatenação do tipo de ativo ohold, o nome do token, o ID do token e o ID da operação.
Exemplo de Valor de Retorno:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationId
Este método retorna os detalhes da transação em retenção para um ID e token de operação especificados. Esse método só pode ser chamado pelo Token Admin, Token Auditor ou participante da transação (remetente, destinatário, notário).
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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, um objeto de retenção JSON que inclui as seguintes propriedades:
  • HoldingId – O ID de retenção da transação.
  • OperationId – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • FromAccountId – O ID da conta do proprietário atual dos tokens em retenção.
  • ToAccountId – O ID da conta do destinatário.
  • NotaryAccountId – O ID da conta do notário.
  • TokenId – O ID do token salvo.
  • Quantity – A quantidade de tokens que estão em retenção para o ID de retenção.
  • TimeToExpiration – A duração até a suspensão expirar.
Exemplo de Valor de Retorno:
{
    "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 retorna o saldo em retenção para um ID e token de operação especificados. Esse método só pode ser chamado pelo Token Admin, Token Auditor ou participante da transação (remetente, destinatário, notário).
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 – O ID do token.
  • operation_id string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • Em caso de sucesso, uma string JSON indicando o saldo de retenção.
Exemplo de Valor de Retorno:
{
	"holding_balance": 10,
	"msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

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

BurnTokens
Este método desativa ou grava tokens da conta do chamador da transação. O chamador desse método deve ter uma conta e o papel de queimador. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método pode ser chamado pelo Account Owner da conta com a função de gravador.
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 – O ID do token.
  • quantity float64 – O número de tokens a serem gravados.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso com a quantidade de tokens gravados e o ID da conta.
Exemplo de Valor de Retorno:
{"msg":"Successfully burned 1 tokens from account id: oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e (org_id : Org1MSP, user_id : user2)"}
RequestBurn
Este método pode ser chamado por um queimador para enviar uma solicitação ao notário do queimador para destruir uma quantidade especificada de tokens, que deve ser menor ou igual ao seu saldo disponível. Quando uma solicitação de gravação é iniciada, o valor especificado é imediatamente deduzido do saldo disponível e adicionado ao campo onhold_burn_balance. Se a solicitação for aprovada, os tokens serão gravados. Se a solicitação for rejeitada, os tokens serão retornados do campo onhold_burn_balance para o saldo disponível.
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 – O ID do token a ser gravado.
  • operation_id: string – O ID de operação exclusivo que representa a solicitação de gravação.
  • notary_org_id: string – O ID do provedor de serviços de associação (MSP) do notário do queimador que processará a solicitação.
  • notary_user_id: string – O nome de usuário ou ID de email do notário do queimador que processará a solicitação.
  • quantity: number – A quantidade de tokens a serem gravados.
  • time_to_expiration – O tempo após o qual a solicitação de gravação expira e não é mais válida.
  • info_details: JSON – Um objeto que especifica a categoria (category) e a descrição (description) da solicitação.

    Você especifica o parâmetro info_details em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

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

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

Exemplo de Valor de Retorno:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveBurn
Este método pode ser chamado por um notário do queimador para aprovar uma solicitação de gravação.
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 – O ID do token a ser gravado.
  • operation_id: string – O ID de operação exclusivo que representa a solicitação de gravação.
Exemplo de Valor de Retorno:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectBurn
Este método pode ser chamado por um notário de queimador para rejeitar um pedido de queima.
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 – O ID do token a ser gravado.
  • operation_id: string – O ID de operação exclusivo que representa a solicitação de gravação.
Exemplo de Valor de Retorno:
{
 msg: "Successfully rejected burn request with Operation Id 'operation1' to burn 100 tokens of token id token",
}
GetAccountOnHoldBurnBalance
Este método retorna o saldo de gravação em espera para um usuário especificado. Esse método só pode ser chamado pelo Token Admin, Token Auditor, Org Admin, Org Auditor ou pelo proprietário da conta.
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 – O ID do token a ser gravado.
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Exemplo de Valor de Retorno:
{
  "msg": "Total On Hold Burning Balance is: 10",
  "onhold_burn_balance": 10
}
BurnTokens
Este método desativa ou grava tokens da conta do chamador da transação.
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 – O ID do token.
  • quantity – O número de tokens a serem gravados.
  • info_details: JSON – Um objeto que especifica a categoria (category) e a descrição (description) da solicitação.

    Você especifica o parâmetro info_details em outro formato se estiver usando o Visual Studio Code versus a CLI ou uma coleção Postman.

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

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

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

Métodos personalizados

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

Certifique-se de rastrear o valor de retorno ao usar os métodos SDK do token. Além disso, para evitar o gasto duplo, não combine várias funções assíncronas que operam nos mesmos pares de chave/valor no banco de dados de estado. Em vez disso, use o método BulkTransferTokens para fazer várias transferências em um método.

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

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 SDK do Token

Métodos para Gerenciamento de Controle de Acesso

O token SDK fornece uma função de controle de acesso. Alguns métodos só podem ser chamados por um Token Admin, Org Admin ou AccountOwner do token. Você pode usar esse recurso para garantir que as operações sejam realizadas apenas pelos usuários pretendidos. Qualquer acesso não autorizado resulta em um erro. Para usar a função de controle de acesso, importe a classe Authorization do módulo ../lib/auth.
import { Authorization } from '../lib/auth';
AddAdmin
Esse método adiciona um usuário como Token Admin do código de cadeia do token.
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • user_id – O nome de usuário ou ID de e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso e detalhes para o usuário Token Admin que foi adicionado. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
Esse método remove um usuário como um Token Admin do chaincode do token.
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • user_id – O nome de usuário ou ID de e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso e detalhes para o usuário Token Admin que foi removido. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsUserTokenAdmin
Este método retornará o valor Booliano true se o chamador da função for um Token Admin. Caso contrário, o método retornará false.
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
Parâmetros:
  • user_id – O nome de usuário ou ID de e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Uma resposta booliana e uma mensagem de erro se for encontrado um erro.
Exemplo de Valor de Retorno:
{"result":false}
GetAllAdmins
Esse método retorna uma lista de todos os usuários que são um Token Admin do chaincode do token.
Ctx.GetAllAdmins() (interface{}, error)
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários que são um Token Admin do chaincode de token. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
Esse método retorna uma lista de todos os usuários que são um Token Admin do chaincode do token.
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários que são um Token Admin do código de cadeia de token no formato map[string]interface{}. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
Use esse método para adicionar controle de acesso ao seu chaincode. Muitos dos métodos de token gerados automaticamente usam o controle de acesso. O mapeamento entre o receptor do SDK e os métodos que têm controle de acesso é descrito no arquivo oChainUtil.go. Para usar seu próprio controle de acesso ou desativar o controle de acesso, remova o código de controle de acesso dos métodos do controlador gerados automaticamente e dos métodos personalizados.
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 – O valor do mapa entre os receptores e os métodos, conforme descrito no arquivo oChainUtil.go.
  • args – Um argumento de variável, em que args[0] é a constante TOKEN e args[1] é o argumento account_id, se necessário.
Retorna:
  • Uma resposta booliana e uma mensagem de erro se for encontrado um erro.
AddOrgAdmin
Esse método adiciona um usuário como um Org Admin da organização.
Ctx.Admin.AddOrgAdmin(org_id, user_id) (interface{}, error)
Parâmetros:
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método remove um usuário como um Org Admin de uma organização.
Ctx.Admin.RemoveOrgAdmin(org_id, user_id) (interface{}, error)
Parâmetros:
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
Esse método retorna uma lista de todos os usuários que são um Org Admin de uma organização.
Ctx.Admin.GetAllOrgAdmins() (interface{}, error)
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista JSON que inclui objetos OrgId e UserId.
Exemplo de Valor de Retorno:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddAdmin
Esse método adiciona um usuário como Token Admin do código de cadeia do token.
Ctx.AddAdmin(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • user_id – O nome de usuário ou ID de e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso e detalhes para o usuário Token Admin que foi adicionado. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"msg":"Successfully added Admin (Org_Id: Org1MSP, User_Id: user2)"}
RemoveAdmin
Esse método remove um usuário como um Token Admin do chaincode do token.
Ctx.RemoveAdmin(org_id string, user_id string) (interface{}, error)
Parâmetros:
  • user_id – O nome de usuário ou ID de e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso e detalhes para o usuário Token Admin que foi removido. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"msg":"Successfuly removed Admin (Org_Id Org1MSP User_Id user1)"}
IsUserTokenAdmin
Este método retornará o valor Booliano true se o chamador da função for um Token Admin. Caso contrário, o método retornará false.
Ctx.Auth.IsUserTokenAdmin()  (bool, error)
Parâmetros:
  • user_id – O nome de usuário ou ID de e-mail do usuário.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
Retorna:
  • Uma resposta booliana e uma mensagem de erro se for encontrado um erro.
Exemplo de Valor de Retorno:
{"result":false}
GetAllAdmins
Esse método retorna uma lista de todos os usuários que são um Token Admin do chaincode do token.
Ctx.GetAllAdmins() (interface{}, error)
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários que são um Token Admin do chaincode de token. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]
GetAllAdminUsers
Esse método retorna uma lista de todos os usuários que são um Token Admin do chaincode do token.
Ctx.Admin.GetAllAdminUsers() (interface{}, error) 
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários que são um Token Admin do código de cadeia de token no formato map[string]interface{}. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"admins":[{"OrgId":"Org1MSP","UserId":"admin"},{"OrgId":"Org1MSP","UserId":"user1"}]}
CheckAuthorization
Use esse método para adicionar controle de acesso ao seu chaincode. Muitos dos métodos de token gerados automaticamente usam o controle de acesso. O mapeamento entre o receptor do SDK e os métodos que têm controle de acesso é descrito no arquivo oChainUtil.go. Para usar seu próprio controle de acesso ou desativar o controle de acesso, remova o código de controle de acesso dos métodos do controlador gerados automaticamente e dos métodos personalizados.
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 – O valor do mapa entre os receptores e os métodos, conforme descrito no arquivo oChainUtil.go.
  • args – Um argumento de variável, em que args[0] é a constante TOKEN e args[1] é o argumento account_id, se necessário.
Retorna:
  • Uma resposta booliana e uma mensagem de erro se for encontrado um erro.
AddOrgAdmin
Esse método adiciona um usuário como um Org Admin da organização.
Ctx.Admin.AddOrgAdmin(org_id, user_id) (interface{}, error)
Parâmetros:
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
RemoveOrgAdmin
Este método remove um usuário como um Org Admin de uma organização.
Ctx.Admin.RemoveOrgAdmin(org_id, user_id) (interface{}, error)
Parâmetros:
  • org_id string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Org Admin da organização.
Exemplo de Valor de Retorno:
{
    "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
GetOrgAdmins
Esse método retorna uma lista de todos os usuários que são um Org Admin de uma organização.
Ctx.Admin.GetAllOrgAdmins() (interface{}, error)
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma lista JSON que inclui objetos OrgId e UserId.
Exemplo de Valor de Retorno:
{
    "admins": [
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin1"
        },
        {
            "OrgId": "Org1MSP",
            "UserId": "orgadmin2"
        }
    ]
}
AddTokenAuditor
Este método adiciona um usuário como um Token Auditor do chaincode.
t.Ctx.Admin.AddTokenAuditor(org_id, user_id)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como Token Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 remove um usuário como um Token Auditor do chaincode.
t.Ctx.Admin.RemoveTokenAuditor(org_id, user_id)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Token Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 retorna todos os Token Auditors do chaincode.
t.Ctx.Admin.GetAllTokenAuditors()
Exemplo de Valor de Retorno:
{
    "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 adiciona um usuário como um Org Auditor do chaincode.
t.Ctx.Admin.AddOrgAuditor(org_id, user_id)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi adicionado como Org Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 remove um usuário como um Org Auditor do chaincode.
t.Ctx.Admin.RemoveOrgAuditor(org_id, user_id)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do usuário que foi removido como um Org Auditor do chaincode.
Exemplo de Valor de Retorno:
{
    "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 retorna todos os Org Auditors do chaincode.
t.Ctx.Admin.GetAllOrgAuditors()
Exemplo de Valor de Retorno:
{
    "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 Gerenciamento de Configuração de Token

Save
Este método cria um token e salva suas propriedades no banco de dados de estado.
Ctx.Token.Save(args ...interface{}) (interface{}, error)
Parâmetros:
  • token_id: string – O ID do token a ser retornado.
  • args – Um argumento de variável, em que o primeiro argumento args[0] é uma referência dos dados do token struct do tipo necessário para adicionar ao razão.
Retorna:
  • Em caso de sucesso, um objeto interface{} com detalhes sobre o token que foi salvo no banco de dados de estado. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "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 atualiza as propriedades do token. Após a criação de um ativo de token, você só poderá atualizar o valor token_desc e suas propriedades personalizadas.
Ctx.Token.Update(args ...interface{}) (interface{}, error)
Parâmetros:
  • Um ativo que contém uma referência aos dados do token struct do tipo necessário para atualização no razão.
Retorna:
  • Em caso de sucesso, uma mensagem de promessa com detalhes do token. No erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "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 retorna o número de casas decimais disponíveis para um token fracionário. Se o comportamento divisible não estiver especificado, o valor padrão será 0.
Ctx.Token.GetTokenDecimals(token_id string) (int, error)
Parâmetros:
  • nenhuma
Retorna:
  • No caso de sucesso, as casas decimais do token, no tipo de dados de número. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
1
Get
Este método retorna um objeto de token se estiver presente no banco de dados de estado. Esse método só pode ser chamado por um Token Admin do chaincode do token.
Ctx.Get(Id string, result ...interface{}) (interface{}, error)
Parâmetros:
  • token_id: string – O ID do token a ser retornado.
  • result – Um argumento de variável, em que o primeiro argumento result[0] é uma referência de um objeto Token vazio do tipo necessário.
Retorna:
  • Em caso de sucesso, um mapa com os dados do ativo de token. O argumento de variável result[0] contém os dados do token. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "AssetType": "otoken",
    "Token_id": "digiCurr101",
    "Token_name": "digicur",
    "Token_desc": "Digital Currency equiv of dollar",
    "Token_type": "fungible",
    "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 retorna o histórico de token para um ID de token especificado.
Ctx.Token.History(tokenId string) (interface{}, error)
Parâmetros:
  • tokenId: string – O ID do token.
Retorna:
  • Em caso de sucesso, um array JSON que representa o histórico de tokens.
Exemplo de Valor de Retorno:
[
    {
        "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 retorna todos os ativos de token que são salvos no banco de dados de estado. Este método usa consultas ricas em SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.Token.GetAllTokens()  (interface{}, error)
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, uma matriz de um mapa de todos os ativos de token. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
"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 retorna todos os ativos de token com o nome especificado. Este método usa consultas ricas em SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.Token.GetTokensByName(token_name string) (interface{}, error)
Parâmetros:
  • token_name string – O nome do token, que corresponde à propriedade Token_name do modelo. O valor é o nome da classe do token.
Retorna:
  • Ele retorna um array de um mapa de todos os ativos de token do nome especificado.
Exemplo de Valor de Retorno:
"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 testa se existe um ativo de token para um ID de token especificado.
Ctx.Model.IsTokenType(token_id: string) error
Parâmetros:
  • token_id: string – O ID do token a ser verificado.
Retorna:
  • Se existir um ativo de token com o ID especificado, um erro nulo. Caso contrário, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
nil
GetByRange
Esse método chama o método da malha getStateByRange internamente. Embora qualquer ativo com o ID fornecido seja retornado do razão, esse método converte o ativo no tipo de Ativo do chamador.
Ctx.Token.GetByRange(startId string, endId string, asset ...interface{}) ([]map[string]interface{}, error)
Parâmetros:
  • startId: string – A chave inicial do intervalo. Esta chave está incluída no intervalo.
  • endId: string – A chave final do intervalo. Esta chave foi excluída do intervalo.
  • asset[0] – Uma fatia vazia do token do tipo necessário. Se o método for executado com êxito, ele conterá o resultado solicitado.
Retorna:
  • Em caso de sucesso, uma fatia de mapas contendo os detalhes do ativo de token para tokens em que o valor token_id está no intervalo especificado. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
[{
    "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 Gerenciamento de Contas

GenerateAccountId
Esse método retorna um ID de conta, que é um conjunto alfanumérico de caracteres, prefixado com oaccount~<token asset name>~ e seguido por um hash do nome do usuário ou do ID de e-mail (user_id) do proprietário da instância ou do usuário que está conectado à instância, do ID do provedor de serviços de associação (org_id) do usuário na organização de rede atual e do ID de token exclusivo (token_id).
Ctx.Account.GenerateAccountId(token_id string, org_id string, user_id string) (string, error)
Parâmetros:
  • token_id: string – O ID do token.
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • Com êxito, o ID da conta gerada. No erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f
CreateAccount
Este método cria uma conta para um usuário e token especificados. Todo usuário que tem tokens em qualquer ponto deve ter uma conta. As contas rastreiam o saldo, o saldo em retenção e o histórico de transações de um usuário. Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com oaccount~<token asset name>~ e seguido por um hash do nome do usuário ou do ID de e-mail (user_id) do proprietário da instância ou do usuário que está conectado à instância, o ID do provedor de serviços de associação (org_id) do usuário na organização de rede atual. Esse método só pode ser chamado pelo Token Admin do chaincode.
t.Ctx.Account.CreateAccount(org_id string, user_id string, token_type string)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual.
  • user_id: string – O nome de usuário ou ID de e-mail do usuário.
  • token_type: string – O tipo do token, que deve ser fungible.
Retorna:
  • Com êxito, o objeto da conta que foi criado. No erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
{
 "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 associa um token fungível a uma conta. Esse método só pode ser chamado por um Token Admin do chaincode.
t.Ctx.Account.AssociateToken(account_id, token_id)
Parâmetros:
  • account_id string – O ID da conta.
  • token_id string – O ID do token.
Retorna:
  • No caso de sucesso, um objeto JSON da conta atualizada.
Exemplo de Valor de Retorno:
{ 
"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 retorna detalhes da conta para uma conta especificada, incluindo o status da conta.
Ctx.Account.GetAccountWithStatus(account_id string) (interface{}, error)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Com êxito, os detalhes da conta solicitada. No erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
{
  "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 retorna detalhes da conta para uma conta especificada.
Ctx.Account.GetAccount(account_id string) (Account, error)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Com êxito, os detalhes da conta solicitada. No erro, uma rejeição com uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "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 retorna uma matriz dos detalhes do histórico da conta para uma conta especificada.
Ctx.Account.History(account_id string) ([]interface{}, error)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Em caso de sucesso, um array map[string]interface{} que contém os detalhes do histórico da conta. Os dados da conta são mostrados na chave Value no mapa. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro. O valor de retorno é igual ao método GetAccountHistory.
Exemplo de Valor de Retorno:
[
  {
      "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 retorna o saldo em retenção de uma conta especificada.
Ctx.Account.getAccountOnHoldBalance(account_id: string)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • No caso de sucesso, um objeto de promessa com o saldo em retenção atual e uma mensagem de sucesso. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
   "holding_balance":0,
   "msg":"Total Holding Balance of Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id: Org1MSP, user_id: user1) is 0"
}
GetAllAccounts
Esse método retorna uma lista de todas as contas. Este método usa consultas ricas em SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
Ctx.func (t *Controller) GetAllAccounts() (interface{}, error)
Parâmetros:
  • nenhuma
Retorna:
  • Em caso de sucesso, um array JSON que lista todas as contas.
Exemplo de Valor de Retorno:
"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 retorna os detalhes do usuário de uma conta especificada.
Ctx.Account.GetUserByAccountById(account_id string) (interface{}, error)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • No caso de sucesso, uma promessa com um objeto JSON que inclui três propriedades:
    • user_id – O nome de usuário ou ID de e-mail do usuário.
    • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
    • token_id – O ID do token.
  • No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
   "org_id":"Org1MSP",
   "token_id":"digiCurr101",
   "user_id":"user1"
}
GetAccountBalance
Este método retorna o saldo da conta para uma conta especificada.
Ctx.GetAccountBalance(token_id string, org_id string, user_id string) (interface{}, error)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • Com êxito, uma interface com uma string de mensagem e o saldo atual. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "msg": "Current Balance of +p2uaMTsU9D74l9XpHQ2c55ic/2gbO4NZITC4Zq4P8E= is: 200",
    "user_balance": 200
}
GetAllOrgAccounts
Este método retorna uma lista de todas as contas de token que pertencem a uma organização especificada.
Ctx.Account.GetAllOrgAccounts(org_id string) (interface{}, error)
Parâmetros:
  • org_id: string – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • No caso de sucesso, uma lista de todas as contas da organização especificada.
Exemplo de Valor de Retorno:
[
    {
        "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 Gerenciamento de Atribuições

AddRoleMember
Este método adiciona uma atribuição a um usuário e token especificados.
Ctx.Token.AddRoleMember(role string, account_id string, tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • role: string – O nome da função a ser adicionada ao usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • account_id: number – O ID da conta ao qual a função será adicionada.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Em caso de sucesso, ele retorna um mapa com uma mensagem de sucesso indicando a adição da atribuição à conta. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
   "msg":"Successfully added role minter to oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1)"
}
RemoveRoleMember
Este método remove uma atribuição de um usuário e token especificados.
Ctx.Token.RemoveRoleMember(role string, account_id string, tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • role: string – O nome da função a ser removida para o usuário especificado. Os comportamentos mintable e burnable correspondem às propriedades minter_role_name e burner_role_name do arquivo de especificação. Da mesma forma, a atribuição notary corresponde à propriedade notary_role_name do arquivo de especificação.
  • account_id: number – O ID da conta da qual a função será removida.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Em caso de sucesso, ele retorna um mapa com uma mensagem de sucesso indicando a remoção da atribuição da conta. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
  "msg":"successfully removed member_id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (org_id : Org1MSP, user_id : user1) from role minter"
}
GetAccountsByRole
Este método retorna uma lista de todas as contas para uma atribuição e um token especificados.
Ctx.Role.GetAccountsByRole(token_id string, user_role string) (interface{}, error)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da função a ser pesquisada.
Retorna:
  • No caso de sucesso, um array JSON de IDs de conta. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"accounts":["oaccount~obptok~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f"]}
GetUsersByRole
Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados.
Ctx.Role.GetUsersByRole(token_id string, user_role string) (interface{}, error)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da função a ser pesquisada.
Retorna:
  • No caso de sucesso, um array JSON de objetos do usuário. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "Users": [
        {
            "token_id":"digiCurr101",
            "user_id": "user1",
            "org_id": "Org1MSP"
        }
    ]
}
IsInRole
Este método indica se um usuário e um token têm uma atribuição especificada.
Ctx.Token.IsInRole(role string, account_id string, tokenAsset interface{}) (bool, error)
Parâmetros:
  • role: string – O nome da função a ser verificada.
  • account_id: number – O ID da conta a ser verificado.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Em caso de sucesso, ele retorna um mapa com uma mensagem de sucesso indicando a remoção da atribuição da conta. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "result": false
}
GetOrgAccountsByRole
Este método retorna informações sobre todas as contas que têm uma função especificada em uma organização especificada.
Ctx.Role.GetOrgAccountsByRole(token_id string, user_role string, org_id string) (interface{}, error)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • No caso de sucesso, uma lista de todas as contas com a função especificada na organização especificada.
Exemplo de Valor de Retorno:
{
    "accounts": [
        "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
         "oaccount~9c650574af9025a6106c8d12a801b079eda9ae2e3399fc2fbd5bd683d738a850"
    ]
}
GetOrgUsersByRole
Este método retorna informações sobre todos os usuários que têm uma função especificada em uma organização especificada.
Ctx.Role.GetOrgUsersByRole(token_id string, user_role string, org_id string) (interface{}, error)
Parâmetros:
  • token_id: string – O ID do token.
  • role: string – O nome da atribuição a ser verificada.
  • org_id: string – O ID do provedor de serviços de associação (MSP) da organização.
Retorna:
  • Em caso de sucesso, uma lista de todos os usuários com a função especificada na organização especificada.
Exemplo de Valor de Retorno:
{
    "Users": [
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "admin"
        },
        {
            "org_id": "Org1MSP",
            "token_id": "token",
            "user_id": "orgAdmin"
        }
    ]
}
RoleCheck
Este método verifica se o ID da conta fornecido é membro de qualquer função.
Ctx.Token.RoleCheck(account_id string, tokenAsset interface{}) (bool, error)
Parâmetros:
  • account_id: string – O ID da conta a ser verificado.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Se a conta especificada tiver qualquer função, uma mensagem de sucesso e o valor booliano verdadeiro. Caso contrário, o valor booliano false. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{ result: true }

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

GetAccountTransactionHistory
Este método retorna uma matriz dos detalhes do histórico de transações de uma conta especificada.
Ctx.Account.GetAccountTransactionHistory(account_id string) (interface{}, error)
Parâmetros:
  • account_id: string – O ID da conta.
Retorna:
  • O valor de retorno é igual ao método GetAccountTransactionHistory.
  • No caso de sucesso, um array de objetos de transação de conta JSON.
  • No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
[
  {
      "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 retorna uma matriz dos detalhes do histórico de transações de uma transação especificada. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
t.Ctx.Account.GetAccountTransactionHistoryWithFilters (transaction_id: string, filters?: SubTransactionFilters)
Parâmetros:
  • Transaction_id: string – O ID da transação.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

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 retorna uma matriz dos detalhes do histórico de transações de uma transação especificada.
t.Ctx.Account.GetSubTransactionsById(transaction_id string)
Parâmetros:
  • transaction_id: string – O ID da transação.
Exemplo:

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 retorna uma matriz dos detalhes do histórico de transações de uma transação especificada.
t.Ctx.Account.GetSubTransactionsByIdWithFilters(transaction_id string, filters ...SubTransactionFilters)
Parâmetros:
  • transaction_id: string – O ID da transação.
  • filters: string – Um parâmetro opcional. Se estiver vazio, todos os registros serão retornados. A propriedade PageSize determina o número de registros a serem retornados. Se PageSize for 0, o tamanho padrão da página será 20. A propriedade Bookmark determina o índice inicial dos registros a serem retornados. Para obter mais informações, consulte a documentação do Hyperledger Fabric. As propriedades StartTime e EndTime devem ser especificadas no formato RFC-3339.
Exemplo:

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 retorna o histórico de um ativo Transaction.
t.Ctx.Transaction.GetTransactionById(transaction_id string)
Parâmetros:
  • transaction_id string – O ID do ativo da transação.
Exemplo de Valor de Retorno:
{
    "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 exclui transações mais antigas do banco de dados de estado.
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error)
Parâmetros:
  • time_to_expiration: Date – Um timestamp que indica quando excluir transações. Os ativos de transação anteriores ao horário especificado serão excluídos.
Exemplo de Valor de Retorno:
"payload": {
    "msg": "Successfuly deleted transaction older than date:2021-08-18T05:43:30Z",
    "transactions": [
        "otransaction~57d81f681aa215bb73d6c017d16be8b283d3fcb50051c85891a97d1d407fc342"
    ]
}

Métodos para Gerenciamento de Comportamento de Token - Comportamento Mintable

Mint
Este método cunha tokens, que são então de propriedade do chamador do método. O chamador deve ter uma conta e a função de mineiro. O número de tokens que podem ser cunhados é limitado pela propriedade max_mint_quantity do comportamento mintable no arquivo de especificação. Se a propriedade max_mint_quantity não for especificada, um número ilimitado de tokens poderá ser cunhado. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método só pode ser chamado pelo AccountOwner da conta com a atribuição de minter.
Ctx.Token.Mint(quantity float64, tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • quantity: number – O número de tokens para hortelã.
  • tokenAsset – A referência ao ativo de token para mint.
Retorna:
  • Uma mensagem de sucesso. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
  "msg":"Successfully minted 1000 tokens to Account Id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}
GetTotalMintedTokens
Este método retorna o número total de tokens cunhados.
Ctx.Token.GetTotalMintedTokens(tokenAsset interface{}) (map[string]interface{}, error)
Parâmetros:
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso e um mapa do total de tokens cunhados no tipo de dados de número. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"msg":"total minted amount for token with id digiCurr101 is 0","quantity":0}
GetNetTokens
Este método retorna a quantidade líquida de tokens que estão disponíveis no sistema para um token especificado. Os tokens líquidos são a quantidade de tokens restantes após os tokens serem gravados. Em forma de equação: tokens líquidos = total de tokens cunhados - total de tokens gravados. Se nenhum token for gravado, o número de tokens líquidos será igual ao total de tokens cunhados.
Ctx.Token.GetNetTokens(tokenAsset interface{}) (map[string]interface{}, error)
Parâmetros:
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso e um mapa da quantidade líquida de tokens no tipo de dados de número. Em caso de erro, uma mensagem de erro.
Exemplo de Valor de Retorno:
{"msg":"net minted amount for token with id digiCurr101 is 0","quantity":0}
GetMaxMintQuantity
Este método retorna a quantidade máxima de moeda para um token. Se o comportamento max_mint_quantity não for especificado, o valor padrão será 0, o que permite que qualquer número de tokens seja cunhado.
Ctx.Token.GetMaxMintQuantity(token_id string) (float64, error)
Parâmetros:
  • token_id: string – O ID do token a ser verificado.
Retorna:
  • No caso de sucesso, a quantidade máxima de moeda do token, no tipo de dados de número. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
20000

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

Transfer
Este método transfere tokens do chamador para uma conta especificada. O chamador do método deve ter uma conta. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Esse método só pode ser chamado pelo AccountOwner da conta.
Ctx.Token.Transfer(to_account_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • to_account_id: string – O ID da conta para receber os tokens.
  • quantity: number – O número total de tokens a serem transferidos.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Uma mensagem de sucesso. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro. O valor de retorno é igual ao método TransferTokens.
Exemplo de Valor de Retorno:
{     "msg":"Successfully transferred 50 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP,  User-Id: admin) to account id: oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)"
}
BulkTransfer
Esse método transfere tokens em massa da conta do chamador para as contas especificadas no objeto flow. O chamador desse método deve ter uma conta já criada.
Ctx.Token.BulkTransfer(flow []map[string]interface{}, tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • flow: object[] – Um array de objetos JSON especificando os detalhes e a quantidade do receptor. A quantidade de transferência deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação. Por exemplo:
    [{
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user1",
    	"quantity": 10
    }, {
    	"to_org_id": "Org1MSP",
    	"to_user_id": "user2",
    	"quantity": 10
    }]
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Em caso de sucesso, uma mensagem de sucesso que inclui o número de tokens transferidos. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "from_account_id": "oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f",
    "msg": "Successfully transferred 2 tokens from Account Id oaccount~digicur~b4f45440aa2a7942db64443d047027e9d714d62cba5c3d546d64f368642f622f (Org-Id: Org1MSP, User-Id: user1)",
    "sub_transactions": [
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~38848e87296d67c8a90918f78cf55f9c9baab2cdc8c928535471aaa1210c706e"
        },
        {
            "amount": 1,
            "to_account_id": "oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df"
        }
    ]
}

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

Hold
Esse método cria uma retenção em nome do proprietário dos tokens com a conta to_account_id. Uma conta do notário é especificada, que é responsável por concluir ou liberar a retenção. Quando a retenção é criada, o saldo de token especificado do pagador é colocado em retenção. Um saldo retido não pode ser transferido até que a retenção seja concluída ou liberada. O chamador desse método deve ter uma conta já criada.
Ctx.Token.Hold(operation_id string, to_account_id string, notary_account_id string, quantity float64, TimeToExpiration string, tokenAsset)) (interface{}, error)
Parâmetros:
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • to_account_id: string – O ID da conta para receber os tokens.
  • notary__account_id: string – O ID da conta do notário.
  • quantity: number – O número total de tokens a serem colocados em espera.
  • time_to_expiration: date – A duração até a suspensão expirar. Especifique 0 para uma retenção permanente. Caso contrário, use o formato RFC-3339. Por exemplo, 2021-06-02T12.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Uma mensagem de sucesso. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
 "msg": "account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (org_id : Org1MSP, user_id : user1) is successfully holding 10 tokens",
}
ExecuteHold
Este método conclui uma retenção de tokens, transferindo a quantidade especificada de tokens anteriormente em retenção para o receptor. Se o valor quantity for menor que o valor de retenção real, o valor restante será disponibilizado novamente para o proprietário original dos tokens. Esse método só pode ser chamado pelo ID AccountOwner com a atribuição notary.
Ctx.Token.ExecuteHold(operation_id string, quantity float64, tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • quantity: number – O número total de tokens a serem colocados em espera.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Uma mensagem de sucesso. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"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 uma retenção de tokens. A transferência não foi concluída e todos os tokens retidos estão disponíveis novamente para o proprietário original. Esse método pode ser chamado pelo ID Account Owner com a função notary dentro do limite de tempo especificado ou pelo pagador, favorecido ou notário após o limite de tempo especificado.
Ctx.Token.ReleaseHold(operation_id string, tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Uma mensagem de sucesso. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{"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 retorna uma lista de todos os IDs de retenção para um usuário e token especificados.
Ctx.Account.GetOnHoldIDs(account_id string) (map[string]interface{}, error)
Parâmetros:
  • token_id – O ID do token.
  • org_id – O ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual.
  • user_id – O nome de usuário ou ID de e-mail do usuário.
Retorna:
  • No caso de sucesso, um objeto JSON com a lista de IDs de retenção. Um ID de retenção é formado pela concatenação do tipo de ativo (ohold), do nome do token, do ID do token e do ID da operação.
Exemplo de Valor de Retorno:
{"holding_ids":["ohold~loyaltok123~t1~op1"],"msg":"Holding Ids are: [ohold~loyaltok123~t1~op1]"}
GetOnHoldDetailsWithOperationID
Este método retorna os detalhes da transação em espera para um ID de operação e token especificados.
Ctx.Hold.GetOnHoldDetailsWithOperationID(token_id string, operation_id string) (Hold, error)
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo que identifica a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • O valor de retorno é igual ao método GetOnHoldDetailsWithOperationId.
  • Com êxito, um objeto de promessa que inclui os detalhes da transação em retenção para o ID e token da operação especificados. O objeto hold inclui as seguintes propriedades:
    • holding_id – O ID de retenção da transação.
    • operation_id: string – Um ID exclusivo para identificar a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
    • from_account_id – O ID da conta do proprietário atual dos tokens em retenção.
    • to_account_id – O ID da conta do destinatário.
    • notary_account_id – O ID da conta do notário.
    • token_id: string – O ID do token salvo.
    • quantity – A quantidade de tokens que estão em retenção para o ID de retenção.
    • time_to_expiration – A duração até a suspensão expirar.
  • No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "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 retorna o saldo em espera para um ID e token de operação especificados.
Ctx.Hold.GetOnHoldBalanceWithOperationID(token_id string, operation_id string) (map[string]interface{}, error)
Parâmetros:
  • token_id: string – O ID do token.
  • operation_id: string – Um ID exclusivo que identifica a operação de retenção. Geralmente, esse ID é passado pelo aplicativo cliente.
Retorna:
  • No caso de sucesso, o saldo em retenção do ID e token da operação especificados. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
    "holding_balance": 10,
    "msg": "Current Holding Balance of OperationId opr_121 for token digiCurr101 is : 10"
}

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

Burn
Este método desativa ou grava tokens da conta do chamador da transação. O chamador desse método deve ter uma conta e o papel de queimador. A quantidade deve estar dentro dos valores decimais especificados pelo parâmetro decimal do comportamento divisible no arquivo de especificação.
Ctx.Token.Burn(quantity float64 , tokenAsset interface{}) (interface{}, error)
Parâmetros:
  • quantity: number – O número total de tokens a serem gravados.
  • tokenAsset – O argumento tokenAsset contém a referência dos dados de token nos quais operar.
Retorna:
  • Uma mensagem de sucesso. No caso de erro, um objeto de erro não nulo contendo uma mensagem de erro.
Exemplo de Valor de Retorno:
{
 "msg":"Successfully burned 10 tokens from account id: oaccount~digicur~682bb71de419602af74e3f226345ae308445ca51010737900c1d85f0376152df (Org-Id: Org1MSP, User-Id: admin)"
}