Métodos Go para Conversão de Token

O Blockchain App Builder gera automaticamente métodos que você pode usar para converter tokens fungíveis que usam o padrão Token Taxonomy Framework.

Os métodos de conversão de token incluem o conceito do pool de intercâmbio. A conta do pool de câmbio é financiada por outras contas de token. Quando você mint tokens, você pode especificar que uma porcentagem dos tokens cunhados são transferidos para a conta do pool de troca.

Processo de Conversão de Token

Um fluxo típico para converter tokens segue estas etapas:
  1. Chame o método InitializeExchangePoolUser para inicializar o usuário do pool de intercâmbio.
  2. Chame o método CreateExchangePoolAccounts para criar contas de pool de câmbio. Crie uma conta de pool de câmbio para cada tipo de token fungível do qual você deseja converter ou converter.
  3. Chame o método AddConversionRate para definir a taxa de conversão para cada par de tokens entre os quais você deseja converter.
  4. Financie as contas de token do pool de câmbio de uma das seguintes maneiras:
    • Transfira tokens para as contas de token do pool de câmbio usando os métodos de transferência padrão.
    • Chame o método MintWithFundingExchangePoolToken ao cunhar tokens, que podem transferir uma porcentagem de tokens cunhados para uma conta de pool de câmbio.
  5. Chame o método TokenConversion para converter entre dois tokens fungíveis. Um único usuário pode converter tokens entre duas de suas contas de token, ou um par de usuários pode converter diretamente tokens de uma conta para outra.
  6. O usuário do pool de câmbio pode exibir os saldos da conta e as transações da conta do pool de câmbio.
    • Chame o método GetAccount para exibir os saldos de cada uma das contas de token do pool de câmbio.
    • Chame os métodos GetAccountTransactionHistory e GetAccountTransactionHistoryWithFilters para exibir transações de conta para cada uma das contas de token do pool de câmbio.

Métodos de Conversão de Token Gerados Automaticamente

O Blockchain App Builder gera automaticamente métodos para converter entre diferentes tipos de tokens fungíveis. 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.

InitializeExchangePoolUser
Este método inicializa o usuário do pool de intercâmbio, que é uma atividade única. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) InitializeExchangePoolUser(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.InitializeExchangePoolUser(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:
  • Com êxito, uma mensagem que inclui detalhes do usuário do pool de intercâmbio.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
CreateExchangePoolAccounts
Este método cria contas de token de pool de câmbio para um determinado array de IDs de token. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) CreateExchangePoolAccounts(token_ids []string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    var tokens []interface{}
    for _, tokenId := range token_ids {
        token, err := t.getTokenObject(tokenId)
        if err != nil {
            return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
        }
        tokens = append(tokens, token.Interface())
    }
    return t.Ctx.TokenConvertor.CreateExchangePoolAccounts(tokens)
}
Parâmetros:
  • token_ids: string [] – Um array de IDs de token. Você pode especificar até dez IDs de token.
Retorna:
  • Em caso de sucesso, uma lista de objetos que inclui detalhes das contas do pool de câmbio que foram criadas.
Exemplo de Valor de Retorno:
[
    {
        "AccountId": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
        "Status": "created",
        "TokenId": "USD"
    },
    {
        "AccountId": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
        "Status": "created",
        "TokenId": "INR"
    }
]
AddConversionRate
Este método adiciona uma taxa de conversão para um par de tokens. A taxa de conversão do token pode ser especificada com até oito casas decimais. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) AddConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.AddConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.AddConversionToken(from_token_id, to_token_id, token_conversion_rate)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • token_conversion_rate: float64 – A taxa na qual o token from_token_id será convertido para o token to_token_id.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
GetConversionRate
Este método obtém a taxa de conversão atual para um par de tokens. Esse método pode ser chamado pelo Token Admin do chaincode, por qualquer Org Admin e por qualquer proprietário de conta de token.
func (t *Controller) GetConversionRate(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversionRateId, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversationRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.Get(conversionRateId)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
UpdateConversionRate
Este método atualiza a taxa de conversão atual para um par de tokens. A taxa de conversão do token pode ser especificada com até oito casas decimais. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) UpdateConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.UpdateConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.UpdateTokenConversionRate(from_token_id, to_token_id, token_conversion_rate)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • token_conversion_rate: float64 – A taxa na qual o token from_token_id será convertido para o token to_token_id.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão atualizado.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 15
}
MintWithFundingExchangePool
Este método cunha tokens na conta do chamador com base no ID e na quantidade do token especificados. Uma porcentagem de tokens da quantidade cunhada é então transferida para a conta de token do pool de câmbio.
func (t *Controller) MintWithFundingExchangePool(token_id string, token_quantity float64, percentage_token_to_exchangePool float64) (interface{}, error) {
    token, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    return t.Ctx.TokenConvertor.MintWithFundingExchangePool(token.Interface(), token_quantity, percentage_token_to_exchangePool)
}
Parâmetros:
  • token_id: string – O ID do token para mint.
  • token_quantity: float64 – O número total de tokens para hortelã.
  • percentage_token_to_exchange_pool: float64 – A porcentagem de tokens cunhados a serem transferidos para a conta de token do pool de câmbio.
