預先定義的檢視表

Oracle Blockchain Platform Digital Assets Edition 提供下列預先定義的資料庫檢視。

ACCOUNT_TRANSACTION_VIEW
此檢視提供每個帳戶的統一交易歷史記錄,擷取交易的借方 (from_account_id) 和貸方 (to_account_id) 兩側。您可以使用此檢視來查詢連結至帳戶的所有交易,而無需掃描原始鏈碼狀態資料。
機密 SQL 查詢、系統擁有者:
CREATE VIEW ACCOUNT_TRANSACTION_VIEW as
        SELECT
            tx."VALUEJSON".from_account_id AS "KEY",
            tx."VALUEJSON".transaction_id AS "TRANSACTION_ID",
            tx."VALUEJSON" AS "TRANSACTION_DETAILS",
            COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO,
            COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO
        FROM "<obpInstanceName>_<channelName>_state" tx
        WHERE tx."CHAINCODEID" = '<chaincodeName>'
        AND tx."VALUEJSON".assetType = 'otransaction'
        AND tx.KEY NOT LIKE '_obp2pc_'
        AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_RECEIVER', 'CREATE_ACCOUNT')
        AND tx."VALUEJSON".from_account_id IS NOT NULL
         
        UNION ALL
        SELECT
            tx."VALUEJSON".to_account_id AS "KEY",
            tx."VALUEJSON".transaction_id AS "TRANSACTION_ID",
            tx."VALUEJSON" AS "TRANSACTION_DETAILS",
            COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO,
            COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO
        FROM "<obpInstanceName>_<channelName>_state" tx
        WHERE tx."CHAINCODEID" = '<chaincodeName>'
        AND tx."VALUEJSON".assetType = 'otransaction'
        AND tx.KEY NOT LIKE '_obp2pc_'
        AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_SENDER', 'CREATE_ACCOUNT')
        AND tx."VALUEJSON".to_account_id IS NOT NULL

資料來源:<obpInstanceName>_<channelName>_state,主要狀態表格,保留 JSON 格式的鏈碼資料

金鑰邏輯:
  • 僅包含下列陳述式為真的資料列。
    • CHAINCODEID = <chaincodeName>
    • assetType = 'otransaction'
    • KEY 的開頭不是 _obp2pc_
    • transaction_type 不是 EXECUTE_HOLD_RECEIVEREXECUTE_HOLD_SENDERCREATE_ACCOUNT
  • 從傳出交易 (from_account_id) 與傳入交易 (to_account_id) 擷取帳戶參與。
  • 即使缺少 JSON 值,仍使用 COALESCE 來確保資料欄 (ORDER_BLOCKNOORDER_TXNNO) 的順序一致。
  • 將外送和內送交易與 UNION ALL 結合。
輸出資料欄:
  • KEY:與交易 (寄件者或接收者) 關聯的帳戶 ID。
  • TRANSACTION_ID:交易的唯一 ID。
  • TRANSACTION_DETAILS:交易的完整 JSON 物件。
  • ORDER_BLOCKNO:用於排序的區塊編號 (若有的話,從 JSON,否則為區塊中繼資料)。
  • ORDER_TXNNO:區塊中的交易編號 (若有的話,來自 JSON,否則會封鎖中繼資料)。
資料 SourcesConfidential SQL 查詢,參與者銀行:
CREATE VIEW ACCOUNT_TRANSACTION_VIEW AS
        SELECT
            tx."VALUEJSON".from_account_id AS "KEY",
            tx."VALUEJSON".transaction_id AS "TRANSACTION_ID",
            tx."VALUEJSON" AS "TRANSACTION_DETAILS",
            COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO,
            COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO
        FROM "<obpInstanceName>_<channelName>_state" tx
        WHERE tx."CHAINCODEID" = '<chaincodeName>'
        AND tx."VALUEJSON".assetType = 'otransaction'
        AND tx.KEY NOT LIKE '_obp2pc_'
        AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_RECEIVER', 'CREATE_ACCOUNT')
        AND tx."VALUEJSON".from_account_id IS NOT NULL
         
        UNION ALL
        SELECT
            tx."VALUEJSON".to_account_id AS "KEY",
            tx."VALUEJSON".transaction_id AS "TRANSACTION_ID",
            tx."VALUEJSON" AS "TRANSACTION_DETAILS",
            COALESCE(CAST(tx."VALUEJSON".blockNo AS NUMBER), tx."BLOCKNO") AS ORDER_BLOCKNO,
            COALESCE(CAST(tx."VALUEJSON".txnNo AS NUMBER), tx."TXNNO") AS ORDER_TXNNO
        FROM "<obpInstanceName>_<channelName>_state" tx
        WHERE tx."CHAINCODEID" = '<chaincodeName>'
        AND tx."VALUEJSON".assetType = 'otransaction'
        AND tx.KEY NOT LIKE '_obp2pc_'
        AND tx."VALUEJSON".transaction_type NOT IN ('EXECUTE_HOLD_SENDER', 'CREATE_ACCOUNT')
        AND tx."VALUEJSON".to_account_id IS NOT NULL

資料來源:<obpInstanceName>_<channelName>_state,主要狀態表格,保留 JSON 格式的鏈碼資料

金鑰邏輯:
  • 僅包含下列陳述式為真的資料列。
    • CHAINCODEID = <chaincodeName>
    • assetType = 'otransaction'
    • KEY 的開頭不是 _obp2pc_
    • transaction_type 不是 EXECUTE_HOLD_RECEIVEREXECUTE_HOLD_SENDERCREATE_ACCOUNT
  • 從傳出交易 (from_account_id) 與傳入交易 (to_account_id) 擷取帳戶參與。
  • 即使缺少 JSON 值,仍使用 COALESCE 來確保資料欄 (ORDER_BLOCKNOORDER_TXNNO) 的順序一致。
  • 將外送和內送交易與 UNION ALL 結合。
輸出資料欄:
  • KEY:與交易 (寄件者或接收者) 關聯的帳戶 ID。
  • TRANSACTION_ID:交易的唯一 ID。
  • TRANSACTION_DETAILS:交易的完整 JSON 物件。
  • ORDER_BLOCKNO:用於排序的區塊編號 (若有的話,從 JSON,否則為區塊中繼資料)。
  • ORDER_TXNNO:區塊中的交易編號 (若有的話,來自 JSON,否則會封鎖中繼資料)。
