Verification log

Every write path must be exercised on testnet (46630) first and then with a tiny mainnet (4663) proof. Hashes are recorded here. Read paths are verified against the live chain as part of the build.

Verified live (read paths), 2026-09-22

CheckResultEvidence
Chain ids4663 mainnet, 46630 testneteth_chainId on both official RPCs
Multicall3, Permit2 bytecodepresent on both chainseth_getCode
USDG total supply719,115,878.71 USDGpackages/chain smoke script, block 69713865
Uniswap v4 quote ETH to USDG0.01 ETH = 27.4157 USDG (pool fee 3000, tickSpacing 60)pnpm --filter @talon/chain smoke 4663
Pons factory configlaunch fee 0.0005 ETH, config 0 enabled, phantom 1.68 ETH, graduation 4.2 ETH, pool fee 0 / tickSpacing 200, creator tax cap 10%packages/chain/scripts/pons-probe.ts
Pons hookfactory.memeHook() = 0xe5e7...6044same
Pons curve buy mathsimulated buy(0.01 ETH) = 5,740,664 tokens, formula = 5,740,671eth_call with state override on curve 0xa4f4...3e9e
Pons curve ABI selectorsall 46 selectors match live bytecodepackages/chain/test/pons.test.ts
Launch activity278 TokenLaunched events in 20,000 blocks (~33 min)eth_getLogs on the factory

Automated checks (2026-09-22)

SuiteResult
pnpm typecheck13 packages clean
pnpm test379 passed, 2 skipped (live RPC tests, run with TALON_LIVE_TESTS=1)
pnpm lint368 files clean
pnpm buildapi, worker, mcp, cli, telegram, web all build; web renders 22 static pages with no API running
forge test52 passed, 100% coverage on contracts/src
API boot without DB/health reports 503 { db: "error" }, OpenAPI serves 73 paths
Live market readtoken_lookup against mainnet resolves USDG and a fresh Pons launch (TALON_LIVE_TESTS=1)

End-to-end (connect a wallet and sign in, create agent, fund, chat, swap) has not been run because this machine has no Postgres or Redis and no Docker. Run pnpm infra:up on a machine with Docker, or point DATABASE_URL / REDIS_URL at the Railway Postgres and Redis services, then follow the steps below.

Contracts

NetworkFeeSplitterFactoryDeploy txStatus
46630 testnetBlocked: needs a funded deployer key. Run contracts/README.md deploy steps with DEPLOYER_PRIVATE_KEY and PLATFORM_ADDRESS, then fill this row and packages/chain/src/addresses/46630.ts.
4663 mainnet0x1F911e9f1c6caF205af99749c12726A7478Fee92 (v2)0xb3fa021f5263f4cbb0ccfb13ac3f163214edeacb25f15d63da542bf13fdc04b6Deployed 2026-10-03, block 78911117, 1,206,857 gas. Runtime bytecode matches the build with the platform and escrow immutables masked; platform() = 0xEF235b874a7BC1dACEC00AEA4efA93C5eabA756C, escrow() = Pons fee escrow 0xd3AFEB2a57f70eF218Aa82451c51B2fb0416Ac9e; computeAddress matches the app's CREATE2 prediction. On a mainnet fork, v2 splitter code collected a live ETH credit and a live GLD token credit from the real escrow and split both 75/25.
4663 mainnet (v1, superseded)0x21d265f5088FD17288efD75a4Eb53eb5Ee6105B80x7663...7405v1 splitters cannot claim from the Pons escrow. Retired 2026-10-03; the one launch on it (TPROOF test) keeps its splitter.

Local proof: forge test 52 passed, forge coverage 100% lines/branches/functions on src/. Deploy scripts verified end to end on a local anvil (predicted CREATE2 address equals deployed address; second deploy is idempotent).

Write paths

