This repo contains two validator clients:
- Firedancer — A fully C-based Solana validator client.
- Frankendancer — A hybrid validator that uses an FFI shim to call out to the
agave/Rust submodule for some functions.
- Firedancer topology:
src/app/firedancer/topology.c- All files in
src/discof/are for Firedancer only (not Frankendancer).
- All files in
- Frankendancer topology:
src/app/fdctl/topology.c- All files in
src/discoh/are for Frankendancer only (not Firedancer).
- All files in
- Many other files are shared between both clients — see the topology files for details.
Firedancer:
make -jFrankendancer:
git submodule update --init --recursive && make -j fdctl solanaSome code is auto-generated. Do not edit generated files directly — regenerate them instead.
-
Metrics: After changing
metrics.xml, run:make -C src/disco/metrics metrics
Regenerates all files in
src/disco/metrics/generated/andbook/api/metrics-generated.md. -
Features: After changing
feature_map.json, run:cd src/flamenco/features && make generate
Regenerates
fd_features_generated.handfd_features_generated.c. -
Types: After changing
fd_types.json, run:cd src/flamenco/types && make stubs
Regenerates
fd_types.handfd_types.c.
make -j CC=clang EXTRAS=fuzz BUILDDIR=clang-fuzz
make -j CC=clang EXTRAS=llvm-cov BUILDDIR=clang-cov
CORPUS=/data/corpus/my_fuzzer mkdir $CORPUS build/clang-fuzz/fuzz-test/my_fuzzer $CORPUS -timeout=3
./contrib/test/single_test_cov.sh build/clang-cov/fuzz-test/my_fuzzer $CORPUS python3 -m http.server 12000
Follow the coding conventions in CONTRIBUTING.md when making code changes.