mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 15:04:44 +01:00
test: check for false-positives in rpc_scanblocks.py
This commit is contained in:
parent
3bca6cd61a
commit
fa54d3011e
1 changed files with 26 additions and 0 deletions
|
@ -3,6 +3,10 @@
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
"""Test the scanblocks RPC call."""
|
"""Test the scanblocks RPC call."""
|
||||||
|
from test_framework.blockfilter import (
|
||||||
|
bip158_basic_element_hash,
|
||||||
|
bip158_relevant_scriptpubkeys,
|
||||||
|
)
|
||||||
from test_framework.messages import COIN
|
from test_framework.messages import COIN
|
||||||
from test_framework.test_framework import BitcoinTestFramework
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
from test_framework.util import (
|
from test_framework.util import (
|
||||||
|
@ -71,6 +75,28 @@ class ScanblocksTest(BitcoinTestFramework):
|
||||||
assert(blockhash in node.scanblocks(
|
assert(blockhash in node.scanblocks(
|
||||||
"start", [{"desc": f"pkh({parent_key}/*)", "range": [0, 100]}], height)['relevant_blocks'])
|
"start", [{"desc": f"pkh({parent_key}/*)", "range": [0, 100]}], height)['relevant_blocks'])
|
||||||
|
|
||||||
|
# check that false-positives are included in the result now; note that
|
||||||
|
# finding a false-positive at runtime would take too long, hence we simply
|
||||||
|
# use a pre-calculated one that collides with the regtest genesis block's
|
||||||
|
# coinbase output and verify that their BIP158 ranged hashes match
|
||||||
|
genesis_blockhash = node.getblockhash(0)
|
||||||
|
genesis_spks = bip158_relevant_scriptpubkeys(node, genesis_blockhash)
|
||||||
|
assert_equal(len(genesis_spks), 1)
|
||||||
|
genesis_coinbase_spk = list(genesis_spks)[0]
|
||||||
|
false_positive_spk = bytes.fromhex("001400000000000000000000000000000000000cadcb")
|
||||||
|
|
||||||
|
genesis_coinbase_hash = bip158_basic_element_hash(genesis_coinbase_spk, 1, genesis_blockhash)
|
||||||
|
false_positive_hash = bip158_basic_element_hash(false_positive_spk, 1, genesis_blockhash)
|
||||||
|
assert_equal(genesis_coinbase_hash, false_positive_hash)
|
||||||
|
|
||||||
|
assert(genesis_blockhash in node.scanblocks(
|
||||||
|
"start", [{"desc": f"raw({genesis_coinbase_spk.hex()})"}], 0, 0)['relevant_blocks'])
|
||||||
|
assert(genesis_blockhash in node.scanblocks(
|
||||||
|
"start", [{"desc": f"raw({false_positive_spk.hex()})"}], 0, 0)['relevant_blocks'])
|
||||||
|
|
||||||
|
# TODO: after an "accurate" mode for scanblocks is implemented (e.g. PR #26325)
|
||||||
|
# check here that it filters out the false-positive
|
||||||
|
|
||||||
# test node with disabled blockfilterindex
|
# test node with disabled blockfilterindex
|
||||||
assert_raises_rpc_error(-1, "Index is not enabled for filtertype basic",
|
assert_raises_rpc_error(-1, "Index is not enabled for filtertype basic",
|
||||||
self.nodes[1].scanblocks, "start", [f"addr({addr_1})"])
|
self.nodes[1].scanblocks, "start", [f"addr({addr_1})"])
|
||||||
|
|
Loading…
Add table
Reference in a new issue