Files
lp-terminal/lp-terminal使用文档.md
T

31 KiB
Raw Blame History

LP TERMINAL 使用文档

LP TERMINAL v0.2 · Robinhood Chain (链 ID 4663) 上的 LP(流动性提供者)终端 面向 UP33ve(3,3) DEX)与官方 Uniswap v2 / v3 部署,提供池子浏览、仓位管理、兑换与限价挂单功能。


目录

  1. 基本常识:这是什么 / 给谁用
  2. 启动与运行环境
  3. 界面总览:顶栏 / 底栏 / 快捷键
  4. 连接钱包
  5. POOLS 池子页
    • 5.1 筛选与搜索
    • 5.2 表格列含义
    • 5.3 添加流动性(双币 / ZAP 单币)
    • 5.4 区间选择器(CL 池)
  6. POSITIONS 仓位页
    • 6.1 汇总条
    • 6.2 CL 仓位卡片
    • 6.3 V2 仓位卡片
    • 6.4 区间订单
  7. SWAP 兑换页
    • 7.1 市价模式
    • 7.2 限价模式(挂 LP 卖出)
  8. 实盘操作全流程
  9. 安全机制
  10. 常见问题

1. 基本常识:这是什么 / 给谁用

1.1 一句话定义

LP TERMINAL 是一个 终端风格 的网页前端,让你在 Robinhood Chain 上做三件事:

  • 浏览池子:全协议(UP33 + Uniswap v2/v3)的池子目录,按 TVL/量/费率排序,找到一个值得投入的池子。
  • 管理仓位:集中查看你所有的 LP 仓位(CL + v2、UP33 + Uniswap),一站式做质押 / 解押 / 领取 / 加减仓。
  • 兑换与挂单:市价兑换(比价 Kyber 与原生路由取最优),或用单边 LP「区间订单」挂单卖出代币(做挂单方,不付手续费还赚手续费)。

1.2 涉及的协议

协议 说明 在本终端的体现
UP33 Robinhood Chain 上的 ve(3,3) DEX(类 Velodrome/Solidly 架构)。有 v2 恒定乘积池和 CL(集中流动性)池,带 gauge 质押UP 代币排放 池子标记 CL / v2,带 gauge 字样的有排放奖励。质押 LP 赚 UP,不质押赚手续费,二选一
Uniswap v3 官方 Uniswap v3 部署。集中流动性(CL),无 gauge、无质押,LP 100% 拿手续费。 池子标记 v3 tsXts = tick spacing)。仓位以 NFT 形式存在官方 NPM。
Uniswap v2 官方 Uniswap v2 部署。恒定乘积 0.30% 池,LP 代币是普通 ERC-20。 池子标记 v2 · 0.30%。手续费自动滚入储备复利。

1.3 关键代币

代币 合约地址 作用
WETH 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 链上 ETH 的封装版本,绝大多数池子的报价基准
USDG 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 稳定币锚(≈ $1),价格传播的启动锚点
UP 0x57C0E45cB534413D1C20A4240955d6bB250BB4F1 UP33 的排放代币;质押 LP 赚取
ETH(原生) gas 代币;与 WETH 1:1 可互转

1.4 ve(3,3) 收益模型(UP33 独有,必读)

UP33 池的 LP 收益是 二选一 的:

  • 不质押 → 赚 交易手续费(费率 APR)。CL 池还要扣 10% 未质押抽成给投票者。
  • 质押进 gauge → 赚 UP 代币排放(排放 APR)。但质押期间你的手续费份额归该池的投票者,自己拿不到手续费。

一个仓位只能赚其一,不能兼得。APR 都是单利、不复利,且随 TVL / 质押量增长而稀释。

1.5 重要约定

  • 所有写入操作 只认 chainId 4663;连错网络会有红色横幅提示。
  • 签名只在浏览器钱包完成(RainbowKit / 注入钱包),应用本身不存任何私钥
  • 所有授权都是 精确金额授权exact-amount approval),无无限授权。
  • 链上状态每 ~15 秒刷新一次;你持有的区间订单所在池子有 4 秒 的专项 slot0 推送。

2. 启动与运行环境

2.1 依赖

  • Node.js ≥ 22.13indexer 用了内置的 node:sqlite
  • npm

2.2 首次启动(开发模式)

