mirror of
https://github.com/FlipsideCrypto/fsc-evm.git
synced 2026-02-06 14:06:47 +00:00
Merge pull request #468 from FlipsideCrypto/DAT2-211/tvl-pipeline
DAT2-211/tvl-pipeline
This commit is contained in:
commit
1b88adb52d
9
data/curated/contract_reads/silver_reads__nado_seed.csv
Normal file
9
data/curated/contract_reads/silver_reads__nado_seed.csv
Normal file
@ -0,0 +1,9 @@
|
||||
chain,token_address,contract_address
|
||||
ink,0x0200C29006150606B650577BBE7B6248F58470c1,0xD218103918C19D0A10cf35300E4CfAfbD444c5fE
|
||||
ink,0x0200C29006150606B650577BBE7B6248F58470c1,0x05ec92D78ED421f3D3Ada77FFdE167106565974E
|
||||
ink,0x4200000000000000000000000000000000000006,0xD218103918C19D0A10cf35300E4CfAfbD444c5fE
|
||||
ink,0x4200000000000000000000000000000000000006,0x05ec92D78ED421f3D3Ada77FFdE167106565974E
|
||||
ink,0x73E0C0d45E048D25Fc26Fa3159b0aA04BfA4Db98,0xD218103918C19D0A10cf35300E4CfAfbD444c5fE
|
||||
ink,0x73E0C0d45E048D25Fc26Fa3159b0aA04BfA4Db98,0x05ec92D78ED421f3D3Ada77FFdE167106565974E
|
||||
ink,0x2D270e6886d130D724215A266106e6832161EAEd,0xD218103918C19D0A10cf35300E4CfAfbD444c5fE
|
||||
ink,0x2D270e6886d130D724215A266106e6832161EAEd,0x05ec92D78ED421f3D3Ada77FFdE167106565974E
|
||||
|
@ -1,32 +1,44 @@
|
||||
{% macro unverify_tvl() %}
|
||||
{% if var('HEAL_MODEL', false) and is_incremental() %}
|
||||
-- Only target platforms that use verified_check_enabled
|
||||
-- Delete rows that are invalid in BOTH v2 and v3/v4 styles
|
||||
/*
|
||||
Delete TVL rows that no longer have a corresponding reads record.
|
||||
|
||||
Only applies to platforms that use the verified_check_enabled system.
|
||||
Reads records can be removed upstream by unverify_contract_reads() when tokens lose verification,
|
||||
but high-value pools (verified_check_enabled='false') are protected and kept.
|
||||
|
||||
TVL structure varies by version:
|
||||
- v2 style: contract_address=token, address=pool | reads: contract_address=pool, address=NULL
|
||||
- v3/v4 style: contract_address=token, address=pool | reads: contract_address=token, address=pool
|
||||
|
||||
Note: Snowflake does not support CTEs with DELETE, so we use inline subqueries.
|
||||
*/
|
||||
DELETE FROM {{ this }} t
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
WHERE t.platform IN (
|
||||
-- Platforms that have at least one record using the verified_check system
|
||||
SELECT DISTINCT platform
|
||||
FROM {{ ref('streamline__contract_reads_records') }}
|
||||
WHERE metadata:verified_check_enabled::STRING = 'true'
|
||||
AND platform = t.platform
|
||||
) --necessary for the complete_tvl model
|
||||
AND
|
||||
-- Not valid in v2 style (address as pool)
|
||||
NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM {{ ref('streamline__contract_reads_records') }} r
|
||||
WHERE r.metadata:verified_check_enabled::STRING = 'true'
|
||||
AND r.address IS NULL
|
||||
AND r.contract_address = t.address
|
||||
)
|
||||
AND
|
||||
-- Not valid in v3/v4 style (token-address combo)
|
||||
NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM {{ ref('streamline__contract_reads_records') }} r
|
||||
WHERE r.metadata:verified_check_enabled::STRING = 'true'
|
||||
AND r.address IS NOT NULL
|
||||
AND r.contract_address = t.contract_address
|
||||
AND r.address = t.address
|
||||
);
|
||||
)
|
||||
AND NOT (
|
||||
-- Keep if valid in v2 style (t.address is the pool)
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM {{ ref('streamline__contract_reads_records') }} v
|
||||
WHERE v.address IS NULL
|
||||
AND v.contract_address = t.address
|
||||
AND v.platform = t.platform
|
||||
)
|
||||
OR
|
||||
-- Keep if valid in v3/v4 style (t.contract_address is token, t.address is pool)
|
||||
EXISTS (
|
||||
SELECT 1
|
||||
FROM {{ ref('streamline__contract_reads_records') }} v
|
||||
WHERE v.address IS NOT NULL
|
||||
AND v.contract_address = t.contract_address
|
||||
AND v.address = t.address
|
||||
AND v.platform = t.platform
|
||||
)
|
||||
);
|
||||
{% endif %}
|
||||
{% endmacro %}
|
||||
@ -323,15 +323,18 @@
|
||||
},
|
||||
'radiant': {
|
||||
'v1': {
|
||||
'aave_version_address': '0x2032b9a8e9f7e76768ca9271003d3e43e1616b1f'
|
||||
'aave_version_address': '0x2032b9a8e9f7e76768ca9271003d3e43e1616b1f',
|
||||
'fork_version': 'v2'
|
||||
},
|
||||
'v2': {
|
||||
'aave_version_address': '0xf4b1486dd74d07706052a33d31d7c0aafd0659e1'
|
||||
'aave_version_address': '0xf4b1486dd74d07706052a33d31d7c0aafd0659e1',
|
||||
'fork_version': 'v2'
|
||||
}
|
||||
},
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad'
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad',
|
||||
'fork_version': 'v3'
|
||||
}
|
||||
},
|
||||
'morpho': {
|
||||
|
||||
@ -253,10 +253,12 @@
|
||||
},
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad'
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad',
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
'v2': {
|
||||
'aave_version_address': '0x4f01aed16d97e3ab5ab2b501154dc9bb0f1a5a2c'
|
||||
'aave_version_address': '0x4f01aed16d97e3ab5ab2b501154dc9bb0f1a5a2c',
|
||||
'fork_version': 'v2'
|
||||
}
|
||||
},
|
||||
'euler': {
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
'CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST': ['woofi-v3','woofi-v1','voodoo-v1'],
|
||||
'CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST': ['balancer-v1'],
|
||||
'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['symbiosis-v1','hop-v1','across-v2'],
|
||||
'CURATED_DEFI_TVL_UNI_V2_POOL_USD_THRESHOLD': 60000,
|
||||
'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': {
|
||||
'uniswap': {
|
||||
'v2': {
|
||||
@ -260,12 +261,14 @@
|
||||
},
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_version_address': '0xa238dd80c259a72e81d7e4664a9801593f98d1c5'
|
||||
'aave_version_address': '0xa238dd80c259a72e81d7e4664a9801593f98d1c5',
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
},
|
||||
'radiant': {
|
||||
'v2': {
|
||||
'aave_version_address': '0x30798cfe2cca822321ceed7e6085e633aabc492f'
|
||||
'aave_version_address': '0x30798cfe2cca822321ceed7e6085e633aabc492f',
|
||||
'fork_version': 'v2'
|
||||
},
|
||||
},
|
||||
'euler': {
|
||||
@ -275,12 +278,14 @@
|
||||
},
|
||||
'granary': {
|
||||
'v1': {
|
||||
'aave_version_address': '0xb702ce183b4e1faa574834715e5d4a6378d0eed3'
|
||||
'aave_version_address': '0xb702ce183b4e1faa574834715e5d4a6378d0eed3',
|
||||
'fork_version': 'v2'
|
||||
},
|
||||
},
|
||||
'seamless': {
|
||||
'v1': {
|
||||
'aave_version_address': '0x8f44fd754285aa6a2b8b9b97739b79746e0475a7'
|
||||
'aave_version_address': '0x8f44fd754285aa6a2b8b9b97739b79746e0475a7',
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
},
|
||||
'morpho': {
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
'CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST': ['level_finance-v1','hashflow-v1','woofi-v1'],
|
||||
'CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST': ['fraxswap-v1','trader_joe-v1','trader_joe-v2','kyberswap-v1','kyberswap-v2'],
|
||||
'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['symbiosis-v1'],
|
||||
'CURATED_DEFI_TVL_UNI_V2_POOL_USD_THRESHOLD': 500000,
|
||||
'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': {
|
||||
'uniswap': {
|
||||
'v2': {
|
||||
@ -242,17 +243,20 @@
|
||||
},
|
||||
'radiant': {
|
||||
'v2': {
|
||||
'aave_version_address': '0xd50cf00b6e600dd036ba8ef475677d816d6c4281'
|
||||
'aave_version_address': '0xd50cf00b6e600dd036ba8ef475677d816d6c4281',
|
||||
'fork_version': 'v2'
|
||||
}
|
||||
},
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_version_address': '0x6807dc923806fe8fd134338eabca509979a7e0cb'
|
||||
'aave_version_address': '0x6807dc923806fe8fd134338eabca509979a7e0cb',
|
||||
'fork_version': 'v3'
|
||||
}
|
||||
},
|
||||
'kinza': {
|
||||
'v1': {
|
||||
'aave_version_address': '0xcb0620b181140e57d1c0d8b724cde623ca963c8c'
|
||||
'aave_version_address': '0xcb0620b181140e57d1c0d8b724cde623ca963c8c',
|
||||
'fork_version': 'v3'
|
||||
}
|
||||
},
|
||||
'euler': {
|
||||
|
||||
@ -324,25 +324,29 @@
|
||||
'radiant': {
|
||||
'v2': {
|
||||
'aave_treasury': '0x28e395a54a64284dba39652921cd99924f4e3797',
|
||||
'aave_version_address': '0xa950974f64aa33f27f6c5e017eee93bf7588ed07'
|
||||
'aave_version_address': '0xa950974f64aa33f27f6c5e017eee93bf7588ed07',
|
||||
'fork_version': 'v2'
|
||||
}
|
||||
},
|
||||
'spark': {
|
||||
'v1': {
|
||||
'aave_treasury': '0xb137e7d16564c81ae2b0c8ee6b55de81dd46ece5',
|
||||
'aave_version_address': '0xc13e21b648a5ee794902342038ff3adab66be987'
|
||||
'aave_version_address': '0xc13e21b648a5ee794902342038ff3adab66be987',
|
||||
'fork_version': 'v3'
|
||||
}
|
||||
},
|
||||
'sturdy': {
|
||||
'v1': {
|
||||
'aave_treasury': '0xfd1d36995d76c0f75bbe4637c84c06e4a68bbb3a',
|
||||
'aave_version_address': ['0xa422ca380bd70eef876292839222159e41aaee17','0x9f72dc67cec672bb99e3d02cbea0a21536a2b657']
|
||||
'aave_version_address': ['0xa422ca380bd70eef876292839222159e41aaee17','0x9f72dc67cec672bb99e3d02cbea0a21536a2b657'],
|
||||
'fork_version': 'v2'
|
||||
}
|
||||
},
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_treasury': '0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c',
|
||||
'aave_version_address': '0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2'
|
||||
'aave_version_address': '0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2',
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
'v2': {
|
||||
'aave_pool_addresses': ['0x311bb771e4f8952e6da169b425e7e92d6ac45756',
|
||||
|
||||
@ -81,18 +81,21 @@
|
||||
'CURATED_DEFI_LENDING_CONTRACT_MAPPING': {
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_version_address': '0xb50201558b00496a145fe76f7424749556e326d8'
|
||||
'aave_version_address': '0xb50201558b00496a145fe76f7424749556e326d8',
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
},
|
||||
'spark': {
|
||||
'v1': {
|
||||
'aave_version_address': '0x2dae5307c5e3fd1cf5a72cb6f698f915860607e0'
|
||||
'aave_version_address': '0x2dae5307c5e3fd1cf5a72cb6f698f915860607e0',
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
},
|
||||
'realt': {
|
||||
'v3': {
|
||||
'aave_version_address': ['0x5b8d36de471880ee21936f328aab2383a280cb2a',
|
||||
'0xfb9b496519fca8473fba1af0850b6b8f476bfdb3']
|
||||
'0xfb9b496519fca8473fba1af0850b6b8f476bfdb3'],
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,12 +90,14 @@
|
||||
'CURATED_DEFI_LENDING_CONTRACT_MAPPING': {
|
||||
'shroomy': {
|
||||
'v1': {
|
||||
'aave_version_address': '0x70c88e98578bc521a799de0b1c65a2b12d6f99e4'
|
||||
'aave_version_address': '0x70c88e98578bc521a799de0b1c65a2b12d6f99e4',
|
||||
'fork_version': 'v3'
|
||||
}
|
||||
},
|
||||
'tydro': {
|
||||
'v1': {
|
||||
'aave_version_address': '0x2816cf15f6d2a220e789aa011d5ee4eb6c47feba'
|
||||
'aave_version_address': '0x2816cf15f6d2a220e789aa011d5ee4eb6c47feba',
|
||||
'fork_version': 'v3'
|
||||
}
|
||||
},
|
||||
'morpho': {
|
||||
|
||||
@ -243,12 +243,14 @@
|
||||
},
|
||||
'granary': {
|
||||
'v1': {
|
||||
'aave_version_address': '0x8fd4af47e4e63d1d2d45582c3286b4bd9bb95dfe'
|
||||
'aave_version_address': '0x8fd4af47e4e63d1d2d45582c3286b4bd9bb95dfe',
|
||||
'fork_version': 'v2'
|
||||
}
|
||||
},
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad'
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad',
|
||||
'fork_version': 'v3'
|
||||
}
|
||||
},
|
||||
'morpho': {
|
||||
|
||||
@ -246,11 +246,13 @@
|
||||
'aave': {
|
||||
'v3': {
|
||||
'aave_treasury': '0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c',
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad'
|
||||
'aave_version_address': '0x794a61358d6845594f94dc1db02a252b5b4814ad',
|
||||
'fork_version': 'v3'
|
||||
},
|
||||
'v2': {
|
||||
'aave_treasury': '0x464c71f6c2f760dda6093dcb91c24c39e5d6e18c',
|
||||
'aave_version_address': '0x8dff5e27ea6b7ac08ebfdf9eb090f32ee9a30fcf'
|
||||
'aave_version_address': '0x8dff5e27ea6b7ac08ebfdf9eb090f32ee9a30fcf',
|
||||
'fork_version': 'v2'
|
||||
}
|
||||
},
|
||||
'morpho': {
|
||||
|
||||
@ -312,6 +312,9 @@
|
||||
|
||||
{# Curated Lending Variables #}
|
||||
{% set ns.CURATED_DEFI_LENDING_CONTRACT_MAPPING = get_var('CURATED_DEFI_LENDING_CONTRACT_MAPPING', {}) %}
|
||||
|
||||
{# Curated TVL Variables #}
|
||||
{% set ns.CURATED_DEFI_TVL_UNI_V2_POOL_USD_THRESHOLD = get_var('CURATED_DEFI_TVL_UNI_V2_POOL_USD_THRESHOLD', 20000) %}
|
||||
|
||||
{# Return the entire namespace as a dictionary #}
|
||||
{{ return(ns) }}
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'aave_v1_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH all_tokens AS (
|
||||
@ -25,7 +25,7 @@ WITH all_tokens AS (
|
||||
FROM
|
||||
{{ ref('silver_lending__aave_tokens') }}
|
||||
WHERE
|
||||
version = 'v1'
|
||||
fork_version = 'v1'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
@ -94,7 +94,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: VARIANT AS metadata,
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'aave_v2_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH all_tokens AS (
|
||||
@ -26,7 +26,7 @@ WITH all_tokens AS (
|
||||
FROM
|
||||
{{ ref('silver_lending__aave_tokens') }}
|
||||
WHERE
|
||||
version = 'v2'
|
||||
fork_version = 'v2'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
@ -82,7 +82,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: variant AS metadata,
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'aave_v3_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH all_tokens AS (
|
||||
@ -24,7 +24,7 @@ WITH all_tokens AS (
|
||||
FROM
|
||||
{{ ref('silver_lending__aave_tokens') }}
|
||||
WHERE
|
||||
version = 'v3'
|
||||
fork_version = 'v3'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'aerodrome_v1_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH liquidity_pools AS (
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'binance_v1_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH contracts AS (
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'compound_v1_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
-- Compound V1 TVL: balanceOf(MoneyMarket) for each collateral token
|
||||
-- MoneyMarket contract holds all tokens directly
|
||||
WITH all_tokens AS (
|
||||
|
||||
SELECT
|
||||
token_address AS contract_address,
|
||||
money_market_address AS address,
|
||||
protocol,
|
||||
version,
|
||||
platform
|
||||
FROM
|
||||
{{ ref('silver_lending__comp_v1_asset_details') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
contract_address,
|
||||
address,
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: variant AS metadata,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','address','input','platform']
|
||||
) }} AS compound_v1_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
all_tokens
|
||||
@ -0,0 +1,58 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'compound_v2_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH all_tokens AS (
|
||||
|
||||
SELECT
|
||||
underlying_asset_address AS contract_address,
|
||||
token_address AS address,
|
||||
protocol,
|
||||
version,
|
||||
CONCAT(
|
||||
protocol,
|
||||
'-',
|
||||
version
|
||||
) AS platform
|
||||
FROM
|
||||
{{ ref('silver_lending__comp_v2_asset_details') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
contract_address,
|
||||
address,
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: variant AS metadata,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','address','input','platform']
|
||||
) }} AS compound_v2_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
all_tokens
|
||||
@ -0,0 +1,86 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'compound_v3_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH base_tokens AS (
|
||||
-- Base token (e.g., USDC, WETH) for each Comet market
|
||||
SELECT
|
||||
underlying_asset_address AS contract_address,
|
||||
compound_market_address AS address,
|
||||
protocol,
|
||||
version,
|
||||
CONCAT(
|
||||
protocol,
|
||||
'-',
|
||||
version
|
||||
) AS platform
|
||||
FROM
|
||||
{{ ref('silver_lending__comp_v3_asset_details') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
|
||||
collateral_tokens AS (
|
||||
-- All collateral assets for each Comet market
|
||||
SELECT
|
||||
collateral_asset_address AS contract_address,
|
||||
compound_market_address AS address,
|
||||
protocol,
|
||||
version,
|
||||
platform
|
||||
FROM
|
||||
{{ ref('silver_lending__comp_v3_collateral_assets') }}
|
||||
|
||||
{% if is_incremental() %}
|
||||
WHERE modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
|
||||
all_tokens AS (
|
||||
SELECT * FROM base_tokens
|
||||
UNION
|
||||
SELECT * FROM collateral_tokens
|
||||
)
|
||||
|
||||
SELECT
|
||||
contract_address,
|
||||
address,
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: variant AS metadata,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','address','input','platform']
|
||||
) }} AS compound_v3_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
all_tokens
|
||||
@ -8,7 +8,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'curve_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH liquidity_pools AS (
|
||||
@ -38,7 +38,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: variant AS metadata,
|
||||
|
||||
@ -0,0 +1,83 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'eigenlayer_v1_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH strategy_events AS (
|
||||
|
||||
SELECT
|
||||
DISTINCT LOWER(
|
||||
decoded_log :strategy :: STRING
|
||||
) AS strategy_address
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
contract_address = LOWER('0x858646372cc42e1a627fce94aa7a7033e7cf075a') -- StrategyManager
|
||||
AND event_name = 'StrategyAddedToDepositWhitelist'
|
||||
AND block_number >= 17445564 -- Contract deployment block
|
||||
AND strategy_address <> LOWER('0xaCB55C530Acdb2849e6d4f36992Cd8c9D50ED8F7') -- Exclude bEIGEN strategy as per adapter (staking, not TVL)
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
strategies AS (
|
||||
-- totalShares() reads
|
||||
SELECT
|
||||
strategy_address AS contract_address,
|
||||
'totalShares' AS function_name,
|
||||
'0x3a98ef39' AS function_sig,
|
||||
RPAD(
|
||||
'0x3a98ef39',
|
||||
64,
|
||||
'0'
|
||||
) AS input
|
||||
FROM
|
||||
strategy_events
|
||||
UNION ALL
|
||||
-- underlyingToken() reads
|
||||
SELECT
|
||||
strategy_address AS contract_address,
|
||||
'underlyingToken' AS function_name,
|
||||
'0x2495a599' AS function_sig,
|
||||
RPAD(
|
||||
'0x2495a599',
|
||||
64,
|
||||
'0'
|
||||
) AS input
|
||||
FROM
|
||||
strategy_events
|
||||
)
|
||||
SELECT
|
||||
contract_address,
|
||||
NULL AS address,
|
||||
function_name,
|
||||
function_sig,
|
||||
input,
|
||||
NULL :: variant AS metadata,
|
||||
'eigenlayer' AS protocol,
|
||||
'v1' AS version,
|
||||
CONCAT(
|
||||
protocol,
|
||||
'-',
|
||||
version
|
||||
) AS platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','input','platform']
|
||||
) }} AS eigenlayer_v1_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
strategies
|
||||
@ -7,7 +7,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'etherfi_v1_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH contracts AS (
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'lido_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH pooled_assets AS (
|
||||
|
||||
@ -0,0 +1,97 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'morpho_blue_v1_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH morpho_blue_addresses AS (
|
||||
{{ curated_contract_mapping(
|
||||
vars.CURATED_DEFI_LENDING_CONTRACT_MAPPING
|
||||
) }}
|
||||
WHERE
|
||||
type = 'morpho_blue_address'
|
||||
),
|
||||
market_tokens AS (
|
||||
-- Get unique tokens from CreateMarket events
|
||||
SELECT
|
||||
DISTINCT token_address,
|
||||
morpho_blue_address
|
||||
FROM
|
||||
(
|
||||
-- Collateral tokens (2nd address in marketParams tuple, bytes 32-64 of data)
|
||||
SELECT
|
||||
LOWER(CONCAT('0x', SUBSTR(data, 91, 40))) AS token_address,
|
||||
m.contract_address AS morpho_blue_address
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }} l
|
||||
INNER JOIN morpho_blue_addresses m USING(contract_address)
|
||||
WHERE
|
||||
topic_0 = '0xac4b2400f169220b0c0afdde7a0b32e775ba727ea1cb30b35f935cdaab8683ac'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
UNION
|
||||
-- Loan tokens (1st address in marketParams tuple, bytes 0-32 of data)
|
||||
SELECT
|
||||
LOWER(CONCAT('0x', SUBSTR(data, 27, 40))) AS token_address,
|
||||
m.contract_address AS morpho_blue_address
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }} l
|
||||
INNER JOIN morpho_blue_addresses m USING(contract_address)
|
||||
WHERE
|
||||
topic_0 = '0xac4b2400f169220b0c0afdde7a0b32e775ba727ea1cb30b35f935cdaab8683ac'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
WHERE
|
||||
token_address <> '0x0000000000000000000000000000000000000000'
|
||||
AND token_address IS NOT NULL
|
||||
)
|
||||
SELECT
|
||||
token_address AS contract_address,
|
||||
morpho_blue_address AS address,
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(
|
||||
SUBSTR(
|
||||
morpho_blue_address,
|
||||
3
|
||||
),
|
||||
64,
|
||||
'0'
|
||||
)
|
||||
) AS input,
|
||||
NULL::VARIANT AS metadata,
|
||||
'morpho' AS protocol,
|
||||
'v1' AS version,
|
||||
CONCAT(
|
||||
protocol,
|
||||
'-',
|
||||
version
|
||||
) AS platform,
|
||||
{{ dbt_utils.generate_surrogate_key(['contract_address','address','input','platform']) }} AS morpho_blue_v1_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
market_tokens
|
||||
@ -0,0 +1,57 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'nado_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH contracts AS (
|
||||
|
||||
SELECT
|
||||
LOWER(s.token_address) AS contract_address,
|
||||
LOWER(s.contract_address) AS address
|
||||
FROM
|
||||
{{ ref('silver_reads__nado_seed') }} s
|
||||
WHERE
|
||||
chain = '{{ vars.GLOBAL_PROJECT_NAME }}'
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND CONCAT(COALESCE(token_address, 'null'), '-', contract_address) NOT IN (
|
||||
SELECT
|
||||
CONCAT(COALESCE(contract_address, 'null'), '-', address)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
contract_address,
|
||||
address,
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: variant AS metadata,
|
||||
'nado' AS protocol,
|
||||
'v1' AS version,
|
||||
CONCAT(
|
||||
protocol,
|
||||
'-',
|
||||
version
|
||||
) AS platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','address','input','platform']
|
||||
) }} AS nado_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
contracts
|
||||
@ -7,7 +7,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'polymarket_v1_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH contracts AS (
|
||||
@ -25,7 +25,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: VARIANT AS metadata,
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'rocketpool_v1_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
'0xae78736cd615f374d3085123a210448e74fc6393' AS contract_address, --rETH
|
||||
NULL AS address,
|
||||
'totalSupply' AS function_name,
|
||||
'0x18160ddd' AS function_sig,
|
||||
RPAD(
|
||||
function_sig,
|
||||
64,
|
||||
'0'
|
||||
) AS input,
|
||||
NULL :: VARIANT AS metadata,
|
||||
'rocketpool' AS protocol,
|
||||
'v1' AS version,
|
||||
CONCAT(protocol, '-', version) AS platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','input','platform']
|
||||
) }} AS rocketpool_v1_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
{% if is_incremental() %}
|
||||
WHERE contract_address NOT IN (
|
||||
SELECT
|
||||
contract_address
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
@ -0,0 +1,63 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'sky_v1_collateral_joins_id',
|
||||
tags = ['streamline','contract_reads','records','sky']
|
||||
) }}
|
||||
|
||||
-- Sky Protocol (MakerDAO) collateral join discovery
|
||||
-- Discovers join contracts from MCD_VAT rely events via gem() calls
|
||||
|
||||
WITH rely_events AS (
|
||||
SELECT
|
||||
DISTINCT
|
||||
LOWER(CONCAT('0x', SUBSTR(topic_1, -40))) AS join_address,
|
||||
block_number
|
||||
FROM
|
||||
{{ ref('core__fact_event_logs') }}
|
||||
WHERE
|
||||
contract_address = '0x35d1b3f3d7966a1dfe207aa4514c12a259a0492b'
|
||||
AND topic_0 = '0x65fae35e00000000000000000000000000000000000000000000000000000000'
|
||||
AND block_number >= 8928152 -- Contract deployment block
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (SELECT MAX(modified_timestamp) FROM {{ this }})
|
||||
{% endif %}
|
||||
)
|
||||
|
||||
SELECT
|
||||
join_address,
|
||||
OBJECT_CONSTRUCT(
|
||||
'id', CONCAT(join_address, '-gem'),
|
||||
'jsonrpc', '2.0',
|
||||
'method', 'eth_call',
|
||||
'params', ARRAY_CONSTRUCT(
|
||||
OBJECT_CONSTRUCT(
|
||||
'to', join_address,
|
||||
'data', '0x7bd2bea7'
|
||||
),
|
||||
utils.udf_int_to_hex(block_number)
|
||||
)
|
||||
) AS rpc_request,
|
||||
live.udf_api(
|
||||
'POST',
|
||||
'{{ vars.GLOBAL_NODE_URL }}',
|
||||
OBJECT_CONSTRUCT(
|
||||
'Content-Type', 'application/json',
|
||||
'fsc-quantum-state', 'livequery'
|
||||
),
|
||||
rpc_request,
|
||||
'{{ vars.GLOBAL_NODE_VAULT_PATH }}'
|
||||
) AS response,
|
||||
response:data:result::STRING AS result_hex,
|
||||
{{ dbt_utils.generate_surrogate_key(['join_address']) }} AS sky_v1_collateral_joins_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
rely_events
|
||||
@ -0,0 +1,56 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'sky_v1_reads_id',
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH collateral_joins AS (
|
||||
SELECT
|
||||
join_address,
|
||||
LOWER(CONCAT('0x', SUBSTR(result_hex, -40))) AS token_address
|
||||
FROM
|
||||
{{ ref('silver_reads__sky_v1_collateral_joins') }}
|
||||
WHERE
|
||||
result_hex IS NOT NULL
|
||||
AND LENGTH(result_hex) >= 42
|
||||
AND result_hex NOT IN ('0x', '0x0000000000000000000000000000000000000000000000000000000000000000')
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (SELECT MAX(modified_timestamp) FROM {{ this }})
|
||||
{% endif %}
|
||||
UNION ALL
|
||||
SELECT
|
||||
'0x37305b1cd40574e4c5ce33f8e8306be057fd7341' AS join_address, -- Sky: PSM
|
||||
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' AS token_address -- USDC
|
||||
)
|
||||
|
||||
SELECT
|
||||
token_address AS contract_address,
|
||||
join_address AS address,
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
function_sig,
|
||||
LPAD(SUBSTR(join_address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL::VARIANT AS metadata,
|
||||
'sky' AS protocol,
|
||||
'v1' AS version,
|
||||
CONCAT(protocol, '-', version) AS platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','address','input','platform']
|
||||
) }} AS sky_v1_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
collateral_joins
|
||||
WHERE
|
||||
token_address IS NOT NULL
|
||||
AND token_address != '0x0000000000000000000000000000000000000000'
|
||||
@ -10,7 +10,7 @@
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'stablecoins_reads_id',
|
||||
post_hook = '{{ unverify_stablecoins() }}',
|
||||
tags = ['silver','contract_reads','heal']
|
||||
tags = ['streamline','contract_reads','records','heal']
|
||||
) }}
|
||||
|
||||
WITH verified_stablecoins AS (
|
||||
|
||||
@ -7,6 +7,9 @@
|
||||
-- depends_on: {{ ref('price__ez_asset_metadata') }}
|
||||
-- depends_on: {{ ref('silver_reads__lido_v1_reads') }}
|
||||
-- depends_on: {{ ref('silver_reads__binance_v1_reads') }}
|
||||
-- depends_on: {{ ref('silver_reads__eigenlayer_v1_reads') }}
|
||||
-- depends_on: {{ ref('silver_reads__rocketpool_v1_reads') }}
|
||||
-- depends_on: {{ ref('silver_reads__sky_v1_reads') }}
|
||||
-- depends_on: {{ ref('silver_reads__polymarket_v1_reads') }}
|
||||
{{ config (
|
||||
materialized = "incremental",
|
||||
@ -22,6 +25,9 @@
|
||||
{% if vars.GLOBAL_PROJECT_NAME == 'ethereum' %}
|
||||
{% set _ = models.append((ref('silver_reads__lido_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__binance_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__eigenlayer_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__rocketpool_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__sky_v1_reads'), 'daily')) %}
|
||||
{% endif %}
|
||||
{% if vars.GLOBAL_PROJECT_NAME == 'polygon' %}
|
||||
{% set _ = models.append((ref('silver_reads__polymarket_v1_reads'), 'daily')) %}
|
||||
@ -38,6 +44,11 @@
|
||||
{% set _ = models.append((ref('silver_reads__curve_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__tornado_cash_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__etherfi_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__morpho_blue_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__nado_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__compound_v1_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__compound_v2_reads'), 'daily')) %}
|
||||
{% set _ = models.append((ref('silver_reads__compound_v3_reads'), 'daily')) %}
|
||||
|
||||
WITH all_records AS (
|
||||
{% for model, type in models %}
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'superchain_slipstream_v1_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH blacklisted_tokens AS (
|
||||
@ -61,7 +61,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
OBJECT_CONSTRUCT(
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'tornado_cash_reads_id',
|
||||
tags = ['silver','contract_reads']
|
||||
tags = ['streamline','contract_reads','records']
|
||||
) }}
|
||||
|
||||
WITH mixers AS (
|
||||
@ -37,7 +37,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
NULL :: variant AS metadata,
|
||||
|
||||
@ -1,18 +1,17 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'uniswap_v2_reads_id',
|
||||
post_hook = '{{ unverify_contract_reads() }}',
|
||||
tags = ['silver','contract_reads','heal']
|
||||
tags = ['streamline','contract_reads','records','heal']
|
||||
) }}
|
||||
|
||||
WITH verified_contracts AS (
|
||||
|
||||
SELECT
|
||||
DISTINCT token_address
|
||||
FROM
|
||||
@ -21,25 +20,101 @@ WITH verified_contracts AS (
|
||||
is_verified
|
||||
AND token_address IS NOT NULL
|
||||
),
|
||||
high_value_pools AS (
|
||||
SELECT
|
||||
DISTINCT pool_address
|
||||
FROM
|
||||
{{ ref('defi__ez_dex_liquidity_pool_actions') }}
|
||||
WHERE
|
||||
event_name IN (
|
||||
'Mint',
|
||||
'AddLiquidity',
|
||||
'Deposit'
|
||||
)
|
||||
AND amount_usd IS NOT NULL
|
||||
AND amount_usd > 0
|
||||
AND amount_usd < 1e9 -- filter bad pricing
|
||||
AND platform IN (
|
||||
SELECT
|
||||
DISTINCT platform
|
||||
FROM
|
||||
{{ ref('silver_dex__paircreated_evt_v2_pools') }}
|
||||
)
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND pool_address NOT IN (
|
||||
SELECT
|
||||
contract_address
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
GROUP BY
|
||||
pool_address
|
||||
HAVING
|
||||
SUM(amount_usd) >= '{{ vars.CURATED_DEFI_TVL_UNI_V2_POOL_USD_THRESHOLD }}' :: STRING :: INT
|
||||
--chain dependent thresholds
|
||||
),
|
||||
liquidity_pools AS (
|
||||
SELECT
|
||||
DISTINCT
|
||||
pool_address AS contract_address,
|
||||
DISTINCT pool_address AS contract_address,
|
||||
token0,
|
||||
token1,
|
||||
protocol,
|
||||
version,
|
||||
platform
|
||||
FROM {{ ref('silver_dex__paircreated_evt_v2_pools') }}
|
||||
WHERE token0 IN (SELECT token_address FROM verified_contracts)
|
||||
AND token1 IN (SELECT token_address FROM verified_contracts)
|
||||
{% if is_incremental() %}
|
||||
AND (
|
||||
modified_timestamp > (SELECT MAX(modified_timestamp) FROM {{ this }})
|
||||
OR pool_address NOT IN (SELECT contract_address FROM {{ this }})
|
||||
-- pull in pools with newly verified tokens
|
||||
platform,
|
||||
-- Track qualification path for unverify logic
|
||||
-- If both tokens are verified, subject to unverify. Otherwise protected (high-value pool with unverified tokens)
|
||||
CASE
|
||||
WHEN token0 IN (SELECT token_address FROM verified_contracts)
|
||||
AND token1 IN (SELECT token_address FROM verified_contracts)
|
||||
THEN 'true'
|
||||
ELSE 'false'
|
||||
END AS verified_check_enabled
|
||||
FROM
|
||||
{{ ref('silver_dex__paircreated_evt_v2_pools') }}
|
||||
WHERE
|
||||
(
|
||||
-- High value pools
|
||||
pool_address IN (
|
||||
SELECT
|
||||
pool_address
|
||||
FROM
|
||||
high_value_pools
|
||||
)
|
||||
OR (
|
||||
-- Both tokens verified
|
||||
token0 IN (
|
||||
SELECT
|
||||
token_address
|
||||
FROM
|
||||
verified_contracts
|
||||
)
|
||||
AND token1 IN (
|
||||
SELECT
|
||||
token_address
|
||||
FROM
|
||||
verified_contracts
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND (
|
||||
modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
OR pool_address NOT IN (
|
||||
SELECT
|
||||
contract_address
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
contract_address,
|
||||
@ -52,17 +127,19 @@ SELECT
|
||||
'0'
|
||||
) AS input,
|
||||
OBJECT_CONSTRUCT(
|
||||
'token0', token0,
|
||||
'token1', token1,
|
||||
'verified_check_enabled','true'
|
||||
) :: VARIANT AS metadata,
|
||||
'token0',
|
||||
token0,
|
||||
'token1',
|
||||
token1,
|
||||
'verified_check_enabled',
|
||||
verified_check_enabled
|
||||
) :: variant AS metadata,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['contract_address','input','platform']
|
||||
) }} AS uniswap_v2_reads_id,
|
||||
{{ dbt_utils.generate_surrogate_key(['contract_address', 'input', 'platform']) }} AS uniswap_v2_reads_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM liquidity_pools
|
||||
FROM
|
||||
liquidity_pools
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'uniswap_v3_reads_id',
|
||||
post_hook = '{{ unverify_contract_reads() }}',
|
||||
tags = ['silver','contract_reads','heal']
|
||||
tags = ['streamline','contract_reads','records','heal']
|
||||
) }}
|
||||
|
||||
WITH verified_contracts AS (
|
||||
@ -69,7 +69,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
OBJECT_CONSTRUCT(
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'uniswap_v4_reads_id',
|
||||
post_hook = '{{ unverify_contract_reads() }}',
|
||||
tags = ['silver','contract_reads','heal']
|
||||
tags = ['streamline','contract_reads','records','heal']
|
||||
) }}
|
||||
|
||||
WITH verified_contracts AS (
|
||||
@ -20,29 +20,38 @@ WITH verified_contracts AS (
|
||||
WHERE
|
||||
is_verified
|
||||
AND token_address IS NOT NULL
|
||||
),
|
||||
),
|
||||
{% if is_incremental() %}
|
||||
existing_pairs AS (
|
||||
SELECT DISTINCT
|
||||
metadata:token0::STRING AS token0,
|
||||
metadata:token1::STRING AS token1
|
||||
FROM {{ this }}
|
||||
),
|
||||
{% endif %}
|
||||
liquidity_pools AS (
|
||||
|
||||
SELECT
|
||||
token0,
|
||||
token1,
|
||||
pool_address AS factory_address,
|
||||
hook_address,
|
||||
protocol,
|
||||
version,
|
||||
platform
|
||||
p.token0,
|
||||
p.token1,
|
||||
p.pool_address AS factory_address,
|
||||
p.hook_address,
|
||||
p.protocol,
|
||||
p.version,
|
||||
p.platform
|
||||
FROM
|
||||
{{ ref('silver_dex__uniswap_v4_pools') }}
|
||||
WHERE token0 IN (SELECT token_address FROM verified_contracts)
|
||||
AND token1 IN (SELECT token_address FROM verified_contracts)
|
||||
{{ ref('silver_dex__uniswap_v4_pools') }} p
|
||||
{% if is_incremental() %}
|
||||
LEFT JOIN existing_pairs e
|
||||
ON p.token0 = e.token0
|
||||
AND p.token1 = e.token1
|
||||
{% endif %}
|
||||
WHERE p.token0 IN (SELECT token_address FROM verified_contracts)
|
||||
AND p.token1 IN (SELECT token_address FROM verified_contracts)
|
||||
{% if is_incremental() %}
|
||||
AND (
|
||||
modified_timestamp > (SELECT MAX(modified_timestamp) FROM {{ this }})
|
||||
OR CONCAT(token0,'-',token1) NOT IN (
|
||||
SELECT CONCAT(metadata:token0::STRING,'-',metadata:token1::STRING)
|
||||
FROM {{ this }}
|
||||
)
|
||||
-- pull in pools with newly verified tokens
|
||||
p.modified_timestamp > (SELECT MAX(modified_timestamp) FROM {{ this }})
|
||||
OR e.token0 IS NULL -- pull in pools with newly verified tokens
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
@ -121,7 +130,7 @@ SELECT
|
||||
'balanceOf' AS function_name,
|
||||
'0x70a08231' AS function_sig,
|
||||
CONCAT(
|
||||
'0x70a08231',
|
||||
function_sig,
|
||||
LPAD(SUBSTR(address, 3), 64, '0')
|
||||
) AS input,
|
||||
object_construct_keep_null(
|
||||
|
||||
@ -17,6 +17,13 @@ WITH aave_version_addresses AS (
|
||||
WHERE
|
||||
type = 'aave_version_address'
|
||||
),
|
||||
aave_fork_version AS (
|
||||
{{ curated_contract_mapping(
|
||||
vars.CURATED_DEFI_LENDING_CONTRACT_MAPPING
|
||||
) }}
|
||||
WHERE
|
||||
type = 'fork_version'
|
||||
),
|
||||
DECODE AS (
|
||||
|
||||
SELECT
|
||||
@ -128,6 +135,7 @@ SELECT
|
||||
A.underlying_asset AS underlying_address,
|
||||
t.protocol,
|
||||
t.version,
|
||||
f.contract_address AS fork_version,
|
||||
A.modified_timestamp,
|
||||
A._log_id
|
||||
FROM
|
||||
@ -136,6 +144,8 @@ FROM
|
||||
ON A.a_token_address = b.token_address
|
||||
LEFT JOIN aave_version_addresses t
|
||||
ON A.version_pool = t.contract_address
|
||||
LEFT JOIN aave_fork_version f
|
||||
ON t.protocol = f.protocol AND t.version = f.version
|
||||
qualify(ROW_NUMBER() over(PARTITION BY A.underlying_asset,A.version_pool
|
||||
ORDER BY
|
||||
A.atoken_created_block DESC)) = 1
|
||||
|
||||
@ -0,0 +1,101 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
unique_key = "comp_v1_asset_details_id",
|
||||
tags = ['silver','defi','lending','curated','compound','comp_v1']
|
||||
) }}
|
||||
|
||||
-- Compound V1 is Ethereum-only with a single MoneyMarket contract
|
||||
-- This model discovers collateral markets via collateralMarkets(uint256) calls
|
||||
|
||||
-- Generate indices 0-19 for collateral markets (max expected)
|
||||
WITH indices AS (
|
||||
SELECT column1 AS idx FROM (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16), (17), (18), (19))
|
||||
),
|
||||
|
||||
market_indices AS (
|
||||
SELECT idx
|
||||
FROM indices
|
||||
{% if is_incremental() %}
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM {{ this }} t
|
||||
WHERE t.market_index = indices.idx
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
|
||||
-- Call collateralMarkets(i) for each index
|
||||
collateral_market_calls AS (
|
||||
SELECT
|
||||
'0x3fda67f7583380e67ef93072294a7fac882fd7e7' AS money_market_address,
|
||||
idx,
|
||||
live.udf_api(
|
||||
'POST',
|
||||
'{URL}',
|
||||
OBJECT_CONSTRUCT(
|
||||
'Content-Type', 'application/json',
|
||||
'fsc-quantum-state', 'livequery'
|
||||
),
|
||||
utils.udf_json_rpc_call(
|
||||
'eth_call',
|
||||
[
|
||||
{
|
||||
'to': money_market_address,
|
||||
'from': null,
|
||||
'data': CONCAT('0xbeb54615', LPAD(REPLACE(utils.udf_int_to_hex(idx), '0x', ''), 64, '0'))
|
||||
},
|
||||
'latest'
|
||||
],
|
||||
concat_ws('-', money_market_address, 'collateralMarkets', idx)
|
||||
),
|
||||
'{{ vars.GLOBAL_NODE_VAULT_PATH }}'
|
||||
) AS api_response
|
||||
FROM
|
||||
market_indices
|
||||
),
|
||||
|
||||
parsed_markets AS (
|
||||
SELECT
|
||||
money_market_address,
|
||||
idx AS market_index,
|
||||
api_response:data:result::STRING AS result_hex,
|
||||
CASE
|
||||
WHEN result_hex IS NOT NULL
|
||||
AND LENGTH(result_hex) >= 42
|
||||
AND result_hex != '0x'
|
||||
AND result_hex != '0x0000000000000000000000000000000000000000000000000000000000000000'
|
||||
THEN LOWER(CONCAT('0x', SUBSTR(result_hex, -40)))
|
||||
ELSE NULL
|
||||
END AS token_address
|
||||
FROM
|
||||
collateral_market_calls
|
||||
WHERE
|
||||
api_response:data:result IS NOT NULL
|
||||
AND api_response:data:result::STRING != '0x'
|
||||
)
|
||||
|
||||
SELECT
|
||||
p.money_market_address,
|
||||
p.token_address,
|
||||
c.name AS token_name,
|
||||
c.symbol AS token_symbol,
|
||||
c.decimals AS token_decimals,
|
||||
p.market_index,
|
||||
'compound' AS protocol,
|
||||
'v1' AS version,
|
||||
CONCAT(protocol, '-', version) AS platform,
|
||||
{{ dbt_utils.generate_surrogate_key(['token_address']) }} AS comp_v1_asset_details_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
parsed_markets p
|
||||
LEFT JOIN {{ ref('core__dim_contracts') }} c ON p.token_address = c.address
|
||||
WHERE
|
||||
p.token_address IS NOT NULL
|
||||
AND p.token_address != '0x0000000000000000000000000000000000000000'
|
||||
@ -0,0 +1,111 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
unique_key = "collateral_asset_id",
|
||||
tags = ['silver','defi','lending','curated','compound','comp_v3']
|
||||
) }}
|
||||
|
||||
WITH
|
||||
-- Generate indices 0-14 for each market (max expected collateral assets)
|
||||
indices AS (
|
||||
SELECT column1 AS idx FROM (VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14))
|
||||
),
|
||||
|
||||
market_indices AS (
|
||||
SELECT
|
||||
m.compound_market_address,
|
||||
m.protocol,
|
||||
m.version,
|
||||
m.platform,
|
||||
i.idx
|
||||
FROM
|
||||
{{ ref('silver_lending__comp_v3_asset_details') }} m
|
||||
CROSS JOIN
|
||||
indices i
|
||||
{% if is_incremental() %}
|
||||
WHERE NOT EXISTS (
|
||||
SELECT 1 FROM {{ this }} t
|
||||
WHERE t.compound_market_address = m.compound_market_address
|
||||
AND t.asset_index = i.idx
|
||||
)
|
||||
{% endif %}
|
||||
),
|
||||
|
||||
-- Call getAssetInfo(i) for each market/index combination
|
||||
asset_info_calls AS (
|
||||
SELECT
|
||||
compound_market_address,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
idx,
|
||||
live.udf_api(
|
||||
'POST',
|
||||
'{URL}',
|
||||
OBJECT_CONSTRUCT(
|
||||
'Content-Type', 'application/json',
|
||||
'fsc-quantum-state', 'livequery'
|
||||
),
|
||||
utils.udf_json_rpc_call(
|
||||
'eth_call',
|
||||
[
|
||||
{
|
||||
'to': compound_market_address,
|
||||
'from': null,
|
||||
'data': CONCAT('0xc8c7fe6b', LPAD(REPLACE(utils.udf_int_to_hex(idx), '0x', ''), 64, '0'))
|
||||
},
|
||||
'latest'
|
||||
],
|
||||
concat_ws('-', compound_market_address, 'getAssetInfo', idx)
|
||||
),
|
||||
'{{ vars.GLOBAL_NODE_VAULT_PATH }}'
|
||||
) AS api_response
|
||||
FROM
|
||||
market_indices
|
||||
),
|
||||
|
||||
-- getAssetInfo returns tuple: (uint8 offset, address asset, address priceFeed, ...)
|
||||
parsed_assets AS (
|
||||
SELECT
|
||||
compound_market_address,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
idx AS asset_index,
|
||||
api_response:data:result::STRING AS result_hex,
|
||||
CASE
|
||||
WHEN result_hex IS NOT NULL
|
||||
AND LENGTH(result_hex) >= 130
|
||||
AND result_hex != '0x'
|
||||
THEN LOWER(CONCAT('0x', SUBSTR(result_hex, 91, 40)))
|
||||
ELSE NULL
|
||||
END AS collateral_asset_address
|
||||
FROM
|
||||
asset_info_calls
|
||||
WHERE
|
||||
api_response:data:result IS NOT NULL
|
||||
AND api_response:data:result::STRING != '0x'
|
||||
AND LENGTH(api_response:data:result::STRING) >= 130
|
||||
)
|
||||
|
||||
SELECT
|
||||
compound_market_address,
|
||||
collateral_asset_address,
|
||||
asset_index,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(['compound_market_address', 'collateral_asset_address']) }} AS collateral_asset_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
parsed_assets
|
||||
WHERE
|
||||
collateral_asset_address IS NOT NULL
|
||||
AND collateral_asset_address != '0x0000000000000000000000000000000000000000'
|
||||
@ -58,7 +58,7 @@ SELECT
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','platform']
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS binance_v1_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
|
||||
@ -0,0 +1,74 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'compound_v1_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH reads AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(amount_hex) <= 4300
|
||||
AND amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(amount_hex) AS bigint)END,
|
||||
CASE
|
||||
WHEN amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(amount_hex, '0')) AS bigint)
|
||||
END
|
||||
) AS amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
amount_raw IS NOT NULL
|
||||
AND platform IN (
|
||||
SELECT
|
||||
DISTINCT platform
|
||||
FROM
|
||||
{{ ref('silver_reads__compound_v1_reads') }}
|
||||
)
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS compound_v1_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads qualify(ROW_NUMBER() over(PARTITION BY compound_v1_tvl_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__compound_v1_tvl
|
||||
description: '{{ doc("compound_v1_tvl_table_doc") }}'
|
||||
@ -0,0 +1,74 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'compound_v2_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH reads AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(amount_hex) <= 4300
|
||||
AND amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(amount_hex) AS bigint)END,
|
||||
CASE
|
||||
WHEN amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(amount_hex, '0')) AS bigint)
|
||||
END
|
||||
) AS amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
amount_raw IS NOT NULL
|
||||
AND platform IN (
|
||||
SELECT
|
||||
DISTINCT platform
|
||||
FROM
|
||||
{{ ref('silver_reads__compound_v2_reads') }}
|
||||
)
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS compound_v2_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads qualify(ROW_NUMBER() over(PARTITION BY compound_v2_tvl_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__compound_v2_tvl
|
||||
description: '{{ doc("compound_v2_tvl_table_doc") }}'
|
||||
@ -0,0 +1,74 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'compound_v3_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH reads AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(amount_hex) <= 4300
|
||||
AND amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(amount_hex) AS bigint)END,
|
||||
CASE
|
||||
WHEN amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(amount_hex, '0')) AS bigint)
|
||||
END
|
||||
) AS amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
amount_raw IS NOT NULL
|
||||
AND platform IN (
|
||||
SELECT
|
||||
DISTINCT platform
|
||||
FROM
|
||||
{{ ref('silver_reads__compound_v3_reads') }}
|
||||
)
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS compound_v3_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads qualify(ROW_NUMBER() over(PARTITION BY compound_v3_tvl_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__compound_v3_tvl
|
||||
description: '{{ doc("compound_v3_tvl_table_doc") }}'
|
||||
@ -0,0 +1,40 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'eigenlayer_v1_eigenpods_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
SELECT
|
||||
DISTINCT LOWER(
|
||||
decoded_log :eigenPod :: STRING
|
||||
) AS eigenpod_address,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id,
|
||||
{{ dbt_utils.generate_surrogate_key(['eigenpod_address']) }} AS eigenlayer_v1_eigenpods_id
|
||||
FROM
|
||||
{{ ref('core__ez_decoded_event_logs') }}
|
||||
WHERE
|
||||
contract_address = LOWER('0x91e677b07f7af907ec9a428aafa9fc14a0d3a338')
|
||||
AND event_name = 'PodDeployed'
|
||||
AND block_number >= 17445564 -- Contract deployment block
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
|
||||
qualify ROW_NUMBER() over (
|
||||
PARTITION BY eigenlayer_v1_eigenpods_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC
|
||||
) = 1
|
||||
@ -0,0 +1,125 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'eigenlayer_v1_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH beacon_blocks AS (
|
||||
SELECT
|
||||
slot_number,
|
||||
slot_timestamp::DATE AS block_date,
|
||||
execution_payload:block_number::INT AS block_number,
|
||||
modified_timestamp
|
||||
FROM {{ source('ethereum_beacon_chain', 'fact_blocks') }}
|
||||
WHERE block_included = TRUE
|
||||
AND block_date >= ('{{ vars.CURATED_SL_CONTRACT_READS_START_DATE }}' :: TIMESTAMP) :: DATE
|
||||
AND block_number IS NOT NULL
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (SELECT MAX(modified_timestamp) - INTERVAL '24 hours' FROM {{ this }} WHERE component = 'eigenpod')
|
||||
{% endif %}
|
||||
),
|
||||
|
||||
eigenpod_validators AS (
|
||||
SELECT
|
||||
slot_number,
|
||||
LOWER('0x' || RIGHT(withdrawal_credentials, 40)) AS eigenpod_address,
|
||||
balance
|
||||
FROM {{ source('ethereum_beacon_chain', 'fact_validators') }}
|
||||
WHERE LEFT(withdrawal_credentials, 4) = '0x01' -- Execution layer withdrawal credentials (funds go to an Ethereum address)
|
||||
AND validator_status IN ('active_ongoing', 'pending_queued', 'pending_initialized', 'withdrawal_possible')
|
||||
AND slot_number >= (SELECT MIN(slot_number) FROM beacon_blocks)
|
||||
AND slot_number IS NOT NULL
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp >= (SELECT MAX(modified_timestamp) - INTERVAL '24 hours' FROM {{ this }} WHERE component = 'eigenpod')
|
||||
{% endif %}
|
||||
),
|
||||
|
||||
eigenpod_tvl AS (
|
||||
-- Native ETH Restaking via Beacon Chain Validators
|
||||
SELECT
|
||||
b.block_date,
|
||||
b.block_number,
|
||||
ep.eigenpod_address AS contract_address,
|
||||
NULL AS address,
|
||||
'0x0000000000000000000000000000000000000000' AS token_address, -- represents native ETH, for pricing purposes
|
||||
NULL AS amount_hex,
|
||||
SUM(ev.balance) * POW(10, 18) AS amount_raw,
|
||||
'eigenpod' AS component,
|
||||
MAX(b.modified_timestamp) AS _modified_timestamp
|
||||
FROM {{ ref('silver_tvl__eigenlayer_v1_eigenpods') }} ep
|
||||
INNER JOIN eigenpod_validators ev
|
||||
ON ep.eigenpod_address = ev.eigenpod_address
|
||||
INNER JOIN beacon_blocks b
|
||||
ON ev.slot_number = b.slot_number
|
||||
GROUP BY 1, 2, 3
|
||||
-- Take latest slot per day per eigenpod
|
||||
QUALIFY ROW_NUMBER() OVER (PARTITION BY block_date, contract_address ORDER BY _modified_timestamp DESC) = 1
|
||||
),
|
||||
|
||||
strategy_tvl AS (
|
||||
-- LST/ERC20 Token Restaking
|
||||
SELECT
|
||||
s.block_date,
|
||||
s.block_number,
|
||||
s.contract_address,
|
||||
NULL AS address,
|
||||
LOWER('0x' || RIGHT(LTRIM(t.result_hex, '0x'), 40)) AS token_address,
|
||||
s.result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE WHEN LENGTH(s.result_hex) <= 4300 AND s.result_hex IS NOT NULL
|
||||
THEN TRY_CAST(utils.udf_hex_to_int(s.result_hex) AS BIGINT) END,
|
||||
CASE WHEN s.result_hex IS NOT NULL
|
||||
THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(s.result_hex, '0')) AS BIGINT) END
|
||||
) AS amount_raw,
|
||||
'strategy' AS component,
|
||||
s._inserted_timestamp
|
||||
FROM {{ ref('silver__contract_reads') }} s
|
||||
LEFT JOIN {{ ref('silver__contract_reads') }} t
|
||||
ON s.contract_address = t.contract_address
|
||||
AND s.block_date = t.block_date
|
||||
AND t.platform = 'eigenlayer-v1'
|
||||
AND t.function_name = 'underlyingToken'
|
||||
AND t.result_hex IS NOT NULL
|
||||
AND LENGTH(t.result_hex) >= 42
|
||||
WHERE s.platform = 'eigenlayer-v1'
|
||||
AND s.function_name = 'totalShares'
|
||||
AND s.result_hex IS NOT NULL
|
||||
{% if is_incremental() %}
|
||||
AND s.modified_timestamp > (SELECT MAX(modified_timestamp) FROM {{ this }} WHERE component = 'strategy')
|
||||
{% endif %}
|
||||
),
|
||||
|
||||
combined_tvl AS (
|
||||
SELECT block_date, block_number, contract_address, address, token_address, amount_hex, amount_raw, component
|
||||
FROM eigenpod_tvl
|
||||
UNION ALL
|
||||
SELECT block_date, block_number, contract_address, address, token_address, amount_hex, amount_raw, component
|
||||
FROM strategy_tvl
|
||||
)
|
||||
|
||||
SELECT
|
||||
ct.block_number,
|
||||
ct.block_date,
|
||||
ct.contract_address,
|
||||
ct.address,
|
||||
ct.token_address,
|
||||
ct.amount_hex,
|
||||
ct.amount_raw,
|
||||
'eigenlayer' AS protocol,
|
||||
'v1' AS version,
|
||||
'eigenlayer-v1' AS platform,
|
||||
ct.component,
|
||||
{{ dbt_utils.generate_surrogate_key(['ct.block_date','ct.contract_address','ct.token_address']) }} AS eigenlayer_v1_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM combined_tvl ct
|
||||
WHERE ct.amount_raw IS NOT NULL AND ct.amount_raw > 0
|
||||
QUALIFY ROW_NUMBER() OVER (PARTITION BY eigenlayer_v1_tvl_id ORDER BY ct.block_date DESC) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__eigenlayer_v1_tvl
|
||||
description: '{{ doc("eigenlayer_v1_tvl_table_doc") }}'
|
||||
@ -0,0 +1,73 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'ethena_v1_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
-- Ethena TVL: totalSupply of USDe (sourced from stablecoins reads)
|
||||
-- USDe: 0x4c9edd5852cd905f086c759e8383e09bff1e68b3
|
||||
WITH reads AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(result_hex) <= 4300
|
||||
AND result_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(result_hex) AS bigint)END,
|
||||
CASE
|
||||
WHEN result_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(result_hex, '0')) AS bigint)
|
||||
END
|
||||
) AS amount_raw,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
platform = 'stablecoins-v1'
|
||||
AND function_name = 'totalSupply'
|
||||
AND LOWER(contract_address) = LOWER('0x4c9edd5852cd905f086c759e8383e09bff1e68b3') -- USDe
|
||||
AND result_hex IS NOT NULL
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
NULL AS address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
'ethena' AS protocol,
|
||||
'v1' AS version,
|
||||
CONCAT(
|
||||
protocol,
|
||||
'-',
|
||||
version
|
||||
) AS platform,
|
||||
{{ dbt_utils.generate_surrogate_key(['block_date','contract_address','address','platform']) }} AS ethena_v1_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads
|
||||
WHERE
|
||||
amount_raw IS NOT NULL
|
||||
AND amount_raw > 0 qualify ROW_NUMBER() over (
|
||||
PARTITION BY ethena_v1_tvl_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC
|
||||
) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__ethena_v1_tvl
|
||||
description: '{{ doc("ethena_v1_tvl_table_doc") }}'
|
||||
@ -58,7 +58,7 @@ SELECT
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','platform']
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS lido_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
|
||||
@ -0,0 +1,71 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'morpho_blue_v1_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH reads AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(result_hex) <= 4300
|
||||
AND result_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(result_hex) AS bigint)END,
|
||||
CASE
|
||||
WHEN result_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(result_hex, '0')) AS bigint)
|
||||
END
|
||||
) AS amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
platform = 'morpho-v1'
|
||||
AND function_name = 'balanceOf'
|
||||
AND result_hex IS NOT NULL
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(['block_date','contract_address','address','platform']) }} AS morpho_blue_v1_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads
|
||||
WHERE
|
||||
amount_raw IS NOT NULL
|
||||
AND amount_raw > 0 qualify ROW_NUMBER() over (
|
||||
PARTITION BY morpho_blue_v1_tvl_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC
|
||||
) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__morpho_blue_v1_tvl
|
||||
description: '{{ doc("morpho_blue_v1_tvl_table_doc") }}'
|
||||
@ -0,0 +1,69 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'nado_v1_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH reads AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(amount_hex) <= 4300
|
||||
AND amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(amount_hex) AS bigint)END,
|
||||
CASE
|
||||
WHEN amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(amount_hex, '0')) AS bigint)
|
||||
END
|
||||
) AS amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
_inserted_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
platform = 'nado-v1'
|
||||
AND amount_raw IS NOT NULL
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS nado_v1_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads qualify(ROW_NUMBER() over(PARTITION BY nado_v1_tvl_id
|
||||
ORDER BY
|
||||
_inserted_timestamp DESC)) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__nado_v1_tvl
|
||||
description: '{{ doc("nado_v1_tvl_table_doc") }}'
|
||||
@ -0,0 +1,69 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'rocketpool_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH reads AS (
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(amount_hex) <= 4300
|
||||
AND amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(amount_hex) AS bigint)END,
|
||||
CASE
|
||||
WHEN amount_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(amount_hex, '0')) AS bigint)
|
||||
END
|
||||
) AS amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
platform = 'rocketpool-v1'
|
||||
AND amount_raw IS NOT NULL
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS rocketpool_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads qualify(ROW_NUMBER() over(PARTITION BY rocketpool_tvl_id
|
||||
ORDER BY
|
||||
modified_timestamp DESC)) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__rocketpool_v1_tvl
|
||||
description: '{{ doc("rocketpool_v1_tvl_table_doc") }}'
|
||||
@ -21,13 +21,23 @@
|
||||
(ref('silver_tvl__superchain_slipstream_v1_tvl'), 12, 'superchain-slipstream-v1'),
|
||||
(ref('silver_tvl__binance_v1_tvl'), 12, 'binance-v1'),
|
||||
(ref('silver_tvl__curve_v1_tvl'), 10, 'curve-v1'),
|
||||
(ref('silver_tvl__eigenlayer_v1_tvl'), 12, 'eigenlayer-v1'),
|
||||
(ref('silver_tvl__ethena_v1_tvl'), 12, 'ethena-v1'),
|
||||
(ref('silver_tvl__etherfi_v1_tvl_agg'), 12, 'etherfi-v1'),
|
||||
(ref('silver_tvl__lido_v1_tvl'), 12, 'lido-v1'),
|
||||
(ref('silver_tvl__rocketpool_v1_tvl'), 12, 'rocketpool-v1'),
|
||||
(ref('silver_tvl__sky_v1_tvl'), 12, 'sky-v1'),
|
||||
(ref('silver_tvl__tornado_cash_v1_tvl'), 9, 'tornado_cash-v1'),
|
||||
(ref('silver_tvl__uniswap_v1_tvl'), 9, 'uniswap-v1'),
|
||||
(ref('silver_tvl__uniswap_v2_tvl'), 9, 'uniswap-v2'),
|
||||
(ref('silver_tvl__uniswap_v3_tvl'), 9, 'uniswap-v3'),
|
||||
(ref('silver_tvl__uniswap_v4_tvl'), 9, 'uniswap-v4')
|
||||
(ref('silver_tvl__uniswap_v4_tvl'), 9, 'uniswap-v4'),
|
||||
(ref('silver_tvl__morpho_blue_v1_tvl'), 12, 'morpho-v1'),
|
||||
(ref('silver_tvl__compound_v1_tvl'), 12, 'compound-v1'),
|
||||
(ref('silver_tvl__compound_v2_tvl'), 12, 'compound-v2'),
|
||||
(ref('silver_tvl__compound_v3_tvl'), 12, 'compound-v3'),
|
||||
(ref('silver_tvl__nado_v1_tvl'), 12, 'nado-v1'),
|
||||
(ref('silver_tvl__polymarket_v1_tvl'), 12, 'polymarket-v1')
|
||||
] %}
|
||||
|
||||
WITH all_tvl AS (
|
||||
|
||||
@ -0,0 +1,73 @@
|
||||
{# Get variables #}
|
||||
{% set vars = return_vars() %}
|
||||
|
||||
{# Log configuration details #}
|
||||
{{ log_model_details() }}
|
||||
|
||||
{{ config(
|
||||
materialized = 'incremental',
|
||||
incremental_strategy = 'delete+insert',
|
||||
unique_key = 'sky_v1_tvl_id',
|
||||
tags = ['silver','defi','tvl','curated_daily']
|
||||
) }}
|
||||
|
||||
WITH reads AS (
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
result_hex AS amount_hex,
|
||||
IFNULL(
|
||||
CASE
|
||||
WHEN LENGTH(result_hex) <= 4300
|
||||
AND result_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(result_hex) AS BIGINT)
|
||||
END,
|
||||
CASE
|
||||
WHEN result_hex IS NOT NULL THEN TRY_CAST(utils.udf_hex_to_int(RTRIM(result_hex, '0')) AS BIGINT)
|
||||
END
|
||||
) AS amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
modified_timestamp
|
||||
FROM
|
||||
{{ ref('silver__contract_reads') }}
|
||||
WHERE
|
||||
platform = 'sky-v1'
|
||||
AND result_hex IS NOT NULL
|
||||
|
||||
{% if is_incremental() %}
|
||||
AND modified_timestamp > (
|
||||
SELECT
|
||||
MAX(modified_timestamp)
|
||||
FROM
|
||||
{{ this }}
|
||||
)
|
||||
{% endif %}
|
||||
)
|
||||
|
||||
SELECT
|
||||
block_number,
|
||||
block_date,
|
||||
contract_address,
|
||||
address,
|
||||
contract_address AS token_address,
|
||||
amount_hex,
|
||||
amount_raw,
|
||||
protocol,
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(['block_date','contract_address','address','platform']) }} AS sky_v1_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
'{{ invocation_id }}' AS _invocation_id
|
||||
FROM
|
||||
reads
|
||||
WHERE
|
||||
amount_raw IS NOT NULL
|
||||
AND amount_raw > 0
|
||||
QUALIFY ROW_NUMBER() OVER (
|
||||
PARTITION BY sky_v1_tvl_id
|
||||
ORDER BY modified_timestamp DESC
|
||||
) = 1
|
||||
@ -0,0 +1,4 @@
|
||||
version: 2
|
||||
models:
|
||||
- name: silver_tvl__sky_v1_tvl
|
||||
description: '{{ doc("sky_v1_tvl_table_doc") }}'
|
||||
@ -113,7 +113,7 @@ SELECT
|
||||
version,
|
||||
platform,
|
||||
{{ dbt_utils.generate_surrogate_key(
|
||||
['block_date','contract_address','platform']
|
||||
['block_date','contract_address','address','platform']
|
||||
) }} AS uniswap_v2_tvl_id,
|
||||
SYSDATE() AS inserted_timestamp,
|
||||
SYSDATE() AS modified_timestamp,
|
||||
|
||||
@ -101,4 +101,69 @@ Sums getReserves() values for token0 and token1 across all AMM pools
|
||||
Methodology:
|
||||
Sums token0 and token1 balances held by each Slipstream (CL) pool contract via balanceOf()
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs eigenlayer_v1_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Sums (1) native ETH restaked via EigenPods by matching PodDeployed events with beacon chain validator balances and (2) LST/ERC20 tokens deposited in strategy contracts via totalShares()
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs ethena_v1_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Total supply of USDe (synthetic dollar)
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs morpho_blue_v1_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Sums balanceOf each unique token (collateralToken + loanToken from CreateMarket events) held by the MorphoBlue singleton contract
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs rocketpool_v1_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Total supply of rETH (Rocket Pool's liquid staking token representing staked ETH)
|
||||
|
||||
Note: This represents the liquid staking portion only. Other methodologies may report additional TVL (operator-staked funds) by including node operator collateral (nodeEthProvided), matched ETH from the deposit pool, and pending deposits.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs compound_v1_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Sums all token balances held by the MoneyMarket contract (0x3FDA67f7583380E67ef93072294a7fAc882FD7E7) via balanceOf(). Collateral markets are discovered dynamically via collateralMarkets() calls.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs compound_v2_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Sums all underlying token balances held by each cToken contract via balanceOf()
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs compound_v3_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Sums balanceOf() for base tokens + all collateral assets held by each Comet market contract. Collateral assets are discovered dynamically via getAssetInfo() calls.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs sky_v1_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Sums balanceOf() for collateral tokens held by each collateral join contract (discovered via MCD_VAT rely events and gem() calls) plus USDC held by the PSM wallet.
|
||||
|
||||
{% enddocs %}
|
||||
|
||||
{% docs nado_v1_tvl_table_doc %}
|
||||
|
||||
Methodology:
|
||||
Sums ERC20 token balances across clearinghouse and endpoint contracts
|
||||
|
||||
{% enddocs %}
|
||||
@ -154,4 +154,11 @@ sources:
|
||||
database: base
|
||||
schema: silver_tvl
|
||||
tables:
|
||||
- name: etherfi_v1_tvl
|
||||
- name: etherfi_v1_tvl
|
||||
- name: ethereum_beacon_chain
|
||||
database: >-
|
||||
{{ 'ETHEREUM_DEV' if '_DEV' in target.database.upper() else 'ETHEREUM' }}
|
||||
schema: beacon_chain
|
||||
tables:
|
||||
- name: fact_validators
|
||||
- name: fact_blocks
|
||||
Loading…
Reference in New Issue
Block a user