usawa

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | Submodules | LICENSE

commit 3d30b886581ba5dfae00befbd8ec163481294a91
parent c57217a58a57f18fb8fb5b758615dee8a9b6ec62
Author: lash <dev@holbrook.no>
Date:   Tue, 20 Jan 2026 10:11:48 +0000

Avoid duplicate identity entries

Diffstat:
Mdummy/usawa/ledger.py | 26++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/dummy/usawa/ledger.py b/dummy/usawa/ledger.py @@ -207,12 +207,14 @@ class Ledger: self.wallet = v if self.acl == None: self.acl = ACL.from_wallet(self.wallet) - self.apply_wallet() + """ + """ def apply_wallet(self): incoming = self.tree.find('incoming', namespaces=nsmap()) v = self.wallet.pubkey() + o = lxml.etree.Element(NSPREFIX + 'identity', nsmap=nsmap()) o.set('keyid', v.hex()) did = self.wallet.did() @@ -307,6 +309,10 @@ class Ledger: identity.set('keyid', tree_identity.get('keyid')) identity.set('didtype', tree_identity.get('didtype')) + if self.wallet != None: + if self.wallet.pubkey() not in identities: + self.apply_wallet() + if acl != None: for v in acl.pubkeys(binary=False): if v not in identities: @@ -516,13 +522,23 @@ class Ledger: logg.debug('applied entry {} src {} dst {}'.format(entry.serial, entry.debit, entry.credit)) + """ + + :todo: handle canonical hex + """ def apply_signature(self, identity): sig = self.sigs[identity] + sig_hx = sig.hex() tree = self.tree.find('incoming', namespaces=nsmap()) + + for v in tree.iter(NSPREFIX + 'sig'): + if v.get('keyid') == identity.hex(): + v.text = sig_hx + return o = lxml.etree.SubElement(tree, NSPREFIX + 'sig', nsmap=nsmap()) o.set('keyid', identity.hex()) o.set('type', 'ed25519') - o.text = sig.hex() + o.text = sig_hx """Add a signature on the ledger. @@ -566,6 +582,12 @@ class Ledger: digest = sig.text r.add_signature(bytes.fromhex(digest), bytes.fromhex(keyid), modify_tree=False) + for sig in part.iter(NSPREFIX + 'identity'): + keyid = identity.get('keyid') + didtyp = identity.get('didtype') + did = identity.text + r.add_identity(keyid, did, typ=didtyp) + o = part.find('real', namespaces=nsmap()) asset = int(o.find('asset', namespaces=nsmap()).text) liability = int(o.find('liability', namespaces=nsmap()).text)