LEARN MORE

Arb Bot Builder

BASED NUT Agent Execution Reference

Base
Chain 8453
Snapshot 2026-09-07

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.

Model
Start Here
Registry
Reads
Mechanics
Strategies
Commands
Venues
Spec
Checklist

🧭 Ecosystem Model

Eight critical invariants. Everything else on this page assumes these — strategies reference them instead of repeating them.

SUPPLYVERIFY ALWAYS

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.

PRIMARY_VENUEVERIFY ALWAYS

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.

DECIMALSVERIFY ALWAYS

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.

TOKEN_ORDERVERIFY ALWAYS

Always verify token0()/token1() ordering before deriving prices from reserves — orderings differ per pool. Wrong ordering = inverted price.

BALANCER_VAULTVERIFY ALWAYS

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).

MINTCLUB_SPREAD

Mint Club curves price mint (buy) and burn (sell) separately; the buy/sell spread is protocol revenue by design and varies with curve position.

AERO_TOKEN1VERIFY ALWAYS

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_1TO1

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.

1
Connect Base RPC

Endpoint rotation with backoff — public RPCs rate-limit.

2
Read NUT/WETH V3

slot0() → sqrtPriceX96 → price ratio; verify token0.

3
Read V2 / Aerodrome pools

getReserves() → verify ordering → apply decimals.

4
Normalize quotes to USD

CoinGecko for ETH, BTC, cbETH, AERO — never for NUT assets.

5
Calculate executable spread

Flag when spread > 2 × gas + slippage (~$0.20-0.40 on Base).

6
Add specialized routes

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

NUT

18dCORE
0xb8de…30dfProfile →

Supply: 1 (unity)

Fixed root token · price = FDV

detail

wNUT

18dWRAPPER
0xBA5E…3dd3Profile →

Supply: 1:1 with wrapped NUT

Audited 1:1 NUT wrapper, no admin key

detail

SNUT

9dCORE
0xAC13…D7ADProfile →

Supply: 100,000 initial, decreasing

Reward-position token · hold to earn NUT · 1% fee

detail

pNUT (Quad)

18dBASKET
0x2a57…fff1Profile →

Supply: ~6.66 BPT

Balancer V2 4-asset BPT · 25% each

detail

pNUT (Whorl)

18dBASKET
0x252b…ACF5Profile →

Supply: early-stage

Balancer V3 BPT · immutable · wNUT-based basket

detail

SALT

18dCURVE
0x1EDe…dE81Profile →

Supply: ~18.2B

Mint Club curve token backed by NUT

detail

NUTINO

18dCURVE
0x3042…476BProfile →

Supply: ~9.4B

Mint Club curve token backed by NUT

detail

PIPS

18dAGENT
0x3f23…8ad9Profile →

Supply: 1,000,000,000

Pipshell compute token · 1%/1% tax on official pair

detail

DEEZ

18dRETIRED
0x477B…0092

Supply: 10,000 (70% burned)

Retired memorabilia — first nested-token experiment

detail

Quote & Reserve Assets

WETH

18dQUOTE
0x4200…0006

Supply: variable

Wrapped ETH — quote for NUT/SNUT pools

detail

AERO

18dQUOTE
0x9401…8631

Supply: ~1.93B

Aerodrome token — quote for NUT/AERO

detail

cbBTC

8dQUOTE
0xcbB7…33Bf

Supply: ~42.5K

Coinbase Wrapped BTC · 8 decimals

detail

cbETH

18dQUOTE
0x2Ae3…Ec22

Supply: ~55.5K

Coinbase Wrapped Staked ETH · pNUT constituent

detail

USDC

6dQUOTE
0x8335…2913

Supply: ~4.28B

USD stablecoin · 6 decimals

detail

wstETH

18dQUOTE
0xc1CB…e452

Supply: ~28.2K

Lido wrapped staked ETH · gtETH scion

detail

tBTC

18dQUOTE
0x236a…794b

Supply: ~46.7

Threshold tBTC · gtBTC scion

detail

EURC

