TypeScript 記號轉換方法

Blockchain App Builder 會自動產生可用來轉換使用「記號分類架構」標準之有趣記號的方法。

記號轉換方法包含交換集區的概念。交換集區帳戶是由其他權杖帳戶提供資金。當您輸入記號時,可以指定將轉換的記號百分比轉移到交換集區帳戶。

變數替代字轉換處理

轉換記號的一般流程遵循下列步驟:
  1. 呼叫 initializeExchangePoolUser 方法來初始化交換集區使用者。
  2. 呼叫 createExchangePoolAccounts 方法以建立交換集區帳戶。為您要轉換的每個有趣變數替代字類型建立交換集區帳戶。
  3. 呼叫 addConversionRate 方法來設定您要轉換之每組記號的轉換率。
  4. 以下列其中一種方式為交換集區記號帳戶提供資金:
    • 使用標準傳輸方法將記號轉移到交換集區記號帳戶。
    • 調解記號時呼叫 mintWithFundingExchangePoolToken 方法,此記號可將某個百分比的調解記號轉移到交換集區帳戶。
  5. 呼叫 tokenConversion 方法,在兩個有趣的記號之間轉換。單一使用者可以在其兩個權杖帳戶之間轉換權杖,或一組使用者可以直接將權杖從一個帳戶轉換成另一個帳戶。
  6. 匯集集區使用者可以檢視匯集集區科目餘額與科目交易。
    • 呼叫 getAccount 方法,以檢視每個交換集區權杖帳戶的餘額。
    • 呼叫 getAccountTransactionHistorygetAccountTransactionHistoryWithFilters 方法,以檢視每個交換集區記號帳戶的帳戶交易。

自動產生的權杖轉換方法

Blockchain App Builder 會自動產生可在不同類型的有趣記號之間轉換的方法。控制器方法必須要有 @Validator(...params) 修飾器才能呼叫。

initializeExchangePoolUser
此方法會初始化交換集區使用者,這是一次性活動。鏈碼的 Token Admin 只能呼叫此方法。
@Validator(yup.string(), yup.string())
public async initializeExchangePoolUser(org_id: string, user_id: string){
    await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.initializeExchangePoolUser', 'TOKEN');
    return await this.Ctx.TokenConvertor.initializeExchangePoolUser(org_id, user_id);
}
參數:
  • org_id: string - 目前組織中使用者的成員服務提供者 (MSP) ID。
  • user_id: string - 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含交換集區使用者明細的訊息。
傳回值範例:
{
    "assetType": "oconversion",
    "convertor_id": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "org_id": "Org1MSP",
    "user_id": "exchangepooluser"
}
createExchangePoolAccounts
此方法會為指定的權杖 ID 陣列建立交換集區權杖帳戶。鏈碼的 Token Admin 只能呼叫此方法。
@Validator(yup.array().of(yup.string()))
public async createExchangePoolAccounts(token_ids: string[]){
    await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.initializeExchangePoolUser', 'TOKEN');
    return await this.Ctx.TokenConvertor.createExchangePoolAccounts(token_ids);
}
參數:
  • token_ids: string [] - 記號 ID 的陣列。
傳回值:
  • 成功時,包含所建立交換集區帳戶明細的物件清單。
傳回值範例:
[
  {
    "account_id": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
    "token_id": "USD",
    "status": "created"
  },
  {
    "account_id": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
    "token_id": "INR",
    "status": "created"
  }
]
addConversionRate
此方法會為一組記號新增轉換率。權杖轉換率最多可指定 8 位小數位數。鏈碼的 Token Admin 只能呼叫此方法。
@Validator(yup.string(), yup.string(), yup.number())
public async addConversionRate(from_token_id:string , to_token_id:string, token_conversion_rate: number) {
   await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.addConversionRate', 'TOKEN');
   return await this.Ctx.TokenConvertor.addConversionToken(from_token_id,to_token_id,token_conversion_rate);
}
參數:
  • from_token_id: string - 要轉換的記號 ID。
  • to_token_id: string - 要轉換成的記號 ID。
  • token_conversion_rate: number - 將 from_token_id 記號轉換成 to_token_id 記號的速率。
