SuperAPI AI 工具集

permissioned-pools-deployer

部署与运维

查看项目

更新于 10-15 12:05

技能介绍

用途

permissioned-pools-deployer 是一个引导式技能,用于执行 Uniswap v4 许可池(Permissioned Pool)的链上设置序列。它从 permissioned-pools-configurator 生成的 JSON 配置出发,把一份已验证的配置转化为会消耗真实 gas、与真实合约交互的命令序列。该技能本身不调用任何合约——它只展示命令,由用户审查后自行运行。

该技能是里程碑中“将配置变为链上操作”的那一半,因此其安全条款被视为承重结构而非样板文字。关于每一步背后的合约机制,可参考 permissioned-pools-issuer,尤其是其中的 Issuer Journey 与 Enforced Ordering and Reverts;本技能不重复合约层面的解释,只按有序命令序列走同一旅程,且不与那份参考相矛盾。

主要能力

  • 按发布指南推荐的七步顺序引导部署:
    1. 预检与验证:确认或部署 allowlist checker
    2. createPermissionsAdapter
    3. 在代币上为 adapter 加入允许列表、approve、depositForVerification
    4. verifyPermissionsAdapter
    5. 四次 updateAllowedWrapper 注册,然后 setAllowedHook
    6. 池初始化、updateSwappingEnabled、流动性播种
    7. 路由允许列表请求
  • 每一步都说明其前置条件,并在合约强制顺序时给出提前执行会得到的确切 revert selector,与 Enforced Ordering and Reverts 逐一对应;未强制顺序的步骤会明确说明,而不是编造 revert。
  • 提供部署后只读验证清单(Post-Setup Verification Checklist),全部为对公共 getter 的 cast call,不消耗 gas,也不需要确认门。
  • 输入校验规则:以太坊地址必须匹配 ^0x[a-fA-F0-9]{40}$;链 ID 必须为正整数;数值字段必须为非零整数或小数;RPC URL 必须为 https:// 且不含元字符;交易哈希必须匹配 ^0x[a-fA-F0-9]{64}$;所有字符串字段拒绝 shell 元字符(; | & $ ` ( ) > < \ ' " 及换行)。校验失败即中止并报告,不做清洗后继续。
  • 密钥处理:禁止建议自动批准 Bash(forge:) 或 Bash(cast:);禁止生成或补全包含原始签名密钥标志的命令;引导使用硬件钱包(--ledger)或加密 keystore(cast wallet import ... --interactive,后续用 --account <name> --sender $ADDRESS)。

使用方式

该技能消费 permissioned-pools-configurator 生成的 JSON 配置(按其 Config Schema 定义)。若尚无配置,需先运行 permissioned-pools-configurator。

配置中字段值为字面字符串 "RESOLVE" 表示“尚未解析”,而非“使用占位符”。在需要该字段的命令之前,必须停下并走地址解析流程:先查部署指南的 #deployment-addresses 表,再查 Uniswap/contracts deployments/json/<chainId>.json,再用对应链的区块浏览器核对,只有字段持有真实、经浏览器验证的地址后才继续。不得猜测 "RESOLVE" 字段的值,也不得把该字面字符串带入命令。

pool.pairedCurrency 的 "native" 哨兵值不同:它在 Step 6a 实际构建 PoolKey 时解析为 address(0)(Uniswap v4 对原生 PoolKey 货币的约定),不得更早解析,也不得写入其他字段。

确认门(acknowledgment gate):在展示、生成或解释任何面向操作的步骤之前,必须获得明确、肯定的确认。使用 AskUserQuestion 提出单一问题,仅两个选项,只有选择第一个选项才能继续:

  • 问题:“此引导会生成在你运行后消耗 gas 并永久改变代币链上状态的命令。你是否确认上述六点并希望继续?”
  • 选项 A:“是,我已审阅上述要点并希望继续。”→ 进入预检。
  • 选项 B:“否,到此停止。”→ 立即结束引导,不展示、生成或解释任何后续命令。

沉默、简单的“继续”、在同一轮中跳到下一问题,或任何非明确肯定的回答都不满足该门。若运行时没有 AskUserQuestion,则用纯文本提出同样的 yes/no 问题并要求明确肯定回复——“ok”“sure”、点赞表情或无回复都不算。

确认门为每会话一次,而非每步一次。一旦确认,同一会话内继续其余步骤无需重复询问;但用户开启新会话、切换链或切换配置时需重新询问。

不产生可运行命令的参考与教学内容(用文字解释某步骤做什么、解码用户已遇到的 revert、抽象讨论 allowlist-checker 形态)可立即回答,并内联说明框架。但该豁免不覆盖本技能自身的命令模板与 Solidity 脚本骨架(例如 Step Walkthrough 中的池初始化脚本)——这些是可广播的运行材料,正是确认门要拦下的内容,未满足确认门前绝不展示。

适用场景

适用于需要在 Uniswap v4 上部署许可池的开发者或运营者,尤其是希望获得有序命令序列、明确前置条件与 revert selector、以及安全检查清单的场景。也适用于在测试网(Sepolia,链 ID 11155111)上先完整演练整个序列,再在主网执行的情况。

限制

  • 这是教育性部署指导,不是合规审查,也不能替代用户自己对每条命令的审查。
  • 技能不调用任何合约;用户必须自行审查每条配置与命令后再运行。AI 生成的命令序列可能包含错误。
  • 技能不包含任何部署地址,也不为用户解析地址;所有地址必须来自加载的配置、用户在引导中提供的值,或对来自这两个来源的合约地址的 cast call 读取。绝不硬编码合约地址。
  • 必须先在测试网(Sepolia 或其他已部署 permissioned-pools 合约的测试网)跑通整个序列,再接触主网。
  • 用户部署的任何合约(尤其是 allowlist checker)应由自己的审计方审查;技能可展示骨架但不做审计。
  • 技能不构成法律、财务、投资或税务建议,也不是对代币、允许列表、KYC/AML 项目或配置的合规审查。
  • 仓库根目录的 DISCLAIMER.md 约束该仓库中每个技能:按原样提供、无担保、不构成法律/财务/投资/税务建议,并规定使用限制及在向个人或消费者直接呈现由技能生成的财务信息时的 AI 披露义务。
  • 链 ID 方面:以太坊主网(1)与 Sepolia(11155111)是允许列表默认值,是仅有的两个已验证携带完整 permissioned 集合的链。Unichain(130)虽在配置器的网络问题中被提及但不可部署:它仅携带 V4Quoter,因此应停止而非尝试解析缺失地址。其他链 ID 仅在确认部署指南的 #deployment-addresses 表确有对应行后才接受;若没有,所有 wrapper 与 hook 字段都将无法解析,这是停止信号而非猜测信号。
  • 技能不会主动获取 RPC 状态;它建议的每次 cast call 都由用户选择运行,技能不会在后台轮询链。
  • 解码意外 revert 时应按调用点而非名称:本旅程中有三个 selector(NoVerifiedAdapter、Unauthorized、SwappingDisabled)在不同合约中声明多次且含义不同。
  • 仓库内的 .claude/hooks/validate-forge-cast.sh 是一个 PreToolUse 钩子,会在运行前拦截包含原始签名密钥标志的命令;但该钩子不属于本技能、不随技能分发,仅存在于该仓库根目录,安装到别处则没有此兜底。禁止使用原始签名密钥标志的规则始终适用,钩子只是仓库本地的便利,绝不是该标志安全的原因。