getProofs method

  1. @override
Future<List<CashuProof>> getProofs({
  1. String? mintUrl,
  2. String? keysetId,
  3. CashuProofState state = CashuProofState.unspend,
})
override

Implementation

@override
Future<List<CashuProof>> getProofs({
  String? mintUrl,
  String? keysetId,
  CashuProofState state = CashuProofState.unspend,
}) async {
  final filters = <sembast.Filter>[];

  // Filter by state
  filters.add(sembast.Filter.equals('state', state.toString()));

  // Filter by keysetId if provided
  if (keysetId != null && keysetId.isNotEmpty) {
    filters.add(sembast.Filter.equals('keysetId', keysetId));
  }

  // Filter by mintUrl if provided
  if (mintUrl != null && mintUrl.isNotEmpty) {
    // Get all keysets for the mintUrl
    final keysets = await getKeysets(mintUrl: mintUrl);
    if (keysets.isNotEmpty) {
      // Only filter if keysets exist
      final keysetIds = keysets.map((k) => k.id).toList();
      filters.add(sembast.Filter.inList('keysetId', keysetIds));
    }
    // If no keysets found, continue without this filter
    // This allows getting proofs even if keyset isn't stored yet
  }

  final finder = sembast.Finder(
    filter: sembast.Filter.and(filters),
    sortOrders: [sembast.SortOrder('amount')],
  );

  final records = await _proofStore.find(_database, finder: finder);
  return records
      .map((record) => CashuProofExtension.fromJsonStorage(record.value))
      .toList();
}