fix: initial fixes for timeouts

This commit is contained in:
Rafael Saes 2025-01-06 19:05:52 -03:00
parent d1c45a5326
commit aa374f9127
3 changed files with 23 additions and 24 deletions

View file

@ -270,7 +270,9 @@ class ElectrumClient {
Future<dynamic> getTransaction({required String hash, required bool verbose}) async { Future<dynamic> getTransaction({required String hash, required bool verbose}) async {
try { try {
final result = await callWithTimeout( final result = await callWithTimeout(
method: 'blockchain.transaction.get', params: [hash, verbose], timeout: 10000); method: 'blockchain.transaction.get',
params: [hash, verbose],
);
return result; return result;
} on RequestFailedTimeoutException catch (_) { } on RequestFailedTimeoutException catch (_) {
return <String, dynamic>{}; return <String, dynamic>{};

View file

@ -123,16 +123,18 @@ class ElectrumTransactionInfo extends TransactionInfo {
List<String> inputAddresses = []; List<String> inputAddresses = [];
List<String> outputAddresses = []; List<String> outputAddresses = [];
for (var i = 0; i < bundle.originalTransaction.inputs.length; i++) { try {
final input = bundle.originalTransaction.inputs[i]; for (var i = 0; i < bundle.originalTransaction.inputs.length; i++) {
final inputTransaction = bundle.ins[i]; final input = bundle.originalTransaction.inputs[i];
final outTransaction = inputTransaction.outputs[input.txIndex]; final inputTransaction = bundle.ins[i];
inputAmount += outTransaction.amount.toInt(); final outTransaction = inputTransaction.outputs[input.txIndex];
if (addresses.contains(addressFromOutputScript(outTransaction.scriptPubKey, network))) { inputAmount += outTransaction.amount.toInt();
direction = TransactionDirection.outgoing; if (addresses.contains(addressFromOutputScript(outTransaction.scriptPubKey, network))) {
inputAddresses.add(addressFromOutputScript(outTransaction.scriptPubKey, network)); direction = TransactionDirection.outgoing;
inputAddresses.add(addressFromOutputScript(outTransaction.scriptPubKey, network));
}
} }
} } catch (_) {}
final receivedAmounts = <int>[]; final receivedAmounts = <int>[];
for (final out in bundle.originalTransaction.outputs) { for (final out in bundle.originalTransaction.outputs) {

View file

@ -1365,7 +1365,7 @@ abstract class ElectrumWalletBase
List<BitcoinUnspent> updatedUnspentCoins = []; List<BitcoinUnspent> updatedUnspentCoins = [];
final previousUnspentCoins = List<BitcoinUnspent>.from(unspentCoins.where((utxo) => final previousUnspentCoins = List<BitcoinUnspent>.from(unspentCoins.where((utxo) =>
utxo.bitcoinAddressRecord.type != SegwitAddresType.mweb && utxo.bitcoinAddressRecord.type != SegwitAddresType.mweb &&
utxo.bitcoinAddressRecord is! BitcoinSilentPaymentAddressRecord)); utxo.bitcoinAddressRecord is! BitcoinSilentPaymentAddressRecord));
if (hasSilentPaymentsScanning) { if (hasSilentPaymentsScanning) {
@ -1423,7 +1423,6 @@ abstract class ElectrumWalletBase
required List<BitcoinUnspent> updatedUnspentCoins, required List<BitcoinUnspent> updatedUnspentCoins,
required List<List<BitcoinUnspent>?> results, required List<List<BitcoinUnspent>?> results,
}) { }) {
if (failedCount == results.length) { if (failedCount == results.length) {
printV("All UTXOs failed to fetch, falling back to previous UTXOs"); printV("All UTXOs failed to fetch, falling back to previous UTXOs");
return previousUnspentCoins; return previousUnspentCoins;
@ -1918,19 +1917,15 @@ abstract class ElectrumWalletBase
final original = BtcTransaction.fromRaw(transactionHex); final original = BtcTransaction.fromRaw(transactionHex);
final ins = <BtcTransaction>[]; final ins = <BtcTransaction>[];
for (final vin in original.inputs) { try {
final verboseTransaction = await electrumClient.getTransactionVerbose(hash: vin.txId); await Future.forEach(original.inputs, (vin) async {
String inputTransactionHex = await electrumClient.getTransactionHex(
hash: (vin as TxInput).txId,
);
final String inputTransactionHex; ins.add(BtcTransaction.fromRaw(inputTransactionHex));
});
if (verboseTransaction.isEmpty) { } catch (_) {}
inputTransactionHex = await electrumClient.getTransactionHex(hash: hash);
} else {
inputTransactionHex = verboseTransaction['hex'] as String;
}
ins.add(BtcTransaction.fromRaw(inputTransactionHex));
}
return ElectrumTransactionBundle( return ElectrumTransactionBundle(
original, original,