Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Expand Up @@ -20,6 +20,7 @@
, ref('labels_ofac_sanctionned_ethereum')
, ref('labels_project_wallets')
, ref('labels_safe_ethereum')
, ref('labels_squeeze')
, ref('labels_tornado_cash')
, ref('labels_quest_participants')
, ref('labels_cex_users')
Expand Down
20 changes: 20 additions & 0 deletions dbt_subprojects/daily_spellbook/models/squeeze/_sources.yml
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

Copy link
Copy Markdown

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_columns aligned with unique_key, but lack not_null tests on each unique-key column. That violates the merge-key schema test rule and leaves NULL key collisions unchecked.

Additional Locations (2)
Fix in Cursor Fix in Web

Triggered by learned rule: Flag new incremental MERGE models missing schema tests on unique_key columns

Reviewed by Cursor Bugbot for commit b83fbe4. Configure here.

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
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OR-join on dex.trades

High Severity

The join to dex.trades uses OR across token_bought_address and token_sold_address, which forces a Trino NestedLoopJoin on a very large fact table. If both sides of a trade are Squeeze tokens, the join also emits duplicate merge keys and can fail MERGE.

Additional Locations (1)
Fix in Cursor Fix in Web

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 %}
Loading
Loading