Scrip

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.