Retorna:
  • Em caso de sucesso, uma mensagem que indica que a cunhagem e o financiamento do pool de troca foram bem-sucedidos.
Exemplo de Valor de Retorno:
{
    "msg": "successfully minted 100 tokens to AccountId: 'oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1' (OrgId: Org1MSP, User-Id: admin) and Successfully transfered 80 tokens to exchange pool account with AccountId: 'oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0' (OrgId: Org1MSP, UserId: exchangepooluser) "
}
TokenConversion
Esse método converte tokens da conta do chamador para a conta especificada pelos valores to_token_id, to_org_id e to_user_id. Esse método pode ser chamado pelo Token Admin do chaincode e por qualquer proprietário de conta de token. Um usuário do pool de intercâmbio não pode chamar este método.
func (t *Controller) TokenConversion(from_token_id string, to_token_id string, to_org_id string, to_user_id string, token_quantity float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.TokenConversion", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    from_token, err := t.getTokenObject(from_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    to_token, err := t.getTokenObject(to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting to_token asset details. error: %s", err)
    }
    return t.Ctx.TokenConvertor.TokenConversion(from_token.Interface(), to_token.Interface(), to_org_id, to_user_id, token_quantity)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • to_org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual para receber os tokens.
  • to_user_id: string – O nome de usuário ou o ID de e-mail do usuário para receber os tokens.
  • token_quantity: float64 – O número total de tokens a serem transferidos.
Retorna:
  • Em caso de sucesso, uma mensagem que indica que a conversão do token foi bem-sucedida.
Exemplo de Valor de Retorno:
{
    "msg": "succesfully converted 5 of tokens with tokenId: [USD] from AccountId: 'oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb' (OrgId: Org1MSP, UserId: admin) to 75 of tokens with tokenId: [INR] to AccountId: 'oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e' ( OrgId: Org1MSP, UserId: user ) as per the conversion rate of 15"
}
GetConversionHistory
Este método retorna o histórico de conversão de token para uma conta de token especificada. Esse método pode ser chamado pelo Token Admin do chaincode, um Org Admin da organização especificada e pelo proprietário da conta de token.
func (t *Controller) GetConversionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
    if err != nil {
        return nil, fmt.Errorf("error in generating the accoint_id. Error: %s", err)
    }
    return t.Ctx.Account.GetTokenConversionHistory(account_id, org_id, user_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 objeto JSON com detalhes do histórico de conversão.
Exemplo de Valor de Retorno:
[
    {
        "balance": 95,
        "conversion_rate": 15,
        "converted_amount": 75,
        "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "from_token_id": "USD",
        "onhold_balance": 0,
        "timestamp": "2022-12-01T00:54:33+05:30",
        "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
        "to_token_id": "INR",
        "transacted_amount": 5,
        "transaction_id": "otransaction~e1f5c32ab3cdc17a51ff0edda6bcc71b5acec3320a69f68a4ae455ed416657fa",
        "transaction_type": "TOKEN_CONVERSION_DEBIT"
    }
]
GetConversionRateHistory
Este método retorna o histórico de taxa de conversão de token para um par de tokens. Esse método pode ser chamado pelo Token Admin do chaincode, por qualquer Org Admin e por qualquer proprietário de conta de token.
func (t *Controller) GetConversionRateHistory(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRateHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversion_rate_id, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversionRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.History(conversion_rate_id)
}
Parâmetros:
  • from_token_id: string – O ID do token a ser convertido, com a finalidade de calcular a taxa de conversão.
  • to_token_id: string – O ID do token para conversão, com a finalidade de calcular a taxa de conversão.
Retorna:
  • No caso de sucesso, um objeto JSON com detalhes do histórico de taxa de conversão.
Exemplo de Valor de Retorno:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:48:58+05:30",
    "TxId": "d6c5332278d33beddbc48e535029af424fef2129bf49f4906f9b527e101d95f1",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 15,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:47:15+05:30",
    "TxId": "e8796578351e948827d5dfe242ab4be59019ae67d69d3bfd6db255a268d57017",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 10,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  }
]
GetExchangePoolUser
Este método retorna os valores org_id e user_id para o usuário do pool de intercâmbio. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) GetExchangePoolUser() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.GetExchangePoolUser()
}
Parâmetros:
  • nenhuma
