-
Notifications
You must be signed in to change notification settings - Fork 1.4k
feat(squeeze): launchpad deployments, trades, labels (Base, Robinhood, Solana) #9904
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| {{ config( | ||
| alias = 'squeeze' | ||
| , post_hook = '{{ hide_spells() }}' | ||
| ) }} | ||
|
|
||
| -- Static identifier labels for Squeeze launchpad contracts / wallets. | ||
| -- Source of truth: Squeeze utils/squeezeIntegration.js | ||
| -- Note: Airlock contracts are shared across Doppler integrators — labels mark | ||
| -- the contracts Squeeze uses; launch attribution still requires integrator filter. | ||
|
|
||
| SELECT blockchain, address, name, category, contributor, source, created_at, updated_at, model_name, label_type | ||
| FROM ( | ||
| VALUES | ||
| ('base', 0x6C61feE73584670AbEd65101946734006DAB12d6, 'Squeeze: Integrator / Platform Fee Wallet', 'infrastructure', 'flockain', 'static', TIMESTAMP '2026-07-25', now(), 'labels_squeeze', 'identifier') | ||
| , ('robinhood', 0x6C61feE73584670AbEd65101946734006DAB12d6, 'Squeeze: Integrator / Platform Fee Wallet', 'infrastructure', 'flockain', 'static', TIMESTAMP '2026-07-25', now(), 'labels_squeeze', 'identifier') | ||
| , ('base', 0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12, 'Doppler Airlock (Base; Squeeze uses integrator filter)', 'infrastructure', 'flockain', 'static', TIMESTAMP '2026-07-25', now(), 'labels_squeeze', 'identifier') | ||
| , ('robinhood', 0xeb7c034704ef8dcd2d32324c1545f62fb4ad0862, 'Doppler Airlock (Robinhood; Squeeze uses integrator filter)', 'infrastructure', 'flockain', 'static', TIMESTAMP '2026-07-25', now(), 'labels_squeeze', 'identifier') | ||
| , ('base', 0x65de470da664a5be139a5d812be5fda0d76cc951, 'Squeeze fee source: Base Multicurve Initializer', 'infrastructure', 'flockain', 'static', TIMESTAMP '2026-07-25', now(), 'labels_squeeze', 'identifier') | ||
| , ('robinhood', 0x4e3468951d49f2eea976ed0d6e75ffcb44a9a544, 'Squeeze fee source: Robinhood Hook Initializer', 'infrastructure', 'flockain', 'static', TIMESTAMP '2026-07-25', now(), 'labels_squeeze', 'identifier') | ||
| ) AS t (blockchain, address, name, category, contributor, source, created_at, updated_at, model_name, label_type) | ||
|
|
||
| UNION ALL | ||
|
|
||
| SELECT | ||
| 'solana' AS blockchain | ||
| , from_base58('FpKUW9vDSRPTByNu4MerR2SU4YPkJU9pLWQTnChGAW3h') AS address | ||
| , 'Squeeze: LaunchLab PlatformConfig PDA' AS name | ||
| , 'infrastructure' AS category | ||
| , 'flockain' AS contributor | ||
| , 'static' AS source | ||
| , TIMESTAMP '2026-07-25' AS created_at | ||
| , now() AS updated_at | ||
| , 'labels_squeeze' AS model_name | ||
| , 'identifier' AS label_type | ||
|
|
||
| UNION ALL | ||
|
|
||
| SELECT | ||
| 'solana' AS blockchain | ||
| , from_base58('2qUg6a3yCSATL7stUyJHDBgFJwLW8DXzemZQDePxscws') AS address | ||
| , 'Squeeze: LaunchLab Claim / Platform Admin Wallet' AS name | ||
| , 'infrastructure' AS category | ||
| , 'flockain' AS contributor | ||
| , 'static' AS source | ||
| , TIMESTAMP '2026-07-25' AS created_at | ||
| , now() AS updated_at | ||
| , 'labels_squeeze' AS model_name | ||
| , 'identifier' AS label_type |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| version: 2 | ||
|
|
||
| models: | ||
| - name: labels_squeeze | ||
| meta: | ||
| blockchain: base, robinhood, solana | ||
| sector: labels | ||
| project: squeeze | ||
| contributors: flockain | ||
| config: | ||
| tags: ['labels', 'squeeze', 'launchpad'] | ||
| description: "Squeeze launchpad identifier labels (integrator, Airlocks, LaunchLab PDAs)" | ||
| columns: | ||
| - name: blockchain | ||
| description: "Blockchain" | ||
| - name: address | ||
| description: "Address (EVM) or Solana pubkey" | ||
| - name: name | ||
| description: "Label name" | ||
| - name: category | ||
| description: "Label category" | ||
| - name: contributor | ||
| description: "Contributor" | ||
| - name: source | ||
| description: "static | query" | ||
| - name: created_at | ||
| description: "Created at" | ||
| - name: updated_at | ||
| description: "Updated at" | ||
| - name: model_name | ||
| description: "Model name" | ||
| - name: label_type | ||
| description: "identifier | usage | persona" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| # sources placeholder — update namespaces after Airlock ABI decode on Dune | ||
|
|
||
| version: 2 | ||
|
|
||
| sources: | ||
| - name: doppler_base | ||
| description: > | ||
| Decoded Doppler Airlock on Base. Confirm schema/table names in Dune after | ||
| submitting ABI for 0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12. | ||
| tables: | ||
| - name: Airlock_call_create | ||
| description: Decoded Airlock.create calls including integrator field | ||
|
|
||
| - name: doppler_robinhood | ||
| description: > | ||
| Decoded Doppler Airlock on Robinhood (4663). Confirm after ABI submit for | ||
| 0xeb7c034704ef8dcd2d32324c1545f62fb4ad0862. | ||
| tables: | ||
| - name: Airlock_call_create | ||
| description: Decoded Airlock.create calls including integrator field |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| {{ config( | ||
| alias = 'deployments', | ||
| schema = 'squeeze_base', | ||
| materialized = 'incremental', | ||
| file_format = 'delta', | ||
| incremental_strategy = 'merge', | ||
| incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')], | ||
| unique_key = 'token' | ||
| ) }} | ||
|
|
||
| {% set project_start_date = '2025-01-01' %} | ||
| {% set blockchain = 'base' %} | ||
| {% set airlock = '0x660eAaEdEBc968f8f3694354FA8EC0b4c5Ba8D12' %} | ||
| {% set integrator = '0x6C61feE73584670AbEd65101946734006DAB12d6' %} | ||
|
|
||
| -- Prerequisite: Doppler Airlock ABI decoded on Dune. | ||
| -- Confirm actual source schema/table names after submit, then update source(). | ||
| -- Integrator is on the create() call, NOT on Create event args. | ||
|
|
||
| SELECT | ||
| c.call_block_time AS block_time | ||
| , date_trunc('day', c.call_block_time) AS block_date | ||
| , date_trunc('month', c.call_block_time) AS block_month | ||
| , '{{ blockchain }}' AS blockchain | ||
| , 'squeeze' AS project | ||
| , c.output_asset AS token | ||
| , c.output_pool AS pool | ||
| , c.integrator AS integrator | ||
| , c.call_tx_from AS deployer | ||
| , c.call_tx_hash AS tx_hash | ||
| FROM {{ source('doppler_base', 'Airlock_call_create') }} c | ||
| WHERE c.call_success = true | ||
| AND c.contract_address = {{ airlock }} | ||
| AND c.integrator = {{ integrator }} | ||
| {% if is_incremental() %} | ||
| AND {{ incremental_predicate('c.call_block_time') }} | ||
| {% else %} | ||
| AND c.call_block_time >= TIMESTAMP '{{ project_start_date }}' | ||
| {% endif %} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,45 @@ | ||
| version: 2 | ||
|
|
||
| models: | ||
| - name: squeeze_base_deployments | ||
| meta: | ||
| blockchain: base | ||
| project: squeeze | ||
| contributors: flockain | ||
| config: | ||
| tags: ['base', 'squeeze', 'launchpad', 'doppler'] | ||
| description: > | ||
| Tokens launched through Squeeze on Base via Doppler Airlock where | ||
| integrator = 0x6C61feE73584670AbEd65101946734006DAB12d6. | ||
| Requires decoded Airlock_call_create (ABI submit). | ||
| data_tests: | ||
| - dbt_utils.unique_combination_of_columns: | ||
| arguments: | ||
| combination_of_columns: ['token'] | ||
| columns: | ||
| - name: token | ||
| description: ERC-20 asset address from Airlock create | ||
| data_tests: | ||
| - not_null | ||
| - name: integrator | ||
| description: Doppler integrator (Squeeze identity) | ||
| - name: tx_hash | ||
| description: Launch transaction | ||
|
|
||
| - name: squeeze_base_trades | ||
| meta: | ||
| blockchain: base | ||
| project: squeeze | ||
| contributors: flockain | ||
| config: | ||
| tags: ['base', 'squeeze', 'launchpad', 'dex'] | ||
| description: > | ||
| dex.trades rows touching Squeeze-launched Base tokens (attribution; overlaps Uniswap volume). | ||
| data_tests: | ||
| - dbt_utils.unique_combination_of_columns: | ||
| arguments: | ||
| combination_of_columns: | ||
| - block_month | ||
| - blockchain | ||
| - tx_hash | ||
| - evt_index | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| {{ config( | ||
| alias = 'trades', | ||
| schema = 'squeeze_base', | ||
| partition_by = ['block_month'], | ||
| materialized = 'incremental', | ||
| file_format = 'delta', | ||
| incremental_strategy = 'merge', | ||
| incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')], | ||
| unique_key = ['block_month', 'blockchain', 'tx_hash', 'evt_index'] | ||
| ) }} | ||
|
|
||
| {% set project_start_date = '2025-01-01' %} | ||
| {% set blockchain = 'base' %} | ||
|
|
||
| -- Attribution table: Uniswap (etc.) volume on Squeeze-launched tokens. | ||
| -- Double-counted vs dex.trades project volume — intentional launchpad lens. | ||
|
|
||
| WITH deployments AS ( | ||
| SELECT * FROM {{ ref('squeeze_base_deployments') }} | ||
| ) | ||
|
|
||
| SELECT | ||
| t.block_time | ||
| , date_trunc('day', t.block_time) AS block_date | ||
| , date_trunc('month', t.block_time) AS block_month | ||
| , t.blockchain | ||
| , 'squeeze' AS project | ||
| , t.project AS dex_project | ||
| , t.version AS dex_version | ||
| , t.token_bought_amount | ||
| , t.token_sold_amount | ||
| , t.token_bought_symbol | ||
| , t.token_sold_symbol | ||
| , t.token_bought_address | ||
| , t.token_sold_address | ||
| , t.amount_usd | ||
| , t.taker AS user | ||
| , t.tx_hash | ||
| , t.evt_index | ||
| FROM {{ source('dex', 'trades') }} t | ||
| INNER JOIN deployments d | ||
| ON t.blockchain = d.blockchain | ||
| AND ( | ||
| t.token_bought_address = d.token | ||
| OR t.token_sold_address = d.token | ||
| ) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OR-join on dex.tradesHigh Severity The join to Additional Locations (1)Triggered by learned rule: Flag OR-join conditions forcing Trino NestedLoopJoin — split into UNION ALL of equi-joins Reviewed by Cursor Bugbot for commit b83fbe4. Configure here. |
||
| WHERE t.blockchain = '{{ blockchain }}' | ||
| {% if is_incremental() %} | ||
| AND {{ incremental_predicate('t.block_time') }} | ||
| {% else %} | ||
| AND t.block_time >= TIMESTAMP '{{ project_start_date }}' | ||
| {% endif %} | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| {{ config( | ||
| alias = 'deployments', | ||
| schema = 'squeeze_robinhood', | ||
| materialized = 'incremental', | ||
| file_format = 'delta', | ||
| incremental_strategy = 'merge', | ||
| incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')], | ||
| unique_key = 'token' | ||
| ) }} | ||
|
|
||
| {% set project_start_date = '2026-01-01' %} | ||
| {% set blockchain = 'robinhood' %} | ||
| {% set airlock = '0xeb7c034704ef8dcd2d32324c1545f62fb4ad0862' %} | ||
| {% set integrator = '0x6C61feE73584670AbEd65101946734006DAB12d6' %} | ||
|
|
||
| -- Robinhood (4663) is a supported Dune chain (`robinhood.*` raw + dex scaffolding). | ||
| -- Decoded Airlock_call_create still requires ABI submit on this chain. | ||
|
|
||
| SELECT | ||
| c.call_block_time AS block_time | ||
| , date_trunc('day', c.call_block_time) AS block_date | ||
| , date_trunc('month', c.call_block_time) AS block_month | ||
| , '{{ blockchain }}' AS blockchain | ||
| , 'squeeze' AS project | ||
| , c.output_asset AS token | ||
| , c.output_pool AS pool | ||
| , c.integrator AS integrator | ||
| , c.call_tx_from AS deployer | ||
| , c.call_tx_hash AS tx_hash | ||
| FROM {{ source('doppler_robinhood', 'Airlock_call_create') }} c | ||
| WHERE c.call_success = true | ||
| AND c.contract_address = {{ airlock }} | ||
| AND c.integrator = {{ integrator }} | ||
| {% if is_incremental() %} | ||
| AND {{ incremental_predicate('c.call_block_time') }} | ||
| {% else %} | ||
| AND c.call_block_time >= TIMESTAMP '{{ project_start_date }}' | ||
| {% endif %} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| version: 2 | ||
|
|
||
| models: | ||
| - name: squeeze_robinhood_deployments | ||
| meta: | ||
| blockchain: robinhood | ||
| project: squeeze | ||
| contributors: flockain | ||
| config: | ||
| tags: ['robinhood', 'squeeze', 'launchpad', 'doppler'] | ||
| description: > | ||
| Tokens launched through Squeeze on Robinhood Chain (4663) via Doppler Airlock | ||
| where integrator = 0x6C61feE73584670AbEd65101946734006DAB12d6. | ||
| Chain raw data is supported on Dune; decoded Airlock call table requires ABI submit. | ||
| data_tests: | ||
| - dbt_utils.unique_combination_of_columns: | ||
| arguments: | ||
| combination_of_columns: ['token'] | ||
| columns: | ||
| - name: token | ||
| description: ERC-20 asset address from Airlock create | ||
| data_tests: | ||
| - not_null | ||
|
|
||
| - name: squeeze_robinhood_trades | ||
| meta: | ||
| blockchain: robinhood | ||
| project: squeeze | ||
| contributors: flockain | ||
| config: | ||
| tags: ['robinhood', 'squeeze', 'launchpad', 'dex'] | ||
| description: > | ||
| dex.trades rows touching Squeeze-launched Robinhood tokens (attribution). | ||
| data_tests: | ||
| - dbt_utils.unique_combination_of_columns: | ||
| arguments: | ||
| combination_of_columns: | ||
| - block_month | ||
| - blockchain | ||
| - tx_hash | ||
| - evt_index |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,49 @@ | ||
| {{ config( | ||
| alias = 'trades', | ||
| schema = 'squeeze_robinhood', | ||
| partition_by = ['block_month'], | ||
| materialized = 'incremental', | ||
| file_format = 'delta', | ||
| incremental_strategy = 'merge', | ||
| incremental_predicates = [incremental_predicate('DBT_INTERNAL_DEST.block_time')], | ||
| unique_key = ['block_month', 'blockchain', 'tx_hash', 'evt_index'] | ||
| ) }} | ||
|
|
||
| {% set project_start_date = '2026-01-01' %} | ||
| {% set blockchain = 'robinhood' %} | ||
|
|
||
| WITH deployments AS ( | ||
| SELECT * FROM {{ ref('squeeze_robinhood_deployments') }} | ||
| ) | ||
|
|
||
| SELECT | ||
| t.block_time | ||
| , date_trunc('day', t.block_time) AS block_date | ||
| , date_trunc('month', t.block_time) AS block_month | ||
| , t.blockchain | ||
| , 'squeeze' AS project | ||
| , t.project AS dex_project | ||
| , t.version AS dex_version | ||
| , t.token_bought_amount | ||
| , t.token_sold_amount | ||
| , t.token_bought_symbol | ||
| , t.token_sold_symbol | ||
| , t.token_bought_address | ||
| , t.token_sold_address | ||
| , t.amount_usd | ||
| , t.taker AS user | ||
| , t.tx_hash | ||
| , t.evt_index | ||
| FROM {{ source('dex', 'trades') }} t | ||
| INNER JOIN deployments d | ||
| ON t.blockchain = d.blockchain | ||
| AND ( | ||
| t.token_bought_address = d.token | ||
| OR t.token_sold_address = d.token | ||
| ) | ||
| WHERE t.blockchain = '{{ blockchain }}' | ||
| {% if is_incremental() %} | ||
| AND {{ incremental_predicate('t.block_time') }} | ||
| {% else %} | ||
| AND t.block_time >= TIMESTAMP '{{ project_start_date }}' | ||
| {% endif %} |


There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing unique-key null tests
Medium Severity
New incremental MERGE models have
unique_combination_of_columnsaligned withunique_key, but lacknot_nulltests on each unique-key column. That violates the merge-key schema test rule and leaves NULL key collisions unchecked.Additional Locations (2)
dbt_subprojects/daily_spellbook/models/squeeze/robinhood/squeeze_robinhood_schema.yml#L24-L41dbt_subprojects/daily_spellbook/models/squeeze/solana/squeeze_solana_schema.yml#L3-L35Triggered by learned rule: Flag new incremental MERGE models missing schema tests on unique_key columns
Reviewed by Cursor Bugbot for commit b83fbe4. Configure here.