傳回值:
  • 成功時,轉換率物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oconversionRate",
  "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
  "from_token_id": "USD",
  "to_token_id": "INR",
  "conversion_rate": 10
}
getConversionRate
此方法會取得一對記號的目前兌換率。鏈碼的 Token Admin、任何 Org Admin 以及任何記號帳戶擁有者都可以呼叫此方法。
@Validator(yup.string(), yup.string())
public async getConversionRate(from_token_id:string , to_token_id:string) {
    await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.getConversionRate', 'TOKEN');
    const conversion_rate_id = await this.Ctx.TokenConversionRate.getConversionRateId(from_token_id, to_token_id);
    return await this.Ctx.TokenConversionRate.get(conversion_rate_id);
}
參數:
  • from_token_id: string - 要轉換的記號 ID。
  • to_token_id: string - 要轉換成的記號 ID。
傳回值:
  • 成功時,轉換率物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oconversionRate",
  "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
  "from_token_id": "USD",
  "to_token_id": "INR",
  "conversion_rate": 10
}
updateConversionRate
此方法會更新一對記號的目前兌換率。權杖轉換率最多可指定 8 位小數位數。鏈碼的 Token Admin 只能呼叫此方法。
@Validator(yup.string(), yup.string(), yup.number())
public async updateConversionRate(from_token_id:string , to_token_id:string, token_conversion_rate: number) {
    await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.updateConversionRate', 'TOKEN');
    return await this.Ctx.TokenConvertor.updateTokenConversionRate(from_token_id,to_token_id,token_conversion_rate);
}
參數:
  • from_token_id: string - 要轉換的記號 ID。
  • to_token_id: string - 要轉換成的記號 ID。
  • token_conversion_rate: number - 將 from_token_id 記號轉換成 to_token_id 記號的速率。
傳回值:
  • 成功時,已更新兌換率物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oconversionRate",
  "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
  "from_token_id": "USD",
  "to_token_id": "INR",
  "conversion_rate": 20
}
mintWithFundingExchangePool
此方法會根據指定的權杖 ID 和數量來提示呼叫者帳戶中的權杖。之後,就會將處於提示數量的權杖百分比轉移到交換集區權杖帳戶。
@Validator(yup.string(), yup.number(), yup.number())
public async mintWithFundingExchangePool(token_id: string, token_quantity: number, percentage_token_to_exchange_pool: number) {
    return await this.Ctx.TokenConvertor.mintWithFundingExchangePool(token_id, token_quantity, percentage_token_to_exchange_pool);
}
參數:
  • token_id: string - 要進行 mint 的記號 ID。
  • token_quantity: number - 要提示的記號總數。
  • percentage_token_to_exchange_pool: number - 要轉移至交換集區記號帳戶的提示記號百分比。
傳回值:
  • 成功時,會出現一則訊息,指出匯兌共同資金的採礦與資金成功。
傳回值範例:
{
    "msg": "Successfully minted 100 tokens to Account Id: oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb (Org-Id: Org1MSP, User-Id: admin) and Successfully transfered 20 tokens to exchange pool Account with Account Id: oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034 (Org-Id: Org1MSP, User-Id: exchangepooluser) "
}
tokenConversion
此方法會將呼叫端帳戶的記號轉換成由 to_token_idto_org_idto_user_id 值指定的帳戶。鏈碼的 Token Admin 和任何記號帳戶擁有者都可以呼叫此方法。交換集區使用者無法呼叫此方法。
@Validator(yup.string(),yup.string(),yup.string(),yup.string(),yup.number())
public async tokenConversion(from_token_id:string, to_token_id:string, to_org_id:string, to_user_id:string, token_quantity:number){
    await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.tokenConversion', 'TOKEN');
    return await this.Ctx.TokenConvertor.tokenConversion(from_token_id,to_token_id,to_org_id,to_user_id,token_quantity);
}
參數:
  • from_token_id: string - 要轉換的記號 ID。
  • to_token_id: string - 要轉換成的記號 ID。
  • to_org_id: string - 目前組織中接收記號之使用者的成員服務提供者 (MSP) ID。
  • to_user_id: string - 接收記號之使用者的使用者名稱或電子郵件 ID。
  • token_quantity: number - 要傳輸的記號總數。
傳回值:
  • 成功時,表示權杖轉換成功的訊息。
