토큰 분류법 프레임워크의 향상된 기능

향상된 버전의 Blockchain App Builder에는 확장된 토큰 분류법 프레임워크 표준과 관련된 새로운 기능이 포함되어 있습니다.

일일 트랜잭션 한도

계정에서 매일 완료할 수 있는 트랜잭션 수와 작업할 수 있는 토큰 수를 제한할 수 있습니다. createAccount 메소드에 대한 max_daily_amountmax_daily_transactions 입력 매개변수는 이 동작을 제어합니다. 이러한 매개변수는 선택사항입니다.

계정에 대한 일별 트랜잭션 제한을 설정하지 않으면 처리량이 더 높아질 수 있습니다.

createAccount (TypeScript)
@Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())

public async createAccount(org_id: string, user_id: string, token_type: string, daily_limits: DailyLimits) {
await this.Ctx.Auth.checkAuthorization("ACCOUNT.createAccount", "TOKEN", { org_id });
return await this.Ctx.Account.createAccount(org_id, user_id, token_type, daily_limits);
}
추가 매개변수:
  • daily_limits: JSON – 다음 예와 같이 매일 트랜잭션에 사용할 수 있는 최대 토큰 수(max_daily_amount) 및 매일 완료할 수 있는 최대 트랜잭션 수(max_daily_transactions)를 지정하는 객체입니다.
    {
         "max_daily_amount": 100000
         "max_daily_transactions": 10000
     }
CreateAccount (Go)
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...)
}
추가 매개변수:
  • daily_limits: JSON – 다음 예와 같이 MaxDailyAmount 매개변수(매일 트랜잭션에 사용할 수 있는 최대 토큰 수) 및 MaxDailyTransactions 매개변수(매일 완료할 수 있는 최대 트랜잭션 수)를 포함하는 JSON 객체입니다.
    {
         "MaxDailyAmount": 100000
         "MaxDailyTransactions": 10000
     }
반환값:
  • 성공 시 생성된 계정의 JSON 객체입니다. BapAccountVersion 매개변수는 내부용으로 계정 객체에 정의됩니다.
반환 값 예:
{ 
   "AssetType":"oaccount",
   "AccountId":"oaccount~a73085a385bc96c4a45aa2dff032e7dede82c0664dee5f396b7c5854eeafd4bd",
   "BapAccountVersion": 0,
   "UserId":"user1",
   "OrgId":"Org1MSP",
   "AccountType":"fungible",
   "TokenId":"",
   "TokenName":"",
   "Balance":0,
   "BalanceOnHold":0
}

조폐 및 연소에 대한 승인 요구 사항

조폐 및 연소 토큰에 대한 승인을 설정할 수 있으므로 채광자 또는 버너 역할을 가진 사용자가 토큰을 직접 연소하거나 연소하는 대신 승인자에게 요청을 제출해야 합니다. 승인자는 민트 또는 레코딩 토큰에 대한 요청을 수락하거나 거부할 수 있습니다. 민트 및 레코딩에 대한 승인을 사용으로 설정하려면 mint_approval_requiredburn_approval_required 매개변수를 사용합니다. 다음 예와 같이 mint_approver_role_nameburn_approval_role_name에 대한 값도 지정해야 합니다.

behavior: # Token behaviors
          - divisible: 
                decimal: 2  
          - mintable: 
                max_mint_quantity: 1000 
                mint_approval_required: true
          - transferable
          - burnable 
                burn_approval_required: true
          - holdable 
          - roles: 
                minter_role_name: minter
                notary_role_name: notary
                mint_approver_role_name: minter_notary
                burn_approver_role_name: burner_notary
다음 방법은 민트 및 레코딩 토큰에 대한 승인 요청, 수락 및 거부를 지원합니다.

TypeScript 조폐 및 연소 승인 방법

