diff --git a/packages/ndk/lib/data_layer/repositories/verifiers/bip340_event_verifier.dart b/packages/ndk/lib/data_layer/repositories/verifiers/bip340_event_verifier.dart index 8ff616ae3..2a46fd100 100644 --- a/packages/ndk/lib/data_layer/repositories/verifiers/bip340_event_verifier.dart +++ b/packages/ndk/lib/data_layer/repositories/verifiers/bip340_event_verifier.dart @@ -1,4 +1,7 @@ +import 'dart:isolate'; + import 'package:bip340/bip340.dart' as bip340; +import 'package:ndk/shared/isolates/isolate_manager.dart'; import '../../../domain_layer/entities/nip_01_event.dart'; import '../../../domain_layer/entities/nip_01_utils.dart'; @@ -7,10 +10,20 @@ import '../../../domain_layer/repositories/event_verifier.dart'; /// Pure dart event verifier using https://pub.dev/packages/bip340 /// can be slow on mobile devices class Bip340EventVerifier implements EventVerifier { + bool useIsolate = true; + + Bip340EventVerifier({this.useIsolate = true}); + @override Future verify(Nip01Event event) async { + if (event.sig == null) { + return false; + } if (!Nip01Utils.isIdValid(event)) return false; - - return bip340.verify(event.pubKey, event.id, event.sig!); + return useIsolate? await await IsolateManager.instance.runInComputeIsolate((event) { + return bip340.verify(event.pubKey, event.id, event.sig!); + }, + event + ) : bip340.verify(event.pubKey, event.id, event.sig!); } } diff --git a/packages/sample-app/lib/query_performance.dart b/packages/sample-app/lib/query_performance.dart index 59ccc5cb7..fd028e32b 100644 --- a/packages/sample-app/lib/query_performance.dart +++ b/packages/sample-app/lib/query_performance.dart @@ -122,10 +122,10 @@ class _QueryPerformancePageState extends State { onPressed: _isVerifyingBip340 ? null : _runBip340Query, child: _isVerifyingBip340 ? const SizedBox( - height: 20, - width: 20, - child: CircularProgressIndicator(strokeWidth: 2), - ) + height: 20, + width: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ) : const Text('Run with BIP340'), ), const SizedBox(height: 8), @@ -139,10 +139,10 @@ class _QueryPerformancePageState extends State { onPressed: _isVerifyingRust ? null : _runRustQuery, child: _isVerifyingRust ? const SizedBox( - height: 20, - width: 20, - child: CircularProgressIndicator(strokeWidth: 2), - ) + height: 20, + width: 20, + child: CircularProgressIndicator(strokeWidth: 2), + ) : const Text('Run with Rust'), ), const SizedBox(height: 8),