Class SegwitAddress

All Implemented Interfaces:
Serializable, Cloneable, Comparable<Address>

public class SegwitAddress extends Address

Implementation of native segwit addresses. They are composed of two parts:

  • A human-readable part (HRP) which is a string the specifies the network. See NetworkParameters.getSegwitAddressHrp().
  • A data part, containing the witness version (encoded as an OP_N operator) and program (encoded by re-arranging bits into groups of 5).

See BIP350 and BIP173 for details.

However, you don't need to care about the internals. Use fromBech32(NetworkParameters, String), fromHash(NetworkParameters, byte[]) or fromKey(NetworkParameters, ECKey) to construct a native segwit address.

See Also:
  • Field Details

    • WITNESS_PROGRAM_LENGTH_PKH

      public static final int WITNESS_PROGRAM_LENGTH_PKH
      See Also:
    • WITNESS_PROGRAM_LENGTH_SH

      public static final int WITNESS_PROGRAM_LENGTH_SH
      See Also:
    • WITNESS_PROGRAM_LENGTH_TR

      public static final int WITNESS_PROGRAM_LENGTH_TR
      See Also:
    • WITNESS_PROGRAM_MIN_LENGTH

      public static final int WITNESS_PROGRAM_MIN_LENGTH
      See Also:
    • WITNESS_PROGRAM_MAX_LENGTH

      public static final int WITNESS_PROGRAM_MAX_LENGTH
      See Also:
  • Method Details

    • getWitnessVersion

      public int getWitnessVersion()
      Returns the witness version in decoded form. Only versions 0 and 1 are in use right now.
      Returns:
      witness version, between 0 and 16
    • getWitnessProgram

      public byte[] getWitnessProgram()
      Returns the witness program in decoded form.
      Returns:
      witness program
    • getHash

      public byte[] getHash()
      Description copied from class: Address
      Get either the public key hash or script hash that is encoded in the address.
      Specified by:
      getHash in class Address
      Returns:
      hash that is encoded in the address
    • getOutputScriptType

      public Script.ScriptType getOutputScriptType()
      Get the type of output script that will be used for sending to the address. This is either Script.ScriptType.P2WPKH or Script.ScriptType.P2WSH.
      Specified by:
      getOutputScriptType in class Address
      Returns:
      type of output script
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • fromBech32

      public static SegwitAddress fromBech32(@Nullable NetworkParameters params, String bech32) throws AddressFormatException
      Construct a SegwitAddress from its textual form.
      Parameters:
      params - expected network this address is valid for, or null if the network should be derived from the bech32
      bech32 - bech32-encoded textual form of the address
      Returns:
      constructed address
      Throws:
      AddressFormatException - if something about the given bech32 address isn't right
    • fromHash

      public static SegwitAddress fromHash(NetworkParameters params, byte[] hash)
      Construct a SegwitAddress that represents the given hash, which is either a pubkey hash or a script hash. The resulting address will be either a P2WPKH or a P2WSH type of address.
      Parameters:
      params - network this address is valid for
      hash - 20-byte pubkey hash or 32-byte script hash
      Returns:
      constructed address
    • fromProgram

      public static SegwitAddress fromProgram(NetworkParameters params, int witnessVersion, byte[] witnessProgram)
      Construct a SegwitAddress that represents the given program, which is either a pubkey, a pubkey hash or a script hash – depending on the script version. The resulting address will be either a P2WPKH, a P2WSH or a P2TR type of address.
      Parameters:
      params - network this address is valid for
      witnessVersion - version number between 0 and 16
      witnessProgram - version dependent witness program
      Returns:
      constructed address
    • fromKey

      public static SegwitAddress fromKey(NetworkParameters params, ECKey key)
      Construct a SegwitAddress that represents the public part of the given ECKey. Note that an address is derived from a hash of the public key and is not the public key itself.
      Parameters:
      params - network this address is valid for
      key - only the public part is used
      Returns:
      constructed address
    • toBech32

      public String toBech32()
      Returns the textual form of the address.
      Returns:
      textual form encoded in bech32
    • compareTo

      public int compareTo(Address o)
      Comparison field order for addresses is:
      1. NetworkParameters.getId()
      2. Legacy vs. Segwit
      3. (Legacy only) Version byte
      4. remaining bytes

      Implementations may use compareAddressPartial for tests 1 and 2.

      Specified by:
      compareTo in interface Comparable<Address>
      Specified by:
      compareTo in class Address
      Parameters:
      o - other Address object
      Returns:
      comparison result