機密交易模型

增強版的區塊鏈 App 產生器包含可產生機密模式額外方法的模型屬性。

如果您在使用擴充權杖分類架構標準的權杖規格檔案中包含 confidential: true 參數,區塊鏈 App 產生器會產生用於機密模式的鏈碼,包括下列自動產生的標準修改版本和 SDK 方法 (僅限 TypeScript)。

如需有關機密交易與機密批發中央銀行數位幣別 (CBDC) 案例的詳細資訊,請參閱含機密交易的批發中央銀行數位幣別

下表總結列出您在機密模式下建立權杖分類架構專案結構時所產生的方法。

方式分類 自動產生方法 SDK 方法 描述
Access Control Management - 存取控制管理 isTokenAdmin isUserTokenAdmin 如果呼叫者是管理員,則傳回 true
addTokenAdmin addTokenAdmin 新增管理員
removeTokenAdmin removeTokenAdmin 移除管理員
getAllTokenAdmins 傳回所有管理員
addOrgAdmin addOrgAdmin 新增組織管理員
removeOrgAdmin removeOrgAdmin 移除組織管理員
getAllOrgAdmins 傳回所有組織管理員
addTokenAuditor addTokenAuditor 新增稽核者
removeTokenAuditor removeTokenAuditor 移除稽核者
getAllTokenAuditors 傳回所有稽核者
addOrgAuditor addOrgAuditor 新增組織稽核者
removeOrgAuditor removeOrgAuditor 移除組織稽核者
getAllOrgAuditors 傳回所有組織稽核者
單詞管理 getAllTokens 傳回所有權杖資產
getDecimals 傳回指定記號的小數位數
history 傳回記號的歷史記錄
getTokensByName 傳回指定之權杖名稱的所有權杖資產
帳戶管理 createAccount createAccount 建立使用者帳戶
associateTokenToAccount associateToken 將帳戶與權杖建立關聯
getAllAccounts getAllAccounts 傳回所有使用者帳戶的明細
getAllOrgAccounts getAllOrgAccounts 傳回組織中所有使用者帳戶的明細
getAccountsByUser getAccountsByUser 傳回使用者的所有帳戶 ID
getUserByAccountId getUserByAccountId 傳回帳戶 ID 的使用者明細
getAccount getAccountWithStatus 傳回權杖帳戶的詳細資訊
getAccountDetailsByCustomAccountId getAccountDetailsByCustomAccountId 傳回自訂帳戶 ID 的帳戶明細
getAccountBalance getAccountBalance 傳回帳戶的目前餘額
getAccountStatus getAccountStatus 傳回帳戶的狀態
getAccountStatusHistory history 傳回權杖帳戶的歷史記錄
activateAccount activateAccount 啟用權杖帳戶
suspendAccount suspendAccount 暫停權杖帳戶
deleteAccount deleteAccount 刪除權杖帳戶
setMaxDailyAmount setMaxDailyAmount 設定使用者每日可移轉的權杖數目上限
setMaxDailyTransactionCount setMaxDailyTransactionCount 設定使用者每日可完成的交易數上限
getMaxDailyAmount getMaxDailyAmount 傳回使用者每日可移轉的權杖數目上限
getMaxDailyTransactionCount getMaxDailyTransactionCount 傳回使用者每日可完成的交易數上限
getAccountOnHoldBalance getAccountOnHoldBalance 傳回帳戶的目前保留餘額
角色管理 addRole addRoleMember 新增角色給使用者
removeRole removeRoleMember 移除使用者的角色
getAccountsByRole getAccountsByRole 傳回指定角色的帳戶 ID
getOrgAccountsByRole getOrgAccountsByRole 傳回組織中指定角色的帳戶 ID
getUsersByRole getUsersByRole 傳回指定角色的使用者清單
getOrgUsersByRole getOrgUsersByRole 傳回組織中指定角色的使用者清單
isInRole isInRole 傳回使用者是否具有指定的角色
交易管理 getAccountTransactionHistory getAccountTransactionHistory 傳回帳戶的交易歷史記錄
getAccountTransactionHistoryWithFilters getAccountTransactionHistoryWithFilters 傳回帳戶的已篩選交易歷史記錄
getAccountTransactionHistoryWithFiltersFromRichHistDB getAccountTrxHistoryWithFiltersFromRichHistDB 傳回帳戶豐富歷史記錄資料庫中已篩選的交易歷史記錄
getOrgAccountsTransactionHistoryWithFiltersFromRichHistDB getOrgAccountsTrxHistoryWithFiltersFromRichHistDB 傳回組織 RTF 歷史記錄資料庫中已過濾的異動歷史記錄
getAllAccountsTransactionHistoryWithFiltersFromRichHistDB getAllAccountsTrxHistoryWithFiltersFromRichHistDB 傳回 RTF 歷史記錄資料庫中所有科目的已篩選交易歷史記錄
consolidateRunningBalanceInTransactions consolidateRunningBalanceInTransactions 更新暫緩異動的執行中科目餘額
processSendersAndReceivers processSendersAndReceivers 在組織間移轉期間更新科目餘額
deleteHistoricalTransactions deleteTransactions 刪除較舊的交易
getTransactionById getTransactionById 傳回交易資產的歷史記錄
可變行為 requestMint 要發出記號的要求
approveMint 核准提示要求
rejectMint 拒絕提示要求
issueTokens issueTokens Mints 記號
getTotalMintedTokens getTotalMintedTokens 傳回預期的記號總數
getNetTokens getNetTokens 傳回可用記號的淨數量
可轉讓行為 transferTokens transferTokens 移轉權杖
可保留行為 holdTokens hold 將權杖餘額設為保留
executeHoldTokens executeHold 完成權杖保留
releaseHoldTokens releaseHold 解除權杖保留
getOnHoldIds getOnHoldIds 傳回帳戶的所有持有 ID
getOnHoldDetailsWithOperationId getOnHoldDetailsWithOperationId 傳回作業 ID 的保留異動明細
getOnHoldBalanceWithOperationId getOnHoldBalanceWithOperationId 傳回作業 ID 的保留餘額
可燒錄行為 requestBurn 記號已毀棄的要求
approveBurn 核准燒錄要求
rejectBurn 拒絕燒錄要求
組織間調動 executeHoldTokensSender executeHoldTokensSender 從寄件者帳戶扣除權杖
executeHoldTokensReceiver executeHoldTokensReceiver 收件者帳戶的貸方權杖

已修改機密鏈碼的 TypeScript 方法

如果您在使用擴充權杖分類架構標準的權杖規格檔案中包含 confidential: true 參數,區塊鏈 App 產生器會產生標準自動產生方法的修改版本以及其他方法。

isTokenAdmin
如果函數的呼叫程式是 Token Admin,則此方法會傳回布林值 true,否則會傳回 falseToken AdminToken Auditor、任何 Org Admin 或任何 Org Auditor 都可以對區塊鏈網路中的任何其他使用者呼叫此功能。其他使用者只能在自己的帳戶上呼叫此方法。
@GetMethod()
 @Validator(yup.string(), yup.string())
 public async isTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.isUserTokenAdmin", "TOKEN", { org_id });
    return await this.Ctx.Auth.isUserTokenAdmin(org_id, user_id);
 }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 如果呼叫程式是 Token Admin,則方法會傳回 true,否則會傳回 false
addTokenAdmin
此方法會將使用者新增為鏈碼的 Token Admin。只有鏈碼的 Token Admin 才能呼叫此方法。由於 user_id 值儲存在公用分類帳中,因此請勿使用任何個人識別資訊 (PII) 作為 user_id 值。
@Validator(yup.string(), yup.string())
  public async addTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.addTokenAdmin", "TOKEN");
    await this.Ctx.Model.createEvent(EVENT_NAME.ADD_TOKEN_ADMIN, { org_id, user_id });
    return await this.Ctx.Admin.addTokenAdmin(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Token Admin 的使用者詳細資料。
傳回值範例:
{
  "msg": "Successfully added Token Admin (Org_Id: CentralBank, User_Id: cb1)"
}
removeTokenAdmin
此方法會移除使用者作為鏈碼的 Token Admin。只有鏈碼的 Token Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string())
  public async removeTokenAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.removeTokenAdmin", "TOKEN");
    await this.Ctx.Model.createEvent(EVENT_NAME.REMOVE_TOKEN_ADMIN, { org_id, user_id });
    return await this.Ctx.Admin.removeTokenAdmin(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含被移除為鏈碼 Token Admin 的使用者詳細資料。
傳回值範例:
{"msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: User1)"}
addOrgAdmin
此方法會將使用者新增為組織的 Org Admin。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。由於 user_id 值儲存在公用分類帳中,因此請勿使用任何個人識別資訊 (PII) 作為 user_id 值。
@Validator(yup.string(), yup.string())
  public async addOrgAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.addOrgAdmin", "TOKEN", { org_id });
    await this.Ctx.Model.createEvent(EVENT_NAME.ADD_ORG_ADMIN, { org_id, user_id });
    return await this.Ctx.Admin.addOrgAdmin(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為組織 Org Admin 的使用者詳細資訊。
傳回值範例:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
此方法會移除使用者作為組織的 Org Admin。只有鏈碼的 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string())
  public async removeOrgAdmin(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.removeOrgAdmin", "TOKEN", { org_id });
    await this.Ctx.Model.createEvent(EVENT_NAME.REMOVE_ORG_ADMIN, { org_id, user_id });
    return await this.Ctx.Admin.removeOrgAdmin(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會顯示一則訊息,其中包含作為組織 Org Admin 移除之使用者的詳細資料。
傳回值範例:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
addTokenAuditor
此方法會將使用者新增為鏈碼的 Token Auditor。只有鏈碼的 Token Admin 才能呼叫此方法。由於 user_id 值儲存在公用分類帳中,因此請勿使用任何個人識別資訊 (PII) 作為 user_id 值。
@Validator(yup.string(), yup.string())
  public async addTokenAuditor(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.addTokenAuditor", "TOKEN");
    await this.Ctx.Model.createEvent(EVENT_NAME.ADD_TOKEN_AUDITOR, { org_id, user_id });
    return await this.Ctx.Admin.addTokenAuditor(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
  "msg": "Successfully added Token Auditor (Org_Id: CentralBank, User_Id: cb_admin_demo)"
}
removeTokenAuditor
此方法會移除使用者作為鏈碼的 Token Auditor。只有鏈碼的 Token Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string())
  public async removeTokenAuditor(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.removeTokenAuditor", "TOKEN");
    await this.Ctx.Model.createEvent(EVENT_NAME.REMOVE_TOKEN_AUDITOR, { org_id, user_id });
    return await this.Ctx.Admin.removeTokenAuditor(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
           "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
       }
addOrgAuditor
此方法會將使用者新增為鏈碼的 Org Auditor。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。由於 user_id 值儲存在公用分類帳中,因此請勿使用任何個人識別資訊 (PII) 作為 user_id 值。
@Validator(yup.string(), yup.string())
  public async addOrgAuditor(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.addOrgAuditor", "TOKEN", { org_id });
    await this.Ctx.Model.createEvent(EVENT_NAME.ADD_ORG_AUDITOR, { org_id, user_id });
    return await this.Ctx.Admin.addOrgAuditor(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Org Auditor 的使用者詳細資料。
傳回值範例:
{
           "msg": "Successfully added Org Auditor (Org_Id: CentralBank, User_Id: cb_admin_demo)"
       }
removeOrgAuditor
此方法會移除使用者作為鏈碼的 Org Auditor。只有鏈碼的 Token AdminOrg Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string())
  public async removeOrgAuditor(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ADMIN.removeOrgAuditor", "TOKEN", { org_id });
    await this.Ctx.Model.createEvent(EVENT_NAME.REMOVE_ORG_AUDITOR, { org_id, user_id });
    return await this.Ctx.Admin.removeOrgAuditor(org_id, user_id);
  }
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
           "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
       }
createAccount
這個方法會為指定的使用者與記號建立帳號。必須為任何需要記號的使用者建立帳戶。科目可追蹤餘額、保留餘額及交易歷史記錄。帳戶 ID 的形成方式是連結資產類型和權杖 ID,然後建立 SHA-256 雜湊以串連組織 ID 和使用者 ID。只有 Token Admin 或指定的組織 Org Admin 才能呼叫此方法。
@Validator(yup.string(),yup.string(), yup.string(), yup.object().nullable())
  public async createAccount(org_id: string, user_id: string, token_type: string, dailyLimits?: DailyLimits) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.createAccount", "TOKEN", { org_id });
    await this.Ctx.Model.createEvent(EVENT_NAME.CREATE_ACCOUNT, { org_id, user_id, token_type, dailyLimits });
    return await this.Ctx.Account.createAccount(org_id, user_id, token_type, dailyLimits);
  }
參數:
  • org_id – 要為其建立帳戶之使用者的會員服務提供者 (MSP) ID。ID 必須以數字或英文字母字元為開頭,而且可以包含英文字母、數字以及特殊字元,例如底線 (_)、句號 (.)、@ 符號以及連字號 (-)。
  • user_id – 使用者的使用者名稱或電子郵件 ID。ID 必須以數字或英文字母字元為開頭,而且可以包含英文字母、數字以及特殊字元,例如底線 (_)、句號 (.)、@ 符號以及連字號 (-)。
  • token_type: string – 記號的類型,必須是 fungible
  • daily_limits: DailyLimits – 下列類型的 JSON 物件。
    {
         "max_daily_amount": 100000
         "max_daily_transactions": 10000
     }
    在範例中,max_daily_amount 值是每日可交易的記號數量上限,而 max_daily_transactions 值是每日可完成的交易數上限。
傳回值範例:
{
    "bapAccountVersion": 0,
    "assetType": "oaccount",
    "account_id": "oaccount~b53cb2c19c92d1d5c8cb9f6e988e7761c34e03e014e6c4b889565fc0abf46c8a",
    "org_id": "CentralBank",
    "token_type": "fungible",
    "token_id": "",
    "token_name": "",
    "balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_burn_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
}
associateTokenToAccount
此方法會將有趣的記號與帳戶建立關聯。只有鏈碼的 Token Admin 或相關組織的 Org Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string(), yup.string().optional())
  public async associateTokenToAccount(account_id: string, token_id: string, custom_account_id?: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.associateToken", "TOKEN", { account_id });
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.ASSOCIATE_TOKEN_TO_ACCOUNT, { account_id, token_asset }, token_asset);
    return await this.Ctx.Account.associateToken(account_id, token_id, custom_account_id);
  }
參數:
  • account_id: string – 帳戶的 ID。
  • token_id: string – 記號的 ID。
  • custom_account_id: string – 若為機密模式,帳戶的銀行帳戶 ID 為唯一的隨機英數字元識別碼。依預設,長度為 14 個字元。
傳回值:
  • 成功時,已更新帳戶的 JSON 物件。bapAccountVersion 參數是在科目物件中定義供內部使用。
傳回值範例:
{
    "bapAccountVersion": 0,
    "assetType": "oaccount",
    "account_id": "oaccount~b53cb2c19c92d1d5c8cb9f6e988e7761c34e03e014e6c4b889565fc0abf46c8a",
    "org_id": "CentralBank",
    "token_type": "fungible",
    "token_id": "USD",
    "token_name": "cbdc",
    "balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_burn_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "application_groups": [
        "CENTRAL_BANK_USERS"
    ]
}
getAllAccounts
這個方法會傳回所有帳號的清單。只有 Token AdminToken Auditor 才能呼叫此方法。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
@GetMethod()
  @Validator()
  public async getAllAccounts() {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAllAccounts", "TOKEN");
    return await this.Ctx.Account.getAllAccounts();
  }
