decodeUnifiedObject static method
(List<ZUnifiedReceiver> , List<int> , String)?
decodeUnifiedObject({
- required String address,
- required UnifiedReceiverMode mode,
- 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);
}