the seat, the curve, and the three moves, with the arithmetic in the open.
τ is tenure in seconds. 604800 seconds is seven days, the half tenure. the multiplier is one at zero, four and a half at seven days, and approaches eight.
| tenure | multiplier |
|---|---|
| 0 | 1.0000 |
| 1 hour | 1.0288 |
| 12 hours | 1.3381 |
| 1 day | 1.6599 |
| 2 days | 2.2577 |
| 3 days | 2.7990 |
| 5 days | 3.7335 |
| 7 days | 4.5000 |
| 10 days | 5.3995 |
| 14 days | 6.2500 |
| 21 days | 7.1250 |
| 28 days | 7.5625 |
| 56 days | 7.9727 |
a seat is a timestamp. it is the mean time at which the tokens in a wallet were acquired, weighted by how many arrived at each time. it lives in the token contract and moves on every balance change, inside the transfer itself, so there is no separate claim, stake, or register step and nothing to forget to do.
when tokens come in from anywhere except the contract, the new seat is the old balance times the old seat plus the new quantity times now, divided by the new balance. new tokens are born with no age and they dilute the old. when tokens come in from the contract, which only happens when a round pays, the seat does not move at all.
when tokens go out for any reason, the wallet's remaining age is multiplied by one minus twice the fraction that left, floored at zero, and the seat is set to now minus that age. a tenth out is a fifth of the age gone. a quarter out is half. half out is all of it. the rule is deliberately harsher than proportional so that trimming a bag is never free.
| move | tenure after | multiplier after |
|---|---|---|
| sells 100 | 8.0d | 4.8300× |
| sells 250 | 5.0d | 3.7335× |
| sells 500 | 0s | 1.0000× |
| move | tenure after | multiplier after |
|---|---|---|
| buys 1000 more | 5.0d | 3.7335× |
| buys 250 more | 8.0d | 4.8300× |
| move | tenure after | multiplier after |
|---|---|---|
| paid 40 by the contract | 10.0d | 5.3995× |
weight is what a round splits by. a wallet's share is its weight over the sum of every weight in the set at the close. the round pays that share of the tokens it bought, after the quarter percent set aside for the sweepers. nothing is rounded in the wallet's favour; whatever is left after integer division is dust and carries into the next round.
every balance change pushes a checkpoint onto the wallet's list: the block time, the balance after, and the seat after, packed into one storage word. the sweep never reads a live balance. it asks each wallet's list for the entry in force at the close time, by binary search, so a transfer during the sweep changes the next round and not this one.