diff --git a/lib/pages/masternodes/create_masternode_view.dart b/lib/pages/masternodes/create_masternode_view.dart index 9d2940ef7..d3f8cbad6 100644 --- a/lib/pages/masternodes/create_masternode_view.dart +++ b/lib/pages/masternodes/create_masternode_view.dart @@ -14,12 +14,18 @@ class CreateMasternodeView extends ConsumerStatefulWidget { const CreateMasternodeView({ super.key, required this.firoWalletId, + required this.collateralTxid, + required this.collateralVout, + required this.collateralAddress, this.popTxidOnSuccess = true, }); static const routeName = "/createMasternodeView"; final String firoWalletId; + final String collateralTxid; + final int collateralVout; + final String collateralAddress; final bool popTxidOnSuccess; @override @@ -32,32 +38,40 @@ class _CreateMasternodeDialogState extends ConsumerState { Widget build(BuildContext context) { return ConditionalParent( condition: Util.isDesktop, - builder: (child) => SizedBox( - width: 660, - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisAlignment: .spaceBetween, - children: [ - Padding( - padding: const EdgeInsets.only(left: 32), - child: Text( - "Create masternode", - style: STextStyles.desktopH3(context), + builder: (child) => Material( + color: Theme.of(context).extension()!.popupBG, + borderRadius: BorderRadius.circular(20), + child: SizedBox( + width: 660, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: const EdgeInsets.only(left: 32), + child: Text( + "Create masternode", + style: STextStyles.desktopH3(context), + ), + ), + const DesktopDialogCloseButton(), + ], + ), + Flexible( + child: Padding( + padding: const EdgeInsets.only( + left: 32, + bottom: 32, + right: 32, ), + child: child, ), - const DesktopDialogCloseButton(), - ], - ), - Flexible( - child: Padding( - padding: const EdgeInsets.only(left: 32, bottom: 32, right: 32), - child: child, ), - ), - ], + ], + ), ), ), child: ConditionalParent( @@ -107,6 +121,9 @@ class _CreateMasternodeDialogState extends ConsumerState { ), child: RegisterMasternodeForm( firoWalletId: widget.firoWalletId, + collateralTxid: widget.collateralTxid, + collateralVout: widget.collateralVout, + collateralAddress: widget.collateralAddress, onRegistrationSuccess: (txid) { if (widget.popTxidOnSuccess && mounted) { Navigator.of(context, rootNavigator: Util.isDesktop).pop(txid); diff --git a/lib/pages/masternodes/masternodes_home_view.dart b/lib/pages/masternodes/masternodes_home_view.dart index 6933a5c1e..a9b427145 100644 --- a/lib/pages/masternodes/masternodes_home_view.dart +++ b/lib/pages/masternodes/masternodes_home_view.dart @@ -1,9 +1,12 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; - +import 'package:isar_community/isar.dart'; import '../../providers/global/wallets_provider.dart'; import '../../themes/stack_colors.dart'; +import '../../utilities/amount/amount.dart'; import '../../utilities/assets.dart'; import '../../utilities/logger.dart'; import '../../utilities/text_styles.dart'; @@ -32,17 +35,175 @@ class MasternodesHomeView extends ConsumerStatefulWidget { _MasternodesHomeViewState(); } -class _MasternodesHomeViewState extends ConsumerState { +class _MasternodesHomeViewState extends ConsumerState + with WidgetsBindingObserver { late Future> _masternodesFuture; + bool _hasPromptedForCollateral = false; + bool _isCheckingForCollateral = false; - Future _showDesktopCreateMasternodeDialog() async { - final txid = await showDialog( - context: context, - barrierDismissible: true, - builder: (context) => - SDialog(child: CreateMasternodeView(firoWalletId: widget.walletId)), - ); - _handleSuccessTxid(txid); + Future<({String txid, int vout, String address})?> _findCollateralUtxo() + async { + final wallet = + ref.read(pWallets).getWallet(widget.walletId) as FiroWallet; + final utxos = await wallet.mainDB.getUTXOs(widget.walletId).findAll(); + final currentChainHeight = await wallet.chainHeight; + final masternodeRaw = Amount.fromDecimal( + kMasterNodeValue, + fractionDigits: wallet.cryptoCurrency.fractionDigits, + ).raw.toInt(); + + for (final utxo in utxos) { + if (utxo.value == masternodeRaw && + !utxo.isBlocked && + utxo.used != true && + utxo.isConfirmed( + currentChainHeight, + wallet.cryptoCurrency.minConfirms, + wallet.cryptoCurrency.minCoinbaseConfirms, + ) && + utxo.address != null) { + return (txid: utxo.txid, vout: utxo.vout, address: utxo.address!); + } + } + return null; + } + + Future _createMasternode() async { + final collateral = await _findCollateralUtxo(); + if (!mounted) { + return; + } + + if (collateral == null) { + await showDialog( + context: context, + builder: (_) => StackOkDialog( + title: "No collateral found", + message: + "A masternode needs one confirmed, unblocked transparent " + "UTXO of exactly 1000 FIRO.\n\n" + "Total balance above 1000 FIRO is not enough if no single " + "1000 output exists. Also ensure fee is not subtracted from " + "the recipient amount when sending to yourself.", + desktopPopRootNavigator: Util.isDesktop, + maxWidth: Util.isDesktop ? 400 : null, + ), + ); + return; + } + + if (Util.isDesktop) { + final txid = await showDialog( + context: context, + barrierDismissible: true, + builder: (context) => SDialog( + child: CreateMasternodeView( + firoWalletId: widget.walletId, + collateralTxid: collateral.txid, + collateralVout: collateral.vout, + collateralAddress: collateral.address, + ), + ), + ); + _handleSuccessTxid(txid); + } else { + final txid = await Navigator.of(context).pushNamed( + CreateMasternodeView.routeName, + arguments: { + 'walletId': widget.walletId, + 'collateralTxid': collateral.txid, + 'collateralVout': collateral.vout, + 'collateralAddress': collateral.address, + }, + ); + _handleSuccessTxid(txid); + } + } + + Future _maybePromptForExistingCollateral() async { + if (_hasPromptedForCollateral || _isCheckingForCollateral || !mounted) { + return; + } + _isCheckingForCollateral = true; + + try { + final collateral = await _findCollateralUtxo(); + if (collateral == null || !mounted) { + return; + } + _hasPromptedForCollateral = true; + + final wantsMN = await showDialog( + context: context, + barrierDismissible: true, + builder: (ctx) => StackDialog( + title: "Register Masternode?", + message: + "A 1000 FIRO collateral UTXO was found in your wallet. " + "Would you like to register a masternode now?", + leftButton: TextButton( + style: Theme.of(ctx) + .extension()! + .getSecondaryEnabledButtonStyle(ctx), + child: Text( + "Later", + style: STextStyles.button( + ctx, + ).copyWith( + color: Theme.of(ctx).extension()!.accentColorDark, + ), + ), + onPressed: () => Navigator.of(ctx).pop(false), + ), + rightButton: TextButton( + style: Theme.of(ctx) + .extension()! + .getPrimaryEnabledButtonStyle(ctx), + child: Text( + "Register", + style: STextStyles.button(ctx).copyWith( + color: + Theme.of(ctx).extension()!.buttonTextPrimary, + ), + ), + onPressed: () => Navigator.of(ctx).pop(true), + ), + ), + ); + + if (wantsMN != true || !mounted) { + return; + } + + if (Util.isDesktop) { + final txid = await showDialog( + context: context, + barrierDismissible: true, + builder: (context) => SDialog( + child: CreateMasternodeView( + firoWalletId: widget.walletId, + collateralTxid: collateral.txid, + collateralVout: collateral.vout, + collateralAddress: collateral.address, + ), + ), + ); + _handleSuccessTxid(txid); + } else { + final txid = await Navigator.of(context).pushNamed( + CreateMasternodeView.routeName, + arguments: { + 'walletId': widget.walletId, + 'collateralTxid': collateral.txid, + 'collateralVout': collateral.vout, + 'collateralAddress': collateral.address, + }, + ); + _handleSuccessTxid(txid); + } + } finally { + _isCheckingForCollateral = false; + } } void _handleSuccessTxid(Object? txid) { @@ -74,11 +235,29 @@ class _MasternodesHomeViewState extends ConsumerState { @override void initState() { super.initState(); + WidgetsBinding.instance.addObserver(this); // TODO polling and update on successful registration _masternodesFuture = (ref.read(pWallets).getWallet(widget.walletId) as FiroWallet) .getMyMasternodes(); + + WidgetsBinding.instance.addPostFrameCallback((_) { + unawaited(_maybePromptForExistingCollateral()); + }); + } + + @override + void dispose() { + WidgetsBinding.instance.removeObserver(this); + super.dispose(); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + if (state == AppLifecycleState.resumed) { + unawaited(_maybePromptForExistingCollateral()); + } } @override @@ -143,7 +322,7 @@ class _MasternodesHomeViewState extends ConsumerState { .srcIn, ), ), - onPressed: _showDesktopCreateMasternodeDialog, + onPressed: _createMasternode, ), ), ) @@ -184,13 +363,7 @@ class _MasternodesHomeViewState extends ConsumerState { width: 20, height: 20, ), - onPressed: () async { - final txid = await Navigator.of(context).pushNamed( - CreateMasternodeView.routeName, - arguments: widget.walletId, - ); - _handleSuccessTxid(txid); - }, + onPressed: _createMasternode, ), ), ), @@ -229,17 +402,7 @@ class _MasternodesHomeViewState extends ConsumerState { label: "Create Your First Masternode", horizontalContentPadding: 16, buttonHeight: Util.isDesktop ? .l : null, - onPressed: () async { - if (Util.isDesktop) { - await _showDesktopCreateMasternodeDialog(); - } else { - final txid = await Navigator.of(context).pushNamed( - CreateMasternodeView.routeName, - arguments: widget.walletId, - ); - _handleSuccessTxid(txid); - } - }, + onPressed: _createMasternode, ), ], ), diff --git a/lib/pages/masternodes/sub_widgets/register_masternode_form.dart b/lib/pages/masternodes/sub_widgets/register_masternode_form.dart index 84977d3d4..05c4d2895 100644 --- a/lib/pages/masternodes/sub_widgets/register_masternode_form.dart +++ b/lib/pages/masternodes/sub_widgets/register_masternode_form.dart @@ -3,13 +3,11 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../providers/global/wallets_provider.dart'; import '../../../themes/stack_colors.dart'; -import '../../../utilities/amount/amount.dart'; import '../../../utilities/if_not_already.dart'; import '../../../utilities/logger.dart'; import '../../../utilities/show_loading.dart'; import '../../../utilities/text_styles.dart'; import '../../../utilities/util.dart'; -import '../../../wallets/isar/providers/wallet_info_provider.dart'; import '../../../wallets/wallet/impl/firo_wallet.dart'; import '../../../widgets/conditional_parent.dart'; import '../../../widgets/desktop/primary_button.dart'; @@ -22,10 +20,16 @@ class RegisterMasternodeForm extends ConsumerStatefulWidget { const RegisterMasternodeForm({ super.key, required this.firoWalletId, + required this.collateralTxid, + required this.collateralVout, + required this.collateralAddress, required this.onRegistrationSuccess, }); final String firoWalletId; + final String collateralTxid; + final int collateralVout; + final String collateralAddress; final void Function(String) onRegistrationSuccess; @@ -36,8 +40,6 @@ class RegisterMasternodeForm extends ConsumerStatefulWidget { class _RegisterMasternodeFormState extends ConsumerState { - late final Amount _masternodeThreshold; - final _ipAndPortController = TextEditingController(); final _operatorPubKeyController = TextEditingController(); final _votingAddressController = TextEditingController(); @@ -104,6 +106,9 @@ class _RegisterMasternodeFormState votingAddress, operatorReward, payoutAddress, + collateralTxid: widget.collateralTxid, + collateralVout: widget.collateralVout, + collateralAddress: widget.collateralAddress, ); Logging.instance.i('Masternode registration submitted: $txId'); @@ -114,11 +119,6 @@ class _RegisterMasternodeFormState @override void initState() { super.initState(); - final coin = ref.read(pWalletCoin(widget.firoWalletId)); - _masternodeThreshold = Amount.fromDecimal( - kMasterNodeValue, - fractionDigits: coin.fractionDigits, - ); _register = IfNotAlreadyAsync(() async { Exception? ex; @@ -168,24 +168,6 @@ class _RegisterMasternodeFormState @override Widget build(BuildContext context) { final stack = Theme.of(context).extension()!; - final spendableFiro = ref.watch( - pWalletBalance(widget.firoWalletId).select((s) => s.spendable), - ); - final canRegister = spendableFiro >= _masternodeThreshold; - final availableCount = (spendableFiro.raw ~/ _masternodeThreshold.raw) - .toInt(); - - final infoColor = canRegister - ? stack.snackBarTextSuccess - : stack.snackBarTextError; - final infoColorBG = canRegister - ? stack.snackBarBackSuccess - : stack.snackBarBackError; - - final infoMessage = canRegister - ? "You can register $availableCount masternode(s)." - : "Insufficient funds to register a masternode. " - "You need at least 1000 public FIRO."; return Column( mainAxisSize: MainAxisSize.min, @@ -195,14 +177,16 @@ class _RegisterMasternodeFormState children: [ Expanded( child: RoundedContainer( - color: infoColorBG, + color: stack.snackBarBackSuccess, child: Padding( padding: const EdgeInsets.all(8.0), child: Text( - infoMessage, + "Collateral: ${widget.collateralTxid.length >= 8 ? '${widget.collateralTxid.substring(0, 8)}...' : widget.collateralTxid}" + ":${widget.collateralVout} " + "(${widget.collateralAddress.length >= 10 ? '${widget.collateralAddress.substring(0, 10)}...' : widget.collateralAddress})", style: STextStyles.w600_14( context, - ).copyWith(color: infoColor), + ).copyWith(color: stack.snackBarTextSuccess), ), ), ), diff --git a/lib/pages/send_view/confirm_transaction_view.dart b/lib/pages/send_view/confirm_transaction_view.dart index dfd6c98bd..60c15ef43 100644 --- a/lib/pages/send_view/confirm_transaction_view.dart +++ b/lib/pages/send_view/confirm_transaction_view.dart @@ -16,8 +16,8 @@ import 'package:decimal/decimal.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_svg/svg.dart'; - -import '../../models/isar/models/transaction_note.dart'; +import 'package:isar_community/isar.dart'; +import '../../models/isar/models/isar_models.dart'; import '../../notifications/show_flush_bar.dart'; import '../../pages_desktop_specific/coin_control/desktop_coin_control_use_dialog.dart'; import '../../pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_auth_send.dart'; @@ -45,9 +45,11 @@ import '../../wallets/wallet/impl/firo_wallet.dart'; import '../../wallets/wallet/impl/mimblewimblecoin_wallet.dart'; import '../../wallets/wallet/impl/solana_wallet.dart'; import '../../wallets/wallet/wallet_mixin_interfaces/paynym_interface.dart'; +import '../masternodes/create_masternode_view.dart'; import '../../widgets/background.dart'; import '../../widgets/conditional_parent.dart'; import '../../widgets/custom_buttons/app_bar_icon_button.dart'; +import '../../widgets/dialogs/s_dialog.dart'; import '../../widgets/desktop/desktop_dialog.dart'; import '../../widgets/desktop/desktop_dialog_close_button.dart'; import '../../widgets/desktop/primary_button.dart'; @@ -268,6 +270,79 @@ class _ConfirmTransactionViewState } } + Future _resolveFiroCollateralVout({ + required FiroWallet wallet, + required String txid, + required String recipientAddress, + required Amount amount, + }) async { + try { + final tx = await wallet.electrumXClient.getTransaction(txHash: txid); + final outputs = tx['vout']; + if (outputs is! List) { + return null; + } + + for (final output in outputs) { + if (output is! Map) { + continue; + } + final outputMap = Map.from(output); + final n = outputMap['n']; + final outputIndex = switch (n) { + int value => value, + String value => int.tryParse(value), + _ => null, + }; + if (outputIndex == null) { + continue; + } + + final valueDecimal = Decimal.tryParse(outputMap['value'].toString()); + if (valueDecimal == null) { + continue; + } + final outputAmount = Amount.fromDecimal( + valueDecimal, + fractionDigits: wallet.cryptoCurrency.fractionDigits, + ); + if (outputAmount != amount) { + continue; + } + + final scriptPubKey = outputMap['scriptPubKey']; + if (scriptPubKey is! Map) { + continue; + } + + final recipientAddresses = {}; + final addresses = scriptPubKey['addresses']; + if (addresses is List) { + recipientAddresses.addAll( + addresses.whereType(), + ); + } + + final address = scriptPubKey['address']; + if (address is String) { + recipientAddresses.add(address); + } + + if (recipientAddresses.contains(recipientAddress)) { + return outputIndex; + } + } + } catch (e, s) { + Logging.instance.w( + "Failed to resolve collateral vout for txid=$txid: $e", + error: e, + stackTrace: s, + ); + } + + return null; + } + Future _attemptSend(BuildContext context) async { final wallet = ref.read(pWallets).getWallet(walletId); final coin = wallet.info.coin; @@ -385,15 +460,15 @@ class _ConfirmTransactionViewState } final results = await Future.wait([txDataFuture, time]); + final confirmedTx = results.first as TxData; sendProgressController.triggerSuccess?.call(); await Future.delayed(const Duration(seconds: 5)); - if (wallet is FiroWallet && - (results.first as TxData).sparkMints != null) { - txids.addAll((results.first as TxData).sparkMints!.map((e) => e.txid!)); + if (wallet is FiroWallet && confirmedTx.sparkMints != null) { + txids.addAll(confirmedTx.sparkMints!.map((e) => e.txid!)); } else { - txids.add((results.first as TxData).txid!); + txids.add(confirmedTx.txid!); } if (coin is! Ethereum) { ref.refresh(desktopUseUTXOs); @@ -415,13 +490,164 @@ class _ConfirmTransactionViewState unawaited(ref.read(pCurrentTokenWallet)!.refresh()); } } else { - unawaited(wallet.refresh()); + if (wallet is FiroWallet) { + try { + await wallet.refresh(); + } catch (e, s) { + Logging.instance.w( + "Post-send wallet refresh failed: $e", + error: e, + stackTrace: s, + ); + } + } else { + unawaited(wallet.refresh()); + } } widget.onSuccess.call(); - // pop back to wallet - if (context.mounted) { + // Check for 1000 FIRO transparent self-send → prompt MN registration + bool navigatedToMN = false; + if (wallet is FiroWallet && + confirmedTx.recipients != null && + confirmedTx.sparkMints == null && + txids.isNotEmpty && + context.mounted) { + try { + final masternodeAmount = Amount.fromDecimal( + kMasterNodeValue, + fractionDigits: wallet.cryptoCurrency.fractionDigits, + ); + final txFeeRaw = confirmedTx.fee?.raw ?? BigInt.zero; + + final mnRecipient = confirmedTx.recipients! + .where((r) => !r.isChange && r.amount == masternodeAmount) + .firstOrNull; + + if (mnRecipient != null && confirmedTx.txid != null) { + final ownAddress = + await ref + .read(mainDBProvider) + .getAddresses(walletId) + .filter() + .valueEqualTo(mnRecipient.address) + .findFirst(); + + if (ownAddress != null && context.mounted) { + final collateralVout = await _resolveFiroCollateralVout( + wallet: wallet, + txid: confirmedTx.txid!, + recipientAddress: mnRecipient.address, + amount: masternodeAmount, + ); + if (!context.mounted) { + return; + } + + if (collateralVout == null) { + unawaited( + showFloatingFlushBar( + type: FlushBarType.warning, + message: + "Unable to determine collateral output index " + "automatically. Open Masternodes and select your " + "1000 FIRO UTXO manually.", + context: context, + ), + ); + } else { + navigatedToMN = true; + final navigator = Navigator.of(context); + navigator.popUntil( + ModalRoute.withName(routeOnSuccessName), + ); + final dialogContext = navigator.context; + if (!dialogContext.mounted) { + return; + } + if (Util.isDesktop) { + await showDialog( + context: dialogContext, + barrierDismissible: true, + builder: (ctx) => SDialog( + child: CreateMasternodeView( + firoWalletId: walletId, + collateralTxid: confirmedTx.txid!, + collateralVout: collateralVout, + collateralAddress: mnRecipient.address, + ), + ), + ); + } else { + await navigator.pushNamed( + CreateMasternodeView.routeName, + arguments: { + 'walletId': walletId, + 'collateralTxid': confirmedTx.txid!, + 'collateralVout': collateralVout, + 'collateralAddress': mnRecipient.address, + }, + ); + } + } + } + } else if (mnRecipient != null && + confirmedTx.txid == null && + context.mounted) { + unawaited( + showFloatingFlushBar( + type: FlushBarType.warning, + message: + "Could not determine transaction id for collateral " + "auto-detection. Register from the Masternodes screen " + "once the transaction appears.", + context: context, + ), + ); + } else { + // If fee was subtracted from the recipient, users can enter 1000 but + // end up with ~999.99... output which is not valid MN collateral. + final nearMnRecipient = confirmedTx.recipients! + .where((r) => !r.isChange && r.amount.raw < masternodeAmount.raw) + .where((r) => (masternodeAmount.raw - r.amount.raw) <= txFeeRaw) + .toList() + ..sort((a, b) => b.amount.raw.compareTo(a.amount.raw)); + + if (nearMnRecipient.isNotEmpty) { + final maybeOwnAddress = + await ref + .read(mainDBProvider) + .getAddresses(walletId) + .filter() + .valueEqualTo(nearMnRecipient.first.address) + .findFirst(); + + if (maybeOwnAddress != null && context.mounted) { + unawaited( + showFloatingFlushBar( + type: FlushBarType.warning, + message: + "Masternode collateral requires one exact 1000 FIRO " + "transparent output. Fee appears to have been " + "subtracted from the recipient amount. Send 1000 " + "to yourself again with fee paid on top.", + context: context, + ), + ); + } + } + } + } catch (e, s) { + Logging.instance.w( + "Skipping masternode collateral auto-detection: $e", + error: e, + stackTrace: s, + ); + } + } + + if (!navigatedToMN && context.mounted) { if (widget.onSuccessInsteadOfRouteOnSuccess == null) { Navigator.of( context, diff --git a/lib/route_generator.dart b/lib/route_generator.dart index cad05cbcd..dc774fa9f 100644 --- a/lib/route_generator.dart +++ b/lib/route_generator.dart @@ -912,10 +912,15 @@ class RouteGenerator { return _routeError("${settings.name} invalid args: ${args.toString()}"); case CreateMasternodeView.routeName: - if (args is String) { + if (args is Map) { return getRoute( shouldUseMaterialRoute: useMaterialPageRoute, - builder: (_) => CreateMasternodeView(firoWalletId: args), + builder: (_) => CreateMasternodeView( + firoWalletId: args['walletId'] as String, + collateralTxid: args['collateralTxid'] as String, + collateralVout: args['collateralVout'] as int, + collateralAddress: args['collateralAddress'] as String, + ), settings: RouteSettings(name: settings.name), ); } diff --git a/lib/wallets/wallet/impl/firo_wallet.dart b/lib/wallets/wallet/impl/firo_wallet.dart index c3b861ff7..593f6185f 100644 --- a/lib/wallets/wallet/impl/firo_wallet.dart +++ b/lib/wallets/wallet/impl/firo_wallet.dart @@ -2,7 +2,8 @@ import 'dart:async'; import 'dart:convert'; import 'dart:typed_data'; -import 'package:coinlib_flutter/coinlib_flutter.dart' show base58Decode, P2PKH; +import 'package:coinlib_flutter/coinlib_flutter.dart' + show MessageSignature, base58Decode, P2PKH; import 'package:crypto/crypto.dart' as crypto; import 'package:decimal/decimal.dart'; import 'package:isar_community/isar.dart'; @@ -939,34 +940,70 @@ class FiroWallet extends Bip39HDWallet String operatorPubKey, String votingAddress, int operatorReward, - String payoutAddress, - ) async { - if (info.cachedBalance.spendable < - Amount.fromDecimal( - kMasterNodeValue, - fractionDigits: cryptoCurrency.fractionDigits, + String payoutAddress, { + required String collateralTxid, + required int collateralVout, + required String collateralAddress, + }) async { + final collateralAddr = + await mainDB + .getAddresses(walletId) + .filter() + .valueEqualTo(collateralAddress) + .findFirst(); + if (collateralAddr == null || collateralAddr.derivationPath == null) { + throw Exception( + 'Collateral address $collateralAddress not found in wallet ' + 'or has no derivation path.', + ); + } + final collateralUtxo = + await mainDB + .getUTXOs(walletId) + .filter() + .txidEqualTo(collateralTxid) + .and() + .voutEqualTo(collateralVout) + .findFirst(); + final currentChainHeight = await chainHeight; + if (collateralUtxo == null || + collateralUtxo.address != collateralAddress || + collateralUtxo.isBlocked || + collateralUtxo.used == true || + !collateralUtxo.isConfirmed( + currentChainHeight, + cryptoCurrency.minConfirms, + cryptoCurrency.minCoinbaseConfirms, )) { throw Exception( - 'Not enough funds to register a masternode. ' - 'You must have at least 1000 FIRO in your public balance.', + "Collateral outpoint is not yet confirmed/spendable. " + "Wait for confirmations and try again.", ); } - - Address? collateralAddress = await getCurrentReceivingAddress(); - if (collateralAddress == null) { - await generateNewReceivingAddress(); - collateralAddress = await getCurrentReceivingAddress(); + final expectedCollateralRaw = Amount.fromDecimal( + kMasterNodeValue, + fractionDigits: cryptoCurrency.fractionDigits, + ).raw.toInt(); + if (collateralUtxo.value != expectedCollateralRaw) { + throw Exception( + "Collateral outpoint must be exactly ${kMasterNodeValue.toString()} FIRO.", + ); } - await generateNewReceivingAddress(); Address? ownerAddress = await getCurrentReceivingAddress(); - if (ownerAddress == null) { + if (ownerAddress == null || ownerAddress.value == collateralAddress) { await generateNewReceivingAddress(); ownerAddress = await getCurrentReceivingAddress(); } + if (ownerAddress == null || ownerAddress.value == collateralAddress) { + await generateNewReceivingAddress(); + ownerAddress = await getCurrentReceivingAddress(); + } + if (ownerAddress == null) { + throw Exception("Could not derive owner address for masternode."); + } await generateNewReceivingAddress(); - // Create the registration transaction. final registrationTx = BytesBuilder(); // nVersion (16 bit) @@ -974,7 +1011,7 @@ class FiroWallet extends Bip39HDWallet (ByteData(2)..setInt16(0, 1, Endian.little)).buffer.asUint8List(), ); - // nType (16 bit) (this is separate from the tx nType) + // nType (16 bit) registrationTx.add( (ByteData(2)..setInt16(0, 0, Endian.little)).buffer.asUint8List(), ); @@ -984,22 +1021,23 @@ class FiroWallet extends Bip39HDWallet (ByteData(2)..setInt16(0, 0, Endian.little)).buffer.asUint8List(), ); - // collateralOutpoint.hash (256 bit) - // This is null, referring to our own transaction. - registrationTx.add(ByteData(32).buffer.asUint8List()); + // collateralOutpoint.hash (256 bit) — real txid, byte-reversed + final collateralTxidBytes = + collateralTxid.toUint8ListFromHex.reversed.toList(); + if (collateralTxidBytes.length != 32) { + throw Exception("Invalid collateral txid: $collateralTxid"); + } + registrationTx.add(collateralTxidBytes); - // collateralOutpoint.index (2 bytes) - // This is going to be 0. - // (The only other output will be change at position 1.) + // collateralOutpoint.index (uint32) registrationTx.add( - (ByteData(4)..setInt16(0, 0, Endian.little)).buffer.asUint8List(), + (ByteData(4)..setUint32(0, collateralVout, Endian.little)) + .buffer + .asUint8List(), ); - // addr.ip (4 bytes) - final ipParts = ip - .split('.') - .map((e) => int.parse(e)) - .toList(); + // addr — IPv4-mapped IPv6 (16 bytes) + port (2 bytes big-endian) + final ipParts = ip.split('.').map((e) => int.parse(e)).toList(); if (ipParts.length != 4) { throw Exception("Invalid IP address: $ip"); } @@ -1008,120 +1046,141 @@ class FiroWallet extends Bip39HDWallet throw Exception("Invalid IP part: $part"); } } - // This is serialized as an IPv6 address (which it cannot be), - // so there will be 12 bytes of padding. registrationTx.add(ByteData(10).buffer.asUint8List()); registrationTx.add([0xff, 0xff]); registrationTx.add(ipParts); - - // addr.port (2 bytes) if (port < 1 || port > 65535) { throw Exception("Invalid port: $port"); } registrationTx.add( - // network byte order - (ByteData(2)..setInt16(0, port, Endian.big)).buffer.asUint8List(), + (ByteData(2)..setUint16(0, port, Endian.big)).buffer.asUint8List(), ); // keyIDOwner (20 bytes) - assert(ownerAddress!.value != collateralAddress!.value); - if (!cryptoCurrency.validateAddress(ownerAddress!.value)) { + if (ownerAddress.value == collateralAddress) { + throw Exception("Owner address must differ from collateral address."); + } + if (!cryptoCurrency.validateAddress(ownerAddress.value)) { throw Exception("Invalid owner address: ${ownerAddress.value}"); } final ownerAddressBytes = base58Decode(ownerAddress.value); - assert(ownerAddressBytes.length == 21); // should be infallible - registrationTx.add(ownerAddressBytes.sublist(1)); // remove version byte + assert(ownerAddressBytes.length == 21); + registrationTx.add(ownerAddressBytes.sublist(1)); // pubKeyOperator (48 bytes) final operatorPubKeyBytes = operatorPubKey.toUint8ListFromHex; if (operatorPubKeyBytes.length != 48) { - // These actually have a required format, but we're not going to check it. - // The transaction will fail if it's not - // valid. throw Exception("Invalid operator public key: $operatorPubKey"); } registrationTx.add(operatorPubKeyBytes); - // keyIDVoting (40 bytes) + // keyIDVoting (20 bytes) + final String effectiveVotingAddress; if (votingAddress == payoutAddress) { throw Exception("Voting address and payout address cannot be the same."); - } else if (votingAddress == collateralAddress!.value) { + } else if (votingAddress == collateralAddress) { throw Exception( "Voting address cannot be the same as the collateral address.", ); } else if (votingAddress.isNotEmpty) { - if (!cryptoCurrency.validateAddress(votingAddress)) { - throw Exception("Invalid voting address: $votingAddress"); + final votingType = cryptoCurrency.getAddressType(votingAddress); + if (votingType != AddressType.p2pkh) { + throw Exception( + "Voting address must be a transparent P2PKH address, " + "not a Spark or other address type.", + ); } - final votingAddressBytes = base58Decode(votingAddress); - assert(votingAddressBytes.length == 21); // should be infallible - registrationTx.add(votingAddressBytes.sublist(1)); // remove version byte + assert(votingAddressBytes.length == 21); + registrationTx.add(votingAddressBytes.sublist(1)); + effectiveVotingAddress = votingAddress; } else { - registrationTx.add(ownerAddressBytes.sublist(1)); // remove version byte + registrationTx.add(ownerAddressBytes.sublist(1)); + effectiveVotingAddress = ownerAddress.value; } - // nOperatorReward (16 bit); the operator gets nOperatorReward/10,000 of the reward. + // nOperatorReward (16 bit) if (operatorReward < 0 || operatorReward > 10000) { throw Exception("Invalid operator reward: $operatorReward"); } registrationTx.add( - (ByteData( - 2, - )..setInt16(0, operatorReward, Endian.little)).buffer.asUint8List(), + (ByteData(2)..setInt16(0, operatorReward, Endian.little)) + .buffer + .asUint8List(), ); - // scriptPayout (variable) - if (!cryptoCurrency.validateAddress(payoutAddress)) { - throw Exception("Invalid payout address: $payoutAddress"); + // scriptPayout (variable) — must be P2PKH or P2SH per Firo consensus + final payoutType = cryptoCurrency.getAddressType(payoutAddress); + final Uint8List payoutScriptBytes; + if (payoutType == AddressType.p2pkh) { + final payoutHash = base58Decode(payoutAddress).sublist(1); + payoutScriptBytes = P2PKH.fromHash(payoutHash).script.compiled; + } else if (payoutType == AddressType.p2sh) { + final payoutHash = base58Decode(payoutAddress).sublist(1); + payoutScriptBytes = Uint8List.fromList([ + 0xa9, // OP_HASH160 + 0x14, // push 20 bytes + ...payoutHash, + 0x87, // OP_EQUAL + ]); + } else { + throw Exception( + "Payout address must be a transparent P2PKH or P2SH address, " + "not a Spark or other address type.", + ); } - final payoutAddressScript = P2PKH.fromHash( - base58Decode(payoutAddress).sublist(1), - ); - final payoutAddressScriptLength = - payoutAddressScript.script.compiled.length; - assert(payoutAddressScriptLength < 253); - registrationTx.addByte(payoutAddressScriptLength); - registrationTx.add(payoutAddressScript.script.compiled); + assert(payoutScriptBytes.length < 253); + registrationTx.addByte(payoutScriptBytes.length); + registrationTx.add(payoutScriptBytes); + + // --- coin selection for fee inputs only (exclude collateral UTXO) --- + final allUtxos = await mainDB.getUTXOs(walletId).findAll(); + final feeUtxos = + allUtxos + .where( + (u) => + !(u.txid == collateralTxid && u.vout == collateralVout) && + !u.isBlocked && + u.used != true && + u.isConfirmed( + currentChainHeight, + cryptoCurrency.minConfirms, + cryptoCurrency.minCoinbaseConfirms, + ), + ) + .map((e) => StandardInput(e) as BaseInput) + .toList(); final partialTxData = TxData( - // nVersion: 3, nType: 1 (TRANSACTION_PROVIDER_REGISTER) overrideVersion: 3 + (1 << 16), - // coinSelection fee calculation uses a heuristic that doesn't know about - // vExtraData, so we'll just use a really big fee to make sure the - // transaction confirms. feeRateAmount: cryptoCurrency.defaultFeeRate * BigInt.from(10), recipients: [ TxRecipient( - address: collateralAddress.value, + address: ownerAddress.value, addressType: AddressType.p2pkh, - amount: Amount.fromDecimal( - kMasterNodeValue, - fractionDigits: cryptoCurrency.fractionDigits, - ), - isChange: false, + amount: cryptoCurrency.dustLimit, + isChange: true, ), ], ); final partialTx = await coinSelection( txData: partialTxData, + // Use non-coin-control mode so unavailable UTXOs are filtered out + // instead of causing a hard failure when any candidate is blocked + // or not yet spendable. coinControl: false, isSendAll: false, isSendAllCoinControlUtxos: false, + utxos: feeUtxos, ); - // Calculate inputsHash (32 bytes). + // inputsHash (SHA256d of serialized inputs) final inputsHashInput = BytesBuilder(); for (final input in partialTx.usedUTXOs!) { final standardInput = input as StandardInput; - // we reverse the txid bytes because fuck it, why not. - final reversedTxidBytes = standardInput - .utxo - .txid - .toUint8ListFromHex - .reversed - .toList(); + final reversedTxidBytes = + standardInput.utxo.txid.toUint8ListFromHex.reversed.toList(); inputsHashInput.add(reversedTxidBytes); inputsHashInput.add( (ByteData(4)..setInt32(0, standardInput.utxo.vout, Endian.little)) @@ -1133,10 +1192,49 @@ class FiroWallet extends Bip39HDWallet final inputsHashHash = crypto.sha256.convert(inputsHash).bytes; registrationTx.add(inputsHashHash); - // vchSig is a variable length field that we need iff the collateral is - // NOT in the same transaction, but for us it is. - registrationTx.addByte(0); + // --- payload hash & signature for external collateral --- + // SerializeHash(proRegTx) with SER_GETHASH excludes vchSig. + // The bytes built so far ARE the payload without vchSig. + final payloadForHash = registrationTx.toBytes(); + final payloadHash = + crypto.sha256.convert( + crypto.sha256.convert(payloadForHash).bytes, + ).bytes; + // uint256::ToString() outputs bytes in reversed order + final payloadHashHex = + payloadHash.reversed + .map((b) => b.toRadixString(16).padLeft(2, '0')) + .join(); + + // MakeSignString format from Firo's providertx.cpp + final signString = + '$payoutAddress|$operatorReward|${ownerAddress.value}' + '|$effectiveVotingAddress|$payloadHashHex'; + + // Sign with the collateral private key + final root = await getRootHDNode(); + final collateralKeyPair = root.derivePath( + collateralAddr.derivationPath!.value, + ); + final messagePrefixBytes = + cryptoCurrency.networkParams.messagePrefix.codeUnits; + final cleanPrefix = + messagePrefixBytes.first == messagePrefixBytes.length - 1 + ? String.fromCharCodes(messagePrefixBytes.sublist(1)) + : cryptoCurrency.networkParams.messagePrefix; + final signed = MessageSignature.sign( + key: collateralKeyPair.privateKey, + message: signString, + prefix: cleanPrefix, + ); + + // vchSig — compact-size length + 65-byte compact signature + final vchSig = signed.signature.compact; + assert(vchSig.length == 65); + registrationTx.addByte(vchSig.length); + registrationTx.add(vchSig); + // --- build, sign, and broadcast --- final finalTxData = partialTx.copyWith( vExtraData: registrationTx.toBytes(), ); @@ -1146,7 +1244,6 @@ class FiroWallet extends Bip39HDWallet ); final finalTransactionHex = finalTx.raw!; - assert(finalTransactionHex.contains(registrationTx.toBytes().toHex)); final broadcastedTxHash = await electrumXClient.broadcastTransaction( rawTx: finalTransactionHex, @@ -1213,43 +1310,34 @@ class FiroWallet extends Bip39HDWallet } Future> getMyMasternodeProTxHashes() async { - // - This registers only masternodes which have collateral in the same - // transaction. - // - If this seed is shared with firod or such and a masternode is created - // there, it will probably not appear here - // because that doesn't put collateral in the protx tx. - // - An exactly 1000 FIRO vout will show up here even if it's not a - // masternode collateral. This will just log an - // info in getMyMasternodes. - // - If this wallet created a masternode not owned by this wallet it will - // erroneously be emitted here and actually - // shown to the user as our own masternode, but this is contrived and - // nothing actually produces transactions like - // that. - - // utxos are UNSPENT txos, so broken masternodes will not show up here by - // design. - final utxos = await mainDB.getUTXOs(walletId).sortByBlockHeight().findAll(); - final List r = []; + // Look for ProRegTx transactions (nVersion=3, nType=1 → version field + // = 3 + (1 << 16) = 65539) that this wallet has broadcast. + final allTxs = + await mainDB.isar.transactionV2s + .where() + .walletIdEqualTo(walletId) + .findAll(); + for (final tx in allTxs) { + if (tx.version == 3 + (1 << 16) && !r.contains(tx.txid)) { + r.add(tx.txid); + } + } + + // Fallback: also check 1000 FIRO UTXOs (works for legacy internal + // collateral where the protx txid == collateral txid). Will harmlessly + // produce non-protx txids that getMyMasternodes filters out. + final utxos = await mainDB.getUTXOs(walletId).sortByBlockHeight().findAll(); final rawMasterNodeAmount = Amount.fromDecimal( kMasterNodeValue, fractionDigits: cryptoCurrency.fractionDigits, ).raw.toInt(); for (final utxo in utxos) { - if (utxo.value != rawMasterNodeAmount) { - continue; + if (utxo.value == rawMasterNodeAmount && !r.contains(utxo.txid)) { + r.add(utxo.txid); } - - // A duplicate could occur if a protx transaction has a non-collateral - // 1000 FIRO vout. - if (r.contains(utxo.txid)) { - continue; - } - - r.add(utxo.txid); } return r; diff --git a/pubspec.lock b/pubspec.lock deleted file mode 100644 index 0aedf7867..000000000 --- a/pubspec.lock +++ /dev/null @@ -1,2690 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d - url: "https://pub.dev" - source: hosted - version: "91.0.0" - analyzer: - dependency: "direct dev" - description: - name: analyzer - sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08 - url: "https://pub.dev" - source: hosted - version: "8.4.1" - another_flushbar: - dependency: "direct main" - description: - name: another_flushbar - sha256: "2b99671c010a7d5770acf5cb24c9f508b919c3a7948b6af9646e773e7da7b757" - url: "https://pub.dev" - source: hosted - version: "1.12.32" - ansicolor: - dependency: transitive - description: - name: ansicolor - sha256: "50e982d500bc863e1d703448afdbf9e5a72eb48840a4f766fa361ffd6877055f" - url: "https://pub.dev" - source: hosted - version: "2.0.3" - archive: - dependency: "direct main" - description: - name: archive - sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd" - url: "https://pub.dev" - source: hosted - version: "4.0.7" - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - async: - dependency: "direct main" - description: - name: async - sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" - url: "https://pub.dev" - source: hosted - version: "2.13.0" - basic_utils: - dependency: "direct main" - description: - name: basic_utils - sha256: "548047bef0b3b697be19fa62f46de54d99c9019a69fb7db92c69e19d87f633c7" - url: "https://pub.dev" - source: hosted - version: "5.8.2" - bech32: - dependency: "direct main" - description: - path: "." - ref: "6a3388ff8f62c1fa5e624bb7f36c8e71fe53428d" - resolved-ref: "6a3388ff8f62c1fa5e624bb7f36c8e71fe53428d" - url: "https://github.com/cypherstack/bech32.git" - source: git - version: "0.2.1" - bip32: - dependency: "direct main" - description: - path: "." - ref: "9a7e9b9bad9872c69dd1383d6b2e6090f85148fc" - resolved-ref: "9a7e9b9bad9872c69dd1383d6b2e6090f85148fc" - url: "https://github.com/cypherstack/bip32-dart" - source: git - version: "2.0.0" - bip39: - dependency: "direct main" - description: - path: "." - ref: "20bc8ca0bf0a30c6965977a26c41475a9e862020" - resolved-ref: "20bc8ca0bf0a30c6965977a26c41475a9e862020" - url: "https://github.com/cypherstack/stack-bip39.git" - source: git - version: "1.0.7" - bip47: - dependency: "direct main" - description: - path: "." - ref: "3ef6b94375d7b4d972b0bc0bd9597532381a88ec" - resolved-ref: "3ef6b94375d7b4d972b0bc0bd9597532381a88ec" - url: "https://github.com/cypherstack/bip47.git" - source: git - version: "2.1.0" - bitbox: - dependency: "direct main" - description: - path: "." - ref: "4c3c1aadae089dd1ace705aedf012e1c89fe53ad" - resolved-ref: "4c3c1aadae089dd1ace705aedf012e1c89fe53ad" - url: "https://github.com/cypherstack/bitbox-flutter.git" - source: git - version: "1.0.2" - bitcoindart: - dependency: "direct main" - description: - path: "." - ref: "7145be16bb88cffbd53326f7fa4570e414be09e4" - resolved-ref: "7145be16bb88cffbd53326f7fa4570e414be09e4" - url: "https://github.com/cypherstack/bitcoindart.git" - source: git - version: "3.0.2" - blockchain_signer: - dependency: transitive - description: - name: blockchain_signer - sha256: aa62c62df1fec11dbce7516444715ae492862ebdf3108b8b464a1909827963cd - url: "https://pub.dev" - source: hosted - version: "0.1.0" - blockchain_utils: - dependency: "direct main" - description: - name: blockchain_utils - sha256: "1e4f30b98d92f7ccf2eda009a23b53871a1c9b8b6dfa00bb1eb17ec00ae5eeeb" - url: "https://pub.dev" - source: hosted - version: "3.6.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - borsh_annotation: - dependency: transitive - description: - name: borsh_annotation - sha256: dc73a7fdc6fe4505535657daf8ab3cebe382311fae63a0faaf9315ea1bc30bff - url: "https://pub.dev" - source: hosted - version: "0.3.2" - bs58check: - dependency: "direct main" - description: - name: bs58check - sha256: c4a164d42b25c2f6bc88a8beccb9fc7d01440f3c60ba23663a20a70faf484ea9 - url: "https://pub.dev" - source: hosted - version: "1.0.2" - build: - dependency: transitive - description: - name: build - sha256: ce76b1d48875e3233fde17717c23d1f60a91cc631597e49a400c89b475395b1d - url: "https://pub.dev" - source: hosted - version: "3.1.0" - build_cli_annotations: - dependency: transitive - description: - name: build_cli_annotations - sha256: e563c2e01de8974566a1998410d3f6f03521788160a02503b0b1f1a46c7b3d95 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - build_config: - dependency: transitive - description: - name: build_config - sha256: "4f64382b97504dc2fcdf487d5aae33418e08b4703fc21249e4db6d804a4d0187" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - build_daemon: - dependency: transitive - description: - name: build_daemon - sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957 - url: "https://pub.dev" - source: hosted - version: "4.1.1" - build_resolvers: - dependency: transitive - description: - name: build_resolvers - sha256: d1d57f7807debd7349b4726a19fd32ec8bc177c71ad0febf91a20f84cd2d4b46 - url: "https://pub.dev" - source: hosted - version: "3.0.3" - build_runner: - dependency: "direct dev" - description: - name: build_runner - sha256: b24597fceb695969d47025c958f3837f9f0122e237c6a22cb082a5ac66c3ca30 - url: "https://pub.dev" - source: hosted - version: "2.7.1" - build_runner_core: - dependency: transitive - description: - name: build_runner_core - sha256: "066dda7f73d8eb48ba630a55acb50c4a84a2e6b453b1cb4567f581729e794f7b" - url: "https://pub.dev" - source: hosted - version: "9.3.1" - built_collection: - dependency: transitive - description: - name: built_collection - sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" - url: "https://pub.dev" - source: hosted - version: "5.1.1" - built_value: - dependency: transitive - description: - name: built_value - sha256: "426cf75afdb23aa74bd4e471704de3f9393f3c7b04c1e2d9c6f1073ae0b8b139" - url: "https://pub.dev" - source: hosted - version: "8.12.1" - calendar_date_picker2: - dependency: "direct main" - description: - name: calendar_date_picker2 - sha256: "7b5f20f2a02768df70b3d1fb181c217ab9f8992f39fd6c3fc2ff95b0885820a2" - url: "https://pub.dev" - source: hosted - version: "1.1.9" - camera_linux: - dependency: "direct main" - description: - path: "." - ref: ecb412474c5d240347b04ac1eb9f019802ff7034 - resolved-ref: ecb412474c5d240347b04ac1eb9f019802ff7034 - url: "https://github.com/cypherstack/camera-linux" - source: git - version: "0.0.8" - camera_macos: - dependency: "direct main" - description: - name: camera_macos - sha256: a0e15729caf4e7c2831b9cd964e8c2e2ea985cd816e56316be03355de44aa743 - url: "https://pub.dev" - source: hosted - version: "0.0.9" - camera_platform_interface: - dependency: "direct main" - description: - name: camera_platform_interface - sha256: "98cfc9357e04bad617671b4c1f78a597f25f08003089dd94050709ae54effc63" - url: "https://pub.dev" - source: hosted - version: "2.12.0" - camera_windows: - dependency: "direct main" - description: - path: "packages/camera/camera_windows" - ref: HEAD - resolved-ref: "9bfbfd643ba4e6865ec34124e42a1cc502c400c0" - url: "https://github.com/cypherstack/packages.git" - source: git - version: "0.2.4" - cbor: - dependency: "direct main" - description: - name: cbor - sha256: f5239dd6b6ad24df67d1449e87d7180727d6f43b87b3c9402e6398c7a2d9609b - url: "https://pub.dev" - source: hosted - version: "6.3.7" - characters: - dependency: transitive - description: - name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a - url: "https://pub.dev" - source: hosted - version: "1.4.0" - checked_yaml: - dependency: transitive - description: - name: checked_yaml - sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f" - url: "https://pub.dev" - source: hosted - version: "2.0.4" - cli_config: - dependency: transitive - description: - name: cli_config - sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec - url: "https://pub.dev" - source: hosted - version: "0.2.0" - cli_util: - dependency: transitive - description: - name: cli_util - sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c - url: "https://pub.dev" - source: hosted - version: "0.4.2" - clock: - dependency: transitive - description: - name: clock - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - url: "https://pub.dev" - source: hosted - version: "1.1.2" - code_builder: - dependency: transitive - description: - name: code_builder - sha256: "11654819532ba94c34de52ff5feb52bd81cba1de00ef2ed622fd50295f9d4243" - url: "https://pub.dev" - source: hosted - version: "4.11.0" - coinlib: - dependency: "direct overridden" - description: - path: coinlib - ref: "5c59c7e7d120d9c981f23008fa03421d39fe8631" - resolved-ref: "5c59c7e7d120d9c981f23008fa03421d39fe8631" - url: "https://www.github.com/julian-CStack/coinlib" - source: git - version: "4.1.0" - coinlib_flutter: - dependency: "direct main" - description: - path: coinlib_flutter - ref: "5c59c7e7d120d9c981f23008fa03421d39fe8631" - resolved-ref: "5c59c7e7d120d9c981f23008fa03421d39fe8631" - url: "https://www.github.com/julian-CStack/coinlib" - source: git - version: "4.0.0" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" - source: hosted - version: "1.19.1" - compat: - dependency: "direct main" - description: - path: compat - ref: "44b8c0f8e1cc7ddbfa33c0b3f11279e64646138" - resolved-ref: "44b8c0f8e1cc7ddbfa33c0b3f11279e646461386" - url: "https://github.com/cypherstack/cs_monero" - source: git - version: "2.0.0" - connectivity_plus: - dependency: "direct main" - description: - name: connectivity_plus - sha256: "77a180d6938f78ca7d2382d2240eb626c0f6a735d0bfdce227d8ffb80f95c48b" - url: "https://pub.dev" - source: hosted - version: "4.0.2" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a - url: "https://pub.dev" - source: hosted - version: "1.2.4" - convert: - dependency: "direct main" - description: - name: convert - sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.dev" - source: hosted - version: "3.1.2" - coverage: - dependency: transitive - description: - name: coverage - sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" - url: "https://pub.dev" - source: hosted - version: "1.15.0" - cross_file: - dependency: transitive - description: - name: cross_file - sha256: "701dcfc06da0882883a2657c445103380e53e647060ad8d9dfb710c100996608" - url: "https://pub.dev" - source: hosted - version: "0.3.5+1" - crypto: - dependency: "direct main" - description: - name: crypto - sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf - url: "https://pub.dev" - source: hosted - version: "3.0.7" - cryptography: - dependency: transitive - description: - name: cryptography - sha256: "3eda3029d34ec9095a27a198ac9785630fe525c0eb6a49f3d575272f8e792ef0" - url: "https://pub.dev" - source: hosted - version: "2.9.0" - cs_monero: - dependency: "direct main" - description: - name: cs_monero - sha256: b174f40e1887eb589e1e9aa99de8e9d0bc97b543f2330d5e5e7b01a6d313a9c2 - url: "https://pub.dev" - source: hosted - version: "3.2.0" - cs_monero_flutter_libs: - dependency: "direct main" - description: - name: cs_monero_flutter_libs - sha256: "459542acbfc01ee6f30446c656cba670c7f1b90e52b7921a4aa0dcbc275b9eca" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - cs_monero_flutter_libs_android: - dependency: transitive - description: - name: cs_monero_flutter_libs_android - sha256: f0785f34bcf9872347823303f09409b1238b2ed7e535b9722633b0022d6188f5 - url: "https://pub.dev" - source: hosted - version: "1.1.2" - cs_monero_flutter_libs_android_arm64_v8a: - dependency: transitive - description: - name: cs_monero_flutter_libs_android_arm64_v8a - sha256: "0b836dff1ead29229535a3228c7c57517127bea8b19c4c2d9bdae2770526f8ca" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_monero_flutter_libs_android_armeabi_v7a: - dependency: transitive - description: - name: cs_monero_flutter_libs_android_armeabi_v7a - sha256: "7955bbf91e1c3ec66e352a33e36edbab509808db6db6debfbea06f1ad2396205" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_monero_flutter_libs_android_x86_64: - dependency: transitive - description: - name: cs_monero_flutter_libs_android_x86_64 - sha256: f51f95aa4a09be497befe020621b0d62d749d900f4dfd585fe60b7c9692010a8 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_monero_flutter_libs_ios: - dependency: transitive - description: - name: cs_monero_flutter_libs_ios - sha256: dbc149c0787a7702a3842b4974b9bc30bad654daaa57886f874823c29c390ba7 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_monero_flutter_libs_linux: - dependency: transitive - description: - name: cs_monero_flutter_libs_linux - sha256: "5b8bbc68a7d2bb39efdea4834097ada1aa99fd7e0b1641943c4e06c89f96616e" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_monero_flutter_libs_macos: - dependency: transitive - description: - name: cs_monero_flutter_libs_macos - sha256: ee02b78184b4168bc2bdb49c7ef71cc5019ffbed54c0feabcebdbc4cae5819ee - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_monero_flutter_libs_platform_interface: - dependency: transitive - description: - name: cs_monero_flutter_libs_platform_interface - sha256: "7c832ed033257b82e2c30f1fc764f68fa4e4a780d4836a4f94384aaf9cd44ee7" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - cs_monero_flutter_libs_windows: - dependency: transitive - description: - name: cs_monero_flutter_libs_windows - sha256: "9db54230f83ec07e2dce39b6b90711616ba4ab1144c7f68e4b1c13b161a18cd3" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_salvium: - dependency: "direct main" - description: - name: cs_salvium - sha256: e040a407bb485b177130a86dd6cd817b8cea933bbfae149a73c57a681deaa4a5 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_salvium_flutter_libs: - dependency: "direct main" - description: - name: cs_salvium_flutter_libs - sha256: "05a9f9e3f8cb539a310419d49270492e84d0f89bccb4c31512c854b1fe1f1c5f" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - cs_salvium_flutter_libs_android: - dependency: transitive - description: - name: cs_salvium_flutter_libs_android - sha256: ad9537942f7c1416fbb3432cb154d641262bd18c56471c4f62dd1d2e7e23f125 - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_salvium_flutter_libs_android_arm64_v8a: - dependency: transitive - description: - name: cs_salvium_flutter_libs_android_arm64_v8a - sha256: "4c307cd3276c7aa2a461ebcfc726adf9b4d9427dbdbad120dbe50f54d3690b4e" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_salvium_flutter_libs_android_armeabi_v7a: - dependency: transitive - description: - name: cs_salvium_flutter_libs_android_armeabi_v7a - sha256: "9491e0cdd4452c9c907e137acd2d08f76d33efc7a9d4b86fbfab69224bc9f473" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_salvium_flutter_libs_android_x86_64: - dependency: transitive - description: - name: cs_salvium_flutter_libs_android_x86_64 - sha256: "0b87ccd86bd9b0eeb659dade948d076cddf908d535fe803b769030da8ff406dc" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_salvium_flutter_libs_ios: - dependency: transitive - description: - name: cs_salvium_flutter_libs_ios - sha256: aa474e7da65ba36e23afc4936ffbe39328808619fbdac44dacad9aa3aafb1b08 - url: "https://pub.dev" - source: hosted - version: "2.0.1" - cs_salvium_flutter_libs_linux: - dependency: transitive - description: - name: cs_salvium_flutter_libs_linux - sha256: "8adc16e9d0fb8dc439475ddb2eaa4fcde8433fa2cb6e14ce814b1a40965eda5c" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_salvium_flutter_libs_macos: - dependency: transitive - description: - name: cs_salvium_flutter_libs_macos - sha256: "988077e7affc6443a1b665bac6df3b39269cc1352375cb805bd6d26aac82b46f" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - cs_salvium_flutter_libs_platform_interface: - dependency: transitive - description: - name: cs_salvium_flutter_libs_platform_interface - sha256: "36ef1edd1481b92a95500fbdf397a371c1d624b58401a56638dc315f3c607dc0" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - cs_salvium_flutter_libs_windows: - dependency: transitive - description: - name: cs_salvium_flutter_libs_windows - sha256: "934a1eeb95619df9e23eff13a6a6a356322297abfa6ab871283cdf665cc32c7f" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_wownero: - dependency: "direct main" - description: - name: cs_wownero - sha256: "9ff7a6be0f4524c6b9e5ca1d223df98e9455c7fe3b06f0b519280a175795e925" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - cs_wownero_flutter_libs: - dependency: "direct main" - description: - name: cs_wownero_flutter_libs - sha256: ba1156d015a9f75c841f927ff2ce6565cd7cd37f15aaedd9aaf36703453a9884 - url: "https://pub.dev" - source: hosted - version: "2.0.3" - cs_wownero_flutter_libs_android: - dependency: transitive - description: - name: cs_wownero_flutter_libs_android - sha256: "14fe0666999d078bcd91ca499a9e9395dd270211eedb2250c533cbd036cb328b" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - cs_wownero_flutter_libs_android_arm64_v8a: - dependency: transitive - description: - name: cs_wownero_flutter_libs_android_arm64_v8a - sha256: "19f7e17ce7adf4615685f92b106c7f588dee80bb4768931c2505d2761a9fa06c" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - cs_wownero_flutter_libs_android_armeabi_v7a: - dependency: transitive - description: - name: cs_wownero_flutter_libs_android_armeabi_v7a - sha256: "1b7dc845674c938259dcbce6b9d6e6c305c98c2ff9b83803b00ea0f1268dfb28" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - cs_wownero_flutter_libs_android_x86_64: - dependency: transitive - description: - name: cs_wownero_flutter_libs_android_x86_64 - sha256: c318ce80ef418d53aeef3698c89c0497394269311f8c5b75f160e0f81610f9d9 - url: "https://pub.dev" - source: hosted - version: "1.2.0" - cs_wownero_flutter_libs_ios: - dependency: transitive - description: - name: cs_wownero_flutter_libs_ios - sha256: "9ffd158469a0a45668d89ce56b90e846dd823ffd44ee6997b50b76129e6f613c" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - cs_wownero_flutter_libs_linux: - dependency: transitive - description: - name: cs_wownero_flutter_libs_linux - sha256: "441c9a7b28e28434942709915e6a54ea2392b3261f90c116e03b27b02fce7492" - url: "https://pub.dev" - source: hosted - version: "1.4.0" - cs_wownero_flutter_libs_macos: - dependency: transitive - description: - name: cs_wownero_flutter_libs_macos - sha256: e703975e6a6f698b01e07b238953547391faa4e930f09733d01f1346ee788fc7 - url: "https://pub.dev" - source: hosted - version: "1.2.0" - cs_wownero_flutter_libs_platform_interface: - dependency: transitive - description: - name: cs_wownero_flutter_libs_platform_interface - sha256: "6a3bda9bcf5a904b36cbd0817e7ae8b7a64693e6f532f1783513e93c64436e6f" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - cs_wownero_flutter_libs_windows: - dependency: transitive - description: - name: cs_wownero_flutter_libs_windows - sha256: fe7485863a6e83e31581cef36c62d3507a9ea36c73d56842b4fee059f349cb49 - url: "https://pub.dev" - source: hosted - version: "1.2.0" - csslib: - dependency: transitive - description: - name: csslib - sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - dart_base_x: - dependency: transitive - description: - name: dart_base_x - sha256: c8af4f6a6518daab4aa85bb27ee148221644e80446bb44117052b6f4674cdb23 - url: "https://pub.dev" - source: hosted - version: "1.0.0" - dart_bs58: - dependency: "direct main" - description: - name: dart_bs58 - sha256: e2fff08fca810d5215f6fca3ea713d8a4a9728aaf1b1658472863b2de7377234 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - dart_bs58check: - dependency: "direct main" - description: - path: "." - ref: bed60e43e4e509ea45bb097e6caee9f8293ddf98 - resolved-ref: bed60e43e4e509ea45bb097e6caee9f8293ddf98 - url: "https://github.com/cypherstack/dart-bs58check" - source: git - version: "3.0.2" - dart_numerics: - dependency: "direct main" - description: - name: dart_numerics - sha256: "47408d4890551636204851325e5649bf1a1616ebc325184c36722a1716cbaba4" - url: "https://pub.dev" - source: hosted - version: "0.0.6" - dart_style: - dependency: transitive - description: - name: dart_style - sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b - url: "https://pub.dev" - source: hosted - version: "3.1.3" - dartx: - dependency: transitive - description: - name: dartx - sha256: "8b25435617027257d43e6508b5fe061012880ddfdaa75a71d607c3de2a13d244" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - dbus: - dependency: transitive - description: - name: dbus - sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" - url: "https://pub.dev" - source: hosted - version: "0.7.11" - decimal: - dependency: "direct main" - description: - name: decimal - sha256: fc706a5618b81e5b367b01dd62621def37abc096f2b46a9bd9068b64c1fa36d0 - url: "https://pub.dev" - source: hosted - version: "3.2.4" - dependency_validator: - dependency: "direct dev" - description: - name: dependency_validator - sha256: a5928c0e3773808027bdafeb13fb4be0e4fdd79819773ad3df34d0fcf42636f2 - url: "https://pub.dev" - source: hosted - version: "5.0.3" - desktop_drop: - dependency: "direct main" - description: - name: desktop_drop - sha256: d55a010fe46c8e8fcff4ea4b451a9ff84a162217bdb3b2a0aa1479776205e15d - url: "https://pub.dev" - source: hosted - version: "0.4.4" - device_info_plus: - dependency: "direct main" - description: - name: device_info_plus - sha256: a7fd703482b391a87d60b6061d04dfdeab07826b96f9abd8f5ed98068acc0074 - url: "https://pub.dev" - source: hosted - version: "10.1.2" - device_info_plus_platform_interface: - dependency: transitive - description: - name: device_info_plus_platform_interface - sha256: e1ea89119e34903dca74b883d0dd78eb762814f97fb6c76f35e9ff74d261a18f - url: "https://pub.dev" - source: hosted - version: "7.0.3" - devicelocale: - dependency: "direct main" - description: - path: "." - ref: ba7d7d87a3772e972adb1358a5ec9a111b514fce - resolved-ref: ba7d7d87a3772e972adb1358a5ec9a111b514fce - url: "https://github.com/cypherstack/flutter-devicelocale" - source: git - version: "0.8.1" - digest_auth: - dependency: "direct main" - description: - name: digest_auth - sha256: c8f4a8d65300bd58c4a2ca84ea6bd63cb584e8021e5689c600ee7efae34d73ea - url: "https://pub.dev" - source: hosted - version: "1.0.1" - dio: - dependency: transitive - description: - name: dio - sha256: d90ee57923d1828ac14e492ca49440f65477f4bb1263575900be731a3dac66a9 - url: "https://pub.dev" - source: hosted - version: "5.9.0" - dio_web_adapter: - dependency: transitive - description: - name: dio_web_adapter - sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - drift: - dependency: "direct main" - description: - name: drift - sha256: "3669e1b68d7bffb60192ac6ba9fd2c0306804d7a00e5879f6364c69ecde53a7f" - url: "https://pub.dev" - source: hosted - version: "2.30.0" - drift_dev: - dependency: "direct dev" - description: - name: drift_dev - sha256: afe4d1d2cfce6606c86f11a6196e974a2ddbfaa992956ce61e054c9b1899c769 - url: "https://pub.dev" - source: hosted - version: "2.30.0" - drift_flutter: - dependency: "direct main" - description: - name: drift_flutter - sha256: c07120854742a0cae2f7501a0da02493addde550db6641d284983c08762e60a7 - url: "https://pub.dev" - source: hosted - version: "0.2.8" - dropdown_button2: - dependency: "direct main" - description: - name: dropdown_button2 - sha256: b0fe8d49a030315e9eef6c7ac84ca964250155a6224d491c1365061bc974a9e1 - url: "https://pub.dev" - source: hosted - version: "2.3.9" - ed25519_hd_key: - dependency: transitive - description: - name: ed25519_hd_key - sha256: "31e191ec97492873067e46dc9cc0c7d55170559c83a478400feffa0627acaccf" - url: "https://pub.dev" - source: hosted - version: "2.3.0" - eip1559: - dependency: transitive - description: - name: eip1559 - sha256: c2b81ac85f3e0e71aaf558201dd9a4600f051ece7ebacd0c5d70065c9b458004 - url: "https://pub.dev" - source: hosted - version: "0.6.2" - eip55: - dependency: transitive - description: - name: eip55 - sha256: a81d6afe386ec965e584541fe8f19719bed8a7ae23a5f5061112e96c50e6521b - url: "https://pub.dev" - source: hosted - version: "1.0.3" - electrum_adapter: - dependency: "direct main" - description: - path: "." - ref: b6fa44d015d3bfa06934b73219928c29ca48a290 - resolved-ref: b6fa44d015d3bfa06934b73219928c29ca48a290 - url: "https://github.com/cypherstack/electrum_adapter.git" - source: git - version: "3.0.2" - emojis: - dependency: "direct main" - description: - name: emojis - sha256: "2e4d847c3f1e2670f30dc355909ce6fa7808b4e626c34a4dd503a360995a38bf" - url: "https://pub.dev" - source: hosted - version: "0.9.9" - equatable: - dependency: "direct main" - description: - name: equatable - sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7" - url: "https://pub.dev" - source: hosted - version: "2.0.7" - ethereum_addresses: - dependency: "direct main" - description: - path: "." - ref: "6a5d3d69e54c175ae44b44040fb2743c9b6405a6" - resolved-ref: "6a5d3d69e54c175ae44b44040fb2743c9b6405a6" - url: "https://github.com/cypherstack/dart-ethereum_address" - source: git - version: "1.0.3" - event_bus: - dependency: "direct main" - description: - name: event_bus - sha256: "1a55e97923769c286d295240048fc180e7b0768902c3c2e869fe059aafa15304" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - ffi: - dependency: "direct main" - description: - name: ffi - sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.dev" - source: hosted - version: "7.0.1" - file_picker: - dependency: "direct main" - description: - name: file_picker - sha256: f2d9f173c2c14635cc0e9b14c143c49ef30b4934e8d1d274d6206fcb0086a06f - url: "https://pub.dev" - source: hosted - version: "10.3.3" - fixnum: - dependency: "direct main" - description: - name: fixnum - sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" - source: hosted - version: "1.1.1" - fixnum_nanodart: - dependency: transitive - description: - name: fixnum_nanodart - sha256: "4b0132d11ecddc0d2ca64b6d7dee6726db432ed02cac1349d7532a08be5c54fc" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_driver: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - flutter_hooks: - dependency: "direct main" - description: - name: flutter_hooks - sha256: cde36b12f7188c85286fba9b38cc5a902e7279f36dd676967106c041dc9dde70 - url: "https://pub.dev" - source: hosted - version: "0.20.5" - flutter_launcher_icons: - dependency: "direct dev" - description: - name: flutter_launcher_icons - sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" - url: "https://pub.dev" - source: hosted - version: "0.13.1" - flutter_libepiccash: - dependency: "direct main" - description: - path: "crypto_plugins/flutter_libepiccash" - relative: true - source: path - version: "0.0.1" - flutter_libmwc: - dependency: "direct main" - description: - path: "crypto_plugins/flutter_libmwc" - relative: true - source: path - version: "0.0.1" - flutter_libsparkmobile: - dependency: "direct main" - description: - path: "." - ref: "4bd84c88e1b2a817a2604ec53030634cc3304bc7" - resolved-ref: "4bd84c88e1b2a817a2604ec53030634cc3304bc7" - url: "https://github.com/cypherstack/flutter_libsparkmobile.git" - source: git - version: "0.1.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - flutter_local_notifications: - dependency: "direct main" - description: - name: flutter_local_notifications - sha256: "674173fd3c9eda9d4c8528da2ce0ea69f161577495a9cc835a2a4ecd7eadeb35" - url: "https://pub.dev" - source: hosted - version: "17.2.4" - flutter_local_notifications_linux: - dependency: transitive - description: - name: flutter_local_notifications_linux - sha256: c49bd06165cad9beeb79090b18cd1eb0296f4bf4b23b84426e37dd7c027fc3af - url: "https://pub.dev" - source: hosted - version: "4.0.1" - flutter_local_notifications_platform_interface: - dependency: transitive - description: - name: flutter_local_notifications_platform_interface - sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66" - url: "https://pub.dev" - source: hosted - version: "7.2.0" - flutter_mwebd: - dependency: "direct main" - description: - name: flutter_mwebd - sha256: "14f2a331b2621b78ddf62081ca8a466f6a2b4352a66950fffd68615c14e63edf" - url: "https://pub.dev" - source: hosted - version: "0.0.1-pre.11" - flutter_native_splash: - dependency: "direct main" - description: - name: flutter_native_splash - sha256: "17d9671396fb8ec45ad10f4a975eb8a0f70bedf0fdaf0720b31ea9de6da8c4da" - url: "https://pub.dev" - source: hosted - version: "2.3.7" - flutter_plugin_android_lifecycle: - dependency: transitive - description: - name: flutter_plugin_android_lifecycle - sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1 - url: "https://pub.dev" - source: hosted - version: "2.0.33" - flutter_riverpod: - dependency: "direct main" - description: - name: flutter_riverpod - sha256: d84e180f039a6b963e610d2e4435641fdfe8f12437e8770e963632e05af16d80 - url: "https://pub.dev" - source: hosted - version: "1.0.4" - flutter_rust_bridge: - dependency: transitive - description: - name: flutter_rust_bridge - sha256: "37ef40bc6f863652e865f0b2563ea07f0d3c58d8efad803cc01933a4b2ee067e" - url: "https://pub.dev" - source: hosted - version: "2.11.1" - flutter_secure_storage: - dependency: "direct main" - description: - name: flutter_secure_storage - sha256: "22dbf16f23a4bcf9d35e51be1c84ad5bb6f627750565edd70dab70f3ff5fff8f" - url: "https://pub.dev" - source: hosted - version: "8.1.0" - flutter_secure_storage_linux: - dependency: transitive - description: - name: flutter_secure_storage_linux - sha256: be76c1d24a97d0b98f8b54bce6b481a380a6590df992d0098f868ad54dc8f688 - url: "https://pub.dev" - source: hosted - version: "1.2.3" - flutter_secure_storage_macos: - dependency: transitive - description: - name: flutter_secure_storage_macos - sha256: "6c0a2795a2d1de26ae202a0d78527d163f4acbb11cde4c75c670f3a0fc064247" - url: "https://pub.dev" - source: hosted - version: "3.1.3" - flutter_secure_storage_platform_interface: - dependency: transitive - description: - name: flutter_secure_storage_platform_interface - sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 - url: "https://pub.dev" - source: hosted - version: "1.1.2" - flutter_secure_storage_web: - dependency: transitive - description: - name: flutter_secure_storage_web - sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 - url: "https://pub.dev" - source: hosted - version: "1.2.1" - flutter_secure_storage_windows: - dependency: transitive - description: - name: flutter_secure_storage_windows - sha256: "38f9501c7cb6f38961ef0e1eacacee2b2d4715c63cc83fe56449c4d3d0b47255" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - flutter_svg: - dependency: "direct main" - description: - name: flutter_svg - sha256: "87fbd7c534435b6c5d9d98b01e1fd527812b82e68ddd8bd35fc45ed0fa8f0a95" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - freezed: - dependency: "direct overridden" - description: - name: freezed - sha256: "03dd9b7423ff0e31b7e01b2204593e5e1ac5ee553b6ea9d8184dff4a26b9fb07" - url: "https://pub.dev" - source: hosted - version: "3.2.4" - freezed_annotation: - dependency: "direct overridden" - description: - name: freezed_annotation - sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.dev" - source: hosted - version: "4.0.0" - frostdart: - dependency: "direct main" - description: - path: "crypto_plugins/frostdart" - relative: true - source: path - version: "0.0.1" - fuchsia_remote_debug_protocol: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - fusiondart: - dependency: "direct main" - description: - path: "." - ref: "14427bcbbe1e754bce4a1b93cdb0a31ce56d792b" - resolved-ref: "14427bcbbe1e754bce4a1b93cdb0a31ce56d792b" - url: "https://github.com/cypherstack/fusiondart.git" - source: git - version: "1.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de - url: "https://pub.dev" - source: hosted - version: "2.1.3" - google_fonts: - dependency: "direct main" - description: - name: google_fonts - sha256: "517b20870220c48752eafa0ba1a797a092fb22df0d89535fd9991e86ee2cdd9c" - url: "https://pub.dev" - source: hosted - version: "6.3.2" - google_identity_services_web: - dependency: transitive - description: - name: google_identity_services_web - sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454" - url: "https://pub.dev" - source: hosted - version: "0.3.3+1" - googleapis_auth: - dependency: transitive - description: - name: googleapis_auth - sha256: b81fe352cc4a330b3710d2b7ad258d9bcef6f909bb759b306bf42973a7d046db - url: "https://pub.dev" - source: hosted - version: "2.0.0" - graphs: - dependency: transitive - description: - name: graphs - sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - grpc: - dependency: transitive - description: - name: grpc - sha256: "2dde469ddd8bbd7a33a0765da417abe1ad2142813efce3a86c512041294e2b26" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - hex: - dependency: "direct main" - description: - name: hex - sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a" - url: "https://pub.dev" - source: hosted - version: "0.2.0" - hive: - dependency: transitive - description: - name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" - source: hosted - version: "2.2.3" - hive_ce: - dependency: "direct main" - description: - name: hive_ce - sha256: "81d39a03c4c0ba5938260a8c3547d2e71af59defecea21793d57fc3551f0d230" - url: "https://pub.dev" - source: hosted - version: "2.15.1" - hive_ce_flutter: - dependency: "direct main" - description: - name: hive_ce_flutter - sha256: "26d656c9e8974f0732f1d09020e2d7b08ba841b8961a02dbfb6caf01474b0e9a" - url: "https://pub.dev" - source: hosted - version: "2.3.3" - hive_ce_generator: - dependency: "direct dev" - description: - name: hive_ce_generator - sha256: a169feeff2da9cc2c417ce5ae9bcebf7c8a95d7a700492b276909016ad70a786 - url: "https://pub.dev" - source: hosted - version: "1.9.3" - hive_test: - dependency: "direct dev" - description: - name: hive_test - sha256: dd7a5cf0be7af288566a96180b5d07574023777aa947ef252b69046ec36d8eb2 - url: "https://pub.dev" - source: hosted - version: "1.0.1" - html: - dependency: transitive - description: - name: html - sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602" - url: "https://pub.dev" - source: hosted - version: "0.15.6" - http: - dependency: "direct main" - description: - name: http - sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" - url: "https://pub.dev" - source: hosted - version: "1.6.0" - http2: - dependency: transitive - description: - name: http2 - sha256: "382d3aefc5bd6dc68c6b892d7664f29b5beb3251611ae946a98d35158a82bbfa" - url: "https://pub.dev" - source: hosted - version: "2.3.1" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.dev" - source: hosted - version: "3.2.2" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" - source: hosted - version: "4.1.2" - ieee754: - dependency: transitive - description: - name: ieee754 - sha256: "7d87451c164a56c156180d34a4e93779372edd191d2c219206100b976203128c" - url: "https://pub.dev" - source: hosted - version: "1.0.3" - image: - dependency: "direct main" - description: - name: image - sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" - url: "https://pub.dev" - source: hosted - version: "4.5.4" - import_sorter: - dependency: "direct dev" - description: - name: import_sorter - sha256: eb15738ccead84e62c31e0208ea4e3104415efcd4972b86906ca64a1187d0836 - url: "https://pub.dev" - source: hosted - version: "4.6.0" - integration_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - intl: - dependency: "direct main" - description: - name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf - url: "https://pub.dev" - source: hosted - version: "0.19.0" - io: - dependency: transitive - description: - name: io - sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b - url: "https://pub.dev" - source: hosted - version: "1.0.5" - isar_community: - dependency: "direct main" - description: - name: isar_community - sha256: eae4a7e659bec0f92fc953afb8738512062df6a2ff99fe838cb53f9ed4fa6e97 - url: "https://pub.dev" - source: hosted - version: "3.3.0-dev.2" - isar_community_flutter_libs: - dependency: "direct main" - description: - name: isar_community_flutter_libs - sha256: e8e6668d2c20ed61af9422bddc0bc3d1f6db91e3a5dae4406379a1426c06fbff - url: "https://pub.dev" - source: hosted - version: "3.3.0-dev.2" - isar_community_generator: - dependency: "direct dev" - description: - name: isar_community_generator - sha256: "9da90eafaecf2ec482f50854373e37f3d9e33387830dbc0265bcdb74d9036e74" - url: "https://pub.dev" - source: hosted - version: "3.3.0-dev.2" - isolate_channel: - dependency: transitive - description: - name: isolate_channel - sha256: f3d36f783b301e6b312c3450eeb2656b0e7d1db81331af2a151d9083a3f6b18d - url: "https://pub.dev" - source: hosted - version: "0.2.2+1" - js: - dependency: transitive - description: - name: js - sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 - url: "https://pub.dev" - source: hosted - version: "0.6.7" - json_annotation: - dependency: transitive - description: - name: json_annotation - sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" - url: "https://pub.dev" - source: hosted - version: "4.9.0" - json_rpc_2: - dependency: "direct overridden" - description: - name: json_rpc_2 - sha256: "3c46c2633aec07810c3d6a2eb08d575b5b4072980db08f1344e66aeb53d6e4a7" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - json_serializable: - dependency: transitive - description: - name: json_serializable - sha256: c5b2ee75210a0f263c6c7b9eeea80553dbae96ea1bf57f02484e806a3ffdffa3 - url: "https://pub.dev" - source: hosted - version: "6.11.2" - jsontool: - dependency: transitive - description: - name: jsontool - sha256: e49bf419e82d90f009426cd7fdec8d54ba8382975b3454ed16a3af3ee1d1b697 - url: "https://pub.dev" - source: hosted - version: "2.1.0" - keyboard_dismisser: - dependency: "direct main" - description: - name: keyboard_dismisser - sha256: f67e032581fc3dd1f77e1cb54c421b089e015d122aeba2490ba001cfcc42a181 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.dev" - source: hosted - version: "11.0.2" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.dev" - source: hosted - version: "3.0.10" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - lints: - dependency: transitive - description: - name: lints - sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 - url: "https://pub.dev" - source: hosted - version: "3.0.0" - local_auth: - dependency: "direct main" - description: - name: local_auth - sha256: "434d854cf478f17f12ab29a76a02b3067f86a63a6d6c4eb8fbfdcfe4879c1b7b" - url: "https://pub.dev" - source: hosted - version: "2.3.0" - local_auth_android: - dependency: transitive - description: - name: local_auth_android - sha256: a0bdfcc0607050a26ef5b31d6b4b254581c3d3ce3c1816ab4d4f4a9173e84467 - url: "https://pub.dev" - source: hosted - version: "1.0.56" - local_auth_darwin: - dependency: transitive - description: - name: local_auth_darwin - sha256: "699873970067a40ef2f2c09b4c72eb1cfef64224ef041b3df9fdc5c4c1f91f49" - url: "https://pub.dev" - source: hosted - version: "1.6.1" - local_auth_platform_interface: - dependency: transitive - description: - name: local_auth_platform_interface - sha256: f98b8e388588583d3f781f6806e4f4c9f9e189d898d27f0c249b93a1973dd122 - url: "https://pub.dev" - source: hosted - version: "1.1.0" - local_auth_windows: - dependency: transitive - description: - name: local_auth_windows - sha256: bc4e66a29b0fdf751aafbec923b5bed7ad6ed3614875d8151afe2578520b2ab5 - url: "https://pub.dev" - source: hosted - version: "1.0.11" - logger: - dependency: "direct main" - description: - path: "." - ref: "3c0cba27868ebb5c7d65ebc30a8e6e5342186692" - resolved-ref: "3c0cba27868ebb5c7d65ebc30a8e6e5342186692" - url: "https://github.com/cypherstack/logger" - source: git - version: "2.5.0" - logging: - dependency: transitive - description: - name: logging - sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.dev" - source: hosted - version: "1.3.0" - lottie: - dependency: "direct main" - description: - name: lottie - sha256: "8ae0be46dbd9e19641791dc12ee480d34e1fd3f84c749adc05f3ad9342b71b95" - url: "https://pub.dev" - source: hosted - version: "3.3.2" - matcher: - dependency: transitive - description: - name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 - url: "https://pub.dev" - source: hosted - version: "0.12.17" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec - url: "https://pub.dev" - source: hosted - version: "0.11.1" - memoize: - dependency: transitive - description: - name: memoize - sha256: "51481d328c86cbdc59711369179bac88551ca0556569249be5317e66fc796cac" - url: "https://pub.dev" - source: hosted - version: "3.0.0" - meta: - dependency: "direct main" - description: - name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" - url: "https://pub.dev" - source: hosted - version: "1.17.0" - mime: - dependency: transitive - description: - name: mime - sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a" - url: "https://pub.dev" - source: hosted - version: "1.0.6" - mobile_app_privacy: - dependency: "direct main" - description: - path: "." - ref: "v0.0.3" - resolved-ref: a949b6e79aa2c97af9d339690067800a5c5eb89e - url: "https://github.com/cypherstack/mobile_app_privacy" - source: git - version: "0.0.3" - mockingjay: - dependency: "direct dev" - description: - name: mockingjay - sha256: b05c786d68da95286274470ad53d9ca98198d168300005500bdd348fbf6a503a - url: "https://pub.dev" - source: hosted - version: "0.2.0" - mockito: - dependency: "direct dev" - description: - name: mockito - sha256: dac24d461418d363778d53198d9ac0510b9d073869f078450f195766ec48d05e - url: "https://pub.dev" - source: hosted - version: "5.6.1" - mocktail: - dependency: transitive - description: - name: mocktail - sha256: dd85ca5229cf677079fd9ac740aebfc34d9287cdf294e6b2ba9fae25c39e4dc2 - url: "https://pub.dev" - source: hosted - version: "0.2.0" - monero_rpc: - dependency: "direct main" - description: - name: monero_rpc - sha256: "6052b6812e3e831015d776645d0d880fce5b9632d9df2cacae54b5e10ffe2db5" - url: "https://pub.dev" - source: hosted - version: "2.0.0" - mutex: - dependency: "direct main" - description: - name: mutex - sha256: "8827da25de792088eb33e572115a5eb0d61d61a3c01acbc8bcbe76ed78f1a1f2" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - mweb_client: - dependency: "direct main" - description: - name: mweb_client - sha256: "263ba560dab7e63a1d03875d455a19cc4a1ab9720786cd9d6ffcc42127d06732" - url: "https://pub.dev" - source: hosted - version: "0.2.0" - namecoin: - dependency: "direct main" - description: - path: "." - ref: "73a29731ba493595fed331d92c7a4b5604fd6e23" - resolved-ref: "73a29731ba493595fed331d92c7a4b5604fd6e23" - url: "https://github.com/cypherstack/namecoin_dart" - source: git - version: "2.0.1" - nanodart: - dependency: "direct main" - description: - path: "." - ref: "1d3f30c8abd36d352a8b3147426308b77c77484e" - resolved-ref: "1d3f30c8abd36d352a8b3147426308b77c77484e" - url: "https://github.com/cypherstack/nanodart" - source: git - version: "2.0.1" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" - source: hosted - version: "2.0.2" - on_chain: - dependency: "direct main" - description: - name: on_chain - sha256: "6b6792f7da9ea23003cd6f0fc8c2930c049f50bb61499333c0492893b7608072" - url: "https://pub.dev" - source: hosted - version: "4.5.0" - package_config: - dependency: transitive - description: - name: package_config - sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.dev" - source: hosted - version: "2.2.0" - package_info_plus: - dependency: "direct main" - description: - name: package_info_plus - sha256: "16eee997588c60225bda0488b6dcfac69280a6b7a3cf02c741895dd370a02968" - url: "https://pub.dev" - source: hosted - version: "8.3.1" - package_info_plus_platform_interface: - dependency: transitive - description: - name: package_info_plus_platform_interface - sha256: "202a487f08836a592a6bd4f901ac69b3a8f146af552bbd14407b6b41e1c3f086" - url: "https://pub.dev" - source: hosted - version: "3.2.1" - path: - dependency: "direct main" - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - path_parsing: - dependency: transitive - description: - name: path_parsing - sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - path_provider: - dependency: "direct main" - description: - name: path_provider - sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" - url: "https://pub.dev" - source: hosted - version: "2.1.5" - path_provider_android: - dependency: transitive - description: - name: path_provider_android - sha256: f2c65e21139ce2c3dad46922be8272bb5963516045659e71bb16e151c93b580e - url: "https://pub.dev" - source: hosted - version: "2.2.22" - path_provider_foundation: - dependency: transitive - description: - name: path_provider_foundation - sha256: "6d13aece7b3f5c5a9731eaf553ff9dcbc2eff41087fd2df587fd0fed9a3eb0c4" - url: "https://pub.dev" - source: hosted - version: "2.5.1" - path_provider_linux: - dependency: transitive - description: - name: path_provider_linux - sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 - url: "https://pub.dev" - source: hosted - version: "2.2.1" - path_provider_platform_interface: - dependency: transitive - description: - name: path_provider_platform_interface - sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - path_provider_windows: - dependency: transitive - description: - name: path_provider_windows - sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 - url: "https://pub.dev" - source: hosted - version: "2.3.0" - permission_handler: - dependency: "direct main" - description: - name: permission_handler - sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1 - url: "https://pub.dev" - source: hosted - version: "12.0.1" - permission_handler_android: - dependency: transitive - description: - name: permission_handler_android - sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6" - url: "https://pub.dev" - source: hosted - version: "13.0.1" - permission_handler_apple: - dependency: transitive - description: - name: permission_handler_apple - sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023 - url: "https://pub.dev" - source: hosted - version: "9.4.7" - permission_handler_html: - dependency: transitive - description: - name: permission_handler_html - sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" - url: "https://pub.dev" - source: hosted - version: "0.1.3+5" - permission_handler_platform_interface: - dependency: transitive - description: - name: permission_handler_platform_interface - sha256: eb99b295153abce5d683cac8c02e22faab63e50679b937fa1bf67d58bb282878 - url: "https://pub.dev" - source: hosted - version: "4.3.0" - permission_handler_windows: - dependency: transitive - description: - name: permission_handler_windows - sha256: "1a790728016f79a41216d88672dbc5df30e686e811ad4e698bfc51f76ad91f1e" - url: "https://pub.dev" - source: hosted - version: "0.2.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - pinenacl: - dependency: transitive - description: - name: pinenacl - sha256: "57e907beaacbc3c024a098910b6240758e899674de07d6949a67b52fd984cbdf" - url: "https://pub.dev" - source: hosted - version: "0.6.0" - platform: - dependency: transitive - description: - name: platform - sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" - url: "https://pub.dev" - source: hosted - version: "3.1.6" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - pointycastle: - dependency: "direct main" - description: - name: pointycastle - sha256: "92aa3841d083cc4b0f4709b5c74fd6409a3e6ba833ffc7dc6a8fee096366acf5" - url: "https://pub.dev" - source: hosted - version: "4.0.0" - pool: - dependency: transitive - description: - name: pool - sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" - url: "https://pub.dev" - source: hosted - version: "1.5.2" - posix: - dependency: transitive - description: - name: posix - sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61" - url: "https://pub.dev" - source: hosted - version: "6.0.3" - pretty_dio_logger: - dependency: transitive - description: - name: pretty_dio_logger - sha256: "36f2101299786d567869493e2f5731de61ce130faa14679473b26905a92b6407" - url: "https://pub.dev" - source: hosted - version: "1.4.0" - process: - dependency: transitive - description: - name: process - sha256: c6248e4526673988586e8c00bb22a49210c258dc91df5227d5da9748ecf79744 - url: "https://pub.dev" - source: hosted - version: "5.0.5" - protobuf: - dependency: transitive - description: - name: protobuf - sha256: de9c9eb2c33f8e933a42932fe1dc504800ca45ebc3d673e6ed7f39754ee4053e - url: "https://pub.dev" - source: hosted - version: "4.2.0" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" - url: "https://pub.dev" - source: hosted - version: "2.2.0" - pubspec_parse: - dependency: transitive - description: - name: pubspec_parse - sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082" - url: "https://pub.dev" - source: hosted - version: "1.5.0" - qr: - dependency: transitive - description: - name: qr - sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - qr_code_scanner_plus: - dependency: "direct main" - description: - name: qr_code_scanner_plus - sha256: b764e5004251c58d9dee0c295e6006e05bd8d249e78ac3383abdb5afe0a996cd - url: "https://pub.dev" - source: hosted - version: "2.0.14" - qr_flutter: - dependency: "direct main" - description: - name: qr_flutter - sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" - url: "https://pub.dev" - source: hosted - version: "4.1.0" - quiver: - dependency: transitive - description: - name: quiver - sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 - url: "https://pub.dev" - source: hosted - version: "3.2.2" - rational: - dependency: transitive - description: - name: rational - sha256: cb808fb6f1a839e6fc5f7d8cb3b0a10e1db48b3be102de73938c627f0b636336 - url: "https://pub.dev" - source: hosted - version: "2.2.3" - recase: - dependency: transitive - description: - name: recase - sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 - url: "https://pub.dev" - source: hosted - version: "4.1.0" - retry: - dependency: transitive - description: - name: retry - sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - riverpod: - dependency: transitive - description: - name: riverpod - sha256: e7f097159b9512f5953ff544164c19057f45ce28fd0cb971fc4cad1f7b28217d - url: "https://pub.dev" - source: hosted - version: "1.0.3" - saf_stream: - dependency: "direct main" - description: - name: saf_stream - sha256: c05449997698c481a03e428162a999f93b1ee1bcc0349d651899a59f7b10230a - url: "https://pub.dev" - source: hosted - version: "0.12.3" - saf_util: - dependency: "direct main" - description: - name: saf_util - sha256: "219f983e5f17b28998335158cdc97add9d52af9884e38b5a43f10dcc070510ec" - url: "https://pub.dev" - source: hosted - version: "0.11.0" - sec: - dependency: transitive - description: - name: sec - sha256: "52a93800943642e0b5225408d0973a1837e2452b9aa8a501fdfbc8e76b6ac135" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - share_plus: - dependency: "direct main" - description: - name: share_plus - sha256: "3ef39599b00059db0990ca2e30fca0a29d8b37aae924d60063f8e0184cf20900" - url: "https://pub.dev" - source: hosted - version: "7.2.2" - share_plus_platform_interface: - dependency: transitive - description: - name: share_plus_platform_interface - sha256: "251eb156a8b5fa9ce033747d73535bf53911071f8d3b6f4f0b578505ce0d4496" - url: "https://pub.dev" - source: hosted - version: "3.4.0" - shelf: - dependency: transitive - description: - name: shelf - sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.dev" - source: hosted - version: "1.4.2" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 - url: "https://pub.dev" - source: hosted - version: "1.1.3" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" - url: "https://pub.dev" - source: hosted - version: "3.0.0" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - socks5_proxy: - dependency: "direct main" - description: - name: socks5_proxy - sha256: e0cba6917cd374de6f6cb0ce081e50e6efc24c61644b8e9f20c8bf8b91bb0b75 - url: "https://pub.dev" - source: hosted - version: "1.0.3+dev.3" - socks_socket: - dependency: transitive - description: - name: socks_socket - sha256: "53bc7eae40a3aa16ea810b0e9de3bb23ba7beb0b40d09357b89190f2f44374cc" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - solana: - dependency: "direct main" - description: - path: "packages/solana" - ref: dea799c20bc917f72b18c916ca96bc99fb1bd1c5 - resolved-ref: dea799c20bc917f72b18c916ca96bc99fb1bd1c5 - url: "https://github.com/cypherstack/espresso-cash-public.git" - source: git - version: "0.31.0" - source_gen: - dependency: transitive - description: - name: source_gen - sha256: "7b19d6ba131c6eb98bfcbf8d56c1a7002eba438af2e7ae6f8398b2b0f4f381e3" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - source_helper: - dependency: transitive - description: - name: source_helper - sha256: "6a3c6cc82073a8797f8c4dc4572146114a39652851c157db37e964d9c7038723" - url: "https://pub.dev" - source: hosted - version: "1.3.8" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b - url: "https://pub.dev" - source: hosted - version: "2.1.2" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" - url: "https://pub.dev" - source: hosted - version: "0.10.13" - source_span: - dependency: transitive - description: - name: source_span - sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" - url: "https://pub.dev" - source: hosted - version: "1.10.1" - sqlite3: - dependency: "direct main" - description: - name: sqlite3 - sha256: f393d92c71bdcc118d6203d07c991b9be0f84b1a6f89dd4f7eed348131329924 - url: "https://pub.dev" - source: hosted - version: "2.9.0" - sqlite3_flutter_libs: - dependency: "direct main" - description: - name: sqlite3_flutter_libs - sha256: ccd29dd6cf6fb9351fa07cd6f92895809adbf0779c1d986acf5e3d53b3250e33 - url: "https://pub.dev" - source: hosted - version: "0.5.25" - sqlparser: - dependency: transitive - description: - name: sqlparser - sha256: "162435ede92bcc793ea939fdc0452eef0a73d11f8ed053b58a89792fba749da5" - url: "https://pub.dev" - source: hosted - version: "0.42.1" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://pub.dev" - source: hosted - version: "1.12.1" - stack_wallet_backup: - dependency: "direct main" - description: - path: "." - ref: "5efe8f8f259317d32b6f037cf91f62e06125c040" - resolved-ref: "5efe8f8f259317d32b6f037cf91f62e06125c040" - url: "https://github.com/cypherstack/stack_wallet_backup.git" - source: git - version: "0.0.1" - state_notifier: - dependency: transitive - description: - name: state_notifier - sha256: "8fe42610f179b843b12371e40db58c9444f8757f8b69d181c97e50787caed289" - url: "https://pub.dev" - source: hosted - version: "0.7.2+1" - stellar_flutter_sdk: - dependency: "direct main" - description: - name: stellar_flutter_sdk - sha256: eb07752e11c6365ee59a666f7a95964f761ec05250b0cecaf14698ebc66b09b0 - url: "https://pub.dev" - source: hosted - version: "2.1.8" - stream_channel: - dependency: "direct main" - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - stream_transform: - dependency: transitive - description: - name: stream_transform - sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871 - url: "https://pub.dev" - source: hosted - version: "2.1.1" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" - source: hosted - version: "1.4.1" - string_validator: - dependency: "direct main" - description: - name: string_validator - sha256: "50dd8ecf91db6a732f4a851eeae81ee12406eedc62d0da72f2d91a04a2d10dd8" - url: "https://pub.dev" - source: hosted - version: "0.3.0" - sync_http: - dependency: transitive - description: - name: sync_http - sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" - url: "https://pub.dev" - source: hosted - version: "0.3.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - test: - dependency: transitive - description: - name: test - sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7" - url: "https://pub.dev" - source: hosted - version: "1.26.3" - test_api: - dependency: transitive - description: - name: test_api - sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 - url: "https://pub.dev" - source: hosted - version: "0.7.7" - test_core: - dependency: transitive - description: - name: test_core - sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0" - url: "https://pub.dev" - source: hosted - version: "0.6.12" - tezart: - dependency: "direct main" - description: - path: "." - ref: "210fe8bbb93a9e0bcbc8e99894c261f53097d5e2" - resolved-ref: "210fe8bbb93a9e0bcbc8e99894c261f53097d5e2" - url: "https://github.com/cypherstack/tezart.git" - source: git - version: "2.0.5" - time: - dependency: transitive - description: - name: time - sha256: "370572cf5d1e58adcb3e354c47515da3f7469dac3a95b447117e728e7be6f461" - url: "https://pub.dev" - source: hosted - version: "2.1.5" - timezone: - dependency: transitive - description: - name: timezone - sha256: "2236ec079a174ce07434e89fcd3fcda430025eb7692244139a9cf54fdcf1fc7d" - url: "https://pub.dev" - source: hosted - version: "0.9.4" - timing: - dependency: transitive - description: - name: timing - sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe" - url: "https://pub.dev" - source: hosted - version: "1.0.2" - tint: - dependency: transitive - description: - name: tint - sha256: "9652d9a589f4536d5e392cf790263d120474f15da3cf1bee7f1fdb31b4de5f46" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - toml: - dependency: transitive - description: - name: toml - sha256: d968d149c8bd06dc14e09ea3a140f90a3f2ba71949e7a91df4a46f3107400e71 - url: "https://pub.dev" - source: hosted - version: "0.16.0" - tor_ffi_plugin: - dependency: "direct main" - description: - path: "." - ref: "21077186e6bf773ec8a7cd57ef149b2cee5daa7b" - resolved-ref: "21077186e6bf773ec8a7cd57ef149b2cee5daa7b" - url: "https://github.com/cypherstack/tor.git" - source: git - version: "0.0.1" - tuple: - dependency: "direct main" - description: - name: tuple - sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 - url: "https://pub.dev" - source: hosted - version: "2.0.2" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - universal_io: - dependency: transitive - description: - name: universal_io - sha256: f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2 - url: "https://pub.dev" - source: hosted - version: "2.3.1" - unorm_dart: - dependency: "direct main" - description: - name: unorm_dart - sha256: "0c69186b03ca6addab0774bcc0f4f17b88d4ce78d9d4d8f0619e30a99ead58e7" - url: "https://pub.dev" - source: hosted - version: "0.3.2" - url_launcher: - dependency: "direct main" - description: - name: url_launcher - sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8 - url: "https://pub.dev" - source: hosted - version: "6.3.2" - url_launcher_android: - dependency: transitive - description: - name: url_launcher_android - sha256: "767344bf3063897b5cf0db830e94f904528e6dd50a6dfaf839f0abf509009611" - url: "https://pub.dev" - source: hosted - version: "6.3.28" - url_launcher_ios: - dependency: transitive - description: - name: url_launcher_ios - sha256: cfde38aa257dae62ffe79c87fab20165dfdf6988c1d31b58ebf59b9106062aad - url: "https://pub.dev" - source: hosted - version: "6.3.6" - url_launcher_linux: - dependency: transitive - description: - name: url_launcher_linux - sha256: d5e14138b3bc193a0f63c10a53c94b91d399df0512b1f29b94a043db7482384a - url: "https://pub.dev" - source: hosted - version: "3.2.2" - url_launcher_macos: - dependency: transitive - description: - name: url_launcher_macos - sha256: "368adf46f71ad3c21b8f06614adb38346f193f3a59ba8fe9a2fd74133070ba18" - url: "https://pub.dev" - source: hosted - version: "3.2.5" - url_launcher_platform_interface: - dependency: transitive - description: - name: url_launcher_platform_interface - sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" - url: "https://pub.dev" - source: hosted - version: "2.3.2" - url_launcher_web: - dependency: transitive - description: - name: url_launcher_web - sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2" - url: "https://pub.dev" - source: hosted - version: "2.4.1" - url_launcher_windows: - dependency: transitive - description: - name: url_launcher_windows - sha256: "712c70ab1b99744ff066053cbe3e80c73332b38d46e5e945c98689b2e66fc15f" - url: "https://pub.dev" - source: hosted - version: "3.1.5" - uuid: - dependency: "direct main" - description: - name: uuid - sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8 - url: "https://pub.dev" - source: hosted - version: "4.5.2" - vector_graphics: - dependency: transitive - description: - name: vector_graphics - sha256: a4f059dc26fc8295b5921376600a194c4ec7d55e72f2fe4c7d2831e103d461e6 - url: "https://pub.dev" - source: hosted - version: "1.1.19" - vector_graphics_codec: - dependency: transitive - description: - name: vector_graphics_codec - sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146" - url: "https://pub.dev" - source: hosted - version: "1.1.13" - vector_graphics_compiler: - dependency: transitive - description: - name: vector_graphics_compiler - sha256: d354a7ec6931e6047785f4db12a1f61ec3d43b207fc0790f863818543f8ff0dc - url: "https://pub.dev" - source: hosted - version: "1.1.19" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b - url: "https://pub.dev" - source: hosted - version: "2.2.0" - very_good_analysis: - dependency: transitive - description: - name: very_good_analysis - sha256: "96245839dbcc45dfab1af5fa551603b5c7a282028a64746c19c547d21a7f1e3a" - url: "https://pub.dev" - source: hosted - version: "10.0.0" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "45caa6c5917fa127b5dbcfbd1fa60b14e583afdc08bfc96dda38886ca252eb60" - url: "https://pub.dev" - source: hosted - version: "15.0.2" - wakelock_platform_interface: - dependency: transitive - description: - name: wakelock_platform_interface - sha256: "1f4aeb81fb592b863da83d2d0f7b8196067451e4df91046c26b54a403f9de621" - url: "https://pub.dev" - source: hosted - version: "0.3.0" - wakelock_plus: - dependency: "direct main" - description: - name: wakelock_plus - sha256: "61713aa82b7f85c21c9f4cd0a148abd75f38a74ec645fcb1e446f882c82fd09b" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - wakelock_plus_platform_interface: - dependency: transitive - description: - name: wakelock_plus_platform_interface - sha256: "036deb14cd62f558ca3b73006d52ce049fabcdcb2eddfe0bf0fe4e8a943b5cf2" - url: "https://pub.dev" - source: hosted - version: "1.3.0" - wakelock_windows: - dependency: "direct overridden" - description: - path: wakelock_windows - ref: "2a9bca63a540771f241d688562351482b2cf234c" - resolved-ref: "2a9bca63a540771f241d688562351482b2cf234c" - url: "https://github.com/diegotori/wakelock" - source: git - version: "0.2.2" - wallet: - dependency: "direct main" - description: - name: wallet - sha256: "20b6d8440039726841bd23b2bac64f888ec1ce1509edcc3ed2ad1753f613521e" - url: "https://pub.dev" - source: hosted - version: "0.0.18" - wasm_interop: - dependency: transitive - description: - name: wasm_interop - sha256: b1b378f07a4cf0103c25faf34d9a64d2c3312135b9efb47e0ec116ec3b14e48f - url: "https://pub.dev" - source: hosted - version: "2.0.1" - watcher: - dependency: transitive - description: - name: watcher - sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a" - url: "https://pub.dev" - source: hosted - version: "1.1.4" - web: - dependency: "direct overridden" - description: - name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" - url: "https://pub.dev" - source: hosted - version: "0.5.1" - web3dart: - dependency: "direct main" - description: - name: web3dart - sha256: bde2c92aac6f086988b6a1935c9d884f42a6acb772c93e1e2810f64af0db5600 - url: "https://pub.dev" - source: hosted - version: "3.0.1" - web_socket_channel: - dependency: "direct main" - description: - name: web_socket_channel - sha256: "58c6666b342a38816b2e7e50ed0f1e261959630becd4c879c4f26bfa14aa5a42" - url: "https://pub.dev" - source: hosted - version: "2.4.5" - web_socket_client: - dependency: transitive - description: - name: web_socket_client - sha256: "394789177aa3bc1b7b071622a1dbf52a4631d7ce23c555c39bb2523e92316b07" - url: "https://pub.dev" - source: hosted - version: "0.2.1" - webdriver: - dependency: transitive - description: - name: webdriver - sha256: "2f3a14ca026957870cfd9c635b83507e0e51d8091568e90129fbf805aba7cade" - url: "https://pub.dev" - source: hosted - version: "3.1.0" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.dev" - source: hosted - version: "1.2.1" - win32: - dependency: "direct overridden" - description: - name: win32 - sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e - url: "https://pub.dev" - source: hosted - version: "5.15.0" - win32_registry: - dependency: transitive - description: - name: win32_registry - sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" - url: "https://pub.dev" - source: hosted - version: "1.1.5" - window_size: - dependency: "direct main" - description: - path: "plugins/window_size" - ref: HEAD - resolved-ref: eb3964990cf19629c89ff8cb4a37640c7b3d5601 - url: "https://github.com/google/flutter-desktop-embedding.git" - source: git - version: "0.1.0" - xdg_directories: - dependency: transitive - description: - name: xdg_directories - sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" - url: "https://pub.dev" - source: hosted - version: "1.1.0" - xelis_dart_sdk: - dependency: "direct main" - description: - name: xelis_dart_sdk - sha256: "2393fcd3dfe9175e34ed60e1a1f8821fb63d6a99d66894b9a24cdfc8cb4a6a4b" - url: "https://pub.dev" - source: hosted - version: "0.30.9" - xelis_flutter: - dependency: "direct main" - description: - path: "." - ref: "v0.2.1" - resolved-ref: afcc21e0499e78236ca618c7d9f6bee8280dede1 - url: "https://github.com/xelis-project/xelis-flutter-ffi.git" - source: git - version: "0.2.1" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - xxh3: - dependency: transitive - description: - name: xxh3 - sha256: "399a0438f5d426785723c99da6b16e136f4953fb1e9db0bf270bd41dd4619916" - url: "https://pub.dev" - source: hosted - version: "1.2.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce - url: "https://pub.dev" - source: hosted - version: "3.1.3" - yaml_writer: - dependency: transitive - description: - name: yaml_writer - sha256: "69651cd7238411179ac32079937d4aa9a2970150d6b2ae2c6fe6de09402a5dc5" - url: "https://pub.dev" - source: hosted - version: "2.1.0" - zxcvbn: - dependency: "direct main" - description: - name: zxcvbn - sha256: "5d860ab87c0e7f295902697afd364aa722d89d4e5839e8800ad1b0faf3d63b08" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - zxing2: - dependency: "direct main" - description: - name: zxing2 - sha256: "2677c49a3b9ca9457cb1d294fd4bd5041cac6aab8cdb07b216ba4e98945c684f" - url: "https://pub.dev" - source: hosted - version: "0.2.4" -sdks: - dart: ">=3.10.0 <4.0.0" - flutter: ">=3.38.1 <4.0.0"