Métodos Go para Status da Conta de Token

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

Você pode usar os métodos a seguir para colocar as contas de usuário de token nos estados ativo, suspenso ou excluído.

Quando uma conta é suspensa, o usuário da conta não pode concluir nenhuma operação de gravação, que inclui cunhagem, gravação, transferência e retenção de tokens. Além disso, outros usuários não podem transferir tokens para ou reter tokens em uma conta suspensa. Uma conta suspensa ainda pode concluir operações de leitura.

Uma conta com um saldo de token diferente de zero não pode ser excluída. Você deve transferir ou gravar todos os tokens em uma conta para poder excluir a conta. Depois que uma conta estiver no estado excluído, não será possível alterá-lo de volta para ativo ou suspenso.

Métodos de Status da Conta Gerados Automaticamente

O Blockchain App Builder gera automaticamente métodos para gerenciar o status da conta de token. Os métodos da Controladora devem ser públicos para serem chamados. Os nomes de métodos públicos começam com um caractere maiúsculo. Os nomes dos métodos que começam com um caractere minúsculo são privados.

GetAccountStatus
Este método obtém o status atual da conta de token. Esse método pode ser chamado pelo Token Admin do chaincode, um Org Admin da organização especificada ou pelo proprietário da conta de token. Esse método também suporta migração de dados para chaincode existente que foi atualizado para uma versão mais recente.
func (t *Controller) GetAccountStatus(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, fmt.Errorf("error in getting the generating account_id of (Org-Id: %s, User-Id: %s)", org_id, user_id)
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("AccountStatus.Get", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      accountStatus, err := t.Ctx.AccountStatus.GetAccountStatus(account_id)
      if err != nil {
            return t.Ctx.AccountStatus.GetDefaultAccountStatus(account_id)
      }
      return accountStatus, 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 o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do status da conta de token.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
GetAccountStatusHistory
Este método obtém o histórico do status da conta. Esse método pode ser chamado pelo Token Admin do chaincode, um Org Admin da organização especificada ou pelo proprietário da conta de token.
func (t *Controller) GetAccountStatusHistory(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, fmt.Errorf("error in getting the generating account_id of (Org-Id: %s, User-Id: %s)", org_id, user_id)
      }
      _, err = t.Ctx.Account.GetAccount(account_id)
      if err != nil {
            return nil, fmt.Errorf("error in GetAccountStatusHistory: %s", err)
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("AccountStatus.Get", "TOKEN", map[string]string{"account_id": account_id})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      status_id, err := t.Ctx.AccountStatus.GenerateAccountStatusId(account_id)
      if err != nil {
            return nil, err
      }
      account_status_history, err := t.Ctx.AccountStatus.History(status_id)
      if err != nil {
            return []map[string]interface{}{}, nil
      }
      return account_status_history, 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 o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma mensagem que inclui detalhes do histórico de status da conta.
Exemplo de Valor de Retorno:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-02T16:20:34+05:30",
    "TxId": "af1601c7a14b4becf4bb3b285d85553b39bf234caaf1cd488a284a31a2d9df78",
    "Value": {
      "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "AssetType": "oaccountStatus",
      "Status": "suspended",
      "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-02T16:19:15+05:30",
    "TxId": "4b307b989063e43add5357ab110e19174d586b9746cc8a30c9aa3a2b0b48a34e",
    "Value": {
      "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "AssetType": "oaccountStatus",
      "Status": "active",
      "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7"
    }
  }
]
ActivateAccount
Este método ativa uma conta de token. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada. Contas excluídas não podem ser ativadas.
func (t *Controller) ActivateAccount(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, fmt.Errorf("error in getting the generating account_id of (Org-Id: %s, User-Id: %s)", org_id, user_id)
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("AccountStatus.ActivateAccount", "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.ActivateAccount(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 o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta para a conta de token especificada.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
SuspendAccount
Este método suspende uma conta de token. As contas suspensas ainda podem concluir operações de leitura. Usuários com contas suspensas não podem enviar, receber, cunhar ou gravar tokens. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada. Depois que uma conta é suspensa, você não pode concluir nenhuma operação que atualize a conta. Uma conta excluída não pode ser suspensa.
func (t *Controller) SuspendAccount(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, fmt.Errorf("error in getting the generating account_id of (Org-Id: %s, User-Id: %s)", org_id, user_id)
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("AccountStatus.SuspendAccount", "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.SuspendAccount(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 o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta para a conta de token especificada.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "suspended"
}
DeleteAccount
Este método exclui uma conta de token. Esse método só pode ser chamado por um Token Admin do chaincode ou por um Org Admin da organização especificada. Depois que uma conta é excluída, não é possível concluir nenhuma operação que atualize a conta. A conta excluída está em um estado final e não pode ser alterada para nenhum outro estado. Para excluir uma conta, o saldo da conta e o saldo retido devem ser zero.
func (t *Controller) DeleteAccount(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, fmt.Errorf("error in getting the generating account_id of (Org-Id: %s, User-Id: %s)", org_id, user_id)
      }
      auth, err := t.Ctx.Auth.CheckAuthorization("AccountStatus.DeleteAccount", "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.DeleteAccount(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 o ID de e-mail do usuário.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta para a conta de token especificada.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "deleted"
}

Métodos SDK do Status da Conta

GetDefaultAccountStatus
Esse método obtém o status atual de uma conta de token, com o status active para qualquer conta que não tenha o status da conta armazenado no razão (porque a conta foi criada antes da funcionalidade de status da conta).
Ctx.AccountStatus.GetDefaultAccountStatus(account_id string) (FungibleAccountStatus, error)
Parâmetros:
  • account_id: string - O ID da conta de token.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
GetAccountStatus
Este método obtém o status atual da conta de token.
Ctx.AccountStatus.GetAccountStatus(account_id string) (FungibleAccountStatus, error)
Parâmetros:
  • account_id: string - O ID da conta de token.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
SaveAccountStatus
Este método salva o objeto de status (se um objeto de status não estiver presente) para a conta de token e define o status para o valor especificado.
Ctx.AccountStatus.SaveAccountStatus(account_id string, status string)
Parâmetros:
  • account_id: string - O ID da conta de token.
  • status: string - O status a ser definido para a conta especificada. Somente três valores são suportados: active, suspended ou deleted.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
GetAccountStatusHistory
Este método obtém o histórico do status da conta.
Ctx.AccountStatus.History(status_id string) (interface{}, error)
Parâmetros:
  • status_id: string - O ID do objeto de status da conta.
Retorna:
  • Em caso de sucesso, uma representação JSON do histórico de status da conta.
Exemplo de Valor de Retorno:
[
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-02T16:20:34+05:30",
    "TxId": "af1601c7a14b4becf4bb3b285d85553b39bf234caaf1cd488a284a31a2d9df78",
    "Value": {
      "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "AssetType": "oaccountStatus",
      "Status": "suspended",
      "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7"
    }
  },
  {
    "IsDelete": "false",
    "Timestamp": "2022-12-02T16:19:15+05:30",
    "TxId": "4b307b989063e43add5357ab110e19174d586b9746cc8a30c9aa3a2b0b48a34e",
    "Value": {
      "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "AssetType": "oaccountStatus",
      "Status": "active",
      "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7"
    }
  }
]
ActivateAccount
Este método ativa uma conta de token.
Ctx.Account.ActivateAccount(account_id: string) (interface{}, error)
Parâmetros:
  • account_id: string - O ID da conta de token.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta para a conta de token especificada.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
SuspendAccount
Este método suspende uma conta de token.
Ctx.Account.SuspendAccount(account_id string) (interface{}, error)
Parâmetros:
  • account_id: string - O ID da conta de token.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta para a conta de token especificada.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "suspended"
}
DeleteAccount
Este método exclui uma conta de token.
Ctx.Account.DeleteAccount(account_id string) (interface{}, error)
Parâmetros:
  • account_id: string - O ID da conta de token.
Retorna:
  • Em caso de sucesso, uma representação JSON do objeto de status da conta para a conta de token especificada.
Exemplo de Valor de Retorno:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "deleted"
}