encodeUnifiedObject static method
String
encodeUnifiedObject({
- List<
int> ? addressBytes, - List<
ZUnifiedReceiver> ? receivers, - required String hrp,
- required UnifiedReceiverMode mode,
Implementation
static String encodeUnifiedObject({
List<int>? addressBytes,
List<ZUnifiedReceiver>? receivers,
required String hrp,
required UnifiedReceiverMode mode,
}) {
final hrpBytes = StringUtils.encode(hrp);
const int paddingLen = unifiedAddressPaddingLength;
if (hrpBytes.length > paddingLen) {
throw ZCashKeyEncodingError.invalidUnifiedArguments(
mode,
reason: "Invalid HRP.",
);
}
if (addressBytes == null && receivers == null) {
throw ZCashKeyEncodingError.invalidUnifiedArguments(
mode,
reason: "Missing unified address receivers.",
);
}
try {
final layout = _unifiedCodecLayout();
if (receivers == null) {
final json = layout.deserialize(addressBytes!).value;
receivers =
json.map((e) => ZUnifiedReceiver.deserializeJson(e, mode)).toList();
}
receivers = validateUnifiedObjects(receivers: receivers, mode: mode);
addressBytes = layout.serialize(
receivers.map((e) => e.toSerializeVariantJson()).toList(),
);
final pad = List<int>.filled(paddingLen, 0)..setAll(0, hrpBytes);
final jubmed = F4Jumble.apply([...addressBytes, ...pad]);
return Bech32Encoder.encode(
hrp,
jubmed,
encoding: Bech32Encodings.bech32m,
);
} catch (_) {
throw ZCashKeyEncodingError.invalidUnifiedBytes(
mode,
reason: "Invalid unified address bytes.",
);
}
}