跳到正文
fevou.独立加密知识站

钱包里代币数量自己变了:rebase 代币怎么认,转账和卖出前要看什么

余额变化先查转账记录,再核对合约的记账方式。用 stETH、AMPL 和 aToken 看懂数量为何变化,以及转账、卖出和跨链前要确认什么。

图中标题为“数量变了,份额没变”,副标题“余额自己变动的代币,先查它按什么记账”,下方三格写着“份额与余额”“转账与卖出”“包装版本”
rebase 代币记的是份额,钱包里的数量按份额重算,转账、卖出和包装版本的问题都从这一点来。

没发起过转账,钱包或区块浏览器里某个代币的数量却变了,有一种可能是:这个币本身就是 rebase 代币,中文也叫弹性供应代币或变基代币。这类合约记的不是「你有多少枚」,而是「你占多少份」。每到更新时点,合约改的是份额和数量之间的换算比例,所有持有人的余额一起按比例重算,变多变少都有可能。stETH、AMPL 都是这种记法,Aave 的 aToken 余额也会随利息自己往上走。

判断是不是 rebase,先看这个地址的代币转账记录,再对照项目的合约说明。数量变了,却找不到一笔对应的转入或转出,先往记账方式上查;按 ERC-20 标准写的合约,币被转走会留下一笔从你地址转出的记录,带税代币的扣费也只发生在某一笔转账里。确认是 rebase 以后,要留意的是拿它转账、放进 DEX 池子、跨链的时候。不少合约默认「余额只会因为转账而变」,rebase 代币恰好打破这个前提,wstETH 这类包装版本就是冲着这个问题做出来的。

余额变了,翻这个地址的转账记录

打开区块浏览器,按合约地址找到这个代币,再看你自己地址名下它的转账记录。名字靠不住,同名同图标的币很多,要确认你查的就是钱包里那个合约,方法见同名代币怎么区分。然后对着下表看你属于哪一种:

情况浏览器里看得到什么你的数量你在总量里的占比
rebase(正向或负向)以 stETH、AMPL 为例,重算余额不需要持有人之间转账变多或变少AMPL 不变;stETH 正向 rebase 时因协议费略被稀释
被转走(私钥泄露、授权被滥用)代币合约实际发生转出;仅凭列表里一条事件不能认定被盗变少变小
带税代币的转账扣费某一笔转账里,到账数比发出数少只在那笔转账里少随那笔转账变
项目方增发常见是从零地址铸出并分配;仍要核对合约实现新币没分到你的地址时不变;分到你的地址会变多没分到新币时被摊薄;分到时取决于分配比例

rebase 那一行为什么看不到记录,Lido 在 Lido Tokens Integration Guide 的 ERC-20 兼容性说明里写了:stETH 并不严格符合 ERC-20,唯一的例外是 rebase 时不发出 ERC-20 标准要求的 Transfer() 事件。浏览器的代币转账列表就是靠这类事件拼出来的,事件没发,列表里自然没有这一笔。Ampleforth 的协议说明页讲 AMPL 也是同一路子:调整作用于所有地址,不需要任何点对点的交易。

带税代币和 rebase 都会让人觉得「余额自己少了」,其实差得很远。带税币扣掉的那部分出现在某一笔转账里,你不动它就不扣;rebase 不挑时机,你什么都没做,数量也在变。带税币的查法在带税代币怎么查。增发时新币如果分给的是别的地址,你的余额不会变,变的是总量,你的占比被摊薄;新币如果分到你的地址,要分清是直接铸给你,还是从分发地址转来。按 ERC-20 的事件约定,铸币通常记为来自零地址的 Transfer,分发则记实际转出地址;铸币是否发出事件仍要核对具体合约,浏览器列表没显示时,还要查交易执行和链上余额。几种供应量怎么读见代币流通量、总供应量、最大供应量有什么区别。钱包里冒出一个原本没有的币,那是另一回事,按钱包里突然多了不认识的代币处理。

