diff --git a/src/cryptoadvance/spectrum/spectrum.py b/src/cryptoadvance/spectrum/spectrum.py index c95fd61..420ed64 100644 --- a/src/cryptoadvance/spectrum/spectrum.py +++ b/src/cryptoadvance/spectrum/spectrum.py @@ -11,6 +11,7 @@ from functools import wraps from embit import bip32 +from embit.base import EmbitError from embit.descriptor import Descriptor as EmbitDescriptor from embit.descriptor.checksum import add_checksum from embit.finalizer import finalize_psbt @@ -983,7 +984,10 @@ def listsinceblock( @walletrpc def getreceivedbyaddress(self, wallet, address, minconf=1): - sc = EmbitScript.from_address(address) + try: + sc = EmbitScript.from_address(address) + except EmbitError as e: + raise RPCError(f"Invalid Bitcoin address: {address}: {e}") script = Script.query.filter_by(script=sc.data.hex()).first() if not script: return 0 diff --git a/tests/test_spectrum_rpc.py b/tests/test_spectrum_rpc.py index 7449ee3..b70e6a8 100644 --- a/tests/test_spectrum_rpc.py +++ b/tests/test_spectrum_rpc.py @@ -115,3 +115,62 @@ def test_rescanblockchain(caplog, client): assert result.status_code == 200 print(json.loads(result.data)) + + +def test_createwallet(caplog, client): + caplog.set_level(logging.DEBUG) + caplog.set_level(logging.DEBUG, logger="cryptoadvance.spectrum") + + result = client.post( + "/wallet/some_shiny_new_wallet", + json={ + "method": "createwallet", + "params": ["some_shiny_new_wallet"], + "jsonrpc": "2.0", + "id": 0, + }, + ) + print(json.loads(result.data)) + assert result.status_code == 200 + + +def test_getreceivedbyaddress(caplog, client): + caplog.set_level(logging.DEBUG) + caplog.set_level(logging.DEBUG, logger="cryptoadvance.spectrum") + + result = client.post( + "/wallet/some_nonexisting_wallet", + json={ + "method": "getreceivedbyaddress", + "params": ["bc1q09vm5lfy0j5reeulh4x5752q25uqqvz34hufdl", 6], + "jsonrpc": "2.0", + "id": 0, + }, + ) + assert result.status_code == 200 + assert ( + json.loads(result.data)["error"]["message"] + == "Requested wallet some_nonexisting_wallet does not exist or is not loaded" + ) + result = client.post( + "/", + json={ + "method": "createwallet", + "params": ["some_new_wallet_to_test_getreceivedbyaddress"], + "jsonrpc": "2.0", + "id": 0, + }, + ) + + result = client.post( + "/wallet/some_new_wallet_to_test_getreceivedbyaddress", + json={ + "method": "getreceivedbyaddress", + "params": ["bc1qtr5cwxum3uwvyxgc8sgqm8gr658eksruyv3sty", 6], + "jsonrpc": "2.0", + "id": 0, + }, + ) + assert result.status_code == 200 + print(json.loads(result.data)) + assert False