Retorna:
  • Com êxito, uma mensagem com informações sobre o usuário do pool de intercâmbio.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
InitializeExchangePoolUser
Este método inicializa o usuário do pool de intercâmbio, que é uma atividade única. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) InitializeExchangePoolUser(org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.InitializeExchangePoolUser(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:
  • Com êxito, uma mensagem que inclui detalhes do usuário do pool de intercâmbio.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
CreateExchangePoolAccounts
Este método cria contas de token de pool de câmbio para um determinado array de IDs de token. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) CreateExchangePoolAccounts(token_ids []string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.InitializeExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    var tokens []interface{}
    for _, tokenId := range token_ids {
        token, err := t.getTokenObject(tokenId)
        if err != nil {
            return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
        }
        tokens = append(tokens, token.Interface())
    }
    return t.Ctx.TokenConvertor.CreateExchangePoolAccounts(tokens)
}
Parâmetros:
  • token_ids: string [] – Um array de IDs de token. Você pode especificar até dez IDs de token.
Retorna:
  • Em caso de sucesso, uma lista de objetos que inclui detalhes das contas do pool de câmbio que foram criadas.
Exemplo de Valor de Retorno:
[
    {
        "AccountId": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
        "Status": "created",
        "TokenId": "USD"
    },
    {
        "AccountId": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
        "Status": "created",
        "TokenId": "INR"
    }
]
AddConversionRate
Este método adiciona uma taxa de conversão para um par de tokens. A taxa de conversão do token pode ser especificada com até oito casas decimais. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) AddConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.AddConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.AddConversionToken(from_token_id, to_token_id, token_conversion_rate)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • token_conversion_rate: float64 – A taxa na qual o token from_token_id será convertido para o token to_token_id.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
GetConversionRate
Este método obtém a taxa de conversão atual para um par de tokens. Esse método pode ser chamado pelo Token Admin ou Token Auditor, um Org Admin ou Org Auditor da organização especificada ou por qualquer proprietário de conta de token.
func (t *Controller) GetConversionRate(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversionRateId, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversationRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.Get(conversionRateId)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
UpdateConversionRate
Este método atualiza a taxa de conversão atual para um par de tokens. A taxa de conversão do token pode ser especificada com até oito casas decimais. Esse método só pode ser chamado por um Token Admin do chaincode.
func (t *Controller) UpdateConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.UpdateConversionRate", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.UpdateTokenConversionRate(from_token_id, to_token_id, token_conversion_rate)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • token_conversion_rate: float64 – A taxa na qual o token from_token_id será convertido para o token to_token_id.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão atualizado.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 15
}
MintWithFundingExchangePool
Este método cunha tokens na conta do chamador com base no ID e na quantidade do token especificados. Uma porcentagem de tokens da quantidade cunhada é então transferida para a conta de token do pool de câmbio.
func (t *Controller) MintWithFundingExchangePool(token_id string, token_quantity float64, percentage_token_to_exchangePool float64) (interface{}, error) {
    token, err := t.getTokenObject(token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    return t.Ctx.TokenConvertor.MintWithFundingExchangePool(token.Interface(), token_quantity, percentage_token_to_exchangePool)
}
Parâmetros:
  • token_id: string – O ID do token para mint.
  • token_quantity: float64 – O número total de tokens para hortelã.
  • percentage_token_to_exchange_pool: float64 – A porcentagem de tokens cunhados a serem transferidos para a conta de token do pool de câmbio.
Retorna:
  • Em caso de sucesso, uma mensagem que indica que a cunhagem e o financiamento do pool de troca foram bem-sucedidos.
Exemplo de Valor de Retorno:
{
    "msg": "successfully minted 100 tokens to AccountId: 'oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1' (OrgId: Org1MSP, User-Id: admin) and Successfully transfered 80 tokens to exchange pool account with AccountId: 'oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0' (OrgId: Org1MSP, UserId: exchangepooluser) "
}
TokenConversion
Esse método converte tokens da conta do chamador para a conta especificada pelos valores to_token_id, to_org_id e to_user_id. Esse método pode ser chamado pelo Token Admin do chaincode e por qualquer proprietário de conta de token. Um usuário do pool de intercâmbio não pode chamar este método.
func (t *Controller) TokenConversion(from_token_id string, to_token_id string, to_org_id string, to_user_id string, token_quantity float64) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.TokenConversion", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    from_token, err := t.getTokenObject(from_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting from_token asset details. Error: %s", err)
    }
    to_token, err := t.getTokenObject(to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting to_token asset details. error: %s", err)
    }
    return t.Ctx.TokenConvertor.TokenConversion(from_token.Interface(), to_token.Interface(), to_org_id, to_user_id, token_quantity)
}
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • to_org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual para receber os tokens.
  • to_user_id: string – O nome de usuário ou o ID de e-mail do usuário para receber os tokens.
  • token_quantity: float64 – O número total de tokens a serem transferidos.
