1
+ {{ config(
2
+ materialized = ' incremental' ,
3
+ unique_key = [' transfers_id' ],
4
+ cluster_by = [' blockchain' ,' block_day' ],
5
+ merge_exclude_columns = [' inserted_timestamp' ],
6
+ post_hook = " ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION ON EQUALITY(address);" ,
7
+ tags = [' daily' ]
8
+ ) }}
9
+
10
+ {% set default_date = " '2025-01-01'" %}
11
+
12
+ {% if is_incremental() %}
13
+ {% set yesterday = " DATEADD('day', -1, SYSDATE()::DATE)" %}
14
+ {% set block_ts_filter = " block_timestamp::date = " ~ yesterday %}
15
+ {% set max_mod = yesterday %}
16
+ {% else %}
17
+ {% set block_ts_filter = " block_timestamp::date >= " ~ default_date ~ " AND block_timestamp::date < SYSDATE()::DATE" %}
18
+ {% set max_mod = default_date %}
19
+ {% endif %}
20
+
21
+ WITH evm_transfers AS (
22
+ {{ dbt_utils .union_relations (
23
+ relations= [
24
+ source(' arbitrum_core' , ' ez_token_transfers' ),
25
+ source(' avalanche_core' , ' ez_token_transfers' ),
26
+ source(' base_core' , ' ez_token_transfers' ),
27
+ source(' blast_core' , ' ez_token_transfers' ),
28
+ source(' boba_core' , ' ez_token_transfers' ),
29
+ source(' bsc_core' , ' ez_token_transfers' ),
30
+ source(' core_core' , ' ez_token_transfers' ),
31
+ source(' ethereum_core' , ' ez_token_transfers' ),
32
+ source(' gnosis_core' , ' ez_token_transfers' ),
33
+ source(' ink_core' , ' ez_token_transfers' ),
34
+ source(' kaia_core' , ' ez_token_transfers' ),
35
+ source(' mantle_core' , ' ez_token_transfers' ),
36
+ source(' optimism_core' , ' ez_token_transfers' ),
37
+ source(' polygon_core' , ' ez_token_transfers' ),
38
+ source(' sei_evm_core' , ' ez_token_transfers' ),
39
+ source(' flow_evm_core' , ' ez_token_transfers' ),
40
+ ],
41
+ where = block_ts_filter
42
+ ) }}
43
+ ),
44
+
45
+ all_transfers AS (
46
+ -- EVM Chains
47
+ SELECT
48
+ DATE (block_timestamp) as block_day,
49
+ contract_address as address,
50
+ LOWER (SPLIT_PART(_dbt_source_relation, ' .' , 1 )) as blockchain,
51
+ tx_hash,
52
+ from_address,
53
+ to_address,
54
+ amount
55
+ FROM
56
+ evm_transfers
57
+
58
+ UNION ALL
59
+
60
+ -- Non-EVM Chains
61
+ SELECT
62
+ DATE (block_timestamp) as block_day,
63
+ token_address as address,
64
+ ' aleo' as blockchain,
65
+ tx_id as tx_hash,
66
+ sender as from_address,
67
+ receiver as to_address,
68
+ amount
69
+ FROM {{ source(' aleo_core' , ' fact_transfers' ) }}
70
+ WHERE {{ block_ts_filter }}
71
+ AND token_address is not null
72
+
73
+ UNION ALL
74
+
75
+ SELECT
76
+ DATE (block_timestamp) as block_day,
77
+ token_address as address,
78
+ ' aptos' as blockchain,
79
+ tx_hash,
80
+ CASE
81
+ WHEN transfer_event = ' WithdrawEvent' THEN account_address
82
+ ELSE NULL
83
+ END as from_address,
84
+ CASE
85
+ WHEN transfer_event = ' DepositEvent' THEN account_address
86
+ ELSE NULL
87
+ END as to_address,
88
+ amount
89
+ FROM {{ source(' aptos_core' , ' fact_transfers' ) }}
90
+ WHERE {{ block_ts_filter }}
91
+
92
+ UNION ALL
93
+
94
+ SELECT
95
+ DATE (block_timestamp) as block_day,
96
+ currency as address,
97
+ ' axelar' as blockchain,
98
+ tx_id as tx_hash,
99
+ sender as from_address,
100
+ receiver as to_address,
101
+ amount
102
+ FROM {{ source(' axelar_core' , ' fact_transfers' ) }}
103
+ WHERE {{ block_ts_filter }}
104
+
105
+ UNION ALL
106
+
107
+ SELECT
108
+ DATE (block_timestamp) as block_day,
109
+ currency as address,
110
+ ' cosmos' as blockchain,
111
+ tx_id as tx_hash,
112
+ sender as from_address,
113
+ receiver as to_address,
114
+ amount
115
+ FROM {{ source(' cosmos_core' , ' fact_transfers' ) }}
116
+ WHERE {{ block_ts_filter }}
117
+
118
+ UNION ALL
119
+
120
+ SELECT
121
+ DATE (block_timestamp) as block_day,
122
+ mint as address,
123
+ ' eclipse' as blockchain,
124
+ tx_id as tx_hash,
125
+ tx_from as from_address,
126
+ tx_to as to_address,
127
+ amount
128
+ FROM {{ source(' eclipse_core' , ' fact_transfers' ) }}
129
+ WHERE {{ block_ts_filter }}
130
+
131
+ UNION ALL
132
+
133
+ SELECT
134
+ DATE (block_timestamp) as block_day,
135
+ token_contract as address,
136
+ ' flow' as blockchain,
137
+ tx_id as tx_hash,
138
+ sender as from_address,
139
+ recipient as to_address,
140
+ amount
141
+ FROM {{ source(' flow_core' , ' ez_token_transfers' ) }}
142
+ WHERE {{ block_ts_filter }}
143
+
144
+ UNION ALL
145
+
146
+ SELECT
147
+ DATE (block_timestamp) as block_day,
148
+ contract_address as address,
149
+ ' near' as blockchain,
150
+ tx_hash,
151
+ from_address,
152
+ to_address,
153
+ amount
154
+ FROM {{ source(' near_core' , ' ez_token_transfers' ) }}
155
+ WHERE {{ block_ts_filter }}
156
+
157
+ UNION ALL
158
+
159
+ SELECT
160
+ DATE (block_timestamp) as block_day,
161
+ currency as address,
162
+ ' osmosis' as blockchain,
163
+ tx_id as tx_hash,
164
+ sender as from_address,
165
+ receiver as to_address,
166
+ amount
167
+ FROM {{ source(' osmosis_core' , ' fact_transfers' ) }}
168
+ WHERE {{ block_ts_filter }}
169
+
170
+ UNION ALL
171
+
172
+ SELECT
173
+ DATE (block_timestamp) as block_day,
174
+ mint as address,
175
+ ' solana' as blockchain,
176
+ tx_id as tx_hash,
177
+ tx_from as from_address,
178
+ tx_to as to_address,
179
+ amount
180
+ FROM {{ source(' solana_core' , ' fact_transfers' ) }}
181
+ WHERE {{ block_ts_filter }}
182
+
183
+ ),
184
+
185
+ aggregated_transfers AS (
186
+ SELECT
187
+ block_day,
188
+ address,
189
+ blockchain,
190
+ count (distinct tx_hash) as tx_count,
191
+ count (distinct from_address) as unique_senders,
192
+ sum (amount) as amount
193
+ FROM all_transfers
194
+ GROUP BY 1 ,2 ,3
195
+ where address is not null
196
+ )
197
+
198
+ SELECT
199
+ block_day,
200
+ address,
201
+ blockchain,
202
+ tx_count,
203
+ unique_senders,
204
+ amount,
205
+ {{ dbt_utils .generate_surrogate_key ([' address' ,' blockchain' ,' block_day' ]) }} AS transfers_id,
206
+ SYSDATE () AS inserted_timestamp,
207
+ SYSDATE () AS modified_timestamp,
208
+ ' {{ invocation_id }}' AS _invocation_id
209
+ FROM
210
+ aggregated_transfers
0 commit comments