Vues prédéfinies
Oracle Blockchain Platform Digital Assets Edition fournit les vues de base de données prédéfinies suivantes.
-
ACCOUNT_TRANSACTION_VIEW
- Cette vue fournit un historique des transactions unifié par compte, en saisissant les côtés débit (
from_account_id
) et crédit (to_account_id
) d'une transaction. Vous pouvez utiliser cette vue pour interroger toutes les transactions liées à un compte sans balayer les données d'état brutes de code de chaîne. - Interrogation SQL confidentielle, responsable du système :
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
Sources de données :
<obpInstanceName>_<channelName>_state
, la table d'état principale contenant les données de code de chaîne au format JSONLogique de clé :- Inclut uniquement les lignes pour lesquelles les instructions suivantes sont vraies.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
KEY
ne commence pas par_obp2pc_
transaction_type
n'est pasEXECUTE_HOLD_RECEIVER
,EXECUTE_HOLD_SENDER
ouCREATE_ACCOUNT
- Extrait l'implication du compte à la fois des transactions sortantes (
from_account_id
) et des transactions entrantes (to_account_id
). - Utilise
COALESCE
pour garantir un ordre cohérent des colonnes (ORDER_BLOCKNO
,ORDER_TXNNO
) même si des valeurs JSON sont manquantes. - Combine les transactions sortantes et entrantes avec un
UNION ALL
.
Colonnes de sortie :KEY
: ID compte associé à la transaction (expéditeur ou destinataire).TRANSACTION_ID
: Identificateur unique de la transaction.TRANSACTION_DETAILS
: Objet JSON complet de la transaction.ORDER_BLOCKNO
: Numéro de bloc utilisé pour le tri (à partir de JSON, si disponible, sinon métadonnées de bloc).ORDER_TXNNO
: Numéro de transaction dans le bloc (à partir de JSON, si disponible, sinon métadonnées de bloc).
- Inclut uniquement les lignes pour lesquelles les instructions suivantes sont vraies.
- Données SourcesConfidential Interrogation SQL, Banque du participant :
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
Sources de données :
<obpInstanceName>_<channelName>_state
, la table d'état principale contenant les données de code de chaîne au format JSONLogique de clé :- Inclut uniquement les lignes pour lesquelles les instructions suivantes sont vraies.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
KEY
ne commence pas par_obp2pc_
transaction_type
n'est pasEXECUTE_HOLD_RECEIVER
,EXECUTE_HOLD_SENDER
ouCREATE_ACCOUNT
- Extrait l'implication du compte à la fois des transactions sortantes (
from_account_id
) et des transactions entrantes (to_account_id
). - Utilise
COALESCE
pour garantir un ordre cohérent des colonnes (ORDER_BLOCKNO
,ORDER_TXNNO
) même si des valeurs JSON sont manquantes. - Combine les transactions sortantes et entrantes avec un
UNION ALL
.
Colonnes de sortie :KEY
: ID compte associé à la transaction (expéditeur ou destinataire).TRANSACTION_ID
: Identificateur unique de la transaction.TRANSACTION_DETAILS
: Objet JSON complet de la transaction.ORDER_BLOCKNO
: Numéro de bloc utilisé pour le tri (à partir de JSON, si disponible, sinon métadonnées de bloc).ORDER_TXNNO
: Numéro de transaction dans le bloc (à partir de JSON, si disponible, sinon métadonnées de bloc).
- Inclut uniquement les lignes pour lesquelles les instructions suivantes sont vraies.
-
TRANSACTION_PDC_VIEW
- Cette vue fournit des détails sur le solde et le montant au niveau de la transaction à partir de la collecte de données privée. Il garantit que seul le dernier enregistrement par transaction est extrait.
- Interrogation SQL confidentielle, responsable du système :
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
Objectif : Agréger les données dans l'ensemble de l'organisation au moyen de liens de base de données.
Sources de données :<obpInstanceName>_<channelName>_hist
: le tableau de données du code de chaîne historique contenant les enregistrements de collecte de données privée$TRANSACTION_PDC_VIEW@${org1Name}_LINK
: Vue distante de l'organisation 1 accessible au moyen du lien de base de données.$TRANSACTION_PDC_VIEW@${org2Name}_LINK
: Vue distante de l'organisation 2 accessible au moyen du lien de base de données.
Logique de clé :- Filtre uniquement les enregistrements pour lesquels les énoncés suivants sont vrais.
CHAINCODEID = ${implicitPDCName}
assetType = 'otransactionpdc'
KEY
ne commence pas par_obp2pc_staged_.
- Utilise la fonction de fenêtre
ROW_NUMBER()
.- Partitions par
transaction_id
. - Commandes d'ici le
TXNTIMESTAMP DESC
. - Conserve uniquement le dernier enregistrement
(rn = 1)
.
- Partitions par
- Combine les données de la table d'historique de collecte de données privée locale, de la vue de collecte de données privée de l'organisation 1 (via un lien de base de données) et de la vue de collecte de données privée de l'organisation 2 (via un lien de base de données).
Colonnes de sortie :TRANSACTION_ID
: Identificateur unique de la transaction.CHAINCODEID
: Identificateur du code de chaîne associé à l'enregistrement PDC.QUANTITY
: Montant ou quantité de la transaction transférée.FROM_ACCOUNT_BALANCE
: Solde du compte de l'expéditeur après la transaction.FROM_ACCOUNT_ONHOLD_BALANCE
: Solde bloqué du compte de l'expéditeur après la transaction.TO_ACCOUNT_BALANCE
: Solde du compte destinataire après la transaction.TO_ACCOUNT_ONHOLD_BALANCE
: Solde bloqué du compte destinataire après la transaction.
- Interrogation SQL confidentielle, banque du participant :
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
Sources de données :<obpInstanceName>_<channelName>_hist
: le tableau de données du code de chaîne historique contenant les enregistrements de collecte de données privée
Logique de clé :- Filtre uniquement les enregistrements pour lesquels les énoncés suivants sont vrais.
CHAINCODEID = ${implicitPDCName}
assetType = 'otransactionpdc'
KEY
ne commence pas par_obp2pc_staged_.
- Utilise la fonction de fenêtre
ROW_NUMBER()
.- Partitions par
transaction_id
. - Commandes d'ici le
TXNTIMESTAMP DESC
. - Conserve uniquement le dernier enregistrement
(rn = 1)
.
- Partitions par
Colonnes de sortie :TRANSACTION_ID
: Identificateur unique de la transaction.CHAINCODEID
: Identificateur du code de chaîne associé à l'enregistrement PDC.QUANTITY
: Montant ou quantité de la transaction transférée.FROM_ACCOUNT_BALANCE
: Solde du compte de l'expéditeur après la transaction.FROM_ACCOUNT_ONHOLD_BALANCE
: Solde bloqué du compte de l'expéditeur après la transaction.TO_ACCOUNT_BALANCE
: Solde du compte destinataire après la transaction.TO_ACCOUNT_ONHOLD_BALANCE
: Solde bloqué du compte destinataire après la transaction.
-
ACCOUNTS_VIEW
- Cette vue fournit une vue consolidée des comptes dans toutes les organisations.
- Interrogation SQL confidentielle, responsable du système :
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
Objet : Cette vue fournit une vue consolidée des comptes de toutes les organisations, combinant les informations suivantes.- État du compte courant
- Dernières données privées liées au compte (collecte de données privées)
- Métadonnées de jeton telles que la précision décimale
- Détails des comptes interorganisations au moyen de liens de base de données
Sources de données :<obpInstanceName>_<channelName>_hist
: Données du code de chaîne historique utilisées pour extraire l'entrée de collecte de données privée du compte la plus récente (oaccountpdc
).<obpInstanceName>_<channelName>_state
: Données d'état courantes pour les comptes (oaccount
) et les jetons (otoken
).ACCOUNTS_VIEW@<org1Name>_LINK
: Vue distante de l'organisation 1.ACCOUNTS_VIEW@<org2Name>_LINK
: Vue distante de l'organisation 2.
Logique de clé :hist_ranked
CTE : Obtient le dernier enregistrement de collecte de données privée paraccount_id
à l'aide deROW_NUMBER()
avecORDER BY TXNTIMESTAMP DESC
.state_filtered
CTE : Sélectionne les comptes (oaccount
) dans la table d'états.token_details
CTE : Extrait les détails du jeton (otoken
) avec une précision décimale (par défaut,0
s'il est manquant).- Jointures de sélection finale : État du compte (
state_filtered
) avec les derniers détails de la collecte de données privée (hist_ranked
) et métadonnées de jeton (token_details
). - Garantit uniquement les comptes avec la collecte de données privée associée (
WHERE h.valuejson IS NOT NULL
). - Étend les données de compte avec des associations de liens de base de données d'autres organisations.
Colonnes de sortie :ACCOUNT_ID
: Identificateur unique du compte.ORG_ID
: ID organisation associé au compte.USER_ID
: ID utilisateur lié au compte (à partir de la collecte de données privée).CUSTOM_ACCOUNT_ID
: Identificateur de compte personnalisé défini par l'utilisateur.TOKEN_ID
: Identificateur de jeton associé au compte.DECIMAL_VALUE
: Précision décimale du jeton (par défaut, 0 s'il est manquant).
- Interrogation SQL confidentielle, banque du participant :
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
Objet : Cette vue fournit une vue consolidée des comptes de toutes les organisations, combinant les informations suivantes.- État du compte courant
- Dernières données privées liées au compte (collecte de données privées)
- Métadonnées de jeton telles que la précision décimale
Sources de données :<obpInstanceName>_<channelName>_hist
: Données du code de chaîne historique utilisées pour extraire l'entrée de collecte de données privée du compte la plus récente (oaccountpdc
).<obpInstanceName>_<channelName>_state
: Données d'état courantes pour les comptes (oaccount
) et les jetons (otoken
).
Logique de clé :hist_ranked
CTE : Obtient le dernier enregistrement de collecte de données privée paraccount_id
à l'aide deROW_NUMBER()
avecORDER BY TXNTIMESTAMP DESC
.state_filtered
CTE : Sélectionne les comptes (oaccount
) dans la table d'états.token_details
CTE : Extrait les détails du jeton (otoken
) avec une précision décimale (par défaut,0
s'il est manquant).- Jointures de sélection finale : État du compte (
state_filtered
) avec les derniers détails de la collecte de données privée (hist_ranked
) et métadonnées de jeton (token_details
). - Garantit uniquement les comptes avec la collecte de données privée associée (
WHERE h.valuejson IS NOT NULL
).
Colonnes de sortie :ACCOUNT_ID
: Identificateur unique du compte.ORG_ID
: ID organisation associé au compte.USER_ID
: ID utilisateur lié au compte (à partir de la collecte de données privée).CUSTOM_ACCOUNT_ID
: Identificateur de compte personnalisé défini par l'utilisateur.TOKEN_ID
: Identificateur de jeton associé au compte.DECIMAL_VALUE
: Précision décimale du jeton (par défaut, 0 s'il est manquant).
-
ACCOUNTS_MOD
- Cette vue fournit une représentation structurée des données du registre de jetons fongibles, en mappant les organisations et les utilisateurs avec leurs comptes de jetons fongibles et jetons associés. Ce service simplifie l'accès aux relations de jeton de compte stockées dans l'état du code de chaîne en aplanissant les baies JSON imbriquées, ce qui facilite la consommation des interrogations d'application et d'analyse.
- Interrogation SQL générique, 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`
Sources de données :<obpInstanceName>_<channelName>_state
: Table d'états principale contenant les données de code de chaîne au format JSON.
Logique de clé :- Filtrer par clé de registre : Inclut uniquement les enregistrements où la clé contient
oftregistry
. - Filtrer par code de chaîne : Restreint les résultats au code de chaîne spécifié (
<chaincodeName>
). - Aplanir le JSON imbriqué : Utilise
JSON_TABLE
pour développer le tableauassociated_ft_accounts
en rangées distinctes pour chaque paire compte-jeton.account_id
: Identificateur de compte de jeton fongible.token_id
: Jeton lié au compte.lng_number
: Ordinalité (utilisée en interne pour suivre l'ordre des baies).
- Tri : Les résultats sont triés par numéro de bloc (
blockno
) et par numéro de transaction (txnno
) par ordre décroissant, ce qui garantit que les associations les plus récentes sont affichées en premier.
Colonnes de sortie :BLOCKNO
: Numéro de bloc où la mise à jour du registre a été enregistrée.TXNNO
: Numéro de transaction dans le bloc.KEY
: Clé d'état représentant l'entrée de registre de jeton fongible.ASSETTYPE
: Type de ressource (attendu :oftregistry
).ORG_ID
: Identificateur d'organisation à partir du fichier JSON.USER_ID
: Identificateur d'utilisateur associé à l'enregistrement de registre.ACCOUNT_ID
: ID compte de jeton fongible extrait du tableau imbriqué.TOKEN_ID
: ID jeton extrait lié au compte de jeton fongible.
- Interrogation SQL générique, Aller :
`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`
Cette vue est la même que l'interrogation SQL générique, la vue TypeScript. La seule différence réside dans la convention d'attribution de nom de champ JSON, qui utilise la casse Pascal au lieu de minuscules.AssetType
:assetType
précédentOrgId
:org_id
précédentUserId
:user_id
précédentAssociatedFtAccounts
:associated_ft_accounts
précédentAccountId
:account_id
précédentTokenId
:token_id
précédent
OrgId AS org_id
) pour assurer la cohérence des noms de colonne de sortie entre les vues. - Interrogation SQL confidentielle, responsable du système :
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;
Sources de données :<obpInstanceName>_<channelName>_hist
: Table d'historique stockant les modifications chronologiques des données privées du compte (oaccountpdc
).<obpInstanceName>_<channelName>_state
: Table d'états contenant l'état courant du code de chaîne au format JSON, utilisée pour les détailsoaccount
etotoken
.- Vues d'organisation distante : Les données supplémentaires des vues ACCOUNTS_MOD d'autres organisations sont incluses à l'aide des liens de base de données :
"ACCOUNTS_MOD"@<org1Name>_LINK
"ACCOUNTS_MOD"@<org2Name>_LINK
"ACCOUNTS_MOD"@<org3Name>_LINK
Logique de clé :- Classer les enregistrements historiques : Utilise
ROW_NUMBER()
pour sélectionner le dernier enregistrementoaccountpdc
pour chaque ID compte dans la table d'historique. - Filtrer les comptes courants : Extrait uniquement les enregistrements avec
assetType = 'oaccount'
de la table d'états. - Jointure des métadonnées de jeton : Ajoute la précision du jeton (
decimal_value
) en se joignant aux entréesotoken
de la table d'état. - Combiner les détails du compte : Joint les enregistrements de compte filtrés avec leur entrée d'historique la plus récente et les détails du jeton. S'assure que seuls les comptes avec des données historiques valides (
h.valuejson IS NOT NULL
) sont inclus. - Union multi-organisations : Utilise
UNION ALL
pour fusionner les données de compte de l'organisation locale avec plusieurs organisations distantes au moyen de liens de base de données. Cela permet à une seule interrogation unifiée d'extraire tous les comptes sur le réseau.
Colonnes de sortie :ACCOUNT_ID
: Identificateur unique du compte.ORG_ID
: ID organisation responsable du compte.USER_ID
: ID utilisateur lié au compte (à partir du dernier enregistrement historique).CUSTOM_ACCOUNT_ID
: Identificateur de compte personnalisé facultatif défini par l'utilisateur.TOKEN_ID
: Identificateur de jeton associé au compte.DECIMAL_VALUE
: Précision décimale du jeton (par défaut, 0 s'il est manquant).
Génération dynamique : La partie multiorganisation n'est pas codée en dur. Dans le script, les unions supplémentaires sont générées dynamiquement en fonction du fichier
Participant_orgs_list.yml
. Cela garantit que la vue s'adapte automatiquement en fonction du nombre d'organisations configurées dans le réseau. L'exemple d'interrogation montre trois organisations pour plus de clarté, mais dans la pratique, le nombre de syndicats dépend de la taille deorgsList
. Pour plus de détails, voir les informations précédentes sur le fichierParticipant_orgs_list.yml
dans cette rubrique. - Interrogation SQL confidentielle, banque du participant :
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;
Cette vue est identique à l'interrogation SQL confidentielle, propriétaire du système, mais elle extrait les données uniquement pour l'organisation locale. Les principales différences sont les suivantes :- Aucun
UNION ALL
avec des liens de base de données n'est utilisé. - La sortie inclut uniquement les comptes provenant des tables d'état et d'historique de l'organisation courante.
- La vue fournit un registre de comptes à organisation unique, contrairement à la variante à organisations multiples qui regroupe les comptes de plusieurs organisations.
- Aucun
-
TRANSACTION_MOD
- Cette vue fournit un enregistrement détaillé de toutes les transactions de la chaîne de blocs, en saisissant les métadonnées, les participants, les montants et les soldes résultants. Il simplifie l'accès à l'historique des transactions en extrayant des champs structurés directement à partir de la table d'historique, éliminant ainsi la nécessité d'analyser manuellement le code JSON brut.
- Interrogation SQL générique, 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`
Sources de données :
<obpInstanceName>_<channelName>_hist
, la table d'historique contenant tous les événements de transaction au format JSON. Comprend à la fois les détails de la transaction et les métadonnées associées (bloc, numéro de transaction, horodatage).Logique de clé :- Inclut uniquement les lignes pour lesquelles les instructions suivantes sont vraies.
CHAINCODEID = <chaincodeName>
KEY
contientotransaction
(filtres pour les enregistrements liés aux transactions)
- Les commandes sont exécutées de la manière suivante.
blockno DESC
(dernier bloc en premier)txnno DESC
(dernière transaction dans le bloc en premier)
Colonnes de sortie :BLOCKNO
: Numéro de bloc dans lequel la transaction a été enregistrée.TXNNO
: Numéro de transaction dans le bloc.KEY
: Identificateur unique de l'entrée de transaction.TXNTIMESTAMP
: Horodatage de la fin de la transaction.ASSETTYPE
: Type de ressource pour la transaction (par exemple,otransaction
).TRANSACTION_ID
: Identificateur unique de la transaction.FROM_ACCOUNT_ID
: ID compte d'où provient la ressource/valeur.TO_ACCOUNT_ID
: ID compte dans lequel l'immobilisation/valeur a été transférée.TRANSACTION_TYPE
: Type de transaction (par exemple, transfert, débit, crédit).AMOUNT
: Montant impliqué dans la transaction.TRANSACTION_EARMARK
: Catégorie ou affectation pour la transaction.FROM_ACCOUNT_BALANCE
: Solde du compte source après la transaction.TO_ACCOUNT_BALANCE
: Solde du compte de destination après la transaction.
- Inclut uniquement les lignes pour lesquelles les instructions suivantes sont vraies.
- Interrogation SQL générique, Aller :
`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`
Cette vue est la même que l'interrogation SQL générique, la vue TypeScript. La seule différence réside dans la convention d'attribution de nom de champ JSON, qui utilise la casse Pascal au lieu de minuscules.AssetType
:assetType
précédentTransactionId
:transaction_id
précédentFromAccountId
:from_account_id
précédentToAccountId
:to_account_id
précédentTransactionType
:transaction_type
précédentAmount
:amount
précédentCategory
:category
précédentFromAccountBalance
:from_account_balance
précédentToAccountBalance
:to_account_balance
précédent
TransactionId AS transaction_id
) pour assurer la cohérence des noms de colonne de sortie entre les vues, quelle que soit la convention d'attribution de nom de champ JSON. - Interrogation SQL confidentielle, responsable du système :
`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`
Sources de données :<obpInstanceName>_<channelName>_hist
: Tableau de code de chaîne historique stockant toutes les versions de transaction.<transactionPDCViewName>
: Vue contenant les détails de transaction de collecte de données privée, jointe pour enrichir les enregistrements de transaction.ACCOUNTS_MOD
: Vue de référence utilisée pour extraire la valeurdecimal_value
correcte pour les soldes de compte et les montants de transaction.
Logique de clé :- Filtre uniquement les rangées pour lesquelles les énoncés suivants sont vrais.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
KEY
ne commence pas par_obp2pc_staged_
- Utilise
ROW_NUMBER()
partitionné partransaction_id
(ordonné partxntimestamp DESC
) pour garantir que seul le dernier enregistrement par transaction est inclus. - Extrait dynamiquement
decimal_value
à partir deACCOUNTS_MOD
, selon que la transaction impliquefrom_account_id
outo_account_id
. - Les montants et les soldes (
amount
,from_account_balance
,to_account_balance
) sont mis à l'échelle par précision décimale à l'aide de :value / POWER(10, decimal_value)
- Utilise
COALESCE
surblockNo
ettxnNo
pour garantir que les colonnes de tri sont toujours présentes, même si elles sont manquantes dans JSON.
Colonnes de sortie :BLOCKNO
: Numéro de bloc pour la commande (à partir de JSON, si disponible, sinon à partir des métadonnées).TXNNO
: Numéro de transaction dans le bloc (à partir de JSON, si disponible, sinon à partir des métadonnées).KEY
: Identificateur de clé de transaction.TXNTIMESTAMP
: Horodatage de la transaction.ASSETTYPE
: Type de ressource (otransaction
).TRANSACTION_ID
: Identificateur unique de la transaction.FROM_ACCOUNT_ID
: ID compte à partir duquel les jetons ont été envoyés.TO_ACCOUNT_ID
: ID compte auquel les jetons ont été envoyés.TRANSACTION_TYPE
: Type de transaction (par exemple, transfert, blocage, déblocage).AMOUNT
: Montant de la transaction, mis à l'échelle par précision décimale du jeton.TRANSACTION_EARMARK
: Catégorie ou attribution de la transaction.FROM_ACCOUNT_BALANCE
: Solde du compte de l'expéditeur après transaction, mis à l'échelle par précision.TO_ACCOUNT_BALANCE
: Solde du compte du destinataire après transaction, mis à l'échelle par précision.
- Interrogation SQL confidentielle, banque du participant :
`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`
Sources de données :<obpInstanceName>_<channelName>_hist
: Tableau de code de chaîne historique contenant toutes les versions de transaction au format JSON.<transactionPDCViewName>
: Vue de collecte de données privée qui contient les données privées au niveau de la transaction. Il est joint à l'historique pour enrichir l'enregistrement de transaction.ACCOUNTS_MOD
: Vue utilisée pour extraire la précision décimale correcte du jeton (decimal_value
) pour les comptes impliqués dans des transactions.
Logique de clé :- Filtre uniquement les rangées pour lesquelles les énoncés suivants sont vrais.
CHAINCODEID = <chaincodeName>
assetType = 'otransaction'
- Exclut les transactions en zone de préparation (
KEY NOT LIKE '_obp2pc_staged_%'
)
- Ajustement décimal : Extrait
decimal_value
dynamiquement à partir deACCOUNTS_MOD
, en fonction defrom_account_id
outo_account_id
. Applique l'ajustement àamount
,from_account_balance
etto_account_balance
à l'aide de :value / POWER(10, decimal_value)
- Sélection d'enregistrement : Utilise
ROW_NUMBER()
partitionné partransaction_id
(la plus récente parTXNTIMESTAMP
) pour garantir que seule la dernière version de chaque transaction est retournée. - Normalisation des données :
COALESCE
est appliqué surblockNo
ettxnNo
pour assurer la cohérence même si les valeurs sont manquantes dans les données utiles JSON.
Colonnes de sortie :BLOCKNO
: Numéro de bloc utilisé pour la commande (à partir de JSON, si disponible, sinon à partir des métadonnées).TXNNO
: Numéro de transaction dans le bloc (à partir de JSON, si disponible, sinon à partir des métadonnées).KEY
: Identificateur de clé de transaction.TXNTIMESTAMP
: Horodatage de la transaction.ASSETTYPE
: Type de ressource (otransaction
).TRANSACTION_ID
: Identificateur unique de la transaction.FROM_ACCOUNT_ID
: ID compte envoyant des jetons.TO_ACCOUNT_ID
: ID compte recevant les jetons.TRANSACTION_TYPE
: Type de transaction (par exemple, transfert, blocage, déblocage).AMOUNT
: Montant de la transaction, normalisé à l'aide de la précision décimale du jeton.TRANSACTION_EARMARK
: Catégorie ou affectation pour la transaction.FROM_ACCOUNT_BALANCE
: Solde du compte de l'expéditeur après la transaction (ajusté avec précision).TO_ACCOUNT_BALANCE
: Solde du compte destinataire après la transaction (ajusté avec précision).
-
ACCOUNTS_TRANSACTION_MOD
- Cette vue prolonge l'historique des transactions en associant chaque transaction aux codes d'organisation des comptes participants. Il prend en charge les approbations de consommation, les approbations de mentalité et les transferts réguliers, en veillant à ce que les transactions incluent à la fois un contexte au niveau du compte et au niveau de l'organisation.
- Interrogation SQL générique, TypeScript et 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`
Sources de données :<transactionViewName> (A)
: Fournit des détails de transaction de base tels que les ID, les numéros de bloc, les comptes, les montants et les horodatages.<accountsViewName> (B, C)
: Mappe les comptes (ACCOUNT_ID
) aux organisations (ORG_ID
) pour l'expéditeur et le destinataire.
Key Logic : La vue est créée à l'aide d'unUNION
de trois cas :APPROVE_BURN
- Joignez-vous à
FROM_ACCOUNT_ID = B.ACCOUNT_ID
. - Affectez
B.ORG_ID
àFROM_ORG_ID
etTO_ORG_ID
.
- Joignez-vous à
APPROVE_MINT
- Joignez-vous à
TO_ACCOUNT_ID = C.ACCOUNT_ID
. - Affectez
C.ORG_ID
àFROM_ORG_ID
etTO_ORG_ID
.
- Joignez-vous à
- Transferts réguliers
- Rejoignez-nous sur
FROM_ACCOUNT_ID = B.ACCOUNT_ID
etTO_ACCOUNT_ID = C.ACCOUNT_ID
. - Affectez
B.ORG_ID
en tant queFROM_ORG_ID
etC.ORG_ID
en tant queTO_ORG_ID
.
- Rejoignez-nous sur
BLOCKNO DESC
pour prioriser les dernières transactions.Colonnes de sortie :TRANSACTION_ID
: Identificateur unique de la transaction.BLOCKNO
: Numéro de bloc dans lequel la transaction a été enregistrée.FROM_ACCOUNT_ID
: ID compte de l'expéditeur.TO_ACCOUNT_ID
: ID compte du destinataire.EARMARK
: Catégorie d'affectation de transaction (alias deTRANSACTION_EARMARK
).FROM_ORG_ID
: ID organisation du compte de l'expéditeur (ou identique àTO
pour gravure).TO_ORG_ID
: ID organisation du compte du destinataire (ou identique àFROM
pour mint).TRANSACTION_TYPE
: Type de la transaction (APPROVE_BURN
,APPROVE_MINT
ou transfert).AMOUNT
: Montant de la transaction.CRDATE
: Date de création de la transaction (à partir deTXNTIMESTAMP
).
- Interrogation SQL confidentielle, responsable du système et banque du participant :
`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
Sources de données :<transactionViewName> (A)
: Fournit des données au niveau des transactions (ID, numéros de bloc, références de compte, montants, horodatages).<accountsViewName> (B, C)
: Fournit un mappage entreACCOUNT_ID
etORG_ID
.
Logique clé : La vue utiliseUNION
pour fusionner les résultats de trois modèles de transaction :- Transactions destinées uniquement à l'expéditeur (par exemple, cas sortants ou similaires à un traitement)
- Condition :
A.FROM_ACCOUNT_ID = B.ACCOUNT_ID
etA.TO_ACCOUNT_ID IS NULL
. - Exclut le type de transaction
CREATE_ACCOUNT
. FROM_ORG_ID
etTO_ORG_ID
sont tous deux dérivés de l'organisation de l'expéditeur (B.ORG_ID
).
- Condition :
- Transactions destinées uniquement aux destinataires (par exemple, cas entrants ou de type menthe)
- Condition :
A.TO_ACCOUNT_ID = C.ACCOUNT_ID
etA.FROM_ACCOUNT_ID IS NULL
. FROM_ORG_ID
etTO_ORG_ID
sont tous deux dérivés de l'organisation du destinataire (C.ORG_ID
).
- Condition :
- Transferts standard (transactions avec l'expéditeur et le destinataire)
- Condition :
A.FROM_ACCOUNT_ID = B.ACCOUNT_ID
etA.TO_ACCOUNT_ID = C.ACCOUNT_ID
. FROM_ORG_ID
provient de l'organisation de l'expéditeur (B.ORG_ID
),TO_ORG_ID
de l'organisation du destinataire (C.ORG_ID
).
- Condition :
BLOCKNO
pour prioriser les dernières transactions.Colonnes de sortie :TRANSACTION_ID
: Identificateur unique de la transaction.BLOCKNO
: Numéro de bloc où la transaction est enregistrée.FROM_ACCOUNT_ID
: ID compte de l'expéditeur (peut êtreNULL
pour mint).TO_ACCOUNT_ID
: ID compte du destinataire (peut êtreNULL
pour gravure).EARMARK
: Affectation de transaction (alias deTRANSACTION_EARMARK
).FROM_ORG_ID
: ID organisation de l'expéditeur (ou identique au destinataire si l'expéditeur estNULL
).TO_ORG_ID
: ID organisation du destinataire (ou identique à l'expéditeur si le destinataire estNULL
).TRANSACTION_TYPE
: Type de transaction (par exemple, transfert, menthe, gravure, etc.).AMOUNT
: Montant de la transaction.CRDATE
: Horodatage de création de transaction (TXNTIMESTAMP
).