TRANSACTION_PDC_VIEW
此檢視提供私人資料收集的交易層次餘額與金額明細。確保只擷取每筆交易的最新記錄。
機密 SQL 查詢、系統擁有者:
CREATE VIEW TRANSACTION_PDC_VIEW as
        SELECT
            sub."VALUEJSON".transaction_id AS transaction_id,
            sub."CHAINCODEID",
            sub."VALUEJSON".amount AS quantity,
            sub."VALUEJSON".from_account_balance AS from_account_balance,
            sub."VALUEJSON".from_account_onhold_balance AS from_account_onhold_balance,
            sub."VALUEJSON".to_account_balance AS to_account_balance,
            sub."VALUEJSON".to_account_onhold_balance AS to_account_onhold_balance
        FROM (
            SELECT
                hist."VALUEJSON",
                hist."CHAINCODEID",
                ROW_NUMBER() OVER (
                    PARTITION BY hist."VALUEJSON".transaction_id
                    ORDER BY hist.TXNTIMESTAMP DESC
                ) AS rn
            FROM "<obpInstanceName>_<channelName>_hist" hist
            WHERE hist."CHAINCODEID" = '${implicitPDCName}'
            AND hist."VALUEJSON".assetType = 'otransactionpdc'
            AND hist."KEY" NOT LIKE '_obp2pc_staged_%'
        ) sub
        where rn = 1
UNION ALL
SELECT "TRANSACTION_ID","CHAINCODEID","QUANTITY","FROM_ACCOUNT_BALANCE","FROM_ACCOUNT_ONHOLD_BALANCE","TO_ACCOUNT_BALANCE","TO_ACCOUNT_ONHOLD_BALANCE" FROM "$TRANSACTION_PDC_VIEW"@${org1Name}_LINK
UNION ALL
SELECT "TRANSACTION_ID","CHAINCODEID","QUANTITY","FROM_ACCOUNT_BALANCE","FROM_ACCOUNT_ONHOLD_BALANCE","TO_ACCOUNT_BALANCE","TO_ACCOUNT_ONHOLD_BALANCE" FROM "$TRANSACTION_PDC_VIEW"@${org2Name}_LINK

目的:透過資料庫連結聚總整個組織的資料。

Data Sources:
  • <obpInstanceName>_<channelName>_hist:包含私人資料收集記錄的歷史鏈碼資料表
  • $TRANSACTION_PDC_VIEW@${org1Name}_LINK:透過資料庫連結存取之組織 1 的遠端檢視。
  • $TRANSACTION_PDC_VIEW@${org2Name}_LINK:透過資料庫連結存取之組織 2 的遠端檢視。
金鑰邏輯:
  • 僅篩選下列陳述式為真的記錄。
    • CHAINCODEID = ${implicitPDCName}
    • assetType = 'otransactionpdc'
    • KEY 的開頭不是 _obp2pc_staged_.
  • 使用 ROW_NUMBER() 視窗功能。
    • transaction_id 區分的分割區。
    • TXNTIMESTAMP DESC 排序。
    • 僅保留最新的記錄 (rn = 1)
  • 結合來自本機專用資料收集歷史記錄表格的資料、組織 1 的專用資料收集檢視 (透過資料庫連結),以及組織 2 的專用資料收集檢視 (透過資料庫連結)。
輸出資料欄:
  • TRANSACTION_ID:交易的唯一 ID。
  • CHAINCODEID:與 PDC 記錄相關聯的鏈碼識別碼。
  • QUANTITY:異動金額或移轉數量。
  • FROM_ACCOUNT_BALANCE:交易後的寄件人帳戶餘額。
  • FROM_ACCOUNT_ONHOLD_BALANCE:交易後寄件人帳戶的保留餘額。
  • TO_ACCOUNT_BALANCE:交易後的接收者帳戶餘額。
  • TO_ACCOUNT_ONHOLD_BALANCE:交易後接收者帳戶的保留餘額。
機密 SQL 查詢、參與者銀行:
CREATE VIEW TRANSACTION_PDC_VIEW as
        SELECT
            sub."VALUEJSON".transaction_id AS transaction_id,
            sub."CHAINCODEID",
            sub."VALUEJSON".amount AS quantity,
            sub."VALUEJSON".from_account_balance AS from_account_balance,
            sub."VALUEJSON".from_account_onhold_balance AS from_account_onhold_balance,
            sub."VALUEJSON".to_account_balance AS to_account_balance,
            sub."VALUEJSON".to_account_onhold_balance AS to_account_onhold_balance
        FROM (
            SELECT
                hist."VALUEJSON",
                hist."CHAINCODEID",
                ROW_NUMBER() OVER (
                    PARTITION BY hist."VALUEJSON".transaction_id
                    ORDER BY hist.TXNTIMESTAMP DESC
                ) AS rn
            FROM "<obpInstanceName>_<channelName>_hist" hist
            WHERE hist."CHAINCODEID" = '<implicitPDCName>'
            AND hist."VALUEJSON".assetType = 'otransactionpdc'
            AND hist."KEY" NOT LIKE '_obp2pc_staged_%'
        ) sub
        where rn = 1
Data Sources:
  • <obpInstanceName>_<channelName>_hist:包含私人資料收集記錄的歷史鏈碼資料表
金鑰邏輯:
  • 僅篩選下列陳述式為真的記錄。
    • CHAINCODEID = ${implicitPDCName}
    • assetType = 'otransactionpdc'
    • KEY 的開頭不是 _obp2pc_staged_.
  • 使用 ROW_NUMBER() 視窗功能。
    • transaction_id 區分的分割區。
    • TXNTIMESTAMP DESC 排序。
    • 僅保留最新的記錄 (rn = 1)
輸出資料欄:
  • TRANSACTION_ID:交易的唯一 ID。
  • CHAINCODEID:與 PDC 記錄相關聯的鏈碼識別碼。
  • QUANTITY:異動金額或移轉數量。
  • FROM_ACCOUNT_BALANCE:交易後的寄件人帳戶餘額。
  • FROM_ACCOUNT_ONHOLD_BALANCE:交易後寄件人帳戶的保留餘額。
  • TO_ACCOUNT_BALANCE:交易後的接收者帳戶餘額。
  • TO_ACCOUNT_ONHOLD_BALANCE:交易後接收者帳戶的保留餘額。