requestMint
이 메서드는 지정된 양의 토큰을 만들기 위해 minter 공증인에게 요청을 보내기 위해 minter에 의해 호출될 수 있습니다.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date(), yup.object().nullable())
public async requestMint( token_id: string, operation_id: string, notary_org_id: string, notary_user_id: string, quantity: number, time_to_expiration: Date, info_details?: InfoDetails) {

const token_asset = await this.getTokenObject(token_id);
const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
return await this.Ctx.Token.hold(operation_id, null, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.MINT, info_details);

}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • operation_id: string – 민트 요청을 나타내는 고유한 작업 ID입니다.
  • notary_org_id: string – 요청을 처리할 MSP(멤버쉽 서비스 공급자) ID입니다.
  • notary_user_id: string – 요청을 처리할 광부 공증인의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 민트할 토큰의 양입니다.
  • time_to_expiration – 민팅 요청이 만료되고 더 이상 유효하지 않은 시간입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) has successfully submitted request to mint 100 tokens",
}
approveMint
이 메서드는 민팅 요청을 승인하기 위해 minter 공증에 의해 호출될 수 있습니다.
@Validator(yup.string(), yup.string())
public async approveMint(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.executeHold(operation_id, token_asset);
}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • operation_id: string – 민트 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
rejectMint
이 메서드는 민팅 요청을 거부하기 위해 minter 공증에 의해 호출될 수 있습니다.
@Validator(yup.string(), yup.string())
public async rejectMint(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.releaseHold(operation_id, token_asset);
}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • operation_id: string – 민트 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예:
{
 msg: "Successfully rejected mint request with Operation Id 'operation1' to mint 100 tokens of token id token"
}
requestBurn
이 방법은 버너가 지정된 양의 토큰을 파괴하기 위해 버너 공증인에게 요청을 보내기 위해 호출 할 수 있습니다.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date(), yup.object().nullable())

public async requestBurn( token_id: string, operation_id: string, notary_org_id: string, notary_user_id: string, quantity: number, time_to_expiration: Date, info_details?: InfoDetails ) {

const token_asset = await this.getTokenObject(token_id);
const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
return await this.Ctx.Token.hold(operation_id, null, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.BURN, null, description);
}
매개변수:
  • token_id: string – 구울 토큰의 ID입니다.
  • operation_id: string – 레코딩 요청을 나타내는 고유한 작업 ID입니다.
  • notary_org_id: string – 요청을 처리할 버너 공증인의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • notary_user_id: string – 요청을 처리할 버너 공증인의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 레코딩할 토큰의 양입니다.
  • time_to_expiration – 레코딩 요청이 만료되고 더 이상 유효하지 않은 시간입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예제:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) has successfully submitted request to mint 100 tokens",
}
approveBurn
이 방법은 버너 공증인이 불타는 요청을 승인하기 위해 호출 할 수 있습니다.
@Validator(yup.string(), yup.string())
public async approveBurn(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.executeHold(operation_id, token_asset);
}
매개변수:
  • token_id: string – 구울 토큰의 ID입니다.
  • operation_id: string – 레코딩 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예제:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
rejectBurn
이 방법은 불타는 요청을 거부하기 위해 버너 공증인이 호출 할 수 있습니다.
@Validator(yup.string(), yup.string())
public async rejectBurn(token_id: string, operation_id: string) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.releaseHold(operation_id, token_asset);
}
매개변수:
  • token_id: string – 구울 토큰의 ID입니다.
  • operation_id: string – 레코딩 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예제:
{
 msg: "Successfully rejected burn request with Operation Id 'operation1' to burn 100 tokens of token id token",
}

연마 및 연소 승인에 대한 이동 방법

RequestMint
이 메서드는 지정된 양의 토큰을 만들기 위해 minter 공증인에게 요청을 보내기 위해 minter에 의해 호출될 수 있습니다.
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...)
}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • operation_id: string – 민트 요청을 나타내는 고유한 작업 ID입니다.
  • notary_org_id: string – 요청을 처리할 MSP(멤버쉽 서비스 공급자) ID입니다.
  • notary_user_id: string – 요청을 처리할 광부 공증인의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 민트할 토큰의 양입니다.
  • TimeToExpiration – 민팅 요청이 만료되고 더 이상 유효하지 않은 시간입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "Category" : "category input",
         "Description" : "description input"
    }