进一步核对 stETH,可以在已确认的合约读取页用 sharesOf(你的地址) 直接读 shares(份额),记录区块高度和当时余额,再与之后的区块对照。

Lido 的合约说明列出了这个方法;getSharesByPooledEth 是数量转份额的换算函数,反算可能因整数除法有误差。份额未变、余额变化符合份额换算比例,又能对应上协议的 rebase 更新,才有依据归因于 rebase。份额减少时,还要查转出、销毁或提现等操作;不要只凭两次余额差认定原因。

份额不动,数量怎么会动

Lido 文档给的式子是:账户份额 = 余额 × 总份额 ÷ 池子里的 ETH 总量(totalPooledEther)。移项就是持币人关心的那条:余额 = 份额 × 池子 ETH 总量 ÷ 总份额。份额只在转账、铸造、销毁时变,池子里的 ETH 总量跟着质押奖励走。文档写,正常情况下 Lido 预言机每天上报一次共识层上的 ETH 余额变化,stETH 余额就在这时重算,当时持有 stETH 的地址一起变。

Lido Docs 网站 Lido Tokens Integration Guide 页面顶部,大标题下首段说明本文面向要把 stETH 或 wstETH 集成进 dApp 或服务的开发者,重点是货币市场、DEX 和跨链桥,下方 INFO 框提到 Lido on Ethereum SDK,右侧目录列有 stTokens: stETH and wstETH、stETH vs. wstETH、What is stETH、Note on ERC-20 compliance、Accounting oracle、stETH internals: share mechanics、Bookkeeping shares、Transfer shares function for stETH、Fees 等条目
来源:Lido 官方文档 Lido Tokens Integration Guide 页面顶部。右侧目录对应本文引用的几处,可以逐条核对:stETH 与 wstETH 的区别、ERC-20 兼容性说明(rebase 不发 Transfer 事件)、预言机上报、份额记账公式与 transferShares、协议费。(2026年10月截图)

拿一组假设数字套一遍:总份额 1,000,000,池子 ETH 总量 1,050,000,你持有 100 份,余额 = 100 × 1,050,000 ÷ 1,000,000 = 105 stETH。第二天预言机上报后,池子 ETH 总量变成 1,050,100,先不算协议费、总份额不变,你的余额 = 100 × 1,050,100 ÷ 1,000,000 = 105.01 stETH。你没收到任何转账,多出的 0.01 就是这么来的。

本文引用的协议文档于 2026 年 10 月查阅;下文的费用、阈值和预言机人数按文档当时的说明列出,操作前再看官方当前参数。实际增量还要扣一层协议费。同一页写,Lido 收取质押奖励的 10%,一半给节点运营方,一半进协议金库,收法是给收费方新铸 shares。新 shares 一铸,总份额变大,你那 100 份的占比就被稀释一点,所以你看到的每日增量是扣掉这部分之后的。文档也写明这个费率由 DAO 投票决定,可以改。

AMPL 是另一套逻辑:stETH 的数量变化来自质押奖励,AMPL 的数量变化跟价格挂钩。Ampleforth 文档写,AMPL 的价格目标是按 CPI 调整后的 2019 年美元,价格偏离目标超过 deviation_threshold 才调整供应(文档写当前设为 5%)。调整方式是每天 UTC 凌晨 2 点更新一个全局系数,作用于所有地址。价格高于目标,协议自动按比例增加每个钱包里的数量;低于目标,按比例减少。文档还写,rebase 前你占全网 Y%,rebase 后还是 Y%,除非你自己买卖。

Aave 的 aToken 是第三种样子。Aave 的 Tokenization 文档写,aToken 靠持续增加持有人的钱包余额来支付收益,balanceOf 返回的是本金加上本金产生的收益,价值与存入的资产按 1:1 挂钩。它通过利息指数反映累计收益,而不是等一天统一重算;有利息累积时,aToken 余额可以随之增加,无须别人往你地址转账。

数量会涨,也会掉