ACCOUNTS_VIEW
此檢視提供跨組織的帳戶合併檢視。
機密 SQL 查詢、系統擁有者:
CREATE VIEW ACCOUNTS_VIEW as
          WITH hist_ranked AS (
      SELECT
          hist.valuejson,
          hist."VALUEJSON".account_id AS account_id,
          ROW_NUMBER() OVER (
              PARTITION BY hist."VALUEJSON".account_id
              ORDER BY hist.TXNTIMESTAMP DESC
          ) AS rn
      FROM "<obpInstanceName>_<channelName>_hist" hist
      WHERE hist."CHAINCODEID" = '<implicitPDCName>'
        AND hist."VALUEJSON".assetType = 'oaccountpdc'
      ),
      state_filtered AS (
          SELECT
              state.key,
              state.valueJSON
          FROM "<obpInstanceName>_<channelName>_state" state
          WHERE state."CHAINCODEID" = '${chaincodeName}'
          AND state."VALUEJSON".assetType = 'oaccount'
      ),
      token_details AS (
          SELECT
              state.key,
              state.valueJson,
              COALESCE ( TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)), 0) AS decimal_value
          FROM "<obpInstanceName>_<channelName>_state" state
          WHERE state."CHAINCODEID" = '<chaincodeName>'
          AND state."VALUEJSON".assetType = 'otoken'
      )
      SELECT
          s.key as account_id,
          s.valueJSON.org_id AS org_id,
          h.valuejson.user_id AS user_id,
          h.valuejson.custom_account_id AS custom_account_id,
          s.valueJSON.token_id AS token_id,
          t.decimal_value
      FROM state_filtered s
      LEFT JOIN hist_ranked h
          ON h.account_id = s.key
      AND h.rn = 1
      LEFT JOIN token_details t
          ON s.valueJSON.token_id = t.key
      WHERE h.valuejson is not null
UNION ALL
SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID", "TOKEN_ID", "DECIMAL_VALUE" FROM "ACCOUNTS_VIEW"@<org1Name>_LINK WHERE "USER_ID" IS NOT NULL
UNION ALL
SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID", "TOKEN_ID", "DECIMAL_VALUE" FROM "ACCOUNTS_VIEW"@$<org2Name>_LINK WHERE "USER_ID" IS NOT NULL
目的:此檢視提供跨組織的帳戶合併檢視,並結合下列資訊。
  • 目前帳戶狀態
  • 最新的帳戶相關私人資料 (私人資料收集)
  • 權杖描述資料,例如小數位數
  • 透過資料庫連結的跨組織帳戶明細
這項資訊可讓您在單一檢視中查詢帳戶層次描述資料 (組織、使用者、記號、小數位數)。
Data Sources:
  • <obpInstanceName>_<channelName>_hist:歷史鏈碼資料,用於擷取最近的帳戶私人資料收集項目 (oaccountpdc)。
  • <obpInstanceName>_<channelName>_state:帳戶 (oaccount) 和記號 (otoken) 的目前狀態資料。
  • ACCOUNTS_VIEW@<org1Name>_LINK:來自組織 1 的遠端檢視。
  • ACCOUNTS_VIEW@<org2Name>_LINK:來自組織 2 的遠端檢視。
金鑰邏輯:
  • hist_ranked CTE:使用 ROW_NUMBER() 搭配 ORDER BY TXNTIMESTAMP DESC 取得每一 account_id 的最新專用資料收集記錄。
  • state_filtered CTE:從狀態表格中選取帳戶 (oaccount)。
  • token_details CTE:擷取小數位數的記號詳細資訊 (otoken) (如果遺漏,則預設為 0)。
  • 最終選擇結合:帳戶狀態 (state_filtered),包含最新的專用資料收集詳細資訊 (hist_ranked) 和記號描述資料 (token_details)。
  • 僅確保具有相關聯私人資料收集 (WHERE h.valuejson IS NOT NULL) 的帳戶。
  • 使用來自其他組織的資料庫連結聯集來擴充帳戶資料。
輸出資料欄:
  • ACCOUNT_ID:帳戶的唯一識別碼。
  • ORG_ID:與帳戶相關聯的組織 ID。
  • USER_ID:連結至帳戶的使用者 ID (從私人資料收集)。
  • CUSTOM_ACCOUNT_ID:自訂使用者定義的帳戶識別碼。
  • TOKEN_ID:與帳戶相關聯的權杖識別碼。
  • DECIMAL_VALUE:記號小數位數 (若遺漏,則預設為 0)。
機密 SQL 查詢、參與者銀行:
CREATE VIEW ACCOUNTS_VIEW AS
        WITH hist_ranked AS (
            SELECT
                hist.valuejson,
                hist."VALUEJSON".account_id AS account_id,
                ROW_NUMBER() OVER (
                    PARTITION BY hist."VALUEJSON".account_id
                    ORDER BY hist.TXNTIMESTAMP DESC
                ) AS rn
            FROM "<obpInstanceName>_<channelName>_hist" hist
            WHERE hist."CHAINCODEID" = '<implicitPDCName>'
            AND hist."VALUEJSON".assetType = 'oaccountpdc'
        ),
        state_filtered AS (
            SELECT
                state.key,
                state.valueJSON
            FROM "<obpInstanceName>_<channelName>_state" state
            WHERE state."CHAINCODEID" = '<chaincodeName>'
            AND state."VALUEJSON".assetType = 'oaccount'
        ),
        token_details AS (
            SELECT
                state.key,
                COALESCE (TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)), 0) AS decimal_value
            FROM "<obpInstanceName>_<channelName>_state" state
            WHERE state."CHAINCODEID" = '<chaincodeName>'
            AND state."VALUEJSON".assetType = 'otoken'
        )
        SELECT
            s.key AS account_id,
            s.valueJSON.org_id AS org_id,
            h.valuejson.user_id AS user_id,
            h.valuejson.custom_account_id AS custom_account_id,
            s.valueJSON.token_id AS token_id,
            t.decimal_value
        FROM state_filtered s
        LEFT JOIN hist_ranked h
            ON h.account_id = s.key
        AND h.rn = 1
        LEFT JOIN token_details t
            ON s.valueJSON.token_id = t.key
目的:此檢視提供跨組織的帳戶合併檢視,並結合下列資訊。
  • 目前帳戶狀態
  • 最新的帳戶相關私人資料 (私人資料收集)
  • 權杖描述資料,例如小數位數
這項資訊可讓您在單一檢視中查詢帳戶層次描述資料 (組織、使用者、記號、小數位數)。
Data Sources:
  • <obpInstanceName>_<channelName>_hist:歷史鏈碼資料,用於擷取最近的帳戶私人資料收集項目 (oaccountpdc)。
  • <obpInstanceName>_<channelName>_state:帳戶 (oaccount) 和記號 (otoken) 的目前狀態資料。
金鑰邏輯:
  • hist_ranked CTE:使用 ROW_NUMBER() 搭配 ORDER BY TXNTIMESTAMP DESC 取得每一 account_id 的最新專用資料收集記錄。
  • state_filtered CTE:從狀態表格中選取帳戶 (oaccount)。
  • token_details CTE:擷取小數位數的記號詳細資訊 (otoken) (如果遺漏,則預設為 0)。
  • 最終選擇結合:帳戶狀態 (state_filtered),包含最新的專用資料收集詳細資訊 (hist_ranked) 和記號描述資料 (token_details)。
  • 僅確保具有相關聯私人資料收集 (WHERE h.valuejson IS NOT NULL) 的帳戶。
