commit 4a04d9a8bcbbbf56f984eb785247a08ff2dc39af
parent 8d67c75f187669a4f3e87a03b5738fcdad8c50bb
Author: lash <dev@holbrook.no>
Date: Mon, 5 Jan 2026 17:25:27 +0100
Add ledger create cli tool
Diffstat:
4 files changed, 68 insertions(+), 3 deletions(-)
diff --git a/dummy/setup.py b/dummy/setup.py
@@ -2,6 +2,7 @@ from setuptools import setup
setup(
install_requires=[
- "wheepy[valkey]~=0.0.3"
+ "wheepy[valkey]~=0.0.3",
+ "confini~=0.6.5"
],
)
diff --git a/dummy/usawa/ledger.py b/dummy/usawa/ledger.py
@@ -153,7 +153,7 @@ class Ledger:
:todo: Add warnings for ignored parameters
"""
- def __init__(self, unitindex, tree=None, acl=None, serial=0, base=DEFAULTPARENT, topic=None):
+ def __init__(self, unitindex, tree=None, acl=None, serial=0, base=DEFAULTPARENT, topic=None, src=None):
self.uidx = unitindex
self.sigs = {}
self.entries = {}
@@ -161,7 +161,7 @@ class Ledger:
self.tree = tree
self.base = base
self.base_serial = serial
- self.src = None
+ self.src = src
self.topic = topic
self.acl = acl
if self.topic == None:
diff --git a/dummy/usawa/runnable/create.py b/dummy/usawa/runnable/create.py
@@ -0,0 +1,59 @@
+import logging
+import urllib.parse
+
+from usawa import Ledger, DemoWallet, UnitIndex
+
+logging.basicConfig(level=logging.DEBUG)
+logg = logging.getLogger()
+
+
+def parse_topic(v):
+ topic = None
+ if len(v) > 2:
+ if v[:2] == '0x':
+ v = v[2:]
+ try:
+ bytes.fromhex(v)
+ topic = v
+ except ValueError:
+ if not isinstance(v, str):
+ raise ValueError('invalid topic')
+ topic = v.encode('utf-8').hex()
+
+ return topic
+
+
+def parse_unit(v):
+ if not isinstance(v, str):
+ raise ValueError('invalid unit string')
+ return v.upper()
+
+
+print("Creating new ledger")
+v = input("Topic: ")
+topic = None
+if len(v) > 0:
+ r = parse_topic(v)
+ topic = bytes.fromhex(r)
+logg.debug('topic {} -> {}'.format(v, topic))
+
+v = input("Default unit: (default: BTC)")
+if len(v) == 0:
+ v = 'BTC'
+unit = parse_unit(v)
+
+v = input("Unit decimals (default: 2):")
+if len(v) == 0:
+ v = 2
+dec = int(v)
+
+uidx = UnitIndex(unit, precision=dec)
+
+v = input("Source URI:")
+src = None
+if len(v) > 0:
+ o = urllib.parse.urlparse(v)
+ src = urllib.parse.urlunparse(o)
+
+ledger = Ledger(uidx, topic=topic, src=src)
+print(ledger.to_string())
diff --git a/dummy/usawa/store.py b/dummy/usawa/store.py
@@ -8,6 +8,7 @@ from .ledger import Ledger
from .entry import Entry
+PFX_KEY = b'\x00'
PFX_LEDGER = b'\x01'
PFX_LEDGER_LOCK = b'\x02'
PFX_ENTRY = b'\x04'
@@ -15,6 +16,10 @@ PFX_ENTRY = b'\x04'
logg = logging.getLogger('usawa.store')
+def pfx_key():
+ return PFX_KEY
+
+
def pfx_ledger_topic(topic):
"""Return ledger store prefix for topic.