Class HDPath

  • All Implemented Interfaces:
    java.lang.Iterable<ChildNumber>, java.util.Collection<ChildNumber>, java.util.List<ChildNumber>

    public class HDPath
    extends java.util.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 Summary

      Fields 
      Modifier and Type Field Description
      protected boolean hasPrivateKey  
      protected java.util.List<ChildNumber> unmodifiableList  
      • Fields inherited from class java.util.AbstractList

        modCount
    • Constructor Summary

      Constructors 
      Constructor Description
      HDPath​(boolean hasPrivateKey, java.util.List<ChildNumber> list)
      Constructs a path for a public or private key.
      HDPath​(java.util.List<ChildNumber> list)
      Constructs a path for a public key.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      HDPath extend​(java.util.List<ChildNumber> path2)
      Extend the path by appending a relative path.
      HDPath extend​(ChildNumber child1, ChildNumber... children)
      Extend the path by appending additional ChildNumber objects.
      HDPath extend​(HDPath path2)
      Extend the path by appending a relative path.
      ChildNumber get​(int index)  
      boolean hasPrivateKey()
      Is this a path to a private key?
      static HDPath m()
      Returns an empty path for a private key.
      static HDPath m​(java.util.List<ChildNumber> list)
      Returns a path for a private key.
      static HDPath m​(ChildNumber childNumber)
      Returns a path for a private key.
      static HDPath m​(ChildNumber... children)
      Returns a path for a private key.
      static HDPath M()
      Returns an empty path for a public key.
      static HDPath M​(java.util.List<ChildNumber> list)
      Returns a path for a public key.
      static HDPath M​(ChildNumber childNumber)
      Returns a path for a public key.
      static HDPath M​(ChildNumber... children)
      Returns a path for a public key.
      static HDPath parsePath​(java.lang.String path)
      Create an HDPath from a path string.
      int size()  
      java.lang.String toString()  
      • Methods inherited from class java.util.AbstractList

        add, add, addAll, clear, equals, hashCode, indexOf, iterator, lastIndexOf, listIterator, listIterator, remove, removeRange, set, subList
      • Methods inherited from class java.util.AbstractCollection

        addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.util.Collection

        parallelStream, removeIf, stream, toArray
      • Methods inherited from interface java.lang.Iterable

        forEach
      • Methods inherited from interface java.util.List

        addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, sort, spliterator, toArray, toArray
    • Field Detail

      • hasPrivateKey

        protected final boolean hasPrivateKey
      • unmodifiableList

        protected final java.util.List<ChildNumber> unmodifiableList
    • Constructor Detail

      • HDPath

        public HDPath​(boolean hasPrivateKey,
                      java.util.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​(java.util.List<ChildNumber> list)
        Constructs a path for a public key.
        Parameters:
        list - List of children in the path
    • Method Detail

      • M

        public static HDPath M​(java.util.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​(java.util.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
                                       java.lang.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​(java.util.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 java.util.List<ChildNumber>
        Specified by:
        get in class java.util.AbstractList<ChildNumber>
      • size

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

        public java.lang.String toString()
        Overrides:
        toString in class java.util.AbstractCollection<ChildNumber>