0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-21 12:22:50 -05:00
bitcoin-bitcoin-core/test/functional/data
Sjors Provoost a4df12323c
doc: add release notes
Co-Authored-By: tdb3 <106488469+tdb3@users.noreply.github.com>
2025-01-22 12:31:46 +01:00
..
__init__.py lint: enable mypy checking for missing imports 2021-10-16 09:14:37 +08:00
blockheader_testnet3.hex test: Test that low difficulty chain fork is rejected 2019-08-16 13:02:16 -04:00
invalid_txs.py [test] A non-standard transaction which is also consensus-invalid should return the consensus error 2024-10-17 10:58:42 +01:00
mainnet_alt.json test: check difficulty adjustment using alternate mainnet 2025-01-22 12:31:46 +01:00
README.md doc: add release notes 2025-01-22 12:31:46 +01:00
rpc_bip67.json Test sortedmulti descriptor using BIP 67 tests 2019-10-08 13:56:56 -04:00
rpc_decodescript.json descriptor: InferScript, do not return top-level only func as sub descriptor 2023-07-20 11:04:52 -03:00
rpc_getblockstats.json test: Test exclusion of OP_RETURN from getblockstats 2022-10-23 01:33:41 +02:00
rpc_psbt.json psbt: Check non witness utxo outpoint early 2024-04-11 10:58:03 -04:00

Various test vectors

mainnet_alt.json

For easier testing the difficulty is maximally increased in the first (and only) retarget period, by producing blocks approximately 2 minutes apart.

The alternate mainnet chain was generated as follows:

  • use faketime to set node clock to 2 minutes after genesis block
  • mine a block using a CPU miner such as https://github.com/pooler/cpuminer
  • restart node with a faketime 2 minutes later
for i in {1..2015}
do
 faketime "`date -d @"$(( 1231006505 + $i * 120 ))"  +'%Y-%m-%d %H:%M:%S'`" \
 bitcoind -connect=0 -nocheckpoints -stopatheight=$i
done

The CPU miner is kept running as follows:

./minerd --coinbase-addr 1NQpH6Nf8QtR2HphLRcvuVqfhXBXsiWn8r --no-stratum --algo sha256d --no-longpoll --scantime 3 --retry-pause 1

The payout address is derived from first BIP32 test vector master key:

pkh(xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi/44h/0h/0h/<0;1>/*)#fkjtr0yn

It uses pkh() because tr() outputs at low heights are not spendable (unexpected-witness).

This makes each block determinisic except for its timestamp and nonce, which are stored in mainnet_alt.json and used to reconstruct the chain without having to redo the proof-of-work.

The timestamp was not kept constant because at difficulty 1 it's not sufficient to only grind the nonce. Grinding the extra_nonce or version field instead would have required additional (stratum) software. It would also make it more complicated to reconstruct the blocks in this test.