參數:
傳回值範例:
[
    {
        "key": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
        "valueJson": {
            "bapAccountVersion": 3,
            "assetType": "oaccount",
            "account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "028a27c752e9b518d156e61da6589e723b179b6d7351dc34ec92bbb27b783ed1dc",
            "onhold_balance": "02d53a7eda9484bda7252212714f647b70d32663cfa416f93f488ef6b6bc8fb2eb",
            "onhold_burn_balance": "02d53a7eda9484bda7252212714f647b70d32663cfa416f93f488ef6b6bc8fb2eb",
            "application_groups": [
                "application_groups value"
            ]
        }
    },
    {
        "key": "oaccount~1da238c1491c919b151f777a615fb5779032c34b3ef3adeca6afe591bac10aaf",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~1da238c1491c919b151f777a615fb5779032c34b3ef3adeca6afe591bac10aaf",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "020da01cd57249c6470b6dd03c2ee4c49de58c71ccc64f2de1203e835967a0846d",
            "onhold_balance": "020da01cd57249c6470b6dd03c2ee4c49de58c71ccc64f2de1203e835967a0846d",
            "onhold_burn_balance": "020da01cd57249c6470b6dd03c2ee4c49de58c71ccc64f2de1203e835967a0846d",
            "application_groups": [
                "application_groups value"
            ]
        }
    }
]
getAllOrgAccounts
此方法會傳回屬於指定組織的所有記號帳戶清單。此方法只能由 Token AdminToken Auditor 呼叫,或由指定組織的 Org AdminOrg Auditor 呼叫。
@GetMethod()
  @Validator(yup.string())
  public async getAllOrgAccounts(org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAllOrgAccounts", "TOKEN", { org_id });
    return await this.Ctx.Account.getAllOrgAccounts(org_id);
  }
參數:
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,指定組織的所有客戶清單。
傳回值範例:
[
    {
        "key": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
        "valueJson": {
            "bapAccountVersion": 2,
            "assetType": "oaccount",
            "account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "18",
            "onhold_balance": "0",
            "onhold_burn_balance": "0",
            "application_groups": [
                "application_groups value"
            ],
            "user_id": "cb",
            "custom_account_id": "1234567jh"
        }
    },
    {
        "key": "oaccount~5e3b5a3306d7ca3f3e3fe7cc27b6ae547e94dba1c5af58a69a771d7a619b6a66",
        "valueJson": {
            "bapAccountVersion": 1,
            "assetType": "oaccount",
            "account_id": "oaccount~5e3b5a3306d7ca3f3e3fe7cc27b6ae547e94dba1c5af58a69a771d7a619b6a66",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "22",
            "onhold_balance": "0",
            "onhold_burn_balance": "0",
            "application_groups": [
                "application_groups value"
            ],
            "user_id": "cb1",
            "custom_account_id": "1234567jh"
        }
    }
]
getAccountsByUser
此方法會傳回指定組織 ID 與使用者 ID 之所有帳戶 ID 的清單。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor,或參數中指定的 Account Owner 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.string())
  public async getAccountsByUser(org_id: string, user_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountsByUser", "TOKEN", { org_id, user_id });
    return await this.Ctx.Account.getAccountsByUser(org_id, user_id);
  }
參數:
  • org_id string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。
傳回值範例:
[
    {
        "bapAccountVersion": 2,
        "assetType": "oaccount",
        "user_id": "cb",
        "custom_account_id": "1234567jh",
        "account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
        "org_id": "CentralBank",
        "token_type": "fungible",
        "token_id": "token",
        "token_name": "cbdc",
        "balance": "18",
        "onhold_balance": "0",
        "onhold_burn_balance": "0",
        "application_groups": [
            "application_groups value"
        ]
    }
]
getUserByAccountId
此方法會傳回指定帳戶的使用者詳細資訊 (org_iduser_id)。此方法可由 Token AdminToken Auditor 呼叫,或由指定組織的 Org AdminOrg Auditor 呼叫。
@GetMethod()
  @Validator(yup.string())
  public async getUserByAccountId(account_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getUserByAccountId", "TOKEN", { account_id });
    return await this.Ctx.Account.getUserByAccountId(account_id);
  }
參數:
  • account_id: string – 帳戶的 ID。
傳回值:
  • 成功時,使用者詳細資訊 (org_idtoken_iduser_id) 的 JSON 物件。
傳回值範例:
{
    "token_id": "USD",
    "org_id": "CentralBank",
    "user_id": "cb_admin_demo",
    "custom_account_id": "10101234000123"
}
getAccount
此方法會傳回指定帳戶的明細。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getAccount(account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccount", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountWithStatus(account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
    "bapAccountVersion": 2,
    "assetType": "oaccount",
    "user_id": "cb",
    "custom_account_id": "1234567jh",
    "status": "active",
    "account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
    "org_id": "CentralBank",
    "token_type": "fungible",
    "token_id": "token",
    "token_name": "cbdc",
    "balance": "18",
    "onhold_balance": "0",
    "onhold_burn_balance": "0",
    "application_groups": [
        "application_groups value"
    ]
}
getAccountDetailsByCustomAccountId
此方法會傳回指定自訂帳戶 ID 的明細。此方法只能由指定組織的 Token AdminToken AuditorOrg AdminOrg Auditor 呼叫。
@GetMethod()
  @Validator(yup.string(), yup.string())
  public async getAccountDetailsByCustomAccountId(custom_account_id: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountDetailsByCustomAccountId", "TOKEN", { org_id });
    return await this.Ctx.Account.getAccountDetailsByCustomAccountId(custom_account_id, org_id);
  }
參數:
  • custom_account_id: string – 帳戶的銀行帳戶 ID,唯一的隨機英數字元識別碼。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值範例:
[
    {
        "bapAccountVersion": 0,
        "assetType": "oaccount",
        "account_id": "oaccount~c44ffac4c46718e9744cb0aae2016d26a87a5bef5e2d1c0d1abc7d8782f0ba61",
        "org_id": "CentralBank",
        "token_type": "fungible",
        "token_id": "USD",
        "token_name": "cbdc",
        "balance": "0",
        "onhold_balance": "0",
        "onhold_burn_balance": "0",
        "application_groups": [
            "SYSTEM_ADMINS"
        ],
        "user_id": "cb_admin_demo",
        "custom_account_id": "10101234000123"
    }
]
getAccountBalance
此方法會傳回指定帳戶的目前餘額。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getAccountBalance(account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountBalance(account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,代表目前帳戶餘額的 JSON。
傳回值範例:
{
    "msg": "Current Balance is: 100",
    "user_balance": 100
}
getAccountStatus
此方法會取得權杖帳戶的目前狀態。此方法可由鏈碼的 Token Admin、指定組織的 Org Admin 或記號帳戶擁有者呼叫。
@GetMethod()
  @Validator(yup.string())
  public async getAccountStatus(account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT_STATUS.get", "TOKEN", { account_id });
    try {
      return await this.Ctx.AccountStatus.getAccountStatus(account_id);
    } catch (err) {
      return await this.Ctx.AccountStatus.getDefaultAccountStatus(account_id);
    }
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,包含記號帳戶狀態詳細資訊的訊息。
傳回值範例:
{
    "assetType": "oaccountStatus",
    "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "status": "active"
}
getAccountStatusHistory
此方法會取得帳戶狀態的歷史記錄。此方法可由鏈碼的 Token Admin、指定組織的 Org Admin 或記號帳戶擁有者呼叫。
@GetMethod()
  @Validator(yup.string())
  public async getAccountStatusHistory(account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT_STATUS.history", "TOKEN", { account_id });
    const status_id = await this.Ctx.AccountStatus.generateAccountStatusId(account_id);
    let account_status_history: any;
    try {
      account_status_history = await this.Ctx.AccountStatus.history(status_id);
    } catch (err) {
      return [];
    }
    return account_status_history;
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,包含帳戶狀態歷史記錄明細的訊息。
傳回值範例:
[
  {
    "trxId": "d5c6d6f601257ba9b6edaf5b7660f00adc13c37d5321b8f7d3a35afab2e93e63",
    "timeStamp": "2025-12-02T10:39:14.000Z",
    "value": {
      "assetType": "oaccountStatus",
      "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
      "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "status": "suspended"
    }
  },
  {
    "trxId": "e6c850cfa084dc20ad95fb2bb8165eef3a3bd62a0ac867cccee57c2003125183",
    "timeStamp": "2025-12-02T10:37:50.000Z",
    "value": {
      "assetType": "oaccountStatus",
      "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
      "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "status": "active"
    }
  }
]
activateAccount
這個方法會啟用記號帳戶。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。無法啟用已刪除的帳戶。
@Validator(yup.string())
  public async activateAccount(account_id: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT_STATUS.activateAccount", "TOKEN", { org_id: account.org_id });
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.ACTIVATE_ACCOUNT, { account_id }, token_asset);
    return await this.Ctx.Account.activateAccount(account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,指定權杖帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oaccountStatus",
  "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
  "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
  "status": "active"
}
suspendAccount
這個方法會暫停一個記號帳戶。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。帳戶暫停之後,您就無法完成任何更新帳戶的作業。刪除的帳戶無法暫停。
@Validator(yup.string())
  public async suspendAccount(account_id: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT_STATUS.suspendAccount", "TOKEN", { org_id: account.org_id });
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.SUSPEND_ACCOUNT, { account }, token_asset);
    return await this.Ctx.Account.suspendAccount(account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,指定權杖帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
    "assetType": "oaccountStatus",
    "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "status": "suspended"
}
deleteAccount
此方法會刪除記號帳戶。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。帳戶刪除後,您就無法完成任何更新帳戶的作業。刪除的帳戶處於最終狀態,無法變更為任何其他狀態。若要刪除科目,科目餘額與保留餘額必須為零。
@Validator(yup.string())
  public async deleteAccount(account_id: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT_STATUS.deleteAccount", "TOKEN", { org_id: account.org_id });
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.DELETE_ACCOUNT, { account_id }, token_asset);
    return await this.Ctx.Account.deleteAccount(account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,指定權杖帳戶之帳戶狀態物件的 JSON 表示法。
傳回值範例:
{
  "assetType": "oaccountStatus",
  "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
  "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
  "status": "deleted"
}
setMaxDailyAmount
此方法會設定指定帳戶的 max_daily_amount 值。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string().optional())
  public async setMaxDailyAmount (account_id: string, max_daily_amount?: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.setMaxDailyAmount', 'TOKEN', { org_id: account.org_id });
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.SET_MAX_DAILY_AMOUNT, { account_id, max_daily_amount }, token_asset);
    return this.Ctx.Account.setMaxDailyAmount (account_id, max_daily_amount);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • max_daily_amount?: string – (選擇性) 使用者每日可傳輸的權杖數量上限。若未指定,使用者可以每日移轉任何數量的權杖。
傳回值範例:
{
           "msg": "Successfully set max daily amount for account id oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a to 1000000"
       }
setMaxDailyTransactionCount
此方法會設定指定帳戶的 max_daily_transactions 值。只有鏈碼的 Token Admin 或指定組織的 Org Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string().optional())
  public async setMaxDailyTransactionCount (account_id: string, max_daily_transactions?: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.setMaxDailyTransactionCount', 'TOKEN', { org_id: account.org_id });
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.SET_MAX_DAILY_TRANSACTION_COUNT, { account_id, max_daily_transactions}, token_asset);
    return this.Ctx.Account.setMaxDailyTransactionCount (account_id, max_daily_transactions);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • max_daily_transactions?: string – (選擇性) 使用者每日可完成的交易數上限。若未指定,使用者可以每天完成任何數量的交易。
傳回值範例:
{
            "msg": "Successfully set max daily transactions for account id oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a to 100000"
        }
getMaxDailyAmount
此方法會取得指定帳戶的 max_daily_amount 值。只有鏈碼的 Token AdminToken Auditor 或指定組織的 Org AdminOrg Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getMaxDailyAmount (account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.getMaxDailyAmount', 'TOKEN', { account_id });
    return this.Ctx.Account.getMaxDailyAmount (account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
           "max_daily_amount": "10000"
       }
getMaxDailyTransactionCount
此方法會取得指定帳戶的 max_daily_transactions 值。只有鏈碼的 Token AdminToken Auditor 或指定組織的 Org AdminOrg Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getMaxDailyTransactionCount (account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization('ACCOUNT.getMaxDailyTransactionCount', 'TOKEN', { account_id });
    return this.Ctx.Account.getMaxDailyTransactionCount (account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
           "max_daily_transactions": "100"
       }
getAccountOnHoldBalance
此方法會傳回指定帳戶的目前保留結餘。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getAccountOnHoldBalance(account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountOnHoldBalance", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountOnHoldBalance(account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,代表目前保留餘額的 JSON。
傳回值範例:
{
           "msg": "Total Holding Balance is: 0",
           "holding_balance": 0
       }
addRole
此方法會新增角色至指定的使用者和記號。只有鏈碼的 Token Admin 或同時擁有指定角色的指定組織 Org Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string())
  public async addRole(account_id: string, role: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.addRoleMember", "TOKEN", { token_id: account.token_id, org_id: account.org_id, role });
    await this.Ctx.Model.createEvent(EVENT_NAME.ADD_ROLE, { role, account_id }, token_asset);
    return await this.Ctx.Token.addRoleMember(role, account_id, token_asset);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • role: string – 要新增至指定使用者的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
傳回值:
  • 成功時,包含帳戶詳細資訊的訊息。
傳回值範例:
{
     "msg": "Successfully added role 'notary' to Account Id: oaccount~2eb5f8a9bc561f8f41a4ea3be9511958cc6684ef14f2337ca396efc301b627d8"
}
removeRole
這個方法會從指定的使用者和記號中移除角色。只有鏈碼的 Token Admin 或同時擁有指定角色的指定組織 Org Admin 才能呼叫此方法。
@Validator(yup.string(), yup.string())
  public async removeRole(account_id: string, role: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.removeRoleMember", "TOKEN", { token_id: account.token_id, org_id: account.org_id, role });
    await this.Ctx.Model.createEvent(EVENT_NAME.REMOVE_ROLE, { role, account_id }, token_asset);
    return await this.Ctx.Token.removeRoleMember(role, account_id, token_asset);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • role: string – 要從指定使用者移除的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。同樣地,notary 角色對應至規格檔案的 notary_role_name 特性。
傳回值:
  • 成功時,包含帳戶詳細資訊的訊息。
傳回值範例:
{
   "msg": "Successfully removed role 'notary' from Account Id: oaccount~2eb5f8a9bc561f8f41a4ea3be9511958cc6684ef14f2337ca396efc301b627d8"
}
getAccountsByRole
此方法會傳回指定角色和記號的所有帳戶 ID 清單。只有 Token AdminToken Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.string())
  public async getAccountsByRole(token_id: string, role: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getAccountsByRole", "TOKEN");
    return await this.Ctx.Role.getAccountsByRole(token_id, role);
  }
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。
傳回值範例:
{
           "accounts": [
               "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75"
           ]
       }
getOrgAccountsByRole
此方法會傳回指定角色、記號和組織的所有帳戶 ID 清單。此方法只能由 Token AdminToken Auditor 呼叫,或由指定組織的 Org AdminOrg Auditor 呼叫。
@GetMethod()
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgAccountsByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgAccountsByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgAccountsByRole(token_id, role, org_id);
  }
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值:
  • 成功時,JSON 帳戶 ID 陣列。
傳回值範例:
{
           "accounts": [
               "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75"
           ]
       }
getUsersByRole
此方法會傳回指定角色和記號之所有使用者的清單。只有 Token AdminToken Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.string())
  public async getUsersByRole(token_id: string, role: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getUsersByRole", "TOKEN");
    return await this.Ctx.Role.getUsersByRole(token_id, role);
  }
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
傳回值範例:
{
          "users": [
              {
                  "token_id": "token",
                  "org_id": "CentralBank"
              }
          ]
      }
getOrgUsersByRole
此方法會傳回指定之角色、記號和組織的所有使用者清單。此方法只能由 Token AdminToken Auditor 呼叫,或由指定組織的 Org AdminOrg Auditor 呼叫。
@GetMethod()
  @Validator(yup.string(), yup.string(), yup.string())
  public async getOrgUsersByRole(token_id: string, role: string, org_id: string) {
    await this.Ctx.Auth.checkAuthorization("ROLE.getOrgUsersByRole", "TOKEN", { org_id });
    return await this.Ctx.Role.getOrgUsersByRole(token_id, role, org_id);
  }
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值範例:
{
           "users": [
               {
                   "token_id": "token",
                   "org_id": "CentralBank",
                   "user_id": "cb1",
                   "custom_account_id": "1234567jh"
               }
           ]
       }
isInRole
此方法會傳回布林值,以指出使用者是否具有指定的角色。只有 Token AdminToken Auditor、帳戶的 AccountOwner 或指定組織的 Org AdminOrg Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.string())
  public async isInRole(account_id: string, role: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    const token_asset = await this.getTokenObject(account.token_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.isInRole", "TOKEN", { account_id });
    return { result: await this.Ctx.Token.isInRole(role, account_id, token_asset) };
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • role: string – 要搜尋的角色名稱。
傳回值:
  • 成功時,布林結果的 JSON 字串。
傳回值範例:
{
           "result": "true"
       }
getAccountTransactionHistory
此方法會傳回指定帳戶的帳戶交易歷史記錄明細陣列。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getAccountTransactionHistory(account_id: string) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistory", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountTransactionHistory(account_id, account.org_id);
  }
參數:
  • account_id: string – 帳戶的唯一 ID。
傳回值範例:
[
    {
        "transaction_id": "otransaction~4514aa229ebcc4d2fedcaa47c4301615e30c4a9bae45cf0256a5b80d75b3697a",
        "transacted_amount": 1000,
        "timestamp": "2025-08-25T13:20:50.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "APPROVE_MINT",
        "balance": 21000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~1982f73495060e0eef4d78282a91c41e27e8c95572739b0677a1e404a0d20aa9",
        "transacted_amount": 200,
        "timestamp": "2025-08-25T13:12:43.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 20000,
        "onhold_balance": 0
    },
    .
    .
    .  
    .
    {
        "transaction_id": "otransaction~396e6ca5a11a9609632d0864026409d46a708fb95e3e21b39fa5f3fb78f90872",
        "transacted_amount": 0,
        "timestamp": "2025-08-12T20:43:20.000Z",
        "token_id": "",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "CREATE_ACCOUNT",
        "balance": 0,
        "onhold_balance": 0
    }
]
getAccountTransactionHistoryWithFilters
此方法會傳回指定使用者與變數替代字之科目交易歷史記錄明細的篩選陣列。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.object().nullable())
  public async getAccountTransactionHistoryWithFilters(account_id: string, filters?: Filters) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFilters", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountTransactionHistoryWithFilters(account_id, account.org_id, filters);
  }
參數:
  • account_id: string – 帳戶的唯一 ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須使用 RFC-3339 格式指定 StartTimeEndTime 特性,如下列範例所示。
    {
         "pageSize": 20,
         "bookmark": "",
         "startTime": "1900-01-01T00:00:00+00:00",
         "endTime": "2100-01-01T00:00:00+00:00"
     }
Postman Request 的範例:
curl --location 'https://centralbank-oabcs1-bom.blockchain.ocp.oraclecloud.com:7443/restproxy/api/v2/channels/default/chaincode-queries' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Y2I6MTIzNDVAQXBwQnVpbGRlcg==' \
--data '{
    "chaincode": "confDev",
    "args": [
        "getAccountTransactionHistoryWithFilters"
    ],
    "timeout": 12000,
    "sync": true,
    "peer": "centralbank-oabcs1-bom.blockchain.ocp.oraclecloud.com:20010",
    "transientMap": {
        "args": "[\"oaccount~3a1b1c307883c0f74473fedfa62894d510b68959c4a21c7abb9d0224151aa573\",\"{\\\"pageSize\\\":20,\\\"bookmark\\\":\\\"\\\",\\\"startTime\\\":\\\"1900-01-01T00:00:00+00:00\\\",\\\"endTime\\\":\\\"2100-01-01T00:00:00+00:00\\\"}\"]"
    }
}'
傳回值範例:
[
            {
                "transaction_id": "otransaction~ccc2c2e89ab7887af4fdad3dc9918ea057a8aa834a0ed8d0f23271049f084952",
                "transacted_amount": 8,
                "timestamp": "2025-08-20T23:22:53.000Z",
                "token_id": "token",
                "category": "category value",
                "description": "description value",
                "holding_id": "ohold~cbdc~token~hold1",
                "to_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "to_org_id": "Org1",
                "to_user_id": "cb",
                "to_custom_account_id": "1234567jh",
                "from_account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "from_org_id": "CentralBank",
                "from_user_id": "Not Available",
                "from_custom_account_id": "Not Available",
                "transacted_account": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "transaction_type": "CREDIT",
                "balance": 18,
                "onhold_balance": 0,
                "transacted_org_id": "CentralBank",
                "transacted_user_id": "Not Available",
                "transacted_custom_account_id": "Not Available"
            },
            {
                "transaction_id": "otransaction~6c0452a58f13db93f1c308d60eab1fde6c911921b350c0bbbe0ce7dab394721d",
                "transacted_amount": 10,
                "timestamp": "2025-08-20T23:04:53.000Z",
                "token_id": "token",
                "category": "category value",
                "description": "description value",
                "holding_id": "ohold~cbdc~token~hold1",
                "to_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "to_org_id": "Org1",
                "to_user_id": "cb",
                "to_custom_account_id": "1234567jh",
                "from_account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "from_org_id": "CentralBank",
                "from_user_id": "Not Available",
                "from_custom_account_id": "Not Available",
                "transacted_account": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "transaction_type": "CREDIT",
                "balance": 10,
                "onhold_balance": 0,
                "transacted_org_id": "CentralBank",
                "transacted_user_id": "Not Available",
                "transacted_custom_account_id": "Not Available"
            },
            .
            .
            .
            .
            {
                "transaction_id": "otransaction~df98e24a3b90661b54b54289b600b13a1051c922db0a4d20e3705a9820ae9c20",
                "transacted_amount": 0,
                "timestamp": "2025-08-20T22:55:09.000Z",
                "category": "",
                "description": "",
                "from_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "from_org_id": "Org1",
                "from_user_id": "cb",
                "from_custom_account_id": "1234567jh",
                "transacted_account": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "transaction_type": "CREATE_ACCOUNT",
                "balance": 0,
                "onhold_balance": 0,
                "transacted_org_id": "Org1",
                "transacted_user_id": "cb",
                "transacted_custom_account_id": "1234567jh"
            }
        ]
getAccountTransactionHistoryWithFiltersFromRichHistDB
此方法會從 Rich history 資料庫擷取交易歷史記錄。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())
  public async getAccountTransactionHistoryWithFiltersFromRichHistDB(account_id: string, custom_endpoint: string, bearer_token: string, filters?: Filters) {
    const account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAccountTransactionHistoryWithFiltersFromRichHistDB", "TOKEN", { account_id });
    return await this.Ctx.Account.getAccountTrxHistoryWithFiltersFromRichHistDB(account_id, account.org_id, custom_endpoint, bearer_token, filters);
  }
參數:
  • account_id: string – 帳戶的唯一 ID。
  • custom_endpoint – Rich History 資料庫的 RESTful 服務端點。
  • bearer_token – RESTful 服務端點的存取授權記號。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須使用 RFC-3339 格式指定 StartTimeEndTime 特性,如下列範例所示。
    {
         "pageSize": 20,
         "bookmark": "",
         "startTime": "1900-01-01T00:00:00+00:00",
         "endTime": "2100-01-01T00:00:00+00:00"
     }
Postman Request 的範例:
curl --location 'https://centralbank-oabcs1-bom.blockchain.ocp.oraclecloud.com:7443/restproxy/api/v2/channels/default/chaincode-queries' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Y2I6MTIzNDVAQXBwQnVpbGRlcg==' \
--data '{
    "chaincode": "confDev",
    "args": [
        "getAccountTransactionHistoryWithFiltersFromRichHistDB"
    ],
    "timeout": 12000,
    "sync": true,
    "peer": "centralbank-oabcs1-bom.blockchain.ocp.oraclecloud.com:20010",
    "transientMap": {
        "args": "[\"oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc\",\"https://g5363dsasdade33f4-sampledb.adb.ap-sydney-1.oraclecloudapps.com/ords/obp2/conf_cc2/conf_cc2\",\"Dtbw-ehx7QjXfw2VbZsMzQ\",\"{\\\"pageSize\\\":20,\\\"bookmark\\\":\\\"\\\",\\\"startTime\\\":\\\"1900-01-01T00:00:00+00:00\\\",\\\"endTime\\\":\\\"2100-01-01T00:00:00+00:00\\\"}\"]"
    }
}'
傳回值範例:
[
    {
        "transaction_id": "otransaction~3140569a4ecb3c3f141cc2468fe21276640b7fd79013d951d9104b79072d8f9c",
        "transacted_amount": 200,
        "timestamp": "2025-08-25T13:16:55.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_officer_demo",
        "to_custom_account_id": "20200222221111",
        "from_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "from_org_id": "CentralBank",
        "from_user_id": "cb_issuer_demo",
        "from_custom_account_id": "10109999001234",
        "transaction_type": "EXECUTEHOLD",
        "category": "transfer",
        "balance": 26800,
        "onhold_balance": 300
    },
    {
        "transaction_id": "otransaction~5112f576c94c2d23c342479bfa37e34612414b3258a64b43cf51b920f4ff5868",
        "transacted_amount": 5000,
        "timestamp": "2025-08-12T21:05:02.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98",
        "transacted_org_id": "CentralBank",
        "transacted_user_id": "cb_retirer_demo",
        "transacted_custom_account_id": "10109999006543",
        "to_account": "oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_retirer_demo",
        "to_custom_account_id": "10109999006543",
        "from_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "from_org_id": "CentralBank",
        "from_user_id": "cb_issuer_demo",
        "from_custom_account_id": "10109999001234",
        "transaction_type": "DEBIT",
        "category": "burn",
        "balance": 45000,
        "onhold_balance": 0
    },
    .  
    .
    .
    .
    {
        "transaction_id": "otransaction~862aa9d9e877d3ea209b87299ab5b12c13ed5ce43d1cf1b934043c1dd02f58f6",
        "transacted_amount": 50000,
        "timestamp": "2025-08-12T21:04:22.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transacted_org_id": "CentralBank",
        "transacted_user_id": "cb__creator_demo",
        "transacted_custom_account_id": "10105678004567",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_issuer_demo",
        "to_custom_account_id": "10109999001234",
        "from_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "from_org_id": "CentralBank",
        "from_user_id": "cb__creator_demo",
        "from_custom_account_id": "10105678004567",
        "transaction_type": "CREDIT",
        "category": "transfer",
        "balance": 50000,
        "onhold_balance": 0
    }
]
getOrgAccountsTransactionHistoryWithFiltersFromRichHistDB
此方法會從 RTF 記錄資料庫中擷取指定組織的異動記錄。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.string(), yup.string(), yup.object().nullable())
  public async getOrgAccountsTransactionHistoryWithFiltersFromRichHistDB(org_id: string, custom_endpoint: string, bearer_token: string, filters?: Filters) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getOrgAccountsTransactionHistoryWithFiltersFromRichHistDB", "TOKEN", { org_id });
    return await this.Ctx.Account.getOrgAccountsTrxHistoryWithFiltersFromRichHistDB(org_id, custom_endpoint, bearer_token, filters);
  }
參數:
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
  • custom_endpoint – Rich History 資料庫的 RESTful 服務端點。
  • bearer_token – RESTful 服務端點的存取授權記號。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須使用 RFC-3339 格式指定 StartTimeEndTime 特性,如下列範例所示。
    {
         "pageSize": 20,
         "bookmark": "",
         "startTime": "1900-01-01T00:00:00+00:00",
         "endTime": "2100-01-01T00:00:00+00:00"
     }
Postman Request 的範例:
curl --location 'https://org1-oabcs1-bom.blockchain.ocp.oraclecloud.com:7443/restproxy/api/v2/channels/default/chaincode-queries' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Y2I6MTIzNDVAQXBwQnVpbGRlcg==' \
--data '{
    "chaincode": "confDev",
    "args": [
        "getOrgAccountsTransactionHistoryWithFiltersFromRichHistDB"
    ],
    "timeout": 12000,
    "sync": true,
    "peer": "org1-oabcs1-bom.blockchain.ocp.oraclecloud.com:20010",
    "transientMap": {
        "args": "[\"Org1\",\"https://g5363dsasdade33f4-sampledb.adb.ap-sydney-1.oraclecloudapps.com/ords/obp2/conf_cc2/conf_cc2AllOrgAccounts\",\"Dtbw-ehx7QjXfw2VbZsMzQ\",\"{\\\"pageSize\\\":20,\\\"bookmark\\\":\\\"\\\",\\\"startTime\\\":\\\"1900-01-01T00:00:00+00:00\\\",\\\"endTime\\\":\\\"2100-01-01T00:00:00+00:00\\\"}\"]"
    }
}'
傳回值範例:
[
    {
        "transaction_id": "otransaction~4793f3907eefce2f9fca7ef107405b0f116efb3afbf83fa0e61fe763690c8235",
        "transacted_amount": 100,
        "timestamp": "2025-08-25T13:47:56.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "from_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_officer_demo",
        "from_custom_account_id": "20200222221111",
        "transaction_type": "ONHOLD",
        "holding_id": "ohold~cbdc~USD~2ac01689",
        "category": "issuance"
    },
    {
        "transaction_id": "otransaction~5177f7560d32838242a26ac74f2a90c6ff9b47aae0d0988f28d9b4cf7e27c097",
        "transacted_amount": 10,
        "timestamp": "2025-08-25T13:22:23.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_user1_demo",
        "transacted_custom_account_id": "20200198765432",
        "to_account": "oaccount~d08ff55a040d5e5dcf406009bab1b3398e06c374356efb1bddbf2f17fc37f949",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_user2_demo",
        "to_custom_account_id": "20200211112222",
        "from_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_user1_demo",
        "from_custom_account_id": "20200198765432",
        "transaction_type": "CREDIT",
        "holding_id": "ohold~cbdc~USD~454f4bf6",
        "category": "transfer"
    },
    .
    .
    .
    .
    {
        "transaction_id": "otransaction~b7c97d737fb978651c9132276ab677c0bcf795b9db13d0d39cba5243615c7389",
        "transacted_amount": 10,
        "timestamp": "2025-08-21T08:46:09.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_user1_demo",
        "to_custom_account_id": "20200198765432",
        "from_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_officer_demo",
        "from_custom_account_id": "20200222221111",
        "transaction_type": "ONHOLD",
        "holding_id": "ohold~cbdc~USD~4fbbb846",
        "category": "transfer"
    }
]
getAllAccountsTransactionHistoryWithFiltersFromRichHistDB
此方法會從所有組織的豐富歷史記錄資料庫擷取交易歷史記錄。只有 Token AdminToken Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string(), yup.string(), yup.object().nullable())
  public async getAllAccountsTransactionHistoryWithFiltersFromRichHistDB(custom_endpoint: string, bearer_token: string, filters?: Filters) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getAllAccountsTransactionHistoryWithFiltersFromRichHistDB", "TOKEN");
    return await this.Ctx.Account.getAllAccountsTrxHistoryWithFiltersFromRichHistDB(custom_endpoint, bearer_token, filters);
  }
