Class HDPath

All Implemented Interfaces:
Iterable<ChildNumber>, Collection<ChildNumber>, List<ChildNumber>

public class HDPath extends AbstractList<ChildNumber>
HD Key derivation path. HDPath can be used to represent a full path or a relative path. The hasPrivateKey boolean is used for rendering to String but (at present) not much else. It defaults to false which is the preferred setting for a relative path.

HDPath is immutable and uses the Collections.UnmodifiableList type internally.

It implements java.util.List<ChildNumber> to ease migration from the previous Guava ImmutableList<ChildNumber>. It should be a minor breaking change to replace ImmutableList<ChildNumber> with List<ChildNumber> where necessary in your code. Although it is recommended to use the HDPath type for clarity and for access to HDPath-specific functionality.

Take note of the overloaded factory methods M() and m(). These can be used to very concisely create HDPath objects (especially when statically imported.)

  • Field Details

    • hasPrivateKey

      protected final boolean hasPrivateKey
    • unmodifiableList

      protected final List<ChildNumber> unmodifiableList
  • Constructor Details

    • HDPath

      public HDPath(boolean hasPrivateKey, List<ChildNumber> list)
      Constructs a path for a public or private key.
      Parameters:
      hasPrivateKey - Whether it is a path to a private key or not
      list - List of children in the path
    • HDPath

      public HDPath(List<ChildNumber> list)
      Constructs a path for a public key.
      Parameters:
      list - List of children in the path
  • Method Details

    • M

      public static HDPath M(List<ChildNumber> list)
      Returns a path for a public key.
      Parameters:
      list - List of children in the path
    • M

      public static HDPath M()
      Returns an empty path for a public key.
    • M

      public static HDPath M(ChildNumber childNumber)
      Returns a path for a public key.
      Parameters:
      childNumber - Single child in path
    • M

      public static HDPath M(ChildNumber... children)
      Returns a path for a public key.
      Parameters:
      children - Children in the path
    • m

      public static HDPath m(List<ChildNumber> list)
      Returns a path for a private key.
      Parameters:
      list - List of children in the path
    • m

      public static HDPath m()
      Returns an empty path for a private key.
    • m

      public static HDPath m(ChildNumber childNumber)
      Returns a path for a private key.
      Parameters:
      childNumber - Single child in path
    • m

      public static HDPath m(ChildNumber... children)
      Returns a path for a private key.
      Parameters:
      children - Children in the path
    • parsePath

      public static HDPath parsePath(@Nonnull String path)
      Create an HDPath from a path string. The path string is a human-friendly representation of the deterministic path. For example: "44H / 0H / 0H / 1 / 1" Where a letter "H" means hardened key. Spaces are ignored.
    • hasPrivateKey

      public boolean hasPrivateKey()
      Is this a path to a private key?
      Returns:
      true if yes, false if no or a partial path
    • extend

      public HDPath extend(ChildNumber child1, ChildNumber... children)
      Extend the path by appending additional ChildNumber objects.
      Parameters:
      child1 - the first child to append
      children - zero or more additional children to append
      Returns:
      A new immutable path
    • extend

      public HDPath extend(HDPath path2)
      Extend the path by appending a relative path.
      Parameters:
      path2 - the relative path to append
      Returns:
      A new immutable path
    • extend

      public HDPath extend(List<ChildNumber> path2)
      Extend the path by appending a relative path.
      Parameters:
      path2 - the relative path to append
      Returns:
      A new immutable path
    • get

      public ChildNumber get(int index)
      Specified by:
      get in interface List<ChildNumber>
      Specified by:
      get in class AbstractList<ChildNumber>
    • size

      public int size()
      Specified by:
      size in interface Collection<ChildNumber>
      Specified by:
      size in interface List<ChildNumber>
      Specified by:
      size in class AbstractCollection<ChildNumber>
    • toString

      public String toString()
      Overrides:
      toString in class AbstractCollection<ChildNumber>