토큰 계정 상태에 대한 실행 방법

Blockchain App Builder는 토큰 분류법 프레임워크 표준을 사용하는 대체 가능한 토큰의 계정 상태를 관리하는 데 사용할 수 있는 방법을 자동으로 생성합니다.

다음 방법을 사용하여 토큰 사용자 계정을 활성, 일시 중지됨 또는 삭제됨 상태로 설정할 수 있습니다.

계정이 일시 중지되면 계정 사용자는 민팅, 레코딩, 전송 및 보유 토큰을 포함하는 쓰기 작업을 완료할 수 없습니다. 또한 다른 사용자는 일시 중지된 계정에 토큰을 전송하거나 보류할 수 없습니다. 일시 중지된 계정은 여전히 읽기 작업을 완료할 수 있습니다.

토큰 잔액이 0이 아닌 계정은 삭제할 수 없습니다. 계정을 삭제하려면 먼저 계정의 모든 토큰을 전송하거나 레코딩해야 합니다. 계정이 삭제된 상태이면 계정 상태를 다시 활성 또는 일시 중지됨으로 변경할 수 없습니다.

자동으로 생성된 계정 상태 방법

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에 의해서만 호출될 수 있습니다. 계정이 삭제된 후에는 계정 업데이트 작업을 완료할 수 없습니다. 삭제된 계정은 최종 상태이므로 다른 상태로 변경할 수 없습니다. 계정을 삭제하려면 계정 잔액과 보류 중인 잔액이 0이어야 합니다.
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 - 지정된 계정에 대해 설정할 상태입니다. active, suspended 또는 deleted의 세 값만 지원됩니다.
반환값:
  • 성공 시 계정 상태 객체의 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"
}