Retorna:
  • Em caso de sucesso, uma mensagem que indica que a conversão do token foi bem-sucedida.
Exemplo de Valor de Retorno:
{
    "msg": "succesfully converted 5 of tokens with tokenId: [USD] from AccountId: 'oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb' (OrgId: Org1MSP, UserId: admin) to 75 of tokens with tokenId: [INR] to AccountId: 'oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e' ( OrgId: Org1MSP, UserId: user ) as per the conversion rate of 15"
}
GetConversionHistory
Este método retorna o histórico de conversão de token para uma conta de token especificada. Esse método pode ser chamado pelo Token Admin ou Token Auditor, um Org Admin ou Org Auditor da organização especificada e pelo proprietário da conta especificada.
func (t *Controller) GetConversionHistory(token_id string, org_id string, user_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    account_id, err := t.Ctx.Account.GenerateAccountId(token_id, org_id, user_id)
    if err != nil {
        return nil, fmt.Errorf("error in generating the accoint_id. Error: %s", err)
    }
    return t.Ctx.Account.GetTokenConversionHistory(account_id, org_id, user_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 objeto JSON com detalhes do histórico de conversão.
Exemplo de Valor de Retorno:
[
    {
        "balance": 95,
        "conversion_rate": 15,
        "converted_amount": 75,
        "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "from_token_id": "USD",
        "onhold_balance": 0,
        "timestamp": "2022-12-01T00:54:33+05:30",
        "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
        "to_token_id": "INR",
        "transacted_amount": 5,
        "transaction_id": "otransaction~e1f5c32ab3cdc17a51ff0edda6bcc71b5acec3320a69f68a4ae455ed416657fa",
        "transaction_type": "TOKEN_CONVERSION_DEBIT"
    }
]
GetConversionRateHistory
Este método retorna o histórico de taxa de conversão de token para um par de tokens. Esse método pode ser chamado pelo Token Admin, Token Auditor, Org Admin, Org Auditor ou por qualquer proprietário de conta de token.
func (t *Controller) GetConversionRateHistory(from_token_id string, to_token_id string) (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetConversionRateHistory", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    conversion_rate_id, err := t.Ctx.TokenConversionRate.GetConversionRateId(from_token_id, to_token_id)
    if err != nil {
        return nil, fmt.Errorf("error in getting conversionRateId. Error: %s", err)
    }
    return t.Ctx.TokenConversionRate.History(conversion_rate_id)
}
Parâmetros:
  • from_token_id: string – O ID do token a ser convertido, com a finalidade de calcular a taxa de conversão.
  • to_token_id: string – O ID do token para conversão, com a finalidade de calcular a taxa de conversão.
Retorna:
  • No caso de sucesso, um objeto JSON com detalhes do histórico de taxa de conversão.
Exemplo de Valor de Retorno:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:48:58+05:30",
    "TxId": "d6c5332278d33beddbc48e535029af424fef2129bf49f4906f9b527e101d95f1",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 15,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:47:15+05:30",
    "TxId": "e8796578351e948827d5dfe242ab4be59019ae67d69d3bfd6db255a268d57017",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 10,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  }
]
GetExchangePoolUser
Este método retorna os valores org_id e user_id para o usuário do pool de intercâmbio. Esse método só pode ser chamado por uma Token Admin ou Token Auditor do chaincode.
func (t *Controller) GetExchangePoolUser() (interface{}, error) {
    auth, err := t.Ctx.Auth.CheckAuthorization("TokenConversion.GetExchangePoolUser", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.TokenConvertor.GetExchangePoolUser()
}
Parâmetros:
  • nenhuma
Retorna:
  • Com êxito, uma mensagem com informações sobre o usuário do pool de intercâmbio.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}