6dQUOTE
0x60a3…db42

Supply: ~50.5M

Circle euro stablecoin · gtFX scion

detail

NVDAc

8dQUOTE
0xb200…108C

Supply: ~13.7K

Tokenized NVIDIA stock (B20) · gtSIL scion

detail

AAPLc

8dQUOTE
0xb200…d1fb

Supply: ~6.2K

Tokenized Apple stock (B20) · gtSIL scion

detail

VVV

18dQUOTE
0xacfE…21bf

Supply: ~114.8M

Venice Token · gtINF scion

detail

DIEM

18dQUOTE
0xF4d9…a024

Supply: ~37K

Venice compute asset · gtINF scion

detail

VIRTUAL

18dQUOTE
0x0b3e…7E1b

Supply: ~497M

Virtuals Protocol token · gtAGT scion

detail

MOR

18dQUOTE
0x7431…b8e3

Supply: ~5.88M

Morpheus AI token · gtAGT scion

detail

Pools

NUT Venues

NUT / WETH

UNI V31%PRIMARY

Extra Crunchy Delight

0xe3ce…987e

Order: WETH → NUT · slot0()

detail

NUT / WETH

UNI V20.3%SECONDARY

Mega Crunchy Madness

0x997b…2f53

Order: WETH → NUT · getReserves()

detail

NUT / WETH

CUSTOM CLSECONDARY

Genesis Concentrate

0x0416…9c71

Order: WETH → NUT · slot0()

detail

NUT / AERO

AERODROMEvarSECONDARY

Sky-Seasoned Crisp

0x3863…ea5d

Order: AERO → NUT · getReserves()

detail

NUT / cbBTC

AERODROMEvarSECONDARY

Golden Butter Drizzle

0x1538…acca

Order: NUT → cbBTC · getReserves()

detail

SNUT Venues

SNUT / NUT

AERODROMEvarPRIMARY

Cloud-Salted Breeze

0x893f…aae8

Order: SNUT → NUT · getReserves()

detail

SNUT / WETH

UNI V20.3%SECONDARY

Honey-Roasted Frenzy

0xB228…5AE1

Order: WETH → SNUT · getReserves()

detail

SNUT / ETH-LP

UNI V2 META0.3%META

Palm Grove Graft Market

0x82bb…aa1c

Order: WETH → SNUT/ETH-LP · getReserves()

detail

Nested-Token Venues

NUTINO / cbBTC

UNI V20.3%PRIMARY

Buttery Mint Explosion

0xeafd…38e2

Order: NUTINO → cbBTC · getReserves()

detail

SALT / USDC

AERODROMEvarPRIMARY

Savory Stable Seasoning

0x64ca…ccb2

Order: SALT → USDC · getReserves()

detail

NUT / SALT

BALANCER V3varRECLAMM

Curve-to-AMM Bridge

0x4f92…BeD6

Order: NUT ↔ SALT · Balancer API

detail

PIPS / NUT

SLIPSTREAM1%PRIMARY

Shell-Spice Crossbreed

0x7f8e…01b5

Order: PIPS → NUT · slot0()

detail

PIPS / USDC

BALANCER V31%RECLAMM

Stable Shell Reservoir

0xb19e…Dd44

Order: PIPS ↔ USDC · Balancer API

detail

Index Baskets

pNUT Quad

BALANCER V2varBASKET

Quad-Core Basket

0x2a57…fff1

Order: cbETH/cbBTC/NUT/SNUT · 25×4 · getPoolTokens()

detail

pNUT Whorl

BALANCER V30.3%BASKET

Based Peanut Whorl

0x252b…ACF5

Order: cbETH/SNUT/wNUT/cbBTC · 25×4 · Balancer API

detail

Sunflower Grove Grafts — 20% wNUT rootstock + 40/40 scions

gtINF

BALANCER V3varGRAFT

Inference Twin Graft

0x6a0a…A466

Order: wNUT/VVV/DIEM · 20/40/40 · Balancer API

detail

gtAGT

BALANCER V3varGRAFT

