diff --git a/.github/workflows/dbt_run_template_docs_update.yml b/.github/workflows/dbt_run_template_docs_update.yml index cc38ea5b..27833777 100644 --- a/.github/workflows/dbt_run_template_docs_update.yml +++ b/.github/workflows/dbt_run_template_docs_update.yml @@ -2,6 +2,11 @@ name: dbt_run_template_docs_update on: workflow_call: + inputs: + resource_id: + description: 'DDS resource ID to refresh (defaults to repository name if not provided)' + required: false + type: string jobs: run_dbt_jobs_refresh: @@ -79,8 +84,19 @@ jobs: run: | git push -f --set-upstream origin docs - notify-failure: + refresh-dds-cache: needs: [run_dbt_jobs_refresh] + if: success() + uses: FlipsideCrypto/analytics-workflow-templates/.github/workflows/refresh_dds.yml@main + with: + resource_id: ${{ inputs.resource_id }} + api_url: ${{ github.ref == 'refs/heads/main' && 'https://dds-api.fsc-data-platform.io' || 'https://dds-api.fsc-data-platform-stg.io' }} + force_refresh: true + secrets: + DDS_API_KEY: ${{ github.ref == 'refs/heads/main' && secrets.DDS_PROD_API_KEY || secrets.DDS_STG_API_KEY }} + + notify-failure: + needs: [run_dbt_jobs_refresh, refresh-dds-cache] if: failure() uses: ./.github/workflows/slack_notify.yml secrets: diff --git a/data/admin__repos.csv b/data/admin__repos.csv index 274eec74..1edca5b4 100644 --- a/data/admin__repos.csv +++ b/data/admin__repos.csv @@ -12,8 +12,10 @@ gnosis_vars,gnosis-models,gnosis,true ink_vars,ink-models,ink,true kaia_vars,kaia-models,kaia,false mantle_vars,mantle-models,mantle,false +monad_vars,monad-models,monad,true optimism_vars,optimism-models,optimism,true polygon_vars,polygon-models,polygon,true ronin_vars,ronin-models,ronin,false scroll_vars,scroll-models,scroll,false +somnia_vars,somnia-models,somnia,true swell_vars,swell-models,swell,false \ No newline at end of file diff --git a/macros/curated_package/tests/curated_recency.sql b/macros/curated_package/tests/curated_recency.sql index 6b0c5e6a..9d558fdf 100644 --- a/macros/curated_package/tests/curated_recency.sql +++ b/macros/curated_package/tests/curated_recency.sql @@ -50,7 +50,8 @@ WITH source AS ( FROM source WHERE - (latest_timestamp < threshold_ts + latest_timestamp IS NOT NULL + AND (latest_timestamp < threshold_ts OR (percent_delta < {{ percent_delta_threshold }} AND percent_delta <> 0)) {% if type == 'dex_swaps' %} AND platform NOT IN ('{{ vars.CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST | join("', '") }}') diff --git a/macros/curated_package/tests/stablecoins_date_gaps.sql b/macros/curated_package/tests/stablecoins_date_gaps.sql index eb34c62f..0f5824b6 100644 --- a/macros/curated_package/tests/stablecoins_date_gaps.sql +++ b/macros/curated_package/tests/stablecoins_date_gaps.sql @@ -1,4 +1,4 @@ -{% test stablecoins_date_gaps(model, lookback_days=7) %} +{% test stablecoins_date_gaps(model, lookback_days=3) %} WITH recent_data AS ( SELECT diff --git a/macros/curated_package/tests/stablecoins_imputed.sql b/macros/curated_package/tests/stablecoins_imputed.sql index 09dca40a..cdd6f507 100644 --- a/macros/curated_package/tests/stablecoins_imputed.sql +++ b/macros/curated_package/tests/stablecoins_imputed.sql @@ -1,4 +1,4 @@ -{% test stablecoins_is_imputed_false(model, lookback_days=7) %} +{% test stablecoins_is_imputed_false(model, lookback_days=3) %} WITH active_pairs AS ( SELECT DISTINCT diff --git a/macros/global/tests/dynamic_tests.sql b/macros/global/tests/dynamic_tests.sql index 65eb4668..6ebf57b0 100644 --- a/macros/global/tests/dynamic_tests.sql +++ b/macros/global/tests/dynamic_tests.sql @@ -1,11 +1,26 @@ -{% macro get_where_subquery(relation) -%} - {%- set where = config.get('where') -%} +{% macro get_where_subquery(relation, where_override=none) -%} + {# + Get where clause from config or override parameter. + This macro is namespace-agnostic and can be imported into any dbt project. + + Args: + relation: The relation (model/table) to query + where_override: Optional override for the where clause (useful when config context may vary) + #} + + {# Get where clause - prefer override, then config, then none #} + {%- if where_override is not none -%} + {%- set where = where_override -%} + {%- else -%} + {%- set where = config.get('where', none) -%} + {%- endif -%} {%- set interval_vars = namespace( interval_type = none, interval_value = none ) -%} + {# Check for interval variables - these work across all namespaces #} {% set intervals = { 'minutes': var('minutes', none), 'hours': var('hours', none), @@ -22,59 +37,86 @@ {% break %} {% endif %} {% endfor %} - - {% if 'dbt_expectations_expect_column_values_to_be_in_type_list' in this | string %} + + {% if 'dbt_expectations_expect_column_values_to_be_in_type_list' in this | string %} {% do return(relation) %} {% endif %} - + {%- set ts_vars = namespace( timestamp_column = none, filter_condition = none ) -%} - {% if where %} - {% if "__timestamp_filter__" in where %} - {% set columns = adapter.get_columns_in_relation(relation) %} - {% set column_names = columns | map(attribute='name') | list %} + {# Build timestamp filter if interval vars are set #} + {% if interval_vars.interval_type is not none and interval_vars.interval_value is not none %} + {% set columns = adapter.get_columns_in_relation(relation) %} + {# Search for common timestamp column names in priority order #} + {% for column in columns %} + {% if column.name == 'MODIFIED_TIMESTAMP' %} + {% set ts_vars.timestamp_column = 'MODIFIED_TIMESTAMP' %} + {% break %} + {% endif %} + {% endfor %} + + {% if not ts_vars.timestamp_column %} {% for column in columns %} - {% if column.name == 'MODIFIED_TIMESTAMP' %} - {% set ts_vars.timestamp_column = 'MODIFIED_TIMESTAMP' %} + {% if column.name == '_INSERTED_TIMESTAMP' %} + {% set ts_vars.timestamp_column = '_INSERTED_TIMESTAMP' %} {% break %} {% endif %} {% endfor %} - - {% if not ts_vars.timestamp_column %} - {% for column in columns %} - {% if column.name == '_INSERTED_TIMESTAMP' %} - {% set ts_vars.timestamp_column = '_INSERTED_TIMESTAMP' %} - {% break %} - {% endif %} - {% endfor %} - {% endif %} - - {% if not ts_vars.timestamp_column %} - {% for column in columns %} - {% if column.name == 'BLOCK_TIMESTAMP' %} - {% set ts_vars.timestamp_column = 'BLOCK_TIMESTAMP' %} - {% break %} - {% endif %} - {% endfor %} - {% endif %} - - {% if ts_vars.timestamp_column is not none %} - {% set ts_vars.filter_condition = ts_vars.timestamp_column ~ " >= dateadd(" ~ - interval_vars.interval_type ~ ", -" ~ - interval_vars.interval_value ~ ", current_timestamp())" %} - {% set where = where | replace("__timestamp_filter__", ts_vars.filter_condition) %} - {% endif %} {% endif %} - + + {% if not ts_vars.timestamp_column %} + {% for column in columns %} + {% if column.name == 'BLOCK_TIMESTAMP' %} + {% set ts_vars.timestamp_column = 'BLOCK_TIMESTAMP' %} + {% break %} + {% endif %} + {% endfor %} + {% endif %} + + {% if not ts_vars.timestamp_column %} + {% for column in columns %} + {% if column.name == 'BLOCK_DATE' %} + {% set ts_vars.timestamp_column = 'BLOCK_DATE' %} + {% break %} + {% endif %} + {% endfor %} + {% endif %} + + {# Build timestamp filter condition if we found a timestamp column #} + {% if ts_vars.timestamp_column is not none %} + {% set ts_vars.filter_condition = ts_vars.timestamp_column ~ " >= dateadd(" ~ + interval_vars.interval_type ~ ", -" ~ + interval_vars.interval_value ~ ", SYSDATE())" %} + {% endif %} + {% endif %} + + {# Handle where clause with timestamp filtering #} + {% if ts_vars.filter_condition is not none %} + {# We have a timestamp filter to apply #} + {% if where %} + {# Combine timestamp filter with existing where using AND #} + {% set where = ts_vars.filter_condition ~ " AND (" ~ where ~ ")" %} + {% else %} + {# No existing where clause, use just the timestamp filter #} + {% set where = ts_vars.filter_condition %} + {% endif %} + {% endif %} + + {# Return filtered relation - always as a subquery for consistency #} + {% if where %} {%- set filtered -%} - (select * from {{ relation }} where {{ where }}) dbt_subquery + (select * from {{ relation }} where {{ where }}) {%- endset -%} {% do return(filtered) %} {%- else -%} - {% do return(relation) %} + {# Return relation as a subquery even when no where clause for consistent behavior #} + {%- set filtered -%} + (select * from {{ relation }}) + {%- endset -%} + {% do return(filtered) %} {%- endif -%} {%- endmacro %} \ No newline at end of file diff --git a/macros/global/variables/project_vars/arbitrum_vars.sql b/macros/global/variables/project_vars/arbitrum_vars.sql index 46d3b7f5..8f676508 100644 --- a/macros/global/variables/project_vars/arbitrum_vars.sql +++ b/macros/global/variables/project_vars/arbitrum_vars.sql @@ -23,7 +23,7 @@ 'CURATED_DEFI_LENDING_RECENCY_EXCLUSION_LIST': ['radiant-v2','radiant-v1'], '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-v1','multichain-v7','symbiosis-v1','hop-v1'], + 'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['hyperliquid-v1','across-v2','multichain-v7','symbiosis-v1','hop-v1'], 'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': { 'uniswap': { 'v2': { @@ -187,8 +187,8 @@ 'CURATED_DEFI_DEX_DEXALOT_DEST_CHAIN_ID': 42161, 'CURATED_DEFI_BRIDGE_CONTRACT_MAPPING': { 'across': { - 'v1': { - 'funds_deposited': '0xe35e9842fceaca96570b734083f4a58e8f7c5f2a' + 'v2': { + 'funds_deposited': ['0xe35e9842fceaca96570b734083f4a58e8f7c5f2a','0xb88690461ddbab6f04dfad7df66b7725942feb9c'] }, 'v3': { 'funds_deposited': '0xe35e9842fceaca96570b734083f4a58e8f7c5f2a' diff --git a/macros/global/variables/project_vars/base_vars.sql b/macros/global/variables/project_vars/base_vars.sql index 519f52ed..ac94925a 100644 --- a/macros/global/variables/project_vars/base_vars.sql +++ b/macros/global/variables/project_vars/base_vars.sql @@ -33,7 +33,7 @@ 'CURATED_DEFI_LENDING_RECENCY_EXCLUSION_LIST': ['seamless-v1'], '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-v1'], + 'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['symbiosis-v1','hop-v1','across-v2'], 'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': { 'uniswap': { 'v2': { @@ -139,7 +139,7 @@ 'CURATED_DEFI_DEX_DEXALOT_DEST_CHAIN_ID': 8453, 'CURATED_DEFI_BRIDGE_CONTRACT_MAPPING': { 'across': { - 'v1': { + 'v2': { 'funds_deposited': '0x09aea4b2242abc8bb4bb78d537a67a245a7bec64' }, 'v3': { diff --git a/macros/global/variables/project_vars/boba_vars.sql b/macros/global/variables/project_vars/boba_vars.sql index 1960dada..a365ab27 100644 --- a/macros/global/variables/project_vars/boba_vars.sql +++ b/macros/global/variables/project_vars/boba_vars.sql @@ -60,6 +60,13 @@ 'token_bridge_swap': '0x432036208d2717394d2614d6697c46df3ed69540' } } + }, + 'CURATED_DEFI_LENDING_CONTRACT_MAPPING': { + 'wefi': { + 'v1': { + 'comp_v2_origin_from_address': '0x99a219f4c322993a101258b0a157eacf5b447d68' + } + } } } %} diff --git a/macros/global/variables/project_vars/ethereum_vars.sql b/macros/global/variables/project_vars/ethereum_vars.sql index a22e9c5d..c7ac3a24 100644 --- a/macros/global/variables/project_vars/ethereum_vars.sql +++ b/macros/global/variables/project_vars/ethereum_vars.sql @@ -166,8 +166,8 @@ }, 'CURATED_DEFI_BRIDGE_CONTRACT_MAPPING': { 'across': { - 'v1': { - 'funds_deposited': '0x5c7bcd6e7de5423a257d81b442095a1a6ced35c5' + 'v2': { + 'funds_deposited': ['0x5c7bcd6e7de5423a257d81b442095a1a6ced35c5','0x4d9079bb4165aeb4084c526a32695dcfd2f77381'] }, 'v3': { 'funds_deposited': '0x5c7bcd6e7de5423a257d81b442095a1a6ced35c5' diff --git a/macros/global/variables/project_vars/monad_vars.sql b/macros/global/variables/project_vars/monad_vars.sql index 03e07de1..ef3502c8 100644 --- a/macros/global/variables/project_vars/monad_vars.sql +++ b/macros/global/variables/project_vars/monad_vars.sql @@ -4,13 +4,19 @@ 'GLOBAL_NODE_PROVIDER': 'quicknode', 'GLOBAL_NODE_URL': "{URL}", 'GLOBAL_NODE_VAULT_PATH': 'Vault/prod/evm/quicknode/monad/mainnet', - 'GLOBAL_WRAPPED_NATIVE_ASSET_ADDRESS': '0x3a704ad3e4784b935ae029171adcf57ee7988198', + 'GLOBAL_WRAPPED_NATIVE_ASSET_ADDRESS': '0x3bd359c1119da7da1d913d1c4d2b7c461115433a', 'GLOBAL_WRAPPED_NATIVE_ASSET_SYMBOL': 'WMON', 'GLOBAL_NATIVE_ASSET_SYMBOL': 'MON', 'MAIN_SL_BLOCKS_PER_HOUR': 10000, 'MAIN_PRICES_NATIVE_SYMBOLS': 'MON', + 'CURATED_START_TIMESTAMP': '2025-11-18 00:00:00', 'MAIN_PRICES_NATIVE_BLOCKCHAINS': 'monad', 'MAIN_PRICES_PROVIDER_PLATFORMS': 'monad', + 'DECODER_SILVER_CONTRACT_ABIS_EXPLORER_NAME': 'etherscan', + 'DECODER_SL_CONTRACT_ABIS_EXPLORER_VAULT_PATH': 'Vault/prod/evm/etherscan/pro_plus', + 'DECODER_SL_CONTRACT_ABIS_EXPLORER_URL': 'https://api.etherscan.io/v2/api?apikey={KEY}&chainid=143&module=contract&action=getabi&address=', + 'DECODER_SL_CONTRACT_ABIS_EXPLORER_URL_SUFFIX': '&tag=latest', + 'DECODER_SILVER_CONTRACT_ABIS_ETHERSCAN_ENABLED': true, 'MAIN_GHA_STREAMLINE_CHAINHEAD_CRON': '24,54 * * * *', 'BALANCES_SL_DAILY_REALTIME_LOOKBACK_DAYS': -2, 'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': { @@ -52,6 +58,11 @@ } }, 'CURATED_DEFI_BRIDGE_CONTRACT_MAPPING': { + 'across': { + 'v3': { + 'funds_deposited': '0xd2ecb3afe598b746f8123cae365a598da831a449' + } + }, 'layerzero': { 'v2': { 'bridge': '0x6f475642a6e85809b1c36fa62763669b1b48dd5b' @@ -60,7 +71,7 @@ 'axelar': { 'v1': { 'gateway': '0xe432150cce91c13a887f7d836923d5597add8e31', - 'gas_service': '0xbe406f0189a0b4cf3a05c286473d23791dd44cc6' + 'gas_service': '0x2d5d7d31f671f86c782533cc367f14109a082712' } }, 'wormhole': { @@ -83,6 +94,18 @@ 'source': '0xef4fb24ad0916217251f553c0596f8edc630eb66' } } + }, + 'CURATED_DEFI_LENDING_CONTRACT_MAPPING': { + 'morpho': { + 'v1': { + 'morpho_blue_address': '0xd5d960e8c380b724a48ac59e2dff1b2cb4a1eaee' + } + }, + 'neverland': { + 'v1': { + 'aave_version_address': '0x80f00661b13cc5f6ccd3885be7b4c9c67545d585' + } + } } } %} diff --git a/macros/global/variables/project_vars/optimism_vars.sql b/macros/global/variables/project_vars/optimism_vars.sql index dd12fe1d..5a0bf41d 100644 --- a/macros/global/variables/project_vars/optimism_vars.sql +++ b/macros/global/variables/project_vars/optimism_vars.sql @@ -22,7 +22,7 @@ 'CURATED_DEFI_LENDING_RECENCY_EXCLUSION_LIST': ['granary-v1','sonne-v1'], '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-v1','meson-v1','symbiosis-v1','multichain-v7','hop-v1'], + 'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['eywa-v1','across-v2','meson-v1','symbiosis-v1','multichain-v7','hop-v1'], 'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': { 'uniswap': { 'v2': { @@ -111,8 +111,8 @@ }, 'CURATED_DEFI_BRIDGE_CONTRACT_MAPPING': { 'across': { - 'v1': { - 'funds_deposited': '0x6f26bf09b1c792e3228e5467807a900a503c0281' + 'v2': { + 'funds_deposited': ['0x6f26bf09b1c792e3228e5467807a900a503c0281','0xa420b2d1c0841415a695b81e5b867bcd07dff8c9'] }, 'v3': { 'funds_deposited': '0x6f26bf09b1c792e3228e5467807a900a503c0281' diff --git a/macros/global/variables/project_vars/polygon_vars.sql b/macros/global/variables/project_vars/polygon_vars.sql index 45ffb636..db302a58 100644 --- a/macros/global/variables/project_vars/polygon_vars.sql +++ b/macros/global/variables/project_vars/polygon_vars.sql @@ -24,7 +24,7 @@ 'CURATED_DEFI_LENDING_RECENCY_EXCLUSION_LIST': ['aave-v2'], '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-v1'], + 'CURATED_DEFI_BRIDGE_RECENCY_EXCLUSION_LIST': ['hop-v1','multichain-v7','symbiosis-v1','across-v2'], 'CURATED_DEFI_DEX_SWAPS_CONTRACT_MAPPING': { 'uniswap': { 'v2': { @@ -113,8 +113,8 @@ }, 'CURATED_DEFI_BRIDGE_CONTRACT_MAPPING': { 'across': { - 'v1': { - 'funds_deposited': '0x9295ee1d8c5b022be115a2ad3c30c72e34e7f096' + 'v2': { + 'funds_deposited': ['0x9295ee1d8c5b022be115a2ad3c30c72e34e7f096','0x69b5c72837769ef1e7c164abc6515dcff217f920'] }, 'v3': { 'funds_deposited': '0x9295ee1d8c5b022be115a2ad3c30c72e34e7f096' diff --git a/macros/global/variables/project_vars/somnia_vars.sql b/macros/global/variables/project_vars/somnia_vars.sql index 13492905..0a2e142e 100644 --- a/macros/global/variables/project_vars/somnia_vars.sql +++ b/macros/global/variables/project_vars/somnia_vars.sql @@ -70,6 +70,13 @@ 'bridge': '0x78add880a697070c1e765ac44d65323a0dcce913' } } + }, + 'CURATED_DEFI_LENDING_CONTRACT_MAPPING': { + 'tokos': { + 'v1': { + 'aave_version_address': '0xec6758e6324c167db39b6908036240460a2b0168' + } + } } } %} diff --git a/macros/global/variables/return_vars.sql b/macros/global/variables/return_vars.sql index 10025fd2..d65e7656 100644 --- a/macros/global/variables/return_vars.sql +++ b/macros/global/variables/return_vars.sql @@ -274,6 +274,7 @@ {% set ns.CURATED_COMPLETE_LOOKBACK_HOURS = get_var('CURATED_COMPLETE_LOOKBACK_HOURS', '4 hours') %} {% set ns.CURATED_LOOKBACK_HOURS = get_var('CURATED_LOOKBACK_HOURS', '12 hours') %} {% set ns.CURATED_LOOKBACK_DAYS = get_var('CURATED_LOOKBACK_DAYS', '7 days') %} + {% set ns.CURATED_START_TIMESTAMP = get_var('CURATED_START_TIMESTAMP', '2000-01-01 00:00:00') %} {% set ns.CURATED_FR_MODELS = get_var('CURATED_FR_MODELS', []) %} {% set ns.CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST = get_var('CURATED_DEFI_DEX_SWAPS_RECENCY_EXCLUSION_LIST', []) %} {% set ns.CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST = get_var('CURATED_DEFI_DEX_LP_ACTIONS_RECENCY_EXCLUSION_LIST', []) %} diff --git a/models/curated_package/defi/bridge/silver/across/silver_bridge__across_fundsdeposited.sql b/models/curated_package/defi/bridge/silver/across/silver_bridge__across_fundsdeposited.sql index 56af55ee..e0f01410 100644 --- a/models/curated_package/defi/bridge/silver/across/silver_bridge__across_fundsdeposited.sql +++ b/models/curated_package/defi/bridge/silver/across/silver_bridge__across_fundsdeposited.sql @@ -18,7 +18,7 @@ WITH contract_mapping AS ( ) }} WHERE protocol = 'across' - AND version = 'v1' + AND version = 'v2' ), base_evt AS ( @@ -74,7 +74,7 @@ base_evt AS ( INNER JOIN contract_mapping m ON l.contract_address = m.contract_address WHERE - topics [0] :: STRING = '0xafc4df6845a4ab948b492800d3d8a25d538a102a2bc07cd01f1cfa097fddcff6' + topics [0] :: STRING IN ('0xafc4df6845a4ab948b492800d3d8a25d538a102a2bc07cd01f1cfa097fddcff6','0x4a4fc49abd237bfd7f4ac82d6c7a284c69daaea5154430cff04ad7482c6c4254') AND tx_succeeded {% if is_incremental() %} diff --git a/models/curated_package/defi/bridge/silver/ccip/silver_bridge__ccip_send_requested.sql b/models/curated_package/defi/bridge/silver/ccip/silver_bridge__ccip_send_requested.sql index c0c9775d..eeda3ea9 100644 --- a/models/curated_package/defi/bridge/silver/ccip/silver_bridge__ccip_send_requested.sql +++ b/models/curated_package/defi/bridge/silver/ccip/silver_bridge__ccip_send_requested.sql @@ -121,19 +121,19 @@ ccip_decoded AS ( utils.udf_hex_to_int( part [0] :: STRING ) :: STRING AS dest_chain_selector, - utils.udf_hex_to_int( + try_to_number(utils.udf_hex_to_int( part [2] :: STRING - ) :: INT AS fee_token_amount, + )) AS fee_token_amount, '0x' || SUBSTR( part [3] :: STRING, 25 ) AS original_sender, - utils.udf_hex_to_int( + try_to_number(utils.udf_hex_to_int( part [4] :: STRING - ) :: INT / 32 AS offset_receiver, - utils.udf_hex_to_int( + )) / 32 AS offset_receiver, + try_to_number(utils.udf_hex_to_int( part [offset_receiver + 4] :: STRING - ) :: INT * 2 AS receiver_length, + )) * 2 AS receiver_length, ( offset_receiver + 5 ) * 64 AS receiver_byteskip, @@ -143,12 +143,12 @@ ccip_decoded AS ( 25, 40 ) AS receiver_evm, - utils.udf_hex_to_int( + try_to_number(utils.udf_hex_to_int( part [6] :: STRING - ) :: INT / 32 AS offset_token_amount, - utils.udf_hex_to_int( + )) / 32 AS offset_token_amount, + try_to_number(utils.udf_hex_to_int( part [offset_token_amount + 4] :: STRING - ) :: INT AS token_amount_array, + )) AS token_amount_array, chain_name, trace_index, from_address, @@ -228,9 +228,9 @@ final_ccip AS ( token_array [0] :: STRING, 25 ) AS token_address, - utils.udf_hex_to_int( + try_to_number(utils.udf_hex_to_int( token_array [1] :: STRING - ) :: INT AS amount_unadj, + )) AS amount_unadj, dest_chain_selector, receiver_raw, receiver_evm, diff --git a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_borrows.yml b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_borrows.yml index 13d9ac50..e83bd912 100644 --- a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_borrows.yml +++ b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_borrows.yml @@ -22,6 +22,8 @@ models: - dbt_expectations.expect_row_values_to_have_recent_data: datepart: day interval: 3 + config: + severity: warn - name: EVENT_INDEX tests: - not_null: diff --git a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_deposits.yml b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_deposits.yml index bad959c5..e7295d80 100644 --- a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_deposits.yml +++ b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_deposits.yml @@ -22,6 +22,8 @@ models: - dbt_expectations.expect_row_values_to_have_recent_data: datepart: day interval: 3 + config: + severity: warn - name: EVENT_INDEX tests: - not_null: diff --git a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_flashloans.yml b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_flashloans.yml index b9c88dc5..621efa24 100644 --- a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_flashloans.yml +++ b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_flashloans.yml @@ -21,7 +21,9 @@ models: - not_null - dbt_expectations.expect_row_values_to_have_recent_data: datepart: day - interval: 14 + interval: 30 + config: + severity: warn - name: EVENT_INDEX tests: - not_null: diff --git a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_liquidations.yml b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_liquidations.yml index a0b055b6..c2475aab 100644 --- a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_liquidations.yml +++ b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_liquidations.yml @@ -22,6 +22,8 @@ models: - dbt_expectations.expect_row_values_to_have_recent_data: datepart: day interval: 30 + config: + severity: warn - name: EVENT_INDEX tests: - not_null: diff --git a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_repayments.yml b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_repayments.yml index 251e8e07..032ee938 100644 --- a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_repayments.yml +++ b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_repayments.yml @@ -22,6 +22,8 @@ models: - dbt_expectations.expect_row_values_to_have_recent_data: datepart: day interval: 3 + config: + severity: warn - name: EVENT_INDEX tests: - not_null: diff --git a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_withdraws.yml b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_withdraws.yml index e4b895a1..3c0664fd 100644 --- a/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_withdraws.yml +++ b/models/curated_package/defi/lending/silver/complete_lending/silver_lending__complete_lending_withdraws.yml @@ -22,6 +22,8 @@ models: - dbt_expectations.expect_row_values_to_have_recent_data: datepart: day interval: 3 + config: + severity: warn - name: EVENT_INDEX tests: - not_null: diff --git a/models/curated_package/defi/lending/silver/protocols/compound_v2/silver_lending__comp_v2_asset_details.sql b/models/curated_package/defi/lending/silver/protocols/compound_v2/silver_lending__comp_v2_asset_details.sql index 84b8dbb0..63ba0d07 100644 --- a/models/curated_package/defi/lending/silver/protocols/compound_v2/silver_lending__comp_v2_asset_details.sql +++ b/models/curated_package/defi/lending/silver/protocols/compound_v2/silver_lending__comp_v2_asset_details.sql @@ -54,6 +54,7 @@ log_pull AS ( topics [0] :: STRING in( '0x7ac369dbd14fa5ea3f473ed67cc9d598964a77501540ba6751eb0b3decf5870d', '0x70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364', + '0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f',--wefi topic '0x17d6db5ffe5a3d1c3d7a98194dca4f7d808d621e6ff9077ed574513d553a2a85'--joelend topic ) AND origin_from_address IN ( diff --git a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_borrows.sql b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_borrows.sql index adc5af92..aa62fa47 100644 --- a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_borrows.sql +++ b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_borrows.sql @@ -77,6 +77,7 @@ traces AS ( AND function_sig = '0x50d8cd4b' AND trace_succeeded AND tx_succeeded + AND block_timestamp >= '{{ vars.CURATED_START_TIMESTAMP }}' {% if is_incremental() %} AND modified_timestamp >= ( diff --git a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_deposits.sql b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_deposits.sql index fd2917ec..60d2f410 100644 --- a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_deposits.sql +++ b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_deposits.sql @@ -77,6 +77,7 @@ traces AS ( AND function_sig = '0xa99aad89' AND trace_succeeded AND tx_succeeded + AND block_timestamp >= '{{ vars.CURATED_START_TIMESTAMP }}' {% if is_incremental() %} AND modified_timestamp >= ( diff --git a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_flashloans.sql b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_flashloans.sql index 07b38b6d..f0b30572 100644 --- a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_flashloans.sql +++ b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_flashloans.sql @@ -53,6 +53,7 @@ flashloan AS( FROM morpho_blue_addresses ) + AND l.block_timestamp >= '{{ vars.CURATED_START_TIMESTAMP }}' {% if is_incremental() %} AND l.modified_timestamp >= ( diff --git a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_liquidations.sql b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_liquidations.sql index dccdebf9..4a9af8cc 100644 --- a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_liquidations.sql +++ b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_liquidations.sql @@ -64,6 +64,7 @@ traces AS ( AND function_sig = '0xd8eabcb8' AND trace_succeeded AND tx_succeeded + AND block_timestamp >= '{{ vars.CURATED_START_TIMESTAMP }}' {% if is_incremental() %} AND modified_timestamp >= ( diff --git a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_repayments.sql b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_repayments.sql index d967725f..b20a8dfd 100644 --- a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_repayments.sql +++ b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_repayments.sql @@ -77,6 +77,7 @@ traces AS ( AND function_sig = '0x20b76e81' AND trace_succeeded AND tx_succeeded + AND block_timestamp >= '{{ vars.CURATED_START_TIMESTAMP }}' {% if is_incremental() %} AND modified_timestamp >= ( diff --git a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_withdraws.sql b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_withdraws.sql index 02bc3d31..8408f9d1 100644 --- a/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_withdraws.sql +++ b/models/curated_package/defi/lending/silver/protocols/morpho/silver_lending__morpho_withdraws.sql @@ -77,6 +77,7 @@ traces AS ( AND function_sig = '0x5c2bea49' AND trace_succeeded AND tx_succeeded + AND block_timestamp >= '{{ vars.CURATED_START_TIMESTAMP }}' {% if is_incremental() %} AND modified_timestamp >= ( diff --git a/models/curated_package/defi/stablecoins/gold/defi__dim_stablecoins.sql b/models/curated_package/defi/stablecoins/gold/defi__dim_stablecoins.sql index 85ec850e..348f528d 100644 --- a/models/curated_package/defi/stablecoins/gold/defi__dim_stablecoins.sql +++ b/models/curated_package/defi/stablecoins/gold/defi__dim_stablecoins.sql @@ -25,7 +25,8 @@ WITH crosschain_stablecoins AS ( m.name ) AS NAME, m.decimals, - m.is_verified + m.is_verified, + m.is_verified_modified_timestamp FROM {{ source( 'crosschain_silver', @@ -56,7 +57,8 @@ manual_stablecoins AS ( ) AS symbol, m.name, m.decimals, - m.is_verified + m.is_verified, + m.is_verified_modified_timestamp FROM {{ ref('silver_stablecoins__stablecoins_mapping_seed') }} s @@ -86,16 +88,84 @@ all_stablecoins AS ( * FROM manual_stablecoins +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + t.contract_address, + m.symbol AS symbol_heal, + m.name AS name_heal, + CONCAT( + m.symbol, + ': ', + m.name + ) AS label_heal, + m.decimals AS decimals_heal, + m.is_verified AS is_verified_heal, + m.is_verified_modified_timestamp AS is_verified_modified_timestamp_heal + FROM + {{ this }} + t + INNER JOIN {{ ref('price__ez_asset_metadata') }} + m + ON t.contract_address = m.token_address + WHERE + m.blockchain = '{{ vars.GLOBAL_PROJECT_NAME }}' + AND ( + t.symbol IS NULL + OR t.name IS NULL + OR t.decimals IS NULL + ) +), +{% endif %} + +FINAL AS ( + SELECT + contract_address, + symbol, + NAME, + CONCAT( + symbol, + ': ', + NAME + ) AS label, + decimals, + is_verified, + is_verified_modified_timestamp + FROM + all_stablecoins + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + contract_address, + symbol_heal AS symbol, + name_heal AS NAME, + label_heal AS label, + decimals_heal AS decimals, + is_verified_heal AS is_verified, + is_verified_modified_timestamp_heal AS is_verified_modified_timestamp +FROM + heal_model +{% endif %} ) SELECT contract_address, symbol, NAME, - CONCAT(symbol,': ',name) AS label, + label, decimals, is_verified, + is_verified_modified_timestamp, SYSDATE() AS inserted_timestamp, SYSDATE() AS modified_timestamp, {{ dbt_utils.generate_surrogate_key(['contract_address']) }} AS dim_stablecoins_id FROM - all_stablecoins + FINAL qualify(ROW_NUMBER() over (PARTITION BY dim_stablecoins_id +ORDER BY + modified_timestamp DESC)) = 1 diff --git a/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.sql b/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.sql index 61f2d63c..8a34fb65 100644 --- a/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.sql +++ b/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.sql @@ -19,6 +19,7 @@ SELECT label, decimals, total_supply, + total_holders, amount_minted, amount_burned, amount_transferred, diff --git a/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.yml b/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.yml index c0955775..0b6f8125 100644 --- a/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.yml +++ b/models/curated_package/defi/stablecoins/gold/defi__ez_stablecoins_supply.yml @@ -18,6 +18,8 @@ models: description: '{{ doc("ez_stablecoins_supply_decimals") }}' - name: TOTAL_SUPPLY description: '{{ doc("ez_stablecoins_supply_total_supply") }}' + - name: TOTAL_HOLDERS + description: '{{ doc("ez_stablecoins_supply_total_holders") }}' - name: AMOUNT_MINTED description: '{{ doc("ez_stablecoins_supply_amount_minted") }}' - name: AMOUNT_BURNED diff --git a/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads.sql b/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads.sql index 204c528c..a7d706da 100644 --- a/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads.sql +++ b/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads.sql @@ -9,7 +9,7 @@ {# Main query starts here #} {{ streamline_external_table_query( - source_name = 'stablecoin_reads', + source_name = 'contract_reads', block_number = false, contract_address = true, data_not_null = false diff --git a/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads_fr.sql b/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads_fr.sql index dd635560..488a663c 100644 --- a/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads_fr.sql +++ b/models/curated_package/defi/stablecoins/reads/bronze/bronze__stablecoin_reads_fr.sql @@ -9,7 +9,7 @@ {# Main query starts here #} {{ streamline_external_table_query_fr( - source_name = 'stablecoin_reads', + source_name = 'contract_reads', block_number = false, contract_address = true, data_not_null = false diff --git a/models/curated_package/defi/stablecoins/reads/silver/silver__stablecoin_reads.sql b/models/curated_package/defi/stablecoins/reads/silver/silver__stablecoin_reads.sql index 4d84f39c..e4b5b115 100644 --- a/models/curated_package/defi/stablecoins/reads/silver/silver__stablecoin_reads.sql +++ b/models/curated_package/defi/stablecoins/reads/silver/silver__stablecoin_reads.sql @@ -25,6 +25,9 @@ WITH stablecoin_reads AS ( VALUE :"BLOCK_DATE_UNIX" :: TIMESTAMP ) :: DATE AS block_date, contract_address, + PARSE_JSON( + VALUE :"METADATA_STR" :: STRING + ) :: variant AS metadata, DATA :result :: STRING AS result_hex, _inserted_timestamp FROM @@ -53,6 +56,7 @@ results AS ( block_number, block_date, contract_address, + metadata, IFF( C.decimals IS NULL, 18, @@ -88,6 +92,7 @@ SELECT block_number, block_date, contract_address, + metadata, decimals_adj AS decimals, amount_hex, amount_raw, diff --git a/models/curated_package/defi/stablecoins/reads/streamline/history/streamline__stablecoin_reads_history.sql b/models/curated_package/defi/stablecoins/reads/streamline/history/streamline__contract_reads_daily_history.sql similarity index 88% rename from models/curated_package/defi/stablecoins/reads/streamline/history/streamline__stablecoin_reads_history.sql rename to models/curated_package/defi/stablecoins/reads/streamline/history/streamline__contract_reads_daily_history.sql index fbfd27cf..b17e0f11 100644 --- a/models/curated_package/defi/stablecoins/reads/streamline/history/streamline__stablecoin_reads_history.sql +++ b/models/curated_package/defi/stablecoins/reads/streamline/history/streamline__contract_reads_daily_history.sql @@ -12,7 +12,14 @@ WITH verified_stablecoins AS ( SELECT - contract_address + contract_address, + OBJECT_CONSTRUCT( + 'symbol', symbol, + 'name', name, + 'label', label, + 'decimals', decimals, + 'is_verified', is_verified + ) :: VARIANT AS metadata FROM {{ ref('defi__dim_stablecoins') }} WHERE @@ -31,6 +38,7 @@ max_blocks AS ( base AS ( SELECT s.contract_address, + s.metadata, m.block_number, m.block_date FROM @@ -61,7 +69,8 @@ ready_reads AS ( function_sig, 64, '0' - ) AS input + ) AS input, + metadata FROM base JOIN function_sigs @@ -74,6 +83,7 @@ SELECT ROUND(block_number,-3) AS partition_key, function_sig, input, + metadata :: STRING AS metadata_str, live.udf_api( 'POST', '{{ vars.GLOBAL_NODE_URL }}', @@ -109,12 +119,12 @@ WHERE {# Streamline Function Call #} {% if execute %} {% set params = { - "external_table": 'stablecoin_reads', + "external_table": 'contract_reads', "sql_limit": vars.CURATED_SL_STABLECOIN_READS_HISTORY_SQL_LIMIT, "producer_batch_size": vars.CURATED_SL_STABLECOIN_READS_HISTORY_PRODUCER_BATCH_SIZE, "worker_batch_size": vars.CURATED_SL_STABLECOIN_READS_HISTORY_WORKER_BATCH_SIZE, "async_concurrent_requests": vars.CURATED_SL_STABLECOIN_READS_HISTORY_ASYNC_CONCURRENT_REQUESTS, - "sql_source": 'stablecoin_reads_history' + "sql_source": 'contract_reads_daily_history' } %} {% set function_call_sql %} diff --git a/models/curated_package/defi/stablecoins/reads/streamline/realtime/streamline__stablecoin_reads_realtime.sql b/models/curated_package/defi/stablecoins/reads/streamline/realtime/streamline__contract_reads_daily_realtime.sql similarity index 87% rename from models/curated_package/defi/stablecoins/reads/streamline/realtime/streamline__stablecoin_reads_realtime.sql rename to models/curated_package/defi/stablecoins/reads/streamline/realtime/streamline__contract_reads_daily_realtime.sql index 0f69b274..0e8fd500 100644 --- a/models/curated_package/defi/stablecoins/reads/streamline/realtime/streamline__stablecoin_reads_realtime.sql +++ b/models/curated_package/defi/stablecoins/reads/streamline/realtime/streamline__contract_reads_daily_realtime.sql @@ -12,7 +12,14 @@ WITH verified_stablecoins AS ( SELECT - contract_address + contract_address, + OBJECT_CONSTRUCT( + 'symbol', symbol, + 'name', name, + 'label', label, + 'decimals', decimals, + 'is_verified', is_verified + ) :: VARIANT AS metadata FROM {{ ref('defi__dim_stablecoins') }} WHERE @@ -31,6 +38,7 @@ max_blocks AS ( base AS ( SELECT s.contract_address, + s.metadata, m.block_number, m.block_date FROM @@ -57,7 +65,8 @@ ready_reads AS ( function_sig, 64, '0' - ) AS input + ) AS input, + metadata FROM base JOIN function_sigs @@ -70,6 +79,7 @@ SELECT ROUND(block_number,-3) AS partition_key, function_sig, input, + metadata :: STRING AS metadata_str, live.udf_api( 'POST', '{{ vars.GLOBAL_NODE_URL }}', @@ -105,12 +115,12 @@ WHERE {# Streamline Function Call #} {% if execute %} {% set params = { - "external_table" :"stablecoin_reads", + "external_table" :"contract_reads", "sql_limit" : vars.CURATED_SL_STABLECOIN_READS_REALTIME_SQL_LIMIT, "producer_batch_size" : vars.CURATED_SL_STABLECOIN_READS_REALTIME_PRODUCER_BATCH_SIZE, "worker_batch_size" : vars.CURATED_SL_STABLECOIN_READS_REALTIME_WORKER_BATCH_SIZE, "async_concurrent_requests" : vars.CURATED_SL_STABLECOIN_READS_REALTIME_ASYNC_CONCURRENT_REQUESTS, - "sql_source" : 'stablecoin_reads_realtime' + "sql_source" : 'contract_reads_daily_realtime' } %} {% set function_call_sql %} diff --git a/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.sql b/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.sql index 63cbc862..158aa88b 100644 --- a/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.sql +++ b/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.sql @@ -3,6 +3,7 @@ {# Log configuration details #} {{ log_model_details() }} -- depends_on: {{ ref('price__ez_asset_metadata') }} +-- depends_on: {{ ref('defi__dim_stablecoins') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', @@ -47,7 +48,11 @@ total_supply AS ( SELECT block_date, contract_address, - amount AS total_supply + amount AS total_supply, + metadata :symbol :: STRING AS symbol, + metadata :name :: STRING AS name, + metadata :label :: STRING AS label, + metadata :decimals :: INTEGER AS decimals FROM {{ ref('silver__stablecoin_reads') }} @@ -216,11 +221,36 @@ GROUP BY block_date, contract_address ), -FINAL AS ( +holders AS ( + SELECT + block_date, + contract_address, + COUNT(DISTINCT address) AS num_holders, + MAX(modified_timestamp) AS modified_timestamp + FROM + {{ ref('silver_stablecoins__supply_by_address_imputed') }} +WHERE balance > 0 +{% if is_incremental() %} +AND block_date IN ( + SELECT + block_date + FROM + incremental_dates +) +{% endif %} +GROUP BY + block_date, + contract_address +), +all_supply AS ( SELECT s.block_date, s.contract_address, s.total_supply, + s.symbol, + s.name, + s.label, + s.decimals, COALESCE( b.balance_blacklist, 0 @@ -256,7 +286,11 @@ FINAL AS ( COALESCE( transfer_volume, 0 - ) AS transfer_volume + ) AS transfer_volume, + COALESCE( + num_holders, + 0 + ) AS num_holders FROM total_supply s LEFT JOIN blacklist_supply b @@ -271,6 +305,93 @@ FINAL AS ( LEFT JOIN transfers t ON s.block_date = t.block_date AND s.contract_address = t.contract_address + LEFT JOIN holders h + ON s.block_date = h.block_date + AND s.contract_address = h.contract_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + t.block_date, + t.contract_address, + d.symbol AS symbol_heal, + d.name AS name_heal, + d.label AS label_heal, + d.decimals AS decimals_heal, + t.total_supply, + t.amount_blacklisted, + t.amount_in_cex, + t.amount_in_bridges, + t.amount_in_dex_liquidity_pools, + t.amount_in_lending_pools, + t.amount_in_contracts, + t.amount_minted, + t.amount_burned, + t.amount_transferred, + t.total_holders + FROM + {{ this }} + t + INNER JOIN {{ ref('defi__dim_stablecoins') }} + d + ON t.contract_address = d.contract_address + WHERE + t.symbol IS NULL + OR t.name IS NULL + OR t.decimals IS NULL +), +{% endif %} + +FINAL AS ( + SELECT + block_date, + contract_address, + symbol, + NAME, + label, + decimals, + total_supply, + blacklist_supply AS amount_blacklisted, + cex_balance AS amount_in_cex, + bridge_balance AS amount_in_bridges, + dex_balance AS amount_in_dex_liquidity_pools, + lending_pool_balance AS amount_in_lending_pools, + contracts_balance AS amount_in_contracts, + mint_amount AS amount_minted, + burn_amount AS amount_burned, + transfer_volume AS amount_transferred, + num_holders AS total_holders + FROM + all_supply + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + block_date, + contract_address, + symbol_heal AS symbol, + name_heal AS NAME, + label_heal AS label, + decimals_heal AS decimals, + total_supply, + amount_blacklisted, + amount_in_cex, + amount_in_bridges, + amount_in_dex_liquidity_pools, + amount_in_lending_pools, + amount_in_contracts, + amount_minted, + amount_burned, + amount_transferred, + total_holders +FROM + heal_model +{% endif %} ) SELECT block_date, @@ -280,18 +401,26 @@ SELECT label, decimals, total_supply, - blacklist_supply AS amount_blacklisted, - cex_balance AS amount_in_cex, - bridge_balance AS amount_in_bridges, - dex_balance AS amount_in_dex_liquidity_pools, - lending_pool_balance AS amount_in_lending_pools, - contracts_balance AS amount_in_contracts, - mint_amount AS amount_minted, - burn_amount AS amount_burned, - transfer_volume AS amount_transferred, + total_holders, + amount_blacklisted, + amount_in_cex, + amount_in_bridges, + amount_in_dex_liquidity_pools, + amount_in_lending_pools, + amount_in_contracts, + amount_minted, + amount_burned, + amount_transferred, SYSDATE() AS inserted_timestamp, SYSDATE() AS modified_timestamp, {{ dbt_utils.generate_surrogate_key(['block_date','contract_address']) }} AS stablecoins_supply_complete_id FROM FINAL - LEFT JOIN {{ ref('defi__dim_stablecoins') }} USING (contract_address) + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +qualify(ROW_NUMBER() over (PARTITION BY stablecoins_supply_complete_id +ORDER BY + modified_timestamp DESC)) = 1 +{% endif %} diff --git a/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.yml b/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.yml index 34d50dfa..51244f9f 100644 --- a/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.yml +++ b/models/curated_package/defi/stablecoins/silver/silver_stablecoins__supply_complete.yml @@ -28,6 +28,9 @@ models: - name: TOTAL_SUPPLY tests: - not_null + - name: TOTAL_HOLDERS + tests: + - not_null - name: AMOUNT_BLACKLISTED tests: - not_null diff --git a/models/decoder_package/abis/silver/silver__verified_abis.sql b/models/decoder_package/abis/silver/silver__verified_abis.sql index 735e1067..9ec8e794 100644 --- a/models/decoder_package/abis/silver/silver__verified_abis.sql +++ b/models/decoder_package/abis/silver/silver__verified_abis.sql @@ -132,4 +132,4 @@ SELECT FROM all_abis qualify(ROW_NUMBER() over(PARTITION BY contract_address ORDER BY - _INSERTED_TIMESTAMP DESC)) = 1 + _INSERTED_TIMESTAMP DESC)) = 1 \ No newline at end of file diff --git a/models/doc_descriptions/defi/ez_stablecoins_supply.md b/models/doc_descriptions/defi/ez_stablecoins_supply.md index 453d4d1d..3e4dac53 100644 --- a/models/doc_descriptions/defi/ez_stablecoins_supply.md +++ b/models/doc_descriptions/defi/ez_stablecoins_supply.md @@ -127,6 +127,14 @@ Example: 1500000000 {% enddocs %} +{% docs ez_stablecoins_supply_total_holders %} + +The total number of unique addresses holding the stablecoin on this blockchain as of the block_date. + +Example: 750000 + +{% enddocs %} + {% docs ez_stablecoins_supply_amount_minted %} The amount of tokens minted daily. diff --git a/models/main_package/core/gold/core__fact_event_logs.sql b/models/main_package/core/gold/core__fact_event_logs.sql index 7266e590..d85f345d 100644 --- a/models/main_package/core/gold/core__fact_event_logs.sql +++ b/models/main_package/core/gold/core__fact_event_logs.sql @@ -262,7 +262,13 @@ FROM qualify ROW_NUMBER() over ( PARTITION BY fact_event_logs_id ORDER BY - block_number DESC, - block_timestamp DESC nulls last, - origin_function_signature DESC nulls last + {% if vars.GLOBAL_PROJECT_NAME == 'monad' %} + tx_succeeded DESC nulls last, + block_number DESC, + block_timestamp DESC nulls last + {% else %} + block_number DESC, + block_timestamp DESC nulls last, + origin_function_signature DESC nulls last + {% endif %} ) = 1 \ No newline at end of file diff --git a/models/main_package/core/gold/core__fact_traces.sql b/models/main_package/core/gold/core__fact_traces.sql index e7ef7548..92dd9ba1 100644 --- a/models/main_package/core/gold/core__fact_traces.sql +++ b/models/main_package/core/gold/core__fact_traces.sql @@ -712,4 +712,10 @@ SELECT FROM all_traces qualify(ROW_NUMBER() over(PARTITION BY block_number, {% if vars.MAIN_CORE_TRACES_SEI_MODE %}tx_hash, {% else %}tx_position, {% endif %} trace_index ORDER BY - modified_timestamp DESC, block_timestamp DESC nulls last)) = 1 \ No newline at end of file + {% if vars.GLOBAL_PROJECT_NAME == 'monad' %} + tx_succeeded DESC nulls last, + block_timestamp DESC nulls last + {% else %} -- this maybe should be updated everywhere but im not sure it matters since the block number is in the partition + modified_timestamp DESC, block_timestamp DESC nulls last + {% endif %} +)) = 1 \ No newline at end of file diff --git a/models/main_package/core/gold/core__fact_transactions.sql b/models/main_package/core/gold/core__fact_transactions.sql index ff46e9f8..bdafed00 100644 --- a/models/main_package/core/gold/core__fact_transactions.sql +++ b/models/main_package/core/gold/core__fact_transactions.sql @@ -920,7 +920,14 @@ FROM all_transactions qualify ROW_NUMBER() over ( PARTITION BY fact_transactions_id ORDER BY - block_number DESC, - block_timestamp DESC nulls last, - tx_succeeded DESC nulls last + + {% if vars.GLOBAL_PROJECT_NAME == 'monad' %} + tx_succeeded DESC nulls last, + block_number DESC, + block_timestamp DESC nulls last + {% else %} + block_number DESC, + block_timestamp DESC nulls last, + tx_succeeded DESC nulls last + {% endif %} ) = 1 \ No newline at end of file diff --git a/models/main_package/core/streamline/realtime/streamline__confirm_blocks_realtime.sql b/models/main_package/core/streamline/realtime/streamline__confirm_blocks_realtime.sql index 3b2d0988..c6f94c09 100644 --- a/models/main_package/core/streamline/realtime/streamline__confirm_blocks_realtime.sql +++ b/models/main_package/core/streamline/realtime/streamline__confirm_blocks_realtime.sql @@ -65,6 +65,12 @@ to_do AS ( SELECT block_number FROM to_do + {% if not vars.MAIN_SL_NEW_BUILD_ENABLED %} + UNION + SELECT block_number + FROM {{ ref("_unconfirmed_blocks") }} + {% endif %} + {% if vars.MAIN_SL_TESTING_LIMIT is not none %} ORDER BY block_number DESC LIMIT {{ vars.MAIN_SL_TESTING_LIMIT }} diff --git a/models/sources.yml b/models/sources.yml index 3fd9c752..bb085b89 100644 --- a/models/sources.yml +++ b/models/sources.yml @@ -44,7 +44,6 @@ sources: - name: balances_erc20 - name: balances_native - name: contract_reads - - name: stablecoin_reads - name: complete_streamline database: "{{ target.database }}" schema: streamline