commit 794baa16c8a13319b1e1a232998505054de3f626
parent 5f1d9cbcf5b79de720529f0a1771650dd8c6add9
Author: ThomasV <thomasv@electrum.org>
Date: Tue, 29 Aug 2017 09:53:16 +0200
move address_to_script to bitcoin.py
Diffstat:
3 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/lib/bitcoin.py b/lib/bitcoin.py
@@ -199,6 +199,9 @@ def op_push(i):
else:
return '4e' + int_to_hex(i,4)
+def push_script(x):
+ return op_push(len(x)//2) + x
+
def sha256(x):
x = to_bytes(x, 'utf8')
@@ -314,7 +317,24 @@ def public_key_to_p2pkh(public_key):
def public_key_to_p2wpkh(public_key):
return hash_160_to_bc_address(hash_160(public_key), ADDRTYPE_P2WPKH)
+def address_to_script(addr):
+ addrtype, hash_160 = bc_address_to_hash_160(addr)
+ if addrtype == ADDRTYPE_P2PKH:
+ script = '76a9' # op_dup, op_hash_160
+ script += push_script(bh2u(hash_160))
+ script += '88ac' # op_equalverify, op_checksig
+ elif addrtype == ADDRTYPE_P2SH:
+ script = 'a9' # op_hash_160
+ script += push_script(bh2u(hash_160))
+ script += '87' # op_equal
+ else:
+ raise BaseException('unknown address type')
+ return script
+def address_to_scripthash(addr):
+ script = address_to_script(addr)
+ h = sha256(bytes.fromhex(script))[0:32]
+ return bytes(reversed(h)).hex()
__b58chars = b'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
diff --git a/lib/transaction.py b/lib/transaction.py
@@ -456,23 +456,8 @@ def deserialize(raw):
# pay & redeem scripts
-def push_script(x):
- return op_push(len(x)//2) + x
-
-
-def get_scriptPubKey(addr):
- addrtype, hash_160 = bc_address_to_hash_160(addr)
- if addrtype == bitcoin.ADDRTYPE_P2PKH:
- script = '76a9' # op_dup, op_hash_160
- script += push_script(bh2u(hash_160))
- script += '88ac' # op_equalverify, op_checksig
- elif addrtype == bitcoin.ADDRTYPE_P2SH:
- script = 'a9' # op_hash_160
- script += push_script(bh2u(hash_160))
- script += '87' # op_equal
- else:
- raise BaseException('unknown address type')
- return script
+
+
def segwit_script(pubkey):
@@ -601,7 +586,7 @@ class Transaction:
if output_type == TYPE_SCRIPT:
return bh2u(addr)
elif output_type == TYPE_ADDRESS:
- return get_scriptPubKey(addr)
+ return bitcoin.address_to_script(addr)
else:
raise TypeError('Unknown output type')
return script
@@ -667,7 +652,7 @@ class Transaction:
def get_preimage_script(self, txin):
# only for non-segwit
if txin['type'] == 'p2pkh':
- return get_scriptPubKey(txin['address'])
+ return bitcoin.address_to_script(txin['address'])
elif txin['type'] == 'p2sh':
pubkeys, x_pubkeys = self.get_sorted_pubkeys(txin)
return multisig_script(pubkeys, txin['num_sig'])
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -883,7 +883,7 @@ class Abstract_Wallet(PrintError):
pubkey = public_key_from_private_key(privkey)
address = address_from_private_key(privkey)
u = network.synchronous_get(('blockchain.address.listunspent', [address]))
- pay_script = transaction.get_scriptPubKey(address)
+ pay_script = bitcoin.address_to_script(address)
for item in u:
if len(inputs) >= imax:
break