// /* // * This file is part of Stack Wallet. // * // * Copyright (c) 2023 Cypher Stack // * All Rights Reserved. // * The code is distributed under GPLv3 license, see LICENSE file for details. // * Generated by Cypher Stack on 2023-05-26 // * // */ // // import 'dart:async'; // // import 'package:isar/isar.dart'; // import 'package:stackwallet/db/isar/main_db.dart'; // import 'package:stackwallet/models/balance.dart'; // import 'package:stackwallet/services/event_bus/events/global/balance_refreshed_event.dart'; // import 'package:stackwallet/services/event_bus/global_event_bus.dart'; // import 'package:stackwallet/utilities/amount/amount.dart'; // import 'package:stackwallet/utilities/enums/coin_enum.dart'; // // mixin CoinControlInterface { // late final String _walletId; // late final String _walletName; // late final Coin _coin; // late final MainDB _db; // late final Future Function() _getChainHeight; // late final Future Function(Balance) _refreshedBalanceCallback; // // void initCoinControlInterface({ // required String walletId, // required String walletName, // required Coin coin, // required MainDB db, // required Future Function() getChainHeight, // required Future Function(Balance) refreshedBalanceCallback, // }) { // _walletId = walletId; // _walletName = walletName; // _coin = coin; // _db = db; // _getChainHeight = getChainHeight; // _refreshedBalanceCallback = refreshedBalanceCallback; // } // // Future refreshBalance({bool notify = false}) async { // final utxos = await _db.getUTXOs(_walletId).findAll(); // final currentChainHeight = await _getChainHeight(); // // Amount satoshiBalanceTotal = Amount( // rawValue: BigInt.zero, // fractionDigits: _coin.decimals, // ); // Amount satoshiBalancePending = Amount( // rawValue: BigInt.zero, // fractionDigits: _coin.decimals, // ); // Amount satoshiBalanceSpendable = Amount( // rawValue: BigInt.zero, // fractionDigits: _coin.decimals, // ); // Amount satoshiBalanceBlocked = Amount( // rawValue: BigInt.zero, // fractionDigits: _coin.decimals, // ); // // for (final utxo in utxos) { // final utxoAmount = Amount( // rawValue: BigInt.from(utxo.value), // fractionDigits: _coin.decimals, // ); // // satoshiBalanceTotal += utxoAmount; // // if (utxo.isBlocked) { // satoshiBalanceBlocked += utxoAmount; // } else { // // TODO: [prio=high] Fix this // throw UnimplementedError( // "Fix the following 42 (should be min confirms)"); // if (utxo.isConfirmed( // currentChainHeight, // 42, // )) { // satoshiBalanceSpendable += utxoAmount; // } else { // satoshiBalancePending += utxoAmount; // } // } // } // // final balance = Balance( // total: satoshiBalanceTotal, // spendable: satoshiBalanceSpendable, // blockedTotal: satoshiBalanceBlocked, // pendingSpendable: satoshiBalancePending, // ); // // await _refreshedBalanceCallback(balance); // // if (notify) { // GlobalEventBus.instance.fire( // BalanceRefreshedEvent( // _walletId, // ), // ); // } // } // }