Drips 可接收但 Collect 为零:核当前 splits、下游账户与实际领取
链小知 · 进阶 · 核验 · 依官方文档整理
从splittable到collectable再到wallet逐阶段核对,定位配置过期、100%拆分、自我回流、driver权限与收款兼容。
开始前准备
- 准备已有链/Drips实例、accountId/driver、ERC20/decimals、当前splits列表及hash、splittable/collectable结果、原split/collect回执和transferTo。仅查看有权取得的脱敏记录。
- 固定Drips V2 07c3924用于解释;不调用协议、SDK、账户、collect或更新配置。文档费用/网络例子不代表个人权限、实时Gas/赞助或部署一致。
1. 先辨资金停在哪个协议阶段
把同链同token的已有receivable、splittable与collectable单独列。stream接收或squeeze后、give和别人split到你账户的资金进入splittable;split后自身保留部分才增加collectable。
core collect并不自动receive或split,哪怕splits列表为空也需要split阶段。App的Claimable标签/预计金额不是这些方法的同义词,缺方法结果要保留未知;不能用wallet.balanceOf代替协议账本余额。
检查结果:各阶段金额/时点独立,0 collectable没有被等同完全无收入。
2. 核当前 splits 列表而非付款时截图
每账户只有一份splits配置,作用于全部ERC20;stream配置则每token独立。固定split/splitResult都要求currReceivers与最后setSplits列表完全相同,hash不符会报Invalid current splits receivers,即使amount0也先核列表。
取既有成功配置/事件中的accountId与weight,保持排序、不重复、非零weight、总和不超过分母。旧付款时截图不锁定还未split的资金用途;需要不可变分配时是不同ImmutableSplitsDriver模型,不能把普通地址账户当永久配置。
检查结果:已有当前列表/hash匹配,旧截图、未读取列表与真正空配置区分。
3. 用 1e6 权重和原 amount 解释可收部分
Drips splits权重分母1000000,与Juicebox的1e9不是同一表。已有splitResult(accountId,currReceivers,amount)返回本次新增collectableAmt和splitAmt;输入amount为token最小单位,不自动等全部现时splittable,也不是wallet已收到量。
例如原amount为100×10^6且token6位,权重合计600000时参考split60、保留40个token;需与同一配置时点匹配。实际逐receiver采用累计weight的向下差额舍入,不分别四舍五入后要求恰好相同;把原整数保留,view结果不是已经split。
检查结果:输入amount、分母、参考新增量与实际执行分开,舍入未补造损失。
4. 核100%拆分、自我回流和下游账户
总weight为1000000时本次资金可能全部送下游,本账户无新增collectable;空列表split后才把全额留给自己。若receiver包含自己的accountId,该份回到splittable而非collectable;100%给自己会循环,不能用反复Collect“解除”。
已有Split事件核sender/receiver accountId/token/amount,接收的是下游splittable,下游仍要按自己的当前配置split/collect。将自己的留存、自己回流和其他账户分配分列,不把跨账户收入或整个依赖树总额都当本人可领取。
检查结果:本账户与下游阶段明确,100%拆分/自我回流可解释0可领取。
5. 按 driver 核实际领取权限与接收地址
core Drips.collect(accountId,erc20)仅driver可调用,普通用户不能直接替任何IDcollect。固定AddressDriver.collect(erc20,transferTo)通过已认证_msgSender定位自己的ID;NFT/Repo等使用各自认证,不因钱包曾给项目资金就拥有该账户。
DriverTransferUtils先collect全额当前collectable,再在amt>0时withdraw到transferTo;它是资金动作,不是读取或split快捷键。FAQ警告exchange-managed地址可能无法签collect;固定方法也不支持rebase、转账税或持转限制ERC20。已有不兼容配置仅标风险/未知恢复,不指示新授权或资金测试。
检查结果:账户driver/认证和transferTo对应,未把collect当匿名读取或跨账户提款。
6. 将 Collected 和 wallet 转账共同核对
如果已有领取回执,匹配正确实例的Collected(accountId,erc20,amt)、实际driver流程和token转账至transferTo;之后collectable清零只是协议状态之一,单独不能证明预期wallet收到。没有回执时结论止于既有可领取快照/未知。
对比前后时注意期间新增receive/split或另一次collect,不能凭余额差推精确本次净额。按FAQ单列Gas/第三方费与条件赞助,失败调用仍可能有链费;保留错误和时点,不重发collect、修改split或切换owner来完成诊断。
检查结果:协议扣减、正确目标转账与费用分别有原证据或未知,完成不靠单个0余额。
怎样确认完成
- 已列资金当前阶段、现配置、拆分/自我回流/下游和真实transferTo结果。
- 文档与固定源码核验,未触发receive、split、collect、权限修改或wallet验收。
常见错误与边界
- 查看splitResult不会split;collect不会补receive/split,也不会把自己的循环splittable变可领取。
- 非地址driver有独立控制身份;protocol无用户费不等所有Gas/第三方服务免费。