npm install
cp .env.example .env      # 所有 key 都可选;默认走公共端点
npm run indexer           # 池索引器,端口 :8787(首次回填约 18 分钟,后续启动很快)
npm run dev               # 前端,http://localhost:5173(自动代理 /api -> :8787

首次 indexer 启动耗时(实测):

  • V3 池回填(Blockscout 分页扫 ~14.2 万池):约 18 分钟
  • V2 池同步(allPairs 枚举 ~1.5 万):约 2 分钟
  • token 元数据拉取(symbol/decimals~15.5 万 token):约 13 分钟
  • 全量状态扫描(slot0/getReserves~15.7 万池):约 32 分钟
  • GT 统计 + 定价:约 1 分钟
  • 总计约 65 分钟 首次 boot。之后重启因有 v3_backfilled 标记和已存 pool_state,会快很多。

2.3 网络代理(重要!)

如果你的环境需要代理才能访问 Blockscout / Alchemy(例如系统已开 127.0.0.1:7890 代理但 Node 默认不读系统代理),启动 indexer 前必须设:

$env:NODE_USE_ENV_PROXY='1'
$env:HTTPS_PROXY='http://127.0.0.1:7890'
$env:HTTP_PROXY='http://127.0.0.1:7890'
npm run indexer

否则 indexer 会卡在 Blockscout 回填阶段(Node 的 fetch 连不上被墙域名)。

2.4 .env 配置项

key 说明
RPC 私有 Robinhood Chain RPC。注意:Vite 会把它打进 JS bundle,公开部署务必留空。留空 → 公共 RPChttps://rpc.mainnet.chain.robinhood.com)。
KYBERSWAP_AGGREGATOR_API_BASE_URL Kyber 聚合器基础 URL
KYBERSWAP_CHAIN 链 slugrobinhood
KYBERSWAP_ROUTER_ADDRESS 白名单:兑换 calldata 只发往这个地址
KYBERSWAP_FEE_BPS 可选平台费(bps),如 10 = 0.1%
KYBERSWAP_FEE_RECEIVER 平台费接收地址(必须与上一项同时设才生效)
VITE_WALLETCONNECT_PROJECT_ID 可选;仅 WalletConnect 二维码配对需要,注入钱包不需要

2.5 生产部署

RPC="" npm run build     # 公开部署 RPC 必须为空

产出静态 dist/hash 路由无需 rewrite,任意静态托管(CF Pages / Netlify / S3)均可。若想保留私有 RPC,在反向代理后端终止 /rpc/api/kyber 等同源路径。


3. 界面总览:顶栏 / 底栏 / 快捷键

3.1 顶栏

LP▮TERMINAL   [1]池子  [2]仓位  [3]兑换   epoch 1 · 翻转 4d 5h · 块 13195940   [ 连接 ]
元素 含义
LP▮TERMINAL 品牌标题
[1]池子 [2]仓位 [3]兑换 三个主标签页,数字是快捷键
epoch N · 翻转 Xd Yh · 块 N UP33 epoch 编号、距下次 epoch 翻转(每周四)的倒计时、当前区块高度
[ 连接 ] 连接钱包按钮(连错链显示 [ 链错误 ]

3.2 底栏

LP TERMINAL v0.2 · 精确授权 · 链上实时读取
快捷键: [1] 池子 [2] 仓位 [3] 兑换 [4] 限价
rpc:DEFAULT   theme: MONO PHOSPHOR AMBER ICE VIOLET   lang: EN 中文   blockscout↗
控件 作用
rpc:DEFAULT 点击可设置 自己的 RPC(仅存于本浏览器 localStorage,经 eth_chainId 探针校验必须返回 4663)。优先级高于部署默认。
theme: 5 个主题:MONO / PHOSPHOR / AMBER / ICE / VIOLET
lang: 中英双语切换,持久化在 up33.lang.v1;也可用 URL ?lang=zh 临时覆盖(截图用)
blockscout↗ 跳转区块浏览器

3.3 快捷键

动作
1 切到 POOLS 池子页
2 切到 POSITIONS 仓位页
3 切到 SWAP 兑换页(市价)
4 切到 LIMIT 限价挂单页
/ 聚焦池子搜索框

标签页是 hash 路由#pools / #swap / #limit / #positions),刷新和深链都能保持位置。#lab 是组件实验室(合成数据,仅供视觉调试)。


4. 连接钱包

  1. 点击顶栏 [ 连接 ]
  2. 选择钱包(RainbowKit 弹窗:MetaMask 等注入钱包,或 WalletConnect 二维码)。
  3. 钱包会请求切换 / 添加 Robinhood Chain (4663)
    • 链 ID4663
    • RPChttps://rpc.mainnet.chain.robinhood.com(公共,钱包端始终用公共 RPC
    • 原生货币:ETH18 位小数)
  4. 连错链时顶栏显示 [ 链错误 ],页面顶部出现红色 !! 网络错误 - 本终端只在 Robinhood Chain (4663) 上写入 横幅,点「切换」回到正确链。