傳回值範例:
{
    "msg": "Succesfully converted 5 of tokens with tokenId: [USD] from AccountId: oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb (Org-Id: Org1MSP, User-Id: admin) to 100 of tokens with tokenId: [INR] to AccountId: oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e (Org-Id: Org1MSP, User-Id: user) as per the conversion rate of 20"
}
getConversionHistory
此方法會傳回指定記號帳戶的記號轉換歷史記錄。此方法可由鏈碼的 Token Admin、指定組織的 Org Admin 或權杖帳戶擁有者呼叫。
@Validator(yup.string(), yup.string(), yup.string())
  public async getConversionHistory(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.getConversionHistory", "TOKEN", { account_id });
    return await this.Ctx.Account.getTokenConversionHistory(account_id, org_id, user_id);
  }
參數:
  • token_id: string - 記號的 ID。
  • org_id: string - 目前組織中使用者的成員服務提供者 (MSP) ID。
  • user_id: string - 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含轉換歷史記錄明細的 JSON 物件。
傳回值範例:
[
  {
    "transaction_id": "otransaction~34edd19e03ec8bbbc77bc3372081410a824a5c10f9aa522b3a6390d7e8cb11cf",
    "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
    "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
    "transacted_amount": 5,
    "converted_amount": 100,
    "conversion_rate": "20",
    "from_token_id": "USD",
    "to_token_id": "INR",
    "balance": 75,
    "onhold_balance": 0,
    "timestamp": "2022-11-30T11:03:20.000Z",
    "transaction_type": "TOKEN_CONVERSION_DEBIT"
  }
]
getConversionRateHistory
此方法會傳回一對記號的記號轉換率歷史記錄。鏈碼的 Token Admin、任何 Org Admin 以及任何記號帳戶擁有者都可以呼叫此方法。
@Validator(yup.string(), yup.string())
public async getConversionRateHistory(from_token_id:string , to_token_id:string) {
    const conversion_rate_id = await this.Ctx.TokenConversionRate.getConversionRateId(from_token_id,to_token_id);
    await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.getConversionRateHistory', 'TOKEN');  
    return await this.Ctx.TokenConversionRate.history(conversion_rate_id);
}
參數:
  • from_token_id: string - 用於計算兌換率的變數替代字 ID。
  • to_token_id: string - 用於計算兌換率的變數替代字 ID。
傳回值:
  • 成功時,包含兌換率歷史記錄明細的 JSON 物件。
傳回值範例:
 [
  {
    "trxId": "0b1ba7bc2620e1438b6580365e5c0ab852247ccfa5a3eb2157d3baca02c0e521",
    "timeStamp": "2022-11-30T10:23:38.000Z",
    "value": {
      "assetType": "oconversionRate",
      "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
      "from_token_id": "USD",
      "to_token_id": "INR",
      "conversion_rate": 20
    }
  },
  {
    "trxId": "36fc40ddb3d8308ee7e156af700da131d78d941fe390fc57985b7589e7035d5c",
    "timeStamp": "2022-11-30T10:13:18.000Z",
    "value": {
      "assetType": "oconversionRate",
      "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
      "from_token_id": "USD",
      "to_token_id": "INR",
      "conversion_rate": 10
    }
  }
]
getExchangePoolUser
此方法會傳回交換集區使用者的 org_iduser_id 值。鏈碼的 Token Admin 只能呼叫此方法。
@Validator()
public async getExchangePoolUser() {
    await this.Ctx.Auth.checkAuthorization('TOKEN_CONVERSION.getExchangePoolUser', 'TOKEN');
    return await this.Ctx.TokenConvertor.getExchangePoolUser();
}
參數:
傳回值:
  • 成功時,包含交換集區使用者相關資訊的訊息。
傳回值範例:
{
   "assetType": "oconversion",
   "convertor_id": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
   "org_id": "Org1MSP",
   "user_id": "exchangepooluser"
}

權杖轉換 SDK 方法

initializeExchangePoolUser
此方法會初始化交換集區使用者,這是一次性活動。鏈碼的 Token Admin 只能呼叫此方法。
Ctx.TokenConvertor.initializeExchangePoolUser(orgId: string, userId: string)
參數:
  • orgId: string - 目前組織中使用者的成員服務提供者 (MSP) ID。
  • userId: string - 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含交換集區使用者明細的訊息。
