with one click
catalyst-gas-and-transfers
// Add gas fees and token transfer models for a new chain (hourly_spellbook + tokens)
// Add gas fees and token transfer models for a new chain (hourly_spellbook + tokens)
Add a DEX project to dex.trades for a chain (sources, base trades, chain unions, seed, dex_info)
Set up new chain foundational metadata (evms_info, prices, base sources, evms_blockchains_list)
Run dbt CLI commands (compile, ls, test, run, etc.) in the spellbook repo. Use when the user asks to compile, list, test, or run dbt models, or when you need to validate SQL by compiling a model.
| name | catalyst-gas-and-transfers |
| description | Add gas fees and token transfer models for a new chain (hourly_spellbook + tokens) |
| disable-model-invocation | true |
sets up gas fees and token transfers for a new chain.
when to use: use when adding gas and token transfer models for a chain that already has foundational metadata.
<issue_id>: linear issue id (e.g., CUR2-547)<chain>: chain name (e.g., monad)/catalyst-gas-and-transfers CUR2-547 monad
dune mcp server: user-dune-mcp.
for ad-hoc sql, prefer temporary execution if the dune mcp supports it in-session. only create saved/throwaway queries with createDuneQuery when temporary execution is not available or when a later step explicitly needs a query_id.
fallback sequence when query_id is required: create query with createDuneQuery (pass sql in query) -> run with executeQueryById (using returned query_id) -> fetch rows with getExecutionResults (using returned execution_id).
dbt_subprojects/dex/models/trades/kaia/, .../mezo/). ordering: mimic existing; if unclear, append. swap chain name in: file paths, model names, schema entries, blockchain values.select * from dune.blockchains where name = '<chain>' (substitute <chain> with the chain name). extract: chain_id, name (display name), token_address (native token).select min(time) from <chain>.blocks where number <> 0 (substitute <chain>).main is up to date: fetch latest, pull if behind, exit if diverged.<issue_id>-<chain>-gas-and-transfers, create off main, checkout, warn if exists. don't commit/push anything.token_address: run this sql via the ad-hoc sql sequence above: select * from dune.blockchains where name = '<chain>' (substitute <chain>).add gas fees model
<chain>.transactions for sample gas fees setupdbt_subprojects/hourly_spellbook/models/_sector/gas/fees/<chain>/gas_<chain>_fees.sqlevm_l1_gas_fees macroop_stack_gas_fees or arbitrum_orbit_stack_gas_feesadd gas schema
dbt_subprojects/hourly_spellbook/models/_sector/gas/fees/<chain>/gas_<chain>_schema.ymladd gas seed data
dbt_subprojects/hourly_spellbook/seeds/_sector/gas/evm_gas_fees.csvquery_id: 6162940, query_parameters: [{"key":"chain","value":"<chain>","type":"text"}] (substitute <chain>) for test entriesadd to gas fees union
dbt_subprojects/hourly_spellbook/models/_sector/gas/fees/gas_fees.sql<chain> to both chain listscreate transfer models
dbt_subprojects/tokens/models/transfers_and_balances/<chain>/ with:
tokens_<chain>_base_transfers.sqltokens_<chain>_transfers.sqltokens_<chain>_net_transfers_daily.sqltokens_<chain>_net_transfers_daily_asset.sql
native_contract_address = var('ETH_ERC20_ADDRESS') or chain-specifictokens_<chain>_transfers_from_traces.sqltokens_<chain>_transfers_from_traces_base.sqltokens_<chain>_transfers_from_traces_base_wrapper_deposits.sqladd transfers schema
dbt_subprojects/tokens/models/transfers_and_balances/<chain>/_schema.ymladd to transfers unions
dbt_subprojects/tokens/models/transfers_and_balances/tokens_transfers.sqldbt_subprojects/tokens/models/transfers_and_balances/tokens_net_transfers_daily.sqldbt_subprojects/tokens/models/transfers_and_balances/tokens_net_transfers_daily_asset.sqladd to transfers macro
dbt_subprojects/tokens/macros/transfers_from_traces/transfers_from_traces_exposed_blockchains_macro.sqlfinal checks
uv sync --locked, then run uv run dbt compile in dbt_subprojects/tokens and in dbt_subprojects/hourly_spellbook. Fix any errors.