def from_extended_key_string(ekey_str): '''Given an extended key string, such as xpub6BsnM1W2Y7qLMiuhi7f7dbAwQZ5Cz5gYJCRzTNainXzQXYjFwtuQXHd 3qfi3t3KJtHxshXezfjft93w4UE7BGMtKwhqEHae3ZA7d823DVrL return a (key, coin) pair. key is either a PubKey or PrivKey. ''' return _from_extended_key(Base58.decode_check(ekey_str))
def test_from_extended_key(): # Tests the failure modes of from_extended_key. with pytest.raises(TypeError): bip32._from_extended_key('') with pytest.raises(ValueError): bip32._from_extended_key(b'') with pytest.raises(CoinError): bip32._from_extended_key(bytes(78)) # Invalid prefix byte raw = Base58.decode_check(MXPRV) with pytest.raises(ValueError): bip32._from_extended_key(raw[:45] + b'\1' + raw[46:])
def pay_to_address_script(cls, address): '''Return a pubkey script that pays to a pubkey hash. Pass the address (either P2PKH or P2SH) in base58 form. ''' raw = Base58.decode_check(address) # Require version byte(s) plus hash160. verbyte = -1 verlen = len(raw) - 20 if verlen > 0: verbyte, hash160 = raw[:verlen], raw[verlen:] if verbyte == cls.P2PKH_VERBYTE: return cls.hash160_to_P2PKH_script(hash160) if verbyte in cls.P2SH_VERBYTES: return ScriptPubKey.P2SH_script(hash160) raise CoinError('invalid address: {}'.format(address))
def extended_key_string(self, coin): '''Return an extended key as a base58 string.''' return Base58.encode_check(self.extended_key(coin))