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

SEE ALSO

Bitcoin::Crypto::Key::ExtPrivate
Bitcoin::Crypto::Network