mirror of
https://github.com/FlipsideCrypto/gnosis-models.git
synced 2026-02-06 10:46:47 +00:00
parent
3c5732bda0
commit
96131d7ca9
@ -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,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
|
||||
|
@ -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': 'CURVE, BALANCER, SUSHI, HONEYSWAP, SWAPR',
|
||||
'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,64 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'view',
|
||||
persist_docs ={ "relation": true,
|
||||
"columns": true },
|
||||
meta ={
|
||||
'database_tags':{
|
||||
'table':{
|
||||
'PROTOCOL': 'CELER, HOP, MESON, 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,80 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'view',
|
||||
persist_docs ={ "relation": true,
|
||||
"columns": true },
|
||||
meta={
|
||||
'database_tags':{
|
||||
'table': {
|
||||
'PROTOCOL': 'CURVE, BALANCER, SUSHI, HONEYSWAP, SWAPR',
|
||||
'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 <> '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d' 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 <> '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d' 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,146 +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 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('0x4aAD6071085df840abD9Baf1697d5D5992bDadce') -- 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,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 = '0x3795c36e7d12a8c252a20c5a7b455f7c57b60283'
|
||||
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,121 +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 }}
|
||||
)
|
||||
AND modified_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% 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/gnosis/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/gnosis/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 = '0x6f03052743cd99ce1b29265e377e320cd24eb632' 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,74 +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:
|
||||
- dbt_expectations.expect_row_values_to_have_recent_data:
|
||||
datepart: day
|
||||
interval: 3
|
||||
@ -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,
|
||||
'0xe91d153e0b41518a2ce8dd3d7944fa863463a97d' 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,47 +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
|
||||
@ -1,604 +0,0 @@
|
||||
-- depends_on: {{ ref('silver__complete_token_prices') }}
|
||||
-- depends_on: {{ ref('price__ez_asset_metadata') }}
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = ['block_number','platform','version'],
|
||||
cluster_by = ['block_timestamp::DATE','platform'],
|
||||
post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION ON EQUALITY(tx_hash, origin_from_address, origin_to_address, origin_function_signature, bridge_address, sender, receiver, destination_chain_receiver, destination_chain_id, destination_chain, token_address, token_symbol), SUBSTRING(origin_function_signature, bridge_address, sender, receiver, destination_chain_receiver, destination_chain, token_address, token_symbol)",
|
||||
tags = ['silver_bridge','defi','bridge','curated','heal']
|
||||
) }}
|
||||
|
||||
WITH celer_cbridge AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
'v1' AS version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id :: STRING AS destination_chain_id,
|
||||
NULL AS destination_chain,
|
||||
token_address,
|
||||
amount AS amount_unadj,
|
||||
_log_id AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__celer_cbridge_send') }}
|
||||
|
||||
{% if is_incremental() and 'celer_cbridge' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
ccip AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
'v1' AS version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id :: STRING AS destination_chain_id,
|
||||
destination_chain,
|
||||
token_address,
|
||||
amount_unadj,
|
||||
_log_id AS _id,
|
||||
modified_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__ccip_send_requested') }}
|
||||
|
||||
{% if is_incremental() and 'ccip' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
hop AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
'v1' AS version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id :: STRING AS destination_chain_id,
|
||||
NULL AS destination_chain,
|
||||
token_address,
|
||||
amount AS amount_unadj,
|
||||
_log_id AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__hop_transfersent') }}
|
||||
|
||||
{% if is_incremental() and 'hop' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
layerzero_v2 AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id :: STRING AS destination_chain_id,
|
||||
destination_chain,
|
||||
token_address,
|
||||
amount_unadj,
|
||||
_log_id AS _id,
|
||||
inserted_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__layerzero_v2') }}
|
||||
|
||||
{% if is_incremental() and 'layerzero_v2' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
meson AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
'v1' AS version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id :: STRING AS destination_chain_id,
|
||||
destination_chain,
|
||||
token_address,
|
||||
amount_unadj,
|
||||
_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__meson_transfers') }}
|
||||
|
||||
{% if is_incremental() and 'meson' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
stargate_v2 AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id :: STRING AS destination_chain_id,
|
||||
destination_chain,
|
||||
token_address,
|
||||
amount_unadj,
|
||||
_log_id AS _id,
|
||||
inserted_timestamp AS _inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_bridge__stargate_v2') }}
|
||||
|
||||
{% if is_incremental() and 'stargate_v2' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
all_protocols AS (
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
celer_cbridge
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
ccip
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
hop
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
layerzero_v2
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
meson
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
stargate_v2
|
||||
),
|
||||
complete_bridge_activity AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
CASE
|
||||
WHEN CONCAT(
|
||||
platform,
|
||||
'-',
|
||||
version
|
||||
) IN (
|
||||
'meson-v1',
|
||||
'chainlink-ccip-v1',
|
||||
'stargate-v2',
|
||||
'layerzero-v2'
|
||||
) THEN destination_chain_id :: STRING
|
||||
WHEN d.chain_id IS NULL THEN destination_chain_id :: STRING
|
||||
ELSE d.chain_id :: STRING
|
||||
END AS destination_chain_id,
|
||||
CASE
|
||||
WHEN CONCAT(
|
||||
platform,
|
||||
'-',
|
||||
version
|
||||
) IN (
|
||||
'meson-v1',
|
||||
'chainlink-ccip-v1',
|
||||
'stargate-v2',
|
||||
'layerzero-v2'
|
||||
) THEN LOWER(destination_chain)
|
||||
WHEN d.chain IS NULL THEN LOWER(destination_chain)
|
||||
ELSE LOWER(
|
||||
d.chain
|
||||
)
|
||||
END AS destination_chain,
|
||||
b.token_address,
|
||||
C.token_symbol AS token_symbol,
|
||||
C.token_decimals AS token_decimals,
|
||||
amount_unadj,
|
||||
CASE
|
||||
WHEN C.token_decimals IS NOT NULL THEN (amount_unadj / pow(10, C.token_decimals))
|
||||
ELSE amount_unadj
|
||||
END AS amount,
|
||||
CASE
|
||||
WHEN C.token_decimals IS NOT NULL THEN ROUND(
|
||||
amount * p.price,
|
||||
2
|
||||
)
|
||||
ELSE NULL
|
||||
END AS amount_usd,
|
||||
p.is_verified AS token_is_verified,
|
||||
_id,
|
||||
b._inserted_timestamp
|
||||
FROM
|
||||
all_protocols b
|
||||
LEFT JOIN {{ ref('silver__contracts') }} C
|
||||
ON b.token_address = C.contract_address
|
||||
LEFT JOIN {{ ref('price__ez_prices_hourly') }}
|
||||
p
|
||||
ON b.token_address = p.token_address
|
||||
AND DATE_TRUNC(
|
||||
'hour',
|
||||
block_timestamp
|
||||
) = p.hour
|
||||
LEFT JOIN {{ source(
|
||||
'external_gold_defillama',
|
||||
'dim_chains'
|
||||
) }}
|
||||
d
|
||||
ON d.chain_id :: STRING = b.destination_chain_id :: STRING
|
||||
OR LOWER(
|
||||
d.chain
|
||||
) = LOWER(
|
||||
b.destination_chain
|
||||
)
|
||||
),
|
||||
|
||||
{% if is_incremental() and var(
|
||||
'HEAL_MODEL'
|
||||
) %}
|
||||
heal_model AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id,
|
||||
destination_chain,
|
||||
t0.token_address,
|
||||
C.token_symbol AS token_symbol,
|
||||
C.token_decimals AS token_decimals,
|
||||
amount_unadj,
|
||||
CASE
|
||||
WHEN C.token_decimals IS NOT NULL THEN (amount_unadj / pow(10, C.token_decimals))
|
||||
ELSE amount_unadj
|
||||
END AS amount_heal,
|
||||
CASE
|
||||
WHEN C.token_decimals IS NOT NULL THEN amount_heal * p.price
|
||||
ELSE NULL
|
||||
END AS amount_usd_heal,
|
||||
p.is_verified AS token_is_verified,
|
||||
_id,
|
||||
t0._inserted_timestamp
|
||||
FROM
|
||||
{{ this }}
|
||||
t0
|
||||
LEFT JOIN {{ ref('silver__contracts') }} C
|
||||
ON t0.token_address = C.contract_address
|
||||
LEFT JOIN {{ ref('price__ez_prices_hourly') }}
|
||||
p
|
||||
ON t0.token_address = p.token_address
|
||||
AND DATE_TRUNC(
|
||||
'hour',
|
||||
block_timestamp
|
||||
) = p.hour
|
||||
WHERE
|
||||
CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t1.block_number,
|
||||
'-',
|
||||
t1.platform,
|
||||
'-',
|
||||
t1.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t1
|
||||
WHERE
|
||||
t1.token_decimals IS NULL
|
||||
AND t1._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t1.token_address)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t2.block_number,
|
||||
'-',
|
||||
t2.platform,
|
||||
'-',
|
||||
t2.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t2
|
||||
WHERE
|
||||
t2.amount_usd IS NULL
|
||||
AND t2._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__complete_token_prices') }}
|
||||
p
|
||||
WHERE
|
||||
p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND p.price IS NOT NULL
|
||||
AND p.token_address = t2.token_address
|
||||
AND p.hour = DATE_TRUNC(
|
||||
'hour',
|
||||
t2.block_timestamp
|
||||
)
|
||||
)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
),
|
||||
newly_verified_tokens as (
|
||||
select token_address
|
||||
from {{ ref('price__ez_asset_metadata') }}
|
||||
where ifnull(is_verified_modified_timestamp, '1970-01-01' :: TIMESTAMP) > dateadd('day', -10, SYSDATE())
|
||||
),
|
||||
heal_newly_verified_tokens as (
|
||||
SELECT
|
||||
t0.block_number,
|
||||
t0.block_timestamp,
|
||||
t0.origin_from_address,
|
||||
t0.origin_to_address,
|
||||
t0.origin_function_signature,
|
||||
t0.tx_hash,
|
||||
t0.event_index,
|
||||
t0.bridge_address,
|
||||
t0.event_name,
|
||||
t0.platform,
|
||||
t0.version,
|
||||
t0.sender,
|
||||
t0.receiver,
|
||||
t0.destination_chain_receiver,
|
||||
t0.destination_chain_id,
|
||||
t0.destination_chain,
|
||||
t0.token_address,
|
||||
t0.token_symbol,
|
||||
t0.token_decimals,
|
||||
t0.amount_unadj,
|
||||
t0.amount,
|
||||
CASE
|
||||
WHEN t0.token_decimals IS NOT NULL THEN t0.amount * p.price
|
||||
ELSE NULL
|
||||
END AS amount_usd_heal,
|
||||
p.is_verified AS token_is_verified,
|
||||
t0._id,
|
||||
t0._inserted_timestamp
|
||||
from {{ this }} t0
|
||||
join newly_verified_tokens nv
|
||||
on t0.token_address = nv.token_address
|
||||
left join {{ ref('price__ez_prices_hourly')}} p
|
||||
on t0.token_address = p.token_address
|
||||
and date_trunc('hour', t0.block_timestamp) = p.hour
|
||||
),
|
||||
{% endif %}
|
||||
|
||||
FINAL AS (
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
complete_bridge_activity
|
||||
|
||||
{% if is_incremental() and var(
|
||||
'HEAL_MODEL'
|
||||
) %}
|
||||
UNION ALL
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id,
|
||||
destination_chain,
|
||||
token_address,
|
||||
token_symbol,
|
||||
token_decimals,
|
||||
amount_unadj,
|
||||
amount_heal AS amount,
|
||||
amount_usd_heal AS amount_usd,
|
||||
token_is_verified,
|
||||
_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
heal_model
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
heal_newly_verified_tokens
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
origin_function_signature,
|
||||
tx_hash,
|
||||
event_index,
|
||||
bridge_address,
|
||||
event_name,
|
||||
platform,
|
||||
version,
|
||||
sender,
|
||||
receiver,
|
||||
destination_chain_receiver,
|
||||
destination_chain_id,
|
||||
destination_chain,
|
||||
token_address,
|
||||
token_symbol,
|
||||
token_decimals,
|
||||
amount_unadj,
|
||||
amount,
|
||||
amount_usd,
|
||||
ifnull(token_is_verified, false) as token_is_verified,
|
||||
_id,
|
||||
_inserted_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['_id']
|
||||
) }} AS complete_bridge_activity_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
FINAL
|
||||
WHERE
|
||||
destination_chain <> 'gnosis' qualify (ROW_NUMBER() over (PARTITION BY _id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,81 +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
|
||||
- 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,249 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'pool_address',
|
||||
full_refresh = false,
|
||||
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 block_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
|
||||
),
|
||||
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 ({% for item in range(10) %}
|
||||
(
|
||||
SELECT
|
||||
live.udf_api('POST', CONCAT('{service}', '/', '{Authentication}'),{}, batch_rpc_request, 'Vault/prod/gnosis/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 %}),
|
||||
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 pool_address,
|
||||
LEFT(
|
||||
read_id_object [1] :: STRING,
|
||||
10
|
||||
) AS function_sig,
|
||||
read_id_object [2] :: STRING AS block_number,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
pool_token_reads,
|
||||
LATERAL FLATTEN(
|
||||
input => read_output :data
|
||||
)
|
||||
),
|
||||
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,97 +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_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,
|
||||
'Swap' AS event_name,
|
||||
event_index,
|
||||
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_in_unadj,
|
||||
TRY_TO_NUMBER(
|
||||
utils.udf_hex_to_int(
|
||||
segmented_data [1] :: STRING
|
||||
)
|
||||
) 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,
|
||||
modified_timestamp AS _inserted_timestamp,
|
||||
'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 _inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '12 hours'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND _inserted_timestamp >= SYSDATE() - INTERVAL '7 day'
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
tx_hash,
|
||||
block_number,
|
||||
block_timestamp,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
event_index,
|
||||
amount_in_unadj,
|
||||
amount_out_unadj,
|
||||
token_in,
|
||||
token_out,
|
||||
sender,
|
||||
tx_to,
|
||||
pool_id,
|
||||
s.pool_address AS contract_address,
|
||||
pool_name,
|
||||
event_name,
|
||||
platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base s
|
||||
INNER JOIN pools p
|
||||
ON p.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,440 +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 (
|
||||
'0x7eeac6cddbd1d0b8af061742d41877d7f707289a',
|
||||
'0xcbaf0a32f5a16b326f00607421857f68fc72e508',
|
||||
'0xd25fcbb7b6021cf83122fcd65be88a045d5f961c',
|
||||
'0xd19baeadc667cf2015e395f2b08668ef120f41f5'
|
||||
)
|
||||
AND TYPE ILIKE 'create%'
|
||||
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','{service}/{Authentication}',{}, batch_rpc_request, 'Vault/prod/gnosis/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','{service}/{Authentication}',{}, batch_rpc_request, 'Vault/prod/gnosis/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 '0xe91d153e0b41518a2ce8dd3d7944fa863463a97d'
|
||||
ELSE token_address
|
||||
END AS token_address,
|
||||
token_id,
|
||||
token_type,
|
||||
CASE
|
||||
WHEN token_address = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' THEN 'WXDAI'
|
||||
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,259 +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 (
|
||||
'0x8b3e96f2b889fa771c53c981b40daf005f63f637f1869f707052d15a3dd97140',
|
||||
--TokenExchange
|
||||
'0xb2e76ae99761dc136e598d4a629bb347eccb9532a5f8bbd72e18467c3c34cc98',
|
||||
--TokenExchange
|
||||
'0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b' --TokenExchangeUnderlying
|
||||
)
|
||||
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'
|
||||
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 %}
|
||||
),
|
||||
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,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('0xA818b4F111Ccac7AA31D0BCc0806d64F2E0737D7')
|
||||
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__honeyswap_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__honeyswap_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,
|
||||
'honeyswap' AS platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,116 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__honeyswap_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,922 +0,0 @@
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = ['block_number','platform','version'],
|
||||
cluster_by = ['block_timestamp::DATE','platform'],
|
||||
post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION ON EQUALITY(tx_hash, contract_address, pool_address, pool_name, tokens, symbols), SUBSTRING(pool_address, pool_name, tokens, symbols)",
|
||||
tags = ['silver_dex','defi','dex','curated','heal']
|
||||
) }}
|
||||
|
||||
WITH contracts AS (
|
||||
|
||||
SELECT
|
||||
contract_address,
|
||||
token_symbol,
|
||||
token_decimals,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contracts') }}
|
||||
),
|
||||
balancer AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
pool_address,
|
||||
pool_name,
|
||||
NULL AS fee,
|
||||
NULL AS tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
token2,
|
||||
token3,
|
||||
token4,
|
||||
token5,
|
||||
token6,
|
||||
token7,
|
||||
'balancer' AS platform,
|
||||
'v1' AS version,
|
||||
_log_id AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__balancer_pools') }}
|
||||
|
||||
{% if is_incremental() and 'balancer' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
curve AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
deployer_address AS contract_address,
|
||||
pool_address,
|
||||
pool_name,
|
||||
NULL AS fee,
|
||||
NULL AS tick_spacing,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 1 THEN token_address
|
||||
END
|
||||
) AS token0,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 2 THEN token_address
|
||||
END
|
||||
) AS token1,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 3 THEN token_address
|
||||
END
|
||||
) AS token2,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 4 THEN token_address
|
||||
END
|
||||
) AS token3,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 5 THEN token_address
|
||||
END
|
||||
) AS token4,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 6 THEN token_address
|
||||
END
|
||||
) AS token5,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 7 THEN token_address
|
||||
END
|
||||
) AS token6,
|
||||
MAX(
|
||||
CASE
|
||||
WHEN token_num = 8 THEN token_address
|
||||
END
|
||||
) AS token7,
|
||||
'curve' AS platform,
|
||||
'v1' AS version,
|
||||
_call_id AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__curve_pools') }}
|
||||
|
||||
{% if is_incremental() and 'curve' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
GROUP BY
|
||||
ALL
|
||||
),
|
||||
honeyswap AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
pool_address,
|
||||
NULL AS pool_name,
|
||||
NULL AS fee,
|
||||
NULL AS tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
NULL AS token2,
|
||||
NULL AS token3,
|
||||
NULL AS token4,
|
||||
NULL AS token5,
|
||||
NULL AS token6,
|
||||
NULL AS token7,
|
||||
'honeyswap' AS platform,
|
||||
'v1' AS version,
|
||||
_log_id AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__honeyswap_pools') }}
|
||||
|
||||
{% if is_incremental() and 'honeyswap' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
swapr AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
pool_address,
|
||||
NULL AS pool_name,
|
||||
NULL AS fee,
|
||||
NULL AS tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
NULL AS token2,
|
||||
NULL AS token3,
|
||||
NULL AS token4,
|
||||
NULL AS token5,
|
||||
NULL AS token6,
|
||||
NULL AS token7,
|
||||
'swapr' AS platform,
|
||||
'v1' AS version,
|
||||
_log_id AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__swapr_pools') }}
|
||||
|
||||
{% if is_incremental() and 'swapr' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
sushi AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
pool_address,
|
||||
NULL AS pool_name,
|
||||
NULL AS fee,
|
||||
NULL AS tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
NULL AS token2,
|
||||
NULL AS token3,
|
||||
NULL AS token4,
|
||||
NULL AS token5,
|
||||
NULL AS token6,
|
||||
NULL AS token7,
|
||||
'sushiswap' AS platform,
|
||||
'v1' AS version,
|
||||
_log_id AS _id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__sushi_pools') }}
|
||||
|
||||
{% if is_incremental() and 'sushi' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
all_pools AS (
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
honeyswap
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
swapr
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
sushi
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
balancer
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
curve
|
||||
),
|
||||
--when pool_name is null and balancer,curve
|
||||
complete_lps AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
p.contract_address,
|
||||
pool_address,
|
||||
CASE
|
||||
WHEN pool_name IS NOT NULL THEN pool_name
|
||||
WHEN pool_name IS NULL
|
||||
AND platform IN (
|
||||
'balancer',
|
||||
'curve'
|
||||
) THEN CONCAT(
|
||||
COALESCE(c0.token_symbol, SUBSTRING(token0, 1, 5) || '...' || SUBSTRING(token0, 39, 42)),
|
||||
CASE
|
||||
WHEN token1 IS NOT NULL THEN '-' || COALESCE(c1.token_symbol, SUBSTRING(token1, 1, 5) || '...' || SUBSTRING(token1, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token2 IS NOT NULL THEN '-' || COALESCE(c2.token_symbol, SUBSTRING(token2, 1, 5) || '...' || SUBSTRING(token2, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token3 IS NOT NULL THEN '-' || COALESCE(c3.token_symbol, SUBSTRING(token3, 1, 5) || '...' || SUBSTRING(token3, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token4 IS NOT NULL THEN '-' || COALESCE(c4.token_symbol, SUBSTRING(token4, 1, 5) || '...' || SUBSTRING(token4, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token5 IS NOT NULL THEN '-' || COALESCE(c5.token_symbol, SUBSTRING(token5, 1, 5) || '...' || SUBSTRING(token5, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token6 IS NOT NULL THEN '-' || COALESCE(c6.token_symbol, SUBSTRING(token6, 1, 5) || '...' || SUBSTRING(token6, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token7 IS NOT NULL THEN '-' || COALESCE(c7.token_symbol, SUBSTRING(token7, 1, 5) || '...' || SUBSTRING(token7, 39, 42))
|
||||
ELSE ''
|
||||
END
|
||||
)
|
||||
ELSE CONCAT(
|
||||
COALESCE(
|
||||
c0.token_symbol,
|
||||
CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42))
|
||||
),
|
||||
'-',
|
||||
COALESCE(
|
||||
c1.token_symbol,
|
||||
CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42))
|
||||
)
|
||||
)
|
||||
END AS pool_name,
|
||||
fee,
|
||||
tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
token2,
|
||||
token3,
|
||||
token4,
|
||||
token5,
|
||||
token6,
|
||||
token7,
|
||||
OBJECT_CONSTRUCT(
|
||||
'token0',
|
||||
token0,
|
||||
'token1',
|
||||
token1,
|
||||
'token2',
|
||||
token2,
|
||||
'token3',
|
||||
token3,
|
||||
'token4',
|
||||
token4,
|
||||
'token5',
|
||||
token5,
|
||||
'token6',
|
||||
token6,
|
||||
'token7',
|
||||
token7
|
||||
) AS tokens,
|
||||
OBJECT_CONSTRUCT(
|
||||
'token0',
|
||||
c0.token_symbol,
|
||||
'token1',
|
||||
c1.token_symbol,
|
||||
'token2',
|
||||
c2.token_symbol,
|
||||
'token3',
|
||||
c3.token_symbol,
|
||||
'token4',
|
||||
c4.token_symbol,
|
||||
'token5',
|
||||
c5.token_symbol,
|
||||
'token6',
|
||||
c6.token_symbol,
|
||||
'token7',
|
||||
c7.token_symbol
|
||||
) AS symbols,
|
||||
OBJECT_CONSTRUCT(
|
||||
'token0',
|
||||
c0.token_decimals,
|
||||
'token1',
|
||||
c1.token_decimals,
|
||||
'token2',
|
||||
c2.token_decimals,
|
||||
'token3',
|
||||
c3.token_decimals,
|
||||
'token4',
|
||||
c4.token_decimals,
|
||||
'token5',
|
||||
c5.token_decimals,
|
||||
'token6',
|
||||
c6.token_decimals,
|
||||
'token7',
|
||||
c7.token_decimals
|
||||
) AS decimals,
|
||||
platform,
|
||||
version,
|
||||
_id,
|
||||
p._inserted_timestamp
|
||||
FROM
|
||||
all_pools p
|
||||
LEFT JOIN contracts c0
|
||||
ON c0.contract_address = p.token0
|
||||
LEFT JOIN contracts c1
|
||||
ON c1.contract_address = p.token1
|
||||
LEFT JOIN contracts c2
|
||||
ON c2.contract_address = p.token2
|
||||
LEFT JOIN contracts c3
|
||||
ON c3.contract_address = p.token3
|
||||
LEFT JOIN contracts c4
|
||||
ON c4.contract_address = p.token4
|
||||
LEFT JOIN contracts c5
|
||||
ON c5.contract_address = p.token5
|
||||
LEFT JOIN contracts c6
|
||||
ON c6.contract_address = p.token6
|
||||
LEFT JOIN contracts c7
|
||||
ON c7.contract_address = p.token7
|
||||
),
|
||||
|
||||
{% if is_incremental() and var(
|
||||
'HEAL_MODEL'
|
||||
) %}
|
||||
heal_model AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
t0.contract_address,
|
||||
pool_address,
|
||||
CASE
|
||||
WHEN pool_name IS NOT NULL THEN pool_name
|
||||
WHEN pool_name IS NULL
|
||||
AND platform IN (
|
||||
'balancer',
|
||||
'curve'
|
||||
) THEN CONCAT(
|
||||
COALESCE(c0.token_symbol, SUBSTRING(token0, 1, 5) || '...' || SUBSTRING(token0, 39, 42)),
|
||||
CASE
|
||||
WHEN token1 IS NOT NULL THEN '-' || COALESCE(c1.token_symbol, SUBSTRING(token1, 1, 5) || '...' || SUBSTRING(token1, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token2 IS NOT NULL THEN '-' || COALESCE(c2.token_symbol, SUBSTRING(token2, 1, 5) || '...' || SUBSTRING(token2, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token3 IS NOT NULL THEN '-' || COALESCE(c3.token_symbol, SUBSTRING(token3, 1, 5) || '...' || SUBSTRING(token3, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token4 IS NOT NULL THEN '-' || COALESCE(c4.token_symbol, SUBSTRING(token4, 1, 5) || '...' || SUBSTRING(token4, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token5 IS NOT NULL THEN '-' || COALESCE(c5.token_symbol, SUBSTRING(token5, 1, 5) || '...' || SUBSTRING(token5, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token6 IS NOT NULL THEN '-' || COALESCE(c6.token_symbol, SUBSTRING(token6, 1, 5) || '...' || SUBSTRING(token6, 39, 42))
|
||||
ELSE ''
|
||||
END,
|
||||
CASE
|
||||
WHEN token7 IS NOT NULL THEN '-' || COALESCE(c7.token_symbol, SUBSTRING(token7, 1, 5) || '...' || SUBSTRING(token7, 39, 42))
|
||||
ELSE ''
|
||||
END
|
||||
)
|
||||
ELSE CONCAT(
|
||||
COALESCE(
|
||||
c0.token_symbol,
|
||||
CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42))
|
||||
),
|
||||
'-',
|
||||
COALESCE(
|
||||
c1.token_symbol,
|
||||
CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42))
|
||||
)
|
||||
)
|
||||
END AS pool_name_heal,
|
||||
fee,
|
||||
tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
token2,
|
||||
token3,
|
||||
token4,
|
||||
token5,
|
||||
token6,
|
||||
token7,
|
||||
tokens,
|
||||
OBJECT_CONSTRUCT(
|
||||
'token0',
|
||||
c0.token_symbol,
|
||||
'token1',
|
||||
c1.token_symbol,
|
||||
'token2',
|
||||
c2.token_symbol,
|
||||
'token3',
|
||||
c3.token_symbol,
|
||||
'token4',
|
||||
c4.token_symbol,
|
||||
'token5',
|
||||
c5.token_symbol,
|
||||
'token6',
|
||||
c6.token_symbol,
|
||||
'token7',
|
||||
c7.token_symbol
|
||||
) AS symbols_heal,
|
||||
OBJECT_CONSTRUCT(
|
||||
'token0',
|
||||
c0.token_decimals,
|
||||
'token1',
|
||||
c1.token_decimals,
|
||||
'token2',
|
||||
c2.token_decimals,
|
||||
'token3',
|
||||
c3.token_decimals,
|
||||
'token4',
|
||||
c4.token_decimals,
|
||||
'token5',
|
||||
c5.token_decimals,
|
||||
'token6',
|
||||
c6.token_decimals,
|
||||
'token7',
|
||||
c7.token_decimals
|
||||
) AS decimals_heal,
|
||||
platform,
|
||||
version,
|
||||
_id,
|
||||
t0._inserted_timestamp
|
||||
FROM
|
||||
{{ this }}
|
||||
t0
|
||||
LEFT JOIN contracts c0
|
||||
ON c0.contract_address = t0.token0
|
||||
LEFT JOIN contracts c1
|
||||
ON c1.contract_address = t0.token1
|
||||
LEFT JOIN contracts c2
|
||||
ON c2.contract_address = t0.token2
|
||||
LEFT JOIN contracts c3
|
||||
ON c3.contract_address = t0.token3
|
||||
LEFT JOIN contracts c4
|
||||
ON c4.contract_address = t0.token4
|
||||
LEFT JOIN contracts c5
|
||||
ON c5.contract_address = t0.token5
|
||||
LEFT JOIN contracts c6
|
||||
ON c6.contract_address = t0.token6
|
||||
LEFT JOIN contracts c7
|
||||
ON c7.contract_address = t0.token7
|
||||
WHERE
|
||||
CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t1.block_number,
|
||||
'-',
|
||||
t1.platform,
|
||||
'-',
|
||||
t1.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t1
|
||||
WHERE
|
||||
t1.decimals :token0 :: INT IS NULL
|
||||
AND t1._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t1.tokens :token0 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t2.block_number,
|
||||
'-',
|
||||
t2.platform,
|
||||
'-',
|
||||
t2.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t2
|
||||
WHERE
|
||||
t2.decimals :token1 :: INT IS NULL
|
||||
AND t2._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t2.tokens :token1 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t3.block_number,
|
||||
'-',
|
||||
t3.platform,
|
||||
'-',
|
||||
t3.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t3
|
||||
WHERE
|
||||
t3.decimals :token2 :: INT IS NULL
|
||||
AND t3._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t3.tokens :token2 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t4.block_number,
|
||||
'-',
|
||||
t4.platform,
|
||||
'-',
|
||||
t4.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t4
|
||||
WHERE
|
||||
t4.decimals :token3 :: INT IS NULL
|
||||
AND t4._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t4.tokens :token3 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t5.block_number,
|
||||
'-',
|
||||
t5.platform,
|
||||
'-',
|
||||
t5.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t5
|
||||
WHERE
|
||||
t5.decimals :token4 :: INT IS NULL
|
||||
AND t5._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t5.tokens :token4 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t6.block_number,
|
||||
'-',
|
||||
t6.platform,
|
||||
'-',
|
||||
t6.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t6
|
||||
WHERE
|
||||
t6.decimals :token5 :: INT IS NULL
|
||||
AND t6._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t6.tokens :token5 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t7.block_number,
|
||||
'-',
|
||||
t7.platform,
|
||||
'-',
|
||||
t7.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t7
|
||||
WHERE
|
||||
t7.decimals :token6 :: INT IS NULL
|
||||
AND t7._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t7.tokens :token6 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t8.block_number,
|
||||
'-',
|
||||
t8.platform,
|
||||
'-',
|
||||
t8.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t8
|
||||
WHERE
|
||||
t8.decimals :token7 :: INT IS NULL
|
||||
AND t8._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t8.tokens :token7 :: STRING)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
),
|
||||
{% endif %}
|
||||
|
||||
FINAL AS (
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
complete_lps
|
||||
|
||||
{% if is_incremental() and var(
|
||||
'HEAL_MODEL'
|
||||
) %}
|
||||
UNION ALL
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
contract_address,
|
||||
pool_address,
|
||||
pool_name_heal AS pool_name,
|
||||
fee,
|
||||
tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
token2,
|
||||
token3,
|
||||
token4,
|
||||
token5,
|
||||
token6,
|
||||
token7,
|
||||
tokens,
|
||||
symbols_heal AS symbols,
|
||||
decimals_heal AS decimals,
|
||||
platform,
|
||||
version,
|
||||
_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
heal_model
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
platform,
|
||||
version,
|
||||
contract_address,
|
||||
pool_address,
|
||||
pool_name,
|
||||
tokens,
|
||||
symbols,
|
||||
decimals,
|
||||
fee,
|
||||
tick_spacing,
|
||||
token0,
|
||||
token1,
|
||||
token2,
|
||||
token3,
|
||||
token4,
|
||||
token5,
|
||||
token6,
|
||||
token7,
|
||||
_id,
|
||||
_inserted_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['pool_address']
|
||||
) }} AS complete_dex_liquidity_pools_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
FINAL
|
||||
@ -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
|
||||
@ -1,731 +0,0 @@
|
||||
-- depends_on: {{ ref('silver__complete_token_prices') }}
|
||||
-- depends_on: {{ ref('price__ez_asset_metadata') }}
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = ['block_number','platform','version'],
|
||||
cluster_by = ['block_timestamp::DATE','platform'],
|
||||
post_hook = "ALTER TABLE {{ this }} ADD SEARCH OPTIMIZATION ON EQUALITY(tx_hash, origin_function_signature, origin_from_address, origin_to_address, contract_address, pool_name, event_name, sender, tx_to, token_in, token_out, symbol_in, symbol_out), SUBSTRING(origin_function_signature, pool_name, event_name, sender, tx_to, token_in, token_out, symbol_in, symbol_out)",
|
||||
tags = ['silver_dex','defi','dex','curated','heal']
|
||||
) }}
|
||||
|
||||
WITH sushi AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_name,
|
||||
amount_in_unadj,
|
||||
amount_out_unadj,
|
||||
token_in,
|
||||
token_out,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
'sushiswap' as protocol,
|
||||
'v1' AS version,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__sushi_swaps') }}
|
||||
|
||||
{% if is_incremental() and 'sushi' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
curve AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_name,
|
||||
tokens_sold AS amount_in_unadj,
|
||||
tokens_bought AS amount_out_unadj,
|
||||
token_in,
|
||||
token_out,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
'curve' as protocol,
|
||||
'v1' AS version,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__curve_swaps') }}
|
||||
|
||||
{% if is_incremental() and 'curve' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
balancer AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_name,
|
||||
amount_in_unadj,
|
||||
amount_out_unadj,
|
||||
token_in,
|
||||
token_out,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
'balancer' as protocol,
|
||||
'v1' AS version,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__balancer_swaps') }}
|
||||
|
||||
{% if is_incremental() and 'balancer' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
honeyswap AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_name,
|
||||
amount_in_unadj,
|
||||
amount_out_unadj,
|
||||
token_in,
|
||||
token_out,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
'honeyswap' as protocol,
|
||||
'v1' AS version,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__honeyswap_swaps') }}
|
||||
|
||||
{% if is_incremental() and 'honeyswap' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
swapr AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_name,
|
||||
amount_in_unadj,
|
||||
amount_out_unadj,
|
||||
token_in,
|
||||
token_out,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
'swapr' as protocol,
|
||||
'v1' AS version,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver_dex__swapr_swaps') }}
|
||||
|
||||
{% if is_incremental() and 'swapr' not in var('HEAL_MODELS') %}
|
||||
WHERE
|
||||
_inserted_timestamp >= (
|
||||
SELECT
|
||||
MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
all_dex AS (
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
balancer
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
sushi
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
curve
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
honeyswap
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
swapr
|
||||
),
|
||||
complete_dex_swaps AS (
|
||||
SELECT
|
||||
s.block_number,
|
||||
s.block_timestamp,
|
||||
s.tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
s.contract_address,
|
||||
event_name,
|
||||
token_in,
|
||||
p1.is_verified as token_in_is_verified,
|
||||
c1.token_decimals AS decimals_in,
|
||||
c1.token_symbol AS symbol_in,
|
||||
amount_in_unadj,
|
||||
CASE
|
||||
WHEN decimals_in IS NULL THEN amount_in_unadj
|
||||
ELSE (amount_in_unadj / pow(10, decimals_in))
|
||||
END AS amount_in,
|
||||
CASE
|
||||
WHEN decimals_in IS NOT NULL THEN amount_in * p1.price
|
||||
ELSE NULL
|
||||
END AS amount_in_usd,
|
||||
token_out,
|
||||
p2.is_verified as token_out_is_verified,
|
||||
c2.token_decimals AS decimals_out,
|
||||
c2.token_symbol AS symbol_out,
|
||||
amount_out_unadj,
|
||||
CASE
|
||||
WHEN decimals_out IS NULL THEN amount_out_unadj
|
||||
ELSE (amount_out_unadj / pow(10, decimals_out))
|
||||
END AS amount_out,
|
||||
CASE
|
||||
WHEN decimals_out IS NOT NULL THEN amount_out * p2.price
|
||||
ELSE NULL
|
||||
END AS amount_out_usd,
|
||||
CASE
|
||||
WHEN lp.pool_name IS NULL THEN CONCAT(
|
||||
LEAST(
|
||||
COALESCE(
|
||||
symbol_in,
|
||||
CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42))
|
||||
),
|
||||
COALESCE(
|
||||
symbol_out,
|
||||
CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42))
|
||||
)
|
||||
),
|
||||
'-',
|
||||
GREATEST(
|
||||
COALESCE(
|
||||
symbol_in,
|
||||
CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42))
|
||||
),
|
||||
COALESCE(
|
||||
symbol_out,
|
||||
CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42))
|
||||
)
|
||||
)
|
||||
)
|
||||
ELSE lp.pool_name
|
||||
END AS pool_name,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
s.platform,
|
||||
s.protocol,
|
||||
s.version,
|
||||
s._log_id,
|
||||
s._inserted_timestamp
|
||||
FROM
|
||||
all_dex s
|
||||
LEFT JOIN {{ ref('silver__contracts') }}
|
||||
c1
|
||||
ON s.token_in = c1.contract_address
|
||||
LEFT JOIN {{ ref('silver__contracts') }}
|
||||
c2
|
||||
ON s.token_out = c2.contract_address
|
||||
LEFT JOIN {{ ref('price__ez_prices_hourly') }}
|
||||
p1
|
||||
ON s.token_in = p1.token_address
|
||||
AND DATE_TRUNC(
|
||||
'hour',
|
||||
block_timestamp
|
||||
) = p1.hour
|
||||
LEFT JOIN {{ ref('price__ez_prices_hourly') }}
|
||||
p2
|
||||
ON s.token_out = p2.token_address
|
||||
AND DATE_TRUNC(
|
||||
'hour',
|
||||
block_timestamp
|
||||
) = p2.hour
|
||||
LEFT JOIN {{ ref('silver_dex__complete_dex_liquidity_pools') }}
|
||||
lp
|
||||
ON s.contract_address = lp.pool_address
|
||||
),
|
||||
|
||||
{% if is_incremental() and var(
|
||||
'HEAL_MODEL'
|
||||
) %}
|
||||
heal_model AS (
|
||||
SELECT
|
||||
t0.block_number,
|
||||
t0.block_timestamp,
|
||||
t0.tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
t0.contract_address,
|
||||
event_name,
|
||||
token_in,
|
||||
p1.is_verified as token_in_is_verified,
|
||||
c1.token_decimals AS decimals_in,
|
||||
c1.token_symbol AS symbol_in,
|
||||
amount_in_unadj,
|
||||
CASE
|
||||
WHEN c1.token_decimals IS NULL THEN amount_in_unadj
|
||||
ELSE (amount_in_unadj / pow(10, c1.token_decimals))
|
||||
END AS amount_in_heal,
|
||||
CASE
|
||||
WHEN c1.token_decimals IS NOT NULL THEN amount_in_heal * p1.price
|
||||
ELSE NULL
|
||||
END AS amount_in_usd_heal,
|
||||
token_out,
|
||||
p2.is_verified as token_out_is_verified,
|
||||
c2.token_decimals AS decimals_out,
|
||||
c2.token_symbol AS symbol_out,
|
||||
amount_out_unadj,
|
||||
CASE
|
||||
WHEN c2.token_decimals IS NULL THEN amount_out_unadj
|
||||
ELSE (amount_out_unadj / pow(10, c2.token_decimals))
|
||||
END AS amount_out_heal,
|
||||
CASE
|
||||
WHEN c2.token_decimals IS NOT NULL THEN amount_out_heal * p2.price
|
||||
ELSE NULL
|
||||
END AS amount_out_usd_heal,
|
||||
CASE
|
||||
WHEN lp.pool_name IS NULL THEN CONCAT(
|
||||
LEAST(
|
||||
COALESCE(
|
||||
c1.token_symbol,
|
||||
CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42))
|
||||
),
|
||||
COALESCE(
|
||||
c2.token_symbol,
|
||||
CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42))
|
||||
)
|
||||
),
|
||||
'-',
|
||||
GREATEST(
|
||||
COALESCE(
|
||||
c1.token_symbol,
|
||||
CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42))
|
||||
),
|
||||
COALESCE(
|
||||
c2.token_symbol,
|
||||
CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42))
|
||||
)
|
||||
)
|
||||
)
|
||||
ELSE lp.pool_name
|
||||
END AS pool_name_heal,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
t0.platform,
|
||||
t0.protocol,
|
||||
t0.version,
|
||||
t0._log_id,
|
||||
t0._inserted_timestamp
|
||||
FROM
|
||||
{{ this }}
|
||||
t0
|
||||
LEFT JOIN {{ ref('silver__contracts') }}
|
||||
c1
|
||||
ON t0.token_in = c1.contract_address
|
||||
LEFT JOIN {{ ref('silver__contracts') }}
|
||||
c2
|
||||
ON t0.token_out = c2.contract_address
|
||||
LEFT JOIN {{ ref('price__ez_prices_hourly') }}
|
||||
p1
|
||||
ON t0.token_in = p1.token_address
|
||||
AND DATE_TRUNC(
|
||||
'hour',
|
||||
block_timestamp
|
||||
) = p1.hour
|
||||
LEFT JOIN {{ ref('price__ez_prices_hourly') }}
|
||||
p2
|
||||
ON t0.token_out = p2.token_address
|
||||
AND DATE_TRUNC(
|
||||
'hour',
|
||||
block_timestamp
|
||||
) = p2.hour
|
||||
LEFT JOIN {{ ref('silver_dex__complete_dex_liquidity_pools') }}
|
||||
lp
|
||||
ON t0.contract_address = lp.pool_address
|
||||
WHERE
|
||||
CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t1.block_number,
|
||||
'-',
|
||||
t1.platform,
|
||||
'-',
|
||||
t1.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t1
|
||||
WHERE
|
||||
t1.decimals_in IS NULL
|
||||
AND t1._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t1.token_in)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t2.block_number,
|
||||
'-',
|
||||
t2.platform,
|
||||
'-',
|
||||
t2.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t2
|
||||
WHERE
|
||||
t2.decimals_out IS NULL
|
||||
AND t2._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__contracts') }} C
|
||||
WHERE
|
||||
C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND C.token_decimals IS NOT NULL
|
||||
AND C.contract_address = t2.token_out)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t3.block_number,
|
||||
'-',
|
||||
t3.platform,
|
||||
'-',
|
||||
t3.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t3
|
||||
WHERE
|
||||
t3.amount_in_usd IS NULL
|
||||
AND t3._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__complete_token_prices') }}
|
||||
p
|
||||
WHERE
|
||||
p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND p.price IS NOT NULL
|
||||
AND p.token_address = t3.token_in
|
||||
AND p.hour = DATE_TRUNC(
|
||||
'hour',
|
||||
t3.block_timestamp
|
||||
)
|
||||
)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
OR CONCAT(
|
||||
t0.block_number,
|
||||
'-',
|
||||
t0.platform,
|
||||
'-',
|
||||
t0.version
|
||||
) IN (
|
||||
SELECT
|
||||
CONCAT(
|
||||
t4.block_number,
|
||||
'-',
|
||||
t4.platform,
|
||||
'-',
|
||||
t4.version
|
||||
)
|
||||
FROM
|
||||
{{ this }}
|
||||
t4
|
||||
WHERE
|
||||
t4.amount_out_usd IS NULL
|
||||
AND t4._inserted_timestamp < (
|
||||
SELECT
|
||||
MAX(
|
||||
_inserted_timestamp
|
||||
) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
AND EXISTS (
|
||||
SELECT
|
||||
1
|
||||
FROM
|
||||
{{ ref('silver__complete_token_prices') }}
|
||||
p
|
||||
WHERE
|
||||
p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE())
|
||||
AND p.price IS NOT NULL
|
||||
AND p.token_address = t4.token_out
|
||||
AND p.hour = DATE_TRUNC(
|
||||
'hour',
|
||||
t4.block_timestamp
|
||||
)
|
||||
)
|
||||
GROUP BY
|
||||
1
|
||||
)
|
||||
), newly_verified_tokens as (
|
||||
select token_address
|
||||
from {{ ref('price__ez_asset_metadata') }}
|
||||
where ifnull(is_verified_modified_timestamp, '1970-01-01' :: TIMESTAMP) > dateadd('day', -10, SYSDATE())
|
||||
),
|
||||
heal_newly_verified_tokens as (
|
||||
select
|
||||
t0.block_number,
|
||||
t0.block_timestamp,
|
||||
t0.tx_hash,
|
||||
t0.origin_function_signature,
|
||||
t0.origin_from_address,
|
||||
t0.origin_to_address,
|
||||
t0.contract_address,
|
||||
t0.event_name,
|
||||
t0.token_in,
|
||||
p1.is_verified AS token_in_is_verified,
|
||||
t0.decimals_in,
|
||||
t0.symbol_in,
|
||||
t0.amount_in_unadj,
|
||||
t0.amount_in,
|
||||
CASE
|
||||
WHEN decimals_in IS NOT NULL THEN amount_in * p1.price
|
||||
ELSE NULL
|
||||
END AS amount_in_usd_heal,
|
||||
token_out,
|
||||
p2.is_verified AS token_out_is_verified,
|
||||
t0.decimals_out,
|
||||
t0.symbol_out,
|
||||
t0.amount_out_unadj,
|
||||
t0.amount_out,
|
||||
CASE
|
||||
WHEN decimals_out IS NOT NULL THEN amount_out * p2.price
|
||||
ELSE NULL
|
||||
END AS amount_out_usd_heal,
|
||||
t0.pool_name,
|
||||
t0.sender,
|
||||
t0.tx_to,
|
||||
t0.event_index,
|
||||
t0.platform,
|
||||
t0.protocol,
|
||||
t0.version,
|
||||
t0._log_id,
|
||||
t0._inserted_timestamp
|
||||
from {{ this }} t0
|
||||
join newly_verified_tokens nv
|
||||
on (t0.token_in = nv.token_address or t0.token_out = nv.token_address)
|
||||
left join {{ ref('price__ez_prices_hourly')}} p1
|
||||
on t0.token_in = p1.token_address
|
||||
and date_trunc('hour', t0.block_timestamp) = p1.hour
|
||||
left join {{ ref('price__ez_prices_hourly')}} p2
|
||||
on t0.token_out = p2.token_address
|
||||
and date_trunc('hour', t0.block_timestamp) = p2.hour
|
||||
),
|
||||
{% endif %}
|
||||
|
||||
FINAL AS (
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
complete_dex_swaps
|
||||
|
||||
{% if is_incremental() and var(
|
||||
'HEAL_MODEL'
|
||||
) %}
|
||||
UNION ALL
|
||||
SELECT
|
||||
block_number,
|
||||
block_timestamp,
|
||||
tx_hash,
|
||||
origin_function_signature,
|
||||
origin_from_address,
|
||||
origin_to_address,
|
||||
contract_address,
|
||||
event_name,
|
||||
token_in,
|
||||
token_in_is_verified,
|
||||
decimals_in,
|
||||
symbol_in,
|
||||
amount_in_unadj,
|
||||
amount_in_heal AS amount_in,
|
||||
amount_in_usd_heal AS amount_in_usd,
|
||||
token_out,
|
||||
token_out_is_verified,
|
||||
decimals_out,
|
||||
symbol_out,
|
||||
amount_out_unadj,
|
||||
amount_out_heal AS amount_out,
|
||||
amount_out_usd_heal AS amount_out_usd,
|
||||
pool_name_heal AS pool_name,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
protocol,
|
||||
version,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
heal_model
|
||||
UNION ALL
|
||||
SELECT
|
||||
*
|
||||
FROM
|
||||
heal_newly_verified_tokens
|
||||
{% endif %}
|
||||
)
|
||||
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,
|
||||
amount_in_usd,
|
||||
amount_out_unadj,
|
||||
amount_out,
|
||||
amount_out_usd,
|
||||
sender,
|
||||
tx_to,
|
||||
event_index,
|
||||
platform,
|
||||
protocol,
|
||||
version,
|
||||
token_in,
|
||||
ifnull(token_in_is_verified, false) as token_in_is_verified,
|
||||
token_out,
|
||||
ifnull(token_out_is_verified, false) as token_out_is_verified,
|
||||
symbol_in,
|
||||
symbol_out,
|
||||
decimals_in,
|
||||
decimals_out,
|
||||
_log_id,
|
||||
_inserted_timestamp,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['tx_hash','event_index']
|
||||
) }} AS complete_dex_swaps_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
FINAL qualify (ROW_NUMBER() over (PARTITION BY _log_id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -1,129 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__complete_dex_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: 1
|
||||
- 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: EVENT_NAME
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- STRING
|
||||
- VARCHAR
|
||||
- not_null
|
||||
- name: AMOUNT_IN
|
||||
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: AMOUNT_IN_USD
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: AMOUNT_OUT_USD
|
||||
tests:
|
||||
- dbt_expectations.expect_column_values_to_be_in_type_list:
|
||||
column_type_list:
|
||||
- NUMBER
|
||||
- FLOAT
|
||||
- name: TOKEN_IN
|
||||
tests:
|
||||
- not_null:
|
||||
where: PLATFORM <> 'curve'
|
||||
- dbt_expectations.expect_column_values_to_match_regex:
|
||||
regex: 0[xX][0-9a-fA-F]+
|
||||
- name: TOKEN_OUT
|
||||
tests:
|
||||
- not_null:
|
||||
where: PLATFORM <> 'curve'
|
||||
- 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: 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]+
|
||||
enabled: False
|
||||
- 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('0xc35DADB65012eC5796536bD9864eD8773aBc74C4')
|
||||
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__sushi_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__sushi_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,
|
||||
'sushiswap' AS platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,116 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__sushi_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('0x5D48C95AdfFD4B40c1AAADc4e08fc44117E02179')
|
||||
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__swapr_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__swapr_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,
|
||||
'swapr' AS platform,
|
||||
_log_id,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
swaps_base
|
||||
WHERE
|
||||
token_in <> token_out
|
||||
@ -1,116 +0,0 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_dex__swapr_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,3 +1,3 @@
|
||||
packages:
|
||||
- git: https://github.com/FlipsideCrypto/fsc-evm.git
|
||||
revision: v4.8.2
|
||||
revision: v4.9.2
|
||||
Loading…
Reference in New Issue
Block a user