參數:
  • custom_endpoint – Rich History 資料庫的 RESTful 服務端點。
  • bearer_token – RESTful 服務端點的存取授權記號。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須使用 RFC-3339 格式指定 StartTimeEndTime 特性,如下列範例所示。
    {
         "pageSize": 20,
         "bookmark": "",
         "startTime": "1900-01-01T00:00:00+00:00",
         "endTime": "2100-01-01T00:00:00+00:00"
     }
Postman Request 的範例:
curl --location 'https://centralbank-oabcs1-bom.blockchain.ocp.oraclecloud.com:7443/restproxy/api/v2/channels/default/chaincode-queries' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Y2I6MTIzNDVAQXBwQnVpbGRlcg==' \
--data '{
    "chaincode": "confDev",
    "args": [
        "getAllAccountsTransactionHistoryWithFiltersFromRichHistDB"
    ],
    "timeout": 12000,
    "sync": true,
    "peer": "centralbank-oabcs1-bom.blockchain.ocp.oraclecloud.com:20010",
    "transientMap": {
        "args": "[\"https://g5363dsasdade33f4-sampledb.adb.ap-sydney-1.oraclecloudapps.com/ords/obp2/conf_cc2/conf_cc2AllAccounts\",\"Dtbw-ehx7QjXfw2VbZsMzQ\",\"{\\\"pageSize\\\":20,\\\"bookmark\\\":\\\"\\\",\\\"startTime\\\":\\\"1900-01-01T00:00:00+00:00\\\",\\\"endTime\\\":\\\"2100-01-01T00:00:00+00:00\\\"}\"]"
    }
}'
傳回值範例:
[
    {
        "transaction_id": "otransaction~62eb436be7c29fc2ed9cae221e874d9a31b163fa10374e7da09bf5e09a96c3ff",
        "transacted_amount": 10000,
        "timestamp": "2025-08-25T13:57:58.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "transacted_org_id": "CentralBank",
        "transacted_user_id": "cb_issuer_demo",
        "transacted_custom_account_id": "10109999001234",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_issuer_demo",
        "to_custom_account_id": "10109999001234",
        "from_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "from_org_id": "CentralBank",
        "from_user_id": "cb__creator_demo",
        "from_custom_account_id": "10105678004567",
        "transaction_type": "DEBIT",
        "category": "issuance"
    },
    {
        "transaction_id": "otransaction~4793f3907eefce2f9fca7ef107405b0f116efb3afbf83fa0e61fe763690c8235",
        "transacted_amount": 100,
        "timestamp": "2025-08-25T13:47:56.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_issuer_demo",
        "to_custom_account_id": "10109999001234",
        "from_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_officer_demo",
        "from_custom_account_id": "20200222221111",
        "transaction_type": "ONHOLD",
        "holding_id": "ohold~cbdc~USD~2ac01689",
        "category": "issuance"
    },
    .
    .
    .
    .
    {
        "transaction_id": "otransaction~5177f7560d32838242a26ac74f2a90c6ff9b47aae0d0988f28d9b4cf7e27c097",
        "transacted_amount": 10,
        "timestamp": "2025-08-25T13:22:23.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~d08ff55a040d5e5dcf406009bab1b3398e06c374356efb1bddbf2f17fc37f949",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_user2_demo",
        "transacted_custom_account_id": "20200211112222",
        "to_account": "oaccount~d08ff55a040d5e5dcf406009bab1b3398e06c374356efb1bddbf2f17fc37f949",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_user2_demo",
        "to_custom_account_id": "20200211112222",
        "from_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_user1_demo",
        "from_custom_account_id": "20200198765432",
        "transaction_type": "EXECUTEHOLD",
        "holding_id": "ohold~cbdc~USD~454f4bf6",
        "category": "transfer"
    }
]
deleteHistoricalTransactions
此方法會從狀態資料庫刪除較舊的交易。只有 Token Admin 才能呼叫此方法。
@Validator(yup.date())
  public async deleteHistoricalTransactions(time_to_expiration: Date) {
    await this.Ctx.Auth.checkAuthorization("TRANSACTION.deleteTransactions", "TOKEN");
    await this.Ctx.Model.createEvent(EVENT_NAME.DELETE_HISTORICAL_TRANSACTIONS, { time_to_expiration });
    return await this.Ctx.Transaction.deleteTransactions(time_to_expiration);
  }
參數:
  • time_to_expiration Date – 表示何時刪除交易的時戳。將刪除早於指定時間的交易資產。
傳回值範例:
{
    "msg": "Successfully deleted transaction older than date: Thu Aug 19 2025 11:19:36 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
           "otransaction~ec3366dd48b4ce2838f820f2f138648e6e55a07226713e59b411ff31b0d21058"
     ]
}
getTransactionById
此方法會傳回 Transaction 資產的歷史記錄。只有 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor,或交易參與者 (寄件者、收件者或公證人) 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getTransactionById(transaction_id: string) {
    await this.Ctx.Auth.checkAuthorization("TRANSACTION.getTransactionById", "TOKEN", { transaction_id });
    return await this.Ctx.Transaction.getTransactionById(transaction_id);
  }
參數:
  • transaction_id string – 交易資產的 ID。
傳回值:
  • 成功時,交易歷史記錄的 JSON 陣列。
傳回值範例:
{
    "transaction_id": "otransaction~6523597253e45b3c976aecdc54e2c6316d0a4f88ad5d7f3fff48c69213e4375a",
    "history": [
        {
            "trxId": "6523597253e45b3c976aecdc54e2c6316d0a4f88ad5d7f3fff48c69213e4375a",
            "timeStamp": "2025-08-20T23:21:45.000Z",
            "value": {
                "assetType": "otransaction",
                "transaction_id": "otransaction~6523597253e45b3c976aecdc54e2c6316d0a4f88ad5d7f3fff48c69213e4375a",
                "token_id": "token",
                "from_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "to_account_id": "oaccount~5e3b5a3306d7ca3f3e3fe7cc27b6ae547e94dba1c5af58a69a771d7a619b6a66",
                "transaction_type": "TRANSFER",
                "amount": 22,
                "timestamp": "2025-08-20T23:21:45.000Z",
                "number_of_sub_transactions": 0,
                "holding_id": "",
                "sub_transaction": "false",
                "category": "category value",
                "description": "description value"
            }
        }
    ],
    "sub_transactions": []
}
consolidateRunningBalanceInTransactions
此方法會計算執行中科目餘額,並將更新的值儲存在交易索引鍵 / 值組中。一般而言,系統管理員會使用 REST 代理主機排程器呼叫此方法。只有 Token AdminOrg Admin 才能呼叫此方法。
@Validator(yup.string())
  public async consolidateRunningBalanceInTransactions() {
    await this.Ctx.Auth.checkAuthorization("TRANSACTION.consolidateRunningBalanceInTransactions", "TOKEN");
    return this.Ctx.Transaction.consolidateRunningBalanceInTransactions(true);
  }
傳回值範例:
{ msg: "Successfully updated account running balance for pending transactions."}
processSendersAndReceivers
此方法會計算並更新在組織間移轉期間建立的寄件人與接收者索引鍵 / 值組中分攤的變數替代字科目餘額,然後刪除不再使用的寄件人與接收者索引鍵 / 值組。一般而言,系統管理員會使用 REST 代理主機排程器呼叫此方法。只有 Token AdminOrg Admin 才能呼叫此方法。
@Validator(yup.string())
  public async processSendersAndReceivers() {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.processSendersAndReceivers", "TOKEN");
    return this.Ctx.Account.processSendersAndReceivers(true);
  }
傳回值範例:
{ msg: "Successfully updated balance for accounts from pending receivers."}
requestMint
礦工可以呼叫此方法,以傳送要求給礦工公證人以建立指定數量的權杖。
@Validator(
    yup.string(),
    yup.string(),
    yup.number().positive(),
    yup.date(),
    yup.object().nullable()
  )
  public async requestMint(
      operation_id: string,
      notary_account_id: string,
      quantity:number,
      time_to_expiration: Date,
      info_details ?: InfoDetails
  ) {
    const notary_account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(notary_account_id);
    const token_asset = await this.getTokenObject(notary_account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.REQUEST_MINT, { operation_id, notary_account_id, quantity, time_to_expiration, info_details }, token_asset);
    return await this.Ctx.Hold.hold(operation_id, null, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.MINT, info_details);
  }
參數:
  • operation_id: string – 代表提示要求的唯一作業 ID。
  • notary_account_id: string – 將處理要求的礦工公證人的唯一帳戶 ID。
  • quantity: number – 要提示的記號數量。
  • time_to_expiration – 採礦要求到期且不再有效的時間。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
           "msg": "AccountId oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41 has successfully submitted request to mint 200 tokens"
       }
approveMint
礦工公證人可呼叫此方法,以核准採礦請求。
@Validator(yup.string(), yup.string())
  public async approveMint(token_id: string, operation_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.APPROVE_MINT, { token_asset, operation_id }, token_asset);
    return await this.Ctx.Hold.executeHold(operation_id, token_asset, HoldOperationType.MINT);
  }
參數:
  • token_id: string – 要提示的記號 ID。
  • operation_id: string – 代表提示要求的唯一作業 ID。
傳回值範例:
{
           "msg": "Successfully minted 1000 tokens to Account Id: oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41"
       }
rejectMint
礦物公證人可以呼叫此方法,以拒絕採礦要求。
@Validator(yup.string(), yup.string())
  public async rejectMint(token_id: string, operation_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.REJECT_MINT, { token_asset, operation_id }, token_asset);
    return await this.Ctx.Hold.releaseHold(operation_id, token_asset, HoldOperationType.MINT);
  }
參數:
  • token_id: string – 要提示的記號 ID。
  • operation_id: string – 代表提示要求的唯一作業 ID。
傳回值範例:
{
           "msg": "Successfully rejected mint request with Operation Id '89ce' to mint 2000 tokens of token id USD"
       }
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);
    await this.Ctx.Model.createEvent(EVENT_NAME.ISSUE_TOKENS, { quantity, token_asset, info_details }, token_asset);
    return await this.Ctx.Token.mint(quantity, token_asset, info_details);
  }
參數:
  • token_id: string – 記號的 ID。
  • quantity – 記號數目為 mint。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
          "msg": "Successfully minted 1000 tokens to Account Id: oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41"
      }
getTotalMintedTokens
此方法會傳回指定記號的預期記號總數。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getTotalMintedTokens(token_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.getTotalMintedTokens", "TOKEN");
    const totalMintedTokens = await this.Ctx.Token.getTotalMintedTokens(token_asset);
    return {
      msg: `Total minted token for Token Id: ${token_id} is ${totalMintedTokens} tokens.`,
      quantity: totalMintedTokens,
    };
  }
參數:
  • token_id: string – 記號的 ID。
傳回值:
  • 成功時,代表權杖總數的 JSON 字串。
傳回值範例:
{
    "msg": "Total minted token for Token Id: USD is 910 tokens.",
    "quantity": 910
}
getNetTokens
此方法會傳回系統中指定記號可用的記號總數。網路記號總計是記號燒錄後剩餘的記號數量。方程式形式:淨記號 = 總鑄幣記號 - 總燃燒記號。如果沒有燒錄記號,則網路記號的數目會等於總鑄幣的記號。只有 Token AdminToken AuditorOrg AdminOrg Auditor 才能呼叫此方法。
@GetMethod()
  @Validator(yup.string())
  public async getNetTokens(token_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Auth.checkAuthorization("TOKEN.getNetTokens", "TOKEN");
    const netTokens = await this.Ctx.Token.getNetTokens(token_asset);
    return {
      msg: `Net supply of token for Token Id: ${token_id} is ${netTokens} tokens.`,
      quantity: netTokens,
    };
  }
參數:
  • token_id: string – 記號的 ID。
傳回值:
  • 成功時,表示記號淨數的 JSON 字串。
傳回值範例:
{
    "msg": "Net supply of token for Token Id: USD is 878 tokens.",
    "quantity": 878
}
transferTokens
此方法會將記號從呼叫程式轉移至指定的帳戶。
@Validator(yup.string(), yup.number(), yup.object().nullable())
  public async transferTokens(to_account_id: string, quantity: number, info_details ?: InfoDetails) {
    if (quantity <= 0) {
      throw new Error("The quantity should be a positive number.")
    }
    const to_account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(to_account_id);
    const token_asset = await this.getTokenObject(to_account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.TRANSFER_TOKENS, { to_account_id, quantity, info_details }, token_asset);
    let isNotary = await this.Ctx.Token.checkNotary(to_account_id, token_asset);
    if(isNotary) {
      throw new Error(`To Account Id '${to_account_id}' can not have a notary role!`);
    }
    return await this.Ctx.Token.transfer(to_account_id, quantity, token_asset, info_details);
  }
參數:
  • to_account_id: string – 接收者 (受款人) 的唯一帳戶 ID。
  • quantity: number – 要傳輸的記號數目。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
          "msg": "Successfully transferred 10000 tokens from account id: oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41  to account id: oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a."
      }
holdTokens
此方法會代表呼叫者 (記號的擁有者) 使用 to_account_id 帳戶建立保留。指定公證人帳戶負責完成或解除保留。建立保留時,系統會保留付款人的指定變數替代字餘額。保留完成或解除之前,無法移轉保留餘額。
@Validator(
    yup.string(),
    yup.string(),
    yup.string(),
    yup.number().positive(),
    yup.date(),
    yup.object().nullable()
  )
  public async holdTokens(
    operation_id: string,
    to_account_id: string,
    notary_account_id: string,
    quantity: number,
    time_to_expiration: Date,
    info_details ?: InfoDetails,
  ) {
    const to_account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(to_account_id);
    await this.Ctx.Account.getAccountWithTokenIdValidation(notary_account_id);
    const token_asset = await this.getTokenObject(to_account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.HOLD_TOKENS, {
      operation_id,
      to_account_id,
      notary_account_id,
      quantity,
      time_to_expiration,
      info_details
    }, token_asset);
    return await this.Ctx.Hold.hold(operation_id, to_account_id, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.TRANSFER, info_details);
  }
