Beispiel #1
0
 def ExtendedKey(self, private=True, encoded=True):
     "Return extended private or public key as string, optionally base58 encoded"
     if self.public is True and private is True:
         raise Exception(
             "Cannot export an extended private key from a public-only deterministic key"
         )
     if not self.testnet:
         version = param_query(NETWORK,
                               'hd_prv')[0] if private else param_query(
                                   NETWORK, 'hd_pub')[0]
     else:
         version = EX_TEST_PRIVATE[0] if private else EX_TEST_PUBLIC[0]
     depth = bytes(bytearray([self.depth]))
     fpr = self.parent_fpr
     child = struct.pack('>L', self.index)
     chain = self.C
     if self.public is True or private is False:
         data = self.PublicKey()
     else:
         data = b'\x00' + self.PrivateKey()
     raw = version + depth + fpr + child + chain + data
     if not encoded:
         return raw
     else:
         return base58.check_encode(raw)
Beispiel #2
0
def public_key_to_bc_address(public_key, ip=False):
    i = hashlib.new('ripemd160', hashlib.sha256(public_key).digest()).digest()
    prefix_to_use = str(
        int(param_query(NETWORK,
                        'address_version').encode('hex'))) if not ip else '66'
    vh160 = prefix_to_use.decode('hex') + i
    return base58.check_encode(vh160)
Beispiel #3
0
 def WalletImportFormat(self):
     "Returns private key encoded for wallet import"
     if self.public:
         raise Exception(
             "Publicly derived deterministic keys have no private half")
     addressversion = param_query(
         NETWORK, 'wif_version') if not self.testnet else '\xef'
     raw = addressversion + self.k.to_string() + '\x01'  # Always compressed
     return base58.check_encode(raw)
Beispiel #4
0
def public_key_to_address(public_key, prefix=103):
    i = hashlib.new('ripemd160', hashlib.sha256(public_key).digest()).digest()
    prefix = str(hex(prefix)).strip("0x")
    if prefix == "":
        prefix = "00"
    elif len(prefix) < 2:
        prefix = "0" + prefix
    vh160 = prefix.decode('hex') + i
    return base58.check_encode(vh160)
Beispiel #5
0
 def P2WPKHoP2SHAddress(self):
     "Return P2WPKH over P2SH segwit address"
     pk_bytes = self.PublicKey()
     assert len(pk_bytes) == 33 and (pk_bytes.startswith(b"\x02") or pk_bytes.startswith(b"\x03")), \
         "Only compressed public keys are compatible with p2sh-p2wpkh addresses. " \
         "See https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki."
     pk_hash = hashlib.new('ripemd160', sha256(pk_bytes).digest()).digest()
     push_20 = bytes.fromhex('0014')
     script_sig = push_20 + pk_hash
     address_bytes = hashlib.new('ripemd160',
                                 sha256(script_sig).digest()).digest()
     prefix = b"\xc4" if self.testnet else b"\x05"
     return base58.check_encode(prefix + address_bytes)
Beispiel #6
0
 def Address(self, ip=False):
     "Return compressed public key address"
     addressversion = param_query(NETWORK,
                                  'address_version') if not ip else '\x66'
     vh160 = addressversion + self.Identifier()
     return base58.check_encode(vh160)