payment_identifier: imports, typing declarations
This commit is contained in:
@@ -11,12 +11,12 @@ from .contacts import AliasNotFoundException
|
||||
from .i18n import _
|
||||
from .invoices import Invoice
|
||||
from .logging import Logger
|
||||
from .util import parse_max_spend, format_satoshis_plain, InvoiceError
|
||||
from .util import parse_max_spend, InvoiceError
|
||||
from .util import get_asyncio_loop, log_exceptions
|
||||
from .transaction import PartialTxOutput
|
||||
from .lnurl import decode_lnurl, request_lnurl, callback_lnurl, LNURLError, lightning_address_to_url
|
||||
from .bitcoin import COIN, TOTAL_COIN_SUPPLY_LIMIT_IN_BTC, opcodes, construct_script
|
||||
from .lnaddr import lndecode, LnDecodeException, LnInvoiceException
|
||||
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 . import paymentrequest
|
||||
@@ -52,21 +52,21 @@ RE_SCRIPT_FN = r'script\((.*)\)'
|
||||
|
||||
|
||||
class PaymentIdentifierState(IntEnum):
|
||||
EMPTY = 0 # Initial state.
|
||||
INVALID = 1 # Unrecognized PI
|
||||
AVAILABLE = 2 # PI contains a payable destination
|
||||
# payable means there's enough addressing information to submit to one
|
||||
# of the channels Electrum supports (on-chain, lightning)
|
||||
NEED_RESOLVE = 3 # PI contains a recognized destination format, but needs an online resolve step
|
||||
LNURLP_FINALIZE = 4 # PI contains a resolved LNURLp, but needs amount and comment to resolve to a bolt11
|
||||
MERCHANT_NOTIFY = 5 # PI contains a valid payment request and on-chain destination. It should notify
|
||||
# the merchant payment processor of the tx after on-chain broadcast,
|
||||
# and supply a refund address (bip70)
|
||||
MERCHANT_ACK = 6 # PI notified merchant. nothing to be done.
|
||||
ERROR = 50 # generic error
|
||||
NOT_FOUND = 51 # PI contains a recognized destination format, but resolve step was unsuccessful
|
||||
MERCHANT_ERROR = 52 # PI failed notifying the merchant after broadcasting onchain TX
|
||||
INVALID_AMOUNT = 53 # Specified amount not accepted
|
||||
EMPTY = 0 # Initial state.
|
||||
INVALID = 1 # Unrecognized PI
|
||||
AVAILABLE = 2 # PI contains a payable destination
|
||||
# payable means there's enough addressing information to submit to one
|
||||
# of the channels Electrum supports (on-chain, lightning)
|
||||
NEED_RESOLVE = 3 # PI contains a recognized destination format, but needs an online resolve step
|
||||
LNURLP_FINALIZE = 4 # PI contains a resolved LNURLp, but needs amount and comment to resolve to a bolt11
|
||||
MERCHANT_NOTIFY = 5 # PI contains a valid payment request and on-chain destination. It should notify
|
||||
# the merchant payment processor of the tx after on-chain broadcast,
|
||||
# and supply a refund address (bip70)
|
||||
MERCHANT_ACK = 6 # PI notified merchant. nothing to be done.
|
||||
ERROR = 50 # generic error
|
||||
NOT_FOUND = 51 # PI contains a recognized destination format, but resolve step was unsuccessful
|
||||
MERCHANT_ERROR = 52 # PI failed notifying the merchant after broadcasting onchain TX
|
||||
INVALID_AMOUNT = 53 # Specified amount not accepted
|
||||
|
||||
|
||||
class PaymentIdentifierType(IntEnum):
|
||||
@@ -504,7 +504,7 @@ class PaymentIdentifier(Logger):
|
||||
self.logger.debug(f'multiline: {outputs!r}, {self.error}')
|
||||
return outputs
|
||||
|
||||
def parse_address_and_amount(self, line: str) -> 'PartialTxOutput':
|
||||
def parse_address_and_amount(self, line: str) -> PartialTxOutput:
|
||||
try:
|
||||
x, y = line.split(',')
|
||||
except ValueError:
|
||||
@@ -515,7 +515,7 @@ class PaymentIdentifier(Logger):
|
||||
amount = self.parse_amount(y)
|
||||
return PartialTxOutput(scriptpubkey=scriptpubkey, value=amount)
|
||||
|
||||
def parse_output(self, x: str) -> Tuple[bytes, bool]:
|
||||
def parse_output(self, x: str) -> Tuple[Optional[bytes], bool]:
|
||||
try:
|
||||
address = self.parse_address(x)
|
||||
return bytes.fromhex(bitcoin.address_to_script(address)), True
|
||||
@@ -530,7 +530,7 @@ class PaymentIdentifier(Logger):
|
||||
|
||||
return None, False
|
||||
|
||||
def parse_script(self, x: str):
|
||||
def parse_script(self, x: str) -> str:
|
||||
script = ''
|
||||
for word in x.split():
|
||||
if word[0:3] == 'OP_':
|
||||
@@ -541,7 +541,7 @@ class PaymentIdentifier(Logger):
|
||||
script += construct_script([word])
|
||||
return script
|
||||
|
||||
def parse_amount(self, x: str):
|
||||
def parse_amount(self, x: str) -> str | int:
|
||||
x = x.strip()
|
||||
if not x:
|
||||
raise Exception("Amount is empty")
|
||||
@@ -652,7 +652,7 @@ class PaymentIdentifier(Logger):
|
||||
if parts and len(parts) > 0 and bitcoin.is_address(parts[0]):
|
||||
return None
|
||||
try:
|
||||
data = self.contacts.resolve(key) # TODO: don't use contacts as delegate to resolve openalias, separate.
|
||||
data = self.contacts.resolve(key) # TODO: don't use contacts as delegate to resolve openalias, separate.
|
||||
return data
|
||||
except AliasNotFoundException as e:
|
||||
self.logger.info(f'OpenAlias not found: {repr(e)}')
|
||||
|
||||
Reference in New Issue
Block a user