diff --git a/electrum/transaction.py b/electrum/transaction.py index cca06ff189db..753a3ca75f21 100644 --- a/electrum/transaction.py +++ b/electrum/transaction.py @@ -133,8 +133,11 @@ class TxOutput: def __init__(self, *, scriptpubkey: bytes, value: Union[int, str]): self.scriptpubkey = scriptpubkey - if not (isinstance(value, int) or parse_max_spend(value) is not None): - raise ValueError(f"bad txout value: {value!r}") + # Avoid unnecessary re-evaluation of parse_max_spend(value) + if not isinstance(value, int): + parsed = parse_max_spend(value) + if parsed is None: + raise ValueError(f"bad txout value: {value!r}") self.value = value # int in satoshis; or spend-max-like str @classmethod @@ -207,12 +210,12 @@ def __hash__(self) -> int: return hash((self.scriptpubkey, self.value)) def to_json(self): - d = { + # dict literal is fastest for fixed keys + return { 'scriptpubkey': self.scriptpubkey.hex(), 'address': self.address, 'value_sats': self.value, } - return d class BIP143SharedTxDigestFields(NamedTuple): # witness v0 @@ -625,9 +628,11 @@ def read_uint64(self): return self._read_num('