Agent Twin Graft

0x5dA9…a200

Order: wNUT/VIRTUAL/MOR · 20/40/40 · Balancer API

detail

gtETH

BALANCER V3varGRAFT

Ether Twin Graft

0xd156…8835

Order: wNUT/cbETH/wstETH · 20/40/40 · Balancer API

detail

gtBTC

BALANCER V3varGRAFT

Bitcoin Twin Graft

0xb2a6…29b4

Order: wNUT/cbBTC/tBTC · 20/40/40 · Balancer API

detail

gtFX

BALANCER V3varGRAFT

FX Twin Graft

0x1cCB…1f2E

Order: wNUT/USDC/EURC · 20/40/40 · Balancer API

detail

gtSIL

BALANCER V3varGRAFT

Silicon Twin Graft

0xA669…40B0

Order: wNUT/NVDAc/AAPLc · 20/40/40 · Balancer API

detail

Infrastructure & NFTs

Balancer V2 Vault

0xBA12…F2C8

Singleton vault holding all V2 pool tokens. Read basket composition via getPoolTokens(poolId).

Balancer V3 Vault

0xBA13…9ba9

Singleton vault for V3 pools — grafts, Whorl, and reCLAMM venues.

Balancer V3 WeightedPoolFactory

0xBDbA…6fF1

Factory that created the grafts and the pNUT Whorl.

Balancer V3 Router

0x3f17…DC10

Entry point for V3 pool initialization and addLiquidityProportional.

Aerodrome Factory

0x420D…40Da

Factory for the Aerodrome V2 pairs listed above.

Custom CL Factory

0xade6…716a

Custom concentrated-liquidity factory — created the NUT/WETH CL pool.

Mint Club Bond (Lock)

0xc5a0…aa27

Holds the NUT reserves backing all Mint Club bonding curves (SALT, NUTINO).

Dead Address (Burn Sink)

0x0000…dEaD

Burn sink. SNUT held here keeps earning NUT rewards; NUT sent here is burned; LP burned here cannot be removed.

PNUTSPeanut War Generals

0x794f…E387

Minted: 251

Sudoswap: 0x262b…7ff3

ALMDAlmond War Generals

0x1A16…3927

Minted: 424

Sudoswap: 0x308C…4031

SALMDAlmond Soldiers

0x1E0f…C649

Minted: 6,238

Sudoswap: 0xeE72…58a5

PNUTRMYPeanut Soldiers

0xF075…3512

Minted: 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.

SelectorFunctionUseReturns
0x3850c7bdslot0()Uniswap V3 / CL pools — returns sqrtPriceX96 and tick. Price derivation for concentrated pools.uint160 sqrtPriceX96, int24 tick, …
0x0902f1acgetReserves()Uniswap V2 / Aerodrome — returns reserve0 and reserve1 for price derivation.uint112, uint112, uint32
0x0dfe1681token0()Pool — returns token0. Resolve price direction before dividing reserves.address
0xd21220a7token1()Pool — returns token1. Reverts on Aerodrome proxies; use the pair listing here instead.address
0x70a08231balanceOf(address)ERC20/ERC721 — token balance of an address. Used for pool TVL and basket composition.uint256
0x18160dddtotalSupply()ERC20/ERC721 — total token supply. Used for NAV per share and NFT minted counts.uint256
0x313ce567decimals()ERC20 — token decimals. SNUT 9, cbBTC 8, USDC/EURC 6, NVDAc/AAPLc 8, others 18.uint8
0x95d89b41symbol()ERC20 — token symbol. Useful for contract verification.string
0x06fdde03name()ERC20 — token name string. Useful for verification.string
0x1a686502liquidity()Uniswap V3 — current concentrated liquidity. Do not use getReserves() on V3 pools.uint128
0xddca3f43fee()Uniswap V3 — fee tier in hundredths of a bip. NUT/WETH V3 = 10000 (1%).uint24
0x9cb8a26agetPoolTokens(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

INTERMEDIATEEVENT-DRIVEN$500+
VIABLE

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 - slippage

Profit: 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

ADVANCEDEVENT-DRIVEN$1k+
CAUTION

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

BEGINNEREVENT-DRIVENSMALL
VIABLE

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 fee

Profit: Deviation > gas + venue swap fee.

Risks: Thin early-stage liquidity on graft venues limits size · venue fees vary.

Basket / NAV

pNUT Quad NAV Drift

ADVANCEDRARE$2k+
THEORETICAL

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 fees

Profit: |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

ADVANCEDEVENT-DRIVENCOMPONENTS
EARLY-STAGE

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 - fees

Profit: BPT deviation from NAV > gas + V3 fees.

Risks: Early-stage liquidity · component sourcing for 4 assets · no admin recourse by design.

Grove Graft NAV

ADVANCEDEVENT-DRIVENSCIONS
EARLY-STAGE

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 - fees

Profit: 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)

