@@ -31,49 +31,67 @@ bitcoin_cash:
31
31
ORDER BY balance DESC
32
32
33
33
cardano :
34
- SELECT *
35
- FROM
36
- (
37
- WITH blocks AS (
34
+ WITH
35
+ blocks AS (
38
36
SELECT
39
37
slot_no AS block_number,
40
38
block_time
41
- FROM `iog-data- analytics.cardano_mainnet.block`
39
+ FROM `blockchain- analytics-392322 .cardano_mainnet.block`
42
40
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
75
90
)
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
77
95
ORDER BY balance DESC
78
96
79
97
dash :
0 commit comments