Skip to content
Merged
243 changes: 238 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ include(ExternalProject)

option(PROTOCOL_STACK_ENABLE_SANITIZERS
"Build protocol-stack verification targets with ASan and UBSan" OFF)
option(PROTOCOL_STACK_ENABLE_FUZZING
"Build Clang libFuzzer targets" OFF)

find_package(Python3 3.11 REQUIRED COMPONENTS Interpreter)
find_program(PROTOCOL_STACK_MAKE_EXECUTABLE make REQUIRED)
Expand All @@ -27,6 +29,14 @@ if(PROTOCOL_STACK_ENABLE_SANITIZERS)
set(PROTOCOL_STACK_SANITIZER_FLAGS
"-fsanitize=address,undefined;-fno-omit-frame-pointer")
endif()
if(PROTOCOL_STACK_ENABLE_FUZZING)
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
message(FATAL_ERROR "Fuzzing requires Clang")
endif()
if(NOT PROTOCOL_STACK_ENABLE_SANITIZERS)
message(FATAL_ERROR "Fuzzing requires sanitizer instrumentation")
endif()
endif()

file(MAKE_DIRECTORY "${PROTOCOL_STACK_SODIUM_PREFIX}/include")

Expand Down Expand Up @@ -74,13 +84,114 @@ add_executable(
ledger_transition_vectors
tools/ledger-vectors/verify.cpp
)
set(
PROTOCOL_STACK_KERNEL_SOURCES
src/v1/address.cpp
src/v1/admission.cpp
src/v1/commitments.cpp
src/v1/crypto.cpp
src/v1/execution.cpp
src/v1/genesis.cpp
src/v1/ledger.cpp
)
add_library(protocol_kernel STATIC ${PROTOCOL_STACK_KERNEL_SOURCES})
target_include_directories(
protocol_kernel
PUBLIC
"${PROJECT_SOURCE_DIR}/include"
)
add_executable(
kernel_primitive_tests
tests/kernel/primitives_test.cpp
)
target_link_libraries(kernel_primitive_tests PRIVATE protocol_kernel)
add_executable(
kernel_admission_tests
tests/kernel/admission_test.cpp
)
target_link_libraries(kernel_admission_tests PRIVATE protocol_kernel)
add_executable(
kernel_execution_tests
tests/kernel/execution_test.cpp
)
target_link_libraries(kernel_execution_tests PRIVATE protocol_kernel)
add_executable(
kernel_genesis_tests
tests/kernel/genesis_test.cpp
)
target_link_libraries(kernel_genesis_tests PRIVATE protocol_kernel)
add_executable(
kernel_commitment_tests
tests/kernel/commitments_test.cpp
)
target_link_libraries(kernel_commitment_tests PRIVATE protocol_kernel)
add_executable(
kernel_block_tests
tests/kernel/block_test.cpp
)
target_link_libraries(kernel_block_tests PRIVATE protocol_kernel)
add_executable(
kernel_property_tests
tests/kernel/property_test.cpp
)
target_link_libraries(kernel_property_tests PRIVATE protocol_kernel)
add_executable(
kernel_differential_runner
tests/differential/kernel_runner.cpp
)
target_link_libraries(kernel_differential_runner PRIVATE protocol_kernel)

