Skip to content

Commit 7bf0f90

Browse files
committed
various firo tweaks
1 parent e811752 commit 7bf0f90

11 files changed

Lines changed: 66 additions & 26 deletions

File tree

lib/db/sqlite/firo_cache_coordinator.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,15 @@ abstract class FiroCacheCoordinator {
157157

158158
// ===========================================================================
159159

160-
static Future<Set<String>> getUsedCoinTags(
160+
static Future<List<String>> getUsedCoinTags(
161161
int startNumber,
162162
CryptoCurrencyNetwork network,
163163
) async {
164164
final result = await _Reader._getSparkUsedCoinTags(
165165
startNumber,
166166
db: _FiroCache.usedTagsCacheDB(network),
167167
);
168-
return result.map((e) => e["tag"] as String).toSet();
168+
return result.map((e) => e["tag"] as String).toList();
169169
}
170170

171171
static Future<int> getUsedCoinTagsCount(CryptoCurrencyNetwork network) async {
@@ -198,15 +198,15 @@ abstract class FiroCacheCoordinator {
198198
.toList();
199199
}
200200

201-
static Future<Set<String>> getUsedCoinTagsFor({
201+
static Future<List<String>> getUsedCoinTagsFor({
202202
required String txid,
203203
required CryptoCurrencyNetwork network,
204204
}) async {
205205
final result = await _Reader._getUsedCoinTagsFor(
206206
txid,
207207
db: _FiroCache.usedTagsCacheDB(network),
208208
);
209-
return result.map((e) => e["tag"] as String).toSet();
209+
return result.map((e) => e["tag"] as String).toList();
210210
}
211211

212212
static Future<bool> checkTagIsUsed(

lib/db/sqlite/firo_cache_writer.dart

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,12 @@ class FCResult {
1313
/// update the sqlite cache
1414
/// Expected json format:
1515
/// returns true if successful, otherwise some exception
16-
FCResult _updateSparkUsedTagsWith(
17-
Database db,
18-
List<List<dynamic>> tags,
19-
) {
16+
FCResult _updateSparkUsedTagsWith(Database db, List<List<dynamic>> tags) {
2017
// hash the tags here since this function is called in a background isolate
21-
final hashedTags = LibSpark.hashTags(
22-
base64Tags: tags.map((e) => e[0] as String).toSet(),
23-
).toList();
24-
18+
final hashedTags =
19+
LibSpark.hashTags(
20+
base64Tags: tags.map((e) => e[0] as String).toList(),
21+
).toList();
2522
if (hashedTags.isEmpty) {
2623
// nothing to add, return early
2724
return FCResult(success: true);
@@ -70,11 +67,7 @@ FCResult _updateSparkAnonSetCoinsWith(
7067
FROM SparkSet
7168
WHERE blockHash = ? AND setHash = ? AND groupId = ?;
7269
""",
73-
[
74-
meta.blockHash,
75-
meta.setHash,
76-
meta.coinGroupId,
77-
],
70+
[meta.blockHash, meta.setHash, meta.coinGroupId],
7871
);
7972

8073
if (checkResult.isNotEmpty) {

lib/electrumx_rpc/electrumx_client.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1129,7 +1129,7 @@ class ElectrumXClient {
11291129
"Duration=${DateTime.now().difference(start)}",
11301130
);
11311131

1132-
return tags;
1132+
return tags.reversed.toList();
11331133
} catch (e, s) {
11341134
Logging.instance.e(e, error: e, stackTrace: s);
11351135
rethrow;

lib/pages/spark_names/buy_spark_name_view.dart

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,22 @@ class _BuySparkNameViewState extends ConsumerState<BuySparkNameView> {
6969
try {
7070
final wallet =
7171
ref.read(pWallets).getWallet(widget.walletId) as SparkInterface;
72-
final myAddress = await wallet.getCurrentReceivingSparkAddress();
72+
Address? myAddress = await wallet.getCurrentReceivingSparkAddress();
7373
if (myAddress == null) {
7474
throw Exception("No spark address found");
7575
}
76-
addressController.text = myAddress.value;
76+
77+
final db = ref.read(pDrift(widget.walletId));
78+
final myNames = await db.select(db.sparkNames).get();
79+
while (myNames.where((e) => e.address == myAddress!.value).isNotEmpty) {
80+
Logging.instance.t(
81+
"Found address that already has a spark name. Generating next address...",
82+
);
83+
myAddress = await wallet.generateNextSparkAddress();
84+
await ref.read(mainDBProvider).updateOrPutAddresses([myAddress]);
85+
}
86+
87+
addressController.text = myAddress!.value;
7788
} catch (e, s) {
7889
Logging.instance.e("_fillCurrentReceiving", error: e, stackTrace: s);
7990
} finally {

lib/pages/spark_names/confirm_spark_name_transaction_view.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'package:flutter/material.dart';
1616
import 'package:flutter_riverpod/flutter_riverpod.dart';
1717
import 'package:flutter_svg/svg.dart';
1818

19+
import '../../models/isar/models/blockchain_data/address.dart';
1920
import '../../models/isar/models/transaction_note.dart';
2021
import '../../notifications/show_flush_bar.dart';
2122
import '../../pages_desktop_specific/coin_control/desktop_coin_control_use_dialog.dart';
@@ -128,6 +129,25 @@ class _ConfirmSparkNameTransactionViewState
128129
);
129130
}
130131

132+
final address = txData.sparkNameInfo?.sparkAddress;
133+
final currentReceiving = await wallet.getCurrentReceivingSparkAddress();
134+
if (currentReceiving?.value == address?.value) {
135+
final address = await wallet.generateNextSparkAddress();
136+
await ref.read(mainDBProvider).isar.writeTxn(() async {
137+
await ref.read(mainDBProvider).isar.addresses.put(address);
138+
});
139+
}
140+
141+
final db = ref.read(pDrift(walletId));
142+
await db.upsertSparkNames([
143+
(
144+
name: txData.sparkNameInfo!.name,
145+
address: txData.sparkNameInfo!.sparkAddress.value,
146+
validUntil: -99999,
147+
additionalInfo: txData.sparkNameInfo!.additionalInfo,
148+
),
149+
]);
150+
131151
unawaited(wallet.refresh());
132152

133153
if (mounted) {

lib/pages/spark_names/sub_widgets/buy_spark_name_option_widget.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:async';
22

3+
import 'package:drift/drift.dart' as drift;
34
import 'package:flutter/material.dart';
45
import 'package:flutter/services.dart';
56
import 'package:flutter_libsparkmobile/flutter_libsparkmobile.dart';
@@ -55,6 +56,15 @@ class _BuySparkNameWidgetState extends ConsumerState<BuySparkNameOptionWidget> {
5556
)) {
5657
rethrow;
5758
}
59+
final db = ref.read(pDrift(widget.walletId));
60+
final results =
61+
await (db.select(db.sparkNames)
62+
..where((e) => e.name.lower().equals(name))).get();
63+
64+
if (results.isNotEmpty) {
65+
return false;
66+
}
67+
5868
// name not found
5969
return true;
6070
}

lib/pages/spark_names/sub_widgets/owned_spark_name_card.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ class _OwnedSparkNameCardState extends ConsumerState<OwnedSparkNameCard> {
3232

3333
final remaining = widget.name.validUntil - currentChainHeight;
3434

35-
if (remaining <= 0) {
35+
if (widget.name.validUntil == -99999) {
36+
color = theme.accentColorYellow;
37+
message = "Pending";
38+
} else if (remaining <= 0) {
3639
color = theme.accentColorRed;
3740
message = "Expired";
3841
} else {

lib/pages/spark_names/sub_widgets/spark_name_details.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,10 @@ class _SparkNameDetailsViewState extends ConsumerState<SparkNameDetailsView> {
5353

5454
final remaining = name.validUntil - currentChainHeight;
5555

56-
if (remaining <= 0) {
56+
if (widget.name.validUntil == -99999) {
57+
color = theme.accentColorYellow;
58+
message = "Pending";
59+
} else if (remaining <= 0) {
5760
color = theme.accentColorRed;
5861
message = "Expired";
5962
} else {

lib/wallets/wallet/wallet_mixin_interfaces/spark_interface.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,7 @@ mixin SparkInterface<T extends ElectrumXCurrencyInterface>
11181118
.isUsedEqualTo(false)
11191119
.findAll();
11201120

1121-
Set<String>? spentCoinTags;
1121+
List<String>? spentCoinTags;
11221122
// only fetch tags from db if we need them to compare against any items
11231123
// in coinsToCheck
11241124
if (coinsToCheck.isNotEmpty) {

pubspec.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -944,8 +944,8 @@ packages:
944944
dependency: "direct main"
945945
description:
946946
path: "."
947-
ref: f5fd2238fca4ffe82f7e14646a613a04d2c243d6
948-
resolved-ref: f5fd2238fca4ffe82f7e14646a613a04d2c243d6
947+
ref: "5f0dde009c969bf6425da35382305b2c0b65bc46"
948+
resolved-ref: "5f0dde009c969bf6425da35382305b2c0b65bc46"
949949
url: "https://github.com/cypherstack/flutter_libsparkmobile.git"
950950
source: git
951951
version: "0.1.0"

0 commit comments

Comments
 (0)