11import 'dart:io' ;
22
3- import 'package:compat/old_cw_core/wallet_type.dart' ;
4- import 'package:cs_monero/cs_monero.dart' as cs_monero;
53import 'package:cs_monero/src/ffi_bindings/monero_wallet_bindings.dart'
64 as xmr_wallet_ffi;
75import 'package:flutter_riverpod/flutter_riverpod.dart' ;
86import 'package:http/io_client.dart' ;
97import 'package:monero_rpc/monero_rpc.dart' ;
8+ import 'package:socks5_proxy/socks.dart' ;
109
11- import '../../../models/isar/models/isar_models.dart' ;
1210import '../../../models/node_model.dart' ;
1311import '../../../providers/db/main_db_provider.dart' ;
1412import '../../../providers/global/node_service_provider.dart' ;
1513import '../../../providers/global/prefs_provider.dart' ;
1614import '../../../providers/global/secure_store_provider.dart' ;
1715import '../../../providers/global/wallets_provider.dart' ;
16+ import '../../../services/event_bus/events/global/tor_connection_status_changed_event.dart' ;
1817import '../../../services/node_service.dart' ;
18+ import '../../../services/tor_service.dart' ;
1919import '../../../utilities/address_utils.dart' ;
2020import '../../../utilities/default_nodes.dart' ;
2121import '../../../utilities/enums/derive_path_type_enum.dart' ;
2222import '../../../utilities/enums/fee_rate_type_enum.dart' ;
23+ import '../../../utilities/logger.dart' ;
24+ import '../../../utilities/prefs.dart' ;
2325import '../../isar/models/wallet_info.dart' ;
24- import '../../isar/providers/wallet_info_provider.dart' ;
2526import '../../models/tx_data.dart' ;
2627import '../../wallet/impl/monero_wallet.dart' ;
27- import '../../wallet/intermediate/lib_monero_wallet.dart' ;
2828import '../../wallet/wallet.dart' ;
2929import '../crypto_currency.dart' ;
3030import '../intermediate/cryptonote_currency.dart' ;
@@ -147,6 +147,7 @@ class Monero extends CryptonoteCurrency {
147147 @override
148148 Future <Wallet <CryptoCurrency >> importPaperWallet (WalletUriData walletData, WidgetRef ref) async {
149149 if (walletData.txids != null ) {
150+ // If the walletData contains txids, we need to create a temporary wallet to sweep the gift wallet
150151 final wallet = await Wallet .create (
151152 walletInfo: WalletInfo .createNew (
152153 coin: walletData.coin,
@@ -164,10 +165,31 @@ class Monero extends CryptonoteCurrency {
164165 await (wallet as MoneroWallet ).init (isRestore: true );
165166 await wallet.recover (isRescan: false );
166167
167- // Scan the blocks with given txids
168- final primaryNode = defaultNode;
168+ final primaryNode = NodeService (secureStorageInterface: ref.read (secureStoreProvider))
169+ .getPrimaryNodeFor (currency: walletData.coin) ?? defaultNode;
170+
171+ // Create an HTTP client with Tor support if enabled
172+ final torService = TorService .sharedInstance;
173+ final prefs = Prefs .instance;
174+ final httpClient = HttpClient ();
175+ if (prefs.useTor) {
176+ if (torService.status != TorConnectionStatus .connected) {
177+ if (prefs.torKillSwitch) {
178+ throw Exception ("Tor is not connected, and the kill switch is enabled. Can't sweep gift wallet" );
179+ } else {
180+ // If Tor is not connected, we can still proceed with the request
181+ Logging .instance.w ("Tor is not connected, proceeding without Tor." );
182+ }
183+ } else {
184+ SocksTCPClient .assignToHttpClient (httpClient, [ProxySettings (torService.getProxyInfo ().host, torService.getProxyInfo ().port)]);
185+ }
186+ }
187+
188+ // Create a DaemonRpc instance to interact with the Monero node
169189 final daemonRpc = DaemonRpc (
170- IOClient (HttpClient ()), "${primaryNode .host }:${primaryNode .port }" );
190+ IOClient (httpClient), "${primaryNode .host }:${primaryNode .port }" );
191+
192+ // Scan the blocks with given txids
171193 final txs = await daemonRpc.postToEndpoint ("/get_transactions" , {
172194 "txs_hashes" : walletData.txids,
173195 "decode_as_json" : true ,
0 commit comments