usawa

Signed, immutable accounting.
Log | Files | Refs | Submodules | LICENSE

commit 53dde933bd84750594973c33794a6aa9ab2300ff
parent cadd251509142ae9b2193fc23918be42f3edaf5d
Author: lash <dev@holbrook.no>
Date:   Sat,  4 Apr 2026 20:51:42 -0600

Add option to replay ledger from context obj

Diffstat:
Mdummy/usawa/context.py | 10+++++++++-
Mdummy/usawa/ledger.py | 2+-
Mdummy/usawa/store.py | 13++++++++++---
3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/dummy/usawa/context.py b/dummy/usawa/context.py @@ -20,7 +20,7 @@ class UsawaContext: pwget = pwgetter - def __init__(self, cfg, signing=True, pwgetter=None): + def __init__(self, cfg, signing=True, pwgetter=None, replay=False): self.cfg = cfg self.db = None self.ledger = None @@ -35,6 +35,7 @@ class UsawaContext: self.o = {} self.askpass = False self.signing = signing + self.replay = replay def set(self, k, v): @@ -72,6 +73,11 @@ class UsawaContext: pass self.load_wallet() + if self.replay: + self.store.load() + self.ledger.truncate() + logg.debug('replayed ledger {}'.format(self.ledger.to_string())) + def commit(self, ledger=None): if ledger == None: @@ -110,6 +116,8 @@ class UsawaContext: if self.ledger != None: raise AttributeError('ledger set') self.ledger = Ledger.from_file(self.ledger_path_in) + if self.replay: + self.ledger = Ledger(self.ledger.uidx, acl=self.ledger.acl, topic=self.ledger.topic) self.uidx = self.ledger.uidx if self.wallet != None: self.ledger.set_wallet(self.wallet) diff --git a/dummy/usawa/ledger.py b/dummy/usawa/ledger.py @@ -761,4 +761,4 @@ class Ledger(UsawaElement): def __str__(self): - return "state: " + self.base.hex() + " serial " + str(self.serial) + return "state from " + self.base.hex() + " to " + self.cur.hex() + " serial " + str(self.serial) diff --git a/dummy/usawa/store.py b/dummy/usawa/store.py @@ -366,15 +366,22 @@ class LedgerStore(EntryStore, AssetStore, KeyStore): :raises FileNotFoundError: If an entry cannot be found. """ - def load(self, acl=None): - logg.debug('load ledger from store {}'.format(self.ledger)) + def load(self, acl=None, until=0): + logg.debug('load ledger from store {} until {}'.format(self.ledger, until)) + v = 0 while True: o = None try: - o = self.get_entry(self.ledger.next_serial(), acl=acl) + if until != 0: + if until == v: + break + v = self.ledger.peek() + o = self.get_entry(v, acl=acl) + self.ledger.next_serial() except FileNotFoundError: break self.ledger.add_entry(o) + logg.info('loaded ledger {}'.format(self.ledger)) """Load all entries from store, newest to oldest.