同一个金库的两种退出:按资产取和按份额取,各自什么时候用 图 1
同一个金库的两种退出:按资产取和按份额取,各自什么时候用 · 图 1

对新手还有一条容易被忽略的对照动作:先在小额上把两条路径各走一遍。用同一笔本金,一半走按资产取、一半走按份额取,把两次实际到账、销毁的份额数和消耗的 gas 记下来,再和页面上的净值读数对一遍账。这一圈下来,你会亲眼看到舍入方向站在哪一边、预览函数和真实执行差在哪几位,以后面对大额退出时才有底气选口径;如果金库同时存在直接退出和排队退出两个按钮,两个都要各试一笔小额,因为请求制金库的批次定价时点,往往比函数本身对结果的影响更大。

ERC-4626 是当前收益金库最常用的接口标准,它把进出金库的动作定义成两组镜像函数:存的时候可以选择按资产存(deposit)或按份额存(mint),取的时候同样有两条路——按资产取(withdraw)和按份额取(redeem)。日常讨论里人们习惯笼统说「赎回」,但这两条退出路径在计算方向、舍入规则和适用场景上并不相同,理解差异才能预估到手的真实数字。 按资产退出,是你向金库声明「我要拿回多少底层资产」,合约反过来算你需要销毁多少份额;按份额退出,是你声明「我要烧掉多少份额」,合约算出这些份额对应多少资产。两条路径本质上是一次除法与一次乘法的方向选择,而只要涉及除不尽,就必然有舍入,金库类协议通常把舍入方向规定为不利于发起交易的一方,也就是让金库不会因为进出的取整而亏掉自己的资产,于是你提交的每一笔退出,最后几位单位可能与你按页面净值手工算出的结果有细微出入。 这正是四个预览函数存在的意义:previewWithdraw 与 previewRedeem 分别模拟两种退出的预估结果,它们是只读调用,上链前就能问出「按这个口径我大概拿回什么」。但预览值是模拟,真实执行时还隔着利息计提时点、份额总供给变化和区块状态差异,净值按秒累积的金库里,预览与到账之间的差额会集中出现在最后一两个最小单位上,这不是故障,而是计息与舍入的合力。 两种退出方式的选择,可以按三个维度判断。第一看你要不要清仓:全部退出时按份额取更干净,你查到自己名下多少份额、一次性烧完,不存在「按资产取导致少烧一点份额、剩下一串灰尘余额」的尾巴问题;灰尘份额在很多金库里既不退费也不起息,是常见的零头死角。第二看金额是否整:想凑一个整数金额去还债或转账时,按资产取直接表达目标,代价是销毁的份额数由合约倒推、向上取整。第三看金库是否异步:ERC-7540 一类的请求制金库把 withdraw 与 redeem 变成两阶段动作,先进入待处理队列、等批次定价后才结算,此时「份额口径」与「资产口径」在清算日会各自被批次汇率再算一遍,预览函数给的是申请时刻的估计值,与批次汇率结算后的到账值可以差出一个时间窗口的涨跌。 还有一类坑与攻击史有关:份额与资产的换算率如果靠「首笔存款人为抬高」操纵,先存先占便宜、后进场按虚高价格买入,就是所谓的通胀攻击;防法是把换算率的分母垫大或按虚拟资产计价。对普通用户而言可操作的检查是:看金库是份额直接对应资产、还是按汇率型记账(份额数字不变、单价上涨),两种记账在退出时给出的数字口径完全不同,页面显示的「份额余额」未必等于「你有权分到的资产」。 最后提醒两条纪律。一是退出前用区块浏览器核对自己对合约的真实持有权:有些聚合器把用户的资金装进一个大金库,你手里只是金库的金库份额,退出要穿两层结构、两层限速。二是不要因为「赎回按钮」四个字就默认无摩擦:暂停赎回、提取限额、批次延迟、费用抵扣,都可能出现在按钮背后,把 withdraw 与 redeem 的语义读明白,是判断这些条款作用在哪一步的前提。本文所有数字关系均为机制示例,不构成投资建议。