-
Notifications
You must be signed in to change notification settings - Fork 77
Expand file tree
/
Copy pathfees_datasource.dart
More file actions
76 lines (66 loc) · 2.7 KB
/
Copy pathfees_datasource.dart
File metadata and controls
76 lines (66 loc) · 2.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import 'package:bb_mobile/core/fees/domain/fees_entity.dart';
import 'package:bb_mobile/core/mempool/application/usecases/get_active_mempool_server_usecase.dart';
import 'package:bb_mobile/core/mempool/domain/repositories/mempool_settings_repository.dart';
import 'package:bb_mobile/core/mempool/domain/value_objects/mempool_server_network.dart';
import 'package:bb_mobile/core/utils/constants.dart';
import 'package:dio/dio.dart';
class FeesDatasource {
final GetActiveMempoolServerUsecase _getActiveMempoolServerUsecase;
final MempoolSettingsRepository _mempoolSettingsRepository;
FeesDatasource({
required GetActiveMempoolServerUsecase getActiveMempoolServerUsecase,
required MempoolSettingsRepository mempoolSettingsRepository,
}) : _getActiveMempoolServerUsecase = getActiveMempoolServerUsecase,
_mempoolSettingsRepository = mempoolSettingsRepository;
Future<FeeOptions> getBitcoinNetworkFeeOptions({
required bool isTestnet,
}) async {
// Get network settings
final network = MempoolServerNetwork.fromEnvironment(
isTestnet: isTestnet,
isLiquid: false,
);
final settings = await _mempoolSettingsRepository.fetchByNetwork(network);
// Determine which mempool server to use
String baseUrl;
if (settings.useForFeeEstimation) {
// Use custom or default mempool server from settings
final server = await _getActiveMempoolServerUsecase.execute(
isTestnet: isTestnet,
isLiquid: false,
);
baseUrl = server.fullUrl;
} else {
// Fall back to BB's mempool
baseUrl = isTestnet
? 'https://${ApiServiceConstants.testnetMempoolUrlPath}'
: 'https://${ApiServiceConstants.bbMempoolUrlPath}';
}
final http = Dio(BaseOptions(baseUrl: baseUrl));
const path = '/api/v1/fees/recommended';
final resp = await http.get(path);
if (resp.statusCode == null || resp.statusCode != 200) {
throw 'Error fetching fees from Mempool API (status: ${resp.statusCode})';
}
final data = resp.data as Map<String, dynamic>;
final fastestFee = data['fastestFee'] as int;
final economyFee = data['economyFee'] as int;
final minimumFee = data['minimumFee'] as int;
final feeOptions = FeeOptions(
fastest: NetworkFee.relative(fastestFee.toDouble()),
economic: NetworkFee.relative(economyFee.toDouble()),
slow: NetworkFee.relative(minimumFee.toDouble()),
);
return feeOptions;
}
Future<FeeOptions> getLiquidNetworkFeeOptions({
required bool isTestnet,
}) async {
const feeOptions = FeeOptions(
fastest: NetworkFee.relative(0.1),
economic: NetworkFee.relative(0.1),
slow: NetworkFee.relative(0.1),
);
return feeOptions;
}
}