mirror of
https://github.com/FlipsideCrypto/base-models.git
synced 2026-02-06 11:01:45 +00:00
parent
a1d1ba6b04
commit
2a54f3c270
@ -1,12 +0,0 @@
|
||||
chain,chain_id
|
||||
ethereum,1
|
||||
bsc,2
|
||||
tron,3
|
||||
solana,4
|
||||
polygon,5
|
||||
arbitrum,6
|
||||
stellar,7
|
||||
avalanche,8
|
||||
base,9
|
||||
optimism,10
|
||||
celo,11
|
||||
|
@ -1,75 +0,0 @@
|
||||
chain_name,chain_selector
|
||||
apechain,14894068710063348487
|
||||
arbitrum,4949039107694359620
|
||||
l3x,3162193654116181371
|
||||
treasure,1010349088906777999
|
||||
areon,1939936305787790600
|
||||
astar-zkevm,1540201334317828111
|
||||
avalanche,6433500567565415381
|
||||
dexalot,5463201557265485081
|
||||
base,15971525489660198786
|
||||
berachain,1294465214383781161
|
||||
bsc,11344663589394136015
|
||||
opbnb,465944652040885897
|
||||
bitcichain,4874388048629246000
|
||||
bitlayer,7937294810946806131
|
||||
bittorrent,3776006016387883143
|
||||
blast,4411394078118774322
|
||||
bob,3849287863852499584
|
||||
botanix,4560701533377838164
|
||||
bsquared,5406759801798337480
|
||||
celo,1346049177634351622
|
||||
coinex_smart_chain,1761333065194157300
|
||||
core,1224752112135636129
|
||||
corn,9043146809313071210
|
||||
cronos,1456215246176062136
|
||||
cronos-zkevm,8788096068760390840
|
||||
ethereum,5009297550715157269
|
||||
fantom,3768048213127883732
|
||||
filecoin,4561443241176882990
|
||||
fraxtal,1462016016387883143
|
||||
gnosis,465200170687744372
|
||||
hashkey,7613811247471741961
|
||||
hedera,3229138320728879060
|
||||
immutable-zkevm,1237925231416731909
|
||||
ink,3461204551265785888
|
||||
kava,7550000543357438061
|
||||
kroma,3719320017875267166
|
||||
moonriver,1355020143337428062
|
||||
lens,5608378062013572713
|
||||
linea,4627098889531055414
|
||||
mantle,1556008542357238666
|
||||
merlin,241851231317828981
|
||||
metis,8805746078405598895
|
||||
mind,11690709103138290329
|
||||
mode,7264351850409363825
|
||||
morph,18164309074156128038
|
||||
near,2039744413822257700
|
||||
neonlink,8239338020728974000
|
||||
optimism,3734403246176062136
|
||||
plume,3208172210661564830
|
||||
astar-polkadot,6422105447186081193
|
||||
centrifuge,8175830712062617656
|
||||
darwinia,8866418665544333000
|
||||
moonbeam,1252863800116739621
|
||||
polygon,4051577828743386545
|
||||
polygon-zkevm,4348158687435793198
|
||||
private-testnet-mica,4489326297382772450
|
||||
ronin,6916147374840168594
|
||||
rootstock,11964252391146578476
|
||||
scroll,13204309965629103672
|
||||
sei,9027416829622342829
|
||||
shibarium,3993510008929295315
|
||||
soneium,12505351618335765396
|
||||
sonic,1673871237479749969
|
||||
taiko,16468599424800719238
|
||||
telos-evm,1477345371608778000
|
||||
treasure,5214452172935136222
|
||||
unichain,1923510103922296319
|
||||
velas,374210358663784372
|
||||
wemix,5142893604156789321
|
||||
worldchain,2049429975587534727
|
||||
xlayer,3016212468291539606
|
||||
zircuit,17198166215261833993
|
||||
zklink_nova,4350319965322101699
|
||||
zksync,1562403441176082196
|
||||
|
@ -1,15 +0,0 @@
|
||||
chain,domain
|
||||
ethereum,0
|
||||
avalanche,1
|
||||
optimism,2
|
||||
arbitrum,3
|
||||
noble,4
|
||||
solana,5
|
||||
base,6
|
||||
polygon pos,7
|
||||
sui,8
|
||||
aptos,9
|
||||
unichain,10
|
||||
linea,11
|
||||
sonic,13
|
||||
worldchain,14
|
||||
|
@ -1,41 +0,0 @@
|
||||
chain,short_coin_type
|
||||
Aptos,0x027d
|
||||
Arbitrum,0x2329
|
||||
Aurora,0x0a0a
|
||||
Avalanche,0x2328
|
||||
Base,0x2105
|
||||
Bitcoin,0x0000
|
||||
BNB Chain,0x02ca
|
||||
Celo,0xce10
|
||||
Coinweb,0x08ae
|
||||
Conflux,0x01f7
|
||||
Crypto Chain,0x018a
|
||||
EOS,0x00c2
|
||||
Ethereum,0x003c
|
||||
Evmos,0x11bc
|
||||
Fantom,0x03ef
|
||||
Flow,0x021b
|
||||
Gnosis,0x02bc
|
||||
Harmony,0x03ff
|
||||
Linea,0xe708
|
||||
Manta,0x0263
|
||||
Mantle,0x1388
|
||||
Metis,0x0440
|
||||
Moonbeam,0x0504
|
||||
Moonriver,0x0505
|
||||
Nautilus,0x56ce
|
||||
Near,0x018d
|
||||
opBNB,0x00cc
|
||||
Optimism,0x0266
|
||||
Polygon POS,0x03c6
|
||||
Polygon zkEVM,0x044d
|
||||
Scroll,0x2750
|
||||
SKALE Europa,0x9296
|
||||
SKALE Nebula,0xb4b1
|
||||
Solana,0x01f5
|
||||
Sui,0x0310
|
||||
Terra,0x014a
|
||||
Thorchain,0x03a3
|
||||
Tron,0x00c3
|
||||
zkSync Era,0x0324
|
||||
zkFair,0xa70e
|
||||
|
@ -1,98 +0,0 @@
|
||||
destination_chain,standard_destination_chain
|
||||
acala,acala
|
||||
algorand,algorand
|
||||
aptos,aptos
|
||||
arbitrum,arbitrum
|
||||
arbitrum nova,arbitrum nova
|
||||
arbitrum one,arbitrum
|
||||
archway,archway
|
||||
astar,astar
|
||||
aurora,aurora
|
||||
aurora mainnet,aurora
|
||||
avalanche,avalanche
|
||||
avalanche c-chain,avalanche
|
||||
base,base
|
||||
bnb,bsc
|
||||
bnb chain,bsc
|
||||
bnb smart chain mainnet,bsc
|
||||
boba bnb mainnet,boba
|
||||
boba network,boba
|
||||
bsc,bsc
|
||||
canto,canto
|
||||
carbon,carbon
|
||||
celo,celo
|
||||
celo mainnet,celo
|
||||
coinweb,coinweb
|
||||
conflux,conflux
|
||||
conflux espace,conflux
|
||||
crab network,crab
|
||||
crescent,crescent
|
||||
cronos mainnet,cronos
|
||||
crypto chain,crypto
|
||||
dfk chain,dfk
|
||||
dogechain mainnet,dogechain
|
||||
eos,eos
|
||||
ethereum,ethereum
|
||||
ethereum mainnet,ethereum
|
||||
evmos,evmos
|
||||
fantom,fantom
|
||||
fantom opera,fantom
|
||||
filecoin,filecoin
|
||||
fuse,fuse
|
||||
gnosis,gnosis
|
||||
harmony mainnet shard 0,harmony
|
||||
huobi eco chain mainnet,huobi eco
|
||||
injective,injective
|
||||
juno,juno
|
||||
karura,karura
|
||||
kava,kava
|
||||
klaytn,klaytn
|
||||
klaytn mainnet cypress,klaytn
|
||||
kujira,kujira
|
||||
linea,linea
|
||||
manta,manta
|
||||
mantle,mantle
|
||||
metis,metis
|
||||
metis andromeda mainnet,metis
|
||||
moonbeam,moonbeam
|
||||
moonriver,moonriver
|
||||
nautilus,nautilus
|
||||
near,near
|
||||
neutron,neutron
|
||||
oasis,oasis
|
||||
okxchain mainnet,okxchain
|
||||
ontology mainnet,ontology
|
||||
op mainnet,optimism
|
||||
opbnb,opbnb
|
||||
optimism,optimism
|
||||
osmosis,osmosis
|
||||
polygon,polygon
|
||||
polygon mainnet,polygon
|
||||
polygon pos,polygon
|
||||
polygon zkevm,polygon zkevm
|
||||
ronin,ronin
|
||||
scroll,scroll
|
||||
secret-snip,secret
|
||||
sei,sei
|
||||
skale europa,skale europa
|
||||
skale nebula,skale nebula
|
||||
solana,solana
|
||||
stargaze,stargaze
|
||||
starknet,starknet
|
||||
sui,sui
|
||||
telos evm mainnet,telos
|
||||
terra,terra
|
||||
terra-2,terra2
|
||||
terra2,terra2
|
||||
tezos,tezos
|
||||
tron,tron
|
||||
umee,umee
|
||||
waves,waves
|
||||
xpla,xpla
|
||||
xrpl,xrpl
|
||||
zkfair,zkfair
|
||||
zksync era,zksync era
|
||||
zksync era mainnet,zksync era
|
||||
zksync lite,zksync lite
|
||||
zora,zora
|
||||
zzz,zzz
|
||||
|
@ -1,13 +0,0 @@
|
||||
chain_name,chain_id
|
||||
Arbitrum,110
|
||||
Avalanche,106
|
||||
Base,184
|
||||
BNB,102
|
||||
Ethereum,101
|
||||
Fantom,112
|
||||
Kava,177
|
||||
Linea,183
|
||||
Mantle,181
|
||||
Metis,151
|
||||
Optimism,111
|
||||
Polygon,109
|
||||
|
@ -1,35 +0,0 @@
|
||||
chain_name,wormhole_chain_id
|
||||
acala,12
|
||||
algorand,8
|
||||
aptos,22
|
||||
arbitrum,23
|
||||
aurora,9
|
||||
avalanche,6
|
||||
base,30
|
||||
bsc,4
|
||||
celo,14
|
||||
cosmoshub,4000
|
||||
ethereum,2
|
||||
evmos,4001
|
||||
fantom,10
|
||||
gnosis,25
|
||||
injective,19
|
||||
karura,11
|
||||
klaytn,13
|
||||
kujira,4002
|
||||
moonbeam,16
|
||||
near,15
|
||||
neon,17
|
||||
oasis,7
|
||||
optimism,24
|
||||
osmosis,20
|
||||
polygon,5
|
||||
pythnet,26
|
||||
rootstock,33
|
||||
sei,32
|
||||
sepolia,10002
|
||||
solana,1
|
||||
sui,21
|
||||
terra,3
|
||||
terra2,18
|
||||
xpla,28
|
||||
|
@ -106,6 +106,8 @@ models:
|
||||
+enabled: false
|
||||
bridge:
|
||||
+enabled: true
|
||||
dex:
|
||||
+enabled: true
|
||||
scores_package:
|
||||
+enabled: true
|
||||
|
||||
|
||||
@ -1,42 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'view',
|
||||
persist_docs ={ "relation": true,
|
||||
"columns": true },
|
||||
meta={
|
||||
'database_tags':{
|
||||
'table': {
|
||||
'PROTOCOL': 'SUSHI, UNISWAP, BALANCER, SWAPBASED, BASESWAP, MAVERICK, DACKIE, WOOFI, AERODROME, CURVE',
|
||||
'PURPOSE': 'DEX, LIQUIDITY, POOLS, LP, SWAPS',
|
||||
}
|
||||
}
|
||||
},
|
||||
tags = ['gold','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
block_number AS creation_block,
|
||||
block_timestamp AS creation_time,
|
||||
tx_hash AS creation_tx,
|
||||
platform,
|
||||
contract_address AS factory_address,
|
||||
pool_address,
|
||||
pool_name,
|
||||
tokens,
|
||||
symbols,
|
||||
decimals,
|
||||
COALESCE (
|
||||
complete_dex_liquidity_pools_id,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['pool_address']
|
||||
) }}
|
||||
) AS dim_dex_liquidity_pools_id,
|
||||
COALESCE(
|
||||
inserted_timestamp,
|
||||
'2000-01-01'
|
||||
) AS inserted_timestamp,
|
||||
COALESCE(
|
||||
modified_timestamp,
|
||||
'2000-01-01'
|
||||
) AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__complete_dex_liquidity_pools') }}
|
||||
@ -1,59 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'view',
|
||||
persist_docs ={ "relation": true,
|
||||
"columns": true },
|
||||
meta ={ 'database_tags':{ 'table':{ 'PROTOCOL': 'ACROSS, AXELAR, CELER, CBRIDGE, DLN, DEBRIDGE, HOP, MESON, STARGATE, SYMBIOSIS, SYNAPSE, WORMHOLE, CCTP, CCIP',
|
||||
'PURPOSE': 'BRIDGE' } } },
|
||||
tags = ['gold','defi','bridge','curated','ez']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
COALESCE(
|
||||
c.standardized_name,
|
||||
b.destination_chain
|
||||
) AS destination_chain,
|
||||
destination_chain_id,
|
||||
token_address,
|
||||
token_symbol,
|
||||
amount_unadj,
|
||||
amount,
|
||||
ROUND(
|
||||
CASE
|
||||
WHEN amount_usd < 1e+15 THEN amount_usd
|
||||
ELSE NULL
|
||||
END,
|
||||
2
|
||||
) AS amount_usd,
|
||||
token_is_verified,
|
||||
COALESCE (
|
||||
complete_bridge_activity_id,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['_id']
|
||||
) }}
|
||||
) AS ez_bridge_activity_id,
|
||||
COALESCE(
|
||||
inserted_timestamp,
|
||||
'2000-01-01'
|
||||
) AS inserted_timestamp,
|
||||
COALESCE(
|
||||
modified_timestamp,
|
||||
'2000-01-01'
|
||||
) AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__complete_bridge_activity') }}
|
||||
b
|
||||
LEFT JOIN {{ ref('silver_bridge__standard_chain_seed') }} C
|
||||
ON b.destination_chain = C.variation
|
||||
@ -1,76 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'view',
|
||||
persist_docs ={ "relation": true,
|
||||
"columns": true },
|
||||
meta ={ 'database_tags':{ 'table':{ 'PROTOCOL': 'SUSHI, UNISWAP, BALANCER, SWAPBASED, BASESWAP, MAVERICK, DACKIE, WOOFI, AERODROME, CURVE, VOODOO, PANCAKESWAP, RAMSES, DEXALOT',
|
||||
'PURPOSE': 'DEX, SWAPS',
|
||||
} } },
|
||||
tags = ['gold','defi','dex','curated','ez']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
pool_name,
|
||||
event_name,
|
||||
amount_in_unadj,
|
||||
amount_in,
|
||||
ROUND(
|
||||
CASE
|
||||
WHEN token_in <> '0x4200000000000000000000000000000000000006' or not token_in_is_verified
|
||||
AND (
|
||||
amount_out_usd IS NULL
|
||||
OR ABS((amount_in_usd - amount_out_usd) / NULLIF(amount_out_usd, 0)) > 0.75
|
||||
OR ABS((amount_in_usd - amount_out_usd) / NULLIF(amount_in_usd, 0)) > 0.75
|
||||
) THEN NULL
|
||||
ELSE amount_in_usd
|
||||
END,
|
||||
2
|
||||
) AS amount_in_usd,
|
||||
amount_out_unadj,
|
||||
amount_out,
|
||||
ROUND(
|
||||
CASE
|
||||
WHEN token_out <> '0x4200000000000000000000000000000000000006' or not token_out_is_verified
|
||||
AND (
|
||||
amount_in_usd IS NULL
|
||||
OR ABS((amount_out_usd - amount_in_usd) / NULLIF(amount_in_usd, 0)) > 0.75
|
||||
OR ABS((amount_out_usd - amount_in_usd) / NULLIF(amount_out_usd, 0)) > 0.75
|
||||
) THEN NULL
|
||||
ELSE amount_out_usd
|
||||
END,
|
||||
2
|
||||
) AS amount_out_usd,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
protocol,
|
||||
version as protocol_version,
|
||||
token_in,
|
||||
token_in_is_verified,
|
||||
token_out,
|
||||
token_out_is_verified,
|
||||
symbol_in,
|
||||
symbol_out,
|
||||
COALESCE (
|
||||
complete_dex_swaps_id,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['tx_hash','event_index']
|
||||
) }}
|
||||
) AS ez_dex_swaps_id,
|
||||
COALESCE(
|
||||
inserted_timestamp,
|
||||
'2000-01-01'
|
||||
) AS inserted_timestamp,
|
||||
COALESCE(
|
||||
modified_timestamp,
|
||||
'2000-01-01'
|
||||
) AS modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__complete_dex_swaps') }}
|
||||
@ -1,103 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'across' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"depositId" :: STRING
|
||||
) AS depositId,
|
||||
decoded_log :"depositor" :: STRING AS depositor,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"destinationChainId" :: STRING
|
||||
) AS destinationChainId,
|
||||
decoded_log :"message" :: STRING AS message,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"originChainId" :: STRING
|
||||
) AS originChainId,
|
||||
decoded_log :"originToken" :: STRING AS originToken,
|
||||
TRY_TO_TIMESTAMP(
|
||||
decoded_log :"quoteTimestamp" :: STRING
|
||||
) AS quoteTimestamp,
|
||||
decoded_log :"recipient" :: STRING AS recipient,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"relayerFeePct" :: STRING
|
||||
) AS relayerFeePct,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xafc4df6845a4ab948b492800d3d8a25d538a102a2bc07cd01f1cfa097fddcff6'
|
||||
AND contract_address = '0x09aea4b2242abc8bb4bb78d537a67a245a7bec64'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
contract_address AS bridge_address,
|
||||
NAME AS platform,
|
||||
depositor AS sender,
|
||||
recipient AS receiver,
|
||||
recipient AS destination_chain_receiver,
|
||||
destinationChainId AS destination_chain_id,
|
||||
amount,
|
||||
depositId AS deposit_id,
|
||||
message,
|
||||
originChainId AS origin_chain_id,
|
||||
originToken AS token_address,
|
||||
quoteTimestamp AS quote_timestamp,
|
||||
relayerFeePct AS relayer_fee_pct,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
@ -1,69 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__across_fundsdeposited
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
@ -1,133 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'across-v3' AS NAME,
|
||||
event_index,
|
||||
topic_0,
|
||||
CASE
|
||||
WHEN topic_0 = '0x32ed1a409ef04c7b0227189c3a103dc5ac10e775a15b785dcc510201f7c25ad3' THEN 'FundsDeposited'
|
||||
WHEN topic_0 = '0xa123dc29aebf7d0c3322c8eeb5b999e859f39937950ed31056532713d0de396f' THEN 'V3FundsDeposited'
|
||||
END AS event_name,
|
||||
topics,
|
||||
DATA,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
topics [1] :: STRING
|
||||
)
|
||||
) AS destinationChainId,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
topics [2] :: STRING
|
||||
)
|
||||
) AS depositId,
|
||||
CONCAT('0x', SUBSTR(topics [3] :: STRING, 27, 40)) AS depositor,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS inputToken,
|
||||
CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS outputToken,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
) AS inputAmount,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [3] :: STRING
|
||||
)
|
||||
) AS outputAmount,
|
||||
TRY_TO_TIMESTAMP(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [4] :: STRING
|
||||
)
|
||||
) AS quote_timestamp,
|
||||
TRY_TO_TIMESTAMP(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [5] :: STRING
|
||||
)
|
||||
) AS fill_deadline,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [6] :: STRING
|
||||
)
|
||||
) AS exclusivityDeadline,
|
||||
CONCAT('0x', SUBSTR(segmented_data [7] :: STRING, 25, 40)) AS recipient,
|
||||
CONCAT('0x', SUBSTR(segmented_data [8] :: STRING, 25, 40)) AS exclusiveRelayer,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [9] :: STRING
|
||||
)
|
||||
) AS relayerFeePct,
|
||||
segmented_data [10] :: STRING AS message,
|
||||
event_removed,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topic_0 IN (
|
||||
'0x32ed1a409ef04c7b0227189c3a103dc5ac10e775a15b785dcc510201f7c25ad3',
|
||||
'0xa123dc29aebf7d0c3322c8eeb5b999e859f39937950ed31056532713d0de396f'
|
||||
)
|
||||
AND contract_address = '0x09aea4b2242abc8bb4bb78d537a67a245a7bec64'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
contract_address AS bridge_address,
|
||||
NAME AS platform,
|
||||
depositor AS sender,
|
||||
recipient AS receiver,
|
||||
recipient AS destination_chain_receiver,
|
||||
destinationChainId AS destination_chain_id,
|
||||
inputAmount AS amount,
|
||||
inputToken AS token_address,
|
||||
depositId AS deposit_id,
|
||||
message,
|
||||
quote_timestamp,
|
||||
relayerFeePct AS relayer_fee_pct,
|
||||
exclusiveRelayer AS exclusive_relayer,
|
||||
exclusivityDeadline AS exclusivity_deadline,
|
||||
fill_deadline,
|
||||
outputAmount AS output_amount,
|
||||
outputToken AS output_token,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
@ -1,72 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__across_v3fundsdeposited
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,153 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'allbridge' AS platform,
|
||||
event_index,
|
||||
'TokensSent' AS event_name,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [0] :: STRING)) AS amount,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [2] :: STRING)) AS destinationChainId,
|
||||
origin_from_address AS sender,
|
||||
origin_from_address AS recipient,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [4] :: STRING)) AS nonce,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [5] :: STRING)) AS messenger,
|
||||
tx_succeeded,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] = '0x9cd6008e8d4ebd34fd9d022278fec7f95d133780ecc1a0dea459fae3e9675390' --TokensSent
|
||||
AND contract_address = '0x001e3f136c2f804854581da55ad7660a2b35def7' --Allbridge
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
lp_evt AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_index,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS sender,
|
||||
CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS token,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [2] :: STRING)) AS amount,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [3] :: STRING)) AS vUsdAmount,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [4] :: STRING)) AS fee,
|
||||
tx_succeeded,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] = '0xa930da1d3f27a25892307dd59cec52dd9b881661a0f20364757f83a0da2f6873' --SwappedToVUsd
|
||||
AND contract_address IN (
|
||||
'0xda6bb1ec3baba68b26bea0508d6f81c9ec5e96d5' --USDC LP
|
||||
)
|
||||
AND tx_hash IN (
|
||||
SELECT
|
||||
tx_hash
|
||||
FROM
|
||||
base_evt
|
||||
)
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
s.block_number,
|
||||
s.block_timestamp,
|
||||
s.tx_hash,
|
||||
s.origin_function_signature,
|
||||
s.origin_from_address,
|
||||
s.origin_to_address,
|
||||
s.contract_address AS bridge_address,
|
||||
s.event_index,
|
||||
s.event_name,
|
||||
s.platform,
|
||||
lp.amount,
|
||||
lp.token AS token_address,
|
||||
s.sender,
|
||||
s.recipient AS receiver,
|
||||
C.chain AS destination_chain,
|
||||
s.destinationChainId AS destination_chain_id,
|
||||
CASE
|
||||
WHEN C.chain = 'solana' THEN utils.udf_hex_to_base58(CONCAT('0x', s.segmented_data [1] :: STRING))
|
||||
WHEN C.chain = 'stellar' THEN s.segmented_data [1] :: STRING
|
||||
ELSE CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
s.segmented_data [1] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
)
|
||||
END AS destination_chain_receiver,
|
||||
CASE
|
||||
WHEN C.chain = 'solana' THEN utils.udf_hex_to_base58(CONCAT('0x', s.segmented_data [3] :: STRING))
|
||||
WHEN C.chain = 'stellar' THEN s.segmented_data [3] :: STRING
|
||||
ELSE CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
s.segmented_data [3] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
)
|
||||
END AS destination_chain_token,
|
||||
s.tx_succeeded,
|
||||
s._log_id,
|
||||
s._inserted_timestamp
|
||||
FROM
|
||||
base_evt s
|
||||
INNER JOIN lp_evt lp
|
||||
ON s.tx_hash = lp.tx_hash
|
||||
AND s.block_number = lp.block_number
|
||||
LEFT JOIN {{ ref('silver_bridge__allbridge_chain_id_seed') }} C
|
||||
ON s.destinationChainId = C.chain_id qualify(ROW_NUMBER() over (PARTITION BY s._log_id
|
||||
ORDER BY
|
||||
s._inserted_timestamp DESC)) = 1
|
||||
@ -1,69 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__allbridge_tokens_sent
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
@ -1,238 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'axelar' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
decoded_log :"destinationChain" :: STRING AS destinationChain,
|
||||
LOWER(
|
||||
decoded_log :"destinationContractAddress" :: STRING
|
||||
) AS destinationContractAddress,
|
||||
decoded_log :"payload" :: STRING AS payload,
|
||||
origin_from_address AS recipient,
|
||||
decoded_log :"payloadHash" :: STRING AS payloadHash,
|
||||
decoded_log :"sender" :: STRING AS sender,
|
||||
decoded_log :"symbol" :: STRING AS symbol,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x7e50569d26be643bda7757722291ec66b1be66d8283474ae3fab5a98f878a7a2'
|
||||
AND contract_address = '0xe432150cce91c13a887f7d836923d5597add8e31'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
native_gas_paid AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'axelar' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
decoded_log :"destinationChain" :: STRING AS destinationChain,
|
||||
LOWER(
|
||||
decoded_log :"destinationAddress" :: STRING
|
||||
) AS destinationAddress,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"gasFeeAmount" :: STRING
|
||||
) AS gasFeeAmount,
|
||||
decoded_log :"payloadHash" :: STRING AS payloadHash,
|
||||
decoded_log :"refundAddress" :: STRING AS refundAddress,
|
||||
decoded_log :"sourceAddress" :: STRING AS sourceAddress,
|
||||
decoded_log :"symbol" :: STRING AS symbol,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x999d431b58761213cf53af96262b67a069cbd963499fd8effd1e21556217b841'
|
||||
AND contract_address = '0x2d5d7d31f671f86c782533cc367f14109a082712'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
transfers AS (
|
||||
SELECT
|
||||
block_number,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address AS token_address,
|
||||
CONCAT(
|
||||
event_index :: STRING,
|
||||
'-',
|
||||
tx_hash :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_token_transfers') }}
|
||||
WHERE
|
||||
from_address = '0xce16f69375520ab01377ce7b88f5ba8c48f8d666'
|
||||
AND to_address IN (
|
||||
'0xe432150cce91c13a887f7d836923d5597add8e31',
|
||||
'0x0000000000000000000000000000000000000000'
|
||||
)
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
FINAL AS (
|
||||
SELECT
|
||||
b.block_number,
|
||||
b.block_timestamp,
|
||||
b.origin_function_signature,
|
||||
b.origin_from_address,
|
||||
b.origin_to_address,
|
||||
b.tx_hash,
|
||||
b.event_index,
|
||||
b.topic_0,
|
||||
b.event_name,
|
||||
b.event_removed,
|
||||
b.tx_status,
|
||||
b.contract_address AS bridge_address,
|
||||
b.name AS platform,
|
||||
b.origin_from_address AS sender,
|
||||
CASE
|
||||
WHEN b.recipient = '0x0000000000000000000000000000000000000000' THEN refundAddress
|
||||
ELSE b.recipient
|
||||
END AS receiver,
|
||||
CASE
|
||||
WHEN LOWER(
|
||||
b.destinationChain
|
||||
) = 'avalanche' THEN 'avalanche c-chain'
|
||||
WHEN LOWER(
|
||||
b.destinationChain
|
||||
) = 'binance' THEN 'bnb smart chain mainnet'
|
||||
WHEN LOWER(
|
||||
b.destinationChain
|
||||
) = 'celo' THEN 'celo mainnet'
|
||||
WHEN LOWER(
|
||||
b.destinationChain
|
||||
) = 'ethereum' THEN 'ethereum mainnet'
|
||||
WHEN LOWER(
|
||||
b.destinationChain
|
||||
) = 'fantom' THEN 'fantom opera'
|
||||
WHEN LOWER(
|
||||
b.destinationChain
|
||||
) = 'polygon' THEN 'polygon mainnet'
|
||||
ELSE LOWER(
|
||||
b.destinationChain
|
||||
)
|
||||
END AS destination_chain,
|
||||
b.destinationContractAddress AS destination_contract_address,
|
||||
CASE
|
||||
WHEN destination_chain IN (
|
||||
'arbitrum',
|
||||
'avalanche c-chain',
|
||||
'base',
|
||||
'bnb smart chain mainnet',
|
||||
'celo mainnet',
|
||||
'ethereum mainnet',
|
||||
'fantom opera',
|
||||
'filecoin',
|
||||
'kava',
|
||||
'linea',
|
||||
'mantle',
|
||||
'moonbeam',
|
||||
'optimism',
|
||||
'polygon mainnet',
|
||||
'scroll'
|
||||
) THEN receiver
|
||||
ELSE destination_contract_address
|
||||
END AS destination_chain_receiver,
|
||||
b.amount,
|
||||
b.payload,
|
||||
b.payloadHash AS payload_hash,
|
||||
b.symbol AS token_symbol,
|
||||
t.token_address,
|
||||
b._log_id,
|
||||
b._inserted_timestamp
|
||||
FROM
|
||||
base_evt b
|
||||
INNER JOIN transfers t
|
||||
ON b.block_number = t.block_number
|
||||
AND b.tx_hash = t.tx_hash
|
||||
LEFT JOIN native_gas_paid n
|
||||
ON n.block_number = b.block_number
|
||||
AND n.tx_hash = b.tx_hash
|
||||
)
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
FINAL qualify (ROW_NUMBER() over (PARTITION BY _log_id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,74 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__axelar_contractcallwithtoken
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
@ -1,146 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['curated','reorg']
|
||||
) }}
|
||||
|
||||
WITH on_ramp_set AS (
|
||||
|
||||
SELECT
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :destChainSelector :: STRING
|
||||
) AS destChainSelector,
|
||||
chain_name,
|
||||
decoded_log :onRamp :: STRING AS onRampAddress,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
INNER JOIN {{ ref('silver_bridge__ccip_chain_seed') }}
|
||||
ON destChainSelector = chain_selector
|
||||
WHERE
|
||||
contract_address = LOWER('0x881e3A65B4d4a04dD529061dd0071cf975F58bCD') -- ccip router
|
||||
AND topic_0 = '0x1f7d0ec248b80e5c0dde0ee531c4fc8fdb6ce9a2b3d90f560c74acd6a7202f23' -- onrampset
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
ccip_sent AS (
|
||||
SELECT
|
||||
l.block_number,
|
||||
l.block_timestamp,
|
||||
l.tx_hash,
|
||||
l.origin_function_signature,
|
||||
l.origin_from_address,
|
||||
l.origin_to_address,
|
||||
contract_address,
|
||||
l.event_name,
|
||||
l.event_index,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT(
|
||||
'0x',
|
||||
segmented_data [13] :: STRING
|
||||
) AS message_id,
|
||||
l.decoded_log,
|
||||
decoded_log :message :feeToken :: STRING AS fee_token,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :message :feeTokenAmount :: STRING
|
||||
) AS fee_token_amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :message :gasLimit :: STRING
|
||||
) AS gas_limit,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :message :nonce :: STRING
|
||||
) AS nonce,
|
||||
decoded_log :message :receiver :: STRING AS receiver,
|
||||
decoded_log :message :sender :: STRING AS sender,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :message :sequenceNumber :: STRING
|
||||
) AS sequence_number,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :message :sourceChainSelector :: STRING
|
||||
) AS source_chain_selector,
|
||||
destChainSelector AS dest_chain_selector,
|
||||
chain_name,
|
||||
decoded_log :message :tokenAmounts AS token_amounts,
|
||||
ARRAY_SIZE(
|
||||
decoded_log :message :tokenAmounts
|
||||
) AS token_amounts_count,
|
||||
CONCAT(
|
||||
l.tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
l.modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
l
|
||||
INNER JOIN on_ramp_set
|
||||
ON onRampAddress = contract_address
|
||||
WHERE
|
||||
topic_0 = '0xd0c3c799bf9e2639de44391e7f524d229b2b55f5b1ea94b2bf7da42f7243dddd' -- CCIPSendRequested
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND l.modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND l.modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
C.block_number,
|
||||
C.block_timestamp,
|
||||
C.origin_function_signature,
|
||||
C.origin_from_address,
|
||||
C.origin_to_address,
|
||||
C.tx_hash,
|
||||
C.event_name,
|
||||
C.event_index,
|
||||
'chainlink-ccip' AS platform,
|
||||
'v1' AS version,
|
||||
C.contract_address AS bridge_address,
|
||||
C.message_id,
|
||||
C.nonce,
|
||||
C.receiver,
|
||||
C.sender,
|
||||
C.receiver AS destination_chain_receiver,
|
||||
C.sequence_number,
|
||||
C.source_chain_selector,
|
||||
C.dest_chain_selector AS destination_chain_id,
|
||||
C.chain_name AS destination_chain,
|
||||
C.gas_limit,
|
||||
C.fee_token,
|
||||
-- Divide the fee evenly by the number of tokens in the array
|
||||
C.fee_token_amount / C.token_amounts_count AS fee_token_amount_per_token,
|
||||
C.token_amounts_count,
|
||||
TRY_TO_NUMBER(
|
||||
tokens.value :amount :: STRING
|
||||
) AS amount_unadj,
|
||||
tokens.value :token :: STRING AS token_address,
|
||||
C._log_id,
|
||||
C.modified_timestamp
|
||||
FROM
|
||||
ccip_sent C,
|
||||
LATERAL FLATTEN(
|
||||
input => C.token_amounts
|
||||
) AS tokens
|
||||
WHERE
|
||||
token_amounts_count > 0
|
||||
@ -1,70 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__ccip_send_requested
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: MODIFIED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,122 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
contract_address,
|
||||
event_index,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(topic_1 :: STRING)) AS nonce,
|
||||
CONCAT('0x', SUBSTR(topic_2 :: STRING, 27, 40)) AS burn_token,
|
||||
CONCAT('0x', SUBSTR(topic_3 :: STRING, 27, 40)) AS depositor,
|
||||
regexp_SUBSTR_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [0] :: STRING)) AS burn_amount,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [2] :: STRING)) AS destination_domain,
|
||||
CASE
|
||||
WHEN destination_domain IN (
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
6,
|
||||
7,
|
||||
10
|
||||
) THEN CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) -- evm
|
||||
WHEN destination_domain = 5 THEN utils.udf_hex_to_base58(CONCAT('0x', segmented_data [1] :: STRING)) -- solana
|
||||
ELSE CONCAT(
|
||||
'0x',
|
||||
segmented_data [1] :: STRING
|
||||
) -- other non-evm chains
|
||||
END AS mint_recipient,
|
||||
CASE
|
||||
WHEN destination_domain IN (
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
6,
|
||||
7,
|
||||
10
|
||||
) THEN CONCAT('0x', SUBSTR(segmented_data [3] :: STRING, 25, 40)) -- evm
|
||||
WHEN destination_domain = 5 THEN utils.udf_hex_to_base58(CONCAT('0x', segmented_data [3] :: STRING)) -- solana
|
||||
ELSE CONCAT(
|
||||
'0x',
|
||||
segmented_data [3] :: STRING
|
||||
) -- other non-evm chains
|
||||
END AS destinationTokenMessenger,
|
||||
CASE
|
||||
WHEN destination_domain IN (
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
6,
|
||||
7,
|
||||
10
|
||||
) THEN CONCAT('0x', SUBSTR(segmented_data [4] :: STRING, 25, 40)) -- evm
|
||||
WHEN destination_domain = 5 THEN utils.udf_hex_to_base58(CONCAT('0x', segmented_data [4] :: STRING)) -- solana
|
||||
ELSE CONCAT(
|
||||
'0x',
|
||||
segmented_data [4] :: STRING
|
||||
) -- other non-evm chains
|
||||
END AS destination_caller,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0x1682ae6375c4e4a97e4b583bc394c861a46d8962' -- base
|
||||
AND topic_0 = '0x2fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c0'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
event_index,
|
||||
contract_address AS bridge_address,
|
||||
'DepositForBurn' AS event_name,
|
||||
'circle-cctp' AS platform,
|
||||
depositor,
|
||||
depositor AS sender,
|
||||
origin_from_address AS receiver,
|
||||
mint_recipient AS destination_chain_receiver,
|
||||
chain AS destination_chain,
|
||||
destination_domain AS destination_chain_id,
|
||||
burn_token AS token_address,
|
||||
burn_amount AS amount_unadj,
|
||||
_log_id,
|
||||
e.modified_timestamp
|
||||
FROM
|
||||
base_evt e
|
||||
LEFT JOIN {{ ref('silver_bridge__cctp_chain_id_seed') }}
|
||||
d
|
||||
ON domain = destination_domain
|
||||
@ -1,73 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__cctp_depositforburn
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: MODIFIED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,134 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
decoded_log,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :nonce :: STRING
|
||||
) AS nonce,
|
||||
decoded_log :burnToken :: STRING AS burnToken,
|
||||
decoded_log :depositor :: STRING AS depositor,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :amount :: STRING
|
||||
) AS amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :destinationDomain :: STRING
|
||||
) AS destination_domain,
|
||||
CASE
|
||||
WHEN destination_domain = 5 THEN utils.udf_hex_to_base58(
|
||||
decoded_log :mintRecipient :: STRING
|
||||
) -- solana
|
||||
WHEN LEFT(
|
||||
decoded_log :mintRecipient :: STRING,
|
||||
26
|
||||
) = '0x000000000000000000000000' THEN CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
decoded_log :mintRecipient :: STRING,
|
||||
27,
|
||||
40
|
||||
)
|
||||
) -- evm
|
||||
ELSE decoded_log :mintRecipient :: STRING -- other non-evm chains
|
||||
END AS mint_recipient,
|
||||
CASE
|
||||
WHEN destination_domain = 5 THEN utils.udf_hex_to_base58(
|
||||
decoded_log :destinationTokenMessenger :: STRING
|
||||
) -- solana
|
||||
WHEN LEFT(
|
||||
decoded_log :destinationTokenMessenger :: STRING,
|
||||
26
|
||||
) = '0x000000000000000000000000' THEN CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
decoded_log :destinationTokenMessenger :: STRING,
|
||||
27,
|
||||
40
|
||||
)
|
||||
) -- evm
|
||||
ELSE decoded_log :destinationTokenMessenger :: STRING -- other non-evm chains
|
||||
END AS destination_token_messenger,
|
||||
CASE
|
||||
WHEN destination_domain = 5 THEN utils.udf_hex_to_base58(
|
||||
decoded_log :destinationCaller :: STRING
|
||||
) -- solana
|
||||
WHEN LEFT(
|
||||
decoded_log :destinationCaller :: STRING,
|
||||
26
|
||||
) = '0x000000000000000000000000' THEN CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
decoded_log :destinationCaller :: STRING,
|
||||
27,
|
||||
40
|
||||
)
|
||||
) -- evm
|
||||
ELSE decoded_log :destinationCaller :: STRING -- other non-evm chains
|
||||
END AS destination_caller,
|
||||
modified_timestamp,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0x28b5a0e9c621a5badaa536219b3a228c8168cf5d'
|
||||
AND topic_0 = '0x0c8c1cbdc5190613ebd485511d4e2812cfa45eecb79d845893331fedad5130a5'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
contract_address AS bridge_address,
|
||||
'circle-cctp-v2' AS platform,
|
||||
burnToken AS token_address,
|
||||
amount AS amount_unadj,
|
||||
depositor AS sender,
|
||||
origin_from_address AS receiver,
|
||||
mint_recipient AS destination_chain_receiver,
|
||||
destination_domain AS destination_chain_id,
|
||||
chain AS destination_chain,
|
||||
_log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
LEFT JOIN {{ ref('silver_bridge__cctp_chain_id_seed') }}
|
||||
d
|
||||
ON domain = destination_domain
|
||||
@ -1,70 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__cctp_v2_depositforburn
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: MODIFIED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,95 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'celer_cbridge' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"dstChainId" :: STRING
|
||||
) AS dstChainId,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"maxSlippage" :: STRING
|
||||
) AS maxSlippage,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"nonce" :: STRING
|
||||
) AS nonce,
|
||||
decoded_log :"receiver" :: STRING AS receiver,
|
||||
decoded_log :"sender" :: STRING AS sender,
|
||||
decoded_log :"token" :: STRING AS token,
|
||||
decoded_log :"transferId" :: STRING AS transferId,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x89d8051e597ab4178a863a5190407b98abfeff406aa8db90c59af76612e58f01'
|
||||
AND contract_address = '0x7d43aabc515c356145049227cee54b608342c0ad'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
contract_address AS bridge_address,
|
||||
NAME AS platform,
|
||||
sender,
|
||||
receiver,
|
||||
receiver AS destination_chain_receiver,
|
||||
amount,
|
||||
dstChainId AS destination_chain_id,
|
||||
maxSlippage AS max_slippage,
|
||||
nonce,
|
||||
token AS token_address,
|
||||
transferId AS transfer_id,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
@ -1,70 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__celer_cbridge_send
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
@ -1,128 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'dln_debridge' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
DATA,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(segmented_data [24] :: STRING, 1, 40)) AS token_address,
|
||||
decoded_log :"affiliateFee" :: STRING AS affiliateFee,
|
||||
decoded_log :"metadata" :: STRING AS metadata,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"nativeFixFee" :: STRING
|
||||
) AS nativeFixFee,
|
||||
decoded_log :"order" AS order_obj,
|
||||
decoded_log :"order" :"allowedCancelBeneficiarySrc" :: STRING AS allowedCancelBeneficiarySrc,
|
||||
decoded_log :"order" :"allowedTakerDst" :: STRING AS allowedTakerDst,
|
||||
decoded_log :"order" :"externalCall" :: STRING AS externalCall,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"order" :"giveAmount" :: STRING
|
||||
) AS giveAmount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"order" :"giveChainId" :: STRING
|
||||
) AS giveChainId,
|
||||
decoded_log :"order" :"givePatchAuthoritySrc" :: STRING AS givePatchAuthoritySrc,
|
||||
decoded_log :"order" :"giveTokenAddress" :: STRING AS giveTokenAddress,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"order" :"makerOrderNonce" :: STRING
|
||||
) AS makerOrderNonce,
|
||||
decoded_log :"order" :"makerSrc" :: STRING AS makerSrc,
|
||||
decoded_log :"order" :"orderAuthorityAddressDst" :: STRING AS orderAuthorityAddressDst,
|
||||
CONCAT('0x', LEFT(segmented_data [28] :: STRING, 40)) AS receiverDst,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"order" :"takeAmount" :: STRING
|
||||
) AS takeAmount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"order" :"takeChainId" :: STRING
|
||||
) AS takeChainId,
|
||||
decoded_log :"order" :"takeTokenAddress" :: STRING AS takeTokenAddress,
|
||||
decoded_log :"orderId" :: STRING AS orderId,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"percentFee" :: STRING
|
||||
) AS percentFee,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"referralCode" :: STRING
|
||||
) AS referralCode,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xfc8703fd57380f9dd234a89dce51333782d49c5902f307b02f03e014d18fe471' --CreatedOrder
|
||||
AND contract_address = '0xef4fb24ad0916217251f553c0596f8edc630eb66' --Dln: Source
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
contract_address AS bridge_address,
|
||||
NAME AS platform,
|
||||
origin_from_address AS sender,
|
||||
receiverDst AS receiver,
|
||||
CASE
|
||||
WHEN takeChainId :: STRING = '7565164' THEN utils.udf_hex_to_base58(CONCAT('0x', segmented_data [28] :: STRING))
|
||||
ELSE receiverDst
|
||||
END AS destination_chain_receiver,
|
||||
giveAmount AS amount,
|
||||
takeChainId AS destination_chain_id,
|
||||
CASE
|
||||
WHEN destination_chain_id :: STRING = '7565164' THEN 'solana'
|
||||
ELSE NULL
|
||||
END AS destination_chain,
|
||||
CASE
|
||||
WHEN token_address = '0x0000000000000000000000000000000000000000' THEN '0x4200000000000000000000000000000000000006'
|
||||
ELSE token_address
|
||||
END AS token_address,
|
||||
decoded_log,
|
||||
order_obj,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
@ -1,74 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__dln_debridge_createdorder
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
@ -1,120 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_contracts AS (
|
||||
|
||||
SELECT
|
||||
contract_address,
|
||||
MAX(block_number) AS block_number
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xe35dddd4ea75d7e9b3fe93af4f4e40e778c3da4074c9d93e7c6536f1e803c1eb'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND contract_address NOT IN (
|
||||
SELECT
|
||||
DISTINCT contract_address
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
GROUP BY
|
||||
1
|
||||
),
|
||||
function_sigs AS (
|
||||
SELECT
|
||||
'0xe9cdfe51' AS function_sig,
|
||||
'ammWrapper' AS function_name
|
||||
),
|
||||
inputs AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_name,
|
||||
0 AS function_input,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(
|
||||
function_input,
|
||||
64,
|
||||
0
|
||||
)
|
||||
) AS DATA
|
||||
FROM
|
||||
base_contracts
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
),
|
||||
contract_reads AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
utils.udf_json_rpc_call(
|
||||
'eth_call',
|
||||
[{ 'to': contract_address, 'from': null, 'data': data }, utils.udf_int_to_hex(block_number) ]
|
||||
) AS rpc_request,
|
||||
live.udf_api(
|
||||
'POST',
|
||||
CONCAT(
|
||||
'{service}',
|
||||
'/',
|
||||
'{Authentication}'
|
||||
),{},
|
||||
rpc_request,
|
||||
'Vault/prod/base/quicknode/mainnet'
|
||||
) AS read_output,
|
||||
SYSDATE() AS _inserted_timestamp
|
||||
FROM
|
||||
inputs
|
||||
),
|
||||
reads_flat AS (
|
||||
SELECT
|
||||
read_output,
|
||||
read_output :data :id :: STRING AS read_id,
|
||||
read_output :data :result :: STRING AS read_result,
|
||||
SPLIT(
|
||||
read_id,
|
||||
'-'
|
||||
) AS read_id_object,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
contract_address,
|
||||
block_number,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
contract_reads
|
||||
)
|
||||
SELECT
|
||||
read_output,
|
||||
read_id,
|
||||
read_result,
|
||||
read_id_object,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
block_number,
|
||||
contract_address,
|
||||
CONCAT('0x', SUBSTR(read_result, 27, 40)) AS amm_wrapper_address,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
reads_flat
|
||||
@ -1,16 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__hop_ammwrapper
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- CONTRACT_ADDRESS
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMM_WRAPPER_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
@ -1,119 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_contracts AS (
|
||||
|
||||
SELECT
|
||||
contract_address,
|
||||
amm_wrapper_address,
|
||||
block_number
|
||||
FROM
|
||||
{{ ref('silver_bridge__hop_ammwrapper') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE
|
||||
amm_wrapper_address NOT IN (
|
||||
SELECT
|
||||
DISTINCT amm_wrapper_address
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
function_sigs AS (
|
||||
SELECT
|
||||
'0x1ee1bf67' AS function_sig,
|
||||
'l2CanonicalToken' AS function_name
|
||||
),
|
||||
inputs AS (
|
||||
SELECT
|
||||
amm_wrapper_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_name,
|
||||
0 AS function_input,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(
|
||||
function_input,
|
||||
64,
|
||||
0
|
||||
)
|
||||
) AS DATA
|
||||
FROM
|
||||
base_contracts
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
),
|
||||
contract_reads AS (
|
||||
SELECT
|
||||
amm_wrapper_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
utils.udf_json_rpc_call(
|
||||
'eth_call',
|
||||
[{ 'to': amm_wrapper_address, 'from': null, 'data': data }, utils.udf_int_to_hex(block_number) ]
|
||||
) AS rpc_request,
|
||||
live.udf_api(
|
||||
'POST',
|
||||
CONCAT(
|
||||
'{service}',
|
||||
'/',
|
||||
'{Authentication}'
|
||||
),{},
|
||||
rpc_request,
|
||||
'Vault/prod/base/quicknode/mainnet'
|
||||
) AS read_output,
|
||||
SYSDATE() AS _inserted_timestamp
|
||||
FROM
|
||||
inputs
|
||||
),
|
||||
reads_flat AS (
|
||||
SELECT
|
||||
read_output,
|
||||
read_output :data :id :: STRING AS read_id,
|
||||
read_output :data :result :: STRING AS read_result,
|
||||
SPLIT(
|
||||
read_id,
|
||||
'-'
|
||||
) AS read_id_object,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
amm_wrapper_address,
|
||||
block_number,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
contract_reads
|
||||
)
|
||||
SELECT
|
||||
read_output,
|
||||
read_id,
|
||||
read_result,
|
||||
read_id_object,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
block_number,
|
||||
contract_address,
|
||||
amm_wrapper_address,
|
||||
CASE
|
||||
WHEN contract_address = '0xe22d2bedb3eca35e6397e0c6d62857094aa26f52' THEN '0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc'
|
||||
ELSE CONCAT('0x', SUBSTR(read_result, 27, 40))
|
||||
END AS token_address,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
reads_flat
|
||||
LEFT JOIN base_contracts USING(amm_wrapper_address)
|
||||
WHERE
|
||||
token_address <> '0x'
|
||||
AND token_address IS NOT NULL
|
||||
@ -1,16 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__hop_l2canonicaltoken
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- CONTRACT_ADDRESS
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
@ -1,115 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'hop' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amountOutMin" :: STRING
|
||||
) AS amountOutMin,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"bonderFee" :: STRING
|
||||
) AS bonderFee,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"chainId" :: STRING
|
||||
) AS chainId,
|
||||
TRY_TO_TIMESTAMP(
|
||||
decoded_log :"deadline" :: STRING
|
||||
) AS deadline,
|
||||
TRY_TO_TIMESTAMP(
|
||||
decoded_log :"index" :: STRING
|
||||
) AS INDEX,
|
||||
decoded_log :"recipient" :: STRING AS recipient,
|
||||
decoded_log :"transferId" :: STRING AS transferId,
|
||||
decoded_log :"transferNonce" :: STRING AS transferNonce,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xe35dddd4ea75d7e9b3fe93af4f4e40e778c3da4074c9d93e7c6536f1e803c1eb'
|
||||
AND origin_to_address IS NOT NULL
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
hop_tokens AS (
|
||||
SELECT
|
||||
block_number,
|
||||
contract_address,
|
||||
amm_wrapper_address,
|
||||
token_address,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__hop_l2canonicaltoken') }}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
contract_address AS bridge_address,
|
||||
amm_wrapper_address,
|
||||
NAME AS platform,
|
||||
origin_from_address AS sender,
|
||||
recipient AS receiver,
|
||||
receiver AS destination_chain_receiver,
|
||||
chainId AS destination_chain_id,
|
||||
token_address,
|
||||
amount,
|
||||
amountOutMin AS amount_out_min,
|
||||
bonderFee AS bonder_fee,
|
||||
deadline,
|
||||
INDEX,
|
||||
transferId AS transfer_id,
|
||||
transferNonce AS transfer_nonce,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt b
|
||||
LEFT JOIN hop_tokens h USING(contract_address)
|
||||
@ -1,72 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__hop_transfersent
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,184 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH token_transfers AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
from_address,
|
||||
to_address,
|
||||
raw_amount,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_token_transfers') }}
|
||||
WHERE
|
||||
from_address <> '0x0000000000000000000000000000000000000000'
|
||||
AND to_address = '0x25ab3efd52e6470681ce037cd546dc60726948d3'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
native_transfers AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
from_address,
|
||||
to_address,
|
||||
amount_precise_raw,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
trace_index :: STRING
|
||||
) AS _call_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_native_transfers') }}
|
||||
WHERE
|
||||
to_address = '0x25ab3efd52e6470681ce037cd546dc60726948d3'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
all_transfers AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
'Transfer' AS event_name,
|
||||
to_address AS bridge_address,
|
||||
from_address AS sender,
|
||||
to_address AS receiver,
|
||||
raw_amount AS amount_unadj,
|
||||
contract_address AS token_address,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['_log_id']
|
||||
) }} AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
token_transfers
|
||||
UNION ALL
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
NULL AS event_index,
|
||||
NULL AS event_name,
|
||||
to_address AS bridge_address,
|
||||
from_address AS sender,
|
||||
to_address AS receiver,
|
||||
amount_precise_raw AS amount_unadj,
|
||||
'0x4200000000000000000000000000000000000006' AS token_address,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['_call_id']
|
||||
) }} AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
native_transfers
|
||||
),
|
||||
dst_info AS (
|
||||
SELECT
|
||||
block_number,
|
||||
tx_hash,
|
||||
topics [1] :: STRING AS encoded_data,
|
||||
SUBSTR(RIGHT(encoded_data, 12), 1, 4) AS destination_chain_id,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0x25ab3efd52e6470681ce037cd546dc60726948d3'
|
||||
AND topics [0] :: STRING = '0x5ce4019f772fda6cb703b26bce3ec3006eb36b73f1d3a0eb441213317d9f5e9d'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '16 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
t.block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
t.tx_hash,
|
||||
event_index,
|
||||
event_name,
|
||||
'meson' AS platform,
|
||||
bridge_address,
|
||||
sender,
|
||||
receiver,
|
||||
CASE
|
||||
WHEN origin_from_address = '0x0000000000000000000000000000000000000000' THEN sender
|
||||
ELSE origin_from_address
|
||||
END AS destination_chain_receiver,
|
||||
amount_unadj,
|
||||
destination_chain_id,
|
||||
COALESCE(LOWER(chain), 'other') AS destination_chain,
|
||||
token_address,
|
||||
_id,
|
||||
t._inserted_timestamp
|
||||
FROM
|
||||
all_transfers t
|
||||
INNER JOIN dst_info d
|
||||
ON t.tx_hash = d.tx_hash
|
||||
AND t.block_number = d.block_number
|
||||
LEFT JOIN {{ ref('silver_bridge__meson_chain_id_seed') }}
|
||||
s
|
||||
ON d.destination_chain_id :: STRING = RIGHT(
|
||||
s.short_coin_type,
|
||||
4
|
||||
) :: STRING
|
||||
WHERE
|
||||
origin_to_address IS NOT NULL qualify (ROW_NUMBER() over (PARTITION BY _id
|
||||
ORDER BY
|
||||
t._inserted_timestamp DESC)) = 1
|
||||
@ -1,52 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__meson_transfers
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 14
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,82 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__complete_bridge_activity
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null:
|
||||
where: VERSION <> 'v1-native' AND PLATFORM NOT IN ('wormhole','meson')
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null:
|
||||
where: VERSION <> 'v1-native' AND PLATFORM NOT IN ('wormhole','meson')
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN
|
||||
- not_null
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: PLATFORM
|
||||
- not_null
|
||||
- name: VERSION
|
||||
- not_null
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
@ -1,133 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_contracts AS (
|
||||
|
||||
SELECT
|
||||
tx_hash,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
from_address,
|
||||
to_address AS contract_address,
|
||||
concat_ws(
|
||||
'-',
|
||||
block_number,
|
||||
tx_position,
|
||||
CONCAT(
|
||||
TYPE,
|
||||
'_',
|
||||
trace_address
|
||||
)
|
||||
) AS _call_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_traces') }}
|
||||
WHERE
|
||||
from_address = '0xaf5191b0de278c7286d6c7cc6ab6bb8a73ba2cd6' --Factory
|
||||
AND TYPE ILIKE 'create%'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND to_address NOT IN (
|
||||
SELECT
|
||||
DISTINCT pool_address
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
function_sigs AS (
|
||||
SELECT
|
||||
'0xfc0c546a' AS function_sig,
|
||||
'token' AS function_name
|
||||
),
|
||||
inputs AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_name,
|
||||
0 AS function_input,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(
|
||||
function_input,
|
||||
64,
|
||||
0
|
||||
)
|
||||
) AS DATA
|
||||
FROM
|
||||
base_contracts
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
),
|
||||
contract_reads AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
utils.udf_json_rpc_call(
|
||||
'eth_call',
|
||||
[{ 'to': contract_address, 'from': null, 'data': data }, utils.udf_int_to_hex(block_number) ]
|
||||
) AS rpc_request,
|
||||
live.udf_api(
|
||||
'POST',
|
||||
CONCAT(
|
||||
'{service}',
|
||||
'/',
|
||||
'{Authentication}'
|
||||
),{},
|
||||
rpc_request,
|
||||
'Vault/prod/base/quicknode/mainnet'
|
||||
) AS read_output,
|
||||
SYSDATE() AS _inserted_timestamp
|
||||
FROM
|
||||
inputs
|
||||
),
|
||||
reads_flat AS (
|
||||
SELECT
|
||||
read_output,
|
||||
read_output :data :id :: STRING AS read_id,
|
||||
read_output :data :result :: STRING AS read_result,
|
||||
SPLIT(
|
||||
read_id,
|
||||
'-'
|
||||
) AS read_id_object,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
contract_address,
|
||||
block_number,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
contract_reads
|
||||
)
|
||||
SELECT
|
||||
read_output,
|
||||
read_id,
|
||||
read_result,
|
||||
read_id_object,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
DATA,
|
||||
block_number,
|
||||
contract_address AS pool_address,
|
||||
CONCAT('0x', SUBSTR(read_result, 27, 40)) AS token_address,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
reads_flat
|
||||
@ -1,16 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__stargate_createpool
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
@ -1,121 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
LOWER(token_address) AS token_address
|
||||
FROM
|
||||
{{ ref('silver_bridge__stargate_createpool') }}
|
||||
),
|
||||
base_evt AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'stargate' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amountSD" :: STRING
|
||||
) AS amountSD,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"chainId" :: STRING
|
||||
) AS chainId,
|
||||
CASE
|
||||
WHEN chainId < 100 THEN chainId + 100
|
||||
ELSE chainId
|
||||
END AS destination_chain_id,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"dstPoolId" :: STRING
|
||||
) AS dstPoolId,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"eqFee" :: STRING
|
||||
) AS eqFee,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"eqReward" :: STRING
|
||||
) AS eqReward,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amountSD" :: STRING
|
||||
) AS lpFee,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amountSD" :: STRING
|
||||
) AS protocolFee,
|
||||
decoded_log :"from" :: STRING AS from_address,
|
||||
decoded_log,
|
||||
token_address,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
d
|
||||
INNER JOIN pools p
|
||||
ON d.contract_address = p.pool_address
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x34660fc8af304464529f48a778e03d03e4d34bcd5f9b6f0cfbf3cd238c642f7f'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
'0xaf54be5b6eec24d6bfacf1cce4eaf680a8239398' AS bridge_address,
|
||||
NAME AS platform,
|
||||
from_address AS sender,
|
||||
from_address AS receiver,
|
||||
receiver AS destination_chain_receiver,
|
||||
amountSD AS amount_unadj,
|
||||
destination_chain_id,
|
||||
LOWER(chain_name) AS destination_chain,
|
||||
dstPoolId AS destination_pool_id,
|
||||
eqFee AS fee,
|
||||
eqReward AS reward,
|
||||
lpFee AS lp_fee,
|
||||
protocolFee AS protocol_fee,
|
||||
token_address,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt b
|
||||
LEFT JOIN {{ ref('silver_bridge__stargate_chain_id_seed') }}
|
||||
s
|
||||
ON b.destination_chain_id :: STRING = s.chain_id :: STRING
|
||||
@ -1,74 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__stargate_swap
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
@ -1,89 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'symbiosis' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"chainID" :: STRING
|
||||
) AS chainID,
|
||||
decoded_log :"from" :: STRING AS from_address,
|
||||
decoded_log :"id" :: STRING AS id,
|
||||
decoded_log :"revertableAddress" :: STRING AS revertableAddress,
|
||||
decoded_log :"to" :: STRING AS to_address,
|
||||
decoded_log :"token" :: STRING AS token,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x31325fe0a1a2e6a5b1e41572156ba5b4e94f0fae7e7f63ec21e9b5ce1e4b3eab'
|
||||
AND contract_address = '0xee981b2459331ad268cc63ce6167b446af4161f8'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
contract_address AS bridge_address,
|
||||
NAME AS platform,
|
||||
from_address AS sender,
|
||||
to_address AS receiver,
|
||||
receiver AS destination_chain_receiver,
|
||||
amount,
|
||||
chainID AS destination_chain_id,
|
||||
id,
|
||||
revertableAddress AS revertable_address,
|
||||
token AS token_address,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
@ -1,74 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__symbiosis_synthesizerequest
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
@ -1,85 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'synapse' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"chainId" :: STRING
|
||||
) AS chainId,
|
||||
decoded_log :"to" :: STRING AS to_address,
|
||||
decoded_log :"token" :: STRING AS token,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xdc5bad4651c5fbe9977a696aadc65996c468cde1448dd468ec0d83bf61c4b57c'
|
||||
AND contract_address = '0xf07d1c752fab503e47fef309bf14fbdd3e867089'
|
||||
AND origin_to_address IS NOT NULL
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
contract_address AS bridge_address,
|
||||
NAME AS platform,
|
||||
amount,
|
||||
origin_from_address AS sender,
|
||||
to_address AS receiver,
|
||||
receiver AS destination_chain_receiver,
|
||||
chainId AS destination_chain_id,
|
||||
token AS token_address,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
@ -1,72 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__synapse_token_bridge
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,100 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH base_evt AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'synapse' AS NAME,
|
||||
event_index,
|
||||
topics [0] :: STRING AS topic_0,
|
||||
event_name,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"amount" :: STRING
|
||||
) AS amount,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"chainId" :: STRING
|
||||
) AS chainId,
|
||||
TRY_TO_TIMESTAMP(
|
||||
decoded_log :"deadline" :: STRING
|
||||
) AS deadline,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"minDy" :: STRING
|
||||
) AS minDy,
|
||||
decoded_log :"to" :: STRING AS to_address,
|
||||
decoded_log :"token" :: STRING AS token,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"tokenIndexFrom" :: STRING
|
||||
) AS tokenIndexFrom,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :"tokenIndexTo" :: STRING
|
||||
) AS tokenIndexTo,
|
||||
decoded_log,
|
||||
event_removed,
|
||||
IFF(
|
||||
tx_succeeded,
|
||||
'SUCCESS',
|
||||
'FAIL'
|
||||
) AS tx_status,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x91f25e9be0134ec851830e0e76dc71e06f9dade75a9b84e9524071dbbc319425'
|
||||
AND contract_address = '0xf07d1c752fab503e47fef309bf14fbdd3e867089'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND block_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
topic_0,
|
||||
event_name,
|
||||
event_removed,
|
||||
tx_status,
|
||||
contract_address AS bridge_address,
|
||||
NAME AS platform,
|
||||
origin_from_address AS sender,
|
||||
to_address AS receiver,
|
||||
receiver AS destination_chain_receiver,
|
||||
amount,
|
||||
chainId AS destination_chain_id,
|
||||
token AS token_address,
|
||||
deadline,
|
||||
minDy AS min_dy,
|
||||
tokenIndexFrom AS token_index_from,
|
||||
tokenIndexTo AS token_index_to,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
base_evt
|
||||
@ -1,69 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__synapse_tokenbridgeandswap
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: EVENT_NAME
|
||||
tests:
|
||||
- not_null
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
@ -1,291 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_bridge','defi','bridge','curated']
|
||||
) }}
|
||||
|
||||
WITH token_transfers AS (
|
||||
|
||||
SELECT
|
||||
tr.block_number,
|
||||
tr.block_timestamp,
|
||||
tr.origin_function_signature,
|
||||
tr.origin_from_address,
|
||||
tr.origin_to_address,
|
||||
tr.tx_hash,
|
||||
event_index,
|
||||
tr.contract_address,
|
||||
tr.from_address,
|
||||
tr.to_address,
|
||||
raw_amount,
|
||||
regexp_substr_all(SUBSTR(input_data, 11, len(input_data)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
) AS destination_chain_id,
|
||||
CONCAT(
|
||||
'0x',
|
||||
segmented_data [3] :: STRING
|
||||
) AS recipient1,
|
||||
CONCAT('0x', SUBSTR(segmented_data [3] :: STRING, 25, 40)) AS recipient2,
|
||||
LENGTH(
|
||||
REGEXP_SUBSTR(
|
||||
segmented_data [3] :: STRING,
|
||||
'^(0*)'
|
||||
)
|
||||
) AS len,
|
||||
CASE
|
||||
WHEN len >= 24 THEN recipient2
|
||||
ELSE recipient1
|
||||
END AS destination_recipient_address,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS token,
|
||||
TRY_TO_NUMBER(utils.udf_hex_to_int(segmented_data [1] :: STRING)) AS amount,
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [4] :: STRING
|
||||
) AS arbiterFee,
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [5] :: STRING
|
||||
) AS nonce,
|
||||
CONCAT(
|
||||
tr.tx_hash :: STRING,
|
||||
'-',
|
||||
tr.event_index :: STRING
|
||||
) AS _log_id,
|
||||
tr.modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_token_transfers') }}
|
||||
tr
|
||||
INNER JOIN {{ ref('core__fact_transactions') }}
|
||||
tx
|
||||
ON tr.block_number = tx.block_number
|
||||
AND tr.tx_hash = tx.tx_hash
|
||||
WHERE
|
||||
tr.from_address <> '0x0000000000000000000000000000000000000000'
|
||||
AND tr.to_address = '0x8d2de8d2f73f1f4cab472ac9a881c9b123c79627'
|
||||
AND tr.origin_function_signature = '0x0f5287b0' -- tokenTransfer
|
||||
AND destination_chain_id <> 0
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND tr.modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND tr.modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
native_transfers AS (
|
||||
SELECT
|
||||
et.block_number,
|
||||
et.block_timestamp,
|
||||
et.tx_hash,
|
||||
tx.from_address AS origin_from_address,
|
||||
tx.to_address AS origin_to_address,
|
||||
tx.origin_function_signature,
|
||||
et.from_address,
|
||||
et.to_address,
|
||||
amount_precise_raw,
|
||||
regexp_substr_all(SUBSTR(input_data, 11, len(input_data)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
) AS destination_chain_id,
|
||||
CONCAT(
|
||||
'0x',
|
||||
segmented_data [1] :: STRING
|
||||
) AS recipient1,
|
||||
CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS recipient2,
|
||||
LENGTH(
|
||||
REGEXP_SUBSTR(
|
||||
segmented_data [1] :: STRING,
|
||||
'^(0*)'
|
||||
)
|
||||
) AS len,
|
||||
CASE
|
||||
WHEN len >= 24 THEN recipient2
|
||||
ELSE recipient1
|
||||
END AS destination_recipient_address,
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
) AS arbiterFee,
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [3] :: STRING
|
||||
) AS nonce,
|
||||
CONCAT(
|
||||
et.tx_hash :: STRING,
|
||||
'-',
|
||||
et.trace_index :: STRING
|
||||
) AS _call_id,
|
||||
et.modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_native_transfers') }}
|
||||
et
|
||||
INNER JOIN {{ ref('core__fact_transactions') }}
|
||||
tx
|
||||
ON et.block_number = tx.block_number
|
||||
AND et.tx_hash = tx.tx_hash
|
||||
WHERE
|
||||
et.to_address = '0x8d2de8d2f73f1f4cab472ac9a881c9b123c79627'
|
||||
AND tx.origin_function_signature = '0x9981509f' -- wrapAndTransfer
|
||||
AND destination_chain_id <> 0
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND et.modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND et.modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
all_transfers AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
'Transfer' AS event_name,
|
||||
to_address AS bridge_address,
|
||||
from_address AS sender,
|
||||
to_address AS receiver,
|
||||
raw_amount AS amount_unadj,
|
||||
destination_chain_id,
|
||||
contract_address AS token_address,
|
||||
destination_recipient_address,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['_log_id']
|
||||
) }} AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
token_transfers
|
||||
UNION ALL
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
NULL AS event_index,
|
||||
NULL AS event_name,
|
||||
to_address AS bridge_address,
|
||||
from_address AS sender,
|
||||
to_address AS receiver,
|
||||
amount_precise_raw AS amount_unadj,
|
||||
destination_chain_id,
|
||||
'0x4200000000000000000000000000000000000006' AS token_address,
|
||||
destination_recipient_address,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['_call_id']
|
||||
) }} AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
native_transfers
|
||||
),
|
||||
base_near AS (
|
||||
SELECT
|
||||
near_address,
|
||||
addr_encoded
|
||||
FROM
|
||||
{{ source(
|
||||
'crosschain_silver',
|
||||
'near_address_encoded'
|
||||
) }}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
event_name,
|
||||
'wormhole' AS platform,
|
||||
bridge_address,
|
||||
sender,
|
||||
receiver,
|
||||
amount_unadj,
|
||||
destination_chain_id,
|
||||
chain_name AS destination_chain,
|
||||
token_address,
|
||||
destination_recipient_address,
|
||||
--hex address on the destination chain, requires decoding for non-EVM - more info: https://docs.wormhole.com/wormhole/blockchain-environments/environments
|
||||
CASE
|
||||
WHEN destination_chain = 'solana' THEN utils.udf_hex_to_base58(destination_recipient_address)
|
||||
WHEN destination_chain IN (
|
||||
'injective',
|
||||
'sei'
|
||||
) THEN utils.udf_hex_to_bech32(
|
||||
destination_recipient_address,
|
||||
SUBSTR(
|
||||
destination_chain,
|
||||
1,
|
||||
3
|
||||
)
|
||||
)
|
||||
WHEN destination_chain IN (
|
||||
'osmosis',
|
||||
'xpla'
|
||||
) THEN utils.udf_hex_to_bech32(
|
||||
destination_recipient_address,
|
||||
SUBSTR(
|
||||
destination_chain,
|
||||
1,
|
||||
4
|
||||
)
|
||||
)
|
||||
WHEN destination_chain IN (
|
||||
'terra',
|
||||
'terra2',
|
||||
'evmos'
|
||||
) THEN utils.udf_hex_to_bech32(
|
||||
destination_recipient_address,
|
||||
SUBSTR(
|
||||
destination_chain,
|
||||
1,
|
||||
5
|
||||
)
|
||||
)
|
||||
WHEN destination_chain IN (
|
||||
'cosmoshub',
|
||||
'kujira'
|
||||
) THEN utils.udf_hex_to_bech32(
|
||||
destination_recipient_address,
|
||||
SUBSTR(
|
||||
destination_chain,
|
||||
1,
|
||||
6
|
||||
)
|
||||
)
|
||||
WHEN destination_chain IN ('near') THEN near_address
|
||||
WHEN destination_chain IN ('algorand') THEN utils.udf_hex_to_algorand(destination_recipient_address)
|
||||
WHEN destination_chain IN ('polygon') THEN SUBSTR(
|
||||
destination_recipient_address,
|
||||
1,
|
||||
42
|
||||
)
|
||||
ELSE destination_recipient_address
|
||||
END AS destination_chain_receiver,
|
||||
_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
all_transfers t
|
||||
LEFT JOIN {{ ref('silver_bridge__wormhole_chain_id_seed') }}
|
||||
s
|
||||
ON t.destination_chain_id :: STRING = s.wormhole_chain_id :: STRING
|
||||
LEFT JOIN base_near n
|
||||
ON t.destination_recipient_address = n.addr_encoded
|
||||
WHERE
|
||||
origin_to_address IS NOT NULL qualify (ROW_NUMBER() over (PARTITION BY _id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,52 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_bridge__wormhole_transfers
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: BRIDGE_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- DECIMAL
|
||||
- FLOAT
|
||||
- NUMBER
|
||||
- name: DESTINATION_CHAIN_RECEIVER
|
||||
tests:
|
||||
- not_null
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
@ -1,66 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "pool_address",
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH created_pools AS(
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40))) AS token0,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40))) AS token1,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [3] :: STRING, 27, 40))) AS stable,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [1] :: STRING
|
||||
) :: INTEGER AS pool_number,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS pool_address,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] = '0x2128d88d14c80cb081c1252a5acff7a264671bf199ce226b53788fb26065005e'
|
||||
AND contract_address = '0x420dd381b31aef6683db6b902084cb0ffece40da'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
segmented_data,
|
||||
token0,
|
||||
token1,
|
||||
CASE
|
||||
WHEN stable = '0x0000000000000000000000000000000000000001' THEN TRUE
|
||||
WHEN stable = '0x0000000000000000000000000000000000000000' THEN FALSE
|
||||
END AS stable,
|
||||
pool_number,
|
||||
pool_address,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
created_pools qualify(ROW_NUMBER() over (PARTITION BY pool_address
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,23 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__aerodrome_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN0
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN1
|
||||
tests:
|
||||
- not_null
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_NTZ
|
||||
- TIMESTAMP_LTZ
|
||||
@ -1,105 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "pool_address",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH created_pools AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40))) AS token0_address,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40))) AS token1_address,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
topics [3] :: STRING
|
||||
) :: INTEGER AS tick_spacing,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS pool_address,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] = '0xab0d57f0df537bb25e80245ef7748fa62353808c54d6e528a9dd20887aed9ac2'
|
||||
AND contract_address = LOWER('0x5e7BB104d84c7CB9B682AaC2F3d509f5F406809A')
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
initial_info AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
utils.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [0] :: STRING)) :: FLOAT AS init_sqrtPriceX96,
|
||||
utils.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [1] :: STRING)) :: FLOAT AS init_tick,
|
||||
pow(
|
||||
1.0001,
|
||||
init_tick
|
||||
) AS init_price_1_0_unadj,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
FINAL AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
p.contract_address,
|
||||
token0_address,
|
||||
token1_address,
|
||||
tick_spacing,
|
||||
pool_address,
|
||||
COALESCE(
|
||||
init_tick,
|
||||
0
|
||||
) AS init_tick,
|
||||
p._log_id AS _id,
|
||||
p._inserted_timestamp
|
||||
FROM
|
||||
created_pools p
|
||||
LEFT JOIN initial_info i
|
||||
ON p.pool_address = i.contract_address
|
||||
)
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
FINAL qualify(ROW_NUMBER() over(PARTITION BY pool_address
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,13 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__aerodrome_slipstream_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
|
||||
@ -1,99 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH base_swaps AS (
|
||||
|
||||
SELECT
|
||||
*,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS recipient,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [0] :: STRING
|
||||
) :: FLOAT AS amount0_unadj,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [1] :: STRING
|
||||
) :: FLOAT AS amount1_unadj,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [2] :: STRING
|
||||
) :: FLOAT AS sqrtPriceX96,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [3] :: STRING
|
||||
) :: FLOAT AS liquidity,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [4] :: STRING
|
||||
) :: FLOAT AS tick
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67'
|
||||
AND tx_succeeded
|
||||
AND event_removed = 'false'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
pool_data AS (
|
||||
SELECT
|
||||
token0_address,
|
||||
token1_address,
|
||||
tick_spacing,
|
||||
pool_address
|
||||
FROM
|
||||
{{ ref('silver_dex__aerodrome_slipstream_pools') }}
|
||||
),
|
||||
FINAL AS (
|
||||
SELECT
|
||||
'base' AS blockchain,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address AS pool_address,
|
||||
recipient,
|
||||
sender,
|
||||
tick,
|
||||
tick_spacing,
|
||||
liquidity,
|
||||
event_index,
|
||||
token0_address,
|
||||
token1_address,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
amount0_unadj,
|
||||
amount1_unadj
|
||||
FROM
|
||||
base_swaps
|
||||
INNER JOIN pool_data
|
||||
ON pool_data.pool_address = base_swaps.contract_address
|
||||
)
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
FINAL qualify(ROW_NUMBER() over(PARTITION BY _log_id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,59 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__aerodrome_slipstream_swaps
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: AMOUNT0_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- name: AMOUNT1_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 1
|
||||
- name: BLOCKCHAIN
|
||||
tests:
|
||||
- not_null
|
||||
- name: LIQUIDITY
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: RECIPIENT
|
||||
tests:
|
||||
- not_null
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TICK
|
||||
tests:
|
||||
- not_null
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,123 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
token0,
|
||||
token1
|
||||
FROM
|
||||
{{ ref('silver_dex__aerodrome_pools') }}
|
||||
),
|
||||
swaps_base AS (
|
||||
SELECT
|
||||
block_number,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
) AS amount0In,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
) AS amount1In,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
) AS amount0Out,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [3] :: STRING
|
||||
)
|
||||
) AS amount1Out,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS tx_to,
|
||||
token0,
|
||||
token1,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
INNER JOIN pools p
|
||||
ON p.pool_address = contract_address
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
sender,
|
||||
tx_to,
|
||||
amount0In,
|
||||
amount1In,
|
||||
amount0Out,
|
||||
amount1Out,
|
||||
token0,
|
||||
token1,
|
||||
CASE
|
||||
WHEN amount0In <> 0
|
||||
AND amount1In <> 0
|
||||
AND amount0Out <> 0 THEN amount1In
|
||||
WHEN amount0In <> 0 THEN amount0In
|
||||
WHEN amount1In <> 0 THEN amount1In
|
||||
END AS amount_in_unadj,
|
||||
CASE
|
||||
WHEN amount0Out <> 0 THEN amount0Out
|
||||
WHEN amount1Out <> 0 THEN amount1Out
|
||||
END AS amount_out_unadj,
|
||||
CASE
|
||||
WHEN amount0In <> 0
|
||||
AND amount1In <> 0
|
||||
AND amount0Out <> 0 THEN token1
|
||||
WHEN amount0In <> 0 THEN token0
|
||||
WHEN amount1In <> 0 THEN token1
|
||||
END AS token_in,
|
||||
CASE
|
||||
WHEN amount0Out <> 0 THEN token0
|
||||
WHEN amount1Out <> 0 THEN token1
|
||||
END AS token_out,
|
||||
'Swap' AS event_name,
|
||||
'aerodrome' AS platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,116 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__aerodrome_swaps
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 2
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_NTZ
|
||||
- TIMESTAMP_LTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_IN_UNADJ
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_IN
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT_UNADJ
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SYMBOL_IN
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: SYMBOL_OUT
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: PLATFORM
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: _LOG_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
|
||||
@ -1,61 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'pool_address',
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pool_creation AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS token0,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS token1,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS pool_address,
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
) :: INT AS pool_id,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref ('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = LOWER('0x3E84D913803b02A4a7f027165E8cA42C14C0FdE7')
|
||||
AND topics [0] :: STRING = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9' --PairCreated
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
event_index,
|
||||
token0,
|
||||
token1,
|
||||
pool_address,
|
||||
pool_id,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
pool_creation qualify(ROW_NUMBER() over (PARTITION BY pool_address
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,23 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__alienbase_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN0
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN1
|
||||
tests:
|
||||
- not_null
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
@ -1,123 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'block_number',
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
token0,
|
||||
token1
|
||||
FROM
|
||||
{{ ref('silver_dex__alienbase_pools') }}
|
||||
),
|
||||
swaps_base AS (
|
||||
SELECT
|
||||
block_number,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [0] :: STRING
|
||||
) :: INTEGER
|
||||
) AS amount0In,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
) :: INTEGER
|
||||
) AS amount1In,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
) :: INTEGER
|
||||
) AS amount0Out,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [3] :: STRING
|
||||
) :: INTEGER
|
||||
) AS amount1Out,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS tx_to,
|
||||
token0,
|
||||
token1,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
INNER JOIN pools p
|
||||
ON p.pool_address = contract_address
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
sender,
|
||||
tx_to,
|
||||
amount0In,
|
||||
amount1In,
|
||||
amount0Out,
|
||||
amount1Out,
|
||||
token0,
|
||||
token1,
|
||||
CASE
|
||||
WHEN amount0In <> 0
|
||||
AND amount1In <> 0
|
||||
AND amount0Out <> 0 THEN amount1In
|
||||
WHEN amount0In <> 0 THEN amount0In
|
||||
WHEN amount1In <> 0 THEN amount1In
|
||||
END AS amount_in_unadj,
|
||||
CASE
|
||||
WHEN amount0Out <> 0 THEN amount0Out
|
||||
WHEN amount1Out <> 0 THEN amount1Out
|
||||
END AS amount_out_unadj,
|
||||
CASE
|
||||
WHEN amount0In <> 0
|
||||
AND amount1In <> 0
|
||||
AND amount0Out <> 0 THEN token1
|
||||
WHEN amount0In <> 0 THEN token0
|
||||
WHEN amount1In <> 0 THEN token1
|
||||
END AS token_in,
|
||||
CASE
|
||||
WHEN amount0Out <> 0 THEN token0
|
||||
WHEN amount1Out <> 0 THEN token1
|
||||
END AS token_out,
|
||||
'Swap' AS event_name,
|
||||
'alienbase' AS platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,116 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__alienbase_swaps
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 2
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_IN_UNADJ
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_IN
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT_UNADJ
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SYMBOL_IN
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: SYMBOL_OUT
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: PLATFORM
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: _LOG_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
|
||||
@ -1,243 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "pool_address",
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools_registered AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
event_index,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
topics [1] :: STRING AS pool_id,
|
||||
SUBSTR(
|
||||
topics [1] :: STRING,
|
||||
1,
|
||||
42
|
||||
) AS pool_address,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp,
|
||||
ROW_NUMBER() over (
|
||||
ORDER BY
|
||||
pool_address
|
||||
) AS row_num
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x3c13bc30b8e878c53fd2a36b679409c073afd75950be43d8858768e956fbc20e' --PoolRegistered
|
||||
AND contract_address = '0xba12222222228d8ba445958a75a0704d566bf2c8'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
tokens_registered AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
event_index,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
decoded_log :poolId :: STRING AS pool_id,
|
||||
decoded_log :tokens AS tokens,
|
||||
tokens [0] :: STRING AS token0,
|
||||
tokens [1] :: STRING AS token1,
|
||||
tokens [2] :: STRING AS token2,
|
||||
tokens [3] :: STRING AS token3,
|
||||
tokens [4] :: STRING AS token4,
|
||||
tokens [5] :: STRING AS token5,
|
||||
tokens [6] :: STRING AS token6,
|
||||
tokens [7] :: STRING AS token7,
|
||||
decoded_log :assetManagers AS asset_managers,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xf5847d3f2197b16cdcd2098ec95d0905cd1abdaf415f07bb7cef2bba8ac5dec4' --TokensRegistered
|
||||
AND contract_address = '0xba12222222228d8ba445958a75a0704d566bf2c8'
|
||||
AND tx_hash IN (
|
||||
SELECT
|
||||
tx_hash
|
||||
FROM
|
||||
pools_registered
|
||||
)
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
function_sigs AS (
|
||||
SELECT
|
||||
'0x06fdde03' AS function_sig,
|
||||
'name' AS function_name
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0x95d89b41' AS function_sig,
|
||||
'symbol' AS function_name
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0x313ce567' AS function_sig,
|
||||
'decimals' AS function_name
|
||||
),
|
||||
inputs_pools AS (
|
||||
SELECT
|
||||
pool_address,
|
||||
block_number,
|
||||
function_sig
|
||||
FROM
|
||||
pools_registered
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
),
|
||||
build_rpc_requests AS (
|
||||
SELECT
|
||||
pool_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
RPAD(
|
||||
function_sig,
|
||||
64,
|
||||
'0'
|
||||
) AS input,
|
||||
utils.udf_json_rpc_call(
|
||||
'eth_call',
|
||||
[{'to': pool_address, 'from': null, 'data': input}, utils.udf_int_to_hex(block_number)],
|
||||
concat_ws(
|
||||
'-',
|
||||
pool_address,
|
||||
input,
|
||||
block_number
|
||||
)
|
||||
) AS rpc_request,
|
||||
row_num,
|
||||
CEIL(
|
||||
row_num / 250
|
||||
) AS batch_no
|
||||
FROM
|
||||
inputs_pools
|
||||
LEFT JOIN pools_registered USING(pool_address)
|
||||
),
|
||||
pool_token_reads AS (
|
||||
SELECT
|
||||
live.udf_api(
|
||||
'POST',
|
||||
CONCAT('{service}', '/', '{Authentication}'),
|
||||
{},
|
||||
rpc_request,
|
||||
'Vault/prod/base/quicknode/mainnet'
|
||||
) AS read_output,
|
||||
SYSDATE() AS _inserted_timestamp,
|
||||
pool_address,
|
||||
block_number,
|
||||
function_sig
|
||||
FROM
|
||||
build_rpc_requests
|
||||
),
|
||||
reads_adjusted AS (
|
||||
SELECT
|
||||
read_output:data:result :: STRING AS read_result,
|
||||
pool_address,
|
||||
function_sig,
|
||||
block_number,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
pool_token_reads
|
||||
),
|
||||
pool_details AS (
|
||||
SELECT
|
||||
pool_address,
|
||||
function_sig,
|
||||
function_name,
|
||||
read_result,
|
||||
regexp_substr_all(SUBSTR(read_result, 3, len(read_result)), '.{64}') AS segmented_output,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
reads_adjusted
|
||||
LEFT JOIN function_sigs USING(function_sig)
|
||||
),
|
||||
FINAL AS (
|
||||
SELECT
|
||||
pool_address,
|
||||
MIN(
|
||||
CASE
|
||||
WHEN function_name = 'symbol' THEN utils.udf_hex_to_string(
|
||||
segmented_output [2] :: STRING
|
||||
)
|
||||
END
|
||||
) AS pool_symbol,
|
||||
MIN(
|
||||
CASE
|
||||
WHEN function_name = 'name' THEN utils.udf_hex_to_string(
|
||||
segmented_output [2] :: STRING
|
||||
)
|
||||
END
|
||||
) AS pool_name,
|
||||
MIN(
|
||||
CASE
|
||||
WHEN read_result :: STRING = '0x' THEN NULL
|
||||
ELSE utils.udf_hex_to_int(LEFT(read_result :: STRING, 66))
|
||||
END
|
||||
) :: INTEGER AS pool_decimals,
|
||||
MAX(_inserted_timestamp) AS _inserted_timestamp
|
||||
FROM
|
||||
pool_details
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
SELECT
|
||||
p.block_number,
|
||||
p.block_timestamp,
|
||||
p.event_index,
|
||||
p.tx_hash,
|
||||
p.contract_address,
|
||||
p.pool_id,
|
||||
f.pool_address,
|
||||
f.pool_symbol,
|
||||
f.pool_name,
|
||||
f.pool_decimals,
|
||||
t.token0,
|
||||
t.token1,
|
||||
t.token2,
|
||||
t.token3,
|
||||
t.token4,
|
||||
t.token5,
|
||||
t.token6,
|
||||
t.token7,
|
||||
t.asset_managers,
|
||||
p._log_id,
|
||||
f._inserted_timestamp
|
||||
FROM
|
||||
FINAL f
|
||||
LEFT JOIN pools_registered p
|
||||
ON f.pool_address = p.pool_address
|
||||
LEFT JOIN tokens_registered t
|
||||
ON p.pool_id = t.pool_id
|
||||
WHERE
|
||||
t.token0 IS NOT NULL
|
||||
@ -1,12 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__balancer_pools
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,103 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pool_name AS (
|
||||
|
||||
SELECT
|
||||
pool_name,
|
||||
pool_address
|
||||
FROM
|
||||
{{ ref('silver_dex__balancer_pools') }}
|
||||
),
|
||||
swaps_base AS (
|
||||
SELECT
|
||||
tx_hash,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
modified_timestamp AS _inserted_timestamp,
|
||||
'Swap' AS event_name,
|
||||
event_index,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
(
|
||||
CASE
|
||||
WHEN segmented_data [0] = '0x' THEN NULL
|
||||
ELSE utils.udf_hex_to_int(
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
END
|
||||
) :: INTEGER AS amount_in_unadj,
|
||||
(
|
||||
CASE
|
||||
WHEN segmented_data [1] = '0x' THEN NULL
|
||||
ELSE utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
END
|
||||
) :: INTEGER AS amount_out_unadj,
|
||||
topics [1] :: STRING AS pool_id,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS token_in,
|
||||
CONCAT('0x', SUBSTR(topics [3] :: STRING, 27, 40)) AS token_out,
|
||||
SUBSTR(
|
||||
topics [1] :: STRING,
|
||||
1,
|
||||
42
|
||||
) AS pool_address,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
'balancer' AS platform,
|
||||
origin_from_address AS sender,
|
||||
origin_from_address AS tx_to
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x2170c741c41531aec20e7c107c24eecfdd15e69c9bb0a8dd37b1840b9e0b207b'
|
||||
AND contract_address = '0xba12222222228d8ba445958a75a0704d566bf2c8'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
tx_hash,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
_inserted_timestamp,
|
||||
event_name,
|
||||
event_index,
|
||||
amount_in_unadj,
|
||||
amount_out_unadj,
|
||||
pool_id,
|
||||
token_in,
|
||||
token_out,
|
||||
s.pool_address AS contract_address,
|
||||
_log_id,
|
||||
platform,
|
||||
sender,
|
||||
tx_to,
|
||||
pool_name
|
||||
FROM
|
||||
swaps_base s
|
||||
INNER JOIN pool_name pn
|
||||
ON pn.pool_address = s.pool_address
|
||||
@ -1,66 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__balancer_swaps
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _log_id
|
||||
columns:
|
||||
- name: AMOUNT_IN_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: AMOUNT_OUT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 1
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: POOL_NAME
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- varchar
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,117 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'pool_address',
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH created_pools AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40))) AS token0_address,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40))) AS token1_address,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
topics [3] :: STRING
|
||||
)
|
||||
) AS fee,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
) AS tick_spacing,
|
||||
CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS pool_address,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
block_timestamp :: DATE > '2023-08-01'
|
||||
AND contract_address = LOWER('0x38015D05f4fEC8AFe15D7cc0386a126574e8077B') -- BASEX V3 FACTORY
|
||||
AND topic_0 = '0x783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b7118'
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
initial_info AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [0] :: STRING))
|
||||
) AS init_sqrtPriceX96,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [1] :: STRING))
|
||||
) AS init_tick,
|
||||
pow(
|
||||
1.0001,
|
||||
init_tick
|
||||
) AS init_price_1_0_unadj
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address IN (
|
||||
SELECT
|
||||
pool_address
|
||||
FROM
|
||||
created_pools
|
||||
)
|
||||
AND topic_0 = '0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95'
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
p.contract_address,
|
||||
token0_address,
|
||||
token1_address,
|
||||
fee,
|
||||
(
|
||||
fee / 10000
|
||||
) :: FLOAT AS fee_percent,
|
||||
tick_spacing,
|
||||
pool_address,
|
||||
COALESCE(
|
||||
init_tick,
|
||||
0
|
||||
) AS init_tick,
|
||||
p._log_id,
|
||||
p.modified_timestamp
|
||||
FROM
|
||||
created_pools p
|
||||
LEFT JOIN initial_info i
|
||||
ON p.pool_address = i.contract_address qualify(ROW_NUMBER() over(PARTITION BY pool_address
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -1,26 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__baseswap_basex_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN0_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN1_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TICK_SPACING
|
||||
tests:
|
||||
- not_null
|
||||
- name: FEE_PERCENT
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,114 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'block_number',
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
token0_address,
|
||||
token1_address,
|
||||
fee,
|
||||
tick_spacing
|
||||
FROM
|
||||
{{ ref('silver_dex__baseswap_basex_pools') }}
|
||||
),
|
||||
base_swaps AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
event_index,
|
||||
'Swap' AS event_name,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS recipient,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [0] :: STRING
|
||||
) :: FLOAT AS amount0_unadj,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [1] :: STRING
|
||||
) :: FLOAT AS amount1_unadj,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [2] :: STRING
|
||||
) :: FLOAT AS sqrtPriceX96,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [3] :: STRING
|
||||
) :: FLOAT AS liquidity,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [4] :: STRING
|
||||
) :: FLOAT AS tick,
|
||||
pool_address,
|
||||
token0_address,
|
||||
token1_address,
|
||||
fee,
|
||||
tick_spacing,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
l
|
||||
INNER JOIN pools
|
||||
ON pools.pool_address = l.contract_address
|
||||
WHERE
|
||||
block_timestamp :: DATE >= '2023-08-01'
|
||||
AND topic_0 = '0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67'
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
modified_timestamp
|
||||
) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
'baseswap-basex' AS platform,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
pool_address,
|
||||
recipient,
|
||||
sender,
|
||||
fee,
|
||||
tick,
|
||||
tick_spacing,
|
||||
liquidity,
|
||||
event_name,
|
||||
event_index,
|
||||
token0_address,
|
||||
token1_address,
|
||||
_log_id,
|
||||
modified_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
amount0_unadj,
|
||||
amount1_unadj
|
||||
FROM
|
||||
base_swaps qualify(ROW_NUMBER() over(PARTITION BY _log_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -1,64 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__baseswap_basex_swaps
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: RECIPIENT
|
||||
tests:
|
||||
- not_null
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TICK
|
||||
tests:
|
||||
- not_null
|
||||
- name: LIQUIDITY
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: AMOUNT0_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: AMOUNT1_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
@ -1,61 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "pool_address",
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pool_creation AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS token0,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS token1,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS pool_address,
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
) :: INT AS pool_id,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref ('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0xfda619b6d20975be80a10332cd39b9a4b0faa8bb' --factory
|
||||
AND topics [0] :: STRING = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9' --PairCreated
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
token0,
|
||||
token1,
|
||||
pool_address,
|
||||
pool_id,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
pool_creation qualify(ROW_NUMBER() over (PARTITION BY pool_address
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,23 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__baseswap_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN0
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN1
|
||||
tests:
|
||||
- not_null
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_NTZ
|
||||
- TIMESTAMP_LTZ
|
||||
@ -1,123 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
token0,
|
||||
token1
|
||||
FROM
|
||||
{{ ref('silver_dex__baseswap_pools') }}
|
||||
),
|
||||
swaps_base AS (
|
||||
SELECT
|
||||
block_number,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
) AS amount0In,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
) AS amount1In,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
) AS amount0Out,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [3] :: STRING
|
||||
)
|
||||
) AS amount1Out,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS tx_to,
|
||||
token0,
|
||||
token1,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
INNER JOIN pools p
|
||||
ON p.pool_address = contract_address
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
sender,
|
||||
tx_to,
|
||||
amount0In,
|
||||
amount1In,
|
||||
amount0Out,
|
||||
amount1Out,
|
||||
token0,
|
||||
token1,
|
||||
CASE
|
||||
WHEN amount0In <> 0
|
||||
AND amount1In <> 0
|
||||
AND amount0Out <> 0 THEN amount1In
|
||||
WHEN amount0In <> 0 THEN amount0In
|
||||
WHEN amount1In <> 0 THEN amount1In
|
||||
END AS amount_in_unadj,
|
||||
CASE
|
||||
WHEN amount0Out <> 0 THEN amount0Out
|
||||
WHEN amount1Out <> 0 THEN amount1Out
|
||||
END AS amount_out_unadj,
|
||||
CASE
|
||||
WHEN amount0In <> 0
|
||||
AND amount1In <> 0
|
||||
AND amount0Out <> 0 THEN token1
|
||||
WHEN amount0In <> 0 THEN token0
|
||||
WHEN amount1In <> 0 THEN token1
|
||||
END AS token_in,
|
||||
CASE
|
||||
WHEN amount0Out <> 0 THEN token0
|
||||
WHEN amount1Out <> 0 THEN token1
|
||||
END AS token_out,
|
||||
'Swap' AS event_name,
|
||||
'baseswap' AS platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,116 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__baseswap_swaps
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 2
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_NTZ
|
||||
- TIMESTAMP_LTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_IN_UNADJ
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_IN
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT_UNADJ
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SYMBOL_IN
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: SYMBOL_OUT
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: PLATFORM
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: _LOG_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
|
||||
@ -1,438 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "pool_address",
|
||||
full_refresh = false,
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH contract_deployments AS (
|
||||
|
||||
SELECT
|
||||
tx_hash,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
from_address AS deployer_address,
|
||||
to_address AS contract_address,
|
||||
concat_ws(
|
||||
'-',
|
||||
block_number,
|
||||
tx_position,
|
||||
CONCAT(
|
||||
TYPE,
|
||||
'_',
|
||||
trace_address
|
||||
)
|
||||
) AS _call_id,
|
||||
modified_timestamp AS _inserted_timestamp,
|
||||
ROW_NUMBER() over (
|
||||
ORDER BY
|
||||
contract_address
|
||||
) AS row_num
|
||||
FROM
|
||||
{{ ref(
|
||||
'core__fact_traces'
|
||||
) }}
|
||||
WHERE
|
||||
-- curve contract deployers
|
||||
from_address IN (
|
||||
'0xa5961898870943c68037f6848d2d866ed2016bcb',
|
||||
'0x3093f9b57a428f3eb6285a589cb35bea6e78c336',
|
||||
'0x5ef72230578b3e399e6c6f4f6360edf95e83bbfd'
|
||||
)
|
||||
AND tx_succeeded
|
||||
AND trace_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
|
||||
qualify(ROW_NUMBER() over(PARTITION BY to_address
|
||||
ORDER BY
|
||||
block_timestamp ASC)) = 1
|
||||
),
|
||||
function_sigs AS (
|
||||
SELECT
|
||||
'0x87cb4f57' AS function_sig,
|
||||
'base_coins' AS function_name
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0xb9947eb0' AS function_sig,
|
||||
'underlying_coins' AS function_name
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0xc6610657' AS function_sig,
|
||||
'coins' AS function_name
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0x06fdde03' AS function_sig,
|
||||
'name' AS function_name
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0x95d89b41' AS function_sig,
|
||||
'symbol' AS function_name
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0x313ce567' AS function_sig,
|
||||
'decimals' AS function_name
|
||||
),
|
||||
function_inputs AS (
|
||||
SELECT
|
||||
SEQ4() AS function_input
|
||||
FROM
|
||||
TABLE(GENERATOR(rowcount => 8))
|
||||
),
|
||||
inputs_coins AS (
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
(ROW_NUMBER() over (PARTITION BY contract_address
|
||||
ORDER BY
|
||||
block_number)) - 1 AS function_input
|
||||
FROM
|
||||
contract_deployments
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
JOIN function_inputs
|
||||
ON 1 = 1
|
||||
WHERE
|
||||
function_name = 'coins'
|
||||
),
|
||||
inputs_base_coins AS (
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
(ROW_NUMBER() over (PARTITION BY contract_address
|
||||
ORDER BY
|
||||
block_number)) - 1 AS function_input
|
||||
FROM
|
||||
contract_deployments
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
JOIN function_inputs
|
||||
ON 1 = 1
|
||||
WHERE
|
||||
function_name = 'base_coins'
|
||||
),
|
||||
inputs_underlying_coins AS (
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
(ROW_NUMBER() over (PARTITION BY contract_address
|
||||
ORDER BY
|
||||
block_number)) - 1 AS function_input
|
||||
FROM
|
||||
contract_deployments
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
JOIN function_inputs
|
||||
ON 1 = 1
|
||||
WHERE
|
||||
function_name = 'underlying_coins'
|
||||
),
|
||||
inputs_pool_details AS (
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
NULL AS function_input
|
||||
FROM
|
||||
contract_deployments
|
||||
JOIN function_sigs
|
||||
ON 1 = 1
|
||||
WHERE
|
||||
function_name IN (
|
||||
'name',
|
||||
'symbol',
|
||||
'decimals'
|
||||
)
|
||||
),
|
||||
all_inputs AS (
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_input
|
||||
FROM
|
||||
inputs_coins
|
||||
UNION ALL
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_input
|
||||
FROM
|
||||
inputs_base_coins
|
||||
UNION ALL
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_input
|
||||
FROM
|
||||
inputs_underlying_coins
|
||||
UNION ALL
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_input
|
||||
FROM
|
||||
inputs_pool_details
|
||||
),
|
||||
build_rpc_requests AS (
|
||||
SELECT
|
||||
deployer_address,
|
||||
contract_address,
|
||||
block_number,
|
||||
function_sig,
|
||||
function_input,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(IFNULL(function_input, 0), 64, '0')
|
||||
) AS input,
|
||||
utils.udf_json_rpc_call(
|
||||
'eth_call',
|
||||
[{'to': contract_address, 'from': null, 'data':input }, utils.udf_int_to_hex(block_number)],
|
||||
concat_ws(
|
||||
'-',
|
||||
contract_address,
|
||||
input,
|
||||
block_number
|
||||
)
|
||||
) AS rpc_request,
|
||||
row_num,
|
||||
CEIL(
|
||||
row_num / 50
|
||||
) AS batch_no
|
||||
FROM
|
||||
all_inputs
|
||||
LEFT JOIN contract_deployments USING(contract_address)
|
||||
),
|
||||
pool_token_reads AS (
|
||||
|
||||
{% if is_incremental() %}
|
||||
{% for item in range(6) %}
|
||||
(
|
||||
SELECT
|
||||
live.udf_api('POST', CONCAT('{service}', '/', '{Authentication}'),{}, batch_rpc_request, 'Vault/prod/base/quicknode/mainnet') AS read_output, SYSDATE() AS _inserted_timestamp
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
ARRAY_AGG(rpc_request) batch_rpc_request
|
||||
FROM
|
||||
build_rpc_requests
|
||||
WHERE
|
||||
batch_no = {{ item }} + 1
|
||||
AND batch_no IN (
|
||||
SELECT
|
||||
DISTINCT batch_no
|
||||
FROM
|
||||
build_rpc_requests))) {% if not loop.last %}
|
||||
UNION ALL
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% for item in range(60) %}
|
||||
(
|
||||
SELECT
|
||||
live.udf_api('POST', CONCAT('{service}', '/', '{Authentication}'),{}, batch_rpc_request, 'Vault/prod/base/quicknode/mainnet') AS read_output, SYSDATE() AS _inserted_timestamp
|
||||
FROM
|
||||
(
|
||||
SELECT
|
||||
ARRAY_AGG(rpc_request) batch_rpc_request
|
||||
FROM
|
||||
build_rpc_requests
|
||||
WHERE
|
||||
batch_no = {{ item }} + 1
|
||||
AND batch_no IN (
|
||||
SELECT
|
||||
DISTINCT batch_no
|
||||
FROM
|
||||
build_rpc_requests))) {% if not loop.last %}
|
||||
UNION ALL
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}),
|
||||
reads_adjusted AS (
|
||||
SELECT
|
||||
VALUE :id :: STRING AS read_id,
|
||||
VALUE :result :: STRING AS read_result,
|
||||
SPLIT(
|
||||
read_id,
|
||||
'-'
|
||||
) AS read_id_object,
|
||||
read_id_object [0] :: STRING AS contract_address,
|
||||
read_id_object [2] :: STRING AS block_number,
|
||||
LEFT(
|
||||
read_id_object [1] :: STRING,
|
||||
10
|
||||
) AS function_sig,
|
||||
RIGHT(
|
||||
read_id_object [1],
|
||||
LENGTH(
|
||||
read_id_object [1] - 10
|
||||
)
|
||||
) :: INT AS function_input,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
pool_token_reads,
|
||||
LATERAL FLATTEN(
|
||||
input => read_output :data
|
||||
)
|
||||
),
|
||||
tokens AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
read_result,
|
||||
regexp_substr_all(SUBSTR(read_result, 3, len(read_result)), '.{64}') [0] AS segmented_token_address,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
reads_adjusted
|
||||
LEFT JOIN function_sigs USING(function_sig)
|
||||
WHERE
|
||||
function_name IN (
|
||||
'coins',
|
||||
'base_coins',
|
||||
'underlying_coins'
|
||||
)
|
||||
AND read_result IS NOT NULL
|
||||
),
|
||||
pool_details AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
function_sig,
|
||||
function_name,
|
||||
function_input,
|
||||
read_result,
|
||||
regexp_substr_all(SUBSTR(read_result, 3, len(read_result)), '.{64}') AS segmented_output,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
reads_adjusted
|
||||
LEFT JOIN function_sigs USING(function_sig)
|
||||
WHERE
|
||||
function_name IN (
|
||||
'name',
|
||||
'symbol',
|
||||
'decimals'
|
||||
)
|
||||
AND read_result IS NOT NULL
|
||||
),
|
||||
all_pools AS (
|
||||
SELECT
|
||||
t.contract_address AS pool_address,
|
||||
CONCAT('0x', SUBSTRING(t.segmented_token_address, 25, 40)) AS token_address,
|
||||
function_input AS token_id,
|
||||
function_name AS token_type,
|
||||
MIN(
|
||||
CASE
|
||||
WHEN p.function_name = 'symbol' THEN utils.udf_hex_to_string(RTRIM(p.segmented_output [2] :: STRING, 0))
|
||||
END
|
||||
) AS pool_symbol,
|
||||
MIN(
|
||||
CASE
|
||||
WHEN p.function_name = 'name' THEN CONCAT(
|
||||
utils.udf_hex_to_string(
|
||||
p.segmented_output [2] :: STRING
|
||||
),
|
||||
utils.udf_hex_to_string(
|
||||
segmented_output [3] :: STRING
|
||||
)
|
||||
)
|
||||
END
|
||||
) AS pool_name,
|
||||
MIN(
|
||||
CASE
|
||||
WHEN p.read_result :: STRING = '0x' THEN NULL
|
||||
ELSE utils.udf_hex_to_int(LEFT(p.read_result :: STRING, 66))
|
||||
END
|
||||
) :: INTEGER AS pool_decimals,
|
||||
CONCAT(
|
||||
t.contract_address,
|
||||
'-',
|
||||
CONCAT('0x', SUBSTRING(t.segmented_token_address, 25, 40)),
|
||||
'-',
|
||||
function_input,
|
||||
'-',
|
||||
function_name
|
||||
) AS pool_id,
|
||||
MAX(
|
||||
t._inserted_timestamp
|
||||
) AS _inserted_timestamp
|
||||
FROM
|
||||
tokens t
|
||||
LEFT JOIN pool_details p USING(contract_address)
|
||||
WHERE
|
||||
token_address IS NOT NULL
|
||||
AND token_address <> '0x0000000000000000000000000000000000000000'
|
||||
GROUP BY
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
),
|
||||
FINAL AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
deployer_address,
|
||||
pool_address,
|
||||
CASE
|
||||
WHEN token_address = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' THEN '0x4200000000000000000000000000000000000006'
|
||||
ELSE token_address
|
||||
END AS token_address,
|
||||
token_id,
|
||||
token_type,
|
||||
CASE
|
||||
WHEN token_address = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' THEN 'WETH'
|
||||
WHEN pool_symbol IS NULL THEN C.token_symbol
|
||||
ELSE pool_symbol
|
||||
END AS pool_symbol,
|
||||
pool_name,
|
||||
CASE
|
||||
WHEN token_address = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' THEN '18'
|
||||
WHEN pool_decimals IS NULL THEN C.token_decimals
|
||||
ELSE pool_decimals
|
||||
END AS pool_decimals,
|
||||
pool_id,
|
||||
_call_id,
|
||||
A._inserted_timestamp
|
||||
FROM
|
||||
all_pools A
|
||||
LEFT JOIN {{ ref('silver__contracts') }} C
|
||||
ON A.token_address = C.contract_address
|
||||
LEFT JOIN contract_deployments d
|
||||
ON A.pool_address = d.contract_address qualify(ROW_NUMBER() over(PARTITION BY pool_address, token_address
|
||||
ORDER BY
|
||||
A._inserted_timestamp DESC)) = 1
|
||||
)
|
||||
SELECT
|
||||
*,
|
||||
ROW_NUMBER() over (
|
||||
PARTITION BY pool_address
|
||||
ORDER BY
|
||||
token_address ASC
|
||||
) AS token_num
|
||||
FROM
|
||||
FINAL
|
||||
@ -1,29 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__curve_pools
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ID
|
||||
columns:
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- varchar
|
||||
- name: TOKEN_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- varchar
|
||||
- name: POOL_SYMBOL
|
||||
- name: POOL_NAME
|
||||
- name: POOL_DECIMALS
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
@ -1,256 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pool_meta AS (
|
||||
|
||||
SELECT
|
||||
DISTINCT pool_address,
|
||||
pool_name,
|
||||
token_address,
|
||||
pool_symbol AS symbol,
|
||||
token_id :: INTEGER AS token_id,
|
||||
token_type :: STRING AS token_type
|
||||
FROM
|
||||
{{ ref('silver_dex__curve_pools') }}
|
||||
),
|
||||
pools AS (
|
||||
SELECT
|
||||
DISTINCT pool_address,
|
||||
pool_name
|
||||
FROM
|
||||
pool_meta qualify (ROW_NUMBER() over (PARTITION BY pool_address
|
||||
ORDER BY
|
||||
pool_name ASC nulls last)) = 1
|
||||
),
|
||||
curve_base AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_index,
|
||||
CASE
|
||||
WHEN topics [0] :: STRING = '0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b' THEN 'TokenExchangeUnderlying'
|
||||
ELSE 'TokenExchange'
|
||||
END AS event_name,
|
||||
contract_address AS pool_address,
|
||||
pool_name,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
) AS sold_id,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
) AS tokens_sold,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
) AS bought_id,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [3] :: STRING
|
||||
)
|
||||
) AS tokens_bought,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
l
|
||||
INNER JOIN pools p
|
||||
ON p.pool_address = l.contract_address
|
||||
WHERE
|
||||
topics [0] :: STRING IN (
|
||||
'0x143f1f8e861fbdeddd5b46e844b7d3ac7b86a122f36e8c463859ee6811b1f29c',
|
||||
'0xb2e76ae99761dc136e598d4a629bb347eccb9532a5f8bbd72e18467c3c34cc98',
|
||||
'0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b'
|
||||
)
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
token_exchange AS (
|
||||
SELECT
|
||||
_log_id,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN sold_id = token_id THEN token_address
|
||||
END
|
||||
) AS token_in,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN bought_id = token_id THEN token_address
|
||||
END
|
||||
) AS token_out,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN sold_id = token_id THEN symbol
|
||||
END
|
||||
) AS symbol_in,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN bought_id = token_id THEN symbol
|
||||
END
|
||||
) AS symbol_out
|
||||
FROM
|
||||
curve_base t
|
||||
LEFT JOIN pool_meta p
|
||||
ON p.pool_address = t.pool_address
|
||||
AND (
|
||||
p.token_id = t.sold_id
|
||||
OR p.token_id = t.bought_id
|
||||
)
|
||||
WHERE
|
||||
token_type = 'coins'
|
||||
GROUP BY
|
||||
1
|
||||
),
|
||||
token_transfers AS (
|
||||
SELECT
|
||||
tx_hash,
|
||||
contract_address AS token_address,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
DATA :: STRING
|
||||
)
|
||||
) AS amount,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS from_address,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS to_address
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef'
|
||||
AND tx_hash IN (
|
||||
SELECT
|
||||
DISTINCT tx_hash
|
||||
FROM
|
||||
curve_base
|
||||
)
|
||||
AND CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) <> '0x0000000000000000000000000000000000000000'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
from_transfers AS (
|
||||
SELECT
|
||||
DISTINCT tx_hash,
|
||||
token_address,
|
||||
from_address,
|
||||
amount
|
||||
FROM
|
||||
token_transfers
|
||||
),
|
||||
to_transfers AS (
|
||||
SELECT
|
||||
DISTINCT tx_hash,
|
||||
token_address,
|
||||
to_address,
|
||||
amount
|
||||
FROM
|
||||
token_transfers
|
||||
),
|
||||
ready_pool_info AS (
|
||||
SELECT
|
||||
s.block_number,
|
||||
s.block_timestamp,
|
||||
s.tx_hash,
|
||||
s.origin_function_signature,
|
||||
s.origin_from_address,
|
||||
s.origin_from_address AS tx_to,
|
||||
s.origin_to_address,
|
||||
event_index,
|
||||
event_name,
|
||||
pool_address,
|
||||
pool_address AS contract_address,
|
||||
pool_name,
|
||||
sender,
|
||||
sold_id,
|
||||
tokens_sold,
|
||||
COALESCE(
|
||||
sold.token_address,
|
||||
e.token_in
|
||||
) AS token_in,
|
||||
e.symbol_in AS symbol_in,
|
||||
bought_id,
|
||||
tokens_bought,
|
||||
COALESCE(
|
||||
bought.token_address,
|
||||
e.token_out
|
||||
) AS token_out,
|
||||
e.symbol_out AS symbol_out,
|
||||
s._log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
curve_base s
|
||||
LEFT JOIN token_exchange e
|
||||
ON s._log_id = e._log_id
|
||||
LEFT JOIN from_transfers sold
|
||||
ON tokens_sold = sold.amount
|
||||
AND s.tx_hash = sold.tx_hash
|
||||
LEFT JOIN to_transfers bought
|
||||
ON tokens_bought = bought.amount
|
||||
AND s.tx_hash = bought.tx_hash
|
||||
WHERE
|
||||
tokens_sold <> 0 qualify(ROW_NUMBER() over(PARTITION BY s._log_id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
tx_to,
|
||||
origin_to_address,
|
||||
event_index,
|
||||
event_name,
|
||||
pool_address,
|
||||
contract_address,
|
||||
pool_name,
|
||||
sender,
|
||||
sold_id,
|
||||
tokens_sold,
|
||||
token_in,
|
||||
symbol_in,
|
||||
bought_id,
|
||||
tokens_bought,
|
||||
token_out,
|
||||
symbol_out,
|
||||
_log_id,
|
||||
_inserted_timestamp,
|
||||
'curve' AS platform
|
||||
FROM
|
||||
ready_pool_info
|
||||
@ -1,54 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__curve_swaps
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _log_id
|
||||
columns:
|
||||
- name: TOKENS_SOLD
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: TOKENS_BOUGHT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 1
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: POOL_NAME
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- varchar
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKEN_IN
|
||||
- name: TOKEN_OUT
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,113 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "pool_address",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH created_pools AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40))) AS token0_address,
|
||||
LOWER(CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40))) AS token1_address,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
topics [3] :: STRING
|
||||
) :: INTEGER AS fee,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [0] :: STRING
|
||||
) :: INTEGER AS tick_spacing,
|
||||
CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS pool_address,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] = '0x783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b7118'
|
||||
AND contract_address = '0x3d237ac6d2f425d2e890cc99198818cc1fa48870'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
initial_info AS (
|
||||
SELECT
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
utils.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [0] :: STRING)) :: FLOAT AS init_sqrtPriceX96,
|
||||
utils.udf_hex_to_int('s2c', CONCAT('0x', segmented_data [1] :: STRING)) :: FLOAT AS init_tick,
|
||||
pow(
|
||||
1.0001,
|
||||
init_tick
|
||||
) AS init_price_1_0_unadj,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
FINAL AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
p.contract_address,
|
||||
token0_address,
|
||||
token1_address,
|
||||
fee :: INTEGER AS fee,
|
||||
(
|
||||
fee / 10000
|
||||
) :: FLOAT AS fee_percent,
|
||||
tick_spacing,
|
||||
pool_address,
|
||||
COALESCE(
|
||||
init_tick,
|
||||
0
|
||||
) AS init_tick,
|
||||
p._log_id AS _id,
|
||||
p._inserted_timestamp
|
||||
FROM
|
||||
created_pools p
|
||||
LEFT JOIN initial_info i
|
||||
ON p.pool_address = i.contract_address
|
||||
)
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
FINAL qualify(ROW_NUMBER() over(PARTITION BY pool_address
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,21 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__dackie_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: FEE
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
|
||||
@ -1,101 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH base_swaps AS (
|
||||
|
||||
SELECT
|
||||
*,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS recipient,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [0] :: STRING
|
||||
) :: FLOAT AS amount0_unadj,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [1] :: STRING
|
||||
) :: FLOAT AS amount1_unadj,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [2] :: STRING
|
||||
) :: FLOAT AS sqrtPriceX96,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [3] :: STRING
|
||||
) :: FLOAT AS liquidity,
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [4] :: STRING
|
||||
) :: FLOAT AS tick
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
topics [0] :: STRING = '0x19b47279256b2a23a1665c810c8d55a1758940ee09377d4f8d26497a3577dc83'
|
||||
AND tx_succeeded
|
||||
AND event_removed = 'false'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
),
|
||||
pool_data AS (
|
||||
SELECT
|
||||
token0_address,
|
||||
token1_address,
|
||||
fee,
|
||||
fee_percent,
|
||||
tick_spacing,
|
||||
pool_address
|
||||
FROM
|
||||
{{ ref('silver_dex__dackie_pools') }}
|
||||
),
|
||||
FINAL AS (
|
||||
SELECT
|
||||
'base' AS blockchain,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address AS pool_address,
|
||||
recipient,
|
||||
sender,
|
||||
fee,
|
||||
tick,
|
||||
tick_spacing,
|
||||
liquidity,
|
||||
event_index,
|
||||
token0_address,
|
||||
token1_address,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
amount0_unadj,
|
||||
amount1_unadj
|
||||
FROM
|
||||
base_swaps
|
||||
INNER JOIN pool_data
|
||||
ON pool_data.pool_address = base_swaps.contract_address
|
||||
)
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
FINAL qualify(ROW_NUMBER() over(PARTITION BY _log_id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,59 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__dackie_swaps
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: AMOUNT0_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- name: AMOUNT1_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 1
|
||||
- name: BLOCKCHAIN
|
||||
tests:
|
||||
- not_null
|
||||
- name: LIQUIDITY
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: RECIPIENT
|
||||
tests:
|
||||
- not_null
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TICK
|
||||
tests:
|
||||
- not_null
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,83 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'block_number',
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH base_swaps AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
decoded_log,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :destAmount :: STRING
|
||||
) AS destAmount,
|
||||
decoded_log :destAsset :: STRING AS destAsset,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :destChainId :: STRING
|
||||
) AS destChainId,
|
||||
decoded_log :destTrader :: STRING AS destTrader,
|
||||
decoded_log :nonceAndMeta :: STRING AS nouceAndMeta,
|
||||
TRY_TO_NUMBER(
|
||||
decoded_log :srcAmount :: STRING
|
||||
) AS srcAmount,
|
||||
decoded_log :srcAsset :: STRING AS srcAsset,
|
||||
decoded_log :taker :: STRING AS taker,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0x1fd108cf42a59c635bd4703b8dbc8a741ff834be'
|
||||
AND topic_0 = '0x68eb6d948c037c94e470f9a5b288dd93debbcd9342635408e66cb0211686f7f7'
|
||||
AND destChainId = 8453
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(
|
||||
modified_timestamp
|
||||
) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
'SwapExecuted' AS event_name,
|
||||
srcAmount AS amount_in_unadj,
|
||||
destAmount AS amount_out_unadj,
|
||||
srcAsset AS token_in,
|
||||
destAsset AS token_out,
|
||||
origin_from_address AS sender,
|
||||
taker AS recipient,
|
||||
destTrader AS tx_to,
|
||||
event_index,
|
||||
'dexalot' AS platform,
|
||||
_log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
base_swaps
|
||||
@ -1,93 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__dexalot_swaps
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: PLATFORM
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: _LOG_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_IN_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
@ -1,88 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "pool_address",
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS pool_address,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
) AS fee,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
) AS tickSpacing,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [3] :: STRING
|
||||
)
|
||||
) AS activeTick,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [4] :: STRING
|
||||
)
|
||||
) AS lookback,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [5] :: STRING
|
||||
)
|
||||
) AS protocolFeeRatio,
|
||||
CONCAT('0x', SUBSTR(segmented_data [6] :: STRING, 25, 40)) AS tokenA,
|
||||
CONCAT('0x', SUBSTR(segmented_data [7] :: STRING, 25, 40)) AS tokenB,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref ('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0xb2855783a346735e4aae0c1eb894def861fa9b45'
|
||||
AND topics [0] :: STRING = '0x9b3fb3a17b4e94eb4d1217257372dcc712218fcd4bc1c28482bd8a6804a7c775'
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
event_index,
|
||||
contract_address,
|
||||
pool_address,
|
||||
fee,
|
||||
tickSpacing,
|
||||
activeTick,
|
||||
lookback,
|
||||
protocolFeeRatio,
|
||||
tokenA,
|
||||
tokenB,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
pools qualify(ROW_NUMBER() over (PARTITION BY pool_address
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,23 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__maverick_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKENA
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKENB
|
||||
tests:
|
||||
- not_null
|
||||
- name: _INSERTED_TIMESTAMP
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
@ -1,135 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = "block_number",
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
tokenA,
|
||||
tokenB
|
||||
FROM
|
||||
{{ ref('silver_dex__maverick_pools') }}
|
||||
),
|
||||
swaps_base AS (
|
||||
SELECT
|
||||
l.block_number,
|
||||
l.block_timestamp,
|
||||
l.tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
l.event_index,
|
||||
l.contract_address,
|
||||
regexp_substr_all(SUBSTR(l.data, 3, len(l.data)), '.{64}') AS l_segmented_data,
|
||||
CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
l_segmented_data [0] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
) AS sender_address,
|
||||
CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
l_segmented_data [1] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
) AS recipient_address,
|
||||
CASE
|
||||
WHEN TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [2] :: STRING
|
||||
)
|
||||
) = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END AS tokenAin,
|
||||
CASE
|
||||
WHEN TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [3] :: STRING
|
||||
)
|
||||
) = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END AS exactOutput,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [4] :: STRING
|
||||
)
|
||||
) AS amountIn,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [5] :: STRING
|
||||
)
|
||||
) AS amountOut,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
l_segmented_data [6] :: STRING
|
||||
)
|
||||
) AS activeTick,
|
||||
tokenA,
|
||||
tokenB,
|
||||
CONCAT(
|
||||
tx_hash :: STRING,
|
||||
'-',
|
||||
event_index :: STRING
|
||||
) AS _log_id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
l
|
||||
INNER JOIN pools
|
||||
ON l.contract_address = pool_address
|
||||
WHERE
|
||||
l.topics [0] :: STRING = '0x3b841dc9ab51e3104bda4f61b41e4271192d22cd19da5ee6e292dc8e2744f713' --Swap
|
||||
AND tx_succeeded
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
event_index,
|
||||
contract_address,
|
||||
sender_address AS sender,
|
||||
recipient_address AS tx_to,
|
||||
tokenAin AS token_A_in,
|
||||
exactOutput AS exact_output,
|
||||
amountIn AS amount_in_unadj,
|
||||
amountOut AS amount_out_unadj,
|
||||
activeTick AS active_tick,
|
||||
CASE
|
||||
WHEN token_A_in = TRUE THEN tokenA
|
||||
ELSE tokenB
|
||||
END AS token_in,
|
||||
CASE
|
||||
WHEN token_A_in = TRUE THEN tokenB
|
||||
ELSE tokenA
|
||||
END AS token_out,
|
||||
'Swap' AS event_name,
|
||||
'maverick' AS platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,81 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__maverick_swaps
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null:
|
||||
where: BLOCK_TIMESTAMP > '2021-08-01'
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: PLATFORM
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: _LOG_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
@ -1,131 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'pool_address',
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH created_pools AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(segmented_data [0] :: STRING, 25, 40)) AS pool_address,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
) AS protocolFeeRatio,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
) AS feeAIn,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [3] :: STRING
|
||||
)
|
||||
) AS feeBIn,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [4] :: STRING
|
||||
)
|
||||
) AS tickSpacing,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [5] :: STRING
|
||||
)
|
||||
) AS lookback,
|
||||
-- lookback period
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [6] :: STRING
|
||||
)
|
||||
) AS activetick,
|
||||
-- pool type (static/right/left/both/all)
|
||||
CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
segmented_data [7] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
) AS tokenA,
|
||||
CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
segmented_data [8] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
) AS tokenB,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [9] :: STRING
|
||||
)
|
||||
) AS kinds,
|
||||
CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
segmented_data [10] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
) AS accessor,
|
||||
-- null if permissionless pool
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = LOWER('0x0A7e848Aca42d879EF06507Fca0E7b33A0a63c1e') --factory
|
||||
AND topic_0 = '0x848331e408557f4b7eb6561ca1c18a3ac43004fbe64b8b5bce613855cfdf22d2' --paircreated
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
pool_address,
|
||||
protocolFeeRatio AS protocol_fee_ratio,
|
||||
feeAin,
|
||||
feeBin,
|
||||
tickspacing AS tick_spacing,
|
||||
lookback,
|
||||
activetick,
|
||||
tokenA,
|
||||
tokenB,
|
||||
kinds,
|
||||
accessor,
|
||||
_log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
created_pools qualify(ROW_NUMBER() over(PARTITION BY pool_address
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -1,32 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__maverick_v2_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKENA
|
||||
tests:
|
||||
- not_null
|
||||
- name: TOKENB
|
||||
tests:
|
||||
- not_null
|
||||
- name: KINDS
|
||||
tests:
|
||||
- not_null
|
||||
- name: TICK_SPACING
|
||||
tests:
|
||||
- not_null
|
||||
- name: feeAin
|
||||
tests:
|
||||
- not_null
|
||||
- name: feeBin
|
||||
tests:
|
||||
- not_null
|
||||
@ -1,137 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'block_number',
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
tokenA,
|
||||
tokenB
|
||||
FROM
|
||||
{{ ref('silver_dex__maverick_v2_pools') }}
|
||||
),
|
||||
swaps_base AS (
|
||||
SELECT
|
||||
l.block_number,
|
||||
l.block_timestamp,
|
||||
l.tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
l.event_index,
|
||||
l.contract_address,
|
||||
regexp_substr_all(SUBSTR(l.data, 3, len(l.data)), '.{64}') AS l_segmented_data,
|
||||
CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
l_segmented_data [0] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
) AS sender_address,
|
||||
CONCAT(
|
||||
'0x',
|
||||
SUBSTR(
|
||||
l_segmented_data [1] :: STRING,
|
||||
25,
|
||||
40
|
||||
)
|
||||
) AS recipient_address,
|
||||
CASE
|
||||
WHEN TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [3] :: STRING
|
||||
)
|
||||
) = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END AS tokenAin,
|
||||
CASE
|
||||
WHEN TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [4] :: STRING
|
||||
)
|
||||
) = 0 THEN FALSE
|
||||
ELSE TRUE
|
||||
END AS exactOutput,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
l_segmented_data [5] :: STRING
|
||||
)
|
||||
) AS activetick,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [6] :: STRING
|
||||
)
|
||||
) AS amountIn,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
l_segmented_data [7] :: STRING
|
||||
)
|
||||
) AS amountOut,
|
||||
tokenA,
|
||||
tokenB,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
l
|
||||
INNER JOIN pools
|
||||
ON l.contract_address = pool_address
|
||||
WHERE
|
||||
l.topic_0 = '0x103ed084e94a44c8f5f6ba8e3011507c41063177e29949083c439777d8d63f60' --Swap
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
event_index,
|
||||
contract_address,
|
||||
contract_address AS pool_address,
|
||||
sender_address AS sender,
|
||||
recipient_address AS tx_to,
|
||||
tokenAin AS token_A_in,
|
||||
exactOutput AS exact_output,
|
||||
amountIn AS amount_in_unadj,
|
||||
amountOut AS amount_out_unadj,
|
||||
activetick,
|
||||
CASE
|
||||
WHEN token_A_in = TRUE THEN tokenA
|
||||
ELSE tokenB
|
||||
END AS token_in,
|
||||
CASE
|
||||
WHEN token_A_in = TRUE THEN tokenB
|
||||
ELSE tokenA
|
||||
END AS token_out,
|
||||
'Swap' AS event_name,
|
||||
'maverick-v2' AS platform,
|
||||
_log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,95 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__maverick_v2_swaps
|
||||
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null:
|
||||
where: BLOCK_TIMESTAMP > '2021-08-01'
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: PLATFORM
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: _LOG_ID
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FUNCTION_SIGNATURE
|
||||
tests:
|
||||
- not_null
|
||||
- name: ORIGIN_FROM_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: ORIGIN_TO_ADDRESS
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: AMOUNT_IN_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- number
|
||||
- float
|
||||
- name: AMOUNT_OUT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- number
|
||||
- float
|
||||
@ -1,73 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'pool_address',
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH created_pools AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS token0_address,
|
||||
CONCAT('0x', SUBSTR(topics [2] :: STRING, 27, 40)) AS token1_address,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
topics [3] :: STRING
|
||||
)
|
||||
) AS fee,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
) AS tickSpacing,
|
||||
CONCAT('0x', SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS pool_address,
|
||||
CONCAT(
|
||||
tx_hash,
|
||||
'-',
|
||||
event_index
|
||||
) AS _log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0x0bfbcf9fa4f9c56b0f40a671ad40e0805a091865' --factory
|
||||
AND topic_0 = '0x783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b7118' --paircreated
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
token0_address,
|
||||
token1_address,
|
||||
fee :: INTEGER AS fee,
|
||||
(
|
||||
fee / 10000
|
||||
) :: FLOAT AS fee_percent,
|
||||
tickSpacing AS tick_spacing,
|
||||
pool_address,
|
||||
_log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
created_pools qualify(ROW_NUMBER() over(PARTITION BY pool_address
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -1,47 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__pancakeswap_v3_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- POOL_ADDRESS
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: FEE
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN0_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN1_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
|
||||
|
||||
|
||||
@ -1,156 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'block_number',
|
||||
cluster_by = ['block_timestamp::DATE'],
|
||||
tags = ['silver_dex','defi','dex','curated']
|
||||
) }}
|
||||
|
||||
WITH pools AS (
|
||||
|
||||
SELECT
|
||||
pool_address,
|
||||
token0_address,
|
||||
token1_address,
|
||||
fee,
|
||||
tick_spacing
|
||||
FROM
|
||||
{{ ref('silver_dex__pancakeswap_v3_pools') }}
|
||||
),
|
||||
base_swaps AS (
|
||||
SELECT
|
||||
l.block_number,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
l.block_timestamp,
|
||||
l.tx_hash,
|
||||
l.event_index,
|
||||
l.contract_address,
|
||||
regexp_substr_all(SUBSTR(l.data, 3, len(l.data)), '.{64}') AS segmented_data,
|
||||
CONCAT('0x', SUBSTR(l.topics [1] :: STRING, 27, 40)) AS sender_address,
|
||||
CONCAT('0x', SUBSTR(l.topics [2] :: STRING, 27, 40)) AS recipient_address,
|
||||
COALESCE(
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [0] :: STRING
|
||||
)
|
||||
),
|
||||
0
|
||||
) AS amount0,
|
||||
COALESCE(
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
),
|
||||
0
|
||||
) AS amount1,
|
||||
COALESCE(
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [2] :: STRING
|
||||
)
|
||||
),
|
||||
0
|
||||
) AS sqrtPriceX96,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [3] :: STRING
|
||||
)
|
||||
) AS liquidity,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [4] :: STRING
|
||||
)
|
||||
) AS tick,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [5] :: STRING
|
||||
)
|
||||
) AS protocolFeesToken0,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
's2c',
|
||||
segmented_data [6] :: STRING
|
||||
)
|
||||
) AS protocolFeesToken1,
|
||||
ABS(LEAST(amount0, amount1)) AS amount_out_unadj,
|
||||
ABS(GREATEST(amount0, amount1)) AS amount_in_unadj,
|
||||
token0_address,
|
||||
token1_address,
|
||||
CASE
|
||||
WHEN amount0 > 0 THEN token0_address
|
||||
ELSE token1_address
|
||||
END AS token_in,
|
||||
CASE
|
||||
WHEN amount1 < 0 THEN token1_address
|
||||
ELSE token0_address
|
||||
END AS token_out,
|
||||
fee,
|
||||
tick_spacing,
|
||||
CONCAT(
|
||||
l.tx_hash,
|
||||
'-',
|
||||
l.event_index
|
||||
) AS _log_id,
|
||||
l.modified_timestamp
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
l
|
||||
INNER JOIN pools p
|
||||
ON l.contract_address = pool_address
|
||||
WHERE
|
||||
block_timestamp :: DATE > '2023-08-01'
|
||||
AND topic_0 = '0x19b47279256b2a23a1665c810c8d55a1758940ee09377d4f8d26497a3577dc83' --swap
|
||||
AND tx_succeeded
|
||||
AND event_removed = FALSE
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (
|
||||
SELECT
|
||||
MAX(modified_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
'pancakeswap-v3' AS platform,
|
||||
'v3' AS version,
|
||||
contract_address,
|
||||
contract_address AS pool_address,
|
||||
sender_address AS sender,
|
||||
recipient_address AS tx_to,
|
||||
event_index,
|
||||
'Swap' AS event_name,
|
||||
amount0,
|
||||
amount1,
|
||||
sqrtPriceX96,
|
||||
liquidity,
|
||||
tick,
|
||||
tick_spacing,
|
||||
fee,
|
||||
protocolFeesToken0,
|
||||
protocolFeesToken1,
|
||||
amount_out_unadj,
|
||||
amount_in_unadj,
|
||||
token0_address,
|
||||
token1_address,
|
||||
token_in,
|
||||
token_out,
|
||||
_log_id,
|
||||
modified_timestamp
|
||||
FROM
|
||||
base_swaps
|
||||
@ -1,64 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__pancakeswap_v3_swaps
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _LOG_ID
|
||||
columns:
|
||||
- name: AMOUNT_OUT_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: AMOUNT_IN_UNADJ
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: LIQUIDITY
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- decimal
|
||||
- float
|
||||
- number
|
||||
- name: EVENT_INDEX
|
||||
tests:
|
||||
- not_null
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- name: SENDER
|
||||
tests:
|
||||
- not_null
|
||||
- name: TX_TO
|
||||
tests:
|
||||
- not_null
|
||||
- name: TICK
|
||||
tests:
|
||||
- not_null
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,44 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__complete_dex_liquidity_pools
|
||||
tests:
|
||||
- dbt_utils.unique_combination_of_columns:
|
||||
combination_of_columns:
|
||||
- _ID
|
||||
columns:
|
||||
- name: BLOCK_NUMBER
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: BLOCK_TIMESTAMP
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- TIMESTAMP_LTZ
|
||||
- TIMESTAMP_NTZ
|
||||
- name: TX_HASH
|
||||
tests:
|
||||
- not_null
|
||||
- name: CONTRACT_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: POOL_ADDRESS
|
||||
tests:
|
||||
- not_null
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: PLATFORM
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- name: _ID
|
||||
tests:
|
||||
- not_null
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user