Skip to content

Commit

Permalink
Merge pull request #35 from cypherstack/upgrades_from_stack
Browse files Browse the repository at this point in the history
Upgrades from stack
  • Loading branch information
julian-CStack authored May 26, 2023
2 parents e3b62ca + 47de20c commit 966896b
Show file tree
Hide file tree
Showing 13 changed files with 688 additions and 249 deletions.
84 changes: 21 additions & 63 deletions lib/electrumx_rpc/cached_electrumx.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,43 +4,23 @@ import 'package:stackduo/electrumx_rpc/electrumx.dart';
import 'package:stackduo/hive/db.dart';
import 'package:stackduo/utilities/enums/coin_enum.dart';
import 'package:stackduo/utilities/logger.dart';
import 'package:stackduo/utilities/prefs.dart';
import 'package:string_validator/string_validator.dart';

class CachedElectrumX {
final ElectrumX? electrumXClient;

final String server;
final int port;
final bool useSSL;

final Prefs prefs;
final List<ElectrumXNode> failovers;
final ElectrumX electrumXClient;

static const minCacheConfirms = 30;

const CachedElectrumX({
required this.server,
required this.port,
required this.useSSL,
required this.prefs,
required this.failovers,
this.electrumXClient,
required this.electrumXClient,
});

factory CachedElectrumX.from({
required ElectrumXNode node,
required Prefs prefs,
required List<ElectrumXNode> failovers,
ElectrumX? electrumXClient,
required ElectrumX electrumXClient,
}) =>
CachedElectrumX(
server: node.address,
port: node.port,
useSSL: node.useSSL,
prefs: prefs,
failovers: failovers,
electrumXClient: electrumXClient);
electrumXClient: electrumXClient,
);

Future<Map<String, dynamic>> getAnonymitySet({
required String groupId,
Expand All @@ -66,16 +46,7 @@ class CachedElectrumX {
set = Map<String, dynamic>.from(cachedSet);
}

final client = electrumXClient ??
ElectrumX(
host: server,
port: port,
useSSL: useSSL,
prefs: prefs,
failovers: failovers,
);

final newSet = await client.getAnonymitySet(
final newSet = await electrumXClient.getAnonymitySet(
groupId: groupId,
blockhash: set["blockHash"] as String,
);
Expand Down Expand Up @@ -151,16 +122,8 @@ class CachedElectrumX {
final cachedTx = DB.instance.get<dynamic>(
boxName: DB.instance.boxNameTxCache(coin: coin), key: txHash) as Map?;
if (cachedTx == null) {
final client = electrumXClient ??
ElectrumX(
host: server,
port: port,
useSSL: useSSL,
prefs: prefs,
failovers: failovers,
);
final Map<String, dynamic> result =
await client.getTransaction(txHash: txHash, verbose: verbose);
final Map<String, dynamic> result = await electrumXClient
.getTransaction(txHash: txHash, verbose: verbose);

result.remove("hex");
result.remove("lelantusData");
Expand All @@ -187,31 +150,25 @@ class CachedElectrumX {
}
}

Future<List<dynamic>> getUsedCoinSerials({
Future<List<String>> getUsedCoinSerials({
required Coin coin,
int startNumber = 0,
}) async {
try {
List<dynamic>? cachedSerials = DB.instance.get<dynamic>(
final _list = DB.instance.get<dynamic>(
boxName: DB.instance.boxNameUsedSerialsCache(coin: coin),
key: "serials") as List?;

cachedSerials ??= [];
List<String> cachedSerials =
_list == null ? [] : List<String>.from(_list);

final startNumber = cachedSerials.length;

final client = electrumXClient ??
ElectrumX(
host: server,
port: port,
useSSL: useSSL,
prefs: prefs,
failovers: failovers,
);

final serials = await client.getUsedCoinSerials(startNumber: startNumber);
List newSerials = [];
for (var element in (serials["serials"] as List)) {
final serials =
await electrumXClient.getUsedCoinSerials(startNumber: startNumber);
List<String> newSerials = [];

for (final element in (serials["serials"] as List)) {
if (!isHexadecimal(element as String)) {
newSerials.add(base64ToHex(element));
} else {
Expand All @@ -221,9 +178,10 @@ class CachedElectrumX {
cachedSerials.addAll(newSerials);

await DB.instance.put<dynamic>(
boxName: DB.instance.boxNameUsedSerialsCache(coin: coin),
key: "serials",
value: cachedSerials);
boxName: DB.instance.boxNameUsedSerialsCache(coin: coin),
key: "serials",
value: cachedSerials,
);

return cachedSerials;
} catch (e, s) {
Expand Down
12 changes: 12 additions & 0 deletions lib/electrumx_rpc/electrumx.dart
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,11 @@ class ElectrumX {

final response = await _rpcClient!.request(jsonRequestString);

print("=================================================");
print("TYPE: ${response.runtimeType}");
print("RESPONSE: $response");
print("=================================================");

if (response["error"] != null) {
if (response["error"]
.toString()
Expand Down Expand Up @@ -310,6 +315,13 @@ class ElectrumX {
requestID: requestID,
command: 'blockchain.headers.subscribe',
);
if (response["result"] == null) {
Logging.instance.log(
"getBlockHeadTip returned null response",
level: LogLevel.Error,
);
throw 'getBlockHeadTip returned null response';
}
return Map<String, dynamic>.from(response["result"] as Map);
} catch (e) {
rethrow;
Expand Down
Loading

0 comments on commit 966896b

Please sign in to comment.