预定义视图
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_RECEIVER
、EXECUTE_HOLD_SENDER
或CREATE_ACCOUNT
- 提取传出事务处理 (
from_account_id
) 和传入事务处理 (to_account_id
) 的账户参与。 - 使用
COALESCE
确保列(ORDER_BLOCKNO
、ORDER_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_RECEIVER
、EXECUTE_HOLD_SENDER
或CREATE_ACCOUNT
- 提取传出事务处理 (
from_account_id
) 和传入事务处理 (to_account_id
) 的账户参与。 - 使用
COALESCE
确保列(ORDER_BLOCKNO
、ORDER_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_TABLE
将associated_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 格式存储当前链代码状态,用于oaccount
和otoken
详细信息。- 远程组织视图:其他组织的 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
。 - 金额和余额(
amount
、from_account_balance
、to_account_balance
)按小数精度进行缩放,使用:value / POWER(10, decimal_value)
- 对
blockNo
和txnNo
使用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_id
或to_account_id
从ACCOUNTS_MOD
动态获取decimal_value
。使用value / POWER(10, decimal_value)
将扩展应用于amount
、from_account_balance
和to_account_balance
- 记录选择:使用
transaction_id
分区的ROW_NUMBER()
(最新为TXNTIMESTAMP
),以确保仅返回每个事务的最新版本。 - 数据规范化:在
blockNo
和txnNo
上应用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
构建:APPROVE_BURN
- 加入
FROM_ACCOUNT_ID = B.ACCOUNT_ID
。 - 将
B.ORG_ID
同时分配给FROM_ORG_ID
和TO_ORG_ID
。
- 加入
APPROVE_MINT
- 加入
TO_ACCOUNT_ID = C.ACCOUNT_ID
。 - 将
C.ORG_ID
同时分配给FROM_ORG_ID
和TO_ORG_ID
。
- 加入
- 常规转移
- 加入
FROM_ACCOUNT_ID = B.ACCOUNT_ID
和TO_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_BURN
、APPROVE_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_ID
与ORG_ID
之间的映射。
关键逻辑:该视图使用UNION
合并来自以下三种事务处理模式的结果:- 仅发件人的事务处理(例如,传出或类似烧写的情况)
- 条件:
A.FROM_ACCOUNT_ID = B.ACCOUNT_ID
和A.TO_ACCOUNT_ID IS NULL
。 - 排除
CREATE_ACCOUNT
事务处理类型。 FROM_ORG_ID
和TO_ORG_ID
都派生自发件人的组织 (B.ORG_ID
)。
- 条件:
- 仅接收方事务处理(例如,传入或类似薄荷的案例)
- 条件:
A.TO_ACCOUNT_ID = C.ACCOUNT_ID
和A.FROM_ACCOUNT_ID IS NULL
。 FROM_ORG_ID
和TO_ORG_ID
都派生自接收方的组织 (C.ORG_ID
)。
- 条件:
- 标准转移(与发送方和接收方的事务处理)
- 条件:
A.FROM_ACCOUNT_ID = B.ACCOUNT_ID
和A.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
)。