輸出資料欄:
  • ACCOUNT_ID:帳戶的唯一識別碼。
  • ORG_ID:與帳戶相關聯的組織 ID。
  • USER_ID:連結至帳戶的使用者 ID (從私人資料收集)。
  • CUSTOM_ACCOUNT_ID:自訂使用者定義的帳戶識別碼。
  • TOKEN_ID:與帳戶相關聯的權杖識別碼。
  • DECIMAL_VALUE:記號小數位數 (若遺漏,則預設為 0)。
ACCOUNTS_MOD
此檢視提供有趣的記號登錄資料、將組織和使用者對應至其相關有趣的記號帳戶和記號的結構化表示法。它透過扁平化巢狀 JSON 陣列,簡化對儲存在鏈碼狀態中帳戶權杖關係的存取,讓應用程式和分析查詢更容易使用。
一般 SQL 查詢,TypeScript:
`create view ACCOUNTS_MOD as SELECT s.blockno, s.txnno, s.key,
                s.valuejson.assetType, s.valueJson.org_id, s.valueJson.user_id,
                ft.account_id, ft.token_id
     
                FROM "<obpInstanceName>_<channelName>_state" s,
     
                json_table(s.valuejson, '$.associated_ft_accounts[*]'
                Columns(lng_number FOR ORDINALITY,
                account_id varchar2 (1000) Path '$.account_id' null on empty,
                token_id varchar2 (16) Path '$.token_id' null on empty)) ft
     
                where
                s.key like '%oftregistry%' AND s.chaincodeid = '<chaincodeName>'
     
                order by s.blockno DESC, s.txnno DESC`
Data Sources:
  • <obpInstanceName>_<channelName>_state:保留 JSON 格式鏈碼資料的主要狀態表格。
金鑰邏輯:
  • 依登錄機碼篩選:僅包含機碼包含 oftregistry 的記錄。
  • 依鏈碼篩選:將結果限制為指定的鏈碼 (<chaincodeName>)。
  • 扁平化巢狀 JSON:使用 JSON_TABLEassociated_ft_accounts 陣列展開為每個帳戶權杖組的個別資料列。
    • account_id:有趣的記號帳戶 ID。
    • token_id:連結至帳戶的權杖。
    • lng_number:條例 (用於內部追蹤陣列順序)。
  • 排序:結果會依區塊編號 (blockno) 和交易編號 (txnno) 以遞減順序排序,確保先顯示最近的關聯。
輸出資料欄:
  • BLOCKNO:記錄登錄更新的區塊號碼。
  • TXNNO:區塊中的交易編號。
  • KEY:代表有趣記號登錄項目的狀態索引鍵。
  • ASSETTYPE:資產類型 (預期為:oftregistry)。
  • ORG_ID:JSON 的組織 ID。
  • USER_ID:與登錄記錄相關聯的使用者識別碼。
  • ACCOUNT_ID:從巢狀陣列擷取的有趣記號帳戶 ID。
  • TOKEN_ID:已擷取連結至有趣記號帳戶的記號 ID。
一般 SQL 查詢,執行:
`create view ACCOUNTS_MOD as SELECT s.blockno, s.txnno, s.key,
                s.valuejson.AssetType, s.valueJson.OrgId as org_id, s.valueJson.UserId as user_id,
                ft.account_id, ft.token_id
     
                FROM "<obpInstanceName>_<channelName>_state" s,
     
                json_table(s.valuejson, '$.AssociatedFtAccounts[*]'
                Columns(lng_number FOR ORDINALITY,
                account_id varchar2 (1000) Path '$.AccountId' null on empty,
                token_id varchar2 (16) Path '$.TokenId' null on empty)) ft
     
                where
                s.key like '%oftregistry%' AND s.chaincodeid = '<chaincodeName>'
     
                order by s.blockno DESC, s.txnno DESC`
此視觀表與一般 SQL 查詢 TypeScript 視觀表相同。唯一的差異在於 JSON 欄位命名慣例,此慣例使用 Pascal 大小寫而非小寫。
  • AssetType:先前為 assetType
  • OrgId:先前為 org_id
  • UserId:先前為 user_id
  • AssociatedFtAccounts:先前為 associated_ft_accounts
  • AccountId:先前為 account_id
  • TokenId:先前為 token_id
套用別名功能 (例如 OrgId AS org_id),讓輸出資料欄名稱在檢視之間保持一致。
機密 SQL 查詢、系統擁有者:
CREATE VIEW ACCOUNTS_MOD AS
SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE"
FROM (
    WITH hist_ranked AS (
        SELECT
            hist.valuejson,
            hist."VALUEJSON".account_id AS account_id,
            ROW_NUMBER() OVER (
                PARTITION BY hist."VALUEJSON".account_id
                ORDER BY hist.TXNTIMESTAMP DESC
            ) AS rn
        FROM "<obpInstanceName>_<channelName>_hist" hist
        WHERE hist."CHAINCODEID" = '<implicitPDCName>'
          AND hist."VALUEJSON".assetType = 'oaccountpdc'
    ),
    state_filtered AS (
        SELECT
            state.key,
            state.valueJSON
        FROM "<obpInstanceName>_<channelName>_state" state
        WHERE state."CHAINCODEID" = '<chaincodeName>'
          AND state."VALUEJSON".assetType = 'oaccount'
    ),
    token_details AS (
        SELECT
            state.key,
            state.valueJson,
            COALESCE(
                TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)),
                0
            ) AS decimal_value
        FROM "<obpInstanceName>_<channelName>_state" state
        WHERE state."CHAINCODEID" = '<chaincodeName>'
          AND state."VALUEJSON".assetType = 'otoken'
    )
    SELECT
        s.key AS account_id,
        s.valueJSON.org_id AS org_id,
        h.valuejson.user_id AS user_id,
        h.valuejson.custom_account_id AS custom_account_id,
        s.valueJSON.token_id AS token_id,
        t.decimal_value
    FROM state_filtered s
    LEFT JOIN hist_ranked h
        ON h.account_id = s.key
       AND h.rn = 1
    LEFT JOIN token_details t
        ON s.valueJSON.token_id = t.key
    WHERE h.valuejson IS NOT NULL
)
UNION ALL
SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE"
FROM "ACCOUNTS_MOD"@<org1Name>_LINK
UNION ALL
SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE"
FROM "ACCOUNTS_MOD"@<org2Name>_LINK
UNION ALL
SELECT "ACCOUNT_ID","ORG_ID","USER_ID","CUSTOM_ACCOUNT_ID","TOKEN_ID","DECIMAL_VALUE"
FROM "ACCOUNTS_MOD"@<org3Name>_LINK;
Data Sources:
  • <obpInstanceName>_<channelName>_hist:儲存帳戶私人資料 (oaccountpdc) 依時間順序變更的歷史記錄表格。
  • <obpInstanceName>_<channelName>_state:保存目前鏈碼狀態為 JSON 格式的狀態表格,用於 oaccountotoken 詳細資訊。
  • 遠端組織視觀表:其他組織中 ACCOUNTS_MOD 視觀表的其他資料使用資料庫連結包括:
    • "ACCOUNTS_MOD"@<org1Name>_LINK
    • "ACCOUNTS_MOD"@<org2Name>_LINK
    • "ACCOUNTS_MOD"@<org3Name>_LINK