傳回值範例:
{
    "assetType": "oconversion",
    "convertor_id": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
    "org_id": "Org1MSP",
    "user_id": "exchangepooluser"
}
createExchangePoolAccounts
此方法會為指定的權杖 ID 陣列建立交換集區權杖帳戶。鏈碼的 Token Admin 只能呼叫此方法。
Ctx.TokenConvertor.createExchangePoolAccounts(token_ids: string[])
參數:
  • token_ids: string [] - 記號 ID 的陣列。
傳回值:
  • 成功時,包含所建立交換集區帳戶明細的物件清單。
傳回值範例:
[
  {
    "account_id": "oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034",
    "token_id": "USD",
    "status": "created"
  },
  {
    "account_id": "oaccount~3d4933111ec8bd6cc1ebb43f2b2c390deb929cfa534f9c6ada8e63bac04a13c0",
    "token_id": "INR",
    "status": "created"
  }
]
addConversionToken
此方法會為指定的記號新增具有新轉換率的記號。權杖轉換率最多可指定 8 位小數位數。鏈碼的 Token Admin 只能呼叫此方法。
Ctx.TokenConvertor.addConversionToken(fromTokenId: string, toTokenId: string, tokenConversionRate: number)
參數:
  • fromTokenId: string - 要轉換的記號 ID。
  • toTokenId: string - 要轉換成的記號 ID。
  • tokenConversionRate: number - 將 from_token_id 記號轉換成 to_token_id 記號的速率。
傳回值:
  • 成功時,轉換率物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oconversionRate",
  "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
  "from_token_id": "USD",
  "to_token_id": "INR",
  "conversion_rate": 10
}
get
此方法會取得一對記號的目前兌換率。鏈碼的 Token Admin 和任何記號帳戶擁有者都可以呼叫此方法。
Ctx.TokenConversionRate.get(id: string)
參數:
  • id: string - 權杖轉換率物件的 ID。
傳回值:
  • 成功時,轉換率物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oconversionRate",
  "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
  "from_token_id": "USD",
  "to_token_id": "INR",
  "conversion_rate": 10
}
updateTokenConversionRate
此方法會更新一對記號的目前兌換率。權杖轉換率最多可指定 8 位小數位數。鏈碼的 Token Admin 只能呼叫此方法。
Ctx.TokenConvertor.updateTokenConversionRate(fromTokenId: string, toTokenId: string, tokenConversionRate: number)
參數:
  • from_token_id: string - 要轉換的記號 ID。
  • to_token_id: string - 要轉換成的記號 ID。
  • token_conversion_rate: number - 將 from_token_id 記號轉換成 to_token_id 記號的速率。
傳回值:
  • 成功時,已更新兌換率物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oconversionRate",
  "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
  "from_token_id": "USD",
  "to_token_id": "INR",
  "conversion_rate": 20
}
mintWithFundingExchangePool
此方法會根據指定的權杖 ID 和數量來提示呼叫者帳戶中的權杖。之後,就會將處於提示數量的權杖百分比轉移到交換集區權杖帳戶。
Ctx.TokenConvertor.mintWithFundingExchangePool(tokenId: string, tokenQuantity: number, percentageTokenToExchangePool: number)
參數:
  • token_id: string - 要進行 mint 的記號 ID。
  • token_quantity: number - 要提示的記號總數。
  • percentage_token_to_exchange_pool: number - 要轉移至交換集區記號帳戶的提示記號百分比。
傳回值:
  • 成功時,會出現一則訊息,指出匯兌共同資金的採礦與資金成功。
傳回值範例:
{
    "msg": "Successfully minted 100 tokens to Account Id: oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb (Org-Id: Org1MSP, User-Id: admin) and Successfully transfered 20 tokens to exchange pool Account with Account Id: oaccount~cc9d84f6d4a5976532493ef5200c9603e138adc35166ffd5fd1aad9c1647f034 (Org-Id: Org1MSP, User-Id: exchangepooluser) "
}
tokenConversion
此方法會將呼叫端帳戶的記號轉換成由 to_token_idto_org_idto_user_id 值指定的帳戶。鏈碼的 Token Admin 和任何記號帳戶擁有者都可以呼叫此方法。交換集區使用者無法呼叫此方法。
Ctx.TokenConvertor.tokenConversion(fromTokenId: string, toTokenId: string, toOrgId: string, toUserId: string, tokenQuantity: number)
參數:
  • from_token_id: string - 要轉換的記號 ID。
  • to_token_id: string - 要轉換成的記號 ID。
  • to_org_id: string - 目前組織中接收記號之使用者的成員服務提供者 (MSP) ID。
  • to_user_id: string - 接收記號之使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,表示權杖轉換成功的訊息。
