Disable mweb coins for exchanges (#1919)
* Disable mweb coins for exchanges * Take into consideration to not use non-mweb coins in ALL calculations
Omar Hatem committed
Jan 3, 2025 at 08:53 UTC
5ea443235d9343c78ba5d6cc827bd5ccbca3c884
4 files changed
+40
-23
lib/bitcoin/cw_bitcoin.dart
+3
-1
@@ -149,7 +149,8 @@ class CWBitcoin extends Bitcoin {
149
}
150
151
@override
152
- Future<int> estimateFakeSendAllTxAmount(Object wallet, TransactionPriority priority) async {
152
+ Future<int> estimateFakeSendAllTxAmount(Object wallet, TransactionPriority priority,
153
+ {UnspentCoinType coinTypeToSpendFrom = UnspentCoinType.any}) async {
154
try {
155
final sk = ECPrivate.random();
156
final electrumWallet = wallet as ElectrumWallet;
@@ -173,6 +174,7 @@ class CWBitcoin extends Bitcoin {
174
? priority as LitecoinTransactionPriority
175
: priority as BitcoinTransactionPriority,
176
),
177
+ coinTypeToSpendFrom: coinTypeToSpendFrom,
178
);
179
180
return estimatedTx.amount;
lib/view_model/exchange/exchange_view_model.dart
+25
-17
@@ -9,6 +9,7 @@ import 'package:cake_wallet/exchange/provider/stealth_ex_exchange_provider.dart'
9
import 'package:cw_core/crypto_currency.dart';
10
import 'package:cw_core/sync_status.dart';
11
import 'package:cw_core/transaction_priority.dart';
12
+import 'package:cw_core/unspent_coin_type.dart';
13
import 'package:cw_core/utils/print_verbose.dart';
14
import 'package:cw_core/wallet_type.dart';
15
import 'package:hive/hive.dart';
@@ -122,7 +123,8 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
123
depositAmount = '';
124
receiveAmount = '';
125
receiveAddress = '';
125
- depositAddress = depositCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
126
+ depositAddress =
127
+ depositCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
128
provider = providersForCurrentPair().first;
129
final initialProvider = provider;
130
provider!.checkIsAvailable().then((bool isAvailable) {
@@ -157,8 +159,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
159
wallet.type == WalletType.bitcoinCash;
160
161
bool get hideAddressAfterExchange =>
160
- wallet.type == WalletType.monero ||
161
- wallet.type == WalletType.wownero;
162
+ wallet.type == WalletType.monero || wallet.type == WalletType.wownero;
163
164
bool _useTorOnly;
165
final Box<Trade> trades;
@@ -167,17 +168,17 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
168
final SharedPreferences sharedPreferences;
169
170
List<ExchangeProvider> get _allProviders => [
170
- ChangeNowExchangeProvider(settingsStore: _settingsStore),
171
- SideShiftExchangeProvider(),
172
- SimpleSwapExchangeProvider(),
173
- ThorChainExchangeProvider(tradesStore: trades),
174
- if (FeatureFlag.isExolixEnabled) ExolixExchangeProvider(),
175
- QuantexExchangeProvider(),
176
- LetsExchangeExchangeProvider(),
177
- StealthExExchangeProvider(),
178
- TrocadorExchangeProvider(
179
- useTorOnly: _useTorOnly, providerStates: _settingsStore.trocadorProviderStates),
180
- ];
171
+ ChangeNowExchangeProvider(settingsStore: _settingsStore),
172
+ SideShiftExchangeProvider(),
173
+ SimpleSwapExchangeProvider(),
174
+ ThorChainExchangeProvider(tradesStore: trades),
175
+ if (FeatureFlag.isExolixEnabled) ExolixExchangeProvider(),
176
+ QuantexExchangeProvider(),
177
+ LetsExchangeExchangeProvider(),
178
+ StealthExExchangeProvider(),
179
+ TrocadorExchangeProvider(
180
+ useTorOnly: _useTorOnly, providerStates: _settingsStore.trocadorProviderStates),
181
+ ];
182
183
@observable
184
ExchangeProvider? provider;
@@ -613,8 +614,10 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
614
isReceiveAmountEntered = false;
615
depositAmount = '';
616
receiveAmount = '';
616
- depositAddress = depositCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
617
- receiveAddress = receiveCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
617
+ depositAddress =
618
+ depositCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
619
+ receiveAddress =
620
+ receiveCurrency == wallet.currency ? wallet.walletAddresses.addressForExchange : '';
621
isDepositAddressEnabled = !(depositCurrency == wallet.currency);
622
isFixedRateMode = false;
623
_onPairChange();
@@ -640,7 +643,12 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
643
wallet.type == WalletType.bitcoinCash) {
644
final priority = _settingsStore.priority[wallet.type]!;
645
643
- final amount = await bitcoin!.estimateFakeSendAllTxAmount(wallet, priority);
646
+ final amount = await bitcoin!.estimateFakeSendAllTxAmount(
647
+ wallet,
648
+ priority,
649
+ coinTypeToSpendFrom:
650
+ wallet.type == WalletType.litecoin ? UnspentCoinType.nonMweb : UnspentCoinType.any,
651
+ );
652
653
changeDepositAmount(amount: bitcoin!.formatterBitcoinAmountToString(amount: amount));
654
}
lib/view_model/send/send_view_model.dart
+10
-3
@@ -394,7 +394,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
394
395
if (wallet.isHardwareWallet) state = IsAwaitingDeviceResponseState();
396
397
- pendingTransaction = await wallet.createTransaction(_credentials());
397
+ pendingTransaction = await wallet.createTransaction(_credentials(provider));
398
399
if (provider is ThorChainExchangeProvider) {
400
final outputCount = pendingTransaction?.outputCount ?? 0;
@@ -522,7 +522,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
522
void setTransactionPriority(TransactionPriority priority) =>
523
_settingsStore.priority[wallet.type] = priority;
524
525
- Object _credentials() {
525
+ Object _credentials([ExchangeProvider? provider]) {
526
final priority = _settingsStore.priority[wallet.type];
527
528
if (priority == null &&
@@ -535,7 +535,6 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
535
536
switch (wallet.type) {
537
case WalletType.bitcoin:
538
- case WalletType.litecoin:
538
case WalletType.bitcoinCash:
539
return bitcoin!.createBitcoinTransactionCredentials(
540
outputs,
@@ -543,6 +542,14 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
542
feeRate: customBitcoinFeeRate,
543
coinTypeToSpendFrom: coinTypeToSpendFrom,
544
);
545
+ case WalletType.litecoin:
546
+ return bitcoin!.createBitcoinTransactionCredentials(
547
+ outputs,
548
+ priority: priority!,
549
+ feeRate: customBitcoinFeeRate,
550
+ // if it's an exchange flow then disable sending from mweb coins
551
+ coinTypeToSpendFrom: provider != null ? UnspentCoinType.nonMweb : coinTypeToSpendFrom,
552
+ );
553
554
case WalletType.monero:
555
return monero!
tool/configure.dart
+2
-2
@@ -109,7 +109,6 @@ import 'package:cw_bitcoin/electrum.dart';
109
import 'package:cw_bitcoin/electrum_transaction_info.dart';
110
import 'package:cw_bitcoin/pending_bitcoin_transaction.dart';
111
import 'package:cw_bitcoin/bitcoin_receive_page_option.dart';
112
-import 'package:cw_bitcoin/bitcoin_wallet.dart';
112
import 'package:cw_bitcoin/electrum_wallet.dart';
113
import 'package:cw_bitcoin/bitcoin_unspent.dart';
114
import 'package:cw_bitcoin/bitcoin_mnemonic.dart';
@@ -173,7 +172,8 @@ abstract class Bitcoin {
172
List<ElectrumSubAddress> getSilentPaymentAddresses(Object wallet);
173
List<ElectrumSubAddress> getSilentPaymentReceivedAddresses(Object wallet);
174
176
- Future<int> estimateFakeSendAllTxAmount(Object wallet, TransactionPriority priority);
175
+ Future<int> estimateFakeSendAllTxAmount(Object wallet, TransactionPriority priority,
176
+ {UnspentCoinType coinTypeToSpendFrom = UnspentCoinType.any});
177
List<ElectrumSubAddress> getSubAddresses(Object wallet);
178
179
String formatterBitcoinAmountToString({required int amount});