diff --git a/dbt_subprojects/dex/macros/models/_project/carbon_defi_compatible_trades.sql b/dbt_subprojects/dex/macros/models/_project/carbon_defi_compatible_trades.sql new file mode 100644 index 00000000000..fe03d7f3042 --- /dev/null +++ b/dbt_subprojects/dex/macros/models/_project/carbon_defi_compatible_trades.sql @@ -0,0 +1,53 @@ +{% macro carbon_defi_compatible_trades( + blockchain = null, + project = null, + CarbonController_evt_TokensTraded = null, + wrapped_native_token = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' + ) +%} + +WITH dexs AS ( + SELECT + t.evt_block_number AS block_number, + t.evt_block_time AS block_time, + t.trader AS taker, + CAST(NULL as VARBINARY) as maker, + t.targetAmount AS token_bought_amount_raw, + t.sourceAmount AS token_sold_amount_raw, + CASE + WHEN t.targetToken = 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee THEN {{ wrapped_native_token }} + ELSE t.targetToken + END AS token_bought_address, --Using WETH for easier joining with USD price table + CASE + WHEN t.sourceToken = 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee THEN {{ wrapped_native_token }} + ELSE t.sourceToken + END AS token_sold_address, --Using WETH for easier joining with USD price table + t.contract_address AS project_contract_address, + t.evt_tx_hash AS tx_hash, + t.evt_index + FROM {{ CarbonController_evt_TokensTraded }} t + {% if is_incremental() %} + WHERE {{incremental_predicate('t.evt_block_time')}} + {% endif %} +) + +SELECT + '{{ blockchain }}' AS blockchain, + '{{ project }}' AS project, + '1' AS version, + CAST(date_trunc('month', dexs.block_time) AS date) AS block_month, + CAST(date_trunc('day', dexs.block_time) AS date) AS block_date, + dexs.block_time, + dexs.block_number, + dexs.token_bought_amount_raw, + dexs.token_sold_amount_raw, + dexs.token_bought_address, + dexs.token_sold_address, + dexs.taker, + dexs.maker, + dexs.project_contract_address, + dexs.tx_hash, + dexs.evt_index +FROM dexs + +{% endmacro %} \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/paraswap/base/paraswap_v5_base_trades.sql b/dbt_subprojects/dex/models/_projects/paraswap/base/paraswap_v5_base_trades.sql index 242681545bc..a8a7a416c00 100644 --- a/dbt_subprojects/dex/models/_projects/paraswap/base/paraswap_v5_base_trades.sql +++ b/dbt_subprojects/dex/models/_projects/paraswap/base/paraswap_v5_base_trades.sql @@ -14,6 +14,7 @@ {% set trade_event_tables = [ source('paraswap_base', 'AugustusSwapper_evt_BoughtV3') ,source('paraswap_base', 'AugustusSwapper_evt_SwappedV3') + ,source('paraswap_base', 'AugustusSwapper_evt_SwappedDirect') ] %} WITH dexs AS ( diff --git a/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_api_fills_deduped.sql index 2f3063f3a04..c0b0dc8a784 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_api_fills_deduped.sql @@ -66,7 +66,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar) as version + , cast('1' as varchar) as version , a.block_date , a.block_month diff --git a/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_schema.yml b/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_schema.yml index 81c6fe83d97..91b6530887b 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_schema.yml +++ b/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_schema.yml @@ -158,7 +158,7 @@ models: config: tags: ['arbitrum','0x','dex_aggregator','dex','aggregator'] description: > - 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on Ethereum + 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on arbitrum tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: @@ -204,4 +204,55 @@ models: - *matcha_limit_order_flag - &protocol_fee_paid_eth name: protocol_fee_paid_eth - description: "The protocol fee paid in ETH" \ No newline at end of file + description: "The protocol fee paid in ETH" + + - name: zeroex_arbitrum_settler_trades + meta: + blockchain: arbitrum + project: zeroex + contributors: rantum + config: + tags: ['arbitrum','0x','dex_aggregator','dex','aggregator'] + description: > + 0x API erc20 trades through 0x Settler contracts. No fills, only deduped transactions. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_month + - block_date + - tx_hash + - evt_index + - check_seed: + seed_file: ref('zeroex_arbitrum_settler_trades_sample') + match_columns: + - tx_hash + check_columns: + - taker + - maker_token + - taker_token + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *taker_symbol + - *maker_symbol + - *token_pair + - *taker_token_amount + - *maker_token_amount + - *taker_token_amount_raw + - *maker_token_amount_raw + - *volume_usd + - *taker_token + - *maker_token + - *taker + - *maker + - *affiliate_address + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *type + - *swap_flag + - *contract_address + - *fills_within \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_settler_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_settler_trades.sql new file mode 100644 index 00000000000..108506c25a4 --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/zeroex/arbitrum/zeroex_arbitrum_settler_trades.sql @@ -0,0 +1,309 @@ +{{ config( + schema = 'zeroex_arbitrum', + alias = 'settler_trades', + materialized='incremental', + partition_by = ['block_month'], + unique_key = ['block_month', 'block_date', 'tx_hash', 'evt_index'], + on_schema_change='sync_all_columns', + file_format ='delta', + incremental_strategy='merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] +)}} + +{% set zeroex_settler_start_date = '2024-07-15' %} + +WITH tbl_addresses AS ( + SELECT + blockchain, + token_id, + to AS settler_address, + block_time AS begin_block_time, + block_number AS begin_block_number + FROM + {{ source('nft', 'transfers') }} + WHERE + contract_address = 0x00000000000004533fe15556b1e086bb1a72ceae + AND blockchain = 'arbitrum' + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% endif %} +), + +tbl_end_times AS ( + SELECT + *, + LEAD(begin_block_time) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_time) AS end_block_time, + LEAD(begin_block_number) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_number) AS end_block_number + FROM + tbl_addresses +), + +result_0x_settler_addresses AS ( + SELECT + * + FROM + tbl_end_times + WHERE + settler_address != 0x0000000000000000000000000000000000000000 +), + +settler_txs AS ( + SELECT + tx_hash, + block_time, + block_number, + method_id, + contract_address, + MAX(varbinary_substring(tracker,1,12)) AS zid, + CASE + WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3)) + WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3)) + END AS tag + FROM ( + SELECT + tr.tx_hash, + block_number, + block_time, + "to" AS contract_address, + varbinary_substring(input,1,4) AS method_id, + varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker + FROM + {{ source('arbitrum', 'traces') }} AS tr + JOIN + result_0x_settler_addresses a ON a.settler_address = tr.to AND a.blockchain = 'arbitrum' AND tr.block_time > a.begin_block_time + WHERE + (a.settler_address IS NOT NULL OR tr.to = 0xca11bde05977b3631167028862be2a173976ca11) + AND varbinary_substring(input,1,4) IN (0x1fff991f, 0xfd3ad6d4) + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% else %} + AND block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} + ) + GROUP BY + 1,2,3,4,5 +), + +tbl_all_logs AS ( + SELECT + logs.tx_hash, + logs.block_time, + logs.block_number, + ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first, + index, + CASE + WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1 + WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0 + WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0 + ELSE 1 + END maker_tkn, + bytearray_to_int256(bytearray_substring(DATA, 23,10)) value, + logs.contract_address AS token, + zid, + st.contract_address, + method_id, + tag + FROM + {{ source('arbitrum', 'logs') }} AS logs + JOIN + settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number + WHERE + topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65, + 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, + 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c) + and tag != 0x000000 and zid != 0xa00000000000000000000000 + {% if is_incremental() %} + AND {{ incremental_predicate('logs.block_time') }} + {% else %} + AND logs.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +tbl_maker_token AS ( + SELECT + ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last, + token AS maker_token, + tx_hash, + block_time, + block_number, + index + FROM + tbl_all_logs + WHERE + maker_tkn = 1 +), + +tbl_trades AS ( + SELECT + ta.tx_hash, + ta.block_time, + ta.block_number, + zid, + method_id, + tag, + contract_address, + SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount, + MAX(token) FILTER (WHERE rn_first = 1) AS taker_token, + SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount, + MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token + FROM + tbl_all_logs ta + LEFT JOIN + tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1 + GROUP BY + 1,2,3,4,5,6,7 +), + +tokens AS ( + SELECT DISTINCT + te.* + FROM + {{ source('tokens', 'erc20') }} AS te + JOIN + tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token + WHERE + te.blockchain = 'arbitrum' +), + +prices AS ( + SELECT DISTINCT + pu.* + FROM + {{ source('prices', 'usd') }} AS pu + JOIN + tbl_trades ON (pu.contract_address = taker_token OR pu.contract_address = maker_token) AND date_trunc('minute',block_time) = minute + WHERE + pu.blockchain = 'arbitrum' + {% if is_incremental() %} + AND {{ incremental_predicate('minute') }} + {% else %} + AND minute >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results AS ( + SELECT + trades.block_time, + trades.block_number, + zid, + trades.contract_address, + method_id, + trades.tx_hash, + "from" AS tx_from, + "to" AS tx_to, + index AS tx_index, + CASE + WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20) + WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20) + WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20) + WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20) + WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20) + WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20) + WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20) + WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20) + WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20) + WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20) + WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20) + WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20) + WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20) + WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20) + END AS taker , + CAST(NULL AS varbinary) AS maker, + taker_token, + pt.price, + COALESCE(tt.symbol, pt.symbol) AS taker_symbol, + taker_amount AS taker_token_amount_raw, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) AS taker_token_amount, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) * pt.price AS taker_amount, + maker_token, + COALESCE(tm.symbol, pm.symbol) AS maker_symbol, + maker_amount AS maker_token_amount_raw, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount, + tag, + data, + varbinary_substring(data, varbinary_length(data) - CASE + WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be)) + WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156)) + WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede)) + END -3, 37) taker_indicator_string + FROM + tbl_trades trades + JOIN + {{ source('arbitrum', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number + LEFT JOIN + tokens tt ON tt.blockchain = 'arbitrum' AND tt.contract_address = taker_token + LEFT JOIN + tokens tm ON tm.blockchain = 'arbitrum' AND tm.contract_address = maker_token + LEFT JOIN + prices pt ON pt.blockchain = 'arbitrum' AND pt.contract_address = taker_token AND pt.minute = DATE_TRUNC('minute', trades.block_time) + LEFT JOIN + prices pm ON pm.blockchain = 'arbitrum' AND pm.contract_address = maker_token AND pm.minute = DATE_TRUNC('minute', trades.block_time) + WHERE + 1=1 + {% if is_incremental() %} + AND {{ incremental_predicate('tr.block_time') }} + {% else %} + AND tr.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results_usd AS ( + SELECT + 'arbitrum' AS blockchain, + '0x API' AS project, + 'settler' AS version, + DATE_TRUNC('day', block_time) block_date, + DATE_TRUNC('month', block_time) AS block_month, + block_time, + taker_symbol, + maker_symbol, + CASE WHEN LOWER(taker_symbol) > LOWER(maker_symbol) THEN CONCAT(maker_symbol, '-', taker_symbol) ELSE CONCAT(taker_symbol, '-', maker_symbol) END AS token_pair, + taker_token_amount, + maker_token_amount, + taker_token_amount_raw, + maker_token_amount_raw, + CASE WHEN maker_token IN (0x82af49447d8a07e3bd95bd0d56f35241523fbab1, + 0xaf88d065e77c8cc2239327c5edb3a432268e5831, + 0xff970a61a04b1ca14834a43f5de4533ebddb5cc8, + 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9, + 0x912ce59144191c1204e64559fe8253a0e49e6548) AND maker_amount IS NOT NULL + THEN maker_amount + WHEN taker_token IN (0x82af49447d8a07e3bd95bd0d56f35241523fbab1, + 0xaf88d065e77c8cc2239327c5edb3a432268e5831, + 0xff970a61a04b1ca14834a43f5de4533ebddb5cc8, + 0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9, + 0x912ce59144191c1204e64559fe8253a0e49e6548) AND taker_amount IS NOT NULL + THEN taker_amount + ELSE COALESCE(maker_amount, taker_amount) + END AS volume_usd, + taker_token, + maker_token, + CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000) + OR taker IS NULL + OR taker = taker_token + OR taker = contract_address + OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff + OR varbinary_substring(taker_indicator_string, 18,20) != contract_address + THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker, + maker, + tag, + tx_hash, + tx_from, + tx_to, + tx_index AS evt_index, + (ARRAY[-1]) AS trace_address, + 'settler' AS type, + TRUE AS swap_flag, + -1 AS fills_within, + contract_address + FROM + results +) + +SELECT DISTINCT + * +FROM + results_usd +ORDER BY + block_time DESC \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_api_fills_deduped.sql index dc222702278..8714f3750fe 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_api_fills_deduped.sql @@ -66,7 +66,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar) as version + , cast('1' as varchar) as version , a.block_date , a.block_month diff --git a/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_schema.yml b/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_schema.yml index 2e27d530c29..912398726ad 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_schema.yml +++ b/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_schema.yml @@ -148,4 +148,55 @@ models: - *contract_address - &fills_within name: fills_within - description: "fills in then multihop, if present" \ No newline at end of file + description: "fills in then multihop, if present" + + - name: zeroex_avalanche_c_settler_trades + meta: + blockchain: avalanche_c + project: zeroex + contributors: rantum, bakabhai993 + config: + tags: ['avalanche_c','0x','dex_aggregator','dex','aggregator'] + description: > + 0x API erc20 trades through 0x Settler contracts. No fills, only deduped transactions. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_month + - block_date + - tx_hash + - evt_index + - check_seed: + seed_file: ref('zeroex_avalanche_c_settler_trades_sample') + match_columns: + - tx_hash + check_columns: + - taker + - maker_token + - taker_token + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *taker_symbol + - *maker_symbol + - *token_pair + - *taker_token_amount + - *maker_token_amount + - *taker_token_amount_raw + - *maker_token_amount_raw + - *volume_usd + - *taker_token + - *maker_token + - *taker + - *maker + - *affiliate_address + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *type + - *swap_flag + - *contract_address + - *fills_within \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_settler_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_settler_trades.sql new file mode 100644 index 00000000000..25717efbded --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/zeroex/avalanche_c/zeroex_avalanche_c_settler_trades.sql @@ -0,0 +1,309 @@ +{{ config( + schema = 'zeroex_avalanche_c', + alias = 'settler_trades', + materialized='incremental', + partition_by = ['block_month'], + unique_key = ['block_month', 'block_date', 'tx_hash', 'evt_index'], + on_schema_change='sync_all_columns', + file_format ='delta', + incremental_strategy='merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] +)}} + +{% set zeroex_settler_start_date = '2024-07-15' %} + +WITH tbl_addresses AS ( + SELECT + blockchain, + token_id, + to AS settler_address, + block_time AS begin_block_time, + block_number AS begin_block_number + FROM + {{ source('nft', 'transfers') }} + WHERE + contract_address = 0x00000000000004533fe15556b1e086bb1a72ceae + AND blockchain = 'avalanche_c' + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% endif %} +), + +tbl_end_times AS ( + SELECT + *, + LEAD(begin_block_time) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_time) AS end_block_time, + LEAD(begin_block_number) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_number) AS end_block_number + FROM + tbl_addresses +), + +result_0x_settler_addresses AS ( + SELECT + * + FROM + tbl_end_times + WHERE + settler_address != 0x0000000000000000000000000000000000000000 +), + +settler_txs AS ( + SELECT + tx_hash, + block_time, + block_number, + method_id, + contract_address, + MAX(varbinary_substring(tracker,1,12)) AS zid, + CASE + WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3)) + WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3)) + END AS tag + FROM ( + SELECT + tr.tx_hash, + block_number, + block_time, + "to" AS contract_address, + varbinary_substring(input,1,4) AS method_id, + varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker + FROM + {{ source('avalanche_c', 'traces') }} AS tr + JOIN + result_0x_settler_addresses a ON a.settler_address = tr.to AND a.blockchain = 'avalanche_c' AND tr.block_time > a.begin_block_time + WHERE + (a.settler_address IS NOT NULL OR tr.to = 0xca11bde05977b3631167028862be2a173976ca11) + AND varbinary_substring(input,1,4) IN (0x1fff991f, 0xfd3ad6d4) + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% else %} + AND block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} + ) + GROUP BY + 1,2,3,4,5 +), + +tbl_all_logs AS ( + SELECT + logs.tx_hash, + logs.block_time, + logs.block_number, + ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first, + index, + CASE + WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1 + WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0 + WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0 + ELSE 1 + END maker_tkn, + bytearray_to_int256(bytearray_substring(DATA, 23,10)) value, + logs.contract_address AS token, + zid, + st.contract_address, + method_id, + tag + FROM + {{ source('avalanche_c', 'logs') }} AS logs + JOIN + settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number + WHERE + topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65, + 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, + 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c) + and tag != 0x000000 and zid != 0xa00000000000000000000000 + {% if is_incremental() %} + AND {{ incremental_predicate('logs.block_time') }} + {% else %} + AND logs.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +tbl_maker_token AS ( + SELECT + ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last, + token AS maker_token, + tx_hash, + block_time, + block_number, + index + FROM + tbl_all_logs + WHERE + maker_tkn = 1 +), + +tbl_trades AS ( + SELECT + ta.tx_hash, + ta.block_time, + ta.block_number, + zid, + method_id, + tag, + contract_address, + SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount, + MAX(token) FILTER (WHERE rn_first = 1) AS taker_token, + SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount, + MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token + FROM + tbl_all_logs ta + LEFT JOIN + tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1 + GROUP BY + 1,2,3,4,5,6,7 +), + +tokens AS ( + SELECT DISTINCT + te.* + FROM + {{ source('tokens', 'erc20') }} AS te + JOIN + tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token + WHERE + te.blockchain = 'avalanche_c' +), + +prices AS ( + SELECT DISTINCT + pu.* + FROM + {{ source('prices', 'usd') }} AS pu + JOIN + tbl_trades ON (pu.contract_address = taker_token OR pu.contract_address = maker_token) AND date_trunc('minute',block_time) = minute + WHERE + pu.blockchain = 'avalanche_c' + {% if is_incremental() %} + AND {{ incremental_predicate('minute') }} + {% else %} + AND minute >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results AS ( + SELECT + trades.block_time, + trades.block_number, + zid, + trades.contract_address, + method_id, + trades.tx_hash, + "from" AS tx_from, + "to" AS tx_to, + index AS tx_index, + CASE + WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20) + WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20) + WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20) + WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20) + WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20) + WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20) + WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20) + WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20) + WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20) + WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20) + WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20) + WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20) + WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20) + WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20) + END AS taker , + CAST(NULL AS varbinary) AS maker, + taker_token, + pt.price, + COALESCE(tt.symbol, pt.symbol) AS taker_symbol, + taker_amount AS taker_token_amount_raw, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) AS taker_token_amount, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) * pt.price AS taker_amount, + maker_token, + COALESCE(tm.symbol, pm.symbol) AS maker_symbol, + maker_amount AS maker_token_amount_raw, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount, + tag, + data, + varbinary_substring(data, varbinary_length(data) - CASE + WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be)) + WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156)) + WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede)) + END -3, 37) taker_indicator_string + FROM + tbl_trades trades + JOIN + {{ source('avalanche_c', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number + LEFT JOIN + tokens tt ON tt.blockchain = 'avalanche_c' AND tt.contract_address = taker_token + LEFT JOIN + tokens tm ON tm.blockchain = 'avalanche_c' AND tm.contract_address = maker_token + LEFT JOIN + prices pt ON pt.blockchain = 'avalanche_c' AND pt.contract_address = taker_token AND pt.minute = DATE_TRUNC('minute', trades.block_time) + LEFT JOIN + prices pm ON pm.blockchain = 'avalanche_c' AND pm.contract_address = maker_token AND pm.minute = DATE_TRUNC('minute', trades.block_time) + WHERE + 1=1 + {% if is_incremental() %} + AND {{ incremental_predicate('tr.block_time') }} + {% else %} + AND tr.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results_usd AS ( + SELECT + 'avalanche_c' AS blockchain, + '0x API' AS project, + 'settler' AS version, + DATE_TRUNC('day', block_time) block_date, + DATE_TRUNC('month', block_time) AS block_month, + block_time, + taker_symbol, + maker_symbol, + CASE WHEN LOWER(taker_symbol) > LOWER(maker_symbol) THEN CONCAT(maker_symbol, '-', taker_symbol) ELSE CONCAT(taker_symbol, '-', maker_symbol) END AS token_pair, + taker_token_amount, + maker_token_amount, + taker_token_amount_raw, + maker_token_amount_raw, + CASE WHEN maker_token IN (0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7, + 0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e, + 0x152b9d0fdc40c096757f570a51e494bd4b943e50, + 0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab, + 0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7) AND maker_amount IS NOT NULL + THEN maker_amount + WHEN taker_token IN (0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7, + 0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e, + 0x152b9d0fdc40c096757f570a51e494bd4b943e50, + 0x49d5c2bdffac6ce2bfdb6640f4f80f226bc10bab, + 0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7) AND taker_amount IS NOT NULL + THEN taker_amount + ELSE COALESCE(maker_amount, taker_amount) + END AS volume_usd, + taker_token, + maker_token, + CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000) + OR taker IS NULL + OR taker = taker_token + OR taker = contract_address + OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff + OR varbinary_substring(taker_indicator_string, 18,20) != contract_address + THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker, + maker, + tag, + tx_hash, + tx_from, + tx_to, + tx_index AS evt_index, + (ARRAY[-1]) AS trace_address, + 'settler' AS type, + TRUE AS swap_flag, + -1 AS fills_within, + contract_address + FROM + results +) + +SELECT DISTINCT + * +FROM + results_usd +ORDER BY + block_time DESC \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_api_fills_deduped.sql index 5b8efdd8e51..e7f7dd0ddbd 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_api_fills_deduped.sql @@ -66,7 +66,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar(10)) as version + , cast('1' as varchar(10)) as version , a.block_date , a.block_month diff --git a/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_api_fills_schema.yml b/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_schema.yml similarity index 75% rename from dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_api_fills_schema.yml rename to dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_schema.yml index d86621e882a..c556c33ee70 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_api_fills_schema.yml +++ b/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_schema.yml @@ -13,6 +13,7 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: + - block_month - block_date - tx_hash - evt_index @@ -99,6 +100,9 @@ models: columns: - *blockchain - *block_date + - &block_month + name: block_month + description: "UTC event block month of each trade" - *block_time - &taker_symbol name: taker_symbol @@ -129,4 +133,54 @@ models: - &fills_within name: fills_within description: "fills in then multihop, if present" - \ No newline at end of file + + - name: zeroex_base_settler_trades + meta: + blockchain: base + project: zeroex + contributors: rantum, bakabhai993 + config: + tags: ['base','0x','dex_aggregator','dex','aggregator'] + description: > + 0x API erc20 trades through 0x Settler contracts. No fills, only deduped transactions. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_month + - block_date + - tx_hash + - evt_index + - check_seed: + seed_file: ref('zeroex_base_settler_trades_sample') + match_columns: + - tx_hash + check_columns: + - taker + - maker_token + - taker_token + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *taker_symbol + - *maker_symbol + - *token_pair + - *taker_token_amount + - *maker_token_amount + - *taker_token_amount_raw + - *maker_token_amount_raw + - *volume_usd + - *taker_token + - *maker_token + - *taker + - *maker + - *affiliate_address + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *type + - *swap_flag + - *contract_address + - *fills_within diff --git a/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_settler_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_settler_trades.sql new file mode 100644 index 00000000000..712d5a4e0cc --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/zeroex/base/zeroex_base_settler_trades.sql @@ -0,0 +1,309 @@ +{{ config( + schema = 'zeroex_base', + alias = 'settler_trades', + materialized='incremental', + partition_by = ['block_month'], + unique_key = ['block_month', 'block_date', 'tx_hash', 'evt_index'], + on_schema_change='sync_all_columns', + file_format ='delta', + incremental_strategy='merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] +)}} + +{% set zeroex_settler_start_date = '2024-07-15' %} + +WITH tbl_addresses AS ( + SELECT + blockchain, + token_id, + to AS settler_address, + block_time AS begin_block_time, + block_number AS begin_block_number + FROM + {{ source('nft', 'transfers') }} + WHERE + contract_address = 0x00000000000004533fe15556b1e086bb1a72ceae + AND blockchain = 'base' + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% endif %} +), + +tbl_end_times AS ( + SELECT + *, + LEAD(begin_block_time) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_time) AS end_block_time, + LEAD(begin_block_number) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_number) AS end_block_number + FROM + tbl_addresses +), + +result_0x_settler_addresses AS ( + SELECT + * + FROM + tbl_end_times + WHERE + settler_address != 0x0000000000000000000000000000000000000000 +), + +settler_txs AS ( + SELECT + tx_hash, + block_time, + block_number, + method_id, + contract_address, + MAX(varbinary_substring(tracker,1,12)) AS zid, + CASE + WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3)) + WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3)) + END AS tag + FROM ( + SELECT + tr.tx_hash, + block_number, + block_time, + "to" AS contract_address, + varbinary_substring(input,1,4) AS method_id, + varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker + FROM + {{ source('base', 'traces') }} AS tr + JOIN + result_0x_settler_addresses a ON a.settler_address = tr.to AND a.blockchain = 'base' AND tr.block_time > a.begin_block_time + WHERE + (a.settler_address IS NOT NULL OR tr.to = 0xca11bde05977b3631167028862be2a173976ca11) + AND varbinary_substring(input,1,4) IN (0x1fff991f, 0xfd3ad6d4) + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% else %} + AND block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} + ) + GROUP BY + 1,2,3,4,5 +), + +tbl_all_logs AS ( + SELECT + logs.tx_hash, + logs.block_time, + logs.block_number, + ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first, + index, + CASE + WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1 + WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0 + WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0 + ELSE 1 + END maker_tkn, + bytearray_to_int256(bytearray_substring(DATA, 23,10)) value, + logs.contract_address AS token, + zid, + st.contract_address, + method_id, + tag + FROM + {{ source('base', 'logs') }} AS logs + JOIN + settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number + WHERE + topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65, + 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, + 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c) + and tag != 0x000000 and zid != 0xa00000000000000000000000 + {% if is_incremental() %} + AND {{ incremental_predicate('logs.block_time') }} + {% else %} + AND logs.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +tbl_maker_token AS ( + SELECT + ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last, + token AS maker_token, + tx_hash, + block_time, + block_number, + index + FROM + tbl_all_logs + WHERE + maker_tkn = 1 +), + +tbl_trades AS ( + SELECT + ta.tx_hash, + ta.block_time, + ta.block_number, + zid, + method_id, + tag, + contract_address, + SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount, + MAX(token) FILTER (WHERE rn_first = 1) AS taker_token, + SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount, + MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token + FROM + tbl_all_logs ta + LEFT JOIN + tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1 + GROUP BY + 1,2,3,4,5,6,7 +), + +tokens AS ( + SELECT DISTINCT + te.* + FROM + {{ source('tokens', 'erc20') }} AS te + JOIN + tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token + WHERE + te.blockchain = 'base' +), + +prices AS ( + SELECT DISTINCT + pu.* + FROM + {{ source('prices', 'usd') }} AS pu + JOIN + tbl_trades ON (pu.contract_address = taker_token OR pu.contract_address = maker_token) AND date_trunc('minute',block_time) = minute + WHERE + pu.blockchain = 'base' + {% if is_incremental() %} + AND {{ incremental_predicate('minute') }} + {% else %} + AND minute >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results AS ( + SELECT + trades.block_time, + trades.block_number, + zid, + trades.contract_address, + method_id, + trades.tx_hash, + "from" AS tx_from, + "to" AS tx_to, + index AS tx_index, + CASE + WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20) + WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20) + WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20) + WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20) + WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20) + WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20) + WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20) + WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20) + WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20) + WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20) + WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20) + WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20) + WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20) + WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20) + END AS taker , + CAST(NULL AS varbinary) AS maker, + taker_token, + pt.price, + COALESCE(tt.symbol, pt.symbol) AS taker_symbol, + taker_amount AS taker_token_amount_raw, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) AS taker_token_amount, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) * pt.price AS taker_amount, + maker_token, + COALESCE(tm.symbol, pm.symbol) AS maker_symbol, + maker_amount AS maker_token_amount_raw, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount, + tag, + data, + varbinary_substring(data, varbinary_length(data) - CASE + WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be)) + WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156)) + WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede)) + END -3, 37) taker_indicator_string + FROM + tbl_trades trades + JOIN + {{ source('base', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number + LEFT JOIN + tokens tt ON tt.blockchain = 'base' AND tt.contract_address = taker_token + LEFT JOIN + tokens tm ON tm.blockchain = 'base' AND tm.contract_address = maker_token + LEFT JOIN + prices pt ON pt.blockchain = 'base' AND pt.contract_address = taker_token AND pt.minute = DATE_TRUNC('minute', trades.block_time) + LEFT JOIN + prices pm ON pm.blockchain = 'base' AND pm.contract_address = maker_token AND pm.minute = DATE_TRUNC('minute', trades.block_time) + WHERE + 1=1 + {% if is_incremental() %} + AND {{ incremental_predicate('tr.block_time') }} + {% else %} + AND tr.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results_usd AS ( + SELECT + 'base' AS blockchain, + '0x API' AS project, + 'settler' AS version, + DATE_TRUNC('day', block_time) block_date, + DATE_TRUNC('month', block_time) AS block_month, + block_time, + taker_symbol, + maker_symbol, + CASE WHEN LOWER(taker_symbol) > LOWER(maker_symbol) THEN CONCAT(maker_symbol, '-', taker_symbol) ELSE CONCAT(taker_symbol, '-', maker_symbol) END AS token_pair, + taker_token_amount, + maker_token_amount, + taker_token_amount_raw, + maker_token_amount_raw, + CASE WHEN maker_token IN (0x4200000000000000000000000000000000000006, + 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913, + 0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca, + 0x5d0af35b4f6f4715961b56168de93bf0062b173d, + 0x50c5725949a6f0c72e6c4a641f24049a917db0cb) AND maker_amount IS NOT NULL + THEN maker_amount + WHEN taker_token IN (0x4200000000000000000000000000000000000006, + 0x833589fcd6edb6e08f4c7c32d4f71b54bda02913, + 0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca, + 0x5d0af35b4f6f4715961b56168de93bf0062b173d, + 0x50c5725949a6f0c72e6c4a641f24049a917db0cb) AND taker_amount IS NOT NULL + THEN taker_amount + ELSE COALESCE(maker_amount, taker_amount) + END AS volume_usd, + taker_token, + maker_token, + CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000) + OR taker IS NULL + OR taker = taker_token + OR taker = contract_address + OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff + OR varbinary_substring(taker_indicator_string, 18,20) != contract_address + THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker, + maker, + tag, + tx_hash, + tx_from, + tx_to, + tx_index AS evt_index, + (ARRAY[-1]) AS trace_address, + 'settler' AS type, + TRUE AS swap_flag, + -1 AS fills_within, + contract_address + FROM + results +) + +SELECT DISTINCT + * +FROM + results_usd +ORDER BY + block_time DESC \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_api_fills_deduped.sql index 68be120d149..07d5f274a58 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_api_fills_deduped.sql @@ -65,7 +65,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar) as version + , cast('1' as varchar) as version , a.block_date , a.block_month , a.block_time diff --git a/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_schema.yml b/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_schema.yml index fd519709e23..2117047b3b5 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_schema.yml +++ b/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_schema.yml @@ -151,7 +151,7 @@ models: config: tags: ['bnb','0x','dex_aggregator','dex','aggregator'] description: > - 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on Ethereum + 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on bnb tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: @@ -195,4 +195,57 @@ models: - *matcha_limit_order_flag - &protocol_fee_paid_eth name: protocol_fee_paid_eth - description: "The protocol fee paid in ETH" \ No newline at end of file + description: "The protocol fee paid in ETH" + + - name: zeroex_bnb_settler_trades + meta: + blockchain: bnb + project: zeroex + contributors: rantum + config: + tags: ['bnb','0x','dex_aggregator','dex','aggregator'] + description: > + 0x API erc20 trades through 0x Settler contracts. No fills, only deduped transactions. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_month + - block_date + - tx_hash + - evt_index + - check_seed: + seed_file: ref('zeroex_bnb_settler_trades_sample') + match_columns: + - tx_hash + check_columns: + - taker + - maker_token + - taker_token + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *taker_symbol + - *maker_symbol + - *token_pair + - *taker_token_amount + - *maker_token_amount + - *taker_token_amount_raw + - *maker_token_amount_raw + - *volume_usd + - *taker_token + - *maker_token + - *taker + - *maker + - *affiliate_address + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *type + - *swap_flag + - *contract_address + - &fills_within + name: fills_within + description: "fills in then multihop, if present" \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_settler_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_settler_trades.sql new file mode 100644 index 00000000000..e57aeaf0a27 --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/zeroex/bnb/zeroex_bnb_settler_trades.sql @@ -0,0 +1,311 @@ +{{ config( + schema = 'zeroex_bnb', + alias = 'settler_trades', + materialized='incremental', + partition_by = ['block_month'], + unique_key = ['block_month', 'block_date', 'tx_hash', 'evt_index'], + on_schema_change='sync_all_columns', + file_format ='delta', + incremental_strategy='merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] +)}} + +{% set zeroex_settler_start_date = '2024-07-15' %} + +WITH tbl_addresses AS ( + SELECT + blockchain, + token_id, + to AS settler_address, + block_time AS begin_block_time, + block_number AS begin_block_number + FROM + {{ source('nft', 'transfers') }} + WHERE + contract_address = 0x00000000000004533fe15556b1e086bb1a72ceae + AND blockchain = 'bnb' + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% endif %} +), + +tbl_end_times AS ( + SELECT + *, + LEAD(begin_block_time) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_time) AS end_block_time, + LEAD(begin_block_number) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_number) AS end_block_number + FROM + tbl_addresses +), + +result_0x_settler_addresses AS ( + SELECT + * + FROM + tbl_end_times + WHERE + settler_address != 0x0000000000000000000000000000000000000000 +), + +settler_txs AS ( + SELECT + tx_hash, + block_time, + block_number, + method_id, + contract_address, + MAX(varbinary_substring(tracker,1,12)) AS zid, + CASE + WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3)) + WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3)) + END AS tag + FROM ( + SELECT + tr.tx_hash, + block_number, + block_time, + "to" AS contract_address, + varbinary_substring(input,1,4) AS method_id, + varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker + FROM + {{ source('bnb', 'traces') }} AS tr + JOIN + result_0x_settler_addresses a ON a.settler_address = tr.to AND a.blockchain = 'bnb' AND tr.block_time > a.begin_block_time + WHERE + (a.settler_address IS NOT NULL OR tr.to = 0xca11bde05977b3631167028862be2a173976ca11) + AND varbinary_substring(input,1,4) IN (0x1fff991f, 0xfd3ad6d4) + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% else %} + AND block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} + ) + GROUP BY + 1,2,3,4,5 +), + +tbl_all_logs AS ( + SELECT + logs.tx_hash, + logs.block_time, + logs.block_number, + ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first, + index, + CASE + WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1 + WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0 + WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0 + ELSE 1 + END maker_tkn, + bytearray_to_int256(bytearray_substring(DATA, 23,10)) value, + logs.contract_address AS token, + zid, + st.contract_address, + method_id, + tag + FROM + {{ source('bnb', 'logs') }} AS logs + JOIN + settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number + WHERE + topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65, + 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, + 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c) + and tag != 0x000000 and zid != 0xa00000000000000000000000 + {% if is_incremental() %} + AND {{ incremental_predicate('logs.block_time') }} + {% else %} + AND logs.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +tbl_maker_token AS ( + SELECT + ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last, + token AS maker_token, + tx_hash, + block_time, + block_number, + index + FROM + tbl_all_logs + WHERE + maker_tkn = 1 +), + +tbl_trades AS ( + SELECT + ta.tx_hash, + ta.block_time, + ta.block_number, + zid, + method_id, + tag, + contract_address, + SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount, + MAX(token) FILTER (WHERE rn_first = 1) AS taker_token, + SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount, + MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token + FROM + tbl_all_logs ta + LEFT JOIN + tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1 + GROUP BY + 1,2,3,4,5,6,7 +), + +tokens AS ( + SELECT DISTINCT + te.* + FROM + {{ source('tokens', 'erc20') }} AS te + JOIN + tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token + WHERE + te.blockchain = 'bnb' +), + +prices AS ( + SELECT DISTINCT + pu.* + FROM + {{ source('prices', 'usd') }} AS pu + JOIN + tbl_trades ON (pu.contract_address = taker_token OR pu.contract_address = maker_token) AND date_trunc('minute',block_time) = minute + WHERE + pu.blockchain = 'bnb' + {% if is_incremental() %} + AND {{ incremental_predicate('minute') }} + {% else %} + AND minute >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results AS ( + SELECT + trades.block_time, + trades.block_number, + zid, + trades.contract_address, + method_id, + trades.tx_hash, + "from" AS tx_from, + "to" AS tx_to, + index AS tx_index, + CASE + WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20) + WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20) + WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20) + WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20) + WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20) + WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20) + WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20) + WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20) + WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20) + WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20) + WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20) + WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20) + WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20) + WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20) + END AS taker , + CAST(NULL AS varbinary) AS maker, + taker_token, + pt.price, + COALESCE(tt.symbol, pt.symbol) AS taker_symbol, + taker_amount AS taker_token_amount_raw, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) AS taker_token_amount, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) * pt.price AS taker_amount, + maker_token, + COALESCE(tm.symbol, pm.symbol) AS maker_symbol, + maker_amount AS maker_token_amount_raw, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount, + tag, + data, + varbinary_substring(data, varbinary_length(data) - CASE + WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be)) + WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156)) + WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede)) + END -3, 37) taker_indicator_string + FROM + tbl_trades trades + JOIN + {{ source('bnb', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number + LEFT JOIN + tokens tt ON tt.blockchain = 'bnb' AND tt.contract_address = taker_token + LEFT JOIN + tokens tm ON tm.blockchain = 'bnb' AND tm.contract_address = maker_token + LEFT JOIN + prices pt ON pt.blockchain = 'bnb' AND pt.contract_address = taker_token AND pt.minute = DATE_TRUNC('minute', trades.block_time) + LEFT JOIN + prices pm ON pm.blockchain = 'bnb' AND pm.contract_address = maker_token AND pm.minute = DATE_TRUNC('minute', trades.block_time) + WHERE + 1=1 + {% if is_incremental() %} + AND {{ incremental_predicate('tr.block_time') }} + {% else %} + AND tr.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results_usd AS ( + SELECT + 'bnb' AS blockchain, + '0x API' AS project, + 'settler' AS version, + DATE_TRUNC('day', block_time) block_date, + DATE_TRUNC('month', block_time) AS block_month, + block_time, + taker_symbol, + maker_symbol, + CASE WHEN LOWER(taker_symbol) > LOWER(maker_symbol) THEN CONCAT(maker_symbol, '-', taker_symbol) ELSE CONCAT(taker_symbol, '-', maker_symbol) END AS token_pair, + taker_token_amount, + maker_token_amount, + taker_token_amount_raw, + maker_token_amount_raw, + CASE WHEN maker_token IN (0x55d398326f99059ff775485246999027b3197955, + 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c, + 0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d, + 0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c, + 0x2170ed0880ac9a755fd29b2688956bd959f933f8, + 0xe9e7cea3dedca5984780bafc599bd69add087d56) AND maker_amount IS NOT NULL + THEN maker_amount + WHEN taker_token IN (0x55d398326f99059ff775485246999027b3197955, + 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c, + 0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d, + 0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c, + 0x2170ed0880ac9a755fd29b2688956bd959f933f8, + 0xe9e7cea3dedca5984780bafc599bd69add087d56) AND taker_amount IS NOT NULL + THEN taker_amount + ELSE COALESCE(maker_amount, taker_amount) + END AS volume_usd, + taker_token, + maker_token, + CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000) + OR taker IS NULL + OR taker = taker_token + OR taker = contract_address + OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff + OR varbinary_substring(taker_indicator_string, 18,20) != contract_address + THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker, + maker, + tag, + tx_hash, + tx_from, + tx_to, + tx_index AS evt_index, + (ARRAY[-1]) AS trace_address, + 'settler' AS type, + TRUE AS swap_flag, + -1 AS fills_within, + contract_address + FROM + results +) + +SELECT DISTINCT + * +FROM + results_usd +ORDER BY + block_time DESC \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/celo/zeroex_celo_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/celo/zeroex_celo_api_fills_deduped.sql index ad010ef0185..101c7a54eb6 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/celo/zeroex_celo_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/celo/zeroex_celo_api_fills_deduped.sql @@ -66,7 +66,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar(10)) as version + , cast('1' as varchar(10)) as version , a.block_date , CAST(date_trunc('month', a.block_time) as DATE) as block_month , a.block_time diff --git a/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_api_fills_deduped.sql index eec7610518e..9a23ab938c9 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_api_fills_deduped.sql @@ -70,7 +70,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar) as version + , cast('1' as varchar) as version , a.block_date , a.block_month , a.block_time diff --git a/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_schema.yml b/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_schema.yml index 7fdec87e2f7..33d1700ac72 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_schema.yml +++ b/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_schema.yml @@ -32,13 +32,13 @@ models: description: "Transaction hash of the fill" - &block_number name: block_number - description: "Block Number of the fill" + description: "Block Number of the fill" - &evt_index name: evt_index description: "Index of the corresponding fill/swap event" - &contract_address name: contract_address - desctiption: "The address of the contract which fired the fill/swap event" + description: "The address of the contract which fired the fill/swap event" - &block_time name: block_time description: "Timestamp for block event time in UTC" @@ -65,10 +65,10 @@ models: description: "Contract address of the token taker buys" - &maker_symbol name: maker_symbol - description: "Symbol of the token taker buys" + description: "Symbol of the token taker buys" - &token_pair name: token_pair - description: "Token pair traded" + description: "Token pair traded" - &taker_token_amount name: taker_token_amount description: "The after-decimal amount of the token taker sells" @@ -83,16 +83,16 @@ models: description: "The raw amount of the token taker buys" - &type name: type - description: "The liquidity route the order went thru" + description: "The liquidity route the order went through" - &affiliate_address name: affiliate_address - description: "The recipient address of the affiliate, or the applications that is using 0x API, for receiving affiliate fee" + description: "The recipient address of the affiliate, or the applications that are using 0x API, for receiving affiliate fee" - &swap_flag name: swap_flag - description: "If the swap was filled/consumed thru 0x API" + description: "If the swap was filled/consumed through 0x API" - &matcha_limit_order_flag name: matcha_limit_order_flag - description: "If the swap's order was initially created and submitted thru Matcha. This is for Matcha related query needs." + description: "If the swap's order was initially created and submitted through Matcha. This is for Matcha related query needs." - &volume_usd name: volume_usd description: "Trading volume measured in USD value" @@ -104,8 +104,8 @@ models: description: "Address which received the trade" - &blockchain name: blockchain - description: "Blockchain which the aggregator project is deployed" - + + - name: zeroex_ethereum_api_fills_deduped meta: blockchain: ethereum @@ -134,7 +134,7 @@ models: - *taker_token_amount_raw - *maker_token_amount_raw - name: volume_usd - description: "Trading volume measured in USD value" # since volume_usd applies a test previously in this schema file, don't reuse, or it'll attempt to test here too + description: "Trading volume measured in USD value" - *taker_token - *maker_token - *taker @@ -149,9 +149,8 @@ models: - *contract_address - &fills_within name: fills_within - description: "fills in then multihop, if present" + description: "fills in the multihop, if present" - - name: zeroex_ethereum_nft_fills meta: blockchain: ethereum @@ -187,7 +186,7 @@ models: - *taker - &matcher name: matcher - description: "address/bot that brings two public quotes (from buy as well as from the sell side) together" + description: "Address/bot that brings two public quotes (from buy as well as from the sell side) together" - &nft_address name: nft_address description: "NFT project address" @@ -196,31 +195,28 @@ models: description: "Token ID of the NFT project address" - &label name: label - description: "type of nft - ERC 721 OR ERC 1155" + description: "Type of NFT - ERC 721 OR ERC 1155" - &price_label name: price_label - description: "token address used to genearate the amount in usd - for eth, we take the price of weth" + description: "Token address used to generate the amount in USD - for ETH, we take the price of WETH" - &token name: token - description: "token used to pay for the transaction" + description: "Token used to pay for the transaction" - &token_amount_raw name: token_amount_raw - description: "raw token amount used to pay for the transaction" + description: "Raw token amount used to pay for the transaction" - &symbol name: symbol - description: "symbol of the token used to pay for the transaction - use this column for all your descriptive needs + aggregations" + description: "Symbol of the token used to pay for the transaction - use this column for all your descriptive needs + aggregations" - &price_usd name: price_usd - description: "price of a transaction in USD" + description: "Price of a transaction in USD" - &token_amount name: token_amount - description: "token amount, after dividing by the correct decimal" + description: "Token amount, after dividing by the correct decimal" - &project_name name: project_name - description: "name of the nft project" - tests: - - zeroex_ethereum_nft_test: - seed_file: ref('zeroex_ethereum_nft_fills_sample') + description: "Name of the NFT project" - name: zeroex_ethereum_native_fills meta: @@ -230,7 +226,7 @@ models: config: tags: ['ethereum','0x','dex_aggregator','dex','aggregator'] description: > - 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on Ethereum + 0x API erc20 swaps raw fills (including multihops) and also native swaps through 0x exchange contracts (without using 0x API) on Ethereum tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: @@ -258,7 +254,7 @@ models: - *taker_token - *taker_symbol - *maker_token - - *maker_symbol + - *maker_symbol - *token_pair - *taker_token_amount - *taker_token_amount_raw @@ -271,8 +267,59 @@ models: - *blockchain - &native_fill_type name: native_fill_type - description: "type of native fill - RFQ, limit order, OTC, fill" + description: "Type of native fill - RFQ, limit order, OTC, fill" - *matcha_limit_order_flag - &protocol_fee_paid_eth name: protocol_fee_paid_eth - description: "The protocol fee paid in ETH" \ No newline at end of file + description: "The protocol fee paid in ETH" + + - name: zeroex_ethereum_settler_trades + meta: + blockchain: ethereum + project: zeroex + contributors: rantum, bakabhai993 + config: + tags: ['ethereum','0x','dex_aggregator','dex','aggregator'] + description: > + 0x API erc20 trades through 0x Settler contracts. No fills, only deduped transactions. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_month + - block_date + - tx_hash + - evt_index + - check_seed: + seed_file: ref('zeroex_ethereum_settler_trades_sample') + match_columns: + - tx_hash + check_columns: + - taker + - maker_token + - taker_token + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *taker_symbol + - *maker_symbol + - *token_pair + - *taker_token_amount + - *maker_token_amount + - *taker_token_amount_raw + - *maker_token_amount_raw + - *volume_usd + - *taker_token + - *maker_token + - *taker + - *maker + - *affiliate_address + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *type + - *swap_flag + - *contract_address + - *fills_within diff --git a/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_settler_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_settler_trades.sql new file mode 100644 index 00000000000..63582db34d5 --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/zeroex/ethereum/zeroex_ethereum_settler_trades.sql @@ -0,0 +1,311 @@ +{{ config( + schema = 'zeroex_ethereum', + alias = 'settler_trades', + materialized='incremental', + partition_by = ['block_month'], + unique_key = ['block_month', 'block_date', 'tx_hash', 'evt_index'], + on_schema_change='sync_all_columns', + file_format ='delta', + incremental_strategy='merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] +)}} + +{% set zeroex_settler_start_date = '2024-07-15' %} + +WITH tbl_addresses AS ( + SELECT + blockchain, + token_id, + to AS settler_address, + block_time AS begin_block_time, + block_number AS begin_block_number + FROM + {{ source('nft', 'transfers') }} + WHERE + contract_address = 0x00000000000004533fe15556b1e086bb1a72ceae + AND blockchain = 'ethereum' + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% endif %} +), + +tbl_end_times AS ( + SELECT + *, + LEAD(begin_block_time) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_time) AS end_block_time, + LEAD(begin_block_number) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_number) AS end_block_number + FROM + tbl_addresses +), + +result_0x_settler_addresses AS ( + SELECT + * + FROM + tbl_end_times + WHERE + settler_address != 0x0000000000000000000000000000000000000000 +), + +settler_txs AS ( + SELECT + tx_hash, + block_time, + block_number, + method_id, + contract_address, + MAX(varbinary_substring(tracker,1,12)) AS zid, + CASE + WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3)) + WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3)) + END AS tag + FROM ( + SELECT + tr.tx_hash, + block_number, + block_time, + "to" AS contract_address, + varbinary_substring(input,1,4) AS method_id, + varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker + FROM + {{ source('ethereum', 'traces') }} AS tr + JOIN + result_0x_settler_addresses a ON a.settler_address = tr.to AND a.blockchain = 'ethereum' AND tr.block_time > a.begin_block_time + WHERE + (a.settler_address IS NOT NULL OR tr.to = 0xca11bde05977b3631167028862be2a173976ca11) + AND varbinary_substring(input,1,4) IN (0x1fff991f, 0xfd3ad6d4) + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% else %} + AND block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} + ) + GROUP BY + 1,2,3,4,5 +), + +tbl_all_logs AS ( + SELECT + logs.tx_hash, + logs.block_time, + logs.block_number, + ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first, + index, + CASE + WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1 + WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0 + WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0 + ELSE 1 + END maker_tkn, + bytearray_to_int256(bytearray_substring(DATA, 23,10)) value, + logs.contract_address AS token, + zid, + st.contract_address, + method_id, + tag + FROM + {{ source('ethereum', 'logs') }} AS logs + JOIN + settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number + WHERE + topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65, + 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, + 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c) + {% if is_incremental() %} + and tag != 0x000000 and zid != 0xa00000000000000000000000 + AND {{ incremental_predicate('logs.block_time') }} + {% else %} + AND logs.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +tbl_maker_token AS ( + SELECT + ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last, + token AS maker_token, + tx_hash, + block_time, + block_number, + index + FROM + tbl_all_logs + WHERE + maker_tkn = 1 +), + +tbl_trades AS ( + SELECT + ta.tx_hash, + ta.block_time, + ta.block_number, + zid, + method_id, + tag, + contract_address, + SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount, + MAX(token) FILTER (WHERE rn_first = 1) AS taker_token, + SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount, + MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token + FROM + tbl_all_logs ta + LEFT JOIN + tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1 + GROUP BY + 1,2,3,4,5,6,7 +), + +tokens AS ( + SELECT DISTINCT + te.* + FROM + {{ source('tokens', 'erc20') }} AS te + JOIN + tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token + WHERE + te.blockchain = 'ethereum' +), + +prices AS ( + SELECT DISTINCT + pu.* + FROM + {{ source('prices', 'usd') }} AS pu + JOIN + tbl_trades ON (pu.contract_address = taker_token OR pu.contract_address = maker_token) AND date_trunc('minute',block_time) = minute + WHERE + pu.blockchain = 'ethereum' + {% if is_incremental() %} + AND {{ incremental_predicate('minute') }} + {% else %} + AND minute >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results AS ( + SELECT + trades.block_time, + trades.block_number, + zid, + trades.contract_address, + method_id, + trades.tx_hash, + "from" AS tx_from, + "to" AS tx_to, + index AS tx_index, + CASE + WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20) + WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20) + WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20) + WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20) + WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20) + WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20) + WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20) + WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20) + WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20) + WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20) + WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20) + WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20) + WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20) + WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20) + END AS taker , + CAST(NULL AS varbinary) AS maker, + taker_token, + pt.price, + COALESCE(tt.symbol, pt.symbol) AS taker_symbol, + taker_amount AS taker_token_amount_raw, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) AS taker_token_amount, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) * pt.price AS taker_amount, + maker_token, + COALESCE(tm.symbol, pm.symbol) AS maker_symbol, + maker_amount AS maker_token_amount_raw, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount, + tag, + data, + varbinary_substring(data, varbinary_length(data) - CASE + WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be)) + WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156)) + WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede)) + END -3, 37) taker_indicator_string + FROM + tbl_trades trades + JOIN + {{ source('ethereum', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number + LEFT JOIN + tokens tt ON tt.blockchain = 'ethereum' AND tt.contract_address = taker_token + LEFT JOIN + tokens tm ON tm.blockchain = 'ethereum' AND tm.contract_address = maker_token + LEFT JOIN + prices pt ON pt.blockchain = 'ethereum' AND pt.contract_address = taker_token AND pt.minute = DATE_TRUNC('minute', trades.block_time) + LEFT JOIN + prices pm ON pm.blockchain = 'ethereum' AND pm.contract_address = maker_token AND pm.minute = DATE_TRUNC('minute', trades.block_time) + WHERE + 1=1 + {% if is_incremental() %} + AND {{ incremental_predicate('tr.block_time') }} + {% else %} + AND tr.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results_usd AS ( + SELECT + 'ethereum' AS blockchain, + '0x API' AS project, + 'settler' AS version, + DATE_TRUNC('day', block_time) block_date, + DATE_TRUNC('month', block_time) AS block_month, + block_time, + taker_symbol, + maker_symbol, + CASE WHEN LOWER(taker_symbol) > LOWER(maker_symbol) THEN CONCAT(maker_symbol, '-', taker_symbol) ELSE CONCAT(taker_symbol, '-', maker_symbol) END AS token_pair, + taker_token_amount, + maker_token_amount, + taker_token_amount_raw, + maker_token_amount_raw, + CASE WHEN maker_token IN (0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, + 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48, + 0xdac17f958d2ee523a2206206994597c13d831ec7, + 0x4fabb145d64652a948d72533023f6e7a623c7c53, + 0x6b175474e89094c44da98b954eedeac495271d0f, + 0xae7ab96520de3a18e5e111b5eaab095312d7fe84) AND maker_amount IS NOT NULL + THEN maker_amount + WHEN taker_token IN (0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, + 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48, + 0xdac17f958d2ee523a2206206994597c13d831ec7, + 0x4fabb145d64652a948d72533023f6e7a623c7c53, + 0x6b175474e89094c44da98b954eedeac495271d0f, + 0xae7ab96520de3a18e5e111b5eaab095312d7fe84) AND maker_amount IS NOT NULL AND taker_amount IS NOT NULL + THEN taker_amount + ELSE COALESCE(maker_amount, taker_amount) + END AS volume_usd, + taker_token, + maker_token, + CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000) + OR taker IS NULL + OR taker = taker_token + OR taker = contract_address + OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff + OR varbinary_substring(taker_indicator_string, 18,20) != contract_address + THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker, + maker, + tag, + tx_hash, + tx_from, + tx_to, + tx_index AS evt_index, + (ARRAY[-1]) AS trace_address, + 'settler' AS type, + TRUE AS swap_flag, + -1 AS fills_within, + contract_address + FROM + results +) + +SELECT DISTINCT + * +FROM + results_usd +ORDER BY + block_time DESC \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/fantom/zeroex_fantom_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/fantom/zeroex_fantom_api_fills_deduped.sql index f0761e8dc53..2fea867fdc2 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/fantom/zeroex_fantom_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/fantom/zeroex_fantom_api_fills_deduped.sql @@ -66,7 +66,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar) as version + , cast('1' as varchar) as version , a.block_date , a.block_month , a.block_time diff --git a/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_api_fills_deduped.sql index e46fe510b67..29dfc314802 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_api_fills_deduped.sql @@ -66,7 +66,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar(10)) as version + , cast('1' as varchar(10)) as version , a.block_date , a.block_month , a.block_time diff --git a/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_schema.yml b/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_schema.yml index 36c35f8f758..1fcef1034c2 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_schema.yml +++ b/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_schema.yml @@ -162,7 +162,7 @@ models: config: tags: ['optimism','0x','dex_aggregator','dex','aggregator'] description: > - 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on Ethereum + 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on optimism tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: @@ -198,4 +198,55 @@ models: - *matcha_limit_order_flag - &protocol_fee_paid_eth name: protocol_fee_paid_eth - description: "The protocol fee paid in ETH" \ No newline at end of file + description: "The protocol fee paid in ETH" + + - name: zeroex_optimism_settler_trades + meta: + blockchain: optimism + project: zeroex + contributors: rantum, bakabhai993 + config: + tags: ['optimism','0x','dex_aggregator','dex','aggregator'] + description: > + 0x API erc20 trades through 0x Settler contracts. No fills, only deduped transactions. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_month + - block_date + - tx_hash + - evt_index + - check_seed: + seed_file: ref('zeroex_optimism_settler_trades_sample') + match_columns: + - tx_hash + check_columns: + - taker + - maker_token + - taker_token + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *taker_symbol + - *maker_symbol + - *token_pair + - *taker_token_amount + - *maker_token_amount + - *taker_token_amount_raw + - *maker_token_amount_raw + - *volume_usd + - *taker_token + - *maker_token + - *taker + - *maker + - *affiliate_address + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *type + - *swap_flag + - *contract_address + - *fills_within \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_settler_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_settler_trades.sql new file mode 100644 index 00000000000..4a397815b90 --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/zeroex/optimism/zeroex_optimism_settler_trades.sql @@ -0,0 +1,311 @@ +{{ config( + schema = 'zeroex_optimism', + alias = 'settler_trades', + materialized='incremental', + partition_by = ['block_month'], + unique_key = ['block_month', 'block_date', 'tx_hash', 'evt_index'], + on_schema_change='sync_all_columns', + file_format ='delta', + incremental_strategy='merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] +)}} + +{% set zeroex_settler_start_date = '2024-07-15' %} + +WITH tbl_addresses AS ( + SELECT + blockchain, + token_id, + to AS settler_address, + block_time AS begin_block_time, + block_number AS begin_block_number + FROM + {{ source('nft', 'transfers') }} + WHERE + contract_address = 0x00000000000004533fe15556b1e086bb1a72ceae + AND blockchain = 'optimism' + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% endif %} +), + +tbl_end_times AS ( + SELECT + *, + LEAD(begin_block_time) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_time) AS end_block_time, + LEAD(begin_block_number) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_number) AS end_block_number + FROM + tbl_addresses +), + +result_0x_settler_addresses AS ( + SELECT + * + FROM + tbl_end_times + WHERE + settler_address != 0x0000000000000000000000000000000000000000 +), + +settler_txs AS ( + SELECT + tx_hash, + block_time, + block_number, + method_id, + contract_address, + MAX(varbinary_substring(tracker,1,12)) AS zid, + CASE + WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3)) + WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3)) + END AS tag + FROM ( + SELECT + tr.tx_hash, + block_number, + block_time, + "to" AS contract_address, + varbinary_substring(input,1,4) AS method_id, + varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker + FROM + {{ source('optimism', 'traces') }} AS tr + JOIN + result_0x_settler_addresses a ON a.settler_address = tr.to AND a.blockchain = 'optimism' AND tr.block_time > a.begin_block_time + WHERE + (a.settler_address IS NOT NULL OR tr.to = 0xca11bde05977b3631167028862be2a173976ca11) + AND varbinary_substring(input,1,4) IN (0x1fff991f, 0xfd3ad6d4) + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% else %} + AND block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} + ) + GROUP BY + 1,2,3,4,5 +), + +tbl_all_logs AS ( + SELECT + logs.tx_hash, + logs.block_time, + logs.block_number, + ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first, + index, + CASE + WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1 + WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0 + WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0 + ELSE 1 + END maker_tkn, + bytearray_to_int256(bytearray_substring(DATA, 23,10)) value, + logs.contract_address AS token, + zid, + st.contract_address, + method_id, + tag + FROM + {{ source('optimism', 'logs') }} AS logs + JOIN + settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number + WHERE + topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65, + 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, + 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c) + and tag != 0x000000 and zid != 0xa00000000000000000000000 + {% if is_incremental() %} + AND {{ incremental_predicate('logs.block_time') }} + {% else %} + AND logs.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +tbl_maker_token AS ( + SELECT + ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last, + token AS maker_token, + tx_hash, + block_time, + block_number, + index + FROM + tbl_all_logs + WHERE + maker_tkn = 1 +), + +tbl_trades AS ( + SELECT + ta.tx_hash, + ta.block_time, + ta.block_number, + zid, + method_id, + tag, + contract_address, + SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount, + MAX(token) FILTER (WHERE rn_first = 1) AS taker_token, + SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount, + MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token + FROM + tbl_all_logs ta + LEFT JOIN + tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1 + GROUP BY + 1,2,3,4,5,6,7 +), + +tokens AS ( + SELECT DISTINCT + te.* + FROM + {{ source('tokens', 'erc20') }} AS te + JOIN + tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token + WHERE + te.blockchain = 'optimism' +), + +prices AS ( + SELECT DISTINCT + pu.* + FROM + {{ source('prices', 'usd') }} AS pu + JOIN + tbl_trades ON (pu.contract_address = taker_token OR pu.contract_address = maker_token) AND date_trunc('minute',block_time) = minute + WHERE + pu.blockchain = 'optimism' + {% if is_incremental() %} + AND {{ incremental_predicate('minute') }} + {% else %} + AND minute >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results AS ( + SELECT + trades.block_time, + trades.block_number, + zid, + trades.contract_address, + method_id, + trades.tx_hash, + "from" AS tx_from, + "to" AS tx_to, + index AS tx_index, + CASE + WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20) + WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20) + WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20) + WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20) + WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20) + WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20) + WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20) + WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20) + WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20) + WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20) + WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20) + WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20) + WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20) + WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20) + END AS taker , + CAST(NULL AS varbinary) AS maker, + taker_token, + pt.price, + COALESCE(tt.symbol, pt.symbol) AS taker_symbol, + taker_amount AS taker_token_amount_raw, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) AS taker_token_amount, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) * pt.price AS taker_amount, + maker_token, + COALESCE(tm.symbol, pm.symbol) AS maker_symbol, + maker_amount AS maker_token_amount_raw, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount, + tag, + data, + varbinary_substring(data, varbinary_length(data) - CASE + WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be)) + WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156)) + WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede)) + END -3, 37) taker_indicator_string + FROM + tbl_trades trades + JOIN + {{ source('optimism', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number + LEFT JOIN + tokens tt ON tt.blockchain = 'optimism' AND tt.contract_address = taker_token + LEFT JOIN + tokens tm ON tm.blockchain = 'optimism' AND tm.contract_address = maker_token + LEFT JOIN + prices pt ON pt.blockchain = 'optimism' AND pt.contract_address = taker_token AND pt.minute = DATE_TRUNC('minute', trades.block_time) + LEFT JOIN + prices pm ON pm.blockchain = 'optimism' AND pm.contract_address = maker_token AND pm.minute = DATE_TRUNC('minute', trades.block_time) + WHERE + 1=1 + {% if is_incremental() %} + AND {{ incremental_predicate('tr.block_time') }} + {% else %} + AND tr.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results_usd AS ( + SELECT + 'optimism' AS blockchain, + '0x API' AS project, + 'settler' AS version, + DATE_TRUNC('day', block_time) block_date, + DATE_TRUNC('month', block_time) AS block_month, + block_time, + taker_symbol, + maker_symbol, + CASE WHEN LOWER(taker_symbol) > LOWER(maker_symbol) THEN CONCAT(maker_symbol, '-', taker_symbol) ELSE CONCAT(taker_symbol, '-', maker_symbol) END AS token_pair, + taker_token_amount, + maker_token_amount, + taker_token_amount_raw, + maker_token_amount_raw, + CASE WHEN maker_token IN (0x4200000000000000000000000000000000000006, + 0x7f5c764cbc14f9669b88837ca1490cca17c31607, + 0x4200000000000000000000000000000000000042, + 0x0b2c639c533813f4aa9d7837caf62653d097ff85, + 0x94b008aa00579c1307b0ef2c499ad98a8ce58e58, + 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1) AND maker_amount IS NOT NULL + THEN maker_amount + WHEN taker_token IN (0x4200000000000000000000000000000000000006, + 0x7f5c764cbc14f9669b88837ca1490cca17c31607, + 0x4200000000000000000000000000000000000042, + 0x0b2c639c533813f4aa9d7837caf62653d097ff85, + 0x94b008aa00579c1307b0ef2c499ad98a8ce58e58, + 0xda10009cbd5d07dd0cecc66161fc93d7c9000da1) AND taker_amount IS NOT NULL + THEN taker_amount + ELSE COALESCE(maker_amount, taker_amount) + END AS volume_usd, + taker_token, + maker_token, + CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000) + OR taker IS NULL + OR taker = taker_token + OR taker = contract_address + OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff + OR varbinary_substring(taker_indicator_string, 18,20) != contract_address + THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker, + maker, + tag, + tx_hash, + tx_from, + tx_to, + tx_index AS evt_index, + (ARRAY[-1]) AS trace_address, + 'settler' AS type, + TRUE AS swap_flag, + -1 AS fills_within, + contract_address + FROM + results +) + +SELECT DISTINCT + * +FROM + results_usd +ORDER BY + block_time DESC \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_api_fills_deduped.sql index 4cdd58e500b..c93672ff521 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_api_fills_deduped.sql @@ -68,7 +68,7 @@ AS ) SELECT a.blockchain , '0x API' as project - , cast(null as varchar(10)) as version + , cast('1' as varchar(10)) as version , a.block_date , a.block_month , a.block_time diff --git a/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_schema.yml b/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_schema.yml index 73c96197d67..be359f6bdc3 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_schema.yml +++ b/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_schema.yml @@ -219,7 +219,7 @@ models: config: tags: ['polygon','0x','dex_aggregator','dex','aggregator'] description: > - 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on Ethereum + 0x API erc20 swaps raw fills (including multihops) and also native swaps thru 0x exchange contracts (without using 0x API) on polygon tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: @@ -266,3 +266,54 @@ models: - &protocol_fee_paid_eth name: protocol_fee_paid_eth description: "The protocol fee paid in ETH" + + - name: zeroex_polygon_settler_trades + meta: + blockchain: polygon + project: zeroex + contributors: rantum, bakabhai993 + config: + tags: ['polygon','0x','dex_aggregator','dex','aggregator'] + description: > + 0x API erc20 trades through 0x Settler contracts. No fills, only deduped transactions. + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_month + - block_date + - tx_hash + - evt_index + - check_seed: + seed_file: ref('zeroex_polygon_settler_trades_sample') + match_columns: + - tx_hash + check_columns: + - taker + - maker_token + - taker_token + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *taker_symbol + - *maker_symbol + - *token_pair + - *taker_token_amount + - *maker_token_amount + - *taker_token_amount_raw + - *maker_token_amount_raw + - *volume_usd + - *taker_token + - *maker_token + - *taker + - *maker + - *affiliate_address + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *type + - *swap_flag + - *contract_address + - *fills_within \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_settler_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_settler_trades.sql new file mode 100644 index 00000000000..e6b7a740eb6 --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/zeroex/polygon/zeroex_polygon_settler_trades.sql @@ -0,0 +1,311 @@ +{{ config( + schema = 'zeroex_polygon', + alias = 'settler_trades', + materialized='incremental', + partition_by = ['block_month'], + unique_key = ['block_month', 'block_date', 'tx_hash', 'evt_index'], + on_schema_change='sync_all_columns', + file_format ='delta', + incremental_strategy='merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] +)}} + +{% set zeroex_settler_start_date = '2024-07-15' %} + +WITH tbl_addresses AS ( + SELECT + blockchain, + token_id, + to AS settler_address, + block_time AS begin_block_time, + block_number AS begin_block_number + FROM + {{ source('nft', 'transfers') }} + WHERE + contract_address = 0x00000000000004533fe15556b1e086bb1a72ceae + AND blockchain = 'polygon' + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% endif %} +), + +tbl_end_times AS ( + SELECT + *, + LEAD(begin_block_time) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_time) AS end_block_time, + LEAD(begin_block_number) OVER (PARTITION BY blockchain, token_id ORDER BY begin_block_number) AS end_block_number + FROM + tbl_addresses +), + +result_0x_settler_addresses AS ( + SELECT + * + FROM + tbl_end_times + WHERE + settler_address != 0x0000000000000000000000000000000000000000 +), + +settler_txs AS ( + SELECT + tx_hash, + block_time, + block_number, + method_id, + contract_address, + MAX(varbinary_substring(tracker,1,12)) AS zid, + CASE + WHEN method_id = 0x1fff991f THEN MAX(varbinary_substring(tracker,14,3)) + WHEN method_id = 0xfd3ad6d4 THEN MAX(varbinary_substring(tracker,13,3)) + END AS tag + FROM ( + SELECT + tr.tx_hash, + block_number, + block_time, + "to" AS contract_address, + varbinary_substring(input,1,4) AS method_id, + varbinary_substring(input,varbinary_position(input,0xfd3ad6d4)+132,32) tracker + FROM + {{ source('polygon', 'traces') }} AS tr + JOIN + result_0x_settler_addresses a ON a.settler_address = tr.to AND a.blockchain = 'polygon' AND tr.block_time > a.begin_block_time + WHERE + (a.settler_address IS NOT NULL OR tr.to = 0xca11bde05977b3631167028862be2a173976ca11) + AND varbinary_substring(input,1,4) IN (0x1fff991f, 0xfd3ad6d4) + {% if is_incremental() %} + AND {{ incremental_predicate('block_time') }} + {% else %} + AND block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} + ) + GROUP BY + 1,2,3,4,5 +), + +tbl_all_logs AS ( + SELECT + logs.tx_hash, + logs.block_time, + logs.block_number, + ROW_NUMBER() OVER (PARTITION BY logs.tx_hash ORDER BY index) rn_first, + index, + CASE + WHEN varbinary_substring(logs.topic2, 13, 20) = logs.tx_from THEN 1 + WHEN varbinary_substring(logs.topic1, 13, 20) = st.contract_address THEN 0 + WHEN FIRST_VALUE(logs.contract_address) OVER (PARTITION BY logs.tx_hash ORDER BY index) = logs.contract_address THEN 0 + ELSE 1 + END maker_tkn, + bytearray_to_int256(bytearray_substring(DATA, 23,10)) value, + logs.contract_address AS token, + zid, + st.contract_address, + method_id, + tag + FROM + {{ source('polygon', 'logs') }} AS logs + JOIN + settler_txs st ON st.tx_hash = logs.tx_hash AND logs.block_time = st.block_time AND st.block_number = logs.block_number + WHERE + topic0 IN (0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65, + 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, + 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c) + and tag != 0x000000 and zid != 0xa00000000000000000000000 + {% if is_incremental() %} + AND {{ incremental_predicate('logs.block_time') }} + {% else %} + AND logs.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +tbl_maker_token AS ( + SELECT + ROW_NUMBER() OVER (PARTITION BY tx_hash ORDER BY index DESC) rn_last, + token AS maker_token, + tx_hash, + block_time, + block_number, + index + FROM + tbl_all_logs + WHERE + maker_tkn = 1 +), + +tbl_trades AS ( + SELECT + ta.tx_hash, + ta.block_time, + ta.block_number, + zid, + method_id, + tag, + contract_address, + SUM(value) FILTER (WHERE rn_first = 1) AS taker_amount, + MAX(token) FILTER (WHERE rn_first = 1) AS taker_token, + SUM(value) FILTER (WHERE rn_last = 1) AS maker_amount, + MAX(maker_token) FILTER (WHERE rn_last = 1) AS maker_token + FROM + tbl_all_logs ta + LEFT JOIN + tbl_maker_token mkr ON ta.tx_hash = mkr.tx_hash AND ta.block_time = mkr.block_time AND ta.block_number = mkr.block_number AND ta.index = mkr.index AND mkr.rn_last = 1 + GROUP BY + 1,2,3,4,5,6,7 +), + +tokens AS ( + SELECT DISTINCT + te.* + FROM + {{ source('tokens', 'erc20') }} AS te + JOIN + tbl_trades ON te.contract_address = taker_token OR te.contract_address = maker_token + WHERE + te.blockchain = 'polygon' +), + +prices AS ( + SELECT DISTINCT + pu.* + FROM + {{ source('prices', 'usd') }} AS pu + JOIN + tbl_trades ON (pu.contract_address = taker_token OR pu.contract_address = maker_token) AND date_trunc('minute',block_time) = minute + WHERE + pu.blockchain = 'polygon' + {% if is_incremental() %} + AND {{ incremental_predicate('minute') }} + {% else %} + AND minute >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results AS ( + SELECT + trades.block_time, + trades.block_number, + zid, + trades.contract_address, + method_id, + trades.tx_hash, + "from" AS tx_from, + "to" AS tx_to, + index AS tx_index, + CASE + WHEN varbinary_substring(data,17,10) != 0x00000000000000000000 AND varbinary_substring(data,17,1) != 0x THEN varbinary_substring(data,17,20) + WHEN varbinary_substring(data,177,10) != 0x00000000000000000000 THEN varbinary_substring(data,177,20) + WHEN varbinary_substring(data,277,10) != 0x00000000000000000000 THEN varbinary_substring(data,277,20) + WHEN varbinary_substring(data,629,10) != 0x00000000000000000000 THEN varbinary_substring(data,629,20) + WHEN varbinary_substring(data,693,10) != 0x00000000000000000000 THEN varbinary_substring(data,693,20) + WHEN varbinary_substring(data,917,10) != 0x00000000000000000000 THEN varbinary_substring(data,917,20) + WHEN varbinary_substring(data,949,10) != 0x00000000000000000000 THEN varbinary_substring(data,949,20) + WHEN varbinary_substring(data,981,10) != 0x00000000000000000000 THEN varbinary_substring(data,981,20) + WHEN varbinary_substring(data,1013,10) != 0x00000000000000000000 THEN varbinary_substring(data,1013,20) + WHEN varbinary_substring(data,1141,10) != 0x00000000000000000000 THEN varbinary_substring(data,1141,20) + WHEN varbinary_substring(data,1273,10) != 0x00000000000000000000 THEN varbinary_substring(data,1273,20) + WHEN varbinary_substring(data,1749,4) != 0x00000000 THEN varbinary_substring(data,1749,20) + WHEN varbinary_substring(data,1049,4) != 0x00000000 THEN varbinary_substring(data,1049,20) + WHEN varbinary_substring(data,17,4) != 0x00000000 THEN varbinary_substring(data,17,20) + END AS taker , + CAST(NULL AS varbinary) AS maker, + taker_token, + pt.price, + COALESCE(tt.symbol, pt.symbol) AS taker_symbol, + taker_amount AS taker_token_amount_raw, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) AS taker_token_amount, + taker_amount / POW(10,COALESCE(tt.decimals,pt.decimals)) * pt.price AS taker_amount, + maker_token, + COALESCE(tm.symbol, pm.symbol) AS maker_symbol, + maker_amount AS maker_token_amount_raw, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) AS maker_token_amount, + maker_amount / POW(10,COALESCE(tm.decimals,pm.decimals)) * pm.price AS maker_amount, + tag, + data, + varbinary_substring(data, varbinary_length(data) - CASE + WHEN varbinary_position (data,0xc4103b48be) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xc4103b48be)) + WHEN varbinary_position (data,0xe48d68a156) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe48d68a156)) + WHEN varbinary_position (data,0xe422ce6ede) <> 0 THEN varbinary_position(REVERSE(data), REVERSE(0xe422ce6ede)) + END -3, 37) taker_indicator_string + FROM + tbl_trades trades + JOIN + {{ source('polygon', 'transactions') }} tr ON tr.hash = trades.tx_hash AND tr.block_time = trades.block_time AND tr.block_number = trades.block_number + LEFT JOIN + tokens tt ON tt.blockchain = 'polygon' AND tt.contract_address = taker_token + LEFT JOIN + tokens tm ON tm.blockchain = 'polygon' AND tm.contract_address = maker_token + LEFT JOIN + prices pt ON pt.blockchain = 'polygon' AND pt.contract_address = taker_token AND pt.minute = DATE_TRUNC('minute', trades.block_time) + LEFT JOIN + prices pm ON pm.blockchain = 'polygon' AND pm.contract_address = maker_token AND pm.minute = DATE_TRUNC('minute', trades.block_time) + WHERE + 1=1 + {% if is_incremental() %} + AND {{ incremental_predicate('tr.block_time') }} + {% else %} + AND tr.block_time >= DATE '{{zeroex_settler_start_date}}' + {% endif %} +), + +results_usd AS ( + SELECT + 'polygon' AS blockchain, + '0x API' AS project, + 'settler' AS version, + DATE_TRUNC('day', block_time) block_date, + DATE_TRUNC('month', block_time) AS block_month, + block_time, + taker_symbol, + maker_symbol, + CASE WHEN LOWER(taker_symbol) > LOWER(maker_symbol) THEN CONCAT(maker_symbol, '-', taker_symbol) ELSE CONCAT(taker_symbol, '-', maker_symbol) END AS token_pair, + taker_token_amount, + maker_token_amount, + taker_token_amount_raw, + maker_token_amount_raw, + CASE WHEN maker_token IN (0x2791bca1f2de4661ed88a30c99a7a9449aa84174, + 0x7ceb23fd6bc0add59e62ac25578270cff1b9f619, + 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270, + 0xc2132d05d31c914a87c6611c10748aeb04b58e8f, + 0x3c499c542cef5e3811e1192ce70d8cc03d5c3359, + 0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6) AND maker_amount IS NOT NULL + THEN maker_amount + WHEN taker_token IN (0x2791bca1f2de4661ed88a30c99a7a9449aa84174, + 0x7ceb23fd6bc0add59e62ac25578270cff1b9f619, + 0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270, + 0xc2132d05d31c914a87c6611c10748aeb04b58e8f, + 0x3c499c542cef5e3811e1192ce70d8cc03d5c3359, + 0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6) AND taker_amount IS NOT NULL + THEN taker_amount + ELSE COALESCE(maker_amount, taker_amount) + END AS volume_usd, + taker_token, + maker_token, + CASE WHEN (varbinary_substring(taker,1,4) = 0x00000000) + OR taker IS NULL + OR taker = taker_token + OR taker = contract_address + OR taker = 0xdef1c0ded9bec7f1a1670819833240f027b25eff + OR varbinary_substring(taker_indicator_string, 18,20) != contract_address + THEN varbinary_substring(taker_indicator_string, 18,20) ELSE taker END AS taker, + maker, + tag, + tx_hash, + tx_from, + tx_to, + tx_index AS evt_index, + (ARRAY[-1]) AS trace_address, + 'settler' AS type, + TRUE AS swap_flag, + -1 AS fills_within, + contract_address + FROM + results +) + +SELECT DISTINCT + * +FROM + results_usd +ORDER BY + block_time DESC \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/zeroex/zeroex_api_fills_deduped.sql b/dbt_subprojects/dex/models/_projects/zeroex/zeroex_api_fills_deduped.sql index e990534b8d3..67797d869f6 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/zeroex_api_fills_deduped.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/zeroex_api_fills_deduped.sql @@ -19,6 +19,13 @@ ,ref('zeroex_optimism_api_fills_deduped') ,ref('zeroex_polygon_api_fills_deduped') ,ref('zeroex_bnb_api_fills_deduped') + ,ref('zeroex_ethereum_settler_trades') + ,ref('zeroex_base_settler_trades') + ,ref('zeroex_polygon_settler_trades') + ,ref('zeroex_optimism_settler_trades') + ,ref('zeroex_bnb_settler_trades') + ,ref('zeroex_avalanche_c_settler_trades') + ,ref('zeroex_arbitrum_settler_trades') ] %} @@ -26,7 +33,29 @@ SELECT * FROM ( {% for model in zeroex_models %} SELECT - * + blockchain + ,version + ,block_month + ,block_date + ,block_time + ,maker_symbol + ,taker_symbol + ,token_pair + ,maker_token_amount + ,taker_token_amount + ,maker_token_amount_raw + ,taker_token_amount_raw + ,volume_usd + ,maker_token + ,taker_token + ,taker + ,maker + ,contract_address + ,tx_hash + ,tx_from + ,tx_to + ,trace_address + ,evt_index FROM {{ model }} {% if not loop.last %} UNION ALL diff --git a/dbt_subprojects/dex/models/_projects/zeroex/zeroex_trades.sql b/dbt_subprojects/dex/models/_projects/zeroex/zeroex_trades.sql index 99558520ef9..dc147629864 100644 --- a/dbt_subprojects/dex/models/_projects/zeroex/zeroex_trades.sql +++ b/dbt_subprojects/dex/models/_projects/zeroex/zeroex_trades.sql @@ -22,7 +22,7 @@ FROM ( SELECT blockchain as blockchain, '0x API' as project, - '1' as version, + version as version, block_month as block_month, block_date as block_date, block_time as block_time, @@ -44,12 +44,9 @@ FROM ( tx_to as tx_to, trace_address, evt_index as evt_index - FROM {{ model }} {% if not loop.last %} - UNION ALL - {% endif %} {% endfor %} ) \ No newline at end of file diff --git a/dbt_subprojects/dex/models/aggregator_trades/dex_aggregator_trades.sql b/dbt_subprojects/dex/models/aggregator_trades/dex_aggregator_trades.sql index fda6adadbcd..e67cb143484 100644 --- a/dbt_subprojects/dex/models/aggregator_trades/dex_aggregator_trades.sql +++ b/dbt_subprojects/dex/models/aggregator_trades/dex_aggregator_trades.sql @@ -1,6 +1,5 @@ {{ config( - schema ='dex_aggregator', alias = 'trades', materialized = 'incremental', @@ -44,8 +43,8 @@ SELECT , token_pair , token_bought_amount , token_sold_amount - , token_bought_amount_raw - , token_sold_amount_raw + , try_cast(token_bought_amount_raw as uint256) as token_bought_amount_raw + , try_cast(token_sold_amount_raw as uint256) as token_sold_amount_raw , amount_usd , token_bought_address , token_sold_address diff --git a/dbt_subprojects/dex/models/trades/ethereum/platforms/carbon_defi_ethereum_base_trades.sql b/dbt_subprojects/dex/models/trades/ethereum/platforms/carbon_defi_ethereum_base_trades.sql index 63011f2c2fd..21c713d48c8 100644 --- a/dbt_subprojects/dex/models/trades/ethereum/platforms/carbon_defi_ethereum_base_trades.sql +++ b/dbt_subprojects/dex/models/trades/ethereum/platforms/carbon_defi_ethereum_base_trades.sql @@ -12,46 +12,11 @@ {% set weth_address = '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' %} -WITH dexs AS ( - SELECT - t.evt_block_number AS block_number, - t.evt_block_time AS block_time, - t.trader AS taker, - CAST(NULL as VARBINARY) as maker, - t.targetAmount AS token_bought_amount_raw, - t.sourceAmount AS token_sold_amount_raw, - CASE - WHEN t.targetToken = 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee THEN {{weth_address}} - ELSE t.targetToken - END AS token_bought_address, --Using WETH for easier joining with USD price table - CASE - WHEN t.sourceToken = 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee THEN {{weth_address}} - ELSE t.sourceToken - END AS token_sold_address, --Using WETH for easier joining with USD price table - t.contract_address AS project_contract_address, - t.evt_tx_hash AS tx_hash, - t.evt_index - FROM {{ source('carbon_defi_ethereum', 'CarbonController_evt_TokensTraded') }} t - {% if is_incremental() %} - WHERE {{incremental_predicate('t.evt_block_time')}} - {% endif %} -) - -SELECT - 'ethereum' AS blockchain, - 'carbon_defi' AS project, - '1' AS version, - CAST(date_trunc('month', dexs.block_time) AS date) AS block_month, - CAST(date_trunc('day', dexs.block_time) AS date) AS block_date, - dexs.block_time, - dexs.block_number, - dexs.token_bought_amount_raw, - dexs.token_sold_amount_raw, - dexs.token_bought_address, - dexs.token_sold_address, - dexs.taker, - dexs.maker, - dexs.project_contract_address, - dexs.tx_hash, - dexs.evt_index -FROM dexs +{{ + carbon_defi_compatible_trades( + blockchain = 'ethereum', + project = 'carbon_defi', + CarbonController_evt_TokensTraded = source('carbon_defi_ethereum', 'CarbonController_evt_TokensTraded'), + wrapped_native_token = weth_address + ) +}} diff --git a/dbt_subprojects/dex/models/trades/sei/_schema.yml b/dbt_subprojects/dex/models/trades/sei/_schema.yml index 9c5ea3e456b..5f483e63e87 100644 --- a/dbt_subprojects/dex/models/trades/sei/_schema.yml +++ b/dbt_subprojects/dex/models/trades/sei/_schema.yml @@ -74,3 +74,20 @@ models: - evt_index - check_dex_base_trades_seed: seed_file: ref('xei_finance_sei_base_trades_seed') + + - name: carbon_defi_sei_base_trades + meta: + blockchain: sei + sector: dex + project: carbon_defi + contributors: hosuke + config: + tags: [ 'sei', 'dex', 'trades', 'carbon_defi' ] + description: "Carbon DeFi sei base trades" + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - tx_hash + - evt_index + - check_dex_base_trades_seed: + seed_file: ref('carbon_defi_sei_base_trades_seed') diff --git a/dbt_subprojects/dex/models/trades/sei/dex_sei_base_trades.sql b/dbt_subprojects/dex/models/trades/sei/dex_sei_base_trades.sql index 097efea37d9..3c3f2c04da0 100644 --- a/dbt_subprojects/dex/models/trades/sei/dex_sei_base_trades.sql +++ b/dbt_subprojects/dex/models/trades/sei/dex_sei_base_trades.sql @@ -10,6 +10,7 @@ , ref('oku_sei_base_trades') , ref('dragon_swap_sei_base_trades') , ref('xei_finance_sei_base_trades') + , ref('carbon_defi_sei_base_trades') ] %} WITH base_union AS ( diff --git a/dbt_subprojects/dex/models/trades/sei/platforms/carbon_defi_sei_base_trades.sql b/dbt_subprojects/dex/models/trades/sei/platforms/carbon_defi_sei_base_trades.sql new file mode 100644 index 00000000000..2c2c2aff0d8 --- /dev/null +++ b/dbt_subprojects/dex/models/trades/sei/platforms/carbon_defi_sei_base_trades.sql @@ -0,0 +1,22 @@ +{{ + config( + schema = 'carbon_defi_sei', + alias = 'base_trades', + materialized = 'incremental', + file_format = 'delta', + incremental_strategy = 'merge', + unique_key = ['tx_hash', 'evt_index'], + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')] + ) +}} + +{% set wsei_address = '0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7' %} + +{{ + carbon_defi_compatible_trades( + blockchain = 'sei', + project = 'carbon_defi', + CarbonController_evt_TokensTraded = source('carbon_defi_sei', 'CarbonController_evt_TokensTraded'), + wrapped_native_token = wsei_address + ) +}} diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/arbitrum/_schema.yml b/dbt_subprojects/dex/seeds/_project/zeroex/arbitrum/_schema.yml index ed9801c62a8..245498310ff 100644 --- a/dbt_subprojects/dex/seeds/_project/zeroex/arbitrum/_schema.yml +++ b/dbt_subprojects/dex/seeds/_project/zeroex/arbitrum/_schema.yml @@ -56,4 +56,12 @@ seeds: volume_usd: double tx_from: varbinary tx_to: varbinary - fills_within: int \ No newline at end of file + fills_within: int + - name: zeroex_arbitrum_settler_trades_sample + config: + column_types: + tx_hash: varbinary + taker: varbinary + taker_token: varbinary + maker_token: varbinary + taker_token_amount: double \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/arbitrum/zeroex_arbitrum_settler_trades_sample.csv b/dbt_subprojects/dex/seeds/_project/zeroex/arbitrum/zeroex_arbitrum_settler_trades_sample.csv new file mode 100644 index 00000000000..406718a3102 --- /dev/null +++ b/dbt_subprojects/dex/seeds/_project/zeroex/arbitrum/zeroex_arbitrum_settler_trades_sample.csv @@ -0,0 +1,6 @@ +tx_hash,maker_token,taker_token,taker,taker_token_amount +0x2aaa5f2466f65710465ca87c578d2a16a404e510389ba787d0fadad48e90e0d9,0x7f9a7db853ca816b9a138aee3380ef34c437dee0,0x7189fb5b6504bbff6a852b13b7b82a3c118fdc27,0x565a6ae3c8cae20ac43e122ff814380e47599294,70.1 +0xa657871a53da9ab8dde9992ffc9de59fc6068e2119a69dec7c7715f8e37e3360,0x7f9a7db853ca816b9a138aee3380ef34c437dee0,0x625e7708f30ca75bfd92586e17077590c60eb4cd,0x9a2cbcd948378063d25078c8f2c629f5c758d9e6,1.13 +0x625fe7c8d17e63c8ff92e2121c450780b0a98d7f05ed68506e65b106cccd54bb,0xaf88d065e77c8cc2239327c5edb3a432268e5831,0x2f2a2543b76a4166549f7aab2e75bef0aefc5b0f,0xde99e27c8547d95a1789664fec4b64e918a8989f,3.84 +0x4a893be7c002d80d8a84351b3d68e8cd8bc8a24fc228531cadca3597edc0be32,0xaf88d065e77c8cc2239327c5edb3a432268e5831,0xff970a61a04b1ca14834a43f5de4533ebddb5cc8,0xbfe2ad682b97fffc8ac452ea99cb9d10fc4f901f,230638.89 +0xe26f60d9dd8ab254c0b590b57f8d04361057cd00925855533fb3c8a380e85734,0xfea7a6a0b346362bf88a9e4a88416b77a57d6c2a,0xff970a61a04b1ca14834a43f5de4533ebddb5cc8,0x59e47b81392c42e5590da24c11f820408602b64b,65000 \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/avalanche_c/_schema.yml b/dbt_subprojects/dex/seeds/_project/zeroex/avalanche_c/_schema.yml index 56fbf045689..8f79fac7430 100644 --- a/dbt_subprojects/dex/seeds/_project/zeroex/avalanche_c/_schema.yml +++ b/dbt_subprojects/dex/seeds/_project/zeroex/avalanche_c/_schema.yml @@ -56,4 +56,14 @@ seeds: volume_usd: double tx_from: varbinary tx_to: varbinary - fills_within: int \ No newline at end of file + fills_within: int + + - name: zeroex_avalanche_c_settler_trades_sample + config: + column_types: + tx_hash: varbinary + taker: varbinary + taker_token: varbinary + maker_token: varbinary + taker_token_amount: double + \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/avalanche_c/zeroex_avalanche_c_settler_trades_sample.csv b/dbt_subprojects/dex/seeds/_project/zeroex/avalanche_c/zeroex_avalanche_c_settler_trades_sample.csv new file mode 100644 index 00000000000..3645b707bb2 --- /dev/null +++ b/dbt_subprojects/dex/seeds/_project/zeroex/avalanche_c/zeroex_avalanche_c_settler_trades_sample.csv @@ -0,0 +1,6 @@ +tx_hash,taker,taker_token,maker_token,taker_token_amount +0x643771ec21f98febfb5cf075914a71876dc97a8700a6974be93dfdf002e3f14c,0xaf68e7515730de7cd905b2e00de99a6345d18893,0xed2b42d3c9c6e97e11755bb37df29b6375ede3eb,0x420fca0121dc28039145009570975747295f2329,412.83 +0x1dde64af683d37dd859ff5b7624f0edf3679927ee3f9e76d7b761226a263dad7,0x0aa32e11c06aefce5918e38dd397ea349c059391,0x323665443cef804a3b5206103304bd4872ea4253,0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e,11 +0x9cd3973d658e2e3f25ec8f6a8ae8b3a87f3661c07b281fd7c76a026b5f2eda5b,0xb6e8d89d262239955677f99ef737ab1a09031599,0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7,0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7,4.91 +0x20d38cdc2e0d4df470b0ff84554869725db31ba230cb29f6567f65aa4526c316,0x5cbbae2356bf6e550fc374ffc34890cfb19472df,0x60781c2586d68229fde47564546784ab3faca982,0x420fca0121dc28039145009570975747295f2329,75.6 +0x84c29b622be20e26e53f99e47d942cf916d79e451d4373e3698a7480a86f6776,0x5cbbae2356bf6e550fc374ffc34890cfb19472df,0x8ad25b0083c9879942a64f00f20a70d3278f6187,0x420fca0121dc28039145009570975747295f2329,4227.48 diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/base/_schema.yml b/dbt_subprojects/dex/seeds/_project/zeroex/base/_schema.yml index 6888d705f55..ce7266a1143 100644 --- a/dbt_subprojects/dex/seeds/_project/zeroex/base/_schema.yml +++ b/dbt_subprojects/dex/seeds/_project/zeroex/base/_schema.yml @@ -27,3 +27,13 @@ seeds: volume_usd: double tx_from: varbinary tx_to: varbinary + + - name: zeroex_base_settler_trades_sample + config: + column_types: + tx_hash: varbinary + taker: varbinary + taker_token: varbinary + maker_token: varbinary + taker_token_amount: double + \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/base/zeroex_base_settler_trades_sample.csv b/dbt_subprojects/dex/seeds/_project/zeroex/base/zeroex_base_settler_trades_sample.csv new file mode 100644 index 00000000000..86fe65c4ad0 --- /dev/null +++ b/dbt_subprojects/dex/seeds/_project/zeroex/base/zeroex_base_settler_trades_sample.csv @@ -0,0 +1,11 @@ +tx_hash,maker_token,taker_token,taker,taker_token_amount +0xe2cf9b2ad161f595d66249b637bd42a2d59b057d8270ce52c39a41c0ed7c91d0,0xca8e8d244f0d219a6fc9e4793c635cea98d0399c,0x2075f6e2147d4ac26036c9b4084f8e28b324397d,0xfd81f5e7732bf0eb6b1e0233f6e166e6af0dcace,75644.62 +0x06d8d112ef47c9fcd267683d0fc2f5af2d1c776f99791967b762bb021ad0866c,0x997f7ec46ad66d14accfe76d5aa8c4a40935eba6,0xb16d7ce33b91ad0abd275d347e89fd49525e8a6d,0x47dd1675ea096103702790aa46523b8d0698b2b6,315026.34 +0x11d3707dbe5f5aee62d3752a29cacf3296f6da92c7f1589015c7866b06010def,0x2075f6e2147d4ac26036c9b4084f8e28b324397d,0xca8e8d244f0d219a6fc9e4793c635cea98d0399c,0x6927717bf79e26ce33d33e1643b5a5080fef4592,1940573.16 +0x70d2f1bc3d0b3e6bac23fe40ce2956cd607441bc4b906c2a2fc9b22ed7bb6b13,0x1d8bd673c8976879041bc65d15374532a15e636e,0xdaa3e61acbc88a3429815c7f4542d92c6be0810a,0x47dd1675ea096103702790aa46523b8d0698b2b6,211206.38 +0x5ca907fc5285eac92588fa062fef99e42fec6621a1c334c8bf927ac2fbf969a3,0x9a3ecea90c8dfe2b9fb737d304319b3c9d1fe8e6,0x96204e42785b4ababc521ee7031cd29d8e01a030,0xa51405cbaf0a75807732e265e8da0aae01b8fcd6,33872.32 +0x52422eee6a3be092d0dd96c115e23c7f3d8efa7779c0b82cdd2a74651ec68193,0x4b8ec286fd218adb992e3df1a8d9fcf6de38d583,0xad93be442507b73577aefac892201caa389bade8,0x8b33ab375667247004aa57f7c13edf8745e2b5d0,17214655.28 +0x6e8392736df991d32d421013521c35286dd2906aff3246d70e08e748cc908f8d,0x1d8bd673c8976879041bc65d15374532a15e636e,0x36f4145bf2bbae40c95001372799b4b8bff24673,0x47dd1675ea096103702790aa46523b8d0698b2b6,1614108.13 +0xf19a5800f50cf100081f4a18bc2fe6e30fe1578bc3e337f74f23b2cf2cba4a78,0xc7bf3bc62e15d837466dd515eb80210347d7be1d,0x1d8bd673c8976879041bc65d15374532a15e636e,0x47dd1675ea096103702790aa46523b8d0698b2b6,728640.77 +0x87ebc2d9168f490dcbbe8a981a4331f2632f31be73058cf467e085c1a03c18ee,0x9a3ecea90c8dfe2b9fb737d304319b3c9d1fe8e6,0x2e1d332893dc16124194e598a29866d2d5e8786b,0xa51405cbaf0a75807732e265e8da0aae01b8fcd6,105.38 +0x2f85a701e6ecc3c7e991d86b74b221c7d03b26026e513319960384a199aa29e1,0x821013108b9b168b2c7535bb27d5a6e75edcf138,0xdf1cf211d38e7762c9691be4d779a441a17a6cfc,0x6443b1ef724038320fa19800815f777be92f9f5c,4 diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/bnb/_schema.yml b/dbt_subprojects/dex/seeds/_project/zeroex/bnb/_schema.yml index 4fdd758dd64..59e8feb593d 100644 --- a/dbt_subprojects/dex/seeds/_project/zeroex/bnb/_schema.yml +++ b/dbt_subprojects/dex/seeds/_project/zeroex/bnb/_schema.yml @@ -56,4 +56,14 @@ seeds: volume_usd: double tx_from: varbinary tx_to: varbinary - fills_within: int \ No newline at end of file + fills_within: int + + - name: zeroex_bnb_settler_trades_sample + config: + column_types: + tx_hash: varbinary + taker: varbinary + taker_token: varbinary + maker_token: varbinary + taker_token_amount: double + \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/bnb/zeroex_bnb_settler_trades_sample.csv b/dbt_subprojects/dex/seeds/_project/zeroex/bnb/zeroex_bnb_settler_trades_sample.csv new file mode 100644 index 00000000000..980fb0cd708 --- /dev/null +++ b/dbt_subprojects/dex/seeds/_project/zeroex/bnb/zeroex_bnb_settler_trades_sample.csv @@ -0,0 +1,6 @@ +tx_hash,taker,taker_token,maker_token,taker_token_amount +0xccce8c5b0bfa806707fdebc244ac2d1675c64fcd4cb539c17bab65abb4949fe1,0x47b815248d38055440ae39af2f3bd68c8d534ad1,0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d,0x55d398326f99059ff775485246999027b3197955,307 +0x9230bf47b0a36656bdf3a7a95b70d62207ad5ac940ed5f69797787586e4543c4,0x3860938314a8783d27f5bf42ada92d20d2666046,0xba2ae424d960c26247dd6c32edc70b295c744c43,0x03aa6298f1370642642415edc0db8b957783e8d6,100 +0xc4edc73529b4a17de204e5d045a9c59e3f4c36c49e30551d1c0e4195c528e0d7,0x8f9f688c5aa08fa0f96c2e9aa6f06f497c1b6ec2,0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d,0x7130d2a12b9bcbfae4f2634d864a1ee1ce3ead9c,66 +0x49dbb56904b8b76f38535eee6e4000920d6be306d451e6bbf9cddc70e9128956,0xcb4f2c41cee1021d833191a4b7b9d6e29fd98b28,0x637c2173f6e678ac3c9b43b6665c760dc6021c13,0x55d398326f99059ff775485246999027b3197955,5012.35 +0x17850c97e120a76908e418cb7dae2b48dc743e54ddd259e0895b6abc81992d9f,0x7c505d9832ec2b0af5652829d5798dc7b21f07ef,0x8457ca5040ad67fdebbcc8edce889a335bc0fbfb,0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d,600 diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/ethereum/_schema.yml b/dbt_subprojects/dex/seeds/_project/zeroex/ethereum/_schema.yml index 4fe5753aa00..8a6400653bb 100644 --- a/dbt_subprojects/dex/seeds/_project/zeroex/ethereum/_schema.yml +++ b/dbt_subprojects/dex/seeds/_project/zeroex/ethereum/_schema.yml @@ -78,5 +78,15 @@ seeds: price_usd: double token_amount: double project_name: varchar + + - name: zeroex_ethereum_settler_trades_sample + config: + column_types: + tx_hash: varbinary + taker: varbinary + taker_token: varbinary + maker_token: varbinary + taker_token_amount: double + diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/ethereum/zeroex_ethereum_settler_trades_sample.csv b/dbt_subprojects/dex/seeds/_project/zeroex/ethereum/zeroex_ethereum_settler_trades_sample.csv new file mode 100644 index 00000000000..ddd7a98ecd4 --- /dev/null +++ b/dbt_subprojects/dex/seeds/_project/zeroex/ethereum/zeroex_ethereum_settler_trades_sample.csv @@ -0,0 +1,6 @@ +tx_hash,maker_token,taker_token,taker,taker_token_amount +0x2d2f79aaf9e94d47476fa1e48761d737ec982968a73e180cf78f78364398b325,0xdac17f958d2ee523a2206206994597c13d831ec7,0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24,0xb06076ef110462ac88edeb437263dcd6e3ac668e,963 +0x5c841087f5198b7886f6c028998da5272dd6954abec622c06823f22ddafbd138,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48,0x0f2d719407fdbeff09d87557abb7232601fd9f29,0xd952dc6d2badb958dcb263d5883f76a65dbbf842,"18634.17" +0x8594cd535793876047253df1901bca62cc3a5b048e41bf5e8f099784150b44eb,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48,0x0b7f0e51cd1739d6c96982d55ad8fa634dd43a9c,0xef1b0762163d4873466d5dea827e06ca4494f34a,80 +0x6d2f630c0cd7cbe032d2aaa7a34e67b07c41b85a99dbea2d7a14f5c0c4cec753,0xdac17f958d2ee523a2206206994597c13d831ec7,0x6de037ef9ad2725eb40118bb1702ebb27e4aeb24,0xb06076ef110462ac88edeb437263dcd6e3ac668e,963 +0x6a13adb197a75428369786d4fed74f964989443aa26e5540889f97f20854bfa2,0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48,0x6b175474e89094c44da98b954eedeac495271d0f,0x171c53d55b1bcb725f660677d9e8bad7fd084282,"4000000" diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/optimism/_schema.yml b/dbt_subprojects/dex/seeds/_project/zeroex/optimism/_schema.yml index 67213025af6..45a246813fe 100644 --- a/dbt_subprojects/dex/seeds/_project/zeroex/optimism/_schema.yml +++ b/dbt_subprojects/dex/seeds/_project/zeroex/optimism/_schema.yml @@ -55,4 +55,14 @@ seeds: volume_usd: double tx_from: varbinary tx_to: varbinary - fills_within: int \ No newline at end of file + fills_within: int + + - name: zeroex_optimism_settler_trades_sample + config: + column_types: + tx_hash: varbinary + taker: varbinary + taker_token: varbinary + maker_token: varbinary + taker_token_amount: double + \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/optimism/zeroex_optimism_settler_trades_sample.csv b/dbt_subprojects/dex/seeds/_project/zeroex/optimism/zeroex_optimism_settler_trades_sample.csv new file mode 100644 index 00000000000..5ea87e47e3f --- /dev/null +++ b/dbt_subprojects/dex/seeds/_project/zeroex/optimism/zeroex_optimism_settler_trades_sample.csv @@ -0,0 +1,6 @@ +tx_hash,maker_token,taker_token,taker,taker_token_amount +0x026c2ba7ef12d3d3d0534595ce3fc805ad1fce730ca56e96e67ec0682081cf10,0x7f5c764cbc14f9669b88837ca1490cca17c31607,0x9560e827af36c94d2ac33a39bce1fe78631088db,0xf68d2bfcecd7895bba05a7451dd09a1749026454,734557.15 +0x67c47b09d4a0b7b9637673acb5cecb4474aa67d4772cb95a29797ec302a8b2af,0x94b008aa00579c1307b0ef2c499ad98a8ce58e58,0x0b2c639c533813f4aa9d7837caf62653d097ff85,0xedf784409d24dfeb1d88686f27c20d7274a1c0d2,29051.47 +0x1f3eea781a2caadc5720e261868158914ba7e66c7d39ad1d6a27a3fef1cb57b7,0x0b2c639c533813f4aa9d7837caf62653d097ff85,0x94b008aa00579c1307b0ef2c499ad98a8ce58e58,0xedf784409d24dfeb1d88686f27c20d7274a1c0d2,29044.24 +0xe1169bff85fb423f769c5862df363649ef6fa726fbdac37eba2a14a3243ff7dd,0x0b2c639c533813f4aa9d7837caf62653d097ff85,0x94b008aa00579c1307b0ef2c499ad98a8ce58e58,0xedf784409d24dfeb1d88686f27c20d7274a1c0d2,28653.97 +0x6c6bfd6cfabedcdacf00f3ebde96c45f1311993db080bb1b0bdcb102b8c89ca3,0x0b2c639c533813f4aa9d7837caf62653d097ff85,0x94b008aa00579c1307b0ef2c499ad98a8ce58e58,0xedf784409d24dfeb1d88686f27c20d7274a1c0d2,28203.06 diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/polygon/_schema.yml b/dbt_subprojects/dex/seeds/_project/zeroex/polygon/_schema.yml index ba9c8de25e1..894555d1f3f 100644 --- a/dbt_subprojects/dex/seeds/_project/zeroex/polygon/_schema.yml +++ b/dbt_subprojects/dex/seeds/_project/zeroex/polygon/_schema.yml @@ -66,3 +66,12 @@ seeds: tx_from: varbinary tx_to: varbinary fills_within: int + + - name: zeroex_polygon_settler_trades_sample + config: + column_types: + tx_hash: varbinary + taker: varbinary + taker_token: varbinary + maker_token: varbinary + taker_token_amount: double \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/_project/zeroex/polygon/zeroex_polygon_settler_trades_sample.csv b/dbt_subprojects/dex/seeds/_project/zeroex/polygon/zeroex_polygon_settler_trades_sample.csv new file mode 100644 index 00000000000..a12cb5d601a --- /dev/null +++ b/dbt_subprojects/dex/seeds/_project/zeroex/polygon/zeroex_polygon_settler_trades_sample.csv @@ -0,0 +1,6 @@ +tx_hash,maker_token,taker_token,taker,taker_token_amount +0x3c6c7b739ba08e33518447e55b78cf27559013bd274c33674b687efa6d4b4f88,0xc2132d05d31c914a87c6611c10748aeb04b58e8f,0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6,0xcd69119e0a94c38ef0d2d2c53db04d7d6c0252d2,0.51708055 +0x31171b329671cd21305c32592f45324ea9e4b7b3deab23ed7ef3795e59a0a197,0xc2132d05d31c914a87c6611c10748aeb04b58e8f,0x3c499c542cef5e3811e1192ce70d8cc03d5c3359,0x5357b2243f07986a598ab49d39e312bd30b9b522,25000 +0x91f8f8a47f5f42eceb7ee8f87496d273ededd7a9012c312bbdcee8de6adc592a,0x8f3cf7ad23cd3cadbd9735aff958023239c6a063,0xc2132d05d31c914a87c6611c10748aeb04b58e8f,0x4dd9cb2cb1d53dc70c43dcc39cffd3d4278947cc,19998.71 +0x94ec0e6b525f4cdf6e9c4ede176a4a4aef53aac53987e2c493de1518bb4a6eb7,0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6,0xc2132d05d31c914a87c6611c10748aeb04b58e8f,0xb0362f56eef1a80c39a406d3ec049d49f2984435,14962.5 +0x839209cae9a7a79341cb5ce8c1f376d65282ef7c324c9e6d09bfd43bfb706ff0,0x1bfd67037b42cf73acf2047067bd4f2c47d9bfd6,0xc2132d05d31c914a87c6611c10748aeb04b58e8f,0xe220ca5040179aa647bd90db4813406fb2bf95c3,14772.95 \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/trades/_schema.yml b/dbt_subprojects/dex/seeds/trades/_schema.yml index 602c4a42fbe..8b84472dd5b 100644 --- a/dbt_subprojects/dex/seeds/trades/_schema.yml +++ b/dbt_subprojects/dex/seeds/trades/_schema.yml @@ -510,6 +510,21 @@ seeds: token_sold_amount_raw: uint256 block_date: timestamp + - name: carbon_defi_sei_base_trades_seed + config: + column_types: + blockchain: varchar + project: varchar + version: varchar + tx_hash: varbinary + evt_index: uint256 + block_number: uint256 + token_bought_address: varbinary + token_sold_address: varbinary + token_bought_amount_raw: uint256 + token_sold_amount_raw: uint256 + block_date: timestamp + - name: clipper_arbitrum_base_trades_seed config: column_types: diff --git a/dbt_subprojects/dex/seeds/trades/carbon_defi_sei_base_trades_seed.csv b/dbt_subprojects/dex/seeds/trades/carbon_defi_sei_base_trades_seed.csv new file mode 100644 index 00000000000..fcc1cacbc44 --- /dev/null +++ b/dbt_subprojects/dex/seeds/trades/carbon_defi_sei_base_trades_seed.csv @@ -0,0 +1,3 @@ +blockchain,project,version,block_date,tx_hash,evt_index,token_bought_address,token_sold_address,block_number,token_bought_amount_raw,token_sold_amount_raw +sei,carbon_defi,1,2024-08-05,0xb31a1cf6fad26f98d32d2dd8b6d156f9c73c1abcd67d06c251d70e95b53479e9,5,0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7,0x3894085ef7ff0f0aedf52e2a2704928d1ec074f1,93860838,29513895011843458087,6594498 +sei,carbon_defi,1,2024-08-05,0x65665351509de9ecd8671d3e1d09c937a9bdfab82951d1bdf0fb79afe6f80876,34,0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7,0x160345fc359604fc6e70e3c5facbde5f7a9342d8,93858656,10000577365614196684,965964573371112 \ No newline at end of file diff --git a/sources/_sector/dex/trades/sei/_sources.yml b/sources/_sector/dex/trades/sei/_sources.yml index 08a3c89cdbb..fec1f6edd63 100644 --- a/sources/_sector/dex/trades/sei/_sources.yml +++ b/sources/_sector/dex/trades/sei/_sources.yml @@ -23,4 +23,7 @@ sources: - name: xei_finance_sei tables: - name: XeiV3Factory_evt_PoolCreated - - name: XeiV3Pool_evt_Swap \ No newline at end of file + - name: XeiV3Pool_evt_Swap + - name: carbon_defi_sei + tables: + - name: CarbonController_evt_TokensTraded \ No newline at end of file diff --git a/sources/paraswap/base/paraswap_base_sources.yml b/sources/paraswap/base/paraswap_base_sources.yml index cdbda45edde..59a84bb28bd 100644 --- a/sources/paraswap/base/paraswap_base_sources.yml +++ b/sources/paraswap/base/paraswap_base_sources.yml @@ -11,6 +11,8 @@ sources: loaded_at_field: evt_block_time - name: AugustusSwapper_evt_SwappedV3 loaded_at_field: evt_block_time + - name: AugustusSwapper_evt_SwappedDirect + loaded_at_field: evt_block_time # v6 # v6.1 - name: AugustusV6_1_call_swapExactAmountIn