mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
4ae641ca18
67d6ee1
remove redundant tests in p2p-segwit.py (Johnson Lau)9260085
test segwit uncompressed key fixes (Johnson Lau)248f3a7
Fix ismine and addwitnessaddress: no uncompressed keys in segwit (Pieter Wuille)b811124
[qa] Add tests for uncompressed pubkeys in segwit (Suhas Daftuar)9f0397a
Make test framework produce lowS signatures (Johnson Lau)4c0c25a
Require compressed keys in segwit as policy and disable signing with uncompressed keys for segwit scripts (Johnson Lau)3ade2f6
Add standard limits for P2WSH with tests (Johnson Lau)
65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
# Copyright (c) 2016 The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#
|
|
# address.py
|
|
#
|
|
# This file encodes and decodes BASE58 P2PKH and P2SH addresses
|
|
#
|
|
|
|
from .script import hash256, hash160, CScript
|
|
from .util import bytes_to_hex_str, hex_str_to_bytes
|
|
|
|
chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
|
|
|
|
def byte_to_base58(b, version):
|
|
result = ''
|
|
str = bytes_to_hex_str(b)
|
|
str = bytes_to_hex_str(chr(version).encode('latin-1')) + str
|
|
checksum = bytes_to_hex_str(hash256(hex_str_to_bytes(str)))
|
|
str += checksum[:8]
|
|
value = int('0x'+str,0)
|
|
while value > 0:
|
|
result = chars[value % 58] + result
|
|
value //= 58
|
|
while (str[:2] == '00'):
|
|
result = chars[0] + result
|
|
str = str[2:]
|
|
return result
|
|
|
|
# TODO: def base58_decode
|
|
|
|
def keyhash_to_p2pkh(hash, main = False):
|
|
assert (len(hash) == 20)
|
|
version = 76 if main else 140
|
|
return byte_to_base58(hash, version)
|
|
|
|
def scripthash_to_p2sh(hash, main = False):
|
|
assert (len(hash) == 20)
|
|
version = 16 if main else 19
|
|
return byte_to_base58(hash, version)
|
|
|
|
def key_to_p2pkh(key, main = False):
|
|
key = check_key(key)
|
|
return keyhash_to_p2pkh(hash160(key), main)
|
|
|
|
def script_to_p2sh(script, main = False):
|
|
script = check_script(script)
|
|
return scripthash_to_p2sh(hash160(script), main)
|
|
|
|
def check_key(key):
|
|
if (type(key) is str):
|
|
key = hex_str_to_bytes(key) # Assuming this is hex string
|
|
if (type(key) is bytes and (len(key) == 33 or len(key) == 65)):
|
|
return key
|
|
assert(False)
|
|
|
|
def check_script(script):
|
|
if (type(script) is str):
|
|
script = hex_str_to_bytes(script) # Assuming this is hex string
|
|
if (type(script) is bytes or type(script) is CScript):
|
|
return script
|
|
assert(False)
|