From 04a24edaec2a686a58508fdff43903c5b4c7d2bf Mon Sep 17 00:00:00 2001 From: julian Date: Wed, 5 Jun 2024 16:23:58 -0600 Subject: [PATCH] wrap hashTag in compute --- lib/wallets/wallet/impl/firo_wallet.dart | 7 +------ .../spark_interface.dart | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/wallets/wallet/impl/firo_wallet.dart b/lib/wallets/wallet/impl/firo_wallet.dart index 9359043be..89f6cdb3e 100644 --- a/lib/wallets/wallet/impl/firo_wallet.dart +++ b/lib/wallets/wallet/impl/firo_wallet.dart @@ -3,7 +3,6 @@ import 'dart:convert'; import 'dart:math'; import 'package:decimal/decimal.dart'; -import 'package:flutter_libsparkmobile/flutter_libsparkmobile.dart'; import 'package:isar/isar.dart'; import '../../../db/sqlite/firo_cache.dart'; @@ -429,11 +428,7 @@ class FiroWallet extends Bip39HDWallet if (lTags?.isNotEmpty == true) { final List usedCoins = []; for (final tag in lTags!) { - final components = (tag as String).split(","); - final x = components[0].substring(1); - final y = components[1].substring(0, components[1].length - 1); - - final hash = LibSpark.hashTag(x, y); + final hash = await hashTag(tag as String); usedCoins.addAll(sparkCoins.where((e) => e.lTagHash == hash)); } diff --git a/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart b/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart index b0409c899..af7f1b6cc 100644 --- a/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart +++ b/lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart @@ -38,6 +38,16 @@ const OP_SPARKMINT = 0xd1; const OP_SPARKSMINT = 0xd2; const OP_SPARKSPEND = 0xd3; +/// top level function for use with [compute] +String _hashTag(String tag) { + final components = tag.split(","); + final x = components[0].substring(1); + final y = components[1].substring(0, components[1].length - 1); + + final hash = LibSpark.hashTag(x, y); + return hash; +} + mixin SparkInterface on Bip39HDWallet, ElectrumXInterface { String? _sparkChangeAddressCached; @@ -56,6 +66,14 @@ mixin SparkInterface }) => LibSpark.validateAddress(address: address, isTestNet: isTestNet); + Future hashTag(String tag) async { + try { + return await compute(_hashTag, tag); + } catch (_) { + throw ArgumentError("Invalid tag string format", "tag"); + } + } + @override Future init() async { try {