transparentAddress method

TransparentDerivedAddress transparentAddress(
  1. DiversifierIndex index, {
  2. PubKeyModes pubKeyMode = PubKeyModes.compressed,
  3. List<int>? transparentScriptHash,
  4. 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,
  );
}