From 9029938200bd55bfa5cd07b4e6c596dd54e2a8a5 Mon Sep 17 00:00:00 2001 From: drethereum Date: Fri, 10 Feb 2023 14:59:25 -0700 Subject: [PATCH] rubicon swaps --- .../silver/dex/silver_dex__rubicon_swaps.sql | 98 +++++++++++++++++++ .../silver/dex/silver_dex__rubicon_swaps.yml | 65 ++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 models/silver/dex/silver_dex__rubicon_swaps.sql create mode 100644 models/silver/dex/silver_dex__rubicon_swaps.yml diff --git a/models/silver/dex/silver_dex__rubicon_swaps.sql b/models/silver/dex/silver_dex__rubicon_swaps.sql new file mode 100644 index 00000000..d60154f8 --- /dev/null +++ b/models/silver/dex/silver_dex__rubicon_swaps.sql @@ -0,0 +1,98 @@ +{{ config( + materialized = 'incremental', + unique_key = "_log_id", + cluster_by = ['block_timestamp::DATE'] +) }} + +{{ config( + materialized = 'incremental', + unique_key = "_log_id", + cluster_by = ['block_timestamp::DATE'] +) }} + +WITH rubicon_base AS ( + SELECT + block_number, + block_timestamp, + tx_hash, + origin_function_signature, + origin_from_address, + origin_to_address, + contract_address, + event_index, + event_name, + CONCAT('0x', SUBSTR(topics [1] :: STRING, 27, 40)) AS sender, + regexp_substr_all(SUBSTR(DATA, 3, len(DATA)), '.{64}') AS segmented_data, + CONCAT('0x',SUBSTR(segmented_data [1] :: STRING, 25, 40)) AS token_in, + CONCAT('0x',SUBSTR(segmented_data [3] :: STRING, 25, 40)) AS token_out, + CONCAT('0x',SUBSTR(segmented_data [5] :: STRING, 25, 40)) AS recipient, + ethereum.public.udf_hex_to_int( + segmented_data [0] :: STRING + ) :: INTEGER AS tokens_sold, + ethereum.public.udf_hex_to_int( + segmented_data [4] :: STRING + ) :: INTEGER AS tokens_bought, + _log_id, + _inserted_timestamp + FROM + {{ ref('silver__logs') }} a + WHERE + topics [0] :: STRING IN ( + '0xe246f5c6615e4a819ae6062dd22d99f289cc78afbf91469c64a81584c45475e5' + ) +) + +SELECT + block_number, + block_timestamp, + origin_function_signature, + origin_from_address, + origin_to_address, + contract_address, + tx_hash, + event_index, + event_name, + sender, + recipient AS tx_to, + token_in, + token_out, + c0.symbol AS symbol_in, + c1.symbol AS symbol_out, + CONCAT(symbol_in,'-',symbol_out) AS pool_name, + c0.decimals AS decimals_in, + c1.decimals AS decimals_out, + tokens_sold AS amount_in, + tokens_bought AS amount_out, + CASE + WHEN decimals_in IS NOT NULL THEN tokens_sold / pow(10,decimals_in) + ELSE tokens_sold + END AS amount_in_adj, + CASE + WHEN decimals_out IS NOT NULL THEN tokens_bought / pow(10,decimals_out) + ELSE tokens_bought + END AS amount_out_adj, + CASE + WHEN decimals_in IS NOT NULL THEN ROUND(amount_in_adj * p0.price,2) + END AS amount_in_usd, + CASE + WHEN decimals_out IS NOT NULL THEN ROUND(amount_out_adj * p1.price,2) + END AS amount_out_usd, + _log_id, + r._inserted_timestamp +FROM rubicon_base r +LEFT JOIN {{ ref('silver__prices') }} p0 + ON p0.hour = DATE_TRUNC( + 'hour', + block_timestamp + ) + AND p0.token_address = r.token_in +LEFT JOIN {{ ref('silver__prices') }} p1 + ON p1.hour = DATE_TRUNC( + 'hour', + block_timestamp + ) + AND p1.token_address = r.token_out +LEFT JOIN {{ ref('core__dim_contracts') }} c0 + ON c0.address = r.token_in +LEFT JOIN {{ ref('core__dim_contracts') }} c1 + ON c1.address = r.token_out \ No newline at end of file diff --git a/models/silver/dex/silver_dex__rubicon_swaps.yml b/models/silver/dex/silver_dex__rubicon_swaps.yml new file mode 100644 index 00000000..98019cd1 --- /dev/null +++ b/models/silver/dex/silver_dex__rubicon_swaps.yml @@ -0,0 +1,65 @@ +version: 2 +models: + - name: silver_dex__rubicon_swaps + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - _log_id + columns: + - name: AMOUNT_IN + tests: + - not_null + - dbt_expectations.expect_column_values_to_be_in_type_list: + column_type_list: + - decimal + - float + - number + - name: AMOUNT_IN_USD + tests: + - dbt_expectations.expect_column_values_to_be_in_type_list: + column_type_list: + - decimal + - float + - name: AMOUNT_OUT + tests: + - not_null + - dbt_expectations.expect_column_values_to_be_in_type_list: + column_type_list: + - decimal + - float + - number + - name: AMOUNT_OUT_USD + tests: + - dbt_expectations.expect_column_values_to_be_in_type_list: + column_type_list: + - decimal + - float + - name: BLOCK_TIMESTAMP + tests: + - not_null + - dbt_expectations.expect_row_values_to_have_recent_data: + datepart: day + interval: 1 + - name: EVENT_INDEX + tests: + - not_null + - name: POOL_NAME + tests: + - dbt_expectations.expect_column_values_to_be_in_type_list: + column_type_list: + - varchar + - name: SENDER + tests: + - not_null + - name: TX_TO + tests: + - not_null + - name: TOKEN_IN + tests: + - not_null + - name: TOKEN_OUT + tests: + - not_null + - name: TX_HASH + tests: + - not_null \ No newline at end of file