def ExtendedKey(self, private=True, encoded=True, bip=44, cointype="bitcoin"): "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" ) version = query_ver(private=private, bip=bip, cointype=cointype, testnet=self.testnet)[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)
def WalletImportFormat(self): "Returns private key encoded for wallet import" if self.public: raise Exception( "Publicly derived deterministic keys have no private half") raw = '\x80' + self.k.to_string() + '\x01' # Always compressed return Base58.check_encode(raw)
def WalletImportFormat(self): "Returns private key encoded for wallet import" if self.public: raise Exception( "Publicly derived deterministic keys have no private half") addressversion = b'\x4c' if not self.testnet else b'\xef' raw = addressversion + self.k.to_string( ) + b'\x01' # Always compressed return Base58.check_encode(raw)
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)
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") version = EX_MAIN_PRIVATE if private else EX_MAIN_PUBLIC depth = chr(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 = '\x00' + self.PrivateKey() raw = version+depth+fpr+child+chain+data if not encoded: return raw else: return Base58.check_encode(raw)
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" ) version = EX_MAIN_PRIVATE if private else EX_MAIN_PUBLIC depth = chr(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 = '\x00' + self.PrivateKey() raw = version + depth + fpr + child + chain + data if not encoded: return raw else: return Base58.check_encode(raw)
def Address(self): "Return compressed public key address" vh160 = '\x00' + self.Identifier() return Base58.check_encode(vh160)
def WalletImportFormat(self): "Returns private key encoded for wallet import" if self.public: raise Exception("Publicly derived deterministic keys have no private half") raw = '\xBF' + self.k.to_string() + '\x01' # Always compressed return Base58.check_encode(raw)
def Address(self): "Return compressed public key address" vh160 = chr(25) + self.Identifier() leadingzbytes = len(re_match('^\x00*', vh160).group(0)) return 'B' * leadingzbytes + Base58.check_encode(vh160)
def Address(self): "Return compressed public key address" vh160 = '\x00'+self.Identifier() return Base58.check_encode(vh160)
def Address(self): "Return compressed public key address" addressversion = b'\x42' if not self.testnet else b'\x6f' vh160 = addressversion + self.Identifier() return Base58.check_encode(vh160)