From d600c3be009f131a35a622bc83e1ca9d40c241d7 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 26 Oct 2012 13:28:10 +0400 Subject: [PATCH] v0.4: send position along merkle path --- backends/abe/__init__.py | 13 ++++++++----- version.py | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/backends/abe/__init__.py b/backends/abe/__init__.py index 22e6650..2e4e806 100644 --- a/backends/abe/__init__.py +++ b/backends/abe/__init__.py @@ -479,14 +479,17 @@ class AbeStore(Datastore_class): block_height = int(out[0][0]) merkle = [] + tx_pos = None + # list all tx in block for row in self.safe_sql(""" SELECT DISTINCT tx_id, tx_pos, tx_hash FROM txin_detail WHERE block_id = ? ORDER BY tx_pos""", (block_id,)): - tx_id, tx_pos, tx_h = row - merkle.append(tx_h) + _id, _pos, _hash = row + merkle.append(_hash) + if _hash == tx_hash: tx_pos = int(_pos) # find subset. # TODO: do not compute this on client request, better store the hash tree of each block in a database... @@ -501,17 +504,17 @@ class AbeStore(Datastore_class): while merkle: new_hash = Hash( merkle[0] + merkle[1] ) if merkle[0] == target_hash: - s.append( "L" + encode(merkle[1])) + s.append( encode(merkle[1])) target_hash = new_hash elif merkle[1] == target_hash: - s.append( "R" + encode(merkle[0])) + s.append( encode(merkle[0])) target_hash = new_hash n.append( new_hash ) merkle = merkle[2:] merkle = n # send result - return {"block_height":block_height,"merkle":s} + return {"block_height":block_height, "merkle":s, "pos":tx_pos} diff --git a/version.py b/version.py index 2bbcaaf..48cf6a2 100644 --- a/version.py +++ b/version.py @@ -1 +1 @@ -VERSION = "0.3" +VERSION = "0.4" -- 1.7.1