deriveAddressFromExtendedPublicKey function
Implementation
Map<String, Object?> deriveAddressFromExtendedPublicKey(
{required String extendedPublicKey,
required String chain,
int change = 0,
int index = 0,
String? scriptType}) {
final info = _chain(chain);
if (info.curve != 'secp256k1') {
throw const WalletHDDerivationException(
'extended public derivation is available only for secp256k1 chains');
}
final parsed = parseExtendedKey(extendedPublicKey);
if (parsed.isPrivate) {
throw const WalletHDDerivationException(
'use an extended public key, not an extended private key');
}
_index(change, 'change');
_index(index, 'index');
final node = parsed._node
.childKey(Bip32KeyIndex(change))
.childKey(Bip32KeyIndex(index));
final script = scriptType ??
switch (parsed.format) {
'ypub' || 'upub' || 'Mtub' => 'p2sh-p2wpkh',
'zpub' || 'vpub' => 'p2wpkh',
_ => info.defaultScriptType
};
final public = node.publicKey.compressed;
return _addressResult(info, '$change/$index', 0, change, index, script,
_publicKeyAddress(public, info, script), public);
}