반환 값 예제:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveMint
이 메서드는 민팅 요청을 승인하기 위해 minter 공증에 의해 호출될 수 있습니다.
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())
}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • operation_id: string – 민트 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예제:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectMint
이 메서드는 민팅 요청을 거부하기 위해 minter 공증에 의해 호출될 수 있습니다.
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())
}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • operation_id: string – 민트 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예제:
{
 msg: "Successfully rejected mint request with Operation Id 'operation1' to mint 100 tokens of token id token"
}
RequestBurn
이 방법은 버너가 지정된 양의 토큰을 파괴하기 위해 버너 공증인에게 요청을 보내기 위해 호출 할 수 있습니다.
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...)
}
매개변수:
  • token_id: string – 구울 토큰의 ID입니다.
  • operation_id: string – 레코딩 요청을 나타내는 고유한 작업 ID입니다.
  • notary_org_id: string – 요청을 처리할 버너 공증인의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • notary_user_id: string – 요청을 처리할 버너 공증인의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 레코딩할 토큰의 양입니다.
  • time_to_expiration – 레코딩 요청이 만료되고 더 이상 유효하지 않은 시간입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예제:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin) has successfully submitted request to mint 100 tokens",
}
ApproveBurn
이 방법은 버너 공증인이 불타는 요청을 승인하기 위해 호출 할 수 있습니다.
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())
}
매개변수:
  • token_id: string – 구울 토큰의 ID입니다.
  • operation_id: string – 레코딩 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예제:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (org_id: Org1MSP, user_id: admin)"
}
RejectBurn
이 방법은 불타는 요청을 거부하기 위해 버너 공증인이 호출 할 수 있습니다.
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())
}
매개변수:
  • token_id: string – 구울 토큰의 ID입니다.
  • operation_id: string – 레코딩 요청을 나타내는 고유한 작업 ID입니다.
반환 값 예제:
{
 msg: "Successfully rejected burn request with Operation Id 'operation1' to burn 100 tokens of token id token",
}

서식 있는 내역 데이터베이스에서 트랜잭션 내역 인출

데이터를 리치 내역 데이터베이스와 동기화한 다음 체인코드 API 호출을 사용하여 데이터를 인출할 수 있습니다. TypeScript 및 [실행]에 표시된 다음 메소드는 리치 내역 데이터베이스에서 트랜잭션 내역을 인출합니다. 이러한 방법을 사용하려면 Oracle Database View Definitions for Wholesale CBDC에 설명된 대로 ORDS(Oracle REST Data Services) 및 OAuth가 활성화된 상태로 Oracle Autonomous Database를 실행해야 합니다.
getAccountTransactionHistoryWithFiltersFromRichHistDB (TypeScript)
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.object().nullable())
public async getAccountTransactionHistoryWithFiltersFromRichHistDB(token_id: string, org_id: string, user_id: string, custom_endpoint: string, bearer_token: string, filters?: Filters) {
const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFilters", "TOKEN", { account_id });
return await this.Ctx.Account.getAccountTrxHistoryWithFiltersFromRichHistDB(account_id, org_id, user_id.toLowerCase(), custom_endpoint, bearer_token, filters);
}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • org_id: string – 현재 조직에 있는 사용자의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • user_id: string – 사용자의 사용자 이름 또는 전자 메일 ID입니다.
  • custom_endpoint – 리치 내역 데이터베이스의 RESTful 서비스 끝점입니다.
  • bearer_token – RESTful 서비스 끝점에 대한 액세스 권한 부여 토큰입니다.
  • filters: string – 선택적 매개변수입니다. 비어 있으면 모든 레코드가 반환됩니다. PageSize 속성은 반환할 레코드 수를 결정합니다. PageSize가 0이면 기본 페이지 크기는 20입니다. Bookmark 속성은 반환할 레코드의 시작 인덱스를 결정합니다. 자세한 내용은 Hyperledger Fabric 설명서를 참조하십시오. StartTimeEndTime 속성은 RFC-3339 형식으로 지정해야 합니다.
