跳到正文

研究指南

加密现货研究

包装原生资产:核对抵押余额与代币单位

包装原生资产的抵押核对必须按合约实现进行,不能假设totalSupply总是独立维护的用户权利总额。在本文引用的WETH9实现中,totalSupply直接返回合约原生币余额,因此拿两者相比,相等只是函数构造的结果。

canonical WETH9源码还维护各账户balanceOf,并通过存入、提取和转账更新。应用到真实部署前必须核实代码;其他包装合约可能采用不同账务、权限或赎回机制。

找到彼此独立的数量

保存网络、包装地址、部署代码和观测区块。读取原生抵押余额B、报告供应S,再将L定义为账户余额之和,或独立重建的未偿权利账。真正要比较的是B与L;如果S实现为B,那么B与S并不是独立验证。

L需要完整历史或可靠状态方法。对这个实现,存入和提取改变用户权利,转账只在账户间移动权利。源码若发出专门Deposit事件,就不能硬性要求一定存在从零地址发出的通用铸造Transfer事件,否则标准索引假设可能漏账。

重建的不确定性也要保留。普通balanceOf调用不能自动枚举映射中的全部账户。历史事件不完整,负债小计就可能不完整;抽查若干余额只能测试一致性,不能证明覆盖所有账户。

假设案例:额外抵押不等于新增账户权利

假设虚构部署起初B=100 ETH,独立重建的账户权利L=100 WETH。按所引实现,报告S也是100,因为函数读取原生币余额。

再假设按该网络规则允许的机制,2 ETH在未执行存入程序的情况下进入合约,账户权利没有对应增加。

数量进入前进入后
原生抵押B100 ETH102 ETH
账户权利L100 WETH100 WETH
报告供应S=B100102
抵押减账户权利0 ETH2 ETH

只读S的仪表盘可能显示供应增加2,但没有任何用户余额增加。B÷S始终为100%,不能独立检验账户权利账。按本例一比一单位约定,B÷L为102%,也不代表每位持有人自动获得更多赎回权。

所有金额均是假设,不表示任何真实部署当前存在额外抵押。未执行存入程序仍发生原生币入账的机制,需要按实际网络规则验证,不能只凭转账标签假定。

核对提取和权利边界

检查提取路径、账户扣减和原生币支付。每单位兑换一单位的权利,不同于按比例拥有合约全部原生资产。未读代码,不能把额外余额直接分给持有人,也不能称为经营者收入。

用期初抵押加流入减流出调节期末,再并行做权利账。正常存入、正常提取及未匹配移动分别列示。差额要追踪具体交易,不能用未经证实的资不抵债或盗窃结论替代调查。

若包装资产又存入金库或桥,额外权利层另查。通过同链抵押测试,不能证明托管者偿付能力或另一代币的退出路径。代码变化、异常原生币入账、索引余额与直接状态不符时,应复查。

可选一笔存入、一笔转账和一笔提取,用直接读取的账户余额测试重建。按该实现,转账应保持纳入账户权利合计不变,正常存入提取则让权利与抵押一起变化。差额若集中在特定事件边界,可能是索引规则错误,不一定是抵押机制变化。测试仍需完整纳入转出与转入双方,缺一边会制造虚假总额变化。

若无法枚举完整账户集合,就报告已经重建的权利与覆盖限制,不将部分余额之和称为全体负债,也不靠抵押相等填补缺口。

常见问题

totalSupply与ETH余额一致就证明独立足额抵押吗?

若供应函数直接返回该余额,就不能。应独立重建账户权利,并核实具体实现。

额外抵押会增加每个账户能提取的金额吗?

不自动增加。提取按合约规则和账户余额执行,不能假定持有人按比例拥有所有未解释盈余。

相关阅读