ce8094246erandom: replace construct/assign with explicit Reseed() (Pieter Wuille)2ae392d561random: use LogError for init failure (Pieter Wuille)97e16f5704tests: make fuzz tests (mostly) deterministic with fixed seed (Pieter Wuille)2c91330dd6random: cleanup order, comments, static (Pieter Wuille)8e31cf9c9bnet, net_processing: use existing RNG objects more (Pieter Wuille)d5fcbe966brandom: improve precision of MakeExponentiallyDistributed (Pieter Wuille)cfb0dfe2cfrandom: convert GetExponentialRand into rand_exp_duration (Pieter Wuille)4eaa239dc3random: convert GetRand{Micros,Millis} into randrange (Pieter Wuille)82de1b80d9net: use GetRandMicros for cache expiration (Pieter Wuille)ddc184d999random: get rid of GetRand by inlining (Pieter Wuille)e2d1f84858random: make GetRand() support entire range (incl. max) (Pieter Wuille)810cdf6b4etests: overhaul deterministic test randomness (Pieter Wuille)6cfdc5b104random: convert XoRoShiRo128PlusPlus into full RNG (Pieter Wuille)8cc2f45065random: move XoRoShiRo128PlusPlus into random module (Pieter Wuille)8f5ac0d0b6xoroshiro128plusplus: drop comment about nonexisting copy() (Pieter Wuille)8924f5120frandom: modernize XoRoShiRo128PlusPlus a bit (Pieter Wuille)ddb7d26cfdrandom: add RandomMixin::randbits with compile-known bits (Pieter Wuille)21ce9d8658random: Improve RandomMixin::randbits (Pieter Wuille)9b14d3d2darandom: refactor: move rand* utilities to RandomMixin (Pieter Wuille)40dd86fc3brandom: use BasicByte concept in randbytes (Pieter Wuille)27cefc7fd6random: add a few noexcepts to FastRandomContext (Pieter Wuille)b3b382dde2random: move rand256() and randbytes() to .h file (Pieter Wuille)493a2e024erandom: write rand256() in function of fillrand() (Pieter Wuille) Pull request description: This PR contains a number of vaguely-related improvements to the random module. The specific changes and more detailed rationale is in the commit messages, but the highlights are: * `XoRoShiRo128PlusPlus` (previously a test-only RNG) moves to random.h and becomes `InsecureRandomContext`, which is even faster than `FastRandomContext` but non-cryptographic. It also gets all helper randomness functions (`randrange`, `fillrand`, ...), making it a lot more succinct to use. * During tests, **all** randomness is made deterministic (except for `GetStrongRandBytes`) but non-repeating (like `GetRand()` used to be when `g_mock_deterministic_tests` was used), either fixed, or from a random seed (overridden by env var). * Several infrequently used top-level functions (`GetRandMillis`, `GetRandMicros`, `GetExponentialRand`) are converted into member functions of `FastRandomContext` (and `InsecureRandomContext`). * `GetRand<T>()` (without argument) can now return the maximum value of the type (previously e.g. `GetRand<uint32_t>()` would never return 0xffffffff). ACKs for top commit: achow101: ACKce8094246emaflcko: re-ACKce8094246e🐈 hodlinator: ACKce8094246edergoegge: utACKce8094246eTree-SHA512: 79bc0cbafaf27e95012c1ce2947a8ca6f9a3c78af5f1f16e69354b6fc9b987a28858adf4cd356dc5baf21163e9af8dcc24e70f8d7173be870e8a3ddcdd47c02c
src/node/
The src/node/ directory contains code that needs to access node state
(state in CChain, CBlockIndex, CCoinsView, CTxMemPool, and similar
classes).
Code in src/node/ is meant to be segregated from code in
src/wallet/ and src/qt/, to ensure wallet and GUI
code changes don't interfere with node operation, to allow wallet and GUI code
to run in separate processes, and to perhaps eventually allow wallet and GUI
code to be maintained in separate source repositories.
As a rule of thumb, code in one of the src/node/,
src/wallet/, or src/qt/ directories should avoid
calling code in the other directories directly, and only invoke it indirectly
through the more limited src/interfaces/ classes.
This directory is at the moment
sparsely populated. Eventually more substantial files like
src/validation.cpp and
src/txmempool.cpp might be moved there.