GetAccountTransactionHistoryWithFiltersFromRichHistDB (Go)
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
}
매개변수:
  • token_id: string – 민트할 토큰의 ID입니다.
  • org_id: string – 현재 조직에 있는 사용자의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • user_id: string – 사용자의 사용자 이름 또는 전자 메일 ID입니다.
  • custom_endpoint – 리치 내역 데이터베이스의 RESTful 서비스 끝점입니다.
  • bearer_token – RESTful 서비스 끝점에 대한 액세스 권한 부여 토큰입니다.
  • filters: string – 선택적 매개변수입니다. 비어 있으면 모든 레코드가 반환됩니다. PageSize 속성은 반환할 레코드 수를 결정합니다. PageSize가 0이면 기본 페이지 크기는 20입니다. Bookmark 속성은 반환할 레코드의 시작 인덱스를 결정합니다. 자세한 내용은 Hyperledger Fabric 설명서를 참조하십시오. StartTimeEndTime 속성은 RFC-3339 형식으로 지정해야 합니다.

트랜잭션 객체의 범주 및 설명 속성

  • 범주 및 설명 속성은 컨트롤러 파일의 transferTokens, holdTokens, issueTokens, requestMint, requestBurn, burnTokensrejectBurn 메소드에 포함되어야 합니다. 해당 SDK 메소드에는 범주 및 설명 속성도 포함되어야 합니다.
  • 범주 및 설명 속성 입력은 다음 예제에 표시된 것처럼 info_details라는 JSON 객체 형식입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
  • info_details 필드는 선택적 필드입니다. 필요에 따라 범주만 전달하거나 설명만 전달할 수 있습니다.
  • transferTokens, holdTokens, executeHold, releaseHold, requestMint, approveMint, rejectMint, requestBurn, approveBurnrejectBurn에 대한 모든 트랜잭션과 관련된 GET 메소드는 페이로드 응답에 범주 및 설명 속성을 포함해야 합니다(있는 경우).
  • 범주 필드는 20자로 제한되며 설명 필드는 250자로 제한됩니다.

TypeScript 입력이 수정된 메소드

다음 방법은 향상된 버전의 Blockchain App Builder를 사용할 때 선택적 범주 및 설명 속성을 지원합니다.

