mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-09 11:27:28 -03:00
test: check testnet4 difficulty adjustment
This commit is contained in:
parent
a9ce7d1774
commit
d3564be226
4 changed files with 2097 additions and 0 deletions
2015
test/functional/data/testnet4.hex
Normal file
2015
test/functional/data/testnet4.hex
Normal file
File diff suppressed because one or more lines are too long
73
test/functional/mining_testnet.py
Executable file
73
test/functional/mining_testnet.py
Executable file
|
@ -0,0 +1,73 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (c) 2024 The Bitcoin Core developers
|
||||||
|
# Distributed under the MIT software license, see the accompanying
|
||||||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
"""Test mining on testnet
|
||||||
|
|
||||||
|
Test mining related RPCs that involve difficulty adjustment, which
|
||||||
|
regtest doesn't have.
|
||||||
|
|
||||||
|
It uses the first retarget period of testnet4, generated as follows:
|
||||||
|
|
||||||
|
for i in {1..2015}
|
||||||
|
do
|
||||||
|
hash=`bitcoin-cli -testnet4 getblockhash $i`
|
||||||
|
block=`bitcoin-cli -testnet4 getblock $hash 0`
|
||||||
|
echo $block >> data/testnet4.hex
|
||||||
|
done
|
||||||
|
"""
|
||||||
|
|
||||||
|
from test_framework.test_framework import BitcoinTestFramework
|
||||||
|
from test_framework.util import (
|
||||||
|
assert_equal,
|
||||||
|
)
|
||||||
|
from test_framework.blocktools import (
|
||||||
|
DIFF_1_N_BITS,
|
||||||
|
DIFF_1_TARGET,
|
||||||
|
DIFF_4_N_BITS,
|
||||||
|
DIFF_4_TARGET,
|
||||||
|
nbits_str,
|
||||||
|
target_str
|
||||||
|
)
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
class MiningTestnetTest(BitcoinTestFramework):
|
||||||
|
|
||||||
|
def set_test_params(self):
|
||||||
|
self.num_nodes = 1
|
||||||
|
self.setup_clean_chain = True
|
||||||
|
self.chain = "testnet4"
|
||||||
|
|
||||||
|
def add_options(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
'--datafile',
|
||||||
|
default='data/testnet4.hex',
|
||||||
|
help='Test data file (default: %(default)s)',
|
||||||
|
)
|
||||||
|
|
||||||
|
def run_test(self):
|
||||||
|
node = self.nodes[0]
|
||||||
|
self.log.info("Load testnet4 blocks")
|
||||||
|
self.headers_file_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), self.options.datafile)
|
||||||
|
with open(self.headers_file_path, encoding='utf-8') as blocks_data:
|
||||||
|
for block in blocks_data:
|
||||||
|
node.submitblock(block.strip())
|
||||||
|
|
||||||
|
assert_equal(node.getblockcount(), 2015)
|
||||||
|
|
||||||
|
mining_info = node.getmininginfo()
|
||||||
|
assert_equal(mining_info['difficulty'], 1)
|
||||||
|
assert_equal(mining_info['bits'], nbits_str(DIFF_1_N_BITS))
|
||||||
|
assert_equal(mining_info['target'], target_str(DIFF_1_TARGET))
|
||||||
|
|
||||||
|
assert_equal(mining_info['next']['height'], 2016)
|
||||||
|
assert_equal(mining_info['next']['difficulty'], 4)
|
||||||
|
assert_equal(mining_info['next']['bits'], nbits_str(DIFF_4_N_BITS))
|
||||||
|
assert_equal(mining_info['next']['target'], target_str(DIFF_4_TARGET))
|
||||||
|
|
||||||
|
assert_equal(node.getdifficulty(next=True), 4)
|
||||||
|
assert_equal(node.gettarget(next=True), target_str(DIFF_4_TARGET))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
MiningTestnetTest(__file__).main()
|
|
@ -70,6 +70,14 @@ REGTEST_N_BITS = 0x207fffff # difficulty retargeting is disabled in REGTEST cha
|
||||||
REGTEST_TARGET = 0x7fffff0000000000000000000000000000000000000000000000000000000000
|
REGTEST_TARGET = 0x7fffff0000000000000000000000000000000000000000000000000000000000
|
||||||
assert_equal(uint256_from_compact(REGTEST_N_BITS), REGTEST_TARGET)
|
assert_equal(uint256_from_compact(REGTEST_N_BITS), REGTEST_TARGET)
|
||||||
|
|
||||||
|
DIFF_1_N_BITS = 0x1d00ffff
|
||||||
|
DIFF_1_TARGET = 0x00000000ffff0000000000000000000000000000000000000000000000000000
|
||||||
|
assert_equal(uint256_from_compact(DIFF_1_N_BITS), DIFF_1_TARGET)
|
||||||
|
|
||||||
|
DIFF_4_N_BITS = 0x1c3fffc0
|
||||||
|
DIFF_4_TARGET = int(DIFF_1_TARGET / 4)
|
||||||
|
assert_equal(uint256_from_compact(DIFF_4_N_BITS), DIFF_4_TARGET)
|
||||||
|
|
||||||
def nbits_str(nbits):
|
def nbits_str(nbits):
|
||||||
return f"{nbits:08x}"
|
return f"{nbits:08x}"
|
||||||
|
|
||||||
|
|
|
@ -316,6 +316,7 @@ BASE_SCRIPTS = [
|
||||||
'wallet_upgradewallet.py --legacy-wallet',
|
'wallet_upgradewallet.py --legacy-wallet',
|
||||||
'wallet_crosschain.py',
|
'wallet_crosschain.py',
|
||||||
'mining_basic.py',
|
'mining_basic.py',
|
||||||
|
'mining_testnet.py',
|
||||||
'feature_signet.py',
|
'feature_signet.py',
|
||||||
'p2p_mutated_blocks.py',
|
'p2p_mutated_blocks.py',
|
||||||
'wallet_implicitsegwit.py --legacy-wallet',
|
'wallet_implicitsegwit.py --legacy-wallet',
|
||||||
|
|
Loading…
Reference in a new issue