stack_wallet/lib/services/mixins/ordinals_interface.dart

121 lines
3.9 KiB
Dart
Raw Normal View History

2023-07-20 21:49:26 +00:00
import 'dart:async';
2023-07-20 20:56:11 +00:00
import 'package:isar/isar.dart';
import 'package:stackwallet/db/isar/main_db.dart';
import 'package:stackwallet/dto/ordinals/inscription_data.dart';
2023-07-20 20:56:11 +00:00
import 'package:stackwallet/models/isar/models/blockchain_data/utxo.dart';
2023-07-21 23:51:04 +00:00
import 'package:stackwallet/models/isar/ordinal.dart';
2023-07-20 19:38:56 +00:00
import 'package:stackwallet/services/litescribe_api.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';
2023-07-18 16:15:05 +00:00
mixin OrdinalsInterface {
2023-07-20 20:56:11 +00:00
late final String _walletId;
late final Coin _coin;
late final MainDB _db;
void initOrdinalsInterface({
required String walletId,
required Coin coin,
required MainDB db,
}) {
_walletId = walletId;
_coin = coin;
_db = db;
}
2023-07-21 23:51:04 +00:00
final LitescribeAPI litescribeAPI =
LitescribeAPI(baseUrl: 'https://litescribe.io/api');
2023-07-20 19:38:56 +00:00
void refreshInscriptions() async {
2023-07-20 20:56:11 +00:00
List<dynamic> _inscriptions;
final utxos = await _db.getUTXOs(_walletId).findAll();
final uniqueAddresses = getUniqueAddressesFromUTXOs(utxos);
_inscriptions = await getInscriptionDataFromAddresses(uniqueAddresses);
// TODO save inscriptions to isar which gets watched by a FutureBuilder/StreamBuilder
}
Future<List<InscriptionData>> getInscriptionData() async {
try {
final utxos = await _db.getUTXOs(_walletId).findAll();
final uniqueAddresses = getUniqueAddressesFromUTXOs(utxos);
return await getInscriptionDataFromAddresses(uniqueAddresses);
} catch (e) {
throw Exception('Error in OrdinalsInterface getInscriptions: $e');
}
}
Future<List<Ordinal>> getOrdinals() async {
try {
final utxos = await _db.getUTXOs(_walletId).findAll();
final uniqueAddresses = getUniqueAddressesFromUTXOs(utxos);
return await getOrdinalsFromAddresses(uniqueAddresses);
} catch (e) {
throw Exception('Error in OrdinalsInterface getOrdinals: $e');
}
}
2023-07-20 20:56:11 +00:00
List<String> getUniqueAddressesFromUTXOs(List<UTXO> utxos) {
final Set<String> uniqueAddresses = <String>{};
for (var utxo in utxos) {
if (utxo.address != null) {
uniqueAddresses.add(utxo.address!);
}
}
return uniqueAddresses.toList();
}
2023-07-21 23:51:04 +00:00
Future<List<InscriptionData>> getInscriptionDataFromAddress(
String address) async {
List<InscriptionData> allInscriptions = [];
try {
var inscriptions = await litescribeAPI.getInscriptionsByAddress(address);
allInscriptions.addAll(inscriptions);
} catch (e) {
2023-07-21 23:51:04 +00:00
throw Exception(
'Error in OrdinalsInterface getInscriptionsByAddress: $e');
}
return allInscriptions;
}
2023-07-21 23:51:04 +00:00
Future<List<InscriptionData>> getInscriptionDataFromAddresses(
List<String> addresses) async {
List<InscriptionData> allInscriptions = [];
for (String address in addresses) {
try {
2023-07-21 23:51:04 +00:00
var inscriptions =
await litescribeAPI.getInscriptionsByAddress(address);
allInscriptions.addAll(inscriptions);
} catch (e) {
print("Error fetching inscriptions for address $address: $e");
}
}
return allInscriptions;
}
Future<List<Ordinal>> getOrdinalsFromAddress(String address) async {
2023-07-19 22:13:54 +00:00
try {
var inscriptions = await litescribeAPI.getInscriptionsByAddress(address);
2023-07-21 23:51:04 +00:00
return inscriptions
.map((data) => Ordinal.fromInscriptionData(data, _walletId))
.toList();
2023-07-19 22:13:54 +00:00
} catch (e) {
throw Exception('Error in OrdinalsInterface getOrdinalsFromAddress: $e');
2023-07-19 22:13:54 +00:00
}
}
Future<List<Ordinal>> getOrdinalsFromAddresses(List<String> addresses) async {
List<Ordinal> allOrdinals = [];
for (String address in addresses) {
try {
2023-07-21 23:51:04 +00:00
var inscriptions =
await litescribeAPI.getInscriptionsByAddress(address);
allOrdinals.addAll(inscriptions
.map((data) => Ordinal.fromInscriptionData(data, _walletId)));
} catch (e) {
print("Error fetching inscriptions for address $address: $e");
}
}
return allOrdinals;
}
2023-07-21 23:51:04 +00:00
}