參數:
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • to_account_id: string – 接收者的唯一帳戶 ID。
  • notary_account_id: string – 公證人的唯一帳戶 ID。
  • quantity: number – 保留的記號數目。
  • time_to_expiration – 保留到期的時間。為永久保留指定 0 。否則,請使用 RFC-3339 格式。例如,2021-06-02T12:46:06Z
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
           "msg": "AccountId oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3 is successfully holding 100 tokens"
       }
executeHoldTokens
這個方法會完成記號的保留。權杖擁有者先前持有的權杖數量會移轉給接收者。如果 quantity 值小於實際保留值,則剩餘金額會再次提供給權杖的原始擁有者。只有具有指定作業 ID 之 notary 角色的 AccountOwner ID 才能呼叫此方法。只有公證人才能完成保留。
@Validator(yup.string(), yup.string(), yup.number().positive())
  public async executeHoldTokens(token_id: string, operation_id: string, quantity: number) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.EXECUTE_HOLD_TOKENS, { token_asset, operation_id, quantity }, token_asset);
    return await this.Ctx.Hold.executeHold(operation_id, token_asset, HoldOperationType.TRANSFER, quantity);
  }
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • quantity: number – 要轉移的保留記號數目。
傳回值:
  • 成功時,訊息會包含來電者帳戶 ID 與交易數量。
傳回值範例:
{
           "msg": "Account Id: oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111 is successfully executed '10' tokens from Operation Id '454f4bf6'."
       }
releaseHoldTokens
此方法會解除保留記號。轉帳未完成,所有保留的權杖都會再次提供給原始擁有者使用。具有 notary 角色的 AccountOwner ID 可在指定的時間限制內呼叫此方法,或由付款人、受款人或公證人在指定的時間限制之後呼叫。
@Validator(yup.string(), yup.string())
  public async releaseHoldTokens(token_id: string, operation_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.RELEASE_HOLD_TOKENS, { token_asset, operation_id }, token_asset);
    return await this.Ctx.Hold.releaseHold(operation_id, token_asset, HoldOperationType.TRANSFER);
  }
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,會出現一則訊息,指出已解除保留。
傳回值範例:
{
           "msg": "Successfully released '200' tokens from Operation Id '77b75873' to Account Id: oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a."
       }
getOnHoldIds
此方法會傳回指定帳戶之所有持有 ID 的清單。此方法可由鏈碼的 Token AdminToken Auditor、指定組織的 Org AdminOrg Auditor 或帳戶的 AccountOwner 呼叫。
@GetMethod()
  @Validator(yup.string())
  public async getOnHoldIds(account_id: string) {
    await this.Ctx.Account.getAccountWithTokenIdValidation(account_id);
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getOnHoldIds", "TOKEN", { account_id });
    return await this.Ctx.Account.getOnHoldIds(account_id);
  }
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值:
  • 成功時,JSON 保留 ID 清單。
傳回值範例:
{
           "msg": "Holding Ids are: ",
           "holding_ids": ["ohold~cbdc~token~hold1"]
       }
getOnHoldDetailsWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留異動明細。此方法可由鏈碼的 Token AdminToken Auditor 呼叫,或由交易參與者 (寄件者、收件者、公證人) 呼叫。
@GetMethod()
  @Validator(yup.string(), yup.string())
  public async getOnHoldDetailsWithOperationId(token_id: string, operation_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getOnHoldDetailsWithOperationId", "TOKEN", { token_id, operation_id });
    return await this.Ctx.Hold.getOnHoldDetailsWithOperationId(token_id, operation_id);
  }
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值範例:
{
          "assetType": "ohold",
          "holding_id": "ohold~cbdc~token~hold1",
          "operation_id": "hold1",
          "token_name": "cbdc",
          "from_org_id": "CentralBank",
          "operation_type": "transfer",
          "status": "approved",
          "from_account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
          "to_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
          "notary_account_id": "oaccount~1da238c1491c919b151f777a615fb5779032c34b3ef3adeca6afe591bac10aaf",
          "token_id": "token",
          "quantity": "0",
          "time_to_expiration": "2029-01-04T00:00:00.000Z",
          "category": "category value",
          "description": "description value"
      }
getOnHoldBalanceWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留餘額。此方法可由鏈碼的 Token AdminToken Auditor 呼叫,或由交易參與者 (寄件者、收件者、公證人) 呼叫。
@GetMethod()
  @Validator(yup.string(), yup.string())
  public async getOnHoldBalanceWithOperationId(token_id: string, operation_id: string) {
    await this.Ctx.Auth.checkAuthorization("ACCOUNT.getOnHoldBalanceWithOperationId", "TOKEN", { token_id, operation_id });
    return await this.Ctx.Hold.getOnHoldBalanceWithOperationId(token_id, operation_id);
  }
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
傳回值:
  • 成功時,一個 JSON 字串表示持有餘額。
傳回值範例:
{
           "msg": "Current Holding Balance of Operation 'hold1' for token 'token' is: 0",
           "holding_balance": 0
       }
requestBurn
燒錄機可以呼叫此方法,以傳送要求給燒錄機公證,以銷毀指定數量的記號。
@Validator(
    yup.string(),
    yup.string(),
    yup.number().positive(),
    yup.date(),
    yup.object().nullable()
  )
  public async requestBurn(
      operation_id: string,
      notary_account_id: string,
      quantity:number,
      time_to_expiration: Date,
      info_details ?: InfoDetails,
  ) {
    const notary_account: FungibleAccount = await this.Ctx.Account.getAccountWithTokenIdValidation(notary_account_id);
    const token_asset = await this.getTokenObject(notary_account.token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.REQUEST_BURN, { operation_id, notary_account_id, quantity, time_to_expiration, info_details }, token_asset);
    return await this.Ctx.Hold.hold(operation_id, null, notary_account_id, quantity, time_to_expiration, token_asset, HoldOperationType.BURN, info_details);
  }
參數:
  • operation_id: string – 代表燒錄要求的唯一作業 ID。
  • notary_account_id: string – 將處理要求的燒錄者公證人的唯一帳戶 ID。
  • quantity: number – 要燒錄的記號數量。
  • time_to_expiration – 燒錄要求到期且不再有效的時間。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
           "msg": "AccountId oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98 has successfully submitted request to burn 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);
    await this.Ctx.Model.createEvent(EVENT_NAME.APPROVE_BURN, { token_asset, operation_id }, token_asset);
    return await this.Ctx.Hold.executeHold(operation_id, token_asset, HoldOperationType.BURN);
  }
參數:
  • token_id: string – 要燒錄的記號 ID。
  • operation_id: string – 代表燒錄要求的唯一作業 ID。
傳回值範例:
{
           "msg": "Successfully burned 200 tokens from account id: oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98"
       }
rejectBurn
燃燒器公證可以呼叫此方法,以拒絕燒錄請求。
@Validator(yup.string(), yup.string())
  public async rejectBurn(token_id: string, operation_id: string) {
    const token_asset = await this.getTokenObject(token_id);
    await this.Ctx.Model.createEvent(EVENT_NAME.REJECT_BURN, { token_asset, operation_id }, token_asset);
    return await this.Ctx.Hold.releaseHold(operation_id, token_asset, HoldOperationType.BURN);
  }
參數:
  • token_id: string – 要燒錄的記號 ID。
  • operation_id: string – 代表燒錄要求的唯一作業 ID。
傳回值範例:
{
           "msg": "Successfully rejected burn request with Operation Id '8d34' to burn 100 tokens of token id USD"
       }

TypeScript 組織間移轉的方法

組織間移轉有兩個部分:先從寄件者借記金額,再將金額記入接收者。下列兩個 API 會使用 Oracle Blockchain Platform REST 代理主機的雙階段確認 API 一起呼叫為單元交易。機密傳輸是以這種方式進行,因為這兩個組織的專用資料收集是不同的,無法在單一交易中存取。

這兩個交易都是使用 REST 代理主機的雙階段確認 API 傳送。如需詳細資訊,請參閱呼叫單元交易

您可以在 Postman 集合中建立 POST 要求,其 URL 類似於:https://test-xyz-abc.blockchain.ocp.oraclecloud.com:7443/restproxy/api/v2/atomicTransactions。您必須傳送所有必要的標頭,包含下列標頭。
- Content-Type: application/json
- Confidential-Transaction: true
在要求主體中,包含 executeHoldTokensSenderexecuteHoldTokensReceiver 方法,如下列要求所示。
{
 "transactions": [
   {
        "chaincode": "<chaincode>",
        "args": [
            "executeHoldTokensSender"
        ],
        "timeout": 6000,
        "sync": true,
        "transientMap": {
            "args": "[ \"bc-token-id value\",\"operation_id value\",\"quantity value\"]"
        },
        "endorsers" : <Sender's endorsers List>,
        "channel":"<channel name>"
   },
   {
        "chaincode": "<chaincode name>",
        "args": [
            "executeHoldTokensReceiver"
        ],
        "timeout": 6000,
        "sync": true,
        "transientMap": {
            "args": "[ \"bc-token-id value\",\"operation_id value\",\"quantity value\"]"
        },
        "endorsers" : <Recipient endorsers List>,
        "channel":"<channelName>"
    }
 ],
 "isolationLevel": "readCommitted",
 "prepareTimeout": 10000,
 "copyInputsToTransientMap": true,
 "sync": true,
 "parallelPrepare": true
}
下列範例顯示要求主體。
{
 "transactions": [
   {
        "chaincode": "WholesaleCBDCConfidential",
        "args": [
            "executeHoldTokensSender"
        ],
        "timeout": 6000,
        "sync": true,
        "transientMap": {
            "args": "[ \"bc-token-id value\",\"operation_id value\",\"quantity value\"]"
        },
        "endorsers" : ["org1-xyz-abc.blockchain.ocp.oraclecloud.com:20009", "org1-xyz-abc.blockchain.ocp.oraclecloud.com:20009"],
        "channel":"default"
   },
   {
        "chaincode": "WholesaleCBDCConfidential",
        "args": [
            "executeHoldTokensReceiver"
        ],
        "timeout": 6000,
        "sync": true,
        "transientMap": {
            "args": "[ \"bc-token-id value\",\"operation_id value\",\"quantity value\"]"
        },
        "endorsers" : ["org2-xyz-abc.blockchain.ocp.oraclecloud.com:20009", "org2-xyz-abc.blockchain.ocp.oraclecloud.com:20009"],
        "channel":"default"
    }
 ],
 "isolationLevel": "readCommitted",
 "prepareTimeout": 10000,
 "copyInputsToTransientMap": true,
 "sync": true,
 "parallelPrepare": true
}
executeHoldTokensSender
只有具備指定作業 ID 公證角色的使用者才能呼叫此方法。此方法為組織間調動核准的第一個部分。指定金額會從寄件者的帳戶中扣除。
@ExcludeFromPostmanCollection()
  @Validator(yup.string(), yup.string(), yup.number().positive(), yup.string(), yup.string())
  public async executeHoldTokensSender(token_id: string, operation_id: string, quantity: number,  isolationLevel: string, globalIdInput:string) {
    if (!this.Ctx.Utils.isValidInterOrgTransferRequest()) {
      throw new Error("The request for the inter-org transfer is invalid.")
    }
    const globalTxId =  this.Ctx.Utils.extractGlobalTransactionId(globalIdInput);
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Hold.executeHoldSender(operation_id, quantity, globalTxId, token_asset);
  }
參數:
  • token_id: string – 要燒錄的記號 ID。
  • operation_id: string – 代表要核准之保留要求的唯一作業 ID。
  • quantity: number – 要轉移的保留記號數量。
  • isolationLevel: string – 單元交易的隔離層次,可以是 serializablereadCommitted
  • globalIdInput: string
傳回值範例:
{
      "msg":
        "Account Id: oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a is successfully executed '10' tokens from Operation Id 'hold1'."
    }
executeHoldTokensReceiver
只有具備指定作業 ID 公證角色的使用者才能呼叫此方法。此方法為組織間調動之核准的第二部分。指定的金額會記入接收者的帳戶。
@ExcludeFromPostmanCollection()
  @Validator(yup.string(), yup.string(), yup.number().positive(), yup.string(), yup.string())
  public async executeHoldTokensReceiver(token_id: string, operation_id: string, quantity: number,  isolationLevel: string, globalIdInput:string) {
    if (!this.Ctx.Utils.isValidInterOrgTransferRequest()) {
      throw new Error("The request for the inter-org transfer is invalid.")
    }
    const globalTxId =  this.Ctx.Utils.extractGlobalTransactionId(globalIdInput);
    const token_asset = await this.getTokenObject(token_id);
    return await this.Ctx.Hold.executeHoldReceiver(operation_id, quantity, globalTxId, token_asset);
  }
參數:
  • token_id: string – 要燒錄的記號 ID。
  • operation_id: string – 代表要核准之保留要求的唯一作業 ID。
  • quantity: number – 要轉移的保留記號數量。
  • isolationLevel: string – 單元交易的隔離層次,可以是 serializablereadCommitted
  • globalIdInput: string
傳回值範例:
{
      "msg":
        "Account Id: oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a is successfully executed '10' tokens from Operation Id 'hold1, receiverId oreceiver~72d9bfcf-2c68-4c33-b8c3-fe3374983bf2'."
    }

已修改機密鏈碼的 TypeScript SDK 方法

如果您在使用擴充權杖分類架構標準的權杖規格檔案中包含 confidential: true 參數,Blockchain App Builder 會產生修改過的標準 SDK 方法版本以及其他方法。

isUserTokenAdmin
如果函數的呼叫程式是 Token Admin,此方法會傳回布林值 true。否則,方法會傳回 false
Ctx.Auth.isUserTokenAdmin(org_id: string, user_id: string);
參數:
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
  • user_id – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
    "result": true
}
addTokenAdmin
此方法會將使用者新增為權杖鏈碼的 Token Admin。由於 user_id 值儲存在公用分類帳中,因此請勿使用任何個人識別資訊 (PII) 作為 user_id 值。
Ctx.Admin.addTokenAdmin(org_id: string, user_id: string);
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值範例:
{
  "msg": "Successfully added Token Admin (Org_Id: CentralBank, User_Id: cb1)"
}
removeTokenAdmin
此方法會移除使用者作為記號鏈碼的 Token Admin
Ctx.Admin.removeTokenAdmin(org_id: string, user_id: string);
參數:
  • user_id – 使用者的使用者名稱或電子郵件 ID。
  • org_id – 目前網路組織中使用者的成員服務提供者 (MSP) ID。
