미리 정의된 보기

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_typeEXECUTE_HOLD_RECEIVER, EXECUTE_HOLD_SENDER 또는 CREATE_ACCOUNT가 아닙니다.
  • 송신 거래(from_account_id) 및 수신 거래(to_account_id) 모두에서 계정 참여를 추출합니다.
  • COALESCE를 사용하여 JSON 값이 누락된 경우에도 일관된 열 순서(ORDER_BLOCKNO, ORDER_TXNNO)를 보장합니다.
  • 송신 및 수신 트랜잭션을 모두 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_typeEXECUTE_HOLD_RECEIVER, EXECUTE_HOLD_SENDER 또는 CREATE_ACCOUNT가 아닙니다.
  • 송신 거래(from_account_id) 및 수신 거래(to_account_id) 모두에서 계정 참여를 추출합니다.
  • COALESCE를 사용하여 JSON 값이 누락된 경우에도 일관된 열 순서(ORDER_BLOCKNO, ORDER_TXNNO)를 보장합니다.
  • 송신 및 수신 트랜잭션을 모두 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: 거래 후 수령인 계정의 보류 잔액입니다.
Confidential SQL Query, 참여자 은행:
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: ORDER BY TXNTIMESTAMP DESC와 함께 ROW_NUMBER()를 사용하여 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입니다.
Confidential SQL Query, 참여자 은행:
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: ORDER BY TXNTIMESTAMP DESC와 함께 ROW_NUMBER()를 사용하여 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: 일반성(배열 순서를 추적하기 위해 내부적으로 사용됨).
  • 정렬: 결과는 블록 번호(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 뷰와 동일합니다. 유일한 차이점은 소문자 대신 Pascal 대소문자를 사용하는 JSON 필드 이름 지정 규칙입니다.
  • 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: oaccountotoken 세부정보에 사용되는 JSON 형식의 현재 체인코드 상태를 보유하는 상태 테이블입니다.
  • 원격 조직 뷰: 다른 조직의 ACCOUNTS_MOD 뷰에 있는 추가 데이터는 데이터베이스 링크를 사용하여 포함됩니다.
    • "ACCOUNTS_MOD"@<org1Name>_LINK
    • "ACCOUNTS_MOD"@<org2Name>_LINK
    • "ACCOUNTS_MOD"@<org3Name>_LINK
키 논리:
  • 기록 레코드 순위 지정: ROW_NUMBER()를 사용하여 기록 테이블에서 각 계정 ID에 대한 최신 oaccountpdc 레코드를 선택합니다.
  • 현재 계정 필터링: 상태 테이블에서 assetType = 'oaccount'가 있는 레코드만 검색합니다.
  • 조인 토큰 메타데이터: 상태 테이블의 otoken 항목에 조인하여 토큰 정밀도(decimal_value)를 추가합니다.
  • Combine Account Details: 필터링된 고객사 레코드를 최근 내역 항목 및 토큰 세부 정보와 결합합니다. 적합한 과거 데이터(h.valuejson IS NOT NULL)가 있는 계정만 포함되도록 합니다.
  • Multi-Org Union: UNION ALL를 사용하여 데이터베이스 링크를 통해 로컬 조직의 계정 데이터를 여러 원격 조직과 병합합니다. 이렇게 하면 단일 통합 쿼리가 네트워크를 통해 모든 계정을 검색할 수 있습니다.
출력 열:
  • ACCOUNT_ID: 계정의 고유한 식별자입니다.
  • ORG_ID: 계정을 소유한 조직 ID입니다.
  • USER_ID: 최근 내역 레코드의 고객사에 연결된 사용자 ID입니다.
  • CUSTOM_ACCOUNT_ID: 선택적 사용자정의 사용자 정의 계정 식별자입니다.
  • TOKEN_ID: 계정과 연관된 토큰 식별자입니다.
  • DECIMAL_VALUE: 토큰 소수점 이하 자릿수입니다. 누락된 경우 기본값은 0입니다.

동적 생성: 다중 조직 부품이 하드코딩되지 않았습니다. 스크립트에서 Participant_orgs_list.yml 파일에 따라 추가 조합이 동적으로 생성됩니다. 이렇게 하면 네트워크에 구성된 조직 수에 따라 뷰가 자동으로 조정됩니다. 예제 query는 명확성을 위해 세 개의 조직을 표시하지만 실제로는 조합의 수가 orgsList의 크기에 따라 다릅니다. 자세한 내용은 이 항목의 Participant_orgs_list.yml 파일에 대한 이전 정보를 참조하십시오.

Confidential SQL Query, 참여자 은행:
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;
이 뷰는 Confidential SQL Query, System Owner와 동일하지만 로컬 조직에 대해서만 데이터를 검색합니다. 주요 차이점은 다음과 같습니다.
  • 데이터베이스 링크가 있는 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: 자산/값이 시작된 계정 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 뷰와 동일합니다. 유일한 차이점은 소문자 대신 Pascal 대소문자를 사용하는 JSON 필드 이름 지정 규칙입니다.
  • 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(txntimestamp DESC 순서)로 분할된 ROW_NUMBER()를 사용하여 트랜잭션당 최신 레코드만 포함되도록 합니다.
  • 트랜잭션에 from_account_id 또는 to_account_id가 포함되는지 여부에 따라 ACCOUNTS_MOD에서 decimal_value를 동적으로 인출합니다.
  • 금액 및 잔액(amount, from_account_balance, to_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: 거래 후 수령인 계정의 잔액으로, 소수점 이하 자릿수로 배율 조정됩니다.
Confidential SQL Query, 참여자 은행:
`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_balanceto_account_balance에 스케일링을 적용합니다.
  • 레코드 선택: 각 트랜잭션의 최신 버전만 반환되도록 하려면 transaction_id(최신 TXNTIMESTAMP)로 분할된 ROW_NUMBER()를 사용합니다.
  • 데이터 정규화: COALESCEblockNotxnNo에 적용되어 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 및 실행:
`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에 가입하십시오.
    • FROM_ORG_IDTO_ORG_IDB.ORG_ID를 지정합니다.
  2. APPROVE_MINT
    • TO_ACCOUNT_ID = C.ACCOUNT_ID에 가입하십시오.
    • FROM_ORG_IDTO_ORG_IDC.ORG_ID를 지정합니다.
  3. 정규 이전
    • FROM_ACCOUNT_ID = B.ACCOUNT_IDTO_ACCOUNT_ID = C.ACCOUNT_ID에 조인합니다.
    • B.ORG_IDFROM_ORG_ID으로, C.ORG_IDTO_ORG_ID로 지정합니다.
마지막으로 결과는 최신 트랜잭션의 우선순위를 지정하기 위해 BLOCKNO DESC로 정렬됩니다.
출력 열:
  • TRANSACTION_ID: 거래의 고유 식별자로,
  • BLOCKNO: 트랜잭션이 기록된 블록 번호입니다.
  • FROM_ACCOUNT_ID: 발신자의 계정 ID입니다.
  • TO_ACCOUNT_ID: 수령인의 계정 ID입니다.
  • EARMARK: 트랜잭션 어마크 범주(별칭: TRANSACTION_EARMARK).
  • FROM_ORG_ID: 발신자 계정의 조직 ID입니다(또는 레코딩의 경우 TO와 동일).
  • TO_ORG_ID: 수령인 계정의 조직 ID입니다(또는 민트의 경우 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_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는 발신자 조직(B.ORG_ID), 수신자 조직(C.ORG_ID)의 TO_ORG_ID에서 제공됩니다.
마지막으로 결과는 최신 트랜잭션의 우선순위를 지정하기 위해 BLOCKNO의 내림차순으로 정렬됩니다.
출력 열:
  • TRANSACTION_ID: 거래의 고유 식별자로,
  • BLOCKNO: 트랜잭션이 기록되는 블록 번호
  • FROM_ACCOUNT_ID: 발신자의 계정 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)입니다.