应用是纯静态 SPA,无后端账户系统。你的钱包地址只存在浏览器内存中,关闭即清。


5. POOLS 池子页

#pools,快捷键 1。这是默认首页,也是发现池子、添加流动性的入口。

5.1 筛选与搜索

页面顶部一行控件:

[搜索框]  [全部] [UP33] [UNI V3] [UNI V2]  [隐藏 <$1K]
显示 149 · up33 29 · uniswap 目录 158,275 · 匹配 2,629
控件 作用
搜索框 支持四种输入:代币地址(0x…40)、池地址、代币符号(如 WETH)、交易对符号 sym0/sym1(如 WETH/UP,两侧都要匹配,方向不限)。空 = 全部按 TVL 排序。快捷键 / 聚焦。
全部 / UP33 / UNI V3 / UNI V2 协议过滤。UP33 只看 ve(3,3) 池(含排放奖励明细);UNI V3 / UNI V2 看官方 Uniswap 池。
隐藏 <$1K 默认开启,隐藏 TVL 低于 $1K 的灰尘池(目录里 95% 是 meme 灰尘池)。
● 我的 (N) 仅在你连接钱包且持有仓位时出现:筛选你已参与的池子。
统计行 显示 N(当前页显示数)· up33 NUP33 池数)· uniswap 目录 N(索引器全目录)· 匹配 N(当前筛选命中数)

5.2 表格列含义

含义
交易对 代币对符号 + 协议徽章。例如 WETH/UP CL ts200 · 1.00% · gauge 表示 UP33 的 CL 池,tick 间距 200,费率 1%,有 gauge(可质押)。v3 ts200 · 1.00% 是 Uniswap v3。v2 · 0.30% 是 Uniswap v2。鼠标悬停费率可见说明 tooltip。
价格 / 储备 CL 池显示 价格 报价币/基准币(如 11,579 UP/WETH);v2 池显示两侧储备 587.9 WETH + 1.1M USDG 可翻转价格方向。
TVL 池子总锁仓量(USD)。链上推导:已定价侧之和;只有一侧有价时按 2× 该侧估算并标记 approximate。点击表头排序。
24H 量 24 小时成交量(USD)。Uniswap 池来自 GeckoTerminalUP33 池来自 DexScreener + Goldsky 子图。- 表示长尾池无数据。
24H 费 24 小时手续费(USD)= 量 × 费率(毛,不含 ve(3,3) 抽成)。
费率 APR 未质押 LP 的手续费年化收益 = vol24h × feeRate × 365 / TVL。CL 池再 ×(1 − 10% 未质押抽成)。注意这是池平均,集中区间内的仓位会成倍高。
排放奖励 仅 UP33 池有值:质押 LP 的 UP 排放 APR = rewardRate × 31.536M × UP价格 / 质押TVL = 排放流向几乎零质押量的池(首个质押者全拿)。
操作列 + LP(展开添加流动性面板)· (跳转 Blockscout 查看池合约)

脚注:表格下方有说明:费率 APR = 未质押 LP 手续费收益;排放奖励 = UP33 质押 UP 排放 APR;一个仓位只赚其一。

5.3 添加流动性(双币 / ZAP 单币)

点击任一池子的 + LP,行内展开面板。

区间选择器(CL 池独有,v2 无区间)

区间  ±0.5% ±1% ±2% ±5% ±10% ±20% ±30% 全区间   ± % …  ↑上方  ↓下方  价格  TICKS
       10,504                          12,830
-9.28% -> 下界    px 11,579 UP/WETH ⇄    上界 ← +10.8%
区间内 · 已穿过 48.7% · 带宽 ±10.5%
控件 作用
±0.5%±30% / 全区间 对称区间预设:以当前价为中心,±N%。全区间 = 全价格区间。
± % … 自定义对称百分比。
↑ 上方 单边存入:只在当前价上方建区间,只存 token1,价格涨入区间后开始赚钱(涨了才卖)。
↓ 下方 单边存入:只在当前价下方建区间,只存 token0,价格跌入区间后开始赚钱(跌了才接)。
价格 直接输入价格上下界(对齐 tick spacing)。
TICKS 直接输入原始 tick 上下界(高级)。
区间条 可视化:两端 = 你的价格边界,标记 = 当前价,显示到上下界的偏离百分比、带宽。区间不含当前价时会提示「不产生任何收益」。

切换区间时,下方输入框的金额会按新比例自动联动

资金模式

面板有 双币 / ⚡ ZAP - 单币 切换:

双币模式CL):

资金   双币 | ⚡ ZAP - 单币
WETH   [0.0]
UP     [0.0]
[铸造仓位]   NFT 进入钱包 - 去仓位页质押赚 UP
  • 两个输入框,按当前价自动配比;改一个另一个联动。
  • 铸造仓位 按钮铸造一个 NFT 仓位进钱包(CL 用 NPMUP33 用 CL_PM)。

双币模式v2):

  • 数量按储备自动配平,最小值容差保护。
  • UP33 v2 → LP 代币进钱包,去仓位页质押;Uniswap v2 → LP 代币进钱包,手续费在储备中自动复利。

ZAP 单币模式

ZAP 输入   WETH | UP | ETH     [0.0]
滑点       0.5% | 1% | 3%
[连接钱包]   任一步失败即停 - 资金都在你钱包里,不会悬空
  • 只持有一边代币(或原生 ETH)即可注入流动性:ZAP 先用 Kyber 把一部分换成对手代币,再按池子需要的比例双币存入。
  • 输入代币三选一:池子的 token0 / token1 / 原生 ETH(若某侧是 WETHETH 会先包装成 WETH)。
  • 滑点挡位控制兑换腿最小到账;存入最小值按 1% 带边计算。
  • 执行时列出完整交易序列(wrap? → 授权 → Kyber 兑换 → 授权双方 → mint/increase),逐步执行,任一步失败即停——所有中间资产都是普通钱包余额,不会悬空。
  • 存入金额用 实际到账receipt Transfer 日志),而非报价,杜绝报价与执行不符。

5.4 索引器离线兜底