傳回值範例:
{
    "msg": "Succesfully converted 5 of tokens with tokenId: [USD] from AccountId: oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb (Org-Id: Org1MSP, User-Id: admin) to 100 of tokens with tokenId: [INR] to AccountId: oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e (Org-Id: Org1MSP, User-Id: user) as per the conversion rate of 20"
}
getTokenConversionHistory
此方法會傳回指定記號帳戶的記號轉換歷史記錄。鏈碼的 Token Admin、指定組織的 Org Admin 以及權杖帳戶擁有者可以呼叫此方法。
Ctx.Account.getTokenConversionHistory(account_id: string, org_id: string, user_id: string)
參數:
  • account_id: string - 有趣記號帳戶的 ID。
  • org_id: string - 目前組織中使用者的成員服務提供者 (MSP) ID。
  • user_id: string - 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,包含轉換歷史記錄明細的 JSON 物件。
傳回值範例:
[
  {
    "transaction_id": "otransaction~34edd19e03ec8bbbc77bc3372081410a824a5c10f9aa522b3a6390d7e8cb11cf",
    "from_account_id": "oaccount~abc74791148b761352b98df58035601b6f5480448ac2b4a3a7eb54bdbebf48eb",
    "to_account_id": "oaccount~25e2e66718b6dbb59aea9c32acebec60e09d912b2578d4933d377ae5d0628f1e",
    "transacted_amount": 5,
    "converted_amount": 100,
    "conversion_rate": "20",
    "from_token_id": "USD",
    "to_token_id": "INR",
    "balance": 75,
    "onhold_balance": 0,
    "timestamp": "2022-11-30T11:03:20.000Z",
    "transaction_type": "TOKEN_CONVERSION_DEBIT"
  }
]
history
此方法會傳回一對記號的記號轉換率歷史記錄。鏈碼的 Token Admin、任何 Org Admin 以及任何記號帳戶擁有者都可以呼叫此方法。
Ctx.TokenConversionRate.history(conversion_rate_id: string)
參數:
  • conversion_rate_id: string - 兌換率物件的 ID。
傳回值:
  • 成功時,包含兌換率歷史記錄明細的 JSON 物件。
傳回值範例:
 [
  {
    "trxId": "0b1ba7bc2620e1438b6580365e5c0ab852247ccfa5a3eb2157d3baca02c0e521",
    "timeStamp": "2022-11-30T10:23:38.000Z",
    "value": {
      "assetType": "oconversionRate",
      "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
      "from_token_id": "USD",
      "to_token_id": "INR",
      "conversion_rate": 20
    }
  },
  {
    "trxId": "36fc40ddb3d8308ee7e156af700da131d78d941fe390fc57985b7589e7035d5c",
    "timeStamp": "2022-11-30T10:13:18.000Z",
    "value": {
      "assetType": "oconversionRate",
      "conversion_rate_id": "oconversionRate~91c7eeb0614e7a50b1d5ecad559fcbc80b94034648bf405c9491dacf8d57873b",
      "from_token_id": "USD",
      "to_token_id": "INR",
      "conversion_rate": 10
    }
  }
]
getExchangePoolUser
此方法會傳回交換集區使用者的 OrgIdUserId 值。鏈碼的 Token Admin 只能呼叫此方法。
Ctx.TokenConvertor.getExchangePoolUser()
參數:
傳回值:
  • 成功時,包含交換集區使用者相關資訊的訊息。
傳回值範例:
{
   "assetType": "oconversion",
   "convertor_id": "bcb1f3b1442c625d3ce205660c5e717c5858a1fe1e12c325df799a851ceaa09b",
   "org_id": "Org1MSP",
   "user_id": "exchangepooluser"
}