UnifiedFullViewingKey.fromUnifiedFullViewKey constructor

UnifiedFullViewingKey.fromUnifiedFullViewKey({
  1. required String ufvk,
  2. required ZCashNetwork network,
  3. required ZCryptoContext context,
})

Implementation

factory UnifiedFullViewingKey.fromUnifiedFullViewKey({
  required String ufvk,
  required ZCashNetwork network,
  required ZCryptoContext context,
}) {
  final config = ZcashConf().fromNetwork(network);
  final key = ZCashEncodingUtils.decodeUnifiedObject(
    address: ufvk,
    mode: UnifiedReceiverMode.fvk,
    expectedHrp: config.hrpUnifiedFvk,
  );
  if (key == null) {
    throw ArgumentException.invalidOperationArguments(
      "fromUnifiedFullViewKey",
      reason: "Invalid UFVK encoded string.",
    );
  }
  final r = key.$1;
  final sapling = r.firstWhereNullable((e) => e.type == Typecode.sapling);
  final orchard = r.firstWhereNullable((e) => e.type == Typecode.orchard);
  final transparent = r.firstWhereNullable((e) => e.type == Typecode.p2pkh);
  final unknown = r.firstWhereNullable((e) => e.type == Typecode.unknown);
  return UnifiedFullViewingKey._(
    config: config,
    sapling:
        sapling == null
            ? null
            : SaplingDiversifiableFullViewingKey.fromBytes(sapling.data),
    orchard:
        orchard == null
            ? null
            : OrchardFullViewingKey.fromBytes(
              bytes: orchard.data,
              context: context,
            ),
    transparent:
        transparent == null
            ? null
            : ZCashEncodingUtils.decodeBip44Fvk(transparent.data),
    unknown: unknown?.cast<ReceiverUnknown>().copyWith(
      mode: UnifiedReceiverMode.fvk,
    ),
  );
}