跳到正文
← 使用教程

CCTP 到账数量和费用不符:分开 bps、转发费、allowance与预付

链小知 · 进阶 · 核验 · 依官方文档整理

按原路线和finality保存费用记录,区分比例费、USDC最小单位、Fast流动性额度和源链预付,保留文档与部署差异。

开始前准备

  • 已有去敏费用结果、burn参数及目标回执,注明环境、source/destination domain和费用记录时间。
  • 只复核原记录与本地算术,不请求报价、读取账户、增加maxFee、授权或发送burn。

1. 用路线和finality选择费用条目

当前方法是/v2/burn/USDC/fees/{sourceDomainId}/{destDomainId};旧fastBurn费用端点已弃用,但fastBurn allowance方法没有同样弃用。

响应按实际finalityThreshold选择记录,不盲取数组第一个。1000/2000是等级,字段不存在或路线/环境不一致时保留待核。

检查结果:费用绑定正确路线、环境、时间和finality,不用旧端点或数组顺序替代。

2. 把bps和最小单位分开计算

minimumFee是bps,1bps=0.01%;forwardFee是USDC minor units,两者不能直接相加。forward默认false,hyperCoreDeposit只应在forward=true且目标为HyperEVM时使用。

离线例子:假设转移1000 USDC、比例费1.4bps,比例部分是0.14 USDC;这不是当前路线报价。换算最小单位要先确认实际精度,不能将所有网络金额一律乘同一尺度。

检查结果:比例、币值和最小单位各自标明,原费用记录没有浮点丢失或单位混加。

3. 检查maxFee、实际费用及文档冲突

maxFee是可接受上限,feeExecuted是消息中的实际费用;不能把上限当已扣金额。费用页既描述费用不足在源链回滚,也写可能从Fast降为Standard。

费开关与部署版本不同;旧TokenMessengerV2没有getMinFeeAmount,调用报错不等于费用为0。保留当时合约、参数、成功/回滚和消息,不凭一段文字替实际行为定性。

检查结果:费用上限、实际扣费和回滚/降级按原记录分列,版本未知保留。

4. 区分Fast额度与钱包授权

Fast allowance方法的allowance为完整USDC单位、最多六位小数,lastUpdated为UTC ISO时间;它不是ERC20 spender授权或当前账户可用余额。

静态旧额度例子不证明本次可用。旧快照、读取失败和0分别记录,不因为费用记录取得就承诺Fast执行或固定速度。

检查结果:额度的单位、时间和角色清楚,没有当成钱包余额或实时保证。

5. 确定费用是目标扣除还是源链预付

默认费用随转移在目标mint时扣除;Upfront模式通过源链TokenMessengerWithFees按签名quote另付费用,使接收方得到转移额。费用可选原生gas token或USDC。

原记录需分开burn转移额、预付费用币种和quote期限;已支付源链费用仍不证明目标到账。没有upfront证据时不能为解释差额自动改成该模式。

检查结果:模式和收费币种有原始依据,同一费用未在源/目标重复扣算。

6. 与实际mint及附加业务费对照

按消息amount/feeExecuted和目标资产转移核对实际数量,另记网络Gas。平台自行收取的应用费不属于CCTP内置费,需要原平台证据。

费用页当前Standard表为0同时保留可启用最小费开关,不能永久承诺所有路线免费。最终给出可解释差额、文档冲突与剩余缺口,不报当前费率或预计到账。

检查结果:到账差额分解有消息、收费模式和回执,未知费用没有补成结论。

怎样确认完成

  • 形成路线/finality、比例费、转发费、maxFee/实际费、额度、预付模式及mint数量对照。
  • 全部结论限已有记录;文档冲突、部署和当前费用未核实项明确。

常见错误与边界

  • bps数值与minor units直接相加,maxFee当实际扣费。
  • Fast allowance当ERC20授权、完整USDC单位当最小单位。
  • 过期旧报价当当前费用,或无证据解释为源链预付。

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据