跳到正文
← 使用教程

Sablier Flow 有欠款却不能全提:核对覆盖、暂停与void

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

按同一读取时点检查流率、欠款与余额的不同单位,拆出暂停、退款、永久终止和实际已收款。

开始前准备

  • 已有去敏Flow合约/streamId/版本、token decimals、读取块/时间,以及deposit、withdraw、pause/restart/refund/void的原记录。
  • 不运行合同/API/Graph查询,不充值、调整、提取、暂停或void;缺资金/权限证据保留未知。

1. 确认Flow身份、版本和当前双方

原界面Payments对应Flow,部署页当前v3.0/FL4与旧FL3/FL2/FL不同。按chainId+合约+streamId定位,核getSender/getRecipient和NFT转让记录。

sender可以不同于创建调用者;recipient是当前NFT owner。单有create事件或余额页面不足以证明流已充值或本人有调速/退款权限。

检查结果:Flow版本、sender、当前recipient及读取时点明确。

2. 把18位流率与资产整数金额分开

对照getRatePerSecond、getSnapshotDebtScaled、getSnapshotTime和getTokenDecimals。UD21x18流率以1e18表示1个token/秒,snapshotDebtScaled/ongoingDebtScaled为18位固定点。

totalDebtOf/coveredDebtOf/uncoveredDebtOf/getBalance等资产金额按该token decimals,不能把原整数直接相加;future start时ongoing债务可为0。变速/暂停后用各段snapshot,不把最新率回推全历史。

检查结果:速率/缩放欠款/资产金额各有单位和时间基线。

3. 用覆盖欠款而非总欠款判断可提

已有totalDebtOf分为coveredDebtOf与uncoveredDebtOf,withdrawableAmountOf是covered的别名,固定实现covered取余额与总欠款中较小值。

欠款大于余额时未覆盖部分并非可立即提取资金;getBalance也可能含尚未欠给recipient的可退款部分。读取失败不能填0,更不能靠追加充值试错。

检查结果:总欠款、已覆盖可提、未覆盖及余额按同一时点分列。

4. 区分pause、restart与void的后果

已有PauseFlowStream表示sender暂停并更新snapshot、将rate归零;之前累计欠款并不因此被抹掉。Restart需要paused、未void、sender和正流率;这不是Lockup的永久cancel。

void可由sender/recipient或其批准方按具体实现触发,不能restart;资不抵债时uncovered会write off。原VoidFlowStream中的writtenOffDebt与可提余额分开,不能把void当全部欠款支付。

检查结果:暂停、重启、不可恢复终止和被放弃欠款各自可追溯。

5. 按sender退款与recipient提现分别定位失败

refund仅sender且amount不超过refundableAmountOf,退款去sender,不是recipient到账。withdraw可由公众向当前recipient发起;recipient/approved方才可选择其它to,额度和非零地址另核。

当前实现有minFee/msg.value条件,费用/补贴与Gas分列;InsufficientFeePayment、超可提/可退、空流、void限制等原错分别留存,不将权限错误当资金被盗或欠款不存在。

检查结果:操作人、to、金额来源、费用和原失败层没有混合。

6. 核withdraw回执而不是累计欠款页面

从已有WithdrawFromFlowStream对应ID、to、amount及实际token转账/成功回执核收款;Deposit只是往流里充值,Refund是sender取回未占用余额,Void是终止与债务处理。

最后按读取时点、流率分段、覆盖/未覆盖、已提现、sender退款、write-off列出;本页没有统一累计paid getter,不用totalDebt减余额猜全历史已付。缺完整日志只给有限结论。

检查结果:实际已收金额有转账证据,剩余义务与write-off另列。

怎样确认完成

  • 能够按同一时点区分覆盖/未覆盖欠款、余额、暂停与终止,并定位已有提现结果。
  • 未承诺欠款能恢复、sender会充值或未来可全额提取。

常见错误与边界

  • Flow创建/总欠款当足额到账或全部可提。
  • 把18位rps/Scaled debt与token decimals原金额相加。
  • pause当永久取消,void当支付全部欠款,refund当recipient收款。

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