Optional
addressOptional
description?: stringA single-line, human readable description for this HD key.
Optional
hdThe path to derive the entity's HD public key from the entity's provided
HD private key. By default, an empty string (""
), i.e. the entity's HD
public key represents the same node in the HD tree as the provided HD
private key.
This can be used to specify another relative or absolute derivation path
from which the publicDerivationPath
begins, e.g. m/0'/1'/2'
. See
publicDerivationPath
for details.
This path may optionally begin with an m
(for relative private
derivation) and must be fixed – it cannot contain any i
characters to
represent the address index, as a dynamic hardened path would require a
new HD public key for each address.
Note, hdPublicKeyDerivationPath
could be automatically determined in
some cases, but it's always defined independently to improve validation
and auditability.
Optional
name?: stringA single-line, Title Case, human-readable name for this HD key.
Optional
privateThe relative or absolute derivation path used to derive this HdKey
from
the owning entity's HD private key. By default, i
.
If the first character is m
, the path is an absolute path, otherwise,
the path is a relative path. For absolute paths, the compiler will verify
that the relevant entity's HD private key is a master private key
(encoded with a depth of zero); HdKey
s with relative
privateDerivationPath
may be resolved using non-master private keys
(e.g. hardened accounts that have been previously derived and delegated
to a sub-entity prior to compilation).
This path uses the notation specified in BIP32 and the i
character to
represent the addressIndex
:
An optional m
character (indicating an absolute, private derivation
path), followed by sets of /
and a number representing the child index
used in the derivation at that depth. Hardened derivation is represented
by a trailing '
, and hardened child indexes are represented with the
hardened index offset (2147483648
) subtracted. All i
characters are
replaced with the value of addressIndex
plus this HdKey
's
addressOffset
. If the i
character is followed by '
, the hardened
index offset is added (2147483648
) and hardened derivation is used.
For example, m/0/1'/i'
has 3 levels of derivation, with child indexes
in the following order:
derive(derive(derive(masterKey, 0), 2147483648 + 1), 2147483648 + addressIndex + addressOffset)
As the path is absolute (begins with m
), the compiler will also verify
that a zero-depth ("master") HD private key is provided for the entity
owning this HdKey
.
Note, because hardened derivation requires knowledge of the private key,
HdKey
variables with privateDerivationPath
s that include hardened
derivation must configure hdPublicKeyDerivationPath
to support HD
public derivation.
Optional
publicThe relative derivation path used to derive this HdKey
's public key
from the owning entity's HD public key (configured via
hdPublicKeyDerivationPath
). If not set, the relative path
(following the m/
of privateDerivationPath
) is used. For the
privateDerivationPath
default of i
, this is i
.
If privateDerivationPath
uses hardened derivation for some levels, but
later derivation levels use non-hardened derivation,
publicDerivationPath
can be used to specify a public derivation path
beginning from hdPublicKeyDerivationPath
(i.e. publicDerivationPath
should always be a non-hardened segment of privateDerivationPath
that
follows hdPublicKeyDerivationPath
).
The publicDerivationPath
must be a relative HD derivation path:
non-hardened positive integer child indexes (between 0
and
2147483647
, without any trailing '
s) separated by /
s.
For example, if privateDerivationPath
is m/0'/i
, it is not possible
to derive the equivalent public key with only the HD public key M
. (The
path M/0'/i
is impossible.) However, given the HD public key for
m/0'
, it is possible to derive the public key of m/0'/i
for any i
.
In this case, hdPublicKeyDerivationPath
would be m/0'
and
publicDerivationPath
would be the remaining i
.
Non-hardened derivation paths are more useful for some templates, e.g. to
allow for new locking scripts to be generated without communicating new
public keys between entities for each. However, using a non-hardened
key has critical security implications. If an attacker gains possession
of both a parent HD public key and any child private key, the attacker
can easily derive the parent HD private key, and with it, all hardened
and non-hardened child keys. See Libauth's
crackHdPrivateNodeFromHdPublicNodeAndChildPrivateNode
for details.
The HdKey
(Hierarchical-Deterministic Key) type automatically manages
key generation and mapping in a standard way. For greater control,
use Key
.
Generated using TypeDoc
The offset by which to increment the
addressIndex
provided in the compilation data when deriving thisHdKey
. (Default: 0)This is useful for deriving the "next" (
1
) or "previous" (-1
) address for use in the current compilation.