foreach(
protocol_stack_target
IN ITEMS
protocol_primitive_vectors
ledger_transition_vectors
set(
PROTOCOL_STACK_TARGETS
protocol_primitive_vectors
ledger_transition_vectors
protocol_kernel
kernel_primitive_tests
kernel_admission_tests
kernel_execution_tests
kernel_genesis_tests
kernel_commitment_tests
kernel_block_tests
kernel_property_tests
kernel_differential_runner
)
if(PROTOCOL_STACK_ENABLE_FUZZING)
add_library(
protocol_kernel_fuzz
STATIC
${PROTOCOL_STACK_KERNEL_SOURCES}
)
target_include_directories(
protocol_kernel_fuzz
PUBLIC
"${PROJECT_SOURCE_DIR}/include"
)
add_executable(
kernel_admission_fuzz
tests/fuzz/admission_fuzz.cpp
)
target_link_libraries(kernel_admission_fuzz PRIVATE protocol_kernel_fuzz)
add_executable(
kernel_address_fuzz
tests/fuzz/address_fuzz.cpp
)
target_link_libraries(kernel_address_fuzz PRIVATE protocol_kernel_fuzz)
add_executable(
kernel_genesis_fuzz
tests/fuzz/genesis_fuzz.cpp
)
target_link_libraries(kernel_genesis_fuzz PRIVATE protocol_kernel_fuzz)
list(
APPEND
PROTOCOL_STACK_TARGETS
protocol_kernel_fuzz
kernel_admission_fuzz
kernel_address_fuzz
kernel_genesis_fuzz
)
endif()

foreach(protocol_stack_target IN LISTS PROTOCOL_STACK_TARGETS)
target_compile_features(${protocol_stack_target} PRIVATE cxx_std_20)
target_compile_definitions(
${protocol_stack_target}
Expand All @@ -103,6 +214,35 @@ foreach(
)
target_link_libraries(${protocol_stack_target} PRIVATE protocol_stack_sodium)
endforeach()
if(PROTOCOL_STACK_ENABLE_FUZZING)
foreach(
protocol_stack_fuzz_target
IN ITEMS
protocol_kernel_fuzz
kernel_admission_fuzz
kernel_address_fuzz
kernel_genesis_fuzz
)
target_compile_options(
${protocol_stack_fuzz_target}
PRIVATE
-fsanitize=fuzzer-no-link
)
endforeach()
foreach(
protocol_stack_fuzz_executable
IN ITEMS
kernel_admission_fuzz
kernel_address_fuzz
kernel_genesis_fuzz
)
target_link_options(
${protocol_stack_fuzz_executable}
PRIVATE
-fsanitize=fuzzer
)
endforeach()
endif()

add_test(
NAME protocol-primitives-cpp
Expand Down Expand Up @@ -130,10 +270,103 @@ add_test(
"${PROJECT_SOURCE_DIR}/tools/ledger-vectors/verify.py"
"${PROJECT_SOURCE_DIR}/test-vectors/ledger-transition-v1.txt"
)
add_test(
NAME kernel-primitives
COMMAND
kernel_primitive_tests
"${PROJECT_SOURCE_DIR}/test-vectors/protocol-primitives-v1.txt"
)
add_test(
NAME kernel-admission
COMMAND
kernel_admission_tests
"${PROJECT_SOURCE_DIR}/test-vectors/ledger-transition-v1.txt"
)
add_test(
NAME kernel-execution
COMMAND
kernel_execution_tests
"${PROJECT_SOURCE_DIR}/test-vectors/ledger-transition-v1.txt"
)
add_test(
NAME kernel-genesis
COMMAND
kernel_genesis_tests
"${PROJECT_SOURCE_DIR}/test-vectors/ledger-transition-v1.txt"
)
add_test(
NAME kernel-commitments
COMMAND
kernel_commitment_tests
"${PROJECT_SOURCE_DIR}/test-vectors/ledger-transition-v1.txt"
)
add_test(
NAME kernel-block
COMMAND
kernel_block_tests
"${PROJECT_SOURCE_DIR}/test-vectors/ledger-transition-v1.txt"
)
add_test(
NAME kernel-properties
COMMAND kernel_property_tests
)
add_test(
NAME kernel-differential
COMMAND
"${Python3_EXECUTABLE}"
"${PROJECT_SOURCE_DIR}/tests/differential/run.py"
"$<TARGET_FILE:kernel_differential_runner>"
--count
10000
--libsodium
"${PROTOCOL_STACK_SODIUM_SHARED_LIBRARY}"
)
set_tests_properties(
protocol-primitives-python
ledger-transition-python
PROPERTIES
ENVIRONMENT
"PROTOCOL_STACK_LIBSODIUM=${PROTOCOL_STACK_SODIUM_SHARED_LIBRARY}"
)
set_tests_properties(
kernel-differential
PROPERTIES
TIMEOUT 300
)
if(PROTOCOL_STACK_ENABLE_FUZZING)
add_test(
NAME kernel-admission-fuzz-smoke
COMMAND
kernel_admission_fuzz
-seed=824311
-runs=512
-max_len=256
-len_control=0
)
add_test(
NAME kernel-genesis-fuzz-smoke
COMMAND
kernel_genesis_fuzz
-seed=824311
-runs=512
-max_len=4096
-len_control=0
)
add_test(
NAME kernel-address-fuzz-smoke
COMMAND
kernel_address_fuzz
-seed=824311
-runs=512
-max_len=256
-len_control=0
)
set_tests_properties(
kernel-admission-fuzz-smoke
kernel-address-fuzz-smoke
kernel-genesis-fuzz-smoke
PROPERTIES
LABELS fuzz
TIMEOUT 60
)
endif()
1 change: 1 addition & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
"inherits": "clang-debug",
"displayName": "Clang ASan and UBSan",
"cacheVariables": {
"PROTOCOL_STACK_ENABLE_FUZZING": "ON",
"PROTOCOL_STACK_ENABLE_SANITIZERS": "ON"
}
}
Expand Down
2 changes: 2 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
## Architecture

- `architecture/sovereign-core.md`: system layers and replaceable boundaries.
- `architecture/ledger-kernel.md`: ledger ownership, atomic block application,
canonical outputs, and failure boundaries.
- `architecture/local-ai-authority.md`: future self-hosted AI control plane.

## Decisions
Expand Down
Loading
Loading