From ae9c646baf5dd04d9c67d35e3fa297c295d4ec92 Mon Sep 17 00:00:00 2001 From: Jacob Sharples <45126111+JacobSharples@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:20:34 -0500 Subject: [PATCH 1/5] Add Raydium's CP-Swap (CPMM) to DEX table (#7549) * Create raydium_v5_base_trades.sql * Update raydium_v5_base_trades.sql * Update sources.yml * Update schema.yml * Create raydium_v5_trades.sql * Update schema.yml * Update raydium_v5_base_trades.sql * Update sources.yml * add to cross-project base trades * force short runtimes for CI * Revert "force short runtimes for CI" This reverts commit b5c51746f65417c8b13ef8fa0f24108b47fdae65. --------- Co-authored-by: jeff-dude --- .../_sector/dex/dex_solana_base_trades.sql | 1 + .../dex/raydium/raydium_v5_base_trades.sql | 108 ++++++++++++++++++ .../_sector/dex/raydium/raydium_v5_trades.sql | 13 +++ .../models/_sector/dex/raydium/schema.yml | 54 ++++++++- .../models/_sector/dex/raydium/sources.yml | 16 ++- 5 files changed, 189 insertions(+), 3 deletions(-) create mode 100644 dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_base_trades.sql create mode 100644 dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_trades.sql diff --git a/dbt_subprojects/solana/models/_sector/dex/dex_solana_base_trades.sql b/dbt_subprojects/solana/models/_sector/dex/dex_solana_base_trades.sql index d3dba42ca27..769727b86b1 100644 --- a/dbt_subprojects/solana/models/_sector/dex/dex_solana_base_trades.sql +++ b/dbt_subprojects/solana/models/_sector/dex/dex_solana_base_trades.sql @@ -14,6 +14,7 @@ {% set solana_dexes = [ ref('raydium_v3_base_trades') , ref('raydium_v4_base_trades') + , ref('raydium_v5_base_trades') , ref('orca_whirlpool_base_trades') , ref('orca_whirlpool_v2_base_trades') , ref('phoenix_v1_base_trades') diff --git a/dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_base_trades.sql b/dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_base_trades.sql new file mode 100644 index 00000000000..31457fda396 --- /dev/null +++ b/dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_base_trades.sql @@ -0,0 +1,108 @@ + {{ + config( + schema = 'raydium_v5', + alias = 'base_trades', + partition_by = ['block_month'], + materialized = 'incremental', + file_format = 'delta', + incremental_strategy = 'merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')], + unique_key = ['tx_id', 'outer_instruction_index', 'inner_instruction_index', 'tx_index','block_month'], + pre_hook='{{ enforce_join_distribution("PARTITIONED") }}' + ) +}} + +{% set project_start_date = '2024-05-16' %} --grabbed program deployed at time (account created at). + + WITH + all_swaps as ( + SELECT + sp.call_block_time as block_time + , sp.call_block_slot as block_slot + , 'raydium' as project + , 5 as version + , 'solana' as blockchain + , case when sp.call_is_inner = False then 'direct' + else sp.call_outer_executing_account + end as trade_source + -- -- token bought is always the second instruction (transfer) in the inner instructions + , trs_2.amount as token_bought_amount_raw + , trs_1.amount as token_sold_amount_raw + , account_poolState as pool_id --p.pool_id + , sp.call_tx_signer as trader_id + , sp.call_tx_id as tx_id + , sp.call_outer_instruction_index as outer_instruction_index + , COALESCE(sp.call_inner_instruction_index, 0) as inner_instruction_index + , sp.call_tx_index as tx_index + , COALESCE(trs_2.token_mint_address, cast(null as varchar)) as token_bought_mint_address + , COALESCE(trs_1.token_mint_address, cast(null as varchar)) as token_sold_mint_address + , trs_2.from_token_account as token_bought_vault + , trs_1.to_token_account as token_sold_vault + FROM ( + SELECT account_poolState, call_is_inner, call_outer_instruction_index, call_inner_instruction_index, call_tx_id, call_block_time, call_block_slot, call_outer_executing_account, call_tx_signer, call_tx_index + FROM {{ source('raydium_cp_solana', 'raydium_cp_swap_call_swapBaseOutput') }} + UNION ALL + SELECT account_poolState, call_is_inner, call_outer_instruction_index, call_inner_instruction_index, call_tx_id, call_block_time, call_block_slot, call_outer_executing_account, call_tx_signer, call_tx_index + FROM {{ source('raydium_cp_solana', 'raydium_cp_swap_call_swapBaseInput') }} + ) sp + INNER JOIN {{ ref('tokens_solana_transfers') }} trs_1 + ON trs_1.tx_id = sp.call_tx_id + AND trs_1.block_time = sp.call_block_time + AND trs_1.outer_instruction_index = sp.call_outer_instruction_index + AND ((sp.call_is_inner = false AND (trs_1.inner_instruction_index = 1 OR trs_1.inner_instruction_index = 2)) + OR (sp.call_is_inner = true AND (trs_1.inner_instruction_index = sp.call_inner_instruction_index + 1 OR trs_1.inner_instruction_index = sp.call_inner_instruction_index + 2)) + ) + AND trs_1.token_version = 'spl_token' + {% if is_incremental() %} + AND {{incremental_predicate('trs_1.block_time')}} + {% else %} + AND trs_1.block_time >= TIMESTAMP '{{project_start_date}}' + {% endif %} + INNER JOIN {{ ref('tokens_solana_transfers') }} trs_2 + ON trs_2.tx_id = sp.call_tx_id + AND trs_2.block_time = sp.call_block_time + AND trs_2.outer_instruction_index = sp.call_outer_instruction_index + AND ((sp.call_is_inner = false AND (trs_2.inner_instruction_index = 2 OR trs_2.inner_instruction_index = 3)) + OR (sp.call_is_inner = true AND (trs_2.inner_instruction_index = sp.call_inner_instruction_index + 2 OR trs_2.inner_instruction_index = sp.call_inner_instruction_index + 3)) + ) + AND trs_2.token_version = 'spl_token' + {% if is_incremental() %} + AND {{incremental_predicate('trs_2.block_time')}} + {% else %} + AND trs_2.block_time >= TIMESTAMP '{{project_start_date}}' + {% endif %} + LEFT JOIN {{ ref('solana_utils_token_accounts') }} tk_2 ON tk_2.address = trs_2.from_token_account + AND tk_2.account_type = 'fungible' + WHERE 1=1 + and trs_1.token_mint_address != trs_2.token_mint_address --gets rid of dupes from the OR statement in transfer joins + and tk_2.token_balance_owner = 'GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL' --raydium pool v4 authority. makes sure we don't accidently catch some fee transfer or something after the swap. should add for lifinity too later. + {% if is_incremental() %} + AND {{incremental_predicate('sp.call_block_time')}} + {% else %} + AND sp.call_block_time >= TIMESTAMP '{{project_start_date}}' + {% endif %} + ) + +SELECT + tb.blockchain + , tb.project + , tb.version + , CAST(date_trunc('month', tb.block_time) AS DATE) as block_month + , tb.block_time + , tb.block_slot + , tb.trade_source + , tb.token_bought_amount_raw + , tb.token_sold_amount_raw + , cast(null as double) as fee_tier + , tb.token_sold_mint_address + , tb.token_bought_mint_address + , tb.token_sold_vault + , tb.token_bought_vault + , tb.pool_id as project_program_id + , 'CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C' as project_main_id + , tb.trader_id + , tb.tx_id + , tb.outer_instruction_index + , tb.inner_instruction_index + , tb.tx_index +FROM all_swaps tb diff --git a/dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_trades.sql b/dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_trades.sql new file mode 100644 index 00000000000..0620bbe8047 --- /dev/null +++ b/dbt_subprojects/solana/models/_sector/dex/raydium/raydium_v5_trades.sql @@ -0,0 +1,13 @@ + {{ + config( + schema = 'raydium_v5', + alias = 'trades', + materialized = 'view', + post_hook='{{ expose_spells(\'["solana"]\', + "project", + "raydium", + \'["0xsharples"]\') }}') +}} + +select * from {{ref('dex_solana_trades')}} +where project = 'raydium' and version = 5 diff --git a/dbt_subprojects/solana/models/_sector/dex/raydium/schema.yml b/dbt_subprojects/solana/models/_sector/dex/raydium/schema.yml index b7f4a788ce3..9608e5251c7 100644 --- a/dbt_subprojects/solana/models/_sector/dex/raydium/schema.yml +++ b/dbt_subprojects/solana/models/_sector/dex/raydium/schema.yml @@ -1,4 +1,4 @@ -version: 2 +version: 3 models: - name: raydium_v3_base_trades @@ -162,3 +162,55 @@ models: - *outer_instruction_index - *inner_instruction_index - *tx_index + + - name: raydium_v5_base_trades + meta: + blockchain: solana + contributors: [ 0xsharples ] + config: + tags: [ 'solana','dex' ] + description: > + all raw raydium_v5 constant product amm dex trades on Solana + data_tests: + - check_columns_solana_dex_trades + - dbt_utils.unique_combination_of_columns: + combination_of_columns: [ 'tx_id', 'outer_instruction_index', 'inner_instruction_index', 'tx_index', 'block_month' ] + + - name: raydium_v5_trades + meta: + blockchain: solana + contributors: [ 0xsharples ] + config: + tags: ['solana','dex'] + description: > + all raydium_v5 constant product amm dex trades on Solana + columns: + - *blockchain + - *project + - *version + - *block_month + - *block_time + - *block_slot + - *trade_source + - *token_bought_symbol + - *token_sold_symbol + - *token_pair + - *token_bought_amount + - *token_sold_amount + - *token_bought_amount_raw + - *token_sold_amount_raw + - *amount_usd + - *fee_tier + - *fee_usd + - *token_bought_mint_address + - *token_sold_mint_address + - *token_bought_vault + - *token_sold_vault + - *project_program_id + - *project_main_id + - *trader_id + - *tx_id + - *outer_instruction_index + - *inner_instruction_index + - *tx_index + diff --git a/dbt_subprojects/solana/models/_sector/dex/raydium/sources.yml b/dbt_subprojects/solana/models/_sector/dex/raydium/sources.yml index 685cd1a056d..8ae62e458fd 100644 --- a/dbt_subprojects/solana/models/_sector/dex/raydium/sources.yml +++ b/dbt_subprojects/solana/models/_sector/dex/raydium/sources.yml @@ -1,4 +1,4 @@ -version: 2 +version: 3 sources: - name: raydium_clmm_solana @@ -26,4 +26,16 @@ sources: - name: raydium_amm_call_swapBaseOut loaded_at_field: call_block_time - name: raydium_amm_call_swapBaseIn - loaded_at_field: call_block_time \ No newline at end of file + loaded_at_field: call_block_time + - name: raydium_cp_solana + description: "raydium_cpmm_solana v5 decoded tables" + freshness: # default freshness + warn_after: { count: 12, period: hour } + error_after: { count: 24, period: hour } + tables: + - name: raydium_cp_swap_call_initialize + loaded_at_field: call_block_time + - name: raydium_cp_swap_call_swapBaseOutput + loaded_at_field: call_block_time + - name: raydium_cp_swap_call_swapBaseInput + loaded_at_field: call_block_time From 7a41da40b9a1a2888e8bd966b796f78d5a1863b9 Mon Sep 17 00:00:00 2001 From: agaperste Date: Wed, 29 Jan 2025 17:23:58 -0500 Subject: [PATCH 2/5] add uni v2, v3, v4 to ink (#7587) * add uni v2, v3, v4 to ink * add seeds to uni v4 ink dex trades * update to evt_index (seed was wrong) --- .../dex/models/trades/dex_base_trades.sql | 1 + .../dex/models/trades/ink/_schema.yml | 66 +++++++++++++++++++ .../models/trades/ink/dex_ink_base_trades.sql | 50 ++++++++++++++ .../platforms/uniswap_v2_ink_base_trades.sql | 21 ++++++ .../platforms/uniswap_v3_ink_base_trades.sql | 21 ++++++ .../platforms/uniswap_v4_ink_base_trades.sql | 21 ++++++ dbt_subprojects/dex/seeds/trades/_schema.yml | 15 +++++ .../trades/uniswap_ink_base_trades_seed.csv | 5 ++ sources/_sector/dex/trades/ink/_sources.yml | 15 +++++ 9 files changed, 215 insertions(+) create mode 100644 dbt_subprojects/dex/models/trades/ink/_schema.yml create mode 100644 dbt_subprojects/dex/models/trades/ink/dex_ink_base_trades.sql create mode 100644 dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v2_ink_base_trades.sql create mode 100644 dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v3_ink_base_trades.sql create mode 100644 dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v4_ink_base_trades.sql create mode 100644 dbt_subprojects/dex/seeds/trades/uniswap_ink_base_trades_seed.csv create mode 100644 sources/_sector/dex/trades/ink/_sources.yml diff --git a/dbt_subprojects/dex/models/trades/dex_base_trades.sql b/dbt_subprojects/dex/models/trades/dex_base_trades.sql index 0f192a95714..15acc9e96d7 100644 --- a/dbt_subprojects/dex/models/trades/dex_base_trades.sql +++ b/dbt_subprojects/dex/models/trades/dex_base_trades.sql @@ -23,6 +23,7 @@ , ref('dex_fantom_base_trades') , ref('dex_flare_base_trades') , ref('dex_gnosis_base_trades') + , ref('dex_ink_base_trades') , ref('dex_linea_base_trades') , ref('dex_kaia_base_trades') , ref('dex_mantle_base_trades') diff --git a/dbt_subprojects/dex/models/trades/ink/_schema.yml b/dbt_subprojects/dex/models/trades/ink/_schema.yml new file mode 100644 index 00000000000..c9ffdba4c5c --- /dev/null +++ b/dbt_subprojects/dex/models/trades/ink/_schema.yml @@ -0,0 +1,66 @@ +version: 2 + +models: + - name: dex_ink_base_trades + data_tests: + - check_dex_info_relationship + - test_acceptable_usd_amount: + column_name: amount_usd + max_value: 1000000000 + + - name: uniswap_v4_ink_base_trades + meta: + blockchain: ink + sector: dex + project: uniswap + contributors: agaperste + config: + tags: [ 'ink', 'dex', 'trades', 'uniswap', 'v4' ] + description: "uniswap ink v4 base trades" + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - tx_hash + - evt_index + - check_dex_base_trades_seed: + seed_file: ref('uniswap_ink_base_trades_seed') + filter: + version: 4 + + - name: uniswap_v3_ink_base_trades + meta: + blockchain: ink + sector: dex + project: uniswap + contributors: hosuke + config: + tags: [ 'ink', 'dex', 'trades', 'uniswap', 'v3' ] + description: "uniswap ink v3 base trades" + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - tx_hash + - evt_index + - check_dex_base_trades_seed: + seed_file: ref('uniswap_ink_base_trades_seed') + filter: + version: 3 + + - name: uniswap_v2_ink_base_trades + meta: + blockchain: ink + sector: dex + project: uniswap + contributors: Henrystats + config: + tags: ["ink", "dex", "trades", "uniswap", "v2"] + description: "uniswap ink v2 base trades" + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - tx_hash + - evt_index + - check_dex_base_trades_seed: + seed_file: ref('uniswap_ink_base_trades_seed') + filter: + version: 2 \ No newline at end of file diff --git a/dbt_subprojects/dex/models/trades/ink/dex_ink_base_trades.sql b/dbt_subprojects/dex/models/trades/ink/dex_ink_base_trades.sql new file mode 100644 index 00000000000..35a1cc132c5 --- /dev/null +++ b/dbt_subprojects/dex/models/trades/ink/dex_ink_base_trades.sql @@ -0,0 +1,50 @@ +{{ config( + schema = 'dex_ink' + , alias = 'base_trades' + , materialized = 'view' + ) +}} + +{% set base_models = [ + ref('uniswap_v2_ink_base_trades') + , ref('uniswap_v3_ink_base_trades') + , ref('uniswap_v4_ink_base_trades') +] %} + +WITH base_union AS ( + SELECT * + FROM ( + {% for base_model in base_models %} + SELECT + blockchain + , project + , version + , block_month + , block_date + , block_time + , block_number + , token_bought_amount_raw + , token_sold_amount_raw + , token_bought_address + , token_sold_address + , taker + , maker + , project_contract_address + , tx_hash + , evt_index + FROM + {{ base_model }} + {% if not loop.last %} + UNION ALL + {% endif %} + {% endfor %} + ) +) + +{{ + add_tx_columns( + model_cte = 'base_union' + , blockchain = 'ink' + , columns = ['from', 'to', 'index'] + ) +}} diff --git a/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v2_ink_base_trades.sql b/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v2_ink_base_trades.sql new file mode 100644 index 00000000000..79b02c42a75 --- /dev/null +++ b/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v2_ink_base_trades.sql @@ -0,0 +1,21 @@ +{{ + config( + schema = 'uniswap_v2_ink', + 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')] + ) +}} + +{{ + uniswap_compatible_v2_trades( + blockchain = 'ink', + project = 'uniswap', + version = '2', + Pair_evt_Swap = source('uniswap_v2_ink', 'UniswapV2Pair_evt_Swap'), + Factory_evt_PairCreated = source('uniswap_v2_ink', 'UniswapV2Factory_evt_PairCreated') + ) +}} \ No newline at end of file diff --git a/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v3_ink_base_trades.sql b/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v3_ink_base_trades.sql new file mode 100644 index 00000000000..af5698f13ca --- /dev/null +++ b/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v3_ink_base_trades.sql @@ -0,0 +1,21 @@ +{{ config( + schema = 'uniswap_v3_ink' + , 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')] + ) +}} + +{{ + uniswap_compatible_v3_trades( + blockchain = 'ink' + , project = 'uniswap' + , version = '3' + , Pair_evt_Swap = source('uniswap_v3_ink', 'UniswapV3Pool_evt_Swap') + , Factory_evt_PoolCreated = source('uniswap_v3_ink', 'UniswapV3Factory_evt_PoolCreated') + ) +}} + diff --git a/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v4_ink_base_trades.sql b/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v4_ink_base_trades.sql new file mode 100644 index 00000000000..2729559ff02 --- /dev/null +++ b/dbt_subprojects/dex/models/trades/ink/platforms/uniswap_v4_ink_base_trades.sql @@ -0,0 +1,21 @@ +{{ config( + schema = 'uniswap_v4_ink' + , 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')] + ) +}} + +{{ + uniswap_compatible_v4_trades( + blockchain = 'ink' + , project = 'uniswap' + , version = '4' + , PoolManager_evt_Swap = source('uniswap_v4_ink', 'PoolManager_evt_Swap') + , PoolManager_evt_Initialize = source('uniswap_v4_ink', 'PoolManager_evt_Initialize') + , taker_column_name = 'evt_tx_from' + ) +}} \ 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 83450755817..26060654406 100644 --- a/dbt_subprojects/dex/seeds/trades/_schema.yml +++ b/dbt_subprojects/dex/seeds/trades/_schema.yml @@ -2055,6 +2055,21 @@ seeds: token_sold_amount_raw: uint256 block_date: timestamp + - name: uniswap_ink_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: uniswap_optimism_base_trades_seed config: column_types: diff --git a/dbt_subprojects/dex/seeds/trades/uniswap_ink_base_trades_seed.csv b/dbt_subprojects/dex/seeds/trades/uniswap_ink_base_trades_seed.csv new file mode 100644 index 00000000000..edf79c1aff6 --- /dev/null +++ b/dbt_subprojects/dex/seeds/trades/uniswap_ink_base_trades_seed.csv @@ -0,0 +1,5 @@ +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 +ink,uniswap,3,2025-01-29,0x43b1aca915c82c6ed1ccef7eeccfe0653c5661a3a42b07f905a66cc808a998b2,11,0xf1815bd50389c46847f0bda824ec8da914045d14,0x4200000000000000000000000000000000000006,4661269,2798702,900000000000000 +ink,uniswap,3,2025-01-29,0x9fa0e9bd8f3080b0c23e546c1e432159d21c7f9e373dc4e019c986d8e10ca13a,4,0xf1815bd50389c46847f0bda824ec8da914045d14,0x4200000000000000000000000000000000000006,4668859,308979,100000000000000 +ink,uniswap,2,2025-01-29,0xad6ff67b6b3bfde5c5f960e87258dead339888551e06270b327c3ca04dbf050b,8,0x4200000000000000000000000000000000000006,0x11476323d8dfcbafac942588e2f38823d2dd308e,4663507,51408327835755,65110653663860 +ink,uniswap,2,2025-01-29,0x2668ee57490b06f8ab29d2e9a7a474d8ad359634c541b18424441c70c138c751,18,0x11476323d8dfcbafac942588e2f38823d2dd308e,0x4200000000000000000000000000000000000006,4677067,144612215120721,139216911618398 diff --git a/sources/_sector/dex/trades/ink/_sources.yml b/sources/_sector/dex/trades/ink/_sources.yml new file mode 100644 index 00000000000..166230a8412 --- /dev/null +++ b/sources/_sector/dex/trades/ink/_sources.yml @@ -0,0 +1,15 @@ +version: 2 + +sources: + - name: uniswap_v4_ink + tables: + - name: PoolManager_evt_Swap + - name: PoolManager_evt_Initialize + - name: uniswap_v3_ink + tables: + - name: UniswapV3Pool_evt_Swap + - name: UniswapV3Factory_evt_PoolCreated + - name: uniswap_v2_ink + tables: + - name: UniswapV2Pair_evt_Swap + - name: UniswapV2Factory_evt_PairCreated \ No newline at end of file From 32e6e569ea9d00116ee5f5e50307a5d6ccd36aa8 Mon Sep 17 00:00:00 2001 From: viniabussafi <131974393+viniabussafi@users.noreply.github.com> Date: Wed, 29 Jan 2025 22:24:08 +0000 Subject: [PATCH 3/5] init dex spells for balancer v3 on arbitrum and base (#7589) * init dex spells for balancer v3 on arbitrum and base * fix copypasta and update sources --- .../_projects/balancer/pools/_schema.yml | 54 +++++- .../balancer_v3_arbitrum_pools_fees.sql | 28 +++ .../balancer/pools/balancer_pools_fees.sql | 4 +- .../base/balancer_v3_base_pools_fees.sql | 28 +++ .../balancer/trades/arbitrum/_schema.yml | 41 ++++- .../arbitrum/balancer_arbitrum_trades.sql | 3 +- .../arbitrum/balancer_v3_arbitrum_trades.sql | 171 ++++++++++++++++++ .../balancer/trades/base/_schema.yml | 41 ++++- .../trades/base/balancer_base_trades.sql | 3 +- .../trades/base/balancer_v3_base_trades.sql | 171 ++++++++++++++++++ .../dex/models/trades/arbitrum/_schema.yml | 19 ++ .../arbitrum/dex_arbitrum_base_trades.sql | 1 + .../balancer_v3_arbitrum_base_trades.sql | 19 ++ .../dex/models/trades/base/_schema.yml | 21 ++- .../trades/base/dex_base_base_trades.sql | 1 + .../balancer_v3_base_base_trades.sql | 19 ++ .../balancer_arbitrum_base_trades_seed.csv | 1 + .../trades/balancer_base_base_trades_seed.csv | 1 + sources/_subprojects_outputs/dex/_sources.yml | 6 + 19 files changed, 625 insertions(+), 7 deletions(-) create mode 100644 dbt_subprojects/dex/models/_projects/balancer/pools/arbitrum/balancer_v3_arbitrum_pools_fees.sql create mode 100644 dbt_subprojects/dex/models/_projects/balancer/pools/base/balancer_v3_base_pools_fees.sql create mode 100644 dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_v3_arbitrum_trades.sql create mode 100644 dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_v3_base_trades.sql create mode 100644 dbt_subprojects/dex/models/trades/arbitrum/platforms/balancer_v3_arbitrum_base_trades.sql create mode 100644 dbt_subprojects/dex/models/trades/base/platforms/balancer_v3_base_base_trades.sql diff --git a/dbt_subprojects/dex/models/_projects/balancer/pools/_schema.yml b/dbt_subprojects/dex/models/_projects/balancer/pools/_schema.yml index c62279b3d91..320eca08a2a 100644 --- a/dbt_subprojects/dex/models/_projects/balancer/pools/_schema.yml +++ b/dbt_subprojects/dex/models/_projects/balancer/pools/_schema.yml @@ -317,4 +317,56 @@ models: - *tx_index - *block_time - *block_number - - *swap_fee_percentage \ No newline at end of file + - *swap_fee_percentage + + - name: balancer_v3_arbitrum_pools_fees + meta: + blockchain: arbitrum + project: balancer_v3 + contributors: viniabussafi + config: + tags: ['arbitrum', 'balancer', 'pools_fees'] + description: > + Balancer v3 swap fees stored at the pool level. + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_number + - tx_hash + - index + columns: + - *blockchain + - *version + - *contract_address + - *tx_hash + - *index + - *tx_index + - *block_time + - *block_number + - *swap_fee_percentage + + - name: balancer_v3_base_pools_fees + meta: + blockchain: base + project: balancer_v3 + contributors: viniabussafi + config: + tags: ['base', 'balancer', 'pools_fees'] + description: > + Balancer v3 swap fees stored at the pool level. + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_number + - tx_hash + - index + columns: + - *blockchain + - *version + - *contract_address + - *tx_hash + - *index + - *tx_index + - *block_time + - *block_number + - *swap_fee_percentage \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/balancer/pools/arbitrum/balancer_v3_arbitrum_pools_fees.sql b/dbt_subprojects/dex/models/_projects/balancer/pools/arbitrum/balancer_v3_arbitrum_pools_fees.sql new file mode 100644 index 00000000000..ddef3e7581c --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/balancer/pools/arbitrum/balancer_v3_arbitrum_pools_fees.sql @@ -0,0 +1,28 @@ +{{ + config( + schema = 'balancer_v3_arbitrum', + alias = 'pools_fees', + materialized = 'incremental', + file_format = 'delta', + incremental_strategy = 'merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')], + unique_key = ['block_number', 'tx_hash', 'index'] + ) +}} + +SELECT + 'arbitrum' AS blockchain, + '3' AS version, + pool AS contract_address, + evt_tx_hash AS tx_hash, + evt_index AS tx_index, + evt_index AS index, + evt_block_time AS block_time, + evt_block_number AS block_number, + swapFeePercentage AS swap_fee_percentage +FROM {{ source ('balancer_v3_arbitrum', 'Vault_evt_SwapFeePercentageChanged') }} +WHERE 1 = 1 +{% if is_incremental() %} +AND {{ incremental_predicate('evt_block_time') }} +{% endif %} + diff --git a/dbt_subprojects/dex/models/_projects/balancer/pools/balancer_pools_fees.sql b/dbt_subprojects/dex/models/_projects/balancer/pools/balancer_pools_fees.sql index a733d20db6a..9ee5adcad18 100644 --- a/dbt_subprojects/dex/models/_projects/balancer/pools/balancer_pools_fees.sql +++ b/dbt_subprojects/dex/models/_projects/balancer/pools/balancer_pools_fees.sql @@ -18,7 +18,9 @@ ref('balancer_v2_polygon_pools_fees'), ref('balancer_v2_zkevm_pools_fees'), ref('balancer_v3_ethereum_pools_fees'), - ref('balancer_v3_gnosis_pools_fees') + ref('balancer_v3_gnosis_pools_fees'), + ref('balancer_v3_arbitrum_pools_fees'), + ref('balancer_v3_base_pools_fees') ] %} diff --git a/dbt_subprojects/dex/models/_projects/balancer/pools/base/balancer_v3_base_pools_fees.sql b/dbt_subprojects/dex/models/_projects/balancer/pools/base/balancer_v3_base_pools_fees.sql new file mode 100644 index 00000000000..2c98f49cbf3 --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/balancer/pools/base/balancer_v3_base_pools_fees.sql @@ -0,0 +1,28 @@ +{{ + config( + schema = 'balancer_v3_base', + alias = 'pools_fees', + materialized = 'incremental', + file_format = 'delta', + incremental_strategy = 'merge', + incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')], + unique_key = ['block_number', 'tx_hash', 'index'] + ) +}} + +SELECT + 'base' AS blockchain, + '3' AS version, + pool AS contract_address, + evt_tx_hash AS tx_hash, + evt_index AS tx_index, + evt_index AS index, + evt_block_time AS block_time, + evt_block_number AS block_number, + swapFeePercentage AS swap_fee_percentage +FROM {{ source ('balancer_v3_base', 'Vault_evt_SwapFeePercentageChanged') }} +WHERE 1 = 1 +{% if is_incremental() %} +AND {{ incremental_predicate('evt_block_time') }} +{% endif %} + diff --git a/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/_schema.yml b/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/_schema.yml index b5fbb624d54..34863c00bf5 100644 --- a/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/_schema.yml +++ b/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/_schema.yml @@ -142,4 +142,43 @@ models: - *tx_hash - *tx_from - *tx_to - - *evt_index \ No newline at end of file + - *evt_index + + - name: balancer_v3_arbitrum_trades + meta: + blockchain: arbitrum + sector: dex + contributors: viniabussafi + config: + tags: [ 'balancer', 'arbitrum', 'amm', 'trades', 'dex'] + description: > + DEX trades on balancer v3 on Arbitrum + columns: + - *blockchain + - *project + - *version + - *block_month + - *block_date + - *block_time + - *block_number + - *token_bought_symbol + - *token_sold_symbol + - *token_pair + - *token_bought_amount + - *token_sold_amount + - *token_bought_amount_raw + - *token_sold_amount_raw + - *amount_usd + - *token_bought_address + - *token_sold_address + - *taker + - *maker + - *project_contract_address + - *pool_symbol + - *pool_type + - *pool_id + - *swap_fee + - *tx_hash + - *tx_from + - *tx_to + - *evt_index \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_arbitrum_trades.sql b/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_arbitrum_trades.sql index 9bf2f6dad1b..54db1114558 100644 --- a/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_arbitrum_trades.sql +++ b/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_arbitrum_trades.sql @@ -6,7 +6,8 @@ {% set balancer_models = [ - ref('balancer_v2_arbitrum_trades') + ref('balancer_v2_arbitrum_trades'), + ref('balancer_v3_arbitrum_trades') ] %} SELECT * diff --git a/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_v3_arbitrum_trades.sql b/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_v3_arbitrum_trades.sql new file mode 100644 index 00000000000..cec60fa297e --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/balancer/trades/arbitrum/balancer_v3_arbitrum_trades.sql @@ -0,0 +1,171 @@ +{{ + config( + schema = 'balancer_v3_arbitrum', + alias = 'trades', + materialized = 'view', + post_hook = '{{ expose_spells(\'["arbitrum"]\', + spell_type = "project", + spell_name = "balancer", + contributors = \'["viniabussafi"]\') }}' + ) +}} + +WITH + dexs_arbitrum AS ( + SELECT + tx_hash, + evt_index, + pool_id, + swap_fee, + pool_symbol, + pool_type + FROM {{ ref('balancer_v3_arbitrum_base_trades') }} + ), + + dexs AS ( + SELECT + dexs.blockchain, + dexs.project, + dexs.version, + dexs.block_month, + dexs.block_date, + dexs.block_time, + dexs.block_number, + dexs.token_bought_symbol, + dexs.token_sold_symbol, + dexs.token_pair, + dexs.token_bought_amount, + dexs.token_sold_amount, + dexs.token_bought_amount_raw, + dexs.token_sold_amount_raw, + dexs.amount_usd, + dexs.token_bought_address, + dexs.token_sold_address, + dexs.taker, + dexs.maker, + dexs.project_contract_address, + dexs.tx_hash, + dexs.tx_from, + dexs.tx_to, + dexs.evt_index, + dexs_arbitrum.pool_id, + dexs_arbitrum.swap_fee, + dexs_arbitrum.pool_symbol, + dexs_arbitrum.pool_type + FROM {{ ref('dex_trades') }} dexs + INNER JOIN dexs_arbitrum + ON dexs.tx_hash = dexs_arbitrum.tx_hash + AND dexs.evt_index = dexs_arbitrum.evt_index + WHERE dexs.blockchain = 'arbitrum' + AND dexs.project = 'balancer' + AND dexs.version = '3' + ), + + bpa AS ( + SELECT + dexs.block_number, + dexs.tx_hash, + dexs.evt_index, + bpt_prices.contract_address, + dexs.block_time, + MAX(bpt_prices.day) AS bpa_max_block_date + FROM dexs + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpt_prices + ON bpt_prices.contract_address = dexs.token_bought_address + AND bpt_prices.day <= DATE_TRUNC('day', dexs.block_time) + AND bpt_prices.blockchain = 'arbitrum' + GROUP BY 1, 2, 3, 4, 5 + ), + + bpb AS ( + SELECT + dexs.block_number, + dexs.tx_hash, + dexs.evt_index, + bpt_prices.contract_address, + dexs.block_time, + MAX(bpt_prices.day) AS bpb_max_block_date + FROM dexs + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpt_prices + ON bpt_prices.contract_address = dexs.token_sold_address + AND bpt_prices.day <= DATE_TRUNC('day', dexs.block_time) + AND bpt_prices.blockchain = 'arbitrum' + GROUP BY 1, 2, 3, 4, 5 + ), + + erc4626_prices AS( + SELECT + minute, + wrapped_token, + decimals, + APPROX_PERCENTILE(median_price, 0.5) AS price, + LEAD(minute, 1, NOW()) OVER (PARTITION BY wrapped_token ORDER BY minute) AS time_of_next_change + FROM {{ source('balancer_v3', 'erc4626_token_prices') }} + WHERE blockchain = 'arbitrum' + GROUP BY 1, 2, 3 + ) + +SELECT + dexs.blockchain, + dexs.project, + dexs.version, + dexs.block_date, + dexs.block_number, + dexs.block_month, + dexs.block_time, + dexs.token_bought_symbol, + dexs.token_sold_symbol, + dexs.token_pair, + dexs.token_bought_amount, + dexs.token_sold_amount, + dexs.token_bought_amount_raw, + dexs.token_sold_amount_raw, + COALESCE( + dexs.amount_usd, + dexs.token_bought_amount_raw / POWER(10, COALESCE(erc20a.decimals, erc4626a.decimals, 18)) * COALESCE(bpa_bpt_prices.bpt_price, erc4626a.price), + dexs.token_sold_amount_raw / POWER(10, COALESCE(erc20b.decimals, erc4626b.decimals, 18)) * COALESCE(bpb_bpt_prices.bpt_price, erc4626b.price) + ) AS amount_usd, + dexs.token_bought_address, + dexs.token_sold_address, + dexs.taker, + dexs.maker, + dexs.project_contract_address, + dexs.pool_id, + dexs.swap_fee, + dexs.pool_symbol, + dexs.pool_type, + dexs.tx_hash, + dexs.tx_from, + dexs.tx_to, + dexs.evt_index +FROM dexs + LEFT JOIN {{ source('tokens', 'erc20') }} erc20a + ON erc20a.contract_address = dexs.token_bought_address + AND erc20a.blockchain = dexs.blockchain + LEFT JOIN {{ source('tokens', 'erc20') }} erc20b + ON erc20b.contract_address = dexs.token_sold_address + AND erc20b.blockchain = dexs.blockchain + INNER JOIN bpa + ON bpa.block_number = dexs.block_number + AND bpa.tx_hash = dexs.tx_hash + AND bpa.evt_index = dexs.evt_index + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpa_bpt_prices + ON bpa_bpt_prices.contract_address = bpa.contract_address + AND bpa_bpt_prices.day = bpa.bpa_max_block_date + AND bpa_bpt_prices.blockchain = 'arbitrum' + INNER JOIN bpb + ON bpb.block_number = dexs.block_number + AND bpb.tx_hash = dexs.tx_hash + AND bpb.evt_index = dexs.evt_index + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpb_bpt_prices + ON bpb_bpt_prices.contract_address = bpb.contract_address + AND bpb_bpt_prices.day = bpb.bpb_max_block_date + AND bpb_bpt_prices.blockchain = 'arbitrum' + LEFT JOIN erc4626_prices erc4626a + ON erc4626a.wrapped_token = dexs.token_bought_address + AND erc4626a.minute <= dexs.block_time + AND dexs.block_time < erc4626a.time_of_next_change + LEFT JOIN erc4626_prices erc4626b + ON erc4626b.wrapped_token = dexs.token_sold_address + AND erc4626b.minute <= dexs.block_time + AND dexs.block_time < erc4626b.time_of_next_change \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/balancer/trades/base/_schema.yml b/dbt_subprojects/dex/models/_projects/balancer/trades/base/_schema.yml index 3884166c920..67d4d987d76 100644 --- a/dbt_subprojects/dex/models/_projects/balancer/trades/base/_schema.yml +++ b/dbt_subprojects/dex/models/_projects/balancer/trades/base/_schema.yml @@ -142,4 +142,43 @@ models: - *tx_hash - *tx_from - *tx_to - - *evt_index \ No newline at end of file + - *evt_index + + - name: balancer_v3_base_trades + meta: + blockchain: base + sector: dex + contributors: viniabussafi + config: + tags: [ 'balancer', 'base', 'amm', 'trades', 'dex'] + description: > + DEX trades on balancer v3 on Base + columns: + - *blockchain + - *project + - *version + - *block_month + - *block_date + - *block_time + - *block_number + - *token_bought_symbol + - *token_sold_symbol + - *token_pair + - *token_bought_amount + - *token_sold_amount + - *token_bought_amount_raw + - *token_sold_amount_raw + - *amount_usd + - *token_bought_address + - *token_sold_address + - *taker + - *maker + - *project_contract_address + - *pool_symbol + - *pool_type + - *pool_id + - *swap_fee + - *tx_hash + - *tx_from + - *tx_to + - *evt_index \ No newline at end of file diff --git a/dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_base_trades.sql b/dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_base_trades.sql index 40308441e7b..a83c32ae38f 100644 --- a/dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_base_trades.sql +++ b/dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_base_trades.sql @@ -6,7 +6,8 @@ {% set balancer_models = [ - ref('balancer_v2_base_trades') + ref('balancer_v2_base_trades'), + ref('balancer_v3_base_trades') ] %} SELECT * diff --git a/dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_v3_base_trades.sql b/dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_v3_base_trades.sql new file mode 100644 index 00000000000..6cbc2d1e367 --- /dev/null +++ b/dbt_subprojects/dex/models/_projects/balancer/trades/base/balancer_v3_base_trades.sql @@ -0,0 +1,171 @@ +{{ + config( + schema = 'balancer_v3_base', + alias = 'trades', + materialized = 'view', + post_hook = '{{ expose_spells(\'["base"]\', + spell_type = "project", + spell_name = "balancer", + contributors = \'["viniabussafi"]\') }}' + ) +}} + +WITH + dexs_base AS ( + SELECT + tx_hash, + evt_index, + pool_id, + swap_fee, + pool_symbol, + pool_type + FROM {{ ref('balancer_v3_base_base_trades') }} + ), + + dexs AS ( + SELECT + dexs.blockchain, + dexs.project, + dexs.version, + dexs.block_month, + dexs.block_date, + dexs.block_time, + dexs.block_number, + dexs.token_bought_symbol, + dexs.token_sold_symbol, + dexs.token_pair, + dexs.token_bought_amount, + dexs.token_sold_amount, + dexs.token_bought_amount_raw, + dexs.token_sold_amount_raw, + dexs.amount_usd, + dexs.token_bought_address, + dexs.token_sold_address, + dexs.taker, + dexs.maker, + dexs.project_contract_address, + dexs.tx_hash, + dexs.tx_from, + dexs.tx_to, + dexs.evt_index, + dexs_base.pool_id, + dexs_base.swap_fee, + dexs_base.pool_symbol, + dexs_base.pool_type + FROM {{ ref('dex_trades') }} dexs + INNER JOIN dexs_base + ON dexs.tx_hash = dexs_base.tx_hash + AND dexs.evt_index = dexs_base.evt_index + WHERE dexs.blockchain = 'base' + AND dexs.project = 'balancer' + AND dexs.version = '3' + ), + + bpa AS ( + SELECT + dexs.block_number, + dexs.tx_hash, + dexs.evt_index, + bpt_prices.contract_address, + dexs.block_time, + MAX(bpt_prices.day) AS bpa_max_block_date + FROM dexs + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpt_prices + ON bpt_prices.contract_address = dexs.token_bought_address + AND bpt_prices.day <= DATE_TRUNC('day', dexs.block_time) + AND bpt_prices.blockchain = 'base' + GROUP BY 1, 2, 3, 4, 5 + ), + + bpb AS ( + SELECT + dexs.block_number, + dexs.tx_hash, + dexs.evt_index, + bpt_prices.contract_address, + dexs.block_time, + MAX(bpt_prices.day) AS bpb_max_block_date + FROM dexs + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpt_prices + ON bpt_prices.contract_address = dexs.token_sold_address + AND bpt_prices.day <= DATE_TRUNC('day', dexs.block_time) + AND bpt_prices.blockchain = 'base' + GROUP BY 1, 2, 3, 4, 5 + ), + + erc4626_prices AS( + SELECT + minute, + wrapped_token, + decimals, + APPROX_PERCENTILE(median_price, 0.5) AS price, + LEAD(minute, 1, NOW()) OVER (PARTITION BY wrapped_token ORDER BY minute) AS time_of_next_change + FROM {{ source('balancer_v3', 'erc4626_token_prices') }} + WHERE blockchain = 'base' + GROUP BY 1, 2, 3 + ) + +SELECT + dexs.blockchain, + dexs.project, + dexs.version, + dexs.block_date, + dexs.block_number, + dexs.block_month, + dexs.block_time, + dexs.token_bought_symbol, + dexs.token_sold_symbol, + dexs.token_pair, + dexs.token_bought_amount, + dexs.token_sold_amount, + dexs.token_bought_amount_raw, + dexs.token_sold_amount_raw, + COALESCE( + dexs.amount_usd, + dexs.token_bought_amount_raw / POWER(10, COALESCE(erc20a.decimals, erc4626a.decimals, 18)) * COALESCE(bpa_bpt_prices.bpt_price, erc4626a.price), + dexs.token_sold_amount_raw / POWER(10, COALESCE(erc20b.decimals, erc4626b.decimals, 18)) * COALESCE(bpb_bpt_prices.bpt_price, erc4626b.price) + ) AS amount_usd, + dexs.token_bought_address, + dexs.token_sold_address, + dexs.taker, + dexs.maker, + dexs.project_contract_address, + dexs.pool_id, + dexs.swap_fee, + dexs.pool_symbol, + dexs.pool_type, + dexs.tx_hash, + dexs.tx_from, + dexs.tx_to, + dexs.evt_index +FROM dexs + LEFT JOIN {{ source('tokens', 'erc20') }} erc20a + ON erc20a.contract_address = dexs.token_bought_address + AND erc20a.blockchain = dexs.blockchain + LEFT JOIN {{ source('tokens', 'erc20') }} erc20b + ON erc20b.contract_address = dexs.token_sold_address + AND erc20b.blockchain = dexs.blockchain + INNER JOIN bpa + ON bpa.block_number = dexs.block_number + AND bpa.tx_hash = dexs.tx_hash + AND bpa.evt_index = dexs.evt_index + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpa_bpt_prices + ON bpa_bpt_prices.contract_address = bpa.contract_address + AND bpa_bpt_prices.day = bpa.bpa_max_block_date + AND bpa_bpt_prices.blockchain = 'base' + INNER JOIN bpb + ON bpb.block_number = dexs.block_number + AND bpb.tx_hash = dexs.tx_hash + AND bpb.evt_index = dexs.evt_index + LEFT JOIN {{ source('balancer', 'bpt_prices') }} bpb_bpt_prices + ON bpb_bpt_prices.contract_address = bpb.contract_address + AND bpb_bpt_prices.day = bpb.bpb_max_block_date + AND bpb_bpt_prices.blockchain = 'base' + LEFT JOIN erc4626_prices erc4626a + ON erc4626a.wrapped_token = dexs.token_bought_address + AND erc4626a.minute <= dexs.block_time + AND dexs.block_time < erc4626a.time_of_next_change + LEFT JOIN erc4626_prices erc4626b + ON erc4626b.wrapped_token = dexs.token_sold_address + AND erc4626b.minute <= dexs.block_time + AND dexs.block_time < erc4626b.time_of_next_change \ No newline at end of file diff --git a/dbt_subprojects/dex/models/trades/arbitrum/_schema.yml b/dbt_subprojects/dex/models/trades/arbitrum/_schema.yml index 9c8cc65063b..8ed126d60d1 100644 --- a/dbt_subprojects/dex/models/trades/arbitrum/_schema.yml +++ b/dbt_subprojects/dex/models/trades/arbitrum/_schema.yml @@ -812,3 +812,22 @@ models: - evt_index - check_dex_base_trades_seed: seed_file: ref('spartadex_arbitrum_base_trades_seed') + + - name: balancer_v3_arbitrum_base_trades + meta: + blockchain: arbitrum + sector: dex + project: balancer + contributors: viniabussafi + config: + tags: ["arbitrum", "dex", "trades", "balancer"] + description: "Balancer v3 arbitrum base trades" + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - tx_hash + - evt_index + - check_dex_base_trades_seed: + seed_file: ref('balancer_arbitrum_base_trades_seed') + filter: + version: 3 \ No newline at end of file diff --git a/dbt_subprojects/dex/models/trades/arbitrum/dex_arbitrum_base_trades.sql b/dbt_subprojects/dex/models/trades/arbitrum/dex_arbitrum_base_trades.sql index 6e09d2f1f74..2637b0015dc 100644 --- a/dbt_subprojects/dex/models/trades/arbitrum/dex_arbitrum_base_trades.sql +++ b/dbt_subprojects/dex/models/trades/arbitrum/dex_arbitrum_base_trades.sql @@ -20,6 +20,7 @@ , ref('pancakeswap_v2_arbitrum_base_trades') , ref('pancakeswap_v3_arbitrum_base_trades') , ref('balancer_v2_arbitrum_base_trades') + , ref('balancer_v3_arbitrum_base_trades') , ref('dodo_arbitrum_base_trades') , ref('gmx_arbitrum_base_trades') , ref('integral_arbitrum_base_trades') diff --git a/dbt_subprojects/dex/models/trades/arbitrum/platforms/balancer_v3_arbitrum_base_trades.sql b/dbt_subprojects/dex/models/trades/arbitrum/platforms/balancer_v3_arbitrum_base_trades.sql new file mode 100644 index 00000000000..242eca53ee6 --- /dev/null +++ b/dbt_subprojects/dex/models/trades/arbitrum/platforms/balancer_v3_arbitrum_base_trades.sql @@ -0,0 +1,19 @@ +{{ + config( + schema = 'balancer_v3_arbitrum', + 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')] + ) +}} + +{{ + balancer_compatible_v3_trades( + blockchain = 'arbitrum', + project = 'balancer', + version = '3' + ) +}} diff --git a/dbt_subprojects/dex/models/trades/base/_schema.yml b/dbt_subprojects/dex/models/trades/base/_schema.yml index d79caf871dd..6872dc82aee 100644 --- a/dbt_subprojects/dex/models/trades/base/_schema.yml +++ b/dbt_subprojects/dex/models/trades/base/_schema.yml @@ -1096,4 +1096,23 @@ models: - tx_hash - evt_index - check_dex_base_trades_seed: - seed_file: ref('jojo_base_base_trades_seed') \ No newline at end of file + seed_file: ref('jojo_base_base_trades_seed') + + - name: balancer_v3_base_base_trades + meta: + blockchain: base + sector: dex + project: balancer + contributors: viniabussafi + config: + tags: ["base", "dex", "trades", "balancer"] + description: "Balancer v3 base base trades" + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - tx_hash + - evt_index + - check_dex_base_trades_seed: + seed_file: ref('balancer_base_base_trades_seed') + filter: + version: 3 \ No newline at end of file diff --git a/dbt_subprojects/dex/models/trades/base/dex_base_base_trades.sql b/dbt_subprojects/dex/models/trades/base/dex_base_base_trades.sql index 0a96e10f358..88a4fec58fd 100644 --- a/dbt_subprojects/dex/models/trades/base/dex_base_base_trades.sql +++ b/dbt_subprojects/dex/models/trades/base/dex_base_base_trades.sql @@ -15,6 +15,7 @@ , ref('pancakeswap_v2_base_base_trades') , ref('pancakeswap_v3_base_base_trades') , ref('balancer_v2_base_base_trades') + , ref('balancer_v3_base_base_trades') , ref('dodo_base_base_trades') , ref('maverick_base_base_trades') , ref('maverick_v2_base_base_trades') diff --git a/dbt_subprojects/dex/models/trades/base/platforms/balancer_v3_base_base_trades.sql b/dbt_subprojects/dex/models/trades/base/platforms/balancer_v3_base_base_trades.sql new file mode 100644 index 00000000000..caa3349113f --- /dev/null +++ b/dbt_subprojects/dex/models/trades/base/platforms/balancer_v3_base_base_trades.sql @@ -0,0 +1,19 @@ +{{ + config( + schema = 'balancer_v3_base', + 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')] + ) +}} + +{{ + balancer_compatible_v3_trades( + blockchain = 'base', + project = 'balancer', + version = '3' + ) +}} diff --git a/dbt_subprojects/dex/seeds/trades/balancer_arbitrum_base_trades_seed.csv b/dbt_subprojects/dex/seeds/trades/balancer_arbitrum_base_trades_seed.csv index c5d75ff9891..18da43f81dc 100644 --- a/dbt_subprojects/dex/seeds/trades/balancer_arbitrum_base_trades_seed.csv +++ b/dbt_subprojects/dex/seeds/trades/balancer_arbitrum_base_trades_seed.csv @@ -1,2 +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 arbitrum,balancer,2,2022-10-25,0x8cc9955e4368d88ef78a0c6dc8505da3e7272446e70947126286780daa454f84,3,0xff970a61a04b1ca14834a43f5de4533ebddb5cc8,0x6694340fc020c5e6b96567843da2df01b2ce1eb6,32377068,430199060,900000000000000000000 +arbitrum,balancer,3,2025-01-29,0xe40aef9a8788c66b343b4e94169b3d23019673497a3e214a6860473e80ce6895,25,0x4ce13a79f45c1be00bdabd38b764ac28c082704e,0xe98fc055c99decd8da0c111b090885d5d15c774e,300442255,4026111462062864,3508812705325106 \ No newline at end of file diff --git a/dbt_subprojects/dex/seeds/trades/balancer_base_base_trades_seed.csv b/dbt_subprojects/dex/seeds/trades/balancer_base_base_trades_seed.csv index e36bbaf8644..81748ccd641 100644 --- a/dbt_subprojects/dex/seeds/trades/balancer_base_base_trades_seed.csv +++ b/dbt_subprojects/dex/seeds/trades/balancer_base_base_trades_seed.csv @@ -2,3 +2,4 @@ blockchain,project,version,block_date,tx_hash,evt_index,token_bought_address,tok base,balancer,2,2023-12-10,0x97dd1e3f2b0691e0d6f6b51223f1259a0c4f443e71b56d4b0530dbe43d5f253a,24,0x2ae3f1ec7f1f5012cfeab0185bfc7aa3cf0dec22,0x4200000000000000000000000000000000000006,7707517,2845748796132167,3000000000000000 base,balancer,2,2023-12-10,0xaa8d804bebd1a15ac6ab190f5a3d9f23582b5e254125edb500de8675fef262ed,7,0xb6fe221fe9eef5aba221c348ba20a1bf5e73624c,0x4200000000000000000000000000000000000006,7707379,911615613459236,1000000000000000 base,balancer,2,2023-12-10,0x0c9e52e42c2d94b17d82b585ac6d16e6d052eb1bd30548a3ebd3d92fea438eda,19,0xd9aaec86b65d86f6a7b5b1b0c42ffa531710b6ca,0x833589fcd6edb6e08f4c7c32d4f71b54bda02913,7707267,1037690,1038034 +base,balancer,3,2025-01-29,0xcb0a8831464fda01fe00399b57f5052f2e25bfad9ae772011005796f5ada6a64,266,0xe298b938631f750dd409fb18227c4a23dcdaab9b,0x0830820d1a9aa1554364752d6d8f55c836871b74,25664231,5276019803099591,4515305613813708 \ No newline at end of file diff --git a/sources/_subprojects_outputs/dex/_sources.yml b/sources/_subprojects_outputs/dex/_sources.yml index bb73d57800e..f10cc38ce13 100644 --- a/sources/_subprojects_outputs/dex/_sources.yml +++ b/sources/_subprojects_outputs/dex/_sources.yml @@ -46,6 +46,12 @@ sources: - name: balancer_v3_gnosis tables: - name: trades + - name: balancer_v3_arbitrum + tables: + - name: trades + - name: balancer_v3_base + tables: + - name: trades - name: balancer tables: - name: trades From b5008b62f2b8a9ecb6ccae75713f9e69d719642b Mon Sep 17 00:00:00 2001 From: Patel Princi Date: Thu, 30 Jan 2025 04:11:50 +0530 Subject: [PATCH 4/5] Pika Protocol v4 added for optimism (#7427) * Pika Protocol v4 added for optimism * changed post_hook format and replaced the incremental_predicate for incremental filters * Seed File Data added for V4 * Fixed valid DATE literal issue * Fixing evt block time time column issue * adding previous version of incremental filter * adding previous version of incremental filter * nothing changed * added incremental predicate * removed unwanted character * added incremental filter in last * fix space indentication error * fix product id issue * added cast to else part of product id case * changed unique keys to simplify * changed the contributors name --- .../pika_optimism_perpetual_trades.sql | 3 +- .../pika/optimism/pika_optimism_schema.yml | 49 +++++- .../pika_v4_optimism_perpetual_trades.sql | 166 ++++++++++++++++++ .../trades/perpetual_trades_seed.csv | 2 + .../pika/optimism/pika_optimism_sources.yml | 8 + 5 files changed, 223 insertions(+), 5 deletions(-) create mode 100644 dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_v4_optimism_perpetual_trades.sql diff --git a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_perpetual_trades.sql b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_perpetual_trades.sql index 73b3ac130a3..322634df13e 100644 --- a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_perpetual_trades.sql +++ b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_perpetual_trades.sql @@ -4,7 +4,7 @@ post_hook='{{ expose_spells(\'["optimism"]\', "project", "pika", - \'["msilb7", "drethereum", "rplust"]\') }}' + \'["msilb7", "drethereum", "rplust", "princi"]\') }}' ) }} @@ -12,6 +12,7 @@ ref('pika_v1_optimism_perpetual_trades') , ref('pika_v2_optimism_perpetual_trades') , ref('pika_v3_optimism_perpetual_trades') + , ref('pika_v4_optimism_perpetual_trades') ] %} SELECT * diff --git a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_schema.yml b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_schema.yml index eb0636ed181..39ed93f5785 100644 --- a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_schema.yml +++ b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_optimism_schema.yml @@ -14,10 +14,6 @@ models: data_tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: - - block_date - - blockchain - - project - - version - tx_hash - evt_index columns: @@ -169,6 +165,51 @@ models: - *tx_to - *evt_index - *block_month + + - name: pika_v4_optimism_perpetual_trades + meta: + blockchain: optimism + sector: perpetual + project: pika_v4 + contributors: princi + config: + tags: ['optimism', 'pika, pika_v4', 'perpetuals', 'perps'] + description: > + Pika_v3 perpetuals trades/swaps on Optimism + data_tests: + - check_perpetuals_seed: + blockchain: optimism + project: Pika + version: 4 + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - block_date + - blockchain + - project + - version + - tx_hash + - evt_index + columns: + - *blockchain + - *block_time + - *virtual_asset + - *underlying_asset + - *market + - *market_address + - *volume_usd + - *fee_usd + - *margin_usd + - *trade + - *project + - *version + - *frontend + - *trader + - *volume_raw + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + - *block_month - name: pika_optimism_perpetual_trades meta: diff --git a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_v4_optimism_perpetual_trades.sql b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_v4_optimism_perpetual_trades.sql new file mode 100644 index 00000000000..678e979c7a7 --- /dev/null +++ b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/pika/optimism/pika_v4_optimism_perpetual_trades.sql @@ -0,0 +1,166 @@ +{{ config( + schema = 'pika_v4_optimism', + alias = 'perpetual_trades', + partition_by = ['block_month'], + materialized = 'incremental', + file_format = 'delta', + incremental_strategy = 'merge', + unique_key = ['tx_hash', 'evt_index'], + post_hook='{{ expose_spells(blockchains = \'["optimism"]\', + spell_type = "project", + spell_name = "pika", + contributors = \'["principatel"]\') }}' +)}} + +{% set project_start_date = '2021-11-22' %} + +WITH positions AS ( + SELECT + positionId + ,user AS user + ,productId + ,CAST(isLong AS VARCHAR) AS isLong + ,price + ,oraclePrice + ,margin + ,leverage + ,fee + ,contract_address + ,evt_tx_hash + ,evt_index + ,evt_block_time + ,evt_block_number + ,'4' AS version + FROM {{ source('pika_protocol_v4_optimism', 'PikaPerpV4_evt_NewPosition') }} + {% if is_incremental() %} + WHERE {{incremental_predicate('evt_block_time')}} + {% endif %} + + UNION ALL + --closing positions + SELECT + positionId + ,user + ,productId + ,'close' AS action + ,price + ,entryPrice + ,margin + ,leverage + ,fee + ,contract_address + ,evt_tx_hash + ,evt_index + ,evt_block_time + ,evt_block_number + ,'4' AS version + FROM {{ source('pika_protocol_v4_optimism', 'PikaPerpV4_evt_ClosePosition') }} + {% if is_incremental() %} + WHERE {{incremental_predicate('evt_block_time')}} + {% endif %} +), + +perps AS ( + SELECT + evt_block_time AS block_time + ,evt_block_number AS block_number + + ,CASE + WHEN productId = UINT256 '1' OR productId = UINT256 '16' THEN 'ETH' + WHEN productId = UINT256 '2' OR productId = UINT256 '17' THEN 'BTC' + WHEN productId = UINT256 '3' OR productId = UINT256 '18' THEN 'LINK' + WHEN productId = UINT256 '4' OR productId = UINT256 '19' THEN 'SNX' + WHEN productId = UINT256 '5' OR productId = UINT256 '20' THEN 'SOL' + WHEN productId = UINT256 '6' OR productId = UINT256 '21' THEN 'AVAX' + WHEN productId = UINT256 '7' OR productId = UINT256 '22' THEN 'MATIC' + WHEN productId = UINT256 '8' THEN 'LUNA' + WHEN productId = UINT256 '9' OR productId = UINT256 '23' THEN 'AAVE' + WHEN productId = UINT256 '10' OR productId = UINT256 '24' THEN 'APE' + WHEN productId = UINT256 '11' OR productId = UINT256 '25' THEN 'AXS' + WHEN productId = UINT256 '12' OR productId = UINT256 '26' THEN 'UNI' + ELSE 'product_id_' || CAST(productId AS VARCHAR) + END AS virtual_asset + ,CASE + WHEN productId = UINT256 '1' OR productId = UINT256 '16' THEN 'ETH' + WHEN productId = UINT256 '2' OR productId = UINT256 '17' THEN 'BTC' + WHEN productId = UINT256 '3' OR productId = UINT256 '18' THEN 'LINK' + WHEN productId = UINT256 '4' OR productId = UINT256 '19' THEN 'SNX' + WHEN productId = UINT256 '5' OR productId = UINT256 '20' THEN 'SOL' + WHEN productId = UINT256 '6' OR productId = UINT256 '21' THEN 'AVAX' + WHEN productId = UINT256 '7' OR productId = UINT256 '22' THEN 'MATIC' + WHEN productId = UINT256 '8' THEN 'LUNA' + WHEN productId = UINT256 '9' OR productId = UINT256 '23' THEN 'AAVE' + WHEN productId = UINT256 '10' OR productId = UINT256 '24' THEN 'APE' + WHEN productId = UINT256 '11' OR productId = UINT256 '25' THEN 'AXS' + WHEN productId = UINT256 '12' OR productId = UINT256 '26' THEN 'UNI' + ELSE 'product_id_' || CAST(productId AS VARCHAR) + END AS underlying_asset + ,CASE + WHEN productId = UINT256 '1' OR productId = UINT256 '16' THEN 'ETH' + WHEN productId = UINT256 '2' OR productId = UINT256 '17' THEN 'BTC' + WHEN productId = UINT256 '3' OR productId = UINT256 '18' THEN 'LINK' + WHEN productId = UINT256 '4' OR productId = UINT256 '19' THEN 'SNX' + WHEN productId = UINT256 '5' OR productId = UINT256 '20' THEN 'SOL' + WHEN productId = UINT256 '6' OR productId = UINT256 '21' THEN 'AVAX' + WHEN productId = UINT256 '7' OR productId = UINT256 '22' THEN 'MATIC' + WHEN productId = UINT256 '8' THEN 'LUNA-USD' + WHEN productId = UINT256 '9' OR productId = UINT256 '23' THEN 'AAVE' + WHEN productId = UINT256 '10' OR productId = UINT256 '24' THEN 'APE' + WHEN productId = UINT256 '11' OR productId = UINT256 '25' THEN 'AXS' + WHEN productId = UINT256 '12' OR productId = UINT256 '26' THEN 'UNI' + ELSE 'product_id_' || CAST(productId AS VARCHAR) + END AS market + + ,contract_address AS market_address + ,(margin/1e8) * (leverage/1e8) AS volume_usd + ,fee/1e8 AS fee_usd + ,margin/1e8 AS margin_usd + + ,CASE + WHEN isLong = 'true' THEN 'long' + WHEN isLong = 'false' THEN 'short' + ELSE CAST(isLong as VARCHAR) + END AS trade + + ,'Pika' AS project + ,version + ,'Pika' AS frontend + ,user AS trader + ,margin * leverage AS volume_raw + ,evt_tx_hash AS tx_hash + ,evt_index + FROM positions +) + +SELECT + 'optimism' AS blockchain + ,CAST(date_trunc('DAY', perps.block_time) AS date) AS block_date + ,CAST(date_trunc('MONTH', perps.block_time) AS date) AS block_month + ,perps.block_time + ,perps.virtual_asset + ,perps.underlying_asset + ,perps.market + ,perps.market_address + ,perps.volume_usd + ,perps.fee_usd + ,perps.margin_usd + ,perps.trade + ,perps.project + ,perps.version + ,perps.frontend + ,perps.trader + ,CAST(perps.volume_raw as UINT256) as volume_raw + ,perps.tx_hash + ,tx."from" AS tx_from + ,tx."to" AS tx_to + ,perps.evt_index +FROM perps +INNER JOIN {{ source('optimism', 'transactions') }} AS tx + ON perps.tx_hash = tx.hash + AND perps.block_number = tx.block_number + {% if not is_incremental() %} + AND tx.block_time >= DATE '{{project_start_date}}' + {% endif %} + {% if is_incremental() %} + AND {{incremental_predicate('tx.block_time')}} + {% endif %} \ No newline at end of file diff --git a/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv b/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv index 5691f837994..0f3b267d7ea 100644 --- a/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv +++ b/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv @@ -12,6 +12,8 @@ optimism,2022-08-31,MATIC,MATIC-USD,0xd5a8f233cbddb40368d55c3320644fb36e597002,s optimism,2022-08-31,MATIC,MATIC-USD,0xd5a8f233cbddb40368d55c3320644fb36e597002,short,Pika,3,0xd50c2884035201c4e5643d1c4c4cd65e6c3dcbb9e0f3bee741d07a5e02eb3a9d optimism,2022-03-09,LINK,LINK-USD,0x365324e5045df8c886ebe6ad5449f5ceb5881a40,close,Pika,1,0x0d3906c14ebfc0b6da28e46699d54f7ba3ebdeaba0be90ddae8dfc5e0245adbc optimism,2022-01-13,BTC,BTC-USD,0x365324e5045df8c886ebe6ad5449f5ceb5881a40,long,Pika,1,0x60eb7268d68583307e262f39296acd179b84de52661036369ae5c95d8231a198 +optimism,2023-10-12,BTC,BTC,0x9b86b2be8edb2958089e522fe0eb7dd5935975ab,close,Pika,4,0xf0196ed2f3d1f65d78eab4d811b346ca29f392821241ffd522ee840a3f40f166 +optimism,2023-10-12,BTC,BTC,0x9b86b2be8edb2958089e522fe0eb7dd5935975ab,long,Pika,4,0x325c7e6b0fdd55a793f1572e7e103098cbb159bb5d2c42fc9501cbd968852718 avalanche_c,2023-01-18,WAVAX,WAVAX,0x9ab2de34a33fb459b538c43f251eb825645e8595,open-long,gmx,1,0xfaef719c389269fd6a337f198432a5aa7e980fd9794a51bff163ca5fe66915b4 avalanche_c,2023-01-18,USDC,BTC.b-USDC,0x9ab2de34a33fb459b538c43f251eb825645e8595,open-short,gmx,1,0x0d0fe971ac1fc3fdee9f45477e263b44041d533461a790c69f3fba4de1ee4d58 arbitrum,2023-01-18,USDC,WBTC-USDC,0x489ee077994b6658eafa855c308275ead8097c4a,open-short,gmx,1,0x7451f1514a48d026d7065736539c521cdb7190d9eef6aacc27eebbe4b7387d47 diff --git a/sources/pika/optimism/pika_optimism_sources.yml b/sources/pika/optimism/pika_optimism_sources.yml index f492056e1a7..2b788b9fb65 100644 --- a/sources/pika/optimism/pika_optimism_sources.yml +++ b/sources/pika/optimism/pika_optimism_sources.yml @@ -23,4 +23,12 @@ sources: - name: PikaPerpV3_evt_NewPosition description: "Details the new positions opened" - name: PikaPerpV3_evt_ClosePosition + description: "Details the swaps to close existing positions" + + - name: pika_protocol_v4_optimism + description: Optimism decoded tables related to Pika Protocol v4 + tables: + - name: PikaPerpV4_evt_NewPosition + description: "Details the new positions opened" + - name: PikaPerpV4_evt_ClosePosition description: "Details the swaps to close existing positions" \ No newline at end of file From 90c8baf69e7dc083ec5c21a8b7135c61b46f0497 Mon Sep 17 00:00:00 2001 From: Patel Princi Date: Thu, 30 Jan 2025 04:12:01 +0530 Subject: [PATCH 5/5] Gains Network Perpetual for Base (#7437) * moved to previous hash * changed model name * Fixed gains_network_schema.yml * Fixed gains_network_v1_base_perpetual_trades.sql * Changed JSON Parsing Query and Seed File * added post hook new format and source syntax * fixed space issue * added incremental filters * added blockchain in post hook * added incremental filters and added CTE * removed the extra comments * fixed the schema and tabs * rename file and added models details --- .../gains_network_perpetual_trades.sql | 46 ++++ .../gains_network/gains_network_schema.yml | 117 ++++++++++ ...gains_network_v1_base_perpetual_trades.sql | 221 ++++++++++++++++++ .../trades/perpetual_trades_seed.csv | 2 + .../gains_network_base_sources.yml | 10 + 5 files changed, 396 insertions(+) create mode 100644 dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_perpetual_trades.sql create mode 100644 dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_schema.yml create mode 100644 dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_v1_base_perpetual_trades.sql create mode 100644 sources/gains_network/gains_network_base_sources.yml diff --git a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_perpetual_trades.sql b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_perpetual_trades.sql new file mode 100644 index 00000000000..c3270b60664 --- /dev/null +++ b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_perpetual_trades.sql @@ -0,0 +1,46 @@ +{{ config( + schema = 'gains_network', + alias = 'perpetual_trades', + post_hook='{{ expose_spells(blockchains = \'["base"]\', + spell_type = "project", + spell_name = "gains_network", + contributors = \'["princi"]\') }}' + ) +}} + +{% set gains_network_base_perpetual_trade_models = [ + ref('gains_network_v1_base_perpetual_trades') +] %} + +SELECT * +FROM +( + {% for gains_network_perpetual_trades in gains_network_base_perpetual_trade_models %} + SELECT + blockchain + ,block_date + ,block_month + ,block_time + ,virtual_asset + ,underlying_asset + ,market + ,market_address + ,volume_usd + ,fee_usd + ,margin_usd + ,trade + ,project + ,version + ,frontend + ,trader + ,volume_raw + ,tx_hash + ,tx_from + ,tx_to + ,evt_index + FROM {{ gains_network_perpetual_trades }} + {% if not loop.last %} + UNION ALL + {% endif %} + {% endfor %} +) \ No newline at end of file diff --git a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_schema.yml b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_schema.yml new file mode 100644 index 00000000000..4ea7390ddd2 --- /dev/null +++ b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_schema.yml @@ -0,0 +1,117 @@ +version: 2 + +models: + - name: gains_network_v1_base_perpetual_trades + meta: + blockchain: base + sector: perpetual + contributors: princi + config: + tags: ['base', 'perpetuals', 'perps', 'gains_network','cross-chain'] + description: > + Perpetual swaps/trades table on gains_network protocol across blockchains + data_tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - tx_hash + - evt_index + columns: + - &blockchain + name: blockchain + description: "Blockchain where the perpetuals market is deployed" + - &block_date + name: block_date + description: "Date of the transaction" + - &block_time + name: block_time + description: "Time of the transaction" + - &virtual_asset + name: virtual_asset + description: "How the protocol represents the underlying asset" + - &underlying_asset + name: underlying_asset + description: "The real underlying asset that is represented in the swap" + - &market + name: market + description: "The futures market involved in the transaction" + - &market_address + name: market_address + description: "Contract address of the market" + data_tests: + - perpetual_trades_market_address: + perpetual_trades_seed: ref('perpetual_trades_seed') + - &volume_usd + name: volume_usd + description: "The size of the position taken for the swap in USD; already in absolute value and decimal normalized" + - &fee_usd + name: fee_usd + description: "The fees charged to the user for the swap in USD" + - &margin_usd + name: margin_usd + description: "The amount of collateral/margin used in a trade in USD" + - &trade + name: trade + description: "Indicates the trade's direction whether a short, long, of if a position is being closed" + - &project + name: project + description: "The underlying protocol/project where the swap took place" + - &version + name: version + description: "The version of the protocol/project" + - &frontend + name: frontend + description: "The frontend protocol/project where the specific swap was executed; built on top of the 'project' and defaults to the 'project' if no other frontend is specified" + - &trader + name: trader + description: "The address which made the swap in the protocol" + - &volume_raw + name: volume_raw + description: "The size of the position in raw form" + - &tx_hash + name: tx_hash + description: "The hash of the transaction" + - &tx_from + name: tx_from + description: "The address that originated the transaction; based on the base.transactions table" + - &tx_to + name: tx_to + description: "The address receiving the transaction; based on the base.transactions table" + - &evt_index + name: evt_index + description: "Event index number" + - &block_month + name: block_month + description: "Month of the transaction" + + - name: gains_network_perpetual_trades + meta: + blockchain: base + sector: perpetual + contributors: princi + config: + tags: ['base', gains network, 'perpetuals', 'perps'] + description: > + All gains network perpetual trades on Base + columns: + - *blockchain + - *block_date + - *block_month + - *block_time + - *virtual_asset + - *underlying_asset + - *market + - *market_address + - *volume_usd + - *fee_usd + - *margin_usd + - *trade + - *project + - *version + - *frontend + - *trader + - *volume_raw + - *tx_hash + - *tx_from + - *tx_to + - *evt_index + \ No newline at end of file diff --git a/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_v1_base_perpetual_trades.sql b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_v1_base_perpetual_trades.sql new file mode 100644 index 00000000000..c786d2d3ac2 --- /dev/null +++ b/dbt_subprojects/hourly_spellbook/models/_sector/perpetual/projects/gains_network/gains_network_v1_base_perpetual_trades.sql @@ -0,0 +1,221 @@ +{{ config( + schema = 'gains_network_v1_base', + alias = 'perpetual_trades', + partition_by = ['block_month'], + materialized = 'incremental', + file_format = 'delta', + incremental_strategy = 'merge', + unique_key = ['block_date', 'blockchain', 'project', 'version', 'tx_hash', 'evt_index'], + post_hook='{{ expose_spells(blockchains = \'["base"]\', + spell_type = "project", + spell_name = "gains_network", + contributors = \'["princi"]\') }}' +) +}} + +-- {% set project_start_date = '2024-01-01' %} + +WITH position_changes AS ( + -- Position Size Decreases + SELECT + evt_block_time, + evt_block_number, + evt_tx_hash, + evt_tx_from, + evt_tx_to, + evt_index, + contract_address, + trader, + pairIndex, + long, + collateralDelta, + collateralPriceUsd, + oraclePrice, + leverageDelta, + "values" as value_data, + 'decrease' as action + FROM {{source('gains_network_base','GNSMultiCollatDiamond_evt_PositionSizeDecreaseExecuted')}} + {% if not is_incremental() %} + WHERE evt_block_time >= DATE '{{project_start_date}}' + {% else %} + WHERE {{ incremental_predicate('evt_block_time') }} + {% endif %} + UNION ALL + + -- Position Size Increases + SELECT + evt_block_time, + evt_block_number, + evt_tx_hash, + evt_tx_from, + evt_tx_to, + evt_index, + contract_address, + trader, + pairIndex, + long, + collateralDelta, + collateralPriceUsd, + oraclePrice, + leverageDelta, + "values" as value_data, + 'increase' as action + FROM {{ source('gains_network_base','GNSMultiCollatDiamond_evt_PositionSizeIncreaseExecuted')}} + {% if not is_incremental() %} + WHERE evt_block_time >= DATE '{{project_start_date}}' + {% else %} + WHERE {{ incremental_predicate('evt_block_time') }} + {% endif %} +), + +transactions_filtered AS ( + SELECT + hash, + block_number, + "from", + "to", + block_time + FROM {{ source('base', 'transactions') }} + WHERE {% if is_incremental() %} + {{ incremental_predicate('block_time') }} + {% else %} + block_time >= TIMESTAMP '{{project_start_date}}' + {% endif %} +), + +perps AS ( + SELECT + evt_block_time AS block_time, + evt_block_number AS block_number, + CASE pairIndex + WHEN 0 THEN 'BTC-USD' + WHEN 1 THEN 'ETH-USD' + WHEN 2 THEN 'LINK-USD' + WHEN 3 THEN 'DOGE-USD' + WHEN 4 THEN 'MATIC-USD' + WHEN 5 THEN 'ADA-USD' + WHEN 6 THEN 'SUSHI-USD' + WHEN 7 THEN 'AAVE-USD' + WHEN 8 THEN 'ALGO-USD' + WHEN 9 THEN 'BAT-USD' + WHEN 10 THEN 'COMP-USD' + WHEN 11 THEN 'DOT-USD' + WHEN 12 THEN 'EOS-USD' + WHEN 13 THEN 'LTC-USD' + WHEN 14 THEN 'MANA-USD' + WHEN 15 THEN 'OMG-USD' + WHEN 16 THEN 'SNX-USD' + WHEN 17 THEN 'UNI-USD' + WHEN 18 THEN 'XLM-USD' + WHEN 19 THEN 'XRP-USD' + WHEN 20 THEN 'ZEC-USD' + WHEN 31 THEN 'LUNA-USD' + WHEN 32 THEN 'YFI-USD' + WHEN 33 THEN 'SOL-USD' + ELSE 'pair_index_' || CAST(pairIndex AS VARCHAR) + END AS virtual_asset, + + CASE pairIndex + WHEN 0 THEN 'BTC-USD' + WHEN 1 THEN 'ETH-USD' + WHEN 2 THEN 'LINK-USD' + WHEN 3 THEN 'DOGE-USD' + WHEN 4 THEN 'MATIC-USD' + WHEN 5 THEN 'ADA-USD' + WHEN 6 THEN 'SUSHI-USD' + WHEN 7 THEN 'AAVE-USD' + WHEN 8 THEN 'ALGO-USD' + WHEN 9 THEN 'BAT-USD' + WHEN 10 THEN 'COMP-USD' + WHEN 11 THEN 'DOT-USD' + WHEN 12 THEN 'EOS-USD' + WHEN 13 THEN 'LTC-USD' + WHEN 14 THEN 'MANA-USD' + WHEN 15 THEN 'OMG-USD' + WHEN 16 THEN 'SNX-USD' + WHEN 17 THEN 'UNI-USD' + WHEN 18 THEN 'XLM-USD' + WHEN 19 THEN 'XRP-USD' + WHEN 20 THEN 'ZEC-USD' + WHEN 31 THEN 'LUNA-USD' + WHEN 32 THEN 'YFI-USD' + WHEN 33 THEN 'SOL-USD' + ELSE 'pair_index_' || CAST(pairIndex AS VARCHAR) + END AS underlying_asset, + + CASE pairIndex + WHEN 0 THEN 'BTC-USD' + WHEN 1 THEN 'ETH-USD' + WHEN 2 THEN 'LINK-USD' + WHEN 3 THEN 'DOGE-USD' + WHEN 4 THEN 'MATIC-USD' + WHEN 5 THEN 'ADA-USD' + WHEN 6 THEN 'SUSHI-USD' + WHEN 7 THEN 'AAVE-USD' + WHEN 8 THEN 'ALGO-USD' + WHEN 9 THEN 'BAT-USD' + WHEN 10 THEN 'COMP-USD' + WHEN 11 THEN 'DOT-USD' + WHEN 12 THEN 'EOS-USD' + WHEN 13 THEN 'LTC-USD' + WHEN 14 THEN 'MANA-USD' + WHEN 15 THEN 'OMG-USD' + WHEN 16 THEN 'SNX-USD' + WHEN 17 THEN 'UNI-USD' + WHEN 18 THEN 'XLM-USD' + WHEN 19 THEN 'XRP-USD' + WHEN 20 THEN 'ZEC-USD' + WHEN 31 THEN 'LUNA-USD' + WHEN 32 THEN 'YFI-USD' + WHEN 33 THEN 'SOL-USD' + ELSE 'pair_index_' || CAST(pairIndex AS VARCHAR) + END AS market, + + contract_address AS market_address, + (collateralDelta * collateralPriceUsd * leverageDelta) / 1e36 AS volume_usd, + CAST(JSON_EXTRACT(value_data, '$.vaultFeeCollateral') AS double) / 1e18 AS fee_usd, + collateralDelta / 1e18 AS margin_usd, + + CASE + WHEN action = 'increase' AND long = true THEN 'long' + WHEN action = 'increase' AND long = false THEN 'short' + WHEN action = 'decrease' AND long = true THEN 'close_long' + WHEN action = 'decrease' AND long = false THEN 'close_short' + END AS trade, + + 'gains_network' AS project, + '1' AS version, + 'gains_network' AS frontend, + trader, + collateralDelta * leverageDelta AS volume_raw, + evt_tx_hash AS tx_hash, + evt_index + FROM position_changes +) + +SELECT + 'base' AS blockchain, + CAST(date_trunc('DAY', perps.block_time) AS date) AS block_date, + CAST(date_trunc('MONTH', perps.block_time) AS date) AS block_month, + perps.block_time, + perps.virtual_asset, + perps.underlying_asset, + perps.market, + perps.market_address, + perps.volume_usd, + perps.fee_usd, + perps.margin_usd, + perps.trade, + perps.project, + perps.version, + perps.frontend, + perps.trader, + CAST(perps.volume_raw as UINT256) as volume_raw, + perps.tx_hash, + tx."from" AS tx_from, + tx."to" AS tx_to, + perps.evt_index +FROM perps +INNER JOIN transactions_filtered tx + ON perps.tx_hash = tx.hash + AND perps.block_number = tx.block_number diff --git a/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv b/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv index 0f3b267d7ea..0d3ee2df542 100644 --- a/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv +++ b/dbt_subprojects/hourly_spellbook/seeds/_sector/perpetual/trades/perpetual_trades_seed.csv @@ -81,3 +81,5 @@ base,2024-01-03,snxUSD,Ethereum,0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce,close base,2024-02-15,snxUSD,Ethereum,0x0a2af931effd34b81ebcc57e3d3c9b1e1de1c9ce,long,Synthetix,3,0xf0cae8268019a3e6bff055d496a5f52ed805f60f7582791d93944c026fd61b98 arbitrum,2023-02-17,,,0xda1a7ea276fbdb16ebabb5b38257b1d56b302e4a,open-long,vela_exchange,1,0x6a783688a2e013bfe84a6e7ae65dfd2f2c01e452b360a07a4bdf4d502ee8d187 arbitrum,2023-02-17,,,0xda1a7ea276fbdb16ebabb5b38257b1d56b302e4a,open-long,vela_exchange,1,0x94cacbb99ca4d6b11fb660dc71e6da77f98f6038752f71b158903c492578e34c +base,2024-10-22,BTC-USD,BTC-USD,0x6cd5ac19a07518a8092eeffda4f1174c72704eeb,long,gains_network,1,0x34397f0d62a19bfe6a325c2a906560af6cf0f699b0893a333996c0b361c6a4d8 +base,2024-10-06,COMP-USD,COMP-USD,0x6cd5ac19a07518a8092eeffda4f1174c72704eeb,long,gains_network,1,0x8836d5e2955cdbaee1292a5016ea51301c459897bf7ad319553e0c51c4fcbce9 \ No newline at end of file diff --git a/sources/gains_network/gains_network_base_sources.yml b/sources/gains_network/gains_network_base_sources.yml new file mode 100644 index 00000000000..1757e7e7b1f --- /dev/null +++ b/sources/gains_network/gains_network_base_sources.yml @@ -0,0 +1,10 @@ +version: 2 + +sources: + - name: gains_network_base + description: base decoded tables related to Gains Network + tables: + - name: GNSMultiCollatDiamond_evt_PositionSizeIncreaseExecuted + description: "Details the new positions opened" + - name: GNSMultiCollatDiamond_evt_PositionSizeDecreaseExecuted + description: "Details the swaps to close existing positions" \ No newline at end of file