commit cfe0a0a83174c3c6630a321b8932c253119fade4
parent 4eb88b8f6066b303e804ad0212645dae3d6ae124
Author: parazyd <parazyd@dyne.org>
Date: Mon, 19 Apr 2021 11:35:14 +0200
zeromq/history4: Mitigate bug when duplicate transactions appear.
This is not a very efficient solution, but it's the best I can do now.
I also added the problematic scripthash in the test suite.
Diffstat:
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/obelisk/zeromq.py b/obelisk/zeromq.py
@@ -380,7 +380,14 @@ class Client:
correlated_points = Client.__correlate(points)
# self.log.debug("history points: %s", points)
# self.log.debug("history correlated: %s", correlated_points)
- return error_code, self._sort_correlated_points(correlated_points)
+
+ # BUG: In libbitcoin v4 sometimes transactions mess up and double
+ # The following is not a very efficient solution
+ correlated = [
+ i for n, i in enumerate(correlated_points)
+ if i not in correlated_points[n + 1:]
+ ]
+ return error_code, self._sort_correlated_points(correlated)
@staticmethod
def _sort_correlated_points(points):
diff --git a/tests/test_electrum_protocol.py b/tests/test_electrum_protocol.py
@@ -140,6 +140,7 @@ async def test_scripthash_get_balance(protocol, writer, method):
params = [
["c036b0ff3ad79662cd517cd5fe1fa0af07377b9262d16f276f11ced69aaa6921"],
["92dd1eb7c042956d3dd9185a58a2578f61fee91347196604540838ccd0f8c08c"],
+ ["b97b504af8fcf94a47d3ae5a346d38220f0751732d9b89a413568bfbf4b36ec6"],
]
for i in params:
expect = get_expect(method, i)
@@ -150,6 +151,7 @@ async def test_scripthash_get_balance(protocol, writer, method):
async def test_scripthash_get_history(protocol, writer, method):
params = [
["c036b0ff3ad79662cd517cd5fe1fa0af07377b9262d16f276f11ced69aaa6921"],
+ ["b97b504af8fcf94a47d3ae5a346d38220f0751732d9b89a413568bfbf4b36ec6"],
]
for i in params:
expect = get_expect(method, i)
@@ -161,6 +163,7 @@ async def test_scripthash_listunspent(protocol, writer, method):
params = [
["c036b0ff3ad79662cd517cd5fe1fa0af07377b9262d16f276f11ced69aaa6921"],
["92dd1eb7c042956d3dd9185a58a2578f61fee91347196604540838ccd0f8c08c"],
+ ["b97b504af8fcf94a47d3ae5a346d38220f0751732d9b89a413568bfbf4b36ec6"],
]
for i in params:
# Blockstream is broken here and doesn't return in ascending order.