Summary
Express deposit shipped in v0.8.5. An affiliate could configure a percentage of each deposit made through its frontend to be split off and routed to an external provider contract, which credited the user with matching virtual balance inside core. v0.8.6 removes that deposit path.
What was removed
| Removed | Kind |
|---|---|
ICoreFacet.depositForAccountWithExpressRateICoreFacet.depositAndAllocateForAccountWithExpressRate
|
entry points |
the matching AccountManager wrappers |
entry points |
IAffiliateFacet.setExpressRateIAffiliateFacet.setVirtualProvider |
config setters |
IViewFacet.getAffiliateExpressRate |
view |
IVirtualProvider.onExpressDeposit |
provider callback |
ExpressRateSet, VirtualProviderSet |
events |
VirtualProviderRequired, InvalidExpressRate, BalanceInvariantViolation
|
errors |
Why the storage slots remain
AffiliateData.expressRate and AffiliateData.virtualProvider are retained as dead fields so every
later field in the struct keeps its current offset. Nothing reads or writes them any more.
An affiliate that configured a rate before the upgrade will still see that value in raw storage, and it now means nothing.
Treat a non-zero expressRate as stale data, not as configuration.
Effect on callers
The ordinary deposit path is unchanged. Callers of the two express entry points move to
depositForAccount and depositAndAllocateForAccount, which take the same
(account, amount) arguments and deposit the full amount. There is no on-chain cleanup for affiliates. The setters
are gone, so the deposit path no longer reads a configured rate.
Virtual provider implementations can drop onExpressDeposit. The current IVirtualProvider retains
seven withdraw and external-transfer lifecycle callbacks. A separate legacy callback, onForceWithdrawCancel, was
also removed between v0.8.5 and v0.8.6, so implementers comparing ABIs must remove both obsolete selectors. The interface is
narrowed rather than retired.