rebase 不是只做加法。AMPL 的负向 rebase 是设计的一部分,价格低于目标且偏离超过调整阈值时,每个钱包的数量一起往下调。假设你持有 1,000 AMPL,某天按比例收缩 2%,下一次调整后就是 1,000 × (1 − 2%) = 980 AMPL;同样从 1,000 枚开始,若扩张 2%,就是 1,000 × (1 + 2%) = 1,020 AMPL。两种情况你的占比都没变,变的只是数量。每一枚值多少由市场定,AMPL 数量变多,不等于你手里的价值变多。

stETH 也写明了会变少。Lido 文档的说法是:rebase 可正可负,取决于验证者的表现;Lido 的验证者如果被罚没(slashing)或受到惩罚,stETH 余额会按惩罚大小下降。同一页写着,截至该文档撰写时,每日 rebase 还没出现过负数。文档讲罚没风险的部分也写了,验证者出问题时,质押资金最多可能 100% 面临风险。

反过来,数量掉了也别急着全算到 rebase 头上。回到第一节那张表,没找到转出或扣费交易,也还没有坐实 rebase。要确认网络与代币合约、核对链上余额及协议的更新记录;资料对不上,就先保留原因未明的判断。

转账、卖出、放进池子、跨链,各会碰到什么

单纯发生 rebase 通常不用持有人主动领币或签名。麻烦出在它离开钱包的时候:接收方的合约要是默认余额只会因转账而变,它记的账就会跟实际对不上。

转账:整额转出可能剩 1–2 wei

Lido 文档写了一个常见情况:账户里的 stETH 没法整额转走,实际转出的数量很多时候比预期少 1–2 wei(1 wei 是 10 的负 18 次方枚)。原因是余额计算里有整数除法,从数量换算成份额时向下取整。要精确就用 transferShares,按份额而不是按数量转;V2 升级还补了 transferSharesFrom,对应 ERC-20 那套授权转账。

对普通转账来说,1–2 wei 的价值可以忽略,但有两种场景要留意。一是点了「全部转出」,原地址可能留下一点零头,别以为是转账失败。二是对方是个要求「收到的数正好等于参数」的合约,可能就因为差这一点对不上。要把 stETH 转进某个合约,先看对方文档写明支持 stETH,还是只收 wstETH。

放进 DEX 池子:负向 rebase 的亏损算在 LP 头上

Uniswap 在 v3 文档的 Token Integration Issues 页写:fee-on-transfer(转账扣费)代币和 rebase 代币在 v3 上都无法正常工作。rebase 代币可以建池、可以 swap,但仓位一进入活跃状态,负向 rebase 造成的损失就由流动性提供者(LP)承担,而且没有办法追回。转账扣费代币则用不了它的 router 合约。

Lido 文档从 stETH 的角度说了另一半:Maker、Uniswap、SushiSwap 不是为 rebase 代币设计的,把 stETH 放进这类应用,持有人可能拿不到每日的质押奖励。它列出的主要链上流动性场所,是 Curve 上的 stETH/ETH 池、Uniswap V3 上的 wstETH/ETH 池、Balancer v2 上的 wstETH/ETH 池。后两个用的都是 wstETH。

落到卖出上:手里是 stETH,就找交易对里写的是 stETH 合约地址的池子;手里是 wstETH,别拿 stETH 的报价算账,两个合约地址不同,单价也不同。这一单卖下去能换回多少,取决于池子深度,估法见DEX 卖币提示价格影响太高。

跨链:奖励会留在桥合约里

Lido 文档写,多数跨链桥没有处理 rebase 的机制,把 stETH 跨到别的链,持有人就收不到质押奖励,奖励会流进桥的合约并锁在那里,另外,在多数网络上,Lido Multichain 的 wstETH 是桥过去的 ERC-20 代币,不能在那条链上直接拆回 stETH;只有部分 OP Stack 网络另外提供 stETH。

借贷:文档建议优先接 wstETH

