Commit 2e097c6
committed
fix: prevent backdated expense from draining future-dated grant
The eager-write drain in _consume_address_credits filtered lots by the
expense's expiration bound but not by its lower-bound message_timestamp.
Messages can arrive out of order in the P2P pipeline, so an older expense
could land after a future-dated grant has already been cached as a lot, at
which point the eager writer would happily deduct from that lot. The
repair replay enforces the lower bound by walking credit_history
chronologically, so the next restart would silently correct the eager
state.
Add the missing ``AlephCreditBalanceDb.message_timestamp <= message_timestamp``
predicate so the eager writer matches what the replay derives, and cover
it with a regression test that processes a backdated expense against a
future-dated grant.1 parent 2176c27 commit 2e097c6
2 files changed
Lines changed: 53 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
281 | 281 | | |
282 | 282 | | |
283 | 283 | | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
289 | 294 | | |
290 | 295 | | |
291 | 296 | | |
| |||
300 | 305 | | |
301 | 306 | | |
302 | 307 | | |
| 308 | + | |
303 | 309 | | |
304 | 310 | | |
305 | 311 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
619 | 619 | | |
620 | 620 | | |
621 | 621 | | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
622 | 664 | | |
623 | 665 | | |
624 | 666 | | |
| |||
0 commit comments