金鑰邏輯:
  • 排名歷史記錄:使用 ROW_NUMBER() 從歷史記錄表格中挑選每個帳戶 ID 的最新 oaccountpdc 記錄。
  • 篩選目前帳戶:只從狀態表格擷取含有 assetType = 'oaccount' 的記錄。
  • 結合記號描述資料:透過結合狀態表格中的 otoken 項目來新增記號精確度 (decimal_value)。
  • 合併帳戶明細:將篩選的帳戶記錄與其最近的歷史記錄項目和權杖明細結合。確定只包括具有有效歷史資料 (h.valuejson IS NOT NULL) 的帳戶。
  • 多重組織聯集:使用 UNION ALL 透過資料庫連結,將本機組織中的帳戶資料與多個遠端組織合併。如此一來,單一整合查詢即可擷取網路中的所有帳戶。
輸出資料欄:
  • ACCOUNT_ID:帳戶的唯一識別碼。
  • ORG_ID:擁有帳戶的組織 ID。
  • USER_ID:連結至客戶的使用者 ID (來自最新歷史記錄)。
  • CUSTOM_ACCOUNT_ID:選擇性自訂使用者定義的帳戶識別碼。
  • TOKEN_ID:與帳戶相關聯的權杖識別碼。
  • DECIMAL_VALUE:記號小數位數 (若遺漏,則預設為 0)。

動態產生:多重組織部份未進行硬式編碼。在命令檔中,會根據 Participant_orgs_list.yml 檔案動態產生額外的聯集。這樣可確保視網路中設定的組織數目而定,檢視會自動調整。範例查詢顯示三個組織來明確,但實際上,工會的數目取決於 orgsList 的大小。如需其他詳細資訊,請參閱本主題中有關 Participant_orgs_list.yml 檔案的先前資訊。

機密 SQL 查詢、參與者銀行:
CREATE VIEW ACCOUNTS_MOD AS
    WITH hist_ranked AS (
        SELECT
            hist.valuejson,
            hist."VALUEJSON".account_id AS account_id,
            ROW_NUMBER() OVER (
                PARTITION BY hist."VALUEJSON".account_id
                ORDER BY hist.TXNTIMESTAMP DESC
            ) AS rn
        FROM "<obpInstanceName>_<channelName>_hist" hist
        WHERE hist."CHAINCODEID" = '<implicitPDCName>'
          AND hist."VALUEJSON".assetType = 'oaccountpdc'
    ),
    state_filtered AS (
        SELECT
            state.key,
            state.valueJSON
        FROM "$<obpInstanceName>_<channelName>_state" state
        WHERE state."CHAINCODEID" = '<chaincodeName>'
          AND state."VALUEJSON".assetType = 'oaccount'
    ),
    token_details AS (
        SELECT
            state.key,
            COALESCE(
                TO_NUMBER(JSON_VALUE(valuejson, '$.divisible.decimal' RETURNING VARCHAR2)),
                0
            ) AS decimal_value
        FROM "${stateTableName}" state
        WHERE state."CHAINCODEID" = '${chaincodeName}'
          AND state."VALUEJSON".assetType = 'otoken'
    )
    SELECT
        s.key AS account_id,
        s.valueJSON.org_id AS org_id,
        h.valuejson.user_id AS user_id,
        h.valuejson.custom_account_id AS custom_account_id,
        s.valueJSON.token_id AS token_id,
        t.decimal_value
    FROM state_filtered s
    LEFT JOIN hist_ranked h
        ON h.account_id = s.key
       AND h.rn = 1
    LEFT JOIN token_details t
        ON s.valueJSON.token_id = t.key
    WHERE h.valuejson IS NOT NULL;
此檢視與「機密 SQL 查詢」、「系統擁有者」相同,但僅會擷取本端組織的資料。主要差異如下:
  • 未使用任何含有資料庫連結的 UNION ALL
  • 輸出僅包括目前組織之狀態和記錄表中的帳戶。
  • 此檢視提供單一組織帳戶登錄,與合併多個組織之帳戶的多重組織變體不同。
TRANSACTION_MOD
此檢視提供所有區塊鏈交易的詳細記錄,擷取中繼資料、參與者、金額及結果餘額。它可以直接從歷史記錄表格擷取結構化欄位,簡化對交易歷史記錄的存取,無需手動剖析原始 JSON。
一般 SQL 查詢,TypeScript:
`create view TRANSACTION_MOD as SELECT h.blockno, h.txnno, h.key, h.txntimestamp,
            h.valuejson.assetType, h.valuejson.transaction_id,
            h.valuejson.from_account_id, h.valuejson.to_account_id,
            h.valuejson.transaction_type, h.valuejson.amount,
            h.valuejson.category as transaction_earmark,
            h.valuejson.from_account_balance, h.valuejson.to_account_balance
     
            FROM "<obpInstanceName>_<channelName>_hist" h
     
            where
            h.key like '%otransaction%' AND h.chaincodeid = '<chaincodeName>'
     
            order by h.blockno DESC, h.txnno DESC`

資料來源:<obpInstanceName>_<channelName>_hist,包含所有 JSON 格式交易事件的歷史記錄表格。包括交易詳細資訊和關聯的描述資料 (區塊、交易編號、時戳)。

金鑰邏輯:
  • 僅包含下列陳述式為真的資料列。
    • CHAINCODEID = <chaincodeName>
    • KEY 包含 otransaction (交易相關記錄的篩選)
  • 訂單結果如下。
    • blockno DESC (最新的區塊優先)
    • txnno DESC (區塊內的最新交易優先)
