2026 年建立您的第一个原子套利:首次填充的理论
**简短回答** — 原子套利是一项单笔交易,在 A 池中以便宜的价格购买资产,在 B 池中以高价出售资产,如果往返无利可图,则完全恢复。 2026 年,最容易构建的第一个是 Base 或 Arbitrum 上的双池 ETH/USDC 套利 — 相同的资产对,不同的 DEX(Uniswap V3 与 Aerodrome / SushiSwap),在一个池上进

简短回答 — 原子套利是一项单笔交易,在 A 池中以便宜的价格购买资产,在 B 池中以高价出售资产,如果往返无利可图,则完全恢复。 2026 年,最容易构建的第一个是 Base 或 Arbitrum 上的双池 ETH/USDC 套利 — 相同的资产对,不同的 DEX(Uniswap V3 与 Aerodrome / SushiSwap),在一个池上进行大量掉期后价格漂移较小。本文将介绍它:池数学、调用数据、滑点、模拟,以及您的第一个实时填充实际上应该是什么样子。
如果您还不知道什么是 MEV,请从这里开始。
是什么让套利变得“原子”
三个属性:
- 单笔交易。 买入和卖出在同一个交易中,而不是两个连续的交易。
- 有条件执行。 如果利润未实现,则
require(profit > 0, ...)恢复。 - 可快速借用。 资金可以在交易内借入和偿还。
原子性可以保护您免受执行风险。如果在交易过程中出现任何问题,整个事情都会恢复,您只需支付Gas 费,而不是本金。
60 秒理论
两个池对同一资产的定价略有不同。在 A 池进行大量掉期后,其价格远离市场,B 池更便宜。您在 B 上买入,在 A 上卖出,获取价差。
对于使用常量积 (x * y = k) 的两个 AMM 池:
Effective_price_A = (reserve_y_A / reserve_x_A) × (1 - fee_A)
Effective_price_B = (reserve_y_B / reserve_x_B) × (1 - fee_B)
如果 Effective_price_A > Effective_price_B + slippage_buffer,则存在套利。
最佳交易规模是使两个池的边际价格相等的规模。有一个封闭式的解决方案,但您可以使用二分搜索或借用 Foundry 的助手。
选择你的第一双
选择一对:
- 两个池的交易量都很高。 交易量低=价格陈旧,但没有填充深度。
- 两个池的费用等级相同(例如 5bps Uniswap V3 与 5bps Aerodrome)。不同的费用等级使数学变得复杂。
- 直接配对,而非多跳。 保存多跳供以后使用。
- 流动基础资产。 ETH/USDC、ETH/USDT、USDC/USDT。不具有异国情调。
在 Base 上推荐的入门交易对:WETH/USDC。可比较以下两个池:
- Aerodrome 稳定币池(费用 1bps)
- Uniswap V3 0.05% 等级(费用 5bps)
它们拥有数亿的 TVL 和可预测的传播行为。
工具
您需要:
- 目标链的 WSS 端点(例如通过 Alchemy 提供或自托管的 Base WSS)。 2.本地安装 Foundry 进行模拟。
- 一个测试钱包,资金为 50-100 美元的 ETH,用于Gas + 营运资金。
- 两个 DEX 路由器合约的 ABI。
整个设置在笔记本电脑上运行。我们还没有投入生产。
第 1 步:观察价差
订阅两个池上的交换并计算每个块上的价差:
js
const aero = new ethers.Contract(AERO_POOL, AERO_ABI, provider);
const uni = new ethers.Contract(UNI_POOL, UNI_ABI, provider);
provider.on('block', async (n) => {
const [r0a, r1a] = await aero.getReserves();
const [r0u, r1u] = await uni.getReserves();
// ... compute price each side, then spread
});
观察一个小时。大多数区块的价差都 <1 个基点。部分区块(在大额交换之后):价差为 5–30 个基点。请留意有利可图价差出现的频率。
第 2 步:盈利门槛
精确定义“有利可图”。以 5,000 美元的操作规模为例:
gross_profit = trade_size × spread_bps / 10000
gas_cost = gas_units × gas_price(以美元计)
slippage = trade_size × your_slippage_buffer
fees_paid = trade_size × (fee_A + fee_B)
net_profit = gross_profit − gas_cost − slippage − fees_paid
在 Base 上,一笔双池套利交易的 Gas 用量约为 25 万–40 万个单位。按 2026 年约 0.001 gwei 的典型 Gas 价格计算,成本约为 0.04–0.10 美元,非常便宜。
对于价差为 8 个基点的 5,000 美元交易:
- 毛利:4.00 美元
- Gas:0.08 美元
- 滑点缓冲:1.50 美元(3 个基点)
- 手续费:3.00 美元(已通过池滑点支付)
- 净利润:约 2.40 美元
这是一个微薄的利润空间。将 5,000 美元交易的最低筛选门槛设为价差 > 10 个基点。
第三步:构建 Calldata
二池套利调用数据结构:
1. Approve router_B (if not pre-approved) - skip in production with infinite approvals
2. swap on router_B: USDC → WETH
3. swap on router_A: WETH → USDC
4. require(usdc_out > usdc_in + min_profit, "unprofitable")
为简单起见,请使用一个调度程序合约,在一次调用中完成所有四个操作。 FRB 代理发货一个(在每个链上验证),或者编写您自己的最小合同。
最小坚固性:
function executeArb(
bytes calldata buyCalldata,
bytes calldata sellCalldata,
address tokenOut,
uint256 minProfit
) external {
uint256 startBalance = IERC20(tokenOut).balanceOf(address(this));
(bool ok1, ) = router_B.call(buyCalldata);
require(ok1, "buy failed");
(bool ok2, ) = router_A.call(sellCalldata);
require(ok2, "sell failed");
uint256 endBalance = IERC20(tokenOut).balanceOf(address(this));
require(endBalance >= startBalance + minProfit, "no profit");
}
真正的实现更加困难(处理原生 ETH、多个路由器、V3 池的回调)。将以上内容视为说明性的。
第 4 步:模拟每次尝试
提交之前,在分叉链上模拟交易:
anvil --fork-url $RPC_URL --fork-block-number latest
cast send --private-key $TEST_KEY $DISPATCHER \
"executeArb(bytes,bytes,address,uint256)" \
$BUY_CALLDATA $SELL_CALLDATA $WETH 1000000
如果模拟成功且利润 > min_profit,则您可以发送。跳过模拟是初学者机器人恢复的第一大原因。
第 5 步:提交
对于 Base,提交到公共内存池(2026 年大多数 L2 上还没有 PBS)。使用中等优先级费用登陆下一个区块:
js
const tx = await wallet.sendTransaction({
to: DISPATCHER,
data: dispatchCalldata,
gasLimit: 500000,
maxFeePerGas: ethers.parseUnits('0.0015', 'gwei'),
maxPriorityFeePerGas: ethers.parseUnits('0.0005', 'gwei')
});
const receipt = await tx.wait();
console.log('Status:', receipt.status, 'Gas used:', receipt.gasUsed);
如果 receipt.status === 1,你就成功了。查看 receipt.logs 以获取实际捕获的利润。
第 6 步:衡量发生了什么
您的前 20 次尝试主要会:
- 恢复(被另一个套利者抢先):50–70%
- 已落地但与模拟不同:记录最终回执,并说明状态、费用和排序差异
- 成功落地且盈利:10–25%
这很正常。该比率会随着您的调整而提高(更低的延迟、更好的信号过滤、更智能的调整)。
要记录的内容:
- 决策时观察到的传播
- 着陆时观察到的传播
- 预测利润与已实现利润
- 使用的Gas与估计的Gas
- 为什么每次恢复都会发生(Foundry 跟踪帮助)
第 7 步:拉紧环
100 次尝试后,您将看到以下模式:
- 传播到某个阈值之上更可靠
- 某些时段套利频率较高
- 特定竞争对手在某些窗口中比您更快
使用模式来过滤您提交的内容。提交更少、更高质量的尝试胜过喷洒。
常见的 First-Bot 错误
- 缺少批准:合同在第一次致电时恢复。在部署脚本中添加无限批准。
- 错误的池费用等级:数学表示利润,实际掉期表示损失,因为数学使用 5bp 池,但称为 30bp 池。
- 陈旧储备:读取区块 N 的储备,在区块 N+1 提交——状态漂移。重新阅读合同内部或使用基于回调的定价。
- 滑点上限太紧:原本会略有盈利的交易会恢复。根据实际实现与模拟进行校准。
- 代币小数位数:USDC 有 6 位,WETH 有 18 位。数学中相差 12 是一个常见的错误。
两池之后下一步是什么
一旦双池套利运行干净:
- 三池三角套利:USDC → WETH → DAI → USDC。
- 具有寻路功能的多重 DEX:动态选择使用 N 个池中的哪两个。
- JIT 流动性:围绕即将到来的掉期提供和拉动 LP。
- 跨链套利:需要桥接成本建模(高级)。
技能堆栈复合:池数学→呼叫数据→模拟→延迟→出价。二池原子是基础。
常问问题
我必须自己写智能合约吗?
为了学习,是的。对于生产,FRB Agent 在每个支持的链上发送经过验证的调度程序合同。在生产中使用内置插件;在 dev 中编写自己的代码来理解它们。
为什么大多数尝试都无利可图?
您正在与具有更低延迟、更好的信号过滤和预先批准的流动性的机器人竞争。初学者获得剩余的点差。没关系——还有一些剩菜值得捕捉。
我应该从多少资金开始进行套利?
2000-5000 美元。低于此水平,Gas对资本是敌对的。在此之上,您可以在调整后进行缩放。
这是策略三明治攻击吗?
不会。DEX 之间的双池套利不会从用户的互换中提取——它会均衡各个池之间的价格。这是协议积极的。
我可以在以太坊 L1 上运行它吗?
技术上是的,作为初学者在经济上是痛苦的。每次尝试 10-50 美元的 L1 Gas 会吞噬交易规模 <5 万美元的大部分价差。从 L2 开始。
相关阅读
这是一个工程教程。仅在测试网或纸质交易模式下运行后才能部署资金。不是财务建议。
相关文章
延伸阅读与工具
讨论
暂无笔记。添加第一条观察,或在以下平台与团队分享链接 X (@MCFRB).