预定义视图

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) 的账户参与。
  • 使用 COALESCE 确保列(ORDER_BLOCKNOORDER_TXNNO)的排序一致,即使缺少 JSON 值也是如此。
  • 将传出和传入事务处理与 UNION ALL 组合。
输出列:
  • KEY:与事务处理关联的账户 ID(发送者或接收者)。
  • TRANSACTION_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) 的账户参与。
  • 使用 COALESCE 确保列(ORDER_BLOCKNOORDER_TXNNO)的排序一致,即使缺少 JSON 值也是如此。
  • 将传出和传入事务处理与 UNION ALL 组合。
输出列:
  • KEY:与事务处理关联的账户 ID(发送者或接收者)。
  • TRANSACTION_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:事务处理的唯一标识。
  • 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:事务处理的唯一标识。
  • 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:可变令牌帐户标识符。
    • token_id:链接到账户的令牌。
    • lng_number:Ordinality(在内部用于跟踪数组顺序)。
  • 排序:结果按块编号 (blockno) 和事务处理编号 (txnno) 降序排序,确保最先显示最近的关联。
输出列:
  • BLOCKNO:记录了注册表更新的块编号。
  • TXNNO:块中的事务处理编号。
  • KEY:表示可互换令牌注册表项的状态关键字。
  • ASSETTYPE:资产类型(预期:oftregistry)。
  • ORG_ID:来自 JSON 的组织标识符。
  • 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:拥有帐户的组织标识。
  • 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:事务处理的唯一标识。
  • FROM_ACCOUNT_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
应用别名(例如 TransactionId AS transaction_id)以保持输出列名在视图中的一致性,而不考虑 JSON 字段命名惯例。
机密 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_id 还是 to_account_id,从 ACCOUNTS_MOD 动态获取 decimal_value
  • 金额和余额(amountfrom_account_balanceto_account_balance)按小数精度进行缩放,使用:value / POWER(10, decimal_value)
  • blockNotxnNo 使用 COALESCE 来确保排序列始终存在,即使 JSON 中缺少排序列也是如此。
输出列:
  • BLOCKNO:用于排序的块编号(如果可用,来自 JSON,否则来自元数据)。
  • TXNNO:块中的事务处理编号(如果可用,来自 JSON,否则来自元数据)。
  • KEY:事务处理关键字标识符。
  • TXNTIMESTAMP:事务处理的时间戳。
  • ASSETTYPE:资产类型 (otransaction)。
  • TRANSACTION_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_idACCOUNTS_MOD 动态获取 decimal_value。使用 value / POWER(10, decimal_value) 将扩展应用于 amountfrom_account_balanceto_account_balance
  • 记录选择:使用 transaction_id 分区的 ROW_NUMBER()(最新为 TXNTIMESTAMP),以确保仅返回每个事务的最新版本。
  • 数据规范化:在 blockNotxnNo 上应用 COALESCE 以确保一致性,即使 JSON 有效负载中缺少值也是如此。
输出列:
  • BLOCKNO:用于排序的块编号(从 JSON(如果可用)和元数据中的其他)。
  • TXNNO:块中的事务处理编号(如果可用,来自 JSON,否则来自元数据)。
  • KEY:事务处理关键字标识符。
  • TXNTIMESTAMP:事务处理的时间戳。
  • ASSETTYPE:资产类型 (otransaction)。
  • TRANSACTION_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 和 Go:
`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_ID 同时分配给 FROM_ORG_IDTO_ORG_ID
  2. APPROVE_MINT
    • 加入 TO_ACCOUNT_ID = C.ACCOUNT_ID
    • C.ORG_ID 同时分配给 FROM_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:事务处理的唯一标识。
  • BLOCKNO:记录事务处理的块编号。
  • FROM_ACCOUNT_ID:发件人的帐户标识。
  • TO_ACCOUNT_ID:接收者的帐户标识。
  • EARMARK:事务处理专用类别(别名 TRANSACTION_EARMARK)。
  • FROM_ORG_ID:发件人帐户的组织 ID(或与烧录的 TO 相同)。
  • TO_ORG_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. 仅接收方事务处理(例如,传入或类似薄荷的案例)
    • 条件: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 来自接收方组织 (C.ORG_ID) 的 TO_ORG_ID 发件人组织 (B.ORG_ID)。
最后,结果按 BLOCKNO 的降序排序,以便确定最新事务处理的优先级。
输出列:
  • TRANSACTION_ID:事务处理的唯一标识。
  • BLOCKNO:记录事务处理的块编号。
  • FROM_ACCOUNT_ID:发件人的帐户 ID(mint 的帐户 ID 可能为 NULL)。
  • TO_ACCOUNT_ID:接收者的账户 ID(可能为烧录的 NULL)。
  • EARMARK:事务处理专用标记(别名 TRANSACTION_EARMARK)。
  • FROM_ORG_ID:发送方的组织 ID(如果发送方为 NULL,则与接收方相同)。
  • TO_ORG_ID:接收者的组织 ID(如果接收者为 NULL,则与发送者相同)。
  • TRANSACTION_TYPE:事务处理的类型(例如,转移、铸币、烧毁等)。
  • AMOUNT:事务处理金额。
  • CRDATE:事务处理创建时间戳 (TXNTIMESTAMP)。