跳至主要内容
本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)

Kaia MEV 拍卖 SDK 搜索指南

Kaia v2.1.0 引入了 MEV 拍卖系统,使搜索者能够参与公平、透明的 MEV 机会拍卖。 本指南全面介绍了使用 Kaia MEV 拍卖 SDK 的搜索工作流程。

服务通知 - MEV 拍卖基础设施暂时中止

作为根据当前使用模式进行的运营优化的一部分,MEV 拍卖基础设施(包括AuctioneerMEV Explorer)已在主网和 Kairos上暂时中止。 Auctioneer 端点(auctioneer.kaia.io, auctioneer-kairos.kaia.io)和 MEV Explorer 端点(mev.kaia.io, mev-kairos.kaia.io)目前不可用。

这种暂停不会*终止 Kaia 的 MEV 框架或搜索器生态系统。 CN 级 MEV 功能仍启用**。 当生态系统条件和搜索者的需求要求恢复活跃的 MEV 拍卖业务时,基础设施将重新上线。 恢复日期尚未确定。

搜索工作流程包括四个主要步骤:

  1. 存款:搜索者将 KAIA 代币存入 "AuctionDepositVault "以资助竞拍活动
  2. 出价:搜索者通过向拍卖师提交密封标书来竞争回跑时段
  3. 提交中标:拍卖师选出中标者,并将中标结果转发给共识节点 (CN)
  4. 执行竞标交易:CN 通过 "AuctionEntryPoint "合同执行中标交易

详细技术背景见 KIP-249

先决条件

在开始之前,请确保您已

  • 有 KAIA 代币存款的资金钱包
  • 为 SDK 示例安装了 Go (版本 1.25+)。
  • 访问 Kaia 网络端点(本指南使用 Kairos 测试网)
  • (可选)已安装 Foundry (用于 cast 命令)

拍卖人终端:

  • Kairos (testnet):https://auctioneer-kairos.kaia.io.
  • 主网:https://auctioneer.kaia.io

探索者终端:

  • Kairos (testnet):https://mev-kairos.kaia.io.
  • 主网:https://mev.kaia.io

网络终端:

合同地址(凯罗斯):

  • AuctionFeeVault: 0xE4e7d880786c53b6EA6cfA848Eb3a05eE97b2aCC
  • AuctionDepositVault: 0x2A168bCdeB9006eC6E71f44B7686c9a9863C1FBc
  • AuctionEntryPoint: 0x2fF66A8b9f133ca4774bEAd723b8a92fA1e28480

有关主网合约地址(主网启动后可用),请查看 Contract Addresses

:::tip[Monitor MEV 机会]

搜索者可以通过以下方式识别有利可图的交易

  • 订阅拍卖商的待处理交易 API:该应用程序接口可直接从共识节点流式传输交易,使您能够实时检测 MEV 机会。 请参阅下文订阅待处理交易 部分。
  • 独立监控网络 mempool:通过订阅待处理 tx,实现自己的 MEV 机会检测逻辑。

:::

步骤 1:存款

拍卖保证金金库 "保存着您的竞拍余额。 您的保证金必须包括投标金额和执行投标所需的预计燃气费。

了解存款要求

您的押金余额必须包括

  • 出价金额:您愿意为赢得拍卖支付的 KAIA
  • 估计天然气费:投标执行期间消耗的天然气(执行后扣除并发送给区块投标人)
Always 保持足够的存款余额

如果您的余额不足以支付出价金额和预计的汽油费,拍卖师将在确认时拒绝您的出价。

存款方法

合同规定了两种存款方式:

方法 1:"存款() "*

使用发件人的余额存款。 存款记入汇款人账户。


# Deploy deposit of 200 KAIA
cast send --private-key <YOUR_PRIVATE_KEY> 0x2A168bCdeB9006eC6E71f44B7686c9a9863C1FBc "deposit()" --rpc-url "https://public-en-kairos.node.kaia.io" --confirmations 0 --value 200000000000000000000

方法 2:"depositFor(地址搜索器)"*

代表另一个账户存款。 用于从单一来源资助多个搜索者地址。


cast send --private-key <YOUR_PRIVATE_KEY> 0x2A168bCdeB9006eC6E71f44B7686c9a9863C1FBc "depositFor(address)" <SEARCHER_ADDRESS> --rpc-url "https://public-en-kairos.node.kaia.io" --confirmations 0 --value 200000000000000000000

检查您的余额

查询当前存款余额:


cast call 0x2A168bCdeB9006eC6E71f44B7686c9a9863C1FBc "depositBalances(address)(uint256)" <YOUR_ADDRESS> --rpc-url "https://public-en-kairos.node.kaia.io"

有关详细的存款示例,请参阅 DEPOSIT.md guide

第 2 步:提交投标书

一旦发现有利可图的交易,请向拍卖师提交竞标书。 出价是密封的(在拍卖结束前隐藏),并根据出价金额进行竞争。

投标结构

投标书由以下字段组成(如 types.go 中所定义):


type AuctionBid struct {
TargetTxRaw []byte // Raw transaction bytes of target tx
TargetTxHash common.Hash // Transaction to backrun
BlockNumber *big.Int // Target block number
Sender common.Address // Your searcher address
To common.Address // Contract to call
Nonce uint64 // Current nonce from AuctionEntryPoint
Bid *big.Int // Your bid in KAIA
CallGasLimit uint64 // Gas limit for your backrun logic
Data []byte // Encoded function call
SearcherSig []byte // EIP-712 signature from searcher
}

信息

您提交出价后,拍卖师会验证并添加自己的签名("AuctioneerSignature"),然后将中标出价转发给共识节点。 您只需提供 SearcherSig(您的 EIP-712 签名)。

提交投标书

SDK 在 example/submitbid.go 中提供了一个完整的工作示例。 示例说明

  • 与拍卖商建立 HTTPS 连接
  • 从 EN 端点检测新区块
  • 生成目标交易和相应出价
  • 向拍卖师提交标书

需要采取的行动:运行代码前,请在代码中替换您的私人密钥。 检查源代码中的 "TODO: "注释。

运行示例:


# From repository root
go run example/submitbid.go

投标验证

拍卖人、投标人和智能合约各自对出价进行特定的验证检查。 主要验证规则包括

  • 区块编号:必须为 currentBlockNumber + 1 或 currentBlockNumber + 2
  • 出价金额:必须大于 0 且小于或等于您的可用存款余额
  • 调用数据大小:不得超过 BidTxMaxDataSize (64KB)
  • 呼叫气体限制:不得超过 BidTxMaxCallGasLimit (10,000,000)
  • nonce:必须与您在 AuctionEntryPoint 中的当前 nonce 匹配。 查询时使用

    cast call 0x2fF66A8b9f133ca4774bEAd723b8a92fA1e28480 "nonces(address)(uint256)" <YOUR_ADDRESS> --rpc-url "https://public-en-kairos.node.kaia.io"

  • 签名:必须是有效的 EIP-712 签名(请参阅 submitbid.go 以了解实施情况)
  • 保证金覆盖范围:必须有足够的保证金来支付 "投标金额 + 估计燃气费
  • 唯一性:同一区块内不能有其他中标(除非针对同一交易)
  • 拍卖人签名:必须有效(由拍卖师在您提交后添加)

有关哪个实体执行哪些检查的完整验证矩阵,请参阅投标验证指南

步骤 3:订阅待处理交易

Auctioneer 提供 WebSocket 订阅服务,可直接从共识节点流式传输待处理交易。 这样,搜索人员就能实时发现 MEV 机会。

SDK 在 example/subscribe_pendingtx.go 中提供了一个完整的示例。

示例说明

  • 建立与拍卖商的 WebSocket 连接
  • 订阅待处理交易流
  • 处理收到的交易以确定 MEV 机会

运行示例:


# From repository root
go run example/subscribe_pendingtx.go

当检测到待处理交易时,订阅会持续打印交易哈希值。 您可以扩展本示例,实现自己的 MEV 检测逻辑。

步骤 4:了解执行

当您的出价获胜时,共识节点会通过 "AuctionEntryPoint "合约执行您的出价:

执行流程

执行过程包括三个阶段:

  1. 验证阶段:合同验证区块号、签名、Nonce 和投标金额
  2. ** 投标付款阶段**:从您的保证金中扣除投标金额并将其发送至生态系统基金
  3. 执行阶段:您的反向运行由 EntryPoint 合同执行(无论执行结果如何,都会支付竞标款)

主要安全功能:

  • 验证器代表您执行竞标(防止撤回竞标以逃避付款)
  • Nonce 增量可防止重放攻击
  • 双重签名(搜索者 + 拍卖者)未经授权替换或操纵出价
  • 出价付款与回转执行结果无关

详细执行流程请参见 ENTRYPOINT.md guide

步骤 5:提取资金

提款需要两个步骤,并有锁定期:

1. 储备金提取

启动提款并开始 60 秒锁定期:


