2024-02-14 17:34:52 +00:00
|
|
|
import 'dart:async';
|
|
|
|
import 'package:breez_sdk/breez_sdk.dart';
|
2024-03-06 18:38:11 +00:00
|
|
|
import 'package:breez_sdk/bridge_generated.dart' as BZG;
|
|
|
|
import 'package:cake_wallet/entities/calculate_fiat_amount_raw.dart';
|
|
|
|
import 'package:cake_wallet/entities/fiat_currency.dart';
|
|
|
|
import 'package:cake_wallet/lightning/lightning.dart';
|
|
|
|
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
|
|
|
|
import 'package:cake_wallet/store/settings_store.dart';
|
|
|
|
import 'package:cw_core/crypto_currency.dart';
|
2024-02-14 17:34:52 +00:00
|
|
|
import 'package:mobx/mobx.dart';
|
|
|
|
|
|
|
|
part 'lightning_view_model.g.dart';
|
|
|
|
|
|
|
|
class LightningViewModel = LightningViewModelBase with _$LightningViewModel;
|
|
|
|
|
|
|
|
abstract class LightningViewModelBase with Store {
|
2024-03-06 18:38:11 +00:00
|
|
|
LightningViewModelBase({
|
|
|
|
required this.settingsStore,
|
|
|
|
required this.fiatConversionStore,
|
|
|
|
}) {}
|
|
|
|
|
|
|
|
final SettingsStore settingsStore;
|
|
|
|
final FiatConversionStore fiatConversionStore;
|
|
|
|
|
|
|
|
@observable
|
|
|
|
bool loading = false;
|
|
|
|
|
|
|
|
@action
|
|
|
|
void setLoading(bool value) {
|
|
|
|
loading = value;
|
|
|
|
}
|
|
|
|
|
|
|
|
FiatCurrency get fiat => settingsStore.fiatCurrency;
|
|
|
|
|
|
|
|
String formattedFiatAmount(int sats) {
|
|
|
|
String amount = calculateFiatAmountRaw(
|
|
|
|
cryptoAmount: lightning!.formatterLightningAmountToDouble(amount: sats),
|
|
|
|
price: fiatConversionStore.prices[CryptoCurrency.btcln],
|
|
|
|
);
|
|
|
|
return amount;
|
|
|
|
}
|
2024-02-14 17:34:52 +00:00
|
|
|
|
2024-02-14 18:21:37 +00:00
|
|
|
Future<List<String>> receiveOnchain() async {
|
|
|
|
final sdk = await BreezSDK();
|
|
|
|
|
2024-03-06 18:38:11 +00:00
|
|
|
BZG.ReceiveOnchainRequest req = const BZG.ReceiveOnchainRequest();
|
|
|
|
BZG.SwapInfo swapInfo = await sdk.receiveOnchain(req: req);
|
2024-02-14 18:21:37 +00:00
|
|
|
print("Minimum amount allowed to deposit in sats: ${swapInfo.minAllowedDeposit}");
|
|
|
|
print("Maximum amount allowed to deposit in sats: ${swapInfo.maxAllowedDeposit}");
|
2024-02-27 21:50:26 +00:00
|
|
|
int fee = swapInfo.channelOpeningFees?.minMsat ?? 2000;
|
|
|
|
fee = fee ~/ 1000;
|
2024-02-14 18:21:37 +00:00
|
|
|
return [
|
|
|
|
swapInfo.bitcoinAddress,
|
|
|
|
swapInfo.minAllowedDeposit.toString(),
|
2024-02-27 19:24:02 +00:00
|
|
|
swapInfo.maxAllowedDeposit.toString(),
|
2024-02-27 21:50:26 +00:00
|
|
|
fee.toString(),
|
2024-02-14 18:21:37 +00:00
|
|
|
];
|
|
|
|
}
|
2024-02-14 17:34:52 +00:00
|
|
|
|
2024-03-04 17:47:39 +00:00
|
|
|
Future<String> createInvoice({required String amountSats, String? description}) async {
|
2024-02-14 18:21:37 +00:00
|
|
|
final sdk = await BreezSDK();
|
2024-03-06 18:38:11 +00:00
|
|
|
final req = BZG.ReceivePaymentRequest(
|
2024-03-04 17:47:39 +00:00
|
|
|
amountMsat: (double.parse(amountSats) * 1000).round(),
|
2024-02-14 18:21:37 +00:00
|
|
|
description: description ?? '',
|
|
|
|
);
|
|
|
|
final res = await sdk.receivePayment(req: req);
|
|
|
|
return res.lnInvoice.bolt11;
|
|
|
|
}
|
2024-02-14 17:34:52 +00:00
|
|
|
|
2024-03-01 17:08:32 +00:00
|
|
|
Future<List<int>> invoiceSoftLimitsSats() async {
|
2024-03-01 16:49:24 +00:00
|
|
|
final sdk = await BreezSDK();
|
2024-03-06 18:38:11 +00:00
|
|
|
BZG.ReceivePaymentRequest? req = null;
|
|
|
|
req = BZG.ReceivePaymentRequest(
|
2024-03-01 16:49:24 +00:00
|
|
|
amountMsat: 10000 * 1000, // 10000 sats
|
|
|
|
description: "limits",
|
|
|
|
);
|
|
|
|
final res = await sdk.receivePayment(req: req);
|
|
|
|
int min = (res.openingFeeMsat ?? (2500 * 1000)) ~/ 1000;
|
|
|
|
int max = 1000000000 * 1000 * 10; // 10 BTC
|
|
|
|
|
2024-03-01 17:08:32 +00:00
|
|
|
int balance = 0;
|
|
|
|
|
2024-03-01 16:49:24 +00:00
|
|
|
try {
|
|
|
|
final nodeState = (await sdk.nodeInfo())!;
|
|
|
|
max = nodeState.inboundLiquidityMsats ~/ 1000;
|
2024-03-01 17:08:32 +00:00
|
|
|
balance = nodeState.channelsBalanceMsat ~/ 1000;
|
2024-03-04 23:37:22 +00:00
|
|
|
if (balance > 0) {
|
|
|
|
min = 0;
|
|
|
|
}
|
2024-03-01 16:49:24 +00:00
|
|
|
} catch (_) {}
|
2024-03-01 17:08:32 +00:00
|
|
|
return [min, max, balance];
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<int> getBalanceSats() async {
|
|
|
|
try {
|
|
|
|
final sdk = await BreezSDK();
|
|
|
|
final nodeState = (await sdk.nodeInfo())!;
|
|
|
|
return nodeState.channelsBalanceMsat ~/ 1000;
|
|
|
|
} catch (_) {
|
|
|
|
return 0;
|
|
|
|
}
|
2024-03-01 16:49:24 +00:00
|
|
|
}
|
2024-02-14 17:34:52 +00:00
|
|
|
}
|