docs(research): what fortiblox-arc-arb teaches arc-mev-bot (ordering model, MEV feasibility, Phase 2-5 learnings) #6

Merged
buddysan merged 1 commit from research/arc-arb-learnings into main 2026-09-16 13:47:12 +00:00
Owner

Summary

Research lane deliverable: docs/research/arc-arb-learnings.md + data extracts + two read-only probes. Mines fortiblox/fortiblox-arc-arb (repo @ da4da50, issue #79 thread incl. revert forensics #47152, PR #125 contention backoff + profit-derived tip ceiling, PR #113 tip re-tune, 21 measurement docs, 17 director docs), the live mainnet bot's logs on the validator, LXC 140's arc-competitor-watch-mainnet output, and fresh probes against rpc.testnet.arc.io / rpc.mainnet.arc.io. Ideas only — no code copied.

Verified live today (probes in docs/research/probes/, extracts in docs/research/data/)

  • No mempool surface on testnet (txpool_status/txpool_content/eth_newPendingTransactionFilter-32601); arc-arb verified the same on all 4 mainnet providers. Backrun-of-pending / frontrun / sandwich / JIT: not viable by chain design — closed, not deferred.
  • Blocks are priority-fee ordered: testnet 0 inversions / 160 blocks; mainnet 40 adjacent inversions / ~9,900 tx, all explained by same-sender nonce chaining or legacy gasPrice txs (2 ≤0.1 gwei ties).
  • extra_data (8-byte BE) == next block's baseFeePerGas 159/159 on both nets; eth_maxPriorityFeePerGas returns 0 (useless).
  • Gas token: native balance == USDC ERC-20 view × 1e12 on 4/4 addresses across both chains → architecture §4.2 rate is exactly 1e12 (closes an "unverified" row). Corrects arc-arb's "separate balances" claim (read-skew artifact).
  • Mainnet fee regime at 13:36 UTC: base fee 50-62 gwei and moving (48 % full blocks), index-0 tip p50 ≈ 200 gwei / p90 2,000 gwei, ~30 tx/block above 25 gwei — arc-arb's 07:34 UTC "20-gwei-pinned market" re-tune (cap 25 gwei) was stale within 6 h, and its 17/17 real sends today reverted on a contested pair (traced one lost to 0xe1ee… at index 0, 7,383 gwei).

Content

  • §2 Arc ordering & inclusion model (mempool, ordering rule, tip→index, inclusion latency, base fee, gas token, pruning/RPC limits) — every row tagged verified / measured / documented / unverified with source.
  • §3 Feasibility matrix: cyclic arb (viable now), landed-swap backrun (= our search seeding), pending backrun/frontrun/sandwich/JIT (never), liquidations (viable when a mainnet lending protocol has debt — reserve adapterKind=3), flash incl. v4 zero-fee (viable now), oracle/NFT (watch), intents/CEX/AA (no).
  • §4 Reusable learnings per phase with numbers: depth floor + price-coherence, Initialize-event v4 sweep, word-by-word v3 tick walk, search budget (3-hop 11 ms p99, 4-hop 210 ms), measured per-hop gas table, adapter-code preflight (ZeroOut ×9,506 incident), submit-role aliasing bug, -32005 as a first-class error, per-route revert-streak backoff (4×3^(n-1), cap 4,800 blocks), affordable-tip ceiling, regime-derived bidding, alert rules, cutover gotchas.
  • §5 competitor table (public addresses only), §6 proposed deltas to docs/plan.md / docs/architecture.md (project-director applies), §7 corrections for the reference repo, §8 reproduction.

Scope / safety

Files: docs/research/** only. No secrets, no key material, no fortiblox wallet or executor addresses (grep-checked). Probes send nothing, batch ≤ 8, sleep between batches. make lint + make test pass locally. No bot code touched; the pool-refresh/bidding/submit changes are proposed as plan/architecture deltas, not implemented here.

🤖 Generated with Claude Code

## Summary Research lane deliverable: `docs/research/arc-arb-learnings.md` + data extracts + two read-only probes. Mines `fortiblox/fortiblox-arc-arb` (repo @ `da4da50`, issue #79 thread incl. revert forensics #47152, PR #125 contention backoff + profit-derived tip ceiling, PR #113 tip re-tune, 21 measurement docs, 17 director docs), the live mainnet bot's logs on the validator, LXC 140's `arc-competitor-watch-mainnet` output, and fresh probes against `rpc.testnet.arc.io` / `rpc.mainnet.arc.io`. Ideas only — no code copied. ## Verified live today (probes in `docs/research/probes/`, extracts in `docs/research/data/`) - No mempool surface on testnet (`txpool_status`/`txpool_content`/`eth_newPendingTransactionFilter` → `-32601`); arc-arb verified the same on all 4 mainnet providers. Backrun-of-pending / frontrun / sandwich / JIT: not viable by chain design — closed, not deferred. - Blocks are priority-fee ordered: testnet 0 inversions / 160 blocks; mainnet 40 adjacent inversions / ~9,900 tx, all explained by same-sender nonce chaining or legacy `gasPrice` txs (2 ≤0.1 gwei ties). - `extra_data` (8-byte BE) == next block's `baseFeePerGas` 159/159 on both nets; `eth_maxPriorityFeePerGas` returns 0 (useless). - Gas token: native balance == USDC ERC-20 view × 1e12 on 4/4 addresses across both chains → architecture §4.2 rate is exactly 1e12 (closes an "unverified" row). Corrects arc-arb's "separate balances" claim (read-skew artifact). - Mainnet fee regime at 13:36 UTC: base fee 50-62 gwei and moving (48 % full blocks), index-0 tip p50 ≈ 200 gwei / p90 2,000 gwei, ~30 tx/block above 25 gwei — arc-arb's 07:34 UTC "20-gwei-pinned market" re-tune (cap 25 gwei) was stale within 6 h, and its 17/17 real sends today reverted on a contested pair (traced one lost to `0xe1ee…` at index 0, 7,383 gwei). ## Content - §2 Arc ordering & inclusion model (mempool, ordering rule, tip→index, inclusion latency, base fee, gas token, pruning/RPC limits) — every row tagged verified / measured / documented / unverified with source. - §3 Feasibility matrix: cyclic arb (viable now), landed-swap backrun (= our search seeding), pending backrun/frontrun/sandwich/JIT (never), liquidations (viable when a mainnet lending protocol has debt — reserve `adapterKind=3`), flash incl. v4 zero-fee (viable now), oracle/NFT (watch), intents/CEX/AA (no). - §4 Reusable learnings per phase with numbers: depth floor + price-coherence, `Initialize`-event v4 sweep, word-by-word v3 tick walk, search budget (3-hop 11 ms p99, 4-hop 210 ms), measured per-hop gas table, adapter-code preflight (ZeroOut ×9,506 incident), submit-role aliasing bug, `-32005` as a first-class error, per-route revert-streak backoff (4×3^(n-1), cap 4,800 blocks), affordable-tip ceiling, regime-derived bidding, alert rules, cutover gotchas. - §5 competitor table (public addresses only), §6 proposed deltas to `docs/plan.md` / `docs/architecture.md` (project-director applies), §7 corrections for the reference repo, §8 reproduction. ## Scope / safety Files: `docs/research/**` only. No secrets, no key material, no fortiblox wallet or executor addresses (grep-checked). Probes send nothing, batch ≤ 8, sleep between batches. `make lint` + `make test` pass locally. No bot code touched; the pool-refresh/bidding/submit changes are proposed as plan/architecture deltas, not implemented here. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
docs(research): what fortiblox-arc-arb teaches arc-mev-bot — ordering model, MEV feasibility, Phase 2-5 learnings
All checks were successful
ci / forge-tests (pull_request) Successful in 4s
ci / python-tests (pull_request) Successful in 5s
ci / forge-tests (push) Successful in 12s
ci / python-tests (push) Successful in 13s
46e47bcd92
Read-only research pass over the sibling Rust bot (repo, Forgejo issues/PRs incl.
PR #125 contention backoff + profit-derived tip ceiling, 21 measurement docs, 17
director docs), its live mainnet logs, LXC 140's competitor-watch output, and
fresh read-only probes against both public RPCs.

Verified today: no mempool surface (txpool_*/pending filter -32601); blocks are
priority-fee ordered on testnet (0 inversions/160 blocks) and mainnet (every
inversion = nonce chain or legacy tx); extra_data == next base fee 159/159 on
both nets; native balance == USDC ERC-20 view x 1e12 (gas token settled);
mainnet fee regime moved from 20 gwei pinned to 50-62 gwei base / ~200 gwei
index-0 tips within 6 h of arc-arb's 25 gwei cap re-tune.

