mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-20 15:19:07 +01:00
Move calculated constants from the top of src/headerssync.cpp into src/kernel/chainparams.cpp. Instead of being hardcoded to mainnet parameters, HeadersSyncState can now vary depending on chain or test. (This means we can reset TARGET_BLOCKS back to the nice round number of 15'000). Signet and testnets got new HeadersSyncParams constants through temporarily altering headerssync-params.py with corresponding GENESIS_TIME and MINCHAINWORK_HEADERS (based off defaultAssumeValid block height comments, corresponding to nMinimumChainWork). Regtest doesn't have a default assume valid block height, so the values are copied from Testnet 4. Since the constants only affect memory usage, and have very low impact unless dealing with a largely malicious chain, it's not that critical to keep updating them for non-mainnet chains. GENESIS_TIMEs (UTC): Testnet3: 1296688602 = datetime(2011, 2, 2) Testnet4: 1714777860 = datetime(2024, 5, 3) Signet: 1598918400 = datetime(2020, 9, 1)
172 lines
6.0 KiB
Markdown
172 lines
6.0 KiB
Markdown
Contents
|
|
========
|
|
This directory contains tools for developers working on this repository.
|
|
|
|
deterministic-fuzz-coverage
|
|
===========================
|
|
|
|
A tool to check for non-determinism in fuzz coverage. To get the help, run:
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- --help
|
|
```
|
|
|
|
To execute the tool, compilation has to be done with the build options:
|
|
|
|
```
|
|
-DCMAKE_C_COMPILER='clang' -DCMAKE_CXX_COMPILER='clang++' -DBUILD_FOR_FUZZING=ON -DCMAKE_CXX_FLAGS='-fprofile-instr-generate -fcoverage-mapping'
|
|
```
|
|
|
|
Both llvm-profdata and llvm-cov must be installed. Also, the qa-assets
|
|
repository must have been cloned. Finally, a fuzz target has to be picked
|
|
before running the tool:
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-fuzz-coverage/Cargo.toml -- $PWD/build_dir $PWD/qa-assets/fuzz_corpora fuzz_target_name
|
|
```
|
|
|
|
deterministic-unittest-coverage
|
|
===========================
|
|
|
|
A tool to check for non-determinism in unit-test coverage. To get the help, run:
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-unittest-coverage/Cargo.toml -- --help
|
|
```
|
|
|
|
To execute the tool, compilation has to be done with the build options:
|
|
|
|
```
|
|
-DCMAKE_C_COMPILER='clang' -DCMAKE_CXX_COMPILER='clang++' -DCMAKE_CXX_FLAGS='-fprofile-instr-generate -fcoverage-mapping'
|
|
```
|
|
|
|
Both llvm-profdata and llvm-cov must be installed.
|
|
|
|
```
|
|
cargo run --manifest-path ./contrib/devtools/deterministic-unittest-coverage/Cargo.toml -- $PWD/build_dir <boost unittest filter>
|
|
```
|
|
|
|
clang-format-diff.py
|
|
===================
|
|
|
|
A script to format unified git diffs according to [.clang-format](../../src/.clang-format).
|
|
|
|
Requires `clang-format`, installed e.g. via `brew install clang-format` on macOS,
|
|
or `sudo apt install clang-format` on Debian/Ubuntu.
|
|
|
|
For instance, to format the last commit with 0 lines of context,
|
|
the script should be called from the git root folder as follows.
|
|
|
|
```
|
|
git diff -U0 HEAD~1.. | ./contrib/devtools/clang-format-diff.py -p1 -i -v
|
|
```
|
|
|
|
copyright\_header.py
|
|
====================
|
|
|
|
Provides utilities for managing copyright headers of `The Bitcoin Core
|
|
developers` in repository source files. It has three subcommands:
|
|
|
|
```
|
|
$ ./copyright_header.py report <base_directory> [verbose]
|
|
$ ./copyright_header.py update <base_directory>
|
|
$ ./copyright_header.py insert <file>
|
|
```
|
|
Running these subcommands without arguments displays a usage string.
|
|
|
|
copyright\_header.py report \<base\_directory\> [verbose]
|
|
---------------------------------------------------------
|
|
|
|
Produces a report of all copyright header notices found inside the source files
|
|
of a repository. Useful to quickly visualize the state of the headers.
|
|
Specifying `verbose` will list the full filenames of files of each category.
|
|
|
|
copyright\_header.py update \<base\_directory\> [verbose]
|
|
---------------------------------------------------------
|
|
Updates all the copyright headers of `The Bitcoin Core developers` which were
|
|
changed in a year more recent than is listed. For example:
|
|
```
|
|
// Copyright (c) <firstYear>-<lastYear> The Bitcoin Core developers
|
|
```
|
|
will be updated to:
|
|
```
|
|
// Copyright (c) <firstYear>-<lastModifiedYear> The Bitcoin Core developers
|
|
```
|
|
where `<lastModifiedYear>` is obtained from the `git log` history.
|
|
|
|
This subcommand also handles copyright headers that have only a single year. In
|
|
those cases:
|
|
```
|
|
// Copyright (c) <year> The Bitcoin Core developers
|
|
```
|
|
will be updated to:
|
|
```
|
|
// Copyright (c) <year>-<lastModifiedYear> The Bitcoin Core developers
|
|
```
|
|
where the update is appropriate.
|
|
|
|
copyright\_header.py insert \<file\>
|
|
------------------------------------
|
|
Inserts a copyright header for `The Bitcoin Core developers` at the top of the
|
|
file in either Python or C++ style as determined by the file extension. If the
|
|
file is a Python file and it has `#!` starting the first line, the header is
|
|
inserted in the line below it.
|
|
|
|
The copyright dates will be set to be `<year_introduced>-<current_year>` where
|
|
`<year_introduced>` is according to the `git log` history. If
|
|
`<year_introduced>` is equal to `<current_year>`, it will be set as a single
|
|
year rather than two hyphenated years.
|
|
|
|
If the file already has a copyright for `The Bitcoin Core developers`, the
|
|
script will exit.
|
|
|
|
gen-manpages.py
|
|
===============
|
|
|
|
A small script to automatically create manpages in ../../doc/man by running the release binaries with the -help option.
|
|
This requires help2man which can be found at: https://www.gnu.org/software/help2man/
|
|
|
|
This script assumes a build directory named `build` as suggested by example build documentation.
|
|
To use it with a different build directory, set `BUILDDIR`.
|
|
For example:
|
|
|
|
```bash
|
|
BUILDDIR=$PWD/my-build-dir contrib/devtools/gen-manpages.py
|
|
```
|
|
|
|
headerssync-params.py
|
|
=====================
|
|
|
|
A script to generate optimal parameters for the headerssync module (stored in src/kernel/chainparams.cpp). It takes no command-line
|
|
options, as all its configuration is set at the top of the file. It runs many times faster inside PyPy. Invocation:
|
|
|
|
```bash
|
|
pypy3 contrib/devtools/headerssync-params.py
|
|
```
|
|
|
|
gen-bitcoin-conf.sh
|
|
===================
|
|
|
|
Generates a bitcoin.conf file in `share/examples/` by parsing the output from `bitcoind --help`. This script is run during the
|
|
release process to include a bitcoin.conf with the release binaries and can also be run by users to generate a file locally.
|
|
When generating a file as part of the release process, make sure to commit the changes after running the script.
|
|
|
|
This script assumes a build directory named `build` as suggested by example build documentation.
|
|
To use it with a different build directory, set `BUILDDIR`.
|
|
For example:
|
|
|
|
```bash
|
|
BUILDDIR=$PWD/my-build-dir contrib/devtools/gen-bitcoin-conf.sh
|
|
```
|
|
|
|
circular-dependencies.py
|
|
========================
|
|
|
|
Run this script from the root of the source tree (`src/`) to find circular dependencies in the source code.
|
|
This looks only at which files include other files, treating the `.cpp` and `.h` file as one unit.
|
|
|
|
Example usage:
|
|
|
|
cd .../src
|
|
../contrib/devtools/circular-dependencies.py {*,*/*,*/*/*}.{h,cpp}
|