NAME
Bitcoin::Crypto::Key::ExtPublic - Bitcoin extended public keys
SYNOPSIS
use Bitcoin::Crypto qw(btc_extprv);
use Bitcoin::Crypto::Util qw(generate_mnemonic to_format)
my $mnemonic = generate_mnemonic;
my $key = btc_extprv->from_mnemonic($mnemonic);
# derive child public key
my $path = "M/0";
my $child_key = $key->derive_key($path);
my $ser_child_key = to_format [base58 => $child_key->to_serialized];
print "Your exported $path child key is: $ser_child_key";
# create basic public key
my $basic_public = $child_key->get_basic_key;
DESCRIPTION
This class allows you to create an extended public key instance. They are a public counterparts to master keys, but sharing them poses some security risks. Do not share your extended public keys if you are not aware of these threats.
You can use an extended public key to:
derive extended keys using a path (only public keys, no hardened paths)
restore keys from serialized base58 format
see Bitcoin::Crypto::Network if you want to work with other networks than Bitcoin Mainnet.
METHODS
new
Constructor is reserved for internal and advanced use only. Use "from_serialized" instead.
to_serialized
$serialized_key = $object->to_serialized()
Returns the key serialized in format specified in BIP32 as byte string.
to_serialized_base58
Deprecated. Use to_format [base58 => $key->to_serialized] instead.
from_serialized
$key_object = $class->from_serialized($serialized, $network = undef)
Tries to unserialize byte string $serialized with format specified in BIP32.
Dies on errors. If multiple networks match serialized data specify $network manually (id of the network) to avoid exception.
from_serialized_base58
Deprecated. Use $class->from_serialized([base58 => $base58]) instead.
set_network
$key_object = $object->set_network($val)
Change key's network state to $val. It can be either network name present in Bitcoin::Crypto::Network package or an instance of this class.
Returns current key instance.
get_basic_key
$basic_key_object = $object->get_basic_key()
Returns the key in basic format: Bitcoin::Crypto::Key::Public
derive_key
$derived_key_object = $object->derive_key($path)
Performs extended key derivation as specified in BIP32 on the current key with $path. Dies on error.
See BIP32 document for details on derivation paths and methods.
Note that public keys cannot derive private keys and your derivation path must start with M (capital m).
Returns a new extended key instance - result of a derivation.
derive_key_bip44
$derived_key_object = $object->derive_key_bip44(%data)
A helper that constructs a Bitcoin::Crypto::BIP44 path from %data and calls "derive_key" with it. In extended public keys, bip44 is always constructed with public setting - it will always derive starting from account, effectively only using change and index attributes.
get_fingerprint
$fingerprint = $object->get_fingerprint($len = 4)
Returns a fingerprint of the extended key of $len length (byte string)
EXCEPTIONS
This module throws an instance of Bitcoin::Crypto::Exception if it encounters an error. It can produce the following error types from the Bitcoin::Crypto::Exception namespace:
KeyDerive - key couldn't be derived correctly
KeyCreate - key couldn't be created correctly
NetworkConfig - incomplete or corrupted network configuration