diff --git a/Makefile b/Makefile index c7bda841d..ef1c4ca71 100644 --- a/Makefile +++ b/Makefile @@ -454,7 +454,19 @@ endif # Windows: build with nim directly (see wakunode2) — `nimble ` re-clones # git deps every build and they intermittently hang on the MSYS2 runner. Flags # mirror logos_delivery.nimble's dynamic-windows task. -liblogosdelivery: | build-deps librln +# DISABLE_RLN=true links liblogosdelivery without zerokit: no librln, no Rust, +# no submodule. A node whose config enables RLN then fails to start. +DISABLE_RLN ?= false +ifeq ($(DISABLE_RLN),true) + LIBLOGOSDELIVERY_RLN_DEP := + # Target-specific, so `make DISABLE_RLN=true all` cannot compile the stubs + # into wakunode2, which still links the real librln. + liblogosdelivery: NIM_PARAMS += -d:disable_rln +else + LIBLOGOSDELIVERY_RLN_DEP := librln +endif + +liblogosdelivery: | build-deps $(LIBLOGOSDELIVERY_RLN_DEP) ifeq ($(detected_OS),Windows) nim c --out:build/liblogosdelivery.dll --threads:on --app:lib --opt:speed --noMain --mm:refc --header -d:metrics --nimMainPrefix:liblogosdelivery --skipParentCfg:off -d:discv5_protocol_id=d5waku --cpu:amd64 $(NIM_PARAMS) library/liblogosdelivery.nim else diff --git a/config.nims b/config.nims index aaba3854e..e15fba986 100644 --- a/config.nims +++ b/config.nims @@ -6,7 +6,8 @@ else: switch("nimcache", "nimcache/debug/$projectName") if defined(windows): - switch("passL", "rln.lib") + if not defined(disable_rln): + switch("passL", "rln.lib") switch("define", "postgres=false") # disable timestamps in Windows PE headers - https://wiki.debian.org/ReproducibleBuilds/TimestampsInPEBinaries diff --git a/logos_delivery/waku/factory/node_factory.nim b/logos_delivery/waku/factory/node_factory.nim index c2e7399ac..6a99c3ce3 100644 --- a/logos_delivery/waku/factory/node_factory.nim +++ b/logos_delivery/waku/factory/node_factory.nim @@ -324,6 +324,10 @@ proc setupProtocols( return err("failed to mount libp2p ping protocol: " & getCurrentExceptionMsg()) if conf.rlnRelayConf.isSome(): + when defined(disable_rln): + return + err("the configuration enables RLN relay, but this build has -d:disable_rln") + let rlnRelayConf = conf.rlnRelayConf.get() let rlnConf = WakuRlnConfig( dynamic: rlnRelayConf.dynamic, diff --git a/logos_delivery/waku/rln/rln/rln_interface.nim b/logos_delivery/waku/rln/rln/rln_interface.nim index 23ac6c654..43318d3ed 100644 --- a/logos_delivery/waku/rln/rln/rln_interface.nim +++ b/logos_delivery/waku/rln/rln/rln_interface.nim @@ -18,6 +18,10 @@ import results, ../protocol_types +when defined(disable_rln): + # Only for nodes that never enable RLN: the stubs abort if called. + {.compile: "rln_stubs.c".} + {.push raises: [], gcsafe.} # --- Types ------------------------------------------------------------------ diff --git a/logos_delivery/waku/rln/rln/rln_stubs.c b/logos_delivery/waku/rln/rln/rln_stubs.c new file mode 100644 index 000000000..6dbc0cade --- /dev/null +++ b/logos_delivery/waku/rln/rln/rln_stubs.c @@ -0,0 +1,58 @@ +// Link-time stand-ins for zerokit's RLN FFI, compiled instead of librln when +// the build defines `disable_rln`. The Nim side declares these with `importc` +// and no `dynlib`, so they must resolve at link time even where RLN is unused. +// +// Generated from the `importc` names in rln_interface.nim. + +#include +#include + +static void logosdelivery_rln_disabled(const char *symbol) { + fprintf(stderr, + "liblogosdelivery: %s called, but this build has -d:disable_rln and " + "no RLN implementation.\n", + symbol); + abort(); +} + +void ffi_bytes_le_to_cfr(void) { logosdelivery_rln_disabled("ffi_bytes_le_to_cfr"); } +void ffi_bytes_le_to_rln_partial_proof(void) { logosdelivery_rln_disabled("ffi_bytes_le_to_rln_partial_proof"); } +void ffi_bytes_le_to_rln_proof(void) { logosdelivery_rln_disabled("ffi_bytes_le_to_rln_proof"); } +void ffi_c_string_free(void) { logosdelivery_rln_disabled("ffi_c_string_free"); } +void ffi_cfr_free(void) { logosdelivery_rln_disabled("ffi_cfr_free"); } +void ffi_cfr_to_bytes_le(void) { logosdelivery_rln_disabled("ffi_cfr_to_bytes_le"); } +void ffi_cfr_zero(void) { logosdelivery_rln_disabled("ffi_cfr_zero"); } +void ffi_compute_id_secret(void) { logosdelivery_rln_disabled("ffi_compute_id_secret"); } +void ffi_extended_key_gen(void) { logosdelivery_rln_disabled("ffi_extended_key_gen"); } +void ffi_finish_rln_proof(void) { logosdelivery_rln_disabled("ffi_finish_rln_proof"); } +void ffi_generate_partial_zk_proof(void) { logosdelivery_rln_disabled("ffi_generate_partial_zk_proof"); } +void ffi_generate_rln_proof(void) { logosdelivery_rln_disabled("ffi_generate_rln_proof"); } +void ffi_hash_to_field_le(void) { logosdelivery_rln_disabled("ffi_hash_to_field_le"); } +void ffi_poseidon_hash_pair(void) { logosdelivery_rln_disabled("ffi_poseidon_hash_pair"); } +void ffi_rln_free(void) { logosdelivery_rln_disabled("ffi_rln_free"); } +void ffi_rln_new(void) { logosdelivery_rln_disabled("ffi_rln_new"); } +void ffi_rln_new_with_params(void) { logosdelivery_rln_disabled("ffi_rln_new_with_params"); } +void ffi_rln_partial_proof_free(void) { logosdelivery_rln_disabled("ffi_rln_partial_proof_free"); } +void ffi_rln_partial_proof_to_bytes_le(void) { logosdelivery_rln_disabled("ffi_rln_partial_proof_to_bytes_le"); } +void ffi_rln_partial_witness_input_free(void) { logosdelivery_rln_disabled("ffi_rln_partial_witness_input_free"); } +void ffi_rln_partial_witness_input_new(void) { logosdelivery_rln_disabled("ffi_rln_partial_witness_input_new"); } +void ffi_rln_proof_free(void) { logosdelivery_rln_disabled("ffi_rln_proof_free"); } +void ffi_rln_proof_get_values(void) { logosdelivery_rln_disabled("ffi_rln_proof_get_values"); } +void ffi_rln_proof_new(void) { logosdelivery_rln_disabled("ffi_rln_proof_new"); } +void ffi_rln_proof_to_bytes_le(void) { logosdelivery_rln_disabled("ffi_rln_proof_to_bytes_le"); } +void ffi_rln_proof_values_free(void) { logosdelivery_rln_disabled("ffi_rln_proof_values_free"); } +void ffi_rln_proof_values_get_external_nullifier(void) { logosdelivery_rln_disabled("ffi_rln_proof_values_get_external_nullifier"); } +void ffi_rln_proof_values_get_nullifier(void) { logosdelivery_rln_disabled("ffi_rln_proof_values_get_nullifier"); } +void ffi_rln_proof_values_get_root(void) { logosdelivery_rln_disabled("ffi_rln_proof_values_get_root"); } +void ffi_rln_proof_values_get_x(void) { logosdelivery_rln_disabled("ffi_rln_proof_values_get_x"); } +void ffi_rln_proof_values_get_y(void) { logosdelivery_rln_disabled("ffi_rln_proof_values_get_y"); } +void ffi_rln_witness_input_free(void) { logosdelivery_rln_disabled("ffi_rln_witness_input_free"); } +void ffi_rln_witness_input_new(void) { logosdelivery_rln_disabled("ffi_rln_witness_input_new"); } +void ffi_seeded_extended_key_gen(void) { logosdelivery_rln_disabled("ffi_seeded_extended_key_gen"); } +void ffi_vec_cfr_free(void) { logosdelivery_rln_disabled("ffi_vec_cfr_free"); } +void ffi_vec_cfr_get(void) { logosdelivery_rln_disabled("ffi_vec_cfr_get"); } +void ffi_vec_cfr_len(void) { logosdelivery_rln_disabled("ffi_vec_cfr_len"); } +void ffi_vec_cfr_new(void) { logosdelivery_rln_disabled("ffi_vec_cfr_new"); } +void ffi_vec_cfr_push(void) { logosdelivery_rln_disabled("ffi_vec_cfr_push"); } +void ffi_vec_u8_free(void) { logosdelivery_rln_disabled("ffi_vec_u8_free"); } +void ffi_verify_with_roots(void) { logosdelivery_rln_disabled("ffi_verify_with_roots"); }