From c5eb818cee52da1ef3156233de772f817a120d18 Mon Sep 17 00:00:00 2001 From: drethereum <71602799+drethereum@users.noreply.github.com> Date: Wed, 29 May 2024 11:05:16 -0600 Subject: [PATCH] AN-4820/heal-logic (#245) * vars * tx success * bridge heal * lps heal * var format * heal logic * dex swaps heal * column names * round in gold --- README.md | 61 +- dbt_project.yml | 2 +- models/gold/defi/defi__ez_bridge_activity.sql | 8 +- models/gold/defi/defi__ez_dex_swaps.sql | 20 +- models/silver/core/silver__transfers.sql | 6 +- .../silver_bridge__allbridge_sent.sql | 1 + ...r_bridge__axelar_contractcallwithtoken.sql | 2 + .../silver_bridge__celer_cbridge_send.sql | 1 + ...lver_bridge__dln_debridge_createdorder.sql | 1 + .../eywa/silver_bridge__eywa_requestsent.sql | 1 + .../meson/silver_bridge__meson_transfers.sql | 1 + ...er_bridge__multichain_v7_loganyswapout.sql | 1 + ...ilver_bridge__complete_bridge_activity.sql | 252 ++- .../silver_bridge__stargate_createpool.sql | 3 +- .../stargate/silver_bridge__stargate_swap.sql | 1 + ...er_bridge__symbiosis_synthesizerequest.sql | 1 + .../silver_bridge__synapse_token_bridge.sql | 1 + ...ver_bridge__synapse_tokenbridgeandswap.sql | 1 + .../balancer/silver_dex__balancer_pools.sql | 2 + .../balancer/silver_dex__balancer_swaps.sql | 1 + .../dex/curve/silver_dex__curve_pools.sql | 3 +- .../dex/curve/silver_dex__curve_swaps.sql | 1 + .../fraxswap/silver_dex__fraxswap_pools.sql | 1 + .../fraxswap/silver_dex__fraxswap_swaps.sql | 1 + .../defi/dex/gmx/silver_dex__gmx_swaps.sql | 1 + .../hashflow/silver_dex__hashflow_pools.sql | 3 +- .../hashflow/silver_dex__hashflow_swaps.sql | 2 + .../silver_dex__hashflow_v3_pools.sql | 1 + .../silver_dex__hashflow_v3_swaps.sql | 1 + ...silver_dex__kyberswap_v1_dynamic_pools.sql | 1 + ...silver_dex__kyberswap_v1_dynamic_swaps.sql | 1 + .../silver_dex__kyberswap_v1_static_pools.sql | 1 + .../silver_dex__kyberswap_v1_static_swaps.sql | 1 + ...silver_dex__kyberswap_v2_elastic_pools.sql | 1 + ...silver_dex__kyberswap_v2_elastic_swaps.sql | 1 + .../pangolin/silver_dex__pangolin_pools.sql | 1 + .../pangolin/silver_dex__pangolin_swaps.sql | 1 + .../platypus/silver_dex__platypus_pools.sql | 3 +- .../platypus/silver_dex__platypus_swaps.sql | 1 + ...lver_dex__complete_dex_liquidity_pools.sql | 922 +++++++-- .../dex/silver_dex__complete_dex_swaps.sql | 1723 +++++------------ .../dex/sushi/silver_dex__sushi_pools.sql | 1 + .../silver_dex__trader_joe_v1_pools.sql | 1 + .../silver_dex__trader_joe_v1_swaps.sql | 1 + .../silver_dex__trader_joe_v2_1_swaps.sql | 1 + .../silver_dex__trader_joe_v2_pools.sql | 1 + .../silver_dex__trader_joe_v2_swaps.sql | 1 + .../dex/uniswap/silver_dex__univ2_pools.sql | 1 + .../dex/uniswap/silver_dex__univ3_pools.sql | 2 + .../dex/woofi/silver_dex__woofi_swaps.sql | 2 + .../lending/benqi/silver__benqi_borrows.sql | 1 + .../lending/benqi/silver__benqi_deposits.sql | 1 + .../benqi/silver__benqi_liquidations.sql | 1 + .../benqi/silver__benqi_repayments.sql | 1 + .../lending/benqi/silver__benqi_withdraws.sql | 1 + .../silver__complete_lending_borrows.sql | 143 +- .../silver__complete_lending_deposits.sql | 143 +- .../silver__complete_lending_flashloans.sql | 186 +- .../silver__complete_lending_liquidations.sql | 199 +- .../silver__complete_lending_repayments.sql | 173 +- .../silver__complete_lending_withdraws.sql | 181 +- .../trader_joe/silver__trader_joe_borrows.sql | 1 + .../silver__trader_joe_deposits.sql | 1 + .../silver__trader_joe_liquidations.sql | 1 + .../silver__trader_joe_repayments.sql | 1 + .../silver__trader_joe_withdraws.sql | 1 + .../nft/sales/silver__complete_nft_sales.sql | 30 +- models/silver/nft/silver__nft_transfers.sql | 2 +- 68 files changed, 2499 insertions(+), 1617 deletions(-) diff --git a/README.md b/README.md index 8e1854a..c0d4d9a 100644 --- a/README.md +++ b/README.md @@ -35,35 +35,43 @@ avalanche: query_tag: ``` -### Variables +## Variables To control the creation of UDF or SP macros with dbt run: * UPDATE_UDFS_AND_SPS -When True, executes all macros included in the on-run-start hooks within dbt_project.yml on model run as normal -When False, none of the on-run-start macros are executed on model run + * Default values are False + * When True, executes all macros included in the on-run-start hooks within dbt_project.yml on model run as normal + * When False, none of the on-run-start macros are executed on model run -Default values are False + * Usage: `dbt run --vars '{"UPDATE_UDFS_AND_SPS":True}' -m ...` -* Usage: -dbt run --var '{"UPDATE_UDFS_AND_SPS":True}' -m ... +Use a variable to heal a model incrementally: +* HEAL_MODEL + * Default is FALSE (Boolean) + * When FALSE, logic will be negated + * When TRUE, heal logic will apply + * Include `heal` in model tags within the config block for inclusion in the `dbt_run_heal_models` workflow, e.g. `tags = 'heal'` -To reload records in a curated complete table without a full-refresh, such as `silver_bridge.complete_bridge_activity`: -* HEAL_CURATED_MODEL -Default is an empty array [] -When item is included in var array [], incremental logic will be skipped for that CTE / code block -When item is not included in var array [] or does not match specified item in model, incremental logic will apply -Example set up: `{% if is_incremental() and 'axelar' not in var('HEAL_CURATED_MODEL') %}` + * Usage: `dbt run --vars '{"HEAL_MODEL":True}' -m ...` -* Usage: -Single CTE: dbt run --var '{"HEAL_CURATED_MODEL":"axelar"}' -m ... -Multiple CTEs: dbt run --var '{"HEAL_CURATED_MODEL":["axelar","across","celer_cbridge"]}' -m ... +Use a variable to negate incremental logic: +* Example use case: reload records in a curated complete table without a full-refresh, such as `silver_bridge.complete_bridge_activity`: +* HEAL_MODELS + * Default is an empty array [] + * When item is included in var array [], incremental logic will be skipped for that CTE / code block + * When item is not included in var array [] or does not match specified item in model, incremental logic will apply + * Example set up: `{% if is_incremental() and 'axelar' not in var('HEAL_MODELS') %}` -### Resources: -- Learn more about dbt [in the docs](https://docs.getdbt.com/docs/introduction) -- Check out [Discourse](https://discourse.getdbt.com/) for commonly asked questions and answers -- Join the [chat](https://community.getdbt.com/) on Slack for live discussions and support -- Find [dbt events](https://events.getdbt.com) near you -- Check out [the blog](https://blog.getdbt.com/) for the latest news on dbt's development and best practices + * Usage: + * Single CTE: `dbt run --vars '{"HEAL_MODELS":"axelar"}' -m ...` + * Multiple CTEs: `dbt run --vars '{"HEAL_MODELS":["axelar","across","celer_cbridge"]}' -m ...` + +Use a variable to extend the incremental lookback period: +* LOOKBACK + * Default is a string representing the specified time interval e.g. '12 hours', '7 days' etc. + * Example set up: `SELECT MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}'` + + * Usage: `dbt run --vars '{"LOOKBACK":"36 hours"}' -m ...` ## Applying Model Tags @@ -97,7 +105,7 @@ To add/update a model's snowflake tags, add/modify the `meta` model property und By default, model tags are pushed to Snowflake on each load. You can disable this by setting the `UPDATE_SNOWFLAKE_TAGS` project variable to `False` during a run. ``` -dbt run --var '{"UPDATE_SNOWFLAKE_TAGS":False}' -s models/core/core__fact_blocks.sql +dbt run --vars '{"UPDATE_SNOWFLAKE_TAGS":False}' -s models/core/core__fact_blocks.sql ``` ### Querying for existing tags on a model in snowflake @@ -105,4 +113,11 @@ dbt run --var '{"UPDATE_SNOWFLAKE_TAGS":False}' -s models/core/core__fact_blocks ``` select * from table(avalanche.information_schema.tag_references('avalanche.core.fact_blocks', 'table')); -``` \ No newline at end of file +``` + +### Resources: +- Learn more about dbt [in the docs](https://docs.getdbt.com/docs/introduction) +- Check out [Discourse](https://discourse.getdbt.com/) for commonly asked questions and answers +- Join the [chat](https://community.getdbt.com/) on Slack for live discussions and support +- Find [dbt events](https://events.getdbt.com) near you +- Check out [the blog](https://blog.getdbt.com/) for the latest news on dbt's development and best practices \ No newline at end of file diff --git a/dbt_project.yml b/dbt_project.yml index 208253e..91f4781 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -66,7 +66,7 @@ vars: WAIT: 0 OBSERV_FULL_TEST: False HEAL_MODEL: False - HEAL_CURATED_MODEL: [] + HEAL_MODELS: [] START_GHA_TASKS: False API_INTEGRATION: '{{ var("config")[target.name]["API_INTEGRATION"] if var("config")[target.name] else var("config")["dev"]["API_INTEGRATION"] }}' EXTERNAL_FUNCTION_URI: '{{ var("config")[target.name]["EXTERNAL_FUNCTION_URI"] if var("config")[target.name] else var("config")["dev"]["EXTERNAL_FUNCTION_URI"] }}' diff --git a/models/gold/defi/defi__ez_bridge_activity.sql b/models/gold/defi/defi__ez_bridge_activity.sql index 10bb0bc..3d88dbd 100644 --- a/models/gold/defi/defi__ez_bridge_activity.sql +++ b/models/gold/defi/defi__ez_bridge_activity.sql @@ -33,7 +33,13 @@ SELECT token_symbol, amount_unadj, amount, - amount_usd, + ROUND( + CASE + WHEN amount_usd < 1e+15 THEN amount_usd + ELSE NULL + END, + 2 + ) AS amount_usd, COALESCE ( complete_bridge_activity_id, {{ dbt_utils.generate_surrogate_key( diff --git a/models/gold/defi/defi__ez_dex_swaps.sql b/models/gold/defi/defi__ez_dex_swaps.sql index 303aec7..88c002b 100644 --- a/models/gold/defi/defi__ez_dex_swaps.sql +++ b/models/gold/defi/defi__ez_dex_swaps.sql @@ -24,10 +24,26 @@ SELECT event_name, amount_in_unadj, amount_in, - amount_in_usd, + ROUND( + CASE + WHEN amount_out_usd IS NULL + OR ABS((amount_in_usd - amount_out_usd) / NULLIF(amount_out_usd, 0)) > 0.75 + OR ABS((amount_in_usd - amount_out_usd) / NULLIF(amount_in_usd, 0)) > 0.75 THEN NULL + ELSE amount_in_usd + END, + 2 + ) AS amount_in_usd, amount_out_unadj, amount_out, - amount_out_usd, + ROUND( + CASE + WHEN amount_in_usd IS NULL + OR ABS((amount_out_usd - amount_in_usd) / NULLIF(amount_in_usd, 0)) > 0.75 + OR ABS((amount_out_usd - amount_in_usd) / NULLIF(amount_out_usd, 0)) > 0.75 THEN NULL + ELSE amount_out_usd + END, + 2 + ) AS amount_out_usd, sender, tx_to, event_index, diff --git a/models/silver/core/silver__transfers.sql b/models/silver/core/silver__transfers.sql index 7db266f..0592226 100644 --- a/models/silver/core/silver__transfers.sql +++ b/models/silver/core/silver__transfers.sql @@ -35,7 +35,7 @@ AND _inserted_timestamp >= ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -169,7 +169,7 @@ heal_model AS ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -195,7 +195,7 @@ heal_model AS ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) diff --git a/models/silver/defi/bridge/allbridge/silver_bridge__allbridge_sent.sql b/models/silver/defi/bridge/allbridge/silver_bridge__allbridge_sent.sql index 1420d6a..217d13d 100644 --- a/models/silver/defi/bridge/allbridge/silver_bridge__allbridge_sent.sql +++ b/models/silver/defi/bridge/allbridge/silver_bridge__allbridge_sent.sql @@ -53,6 +53,7 @@ WITH base_evt AS ( WHERE topics [0] :: STRING = '0x884a8def17f0d5bbb3fef53f3136b5320c9b39f75afb8985eeab9ea1153ee56d' AND contract_address = '0xbbbd1bbb4f9b936c3604906d7592a644071de884' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/axelar/silver_bridge__axelar_contractcallwithtoken.sql b/models/silver/defi/bridge/axelar/silver_bridge__axelar_contractcallwithtoken.sql index dea8d49..cd2f260 100644 --- a/models/silver/defi/bridge/axelar/silver_bridge__axelar_contractcallwithtoken.sql +++ b/models/silver/defi/bridge/axelar/silver_bridge__axelar_contractcallwithtoken.sql @@ -42,6 +42,7 @@ WITH base_evt AS ( WHERE topics [0] :: STRING = '0x7e50569d26be643bda7757722291ec66b1be66d8283474ae3fab5a98f878a7a2' AND contract_address = LOWER('0x5029C0EFf6C34351a0CEc334542cDb22c7928f78') + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( @@ -89,6 +90,7 @@ native_gas_paid AS ( WHERE topics [0] :: STRING = '0x999d431b58761213cf53af96262b67a069cbd963499fd8effd1e21556217b841' AND contract_address = '0x2d5d7d31f671f86c782533cc367f14109a082712' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/celer/silver_bridge__celer_cbridge_send.sql b/models/silver/defi/bridge/celer/silver_bridge__celer_cbridge_send.sql index 17a588d..c9ca417 100644 --- a/models/silver/defi/bridge/celer/silver_bridge__celer_cbridge_send.sql +++ b/models/silver/defi/bridge/celer/silver_bridge__celer_cbridge_send.sql @@ -50,6 +50,7 @@ WITH base_evt AS ( '0x9b36f165bab9ebe611d491180418d8de4b8f3a1f', '0xef3c714c9425a8f3697a9c969dc1af30ba82e5d4' ) + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/dln/silver_bridge__dln_debridge_createdorder.sql b/models/silver/defi/bridge/dln/silver_bridge__dln_debridge_createdorder.sql index 5293396..a67f728 100644 --- a/models/silver/defi/bridge/dln/silver_bridge__dln_debridge_createdorder.sql +++ b/models/silver/defi/bridge/dln/silver_bridge__dln_debridge_createdorder.sql @@ -70,6 +70,7 @@ WITH base_evt AS ( WHERE topics [0] :: STRING = '0xfc8703fd57380f9dd234a89dce51333782d49c5902f307b02f03e014d18fe471' --CreatedOrder AND contract_address = '0xef4fb24ad0916217251f553c0596f8edc630eb66' --Dln: Source + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/eywa/silver_bridge__eywa_requestsent.sql b/models/silver/defi/bridge/eywa/silver_bridge__eywa_requestsent.sql index 4a466bb..124dfba 100644 --- a/models/silver/defi/bridge/eywa/silver_bridge__eywa_requestsent.sql +++ b/models/silver/defi/bridge/eywa/silver_bridge__eywa_requestsent.sql @@ -40,6 +40,7 @@ WITH base_evt AS ( --PortalV2 '0xbf0b5d561b986809924f88099c4ff0e6bcce60c9' --PortalV2 ) + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/meson/silver_bridge__meson_transfers.sql b/models/silver/defi/bridge/meson/silver_bridge__meson_transfers.sql index 441b390..4b10f8b 100644 --- a/models/silver/defi/bridge/meson/silver_bridge__meson_transfers.sql +++ b/models/silver/defi/bridge/meson/silver_bridge__meson_transfers.sql @@ -126,6 +126,7 @@ dst_info AS ( WHERE contract_address = '0x25ab3efd52e6470681ce037cd546dc60726948d3' AND topics [0] :: STRING = '0x5ce4019f772fda6cb703b26bce3ec3006eb36b73f1d3a0eb441213317d9f5e9d' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/multichain/silver_bridge__multichain_v7_loganyswapout.sql b/models/silver/defi/bridge/multichain/silver_bridge__multichain_v7_loganyswapout.sql index 7e0389f..eba479b 100644 --- a/models/silver/defi/bridge/multichain/silver_bridge__multichain_v7_loganyswapout.sql +++ b/models/silver/defi/bridge/multichain/silver_bridge__multichain_v7_loganyswapout.sql @@ -40,6 +40,7 @@ WITH base_evt AS ( WHERE topics [0] :: STRING = '0x0d969ae475ff6fcaf0dcfa760d4d8607244e8d95e9bf426f8d5d69f9a3e525af' AND contract_address = '0x1633d66ca91ce4d81f63ea047b7b19beb92df7f3' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/silver_bridge__complete_bridge_activity.sql b/models/silver/defi/bridge/silver_bridge__complete_bridge_activity.sql index 2c6f519..b956662 100644 --- a/models/silver/defi/bridge/silver_bridge__complete_bridge_activity.sql +++ b/models/silver/defi/bridge/silver_bridge__complete_bridge_activity.sql @@ -1,12 +1,14 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform','version'], cluster_by = ['block_timestamp::DATE'], - tags = ['curated','reorg'] + tags = ['curated','reorg','heal'] ) }} WITH allbridge AS ( + SELECT block_number, block_timestamp, @@ -32,11 +34,11 @@ WITH allbridge AS ( FROM {{ ref('silver_bridge__allbridge_sent') }} -{% if is_incremental() and 'allbridge' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'allbridge' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -68,11 +70,11 @@ axelar AS ( FROM {{ ref('silver_bridge__axelar_contractcallwithtoken') }} -{% if is_incremental() and 'axelar' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'axelar' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -104,11 +106,11 @@ celer_cbridge AS ( FROM {{ ref('silver_bridge__celer_cbridge_send') }} -{% if is_incremental() and 'celer_cbridge' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'celer_cbridge' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -140,11 +142,11 @@ dln_debridge AS ( FROM {{ ref('silver_bridge__dln_debridge_createdorder') }} -{% if is_incremental() and 'dln_debridge' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'dln_debridge' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -176,11 +178,11 @@ eywa AS ( FROM {{ ref('silver_bridge__eywa_requestsent') }} -{% if is_incremental() and 'eywa' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'eywa' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -212,11 +214,11 @@ meson AS ( FROM {{ ref('silver_bridge__meson_transfers') }} -{% if is_incremental() and 'meson' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'meson' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -248,11 +250,11 @@ multichain AS ( FROM {{ ref('silver_bridge__multichain_v7_loganyswapout') }} -{% if is_incremental() and 'multichain' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'multichain' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -284,11 +286,11 @@ stargate AS ( FROM {{ ref('silver_bridge__stargate_swap') }} -{% if is_incremental() and 'stargate' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'stargate' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -320,11 +322,11 @@ symbiosis AS ( FROM {{ ref('silver_bridge__symbiosis_synthesizerequest') }} -{% if is_incremental() and 'symbiosis' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'symbiosis' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -356,11 +358,11 @@ synapse_tb AS ( FROM {{ ref('silver_bridge__synapse_token_bridge') }} -{% if is_incremental() and 'synapse_tb' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'synapse_tb' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -392,11 +394,11 @@ synapse_tbs AS ( FROM {{ ref('silver_bridge__synapse_tokenbridgeandswap') }} -{% if is_incremental() and 'synapse_tbs' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'synapse_tbs' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -428,20 +430,20 @@ wormhole AS ( FROM {{ ref('silver_bridge__wormhole_transfers') }} -{% if is_incremental() and 'wormhole' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'wormhole' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), all_protocols AS ( - SELECT + SELECT * - FROM + FROM allbridge UNION ALL SELECT @@ -455,7 +457,7 @@ all_protocols AS ( celer_cbridge UNION ALL SELECT - * + * FROM dln_debridge UNION ALL @@ -499,7 +501,7 @@ all_protocols AS ( FROM wormhole ), -FINAL AS ( +complete_bridge_activity AS ( SELECT block_number, block_timestamp, @@ -555,7 +557,7 @@ FINAL AS ( 2 ) ELSE NULL - END AS amount_usd_unadj, + END AS amount_usd, _id, b._inserted_timestamp FROM @@ -580,6 +582,183 @@ FINAL AS ( ) = LOWER( b.destination_chain ) +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + block_number, + block_timestamp, + origin_from_address, + origin_to_address, + origin_function_signature, + tx_hash, + event_index, + bridge_address, + event_name, + platform, + version, + sender, + receiver, + destination_chain_receiver, + destination_chain_id, + destination_chain, + t0.token_address, + C.token_symbol AS token_symbol, + C.token_decimals AS token_decimals, + amount_unadj, + CASE + WHEN C.token_decimals IS NOT NULL THEN (amount_unadj / pow(10, C.token_decimals)) + ELSE amount_unadj + END AS amount_heal, + CASE + WHEN C.token_decimals IS NOT NULL THEN amount_heal * p.price + ELSE NULL + END AS amount_usd_heal, + _id, + t0._inserted_timestamp + FROM + {{ this }} + t0 + LEFT JOIN {{ ref('silver__contracts') }} C + ON t0.token_address = C.contract_address + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p + ON t0.token_address = p.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p.hour + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform, + '-', + t1.version + ) + FROM + {{ this }} + t1 + WHERE + t1.token_decimals IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t1.token_address) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t2.block_number, + '-', + t2.platform, + '-', + t2.version + ) + FROM + {{ this }} + t2 + WHERE + t2.amount_usd IS NULL + AND t2._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t2.token_address + AND p.hour = DATE_TRUNC( + 'hour', + t2.block_timestamp + ) + ) + GROUP BY + 1 + ) + ), + {% endif %} + + FINAL AS ( + SELECT + * + FROM + complete_bridge_activity + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + block_number, + block_timestamp, + origin_from_address, + origin_to_address, + origin_function_signature, + tx_hash, + event_index, + bridge_address, + event_name, + platform, + version, + sender, + receiver, + destination_chain_receiver, + destination_chain_id, + destination_chain, + token_address, + token_symbol, + token_decimals, + amount_unadj, + amount_heal AS amount, + amount_usd_heal AS amount_usd, + _id, + _inserted_timestamp +FROM + heal_model +{% endif %} ) SELECT block_number, @@ -603,21 +782,18 @@ SELECT token_decimals, amount_unadj, amount, - CASE - WHEN amount_usd_unadj < 1e+15 THEN amount_usd_unadj - ELSE NULL - END AS amount_usd, + amount_usd, _id, _inserted_timestamp, {{ dbt_utils.generate_surrogate_key( - ['_id'] + ['_id'] ) }} AS complete_bridge_activity_id, SYSDATE() AS inserted_timestamp, SYSDATE() AS modified_timestamp, '{{ invocation_id }}' AS _invocation_id FROM - FINAL -WHERE destination_chain <> 'avalanche' -qualify (ROW_NUMBER() over (PARTITION BY _id + FINAL +WHERE + destination_chain <> 'avalanche' qualify (ROW_NUMBER() over (PARTITION BY _id ORDER BY _inserted_timestamp DESC)) = 1 diff --git a/models/silver/defi/bridge/stargate/silver_bridge__stargate_createpool.sql b/models/silver/defi/bridge/stargate/silver_bridge__stargate_createpool.sql index 09218b7..23fff36 100644 --- a/models/silver/defi/bridge/stargate/silver_bridge__stargate_createpool.sql +++ b/models/silver/defi/bridge/stargate/silver_bridge__stargate_createpool.sql @@ -20,7 +20,8 @@ WITH base_contracts AS ( WHERE from_address = LOWER('0x808d7c71ad2ba3FA531b068a2417C63106BC0949') AND TYPE ILIKE 'create%' - AND tx_status ILIKE 'success' + AND tx_status = 'SUCCESS' + AND trace_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/stargate/silver_bridge__stargate_swap.sql b/models/silver/defi/bridge/stargate/silver_bridge__stargate_swap.sql index 9fbb4b7..0728734 100644 --- a/models/silver/defi/bridge/stargate/silver_bridge__stargate_swap.sql +++ b/models/silver/defi/bridge/stargate/silver_bridge__stargate_swap.sql @@ -66,6 +66,7 @@ base_evt AS ( ON d.contract_address = p.pool_address WHERE topics [0] :: STRING = '0x34660fc8af304464529f48a778e03d03e4d34bcd5f9b6f0cfbf3cd238c642f7f' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/symbiosis/silver_bridge__symbiosis_synthesizerequest.sql b/models/silver/defi/bridge/symbiosis/silver_bridge__symbiosis_synthesizerequest.sql index 9077a5b..52986e7 100644 --- a/models/silver/defi/bridge/symbiosis/silver_bridge__symbiosis_synthesizerequest.sql +++ b/models/silver/defi/bridge/symbiosis/silver_bridge__symbiosis_synthesizerequest.sql @@ -41,6 +41,7 @@ WITH base_evt AS ( WHERE topics [0] :: STRING = '0x31325fe0a1a2e6a5b1e41572156ba5b4e94f0fae7e7f63ec21e9b5ce1e4b3eab' AND contract_address = '0xe75c7e85fe6add07077467064ad15847e6ba9877' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/synapse/silver_bridge__synapse_token_bridge.sql b/models/silver/defi/bridge/synapse/silver_bridge__synapse_token_bridge.sql index 4a11ec2..aaf3c2f 100644 --- a/models/silver/defi/bridge/synapse/silver_bridge__synapse_token_bridge.sql +++ b/models/silver/defi/bridge/synapse/silver_bridge__synapse_token_bridge.sql @@ -46,6 +46,7 @@ WITH base_evt AS ( '0xc05e61d0e7a63d27546389b7ad62fdff5a91aace' ) AND origin_to_address IS NOT NULL + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/bridge/synapse/silver_bridge__synapse_tokenbridgeandswap.sql b/models/silver/defi/bridge/synapse/silver_bridge__synapse_tokenbridgeandswap.sql index 0fb7157..fda12c9 100644 --- a/models/silver/defi/bridge/synapse/silver_bridge__synapse_tokenbridgeandswap.sql +++ b/models/silver/defi/bridge/synapse/silver_bridge__synapse_tokenbridgeandswap.sql @@ -54,6 +54,7 @@ WITH base_evt AS ( '0x79c15604b92ef54d3f61f0c40caab8857927ca3d5092367163b4562c1699eb5f' --depositandswap ) AND contract_address = '0xc05e61d0e7a63d27546389b7ad62fdff5a91aace' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/balancer/silver_dex__balancer_pools.sql b/models/silver/defi/dex/balancer/silver_dex__balancer_pools.sql index 7387e8a..379f2d3 100644 --- a/models/silver/defi/dex/balancer/silver_dex__balancer_pools.sql +++ b/models/silver/defi/dex/balancer/silver_dex__balancer_pools.sql @@ -31,6 +31,7 @@ WITH pools_registered AS ( WHERE topics [0] :: STRING = '0x3c13bc30b8e878c53fd2a36b679409c073afd75950be43d8858768e956fbc20e' --PoolRegistered AND contract_address = '0xba12222222228d8ba445958a75a0704d566bf2c8' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( @@ -72,6 +73,7 @@ tokens_registered AS ( FROM pools_registered ) + AND tx_status = 'SUCCESS' ), function_sigs AS ( SELECT diff --git a/models/silver/defi/dex/balancer/silver_dex__balancer_swaps.sql b/models/silver/defi/dex/balancer/silver_dex__balancer_swaps.sql index 8f56f85..eb02c3d 100644 --- a/models/silver/defi/dex/balancer/silver_dex__balancer_swaps.sql +++ b/models/silver/defi/dex/balancer/silver_dex__balancer_swaps.sql @@ -54,6 +54,7 @@ swaps_base AS ( WHERE topics [0] :: STRING = '0x2170c741c41531aec20e7c107c24eecfdd15e69c9bb0a8dd37b1840b9e0b207b' AND contract_address = '0xba12222222228d8ba445958a75a0704d566bf2c8' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/curve/silver_dex__curve_pools.sql b/models/silver/defi/dex/curve/silver_dex__curve_pools.sql index 16ac0aa..05fb011 100644 --- a/models/silver/defi/dex/curve/silver_dex__curve_pools.sql +++ b/models/silver/defi/dex/curve/silver_dex__curve_pools.sql @@ -33,7 +33,8 @@ WITH contract_deployments AS ( '0xb17b674d9c5cb2e441f8e196a2f048a81355d031' ) AND TYPE ILIKE 'create%' - AND tx_status ILIKE 'success' + AND tx_status = 'SUCCESS' + AND trace_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/curve/silver_dex__curve_swaps.sql b/models/silver/defi/dex/curve/silver_dex__curve_swaps.sql index 830ed20..4f8f7de 100644 --- a/models/silver/defi/dex/curve/silver_dex__curve_swaps.sql +++ b/models/silver/defi/dex/curve/silver_dex__curve_swaps.sql @@ -69,6 +69,7 @@ curve_base AS ( '0xb2e76ae99761dc136e598d4a629bb347eccb9532a5f8bbd72e18467c3c34cc98', --TokenExchange '0xd013ca23e77a65003c2c659c5442c00c805371b7fc1ebd4c206c41d1536bd90b' --TokenExchangeUnderlying ) + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_pools.sql b/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_pools.sql index 88fdfc1..f36942a 100644 --- a/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_pools.sql +++ b/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_pools.sql @@ -30,6 +30,7 @@ WITH pool_creation AS ( '0xf77ca9b635898980fb219b4f4605c50e4ba58aff' --v2 factory ) AND topics [0] :: STRING = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9' --pairCreated + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_swaps.sql b/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_swaps.sql index ac2ebe3..3495cd4 100644 --- a/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_swaps.sql +++ b/models/silver/defi/dex/fraxswap/silver_dex__fraxswap_swaps.sql @@ -59,6 +59,7 @@ swaps_base AS ( ON l.contract_address = pool_address WHERE l.topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' --Swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/gmx/silver_dex__gmx_swaps.sql b/models/silver/defi/dex/gmx/silver_dex__gmx_swaps.sql index f808770..9bb0d77 100644 --- a/models/silver/defi/dex/gmx/silver_dex__gmx_swaps.sql +++ b/models/silver/defi/dex/gmx/silver_dex__gmx_swaps.sql @@ -69,6 +69,7 @@ WITH swaps_base AS ( WHERE contract_address = '0x9ab2de34a33fb459b538c43f251eb825645e8595' AND topics [0] :: STRING = '0x0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/hashflow/silver_dex__hashflow_pools.sql b/models/silver/defi/dex/hashflow/silver_dex__hashflow_pools.sql index a282b43..cd8dee1 100644 --- a/models/silver/defi/dex/hashflow/silver_dex__hashflow_pools.sql +++ b/models/silver/defi/dex/hashflow/silver_dex__hashflow_pools.sql @@ -22,7 +22,8 @@ WITH contract_deployments AS ( '0x7677bf119654d1fbcb46cb9014949bf16180b6ae' ) AND TYPE ILIKE 'create%' - AND tx_status ILIKE 'success' + AND tx_status = 'SUCCESS' + AND trace_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/hashflow/silver_dex__hashflow_swaps.sql b/models/silver/defi/dex/hashflow/silver_dex__hashflow_swaps.sql index dfdb1f3..3844f83 100644 --- a/models/silver/defi/dex/hashflow/silver_dex__hashflow_swaps.sql +++ b/models/silver/defi/dex/hashflow/silver_dex__hashflow_swaps.sql @@ -67,6 +67,7 @@ router_swaps_base AS ( ON l.contract_address = p.pool_address WHERE l.topics [0] :: STRING = '0xb709ddcc6550418e9b89df1f4938071eeaa3f6376309904c77e15d46b16066f5' --swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( @@ -131,6 +132,7 @@ swaps_base AS ( ON l.contract_address = p.pool_address WHERE l.topics [0] :: STRING = '0x8cf3dec1929508e5677d7db003124e74802bfba7250a572205a9986d86ca9f1e' --swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_pools.sql b/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_pools.sql index c75c579..936a6be 100644 --- a/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_pools.sql +++ b/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_pools.sql @@ -21,6 +21,7 @@ WITH contract_deployments AS ( WHERE contract_address = '0xde828fdc3f497f16416d1bb645261c7c6a62dab5' AND topics [0] :: STRING = '0xdbd2a1ea6808362e6adbec4db4969cbc11e3b0b28fb6c74cb342defaaf1daada' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_swaps.sql b/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_swaps.sql index cfca585..3d72b08 100644 --- a/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_swaps.sql +++ b/models/silver/defi/dex/hashflow/silver_dex__hashflow_v3_swaps.sql @@ -51,6 +51,7 @@ swaps AS ( ON l.contract_address = p.pool_address WHERE l.topics [0] :: STRING = '0x34f57786fb01682fb4eec88d340387ef01a168fe345ea5b76f709d4e560c10eb' --Trade + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_pools.sql b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_pools.sql index ddab8b7..7ead8ee 100644 --- a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_pools.sql +++ b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_pools.sql @@ -34,6 +34,7 @@ WITH pool_creation AS ( WHERE contract_address = '0x10908c875d865c66f271f5d3949848971c9595c9' --dynamic fee factory AND topics [0] :: STRING = '0xfc574402c445e75f2b79b67884ff9c662244dce454c5ae68935fcd0bebb7c8ff' --created pool + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( SELECT diff --git a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_swaps.sql b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_swaps.sql index cdc7f53..4f3866b 100644 --- a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_swaps.sql +++ b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_dynamic_swaps.sql @@ -64,6 +64,7 @@ swaps_base AS ( ON p.pool_address = l.contract_address WHERE l.topics [0] :: STRING = '0x606ecd02b3e3b4778f8e97b2e03351de14224efaa5fa64e62200afc9395c2499' --Dynamic Swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_pools.sql b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_pools.sql index 46417d5..ddfd2ab 100644 --- a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_pools.sql +++ b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_pools.sql @@ -39,6 +39,7 @@ WITH pool_creation AS ( WHERE contract_address = LOWER('0x1c758aF0688502e49140230F6b0EBd376d429be5') --static pool factory AND topics [0] :: STRING = '0xb6bce363b712c921bead4bcc977289440eb6172eb89e258e3a25bd49ca806de6' --create pool + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_swaps.sql b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_swaps.sql index ec3637a..e1c3519 100644 --- a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_swaps.sql +++ b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v1_static_swaps.sql @@ -64,6 +64,7 @@ swaps_base AS ( ON p.pool_address = l.contract_address WHERE l.topics [0] :: STRING = '0x606ecd02b3e3b4778f8e97b2e03351de14224efaa5fa64e62200afc9395c2499' -- static swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_pools.sql b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_pools.sql index 412b9f7..462f1f2 100644 --- a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_pools.sql +++ b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_pools.sql @@ -30,6 +30,7 @@ WITH pool_creation AS ( WHERE contract_address = '0x5f1dddbf348ac2fbe22a163e30f99f9ece3dd50a' --Elastic Pool Deployer AND topics [0] :: STRING = '0x783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b7118' --Create pool + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_swaps.sql b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_swaps.sql index 299ff15..db7ec03 100644 --- a/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_swaps.sql +++ b/models/silver/defi/dex/kyberswap/silver_dex__kyberswap_v2_elastic_swaps.sql @@ -77,6 +77,7 @@ swaps_base AS ( ON p.pool_address = l.contract_address WHERE topics [0] :: STRING = '0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67' -- elastic swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/pangolin/silver_dex__pangolin_pools.sql b/models/silver/defi/dex/pangolin/silver_dex__pangolin_pools.sql index dfbcfce..d2ada84 100644 --- a/models/silver/defi/dex/pangolin/silver_dex__pangolin_pools.sql +++ b/models/silver/defi/dex/pangolin/silver_dex__pangolin_pools.sql @@ -27,6 +27,7 @@ WITH pool_creation AS ( WHERE contract_address = '0xefa94de7a4656d787667c749f7e1223d71e9fd88' --factory AND topics [0] :: STRING = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9' --create pool + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/pangolin/silver_dex__pangolin_swaps.sql b/models/silver/defi/dex/pangolin/silver_dex__pangolin_swaps.sql index e2714b4..ed02717 100644 --- a/models/silver/defi/dex/pangolin/silver_dex__pangolin_swaps.sql +++ b/models/silver/defi/dex/pangolin/silver_dex__pangolin_swaps.sql @@ -59,6 +59,7 @@ swaps_base AS ( ON l.contract_address = pool_address WHERE topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' --swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/platypus/silver_dex__platypus_pools.sql b/models/silver/defi/dex/platypus/silver_dex__platypus_pools.sql index 9c39c1b..caa8c04 100644 --- a/models/silver/defi/dex/platypus/silver_dex__platypus_pools.sql +++ b/models/silver/defi/dex/platypus/silver_dex__platypus_pools.sql @@ -19,7 +19,8 @@ WITH contract_deployments AS ( WHERE from_address = '0x416a7989a964c9ed60257b064efc3a30fe6bf2ee' AND TYPE ILIKE 'create%' - AND tx_status ILIKE 'success' + AND tx_status = 'SUCCESS' + AND trace_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/platypus/silver_dex__platypus_swaps.sql b/models/silver/defi/dex/platypus/silver_dex__platypus_swaps.sql index eca83b6..6596cdb 100644 --- a/models/silver/defi/dex/platypus/silver_dex__platypus_swaps.sql +++ b/models/silver/defi/dex/platypus/silver_dex__platypus_swaps.sql @@ -63,6 +63,7 @@ swaps_base AS ( ON l.contract_address = p.pool_address WHERE topics [0] :: STRING = '0x54787c404bb33c88e86f4baf88183a3b0141d0a848e6a9f7a13b66ae3a9b73d1' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/silver_dex__complete_dex_liquidity_pools.sql b/models/silver/defi/dex/silver_dex__complete_dex_liquidity_pools.sql index 68ec916..029e53f 100644 --- a/models/silver/defi/dex/silver_dex__complete_dex_liquidity_pools.sql +++ b/models/silver/defi/dex/silver_dex__complete_dex_liquidity_pools.sql @@ -3,15 +3,15 @@ incremental_strategy = 'delete+insert', unique_key = ['block_number','platform','version'], cluster_by = ['block_timestamp::DATE'], - tags = ['curated','reorg'] + tags = ['curated','reorg','heal'] ) }} WITH contracts AS ( SELECT - contract_address AS address, - token_symbol AS symbol, - token_decimals AS decimals, + contract_address, + token_symbol, + token_decimals, _inserted_timestamp FROM {{ ref('silver__contracts') }} @@ -24,10 +24,8 @@ balancer AS ( contract_address, pool_address, pool_name, - 'balancer' AS platform, - 'v1' AS version, - _log_id AS _id, - _inserted_timestamp, + NULL AS fee, + NULL AS tick_spacing, token0, token1, token2, @@ -35,15 +33,19 @@ balancer AS ( token4, token5, token6, - token7 + token7, + 'balancer' AS platform, + 'v1' AS version, + _log_id AS _id, + _inserted_timestamp FROM {{ ref('silver_dex__balancer_pools') }} -{% if is_incremental() and 'balancer' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'balancer' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -57,10 +59,8 @@ curve AS ( deployer_address AS contract_address, pool_address, pool_name, - 'curve' AS platform, - 'v1' AS version, - _call_id AS _id, - _inserted_timestamp, + NULL AS fee, + NULL AS tick_spacing, MAX( CASE WHEN token_num = 1 THEN token_address @@ -100,15 +100,19 @@ curve AS ( CASE WHEN token_num = 8 THEN token_address END - ) AS token7 + ) AS token7, + 'curve' AS platform, + 'v1' AS version, + _call_id AS _id, + _inserted_timestamp FROM {{ ref('silver_dex__curve_pools') }} -{% if is_incremental() and 'curve' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'curve' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -124,8 +128,16 @@ frax AS ( factory_address AS contract_address, pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'fraxswap' AS platform, 'v1' AS version, _log_id AS _id, @@ -133,11 +145,11 @@ frax AS ( FROM {{ ref('silver_dex__fraxswap_pools') }} -{% if is_incremental() and 'frax' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'frax' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -151,8 +163,16 @@ kyberswap_v1_dynamic AS ( contract_address, pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'kyberswap-v1' AS platform, 'v1-dynamic' AS version, _log_id AS _id, @@ -160,11 +180,11 @@ kyberswap_v1_dynamic AS ( FROM {{ ref('silver_dex__kyberswap_v1_dynamic_pools') }} -{% if is_incremental() and 'kyberswap_v1_dynamic' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'kyberswap_v1_dynamic' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -178,8 +198,16 @@ kyberswap_v1_static AS ( contract_address, pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'kyberswap-v1' AS platform, 'v1-static' AS version, _log_id AS _id, @@ -187,11 +215,11 @@ kyberswap_v1_static AS ( FROM {{ ref('silver_dex__kyberswap_v1_static_pools') }} -{% if is_incremental() and 'kyberswap_v1_static' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'kyberswap_v1_static' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -204,10 +232,17 @@ kyberswap_v2_elastic AS ( tx_hash, contract_address, pool_address, + NULL AS pool_name, swap_fee_units AS fee, tick_distance AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'kyberswap-v2' AS platform, 'v2' AS version, _log_id AS _id, @@ -215,11 +250,11 @@ kyberswap_v2_elastic AS ( FROM {{ ref('silver_dex__kyberswap_v2_elastic_pools') }} -{% if is_incremental() and 'kyberswap_v2_elastic' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'kyberswap_v2_elastic' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -233,8 +268,16 @@ pangolin AS ( contract_address, pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'pangolin' AS platform, 'v1' AS version, _log_id AS _id, @@ -242,11 +285,11 @@ pangolin AS ( FROM {{ ref('silver_dex__pangolin_pools') }} -{% if is_incremental() and 'pangolin' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'pangolin' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -260,8 +303,16 @@ sushi AS ( contract_address, pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'sushiswap' AS platform, 'v1' AS version, _log_id AS _id, @@ -269,11 +320,11 @@ sushi AS ( FROM {{ ref('silver_dex__sushi_pools') }} -{% if is_incremental() and 'sushi' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'sushi' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -287,8 +338,16 @@ trader_joe_v1 AS ( contract_address, pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'trader-joe-v1' AS platform, 'v1' AS version, _log_id AS _id, @@ -296,11 +355,11 @@ trader_joe_v1 AS ( FROM {{ ref('silver_dex__trader_joe_v1_pools') }} -{% if is_incremental() and 'trader_joe_v1' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe_v1' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -314,8 +373,16 @@ trader_joe_v2 AS ( contract_address, lb_pair AS pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, tokenX AS token0, tokenY AS token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'trader-joe-v2' AS platform, 'v2' AS version, _log_id AS _id, @@ -323,11 +390,11 @@ trader_joe_v2 AS ( FROM {{ ref('silver_dex__trader_joe_v2_pools') }} -{% if is_incremental() and 'trader_joe_v2' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe_v2' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -340,10 +407,17 @@ uni_v3 AS ( created_tx_hash AS tx_hash, contract_address, pool_address, + NULL AS pool_name, fee, tick_spacing, token0_address AS token0, token1_address AS token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'uniswap-v3' AS platform, 'v3' AS version, _log_id AS _id, @@ -351,44 +425,52 @@ uni_v3 AS ( FROM {{ ref('silver_dex__univ3_pools') }} -{% if is_incremental() and 'uni_v3' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'uni_v3' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), uni_v2 AS ( -SELECT + SELECT block_number, block_timestamp, tx_hash, contract_address, pool_address, NULL AS pool_name, + NULL AS fee, + NULL AS tick_spacing, token0, token1, + NULL AS token2, + NULL AS token3, + NULL AS token4, + NULL AS token5, + NULL AS token6, + NULL AS token7, 'uniswap-v2' AS platform, 'v2' AS version, _log_id AS _id, _inserted_timestamp -FROM + FROM {{ ref('silver_dex__univ2_pools') }} -{% if is_incremental() and 'uni_v2' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'uni_v2' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '12 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -all_pools_standard AS ( +all_pools AS ( SELECT * FROM @@ -428,8 +510,7 @@ all_pools_standard AS ( * FROM trader_joe_v2 -), -all_pools_v3 AS ( + UNION ALL SELECT * FROM @@ -439,8 +520,7 @@ all_pools_v3 AS ( * FROM kyberswap_v2_elastic -), -all_pools_other AS ( + UNION ALL SELECT * FROM @@ -451,92 +531,27 @@ all_pools_other AS ( FROM curve ), -FINAL AS ( +complete_lps AS ( SELECT block_number, block_timestamp, tx_hash, - contract_address, + p.contract_address, pool_address, CASE - WHEN pool_name IS NULL THEN CONCAT( + WHEN pool_name IS NOT NULL THEN pool_name + WHEN pool_name IS NULL + AND platform IN ( + 'uniswap-v3', + 'kyberswap-v2' + ) THEN CONCAT( COALESCE( - c0.symbol, + c0.token_symbol, CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42)) ), '-', COALESCE( - c1.symbol, - CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42)) - ) - ) - ELSE pool_name - END AS pool_name, - OBJECT_CONSTRUCT( - 'token0', - token0, - 'token1', - token1 - ) AS tokens, - OBJECT_CONSTRUCT( - 'token0', - c0.symbol, - 'token1', - c1.symbol - ) AS symbols, - OBJECT_CONSTRUCT( - 'token0', - c0.decimals, - 'token1', - c1.decimals - ) AS decimals, - platform, - version, - _id, - p._inserted_timestamp - FROM - all_pools_standard p - LEFT JOIN contracts c0 - ON c0.address = p.token0 - LEFT JOIN contracts c1 - ON c1.address = p.token1 - UNION ALL - SELECT - block_number, - block_timestamp, - tx_hash, - contract_address, - pool_address, - CASE - WHEN platform = 'kyberswap-v2' THEN CONCAT( - COALESCE( - c0.symbol, - CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42)) - ), - '-', - COALESCE( - c1.symbol, - CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42)) - ), - ' ', - COALESCE( - fee, - 0 - ), - ' ', - COALESCE( - tick_spacing, - 0 - ) - ) - WHEN platform = 'uniswap-v3' THEN CONCAT( - COALESCE( - c0.symbol, - CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42)) - ), - '-', - COALESCE( - c1.symbol, + c1.token_symbol, CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42)) ), ' ', @@ -549,78 +564,68 @@ FINAL AS ( tick_spacing, 0 ), - ' UNI-V3 LP' + CASE + WHEN platform = 'uniswap-v3' THEN ' UNI-V3 LP' + WHEN platform = 'kyberswap-v2' THEN '' + END ) - END AS pool_name, - OBJECT_CONSTRUCT( - 'token0', - token0, - 'token1', - token1 - ) AS tokens, - OBJECT_CONSTRUCT( - 'token0', - c0.symbol, - 'token1', - c1.symbol - ) AS symbols, - OBJECT_CONSTRUCT( - 'token0', - c0.decimals, - 'token1', - c1.decimals - ) AS decimals, - platform, - version, - _id, - p._inserted_timestamp - FROM - all_pools_v3 p - LEFT JOIN contracts c0 - ON c0.address = p.token0 - LEFT JOIN contracts c1 - ON c1.address = p.token1 - UNION ALL - SELECT - block_number, - block_timestamp, - tx_hash, - contract_address, - pool_address, - CASE - WHEN pool_name IS NULL THEN CONCAT( - COALESCE(c0.symbol, SUBSTRING(token0, 1, 5) || '...' || SUBSTRING(token0, 39, 42)), + WHEN pool_name IS NULL + AND platform IN ( + 'balancer', + 'curve' + ) THEN CONCAT( + COALESCE(c0.token_symbol, SUBSTRING(token0, 1, 5) || '...' || SUBSTRING(token0, 39, 42)), CASE - WHEN token1 IS NOT NULL THEN '-' || COALESCE(c1.symbol, SUBSTRING(token1, 1, 5) || '...' || SUBSTRING(token1, 39, 42)) + WHEN token1 IS NOT NULL THEN '-' || COALESCE(c1.token_symbol, SUBSTRING(token1, 1, 5) || '...' || SUBSTRING(token1, 39, 42)) ELSE '' END, CASE - WHEN token2 IS NOT NULL THEN '-' || COALESCE(c2.symbol, SUBSTRING(token2, 1, 5) || '...' || SUBSTRING(token2, 39, 42)) + WHEN token2 IS NOT NULL THEN '-' || COALESCE(c2.token_symbol, SUBSTRING(token2, 1, 5) || '...' || SUBSTRING(token2, 39, 42)) ELSE '' END, CASE - WHEN token3 IS NOT NULL THEN '-' || COALESCE(c3.symbol, SUBSTRING(token3, 1, 5) || '...' || SUBSTRING(token3, 39, 42)) + WHEN token3 IS NOT NULL THEN '-' || COALESCE(c3.token_symbol, SUBSTRING(token3, 1, 5) || '...' || SUBSTRING(token3, 39, 42)) ELSE '' END, CASE - WHEN token4 IS NOT NULL THEN '-' || COALESCE(c4.symbol, SUBSTRING(token4, 1, 5) || '...' || SUBSTRING(token4, 39, 42)) + WHEN token4 IS NOT NULL THEN '-' || COALESCE(c4.token_symbol, SUBSTRING(token4, 1, 5) || '...' || SUBSTRING(token4, 39, 42)) ELSE '' END, CASE - WHEN token5 IS NOT NULL THEN '-' || COALESCE(c5.symbol, SUBSTRING(token5, 1, 5) || '...' || SUBSTRING(token5, 39, 42)) + WHEN token5 IS NOT NULL THEN '-' || COALESCE(c5.token_symbol, SUBSTRING(token5, 1, 5) || '...' || SUBSTRING(token5, 39, 42)) ELSE '' END, CASE - WHEN token6 IS NOT NULL THEN '-' || COALESCE(c6.symbol, SUBSTRING(token6, 1, 5) || '...' || SUBSTRING(token6, 39, 42)) + WHEN token6 IS NOT NULL THEN '-' || COALESCE(c6.token_symbol, SUBSTRING(token6, 1, 5) || '...' || SUBSTRING(token6, 39, 42)) ELSE '' END, CASE - WHEN token7 IS NOT NULL THEN '-' || COALESCE(c7.symbol, SUBSTRING(token7, 1, 5) || '...' || SUBSTRING(token7, 39, 42)) + WHEN token7 IS NOT NULL THEN '-' || COALESCE(c7.token_symbol, SUBSTRING(token7, 1, 5) || '...' || SUBSTRING(token7, 39, 42)) ELSE '' END ) - ELSE pool_name + ELSE CONCAT( + COALESCE( + c0.token_symbol, + CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42)) + ), + '-', + COALESCE( + c1.token_symbol, + CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42)) + ) + ) END AS pool_name, + fee, + tick_spacing, + token0, + token1, + token2, + token3, + token4, + token5, + token6, + token7, OBJECT_CONSTRUCT( 'token0', token0, @@ -641,62 +646,583 @@ FINAL AS ( ) AS tokens, OBJECT_CONSTRUCT( 'token0', - c0.symbol, + c0.token_symbol, 'token1', - c1.symbol, + c1.token_symbol, 'token2', - c2.symbol, + c2.token_symbol, 'token3', - c3.symbol, + c3.token_symbol, 'token4', - c4.symbol, + c4.token_symbol, 'token5', - c5.symbol, + c5.token_symbol, 'token6', - c6.symbol, + c6.token_symbol, 'token7', - c7.symbol + c7.token_symbol ) AS symbols, OBJECT_CONSTRUCT( 'token0', - c0.decimals, + c0.token_decimals, 'token1', - c1.decimals, + c1.token_decimals, 'token2', - c2.decimals, + c2.token_decimals, 'token3', - c3.decimals, + c3.token_decimals, 'token4', - c4.decimals, + c4.token_decimals, 'token5', - c5.decimals, + c5.token_decimals, 'token6', - c6.decimals, + c6.token_decimals, 'token7', - c7.decimals + c7.token_decimals ) AS decimals, platform, version, _id, p._inserted_timestamp FROM - all_pools_other p + all_pools p LEFT JOIN contracts c0 - ON c0.address = p.token0 + ON c0.contract_address = p.token0 LEFT JOIN contracts c1 - ON c1.address = p.token1 + ON c1.contract_address = p.token1 LEFT JOIN contracts c2 - ON c2.address = p.token2 + ON c2.contract_address = p.token2 LEFT JOIN contracts c3 - ON c3.address = p.token3 + ON c3.contract_address = p.token3 LEFT JOIN contracts c4 - ON c4.address = p.token4 + ON c4.contract_address = p.token4 LEFT JOIN contracts c5 - ON c5.address = p.token5 + ON c5.contract_address = p.token5 LEFT JOIN contracts c6 - ON c6.address = p.token6 + ON c6.contract_address = p.token6 LEFT JOIN contracts c7 - ON c7.address = p.token7 + ON c7.contract_address = p.token7 +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + block_number, + block_timestamp, + tx_hash, + t0.contract_address, + pool_address, + CASE + WHEN pool_name IS NOT NULL THEN pool_name + WHEN pool_name IS NULL + AND platform IN ( + 'uniswap-v3', + 'kyberswap-v2' + ) THEN CONCAT( + COALESCE( + c0.token_symbol, + CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42)) + ), + '-', + COALESCE( + c1.token_symbol, + CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42)) + ), + ' ', + COALESCE( + fee, + 0 + ), + ' ', + COALESCE( + tick_spacing, + 0 + ), + CASE + WHEN platform = 'uniswap-v3' THEN ' UNI-V3 LP' + WHEN platform = 'kyberswap-v2' THEN '' + END + ) + WHEN pool_name IS NULL + AND platform IN ( + 'balancer', + 'curve' + ) THEN CONCAT( + COALESCE(c0.token_symbol, SUBSTRING(token0, 1, 5) || '...' || SUBSTRING(token0, 39, 42)), + CASE + WHEN token1 IS NOT NULL THEN '-' || COALESCE(c1.token_symbol, SUBSTRING(token1, 1, 5) || '...' || SUBSTRING(token1, 39, 42)) + ELSE '' + END, + CASE + WHEN token2 IS NOT NULL THEN '-' || COALESCE(c2.token_symbol, SUBSTRING(token2, 1, 5) || '...' || SUBSTRING(token2, 39, 42)) + ELSE '' + END, + CASE + WHEN token3 IS NOT NULL THEN '-' || COALESCE(c3.token_symbol, SUBSTRING(token3, 1, 5) || '...' || SUBSTRING(token3, 39, 42)) + ELSE '' + END, + CASE + WHEN token4 IS NOT NULL THEN '-' || COALESCE(c4.token_symbol, SUBSTRING(token4, 1, 5) || '...' || SUBSTRING(token4, 39, 42)) + ELSE '' + END, + CASE + WHEN token5 IS NOT NULL THEN '-' || COALESCE(c5.token_symbol, SUBSTRING(token5, 1, 5) || '...' || SUBSTRING(token5, 39, 42)) + ELSE '' + END, + CASE + WHEN token6 IS NOT NULL THEN '-' || COALESCE(c6.token_symbol, SUBSTRING(token6, 1, 5) || '...' || SUBSTRING(token6, 39, 42)) + ELSE '' + END, + CASE + WHEN token7 IS NOT NULL THEN '-' || COALESCE(c7.token_symbol, SUBSTRING(token7, 1, 5) || '...' || SUBSTRING(token7, 39, 42)) + ELSE '' + END + ) + ELSE CONCAT( + COALESCE( + c0.token_symbol, + CONCAT(SUBSTRING(token0, 1, 5), '...', SUBSTRING(token0, 39, 42)) + ), + '-', + COALESCE( + c1.token_symbol, + CONCAT(SUBSTRING(token1, 1, 5), '...', SUBSTRING(token1, 39, 42)) + ) + ) + END AS pool_name_heal, + fee, + tick_spacing, + token0, + token1, + token2, + token3, + token4, + token5, + token6, + token7, + tokens, + OBJECT_CONSTRUCT( + 'token0', + c0.token_symbol, + 'token1', + c1.token_symbol, + 'token2', + c2.token_symbol, + 'token3', + c3.token_symbol, + 'token4', + c4.token_symbol, + 'token5', + c5.token_symbol, + 'token6', + c6.token_symbol, + 'token7', + c7.token_symbol + ) AS symbols_heal, + OBJECT_CONSTRUCT( + 'token0', + c0.token_decimals, + 'token1', + c1.token_decimals, + 'token2', + c2.token_decimals, + 'token3', + c3.token_decimals, + 'token4', + c4.token_decimals, + 'token5', + c5.token_decimals, + 'token6', + c6.token_decimals, + 'token7', + c7.token_decimals + ) AS decimals_heal, + platform, + version, + _id, + t0._inserted_timestamp + FROM + {{ this }} + t0 + LEFT JOIN contracts c0 + ON c0.contract_address = t0.token0 + LEFT JOIN contracts c1 + ON c1.contract_address = t0.token1 + LEFT JOIN contracts c2 + ON c2.contract_address = t0.token2 + LEFT JOIN contracts c3 + ON c3.contract_address = t0.token3 + LEFT JOIN contracts c4 + ON c4.contract_address = t0.token4 + LEFT JOIN contracts c5 + ON c5.contract_address = t0.token5 + LEFT JOIN contracts c6 + ON c6.contract_address = t0.token6 + LEFT JOIN contracts c7 + ON c7.contract_address = t0.token7 + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform, + '-', + t1.version + ) + FROM + {{ this }} + t1 + WHERE + t1.decimals :token0 :: INT IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t1.tokens :token0 :: STRING) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t2.block_number, + '-', + t2.platform, + '-', + t2.version + ) + FROM + {{ this }} + t2 + WHERE + t2.decimals :token1 :: INT IS NULL + AND t2._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t2.tokens :token1 :: STRING) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t3.block_number, + '-', + t3.platform, + '-', + t3.version + ) + FROM + {{ this }} + t3 + WHERE + t3.decimals :token2 :: INT IS NULL + AND t3._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t3.tokens :token2 :: STRING) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t4.block_number, + '-', + t4.platform, + '-', + t4.version + ) + FROM + {{ this }} + t4 + WHERE + t4.decimals :token3 :: INT IS NULL + AND t4._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t4.tokens :token3 :: STRING) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t5.block_number, + '-', + t5.platform, + '-', + t5.version + ) + FROM + {{ this }} + t5 + WHERE + t5.decimals :token4 :: INT IS NULL + AND t5._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t5.tokens :token4 :: STRING) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t6.block_number, + '-', + t6.platform, + '-', + t6.version + ) + FROM + {{ this }} + t6 + WHERE + t6.decimals :token5 :: INT IS NULL + AND t6._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t6.tokens :token5 :: STRING) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t7.block_number, + '-', + t7.platform, + '-', + t7.version + ) + FROM + {{ this }} + t7 + WHERE + t7.decimals :token6 :: INT IS NULL + AND t7._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t7.tokens :token6 :: STRING) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t8.block_number, + '-', + t8.platform, + '-', + t8.version + ) + FROM + {{ this }} + t8 + WHERE + t8.decimals :token7 :: INT IS NULL + AND t8._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t8.tokens :token7 :: STRING) + GROUP BY + 1 + ) + ), + {% endif %} + + FINAL AS ( + SELECT + * + FROM + complete_lps + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + block_number, + block_timestamp, + tx_hash, + contract_address, + pool_address, + pool_name_heal AS pool_name, + fee, + tick_spacing, + token0, + token1, + token2, + token3, + token4, + token5, + token6, + token7, + tokens, + symbols_heal AS symbols, + decimals_heal AS decimals, + platform, + version, + _id, + _inserted_timestamp +FROM + heal_model +{% endif %} ) SELECT block_number, @@ -710,6 +1236,16 @@ SELECT tokens, symbols, decimals, + fee, + tick_spacing, + token0, + token1, + token2, + token3, + token4, + token5, + token6, + token7, _id, _inserted_timestamp, {{ dbt_utils.generate_surrogate_key( diff --git a/models/silver/defi/dex/silver_dex__complete_dex_swaps.sql b/models/silver/defi/dex/silver_dex__complete_dex_swaps.sql index 287416a..3d353bd 100644 --- a/models/silver/defi/dex/silver_dex__complete_dex_swaps.sql +++ b/models/silver/defi/dex/silver_dex__complete_dex_swaps.sql @@ -1,37 +1,14 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform','version'], cluster_by = ['block_timestamp::DATE'], - tags = ['curated','reorg'] + tags = ['curated','reorg','heal'] ) }} -WITH contracts AS ( +WITH balancer AS ( - SELECT - contract_address AS address, - token_symbol AS symbol, - token_name AS NAME, - token_decimals AS decimals - FROM - {{ ref('silver__contracts') }} -), -prices AS ( - SELECT - HOUR, - token_address, - price - FROM - {{ ref('price__ez_prices_hourly') }} - WHERE - token_address IN ( - SELECT - DISTINCT address - FROM - contracts - ) -), -balancer_swaps AS ( SELECT block_number, block_timestamp, @@ -40,50 +17,32 @@ balancer_swaps AS ( origin_from_address, origin_to_address, contract_address, - NULL AS pool_name, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__balancer_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'balancer_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'balancer' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -trader_joe_v1_swaps AS ( +trader_joe_v1 AS ( SELECT block_number, block_timestamp, @@ -93,49 +52,31 @@ trader_joe_v1_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__trader_joe_v1_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'trader_joe_v1_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe_v1' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -trader_joe_v2_swaps AS ( +trader_joe_v2 AS ( SELECT block_number, block_timestamp, @@ -145,49 +86,31 @@ trader_joe_v2_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v2' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__trader_joe_v2_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'trader_joe_v2_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe_v2' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -trader_joe_v2_1_swaps AS ( +trader_joe_v2_1 AS ( SELECT block_number, block_timestamp, @@ -197,49 +120,31 @@ trader_joe_v2_1_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v2.1' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__trader_joe_v2_1_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'trader_joe_v2_1_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe_v2_1' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -woofi_swaps AS ( +woofi AS ( SELECT block_number, block_timestamp, @@ -249,71 +154,31 @@ woofi_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - CONCAT( - LEAST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ), - '-', - GREATEST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ) - ) AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__woofi_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'woofi_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'woofi' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -gmx_swaps AS ( +gmx AS ( SELECT block_number, block_timestamp, @@ -323,65 +188,25 @@ gmx_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - CONCAT( - LEAST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ), - '-', - GREATEST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ) - ) AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__gmx_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'gmx_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'gmx' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -397,43 +222,25 @@ kyberswap_v1_dynamic AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1-dynamic' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__kyberswap_v1_dynamic_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'kyberswap_v1_dynamic' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'kyberswap_v1_dynamic' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -449,43 +256,25 @@ kyberswap_v1_static AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1-static' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__kyberswap_v1_static_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'kyberswap_v1_static' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'kyberswap_v1_static' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -501,49 +290,31 @@ kyberswap_v2_elastic AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v2' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__kyberswap_v2_elastic_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'kyberswap_v2_elastic' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'kyberswap_v2_elastic' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -pangolin_swaps AS ( +pangolin AS ( SELECT block_number, block_timestamp, @@ -553,49 +324,31 @@ pangolin_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__pangolin_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'pangolin_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'pangolin' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -platypus_swaps AS ( +platypus AS ( SELECT block_number, block_timestamp, @@ -605,71 +358,31 @@ platypus_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - CONCAT( - LEAST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ), - '-', - GREATEST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ) - ) AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__platypus_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'platypus_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'platypus' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -fraxswap_swaps AS ( +fraxswap AS ( SELECT block_number, block_timestamp, @@ -679,49 +392,31 @@ fraxswap_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__fraxswap_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'fraxswap_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'fraxswap' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -hashflow_swaps AS ( +hashflow AS ( SELECT block_number, block_timestamp, @@ -731,71 +426,31 @@ hashflow_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - CONCAT( - LEAST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ), - '-', - GREATEST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ) - ) AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__hashflow_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'hashflow_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'hashflow' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -hashflow_v3_swaps AS ( +hashflow_v3 AS ( SELECT block_number, block_timestamp, @@ -805,71 +460,31 @@ hashflow_v3_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v3' AS version, - token_in, - token_out, - CONCAT( - LEAST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ), - '-', - GREATEST( - COALESCE( - symbol_in, - CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) - ), - COALESCE( - symbol_out, - CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) - ) - ) - ) AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__hashflow_v3_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'hashflow_v3_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'hashflow_v3' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -sushi_swaps AS ( +sushi AS ( SELECT block_number, block_timestamp, @@ -879,49 +494,31 @@ sushi_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__sushi_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'sushi_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'sushi' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -curve_swaps AS ( +curve AS ( SELECT block_number, block_timestamp, @@ -930,67 +527,32 @@ curve_swaps AS ( origin_from_address, origin_to_address, contract_address, - NULL AS pool_name, event_name, - s.tokens_sold AS amount_in_unadj, - s.tokens_bought AS amount_out_unadj, + tokens_sold AS amount_in_unadj, + tokens_bought AS amount_out_unadj, + token_in, + token_out, sender, tx_to, event_index, platform, 'v1' AS version, - token_in, - token_out, - COALESCE( - c1.symbol, - s.symbol_in - ) AS token_symbol_in, - COALESCE( - c2.symbol, - s.symbol_out - ) AS token_symbol_out, - c1.decimals AS decimals_in, - CASE - WHEN decimals_in IS NOT NULL THEN s.tokens_sold / pow( - 10, - decimals_in - ) - ELSE s.tokens_sold - END AS amount_in, - c2.decimals AS decimals_out, - CASE - WHEN decimals_out IS NOT NULL THEN s.tokens_bought / pow( - 10, - decimals_out - ) - ELSE s.tokens_bought - END AS amount_out, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__curve_swaps') }} - s - LEFT JOIN contracts c1 - ON c1.address = s.token_in - LEFT JOIN contracts c2 - ON c2.address = s.token_out - WHERE - amount_out <> 0 - AND COALESCE( - token_symbol_in, - 'null' - ) <> COALESCE(token_symbol_out, 'null') -{% if is_incremental() and 'curve_swaps' not in var('HEAL_CURATED_MODEL') %} -AND _inserted_timestamp >= ( - SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' - FROM - {{ this }} -) +{% if is_incremental() and 'curve' not in var('HEAL_MODELS') %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) {% endif %} ), -univ3_swaps AS ( +univ3 AS ( SELECT block_number, block_timestamp, @@ -999,51 +561,15 @@ univ3_swaps AS ( origin_from_address, origin_to_address, pool_address AS contract_address, - NULL AS pool_name, 'Swap' AS event_name, - amount0_unadj / pow(10, COALESCE(c1.decimals, 18)) AS amount0_adjusted, - amount1_unadj / pow(10, COALESCE(c2.decimals, 18)) AS amount1_adjusted, - CASE - WHEN c1.decimals IS NOT NULL THEN ROUND( - p1.price * amount0_adjusted, - 2 - ) - END AS amount0_usd, - CASE - WHEN c2.decimals IS NOT NULL THEN ROUND( - p2.price * amount1_adjusted, - 2 - ) - END AS amount1_usd, CASE WHEN amount0_unadj > 0 THEN ABS(amount0_unadj) ELSE ABS(amount1_unadj) END AS amount_in_unadj, - CASE - WHEN amount0_unadj > 0 THEN ABS(amount0_adjusted) - ELSE ABS(amount1_adjusted) - END AS amount_in, - CASE - WHEN amount0_unadj > 0 THEN ABS(amount0_usd) - ELSE ABS(amount1_usd) - END AS amount_in_usd, CASE WHEN amount0_unadj < 0 THEN ABS(amount0_unadj) ELSE ABS(amount1_unadj) END AS amount_out_unadj, - CASE - WHEN amount0_unadj < 0 THEN ABS(amount0_adjusted) - ELSE ABS(amount1_adjusted) - END AS amount_out, - CASE - WHEN amount0_unadj < 0 THEN ABS(amount0_usd) - ELSE ABS(amount1_usd) - END AS amount_out_usd, - sender, - recipient AS tx_to, - event_index, - 'uniswap-v3' AS platform, - 'v3' AS version, CASE WHEN amount0_unadj > 0 THEN token0_address ELSE token1_address @@ -1052,47 +578,27 @@ univ3_swaps AS ( WHEN amount0_unadj < 0 THEN token0_address ELSE token1_address END AS token_out, - CASE - WHEN amount0_unadj > 0 THEN c1.symbol - ELSE c2.symbol - END AS symbol_in, - CASE - WHEN amount0_unadj < 0 THEN c1.symbol - ELSE c2.symbol - END AS symbol_out, + sender, + recipient AS tx_to, + event_index, + 'uniswap-v3' AS platform, + 'v3' AS version, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__univ3_swaps') }} - s - LEFT JOIN contracts c1 - ON c1.address = s.token0_address - LEFT JOIN contracts c2 - ON c2.address = s.token1_address - LEFT JOIN prices p1 - ON s.token0_address = p1.token_address - AND DATE_TRUNC( - 'hour', - block_timestamp - ) = p1.hour - LEFT JOIN prices p2 - ON s.token1_address = p2.token_address - AND DATE_TRUNC( - 'hour', - block_timestamp - ) = p2.hour -{% if is_incremental() and 'univ3_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'univ3' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -univ2_swaps AS ( +univ2 AS ( SELECT block_number, block_timestamp, @@ -1102,731 +608,566 @@ univ2_swaps AS ( origin_to_address, contract_address, event_name, - c1.decimals AS decimals_in, - c1.symbol AS symbol_in, amount_in_unadj, - CASE - WHEN decimals_in IS NULL THEN amount_in_unadj - ELSE (amount_in_unadj / pow(10, decimals_in)) - END AS amount_in, - c2.decimals AS decimals_out, - c2.symbol AS symbol_out, amount_out_unadj, - CASE - WHEN decimals_out IS NULL THEN amount_out_unadj - ELSE (amount_out_unadj / pow(10, decimals_out)) - END AS amount_out, + token_in, + token_out, sender, tx_to, event_index, platform, 'v2' AS version, - token_in, - token_out, - NULL AS pool_name, _log_id, _inserted_timestamp FROM {{ ref('silver_dex__univ2_swaps') }} - s - LEFT JOIN contracts c1 - ON s.token_in = c1.address - LEFT JOIN contracts c2 - ON s.token_out = c2.address -{% if is_incremental() and 'univ2_swaps' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'univ2' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), ---union all standard dex CTEs here (excludes amount_usd) -all_dex_standard AS ( +all_dex AS ( SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - balancer_swaps + balancer UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - trader_joe_v1_swaps + trader_joe_v1 UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - trader_joe_v2_swaps + trader_joe_v2 UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - trader_joe_v2_1_swaps + trader_joe_v2_1 UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - woofi_swaps + woofi UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - gmx_swaps + gmx UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM kyberswap_v1_dynamic UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM kyberswap_v1_static UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM kyberswap_v2_elastic UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - pangolin_swaps + pangolin UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - platypus_swaps + platypus UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - fraxswap_swaps + fraxswap UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - univ2_swaps + univ2 UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - sushi_swaps + sushi UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - token_symbol_in AS symbol_in, - token_symbol_out AS symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - curve_swaps + curve UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - hashflow_swaps + hashflow UNION ALL SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, - amount_out, - sender, - tx_to, - event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - decimals_in, - decimals_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + * FROM - hashflow_v3_swaps + hashflow_v3 + UNION ALL + SELECT + * + FROM + univ3 ), ---union all non-standard dex CTEs here (excludes amount_usd) -all_dex_custom AS ( +complete_dex_swaps AS ( SELECT - block_number, - block_timestamp, - tx_hash, + s.block_number, + s.block_timestamp, + s.tx_hash, origin_function_signature, origin_from_address, origin_to_address, - contract_address, - pool_name, + s.contract_address, event_name, - amount_in_unadj, - amount_in, - amount_in_usd, - amount_out_unadj, - amount_out, - amount_out_usd, - sender, - tx_to, - event_index, - platform, - version, token_in, - token_out, - symbol_in, - symbol_out, - _log_id, - _inserted_timestamp - FROM - univ3_swaps -), -FINAL AS ( - SELECT - block_number, - block_timestamp, - tx_hash, - origin_function_signature, - origin_from_address, - origin_to_address, - contract_address, - pool_name, - event_name, - amount_in, + c1.token_decimals AS decimals_in, + c1.token_symbol AS symbol_in, + amount_in_unadj, CASE - WHEN s.decimals_in IS NOT NULL THEN ROUND( - amount_in * p1.price, - 2 - ) + WHEN decimals_in IS NULL THEN amount_in_unadj + ELSE (amount_in_unadj / pow(10, decimals_in)) + END AS amount_in, + CASE + WHEN decimals_in IS NOT NULL THEN amount_in * p1.price ELSE NULL END AS amount_in_usd, - amount_out, + token_out, + c2.token_decimals AS decimals_out, + c2.token_symbol AS symbol_out, + amount_out_unadj, CASE - WHEN s.decimals_out IS NOT NULL THEN ROUND( - amount_out * p2.price, - 2 - ) + WHEN decimals_out IS NULL THEN amount_out_unadj + ELSE (amount_out_unadj / pow(10, decimals_out)) + END AS amount_out, + CASE + WHEN decimals_out IS NOT NULL THEN amount_out * p2.price ELSE NULL END AS amount_out_usd, + CASE + WHEN lp.pool_name IS NULL THEN CONCAT( + LEAST( + COALESCE( + symbol_in, + CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) + ), + COALESCE( + symbol_out, + CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) + ) + ), + '-', + GREATEST( + COALESCE( + symbol_in, + CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) + ), + COALESCE( + symbol_out, + CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) + ) + ) + ) + ELSE lp.pool_name + END AS pool_name, sender, tx_to, event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + s.platform, + s.version, + s._log_id, + s._inserted_timestamp FROM - all_dex_standard s - LEFT JOIN prices p1 + all_dex s + LEFT JOIN {{ ref('silver__contracts') }} + c1 + ON s.token_in = c1.contract_address + LEFT JOIN {{ ref('silver__contracts') }} + c2 + ON s.token_out = c2.contract_address + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p1 ON s.token_in = p1.token_address AND DATE_TRUNC( 'hour', block_timestamp ) = p1.hour - LEFT JOIN prices p2 + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p2 ON s.token_out = p2.token_address AND DATE_TRUNC( 'hour', block_timestamp ) = p2.hour - UNION ALL + LEFT JOIN {{ ref('silver_dex__complete_dex_liquidity_pools') }} + lp + ON s.contract_address = lp.pool_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( SELECT - block_number, - block_timestamp, - tx_hash, + t0.block_number, + t0.block_timestamp, + t0.tx_hash, origin_function_signature, origin_from_address, origin_to_address, - contract_address, - pool_name, + t0.contract_address, event_name, - amount_in, - ROUND( - amount_in_usd, - 2 - ) AS amount_in_usd, - amount_out, - ROUND( - amount_out_usd, - 2 - ) AS amount_out_usd, + token_in, + c1.token_decimals AS decimals_in, + c1.token_symbol AS symbol_in, + amount_in_unadj, + CASE + WHEN c1.token_decimals IS NULL THEN amount_in_unadj + ELSE (amount_in_unadj / pow(10, c1.token_decimals)) + END AS amount_in_heal, + CASE + WHEN c1.token_decimals IS NOT NULL THEN amount_in_heal * p1.price + ELSE NULL + END AS amount_in_usd_heal, + token_out, + c2.token_decimals AS decimals_out, + c2.token_symbol AS symbol_out, + amount_out_unadj, + CASE + WHEN c2.token_decimals IS NULL THEN amount_out_unadj + ELSE (amount_out_unadj / pow(10, c2.token_decimals)) + END AS amount_out_heal, + CASE + WHEN c2.token_decimals IS NOT NULL THEN amount_out_heal * p2.price + ELSE NULL + END AS amount_out_usd_heal, + CASE + WHEN lp.pool_name IS NULL THEN CONCAT( + LEAST( + COALESCE( + c1.token_symbol, + CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) + ), + COALESCE( + c2.token_symbol, + CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) + ) + ), + '-', + GREATEST( + COALESCE( + c1.token_symbol, + CONCAT(SUBSTRING(token_in, 1, 5), '...', SUBSTRING(token_in, 39, 42)) + ), + COALESCE( + c2.token_symbol, + CONCAT(SUBSTRING(token_out, 1, 5), '...', SUBSTRING(token_out, 39, 42)) + ) + ) + ) + ELSE lp.pool_name + END AS pool_name_heal, sender, tx_to, event_index, - platform, - version, - token_in, - token_out, - symbol_in, - symbol_out, - amount_in_unadj, - amount_out_unadj, - _log_id, - _inserted_timestamp + t0.platform, + t0.version, + t0._log_id, + t0._inserted_timestamp FROM - all_dex_custom C -) + {{ this }} + t0 + LEFT JOIN {{ ref('silver__contracts') }} + c1 + ON t0.token_in = c1.contract_address + LEFT JOIN {{ ref('silver__contracts') }} + c2 + ON t0.token_out = c2.contract_address + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p1 + ON t0.token_in = p1.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p1.hour + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p2 + ON t0.token_out = p2.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p2.hour + LEFT JOIN {{ ref('silver_dex__complete_dex_liquidity_pools') }} + lp + ON t0.contract_address = lp.pool_address + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform, + '-', + t1.version + ) + FROM + {{ this }} + t1 + WHERE + t1.decimals_in IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t1.token_in) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t2.block_number, + '-', + t2.platform, + '-', + t2.version + ) + FROM + {{ this }} + t2 + WHERE + t2.decimals_out IS NULL + AND t2._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__contracts') }} C + WHERE + C._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND C.token_decimals IS NOT NULL + AND C.contract_address = t2.token_out) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t3.block_number, + '-', + t3.platform, + '-', + t3.version + ) + FROM + {{ this }} + t3 + WHERE + t3.amount_in_usd IS NULL + AND t3._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t3.token_in + AND p.hour = DATE_TRUNC( + 'hour', + t3.block_timestamp + ) + ) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform, + '-', + t0.version + ) IN ( + SELECT + CONCAT( + t4.block_number, + '-', + t4.platform, + '-', + t4.version + ) + FROM + {{ this }} + t4 + WHERE + t4.amount_out_usd IS NULL + AND t4._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t4.token_out + AND p.hour = DATE_TRUNC( + 'hour', + t4.block_timestamp + ) + ) + GROUP BY + 1 + ) + ), + {% endif %} + + FINAL AS ( + SELECT + * + FROM + complete_dex_swaps + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL SELECT - f.block_number, - f.block_timestamp, - f.tx_hash, + block_number, + block_timestamp, + tx_hash, origin_function_signature, origin_from_address, origin_to_address, - f.contract_address, - CASE - WHEN f.pool_name IS NULL THEN p.pool_name - ELSE f.pool_name - END AS pool_name, + contract_address, event_name, - amount_in, - CASE - WHEN amount_out_usd IS NULL - OR ABS((amount_in_usd - amount_out_usd) / NULLIF(amount_out_usd, 0)) > 0.75 - OR ABS((amount_in_usd - amount_out_usd) / NULLIF(amount_in_usd, 0)) > 0.75 THEN NULL - ELSE amount_in_usd - END AS amount_in_usd, - amount_out, - CASE - WHEN amount_in_usd IS NULL - OR ABS((amount_out_usd - amount_in_usd) / NULLIF(amount_in_usd, 0)) > 0.75 - OR ABS((amount_out_usd - amount_in_usd) / NULLIF(amount_out_usd, 0)) > 0.75 THEN NULL - ELSE amount_out_usd - END AS amount_out_usd, + token_in, + decimals_in, + symbol_in, + amount_in_unadj, + amount_in_heal AS amount_in, + amount_in_usd_heal AS amount_in_usd, + token_out, + decimals_out, + symbol_out, + amount_out_unadj, + amount_out_heal AS amount_out, + amount_out_usd_heal AS amount_out_usd, + pool_name_heal AS pool_name, sender, tx_to, event_index, - f.platform, - f.version, + platform, + version, + _log_id, + _inserted_timestamp +FROM + heal_model +{% endif %} +) +SELECT + block_number, + block_timestamp, + tx_hash, + origin_function_signature, + origin_from_address, + origin_to_address, + contract_address, + pool_name, + event_name, + amount_in_unadj, + amount_in, + amount_in_usd, + amount_out_unadj, + amount_out, + amount_out_usd, + sender, + tx_to, + event_index, + platform, + version, token_in, token_out, symbol_in, symbol_out, - amount_in_unadj, - amount_out_unadj, - f._log_id, - f._inserted_timestamp, + decimals_in, + decimals_out, + _log_id, + _inserted_timestamp, {{ dbt_utils.generate_surrogate_key( - ['f.tx_hash','f.event_index'] + ['tx_hash','event_index'] ) }} AS complete_dex_swaps_id, SYSDATE() AS inserted_timestamp, SYSDATE() AS modified_timestamp, '{{ invocation_id }}' AS _invocation_id FROM - FINAL f - LEFT JOIN {{ ref('silver_dex__complete_dex_liquidity_pools') }} - p - ON f.contract_address = p.pool_address + FINAL qualify (ROW_NUMBER() over (PARTITION BY _log_id +ORDER BY + _inserted_timestamp DESC)) = 1 diff --git a/models/silver/defi/dex/sushi/silver_dex__sushi_pools.sql b/models/silver/defi/dex/sushi/silver_dex__sushi_pools.sql index 25ed844..19bcc1e 100644 --- a/models/silver/defi/dex/sushi/silver_dex__sushi_pools.sql +++ b/models/silver/defi/dex/sushi/silver_dex__sushi_pools.sql @@ -27,6 +27,7 @@ WITH pool_creation AS ( WHERE contract_address = LOWER('0xc35DADB65012eC5796536bD9864eD8773aBc74C4') AND topics [0] :: STRING = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9' --PairCreated + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_pools.sql b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_pools.sql index 20f0a12..d6950c6 100644 --- a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_pools.sql +++ b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_pools.sql @@ -27,6 +27,7 @@ WITH pool_creation AS ( WHERE contract_address = LOWER('0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10') AND topics [0] :: STRING = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9' --PairCreated + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_swaps.sql b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_swaps.sql index 65cd939..f822e24 100644 --- a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_swaps.sql +++ b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v1_swaps.sql @@ -59,6 +59,7 @@ swaps_base AS ( ON p.pool_address = l.contract_address WHERE l.topics [0] :: STRING = '0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822' --Swap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_1_swaps.sql b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_1_swaps.sql index 97bcade..4c030a7 100644 --- a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_1_swaps.sql +++ b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_1_swaps.sql @@ -81,6 +81,7 @@ swaps_base AS ( WHERE topics [0] :: STRING = '0xad7d6f97abf51ce18e17a38f4d70e975be9c0708474987bb3e26ad21bd93ca70' --Swap AND version = 'v2.1' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_pools.sql b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_pools.sql index 85074ba..c6c4a9d 100644 --- a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_pools.sql +++ b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_pools.sql @@ -34,6 +34,7 @@ WITH pool_creation AS ( WHERE contract_address IN ('0x8e42f2f4101563bf679975178e880fd87d3efd4e','0x6e77932a92582f504ff6c4bdbcef7da6c198aeef') AND topics [0] :: STRING = '0x2c8d104b27c6b7f4492017a6f5cf3803043688934ebcaa6a03540beeaf976aff' --LB PairCreated + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_swaps.sql b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_swaps.sql index 9525f65..496f96a 100644 --- a/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_swaps.sql +++ b/models/silver/defi/dex/trader_joe/silver_dex__trader_joe_v2_swaps.sql @@ -80,6 +80,7 @@ swaps_base AS ( WHERE topics [0] :: STRING = '0xc528cda9e500228b16ce84fadae290d9a49aecb17483110004c5af0a07f6fd73' --Swap AND version = 'v2' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/uniswap/silver_dex__univ2_pools.sql b/models/silver/defi/dex/uniswap/silver_dex__univ2_pools.sql index ba482d2..7f1b3bb 100644 --- a/models/silver/defi/dex/uniswap/silver_dex__univ2_pools.sql +++ b/models/silver/defi/dex/uniswap/silver_dex__univ2_pools.sql @@ -27,6 +27,7 @@ WITH pool_creation AS ( WHERE contract_address = LOWER('0x9e5A52f57b3038F1B8EeE45F28b3C1967e22799C') AND topics [0] :: STRING = '0x0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9' --PairCreated + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/uniswap/silver_dex__univ3_pools.sql b/models/silver/defi/dex/uniswap/silver_dex__univ3_pools.sql index 97d3d37..fc951df 100644 --- a/models/silver/defi/dex/uniswap/silver_dex__univ3_pools.sql +++ b/models/silver/defi/dex/uniswap/silver_dex__univ3_pools.sql @@ -32,6 +32,7 @@ WITH created_pools AS ( WHERE topics [0] = '0x783cca1c0412dd0d695e784568c96da2e9c22ff989357a2e8b1d9b2b4e6b7118' AND contract_address = '0x740b1c1de25031c31ff4fc9a62f554a55cdc1bad' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( @@ -56,6 +57,7 @@ initial_info AS ( {{ ref('silver__logs') }} WHERE topics [0] :: STRING = '0x98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c95' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/dex/woofi/silver_dex__woofi_swaps.sql b/models/silver/defi/dex/woofi/silver_dex__woofi_swaps.sql index b58324e..70f7bfe 100644 --- a/models/silver/defi/dex/woofi/silver_dex__woofi_swaps.sql +++ b/models/silver/defi/dex/woofi/silver_dex__woofi_swaps.sql @@ -64,6 +64,7 @@ WITH router_swaps_base AS ( '0xc22fbb3133df781e6c25ea6acebe2d2bb8cea2f9' --v2 ) AND topics [0] :: STRING = '0x27c98e911efdd224f4002f6cd831c3ad0d2759ee176f9ee8466d95826af22a1c' --WooRouterSwap + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( @@ -135,6 +136,7 @@ swaps_base AS ( FROM router_swaps_base ) + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/benqi/silver__benqi_borrows.sql b/models/silver/defi/lending/benqi/silver__benqi_borrows.sql index 1a3cbb4..dfda4ba 100644 --- a/models/silver/defi/lending/benqi/silver__benqi_borrows.sql +++ b/models/silver/defi/lending/benqi/silver__benqi_borrows.sql @@ -55,6 +55,7 @@ benqi_borrows AS ( asset_details ) AND topics [0] :: STRING = '0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/benqi/silver__benqi_deposits.sql b/models/silver/defi/lending/benqi/silver__benqi_deposits.sql index f19b5f3..6c260a5 100644 --- a/models/silver/defi/lending/benqi/silver__benqi_deposits.sql +++ b/models/silver/defi/lending/benqi/silver__benqi_deposits.sql @@ -52,6 +52,7 @@ benqi_deposits AS ( asset_details ) AND topics [0] :: STRING = '0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/benqi/silver__benqi_liquidations.sql b/models/silver/defi/lending/benqi/silver__benqi_liquidations.sql index bf7cb66..adbbba0 100644 --- a/models/silver/defi/lending/benqi/silver__benqi_liquidations.sql +++ b/models/silver/defi/lending/benqi/silver__benqi_liquidations.sql @@ -55,6 +55,7 @@ benqi_liquidations AS ( asset_details ) AND topics [0] :: STRING = '0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/benqi/silver__benqi_repayments.sql b/models/silver/defi/lending/benqi/silver__benqi_repayments.sql index b126dcb..6a4beb0 100644 --- a/models/silver/defi/lending/benqi/silver__benqi_repayments.sql +++ b/models/silver/defi/lending/benqi/silver__benqi_repayments.sql @@ -50,6 +50,7 @@ benqi_repayments AS ( asset_details ) AND topics [0] :: STRING = '0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/benqi/silver__benqi_withdraws.sql b/models/silver/defi/lending/benqi/silver__benqi_withdraws.sql index 3653419..d78f8d3 100644 --- a/models/silver/defi/lending/benqi/silver__benqi_withdraws.sql +++ b/models/silver/defi/lending/benqi/silver__benqi_withdraws.sql @@ -52,6 +52,7 @@ benqi_redemptions AS ( asset_details ) AND topics [0] :: STRING = '0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/complete_lending/silver__complete_lending_borrows.sql b/models/silver/defi/lending/complete_lending/silver__complete_lending_borrows.sql index 81d6f2e..a4466ae 100644 --- a/models/silver/defi/lending/complete_lending/silver__complete_lending_borrows.sql +++ b/models/silver/defi/lending/complete_lending/silver__complete_lending_borrows.sql @@ -1,9 +1,10 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform'], cluster_by = ['block_timestamp::DATE'], - tags = ['reorg','curated'] + tags = ['reorg','curated','heal'] ) }} WITH aave AS ( @@ -30,19 +31,19 @@ WITH aave AS ( FROM {{ ref('silver__aave_borrows') }} A -{% if is_incremental() and 'aave' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'aave' not in var('HEAL_MODELS') %} WHERE A._inserted_timestamp >= ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -benqi as ( +benqi AS ( SELECT tx_hash, block_number, @@ -65,19 +66,19 @@ benqi as ( FROM {{ ref('silver__benqi_borrows') }} A -{% if is_incremental() and 'benqi' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'benqi' not in var('HEAL_MODELS') %} WHERE A._inserted_timestamp >= ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -trader_joe as ( +trader_joe AS ( SELECT tx_hash, block_number, @@ -100,13 +101,13 @@ trader_joe as ( FROM {{ ref('silver__trader_joe_borrows') }} A -{% if is_incremental() and 'trader_joe' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe' not in var('HEAL_MODELS') %} WHERE A._inserted_timestamp >= ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -128,7 +129,7 @@ borrow_union AS ( FROM trader_joe ), -FINAL AS ( +complete_lending_borrows AS ( SELECT tx_hash, block_number, @@ -162,8 +163,126 @@ FINAL AS ( 'hour', block_timestamp ) = p.hour - LEFT JOIN {{ ref('silver__contracts') }} C - ON b.token_address = C.contract_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + t0.contract_address, + event_name, + borrower, + protocol_market, + t0.token_address, + t0.token_symbol, + amount_unadj, + amount, + ROUND( + amount * p.price, + 2 + ) AS amount_usd_heal, + platform, + t0.blockchain, + t0._LOG_ID, + t0._INSERTED_TIMESTAMP + FROM + {{ this }} + t0 + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p + ON t0.token_address = p.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p.hour + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform + ) + FROM + {{ this }} + t1 + WHERE + t1.amount_usd IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t1.token_address + AND p.hour = DATE_TRUNC( + 'hour', + t1.block_timestamp + ) + ) + GROUP BY + 1 + ) +), +{% endif %} + +FINAL AS ( + SELECT + * + FROM + complete_lending_borrows + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + contract_address, + event_name, + borrower, + protocol_market, + token_address, + token_symbol, + amount_unadj, + amount, + amount_usd_heal AS amount_usd, + platform, + blockchain, + _LOG_ID, + _INSERTED_TIMESTAMP +FROM + heal_model +{% endif %} ) SELECT *, diff --git a/models/silver/defi/lending/complete_lending/silver__complete_lending_deposits.sql b/models/silver/defi/lending/complete_lending/silver__complete_lending_deposits.sql index 58b6c27..206e563 100644 --- a/models/silver/defi/lending/complete_lending/silver__complete_lending_deposits.sql +++ b/models/silver/defi/lending/complete_lending/silver__complete_lending_deposits.sql @@ -1,9 +1,10 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform'], cluster_by = ['block_timestamp::DATE'], - tags = ['reorg','curated'] + tags = ['reorg','curated','heal'] ) }} WITH aave AS ( @@ -30,17 +31,17 @@ WITH aave AS ( FROM {{ ref('silver__aave_deposits') }} -{% if is_incremental() and 'aave' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'aave' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -benqi as ( +benqi AS ( SELECT tx_hash, block_number, @@ -63,17 +64,17 @@ benqi as ( FROM {{ ref('silver__benqi_deposits') }} -{% if is_incremental() and 'benqi' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'benqi' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -trader_joe as ( +trader_joe AS ( SELECT tx_hash, block_number, @@ -96,11 +97,11 @@ trader_joe as ( FROM {{ ref('silver__trader_joe_deposits') }} -{% if is_incremental() and 'trader_joe' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -122,7 +123,7 @@ deposit_union AS ( FROM trader_joe ), -FINAL AS ( +complete_lending_deposits AS ( SELECT tx_hash, block_number, @@ -159,8 +160,126 @@ FINAL AS ( 'hour', block_timestamp ) = p.hour - LEFT JOIN {{ ref('silver__contracts') }} C - ON A.token_address = C.contract_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + t0.contract_address, + event_name, + protocol_market, + depositor, + t0.token_address, + t0.token_symbol, + amount_unadj, + amount, + ROUND( + amount * p.price, + 2 + ) AS amount_usd_heal, + platform, + t0.blockchain, + t0._LOG_ID, + t0._INSERTED_TIMESTAMP + FROM + {{ this }} + t0 + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p + ON t0.token_address = p.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p.hour + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform + ) + FROM + {{ this }} + t1 + WHERE + t1.amount_usd IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t1.token_address + AND p.hour = DATE_TRUNC( + 'hour', + t1.block_timestamp + ) + ) + GROUP BY + 1 + ) +), +{% endif %} + +FINAL AS ( + SELECT + * + FROM + complete_lending_deposits + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + contract_address, + event_name, + protocol_market, + depositor, + token_address, + token_symbol, + amount_unadj, + amount, + amount_usd_heal AS amount_usd, + platform, + blockchain, + _LOG_ID, + _INSERTED_TIMESTAMP +FROM + heal_model +{% endif %} ) SELECT *, diff --git a/models/silver/defi/lending/complete_lending/silver__complete_lending_flashloans.sql b/models/silver/defi/lending/complete_lending/silver__complete_lending_flashloans.sql index 7e5ba42..4ba99fc 100644 --- a/models/silver/defi/lending/complete_lending/silver__complete_lending_flashloans.sql +++ b/models/silver/defi/lending/complete_lending/silver__complete_lending_flashloans.sql @@ -1,9 +1,10 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform'], cluster_by = ['block_timestamp::DATE'], - tags = ['reorg','curated'] + tags = ['reorg','curated','heal'] ) }} WITH aave AS ( @@ -33,11 +34,11 @@ WITH aave AS ( FROM {{ ref('silver__aave_flashloans') }} -{% if is_incremental() and 'aave' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'aave' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -49,7 +50,7 @@ flashloan_union AS ( FROM aave ), -FINAL AS ( +complete_lending_flashloans AS ( SELECT tx_hash, block_number, @@ -64,7 +65,7 @@ FINAL AS ( initiator_address AS initiator, target_address AS target, f.token_address AS flashloan_token, - token_symbol AS flashloan_token_symbol, + f.symbol AS flashloan_token_symbol, flashloan_amount_unadj, flashloan_amount, ROUND( @@ -90,8 +91,179 @@ FINAL AS ( 'hour', block_timestamp ) = p.hour - LEFT JOIN {{ ref('silver__contracts') }} C - ON f.token_address = C.contract_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + t0.contract_address, + event_name, + protocol_market, + initiator, + target, + flashloan_token, + flashloan_token_symbol, + flashloan_amount_unadj, + flashloan_amount, + ROUND( + flashloan_amount * p.price, + 2 + ) AS flashloan_amount_usd_heal, + premium_amount_unadj, + premium_amount, + ROUND( + premium_amount * p.price, + 2 + ) AS premium_amount_usd_heal, + platform, + t0.blockchain, + t0._LOG_ID, + t0._INSERTED_TIMESTAMP + FROM + {{ this }} + t0 + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p + ON t0.flashloan_token = p.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p.hour + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform + ) + FROM + {{ this }} + t1 + WHERE + t1.flashloan_amount_usd IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t1.flashloan_token + AND p.hour = DATE_TRUNC( + 'hour', + t1.block_timestamp + ) + ) + GROUP BY + 1 + ) + OR CONCAT( + t0.block_number, + '-', + t0.platform + ) IN ( + SELECT + CONCAT( + t2.block_number, + '-', + t2.platform + ) + FROM + {{ this }} + t2 + WHERE + t2.premium_amount_usd IS NULL + AND t2._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t2.flashloan_token + AND p.hour = DATE_TRUNC( + 'hour', + t2.block_timestamp + ) + ) + GROUP BY + 1 + ) +), +{% endif %} + +FINAL AS ( + SELECT + * + FROM + complete_lending_flashloans + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + contract_address, + event_name, + protocol_market, + initiator, + target, + flashloan_token, + flashloan_token_symbol, + flashloan_amount_unadj, + flashloan_amount, + flashloan_amount_usd_heal AS flashloan_amount_usd, + premium_amount_unadj, + premium_amount, + premium_amount_usd_heal AS premium_amount_usd, + platform, + blockchain, + _LOG_ID, + _INSERTED_TIMESTAMP +FROM + heal_model +{% endif %} ) SELECT *, diff --git a/models/silver/defi/lending/complete_lending/silver__complete_lending_liquidations.sql b/models/silver/defi/lending/complete_lending/silver__complete_lending_liquidations.sql index 5f84382..0ac9a1c 100644 --- a/models/silver/defi/lending/complete_lending/silver__complete_lending_liquidations.sql +++ b/models/silver/defi/lending/complete_lending/silver__complete_lending_liquidations.sql @@ -1,9 +1,10 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform'], cluster_by = ['block_timestamp::DATE'], - tags = ['reorg','curated'] + tags = ['reorg','curated','heal'] ) }} WITH aave AS ( @@ -34,17 +35,17 @@ WITH aave AS ( FROM {{ ref('silver__aave_liquidations') }} -{% if is_incremental() and 'aave' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'aave' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -benqi as ( +benqi AS ( SELECT tx_hash, block_number, @@ -72,17 +73,17 @@ benqi as ( {{ ref('silver__benqi_liquidations') }} l -{% if is_incremental() and 'benqi' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'benqi' not in var('HEAL_MODELS') %} WHERE l._inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -trader_joe as ( +trader_joe AS ( SELECT tx_hash, block_number, @@ -110,11 +111,11 @@ trader_joe as ( {{ ref('silver__trader_joe_liquidations') }} l -{% if is_incremental() and 'trader_joe' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'trader_joe' not in var('HEAL_MODELS') %} WHERE l._inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -136,40 +137,7 @@ liquidation_union AS ( FROM trader_joe ), -contracts AS ( - SELECT - * - FROM - {{ ref('silver__contracts') }} C - WHERE - C.contract_address IN ( - SELECT - DISTINCT(collateral_asset) AS asset - FROM - liquidation_union - ) -), -prices AS ( - SELECT - * - FROM - {{ ref('price__ez_prices_hourly') }} - p - WHERE - token_address IN ( - SELECT - DISTINCT(collateral_asset) AS asset - FROM - liquidation_union - ) - AND HOUR > ( - SELECT - MIN(block_timestamp) - FROM - liquidation_union - ) -), -FINAL AS ( +complete_lending_liquidations AS ( SELECT tx_hash, block_number, @@ -187,16 +155,10 @@ FINAL AS ( collateral_asset_symbol AS collateral_token_symbol, amount_unadj, liquidated_amount AS amount, - CASE - WHEN platform <> 'Compound V3' THEN ROUND( - liquidated_amount * p.price, - 2 - ) - ELSE ROUND( - liquidated_amount_usd, - 2 - ) - END AS amount_usd, + ROUND( + liquidated_amount * p.price, + 2 + ) AS amount_usd, debt_asset AS debt_token, debt_asset_symbol AS debt_token_symbol, platform, @@ -205,14 +167,139 @@ FINAL AS ( A._INSERTED_TIMESTAMP FROM liquidation_union A - LEFT JOIN prices p + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p ON collateral_asset = p.token_address AND DATE_TRUNC( 'hour', block_timestamp ) = p.hour - LEFT JOIN contracts C - ON collateral_asset = C.contract_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + t0.contract_address, + event_name, + liquidator, + borrower, + protocol_market, + collateral_token, + collateral_token_symbol, + amount_unadj, + amount, + ROUND( + amount * p.price, + 2 + ) AS amount_usd_heal, + debt_token, + debt_token_symbol, + platform, + t0.blockchain, + t0._LOG_ID, + t0._INSERTED_TIMESTAMP + FROM + {{ this }} + t0 + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p + ON t0.collateral_token = p.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p.hour + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform + ) + FROM + {{ this }} + t1 + WHERE + t1.amount_usd IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t1.collateral_token + AND p.hour = DATE_TRUNC( + 'hour', + t1.block_timestamp + ) + ) + GROUP BY + 1 + ) +), +{% endif %} + +FINAL AS ( + SELECT + * + FROM + complete_lending_liquidations + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + contract_address, + event_name, + liquidator, + borrower, + protocol_market, + collateral_token, + collateral_token_symbol, + amount_unadj, + amount, + amount_usd_heal AS amount_usd, + debt_token, + debt_token_symbol, + platform, + blockchain, + _LOG_ID, + _INSERTED_TIMESTAMP +FROM + heal_model +{% endif %} ) SELECT *, diff --git a/models/silver/defi/lending/complete_lending/silver__complete_lending_repayments.sql b/models/silver/defi/lending/complete_lending/silver__complete_lending_repayments.sql index c95f9c8..a272611 100644 --- a/models/silver/defi/lending/complete_lending/silver__complete_lending_repayments.sql +++ b/models/silver/defi/lending/complete_lending/silver__complete_lending_repayments.sql @@ -1,9 +1,10 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform'], cluster_by = ['block_timestamp::DATE'], - tags = ['reorg','curated'] + tags = ['reorg','curated','heal'] ) }} WITH aave AS ( @@ -31,17 +32,17 @@ WITH aave AS ( FROM {{ ref('silver__aave_repayments') }} -{% if is_incremental() and 'aave' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'aave' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -benqi as ( +benqi AS ( SELECT tx_hash, block_number, @@ -65,17 +66,17 @@ benqi as ( FROM {{ ref('silver__benqi_repayments') }} - {% if is_incremental() and 'benqi' not in var('HEAL_CURATED_MODEL') %} - WHERE - _inserted_timestamp >= ( - SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' - FROM - {{ this }} - ) - {% endif %} +{% if is_incremental() and 'benqi' not in var('HEAL_MODELS') %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) +{% endif %} ), -trader_joe as ( +trader_joe AS ( SELECT tx_hash, block_number, @@ -99,15 +100,15 @@ trader_joe as ( FROM {{ ref('silver__trader_joe_repayments') }} - {% if is_incremental() and 'trader_joe' not in var('HEAL_CURATED_MODEL') %} - WHERE - _inserted_timestamp >= ( - SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' - FROM - {{ this }} - ) - {% endif %} +{% if is_incremental() and 'trader_joe' not in var('HEAL_MODELS') %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) +{% endif %} ), repayments_union AS ( SELECT @@ -125,7 +126,7 @@ repayments_union AS ( FROM trader_joe ), -FINAL AS ( +complete_lending_repayments AS ( SELECT tx_hash, block_number, @@ -160,8 +161,128 @@ FINAL AS ( 'hour', block_timestamp ) = p.hour - LEFT JOIN {{ ref('silver__contracts') }} C - ON A.token_address = C.contract_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + t0.contract_address, + event_name, + protocol_market, + payer, + borrower, + t0.token_address, + t0.token_symbol, + amount_unadj, + amount, + ROUND( + amount * p.price, + 2 + ) AS amount_usd_heal, + platform, + t0.blockchain, + t0._LOG_ID, + t0._INSERTED_TIMESTAMP + FROM + {{ this }} + t0 + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p + ON t0.token_address = p.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p.hour + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform + ) + FROM + {{ this }} + t1 + WHERE + t1.amount_usd IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t1.token_address + AND p.hour = DATE_TRUNC( + 'hour', + t1.block_timestamp + ) + ) + GROUP BY + 1 + ) +), +{% endif %} + +FINAL AS ( + SELECT + * + FROM + complete_lending_repayments + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + contract_address, + event_name, + protocol_market, + payer, + borrower, + token_address, + token_symbol, + amount_unadj, + amount, + amount_usd_heal AS amount_usd, + platform, + blockchain, + _LOG_ID, + _INSERTED_TIMESTAMP +FROM + heal_model +{% endif %} ) SELECT *, diff --git a/models/silver/defi/lending/complete_lending/silver__complete_lending_withdraws.sql b/models/silver/defi/lending/complete_lending/silver__complete_lending_withdraws.sql index 13d7100..5d50c0c 100644 --- a/models/silver/defi/lending/complete_lending/silver__complete_lending_withdraws.sql +++ b/models/silver/defi/lending/complete_lending/silver__complete_lending_withdraws.sql @@ -1,9 +1,10 @@ +-- depends_on: {{ ref('silver__complete_token_prices') }} {{ config( materialized = 'incremental', incremental_strategy = 'delete+insert', unique_key = ['block_number','platform'], cluster_by = ['block_timestamp::DATE'], - tags = ['reorg','curated'] + tags = ['reorg','curated','heal'] ) }} WITH aave AS ( @@ -30,20 +31,19 @@ WITH aave AS ( FROM {{ ref('silver__aave_withdraws') }} -{% if is_incremental() and 'aave' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'aave' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) {% endif %} ), -benqi as ( - +benqi AS ( SELECT tx_hash, block_number, @@ -66,20 +66,19 @@ benqi as ( FROM {{ ref('silver__benqi_withdraws') }} - {% if is_incremental() and 'benqi' not in var('HEAL_CURATED_MODEL') %} - WHERE - _inserted_timestamp >= ( - SELECT - MAX( - _inserted_timestamp - ) - INTERVAL '36 hours' - FROM - {{ this }} - ) - {% endif %} +{% if is_incremental() and 'benqi' not in var('HEAL_MODELS') %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) +{% endif %} ), -trader_joe as ( - +trader_joe AS ( SELECT tx_hash, block_number, @@ -102,17 +101,17 @@ trader_joe as ( FROM {{ ref('silver__trader_joe_withdraws') }} - {% if is_incremental() and 'trader_joe' not in var('HEAL_CURATED_MODEL') %} - WHERE - _inserted_timestamp >= ( - SELECT - MAX( - _inserted_timestamp - ) - INTERVAL '36 hours' - FROM - {{ this }} - ) - {% endif %} +{% if is_incremental() and 'trader_joe' not in var('HEAL_MODELS') %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) +{% endif %} ), withdraws_union AS ( SELECT @@ -130,7 +129,7 @@ withdraws_union AS ( FROM trader_joe ), -FINAL AS ( +complete_lending_withdraws AS ( SELECT tx_hash, block_number, @@ -164,8 +163,126 @@ FINAL AS ( 'hour', block_timestamp ) = p.hour - LEFT JOIN {{ ref('silver__contracts') }} C - ON A.token_address = C.contract_address +), + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +heal_model AS ( + SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + t0.contract_address, + event_name, + protocol_market, + depositor, + t0.token_address, + t0.token_symbol, + amount_unadj, + amount, + ROUND( + amount * p.price, + 2 + ) AS amount_usd_heal, + platform, + t0.blockchain, + t0._log_id, + t0._inserted_timestamp + FROM + {{ this }} + t0 + LEFT JOIN {{ ref('price__ez_prices_hourly') }} + p + ON t0.token_address = p.token_address + AND DATE_TRUNC( + 'hour', + block_timestamp + ) = p.hour + WHERE + CONCAT( + t0.block_number, + '-', + t0.platform + ) IN ( + SELECT + CONCAT( + t1.block_number, + '-', + t1.platform + ) + FROM + {{ this }} + t1 + WHERE + t1.amount_usd IS NULL + AND t1._inserted_timestamp < ( + SELECT + MAX( + _inserted_timestamp + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) + AND EXISTS ( + SELECT + 1 + FROM + {{ ref('silver__complete_token_prices') }} + p + WHERE + p._inserted_timestamp > DATEADD('DAY', -14, SYSDATE()) + AND p.price IS NOT NULL + AND p.token_address = t1.token_address + AND p.hour = DATE_TRUNC( + 'hour', + t1.block_timestamp + ) + ) + GROUP BY + 1 + ) +), +{% endif %} + +FINAL AS ( + SELECT + * + FROM + complete_lending_withdraws + +{% if is_incremental() and var( + 'HEAL_MODEL' +) %} +UNION ALL +SELECT + tx_hash, + block_number, + block_timestamp, + event_index, + origin_from_address, + origin_to_address, + origin_function_signature, + contract_address, + event_name, + protocol_market, + depositor, + token_address, + token_symbol, + amount_unadj, + amount, + amount_usd_heal AS amount_usd, + platform, + blockchain, + _log_id, + _inserted_timestamp +FROM + heal_model +{% endif %} ) SELECT *, diff --git a/models/silver/defi/lending/trader_joe/silver__trader_joe_borrows.sql b/models/silver/defi/lending/trader_joe/silver__trader_joe_borrows.sql index e6c2b89..de19769 100644 --- a/models/silver/defi/lending/trader_joe/silver__trader_joe_borrows.sql +++ b/models/silver/defi/lending/trader_joe/silver__trader_joe_borrows.sql @@ -55,6 +55,7 @@ trader_joe_borrows AS ( asset_details ) AND topics [0] :: STRING = '0x13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab80' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/trader_joe/silver__trader_joe_deposits.sql b/models/silver/defi/lending/trader_joe/silver__trader_joe_deposits.sql index 1dbb38b..dbaf9bf 100644 --- a/models/silver/defi/lending/trader_joe/silver__trader_joe_deposits.sql +++ b/models/silver/defi/lending/trader_joe/silver__trader_joe_deposits.sql @@ -52,6 +52,7 @@ trader_joe_deposits AS ( asset_details ) AND topics [0] :: STRING = '0x4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/trader_joe/silver__trader_joe_liquidations.sql b/models/silver/defi/lending/trader_joe/silver__trader_joe_liquidations.sql index ef7b773..6f52115 100644 --- a/models/silver/defi/lending/trader_joe/silver__trader_joe_liquidations.sql +++ b/models/silver/defi/lending/trader_joe/silver__trader_joe_liquidations.sql @@ -55,6 +55,7 @@ trader_joe_liquidations AS ( asset_details ) AND topics [0] :: STRING = '0x298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb52' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/trader_joe/silver__trader_joe_repayments.sql b/models/silver/defi/lending/trader_joe/silver__trader_joe_repayments.sql index 91d4570..a7e5753 100644 --- a/models/silver/defi/lending/trader_joe/silver__trader_joe_repayments.sql +++ b/models/silver/defi/lending/trader_joe/silver__trader_joe_repayments.sql @@ -50,6 +50,7 @@ trader_joe_repayments AS ( asset_details ) AND topics [0] :: STRING = '0x1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/defi/lending/trader_joe/silver__trader_joe_withdraws.sql b/models/silver/defi/lending/trader_joe/silver__trader_joe_withdraws.sql index 57ca571..3875040 100644 --- a/models/silver/defi/lending/trader_joe/silver__trader_joe_withdraws.sql +++ b/models/silver/defi/lending/trader_joe/silver__trader_joe_withdraws.sql @@ -52,6 +52,7 @@ trader_joe_redemptions AS ( asset_details ) AND topics [0] :: STRING = '0xe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929' + AND tx_status = 'SUCCESS' {% if is_incremental() %} AND _inserted_timestamp >= ( diff --git a/models/silver/nft/sales/silver__complete_nft_sales.sql b/models/silver/nft/sales/silver__complete_nft_sales.sql index dcb0868..b2e369d 100644 --- a/models/silver/nft/sales/silver__complete_nft_sales.sql +++ b/models/silver/nft/sales/silver__complete_nft_sales.sql @@ -38,11 +38,11 @@ WITH nft_base_models AS ( FROM {{ ref('silver__joepegs_sales') }} -{% if is_incremental() and 'joepegs' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'joepegs' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -78,11 +78,11 @@ SELECT FROM {{ ref('silver__salvor_sales') }} -{% if is_incremental() and 'salvor' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'salvor' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -118,11 +118,11 @@ SELECT FROM {{ ref('silver__seaport_1_1_sales') }} -{% if is_incremental() and 'seaport_1_1' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'seaport_1_1' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -158,11 +158,11 @@ SELECT FROM {{ ref('silver__seaport_1_4_sales') }} -{% if is_incremental() and 'seaport_1_4' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'seaport_1_4' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -198,11 +198,11 @@ SELECT FROM {{ ref('silver__seaport_1_5_sales') }} -{% if is_incremental() and 'seaport_1_5' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'seaport_1_5' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -238,11 +238,11 @@ SELECT FROM {{ ref('silver__seaport_1_6_sales') }} -{% if is_incremental() and 'seaport_1_6' not in var('HEAL_CURATED_MODEL') %} +{% if is_incremental() and 'seaport_1_6' not in var('HEAL_MODELS') %} WHERE _inserted_timestamp >= ( SELECT - MAX(_inserted_timestamp) - INTERVAL '36 hours' + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -541,7 +541,7 @@ heal_model AS ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -569,7 +569,7 @@ heal_model AS ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) @@ -608,7 +608,7 @@ heal_model AS ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} ) diff --git a/models/silver/nft/silver__nft_transfers.sql b/models/silver/nft/silver__nft_transfers.sql index 055143e..26229e9 100644 --- a/models/silver/nft/silver__nft_transfers.sql +++ b/models/silver/nft/silver__nft_transfers.sql @@ -360,7 +360,7 @@ heal_model AS ( SELECT MAX( _inserted_timestamp - ) - INTERVAL '36 hours' + ) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' FROM {{ this }} )