commit 8390da9b7b9aab1ab8b50f930f25c9cbaabf9d8b
parent a10dc04b282ef598ccab9bb004e79584d7b57b5e
Author: SomberNight <somber.night@protonmail.com>
Date: Wed, 31 Jul 2019 01:18:51 +0200
bitcoin.py: dedupe pubkeyhash_to_p2pkh_script
Diffstat:
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/electrum/bitcoin.py b/electrum/bitcoin.py
@@ -400,9 +400,7 @@ def address_to_script(addr: str, *, net=None) -> str:
return script
addrtype, hash_160_ = b58_address_to_hash160(addr)
if addrtype == net.ADDRTYPE_P2PKH:
- script = bytes([opcodes.OP_DUP, opcodes.OP_HASH160]).hex()
- script += push_script(bh2u(hash_160_))
- script += bytes([opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG]).hex()
+ script = pubkeyhash_to_p2pkh_script(bh2u(hash_160_))
elif addrtype == net.ADDRTYPE_P2SH:
script = opcodes.OP_HASH160.hex()
script += push_script(bh2u(hash_160_))
@@ -422,6 +420,13 @@ def script_to_scripthash(script: str) -> str:
def public_key_to_p2pk_script(pubkey: str) -> str:
return push_script(pubkey) + opcodes.OP_CHECKSIG.hex()
+def pubkeyhash_to_p2pkh_script(pubkey_hash160: str) -> str:
+ script = bytes([opcodes.OP_DUP, opcodes.OP_HASH160]).hex()
+ script += push_script(pubkey_hash160)
+ script += bytes([opcodes.OP_EQUALVERIFY, opcodes.OP_CHECKSIG]).hex()
+ return script
+
+
__b58chars = b'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
assert len(__b58chars) == 58
diff --git a/electrum/transaction.py b/electrum/transaction.py
@@ -909,14 +909,12 @@ class Transaction:
return preimage_script
pubkeys, x_pubkeys = self.get_sorted_pubkeys(txin)
- if txin['type'] == 'p2pkh':
- return bitcoin.address_to_script(txin['address'])
- elif txin['type'] in ['p2sh', 'p2wsh', 'p2wsh-p2sh']:
+ if txin['type'] in ['p2sh', 'p2wsh', 'p2wsh-p2sh']:
return multisig_script(pubkeys, txin['num_sig'])
- elif txin['type'] in ['p2wpkh', 'p2wpkh-p2sh']:
+ elif txin['type'] in ['p2pkh', 'p2wpkh', 'p2wpkh-p2sh']:
pubkey = pubkeys[0]
pkh = bh2u(hash_160(bfh(pubkey)))
- return '76a9' + push_script(pkh) + '88ac'
+ return bitcoin.pubkeyhash_to_p2pkh_script(pkh)
elif txin['type'] == 'p2pk':
pubkey = pubkeys[0]
return bitcoin.public_key_to_p2pk_script(pubkey)