commit 7a5464f4646437451fadc1b15c96b7452c1985a3
parent 352de9e744b03f9795eb1945c4a7fefc1c140896
Author: lash <dev@holbrook.no>
Date: Sat, 6 Dec 2025 19:47:08 +0000
Correct digest index in sum on entry
Diffstat:
4 files changed, 35 insertions(+), 4 deletions(-)
diff --git a/dummy/create.py b/dummy/create.py
@@ -55,6 +55,5 @@ if __name__ == '__main__':
entry.sign(wallet)
ledger.add_entry(entry)
tree = ledger.to_tree()
- #r = lxml.etree.tostring(tree, method='c14n2', strip_text=True, inclusive_ns_prefixes='sv')
r = lxml.etree.tostring(tree, method='xml', standalone=True, xml_declaration=True, encoding='UTF-8')
print(r.decode('utf-8'))
diff --git a/dummy/svcontas/ledger.py b/dummy/svcontas/ledger.py
@@ -93,10 +93,15 @@ class Ledger:
base = h.digest()
self.base = base
self.topic = topic
+ self.cur = base
self.acl = acl
logg.debug('ledger base {} from topic {}'.format(self.base.hex(), self.topic.hex()))
+ def peek(self):
+ return self.serial + 1
+
+
def next_serial(self):
self.serial += 1
return self.serial
@@ -211,7 +216,7 @@ class Ledger:
#entries = self.entries[entry.serial]
self.serial = entry.serial
oldbase = self.base
- self.base = entry.sum()
+ self.cur = entry.sum()[0]
entry.parent = oldbase
self.entries[entry.serial].append(entry)
self.running[entry.unit].apply_entry(entry)
@@ -289,5 +294,9 @@ class Ledger:
return lxml.etree.tostring(self.tree)
+ def current(self):
+ return self.cur
+
+
def __str__(self):
return "state: " + self.base.hex()
diff --git a/dummy/tests/ledger.py b/dummy/tests/ledger.py
@@ -7,7 +7,7 @@ import copy
import lxml.etree
from whee.mem import MemStore
-from svcontas import Ledger, UnitIndex
+from svcontas import Ledger, UnitIndex, EntryPart, Entry, DemoWallet
from svcontas.store import LedgerStore
logging.basicConfig(level=logging.DEBUG)
@@ -38,6 +38,29 @@ class TestLedger(unittest.TestCase):
ledger = Ledger.from_tree(tree, uidx)
+ def test_ledger_firstfew(self):
+ s = 'FOO'
+ uidx = UnitIndex(s)
+ o = Ledger(uidx)
+ store = LedgerStore(self.store, ledger=o)
+ store.start()
+ print(o.to_string())
+
+ wallet = DemoWallet()
+ x = EntryPart('income', 'foo', 1337, src=True)
+ y = EntryPart('asset', 'foo', 1337)
+ v = Entry(x, y, s, o.peek(), datetime.datetime.now(), parent=o.current())
+ v.sign(wallet)
+ o.add_entry(v)
+
+ x = EntryPart('expense', 'bar̈́', 42, src=True)
+ y = EntryPart('liability', 'bar', 42)
+ v = Entry(x, y, s, o.peek(), datetime.datetime.now(), parent=o.current())
+ v.sign(wallet)
+ o.add_entry(v)
+
+ print(o.to_string())
+
if __name__ == '__main__':
unittest.main()
diff --git a/dummy/tests/test.xml b/dummy/tests/test.xml
@@ -38,4 +38,4 @@
<sig type="ed25519" keyid="566c38287d3f31c7e50836cae58e426c6bccc52d">117a57c72ed210b91469307a1c2e73fe2d5ee306cd8ccf1a9db4ecb15d38ecbbfc97d62fec4ab8aadb08c531f2d1ede34cb6e4d3987bcba63322a0767e532e13</sig>
</incoming>
-<entry><src type="income"><account>Miscellaneous</account><amount>12300</amount></src><dst type="asset"><account>Miscellaneous</account><amount>12300</amount></dst><data><parent>b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944cb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</parent><ref>4052f317-a4e5-4ce3-9f6d-cb691a8cf4c7</ref><serial>1</serial><unit>USD</unit><date>2025-12-06</date><dateTimeRegistered>2025-12-06T19:26:06Z</dateTimeRegistered></data><sig type="ed25519" keyid="34d26579dbb456693e540672cf922f52dde0d6532e35bf06be013a7c532f20e0">5c35d6f01428e383e798ec218f07541c97c6f23c195422641e7ad36020678a76e0cec13ef8301c3a3cc0aac7ee72e96b3ebb2c19fb1c8a9bc318b8e5acaabf0a</sig></entry></ledger>
+<entry><src type="income"><account>Miscellaneous</account><amount>12300</amount></src><dst type="asset"><account>Miscellaneous</account><amount>12300</amount></dst><data><parent>b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944cb5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c</parent><ref>7fd69cab-7dd2-4c76-afb7-aa7a70104029</ref><serial>1</serial><unit>USD</unit><date>2025-12-06</date><dateTimeRegistered>2025-12-06T19:39:41Z</dateTimeRegistered></data><sig type="ed25519" keyid="34d26579dbb456693e540672cf922f52dde0d6532e35bf06be013a7c532f20e0">923ebe46ca2b316c8ad86ba29d77c07671be918fba11f755995b1c1212a1575a11ae5741068eae29f723fbc334805a4ed67f66b3bf6746f8b845f540f8900d09</sig></entry></ledger>