f90b2b8b1f
Similar to the existing `RewardInfo`, this PR adds the infrastructure needed to export epoch processing information from altair+. Because accounting is done somewhat differently, the PR uses a fork-specific object to extrct the information in order to make the cost on the spec side low. * RewardInfo -> EpochInfo, ForkedEpochInfo * use array for computing new sync committee * avoid repeated total active balance computations in block processing * simplify proposer index check * simplify epoch transition tests * pre-compute base increment and reuse in epoch processing, and a few other small optimizations This PR introduces the type and does the heavy lifting in terms of refactoring - the tools that use the accounting will need separate PR:s (as well as refinements to the exportred information) |
||
---|---|---|
.. | ||
README.md | ||
libnfuzz.h | ||
libnfuzz.nim |
README.md
Introduction
libnfuzz
is a wrapper library that exports to C, a set of fuzzing test cases
written in Nim and making use of nimbus-eth2.
Building
To build the wrapper library (for more details follow first the instructions from nimbus-eth2):
git clone https://github.com/status-im/nimbus-eth2.git
cd nimbus-eth2
make
# static library
make libnfuzz.a
# dynamic loaded library
make libnfuzz.so
Default, the library is build with the minimal
config. To select a specific config you can instead run:
# build with mainnet config
make libnfuzz.a NIMFLAGS="-d:const_preset=mainnet"
For the library to be useful for fuzzing with libFuzzer (e.g. for integration with beacon-fuzz) we can pass additional Nim arguments, e.g.:
make libnfuzz.a NIMFLAGS="--cc:clang --passC:'-fsanitize=fuzzer-no-link' --passL='-fsanitize=fuzzer'"
Other useful options might include: --clang.path:<path>
, --clang.exe:<exe>
, --clang.linkerexe:<exe>
, -d:const_preset=mainnet
It might also deem useful to lower the log level, e.g. by adding -d:chronicles_log_level=fatal
.
Usage
There is a libnfuzz.h
file provided for easy including in C or C++ projects.
It is most important that before any of the exported tests are called, the
NimMain()
call is done first. Additionally, all following library calls need
to be done from the same thread as from where the original NimMain()
call was
done.