electrum-personal-server

Maximally lightweight electrum server for a single user
git clone https://git.parazyd.org/electrum-personal-server
Log | Files | Refs | README

commit 8488d0b1032ea42850f983835665925938b50481
parent d5de8583b77fb38b50c58d979c15161ceab1049a
Author: chris-belcher <chris-belcher@users.noreply.github.com>
Date:   Mon, 24 Jun 2019 22:43:29 +0100

Fix crash bug #120 by catching exception

The exception is raised if the unconfirmed input has been evicted
from the node's mempool. In this situation the server will just
carry on and Electrum will display an odd negative fee.

Diffstat:
Melectrumpersonalserver/server/transactionmonitor.py | 25+++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/electrumpersonalserver/server/transactionmonitor.py b/electrumpersonalserver/server/transactionmonitor.py @@ -245,17 +245,22 @@ class TransactionMonitor(object): unconfirmed_input = False total_input_value = 0 for inn in txd["vin"]: - utxo = self.rpc.call("gettxout", [inn["txid"], inn["vout"], - True]) - if utxo is None: - utxo = self.rpc.call("gettxout", [inn["txid"], inn["vout"], - False]) + try: + utxo = self.rpc.call("gettxout", [inn["txid"], + inn["vout"], True]) if utxo is None: - rawtx = self.rpc.call("getrawtransaction", [inn["txid"], - True]) - if rawtx is not None: - utxo = {"confirmations": 0, - "value": rawtx["vout"][inn["vout"]]["value"]} + utxo = self.rpc.call("gettxout", [inn["txid"], + inn["vout"], False]) + if utxo is None: + rawtx = self.rpc.call("getrawtransaction", + [inn["txid"], True]) + if rawtx is not None: + utxo = {"confirmations": 0, + "value": rawtx["vout"][ + inn["vout"]]["value"]} + except JsonRpcError: + #error somewhere, unable to get input value, just carry on + pass if utxo is not None: total_input_value += int(Decimal(utxo["value"]) * Decimal(1e8))