Arb Bot Builder
BASED NUT Agent Execution Reference
Copy Spec
Experimental memefi — technical reference, not financial advice. Verify live contract state on Basescan before acting; treat all on-chain parameters (fees, taxes, pool configs) as changeable state to be read, not cached assumptions.
🧭 Ecosystem Model
Eight critical invariants. Everything else on this page assumes these — strategies reference them instead of repeating them.
NUT total supply is exactly 1 whole token — fixed at deployment, no mint, no burn, no admin on the root contract. Whole-token price equals fully-diluted valuation by construction; standard market-cap APIs are not meaningful for it.
The primary NUT venue (NUT/WETH Uniswap V3) is not indexed by DEX Screener — price it on-chain via slot0() only — and carries a 1% fee tier (fee=10000). Include both in any profitability model.
Decimals vary across the ecosystem: SNUT 9, cbBTC 8, USDC/EURC 6, NVDAc/AAPLc 8 — all others 18. Always read decimals() before pricing. Wrong decimals = wrong prices.
Always verify token0()/token1() ordering before deriving prices from reserves — orderings differ per pool. Wrong ordering = inverted price.
Balancer uses singleton vaults (V2 0xBA122…F2C8, V3 0xBA133…9ba9) — pool tokens sit in the Vault, not the pool contract, and pool contracts share their address with their ERC-20 (the BPT pattern). balanceOf(pool) is not the basket — use getPoolTokens(poolId).
Mint Club curves price mint (buy) and burn (sell) separately; the buy/sell spread is protocol revenue by design and varies with curve position.
Aerodrome pools use a proxy pattern that does not implement token1() — the selector reverts. Resolve ordering via token0() plus the pair listing in the registry.
wNUT is a 1:1 wrapped NUT (ERC-20 wrapper, audited, no admin key). Wrapping does not change NUT supply — wNUT represents NUT already held by the wrapper.
🚀 Start Here — Minimal Scanner Build Path
The shortest path to a working arb scanner. Each step links to its detailed section below.
Endpoint rotation with backoff — public RPCs rate-limit.
slot0() → sqrtPriceX96 → price ratio; verify token0.
getReserves() → verify ordering → apply decimals.
CoinGecko for ETH, BTC, cbETH, AERO — never for NUT assets.
Flag when spread > 2 × gas + slippage (~$0.20-0.40 on Base).
Mint Club curves, Balancer NAV, wNUT parity — as needed.
🗂 Registry
Snapshot-verified on Base. Scan-level rows — expand any row for the full address and description, or copy the full address directly.
Tokens
Core Ecosystem Tokens
wNUT
18dWRAPPER0xBA5E…3dd3Profile →Supply: 1:1 with wrapped NUT
Audited 1:1 NUT wrapper, no admin key
detailSNUT
9dCORE0xAC13…D7ADProfile →Supply: 100,000 initial, decreasing
Reward-position token · hold to earn NUT · 1% fee
detailpNUT (Whorl)
18dBASKET0x252b…ACF5Profile →Supply: early-stage
Balancer V3 BPT · immutable · wNUT-based basket
detailPIPS
18dAGENT0x3f23…8ad9Profile →Supply: 1,000,000,000
Pipshell compute token · 1%/1% tax on official pair
detailDEEZ
18dRETIRED0x477B…0092Supply: 10,000 (70% burned)
Retired memorabilia — first nested-token experiment
detailQuote & Reserve Assets
WETH
18dQUOTE0x4200…0006Supply: variable
Wrapped ETH — quote for NUT/SNUT pools
detailAERO
18dQUOTE0x9401…8631Supply: ~1.93B
Aerodrome token — quote for NUT/AERO
detailcbBTC
8dQUOTE0xcbB7…33BfSupply: ~42.5K
Coinbase Wrapped BTC · 8 decimals
detailcbETH
18dQUOTE0x2Ae3…Ec22Supply: ~55.5K
Coinbase Wrapped Staked ETH · pNUT constituent
detailUSDC
6dQUOTE0x8335…2913Supply: ~4.28B
USD stablecoin · 6 decimals
detailwstETH
18dQUOTE0xc1CB…e452Supply: ~28.2K
Lido wrapped staked ETH · gtETH scion
detailtBTC
18dQUOTE0x236a…794bSupply: ~46.7
Threshold tBTC · gtBTC scion
detailEURC
6dQUOTE0x60a3…db42Supply: ~50.5M
Circle euro stablecoin · gtFX scion
detailNVDAc
8dQUOTE0xb200…108CSupply: ~13.7K
Tokenized NVIDIA stock (B20) · gtSIL scion
detailAAPLc
8dQUOTE0xb200…d1fbSupply: ~6.2K
Tokenized Apple stock (B20) · gtSIL scion
detailVVV
18dQUOTE0xacfE…21bfSupply: ~114.8M
Venice Token · gtINF scion
detailDIEM
18dQUOTE0xF4d9…a024Supply: ~37K
Venice compute asset · gtINF scion
detailVIRTUAL
18dQUOTE0x0b3e…7E1bSupply: ~497M
Virtuals Protocol token · gtAGT scion
detailMOR
18dQUOTE0x7431…b8e3Supply: ~5.88M
Morpheus AI token · gtAGT scion
detailPools
NUT Venues
NUT / WETH
UNI V31%PRIMARY“Extra Crunchy Delight”
0xe3ce…987eOrder: WETH → NUT · slot0()
detailNUT / WETH
UNI V20.3%SECONDARY“Mega Crunchy Madness”
0x997b…2f53Order: WETH → NUT · getReserves()
detailNUT / WETH
CUSTOM CL—SECONDARY“Genesis Concentrate”
0x0416…9c71Order: WETH → NUT · slot0()
detailNUT / AERO
AERODROMEvarSECONDARY“Sky-Seasoned Crisp”
0x3863…ea5dOrder: AERO → NUT · getReserves()
detailNUT / cbBTC
AERODROMEvarSECONDARY“Golden Butter Drizzle”
0x1538…accaOrder: NUT → cbBTC · getReserves()
detailSNUT Venues
SNUT / NUT
AERODROMEvarPRIMARY“Cloud-Salted Breeze”
0x893f…aae8Order: SNUT → NUT · getReserves()
detailSNUT / WETH
UNI V20.3%SECONDARY“Honey-Roasted Frenzy”
0xB228…5AE1Order: WETH → SNUT · getReserves()
detailSNUT / ETH-LP
UNI V2 META0.3%META“Palm Grove Graft Market”
0x82bb…aa1cOrder: WETH → SNUT/ETH-LP · getReserves()
detailNested-Token Venues
NUTINO / cbBTC
UNI V20.3%PRIMARY“Buttery Mint Explosion”
0xeafd…38e2Order: NUTINO → cbBTC · getReserves()
detailSALT / USDC
AERODROMEvarPRIMARY“Savory Stable Seasoning”
0x64ca…ccb2Order: SALT → USDC · getReserves()
detailNUT / SALT
BALANCER V3varRECLAMM“Curve-to-AMM Bridge”
0x4f92…BeD6Order: NUT ↔ SALT · Balancer API
detailPIPS / NUT
SLIPSTREAM1%PRIMARY“Shell-Spice Crossbreed”
0x7f8e…01b5Order: PIPS → NUT · slot0()
detailPIPS / USDC
BALANCER V31%RECLAMM“Stable Shell Reservoir”
0xb19e…Dd44Order: PIPS ↔ USDC · Balancer API
detailIndex Baskets
pNUT Quad
BALANCER V2varBASKET“Quad-Core Basket”
0x2a57…fff1Order: cbETH/cbBTC/NUT/SNUT · 25×4 · getPoolTokens()
detailpNUT Whorl
BALANCER V30.3%BASKET“Based Peanut Whorl”
0x252b…ACF5Order: cbETH/SNUT/wNUT/cbBTC · 25×4 · Balancer API
detailSunflower Grove Grafts — 20% wNUT rootstock + 40/40 scions
gtINF
BALANCER V3varGRAFT“Inference Twin Graft”
0x6a0a…A466Order: wNUT/VVV/DIEM · 20/40/40 · Balancer API
detailgtAGT
BALANCER V3varGRAFT“Agent Twin Graft”
0x5dA9…a200Order: wNUT/VIRTUAL/MOR · 20/40/40 · Balancer API
detailgtETH
BALANCER V3varGRAFT“Ether Twin Graft”
0xd156…8835Order: wNUT/cbETH/wstETH · 20/40/40 · Balancer API
detailgtBTC
BALANCER V3varGRAFT“Bitcoin Twin Graft”
0xb2a6…29b4Order: wNUT/cbBTC/tBTC · 20/40/40 · Balancer API
detailgtFX
BALANCER V3varGRAFT“FX Twin Graft”
0x1cCB…1f2EOrder: wNUT/USDC/EURC · 20/40/40 · Balancer API
detailgtSIL
BALANCER V3varGRAFT“Silicon Twin Graft”
0xA669…40B0Order: wNUT/NVDAc/AAPLc · 20/40/40 · Balancer API
detailInfrastructure & NFTs
Balancer V2 Vault
0xBA12…F2C8Singleton vault holding all V2 pool tokens. Read basket composition via getPoolTokens(poolId).
Balancer V3 Vault
0xBA13…9ba9Singleton vault for V3 pools — grafts, Whorl, and reCLAMM venues.
Balancer V3 WeightedPoolFactory
0xBDbA…6fF1Factory that created the grafts and the pNUT Whorl.
Balancer V3 Router
0x3f17…DC10Entry point for V3 pool initialization and addLiquidityProportional.
Aerodrome Factory
0x420D…40DaFactory for the Aerodrome V2 pairs listed above.
Custom CL Factory
0xade6…716aCustom concentrated-liquidity factory — created the NUT/WETH CL pool.
Mint Club Bond (Lock)
0xc5a0…aa27Holds the NUT reserves backing all Mint Club bonding curves (SALT, NUTINO).
Dead Address (Burn Sink)
0x0000…dEaDBurn sink. SNUT held here keeps earning NUT rewards; NUT sent here is burned; LP burned here cannot be removed.
PNUTS — Peanut War Generals
0x794f…E387Minted: 251
Sudoswap: 0x262b…7ff3
ALMD — Almond War Generals
0x1A16…3927Minted: 424
Sudoswap: 0x308C…4031
SALMD — Almond Soldiers
0x1E0f…C649Minted: 6,238
Sudoswap: 0xeE72…58a5
PNUTRMY — Peanut Soldiers
0xF075…3512Minted: 5,013
No Sudoswap pool
🔧 Reads — Selectors & RPC Patterns
The pricing subset of the read ABI, plus copy-pasteable Python. Rotate endpoints (mainnet.base.org, base.publicnode.com, 1rpc.io/base) with backoff — public RPCs rate-limit aggressively. Execution (approve, swap, join/exit) needs each contract's full ABI.
| Selector | Function | Use | Returns |
|---|---|---|---|
| 0x3850c7bd | slot0() | Uniswap V3 / CL pools — returns sqrtPriceX96 and tick. Price derivation for concentrated pools. | uint160 sqrtPriceX96, int24 tick, … |
| 0x0902f1ac | getReserves() | Uniswap V2 / Aerodrome — returns reserve0 and reserve1 for price derivation. | uint112, uint112, uint32 |
| 0x0dfe1681 | token0() | Pool — returns token0. Resolve price direction before dividing reserves. | address |
| 0xd21220a7 | token1() | Pool — returns token1. Reverts on Aerodrome proxies; use the pair listing here instead. | address |
| 0x70a08231 | balanceOf(address) | ERC20/ERC721 — token balance of an address. Used for pool TVL and basket composition. | uint256 |
| 0x18160ddd | totalSupply() | ERC20/ERC721 — total token supply. Used for NAV per share and NFT minted counts. | uint256 |
| 0x313ce567 | decimals() | ERC20 — token decimals. SNUT 9, cbBTC 8, USDC/EURC 6, NVDAc/AAPLc 8, others 18. | uint8 |
| 0x95d89b41 | symbol() | ERC20 — token symbol. Useful for contract verification. | string |
| 0x06fdde03 | name() | ERC20 — token name string. Useful for verification. | string |
| 0x1a686502 | liquidity() | Uniswap V3 — current concentrated liquidity. Do not use getReserves() on V3 pools. | uint128 |
| 0xddca3f43 | fee() | Uniswap V3 — fee tier in hundredths of a bip. NUT/WETH V3 = 10000 (1%). | uint24 |
| 0x9cb8a26a | getPoolTokens(bytes32) | Balancer V2 Vault — returns tokens[], balances[], lastChangeBlock. Use poolId for basket composition. | address[], uint256[], uint256 |
Python — no Web3 library required
Base RPC Helper
Core eth_call with endpoint rotation and backoff. Every other block builds on this.
Uniswap V3 Price (NUT/WETH)
Extract price from sqrtPriceX96. Verify token0 to resolve direction; include the fee tier in the effective price.
Uniswap V2 / Aerodrome Reserves
Reserve-based pricing with token0 verification and correct decimals. Orderings differ per pool.
pNUT Quad Basket & NAV (Balancer V2)
Basket composition from the singleton Vault — balanceOf(pNUT) is NOT the basket. Query the Vault or use getPoolTokens(poolId).
Cross-Venue Spread Scanner
Compare NUT price across all venues, normalize to USD, find the spread. The core cross-venue arb logic.
Mint Club Price Discovery
Mint Club bonding-curve tokens are minimal proxy contracts — direct RPC price queries are unreliable. Use the SDK or browser automation.
wNUT Wrap Ratio (1:1 check)
The wrapper holds NUT 1:1 against every wNUT. This ratio should always read exactly 1.00 — a core conservation invariant.
⚙️ Market Mechanics
The three non-obvious pricing systems: Mint Club bonding curves, Balancer NAV baskets, and the wNUT wrapper invariant.
Mint Club Bonding Curves (SALT, NUTINO)
Mechanism
Mint/burn (NOT AMM swap). New tokens are minted when buying, burned when selling. No LP deposits needed — the curve IS the liquidity.
Price Formula
Bonding curve price = NUT_locked / token_supply. Price increases as supply mints, decreases as supply burns.
Buy ≠ Sell
BUY (mint) price is always higher than SELL (burn) price. The spread is protocol revenue and varies with curve position.
Royalty
1% creator royalty on BOTH mint and burn transactions. Deducted from the base asset (NUT).
Curve Types
Exponential (most common), Linear, Logarithmic, Flat. Mint Club uses a Discrete Bonding Curve (DBC) with step arrays.
Token Specs
Max Minting Supply, Initial Minting Price, Final Minting Price, Price Intervals (steps). More steps = smoother price curve.
Base Asset
NUT is the base/reserve asset for all BASED NUT bonding curves. SALT and NUTINO are both backed by NUT.
SDK
npm i mint.club-v2-sdk — official SDK for programmatic interaction. Docs: https://sdk.mint.club/
Price Retrieval
Mint Club tokens are minimal proxy contracts. Direct RPC price queries are unreliable. Use browser automation or the V2 SDK for accurate prices.
Why Loops Are Challenging
Forward: DEX price tends below MC buy price → squeezed. Reverse: MC sell price tends below DEX price → squeezed. The spread captures value from BOTH directions. Windows open during volatility or external liquidity events — monitor for 5-10%+ divergence.
pNUT Quad — NAV & Arbitrage
pNUT address: 0x2a5757b60987ff10385de1d4d923792f6fdcfff1
Pool ID: 0x2a5757b60987ff10385de1d4d923792f6fdcfff100010000000000000000019e
Balancer URL: https://balancer.fi/pools/base/v2/0x2a5757b60987ff10385de1d4d923792f6fdcfff100010000000000000000019e
NAV = (cbETH_balance × cbETH_price +
cbBTC_balance × cbBTC_price +
NUT_balance × NUT_price +
SNUT_balance × SNUT_price) / pNUT_totalSupply
Arbitrage:
If market > NAV → Mint BPT (deposit basket), sell pNUT
If market < NAV → Buy pNUT, redeem BPT (withdraw basket)
Volatility play:
NUT/SNUT move vs cbETH/cbBTC → basket weights drift → NAV diverges
Track: NUT/ETH correlation, SNUT/NUT spread, component drift %pNUT is NOT traded on standard DEXs. It is minted by depositing the basket into Balancer and redeemed by withdrawing. The "market price" is the BPT price on Balancer. NAV divergence > 2% indicates potential arbitrage. This is the most complex arb in the ecosystem — requires monitoring 4 component prices simultaneously.
wNUT Wrapper Parity
› Every wNUT is a receipt for exactly one NUT locked in the wrapper — backing ratio must always read exactly 1.00.
› The wrapper is audited with no admin key: wrap/unwrap enforces parity mechanically, so venue price deviations are self-correcting.
› wNUT opens NUT to Balancer v3 composability — the Whorl basket and all six grafts use wNUT as rootstock.
› Check code: wNUT Wrap Ratio block in Reads. Trade it: wNUT Parity Loop in Strategies.
⚔️ Strategy Catalog
Fixed grammar per card: badges → verdict pill → Route / Trigger / Profit / Risks at scan level; full implementation behind the expand. Verdicts are honest, never upgraded. Start with BEGINNER cards (3, 1, 9) before ADVANCED/EXPERT.
Cross-Venue
Cross-Venue NUT Arbitrage
Route: Uniswap V3 ↔ Uniswap V2 ↔ Aerodrome (NUT/AERO) ↔ Aerodrome (NUT/cbBTC)
Trigger: After large directional trades on one venue · volatility spikes · liquidity adds/removes · AERO or cbBTC moving sharply vs ETH.
profit = NUT_price_venueB - NUT_price_venueA - 2 × gas - slippageProfit: Spread between any 2 venues > 2 × gas + slippage + quote token conversion cost.
Risks: Quote-token movement · depth varies by venue · execution lag between legs.
SNUT Cross-Venue Arbitrage
Route: Uniswap V2 (SNUT/WETH) ↔ Aerodrome (SNUT/NUT) ↔ Balancer V2 (pNUT basket)
Trigger: SNUT volatility · large buys/sells on one venue · NUT moves but SNUT lags on another venue.
profit = SNUT_price_venueB - SNUT_price_venueA - 2 × gas - slippage - 1% tax (if applicable)Profit: Spread between any 2 venues > 2 × gas + slippage + 1% tax (if applicable). Tax-exempt routes only need spread > gas + slippage.
Risks: 1% transfer tax on taxable routes · thin SNUT/WETH liquidity · pNUT basket price is implied, not directly tradeable.
Wrapper Parity
wNUT Parity Loop
Route: NUT ↔ wNUT wrapper (1:1) ↔ Balancer v3 venues (Whorl, grafts)
Trigger: Whenever a wNUT venue price deviates from NUT by more than gas + venue fee. Early-stage graft liquidity makes windows more frequent.
profit = |venue_wNUT_price - NUT_price| - gas - venue feeProfit: Deviation > gas + venue swap fee.
Risks: Thin early-stage liquidity on graft venues limits size · venue fees vary.
Basket / NAV
pNUT Quad NAV Drift
Route: Balancer V2 (mint/redeem BPT) ↔ market
Trigger: NUT or SNUT makes a sharp move vs ETH/BTC · cbETH/cbBTC drift changes weights · after large pNUT mints/redeems.
profit = |market_price - NAV| × pNUT_amount - gas - slippage - exit feesProfit: |market_price - NAV| > gas + slippage + basket liquidation cost + Balancer exit fee.
Risks: NAV moves with components · redemption requires selling 4 assets · join/exit fees · low pNUT volume.
pNUT Whorl NAV
Route: Balancer V3 (add/remove liquidity) ↔ market
Trigger: Same pattern as the Quad — when basket components diverge. Early liquidity means wider windows but smaller capacity.
profit = |BPT_price - NAV| × amount - gas - feesProfit: BPT deviation from NAV > gas + V3 fees.
Risks: Early-stage liquidity · component sourcing for 4 assets · no admin recourse by design.
Grove Graft NAV
Route: Six Balancer v3 grafts — 20% wNUT rootstock + 40/40 scions
Trigger: Scion markets move but graft BPT prices lag. Early liquidity = wider windows, smaller capacity.
profit = |graft_BPT_price - NAV| × amount - gas - feesProfit: Graft BPT deviation from NAV > gas + fees.
Risks: Early-stage liquidity on all grafts · scion sourcing varies (tokenized equities have their own market hours).
Bonding-Curve Loops
SALT Loop (Mint Club → Aerodrome)
Route: Mint Club (NUT→SALT) → Aerodrome (SALT→USDC)
Trigger: DEX price diverges >5-10% from curve fair value · SALT liquidity events · NUT moves but SALT DEX lags.
forward: profit = SALT_dex_USDC - SALT_mint_cost_NUT × NUT_USD - gas - 1% royalty
reverse: profit = SALT_burn_NUT × NUT_USD - SALT_dex_USDC - gas - 1% royaltyProfit: Forward: SALT DEX price > MC buy price + 1% royalty + gas. Reverse: MC sell price > DEX price + 1% royalty + gas.
Risks: Curve spread captures most value · supply moves against each trade · thin DEX liquidity.
NUTINO Loop (Mint Club → Uniswap V2)
Route: Mint Club (NUT→NUTINO) → Uniswap V2 (NUTINO→cbBTC)
Trigger: High BTC volatility (cbBTC moves but NUTINO DEX lags) · NUT sharp move with curve lag · same 5-10% threshold as SALT.
forward: profit = cbBTC_received × BTC_price - NUT_cost_USD - gas - 1% royalty
reverse: profit = NUT_received × NUT_price - cbBTC_cost_USD - gas - 1% royaltyProfit: Forward: NUTINO DEX price in cbBTC > MC buy price + 1% royalty + gas. Reverse: MC sell price > DEX price + 1% royalty + gas.
Risks: BTC volatility · curve spread · thin UniV2 liquidity limits size.
Structural (Monitoring)
SNUT Burn Flywheel
Route: SNUT activity → 1% fee → swapback → buyback/burn + NUT rewards
Trigger: Burn rate accelerates (high volume = more fee = more burns) · dead-held LP percentage rises.
price_support = burn_rate / circulating_supply (continuous, non-directional)Profit: Not a tradeable loop — structural support. Hold SNUT to benefit from deflation.
Risks: Fee reduces net transfer size · burn rate depends on volume · long-term hold mechanic, not an arbitrage exit.
Derivatives
SNUT/ETH-LP Meta-Pool Arbitrage
Route: Uniswap V2 (SNUT/ETH-LP/ETH meta-pool) ↔ Uniswap V2 (SNUT/WETH main pool)
Trigger: Meta-pool LP price diverges >1% from fair NAV · SNUT volatility (LP sticky, spot fast) · large liquidity adds/removes.
profit = LP_NAV_premium - gas - slippageProfit: |meta_pool_LP_price - LP_fair_NAV| > gas + slippage + LP removal/addition fees.
Risks: Thin meta-pool liquidity · multi-step execution · pending fees in LP position.
🤖 Bot Commands — Wiring Reference
Six commands for scanning and monitoring. Each card: trigger, args, scan types, implementation steps, key data, verdict.
Arbitrage Scanner
Full arbitrage scanner — cross-venue, pNUT index, and Mint Club loops.
/arb-scan [NUT|SNUT|pNUT|SALT|NUTINO|all]Implementation
1. Fetch component prices via CoinGecko: ethereum, bitcoin, coinbase-wrapped-staked-eth
2. Query UniV3 via slot0() → sqrtPriceX96 → (sqrt/2^96)^2 → price ratio
3. Query UniV2/Aerodrome via getReserves() → reserve0/reserve1
4. Always verify token0() to determine price direction (invert if needed)
5. pNUT basket: balanceOf() for cbETH, cbBTC, NUT, SNUT on the Balancer VAULT
6. NAV = (cbETH_bal × cbETH_price + cbBTC_bal × cbBTC_price + NUT_bal × NUT_price + SNUT_bal × SNUT_price) / pNUT_supply
7. Mint Club prices: browse https://mint.club/token/base/SALT or /NUTINO for UI prices
Key Data
NUT_POOLS: 4 venues (V3, V2, AERO, cbBTC). SNUT_POOLS: 2 venues (NUT, WETH). pNUT: Balancer V2 WeightedPool. MINT_CLUB: SALT/USDC, NUTINO/cbBTC.
Verdict: MOST COMPREHENSIVE — covers all 3 arb types in one scan. Use as the primary monitoring command.
Loop Arbitrage Scanner
Detailed loop arbitrage analysis for Mint Club bonding curve tokens (SALT, NUTINO).
/loop-scan [SALT|NUTINO|all]Implementation
1. Get Mint Club buy/sell prices via UI or SDK (npm i mint.club-v2-sdk)
2. Get DEX pool prices via Base RPC
3. Forward: Buy NUT → Mint token on Mint Club → Sell on DEX
4. Reverse: Buy token on DEX → Burn on Mint Club for NUT → Sell NUT
5. Account for 1% royalty on both mint and burn directions
6. Bonding curve: BUY price > SELL price always (protocol revenue)
7. Supply changes with each trade (price moves against you)
Key Data
SALT: Mint Club (NUT→SALT) → Aerodrome (SALT→USDC). NUTINO: Mint Club (NUT→NUTINO) → UniV2 (NUTINO→cbBTC). 1% royalty both ways.
Verdict: SPECIALIZED — deeper analysis of Mint Club loops than /arb-scan. Use for focused SALT/NUTINO monitoring.
Token Info
Comprehensive token info — prices, TVL, distribution, and pool data.
/token-info <TOKEN> (NUT/SNUT/pNUT/NUTINO/SALT)Implementation
1. Primary: DexScreener API — GET https://api.dexscreener.com/latest/dex/tokens/{addr}
2. Select highest-liquidity pair from response
3. Fallback: Base RPC with strict token0 verification
4. V3 fallback: slot0() → sqrtPriceX96, verify token0 via 0x0dfe1681
5. V2 fallback: getReserves(), verify token0, apply correct decimals
6. pNUT: Balancer API — GET https://api.balancer.fi/v1/pools/base/{addr}
7. Quote prices: CoinGecko for ETH, BTC, AERO in USD
Key Data
DexScreener CANNOT handle UniV3 — returns NULL or wrong data. Use RPC slot0() for UniV3. pNUT uses Balancer API, not DEX. SNUT=9 decimals, cbBTC=8, USDC=6.
Verdict: ESSENTIAL — first command to run for any token. Use before executing arb trades to verify current state.
NUT Ecosystem Status
Full ecosystem status — market data, price, MCAP, TVL, and NUT distribution.
/nut-status [none]Implementation
1. Aggregate prices across all venues for each token
2. Calculate combined TVL across all pools
3. Fetch NUT distribution: balanceOf() on key addresses (Mint Club Lock, Balancer, pools)
4. Display MCAP = NUT price × 1 (unity token — TRUE MCAP = price)
5. Show SNUT burn rate and deflationary status
6. Cross-reference with DexScreener for accuracy
Key Data
NUT supply=1 (unity). TRUE MCAP = price. Mint Club Lock: 0xc5a076… holds NUT reserves. SNUT supply=100,000, deflationary.
Verdict: OVERVIEW — use for dashboard-style ecosystem monitoring. Best for periodic health checks.
Pool Status
All liquidity pools with addresses, flavors, and live reserve status.
/pools [NUT|SNUT|SALT|NUTINO|pNUT|NFT]Implementation
1. Query getReserves() (0x0902f1ac) for each V2 pool
2. Query slot0() (0x3850c7bd) for V3 pool
3. Apply correct decimals per token (SNUT=9, cbBTC=8, USDC=6)
4. Calculate TVL = reserve × token_price for both sides
5. Display pool flavors (Extra Crunchy Delight, Golden Butter Drizzle, etc.)
6. NFT pools: totalSupply() for minted count
Key Data
Full registry on this page — 21 pools across 5 groups. Plus 3 NFT Sudoswap pools.
Verdict: STRUCTURAL — use to identify which pools have deepest liquidity before executing arb routes.
NFT Status
NFT collection status — minted counts and Sudoswap pools.
/nft-status [none]Implementation
1. Query totalSupply() (0x18160ddd) for each NFT contract
2. Check Sudoswap pool balances for whole-NFT inventory
3. Collections: PNUTS (251), ALMD (424), SALMD (6,238), PNUTRMY (5,013)
Key Data
PNUTS: 0x794fcD… (251 minted). ALMD: 0x1A1604… (424). SALMD: 0x1E0f80… (6,238). PNUTRMY: 0xF07530… (5,013). Sudoswap pools for 3 of 4.
Verdict: MONITORING — collection status tool. Low-liquidity NFT venue.
🏠 Venues & Data-Source Matrix
Where each token trades, which API reads it, and the priority hierarchy for price polling.
Venues
Uniswap V3
Concentrated AMM · 1.0%
Pairs: NUT/WETH
Primary NUT venue. Use slot0() for price. DEX Screener cannot see this pool — must use Base RPC.
Base RPC: eth_call slot0() → 0x3850c7bdUniswap V2
XYK AMM · 0.3%
Pairs: NUT/WETH, SNUT/WETH, NUTINO/cbBTC
Secondary venues. Use getReserves() for price.
Base RPC: eth_call getReserves() → 0x0902f1acAerodrome
ve(3,3) AMM · Variable
Pairs: NUT/AERO, NUT/cbBTC, SALT/USDC, SNUT/NUT
Base native DEX. SALT primary venue. SNUT primary venue. Same interface as UniV2.
Base RPC: getReserves() + token0() for orderingMint Club
Bonding Curve · 1% royalty
Pairs: SALT (backed by NUT), NUTINO (backed by NUT)
Mint/burn only. Buy ≠ Sell. Price = NUT_locked / supply. Use SDK or browser for prices.
SDK: npm i mint.club-v2-sdk | UI: https://mint.club/token/base/{TOKEN}Balancer V2
Weighted Pool · Variable
Pairs: pNUT Quad (25% each: cbETH, cbBTC, NUT, SNUT)
pNUT IS the BPT. NAV = totalLiquidity / totalShares. Mint by depositing basket, redeem to withdraw.
REST: https://api.balancer.fi/v1/pools/base/{pool_addr} | GraphQL: https://api.thegraph.com/subgraphs/name/balancer-base-v2Balancer V3
Weighted Pool / reCLAMM · Variable
Pairs: pNUT Whorl, 6 grafts, NUT/SALT reCLAMM, PIPS/USDC reCLAMM
v3 venues — immutable weighted pools and reCLAMM. Composition via Balancer API.
Balancer API + V3 Router: 0x3f170631ed9821Ca51A59D996aB095162438DC10Sudoswap
NFT AMM · Variable
Pairs: PNUTS, ALMD, SALMD NFT pools
Whole-NFT AMM via bonding curves.
Base RPC: balanceOf() on pool contractsDexScreener
Price API · Free
Pairs: All DEX pairs (fallback)
Good for V2 pools. CANNOT correctly handle the UniV3 NUT/WETH pool. Use as secondary source only.
GET https://api.dexscreener.com/latest/dex/tokens/{token_addr}CoinGecko
Price API · Free (rate-limited)
Pairs: ETH, BTC, cbETH (quote tokens only)
Use for USD normalization of quote tokens. Do NOT use for NUT ecosystem token prices directly.
GET https://api.coingecko.com/api/v3/simple/price?ids=ethereum,wrapped-bitcoin,coinbase-wrapped-staked-eth&vs_currencies=usdData-Source Hierarchy
Base RPC (https://mainnet.base.org)
Primary for ALL on-chain prices. V3 slot0(), V2 getReserves(), balanceOf(), totalSupply(). The ONLY reliable source for NUT/WETH V3 price.
Cost: Free
DexScreener API
Secondary for V2/Aerodrome prices and TVL. Handles UniV2 math. CANNOT handle UniV3 NUT/WETH — returns NULL or wrong data.
Cost: Free
Balancer API
pNUT total liquidity, pool metadata. REST: https://api.balancer.fi/v1/pools/base/{addr}. GraphQL for deeper queries.
Cost: Free
CoinGecko API
USD prices for quote tokens only (ETH, BTC, cbETH, AERO). Do NOT use for NUT/SNUT/pNUT directly.
Cost: Free (rate-limited)
Mint Club UI / SDK
Bonding curve prices for SALT and NUTINO. Browser automation or V2 SDK. RPC unreliable for minimal proxy contracts.
Cost: Free
GeckoTerminal API
Alternative to DexScreener for pool data. Useful for cross-verification.
Cost: Free
📦 Machine-Readable Spec
One JSON with the full registry — copy it into your bot's context, view it inline, or download it.
23 tokens · 21 pools · 8 infra · 12 selectors · 19 routes
Copy JSON
View JSON
Download
✅ Full Implementation Checklist
The complete ten-step build path — the expanded version of Start Here.
Install dependencies
pip install requestsConnect to Base RPC
https://mainnet.base.org (chainId: 8453)Copy the Base RPC Helper from Reads above
Fetch NUT price from UniV3 slot0() — check token0 for inversion
Fetch all pool reserves via getReserves() — verify token0/token1 ordering
Normalize all prices to USD using CoinGecko (ETH, BTC, cbETH only)
Calculate spreads across venues — flag when spread > 0.5%
For Mint Club prices, use browser automation or the V2 SDK — RPC is unreliable
npm i mint.club-v2-sdkFor pNUT NAV, use getPoolTokens(poolId) or balanceOf(BALANCER_VAULT) — NOT balanceOf(pNUT) which is not the basket
Execute when spread > 2 × gas + slippage estimate (~$0.20-0.40 total on Base)
📖 Mint Club SDK: https://sdk.mint.club/ · Sunflower Grove: graft registry · Balancer API: REST endpoint · Base RPC: https://mainnet.base.org · DexScreener: NUT pairs