From 35f9ac77f6507478bb42041a67daeb1ec7ea164e Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Fri, 21 Nov 2025 10:45:05 +0100 Subject: [PATCH] Add support for palladium BIP21 URI scheme The changes introduce a new URI scheme 'palladium' alongside the existing 'bitcoin' scheme for BIP21 payment URIs. This allows the wallet to parse and handle palladium payment URIs in the same way as bitcoin URIs. --- electrum/bip21.py | 7 ++++--- electrum/payment_identifier.py | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/electrum/bip21.py b/electrum/bip21.py index 70aa8b37b..0af45e560 100644 --- a/electrum/bip21.py +++ b/electrum/bip21.py @@ -10,6 +10,7 @@ from .lnaddr import lndecode, LnDecodeException # note: when checking against these, use .lower() to support case-insensitivity BITCOIN_BIP21_URI_SCHEME = 'bitcoin' +PALLADIUM_BIP21_URI_SCHEME = 'palladium' LIGHTNING_URI_SCHEME = 'lightning' @@ -29,8 +30,8 @@ def parse_bip21_URI(uri: str) -> dict: return {'address': uri} u = urllib.parse.urlparse(uri) - if u.scheme.lower() != BITCOIN_BIP21_URI_SCHEME: - raise InvalidBitcoinURI("Not a bitcoin URI") + if u.scheme.lower() != PALLADIUM_BIP21_URI_SCHEME: + raise InvalidBitcoinURI("Not a palladium URI") address = u.path # python for android fails to parse query @@ -120,7 +121,7 @@ def create_bip21_uri(addr, amount_sat: Optional[int], message: Optional[str], v = urllib.parse.quote(v) query.append(f"{k}={v}") p = urllib.parse.ParseResult( - scheme=BITCOIN_BIP21_URI_SCHEME, + scheme=PALLADIUM_BIP21_URI_SCHEME, netloc='', path=addr, params='', diff --git a/electrum/payment_identifier.py b/electrum/payment_identifier.py index f7f0b536e..39a1666e1 100644 --- a/electrum/payment_identifier.py +++ b/electrum/payment_identifier.py @@ -20,7 +20,7 @@ from .lnurl import (decode_lnurl, request_lnurl, callback_lnurl, LNURLError, from .bitcoin import opcodes, construct_script from .lnaddr import LnInvoiceException from .lnutil import IncompatibleOrInsaneFeatures -from .bip21 import parse_bip21_URI, InvalidBitcoinURI, LIGHTNING_URI_SCHEME, BITCOIN_BIP21_URI_SCHEME +from .bip21 import parse_bip21_URI, InvalidBitcoinURI, LIGHTNING_URI_SCHEME, BITCOIN_BIP21_URI_SCHEME, PALLADIUM_BIP21_URI_SCHEME from . import paymentrequest if TYPE_CHECKING: @@ -245,7 +245,7 @@ class PaymentIdentifier(Logger): self.logger.debug(f'Exception cause {e.args!r}') return self.set_state(PaymentIdentifierState.AVAILABLE) - elif text.lower().startswith(BITCOIN_BIP21_URI_SCHEME + ':'): + elif text.lower().startswith(BITCOIN_BIP21_URI_SCHEME + ':') or text.lower().startswith(PALLADIUM_BIP21_URI_SCHEME + ':'): try: out = parse_bip21_URI(text) except InvalidBitcoinURI as e: