Docs
How the rule sees money.
Net, not gross. The only thing verifiable on chain without trusting a keeper is the balance of your USDC account, so that is what the rule reads.
The watermark
When you turn the rule on, your current USDC balance becomes the watermark: everything already there has been seen. A sweep reads the balance now, subtracts the watermark, and calls the difference the inflow. After the slice leaves, the watermark becomes the new balance — the remainder is yours, untaxed, forever.
bal = your USDC balance now inbound = bal − watermark (0 if bal fell below it) taxable = min(inbound, cap) (cap = 0 means no cap) slice = taxable × rate slice = min(slice, bal − floor) (floor = 0 means no floor) require inbound ≥ $1 and slice ≥ $0.50 watermark = bal − slice
Spending is not income
If your balance falls below the watermark, the watermark follows it down. Anyone may call sync_watermark for that; it can only ever set the watermark to your true balance, and only downward. Without it, an owner who spent $700 would see nothing convert until the balance had climbed back past the old mark.
If $500 arrives and $500 leaves before a keeper acts, nothing converts. Keepers act within seconds of a balance change, so this is rare, and the interface says so rather than pretending otherwise.
Swap proceeds count
Sell a token for USDC and the slice converts: every time you take profits, part of it leaves the casino. The cap keeps a large treasury move from being taxed in full; the floor keeps cash from dropping below what you need.
Escalation
Optionally, one percentage point every ninety days, capped at half. The clock starts when the rule is turned on, and restarts when the rate or the escalation is changed.
What the keeper never decides
The amount is computed by the program from on-chain state in begin_sweep. The keeper passes a release id and the accounts. It cannot choose more, less, or a different account.