PathTestnet 46630Mainnet 4663 (tiny)Notes
wallet_transfer (ETH)pendingpendingNeeds a funded agent wallet.
approve_token (Permit2)pendingpending
swap_execute ETH to USDGpending (v4 periphery not verified on testnet)Done 2026-10-02: 0.0001 ETH to 0.273584 USDG via the Universal Router, 0x842e...99c1Run from web chat by agent 0x483b46dBe2272f6E284eBc61985C5D94656e870a (owner: treasury).
curve_buy / curve_sellnot possible (Pons has no testnet deployment)pending (target: 0.0005 ETH)
launch_tokennot possible (no Pons testnet)pending (target: 0.0005 ETH launch fee, no initial buy)
earnings_claimpending (after a testnet splitter deploy and a manual ETH send to it)pending

Definition of done (end to end)

  1. Connect a wallet and sign in, create an agent, fund it from the connected wallet.
  2. Chat with the agent and run a swap within its policy.
  3. Launch a token from the agent and see the FeeSplitter as the creator fee recipient.
  4. Withdraw from the agent back to the connected (owner) wallet.

Sign-in is wallet only (Sign-In With Ethereum). Nothing in this flow uses email. WalletConnect in the web app needs a Reown project id in NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID; injected wallets work without it.

How to complete the mainnet proofs

  1. Create apps/api/.env from .env.example with Privy credentials (WALLET_PROVIDER=privy) or, for a throwaway proof, WALLET_PROVIDER=local with a keystore password. Start Postgres + Redis (pnpm infra:up), pnpm db:migrate, pnpm dev.
  2. Connect a wallet and sign in, create an agent, fund it from the connected wallet with about 0.005 ETH on Robinhood Chain (bridge to your wallet first at https://portal.arbitrum.io/bridge?destinationChain=robinhood-chain).
  3. Run each of these and paste the hashes above:
    npx @talon/cli swap 0.001 ETH USDG --yes
    npx @talon/cli approve USDG --spender universal_router
    npx @talon/cli swap 1 USDG ETH --yes
    npx @talon/cli buy <fresh-pons-token> 0.0005 --yes
    npx @talon/cli sell <that-token> <amount> --yes
    npx @talon/cli launch --name "Talon Test" --symbol TTEST --image ./logo.png --description "test" --yes
    npx @talon/cli earnings claim
    

AgentFeeHook mainnet deploy (2026-10-04)

CheckResultEvidence
Deploy0x92a52c923355008d757b55842046b9DE53f48000, low 14 bits clear (no hook permissions)tx 0xaea4bbae66e40a87a50ce47dca2ed68b314c284697293948276ffd7c45d024d2, block 79704180
Pool initSPY/USDG, dynamic fee, tickSpacing 60, poolId 0x362e62d876b7ff73d2c2cde9cbedc1cc1a16dac38db54f24061142542989a9cctx 0x362c3031f30fbff4c253141b1cb09cafb2ea4e5494739e54961ac4c734fcc7f3
Live stateowner deployer 0xE445...0686, agent 0x63a9...59ab, fee 10000, bounds 500 to 10000, 900 s interval, 7200 s stalecast call on each getter; StateView getSlot0 lpFee 10000 at sqrtPrice 2200257788955203276805070 (about $771)
Bytecoderuntime identical to forge build apart from immutables (metadata hash included)byte compare of eth_getCode against out/AgentFeeHook.sol
Source verifiedBlockscout: full match, AgentFeeHook, solc v0.8.28+commit.7893614a, 1,000,000 runs, cancun, MIT, 2026-10-06https://robinhoodchain.blockscout.com/address/0x92a52c923355008d757b55842046b9DE53f48000?tab=contract
Fork tests5 passed against the real PoolManager and PositionManagerFORK_TESTS=true forge test --match-path "test/fork/*"
First fee switches0.30% at 2026-10-05 13:34 UTC (9:34 ET), 1% at 20:04 UTC (16:04 ET), hourly check-ins betweenGET /api/v1/hooks/spy history, FeeUpdated events
Seedposition #3625625 owned by the deployer, liquidity 73815829378425, range about +/-10% around $771; 0.1272 SPY and 99.9 USDG inmint tx 0x4e25e4769661307385d9d501bb6ed989ac0c360d63e7b006cade5617df642631, block 81514930; rehearsed on a fork first