Uniswap v4 交易机器人,在自动交易之前需要识别并理解具体资金池。只有代币对并不足够。费用配置、价格刻度间距和钩子地址,也是资金池身份的一部分;所在链和部署的管理器,则确定这一身份在哪里有意义。
这很重要,因为早期自动做市商的熟悉假设,不能原样套用。v4 资金池不一定是独立交易对合约,不一定持有容易解释的自身代币余额。钩子可以增加行为,显示的费用字段也不总是描述下一次兑换当前收取的费用。本指南解释如何评估这些区别,不假定每个资金池或钩子都受支持。所有数字示例均为虚构。
Uniswap V4 交易机器人的资金池身份
Uniswap v4 交易机器人的资金池身份,从正确链和 PoolManager 部署开始。在这一背景下,资金池键包含有序货币、费用字段、价格刻度间距和钩子地址。即使两个熟悉代币符号相同,其中任何字段变化都可能标识不同资金池。
在交易决定中存储完整身份,而不是以后根据搜索结果重建。一个资金池的图表,不应授权针对另一个碰巧兑换相同资产的资金池的交易。
例如,两个假设市场兑换代币 A 和 B。一个采用固定费用,没有额外钩子行为;另一个采用动态费用,并有带自身配置的钩子。将它们视为可互换,可能把第一个市场的研究附着到第二个市场的执行上。
Uniswap 市场指南解释了更广泛的发现流程。V4 要求发现记录在成为可执行指令之前,保留不止一个交易对名称。
理解单例核算模型
PoolManager 在共享合约架构内,持有多个 v4 资金池的状态。因此,查看管理器代币余额,不能单独识别某个具体资金池可用储备。围绕独立交易对合约余额读取构建的旧流程,需要不同解释。
一个有用类比,是为多个独立账户服务的仓库。楼内总库存,并不揭示分配给某个客户的数量。类比有局限,但说明了为什么共享托管和资金池核算必须分别检查。
机器人应使用资金池具体状态和受支持报价方法。还应记录采用了哪种解释,尤其当钩子可能影响简单核心流动性视图之外的核算时。
异常大的管理器余额,不证明预定交易拥有深厚流动性。如果仪表板把该总额宣传为某个新代币市场的可用深度,看似精确的数字可能掩盖基本核算错误。
区分初始化与可用流动性
资金池可以在具有有用流动性之前初始化。初始化建立初始状态,不证明预定规模订单能够按可接受价格执行。对响应新观察资金池的系统,这一区分很重要。
集中流动性增加另一项区别。与资金池相关的资金,并不一定在当前价格活跃。相关区间之外的仓位,不能被当作拟议兑换附近立即可用的深度。
假设一个虚构市场显示大量总存入价值,但购买 200 个计价单位的平均价格,明显差于购买 20。较小报价不能验证较大交易。机器人需要预定数量、当前区间条件和最终预期收到数量。
早期 Uniswap 执行指南讨论了为什么发现速度不能证明可交易性。v4 实现应明确区分观察到资金池创建、观察到注资状态,以及当前可执行报价。
Uniswap V4 交易机器人的钩子检查
Uniswap v4 交易机器人的钩子检查,既涉及允许的回调,也涉及实际行为。钩子可以在资金池操作的指定节点参与。知道启用了哪些回调,能够告诉审核者额外逻辑可能在哪里运行,却不能证明逻辑无害或经济上有利。
读取具体钩子经验证的实现和相关配置。可识别项目标签,或从旧教程复制的地址,都不能证明当前路径使用了已复查部署。
还应区分钩子地址,与通过该地址能够触及的行为。资金池钩子地址是其身份的一部分,但固定地址本身,不能证明背后的所有实现、管理设置或依赖都不可改变。
合理的兼容性记录,会说明机器人理解哪些钩子行为,哪些会使其拒绝执行。支持普通资金池,不自动意味着支持任意钩子逻辑。不支持条件应保持可见,而不是消失在通用报价成功标签背后。
将动态费用视为当前状态
V4 区分配置为固定费用的资金池和配置为动态费用的资金池。对于动态池,相关费用可能取决于更新或钩子行为。不能将用于身份识别的费用字段,始终读作下一笔交易的字面费率。
这改变了缓存方式。资金池键可以保持不变,但经济上相关的费用状态发生变化。仅用两个代币地址索引的缓存,可能同时漏掉正确资金池和当前执行条款。
考虑一个虚构比较,其他费用前经济条件相同。路径 A 收取两个单位兑换成本和五个单位网络支出。路径 B 收取四个单位兑换成本和一个单位网络支出。总成本分别为七和五个单位。较低的显示兑换费,不会产生更便宜的完整路径。
示例排除价格影响和额外行为,以单独展示算术。真实比较必须包括所有已理解成本和预期最终账户收到数量,而不只是一个醒目费用字段。
定义报价实际包括什么
报价应标明输入数量、产出估计、路径、状态参考,以及相关成本处理。如果钩子能够引入额外代币移动或限制,就应确定报价方法是否对其建模。通用接口返回的数字,不自动等于完整经济预测。
区分报价产出与可用收到数量。当代币行为或路径特有费用影响接收账户时,两者可能不同。机器人应知道,最低产出保护约束的是哪个值。
设想报价为 10,000 单位,经过建模扣减后变为 9,700 可用单位。将该路径与另一条交付 9,850 可用单位的路径比较,需要一致定义。按前一条路径更早的 10,000 数字排名,就是在比较执行的不同阶段。
如果是否包含相关影响仍不确定,应报告不确定性,并将该路径排除在自动执行之外。更频繁重复同一个不受支持报价,既不会改善范围,也不会提高可靠性。
读取一致的状态集合
交易决定结合资金池状态、钩子配置、代币元数据、钱包容量和路径权限。在相距很远的时刻读取,可能产生一组从未同时存在的事实。更快轮询,不能替代理解它们的关系。
例如,缓存费用观察可能早于管理更新,而流动性报价晚于更新。即使兑换成功,最终解释也可能把产出归因于错误费用制度。
将状态参考和观察时间与决定一起保留。如果受支持基础设施无法为某个钩子提供足够一致的视图,机器人可以缩小支持范围,或要求新的核验步骤。
Ethereum API 指南解释了为什么响应是带时间的证据,而不是永久事实。对 v4,这一原则既适用于普通余额和资金池价格,也适用于钩子引入的额外状态。
Uniswap V4 交易机器人的执行限制
Uniswap v4 交易机器人的执行限制,应将实际路径绑定到获授权意图。相关字段包括资产、具体资金池背景、支出金额、接收者和可接受收到数量。在所选路由器支持时,到期条件很有用;但不应将其编造为每项核心操作的普遍性质。
区分精确输入和精确输出意图。精确花费 100 单位、要求至少 9,000 枚代币,不同于精确获得 9,000 枚代币、允许最多花费 104 单位。用户界面不应悄悄将一种指令转换为另一种。
假设精确输入报价预计得到 12,000 枚代币,所选最低值为 11,640。这允许少 360 枚,即比估计低 3%。它不承诺按估计执行,也不限制所得仓位未来所有可能亏损。
报价之外,也应保留仓位上限。计入现有库存和未解决承诺后,技术上有效的路径,仍可能违反账户风险敞口政策。
精确识别原生货币与包装代币
V4 支持原生货币表示,因此机器人必须区分原生 ETH 与包装代币,即使两者关联同一种底层资产。路径和核算应标明花费、收到或转换的是哪种形式。
这一区别影响可用资金。账户拥有足够包装代币用于交易,仍可能缺少支付网络支出的原生货币。反过来,将所有原生货币都分配为交易输入,可能使预定执行路径缺少足够容量。
为交易本金、包装或解包移动,以及网络成本,使用独立账本类别。在原生和包装形式之间移动价值,不应自动显示为交易收益。
在一个虚构示例中,账户初始有 0.30 个原生单位,并为预期运营需求预留 0.02。根据该政策,在其他承诺之前,可用原生交易预算最多为 0.28。即使只检查余额显示资金充足,0.29 的提议也超过政策。
将权限映射到实际支出者
资金池、钩子、路由器和授权额度接收方,并不是可互换角色。机器人应解释哪个组件能够移动用户代币,以及为何所选路径需要该权限。识别资金池,不会验证无关授权请求。
独立于交易规模复查权限范围。预定购买 100 单位,不构成假定大得多授权额度具有相同实际风险敞口的理由。账户保留密钥,也不会移除已授予另一个合约的权限。
ERC-20 权限指南提供了底层授权额度区别。应将其应用于受支持 v4 路径实际使用的支出者,而不是批准方便界面提示中出现的任意地址。
权限变化也需要自己的状态。确认授权,不等于购买完成。如果后续兑换放弃或失败,账本和界面应保留获授权代币移动与实际代币移动之间的区别。
理解闪电核算,不要编造免费资金
V4 的闪电核算在操作期间跟踪余额差额,并要求相关义务在交互结束前结清。这可以减少受支持执行流程内不必要的中间转账,但不会创造有保证的交易利润。
机器人仍需要理解完整行动顺序和最终义务。一连串单独看吸引人的步骤,在计入费用、舍入和路径行为之后,可能留下不利最终金额。
它也不会使无关交易变成原子操作。两项独立提交操作,或涉及不同链的行动,不会仅仅因为一个组件使用 v4 核算,就获得全部执行或全部不执行的行为。
在实际交易边界评估原子性。如果策略依赖第二笔独立交易,应描述第一笔成功、第二笔失败时会发生什么。该风险敞口属于仓位计划,而不应被与第一项操作有关的技术术语隐藏。
核对账户,而不是显示价格
最终核算问题是账户花费了什么、收到了什么,以及仍拥有什么。仅凭图表价格或交易已提交消息,无法回答。保留最终交易状态和相关账户变化。
对于一笔虚构购买,100 个计价单位加两个单位单独衡量支出,形成 102 的总获取成本。之后整个已收到仓位净卖出得到 110 单位,产生八单位利润。显示价格上涨 10%,不会改变这八单位结果。
如果只卖出一半,应一致分配获取成本,并保留剩余库存。不能仅仅因为已实现的一半结果有利,就称整个仓位盈利,而忽略未卖一半已经恶化。
当原生货币也用于支付 gas 时,应区分本金移动和网络扣款。否则,余额差额方法可能将运营支出误认为额外购买规模,或掩盖退出实际收到的金额。
在相似资金池之间共享风险敞口
通过两个不同 v4 资金池键交易同一代币,不会创建两种无关经济风险敞口。资金池身份对执行重要,投资组合身份对风险也重要。机器人需要两种视图。
假设账户已经对某代币持有 240 单位风险敞口,另有未解决的 60 单位购买。通过另一个启用钩子的资金池提出新 80 单位提议,会使承诺敞口达到 380。在 350 单位上限下,提议比可用容量超出 30。
取消某条路径,不会在机器人确认结果状态之前释放预留。不确定交易,不应仅仅因为更新资金池现在提供更好报价,就被算作确定不存在。
保留共享资产级预算,同时保留各路径具体记录。这样,审核者既能理解为何选择某个资金池,也能理解为何一笔原本有吸引力的交易,因其他地方已有承诺而被拒绝。
改变交易之前先诊断回滚
交易回滚,不一定意味着最低产出过严。原因可能涉及钩子条件、不兼容代币行为、权限不足,或不再匹配当前状态的路径假设。未分类失败就提高容忍度,可能授权更差价格,却没有解决实际问题。
保留原始决定及失败证据。将预期路径与执行期间观察到的状态和响应比较。如果原因仍未知,新尝试不应仅仅因为之前没有获得代币,就继承无限重试预算。
失败尝试仍可能消耗网络资源。在一次假设会话中,六笔失败交易各花费 0.40 单位,在成功购买开始产生任何盈亏之前,就消耗了 2.40 单位。假定没有其他成本,后来的三单位交易收益,在扣除这些测得尝试后,只剩 0.60。
因此,失败账本应与仓位账本并列。它有助于区分成交交易可接受的策略,与为了达到这些成交花费过多的实现。即使资产市场前景未变,反复出现不兼容状态失败,也可能构成运营暂停的理由。
复查变化,但不要改写过去
钩子配置变化值得带日期记录。审核者比较变化前后结果时,策略不应假装每笔交易都使用今天设置。否则,表面改善可能只是从未记录的执行条件差异。
为每次完成的决定,保留资金池身份、已复查实现背景和相关配置参考。如果新复查改变机器人支持范围,应将该许可用于后续行动,而不是给旧证据重新贴标签,仿佛当时已经符合新标准。
一个实际例子,是账户仅获准交易一小组已理解钩子。向集合添加新钩子,应要求有理由的明确兼容性决定。已经通过旧路径持有某代币,不会自动授权新路径。
这段历史也支持撤回许可。当证据不完整或相互矛盾时,系统可以停止新增风险敞口,同时保留管理已有持仓所需记录。停止增加风险的决定,与处理现有仓位的决定,相关但不同。
有意识地测试不支持案例
有意义的模拟,不应只包括针对熟悉资金池的一次成功兑换。应包括流动性缺失、费用观察过时、钩子配置改变、运营货币不足,以及产出低于配置最低值的路径。
还应测试身份错误。有效代币对如果搭配错误钩子地址或价格刻度间距,不应因为符号看起来正确就通过。预期结果是拒绝身份不匹配的意图,并给出有用解释。
记录每项测试范围。在某一状态成功模拟,提供的是关于该状态和路径的证据,不证明对所有未来配置永久兼容,也不证明与暴露类似回调的另一个钩子兼容。
实际标准是可解释的执行边界。定义完善的机器人能够说明,它理解哪些资金池、哪些事实授权交易、哪些限制约束交易,以及哪些最终证据使账本闭合。边界之外的资金池,应保留为研究候选,直到缺失解释得到解决。