NAME
Bitcoin::Crypto::Key::ExtPrivate - Bitcoin extended private keys
SYNOPSIS
use Bitcoin::Crypto qw(btc_extprv);
use Bitcoin::Crypto::Util qw(generate_mnemonic to_format)
# generate mnemonic words first
my $mnemonic = generate_mnemonic;
print "Your mnemonic is: $mnemonic";
# create ExtPrivateKey from mnemonic (without password)
my $key = btc_extprv->from_mnemonic($mnemonic);
my $ser_key = to_format [base58 => $key->to_serialized];
print "Your exported master key is: $ser_key";
# derive child private 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 keypair
my $basic_private = $child_key->get_basic_key;
my $basic_public = $child_key->get_public_key->get_basic_key;
DESCRIPTION
This class allows you to create an extended private key instance. Extended keys can be used to securely generate as many addresses as needed through key derivation. This allows for long-term, reusable wallet with a single backup.
Moreover, you can use an extended private key to:
generate extended public keys
derive extended keys using standard bip44 or a custom path
restore keys from mnemonic codes, seeds and 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_mnemonic", "from_seed" or "from_serialized" instead.
generate_mnemonic
$mnemonic = $class->generate_mnemonic($len = 128, $lang = 'en')
Deprecated - see "generate_mnemonic" in Bitcoin::Crypto::Util.
mnemonic_from_entropy
$mnemonic = $class->mnemonic_from_entropy($bytes, $lang = 'en')
Deprecated - see "mnemonic_from_entropy" in Bitcoin::Crypto::Util.
from_mnemonic
$key_object = $class->from_mnemonic($mnemonic, $password = '', $lang = undef)
Creates a new key from given mnemonic and password.
Note that technically any password is correct and there's no way to tell if it was mistaken.
If you need to validate if $mnemonic is a valid mnemonic you should specify $lang, e.g. 'en'. It will also get rid of any extra whitespace before / after / in between words.
If no $lang is given then any string passed as $mnemonic will produce a valid key. This means even adding whitespace (eg. trailing newline) will produce a different key. Be careful when using this method without $lang argument as you can easily create keys incompatible with other software due to these whitespace problems.
Returns a new instance of this class.
Important note about unicode: this function only accepts UTF8-decoded strings (both $mnemonic and $password), but can't detect whether it got it or not. This will only become a problem if you use non-ascii mnemonic and/or password. If there's a possibility of non-ascii, always use utf8 and set binmodes to get decoded (wide) characters to avoid problems recovering your wallet.
from_seed
$key_object = $class->from_seed($seed)
Creates and returns a new key from seed, which can be any data of any length. $seed is expected to be a byte string.
from_hex_seed
Deprecated. Use $class->from_seed([hex => $seed]) instead.
to_serialized
$serialized = $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_public_key
$public_key_object = $object->get_public_key()
Returns instance of Bitcoin::Crypto::Key::ExtPublic generated from the private key.
get_basic_key
$basic_key_object = $object->get_basic_key()
Returns the key in basic format: Bitcoin::Crypto::Key::Private
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.
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. Refer to "Attributes" in Bitcoin::Crypto::BIP44 to see what you can include in %data.
Using this method instead of specifying BIP44 path yourself will make sure all features of BIP44 derivation will be enabled, like different prefixes for extended keys (xprv / yprv / zprv) and address type generation checking.
Note: coin_type parameter will be ignored, and the current network configuration set in the extended key will be used.
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:
MnemonicGenerate - mnemonic couldn't be generated correctly
MnemonicCheck - mnemonic didn't pass the validity check
KeyDerive - key couldn't be derived correctly
KeyCreate - key couldn't be created correctly
NetworkConfig - incomplete or corrupted network configuration