bitcoin/test/lint
laanwj 7008087548
Merge bitcoin/bitcoin#24410: [kernel 2a/n] Split hashing/index GetUTXOStats codepaths, decouple from coinstatsindex
664a14ba7c coinstats: Move GetUTXOStats to rpc/blockchain (Carl Dong)
f100687566 kernel: Use ComputeUTXOStats in validation (Carl Dong)
faa52387e8 style-only: Rearrange using decls after scripted-diff (Carl Dong)
f329a9298c scripted-diff: Move src/kernel/coinstats to kernel:: (Carl Dong)
0e54456f04 Use only kernel/coinstats.h in index/coinstatsindex.h (Carl Dong)
80970985c9 coinstats: Split node/coinstats.h to kernel/coinstats.h (Carl Dong)
35f73ce4b2 coinstats: Move hasher codepath to kernel/coinstats (Carl Dong)
b7634fe02b Move logic from LookupUTXOStatsWithIndex to CoinStatsIndex::LookUpStats (Carl Dong)
1352e410a5 coinstats: Separate hasher/index lookup codepaths (Carl Dong)
524463daf6 coinstats: Return purely out-param CCoinsStats (Carl Dong)
46eb9fc56a coinstats: Extract index_requested in-member to in-param (Carl Dong)
a789f3f2b8 coinstats: Extract hash_type in-member to in-param (Carl Dong)
102294898d includes: Remove rpc/util.h -> node/coinstats.h (Carl Dong)
0848db9c35 fuzz: Remove useless GetUTXOStats fuzz case (Carl Dong)
52b1939993 kernel: Remove unnecessary blockfilter{index,}.cpp (Carl Dong)

Pull request description:

  Part of: #24303
  Depends on: #24322

  The `GetUTXOStats` function has 2 codepaths:
    - One which queries the `CoinStatsIndex` for the UTXO hash
    - One which actually performs the hashing

  For `libbitcoinkernel`, the only place where we call `GetUTXOStats` is in `PopulateAndValidateSnapshots`, which uses the `SHA256D` hash, and is therefore unable to use the `CoinStatsIndex` since that only provides `MuHash` hashes. Not that I think indices necessarily belong in `libbitcoinkernel` anyway.

  This PR separates these 2 aforementioned codepaths of `GetUTXOStats`, uses the hashing codepath in `PopulateAndValidateSnapshots`, and removes the need to link in `index/coinstatsindex.cpp` and `node/coinstats.cpp`.

  -----

  Logistically, this PR:
  - Extracts out the `index_requested` and `hash_type` members of `CoinStats`, which served as "in-params" to `GetUTXOStats` embedded within the `CoinStats` struct. This allows `CoinStats` to only consist of "out-param" members, and be returned by `GetUTXOStats` without needing to be an "in-out" param
  - Introduce the purely virtual `UTXOHashers` class, with 3 implementations: `SHA256DHasher`, `MuHashHasher`, and `NullHasher`. These replace the existing template-based polymorphism.
  - Split `GetUTXOStats` into:
      - `CalculateUTXOStatsWithHasher(UTXOHasher&, ...)`, and
      - `LookupUTXOStatsWithIndex(CoinStatsIndex&, ...)`
  - Use `CalculateUTXOStatsWithHasher` directly where appropriate (`src/validation.cpp` and `src/fuzz`)
  - Move `GetUTXOStats` to `rpc/blockchain`, which is the only place that depends on `GetUTXOStats`'s weird fallback behaviour
  - Move `LookupUTXOStatsWithIndex` to `index/coinstatsindex`

  Code organization:
  - `src/`
    - `kernel/` → only contains the hashing codepath
      - `coinstats.cpp` → hashing codepath implementations
      - `coinstats.h` → header for `kernel/coinstats.cpp`
    - `index/` → only contains the index codepath
      - `coinstatsindex.cpp` → index codepath implementations
      - `coinstatsindex.h`
    - `validation.cpp` → only uses the hashing codepath
    - `rpc/blockchain.cpp` → uses both the hashing and index codepath, old `GetUTXOStats` fallback logic moved here as static
    - `test/fuzz/coins_view.cpp` → only uses the hashing codepath

  TODOs:
  - [x] Commit messages could be fleshed out more

  Would love any feedback!