Métodos SDK de Conversão de Token

InitializeExchangePoolUser
Este método inicializa o usuário do pool de intercâmbio, que é uma atividade única. Esse método só pode ser chamado por um Token Admin do chaincode.
Ctx.TokenConvertor.InitializeExchangePoolUser(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:
  • Com êxito, uma mensagem que inclui detalhes do usuário do pool de intercâmbio.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}
CreateExchangePoolAccounts
Este método cria contas de token de pool de câmbio para um determinado array de IDs de token. Esse método só pode ser chamado por um Token Admin do chaincode.
Ctx.TokenConvertor.CreateExchangePoolAccounts(tokens []interface{}) (interface{}, error)
Parâmetros:
  • token_ids: string [] – Um array de IDs de token.
Retorna:
  • Em caso de sucesso, uma lista de objetos que inclui detalhes das contas do pool de câmbio que foram criadas.
Exemplo de Valor de Retorno:
[
    {
        "AccountId": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
        "Status": "created",
        "TokenId": "USD"
    },
    {
        "AccountId": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
        "Status": "created",
        "TokenId": "INR"
    }
]
AddConversionToken
Este método adiciona tokens com uma nova taxa de conversão para um token especificado. A taxa de conversão do token pode ser especificada com até oito casas decimais. Esse método só pode ser chamado por um Token Admin do chaincode.
Ctx.TokenConvertor.AddConversionToken(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error)
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • token_conversion_rate: float64 – A taxa na qual o token from_token_id será convertido para o token to_token_id.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
Get
Este método obtém a taxa de conversão atual para um par de tokens. Esse método pode ser chamado pelo Token Admin do chaincode e por qualquer proprietário de conta de token.
Ctx.TokenConversionRate.Get(id string) (ConversionRate, error)
Parâmetros:
  • id: string – O ID do objeto de taxa de conversão de token.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 10
}
UpdateTokenConversionRate
Este método atualiza a taxa de conversão atual para um par de tokens. A taxa de conversão do token pode ser especificada com até oito casas decimais. Esse método só pode ser chamado por um Token Admin do chaincode.
Ctx.TokenConvertor.UpdateTokenConversionRate(from_token_id string, to_token_id string, token_conversion_rate float64) (interface{}, error)
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • token_conversion_rate: float64 – A taxa na qual o token from_token_id será convertido para o token to_token_id.
Retorna:
  • No caso de sucesso, uma representação JSON do objeto de taxa de conversão atualizado.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversionRate",
    "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
    "FromTokenId": "USD",
    "ToTokenId": "INR",
    "ConversionRate": 15
}
MintWithFundingExchangePool
Este método cunha tokens na conta do chamador com base no ID e na quantidade do token especificados. Uma porcentagem de tokens da quantidade cunhada é então transferida para a conta de token do pool de câmbio.
Ctx.TokenConvertor.MintWithFundingExchangePool(token interface{}, token_quantity float64, percentage_token_to_exchangePool float64) (interface{}, error)
Parâmetros:
  • token_id: string – O ID do token para mint.
  • token_quantity: float64 – O número total de tokens para hortelã.
  • percentage_token_to_exchange_pool: float64 – A porcentagem de tokens cunhados a serem transferidos para a conta de token do pool de câmbio.
Retorna:
  • Em caso de sucesso, uma mensagem que indica que a cunhagem e o financiamento do pool de troca foram bem-sucedidos.
