# exec 11 Oct 2026

## #1873/1874: the GMGN "401 per-token sell-quote refusal" is a sell-blocking hook (honeypot)
Own eth_call of the pick pool (fm_sim Sim.sol, buy then sell back) on 0x7c698f (the 15:31 skip), 0x5ebda7, 0x7262b2:
buy works, SELL REVERTS (selector 0x90bfb865, hook contract refuses the sell). GMGN 401 / 40003712 = same thing seen from GMGN.
So the paper skip was correct: these coins cannot be sold. Not a GMGN bug, not a key problem.

## #1868: local on-chain quoter (done, paper only)
fm_l2.py: quote_local() = buy mode 1, sell of N tokens = buy-N-worth then mode 2 round trip, scaled (about 0.4 s, 2-3 eth_calls).
quote() tries local first (needs the pick pool id), falls back to GMGN only if local errors (pool key not found for picks older than ~1 day).
Off switch: touch /opt/fm/LOCAL_QUOTE_OFF. Live fmmc5 untouched. fml2/fml2v restarted 15:37 BKK (paper).
Tested on 14 recent picks: normal pools quote buy+sell with roundtrip 0.9997; honeypots revert; empty pools reported.
Backup: fm_l2.py.bak_exec_*. Reviewer please check. Open: GMGN is still the fallback; once 24 h of logs show no local_quote_fail,
remove the fallback (then paper has zero GMGN dependency).

## #1869: the 5 near-zero live trades: all rugs (liquidity pulled), none a failed sell of ours
| trade | size | what happened |
|---|---|---|
| 7 Oct 02:38 0x313e89 | $10 | 429 on the price walk, stop sell 20 s later, pool already empty (burn event 02:42), 0.0039x |
| 8 Oct 20:05 0xd012ab | $50 | stop sent 0.3 s after trigger; GMGN 400 GEvmValueLossTooHigh because pool WETH was 0.0002 (drained); retry sold 0.006x |
| 8 Oct 20:12 0xdc5400 | $50 | same: pool WETH 0.0031 at sell, GEvmValueLossTooHigh, retry 0.0066x |
| 9 Oct 23:15 0x9fba63 | $10 | held 1 h (peak 4.1x), then price went to 0.01x in one step; stop sent 6.6 s after the cross (cross->seen 5.9 s feed lag) but the pool was already gone |
| 11 Oct 09:51 0x2d8532 | $10 | held 1 h, collapse to 0.01x, stop 3.3 s after cross, burn event 5 min later |
Sell quote at the stop was 0.01x of cost in every case = the pool had already been drained by the dev. A 1-5 s faster stop would not have changed it
(one-step liquidity pull). The "retry_unsold" 8 Oct pair was not a failed route: the first sell was refused by the router because the output was ~0.
Fix is on the entry side, not execution: nothing for Ben to change in the sell path. Ideas for analyst1: skip coins whose pool has a hook/owner able to
pull liquidity (check LP holder / hook address of the 4 cases vs. survivors); the $50 size (2 of the 5) cost 0.039 ETH, the $10 ones 0.012 ETH.