transferTokens
이 메소드는 호출자의 토큰을 지정된 계정으로 이전합니다.
@Validator(yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.object().nullable())
public async transferTokens(token_id: string, to_org_id: string, to_user_id: string, quantity: number, info_details?: InfoDetails) {
const token_asset = await this.getTokenObject(token_id);
const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
return await this.Ctx.Token.transfer(to_account_id, quantity, token_asset, info_details);
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • to_org_id: string – 현재 조직에서 수령인(수취인)의 멤버쉽 서비스 제공자(MSP) ID입니다.
  • to_user_id: string – 수신자의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 전송할 토큰 수입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예제:
{
 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)",
}
holdTokens
이 방법은 to_account_id 계정을 사용하여 토큰 소유자를 대신하여 보류를 생성합니다.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.string(), yup.number().positive(), yup.date(), yup.object().nullable())
  public async holdTokens( token_id: string, operation_id: string, to_org_id: string, to_user_id: string, notary_org_id: string, notary_user_id: string, quantity: number, time_to_expiration: Date, info_details?: InfoDetails) {
    const token_asset = await this.getTokenObject(token_id);
    const to_account_id = await this.Ctx.Account.generateAccountId(token_id, to_org_id, to_user_id);
    const notary_account_id = await this.Ctx.Account.generateAccountId(token_id, notary_org_id, notary_user_id);
    return await this.Ctx.Token.hold(operation_id, to_account_id, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.TRANSFER, info_details);
  }
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • operation_id: string – 보류 작업을 식별하는 고유 ID입니다. 일반적으로 이 ID는 클라이언트 응용 프로그램에 의해 전달됩니다.
  • to_org_id: string – 현재 조직에 있는 수신자의 멤버쉽 서비스 제공자(MSP) ID입니다.
  • to_user_id: string – 수신자의 사용자 이름 또는 전자 메일 ID입니다.
  • notary_org_id: string – 현재 조직에 있는 공증인의 멤버쉽 서비스 제공자(MSP) ID입니다.
  • notary_user_id: string – 공증인의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 보류할 토큰 수입니다.
  • time_to_expiration – 보류가 만료되는 시간입니다. 영구 보류에 대해 0을 지정합니다. 그렇지 않은 경우 RFC-3339 형식을 사용합니다. 2021-06-02T12:46:06Z을 입력합니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) is successfully holding 100 tokens",
}
issueTokens
이 메소드는 토큰을 최소화한 다음 메소드의 호출자가 소유합니다.
@Validator(yup.string(), yup.number().positive(), yup.object().nullable())
public async issueTokens(token_id: string, quantity: number, info_details?: InfoDetails) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.mint(quantity, token_asset, info_details);
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • quantity – 민트할 토큰 수입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
burnTokens
이 메소드는 트랜잭션 호출자 계정에서 토큰을 비활성화하거나 레코딩합니다.
@Validator(yup.string(), yup.number().positive(), yup.object().nullable())

public async burnTokens(token_id: string, quantity: number, info_details?: InfoDetails) {
const token_asset = await this.getTokenObject(token_id);
return await this.Ctx.Token.burn(quantity, token_asset, info_details);
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • quantity – 레코딩할 토큰 수입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}

수정된 입력이 있는 이동 메소드

다음 방법은 향상된 버전의 Blockchain App Builder를 사용할 때 선택적 범주 및 설명 속성을 지원합니다.

TransferTokens
이 메소드는 호출자의 토큰을 지정된 계정으로 이전합니다.
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...)
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • to_org_id: string – 현재 조직에서 수령인(수취인)의 멤버쉽 서비스 제공자(MSP) ID입니다.
  • to_user_id: string – 수신자의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 전송할 토큰 수입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예:
{
 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)",
}
HoldTokens
이 방법은 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...)
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • operation_id: string – 보류 작업을 식별하는 고유 ID입니다. 일반적으로 이 ID는 클라이언트 응용 프로그램에 의해 전달됩니다.
  • to_org_id: string – 현재 조직에 있는 수신자의 멤버쉽 서비스 제공자(MSP) ID입니다.
  • to_user_id: string – 수신자의 사용자 이름 또는 전자 메일 ID입니다.
  • notary_org_id: string – 현재 조직에 있는 공증인의 멤버쉽 서비스 제공자(MSP) ID입니다.
  • notary_user_id: string – 공증인의 사용자 이름 또는 전자 메일 ID입니다.
  • quantity: number – 보류할 토큰 수입니다.
  • time_to_expiration – 보류가 만료되는 시간입니다. 영구 보류에 대해 0을 지정합니다. 그렇지 않은 경우 RFC-3339 형식을 사용합니다. 2021-06-02T12:46:06Z을 입력합니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예:
{
msg:
"AccountId oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin) is successfully holding 100 tokens",
}
IssueTokens
이 메소드는 토큰을 최소화한 다음 메소드의 호출자가 소유합니다.
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...)
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • quantity – 민트할 토큰 수입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예:
{
msg:
"Successfully minted 100 tokens to Account Id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}
BurnTokens
이 메소드는 트랜잭션 호출자 계정에서 토큰을 비활성화하거나 레코딩합니다.
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...)
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • quantity – 레코딩할 토큰 수입니다.
  • info_details: JSON – 다음 예와 같이 요청의 범주(category) 및 설명(description)을 지정하는 객체입니다.
    {
         "category" : "category input",
         "description" : "description input"
    }
