Descriptor

class Descriptor(descriptor: String, network: Network)

A output descriptor.

Samples


fun main() { 
   //sampleStart 
   // Bip84 private descriptor
val recoveryPhrase: String = "scene change clap smart together mind wheel knee clip normal trial unusual"
val mnemonic = Mnemonic.fromString(recoveryPhrase)
val bip32ExtendedRootKey: DescriptorSecretKey = DescriptorSecretKey(Network.TESTNET, mnemonic, null)
val bip84ExternalDescriptor: Descriptor = Descriptor.newBip84(bip32ExtendedRootKey, KeychainKind.EXTERNAL, Network.TESTNET) 
   //sampleEnd
}

fun main() { 
   //sampleStart 
   // Bip49 public descriptor
// assume we already have the xpub for m/49'/0'/1' created on an external device that only shared the xpub with the wallet
// using the template requires the parent fingerprint to populate correctly the metadata of PSBTs, which the external device would provide
// the xpub (tpub for testnet): tpubDC65ZRvk1NDddHrVAUAZrUPJ772QXzooNYmPywYF9tMyNLYKf5wpKE7ZJvK9kvfG3FV7rCsHBNXy1LVKW95jrmC7c7z4hq7a27aD2sRrAhR
// the fingerprint: d1d04177
val descriptorPublicKey: DescriptorPublicKey = DescriptorPublicKey.fromString("tpubDC65ZRvk1NDddHrVAUAZrUPJ772QXzooNYmPywYF9tMyNLYKf5wpKE7ZJvK9kvfG3FV7rCsHBNXy1LVKW95jrmC7c7z4hq7a27aD2sRrAhR")
val bip49PublicDescriptor: Descriptor = Descriptor.newBip49Public(
    publicKey = descriptorPublicKey,
    fingerprint = "d1d04177",
    keychain = KeychainKind.EXTERNAL,
    network = Network.TESTNET,
)
println(bip49PublicDescriptor.asString())        // sh(wpkh([d1d04177/49'/1'/0']tpubDC65ZRvk1NDddHrVAUAZrUPJ772QXzooNYmPywYF9tMyNLYKf5wpKE7ZJvK9kvfG3FV7rCsHBNXy1LVKW95jrmC7c7z4hq7a27aD2sRrAhR/0/*))#a7lxzefl
println(bip49PublicDescriptor.asStringPrivate()) // sh(wpkh([d1d04177/49'/1'/0']tpubDC65ZRvk1NDddHrVAUAZrUPJ772QXzooNYmPywYF9tMyNLYKf5wpKE7ZJvK9kvfG3FV7rCsHBNXy1LVKW95jrmC7c7z4hq7a27aD2sRrAhR/0/*))#a7lxzefl

// Creating it starting from the full xprv derived from a mnemonic will give you the same public descriptor
val mnemonic = Mnemonic.fromString("chaos fabric time speed sponsor all flat solution wisdom trophy crack object robot pave observe combine where aware bench orient secret primary cable detect")
val bip32ExtendedRootKey: DescriptorSecretKey = DescriptorSecretKey(Network.TESTNET, mnemonic, null)
val bip49PrivateDescriptor: Descriptor = Descriptor.newBip49(bip32ExtendedRootKey, KeychainKind.EXTERNAL, Network.TESTNET)
println(bip49PrivateDescriptor.asString()) // sh(wpkh([d1d04177/49'/1'/0']tpubDC65ZRvk1NDddHrVAUAZrUPJ772QXzooNYmPywYF9tMyNLYKf5wpKE7ZJvK9kvfG3FV7rCsHBNXy1LVKW95jrmC7c7z4hq7a27aD2sRrAhR/0/*))#a7lxzefl 
   //sampleEnd
}

Parameters

descriptor

The descriptor in string format.

network

The network this descriptor is to be used on.

Constructors

Link copied to clipboard
fun Descriptor(descriptor: String, network: Network)

Functions

Link copied to clipboard
fun asString(): String

Return the public version of the output descriptor.

Link copied to clipboard
fun asStringPrivate(): String

Return the private version of the output descriptor if available, otherwise return the public version.

Link copied to clipboard
fun newBip44(    secretKey: DescriptorSecretKey,     keychain: KeychainKind,     network: Network)

BIP44 template. Expands to pkh(key/44'/{0,1}'/0'/{0,1}/\*) Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

Link copied to clipboard
fun newBip44Public(    publicKey: DescriptorPublicKey,     fingerprint: String,     keychain: KeychainKind,     network: Network)

BIP44 public template. Expands to pkh(key/{0,1}/\*) This assumes that the key used has already been derived with m/44'/0'/0' for Mainnet or m/44'/1'/0' for Testnet. This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

Link copied to clipboard
fun newBip49(    secretKey: DescriptorSecretKey,     keychain: KeychainKind,     network: Network)

BIP49 template. Expands to sh(wpkh(key/49'/{0,1}'/0'/{0,1}/\*)) Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

Link copied to clipboard
fun newBip49Public(    publicKey: DescriptorPublicKey,     fingerprint: String,     keychain: KeychainKind,     network: Network)

BIP49 public template. Expands to sh(wpkh(key/{0,1}/\*)) This assumes that the key used has already been derived with m/49'/0'/0' for Mainnet or m/49'/1'/0' for Testnet. This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

Link copied to clipboard
fun newBip84(    secretKey: DescriptorSecretKey,     keychain: KeychainKind,     network: Network)

BIP84 template. Expands to wpkh(key/84'/{0,1}'/0'/{0,1}/\*) Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

Link copied to clipboard
fun newBip84Public(    publicKey: DescriptorPublicKey,     fingerprint: String,     keychain: KeychainKind,     network: Network)

BIP84 public template. Expands to wpkh(key/{0,1}/\*) This assumes that the key used has already been derived with m/84'/0'/0' for Mainnet or m/84'/1'/0' for Testnet. This template requires the parent fingerprint to populate correctly the metadata of PSBTs.

Link copied to clipboard
fun newBip86(    secretKey: DescriptorSecretKey,     keychain: KeychainKind,     network: Network)

BIP86 template. Expands to wpkh(key/86'/{0,1}'/0'/{0,1}/\*) Since there are hardened derivation steps, this template requires a private derivable key (generally a xprv/tprv).

Link copied to clipboard
fun newBip86Public(    publicKey: DescriptorPublicKey,     fingerprint: String,     keychain: KeychainKind,     network: Network)

BIP86 public template. Expands to wpkh(key/{0,1}/\*) This assumes that the key used has already been derived with m/86'/0'/0' for Mainnet or m/86'/1'/0' for Testnet. This template requires the parent fingerprint to populate correctly the metadata of PSBTs.