Express Deposit Removal

The v0.8.5 express deposit split is removed from the AccountLayer. Its two affiliate storage slots are kept as dead fields so the struct layout does not move.

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

Two AccountLayer entry points and their AccountManager wrappers, two affiliate config setters, one view, one provider callback, two events, and three errors.
Removed Kind
ICoreFacet.depositForAccountWithExpressRate
ICoreFacet.depositAndAllocateForAccountWithExpressRate
entry points
the matching AccountManager wrappers entry points
IAffiliateFacet.setExpressRate
IAffiliateFacet.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.