transparentAddress method
TransparentDerivedAddress
transparentAddress(
- DiversifierIndex index, {
- PubKeyModes pubKeyMode = PubKeyModes.compressed,
- List<
int> ? transparentScriptHash, - TransparentAddressRequestType transparentAddressType = TransparentAddressRequestType.p2pkh,
Returns the transparent-derived address at the given index with specified pubkey mode and address type.
Implementation
TransparentDerivedAddress transparentAddress(
DiversifierIndex index, {
PubKeyModes pubKeyMode = PubKeyModes.compressed,
List<int>? transparentScriptHash,
TransparentAddressRequestType transparentAddressType =
TransparentAddressRequestType.p2pkh,
}) {
final transparent = getTransparent();
switch (transparentAddressType) {
case TransparentAddressRequestType.p2pkh:
if (transparentScriptHash != null) {
throw ArgumentException.invalidOperationArguments(
"transparentAddress",
name: "transparentScriptHash",
reason: "P2PKH addresses cannot include a script hash.",
);
}
break;
case TransparentAddressRequestType.p2sh:
if (pubKeyMode != PubKeyModes.compressed) {
throw ArgumentException.invalidOperationArguments(
"transparentAddress",
name: "pubKeyMode",
reason: "P2SH addresses require a compressed public key mode.",
);
}
break;
}
final bipIndex = index.toBip32Index();
if (bipIndex == null) {
throw ZCashKeyError("Invalid transparent child index.");
}
final child = transparent.childKey(bipIndex);
final receiver = switch (transparentAddressType) {
TransparentAddressRequestType.p2pkh => ReceiverP2pkh(
data: P2PKHAddrEncoder().validateAndHashKey(
child.publicKey.compressed,
pubKeyMode: pubKeyMode,
),
mode: UnifiedReceiverMode.address,
),
TransparentAddressRequestType.p2sh => ReceiverP2sh(
transparentScriptHash ??
P2SHAddrEncoder().validateAndHashKey(child.publicKey.compressed),
),
};
return TransparentDerivedAddress(
address: P2PKHAddrEncoder().encodeKey(
child.publicKey.compressed,
pubKeyMode: pubKeyMode,
netVersion: config.b58PubkeyAddressPrefix,
),
type: transparentAddressType,
bip32Index: bipIndex,
pubKeyMode: pubKeyMode,
publicKey: child.publicKey,
receiver: receiver,
);
}