傳回值範例:
{"msg": "Successfully removed Admin (Org_Id: Org1MSP, User_Id: User1)"}
getAllTokenAdmins
此方法會傳回鏈碼為 Token Admin 的所有使用者清單。
Ctx.Admin.getAllTokenAdmins();
參數:
傳回值範例:
{"admins":[{"org_id":"Org1MSP","user_id":"admin"}]}
addOrgAdmin
此方法會將使用者新增為組織的 Org Admin。由於 user_id 值儲存在公用分類帳中,因此請勿使用任何個人識別資訊 (PII) 作為 user_id 值。
 Ctx.Admin.addOrgAdmin(org_id: string, user_id: string);
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
    "msg": "Successfully added Org Admin (Org_Id: Org1MSP, User_Id: orgAdmin)"
}
removeOrgAdmin
此方法會移除使用者作為組織的 Org Admin
Ctx.Admin.removeOrgAdmin(org_id: string, user_id: string);
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
  "msg": "Successfully removed Org Admin (Org_Id Org1MSP User_Id orgAdmin)"
}
getAllOrgAdmins
此方法會傳回屬於組織 Org Admin 的所有使用者清單。
Ctx.Admin.getAllOrgAdmins();
參數:
傳回值範例:
{
    "admins": [
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin1"
        },
        {
            "org_id": "Org1MSP",
            "user_id": "orgadmin2"
        }
    ]
}
addTokenAuditor
此方法會將使用者新增為鏈碼的 Token Auditor。由於 user_id 值儲存在公用分類帳中,因此請勿使用任何個人識別資訊 (PII) 作為 user_id 值。
Ctx.Admin.addTokenAuditor(org_id: string, user_id: string);
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,會出現一則訊息,其中包含新增為鏈碼 Token Auditor 的使用者詳細資料。
傳回值範例:
{
  "msg": "Successfully added Token Auditor (Org_Id: CentralBank, User_Id: cb_admin_demo)"
}
removeTokenAuditor
此方法會移除使用者作為鏈碼的 Token Auditor
Ctx.Admin.removeTokenAuditor(org_id: string, user_id: string);
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
           "msg": "Successfully removed Token Auditor (Org_Id: CB, User_Id: cb)"
       }
getAllTokenAuditors
此方法會傳回鏈碼的所有 Token Auditors
this.Ctx.Admin.getAllTokenAuditors();
addOrgAuditor
此方法會將使用者新增為鏈碼的 Org Auditor
Ctx.Admin.addOrgAuditor(org_id: string, user_id: string);
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
           "msg": "Successfully added Org Auditor (Org_Id: CentralBank, User_Id: cb_admin_demo)"
       }
removeOrgAuditor
此方法會移除使用者作為鏈碼的 Org Auditor
this.Ctx.Admin.removeOrgAuditor(org_id: string, user_id: string);
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
{
           "msg": "Successfully removed Org Auditor (Org_Id: CB, User_Id: cb)"
       }
getAllOrgAuditors
此方法會傳回鏈碼的所有 Org Auditors
this.Ctx.Admin.getAllOrgAuditors()
getAllTokens
此方法會傳回狀態資料庫中儲存的所有記號資產。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
this.Ctx.Token.getAllTokens();
參數:
傳回值:
  • 成功時,它會傳回包含所有權杖資產的承諾。發生錯誤時會傳回錯誤訊息。
getDecimals
此方法會傳回小數記號可用的小數位數。如果未指定 divisible 行為,則預設值為 0。
this.Ctx.Token.getDecimals(token_asset)
參數:
  • token_id: string – 記號的 ID。
傳回值範例:
1
history
此方法會傳回指定記號的歷史記錄。
Ctx.Token.history(tokenId: string);
參數:
  • token_id: string – 記號的 ID。
