From ff11e7878bc14e658cc2efd518a845f27ff7c738 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sun, 25 Dec 2022 11:42:37 +0100 Subject: [PATCH] mint: endpoint get pubkeys for keyset --- cashu/mint/ledger.py | 8 ++++---- cashu/mint/router.py | 14 +++++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/cashu/mint/ledger.py b/cashu/mint/ledger.py index afa1f99..af4129b 100644 --- a/cashu/mint/ledger.py +++ b/cashu/mint/ledger.py @@ -57,12 +57,12 @@ class Ledger: seed=self.master_key, derivation_path=derivation_path, version=VERSION ) # check if current keyset is stored in db and store if not - logger.debug(f"Loading keyset {keyset.id} from db.") + logger.trace(f"Loading keyset {keyset.id} from db.") tmp_keyset_local: List[MintKeyset] = await self.crud.get_keyset( id=keyset.id, db=self.db ) if not len(tmp_keyset_local) and autosave: - logger.debug(f"Storing keyset {keyset.id}.") + logger.trace(f"Storing keyset {keyset.id}.") await self.crud.store_keyset(keyset=keyset, db=self.db) # store the new keyset in the current keysets @@ -74,10 +74,10 @@ class Ledger: # load all past keysets from db tmp_keysets: List[MintKeyset] = await self.crud.get_keyset(db=self.db) self.keysets = MintKeysets(tmp_keysets) - logger.debug(f"Loading {len(self.keysets.keysets)} keysets form db.") + logger.trace(f"Loading {len(self.keysets.keysets)} keysets form db.") # generate all derived keys from stored derivation paths of past keysets for _, v in self.keysets.keysets.items(): - logger.debug(f"Generating keys for keyset {v.id}") + logger.trace(f"Generating keys for keyset {v.id}") v.generate_keys(self.master_key) # load the current keyset self.keyset = await self.load_keyset(self.derivation_path, autosave) diff --git a/cashu/mint/router.py b/cashu/mint/router.py index 09ca2e2..c7fe9f9 100644 --- a/cashu/mint/router.py +++ b/cashu/mint/router.py @@ -23,11 +23,23 @@ router: APIRouter = APIRouter() @router.get("/keys") async def keys() -> dict[int, str]: - """Get the public keys of the mint""" + """Get the public keys of the mint of the newest keyset""" keyset = ledger.get_keyset() return keyset +@router.get("/keys/{idBase64Urlsafe}") +async def keyset_keys(idBase64Urlsafe: str) -> dict[int, str]: + """ + Get the public keys of the mint of a specificy keyset id. + The id is encoded in base64_urlsafe and needs to be converted back to + normal base64 before it can be processed. + """ + id = idBase64Urlsafe.replace("-", "+").replace("_", "/") + keyset = ledger.get_keyset(keyset_id=id) + return keyset + + @router.get("/keysets") async def keysets() -> dict[str, list[str]]: """Get all active keysets of the mint"""