Lido 给货币市场的建议是,只有应用有意支持份额和 rebase 语义时才接 stETH,否则优先用 wstETH;文档举的例子是 Aave V3 和 Aave V4 以 wstETH 作抵押物。你准备拿去抵押的是哪个版本,在借贷协议的资产列表里按合约地址对一下。

为什么会有 wstETH:数量不动,换算比例在动

上一节的问题都出在「数量会自己变」。以太坊主网上,wstETH 把数量变化转成每枚代表的 stETH 数量变化。Lido 文档把 wstETH 定义为一个 ERC-20 代币,代表账户在 stETH 总量里的份额。包装时,stETH 被锁进 wstETH 合约,按份额公式铸出 wstETH;拆包时,wstETH 被销毁,对应的 stETH 解锁回来。

结果是 wstETH 的余额不 rebase,只在转账、铸造、销毁时变,变的是它按 stETH 计的价格。文档的原意是:持有人余额静止不动,每一枚 wstETH 代表的 stETH 数量在变。以太坊主网的当前换算比例可以调 wstETH 合约的 stEthPerToken() 读到,同一时刻对所有持有人都一样,正常情况下在每天 rebase 时更新。

对比项stETHwstETH
钱包里的数量会不会自己变会,随每日 rebase 重算不会,只在转账、铸造、销毁时变
质押奖励体现在哪数量变多每枚能换的 stETH 变多
rebase 时浏览器有没有转账记录没有,rebase 不发 Transfer 事件余额本来不动,不涉及
Lido 文档列出的 DEX 池子Curve stETH/ETHUniswap V3、Balancer v2 的 wstETH/ETH
跨链多数桥处理不了 rebase,奖励会锁在桥合约Lido 在其他网络上提供的主要是这个版本
借贷应用明确支持 rebase 语义时才接文档建议优先;Aave V3、V4 用它作抵押物

再套一组假设数字:以太坊主网 stEthPerToken() 返回整数,把它按 18 位小数换算后,假设为 1.2 stETH/wstETH。你有 10 wstETH,折合 10 × 1.2 = 12 stETH。一段时间后比例变成 1.21 stETH/wstETH,你还是 10 枚 wstETH,折合 10 × 1.21 = 12.1 stETH。钱包里那个数字没动,不代表没有收益,收益在汇率里。反过来,看到 wstETH 的数量变了,就别往 rebase 上想,它只会因转账、铸造、销毁而变,直接去翻转账记录。

这一套是 Lido 给 stETH 定的规则,AMPL 或别家的 rebase 代币有没有包装版、包装合约是哪个地址、按什么换算,要看各自的官方文档。

再补三个问题

stETH 的余额今天没涨,是出问题了吗?

不一定。Lido 文档写的是,正常情况下 stETH 余额在预言机每天上报时重算,上报要 9 个预言机里有 5 个报出相同数据才生效;凑不够法定数量,或者链上最终性(finality)出了问题,这次上报可能推迟或跳过。隔一天再看,同时去区块浏览器确认这个地址没有转出记录。

rebase 代币的总供应量也会跟着变吗?

会,但不是每次更新都一定变。AMPL 在价格偏离超过阈值、实际触发供应调整时,按比例增减所有钱包里的数量,总量也跟着变,拿它的总供应量做比较时,要看清是哪一天的数字。stETH 的总量也会变:按上文的公式,忽略逐账户整数取整后,所有人的余额之和对应池子里的 ETH 总量,总量会随池子内 ETH 的增减变化,但一次上报不保证总量必然改变。单个持有人的份额在纯 rebase 时不变,转账、铸造和销毁则会改变份额。

把 wstETH 换回 stETH,数量会不会少?

不是一比一换,按当时的汇率折算。以太坊主网的 wstETH 包装合约按同一时刻的换算比例解包,通常在每日 rebase 时更新比例。多数其他网络上的桥接 wstETH 不能在当地直接解包,要先核对该网络是否支持 stETH。换回的 stETH 大致等于 wstETH 数量乘以当时的汇率,换回之后它又开始随每日 rebase 变动;之后再转这些 stETH,仍可能有 1–2 wei 的取整差额。