權杖帳戶狀態的執行方法

Blockchain App Builder 會自動產生方法,您可以用來管理使用權杖分類標準架構之有趣權杖的帳戶狀態。

您可以使用下列方法將記號使用者帳戶置於作用中、已暫停或已刪除狀態。

帳戶暫停時,帳戶使用者無法完成任何寫入作業,包括採礦、燒錄、轉移和保留記號。此外,其他使用者無法將記號轉移至暫停帳戶或保留記號。暫停的帳戶仍可完成讀取作業。

無法刪除記號餘額為非零的帳戶。您必須先轉移或燒錄帳戶中的所有記號,才能刪除帳戶。帳戶處於已刪除狀態後,便無法將帳戶狀態變更回作用中或已暫停。

自動產生的科目狀態方法

Blockchain App Builder 會自動產生管理權杖帳戶狀態的方法。控制器方法必須是公用才能呼叫。公用方法名稱開頭為大寫字元。開頭為小寫字元的方法名稱是私密的。

GetAccountStatus
此方法會取得權杖帳戶的目前狀態。此方法可由鏈碼的 Token Admin、指定組織的 Org Admin 或權杖帳戶擁有者呼叫。此方法也支援將現有鏈碼升級至較新版本的資料移轉。
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
}
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的成員身分服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含記號帳戶狀態明細的訊息。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
GetAccountStatusHistory
此方法會取得帳戶狀態的歷史記錄。此方法可由鏈碼的 Token Admin、指定組織的 Org Admin 或權杖帳戶擁有者呼叫。
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
}
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的成員身分服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含帳戶狀態歷史記錄明細的訊息。
傳回值範例:
[
  {
    "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
此方法會啟用記號帳戶。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。無法啟用已刪除的帳戶。
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)
}
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的成員身分服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,指定記號帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
SuspendAccount
此方法會暫停權杖帳戶。暫停的帳戶仍可完成讀取作業。具有暫停帳戶的使用者無法傳送、接收、提示或燒錄記號。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。帳戶暫停後,您就無法完成任何更新帳戶的作業。無法暫停已刪除的帳戶。
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)
}
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的成員身分服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,指定記號帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "suspended"
}
DeleteAccount
此方法會刪除記號帳戶。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。刪除帳戶之後,您就無法完成更新帳戶的所有作業。刪除的帳戶處於最終狀態,無法變更為任何其他狀態。若要刪除帳戶,帳戶餘額與保留餘額必須為零。
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)
}
參數:
  • token_id: string – 記號的 ID。
  • org_id: string – 目前組織中使用者的成員身分服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,指定記號帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "deleted"
}

帳戶狀態 SDK 方法

GetDefaultAccountStatus
此方法會取得記號帳戶的目前狀態,且對於任何帳戶狀態未儲存在分類帳中的帳戶,其狀態為 active (因為帳戶是在帳戶狀態功能之前建立)。
Ctx.AccountStatus.GetDefaultAccountStatus(account_id string) (FungibleAccountStatus, error)
參數:
  • account_id: string – 權杖帳戶的 ID。
傳回值:
  • 成功時,帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
GetAccountStatus
此方法會取得權杖帳戶的目前狀態。
Ctx.AccountStatus.GetAccountStatus(account_id string) (FungibleAccountStatus, error)
參數:
  • account_id: string – 權杖帳戶的 ID。
傳回值:
  • 成功時,帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
SaveAccountStatus
此方法會儲存記號帳戶的狀態物件 (如果沒有狀態物件),並將狀態設為指定的值。
Ctx.AccountStatus.SaveAccountStatus(account_id string, status string)
參數:
  • account_id: string – 權杖帳戶的 ID。
  • status: string – 為指定帳戶設定的狀態。僅支援三個值:activesuspendeddeleted
傳回值:
  • 成功時,帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
GetAccountStatusHistory
此方法會取得帳戶狀態的歷史記錄。
Ctx.AccountStatus.History(status_id string) (interface{}, error)
參數:
  • status_id: string – 帳戶狀態物件的 ID。
傳回值:
  • 成功時,代表帳戶狀態歷史記錄的 JSON。
傳回值範例:
[
  {
    "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
此方法會啟用記號帳戶。
Ctx.Account.ActivateAccount(account_id: string) (interface{}, error)
參數:
  • account_id: string – 權杖帳戶的 ID。
傳回值:
  • 成功時,指定記號帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "active"
}
SuspendAccount
此方法會暫停權杖帳戶。
Ctx.Account.SuspendAccount(account_id string) (interface{}, error)
參數:
  • account_id: string – 權杖帳戶的 ID。
傳回值:
  • 成功時,指定記號帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "suspended"
}
DeleteAccount
此方法會刪除記號帳戶。
Ctx.Account.DeleteAccount(account_id string) (interface{}, error)
參數:
  • account_id: string – 權杖帳戶的 ID。
傳回值:
  • 成功時,指定記號帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "AssetType": "oaccountStatus",
    "StatusId": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "AccountId": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "Status": "deleted"
}