This commit is contained in:
drethereum 2026-01-09 15:02:42 -07:00
parent 7216dee783
commit ce0c35d45b
14 changed files with 226 additions and 24 deletions

View File

@ -24,6 +24,7 @@
'CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST': ['hashflow-v1','gmx-v1','woofi-v3','woofi-v1'],
'CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST': ['trader_joe-v2','kyberswap-v1','kyberswap-v2','zyberswap-v2','fraxswap-v1'],
'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['hyperliquid-v1','across-v2','multichain-v7','symbiosis-v1','hop-v1','everclear-v1'],
'CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS': '0x6c247b1f6182318877311737bac0844baa518f5e',
'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': {
'uniswap': {
'v2': {

View File

@ -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_MORPHO_BLUE_ADDRESS': '0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb',
'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': {
'uniswap': {
'v2': {

View File

@ -28,6 +28,7 @@
'CURATED_DEFI_LENDING_RECENCY_EXCLUSION_LIST': ['silo-v1','aave-v1','flux-v1','aave-v2','aave-v2.1','sturdy-v1','silo-v2'],
'CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST': ['hashflow-v1','pancakeswap-v2','synthetix-v1','uniswap-v1'],
'CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST': ['kyberswap-v2','uniswap-v1'],
'CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS': '0xbbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb',
'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['ronin_axie_bridge-v1','multichain-v7','symbiosis-v1','axie_infinity-v2','across-v1','near_rainbow_bridge-v1','hop-v1','everclear-v1'],
'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': {
'uniswap': {

View File

@ -23,6 +23,7 @@
'CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST': ['woofi-v1','hashflow-v1'],
'CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST': ['fraxswap-v1','kyberswap-v2','sushiswap-v1','uniswap-v2'],
'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['eywa-v1','across-v2','meson-v1','symbiosis-v1','multichain-v7','hop-v1','everclear-v1'],
'CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS': '0xce95afbb8ea029495c66020883f87aae8864af92',
'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': {
'uniswap': {
'v2': {

View File

@ -25,6 +25,7 @@
'CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST': ['woofi-v1','hashflow-v1'],
'CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST': ['kyberswap-v2','curve-v1'],
'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['hop-v1','multichain-v7','symbiosis-v1','across-v2'],
'CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS': '0x1bf0c2541f820e775182832f06c0b7fc27a25f67',
'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': {
'uniswap': {
'v2': {

View File

@ -309,6 +309,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_MORPHO_BLUE_ADDRESS = get_var('CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS', '') %}
{# Return the entire namespace as a dictionary #}
{{ return(ns) }}

View File

@ -0,0 +1,92 @@
{# 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 = ['silver','contract_reads']
) }}
WITH market_tokens AS (
-- Get unique tokens from CreateMarket events
SELECT
DISTINCT token_address
FROM
(
-- Collateral tokens
SELECT
LOWER(
decoded_log :marketParams :collateralToken :: STRING
) AS token_address
FROM
{{ ref('core__ez_decoded_event_logs') }}
WHERE
contract_address = '{{ vars.CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS }}'
AND event_name = 'CreateMarket'
{% if is_incremental() %}
AND modified_timestamp > (
SELECT
MAX(modified_timestamp)
FROM
{{ this }}
)
{% endif %}
UNION
-- Loan tokens
SELECT
LOWER(
decoded_log :marketParams :loanToken :: STRING
) AS token_address
FROM
{{ ref('core__ez_decoded_event_logs') }}
WHERE
contract_address = '{{ vars.CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS }}'
AND event_name = 'CreateMarket'
{% 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,
'{{ vars.CURATED_DEFI_TVL_MORPHO_BLUE_ADDRESS }}' AS address,
'balanceOf' AS function_name,
'0x70a08231' AS function_sig,
CONCAT(
'0x70a08231',
LPAD(
SUBSTR(
'{{ vars.CURATED_DEFI_TVL_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

View File

@ -40,6 +40,7 @@
{% 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')) %}
WITH all_records AS (
{% for model, type in models %}

View File

@ -78,7 +78,8 @@ strategy_tvl AS (
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
'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

View File

@ -2,40 +2,47 @@
{% 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,
modified_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
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 }})
AND modified_timestamp > (
SELECT
MAX(modified_timestamp)
FROM
{{ this }}
)
{% endif %}
)
SELECT
block_number,
block_date,
@ -46,11 +53,21 @@ SELECT
amount_raw,
'ethena' AS protocol,
'v1' AS version,
'ethena-v1' AS platform,
{{ dbt_utils.generate_surrogate_key(['block_date','contract_address']) }} AS ethena_v1_tvl_id,
CONCAT(
protocol,
'-',
version
) AS platform,
{{ dbt_utils.generate_surrogate_key(['block_date','contract_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
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

View File

@ -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

View File

@ -0,0 +1,4 @@
version: 2
models:
- name: silver_tvl__morpho_blue_v1_tvl
description: '{{ doc("morpho_blue_v1_tvl_table_doc") }}'

View File

@ -29,7 +29,8 @@
(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')
] %}
WITH all_tvl AS (

View File

@ -113,6 +113,13 @@ Sums (1) native ETH restaked via EigenPods by matching PodDeployed events with b
{% docs ethena_v1_tvl_table_doc %}
Methodology:
totalSupply of USDe (synthetic dollar)
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 %}