Skip to main content

Arbitrage Agent: AI-Powered DEX Arbitrage with On-Chain Memory

The arbitrage agent (arbitrage-agent/) is an autonomous AI agent that monitors WETH/USDC price differences across four DEX pools on Ethereum mainnet and Arbitrum, executes intra-network arbitrage via Balancer V2 flash loans, and mints an on-chain Mnemos memory snapshot after each successful trade.

Architecture​

arbitrage-agent/
├── contracts/ Solidity flash loan executor (ArbitrageExecutor.sol)
├── src/
│ ├── tools/ AI-callable tools: prices, balance, gas, flash_loan
│ ├── agent/ Agentic loop + AI provider adapters (Claude, Gemini, OpenAI)
│ └── mnemos/ Mnemos integration: bundle builder + client wrapper
└── test/ Unit and integration tests

Pools Monitored​

NetworkDEXPair
ETH MainnetUniswap V2WETH/USDC
ETH MainnetUniswap V3 0.05%WETH/USDC
ArbitrumSushiSwap V2WETH/USDC
ArbitrumUniswap V3 0.05%WETH/USDC

Intra-network only. Cross-network arbitrage (ETH ↔ Arbitrum) requires a bridge and is out of scope.

How It Works​

Each polling interval, the agent runs an agentic loop:

  1. Fetches prices from all 4 pools in parallel
  2. Checks wallet balances on both networks
  3. If a spread looks profitable, estimates gas cost
  4. Simulates the flash loan on-chain to verify profitability before submitting
  5. If profitable, executes the flash loan: borrow USDC → swap → repay, atomically in one transaction

The ArbitrageExecutor contract (deployed separately) reverts the entire operation if profit < minProfit, so there is no risk of a partial execution.

AI Providers​

The agent supports three AI providers. Set MODEL to select:

PrefixProviderExample
gemini-Google Gemini (default)gemini-2.0-flash
claude-Anthropic Claudeclaude-sonnet-4-6
gpt-, o1, o3, o4OpenAIgpt-4o

Setup​

1. Install dependencies​

cd arbitrage-agent
npm install

2. Deploy the ArbitrageExecutor contract​

npm run build:contracts
forge create --rpc-url $ETH_RPC_URL --private-key $PRIVATE_KEY \
contracts/src/ArbitrageExecutor.sol:ArbitrageExecutor \
--constructor-args <BALANCER_VAULT> <WETH> <USDC> <UNIV2_ROUTER> <UNIV3_ROUTER> <UNIV3_QUOTER>

Set EXECUTOR_ETH and EXECUTOR_ARB in .env to the deployed addresses.

3. Configure environment​

# Required
ETH_RPC_URL=<ethereum-rpc>
ARB_RPC_URL=<arbitrum-rpc>
PRIVATE_KEY=0x<wallet-private-key>
MAX_TRADE_USDC=100 # hard cap per swap (safety rail)

# AI provider — set the key for your chosen MODEL
GEMINI_API_KEY=<key> # for gemini-*
ANTHROPIC_API_KEY=<key> # for claude-*
OPENAI_API_KEY=<key> # for gpt-*/o* models

# Optional
MODEL=gemini-2.0-flash # default
POLL_INTERVAL_SECONDS=30 # minimum 10

# Mnemos — all 9 required to enable on-chain memory (omit any to disable)
OG_RPC_URL=https://evmrpc.0g.ai
OG_STORAGE_NODE=https://indexer-storage-turbo.0g.ai
OG_CHAIN_ID=16661
MNEMO_REGISTRY_ADDRESS=0x848F7000223dd2eBa5ac30b37d52EdA8D058E72E
MNEMO_MARKETPLACE_ADDRESS=0xFeb5Ac77Cd7746e2b35825dA800458D660D10209
MNEMO_BUY_PRICE=1000000000000000000
MNEMO_RENT_PRICE_PER_DAY=100000000000000000
MNEMO_FORK_PRICE=500000000000000000
MNEMO_ROYALTY_BPS=500

4. Run​

npm start

Mnemos Integration​

When all 9 MNEMO_* / OG_* env vars are set, the agent automatically mints a memory token on 0G Chain after each successful trade execution.

What the Memory Bundle Contains​

Each snapshot packages the full context of the trade:

  • Trade details: network, DEX, token pair, borrow amount, expected profit, gas cost, transaction hash, timestamp
  • Prices at trade time: all 4 pool prices at the moment the decision was made
  • AI reasoning: the model's full reasoning text explaining why it chose to execute
  • Session stats: cumulative trade count, total gas cost in USD

Automatic Listing​

After minting, the agent immediately lists the new token on the marketplace with the configured MNEMO_* pricing terms. This means every trade record is available for other agents to buy, rent, or fork on arrival.

Failure Handling​

If snapshot or list fails, the error is logged and the agent continues trading. Memory snapshots never block execution.

If any of the 9 Mnemos vars are missing, Mnemos is silently disabled. The startup log shows Mnemos: disabled so you know immediately whether it's active.

Safety Rails​

All safety rails are enforced by the runtime — the AI model cannot override them:

RailEffect
MAX_TRADE_USDCHard cap on borrowAmount — rejected with an error returned to the model
Token whitelistOnly WETH and USDC addresses are permitted in flash loan calls
minProfit floorRaised to at least 1.5× estimated gas cost before submitting
Sequential executionOnly one execute_flash_loan_arbitrage call per iteration
Simulate-before-writesimulateContract on executeArbitrage catches reverts before spending gas
Atomic executionThe ArbitrageExecutor contract reverts if profit < minProfit

Testing​

# Unit tests — no RPC required
npm run test:unit

# Integration tests — requires ETH_RPC_URL + ARB_RPC_URL
ETH_RPC_URL=<url> ARB_RPC_URL=<url> npm run test:integration