輸出資料欄:
  • BLOCKNO:記錄交易的區塊號碼。
  • TXNNO:區塊中的交易編號。
  • KEY:交易項目的唯一識別碼。
  • TXNTIMESTAMP:交易完成的時間戳記。
  • ASSETTYPE:交易的資產類型 (例如,otransaction)。
  • TRANSACTION_ID:交易的唯一 ID。
  • FROM_ACCOUNT_ID:產生資產 / 值的來源帳戶 ID。
  • TO_ACCOUNT_ID:資產 / 值的轉移目標帳戶 ID。
  • TRANSACTION_TYPE:交易的類型 (例如,轉帳、借方、貸方)。
  • AMOUNT:交易所涉及的金額。
  • TRANSACTION_EARMARK:交易的類別或地標。
  • FROM_ACCOUNT_BALANCE:交易後的來源帳戶餘額。
  • TO_ACCOUNT_BALANCE:交易後的目的地帳戶餘額。
一般 SQL 查詢,執行:
`create view TRANSACTION_MOD as SELECT h.blockno, h.txnno, h.key, h.txntimestamp,
            h.valuejson.AssetType, h.valuejson.TransactionId as transaction_id,
            h.valuejson.FromAccountId as from_account_id, h.valuejson.ToAccountId as to_account_id,
            h.valuejson.TransactionType as transaction_type, h.valuejson.Amount,
            h.valuejson.Category as transaction_earmark,
            h.valuejson.FromAccountBalance as from_account_balance, h.valuejson.ToAccountBalance as to_account_balance
     
            FROM "<obpInstanceName>_<channelName>_hist" h
     
            where
            h.key like '%otransaction%' AND h.chaincodeid = '<chaincodeName>'
     
            order by h.blockno DESC, h.txnno DESC`
此視觀表與一般 SQL 查詢 TypeScript 視觀表相同。唯一的差異在於 JSON 欄位命名慣例,此慣例使用 Pascal 大小寫而非小寫。
  • AssetType:先前為 assetType
  • TransactionId:先前為 transaction_id
  • FromAccountId:先前為 from_account_id
  • ToAccountId:先前為 to_account_id
  • TransactionType:先前為 transaction_type
  • Amount:先前為 amount
  • Category:先前為 category
  • FromAccountBalance:先前為 from_account_balance
  • ToAccountBalance:先前為 to_account_balance
不論 JSON 欄位命名慣例為何,都會套用別名功能 (例如 TransactionId AS transaction_id),讓所有檢視的輸出資料欄名稱保持一致。
機密 SQL 查詢、系統擁有者:
`CREATE VIEW TRANSACTION_MOD AS
        SELECT
            COALESCE(CAST(sub."VALUEJSON".blockNo AS NUMBER), sub."BLOCKNO") AS BLOCKNO,
            COALESCE(CAST(sub."VALUEJSON".txnNo AS NUMBER), sub."TXNNO") AS TXNNO,
            sub.key,
            sub.txntimestamp,
            sub.valuejson.assetType,
            sub.valuejson.transaction_id,
            sub.valuejson.from_account_id,
            sub.valuejson.to_account_id,
            sub.valuejson.transaction_type,
            (TO_NUMBER(sub.quantity) / POWER(10, sub.decimal_value)) as amount,
            sub.valuejson.category as transaction_earmark,
            (TO_NUMBER(sub.from_account_balance) / POWER(10, sub.decimal_value)) as from_account_balance,
            (TO_NUMBER(sub.to_account_balance) / POWER(10, sub.decimal_value)) as to_account_balance
        from (
            SELECT
                hist.*,
                pdc.*,
                CASE
                    WHEN hist."VALUEJSON".from_account_id IS NOT NULL
                        THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".from_account_id FETCH FIRST 1 ROW ONLY)
                    WHEN hist."VALUEJSON".to_account_id IS NOT NULL
                        THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".to_account_id FETCH FIRST 1 ROW ONLY)
                    ELSE 0
                END AS decimal_value,
                ROW_NUMBER() OVER (
                    PARTITION BY hist."VALUEJSON".transaction_id
                    ORDER BY hist.TXNTIMESTAMP DESC
                ) AS rn
            FROM "<obpInstanceName>_<channelName>_hist" hist
            LEFT JOIN "<transactionPDCViewName>" pdc
                ON hist.key = pdc.TRANSACTION_ID
            WHERE hist."CHAINCODEID" = '<chaincodeName>'
            AND hist."VALUEJSON".assetType = 'otransaction'
            AND hist."KEY" NOT LIKE '_obp2pc_staged_%'
        ) sub
        where rn = 1`
Data Sources:
  • <obpInstanceName>_<channelName>_hist:儲存所有交易版本的歷史鏈碼表格。
  • <transactionPDCViewName>:包含私人資料收集交易詳細資料的檢視,已結合以強化交易記錄。
  • ACCOUNTS_MOD:用來擷取帳戶餘額與交易金額正確 decimal_value 的參考檢視。
金鑰邏輯:
  • 僅篩選下列陳述式為真的資料列。
    • CHAINCODEID = <chaincodeName>
    • assetType = 'otransaction'
    • KEY 的開頭不是 _obp2pc_staged_
  • 使用以 transaction_id 分割的 ROW_NUMBER() (依 txntimestamp DESC 排序),確保只包含每筆交易的最新記錄。
  • 根據交易是否涉及 from_account_idto_account_id,從 ACCOUNTS_MOD 動態擷取 decimal_value
  • 金額與餘額 (amountfrom_account_balanceto_account_balance) 是以小數精確度來調整,使用:value / POWER(10, decimal_value)
  • blockNotxnNo 上使用 COALESCE 來確保排序資料欄永遠存在,即使 JSON 中遺漏也一樣。
輸出資料欄:
  • BLOCKNO:用於排序的區塊編號 (如果有的話,從 JSON,否則從中繼資料)。
  • TXNNO:區塊中的交易編號 (若有的話,來自 JSON,否則來自中繼資料)。
  • KEY:交易索引鍵 ID。
  • TXNTIMESTAMP:交易的時戳。
  • ASSETTYPE:資產類型 (otransaction)。
  • TRANSACTION_ID:交易的唯一 ID。
  • FROM_ACCOUNT_ID:傳送記號的帳戶 ID。
  • TO_ACCOUNT_ID:已傳送記號的帳戶 ID。
  • TRANSACTION_TYPE:交易的類型 (例如,轉移、保留、釋出)。
  • AMOUNT:交易金額,依記號小數位數調整。
  • TRANSACTION_EARMARK:交易的類別或地標。
  • FROM_ACCOUNT_BALANCE:交易後傳送方帳戶的餘額,依小數位數調整。
  • TO_ACCOUNT_BALANCE:交易後接收者帳戶的餘額,依精確度調整。
