后端与接口
编写 Pendle spell 前用 Grimoire…
通过 Grimoire venue CLI 获取 Pendle 支持链、聚合器、市场、资产和 market token 元数据,并按市场优先流程编写和校验 Pendle spell。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
编写 Pendle spell 前用 G特定
解决思路
- 使用首选调用方式之一执行 Pendle venue 命令:`grimoire venue pendle ...`;或 `npx -y @grimoirelabs/cli venue pendle ...`(免安装);或 `bun run packages/cli/src/index.ts venue pendle ...`(仓库本地);或 `grimoire-pendle ...`(来自 `@grimoirelabs/venues` 的直接二进制)。
- 运行推荐预检:`grimoire venue doctor --adapter pendle --chain 1 --rpc-url <rpc> --json`。
- 查询 Pendle 信息:`grimoire venue pendle info [--base-url <url>] [--format <auto|json|table>]`。
- 查询 Pendle 支持链:`grimoire venue pendle chains [--base-url <url>] [--format <auto|json|table>]`。
- 查询指定链支持的聚合器:`grimoire venue pendle supported-aggregators --chain <id> [--base-url <url>] [--format <auto|json|table>]`。
- 查询市场:`grimoire venue pendle markets [--chain <id>] [--active <true|false>] [--base-url <url>] [--format <auto|json|table>]`。
- 查询资产:`grimoire venue pendle assets [--chain <id>] [--type <PT|YT|LP|SY>] [--base-url <url>] [--format <auto|json|table>]`。
- 查询市场代币:`grimoire venue pendle market-tokens --chain <id> --market <address> [--base-url <url>] [--format <auto|json|table>]`。
- 运行示例:`grimoire venue pendle info --format table`。
- 运行示例:`grimoire venue pendle chains`。
- 运行示例:`grimoire venue pendle supported-aggregators --chain 1 --format json`。
- 运行示例:`grimoire venue pendle markets --chain 1 --active true --format table`。
- 运行示例:`grimoire venue pendle assets --chain 8453 --type PT --format table`。
- 运行示例:`grimoire venue pendle market-tokens --chain 8453 --market 0x... --format json`。
- 采用 market-first 方法;不要在未查询可用市场前编写 Pendle spell。
- 查询目标链和底层资产的市场:`grimoire venue pendle markets --chain 1 --active true --format json`。
- 选择一个市场,记录其地址和到期日;每个市场有特定的 PT/YT/SY 代币。
- 查询市场代币以获取精确 token 地址:`grimoire venue pendle market-tokens --chain 1 --market 0x... --format json`。
- 使用第 3 步中的 token 地址编写 spell:`pendle.add_liquidity(0x<SY_address>, params.amount) with (max_slippage=100)`。
- 避免 `pendle.deposit(USDC, ...)`;Pendle 没有 `deposit` 操作。改用 `add_liquidity`、`mint_py`、`mint_sy` 或 `swap`。
- 使用代币符号时注意:PT/YT/SY 代币会通过 Pendle API 自动解析,但 USDC 等标准代币需要以代币最小单位的原始数量提供。
- 缺少 `enable_aggregator` 时:某些路由需要聚合器。如果找不到路由,在 `with()` 子句中用 `enable_aggregator=true` 重试。
- 使用支持的动作 `swap`:在任意 Pendle token 之间交换;输入 single token,输出 single token。
- 使用支持的动作 `add_liquidity`:添加单边流动性;输入 Underlying/SY,输出 LP token。
- 使用支持的动作 `remove_liquidity`:移除单边流动性;输入 LP token,输出 Underlying/SY。
- 使用支持的动作 `mint_py`:从 underlying 铸造 PT + YT;输入 Underlying/SY,输出 PT + YT。
- 使用支持的动作 `redeem_py`:将 PT + YT 赎回为 underlying;输入 PT + YT,输出 Underlying/SY。
- 使用支持的动作 `mint_sy`:将 underlying 包装为 SY;输入 Underlying,输出 SY。
- 使用支持的动作 `redeem_sy`:将 SY 解包为 underlying;输入 SY,输出 Underlying。
- 使用 `quote_out` 比较路由输出:`pendle_out = metric("quote_out", pendle, USDC, "asset_out=DAI,amount=1000000,slippage_bps=1000")`。
- 配置 `quote_out` selector 字段:必填 `asset_out`;可选 `amount`(默认为输入资产的 1 单位)、`slippage_bps`、`enable_aggregator`。
- 在 `.spell` 文件中编写 Pendle 动作时使用 `with` 子句:`pendle.swap(PT_TOKEN, SY_TOKEN, params.amount) with (max_slippage=100, require_quote=true,)`。
- 设置约束 `max_slippage`:整数 bps,最大滑点,校验为 `[0, 10000]` 内的整数,发 API 前转换为十进制。
- 设置约束 `min_output`:整数 wei,最小输出下限。
- 设置约束 `require_quote`:布尔值,如果 Pendle API quote 失败则失败。
- 设置约束 `max_gas`:整数 wei,gas 估算上限。
- 注意 Pendle `swap` 仅支持 `mode: exact_in`;不支持 `exact_out`。
- 当 Pendle API 返回多条路由时,adapter 选择第一条(最佳)路由,并通过 `onWarning` 发出警告;该警告在非 JSON CLI 运行中记录。
- 使用 PT/YT/SY 代币解析:PT、YT、SY 代币(如 `PT_FXSAVE`、`YT_EETH`、`SY_WSTETH`)在构建时通过 Pendle API 自动解析;可直接在 spell 中使用这些符号而无需显式地址:`pendle.swap(PT_FXSAVE, USDC, params.amount) with (max_slippage=100)`。
- adapter 将下划线分隔名称(如 `PT_FXSAVE`)转换为 Pendle API 格式并选择最佳匹配;如果存在多个到期日,选择第一个(最近)的。
- 要指定特定到期日或消除歧义,使用完整 0x 地址:`pendle.swap(0xb1e926428ebec4421cce1ec6d9ff65d27f4b4bb6, USDC, params.amount) with (max_slippage=100)`。
- 使用 `grimoire venue pendle assets --chain <id> --type PT` 发现可用 token 和地址。
- 默认 API base URL 为 `https://api-v2.pendle.finance/core`。
- 使用 `--base-url` 或 `PENDLE_API_BASE_URL` 覆盖 base URL。
- 自动化或嵌套 payload 使用 `--format json`。
- Adapter 动作中聚合器默认禁用,除非显式启用。
- 对于 Pendle token 输出(`assetOut`、`outputs`),使用裸地址字面量(`0x...`),不要用带引号字符串(`"0x..."`)。
- 引号包裹的地址类 token 值会触发验证器代码 `QUOTED_ADDRESS_LITERAL`。
- `max_slippage` 校验为 `[0,10000]` 内的整数 bps,并在 API 请求前转换为十进制(`bps / 10000`)。
适用边界 · 注意事项
- 未先查询 Pendle 可用市场时,不要编写 Pendle spell;该流程要求 market-first。
- Pendle `swap` 不支持 `exact_out`,不要使用该模式。
- 不要将 Pendle token 输出(`assetOut`、`outputs`)写成带引号的地址字符串;会触发 `QUOTED_ADDRESS_LITERAL`。