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 1/3] 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""" From 60d0480d16c1521cf1ba15054694d21e8e94e3af Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sun, 25 Dec 2022 11:44:46 +0100 Subject: [PATCH 2/3] test: wallet get keys endpoint --- tests/test_wallet.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/tests/test_wallet.py b/tests/test_wallet.py index f06e530..493503f 100644 --- a/tests/test_wallet.py +++ b/tests/test_wallet.py @@ -57,13 +57,23 @@ async def test_get_keys(wallet1: Wallet): assert len(keyset.id) > 0 +@pytest.mark.asyncio +async def test_get_keyset(wallet1: Wallet): + assert len(wallet1.keys) == MAX_ORDER + # ket's get the keys first so we can get a keyset ID that we use later + keys1 = await wallet1._get_keys(wallet1.url) + # gets the keys of a specific keyset + keys2 = await wallet1._get_keyset(wallet1.url, keys1.id) + assert len(keys1.public_keys) == len(keys2.public_keys) + + @pytest.mark.asyncio async def test_get_keysets(wallet1: Wallet): keyset = await wallet1._get_keysets(wallet1.url) assert type(keyset) == dict assert type(keyset["keysets"]) == list assert len(keyset["keysets"]) > 0 - assert keyset["keysets"][0] == wallet1.keyset_id + assert keyset["keysets"][-1] == wallet1.keyset_id @pytest.mark.asyncio From 3ed6020ae286baa7e2d53d022a614f02e5e5cc9b Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Sun, 25 Dec 2022 11:49:23 +0100 Subject: [PATCH 3/3] remove test, not ready yet, see #70 --- tests/test_wallet.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/tests/test_wallet.py b/tests/test_wallet.py index 493503f..f06e530 100644 --- a/tests/test_wallet.py +++ b/tests/test_wallet.py @@ -57,23 +57,13 @@ async def test_get_keys(wallet1: Wallet): assert len(keyset.id) > 0 -@pytest.mark.asyncio -async def test_get_keyset(wallet1: Wallet): - assert len(wallet1.keys) == MAX_ORDER - # ket's get the keys first so we can get a keyset ID that we use later - keys1 = await wallet1._get_keys(wallet1.url) - # gets the keys of a specific keyset - keys2 = await wallet1._get_keyset(wallet1.url, keys1.id) - assert len(keys1.public_keys) == len(keys2.public_keys) - - @pytest.mark.asyncio async def test_get_keysets(wallet1: Wallet): keyset = await wallet1._get_keysets(wallet1.url) assert type(keyset) == dict assert type(keyset["keysets"]) == list assert len(keyset["keysets"]) > 0 - assert keyset["keysets"][-1] == wallet1.keyset_id + assert keyset["keysets"][0] == wallet1.keyset_id @pytest.mark.asyncio