반환 값 예제:
{
msg:
"Successfully burned 100 tokens from account id: oaccount~95be539b4e1e4136dd86a806020c97a930909325340481b8fd88d339874fa699 (Org-Id: Org1MSP, User-Id: admin)"
}

수정된 출력이 있는 TypeScript 메소드

다음 방법은 향상된 버전의 Blockchain App Builder를 사용할 때 관련 조직 및 사용자 ID를 반환합니다.

getAccountTransactionHistory
이 메소드는 지정된 사용자 및 토큰에 대한 계정 트랜잭션 기록 세부정보 배열을 반환합니다.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string())
public async getAccountTransactionHistory(token_id: string, org_id: string, user_id: string) {
const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistory", "TOKEN", { account_id });
return await this.Ctx.Account.getAccountTransactionHistory(account_id, org_id, user_id.toLowerCase());
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • org_id: string – 현재 조직에 있는 사용자의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • user_id: string – 사용자의 사용자 이름 또는 전자 메일 ID입니다.
반환 값 예:
[
            {
                "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
이 메소드는 지정된 사용자 및 토큰에 대한 계정 트랜잭션 기록 세부정보의 필터링된 배열을 반환합니다.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())
public async getAccountTransactionHistoryWithFilters(token_id: string, org_id: string, user_id: string, filters?: Filters) {
const account_id = await this.Ctx.Account.generateAccountId(token_id, org_id, user_id);
await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFilters", "TOKEN", { account_id });
return await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id, org_id, user_id.toLowerCase(), filters);
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • org_id: string – 현재 조직에 있는 사용자의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • user_id: string – 사용자의 사용자 이름 또는 전자 메일 ID입니다.
  • filters: string – 선택적 매개변수입니다. 비어 있으면 모든 레코드가 반환됩니다. PageSize 속성은 반환할 레코드 수를 결정합니다. PageSize가 0이면 기본 페이지 크기는 20입니다. Bookmark 속성은 반환할 레코드의 시작 인덱스를 결정합니다. 자세한 내용은 Hyperledger Fabric 설명서를 참조하십시오. StartTimeEndTime 속성은 RFC-3339 형식으로 지정해야 합니다.
반환 값 예:
[
            {
                "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"
            }
 ]

수정된 출력이 있는 이동 메소드

다음 방법은 향상된 버전의 Blockchain App Builder를 사용할 때 관련 조직 및 사용자 ID를 반환합니다.

GetAccountTransactionHistory
이 메소드는 지정된 사용자 및 토큰에 대한 계정 트랜잭션 기록 세부정보 배열을 반환합니다.
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
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • org_id: string – 현재 조직에 있는 사용자의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • user_id: string – 사용자의 사용자 이름 또는 전자 메일 ID입니다.
반환 값 예:
[
            {
                "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
이 메소드는 지정된 사용자 및 토큰에 대한 계정 트랜잭션 기록 세부정보의 필터링된 배열을 반환합니다.
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
}
매개변수:
  • token_id: string – 토큰의 ID입니다.
  • org_id: string – 현재 조직에 있는 사용자의 멤버쉽 서비스 공급자(MSP) ID입니다.
  • user_id: string – 사용자의 사용자 이름 또는 전자 메일 ID입니다.
  • filters: string – 선택적 매개변수입니다. 비어 있으면 모든 레코드가 반환됩니다. PageSize 속성은 반환할 레코드 수를 결정합니다. PageSize가 0이면 기본 페이지 크기는 20입니다. Bookmark 속성은 반환할 레코드의 시작 인덱스를 결정합니다. 자세한 내용은 Hyperledger Fabric 설명서를 참조하십시오. StartTimeEndTime 속성은 RFC-3339 형식으로 지정해야 합니다.
반환 값 예:
[
            {
                "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"
            }
 ]