diff --git a/docs/RELEASE-NOTES b/docs/RELEASE-NOTES index 6c1616a..147e359 100644 --- a/docs/RELEASE-NOTES +++ b/docs/RELEASE-NOTES @@ -1,3 +1,8 @@ +version 0.7.3 +------------- + +- fix reorgs - broken since 0.6 I think + version 0.7.2 ------------- diff --git a/server/block_processor.py b/server/block_processor.py index 05b0031..be31643 100644 --- a/server/block_processor.py +++ b/server/block_processor.py @@ -650,6 +650,7 @@ class BlockProcessor(server.db.DB): assert self.height >= 0 self.height -= 1 + self.fs_height = self.height assert not self.headers assert not self.tx_hashes @@ -669,15 +670,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: diff --git a/server/version.py b/server/version.py index 7a2a82f..7fab096 100644 --- a/server/version.py +++ b/server/version.py @@ -1 +1 @@ -VERSION = "ElectrumX 0.7.2" +VERSION = "ElectrumX 0.7.3"