# SuperToken 包装后币数不符：核对底层精度、Native路线与收款人

整理：链小知（AI 辅助）
资料核对日期：2026-10-12
引用地址：https://lianxiaozhi.com/tools/guides/superfluid-supertoken-underlying-native-wrap-receipts
难度：进阶
核验方式：官方文档整理，未执行真实账户操作

用已有upgrade/downgrade记录分清SuperToken与底层资产单位、授权对象、舍入和to地址，不把包装或解包触发当到账。

## 使用工具
- [Superfluid CFA 与 SuperToken](https://lianxiaozhi.com/tools/superfluid) · [官方入口](https://www.superfluid.finance/)

## 前置条件
- 已有去敏token与underlying地址/decimals、方法/ABI版本、allowance与upgrade/downgrade原结果、目标to及交易回执。
- 不授权、不运行SDK/合约、不wrap/unwrap或支付；未知wrapper类型/底层资产先停在识别，不输入私钥或新转账试错。

## 1. 先分ERC20 Wrapper、Native与Pure

对照同链SuperToken地址、原getUnderlyingToken/getUnderlyingDecimals结果与资产官方说明。ERC20 wrapper有底层代币；Pure本来就无底层，不能保证可兑换某币。

Native wrapper以原生币为底层并使用ISETH类接口。getUnderlyingToken为空只能说明没有该ERC20底层，不足以独立识别Native；别凭符号带x或ETH字样给任意合约归类。

核对结果：资产类型、合约和底层证据明确，零地址未被过度解释。
依据：[Superfluid：Wrapper与Pure SuperToken](https://docs.superfluid.org/docs/concepts/overview/super-tokens)
依据：[Superfluid：ERC20与Native包装路线](https://docs.superfluid.org/docs/sdk/super-tokens/wrap-unwrap)
依据：[固定SuperToken余额及精度转换](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol)
依据：[固定ISETH原生币包装接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/tokens/ISETH.sol)

## 2. 把18位包装金额与底层allowance分开

固定SuperToken amount按18位，getUnderlyingDecimals另给底层精度；已有toUnderlyingAmount(amount)可列underlyingAmount与adjustedAmount。底层精度低于18时向下取整/调整，不能把6位底层整数直接传成18位数量解释。

示例代码复用一个amount不保证任意底层精度正确。保留所有原整数，用对应decimals展示，舍入差异不自动当平台扣费。

核对结果：SuperToken原量、底层原量、调整量及单位可对照。
依据：[固定ISuperToken包装单位接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol)
依据：[固定SuperToken余额及精度转换](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol)
依据：[Superfluid：ERC20与Native包装路线](https://docs.superfluid.org/docs/sdk/super-tokens/wrap-unwrap)

## 3. 核ERC20升级的payer、授权和实际mint对象

原ERC20包装路线核底层token、spender为目标SuperToken、底层allowance与所需underlyingAmount。授权成功只是可花额度，不能代替upgrade成功。

upgrade默认mint给付款者，upgradeTo的to可不同；fixed _upgrade比较真实底层转入与预期，转账扣费等导致不相等会拒绝。保留NO_UNDERLYING_TOKEN或INFLATIONARY_DEFLATIONARY_NOT_SUPPORTED等原错误，不建议追加授权/金额绕过。

核对结果：付款者、spender、to与实际底层/铸造记录各自一致。
依据：[Superfluid：ERC20与Native包装路线](https://docs.superfluid.org/docs/sdk/super-tokens/wrap-unwrap)
依据：[固定SuperToken余额及精度转换](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol)
依据：[固定ISuperToken包装单位接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol)

## 4. 对Native升级核msg.value而非ERC20approve

已有ISETH upgradeByETH()或upgradeByETHTo(to)是payable，数量取msg.value；没有普通upgrade(amount)的同参数结构。固定SETHProxy给sender或指定to selfMint，原生币来源与Gas分别保留。

这条实现不为任意x资产保证同接口，也不把无底层Pure当Native。函数名ETH只是该接口名称，实际链/部署资产必须对应原证明。

核对结果：Native方法、msg.value、接收人和部署范围有证据。
依据：[Superfluid：ERC20与Native包装路线](https://docs.superfluid.org/docs/sdk/super-tokens/wrap-unwrap)
依据：[固定ISETH原生币包装接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/tokens/ISETH.sol)
依据：[固定SETHProxy原生币包装实现](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/tokens/SETH.sol)

## 5. 检查解包类型、可用额和实际底层接收方

ERC20 downgrade/downgradeTo烧毁SuperToken再向caller或to转底层，原amount仍18位并可能调整；Native downgradeToETH在所读实现转原生币给caller，不套downgradeTo的收款规则。

可见余额要结合动态available与现存出流/buffer；余额不足或无底层会失败，不能用历史累计流收入作当前可烧毁额。TokenDowngraded中的account可能是烧毁账户，不一定等于downgradeTo底层收款to。

核对结果：解包方法、烧毁账户、可用量和实际底层接收人分列。
依据：[固定SuperToken余额及精度转换](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol)
依据：[固定ISuperfluidToken可用余额接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidToken.sol)
依据：[固定SETHProxy原生币包装实现](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/tokens/SETH.sol)
依据：[固定ISETH原生币包装接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/tokens/ISETH.sol)

## 6. 用成功回执与资产变化完成核对

核原交易成功、TokenUpgraded/TokenDowngraded、对应SuperToken铸造/烧毁及底层或原生币转移。目标to不同于payer时分别核各账户，不能只看事件名/数量宣布自己的底层钱包已到账。

包装余额与尚未包装底层分别计算，别重复计资产。网络Gas、App费用未知和可能舍入分列；wrapper解包并不自动停止已存在CFA流，权限撤销和流取消仍需独立记录。

核对结果：资产变化绑定正确链、方法、单位、接收方和成功回执，缺证列未完成。
依据：[固定SuperToken余额及精度转换](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol)
依据：[固定SETHProxy原生币包装实现](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/tokens/SETH.sol)
依据：[Superfluid：ERC20与Native包装路线](https://docs.superfluid.org/docs/sdk/super-tokens/wrap-unwrap)
依据：[固定CFAv1Forwarder读取、取消与授权](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/utils/CFAv1Forwarder.sol)

## 常见错误
- x符号或underlying零地址当Native证明；Pure资产擅自承诺可解包。
- 18位SuperToken和底层6位allowance混算，舍入当手续费。
- 批准/事件名当包装完成，或将downgradeTo的account事件字段当底层to。

## 完成检查
- 按原记录明确包装类型、双精度、payer/to、实际资产变化与失败层。
- 未执行任何包装/解包或确认真实余额、资产兑换资格和收费服务。

## 相关知识
- [代币授权是什么？断开钱包与撤销授权有什么区别](https://lianxiaozhi.com/learn/token-approvals)
- [Gas 怎么计算？交易失败为什么仍可能扣费](https://lianxiaozhi.com/learn/gas-and-failed-transactions)
- [原始、解码和整理后的链上数据有什么区别？](https://lianxiaozhi.com/learn/raw-decoded-curated-data)

## 官方依据
- [Superfluid：Wrapper与Pure SuperToken](https://docs.superfluid.org/docs/concepts/overview/super-tokens)
- [Superfluid：ERC20与Native包装路线](https://docs.superfluid.org/docs/sdk/super-tokens/wrap-unwrap)
- [固定SuperToken余额及精度转换](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/superfluid/SuperToken.sol)
- [固定ISETH原生币包装接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/tokens/ISETH.sol)
- [固定ISuperToken包装单位接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperToken.sol)
- [固定SETHProxy原生币包装实现](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/tokens/SETH.sol)
- [固定ISuperfluidToken可用余额接口](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/interfaces/superfluid/ISuperfluidToken.sol)
- [固定CFAv1Forwarder读取、取消与授权](https://raw.githubusercontent.com/superfluid-org/protocol-monorepo/0567de227327800b81ecaa34cba6d417c62bd4e3/packages/ethereum-contracts/contracts/utils/CFAv1Forwarder.sol)
