From 4c7ab221a7f981b4f4c7ff8020a805c5bed21d12 Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Wed, 1 Aug 2018 11:56:59 +0900 Subject: [PATCH] Allow per-class tx hash functions Idea from erasmospunk; see #548 --- electrumx/lib/tx.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/electrumx/lib/tx.py b/electrumx/lib/tx.py index 8016e97..ca6cb1a 100644 --- a/electrumx/lib/tx.py +++ b/electrumx/lib/tx.py @@ -79,6 +79,8 @@ class Deserializer(object): millions of times during sync. ''' + TX_HASH_FN = staticmethod(double_sha256) + def __init__(self, binary, start=0): assert isinstance(binary, bytes) self.binary = binary @@ -101,7 +103,7 @@ class Deserializer(object): we process it in the natural serialized order. ''' start = self.cursor - return self.read_tx(), double_sha256(self.binary[start:self.cursor]) + return self.read_tx(), self.TX_HASH_FN(self.binary[start:self.cursor]) def read_tx_and_vsize(self): '''Return a (deserialized TX, vsize) pair.''' @@ -213,7 +215,7 @@ class DeserializerSegWit(Deserializer): marker = self.binary[self.cursor + 4] if marker: tx = super().read_tx() - tx_hash = double_sha256(self.binary[start:self.cursor]) + tx_hash = self.TX_HASH_FN(self.binary[start:self.cursor]) return tx, tx_hash, self.binary_length # Ugh, this is nasty. @@ -237,7 +239,7 @@ class DeserializerSegWit(Deserializer): vsize = (3 * base_size + self.binary_length) // 4 return TxSegWit(version, marker, flag, inputs, outputs, witness, - locktime), double_sha256(orig_ser), vsize + locktime), self.TX_HASH_FN(orig_ser), vsize def read_tx(self): return self._read_tx_parts()[0]