From 67bb01bf2cd31f97c57d51163d71958562a87f88 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Tue, 22 Nov 2016 07:50:01 +0900 Subject: [PATCH] Fix reorgs with unspendable TXOs --- server/block_processor.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/server/block_processor.py b/server/block_processor.py index 05b0031..6730253 100644 --- a/server/block_processor.py +++ b/server/block_processor.py @@ -669,15 +669,19 @@ class BlockProcessor(server.db.DB): s_pack = pack put_utxo = self.utxo_cache.__setitem__ spend_utxo = self.spend_utxo + script_hash168 = self.coin.hash168_from_script() rtxs = reversed(txs) rtx_hashes = reversed(tx_hashes) for tx_hash, tx in zip(rtx_hashes, rtxs): - # Spend the outputs for idx, txout in enumerate(tx.outputs): - cache_value = spend_utxo(tx_hash, idx) - touched.add(cache_value[:21]) + # Spend the TX outputs. Be careful with unspendable + # outputs - we didn't save those in the first place. + hash168 = script_hash168(txout.pk_script) + if hash168: + cache_value = spend_utxo(tx_hash, idx) + touched.add(cache_value[:21]) # Restore the inputs if not tx.is_coinbase: