流动性池锁仓怎么查:LP 凭证在谁手里、锁到哪一天
池子里的两种资产谁能抽走,由 LP 凭证在谁手里决定。这篇按官方文档讲锁池和烧池在链上各是什么动作、去哪里核对,以及 LP 锁住之后还管不到的事。

能自己查,用不着信谁发的截图。Uniswap v2、PancakeSwap V2 这类池子会给出资的人发一种 LP 凭证,凭证本身是一个代币,池子里两种资产谁能抽走,全看这个代币在谁手里。把池子的合约地址贴进区块浏览器,打开 LP 凭证的持有人列表,看三类地址各占多少:零地址名下的、锁仓合约名下的、普通钱包名下的。
查到什么才算数?要对上四样:地址是你准备交易的那个池子;锁住或销毁的 LP 占总量多少;锁仓合约里登记的解锁时间是哪一天;这几项都点得开链上记录。群里那张“已锁池”的图不在其中。
这套查法只适用于发同质化 LP 凭证的池子,Uniswap v3 这种头寸是 NFT 的池子和 Solana 上的池子另有查法,放在后半篇。
你卖币的时候,从池子里拿走的是另一半资产
交易所的现货盘口是订单簿,卖单要等别人的买单来接,那一套怎么读在代币成交量大,为什么现货卖单仍不成交?里。Uniswap 这类自动做市的 DEX 换了一种做法。它的概念文档写的是:自动做市用一个装着两种资产的流动性池取代买单和卖单,交易的人直接跟池子打交道,不去撮合另一个用户挂出来的单子。
一个池子是一份合约,里面放着一对代币,比如某个新币和 ETH。按 v2 的 Pools 文档,池子刚创建时两边余额都是 0,得有人各存一笔进去才能开始交易,第一个存的人顺带定下了初始价格。存钱这件事没有门槛,概念文档的原话是 Anyone can become a liquidity provider(任何人都可以成为流动性提供者)。
价格由池子里两种资产的数量关系算出来,概念文档给的公式是 x * y = k。你把新币卖进池子,池子里新币变多,ETH 被你拿走一部分。对持币的人来说,“能不能退出”问的就是池子里那一半 ETH 或稳定币还在不在、剩多少。
同一份文档还写了,单笔交易相对池子深度越大,价格被推得越远。池子里的另一半要是被人整个抽走,你钱包里的币一个不少,只是没有东西可换。
LP 凭证在谁手里,池子里的钱就归谁支配
往池子里存钱的人会拿到一张凭证。Uniswap v2 的 Pools 文档是这样写的:每次有人存入流动性,合约就铸造一种叫 liquidity tokens 的代币,发到存入者的地址,代表他对池子的贡献;想取回本金和累积的手续费,要把这些凭证“burn”掉,换回自己在池子里的那一份。PancakeSwap 的文档举的例子是存入 CAKE 和 BNB,拿到 CAKE-BNB LP 代币,持有数量代表你在这个池子里的占比。

在 v2 里,这张凭证是标准的 ERC-20 代币。Uniswap 公开的 v2-core 合约源码里,池子合约直接继承了 LP 代币合约,代币符号写的是 UNI-V2。换句话说,池子地址和 LP 凭证的代币地址是同一个。赎回能拿走多少,源码里是一行算式:交回的 LP 数量,乘以池子里某种资产的余额,除以 LP 总量。
拿上图的示意数字算一遍(教学假设,不是任何真实池子):池子里有 100 个 A、10 个 B,LP 凭证一共 12 份。假设一个地址拿着其中 3 份,也就是四分之一,它赎回时带走 25 个 A 和 2.5 个 B,不需要谁批准。
Pools 文档里还有一句:LP 凭证本身是可交易的资产,持有人可以卖掉、转走,或者按自己的意思处置。锁池和烧池,说的都是这张凭证被转去了哪里。
“锁池”和“烧池”,在链上各是哪一种转账
锁池,是把 LP 凭证转进一份锁仓合约。UNCX 的文档这样描述它的流动性锁:开发者把 LP 代币存进智能合约,从起始日到结束日之间,他挪动这些 LP 的权限被收回,解锁日过去之前既取不出也转不走。PinkSale 的 PinkLock 文档里,建锁时要填一个 UTC 的日期时间,到期之后由指定的 owner(锁的所有者)地址取回。两家写法不同,落到链上是一回事:LP 凭证的持有人从某个钱包变成了一份合约,合约里登记着解锁时间。
烧池,是把 LP 凭证转进一个没有人能动用的地址。零地址就是这样一个去处,ethereum.org 的术语表对它的解释是:一个全由 0 组成的以太坊地址,经常被用来把代币移出有主的流通。Uniswap 自己也这么用:v2 源码在池子第一次注入流动性时,会把数量为 MINIMUM_LIQUIDITY 的 LP 铸给 address(0),旁边的注释是 permanently lock the first MINIMUM_LIQUIDITY tokens。
有个词要分清。Uniswap v2 的 Pools 文档和池子合约的 burn 函数说的是赎回:销毁交回来的 LP,同时把两种资产转给指定地址,并发出一条名为 Burn 的事件。社群里说的“LP 已烧”是另一个意思,是 LP 被送到没人能赎回的地方。拿到一笔带 burn 字样的交易,点开看资产流向:池子里的两种代币在这笔交易里被转了出去,就是撤池子。赎回时源码同样会记一条 LP 转给 address(0) 的 Transfer 事件,所以转移记录里出现“LP 到零地址”这一行,证明不了烧池;LP 是不是留在零地址名下,回持有人列表看占比。
拿到池子地址之后,在 Etherscan 上看这三处
下面以以太坊主网和 Etherscan 为例,别的 EVM 链换成对应的浏览器,标签名以你打开的页面为准。
整个核对过程只读不写。按 Etherscan 的说明,需要连接钱包的是 Write Contract(写合约),本文用到的都在代币页和 Read Contract(读合约)里。哪个页面要你连接钱包、签名或授权之后才显示“锁仓信息”,关掉它。
池子地址对不对
这里要的是池子合约的地址,不是代币的合约地址。代币地址怎么核对见同名代币怎么区分:网络与合约地址,下面默认你手里已经有了。
Uniswap v2 的池子可以从工厂合约反查。官方部署地址页列出的主网工厂合约是 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f。在 Etherscan 打开它,进 Contract(合约)标签下的 Read Contract,找到 getPair,填入两个代币的合约地址。按 Uniswap 的说明,池子存在就返回它的地址,不存在返回全零地址。v2 的工厂对每一对代币只创建一份池子合约,查出来的地址不会有第二个。另一半资产(比如 WETH 或稳定币)的合约地址同样要从官方来源取。别的 DEX 有自己的工厂合约,地址去它的官方文档找。
池子地址如果是从行情站或项目方那里抄来的,打开它的 Read Contract 核一下 token0 和 token1。这两个函数返回池子里那一对代币的合约地址,其中一个必须是你要查的币。旁边的 getReserves 返回两边当前的储备数量。
Holders 列表里的三类地址
池子合约自己就是 LP 代币,所以它在 Etherscan 上有代币页,页面里有 Holders(持有人)标签。Etherscan 对这个标签的说明是:按持有数量和占比,列出这个代币的全部持有人。这张表列的是 LP 凭证的持有人,和代币本身的持币排行是两张表,后者怎么读在持币集中度怎么看?前十大地址占比高意味着什么?里。
把列表里的地址归成三类,各自把占比加起来:
| LP 凭证在谁名下 | 对应的池子资产能不能被赎回 | 接着核对什么 |
|---|---|---|
| 零地址(全 0 的地址) | 不能。v2 源码把铸到这里的 LP 注释为 permanently lock | 占 LP 总量多少;是不是只有开池时自动铸的那一点 |
| 锁仓合约 | 按服务商文档:解锁时间之前不能;到期后锁的所有者可以取回 | 合约地址在不在服务商的官方文档里;解锁时间;锁的所有者是哪个地址 |
| 普通钱包,或认不出的合约 | 按能赎回对待。普通钱包随时可以赎回或转走;认不出的合约要看它自己的代码 | 占比多大;这个地址的来历 |
零地址那一行要多看一眼。前面说过,v2 源码会在开池时自动往零地址铸一笔 LP,数量是 MINIMUM_LIQUIDITY,源码里定为 10 的 3 次方个最小单位;LP 代币是 18 位小数,折下来是 10 的负 15 次方个 LP。用这套源码的池子,零地址名下天生就有这一丁点。列表里出现零地址说明不了什么,要看它的占比和项目方声称的数字对不对得上。持有人列表里找不到这一行,或者占比看着不对,就到池子合约的 Read Contract 里自己读:balanceOf 填零地址得到它名下的 LP 数量,除以 totalSupply 返回的 LP 总量。
一个地址是合约还是普通钱包,点进去看。Etherscan 会给一部分地址加 Public Name Tag(公开名称标签),按它的说明,这个标签对合约地址标的是所有者或用途,是 Etherscan 加上去的,可以当线索。要作准,得到锁仓服务商的官方文档里找合约地址表逐位比对,UNCX 的开发者文档就有一页 Contracts,按链和 DEX 列出它的锁仓合约地址。认不出来的合约,归到表里第三类:它的代码允许谁、在什么条件下取走 LP,单从持有人列表上看不出来。
锁仓合约里登记的解锁时间
LP 进了锁仓合约只回答了一半,剩下一半是哪天能出来。有两条路可以查。
一条是用锁仓服务商自己的页面。UNCX 给持币者的查询指引写的步骤是:在它的界面选 Explore(浏览)标签,点右上角的搜索按钮,输入 pair address(也就是池子地址)并选中结果,进入这个池子的页面,上面是它名下全部流动性锁的明细。
另一条是直接读合约。UNCX 的 v2 锁仓合约技术文档列了几个只读函数:getNumLocksForToken 填入 LP 代币地址,返回这个 LP 名下有几笔锁;getUserLockForTokenAtIndex 填入锁的所有者地址、LP 代币地址和序号,返回 lockDate、amount、initialAmount、unlockDate、lockID、owner 六个值。所有者地址从它界面上那份明细里取。同一页的返回值表逐个写了含义:unlockDate 是 Date when the tokens will be unlocked(代币解锁的日期),amount 是 Amount of tokens locked(锁住的数量),owner 是这笔锁的所有者地址。读出来的数和界面上那份明细对一遍。同一页的写入函数里还列着一个 migrate,说明是 Migrates liquidity to uniswap v3(把流动性迁到 Uniswap v3);迁过去之后这部分流动性归谁、还锁不锁,要到 v3 那一侧重新查。别家锁仓合约的函数名不一样,照它自己的文档读。
同一份锁仓合约名下的 LP 可以分属好几笔锁,每笔的解锁时间各记各的,逐笔看,别只看最晚的那一笔。
LP 锁住了,还剩哪些口子
没锁的那部分随时能走。假设 Holders 列表加总下来,锁仓合约拿着 60% 的 LP,一个普通钱包拿着 40%(教学假设数字)。那 40% 对应的两种资产,这个钱包今天就能赎回,池子深度当场少四成。“已锁池”后面不带百分比,这句话就没法核对。
比例还会变。v2 文档写的是,每次有人存入流动性都会新铸 LP 发给存入者。新铸出来的这些在存入者手里,不在锁里。你看到的占比只属于查看的那一天,笔记里把日期一起记上。
解锁时间一过,锁就不再是约束。UNCX 的建锁说明用大写强调,解锁日之前无法取回 LP;过了那一天,锁的所有者就可以提走。PinkLock 的解锁说明同样写明,到期后只有 owner 地址能发起取回;它的转让说明写的是,这个 owner 可以转让,转让之后只有新地址能解锁。所以除了日期,还要看到期那天有权提走的是哪个地址。PinkLock 建锁时另有一个 use vesting(分期释放)选项,勾了它,LP 是按周期一批批变成可取的,只问“锁到哪天”会漏掉中间陆续放出来的部分。
项目方说“到期会续锁”,在续锁交易上链之前只是一句话。UNCX 的锁管理说明里有 Relock(延长锁定)这个操作,做没做,回锁仓记录看解锁时间有没有变。
再一个是锁的到底是哪个池子。同一个代币可以有好几个池子:它跟 ETH 配一个,跟稳定币又配一个;在 Uniswap v3 里,同一对资产还能按不同手续费率各开一个,官方架构文档的原话是 multiple pools of the same asset pair, distinguished only by their swap fee;换一家 DEX,又是另外的池子合约。项目方锁的那个,不一定是你准备交易的那个。拿锁仓记录里的 LP 代币地址,和你要用的池子地址逐位比对。
还有两件事,LP 锁得再死也管不到。一是代币合约自己的权限,增发、冻结、暂停转账都算:合约里留着铸币权限,有权限的地址就能造出新币卖进池子,这一项按在区块浏览器上查代币管理权限:能不能增发、冻结、暂停转账单独查。二是已经在别人手里的大量代币。Uniswap 的兑换文档写明兑换是 permissionless(无需许可)的,池子这一侧不拦人。
用 x * y = k 粗算一个例子(教学假设数字,没算手续费):池子里有 100 个 A 和 10 个 B,乘积是 1000。假设某个地址一次卖进 100 个 A,池子里的 A 变成 200,B 就得降到 5,另外 5 个 B 被它换走。LP 凭证一张没动,池子里你指望用来退出的那种资产少了一半,A 的价格从 0.1 个 B 掉到 0.025 个 B。把 LP 烧掉也挡不住这种卖出。
头寸是 NFT 的池子和 Solana 上的池子,查法要换
前面整套查法有个前提:池子发的 LP 凭证是同质化代币,所有份额都在一张持有人列表里。Uniswap 的概念文档把分界划得很清楚:v2 铸的是同质化的 ERC-20 池子代币,代表储备的按比例份额;v3 和 v4 里,每个流动性提供者自己选一个价格区间,v3 的头寸用 ERC-721 NFT 表示,由 NonfungiblePositionManager 合约发行。PancakeSwap 的文档对它的 V3 也这么写:流动性头寸是 NFT,可以转让。v4 的头寸由 PositionManager 管理,官方 SDK 指南里铸造头寸的 recipient 参数,说明写的是 Address to receive the position NFT(接收头寸 NFT 的地址)。
落到查锁仓上,有几处跟 v2 不一样。一个池子里有许多个头寸,经 NonfungiblePositionManager 建的头寸,每个是一枚单独的 NFT,“锁了”只能是指其中某一枚或某几枚被转进了锁仓合约,UNCX 的 v3 锁仓文档描述的就是把这枚 NFT 存进智能合约。你要向项目方要的是 NFT 的 token ID,再到 Etherscan 的 NFT 页面看 Owners(当前所有者)一栏是不是锁仓合约。
最难的是比例。被锁的这枚头寸占整个池子流动性多少,Etherscan 对 NFT 页面的说明里列出的是所有者、合约地址、token ID、代币标准和转手记录,没有占比这一项;头寸又只覆盖它自己选定的价格区间。这一项算不清,就记“未确认”。
Solana 上以 Raydium 为例,它的文档按池子类型分开写:CPMM 池给流动性提供者的是同质化 LP 代币;CLMM 池给的是一枚头寸 NFT,文档特地加了一句 not fungible LP tokens。
“烧”在 Solana 上也是另一回事。Solana 的代币文档写的是,burn 会永久减少代币账户的余额,并把这个代币的总供应量减掉同样的数。被烧掉的 LP 不会停在某个销毁地址名下,它直接从供应量里消失,EVM 上“看零地址占比”的办法在这里用不上。核对时要的是那笔 burn 交易的签名,点开确认被烧的是这个池子的 LP 代币,数量是多少。
Raydium 自己还有一个名字里带 Burn 的功能,叫 Burn & Earn。它的文档专门说明:虽然名字叫 burn,LP 代币或头寸 NFT 并没有被销毁,而是转进一个由程序控制的托管账户锁住,没有对应的取回指令,流动性那一侧永远拿不回来;操作的人得到一枚 Fee Key NFT,凭它继续领手续费,这枚 NFT 可以转让。支持范围文档也列了:CPMM 支持,CLMM 建议只锁全区间头寸,AMM v4 不支持。Raydium 的池子信息接口会返回 burnPercent 字段,文档的定义是这个池子的流动性里经 Burn & Earn 锁定的份额。直接用 burn 指令烧掉的 LP 算不算在这个数里,这一页没写,算或不算都别默认。
UNCX 的文档里也有 Solana 锁仓一页,列出了支持的池子类型,查法照服务商自己的文档。
读不出答案的那几项,写“未确认”
查完把结果记成几行,能填的填,填不了的原样写“未确认”:
- 池子地址,在哪条链、哪个 DEX、哪个版本;
- LP 凭证(或头寸)在零地址、锁仓合约、其他地址名下各占多少,连同查看日期;
- 锁仓合约地址和服务商官方文档是否一致,解锁时间,锁的所有者地址;
- 项目方给出的锁池或烧池交易哈希,没给就写没给。
下面这些情况直接归“未确认”,别替项目方补成“应该锁了”:LP 在一个查不出来历的合约里;只有截图,没有交易哈希;v3 头寸的 NFT 确实在锁仓合约名下,占池子多少却算不出来;行情站页面上有个“锁”的标记,点不到链上记录。行情站显示的流动性金额回答的是池子里现在有多少资产,锁没锁是另一个问题。DEX Screener 公开的 API 文档里(2026年10月查看),交易对的字段有 pairAddress、liquidity 等,没有关于锁定或销毁的字段。
池子这一块看完,回答的只是“用来退出的那一半资产会不会被人直接抽走”。供应量、解锁安排和其余检查项,按如何研究一个代币?合约地址、供应量与流动性检查接着做。
锁池、烧池再补三问
LP 凭证的持有人列表,和代币本身的持币排行是一回事吗?
不是。LP 凭证的持有人列表在池子合约地址对应的代币页里,列的是谁拿着赎回池子资产的凭证;代币本身的持币排行列的是谁拿着这个币。查池子锁没锁,看的是前一张。
项目方发来一笔带 burn 字样的交易,能证明 LP 已烧吗?
不一定。在 Uniswap v2 的池子合约里,burn 函数做的是赎回流动性:销毁交回来的 LP,同时把两种资产转给指定地址。点开交易看资产流向:池子里的两种代币在这笔交易里被转了出去,就是撤池子。LP 是不是留在零地址名下,回持有人列表看零地址的占比。
Uniswap v3 的池子,能照 v2 的办法查锁仓吗?
不能照搬。按 Uniswap 的概念文档,v3 的头寸用 ERC-721 NFT 表示,没有一张同质化 LP 代币的持有人列表。要查的是具体那枚头寸 NFT 的 token ID 现在归哪个地址所有;这枚头寸占整个池子流动性多少,算不清就记“未确认”。