傳回值範例:
[
    {
        "trxId": "0d75f09446a60088afb948c6aca046e261fddcd43df416076201cdc5565f1a35",
        "timeStamp": "2023-09-01T16:48:41.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_desc": "updatedDesc",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    },
    {
        "trxId": "3666344878b043b65d5b821cc79c042ba52aec467618800df5cf14eac69f72fa",
        "timeStamp": "2023-08-31T20:24:55.000Z",
        "value": {
            "assetType": "otoken",
            "token_id": "token",
            "token_name": "fiatmoneytok",
            "token_standard": "ttf+",
            "token_type": "fungible",
            "token_unit": "fractional",
            "behaviors": [
                "divisible",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "roles": {
                "minter_role_name": "minter"
            },
            "mintable": {
                "max_mint_quantity": 1000
            },
            "divisible": {
                "decimal": 2
            }
        }
    }
]
getTokensByName
此方法會傳回具有指定名稱的所有記號資產。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
Ctx.Token.getTokensByName(token_name: string);
參數:
  • token_name: string – 對應至模型之 Token_name 特性的記號名稱。此值為記號的類別名稱。
傳回值範例:
[
 {
    "assetType": "otoken",
    "token_id": "digiCurr101",
    "token_name": "digicur",
    "token_desc": "Digital Currency equiv of dollar",
    "token_type": "fungible",
    "behaviors": [
        "divisible",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "roles": {
        "minter_role_name": "minter"
        "burner_role_name": "burner",
        "notary_role_name": "notary"
    },
    "mintable": {
        "max_mint_quantity": 2000
    },
    "divisible": {
        "decimal": 1
    },
    "currency_name": "DOLLAR",
    "token_to_currency_ratio": 1
 }
]
createAccount
這個方法會為指定的使用者與記號建立帳號。每個在任何時間點都有權杖的使用者都必須有帳戶。
Ctx.Account.createAccount(org_id: string, user_id: string, token_type: string, dailyLimits);
參數:
  • org_id: string – 目前組織中使用者的會員服務提供者 (MSP) ID。ID 必須以數字或英文字母字元為開頭,而且可以包含英文字母、數字以及特殊字元,例如底線 (_)、句號 (.)、@ 符號以及連字號 (-)。
  • user_id: string – 使用者的使用者名稱或電子郵件 ID。ID 必須以數字或英文字母字元為開頭,而且可以包含英文字母、數字以及特殊字元,例如底線 (_)、句號 (.)、@ 符號以及連字號 (-)。
  • token_type: string – 記號的類型,必須是 fungible
  • daily_limits: DailyLimits – 下列類型的 JSON 物件。
    {
         "max_daily_amount": 100000
         "max_daily_transactions": 10000
     }
    在範例中,max_daily_amount 值是每日可交易的記號數量上限,而 max_daily_transactions 值是每日可完成的交易數上限。
傳回值範例:
{
    "bapAccountVersion": 0,
    "assetType": "oaccount",
    "account_id": "oaccount~b53cb2c19c92d1d5c8cb9f6e988e7761c34e03e014e6c4b889565fc0abf46c8a",
    "org_id": "CentralBank",
    "token_type": "fungible",
    "token_id": "",
    "token_name": "",
    "balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_burn_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6"
}
associateToken
此方法會將有趣的記號與帳戶建立關聯。
Ctx.Account.associateToken(account_id: string, token_id: string, custom_account_id?: string);
參數:
  • account_id: string – 帳戶的 ID。
  • token_id: string – 記號的 ID。
  • custom_account_id: string – 若為機密模式,帳戶的銀行帳戶 ID 為唯一的隨機英數字元識別碼。依預設,長度為 14 個字元。
傳回值範例:
{
    "bapAccountVersion": 0,
    "assetType": "oaccount",
    "account_id": "oaccount~b53cb2c19c92d1d5c8cb9f6e988e7761c34e03e014e6c4b889565fc0abf46c8a",
    "org_id": "CentralBank",
    "token_type": "fungible",
    "token_id": "USD",
    "token_name": "cbdc",
    "balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "onhold_burn_balance": "028b72742c8aa9a0395c828fe4f0e46226a3e40d4e731d0b994c8028c8b7bd4df6",
    "application_groups": [
        "CENTRAL_BANK_USERS"
    ]
}
getAllAccounts
這個方法會傳回所有帳號的清單。此方法使用 Berkeley DB SQL RTF 查詢,而且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
this.Ctx.Account.getAllAccounts();
參數:
傳回值範例:
[
    {
        "key": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
        "valueJson": {
            "bapAccountVersion": 3,
            "assetType": "oaccount",
            "account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "028a27c752e9b518d156e61da6589e723b179b6d7351dc34ec92bbb27b783ed1dc",
            "onhold_balance": "02d53a7eda9484bda7252212714f647b70d32663cfa416f93f488ef6b6bc8fb2eb",
            "onhold_burn_balance": "02d53a7eda9484bda7252212714f647b70d32663cfa416f93f488ef6b6bc8fb2eb",
            "application_groups": [
                "application_groups value"
            ]
        }
    },
    {
        "key": "oaccount~1da238c1491c919b151f777a615fb5779032c34b3ef3adeca6afe591bac10aaf",
        "valueJson": {
            "bapAccountVersion": 0,
            "assetType": "oaccount",
            "account_id": "oaccount~1da238c1491c919b151f777a615fb5779032c34b3ef3adeca6afe591bac10aaf",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "020da01cd57249c6470b6dd03c2ee4c49de58c71ccc64f2de1203e835967a0846d",
            "onhold_balance": "020da01cd57249c6470b6dd03c2ee4c49de58c71ccc64f2de1203e835967a0846d",
            "onhold_burn_balance": "020da01cd57249c6470b6dd03c2ee4c49de58c71ccc64f2de1203e835967a0846d",
            "application_groups": [
                "application_groups value"
            ]
        }
    }
]
getAllOrgAccounts
此方法會傳回屬於指定組織的所有記號帳戶清單。
Ctx.Account.getAllOrgAccounts(org_id: string);
參數:
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值範例:
[
    {
        "key": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
        "valueJson": {
            "bapAccountVersion": 2,
            "assetType": "oaccount",
            "account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "18",
            "onhold_balance": "0",
            "onhold_burn_balance": "0",
            "application_groups": [
                "application_groups value"
            ],
            "user_id": "cb",
            "custom_account_id": "1234567jh"
        }
    },
    {
        "key": "oaccount~5e3b5a3306d7ca3f3e3fe7cc27b6ae547e94dba1c5af58a69a771d7a619b6a66",
        "valueJson": {
            "bapAccountVersion": 1,
            "assetType": "oaccount",
            "account_id": "oaccount~5e3b5a3306d7ca3f3e3fe7cc27b6ae547e94dba1c5af58a69a771d7a619b6a66",
            "org_id": "CentralBank",
            "token_type": "fungible",
            "token_id": "token",
            "token_name": "cbdc",
            "balance": "22",
            "onhold_balance": "0",
            "onhold_burn_balance": "0",
            "application_groups": [
                "application_groups value"
            ],
            "user_id": "cb1",
            "custom_account_id": "1234567jh"
        }
    }
]
getAccountsByUser
此方法會傳回指定使用者與組織之所有帳戶 ID 的清單。
Ctx.Account.getAccountsByUser(org_id: string, user_id: string);
參數:
  • org_id string – 組織的成員服務提供者 (MSP) ID。
  • user_id string – 使用者的使用者名稱或電子郵件 ID。
傳回值範例:
[
    {
        "bapAccountVersion": 2,
        "assetType": "oaccount",
        "user_id": "cb",
        "custom_account_id": "1234567jh",
        "account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
        "org_id": "CentralBank",
        "token_type": "fungible",
        "token_id": "token",
        "token_name": "cbdc",
        "balance": "18",
        "onhold_balance": "0",
        "onhold_burn_balance": "0",
        "application_groups": [
            "application_groups value"
        ]
    }
]
getUserByAccountId
此方法會傳回指定帳戶的使用者詳細資料。
this.Ctx.Account.getUserByAccountId(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
    "token_id": "USD",
    "org_id": "CentralBank",
    "user_id": "cb_admin_demo",
    "custom_account_id": "10101234000123"
}
getAccountWithStatus
此方法會傳回指定使用者和記號的帳戶詳細資訊。
Ctx.Account.getAccountWithStatus(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
    "bapAccountVersion": 2,
    "assetType": "oaccount",
    "user_id": "cb",
    "custom_account_id": "1234567jh",
    "status": "active",
    "account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
    "org_id": "CentralBank",
    "token_type": "fungible",
    "token_id": "token",
    "token_name": "cbdc",
    "balance": "18",
    "onhold_balance": "0",
    "onhold_burn_balance": "0",
    "application_groups": [
        "application_groups value"
    ]
}
getAccountDetailsByCustomAccountId
此方法會傳回指定組織與帳戶 ID 的所有記號帳戶詳細資料。
Ctx.Account.getAccountDetailsByCustomAccountId(custom_account_id: string, org_id: string)
參數:
  • custom_account_id: string – 帳戶的銀行帳戶 ID,唯一的隨機英數字元識別碼。
  • org_id string – 組織的成員服務提供者 (MSP) ID。
傳回值範例:
[
    {
        "bapAccountVersion": 0,
        "assetType": "oaccount",
        "account_id": "oaccount~c44ffac4c46718e9744cb0aae2016d26a87a5bef5e2d1c0d1abc7d8782f0ba61",
        "org_id": "CentralBank",
        "token_type": "fungible",
        "token_id": "USD",
        "token_name": "cbdc",
        "balance": "0",
        "onhold_balance": "0",
        "onhold_burn_balance": "0",
        "application_groups": [
            "SYSTEM_ADMINS"
        ],
        "user_id": "cb_admin_demo",
        "custom_account_id": "10101234000123"
    }
]
getAccountBalance
此方法會傳回指定帳戶的帳戶餘額。
Ctx.Account.getAccountBalance(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
    "msg": "Current Balance is: 100",
    "user_balance": 100
}
getAccountStatus
此方法會取得權杖帳戶的目前狀態。
Ctx.AccountStatus.getAccountStatus(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
    "assetType": "oaccountStatus",
    "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "status": "active"
}
history (Account Status)
此方法會取得帳戶狀態的歷史記錄。
Ctx.AccountStatus.history(status_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
[
  {
    "trxId": "d5c6d6f601257ba9b6edaf5b7660f00adc13c37d5321b8f7d3a35afab2e93e63",
    "timeStamp": "2025-12-02T10:39:14.000Z",
    "value": {
      "assetType": "oaccountStatus",
      "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
      "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "status": "suspended"
    }
  },
  {
    "trxId": "e6c850cfa084dc20ad95fb2bb8165eef3a3bd62a0ac867cccee57c2003125183",
    "timeStamp": "2025-12-02T10:37:50.000Z",
    "value": {
      "assetType": "oaccountStatus",
      "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
      "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
      "status": "active"
    }
  }
]
activateAccount
這個方法會啟用記號帳戶。無法啟用已刪除的帳戶。
Ctx.Account.activateAccount(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
  "assetType": "oaccountStatus",
  "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
  "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
  "status": "active"
}
suspendAccount
這個方法會暫停一個記號帳戶。帳戶暫停之後,您就無法完成任何更新帳戶的作業。刪除的帳戶無法暫停。
Ctx.Account.suspendAccount(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
    "assetType": "oaccountStatus",
    "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
    "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
    "status": "suspended"
}
deleteAccount
此方法會刪除記號帳戶。帳戶刪除後,您就無法完成任何更新帳戶的作業。刪除的帳戶處於最終狀態,無法變更為任何其他狀態。若要刪除科目,科目餘額與保留餘額必須為零。
Ctx.Account.deleteAccount(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
  "assetType": "oaccountStatus",
  "status_id": "oaccountStatus~5a0b0d8b1c6433af9fedfe0d9e6580e7cf6b6bb62a0de6267aaf79f79d5e96d7",
  "account_id": "oaccount~1c568151c4acbcd1bd265c766c677145760a61c47fc8a3ba681a4cfbe287f9c1",
  "status": "deleted"
}
setMaxDailyAmount
此方法會設定指定帳戶的 max_daily_amount 值。
Ctx.Account.setMaxDailyAmount(account_id: string, max_daily_amount?: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • max_daily_amount?: string – (選擇性) 使用者每日可傳輸的權杖數量上限。若未指定,使用者可以每日移轉任何數量的權杖。
傳回值範例:
{
           "msg": "Successfully set max daily amount for account id oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a to 1000000"
       }
setMaxDailyTransactionCount
此方法會設定指定帳戶的 max_daily_transactions 值。
Ctx.Account.setMaxDailyTransactionCount(account_id: string, max_daily_transactions?: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • max_daily_transactions?: string – (選擇性) 使用者每日可完成的交易數上限。若未指定,使用者可以每天完成任何數量的交易。
傳回值範例:
{
            "msg": "Successfully set max daily transactions for account id oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a to 100000"
        }
getMaxDailyAmount
此方法會取得指定帳戶的 max_daily_amount 值 (每日可移轉的金額上限)。
Ctx.Account.getMaxDailyAmount(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
           "max_daily_amount": "10000"
       }
getMaxDailyTransactionCount
此方法會取得指定帳戶的 max_daily_transactions 值 (每日允許的交易數上限)。
Ctx.Account.getMaxDailyTransactionCount(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
           "max_daily_transactions": "100"
       }
getAccountOnHoldBalance
此方法會傳回指定帳戶的保留結餘。
Ctx.Account.getAccountOnHoldBalance(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
           "msg": "Total Holding Balance is: 0",
           "holding_balance": 0
       }
addRoleMember
此方法會將角色新增至指定的帳戶。
Ctx.Token.addRoleMember(role: string, account_id: string, token_asset);
參數:
  • account_id: number – 要新增角色的帳戶 ID。
  • role: string – 要新增至指定使用者的角色名稱。
  • token_asset: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
傳回值範例:
{
     "msg": "Successfully added role 'notary' to Account Id: oaccount~2eb5f8a9bc561f8f41a4ea3be9511958cc6684ef14f2337ca396efc301b627d8"
}
removeRoleMember
此方法會從指定的帳戶中移除角色。
Ctx.Token.removeRoleMember(role: string, account_id: string, token_asset);
參數:
  • account_id: number – 從中移除角色的帳戶 ID。
  • role: string – 要從指定使用者移除的角色名稱。
  • token_asset: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
傳回值範例:
{
   "msg": "Successfully removed role 'notary' from Account Id: oaccount~2eb5f8a9bc561f8f41a4ea3be9511958cc6684ef14f2337ca396efc301b627d8"
}
getAccountsByRole
此方法會傳回指定角色和記號的所有帳戶清單。
Ctx.Role.getAccountsByRole(token_id: string, role: string);
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
傳回值範例:
{
           "accounts": [
               "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75"
           ]
       }
getOrgAccountsByRole
此方法會傳回指定組織中具有指定角色之所有帳戶的相關資訊。
Ctx.Role.getOrgAccountsByRole(token_id: string, role: string, org_id: string);
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值範例:
{
           "accounts": [
               "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75"
           ]
       }
getUsersByRole
此方法會傳回指定角色和記號之所有使用者的清單。
Ctx.Role.getUsersByRole(token_id: string, role: string);
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要搜尋的角色名稱。
傳回值範例:
{
          "users": [
              {
                  "token_id": "token",
                  "org_id": "CentralBank"
              }
          ]
      }
getOrgUsersByRole
此方法會傳回指定組織中具有指定角色之所有使用者的相關資訊。
 Ctx.Role.getOrgUsersByRole(token_id: string, role: string, org_id: string);
參數:
  • token_id: string – 記號的 ID。
  • role: string – 要檢查的角色名稱。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
傳回值範例:
{
           "users": [
               {
                   "token_id": "token",
                   "org_id": "CentralBank",
                   "user_id": "cb1",
                   "custom_account_id": "1234567jh"
               }
           ]
       }
isInRole
此方法指示使用者是否具有指定的角色。
Ctx.Token.isInRole(role: string, account_id: string, token_asset)
參數:
  • account_id: number – 權杖帳戶的唯一 ID。
  • role: string – 要檢查的角色名稱。
  • token_asset: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
傳回值範例:
{
           "result": "true"
       }
getAccountTransactionHistory
此方法會傳回指定帳戶的交易記錄詳細資料陣列。
Ctx.Account.getAccountTransactionHistory(account_id: string)
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
[
    {
        "transaction_id": "otransaction~4514aa229ebcc4d2fedcaa47c4301615e30c4a9bae45cf0256a5b80d75b3697a",
        "transacted_amount": 1000,
        "timestamp": "2025-08-25T13:20:50.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "APPROVE_MINT",
        "balance": 21000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~1982f73495060e0eef4d78282a91c41e27e8c95572739b0677a1e404a0d20aa9",
        "transacted_amount": 200,
        "timestamp": "2025-08-25T13:12:43.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 20000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~fedd714cf1509f7517819d7cd4c0921d0b2f5d1ff6a25dcb08ab411defd6b5f3",
        "transacted_amount": 2000,
        "timestamp": "2025-08-21T05:23:25.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 20000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~f33b47234f3ee0b636962c8c31c01d06523b789ca16b3b342d5080b71268bcc3",
        "transacted_amount": 1000,
        "timestamp": "2025-08-21T05:23:07.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 20000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~cf934527149bc24f62a8ddeeea7f74a19a0f84d8f161535a771be49d2520d5b3",
        "transacted_amount": 10000,
        "timestamp": "2025-08-13T06:12:41.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "APPROVE_MINT",
        "balance": 20000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~f5c0e11ca61d9adc843658929e6de2a738ad586304f9e020f75bf4aac5e42a2c",
        "transacted_amount": 10000,
        "timestamp": "2025-08-13T06:12:04.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 10000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~862aa9d9e877d3ea209b87299ab5b12c13ed5ce43d1cf1b934043c1dd02f58f6",
        "transacted_amount": 50000,
        "timestamp": "2025-08-12T21:04:22.000Z",
        "token_id": "USD",
        "category": "transfer",
        "transacted_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "transaction_type": "DEBIT",
        "balance": 10000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~8a74c6d87ca74a613aab9db5d40386f8d5b534f9800503af8ca27e8946d7616d",
        "transacted_amount": 40000,
        "timestamp": "2025-08-12T21:01:27.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REJECT_MINT",
        "balance": 60000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~28ac66ba33f7ad0648448964b2b74525c9e3f0c9908c7a0484690b9baa56c2db",
        "transacted_amount": 30000,
        "timestamp": "2025-08-12T21:01:16.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "APPROVE_MINT",
        "balance": 60000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~7e32ad8f365ff59814e112f27602f30ab599fb9c1638784496c66a61a6277c22",
        "transacted_amount": 20000,
        "timestamp": "2025-08-12T21:01:05.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "APPROVE_MINT",
        "balance": 30000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~1477050bb9e55f4f471872b31fce0d2097f5d5e57d89a842070df5e36d7ab0da",
        "transacted_amount": 10000,
        "timestamp": "2025-08-12T21:01:03.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "APPROVE_MINT",
        "balance": 10000,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~0e76c6931b7ee134e967e847d9730b867a0fd191d39697d83d36dd15745c02e3",
        "transacted_amount": 40000,
        "timestamp": "2025-08-12T21:00:20.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 0,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~07bbf9c190694371626da59ded5d87434d26f612891e13bb15bdd28f6086e760",
        "transacted_amount": 30000,
        "timestamp": "2025-08-12T21:00:01.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 0,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~8721175c6cbbce17b6c4bb6a444e475d07f52352dfd0d990679f342215153513",
        "transacted_amount": 20000,
        "timestamp": "2025-08-12T20:59:41.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 0,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~dc24c24d43a6525e807a39edcf8c6a2b6ccb81f0d755958f509509687eacee84",
        "transacted_amount": 10000,
        "timestamp": "2025-08-12T20:59:13.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "REQUEST_MINT",
        "balance": 0,
        "onhold_balance": 0
    },
    {
        "transaction_id": "otransaction~396e6ca5a11a9609632d0864026409d46a708fb95e3e21b39fa5f3fb78f90872",
        "transacted_amount": 0,
        "timestamp": "2025-08-12T20:43:20.000Z",
        "token_id": "",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transaction_type": "CREATE_ACCOUNT",
        "balance": 0,
        "onhold_balance": 0
    }
]
getAccountTransactionHistoryWithFilters
此方法會傳回指定帳戶的交易記錄詳細資料陣列。只有在連線至遠端 Oracle Blockchain Platform 網路時才能呼叫此方法。
Ctx.Account.getAccountTransactionHistoryWithFilters(account_id: string, org_id: string, filters);
參數:
  • account_id: string – 帳戶的 ID。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
傳回值範例:
[
             {
                "transaction_id": "otransaction~ccc2c2e89ab7887af4fdad3dc9918ea057a8aa834a0ed8d0f23271049f084952",
                "transacted_amount": 8,
                "timestamp": "2025-08-20T23:22:53.000Z",
                "token_id": "token",
                "category": "category value",
                "description": "description value",
                "holding_id": "ohold~cbdc~token~hold1",
                "to_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "to_org_id": "Org1",
                "to_user_id": "cb",
                "to_custom_account_id": "1234567jh",
                "from_account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "from_org_id": "CentralBank",
                "from_user_id": "Not Available",
                "from_custom_account_id": "Not Available",
                "transacted_account": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "transaction_type": "CREDIT",
                "balance": 18,
                "onhold_balance": 0,
                "transacted_org_id": "CentralBank",
                "transacted_user_id": "Not Available",
                "transacted_custom_account_id": "Not Available"
            },
            {
                "transaction_id": "otransaction~6c0452a58f13db93f1c308d60eab1fde6c911921b350c0bbbe0ce7dab394721d",
                "transacted_amount": 10,
                "timestamp": "2025-08-20T23:04:53.000Z",
                "token_id": "token",
                "category": "category value",
                "description": "description value",
                "holding_id": "ohold~cbdc~token~hold1",
                "to_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "to_org_id": "Org1",
                "to_user_id": "cb",
                "to_custom_account_id": "1234567jh",
                "from_account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "from_org_id": "CentralBank",
                "from_user_id": "Not Available",
                "from_custom_account_id": "Not Available",
                "transacted_account": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
                "transaction_type": "CREDIT",
                "balance": 10,
                "onhold_balance": 0,
                "transacted_org_id": "CentralBank",
                "transacted_user_id": "Not Available",
                "transacted_custom_account_id": "Not Available"
            },
            .
            .
            .
            .
            {
                "transaction_id": "otransaction~df98e24a3b90661b54b54289b600b13a1051c922db0a4d20e3705a9820ae9c20",
                "transacted_amount": 0,
                "timestamp": "2025-08-20T22:55:09.000Z",
                "category": "",
                "description": "",
                "from_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "from_org_id": "Org1",
                "from_user_id": "cb",
                "from_custom_account_id": "1234567jh",
                "transacted_account": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "transaction_type": "CREATE_ACCOUNT",
                "balance": 0,
                "onhold_balance": 0,
                "transacted_org_id": "Org1",
                "transacted_user_id": "cb",
                "transacted_custom_account_id": "1234567jh"
            }
 ]
getAccountTrxHistoryWithFiltersFromRichHistDB
此方法會從 RTF 記錄資料庫傳回異動記錄詳細資料的陣列。
Ctx.Account.getAccountTrxHistoryWithFiltersFromRichHistDB(account_id: string, org_id: string, custom_endpoint: string, bearer_token: string, filters);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
  • org_id: string – 組織的成員服務提供者 (MSP) ID。
  • custom_endpoint – Rich History 資料庫的 RESTful 服務端點。
  • bearer_token – RESTful 服務端點的存取授權記號。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
傳回值範例:
[
    {
        "transaction_id": "otransaction~3140569a4ecb3c3f141cc2468fe21276640b7fd79013d951d9104b79072d8f9c",
        "transacted_amount": 200,
        "timestamp": "2025-08-25T13:16:55.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_officer_demo",
        "to_custom_account_id": "20200222221111",
        "from_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "from_org_id": "CentralBank",
        "from_user_id": "cb_issuer_demo",
        "from_custom_account_id": "10109999001234",
        "transaction_type": "EXECUTEHOLD",
        "category": "transfer",
        "balance": 26800,
        "onhold_balance": 300
    },
    {
        "transaction_id": "otransaction~5112f576c94c2d23c342479bfa37e34612414b3258a64b43cf51b920f4ff5868",
        "transacted_amount": 5000,
        "timestamp": "2025-08-12T21:05:02.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98",
        "transacted_org_id": "CentralBank",
        "transacted_user_id": "cb_retirer_demo",
        "transacted_custom_account_id": "10109999006543",
        "to_account": "oaccount~cea6080858337b1575d6a76ed0bd07a0eacd8871e3f2f7f793729a0e4b0e8e98",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_retirer_demo",
        "to_custom_account_id": "10109999006543",
        "from_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "from_org_id": "CentralBank",
        "from_user_id": "cb_issuer_demo",
        "from_custom_account_id": "10109999001234",
        "transaction_type": "DEBIT",
        "category": "burn",
        "balance": 45000,
        "onhold_balance": 0
    },
    .  
    .
    .
    .
    {
        "transaction_id": "otransaction~862aa9d9e877d3ea209b87299ab5b12c13ed5ce43d1cf1b934043c1dd02f58f6",
        "transacted_amount": 50000,
        "timestamp": "2025-08-12T21:04:22.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "transacted_org_id": "CentralBank",
        "transacted_user_id": "cb__creator_demo",
        "transacted_custom_account_id": "10105678004567",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_issuer_demo",
        "to_custom_account_id": "10109999001234",
        "from_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "from_org_id": "CentralBank",
        "from_user_id": "cb__creator_demo",
        "from_custom_account_id": "10105678004567",
        "transaction_type": "CREDIT",
        "category": "transfer",
        "balance": 50000,
        "onhold_balance": 0
    }
]
getOrgAccountsTrxHistoryWithFiltersFromRichHistDB
此方法會從 RTF 記錄資料庫傳回指定組織的異動記錄詳細資料陣列。
Ctx.Account.getOrgAccountsTrxHistoryWithFiltersFromRichHistDB(org_id: string, custom_endpoint: string, bearer_token: string, filters);
參數:
  • org_id string – 組織的成員服務提供者 (MSP) ID。
  • custom_endpoint – Rich History 資料庫的 RESTful 服務端點。
  • bearer_token – RESTful 服務端點的存取授權記號。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
傳回值範例:
[
    {
        "transaction_id": "otransaction~4793f3907eefce2f9fca7ef107405b0f116efb3afbf83fa0e61fe763690c8235",
        "transacted_amount": 100,
        "timestamp": "2025-08-25T13:47:56.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "from_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_officer_demo",
        "from_custom_account_id": "20200222221111",
        "transaction_type": "ONHOLD",
        "holding_id": "ohold~cbdc~USD~2ac01689",
        "category": "issuance"
    },
    {
        "transaction_id": "otransaction~5177f7560d32838242a26ac74f2a90c6ff9b47aae0d0988f28d9b4cf7e27c097",
        "transacted_amount": 10,
        "timestamp": "2025-08-25T13:22:23.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_user1_demo",
        "transacted_custom_account_id": "20200198765432",
        "to_account": "oaccount~d08ff55a040d5e5dcf406009bab1b3398e06c374356efb1bddbf2f17fc37f949",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_user2_demo",
        "to_custom_account_id": "20200211112222",
        "from_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_user1_demo",
        "from_custom_account_id": "20200198765432",
        "transaction_type": "CREDIT",
        "holding_id": "ohold~cbdc~USD~454f4bf6",
        "category": "transfer"
    },
    .
    .
    .
    .
    {
        "transaction_id": "otransaction~b7c97d737fb978651c9132276ab677c0bcf795b9db13d0d39cba5243615c7389",
        "transacted_amount": 10,
        "timestamp": "2025-08-21T08:46:09.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_user1_demo",
        "to_custom_account_id": "20200198765432",
        "from_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_officer_demo",
        "from_custom_account_id": "20200222221111",
        "transaction_type": "ONHOLD",
        "holding_id": "ohold~cbdc~USD~4fbbb846",
        "category": "transfer"
    }
]
getAllAccountsTrxHistoryWithFiltersFromRichHistDB
此方法會傳回 RTF 記錄資料庫中所有組織的異動記錄詳細資料陣列。
Ctx.Account.getAllAccountsTrxHistoryWithFiltersFromRichHistDB(custom_endpoint: string, bearer_token: string, filters);
參數:
  • org_id string – 組織的成員服務提供者 (MSP) ID。
  • custom_endpoint – Rich History 資料庫的 RESTful 服務端點。
  • bearer_token – RESTful 服務端點的存取授權記號。
  • filters: string – 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
傳回值範例:
[
    {
        "transaction_id": "otransaction~62eb436be7c29fc2ed9cae221e874d9a31b163fa10374e7da09bf5e09a96c3ff",
        "transacted_amount": 10000,
        "timestamp": "2025-08-25T13:57:58.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "transacted_org_id": "CentralBank",
        "transacted_user_id": "cb_issuer_demo",
        "transacted_custom_account_id": "10109999001234",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_issuer_demo",
        "to_custom_account_id": "10109999001234",
        "from_account": "oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41",
        "from_org_id": "CentralBank",
        "from_user_id": "cb__creator_demo",
        "from_custom_account_id": "10105678004567",
        "transaction_type": "DEBIT",
        "category": "issuance"
    },
    {
        "transaction_id": "otransaction~4793f3907eefce2f9fca7ef107405b0f116efb3afbf83fa0e61fe763690c8235",
        "transacted_amount": 100,
        "timestamp": "2025-08-25T13:47:56.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_officer_demo",
        "transacted_custom_account_id": "20200222221111",
        "to_account": "oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a",
        "to_org_id": "CentralBank",
        "to_user_id": "cb_issuer_demo",
        "to_custom_account_id": "10109999001234",
        "from_account": "oaccount~76687c724ddbc2d6e6664d9618b2bf1c2a9fe10f84887462447e4caba6aaaff3",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_officer_demo",
        "from_custom_account_id": "20200222221111",
        "transaction_type": "ONHOLD",
        "holding_id": "ohold~cbdc~USD~2ac01689",
        "category": "issuance"
    },
    .
    .
    .
    .
    {
        "transaction_id": "otransaction~5177f7560d32838242a26ac74f2a90c6ff9b47aae0d0988f28d9b4cf7e27c097",
        "transacted_amount": 10,
        "timestamp": "2025-08-25T13:22:23.000Z",
        "token_id": "USD",
        "transacted_account": "oaccount~d08ff55a040d5e5dcf406009bab1b3398e06c374356efb1bddbf2f17fc37f949",
        "transacted_org_id": "Org1",
        "transacted_user_id": "fi1_org_user2_demo",
        "transacted_custom_account_id": "20200211112222",
        "to_account": "oaccount~d08ff55a040d5e5dcf406009bab1b3398e06c374356efb1bddbf2f17fc37f949",
        "to_org_id": "Org1",
        "to_user_id": "fi1_org_user2_demo",
        "to_custom_account_id": "20200211112222",
        "from_account": "oaccount~1e31495a0c149b08cb9d02bdcac5e83d88c0f1557d954dda12bb807d7f6fc111",
        "from_org_id": "Org1",
        "from_user_id": "fi1_org_user1_demo",
        "from_custom_account_id": "20200198765432",
        "transaction_type": "EXECUTEHOLD",
        "holding_id": "ohold~cbdc~USD~454f4bf6",
        "category": "transfer"
    }
]
consolidateRunningBalanceInTransactions
此方法會計算執行中科目餘額,並將更新的值儲存在交易索引鍵 / 值組中。一般而言,系統管理員會使用 REST 代理主機排程器呼叫此方法。
Ctx.Transaction.consolidateRunningBalanceInTransactions(save: boolean);
傳回值範例:
{ msg: "Successfully updated account running balance for pending transactions."}
processSendersAndReceivers
此方法會計算並更新在組織間移轉期間建立的寄件人與接收者索引鍵 / 值組中分攤的變數替代字科目餘額,然後刪除不再使用的寄件人與接收者索引鍵 / 值組。一般而言,系統管理員會使用 REST 代理主機排程器呼叫此方法。
Ctx.Account.processSendersAndReceivers(save: boolean);
傳回值範例:
{ msg: "Successfully updated balance for accounts from pending receivers."}
deleteTransactions
此方法會從狀態資料庫刪除較舊的交易。
Ctx.Transaction.deleteTransactions(time_to_expiration: Date);
參數:
  • time_to_expiration: Date – 表示何時刪除交易的時戳。將刪除早於指定時間的交易資產。
傳回值範例:
{
    "msg": "Successfully deleted transaction older than date: Thu Aug 19 2025 11:19:36 GMT+0000 (Coordinated Universal Time).",
    "transactions": [
           "otransaction~ec3366dd48b4ce2838f820f2f138648e6e55a07226713e59b411ff31b0d21058"
     ]
}
getTransactionById
此方法會傳回 Transaction 資產的歷史記錄。
Ctx.Transaction.getTransactionById(transaction_id: string);
參數:
  • transaction_id string – 交易資產的 ID。
傳回值範例:
{
    "transaction_id": "otransaction~6523597253e45b3c976aecdc54e2c6316d0a4f88ad5d7f3fff48c69213e4375a",
    "history": [
        {
            "trxId": "6523597253e45b3c976aecdc54e2c6316d0a4f88ad5d7f3fff48c69213e4375a",
            "timeStamp": "2025-08-20T23:21:45.000Z",
            "value": {
                "assetType": "otransaction",
                "transaction_id": "otransaction~6523597253e45b3c976aecdc54e2c6316d0a4f88ad5d7f3fff48c69213e4375a",
                "token_id": "token",
                "from_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
                "to_account_id": "oaccount~5e3b5a3306d7ca3f3e3fe7cc27b6ae547e94dba1c5af58a69a771d7a619b6a66",
                "transaction_type": "TRANSFER",
                "amount": 22,
                "timestamp": "2025-08-20T23:21:45.000Z",
                "number_of_sub_transactions": 0,
                "holding_id": "",
                "sub_transaction": "false",
                "category": "category value",
                "description": "description value"
            }
        }
    ],
    "sub_transactions": []
}
issueTokens
Minters 可以呼叫此方法來建立指定數量的記號。
this.Ctx.Token.mint(quantity, token_asset, info_details)
參數:
  • token_id: string – 記號的 ID。
  • quantity – 記號數目為 mint。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
          "msg": "Successfully minted 1000 tokens to Account Id: oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41"
      }
getTotalMintedTokens
此方法會傳回所提示的記號總數。
Ctx.Token.getTotalMintedTokens(token_asset);
參數:
  • token_asset: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
傳回值範例:
{
    "msg": "Total minted token for Token Id: USD is 910 tokens.",
    "quantity": 910
}
getNetTokens
此方法會傳回系統中可用記號的淨數量。網路記號是記號燒錄後剩餘的記號數量。方程式形式:淨記號 = 總鑄幣記號 - 總燃燒記號。如果沒有燒錄記號,則網路記號的數目會等於總鑄幣的記號。
Ctx.Token.getNetTokens(token_asset);
參數:
  • token_asset: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
傳回值範例:
{
    "msg": "Net supply of token for Token Id: USD is 878 tokens.",
    "quantity": 878
}
transferTokens
此方法會將記號從呼叫程式轉移至指定的帳戶。方法的呼叫程式必須要有帳戶。數量必須在規格檔案中 divisible 行為的 decimal 參數所指定的小數值內。
this.Ctx.Token.transfer(to_account_id: string, quantity, token_asset, info_details);
參數:
  • to_account_id: string – 接收者 (受款人) 的帳戶 ID。
  • quantity: number – 要傳輸的記號數目。
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
          "msg": "Successfully transferred 10000 tokens from account id: oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41  to account id: oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a."
      }
hold
礦工使用此方法將要求傳送給礦工公證人,以建立指定數量的權杖。指定公證人帳戶負責完成或解除保留。
Ctx.Hold.hold(operation_id: string, to_account_id: string, notary_account_id: string, quantity: number, time_to_expiration: Date, token, type: HoldOperationType, info_details?: InfoDetails)
參數:
  • operation_id: string – 識別保留作業的唯一 ID。通常此 ID 會由用戶端應用程式傳送。
  • to_account_id: string – 收件人帳戶的 ID。
  • notary__account_id: string – 公證帳戶的 ID。
  • quantity: number – 保留的記號總數。
  • time_to_expiration: Date – 保留到期前的持續時間。為永久保留指定 0 。否則,請使用 RFC-3339 格式。例如,2021-06-02T12
  • token: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
  • type: HoldOperationType – 要要求的保留作業類型。它必須是三個可能值之一:MINTBURNTRANSFER
  • info_details: JSON – 指定要求之類別 (category) 和描述 (description) 的物件。

    如果您使用 Visual Studio Code 與 CLI 或 Postman 集合,請以不同的格式指定 info_details 參數。

    Visual Studio 程式碼:{ "category": "category value", "description": "description value" }

    CLI / Postman: "{\"category\":\"category value\",\"description\":\"description value\"}"

傳回值範例:
{
           "msg": "AccountId oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41 has successfully submitted request to mint 200 tokens"
       }
executeHold
Notaries 可以呼叫此方法來核准保留作業,這可以是下列三種類型之一:薄荷、燒錄或傳輸。
Ctx.Hold. executeHold(operation_id: string, token, operation_type: HoldOperationType, quantity? :number)
參數:
  • operation_type: HoldOperationType – 要核准的保留作業類型。它必須是三個可能值之一:MINTBURNTRANSFER
  • quantity: number – (選擇性) 僅適用於移轉作業,已核准要移轉給收件人的金額。
  • token: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
  • operation_id: string – 要求的唯一 ID。
傳回值範例:
{
           "msg": "Successfully minted 1000 tokens to Account Id: oaccount~da6e14466a0ba9b48ebc18fa672addb92dffc371bf953c3229a95b2ff2d9cd41"
       }
releaseHold
Notaries 可以呼叫此方法來拒絕保留作業,這可以是下列三種類型之一:薄荷、燒錄或傳輸。
Ctx.Hold.releaseHold(operation_id: string, token, operation_type: HoldOperationType)
參數:
  • operation_type: HoldOperationType – 要拒絕的保留作業類型。它必須是三個可能值之一:MINTBURNTRANSFER
  • token: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
  • operation_id: string – 要求的唯一 ID。
傳回值範例:
{
           "msg": "Successfully rejected mint request with Operation Id '89ce' to mint 2000 tokens of token id USD"
       }
getOnHoldIds
此方法會傳回指定帳戶之所有持有 ID 的清單。
Ctx.Account.getOnHoldIds(account_id: string);
參數:
  • account_id: string – 權杖帳戶的唯一 ID。
傳回值範例:
{
           "msg": "Holding Ids are: ",
           "holding_ids": ["ohold~cbdc~token~hold1"]
       }
getOnHoldDetailsWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留異動明細。
Ctx.Hold.getOnHoldDetailsWithOperationId(token_id: string, operation_id: string);
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。
傳回值範例:
{
          "assetType": "ohold",
          "holding_id": "ohold~cbdc~token~hold1",
          "operation_id": "hold1",
          "token_name": "cbdc",
          "from_org_id": "CentralBank",
          "operation_type": "transfer",
          "status": "approved",
          "from_account_id": "oaccount~5abb4155f4b245bb1732321e3174ac81999b03495b5c74f8e1f270bafbadef75",
          "to_account_id": "oaccount~22776ada3efff6aaf4c68c204c1f063b139adfa1bca79ed53199117c34036cfc",
          "notary_account_id": "oaccount~1da238c1491c919b151f777a615fb5779032c34b3ef3adeca6afe591bac10aaf",
          "token_id": "token",
          "quantity": "0",
          "time_to_expiration": "2029-01-04T00:00:00.000Z",
          "category": "category value",
          "description": "description value"
      }
getOnHoldBalanceWithOperationId
此方法會傳回指定作業 ID 與變數替代字的保留餘額。任何人都可以呼叫這個方法。
Ctx.Hold.getOnHoldBalanceWithOperationId(token_id: string, operation_id: string);
參數:
  • token_id: string – 記號的 ID。
  • operation_id: string – 識別保留作業的唯一 ID。
傳回值範例:
{
           "msg": "Current Holding Balance of Operation 'hold1' for token 'token' is: 0",
           "holding_balance": 0
       }

TypeScript 組織間移轉的 SDK 方法

組織間移轉有兩個部分:先從寄件者借記金額,再將金額記入接收者。下列兩個 API 會使用 Oracle Blockchain Platform REST 代理主機的雙階段確認 API 一起呼叫為單元交易。機密傳輸是以這種方式進行,因為這兩個組織的專用資料收集是不同的,無法在單一交易中存取。

executeHoldTokensSender
只有具備指定作業 ID 公證角色的使用者才能呼叫此方法。此方法為組織間調動核准的第一個部分。指定金額會從寄件者的帳戶中扣除。
Ctx.Hold.executeHoldSender(operation_id: string, quantity, globalTxId: string, token: any);
參數:
  • token: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
  • operation_id: string – 代表要核准之保留要求的唯一作業 ID。
  • quantity: number – 要轉移的保留記號數量。
  • globalTxid: string – REST 代理主機針對兩階段確認要求所產生的全域交易 ID,在此情況下,會作為連結組織間移轉中借方與貸方作業的通用參考。
傳回值範例:
{
      "msg":
        "Account Id: oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a is successfully executed '10' tokens from Operation Id 'hold1'."
    }
executeHoldTokensReceiver
只有具備指定作業 ID 公證角色的使用者才能呼叫此方法。此方法為組織間調動之核准的第二部分。指定的金額會記入接收者的帳戶。
Ctx.Hold.executeHoldReceiver(operation_id: string, quantity, globalTxId: string, token: any);
參數:
  • token: any – 作為參數傳遞的記號資產。模型檔案中描述記號資產的特性。
  • operation_id: string – 代表要核准之保留要求的唯一作業 ID。
  • quantity: number – 要轉移的保留記號數量。
  • globalTxid: string – REST 代理主機針對兩階段確認要求所產生的全域交易 ID,在此情況下,會作為連結組織間移轉中借方與貸方作業的通用參考。
傳回值範例:
{
      "msg":
        "Account Id: oaccount~68d67712f500e9dac8c314c19744003a993250271d960e9b0d25267bb18dfe9a is successfully executed '10' tokens from Operation Id 'hold1, receiverId oreceiver~72d9bfcf-2c68-4c33-b8c3-fe3374983bf2'."
    }