decodeUnifiedObject static method

(List<ZUnifiedReceiver>, List<int>, String)? decodeUnifiedObject({
  1. required String address,
  2. required UnifiedReceiverMode mode,
  3. String? expectedHrp,
})

Implementation

static (List<ZUnifiedReceiver>, List<int>, String)? decodeUnifiedObject({
  required String address,
  required UnifiedReceiverMode mode,
  String? expectedHrp,
}) {
  (String, List<int>) decode;
  try {
    decode = Bech32Decoder.decodeWithoutHRP(
      address,
      encoding: Bech32Encodings.bech32m,
    );
  } catch (_) {
    return null;
  }
  if (!F4Jumble.haveValidLength(decode.$2)) {
    return null;
  }
  List<int>? unjumbled;
  try {
    unjumbled = F4Jumble.applyInv(decode.$2);
  } catch (_) {
    throw ZCashKeyEncodingError.invalidUnifiedObject(
      mode,
      reason: "Invalid checkshum.",
    );
  }
  unjumbled = _validateAndRemoveUnfinedChecksum(
    encoded: unjumbled,
    hrp: decode.$1,
    mode: mode,
  );
  if (expectedHrp != null && expectedHrp != decode.$1) {
    throw ZCashKeyEncodingError.invalidUnifiedObject(
      mode,
      reason: "Missmatch hrp.",
      details: {"expected": expectedHrp, "hrp": decode.$1},
    );
  }
  final layout = _unifiedCodecLayout();
  final receivers =
      layout
          .deserialize(unjumbled)
          .value
          .map((e) => ZUnifiedReceiver.deserializeJson(e, mode))
          .toList();

  return (receivers, unjumbled, decode.$1);
}