decodeUnifiedSpendKey static method

List<ZUnifiedReceiver> decodeUnifiedSpendKey(
  1. List<int> bytes
)

Implementation

static List<ZUnifiedReceiver> decodeUnifiedSpendKey(List<int> bytes) {
  const int orchardEra = 5;
  final layout = LayoutConst.struct([
    LayoutConst.u32(property: "era"),
    LayoutConst.dynamicVector(
      ZUnifiedReceiver.layout(),
      property: "receivers",
    ),
  ]);
  final decode = layout.deserialize(bytes).value;
  final int era = decode.valueAsInt("era");
  final receiversJson = decode.valueEnsureAsList<Map<String, dynamic>>(
    "receivers",
  );
  if (era != orchardEra) {
    throw ZCashKeyEncodingError.invalidUnifiedBytes(
      UnifiedReceiverMode.sk,
      reason: "Duplicate receivers.",
    );
  }
  List<ZUnifiedReceiver> receivers =
      receiversJson
          .map(
            (e) =>
                ZUnifiedReceiver.deserializeJson(e, UnifiedReceiverMode.sk),
          )
          .toList();
  return validateUnifiedObjects(
    mode: UnifiedReceiverMode.sk,
    receivers: receivers,
  );
}