如果 indexer 进程没启动或还在首次回填(ready:false),POOLS 页顶部会出现琥珀色提示 索引器离线 - dexscreener 兜底(v3 前 30,此时改用客户端 DexScreener 发现 + 链上 factory.getPool 验证(仅 v3 前 30 个)。伪造池会被结构性地拦截。


6. POSITIONS 仓位页

#positions,快捷键 2。连接钱包后显示你所有的 LP 仓位。

未连接时显示空态:> 连接钱包以枚举仓位。还没有仓位?去池子页看看 ->

6.1 汇总条

页面顶部一条全局汇总:

字段 含义
LP 总值 你所有仓位(含未领手续费)的 USD 总值。子标题:X CL · Y v2 · Z 已质押
未领手续费 所有仓位累计的未领取手续费(USD
待领 UP 所有质押仓位累计的待领取 UP 数量 + USD 估值 + 实时 +UP/天 累积速率
全部领取(N 笔) 一键领取所有可领 UP(N = 涉及的笔数)。无可领时显示「暂无可领取」。
区间状态 全部在区间内N 个超出区间,子标题提示「超出区间的 CL 没有任何收益」。区间订单不计入。
区间订单 N 个挂单 / N 个已完全成交 - 提取以锁定 / 尚无成交 - 卖出代币升值时逐步成交

6.2 CL 仓位卡片(UP33 CL + Uniswap v3

每张卡片带协议徽章(UP 箭头 / Uniswap 独角兽,品牌色)。按「质押优先、价值降序」排列。

信息区

区块 内容
价值 value ≈ $…,代币按池子自身价格对 USDG/WETH/UP 锚定价。无锚时显示 - 无价格锚
收益中 质押:≈ N UP/天 (≈$X/天) APR ≈ Y% 占质押流动性 Z%;未质押且在区间:费率 APR ≈ X 占活跃流动性 Y% 区间内有效;超出区间:红色 0 - 超出区间;排放干涸:琥珀色 0 - 本 epoch 无 UP 排放流入
持有 仓位持有的 token0 / token1 数量。
未领手续费 精确值(经 collect 模拟),USD 估值。UP33 未质押 CL 显示 10% 未质押抽成已扣除)
待领 UP 质押仓位才有。
区间条 两端 = 你的价格边界,标记 = 当前价,显示到上下界偏离 %、超出时的回入距离、在/近/出着色。

操作按钮(视仓位状态显示):

按钮 作用
质押 把 NFT 质押进 gauge 赚 UP(质押期间手续费归投票者)
解押 解押后才能调整流动性或领手续费;解押会自动领取待发 UP
领取 UP 领取待发 UP 排放
领取手续费 领取未领交易手续费
+ 加仓 在同一区间追加流动性(区间铸造时固定,不可移动);面板显示钱包余额 + MAX,按实时池价联动两币,预览拉取量 / 新规模
减仓 减仓 + 领取(2 笔交易),最小值容差保护
全部撤出 移除 100% 流动性并领取全部,双击确认

领取 UP(或 CL 解押自动领取)后,日志显示收到的 UP 数量,并附 SWAP -> ETH 按钮——一键跳到 SWAP 页预填该金额。

6.3 V2 仓位卡片(UP33 v2

UP33 v2 LP 是普通 ERC-20,分「钱包 LP」与「质押 LP」两部分:

区块 内容
合计 / 钱包 LP / 质押 LP 各自的 LP 代币数量与对应底层 token 数量
可领手续费 钱包 LP 可领的池手续费
待领 UP 质押 LP 的待领 UP

操作:全部质押 / 全部解押 / 领取 UP / 领取手续费 / 移除 %(按钱包 LP 计,质押的需先解押)。

Uniswap v2 的仓位管理(LP 余额、移除流动性)尚未接入——POOLS 浏览 + 添加可用,仓位追踪靠钱包层面。

6.4 区间订单(通过 SWAP→LIMIT 挂出)

挂出的单边 CL 区间订单会带 限价 sell->buy 徽章,在仓位页有专门的订单模式展示:

  • 区间条:等待 / 成交中 X% / 已成交,以卖出代币计价(不是红色的超出区间告警)。
  • 状态感知一键操作
    • 未成交 → 取消 - 拿回 <卖出币>
    • 部分成交 → 立即平仓(部分成交)
    • 已完全成交 → 提取 -> 锁定 <买入币>
  • 100% 提取后徽章清除。

区间订单所在池有 4 秒 的专项 slot0 推送,成交 % / 持有 / 区间条近实时跟踪;数值更新按方向闪绿 ▲ / 红 ▼。


7. SWAP 兑换页

#swap,快捷键 3。两种模式:市价 / 限价。

7.1 市价模式

模式   市价 | 限价 · 挂 LP 卖出
卖出   ETH ▾   [0.0]    余额 -   MAX
         ⇅
买入   UP ▾    0.0      余额 -
┌─ 报价 ─
(输入数量后显示两路报价)
控件 作用
卖出 / 买入代币选择 弹出代币选择器:搜索框(符号或地址)+ 代币列表,每行都显示合约地址缩写(反 symbol 伪造)。
[0.0] 输入 输入卖出数量;MAX 一键填入余额。
翻转买卖方向。
报价区 输入数量后并排显示两路报价:KYBER 聚合(多跳路由)vs UP33 原生v2 getAmountsOut + CL quoter 全匹配池直连),标出 bps 差与「最优」。
gas $X 估算 gas 成本。
最少到账: N SYM @ 滑点% 最小到账保护。
滑点 可调。
↻ 刷新 手动刷新报价。
通过 <路由> 执行 -> 选定路由执行。

ETH / WETH 处理

  • 原生 ETH 买入 / 卖出自动 wrap / unwrap1:1,无费用,WETH9 = 0x0Bd7…AD73)。
  • UP33 原生路由需要 WETH——选 ETH→UP 时会提示「需要 WETH - 先包装」,点 包装 N ETH 即可。
  • 原生路由到账的是 WETH(不是 ETH),会有提示。

7.2 限价模式(挂 LP 卖出)

#limit,快捷键 4。这是本终端的特色功能:用单边 CL 区间订单卖出代币,做挂单方而非吃单方

核心理念:市价兑换是「吃单」付池子费;限价挂单是「挂单方」——不付手续费,成交过程中还手续费。

面板结构

卖出   UP ▾    [0.0]   25% 50% 75% MAX   余额 -
换成   WETH ▾
       市价: 1 UP = 0.000086361 WETH · 1 WETH = 11,579 UP · 池 CL ts200 1.00%

卖出区间   [?]   贴市·1TICK  +1->3%  +2->5%  +5->10%  +10->25%  自定义

── 订单 ──
开始成交          +1.8%    1 UP = 0.00008788 WETH
全部卖出          +3.8%    1 UP = 0.000089656 WETH
平均成交          +2.8%    1 UP ≈ 0.000088764 WETH · √(起点·终点)
区间              [93200 -> 93400]   tick 网格 ts200 · 约 2.0% 步长 · 最窄合法区间

[区间条]  订单等待中 · 价格需上涨 1.76% 开始成交

── 费用 · 挂单 VS 吃单 ──
本订单    0%     挂单方 - 不付交易费,成交时还赚手续费
市价兑换  1.00%  吃单方 - 池子费付给 LP

── 机制 ──
成交    UP ↑   价格向上穿过区间时逐步转换为 WETH
回吐    UP ↓   价格回落会转换回来 - 不是挂单簿订单,没有自动执行
成交后  提取   仓位 -> 一键锁定 · 限价徽章,实时成交 %
质押    不要   质押的 LP 会放弃交易手续费 - 订单保持不质押

[连接钱包]

卖出区间预设

预设 含义
贴市 · 1 TICK 最窄合法区间,贴着市场一个 tick 间距;第一个上涨 tick 就开始成交,手续费捕获最大。
+1->3% / +2->5% / +5->10% / +10->25% 阶梯区间:起点在市价 +X%,终点在 +Y%。
自定义 自定义起点 / 终点百分比(< tick 间距的输入会吸附到贴市区间,标 ≡ 贴市)。

? 打开结构化区间说明:起点 / 终点 / 均价(几何平均 √(起点·终点))/ 网格(tick 步长)。

订单关键字段

  • 开始成交:区间起点价(第一批卖出位置)。越近越早成交,但回调也越容易回吐。
  • 全部卖出:区间终点价。
  • 平均成交:起终点的几何平均,即你的混合退出溢价。
  • 区间[tickLo -> tickHi],对齐 tick 网格。

费用对比

直观对比挂单(0%)vs 市价吃单(池费,约 $X)。

机制(必读)

  • 成交:价格向上穿过区间时逐步转换为买入代币。
  • 回吐:价格回落会转换回来——这不是挂单簿订单,没有自动执行
  • 成交后:去仓位页「提取」一键锁定;带限价徽章,实时成交 %。
  • 不要质押:质押的 LP 放弃交易手续费,订单必须保持不质押。

下单

挂出区间订单 -> 最多 2 笔交易(精确授权 + 铸造),无自动执行。铸一个区间起点 ≈ 100% 的单边仓位(防价格已进入区间)。下单后跳仓位页跟踪。


8. 实盘操作全流程

8.1 流程一:用 WETH 给 UP33 CL 池加流动性并质押赚 UP

  1. 启动npm run indexer + npm run dev,浏览器开 http://localhost:5173
  2. 连钱包:顶栏 [ 连接 ],选 MetaMask,切到 Robinhood Chain (4663)。
  3. 找池子POOLS 页,搜 WETH/UP,点 UNI V3 过滤看 UP33 的 CL 池(带 gauge 字样)。
  4. 选区间:点 + LP,区间选 ±10%(对称)或 ↓ 下方(单边接)。
  5. 输入金额:双币模式下输入 WETH 数量,UP 自动联动。
  6. 预览:面板显示 预估:存入 ≈ $X、占活跃流动性 Y%、费率 APR(不质押时)、排放 APR(质押时)。超出区间会警告。
  7. 铸造:点 铸造仓位,钱包确认授权 + mint(CL_PM),NFT 进钱包。
  8. 质押:去 POSITIONS 页找到新仓位,点 质押,授权 NFT 给 gauge + 质押。开始赚 UP。
  9. 领取:累计后点 领取 UP 或汇总条 全部领取。日志显示收到的 UP,附 SWAP -> ETH 一键卖出。

8.2 流程二:用单币(ETHZAP 进 WETH/UP 池

  1. POOLS 页找到 WETH/UP CL 池,点 + LP
  2. 资金模式切到 ⚡ ZAP - 单币
  3. 输入选 ETH,填数量,选滑点 1%
  4. 连接钱包(实为执行),ZAP 列出交易序列:包装 ETH -> WETH授权 WETH -> kyber 路由兑换 N WETH -> ≈M UP授权 WETH -> 仓位管理器授权 UP -> 仓位管理器铸造仓位
  5. 逐步执行,任一步失败即停,资金始终在钱包。
  6. 完成后去仓位页质押。

8.3 流程三:用限价单卖出 UP 换 WETH

  1. SWAP 页,切 限价 · 挂 LP 卖出
  2. 卖出选 UP,换成 WETH。金额选 50%
  3. 区间选 +1->3%(在市价上方 1%~3% 阶梯卖出)。
  4. 查看「订单」区:开始成交价 / 全部卖出价 / 平均成交价 / 区间 tick。
  5. 查看费用对比:挂单 0% vs 市价 1.00%。
  6. 挂出区间订单 ->,授权 UP + 铸造单边仓位。
  7. 去 POSITIONS 页,该仓位带 限价 UP->WETH 徽章,显示 订单等待中 · 价格需上涨 1.76% 开始成交
  8. UP 升值进入区间后逐步成交为 WETH,期间还赚手续费;价格回落会回吐。
  9. 完全成交后点 提取 -> 锁定 WETH

8.4 流程四:仓位管理日常

  • 加仓:仓位卡片 + 加仓,同区间追加流动性。
  • 减仓 减仓,按百分比移除 + 领取(2 笔交易)。
  • 调整区间CL 区间不可移动——要换区间需 全部撤出 后重新 mint。
  • 领手续费:未质押 CL / v2 钱包 LP 点 领取手续费
  • 解押解押 自动领 UP,之后才能动流动性或领手续费。

9. 安全机制

9.1 钱包交互

  • 仅浏览器钱包签名,应用 / 服务端 / 存储均无任何私钥。
  • 精确金额授权exact-amount),无无限授权。
  • 所有写入 chainId 4663 锁定,带 deadline;原生路由最小值从实时链上价推导。

9.2 Kyber 兑换四道闸门(lib/kyberExec.ts

Kyber 的 calldata 是不透明的,发送前过四道闸:

  1. API 返回的 routerAddress 必须等于 .env 白名单(且 tx to 永远是白名单地址,不是 API 给的)。
  2. transactionValue 必须精确匹配预期(ERC-20 入 = 0,原生 ETH 入 = amountIn)。
  3. 构建的 amountIn 必须等于请求。
  4. 构建的 amountOut 必须 ≥ 新鲜报价 用户滑点。

SWAP 和 ZAP 共用同一处闸门,永不分叉。

9.3 ZAP 额外两道闸

  • 新鲜路由的 tokenOut 必须是池子的对手代币。
  • 新鲜输出必须仍在预览计划的滑点内(+0.5% 宽容),否则在钱包看到交易前就停。
  • 存入用 receipt 的实际到账,授权每步精确金额。

9.4 反 spoofing

  • 代币选择器每行都显示合约地址缩写。
  • 合约目录列出完整地址并链接区块浏览器。
  • 索引器只从官方工厂事件 / 枚举接纳池子,第三方 API 只能富化不能引入——伪造 / 分叉池结构性被排除。

9.5 XSS / 注入防御

  • 内置 CSP script-src 'self' 思路:无内联脚本、无 eval、无第三方 / CDN 脚本,全部自托管 + content-hash。
  • React 转义,无 dangerouslySetInnerHTML;外链 noreferrer
  • 依赖精确锁定(.npmrc save-exact+ lockfile,防供应链 patch 投毒。

9.6 区间订单所在池的近实时推送

你持有区间订单的池有 4 秒 的专项 slot0 推送(单次 multicall),成交 % / 持有 / 区间条近实时跟踪;数值更新按方向闪绿 ▲ / 红 ▼,区间条标记滑动显示漂移方向。


10. 常见问题

Q1:POOLS 页显示「索引器离线 - dexscreener 兜底」?

indexer 进程没启动或还在首次回填(ready:false)。启动 npm run indexer 并等首次 boot 完成(约 1 小时)。期间前端用 DexScreener 兜底(v3 前 30),功能可用但池子不全。

Q2indexer 启动报 EADDRINUSE: address already in use :::8787

8787 端口被占。先停掉旧 indexer 进程(任务管理器找 node.exe,或 Get-Process node | Stop-Process -Force)再重启。

Q3indexer 卡在 v3 backfill 不动?

Blockscout 被墙 / Node fetch 不走代理。设 NODE_USE_ENV_PROXY=1 + HTTPS_PROXY=http://127.0.0.1:7890(换成你的代理)后重启 indexer。或设 INDEXER_BACKFILL=rpc 走 RPC 窗口扫描(较慢但无需 Blockscout)。

Q4:连钱包后显示「链错误」?

钱包不在 Robinhood Chain (4663)。点顶栏 [ 链错误 ] 或横幅「切换」按钮,钱包会请求切链。

Q5:CL 仓位的 APR 跟池子表格里的不一样?

表格里是 池平均 APR;仓位卡片是 你的区间专属 APRshare = L_yours / (activeLiquidity + L_yours)。集中区间内的仓位会成倍高于池平均,超出区间则 0。

Q6:质押了为什么手续费归零?

ve(3,3) 模型:质押 LP 赚 UP 排放,手续费份额归该池投票者。想赚手续费就解押。二者不可兼得。

Q7:限价单为什么「回吐」?不是挂单吗?

区间订单是单边 LP,不是订单簿限价单。价格穿过区间时逐步成交,价格回落会转换回来,没有自动执行。完全成交后需手动「提取」锁定买入代币。

Q8ZAP 中途失败了怎么办?

ZAP 任一步失败即停,所有中间资产都是普通钱包余额,不会悬空。解决后重新执行(按当前余额重新规划),或切双币模式手动收尾。

Q9:想创建全新的 Uniswap v3 池子?

v1 不支持 createAndInitializePoolIfNecessary,只能 mint 进已有池子。

Q10Uniswap v2 仓位怎么管理?

v1 未接入 v2 LP 余额 / 移除流动性。POOLS 浏览 + 添加可用;仓位追踪靠钱包层面(v2 LP 是普通 ERC-20)。


附录:关键合约地址

UP33ve(3,3) DEX

合约 地址
UP 代币 0x57C0E45cB534413D1C20A4240955d6bB250BB4F1
veUP 0x5d321dE36F0bf98D92b291280514F3878582B7B6
Voter 0x7F749fDD351C1Ceed82d76d7699CB631Eb8332a7
Minter 0x912EC7A90e8C9829eE0e0f6a4Db5270776Fc3Da5
V2 Factory 0xFA5429AEBa338BEa2BFcc1b9a889862Ee395bc28
V2 Router 0xf5198743240fAC98db71868F34c70139b1eb0474
CL Factory 0x1ac9dB4a2608ba45D6127B1737949b51Bb54B7F3
CL PositionManager 0x07F44c47743A2f36414A82b9F558ECFCf0EEdCEf
CL SwapRouter 0xC062b870E813fcA720f1e002c234369Ab3aB9415
CL Quoter 0x03983AB2C057a2eac211ff01738a1e49ff325B49
WETH 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73
USDG 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168

Uniswap(官方部署,链 4663

合约 地址
V3 Factory 0x1f7d7550B1b028f7571E69A784071F0205FD2EfA
V3 NonfungiblePositionManager 0x73991a25C818Bf1f1128dEAaB1492D45638DE0D3
V2 Factory 0x8bcEaA40B9AcdfAedF85AdF4FF01F5Ad6517937f
V2 Router02 0x89e5DB8B5aA49aA85AC63f691524311AEB649eba

其他

链 ID 4663
区块浏览器 https://robinhoodchain.blockscout.com
公共 RPC https://rpc.mainnet.chain.robinhood.com
Multicall3 0xcA11bde05977b3631167028862bE2a173976CA11

本文档基于 LP TERMINAL v0.2 实测整理。协议参数由 Safe 控制,随时可能变化;一切以链上实时状态为准。本文不构成财务建议。