機密 SQL 查詢、參與者銀行:
`CREATE VIEW TRANSACTION_MOD AS
        SELECT
            COALESCE(CAST(sub."VALUEJSON".blockNo AS NUMBER), sub."BLOCKNO") AS BLOCKNO,
            COALESCE(CAST(sub."VALUEJSON".txnNo AS NUMBER), sub."TXNNO") AS TXNNO,
            sub.key,
            sub.txntimestamp,
            sub.valuejson.assetType,
            sub.valuejson.transaction_id,
            sub.valuejson.from_account_id,
            sub.valuejson.to_account_id,
            sub.valuejson.transaction_type,
            (TO_NUMBER(sub.quantity) / POWER(10, sub.decimal_value)) as amount,
            sub.valuejson.category as transaction_earmark,
            (TO_NUMBER(sub.from_account_balance) / POWER(10, sub.decimal_value)) as from_account_balance,
            (TO_NUMBER(sub.to_account_balance) / POWER(10, sub.decimal_value)) as to_account_balance
        from (
            SELECT
                hist.*,
                pdc.*,
                CASE
                    WHEN hist."VALUEJSON".from_account_id IS NOT NULL
                        THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".from_account_id FETCH FIRST 1 ROW ONLY)
                    WHEN hist."VALUEJSON".to_account_id IS NOT NULL
                        THEN (SELECT DECIMAL_VALUE FROM "ACCOUNTS_MOD" WHERE ACCOUNT_ID = hist."VALUEJSON".to_account_id FETCH FIRST 1 ROW ONLY)
                    ELSE 0
                END AS decimal_value,
                ROW_NUMBER() OVER (
                    PARTITION BY hist."VALUEJSON".transaction_id
                    ORDER BY hist.TXNTIMESTAMP DESC
                ) AS rn
            FROM "<obpInstanceName>_<channelName>_hist" hist
            LEFT JOIN "<transactionPDCViewName>" pdc
                ON hist.key = pdc.TRANSACTION_ID
            WHERE hist."CHAINCODEID" = '<chaincodeName>'
            AND hist."VALUEJSON".assetType = 'otransaction'
            AND hist."KEY" NOT LIKE '_obp2pc_staged_%'
        ) sub
        where rn = 1`
Data Sources:
  • <obpInstanceName>_<channelName>_hist:包含所有 JSON 格式交易版本的歷史鏈碼表格。
  • <transactionPDCViewName>:保留交易層次私人資料的專用資料收集檢視。它會與歷史記錄結合以強化交易記錄。
  • ACCOUNTS_MOD:用來擷取交易相關帳戶之正確記號小數位數 (decimal_value) 的檢視。
金鑰邏輯:
  • 僅篩選下列陳述式為真的資料列。
    • CHAINCODEID = <chaincodeName>
    • assetType = 'otransaction'
    • 排除暫存的交易 (KEY NOT LIKE '_obp2pc_staged_%')
  • 小數比例:根據 from_account_idto_account_id,從 ACCOUNTS_MOD 動態擷取 decimal_value。使用 value / POWER(10, decimal_value) 將比例套用至 amountfrom_account_balanceto_account_balance
  • 記錄選擇:使用以 transaction_id 分割的 ROW_NUMBER() (最新由 TXNTIMESTAMP 分割),確保只傳回每個交易的最新版本。
  • 資料正規化:即使 JSON 有效負載中遺漏值,COALESCE 也會套用至 blockNotxnNo 以確保一致性。
輸出資料欄:
  • BLOCKNO:用於排序的區塊號碼 (如果有的話,從 JSON,否則從中繼資料)。
  • TXNNO:區塊中的交易編號 (若有的話,來自 JSON,否則來自中繼資料)。
  • KEY:交易索引鍵 ID。
  • TXNTIMESTAMP:交易的時戳。
  • ASSETTYPE:資產類型 (otransaction)。
  • TRANSACTION_ID:交易的唯一 ID。
  • FROM_ACCOUNT_ID:帳戶 ID 傳送權杖。
  • TO_ACCOUNT_ID:接收權杖的帳戶 ID。
  • TRANSACTION_TYPE:交易的類型 (例如,轉移、保留、釋出)。
  • AMOUNT:交易金額,使用記號小數位數標準化。
  • TRANSACTION_EARMARK:交易的類別或地標。
  • FROM_ACCOUNT_BALANCE:傳送方帳戶在交易後的餘額 (精確度調整)。
  • TO_ACCOUNT_BALANCE:交易後的接收者帳戶餘額 (精確度調整)。
ACCOUNTS_TRANSACTION_MOD
此檢視會藉由將每個交易與參與帳戶的組織 ID 建立關聯,來延伸交易歷史記錄。它支援燃燒核准、薄荷核准和定期轉移,確保交易同時包含帳戶層級和組織層級的內容。
一般 SQL 查詢、TypeScript 及執行:
`create view ACCOUNTS_TRANSACTION_MOD as SELECT DISTINCT
            TRANSACTION_ID,
            A.BLOCKNO,
            FROM_ACCOUNT_ID,
            TO_ACCOUNT_ID,
            A.TRANSACTION_EARMARK EARMARK,
            B.ORG_ID FROM_ORG_ID,
            B.ORG_ID TO_ORG_ID,
            TRANSACTION_TYPE,
            AMOUNT,
            A.TXNTIMESTAMP CRDATE
        FROM
            <transactionViewName> A, <accountsViewName> B
            WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TRANSACTION_TYPE='APPROVE_BURN'
        UNION
        SELECT DISTINCT
            TRANSACTION_ID,
            A.BLOCKNO,
            FROM_ACCOUNT_ID,
            TO_ACCOUNT_ID,
            A.TRANSACTION_EARMARK EARMARK,
            C.ORG_ID FROM_ORG_ID,
            C.ORG_ID TO_ORG_ID,
            TRANSACTION_TYPE,
            AMOUNT,
            A.TXNTIMESTAMP CRDATE
        FROM
            <transactionViewName> A, <accountsViewName> C
            WHERE A.TO_ACCOUNT_ID=C.ACCOUNT_ID AND A.TRANSACTION_TYPE='APPROVE_MINT'
        UNION
        SELECT DISTINCT
            TRANSACTION_ID,
            A.BLOCKNO,
            FROM_ACCOUNT_ID,
            TO_ACCOUNT_ID,
            A.TRANSACTION_EARMARK EARMARK,
            B.ORG_ID FROM_ORG_ID,
            C.ORG_ID TO_ORG_ID,
            TRANSACTION_TYPE,
            AMOUNT,
            A.TXNTIMESTAMP CRDATE
        FROM
            <transactionViewName> A, <accountsViewName> B, <accountsViewName> C
            WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TO_ACCOUNT_ID=C.ACCOUNT_ID
        ORDER BY BLOCKNO DESC`