Deliverables: docs/research/arc-arb-learnings.md (ordering model, feasibility
matrix for arb/backrun/frontrun/sandwich/liquidations/JIT/flash/oracle, reusable
Phase 2-5 learnings, proposed plan/architecture deltas), data/*.json extracts
(no fortiblox addresses), probes/*.py (stdlib, send nothing).

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Signed-off-by: BuddySan <[email protected]>
fortiblox-dev left a comment

automerger v2 auto-approved: all 7 gates pass. Approver: fortiblox-dev (opposite-identity rule). Gates: mergeable=true,label=auto-merge,author=buddysan,identity=ok,status_checks=not_required,signatures=upstream_BP_only,opt_in=repo_marker.

automerger v2 auto-approved: all 7 gates pass. Approver: fortiblox-dev (opposite-identity rule). Gates: mergeable=true,label=auto-merge,author=buddysan,identity=ok,status_checks=not_required,signatures=upstream_BP_only,opt_in=repo_marker.
buddysan deleted branch research/arc-arb-learnings 2026-09-16 13:47:13 +00:00
Author
Owner

Auto-merged by forgejo-automerger at 2026-09-16 13:47:13 UTC. Approver: fortiblox-dev (opposite-identity rule, Option C upgrade 2026-05-13). Merger: buddysan via fast-forward-only (NOT admin force_merge). Criteria passed: mergeable=true,label=auto-merge,author=buddysan,identity=ok,status_checks=not_required,signatures=upstream_BP_only,opt_in=repo_marker. Branch 46e47bcd92 merged onto main and feature branch deleted. See project_forgejo_automerger memory for rationale.

Auto-merged by **forgejo-automerger** at 2026-09-16 13:47:13 UTC. **Approver:** `fortiblox-dev` (opposite-identity rule, Option C upgrade 2026-05-13). **Merger:** `buddysan` via `fast-forward-only` (NOT admin `force_merge`). **Criteria passed:** `mergeable=true,label=auto-merge,author=buddysan,identity=ok,status_checks=not_required,signatures=upstream_BP_only,opt_in=repo_marker`. Branch `46e47bcd92` merged onto `main` and feature branch deleted. See `project_forgejo_automerger` memory for rationale.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
fortiblox/arc-mev-bot!6
No description provided.