cast send --private-key <YOUR_PRIVATE_KEY> 0x2A168bCdeB9006eC6E71f44B7686c9a9863C1FBc "reserveWithdraw()" --rpc-url "https://public-en-kairos.node.kaia.io" --confirmations 0

2. 完全退出

60 秒后,转账预留金额:


cast send --private-key <YOUR_PRIVATE_KEY> 0x2A168bCdeB9006eC6E71f44B7686c9a9863C1FBc "withdraw()" --rpc-url "https://public-en-kairos.node.kaia.io" --confirmations 0

:::info[Security 说明]

有锁定期的两步提款程序:

  • 防止在拍卖活动期间闪退
  • 通过确保搜索者遵守出价,维护协议的完整性
  • 防止快速资本操纵攻击

:::

应用程序接口参考

拍卖商为搜索者提供两个主要的应用程序接口:

1. 提交投标宣传短片*

  • 终端:POST /api/v1/auction/send
  • 目的:为 MEV 机会提交密封投标

2. 待处理交易订阅

  • 终点:GET /api/v1/subscriber/pendingtx
  • 目的:来自共识节点的待处理交易实时流
  • 示例:请参阅 subscribe_pendingtx.go 中的实现示例。

完整的应用程序接口文档:

故障排除

常见问题

问题类别症状原因解决方案
余额不足被拍卖商拒绝的出价押金余额不包括出价金额 + 预计汽油费使用 depositBalances() 查看余额并存入更多 KAIA
不匹配投标被拒绝或执行失败Nonce 与 AuctionEntryPoint 中的当前 nonce 不匹配在每次出价前使用 nonces() 查询当前的 nonce。 记住:非ces 只在执行时递增,而不是在提交时递增
街区编号范围被拍卖商拒绝的出价目标块超出允许范围[current+1, current+allowFutureBlock]确保区块编号在范围内(通常为 +1 或 +2)。 请参阅常见问题,了解双重提交战略
无效签名被拍卖商拒绝的出价不正确的 EIP-712 签名结构验证域分隔符和类型散列。 正确执行请参考 submitbid.go
气体限值问题执行失败或投标被拒绝调用气体上限 "过低或超过上限 (10,000,000)在测试网上测试反向运行逻辑,以测量实际耗气量

常见问题

订阅

**问:每个搜索器允许多少并发连接?

答:每个搜索器地址只允许有一个待处理交易订阅连接。

**问:订阅连接的有效期有多长?

答:连接在 24 小时后自动关闭。 请注意,如果正在进行滚动更新,连接可能会提前 24 小时关闭。

应用程序接口性能和延迟

**问:在提交投标时,如何尽量减少应用程序接口延迟?

答:拍卖商使用的是带有 HTTPS 协议的 L7 负载平衡器。 初始握手耗时取决于网络状态。 要绕过发送后续竞标 API 时的初始延迟,强烈建议建立保持连接。

**问:我是否应该注意 API 速率限制?

答:为防止被 Auctioneer API 服务器阻止,请不要在短时间内多次发送 ping API。

**问:地理位置是否会影响延迟?

答:是的。 拍卖师服务器在 GCP KR(首尔)地区运行。 建议您将基础架构托管在地理位置较近的区域,以最大限度地减少延迟和地理延迟。

竞价时机和区块目标

**问:为什么我的投标有时会针对错误的区块编号?

答:您提交投标的时间对 CN(共识节点)的开采时间非常敏感。 如果拍卖开始较晚(接近开采时间),出价交易将被插入下一个区块之后(区块编号 +2 而不是 +1)。 这意味着您应该将目标块编号设置为 +2。

**问:如何提高投标包含率?

答:目标区块编号对 CN 挖矿时间表有固有的敏感性:如果您的目标区块编号是 +2,但由于处理时间较早,交易插入的区块编号是 +1,那么竞标就会失败。 因此,建议通过两次发送竞价交易来最大限度地提高包含概率:一次目标区块编号为 +1,另一次目标区块编号为 +2。

最佳做法

  • 监控存款余额:保持足够的余额以支付多次投标
  • ** 小心处理 Nonces**:出价前一定要查询最新的 nonce
  • 优化检测:加快 MEV 检测速度,提高竞争优势
  • 在 Kairos 上进行测试:在部署主网之前在测试网上验证您的策略
  • 监控结果:通过 MEV Explorer 跟踪拍卖结果,完善您的竞价策略
  • ** 设置适当的气体限值**:兼顾充足气体和成本效益

资源

获取帮助

有关问题或疑问:

让这个页面变得更好