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:
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.