Exemplo de Valor de Retorno:
{
    "msg": "successfully minted 100 tokens to AccountId: 'oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1' (OrgId: Org1MSP, User-Id: admin) and Successfully transfered 80 tokens to exchange pool account with AccountId: 'oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0' (OrgId: Org1MSP, UserId: exchangepooluser) "
}
TokenConversion
Esse método converte tokens da conta do chamador para a conta especificada pelos valores to_token_id, to_org_id e to_user_id. Esse método pode ser chamado pelo Token Admin do chaincode e por qualquer proprietário de conta de token. Um usuário do pool de intercâmbio não pode chamar este método.
Ctx.TokenConvertor.TokenConversion(from_token interface{}, to_token interface{}, to_org_id string, to_user_id string, token_quantity float64) (interface{}, error)
Parâmetros:
  • from_token_id: string – O ID do token do qual será feita a conversão.
  • to_token_id: string – O ID do token para o qual converter.
  • to_org_id: string – O ID do provedor de serviços de associação (MSP) do usuário na organização atual para receber os tokens.
  • to_user_id: string – O nome de usuário ou o ID de e-mail do usuário para receber os tokens.
Retorna:
  • Em caso de sucesso, uma mensagem que indica que a conversão do token foi bem-sucedida.
Exemplo de Valor de Retorno:
{
    "msg": "succesfully converted 5 of tokens with tokenId: [USD] from AccountId: 'oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb' (OrgId: Org1MSP, UserId: admin) to 75 of tokens with tokenId: [INR] to AccountId: 'oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e' ( OrgId: Org1MSP, UserId: user ) as per the conversion rate of 15"
}
GetTokenConversionHistory
Este método retorna o histórico de conversão de token para uma conta de token especificada. Esse método pode ser chamado pelo Token Admin do chaincode e pelo proprietário da conta de token.
Ctx.Account.GetTokenConversionHistory(account_id string, org_id string, user_id string) (interface{}, error)
Parâmetros:
  • account_id: string – O ID da conta de token fungível.
  • 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 objeto JSON com detalhes do histórico de conversão.
Exemplo de Valor de Retorno:
[
    {
        "balance": 95,
        "conversion_rate": 15,
        "converted_amount": 75,
        "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
        "from_token_id": "USD",
        "onhold_balance": 0,
        "timestamp": "2022-12-01T00:54:33+05:30",
        "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
        "to_token_id": "INR",
        "transacted_amount": 5,
        "transaction_id": "otransaction~e1f5c32ab3cdc17a51ff0edda6bcc71b5acec3320a69f68a4ae455ed416657fa",
        "transaction_type": "TOKEN_CONVERSION_DEBIT"
    }
]
history
Este método retorna o histórico de taxa de conversão de token para um par de tokens. Esse método pode ser chamado pelo Token Admin do chaincode, por qualquer Org Admin e por qualquer proprietário de conta de token.
Ctx.TokenConversionRate.History(conversion_rate_id string) (interface{}, error)
Parâmetros:
  • conversion_rate_id: string – O ID do objeto da taxa de conversão.
Retorna:
  • No caso de sucesso, um objeto JSON com detalhes do histórico de taxa de conversão.
Exemplo de Valor de Retorno:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:48:58+05:30",
    "TxId": "d6c5332278d33beddbc48e535029af424fef2129bf49f4906f9b527e101d95f1",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 15,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-01T00:47:15+05:30",
    "TxId": "e8796578351e948827d5dfe242ab4be59019ae67d69d3bfd6db255a268d57017",
    "Value": {
      "AssetType": "oconversionRate",
      "ConversionRate": 10,
      "ConvertorRateId": "oconversionRate~79eacc670928bbc4c9ba4ebee135c8b4d6411af3110f8a9b782c383d5e18b150",
      "FromTokenId": "USD",
      "ToTokenId": "INR"
    }
  }
]
GetExchangePoolUser
Este método retorna os valores org_id e user_id para o usuário do pool de intercâmbio. Esse método só pode ser chamado por um Token Admin do chaincode.
Ctx.TokenConvertor.GetExchangePoolUser()
Parâmetros:
  • nenhuma
Retorna:
  • Com êxito, uma mensagem com informações sobre o usuário do pool de intercâmbio.
Exemplo de Valor de Retorno:
{
    "AssetType": "oconversion",
    "ConvertorId": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "OrgId": "Org1MSP",
    "UserId": "exchangepooluser"
}