-
Notifications
You must be signed in to change notification settings - Fork 10
/
richlist.sql
97 lines (78 loc) · 3.94 KB
/
richlist.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
-- ***** BALANCE OF EVERY ETHEREUM ADDRESS ON EVERY DAY ****
-- ******************************************************************************************************************************
WITH
-- remove where clauses below to unlimit the time period (will use A LOT more data)
traces_in AS (
SELECT *
FROM `bigquery-public-data.crypto_ethereum.traces`
WHERE (DATE(block_timestamp) <= DATE_ADD('2015-07-30', INTERVAL 7 DAY ) )
),
blocks_in AS (
SELECT *
FROM `bigquery-public-data.crypto_ethereum.blocks`
WHERE (DATE(timestamp ) <= DATE_ADD('2015-07-30', INTERVAL 7 DAY ) )
),
transactions_in AS (
SELECT *
FROM `bigquery-public-data.crypto_ethereum.transactions`
WHERE (DATE(block_timestamp) <= DATE_ADD('2015-07-30', INTERVAL 7 DAY ) )
),
-- ******************************************************************************************************************************
double_entry_book AS (
SELECT
to_address AS address,
value AS value,
block_timestamp
-- debits
FROM
traces_in
WHERE TRUE
AND to_address IS NOT NULL
AND status = 1
AND (call_type NOT IN ('delegatecall','callcode','staticcall') OR call_type IS NULL)
UNION ALL
-- credits
SELECT
from_address AS address,
-value AS value,
block_timestamp
FROM
traces_in
WHERE TRUE
AND from_address IS NOT NULL
AND status = 1
AND (call_type NOT IN ('delegatecall', 'callcode','staticcall') OR call_type IS NULL)
UNION ALL
-- transaction fees debits
SELECT
miner AS address,
SUM(CAST(receipt_gas_used AS numeric) * CAST(gas_price AS numeric)) AS value,
timestamp AS block_timestamp
FROM
transactions_in AS transactions
JOIN
blocks_in AS blocks
ON
blocks.number = transactions.block_number
AND blocks.timestamp = transactions.block_timestamp
GROUP BY
blocks.miner,
block_timestamp
UNION ALL
-- transaction fees credits
SELECT
from_address AS address,
-(CAST(receipt_gas_used AS numeric) * CAST(gas_price AS numeric)) AS value,
block_timestamp
FROM
transactions_in
)
SELECT
address,
SUM(value) * power(10, -18) AS balance
FROM
double_entry_book
GROUP BY
address
ORDER BY
balance DESC