From a30372190eb954422f5be1185d3dc18a9ef505be Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Fri, 26 Jun 2026 10:21:12 +0200 Subject: [PATCH 1/9] Add PumpSwap event-only buy swaps --- .../models/_sector/dex/pumpswap/_schema.yml | 2 +- .../pumpswap_solana_base_trades_backfill.sql | 12 +++++ .../pumpswap_solana_stg_decoded_swaps.sql | 52 +++++++++++++++++++ dbt_subprojects/solana/models/_sources.yml | 2 +- 4 files changed, 66 insertions(+), 2 deletions(-) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml b/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml index e6a31497816..af5a96e976b 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml @@ -9,7 +9,7 @@ models: tags: [ 'solana','dex','pumpswap' ] event_time: block_time description: > - staging model for pumpswap swap data from decoded tables + staging model for pumpswap swap data from decoded call and event tables data_tests: - dbt_utils.unique_combination_of_columns: arguments: diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql index 4f3e8f71af5..5eec72bd1c7 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql @@ -45,6 +45,7 @@ WITH pools AS ( , account_pool_quote_token_account , account_protocol_fee_recipient_token_account , base_amount + , quote_amount , is_buy , surrogate_key FROM {{ ref('pumpswap_solana_stg_decoded_swaps') }} @@ -120,6 +121,17 @@ WITH pools AS ( END ) ) + WHERE sf.quote_amount IS NULL + + UNION ALL + + SELECT + sf.* + , sf.base_amount AS base_token_amount + , sf.quote_amount AS quote_token_amount + , 1 AS rn + FROM swaps_with_fees sf + WHERE sf.quote_amount IS NOT NULL ) , trades AS ( diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql index ede4e85740a..0dfb0ecd5dc 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql @@ -31,6 +31,7 @@ WITH swaps AS ( , account_pool_quote_token_account , account_protocol_fee_recipient_token_account , base_amount_out AS base_amount + , CAST(NULL AS UINT256) AS quote_amount , 1 AS is_buy FROM {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} WHERE 1=1 @@ -59,6 +60,7 @@ WITH swaps AS ( , account_pool_quote_token_account , account_protocol_fee_recipient_token_account , base_amount_in AS base_amount + , CAST(NULL AS UINT256) AS quote_amount , 0 AS is_buy FROM {{ source('pumpdotfun_solana', 'pump_amm_call_sell') }} WHERE 1=1 @@ -67,6 +69,55 @@ WITH swaps AS ( {% else %} AND call_block_time >= TIMESTAMP '{{ project_start_date }}' {% endif %} + + UNION ALL + + SELECT + e.evt_block_time AS call_block_time + , e.evt_block_slot AS call_block_slot + , e.evt_block_date AS call_block_date + , e.evt_outer_instruction_index AS call_outer_instruction_index + , e.evt_inner_instruction_index AS call_inner_instruction_index + , e.evt_tx_id AS call_tx_id + , e.evt_tx_index AS call_tx_index + , e.evt_outer_executing_account AS call_outer_executing_account + , e.pool AS account_pool + , e.user AS account_user + , e.user_base_token_account AS account_user_base_token_account + , e.user_quote_token_account AS account_user_quote_token_account + , i.account_arguments[8] AS account_pool_base_token_account + , i.account_arguments[9] AS account_pool_quote_token_account + , e.protocol_fee_recipient_token_account AS account_protocol_fee_recipient_token_account + , e.base_amount_out AS base_amount + , e.quote_amount_in AS quote_amount + , 1 AS is_buy + FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e + INNER JOIN {{ source('solana', 'instruction_calls') }} i + ON i.block_date = e.evt_block_date + AND i.tx_id = e.evt_tx_id + AND i.outer_instruction_index = e.evt_outer_instruction_index + AND i.executing_account = 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' + AND bytearray_substring(i.data, 1, 8) = 0xc62e1552b4d9e870 + AND i.tx_success + LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c + ON c.call_block_date = e.evt_block_date + AND c.call_tx_id = e.evt_tx_id + AND c.call_outer_instruction_index = e.evt_outer_instruction_index + AND c.account_pool = e.pool + AND c.base_amount_out = e.base_amount_out + {% if is_incremental() %} + AND {{ incremental_predicate('c.call_block_time') }} + {% else %} + AND c.call_block_time >= TIMESTAMP '{{ project_start_date }}' + {% endif %} + WHERE c.call_tx_id IS NULL + {% if is_incremental() %} + AND {{ incremental_predicate('e.evt_block_time') }} + AND {{ incremental_predicate('i.block_time') }} + {% else %} + AND e.evt_block_time >= TIMESTAMP '{{ project_start_date }}' + AND i.block_time >= TIMESTAMP '{{ project_start_date }}' + {% endif %} ) SELECT @@ -88,6 +139,7 @@ SELECT , sp.account_pool_quote_token_account , sp.account_protocol_fee_recipient_token_account , sp.base_amount + , sp.quote_amount , sp.is_buy , {{ solana_instruction_key( 'sp.call_block_slot' diff --git a/dbt_subprojects/solana/models/_sources.yml b/dbt_subprojects/solana/models/_sources.yml index 408023a3610..085447dbed6 100644 --- a/dbt_subprojects/solana/models/_sources.yml +++ b/dbt_subprojects/solana/models/_sources.yml @@ -50,6 +50,7 @@ sources: - name: pump_amm_call_create_pool - name: pump_amm_call_create_config - name: pump_amm_call_update_fee_config + - name: pump_amm_evt_buyevent - name: raydium_solana description: "Raydium protocol decoded tables" @@ -87,4 +88,3 @@ sources: - name: jupiter_call_shared_accounts_route_v2 - name: jupiter_evt_swapevent - name: jupiter_evt_swapsevent - From 84dcd5aaecefb7ea89bce32960e1bd39e97c505f Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Mon, 29 Jun 2026 21:27:32 +0200 Subject: [PATCH 2/9] Optimize PumpSwap event-only staging --- .../pumpswap_solana_stg_decoded_swaps.sql | 121 +++++++++++------- 1 file changed, 76 insertions(+), 45 deletions(-) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql index 0dfb0ecd5dc..122f2a1226d 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql @@ -12,8 +12,64 @@ }} {% set project_start_date = '2025-02-20' %} +{% set event_start_date = '2025-11-01' %} -WITH swaps AS ( +WITH event_swaps AS ( + SELECT + e.evt_block_time AS call_block_time + , e.evt_block_slot AS call_block_slot + , e.evt_block_date AS call_block_date + , e.evt_outer_instruction_index AS call_outer_instruction_index + , e.evt_inner_instruction_index AS call_inner_instruction_index + , e.evt_tx_id AS call_tx_id + , e.evt_tx_index AS call_tx_index + , e.evt_outer_executing_account AS call_outer_executing_account + , e.pool AS account_pool + , e.user AS account_user + , e.user_base_token_account AS account_user_base_token_account + , e.user_quote_token_account AS account_user_quote_token_account + , i.account_arguments[8] AS account_pool_base_token_account + , i.account_arguments[9] AS account_pool_quote_token_account + , e.protocol_fee_recipient_token_account AS account_protocol_fee_recipient_token_account + , e.base_amount_out AS base_amount + , e.quote_amount_in AS quote_amount + , 1 AS is_buy + , ROW_NUMBER() OVER ( + PARTITION BY e.evt_block_date, e.evt_tx_id, e.evt_outer_instruction_index, e.evt_inner_instruction_index + ORDER BY COALESCE(i.inner_instruction_index, -1) DESC + ) AS rn + FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e + INNER JOIN {{ source('solana', 'instruction_calls') }} i + ON i.block_date = e.evt_block_date + AND i.tx_id = e.evt_tx_id + AND i.outer_instruction_index = e.evt_outer_instruction_index + AND COALESCE(i.inner_instruction_index, -1) < COALESCE(e.evt_inner_instruction_index, 1000000) + AND i.executing_account = 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' + AND i.executing_account_prefix = 'pA' + AND bytearray_substring(i.data, 1, 8) = 0xc62e1552b4d9e870 + AND i.tx_success + LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c + ON c.call_block_date = e.evt_block_date + AND c.call_tx_id = e.evt_tx_id + AND c.call_outer_instruction_index = e.evt_outer_instruction_index + AND c.account_pool = e.pool + AND c.base_amount_out = e.base_amount_out + {% if is_incremental() %} + AND {{ incremental_predicate('c.call_block_date') }} + {% else %} + AND c.call_block_date >= DATE '{{ event_start_date }}' + {% endif %} + WHERE c.call_tx_id IS NULL + {% if is_incremental() %} + AND {{ incremental_predicate('e.evt_block_date') }} + AND {{ incremental_predicate('i.block_date') }} + {% else %} + AND e.evt_block_date >= DATE '{{ event_start_date }}' + AND i.block_date >= DATE '{{ event_start_date }}' + {% endif %} +) + +, swaps AS ( SELECT call_block_time , call_block_slot @@ -73,51 +129,26 @@ WITH swaps AS ( UNION ALL SELECT - e.evt_block_time AS call_block_time - , e.evt_block_slot AS call_block_slot - , e.evt_block_date AS call_block_date - , e.evt_outer_instruction_index AS call_outer_instruction_index - , e.evt_inner_instruction_index AS call_inner_instruction_index - , e.evt_tx_id AS call_tx_id - , e.evt_tx_index AS call_tx_index - , e.evt_outer_executing_account AS call_outer_executing_account - , e.pool AS account_pool - , e.user AS account_user - , e.user_base_token_account AS account_user_base_token_account - , e.user_quote_token_account AS account_user_quote_token_account - , i.account_arguments[8] AS account_pool_base_token_account - , i.account_arguments[9] AS account_pool_quote_token_account - , e.protocol_fee_recipient_token_account AS account_protocol_fee_recipient_token_account - , e.base_amount_out AS base_amount - , e.quote_amount_in AS quote_amount + call_block_time + , call_block_slot + , call_block_date + , call_outer_instruction_index + , call_inner_instruction_index + , call_tx_id + , call_tx_index + , call_outer_executing_account + , account_pool + , account_user + , account_user_base_token_account + , account_user_quote_token_account + , account_pool_base_token_account + , account_pool_quote_token_account + , account_protocol_fee_recipient_token_account + , base_amount + , quote_amount , 1 AS is_buy - FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e - INNER JOIN {{ source('solana', 'instruction_calls') }} i - ON i.block_date = e.evt_block_date - AND i.tx_id = e.evt_tx_id - AND i.outer_instruction_index = e.evt_outer_instruction_index - AND i.executing_account = 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' - AND bytearray_substring(i.data, 1, 8) = 0xc62e1552b4d9e870 - AND i.tx_success - LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c - ON c.call_block_date = e.evt_block_date - AND c.call_tx_id = e.evt_tx_id - AND c.call_outer_instruction_index = e.evt_outer_instruction_index - AND c.account_pool = e.pool - AND c.base_amount_out = e.base_amount_out - {% if is_incremental() %} - AND {{ incremental_predicate('c.call_block_time') }} - {% else %} - AND c.call_block_time >= TIMESTAMP '{{ project_start_date }}' - {% endif %} - WHERE c.call_tx_id IS NULL - {% if is_incremental() %} - AND {{ incremental_predicate('e.evt_block_time') }} - AND {{ incremental_predicate('i.block_time') }} - {% else %} - AND e.evt_block_time >= TIMESTAMP '{{ project_start_date }}' - AND i.block_time >= TIMESTAMP '{{ project_start_date }}' - {% endif %} + FROM event_swaps + WHERE rn = 1 ) SELECT From d0e2815e4536705b7e60905153750760bc82f606 Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Mon, 29 Jun 2026 22:01:05 +0200 Subject: [PATCH 3/9] Reduce PumpSwap event instruction join scope --- .../pumpswap_solana_stg_decoded_swaps.sql | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql index 122f2a1226d..53f79c501b3 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql @@ -14,7 +14,44 @@ {% set project_start_date = '2025-02-20' %} {% set event_start_date = '2025-11-01' %} -WITH event_swaps AS ( +WITH event_only_swaps AS ( + SELECT + e.evt_block_time + , e.evt_block_slot + , e.evt_block_date + , e.evt_outer_instruction_index + , e.evt_inner_instruction_index + , e.evt_tx_id + , e.evt_tx_index + , e.evt_outer_executing_account + , e.pool + , e.user + , e.user_base_token_account + , e.user_quote_token_account + , e.protocol_fee_recipient_token_account + , e.base_amount_out + , e.quote_amount_in + FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e + LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c + ON c.call_block_date = e.evt_block_date + AND c.call_tx_id = e.evt_tx_id + AND c.call_outer_instruction_index = e.evt_outer_instruction_index + AND c.account_pool = e.pool + AND c.base_amount_out = e.base_amount_out + {% if is_incremental() %} + AND {{ incremental_predicate('c.call_block_date') }} + {% else %} + AND c.call_block_date >= DATE '{{ event_start_date }}' + {% endif %} + WHERE c.call_tx_id IS NULL + {% if is_incremental() %} + AND {{ incremental_predicate('e.evt_block_date') }} + {% else %} + AND e.evt_block_date >= DATE '{{ event_start_date }}' + {% endif %} +) + +, event_swaps AS ( SELECT e.evt_block_time AS call_block_time , e.evt_block_slot AS call_block_slot @@ -38,7 +75,7 @@ WITH event_swaps AS ( PARTITION BY e.evt_block_date, e.evt_tx_id, e.evt_outer_instruction_index, e.evt_inner_instruction_index ORDER BY COALESCE(i.inner_instruction_index, -1) DESC ) AS rn - FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e + FROM event_only_swaps e INNER JOIN {{ source('solana', 'instruction_calls') }} i ON i.block_date = e.evt_block_date AND i.tx_id = e.evt_tx_id @@ -48,23 +85,10 @@ WITH event_swaps AS ( AND i.executing_account_prefix = 'pA' AND bytearray_substring(i.data, 1, 8) = 0xc62e1552b4d9e870 AND i.tx_success - LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c - ON c.call_block_date = e.evt_block_date - AND c.call_tx_id = e.evt_tx_id - AND c.call_outer_instruction_index = e.evt_outer_instruction_index - AND c.account_pool = e.pool - AND c.base_amount_out = e.base_amount_out - {% if is_incremental() %} - AND {{ incremental_predicate('c.call_block_date') }} - {% else %} - AND c.call_block_date >= DATE '{{ event_start_date }}' - {% endif %} - WHERE c.call_tx_id IS NULL + WHERE 1=1 {% if is_incremental() %} - AND {{ incremental_predicate('e.evt_block_date') }} AND {{ incremental_predicate('i.block_date') }} {% else %} - AND e.evt_block_date >= DATE '{{ event_start_date }}' AND i.block_date >= DATE '{{ event_start_date }}' {% endif %} ) From 1cf8eedb6c24601e5a9fb56f6cfb2f030d1740d0 Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Mon, 29 Jun 2026 23:47:16 +0200 Subject: [PATCH 4/9] Optimize PumpSwap event pool account lookup --- .../pumpswap_solana_stg_decoded_swaps.sql | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql index 53f79c501b3..bfdf7e85df1 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql @@ -6,6 +6,7 @@ , materialized = 'incremental' , file_format = 'delta' , incremental_strategy = 'merge' + , on_schema_change = 'sync_all_columns' , incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_date')] , unique_key = ['block_month', 'block_date', 'surrogate_key'] ) @@ -51,6 +52,16 @@ WITH event_only_swaps AS ( {% endif %} ) +, pool_accounts AS ( + SELECT + account_pool AS pool + , arbitrary(account_pool_base_token_account) AS pool_base_token_account + , arbitrary(account_pool_quote_token_account) AS pool_quote_token_account + FROM {{ source('pumpdotfun_solana', 'pump_amm_call_create_pool') }} + WHERE call_block_time >= TIMESTAMP '{{ project_start_date }}' + GROUP BY 1 +) + , event_swaps AS ( SELECT e.evt_block_time AS call_block_time @@ -65,32 +76,15 @@ WITH event_only_swaps AS ( , e.user AS account_user , e.user_base_token_account AS account_user_base_token_account , e.user_quote_token_account AS account_user_quote_token_account - , i.account_arguments[8] AS account_pool_base_token_account - , i.account_arguments[9] AS account_pool_quote_token_account + , p.pool_base_token_account AS account_pool_base_token_account + , p.pool_quote_token_account AS account_pool_quote_token_account , e.protocol_fee_recipient_token_account AS account_protocol_fee_recipient_token_account , e.base_amount_out AS base_amount , e.quote_amount_in AS quote_amount , 1 AS is_buy - , ROW_NUMBER() OVER ( - PARTITION BY e.evt_block_date, e.evt_tx_id, e.evt_outer_instruction_index, e.evt_inner_instruction_index - ORDER BY COALESCE(i.inner_instruction_index, -1) DESC - ) AS rn FROM event_only_swaps e - INNER JOIN {{ source('solana', 'instruction_calls') }} i - ON i.block_date = e.evt_block_date - AND i.tx_id = e.evt_tx_id - AND i.outer_instruction_index = e.evt_outer_instruction_index - AND COALESCE(i.inner_instruction_index, -1) < COALESCE(e.evt_inner_instruction_index, 1000000) - AND i.executing_account = 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' - AND i.executing_account_prefix = 'pA' - AND bytearray_substring(i.data, 1, 8) = 0xc62e1552b4d9e870 - AND i.tx_success - WHERE 1=1 - {% if is_incremental() %} - AND {{ incremental_predicate('i.block_date') }} - {% else %} - AND i.block_date >= DATE '{{ event_start_date }}' - {% endif %} + INNER JOIN pool_accounts p + ON p.pool = e.pool ) , swaps AS ( @@ -172,7 +166,6 @@ WITH event_only_swaps AS ( , quote_amount , 1 AS is_buy FROM event_swaps - WHERE rn = 1 ) SELECT From 861cedfc8359f0fb2f3a56e46ead6e37c2c70bb3 Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:43:39 +0200 Subject: [PATCH 5/9] Split PumpSwap BuyExactQuoteIn trades --- .../models/_sector/dex/pumpswap/_schema.yml | 16 ++- .../pumpswap/pumpswap_solana_base_trades.sql | 4 + .../pumpswap_solana_base_trades_backfill.sql | 12 -- ...uy_exact_quote_in_base_trades_backfill.sql | 111 ++++++++++++++++++ .../pumpswap_solana_stg_decoded_swaps.sql | 102 +--------------- 5 files changed, 131 insertions(+), 114 deletions(-) create mode 100644 dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml b/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml index af5a96e976b..f114046f13f 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml @@ -9,7 +9,7 @@ models: tags: [ 'solana','dex','pumpswap' ] event_time: block_time description: > - staging model for pumpswap swap data from decoded call and event tables + staging model for pumpswap swap data from decoded tables data_tests: - dbt_utils.unique_combination_of_columns: arguments: @@ -29,6 +29,20 @@ models: arguments: combination_of_columns: [ 'block_month', 'surrogate_key' ] + - name: pumpswap_solana_buy_exact_quote_in_base_trades_backfill + meta: + blockchain: solana + contributors: [ krishhh ] + config: + tags: [ 'solana','dex','microbatch' ] + description: > + Pumpswap BuyExactQuoteIn trades on Solana sourced from buy events until the AMM call is decoded + data_tests: + - check_columns_solana_dex_trades + - dbt_utils.unique_combination_of_columns: + arguments: + combination_of_columns: [ 'block_month', 'surrogate_key' ] + - name: pumpswap_solana_base_trades meta: blockchain: solana diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql index 91ad5b80fdc..468cc9de7fb 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql @@ -7,3 +7,7 @@ }} select * from {{ ref('pumpswap_solana_base_trades_backfill') }} + +union all + +select * from {{ ref('pumpswap_solana_buy_exact_quote_in_base_trades_backfill') }} diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql index 5eec72bd1c7..4f3e8f71af5 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql @@ -45,7 +45,6 @@ WITH pools AS ( , account_pool_quote_token_account , account_protocol_fee_recipient_token_account , base_amount - , quote_amount , is_buy , surrogate_key FROM {{ ref('pumpswap_solana_stg_decoded_swaps') }} @@ -121,17 +120,6 @@ WITH pools AS ( END ) ) - WHERE sf.quote_amount IS NULL - - UNION ALL - - SELECT - sf.* - , sf.base_amount AS base_token_amount - , sf.quote_amount AS quote_token_amount - , 1 AS rn - FROM swaps_with_fees sf - WHERE sf.quote_amount IS NOT NULL ) , trades AS ( diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql new file mode 100644 index 00000000000..8330ad337fc --- /dev/null +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql @@ -0,0 +1,111 @@ +{{ + config( + schema = 'pumpswap_solana' + , alias = 'buy_exact_quote_in_base_trades_backfill' + , tags = ['microbatch'] + , partition_by = ['block_month'] + , materialized = 'incremental' + , file_format = 'delta' + , incremental_strategy = 'microbatch' + , event_time = 'block_time' + , begin = '2025-11-01' + , batch_size = 'month' + , lookback = 1 + , unique_key = ['block_month', 'surrogate_key'] + ) +}} + +{% set begin = '2025-11-01' %} +{% set batch_start = model.batch.event_time_start if model.batch else begin %} +{% set batch_end = model.batch.event_time_end if model.batch else '2099-01-01' %} + +WITH pools AS ( + SELECT + pool + , baseMint + , quoteMint + , is_valid_pool + FROM {{ ref('pumpswap_solana_pools') }} +) + +, pool_accounts AS ( + SELECT + account_pool AS pool + , arbitrary(account_pool_base_token_account) AS pool_base_token_account + , arbitrary(account_pool_quote_token_account) AS pool_quote_token_account + FROM {{ source('pumpdotfun_solana', 'pump_amm_call_create_pool') }} + WHERE call_block_time >= TIMESTAMP '2025-02-20' + GROUP BY 1 +) + +, event_only_buys AS ( + SELECT + e.evt_block_slot AS block_slot + , e.evt_block_date AS block_date + , CAST(date_trunc('month', e.evt_block_date) AS DATE) AS block_month + , e.evt_block_time AS block_time + , e.evt_inner_instruction_index AS inner_instruction_index + , e.evt_outer_instruction_index AS outer_instruction_index + , e.evt_outer_executing_account AS outer_executing_account + , e.evt_tx_id AS tx_id + , e.evt_tx_index AS tx_index + , e.pool + , e.user AS user_account + , e.user_base_token_account AS account_user_base_token_account + , e.user_quote_token_account AS account_user_quote_token_account + , pa.pool_base_token_account AS account_pool_base_token_account + , pa.pool_quote_token_account AS account_pool_quote_token_account + , e.protocol_fee_recipient_token_account AS account_protocol_fee_recipient_token_account + , e.base_amount_out AS base_amount + , e.quote_amount_in AS quote_amount + , CAST((e.lp_fee_basis_points + e.protocol_fee_basis_points) AS DOUBLE) / 10000.0 AS fee_tier + , {{ solana_instruction_key( + 'e.evt_block_slot' + , 'e.evt_tx_index' + , 'e.evt_outer_instruction_index' + , 'COALESCE(e.evt_inner_instruction_index, 0)' + ) }} AS surrogate_key + FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e + INNER JOIN pool_accounts pa + ON pa.pool = e.pool + LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c + ON c.call_block_date = e.evt_block_date + AND c.call_tx_id = e.evt_tx_id + AND c.call_outer_instruction_index = e.evt_outer_instruction_index + AND c.account_pool = e.pool + AND c.base_amount_out = e.base_amount_out + AND c.call_block_date >= DATE '{{ begin }}' + WHERE c.call_tx_id IS NULL + AND e.evt_block_time >= TIMESTAMP '{{ batch_start }}' + AND e.evt_block_time < TIMESTAMP '{{ batch_end }}' +) + +SELECT + 'solana' AS blockchain + , 'pumpswap' AS project + , 1 AS version + , b.block_month + , b.block_time + , b.block_slot + , CASE + WHEN b.outer_executing_account = 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' THEN 'direct' + ELSE b.outer_executing_account + END AS trade_source + , b.base_amount AS token_bought_amount_raw + , b.quote_amount AS token_sold_amount_raw + , b.fee_tier + , p.quoteMint AS token_sold_mint_address + , p.baseMint AS token_bought_mint_address + , b.account_pool_quote_token_account AS token_sold_vault + , b.account_pool_base_token_account AS token_bought_vault + , b.pool AS project_program_id + , 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' AS project_main_id + , b.user_account AS trader_id + , b.tx_id + , b.outer_instruction_index + , b.inner_instruction_index + , b.tx_index + , b.surrogate_key +FROM event_only_buys b +LEFT JOIN pools p ON p.pool = b.pool +WHERE COALESCE(p.is_valid_pool, false) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql index bfdf7e85df1..ede4e85740a 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/staging/pumpswap_solana_stg_decoded_swaps.sql @@ -6,88 +6,14 @@ , materialized = 'incremental' , file_format = 'delta' , incremental_strategy = 'merge' - , on_schema_change = 'sync_all_columns' , incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_date')] , unique_key = ['block_month', 'block_date', 'surrogate_key'] ) }} {% set project_start_date = '2025-02-20' %} -{% set event_start_date = '2025-11-01' %} -WITH event_only_swaps AS ( - SELECT - e.evt_block_time - , e.evt_block_slot - , e.evt_block_date - , e.evt_outer_instruction_index - , e.evt_inner_instruction_index - , e.evt_tx_id - , e.evt_tx_index - , e.evt_outer_executing_account - , e.pool - , e.user - , e.user_base_token_account - , e.user_quote_token_account - , e.protocol_fee_recipient_token_account - , e.base_amount_out - , e.quote_amount_in - FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e - LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c - ON c.call_block_date = e.evt_block_date - AND c.call_tx_id = e.evt_tx_id - AND c.call_outer_instruction_index = e.evt_outer_instruction_index - AND c.account_pool = e.pool - AND c.base_amount_out = e.base_amount_out - {% if is_incremental() %} - AND {{ incremental_predicate('c.call_block_date') }} - {% else %} - AND c.call_block_date >= DATE '{{ event_start_date }}' - {% endif %} - WHERE c.call_tx_id IS NULL - {% if is_incremental() %} - AND {{ incremental_predicate('e.evt_block_date') }} - {% else %} - AND e.evt_block_date >= DATE '{{ event_start_date }}' - {% endif %} -) - -, pool_accounts AS ( - SELECT - account_pool AS pool - , arbitrary(account_pool_base_token_account) AS pool_base_token_account - , arbitrary(account_pool_quote_token_account) AS pool_quote_token_account - FROM {{ source('pumpdotfun_solana', 'pump_amm_call_create_pool') }} - WHERE call_block_time >= TIMESTAMP '{{ project_start_date }}' - GROUP BY 1 -) - -, event_swaps AS ( - SELECT - e.evt_block_time AS call_block_time - , e.evt_block_slot AS call_block_slot - , e.evt_block_date AS call_block_date - , e.evt_outer_instruction_index AS call_outer_instruction_index - , e.evt_inner_instruction_index AS call_inner_instruction_index - , e.evt_tx_id AS call_tx_id - , e.evt_tx_index AS call_tx_index - , e.evt_outer_executing_account AS call_outer_executing_account - , e.pool AS account_pool - , e.user AS account_user - , e.user_base_token_account AS account_user_base_token_account - , e.user_quote_token_account AS account_user_quote_token_account - , p.pool_base_token_account AS account_pool_base_token_account - , p.pool_quote_token_account AS account_pool_quote_token_account - , e.protocol_fee_recipient_token_account AS account_protocol_fee_recipient_token_account - , e.base_amount_out AS base_amount - , e.quote_amount_in AS quote_amount - , 1 AS is_buy - FROM event_only_swaps e - INNER JOIN pool_accounts p - ON p.pool = e.pool -) - -, swaps AS ( +WITH swaps AS ( SELECT call_block_time , call_block_slot @@ -105,7 +31,6 @@ WITH event_only_swaps AS ( , account_pool_quote_token_account , account_protocol_fee_recipient_token_account , base_amount_out AS base_amount - , CAST(NULL AS UINT256) AS quote_amount , 1 AS is_buy FROM {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} WHERE 1=1 @@ -134,7 +59,6 @@ WITH event_only_swaps AS ( , account_pool_quote_token_account , account_protocol_fee_recipient_token_account , base_amount_in AS base_amount - , CAST(NULL AS UINT256) AS quote_amount , 0 AS is_buy FROM {{ source('pumpdotfun_solana', 'pump_amm_call_sell') }} WHERE 1=1 @@ -143,29 +67,6 @@ WITH event_only_swaps AS ( {% else %} AND call_block_time >= TIMESTAMP '{{ project_start_date }}' {% endif %} - - UNION ALL - - SELECT - call_block_time - , call_block_slot - , call_block_date - , call_outer_instruction_index - , call_inner_instruction_index - , call_tx_id - , call_tx_index - , call_outer_executing_account - , account_pool - , account_user - , account_user_base_token_account - , account_user_quote_token_account - , account_pool_base_token_account - , account_pool_quote_token_account - , account_protocol_fee_recipient_token_account - , base_amount - , quote_amount - , 1 AS is_buy - FROM event_swaps ) SELECT @@ -187,7 +88,6 @@ SELECT , sp.account_pool_quote_token_account , sp.account_protocol_fee_recipient_token_account , sp.base_amount - , sp.quote_amount , sp.is_buy , {{ solana_instruction_key( 'sp.call_block_slot' From 43a90d4593d809ef769f6b907f5e2cff1f8b2f02 Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Tue, 30 Jun 2026 11:22:07 +0200 Subject: [PATCH 6/9] Integrate PumpSwap BuyExactQuoteIn trades --- .../models/_sector/dex/pumpswap/_schema.yml | 14 --- .../pumpswap/pumpswap_solana_base_trades.sql | 4 - .../pumpswap_solana_base_trades_backfill.sql | 75 +++++++++++- ...uy_exact_quote_in_base_trades_backfill.sql | 111 ------------------ 4 files changed, 73 insertions(+), 131 deletions(-) delete mode 100644 dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml b/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml index f114046f13f..e6a31497816 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/_schema.yml @@ -29,20 +29,6 @@ models: arguments: combination_of_columns: [ 'block_month', 'surrogate_key' ] - - name: pumpswap_solana_buy_exact_quote_in_base_trades_backfill - meta: - blockchain: solana - contributors: [ krishhh ] - config: - tags: [ 'solana','dex','microbatch' ] - description: > - Pumpswap BuyExactQuoteIn trades on Solana sourced from buy events until the AMM call is decoded - data_tests: - - check_columns_solana_dex_trades - - dbt_utils.unique_combination_of_columns: - arguments: - combination_of_columns: [ 'block_month', 'surrogate_key' ] - - name: pumpswap_solana_base_trades meta: blockchain: solana diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql index 468cc9de7fb..91ad5b80fdc 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades.sql @@ -7,7 +7,3 @@ }} select * from {{ ref('pumpswap_solana_base_trades_backfill') }} - -union all - -select * from {{ ref('pumpswap_solana_buy_exact_quote_in_base_trades_backfill') }} diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql index 4f3e8f71af5..821e120afe1 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql @@ -1,3 +1,4 @@ +{# TEMP CI scope: revert begin to protocol_begin before merge. #} {{ config( schema = 'pumpswap_solana' @@ -8,7 +9,7 @@ , file_format = 'delta' , incremental_strategy = 'microbatch' , event_time = 'block_time' - , begin = '2025-02-20' + , begin = '2026-06-01' , batch_size = var('pumpswap_batch_size', 'day') , lookback = 1 , unique_key = ['block_month', 'surrogate_key'] @@ -16,6 +17,12 @@ ) }} +{% set protocol_begin = '2025-02-20' %} +{% set begin = '2026-06-01' %} +{% set buy_exact_quote_in_begin = '2025-11-01' %} +{% set batch_start = model.batch.event_time_start if model.batch else begin %} +{% set batch_end = model.batch.event_time_end if model.batch else '2099-01-01' %} + WITH pools AS ( SELECT pool @@ -25,6 +32,16 @@ WITH pools AS ( FROM {{ ref('pumpswap_solana_pools') }} ) +, pool_accounts AS ( + SELECT + account_pool AS pool + , arbitrary(account_pool_base_token_account) AS pool_base_token_account + , arbitrary(account_pool_quote_token_account) AS pool_quote_token_account + FROM {{ source('pumpdotfun_solana', 'pump_amm_call_create_pool') }} + WHERE call_block_time >= TIMESTAMP '{{ protocol_begin }}' + GROUP BY 1 +) + , swaps AS ( SELECT block_slot @@ -122,7 +139,7 @@ WITH pools AS ( ) ) -, trades AS ( +, decoded_trades AS ( SELECT sp.block_time , sp.block_slot @@ -151,6 +168,60 @@ WITH pools AS ( AND COALESCE(p.is_valid_pool, false) ) +, buy_exact_quote_in_trades AS ( + SELECT + e.evt_block_time AS block_time + , e.evt_block_slot AS block_slot + , CAST(date_trunc('month', e.evt_block_date) AS DATE) AS block_month + , {{ solana_instruction_key( + 'e.evt_block_slot' + , 'e.evt_tx_index' + , 'e.evt_outer_instruction_index' + , 'COALESCE(e.evt_inner_instruction_index, 0)' + ) }} AS surrogate_key + , CASE + WHEN e.evt_outer_executing_account = 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' THEN 'direct' + ELSE e.evt_outer_executing_account + END AS trade_source + , p.baseMint AS token_bought_mint_address + , e.base_amount_out AS token_bought_amount_raw + , p.quoteMint AS token_sold_mint_address + , e.quote_amount_in AS token_sold_amount_raw + , CAST((e.lp_fee_basis_points + e.protocol_fee_basis_points) AS DOUBLE) / 10000.0 AS fee_tier + , e.pool AS pool_id + , e.user AS trader_id + , e.evt_tx_id AS tx_id + , e.evt_outer_instruction_index AS outer_instruction_index + , e.evt_inner_instruction_index AS inner_instruction_index + , e.evt_tx_index AS tx_index + , pa.pool_base_token_account AS token_bought_vault + , pa.pool_quote_token_account AS token_sold_vault + FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e + INNER JOIN pool_accounts pa + ON pa.pool = e.pool + LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c + ON c.call_block_date = e.evt_block_date + AND c.call_tx_id = e.evt_tx_id + AND c.call_outer_instruction_index = e.evt_outer_instruction_index + AND c.account_pool = e.pool + AND c.base_amount_out = e.base_amount_out + AND c.call_block_date >= DATE '{{ buy_exact_quote_in_begin }}' + LEFT JOIN pools p ON p.pool = e.pool + WHERE c.call_tx_id IS NULL + AND e.evt_block_time >= TIMESTAMP '{{ buy_exact_quote_in_begin }}' + AND e.evt_block_time >= TIMESTAMP '{{ batch_start }}' + AND e.evt_block_time < TIMESTAMP '{{ batch_end }}' + AND COALESCE(p.is_valid_pool, false) +) + +, trades AS ( + SELECT * FROM decoded_trades + + UNION ALL + + SELECT * FROM buy_exact_quote_in_trades +) + SELECT 'solana' AS blockchain , 'pumpswap' AS project diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql deleted file mode 100644 index 8330ad337fc..00000000000 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_buy_exact_quote_in_base_trades_backfill.sql +++ /dev/null @@ -1,111 +0,0 @@ -{{ - config( - schema = 'pumpswap_solana' - , alias = 'buy_exact_quote_in_base_trades_backfill' - , tags = ['microbatch'] - , partition_by = ['block_month'] - , materialized = 'incremental' - , file_format = 'delta' - , incremental_strategy = 'microbatch' - , event_time = 'block_time' - , begin = '2025-11-01' - , batch_size = 'month' - , lookback = 1 - , unique_key = ['block_month', 'surrogate_key'] - ) -}} - -{% set begin = '2025-11-01' %} -{% set batch_start = model.batch.event_time_start if model.batch else begin %} -{% set batch_end = model.batch.event_time_end if model.batch else '2099-01-01' %} - -WITH pools AS ( - SELECT - pool - , baseMint - , quoteMint - , is_valid_pool - FROM {{ ref('pumpswap_solana_pools') }} -) - -, pool_accounts AS ( - SELECT - account_pool AS pool - , arbitrary(account_pool_base_token_account) AS pool_base_token_account - , arbitrary(account_pool_quote_token_account) AS pool_quote_token_account - FROM {{ source('pumpdotfun_solana', 'pump_amm_call_create_pool') }} - WHERE call_block_time >= TIMESTAMP '2025-02-20' - GROUP BY 1 -) - -, event_only_buys AS ( - SELECT - e.evt_block_slot AS block_slot - , e.evt_block_date AS block_date - , CAST(date_trunc('month', e.evt_block_date) AS DATE) AS block_month - , e.evt_block_time AS block_time - , e.evt_inner_instruction_index AS inner_instruction_index - , e.evt_outer_instruction_index AS outer_instruction_index - , e.evt_outer_executing_account AS outer_executing_account - , e.evt_tx_id AS tx_id - , e.evt_tx_index AS tx_index - , e.pool - , e.user AS user_account - , e.user_base_token_account AS account_user_base_token_account - , e.user_quote_token_account AS account_user_quote_token_account - , pa.pool_base_token_account AS account_pool_base_token_account - , pa.pool_quote_token_account AS account_pool_quote_token_account - , e.protocol_fee_recipient_token_account AS account_protocol_fee_recipient_token_account - , e.base_amount_out AS base_amount - , e.quote_amount_in AS quote_amount - , CAST((e.lp_fee_basis_points + e.protocol_fee_basis_points) AS DOUBLE) / 10000.0 AS fee_tier - , {{ solana_instruction_key( - 'e.evt_block_slot' - , 'e.evt_tx_index' - , 'e.evt_outer_instruction_index' - , 'COALESCE(e.evt_inner_instruction_index, 0)' - ) }} AS surrogate_key - FROM {{ source('pumpdotfun_solana', 'pump_amm_evt_buyevent') }} e - INNER JOIN pool_accounts pa - ON pa.pool = e.pool - LEFT JOIN {{ source('pumpdotfun_solana', 'pump_amm_call_buy') }} c - ON c.call_block_date = e.evt_block_date - AND c.call_tx_id = e.evt_tx_id - AND c.call_outer_instruction_index = e.evt_outer_instruction_index - AND c.account_pool = e.pool - AND c.base_amount_out = e.base_amount_out - AND c.call_block_date >= DATE '{{ begin }}' - WHERE c.call_tx_id IS NULL - AND e.evt_block_time >= TIMESTAMP '{{ batch_start }}' - AND e.evt_block_time < TIMESTAMP '{{ batch_end }}' -) - -SELECT - 'solana' AS blockchain - , 'pumpswap' AS project - , 1 AS version - , b.block_month - , b.block_time - , b.block_slot - , CASE - WHEN b.outer_executing_account = 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' THEN 'direct' - ELSE b.outer_executing_account - END AS trade_source - , b.base_amount AS token_bought_amount_raw - , b.quote_amount AS token_sold_amount_raw - , b.fee_tier - , p.quoteMint AS token_sold_mint_address - , p.baseMint AS token_bought_mint_address - , b.account_pool_quote_token_account AS token_sold_vault - , b.account_pool_base_token_account AS token_bought_vault - , b.pool AS project_program_id - , 'pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA' AS project_main_id - , b.user_account AS trader_id - , b.tx_id - , b.outer_instruction_index - , b.inner_instruction_index - , b.tx_index - , b.surrogate_key -FROM event_only_buys b -LEFT JOIN pools p ON p.pool = b.pool -WHERE COALESCE(p.is_valid_pool, false) From fc158c11b97de0da1654c920460be1bcda3f9e7e Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Tue, 30 Jun 2026 11:53:35 +0200 Subject: [PATCH 7/9] Clean up PumpSwap microbatch filters --- .../pumpswap_solana_base_trades_backfill.sql | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql index 821e120afe1..77d4e1fe907 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql @@ -17,12 +17,6 @@ ) }} -{% set protocol_begin = '2025-02-20' %} -{% set begin = '2026-06-01' %} -{% set buy_exact_quote_in_begin = '2025-11-01' %} -{% set batch_start = model.batch.event_time_start if model.batch else begin %} -{% set batch_end = model.batch.event_time_end if model.batch else '2099-01-01' %} - WITH pools AS ( SELECT pool @@ -38,7 +32,7 @@ WITH pools AS ( , arbitrary(account_pool_base_token_account) AS pool_base_token_account , arbitrary(account_pool_quote_token_account) AS pool_quote_token_account FROM {{ source('pumpdotfun_solana', 'pump_amm_call_create_pool') }} - WHERE call_block_time >= TIMESTAMP '{{ protocol_begin }}' + WHERE call_block_time >= TIMESTAMP '2025-02-20' GROUP BY 1 ) @@ -205,12 +199,10 @@ WITH pools AS ( AND c.call_outer_instruction_index = e.evt_outer_instruction_index AND c.account_pool = e.pool AND c.base_amount_out = e.base_amount_out - AND c.call_block_date >= DATE '{{ buy_exact_quote_in_begin }}' + AND c.call_block_date >= DATE '2025-11-01' LEFT JOIN pools p ON p.pool = e.pool WHERE c.call_tx_id IS NULL - AND e.evt_block_time >= TIMESTAMP '{{ buy_exact_quote_in_begin }}' - AND e.evt_block_time >= TIMESTAMP '{{ batch_start }}' - AND e.evt_block_time < TIMESTAMP '{{ batch_end }}' + AND e.evt_block_time >= TIMESTAMP '2025-11-01' AND COALESCE(p.is_valid_pool, false) ) From 401319c2fe13a4243a036e2c37b931dbed066867 Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:23:14 +0200 Subject: [PATCH 8/9] Optimize PumpSwap BuyEvent microbatch CI --- .../dex/pumpswap/pumpswap_solana_base_trades_backfill.sql | 2 +- dbt_subprojects/solana/models/_sources.yml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql index 77d4e1fe907..ebe66a52a04 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql @@ -9,7 +9,7 @@ , file_format = 'delta' , incremental_strategy = 'microbatch' , event_time = 'block_time' - , begin = '2026-06-01' + , begin = '2026-06-29' , batch_size = var('pumpswap_batch_size', 'day') , lookback = 1 , unique_key = ['block_month', 'surrogate_key'] diff --git a/dbt_subprojects/solana/models/_sources.yml b/dbt_subprojects/solana/models/_sources.yml index 085447dbed6..1ea01097f3d 100644 --- a/dbt_subprojects/solana/models/_sources.yml +++ b/dbt_subprojects/solana/models/_sources.yml @@ -46,11 +46,15 @@ sources: schema: pumpdotfun_solana tables: - name: pump_amm_call_buy + config: + event_time: call_block_date - name: pump_amm_call_sell - name: pump_amm_call_create_pool - name: pump_amm_call_create_config - name: pump_amm_call_update_fee_config - name: pump_amm_evt_buyevent + config: + event_time: evt_block_date - name: raydium_solana description: "Raydium protocol decoded tables" From 5c0e21639929bad5edd021237aa31cabb206fb79 Mon Sep 17 00:00:00 2001 From: 0xRob <83790096+0xRobin@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:43:55 +0200 Subject: [PATCH 9/9] Expand PumpSwap CI window --- .../dex/pumpswap/pumpswap_solana_base_trades_backfill.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql index ebe66a52a04..77d4e1fe907 100644 --- a/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql +++ b/dbt_subprojects/solana/models/_sector/dex/pumpswap/pumpswap_solana_base_trades_backfill.sql @@ -9,7 +9,7 @@ , file_format = 'delta' , incremental_strategy = 'microbatch' , event_time = 'block_time' - , begin = '2026-06-29' + , begin = '2026-06-01' , batch_size = var('pumpswap_batch_size', 'day') , lookback = 1 , unique_key = ['block_month', 'surrogate_key']