Data Sources:
  • <transactionViewName> (A):提供核心交易詳細資訊,例如 ID、區塊號碼、帳戶、金額和時戳。
  • <accountsViewName> (B, C):將帳戶 (ACCOUNT_ID) 對應至寄件者與接收者的組織 (ORG_ID)。
關鍵邏輯:檢視是使用 UNION (共三個案例):
  1. APPROVE_BURN
    • 加入 FROM_ACCOUNT_ID = B.ACCOUNT_ID
    • 指派 B.ORG_IDFROM_ORG_IDTO_ORG_ID
  2. APPROVE_MINT
    • 加入 TO_ACCOUNT_ID = C.ACCOUNT_ID
    • 指派 C.ORG_IDFROM_ORG_IDTO_ORG_ID
  3. 一般轉帳
    • 結合 FROM_ACCOUNT_ID = B.ACCOUNT_IDTO_ACCOUNT_ID = C.ACCOUNT_ID
    • B.ORG_ID 指定為 FROM_ORG_ID,並將 C.ORG_ID 指定為 TO_ORG_ID
最後,結果會依 BLOCKNO DESC 排序,以排列最新交易的優先順序。
輸出資料欄:
  • TRANSACTION_ID:交易的唯一 ID。
  • BLOCKNO:記錄交易的區塊號碼。
  • FROM_ACCOUNT_ID:寄件者的帳戶 ID。
  • TO_ACCOUNT_ID:接收者的帳戶 ID。
  • EARMARK:交易地標類別 (別名 TRANSACTION_EARMARK)。
  • FROM_ORG_ID:寄件者帳戶的組織 ID (或燒錄時與 TO 相同)。
  • TO_ORG_ID:接收者帳戶的組織 ID (或 mint 的 FROM 相同)。
  • TRANSACTION_TYPE:交易的類型 (APPROVE_BURNAPPROVE_MINT 或傳輸)。
  • AMOUNT:交易金額。
  • CRDATE:交易建立日期 (從 TXNTIMESTAMP)。
機密 SQL 查詢、系統擁有者及參與者銀行:
`CREATE VIEW ACCOUNTS_TRANSACTION_MOD AS
        SELECT DISTINCT
            TRANSACTION_ID,
            A.BLOCKNO,
            FROM_ACCOUNT_ID,
            TO_ACCOUNT_ID,
            A.TRANSACTION_EARMARK EARMARK,
            B.ORG_ID FROM_ORG_ID,
            B.ORG_ID TO_ORG_ID,
            TRANSACTION_TYPE,
            AMOUNT,
            A.TXNTIMESTAMP CRDATE
        FROM
            "<transactionViewName>" A, "<accountsViewName>" B
            WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TO_ACCOUNT_ID IS NULL AND A.TRANSACTION_TYPE != 'CREATE_ACCOUNT'
        UNION
        SELECT DISTINCT
            TRANSACTION_ID,
            A.BLOCKNO,
            FROM_ACCOUNT_ID,
            TO_ACCOUNT_ID,
            A.TRANSACTION_EARMARK EARMARK,
            C.ORG_ID FROM_ORG_ID,
            C.ORG_ID TO_ORG_ID,
            TRANSACTION_TYPE,
            AMOUNT,
            A.TXNTIMESTAMP CRDATE
        FROM
            "<transactionViewName>" A, "<accountsViewName>" C
            WHERE A.TO_ACCOUNT_ID=C.ACCOUNT_ID AND A.FROM_ACCOUNT_ID IS NULL
        UNION
        SELECT DISTINCT
            TRANSACTION_ID,
            A.BLOCKNO,
            FROM_ACCOUNT_ID,
            TO_ACCOUNT_ID,
            A.TRANSACTION_EARMARK EARMARK,
            B.ORG_ID FROM_ORG_ID,
            C.ORG_ID TO_ORG_ID,
            TRANSACTION_TYPE,
            AMOUNT,
            A.TXNTIMESTAMP CRDATE
        FROM
        "<transactionViewName>" A, "<accountsViewName>" B, "<accountsViewName>" C
            WHERE A.FROM_ACCOUNT_ID=B.ACCOUNT_ID AND A.TO_ACCOUNT_ID=C.ACCOUNT_ID
        ORDER BY BLOCKNO DESC
Data Sources:
  • <transactionViewName> (A):提供交易層次資料 (ID、區塊編號、帳戶參考、金額、時間戳記)。
  • <accountsViewName> (B, C):提供 ACCOUNT_IDORG_ID 之間的對應。
關鍵邏輯:檢視使用 UNION 來合併來自三個交易模式的結果:
  1. 僅傳送者的交易 (例如,傳出或類似燒錄的案例)
    • 條件:A.FROM_ACCOUNT_ID = B.ACCOUNT_IDA.TO_ACCOUNT_ID IS NULL
    • 排除 CREATE_ACCOUNT 交易類型。
    • FROM_ORG_IDTO_ORG_ID 都是衍生自寄件者的組織 (B.ORG_ID)。
  2. 僅接收者的交易 (例如,傳入或類似 mint 的案例)
    • 條件:A.TO_ACCOUNT_ID = C.ACCOUNT_IDA.FROM_ACCOUNT_ID IS NULL
    • FROM_ORG_IDTO_ORG_ID 都是衍生自接收者的組織 (C.ORG_ID)。
  3. 標準轉帳 (與寄件者及接收者的交易)
    • 條件:A.FROM_ACCOUNT_ID = B.ACCOUNT_IDA.TO_ACCOUNT_ID = C.ACCOUNT_ID
    • FROM_ORG_ID 來自接收者的組織 (B.ORG_ID),TO_ORG_ID 來自接收者的組織 (C.ORG_ID)。
最後,結果會依 BLOCKNO 的遞減順序排序,以排列最新交易的優先順序。
輸出資料欄:
  • TRANSACTION_ID:交易的唯一 ID。
  • BLOCKNO:記錄交易的區塊號碼。
  • FROM_ACCOUNT_ID:寄件者的帳戶 ID (mint 可以是 NULL)。
  • TO_ACCOUNT_ID:接收者的帳戶 ID (燒錄時可以是 NULL)。
  • EARMARK:交易欄位 (別名 TRANSACTION_EARMARK)。
  • FROM_ORG_ID:寄件者的組織 ID (如果寄件者是 NULL,則與接收者相同)。
  • TO_ORG_ID:接收者的組織 ID (如果接收者為 NULL,則與傳送者相同)。
  • TRANSACTION_TYPE:異動的類型 (例如,移轉、薄荷、燒錄等等)。
  • AMOUNT:交易金額。
  • CRDATE:交易建立時戳 (TXNTIMESTAMP)。