ADVANCEDSPORADIC$200+
CHALLENGING

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% royalty

Profit: 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)

ADVANCEDSPORADIC$200+
CHALLENGING

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% royalty

Profit: 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

BEGINNERCONTINUOUSN/A
MONITOR ONLY

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

EXPERTLOW-FREQ$500+
OPPORTUNISTIC

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 - slippage

Profit: |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]
Cross-Venue (NUT/SNUT)pNUT Index (Volatility)Mint Club Loop (SALT/NUTINO)

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]
Forward Loop (Mint → DEX)Reverse Loop (DEX → Burn)Cross-DEX Spread

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)
Price (DexScreener primary, RPC fallback)TVL (sum of pools)Pool Identification

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]
Market OverviewPrice AggregationDistribution Analysis

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]
Reserve QueryPool IdentificationLiquidity Depth

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]
Supply QuerySudoswap Pool Balances

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() → 0x3850c7bd

Uniswap V2

XYK AMM · 0.3%

Pairs: NUT/WETH, SNUT/WETH, NUTINO/cbBTC

Secondary venues. Use getReserves() for price.

Base RPC: eth_call getReserves() → 0x0902f1ac

Aerodrome

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 ordering

Mint 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-v2

Balancer 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: 0x3f170631ed9821Ca51A59D996aB095162438DC10

Sudoswap

NFT AMM · Variable

Pairs: PNUTS, ALMD, SALMD NFT pools

Whole-NFT AMM via bonding curves.

Base RPC: balanceOf() on pool contracts

DexScreener

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=usd

Data-Source Hierarchy

1

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

2

DexScreener API

Secondary for V2/Aerodrome prices and TVL. Handles UniV2 math. CANNOT handle UniV3 NUT/WETH — returns NULL or wrong data.

Cost: Free

3

Balancer API

pNUT total liquidity, pool metadata. REST: https://api.balancer.fi/v1/pools/base/{addr}. GraphQL for deeper queries.

Cost: Free

4

CoinGecko API

USD prices for quote tokens only (ETH, BTC, cbETH, AERO). Do NOT use for NUT/SNUT/pNUT directly.

Cost: Free (rate-limited)

5

Mint Club UI / SDK

Bonding curve prices for SALT and NUTINO. Browser automation or V2 SDK. RPC unreliable for minimal proxy contracts.

Cost: Free

6

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.

1

Install dependencies

pip install requests
2

Connect to Base RPC

https://mainnet.base.org (chainId: 8453)
3

Copy the Base RPC Helper from Reads above

4

Fetch NUT price from UniV3 slot0() — check token0 for inversion

5

Fetch all pool reserves via getReserves() — verify token0/token1 ordering

6

Normalize all prices to USD using CoinGecko (ETH, BTC, cbETH only)

7

Calculate spreads across venues — flag when spread > 0.5%

8

For Mint Club prices, use browser automation or the V2 SDK — RPC is unreliable

npm i mint.club-v2-sdk
9

For pNUT NAV, use getPoolTokens(poolId) or balanceOf(BALANCER_VAULT) — NOT balanceOf(pNUT) which is not the basket

10

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