From 6b63ecb439519f1c7973a75fa134c371b94281b9 Mon Sep 17 00:00:00 2001 From: TheLazieR Yip Date: Fri, 25 Nov 2016 07:14:09 -0500 Subject: [PATCH 1/6] Add header_hash and header_prevhash class methods --- lib/coins.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/coins.py b/lib/coins.py index 71129b6..44ded03 100644 --- a/lib/coins.py +++ b/lib/coins.py @@ -214,6 +214,16 @@ class Coin(object): payload.append(0x01) return Base58.encode_check(payload) + @classmethod + def header_hash(cls, header): + '''Given a header return hash''' + return double_sha256(header) + + @classmethod + def header_prevhash(cls, header): + '''Given a header return previous hash''' + return header[4:36] + @classmethod def header_hashes(cls, header): '''Given a header return the previous and current block hashes.''' @@ -367,6 +377,12 @@ class Dash(Coin): IRC_PREFIX = "D_" IRC_CHANNEL = "#electrum-dash" + @classmethod + def header_hash(cls, header): + '''Given a header return the hash.''' + import x11_hash + return x11_hash.getPoWHash(header) + @classmethod def header_hashes(cls, header): '''Given a header return the previous and current block hashes.''' From b3623f5455af680750dfdcf391b5f3be238fe378 Mon Sep 17 00:00:00 2001 From: TheLazieR Yip Date: Fri, 25 Nov 2016 07:15:18 -0500 Subject: [PATCH 2/6] replace header_hashes with header_prevhash , header_hash --- server/block_processor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/block_processor.py b/server/block_processor.py index 144fb6a..697b603 100644 --- a/server/block_processor.py +++ b/server/block_processor.py @@ -568,7 +568,7 @@ class BlockProcessor(server.db.DB): # the UTXO cache uses the FS cache via get_tx_hash() to # resolve compressed key collisions header, tx_hashes, txs = self.coin.read_block(block) - prev_hash, header_hash = self.coin.header_hashes(header) + prev_hash, header_hash = self.coin.header_prevhash(header), self.coin.header_hash(header) if prev_hash != self.tip: raise ChainReorg @@ -636,7 +636,7 @@ class BlockProcessor(server.db.DB): touched = set() for block in blocks: header, tx_hashes, txs = self.coin.read_block(block) - prev_hash, header_hash = self.coin.header_hashes(header) + prev_hash, header_hash = self.coin.header_prevhash(header), self.coin.header_hash(header) if header_hash != self.tip: raise ChainError('backup block {} is not tip {} at height {:,d}' .format(hash_to_str(header_hash), From e987510432f66c146caa34d239a8788146fa02ac Mon Sep 17 00:00:00 2001 From: TheLazieR Yip Date: Fri, 25 Nov 2016 07:20:25 -0500 Subject: [PATCH 3/6] Replace double_sha256 with header_hash from coin --- server/db.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/db.py b/server/db.py index 58c7d9e..08a08e6 100644 --- a/server/db.py +++ b/server/db.py @@ -16,7 +16,7 @@ from bisect import bisect_right from collections import namedtuple from lib.util import chunks, formatted_time, LoggedClass -from lib.hash import double_sha256, hash_to_str +from lib.hash import hash_to_str from server.storage import open_db from server.version import VERSION @@ -175,7 +175,7 @@ class DB(LoggedClass): headers = self.fs_read_headers(height, count) # FIXME: move to coins.py hlen = self.coin.HEADER_LEN - return [double_sha256(header) for header in chunks(headers, hlen)] + return [self.coin.header_hash(header) for header in chunks(headers, hlen)] @staticmethod def _resolve_limit(limit): From dfaf36ae164b93221645d4c635bd6db14af39ba7 Mon Sep 17 00:00:00 2001 From: TheLazieR Yip Date: Fri, 25 Nov 2016 07:21:19 -0500 Subject: [PATCH 4/6] Remove header_hashes --- lib/coins.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/lib/coins.py b/lib/coins.py index 44ded03..334299e 100644 --- a/lib/coins.py +++ b/lib/coins.py @@ -224,11 +224,6 @@ class Coin(object): '''Given a header return previous hash''' return header[4:36] - @classmethod - def header_hashes(cls, header): - '''Given a header return the previous and current block hashes.''' - return header[4:36], double_sha256(header) - @classmethod def read_block(cls, block): '''Return a tuple (header, tx_hashes, txs) given a raw block.''' @@ -383,12 +378,6 @@ class Dash(Coin): import x11_hash return x11_hash.getPoWHash(header) - @classmethod - def header_hashes(cls, header): - '''Given a header return the previous and current block hashes.''' - import x11_hash - return header[4:36], x11_hash.getPoWHash(header) - class DashTestnet(Dash): NAME = "Dash" SHORTNAME = "tDASH" From 828727d41a94ac0e685badc1a4edd7b2740f1aed Mon Sep 17 00:00:00 2001 From: TheLazieR Yip Date: Fri, 25 Nov 2016 07:44:19 -0500 Subject: [PATCH 5/6] Remove unneccessary local variables --- server/block_processor.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/block_processor.py b/server/block_processor.py index 697b603..eecc2eb 100644 --- a/server/block_processor.py +++ b/server/block_processor.py @@ -569,12 +569,12 @@ class BlockProcessor(server.db.DB): # resolve compressed key collisions header, tx_hashes, txs = self.coin.read_block(block) prev_hash, header_hash = self.coin.header_prevhash(header), self.coin.header_hash(header) - if prev_hash != self.tip: + if self.tip != self.coin.header_prevhash(header): raise ChainReorg touched = set() self.fs_advance_block(header, tx_hashes, txs) - self.tip = header_hash + self.tip = self.coin.header_hash(header) self.height += 1 undo_info = self.advance_txs(tx_hashes, txs, touched) if self.daemon.cached_height() - self.height <= self.reorg_limit: @@ -636,14 +636,14 @@ class BlockProcessor(server.db.DB): touched = set() for block in blocks: header, tx_hashes, txs = self.coin.read_block(block) - prev_hash, header_hash = self.coin.header_prevhash(header), self.coin.header_hash(header) + header_hash = self.coin.header_hash(header) if header_hash != self.tip: raise ChainError('backup block {} is not tip {} at height {:,d}' .format(hash_to_str(header_hash), hash_to_str(self.tip), self.height)) self.backup_txs(tx_hashes, txs, touched) - self.tip = prev_hash + self.tip = self.coin.header_prevhash(header) assert self.height >= 0 self.height -= 1 self.tx_counts.pop() From f3ecfe00e2cda976990a1d36b4a7e172171b2b06 Mon Sep 17 00:00:00 2001 From: TheLazieR Yip Date: Fri, 25 Nov 2016 07:45:45 -0500 Subject: [PATCH 6/6] Remove unused variables --- server/block_processor.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server/block_processor.py b/server/block_processor.py index eecc2eb..583dad4 100644 --- a/server/block_processor.py +++ b/server/block_processor.py @@ -568,7 +568,6 @@ class BlockProcessor(server.db.DB): # the UTXO cache uses the FS cache via get_tx_hash() to # resolve compressed key collisions header, tx_hashes, txs = self.coin.read_block(block) - prev_hash, header_hash = self.coin.header_prevhash(header), self.coin.header_hash(header) if self.tip != self.coin.header_prevhash(header): raise ChainReorg