ACKs for top commit:
  laanwj:
    Code review ACK 664a14ba7c

Tree-SHA512: 18722c7bd279174d2d1881fec33ea04a9b261aae1c12e998cf434ef297d8ded47de69c526c8033a2ba7abc93ba3d2ff5faf4ce05e8888c725c31cf885ce3ef73
2022-05-24 14:43:00 +02:00
..
check-doc.py scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
commit-script-check.sh script: redirecting stderr to stdout before pipelining into grep 2022-01-22 12:36:19 +01:00
git-subtree-check.sh scripted-diff: Bump copyright headers 2021-12-30 19:36:57 +02:00
lint-all.py Converting lint-all.sh to lint-all.py. 2022-04-26 06:25:01 -03:00
lint-assertions.py lint: Mention NONFATAL_UNREACHABLE in lint-assertions.py 2022-04-26 10:01:54 +02:00
lint-circular-dependencies.py kernel: Use ComputeUTXOStats in validation 2022-05-23 14:53:35 -04:00
lint-files.py test: Use permissions from git in lint-files.py 2022-05-23 11:09:07 +02:00
lint-format-strings.py lint: Fix lint-circular-dependencies.py file list 2022-04-30 11:16:44 +02:00
lint-git-commit-check.py lint: Convert lint-git-commit-check.sh to Python 2022-04-16 15:43:19 +02:00
lint-include-guards.py Convert lint-include-guards.sh to python 2022-04-20 09:52:58 -04:00
lint-includes.py http: replace boost::split with SplitString 2022-05-04 07:34:48 +02:00
lint-locale-dependence.py test: Add strerror to locale-dependence linter 2022-04-28 10:24:06 +02:00
lint-logs.py lint: Convert lint-logs.sh to Python 2022-04-14 02:43:31 +02:00
lint-python-dead-code.py lint: Convert Python dead code linter to Python 2022-04-06 00:55:22 +02:00
lint-python-mutable-default-parameters.py Converted lint-python-mutable-default-parameters.sh to python 2022-04-08 11:53:47 -04:00
lint-python-utf8-encoding.py lint: Convert lint-python-utf8-encoding.sh to Python 2022-04-21 23:26:45 +02:00
lint-python.py lint: Convert Python linter to Python 2022-04-18 00:55:06 +02:00
lint-shell-locale.py lint: convert shell locale linter test to Python 2022-04-20 14:37:52 +00:00
lint-shell.py test: port 'lint-shell.sh' to python 2022-05-05 08:44:08 -05:00
lint-spelling.py lint: convert spell check lint test to python 2022-04-06 00:16:01 +02:00
lint-submodule.py lint: convert submodule linter test to Python 2022-04-20 05:21:13 +00:00
lint-tests.py Converted lint-tests.sh to python 2022-04-15 10:10:03 -04:00
lint-whitespace.py lint: Convert lint-whitespace.sh to Python 2022-04-16 15:53:15 +02:00
README.md Converting lint-all.sh to lint-all.py. 2022-04-26 06:25:01 -03:00
run-lint-format-strings.py Move lint script and data file to avoid lint- prefix 2022-04-04 16:58:07 +02:00
spelling.ignore-words.txt Move lint script and data file to avoid lint- prefix 2022-04-04 16:58:07 +02:00

This folder contains lint scripts.

check-doc.py

Check for missing documentation of command line options.

commit-script-check.sh

Verification of scripted diffs. Scripted diffs are only assumed to run on the latest LTS release of Ubuntu. Running them on other operating systems might require installing GNU tools, such as GNU sed.

git-subtree-check.sh

Run this script from the root of the repository to verify that a subtree matches the contents of the commit it claims to have been updated to.

Usage: test/lint/git-subtree-check.sh [-r] DIR [COMMIT]
       test/lint/git-subtree-check.sh -?
  • DIR is the prefix within the repository to check.
  • COMMIT is the commit to check, if it is not provided, HEAD will be used.
  • -r checks that subtree commit is present in repository.

To do a full check with -r, make sure that you have fetched the upstream repository branch in which the subtree is maintained:

To do so, add the upstream repository as remote:

git remote add --fetch secp256k1 https://github.com/bitcoin-core/secp256k1.git

lint-all.py

Calls other scripts with the lint- prefix.