@@ -31,49 +31,67 @@ bitcoin_cash:
3131 ORDER BY balance DESC
3232
3333cardano :
34- SELECT *
35- FROM
36- (
37- WITH blocks AS (
34+ WITH
35+ blocks AS (
3836 SELECT
3937 slot_no AS block_number,
4038 block_time
41- FROM `iog-data- analytics.cardano_mainnet.block`
39+ FROM `blockchain- analytics-392322 .cardano_mainnet.block`
4240 WHERE block_time < "{{timestamp}}"
43- ),
44- OUTPUTS AS (
45- SELECT
46- slot_no as output_slot_number,
47- CAST(JSON_VALUE(a, '$.out_address') AS STRING) AS address,
48- CAST(JSON_VALUE(a, '$.out_idx') AS INT64) as out_idx,
49- CAST(JSON_VALUE(a, '$.out_value') AS INT64 ) AS value
50- FROM `iog-data-analytics.cardano_mainnet.vw_tx_in_out_with_inputs_value`
51- JOIN blocks ON block_number = slot_no
52- JOIN UNNEST(JSON_QUERY_ARRAY(outputs)) AS a
53- ),
54- INPUTS AS (
55- SELECT
56- address,
57- CAST(JSON_VALUE(i, '$.out_value') AS INT64 ) AS value
58- FROM `iog-data-analytics.cardano_mainnet.vw_tx_in_out_with_inputs_value`
59- JOIN OUTPUTS ON slot_no = output_slot_number
60- JOIN UNNEST(JSON_QUERY_ARRAY(inputs)) AS i ON CAST(JSON_VALUE(i, '$.in_idx') AS INT64) = OUTPUTS.out_idx
61- ),
62- INCOMING AS (
63- SELECT address, SUM(CAST(value AS numeric)) as sum_incoming
64- FROM INPUTS
65- GROUP BY address
66- ),
67- OUTGOING AS (
68- SELECT address, SUM(CAST(value AS numeric)) as sum_outgoing
69- FROM OUTPUTS
70- GROUP BY address
71- )
72- SELECT i.address, i.sum_incoming - o.sum_outgoing AS balance
73- FROM INCOMING AS i
74- JOIN OUTGOING AS o ON i.address = o.address
41+ ),
42+ addr_outputs AS (
43+ SELECT
44+ epoch_no,
45+ address,
46+ CAST(JSON_VALUE(o, '$.idx') AS INT64) AS idx,
47+ CAST(JSON_VALUE(o, '$.slot_no') AS INT64) AS slot_no,
48+ CAST(JSON_VALUE(o, '$.txidx') AS INT64) AS txidx
49+ FROM
50+ ` blockchain-analytics-392322.cardano_mainnet.rel_addr_txout`
51+ LEFT JOIN UNNEST(JSON_EXTRACT_ARRAY(outputs, "$") ) AS o
52+ JOIN blocks ON CAST(JSON_VALUE(o, '$.slot_no') AS INT64) = blocks.block_number),
53+ INCOMING_UTXOS AS (
54+ SELECT
55+ tio.epoch_no,
56+ addr_outputs.address,
57+ tio.slot_no,
58+ tio.txidx,
59+ addr_outputs.idx,
60+ CAST(JSON_VALUE(a, '$.out_value') AS INT64 ) AS value,
61+ FROM
62+ ` blockchain-analytics-392322.cardano_mainnet.tx_in_out` AS tio
63+ JOIN
64+ addr_outputs
65+ ON
66+ tio.epoch_no = addr_outputs.epoch_no
67+ AND tio.slot_no = addr_outputs.slot_no
68+ AND tio.txidx = addr_outputs.txidx
69+ JOIN UNNEST(JSON_QUERY_ARRAY(outputs)) AS a ON CAST(JSON_VALUE(a, '$.out_idx') AS INT64 ) = addr_outputs.idx
70+ ),
71+ OUTGOING_UTXOS AS (
72+ SELECT
73+ tx.epoch_no,
74+ io.address,
75+ consumed_in_slot_no,
76+ consumed_in_txidx,
77+ cons.index,
78+ value*-1 AS value,
79+ FROM INCOMING_UTXOS AS io
80+ JOIN `blockchain-analytics-392322.cardano_mainnet.tx_consumed_output` AS cons
81+ ON io.slot_no = cons.slot_no AND io.txidx = cons.txidx AND io.idx = cons.index
82+ JOIN blockchain-analytics-392322.cardano_mainnet.tx ON tx.slot_no = cons.consumed_in_slot_no AND tx.txidx = cons.consumed_in_txidx
83+ JOIN blocks ON io.slot_no = blocks.block_number
84+ ),
85+ GROUPED_INCOMING AS (
86+ SELECT address, COUNT(*) as count_incoming, SUM(value) as sum_incoming FROM INCOMING_UTXOS GROUP BY address
87+ ),
88+ GROUPED_OUTGOING AS (
89+ SELECT address, COUNT(*) as count_outgoing, SUM(value) as sum_outgoing FROM OUTGOING_UTXOS GROUP BY address
7590 )
76- WHERE balance > 0
91+ SELECT i.address, (i.sum_incoming + o.sum_outgoing) as balance
92+ FROM GROUPED_INCOMING AS i
93+ FULL JOIN GROUPED_OUTGOING AS o ON i.address = o.address
94+ WHERE (i.sum_incoming + o.sum_outgoing) > 0
7795 ORDER BY balance DESC
7896
7997dash :
0 commit comments