From 003e49ffeb978fb43c0f4af5528c8fdcac6b305d Mon Sep 17 00:00:00 2001 From: drethereum Date: Wed, 11 Dec 2024 13:27:39 -0700 Subject: [PATCH] layerzero temp --- .../bridge/evm_bridge_activity.md | 2 +- .../silver_bridge__layerzero_bridge_v2.sql | 151 ++++++++++++++++++ .../silver_bridge__layerzero_bridge_v2.yml | 72 +++++++++ ...ilver_bridge__complete_bridge_activity.sql | 41 +++++ 4 files changed, 265 insertions(+), 1 deletion(-) create mode 100644 models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.sql create mode 100644 models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.yml diff --git a/models/doc_descriptions/bridge/evm_bridge_activity.md b/models/doc_descriptions/bridge/evm_bridge_activity.md index ef0e7c2..9886265 100644 --- a/models/doc_descriptions/bridge/evm_bridge_activity.md +++ b/models/doc_descriptions/bridge/evm_bridge_activity.md @@ -1,6 +1,6 @@ {% docs evm_bridge_table_doc %} -A convenience table that aggregates bridge activity from event_logs, traces and transfers, including bridge deposits and transfers sent from the following protocols: AXELAR, HYPERLANE, ORBITER, SYMBIOSIS, SYNAPSE along with other helpful columns, including an amount USD where available. Note, this table only includes records for the protocols listed above with live, onchain bridge activity and may not represent the complete bridging picture. +A convenience table that aggregates bridge activity from event_logs, traces and transfers, including bridge deposits and transfers sent from the following protocols: ACROSS, AXELAR, HYPERLANE, LAYERZERO, ORBITER, SYMBIOSIS, SYNAPSE along with other helpful columns, including an amount USD where available. Note, this table only includes records for the protocols listed above with live, onchain bridge activity and may not represent the complete bridging picture. {% enddocs %} diff --git a/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.sql b/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.sql new file mode 100644 index 0000000..d21eb62 --- /dev/null +++ b/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.sql @@ -0,0 +1,151 @@ +{{ config( + materialized = 'incremental', + incremental_strategy = 'delete+insert', + unique_key = "block_number", + cluster_by = ['block_timestamp::DATE'], + tags = ['curated','reorg'] +) }} + + WITH oft_asset_contract_creation AS ( + + SELECT + block_number, + block_timestamp, + tx_hash, + from_address AS oft_address, + CASE + WHEN tx_status = 'SUCCESS' THEN TRUE + ELSE FALSE + END AS tx_succeeded, + CASE + WHEN trace_status = 'SUCCESS' THEN TRUE + ELSE FALSE + END AS trace_succeeded, + modified_timestamp + FROM + {{ ref('core__fact_traces') }} + WHERE + TYPE = 'CALL' + AND LEFT( + input, + 10 + ) = '0xca5eb5e1' + AND to_address = '0x1a44076050125825900e736c501f859c50fe728c' -- layerzero v2 + AND tx_succeeded + AND trace_succeeded + +{% if is_incremental() %} +AND modified_timestamp >= ( + SELECT + MAX(modified_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} +) +AND modified_timestamp >= SYSDATE() - INTERVAL '7 day' +{% endif %} + +qualify ROW_NUMBER() over ( + PARTITION BY oft_address + ORDER BY + block_timestamp DESC +) = 1 +), +oft_asset_base_token AS ( + SELECT + block_number, + block_timestamp, + tx_hash, + from_address AS wrap_address, + to_address AS underlying_address, + CASE + WHEN tx_status = 'SUCCESS' THEN TRUE + ELSE FALSE + END AS tx_succeeded, + CASE + WHEN trace_status = 'SUCCESS' THEN TRUE + ELSE FALSE + END AS trace_succeeded, + modified_timestamp + FROM + {{ref('core__fact_traces')}} + WHERE + tx_hash IN ( + SELECT + tx_hash + FROM + contract_creation + ) + AND TYPE = 'STATICCALL' + AND input = '0x313ce567' qualify ROW_NUMBER() over ( + PARTITION BY tx_hash + ORDER BY + trace_index ASC + ) = 1 +), +oft_asset AS ( +SELECT + oft_address, + t3.token_symbol AS oft_symbol, + t3.token_name AS oft_name, + underlying_address, + t4.token_symbol AS underlying_symbol, + t4.token_name AS underlying_name +FROM + oft_asset_contract_creation t1 + LEFT JOIN oft_asset_base_token t2 + ON t1.tx_hash = t2.tx_hash + AND oft_address = wrap_address + LEFT JOIN {{ref('silver__contracts')}} t3 + ON oft_address = t3.contract_address + LEFT JOIN {{ref('silver__contracts')}} t4 + ON underlying_address = t4.contract_address +), +oft_sent AS ( + -- bridging transactions + SELECT + block_number, + block_timestamp, + tx_hash, + origin_function_signature, + origin_from_address, + origin_to_address, + contract_address, + event_index, + {# '' AS event_name, #} + 'layerzero-v2' AS platform, + oft_name, + oft_symbol, + oft_address, + underlying_name, + underlying_symbol, + underlying_address, + CONCAT('0x', SUBSTR(topics [2], 27, 40)) AS from_address, + regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data, + utils.udf_hex_to_int( + segmented_data [0] :: STRING + ) :: FLOAT AS dstEid, + utils.udf_hex_to_int( + segmented_data [1] :: STRING + ) :: FLOAT AS amountSentLD, + utils.udf_hex_to_int( + segmented_data [2] :: STRING + ) :: FLOAT AS amountReceivedLD, + CONCAT( + tx_hash, + '-', + event_index + ) AS _log_id, + modified_timestamp + FROM + {{ref('core__fact_event_logs')}} + INNER JOIN oft_asset + ON oft_address = contract_address + WHERE + topics [0] = '0x85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a' + {# AND DATE(block_timestamp) >= '2024-11-01' #} +) +SELECT + * +FROM + oft_sent + -- inner join chain_id using(dstEid) diff --git a/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.yml b/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.yml new file mode 100644 index 0000000..552e329 --- /dev/null +++ b/models/silver/defi/bridge/layerzero/silver_bridge__layerzero_bridge_v2.yml @@ -0,0 +1,72 @@ +version: 2 +models: + - name: silver_bridge__layerzero_bridge_v2 + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - _LOG_ID + columns: + - name: BLOCK_NUMBER + tests: + - not_null + - name: BLOCK_TIMESTAMP + tests: + - not_null + - dbt_expectations.expect_row_values_to_have_recent_data: + datepart: day + interval: 3 + - name: ORIGIN_FUNCTION_SIGNATURE + tests: + - not_null + - name: ORIGIN_FROM_ADDRESS + tests: + - not_null + - dbt_expectations.expect_column_values_to_match_regex: + regex: 0[xX][0-9a-fA-F]+ + - name: ORIGIN_TO_ADDRESS + tests: + - not_null + - dbt_expectations.expect_column_values_to_match_regex: + regex: 0[xX][0-9a-fA-F]+ + - name: TX_HASH + tests: + - not_null + - dbt_expectations.expect_column_values_to_match_regex: + regex: 0[xX][0-9a-fA-F]+ + - name: EVENT_INDEX + tests: + - not_null + - name: EVENT_NAME + tests: + - not_null + - name: BRIDGE_ADDRESS + tests: + - not_null + - dbt_expectations.expect_column_values_to_match_regex: + regex: 0[xX][0-9a-fA-F]+ + - name: SENDER + tests: + - not_null + - dbt_expectations.expect_column_values_to_match_regex: + regex: 0[xX][0-9a-fA-F]+ + - name: RECEIVER + tests: + - not_null + - dbt_expectations.expect_column_values_to_match_regex: + regex: 0[xX][0-9a-fA-F]+ + - name: DESTINATION_CHAIN_RECEIVER + tests: + - not_null + - name: AMOUNT + tests: + - not_null + - dbt_expectations.expect_column_values_to_be_in_type_list: + column_type_list: + - DECIMAL + - FLOAT + - NUMBER + - name: TOKEN_ADDRESS + tests: + - not_null + - dbt_expectations.expect_column_values_to_match_regex: + regex: 0[xX][0-9a-fA-F]+ 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 26c05a4..8876bf1 100644 --- a/models/silver/defi/bridge/silver_bridge__complete_bridge_activity.sql +++ b/models/silver/defi/bridge/silver_bridge__complete_bridge_activity.sql @@ -118,6 +118,42 @@ WHERE ) {% endif %} ), +layerzero_v2 AS ( + SELECT + block_number, + block_timestamp, + origin_from_address, + origin_to_address, + origin_function_signature, + tx_hash, + event_index, + bridge_address, + event_name, + platform, + 'v2' AS version, + sender, + receiver, + destination_chain_receiver, + destination_chain_id :: STRING AS destination_chain_id, + NULL AS destination_chain, + token_address, + NULL AS token_symbol, + amount AS amount_unadj, + _log_id AS _id, + modified_timestamp AS _inserted_timestamp + FROM + {{ ref('silver_bridge__layerzero_bridge_v2') }} + +{% if is_incremental() and 'layerzero_v2' not in var('HEAL_MODELS') %} +WHERE + _inserted_timestamp >= ( + SELECT + MAX(_inserted_timestamp) - INTERVAL '{{ var("LOOKBACK", "4 hours") }}' + FROM + {{ this }} + ) +{% endif %} +), orbiter AS ( SELECT block_number, @@ -242,6 +278,11 @@ all_protocols AS ( FROM hyperlane UNION ALL + SELECT + * + FROM + layerzero_v2 + UNION ALL SELECT * FROM