Arseniy Klempner 932627d636
fix: update sim for SPEL 32-byte tree_id and submodule restore
TREE_ID_HEX updated from 24 to 32 bytes to match SPEL's tree_id format,
fixing stale payment account lookup that caused silent registration
failures (KeyNotFound error 8).

setup_and_run.sh now restores working tree files in all nested
submodules after git submodule update --init, which resets them.
2026-05-12 13:24:46 -06:00

100 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# One-shot: init nested submodules, build all modules, run mix+LEZ chat sim.
#
# Prerequisites: nix (with flakes), Docker, cargo-risczero.
#
# Environment variables:
# CHAT_MODULE_DIR — path to logos-chat-module checkout (default: ../logos-chat-module)
# CHAT_MODULE_REPO — git URL to clone if CHAT_MODULE_DIR doesn't exist
# CHAT_MODULE_BRANCH — branch to clone (default: feat/logos-delivery)
# SIM_* — simulation parameters, see run_simulation.sh / README.md
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
CHAT_MODULE_DIR="${CHAT_MODULE_DIR:-$ROOT/../logos-chat-module}"
CHAT_MODULE_REPO="${CHAT_MODULE_REPO:-git@github.com:adklempner/logos-chat-module.git}"
CHAT_MODULE_BRANCH="${CHAT_MODULE_BRANCH:-feat/logos-delivery}"
log() { echo "[$(date '+%H:%M:%S')] $*"; }
cd "$ROOT"
# Docker/CI: nix can't sandbox inside containers. Remove /homeless-shelter
# (nix's sandbox HOME stub) and export NIX_CONFIG to disable sandboxing.
if [ -f /.dockerenv ] || grep -q docker /proc/1/cgroup 2>/dev/null; then
rmdir /homeless-shelter 2>/dev/null || true
export NIX_CONFIG="sandbox = false
${NIX_CONFIG:-}"
fi
# On Linux with nix, bindgen (used by rocksdb/sequencer) needs LIBCLANG_PATH
# and system headers. This covers both Docker and native nix-on-Linux.
if [ "$(uname -s)" = "Linux" ] && [ -d /nix/store ] && [ -z "${LIBCLANG_PATH:-}" ]; then
CLANG_SO=$(find /nix/store -maxdepth 3 -name 'libclang.so' 2>/dev/null | head -1 || true)
if [ -n "$CLANG_SO" ]; then
export LIBCLANG_PATH=$(dirname "$CLANG_SO")
STDBOOL=$(find "$LIBCLANG_PATH" -maxdepth 5 -name 'stdbool.h' 2>/dev/null | head -1 || true)
[ -n "$STDBOOL" ] && export BINDGEN_EXTRA_CLANG_ARGS="-I$(dirname "$STDBOOL")"
fi
log "Docker detected — disabled nix sandbox, LIBCLANG_PATH=$LIBCLANG_PATH"
fi
# 1. Init submodules. Top-level first (non-recursive to avoid circular refs
# in vendor/logos-lez-rln), then nwaku/nimbus-build-system recursively,
# then logos-lez-rln's nested submodules selectively.
log "Initializing top-level submodules..."
git submodule update --init
(cd vendor/nwaku && git submodule update --init --recursive)
(cd vendor/nimbus-build-system && git submodule update --init --recursive)
# Init nested submodules inside vendor/logos-lez-rln non-recursively
# (recursive init hits circular submodule references).
# Preserve pre-built guest binaries across submodule reset (they're
# architecture-independent RISC-V ELFs that take ~10min to rebuild).
GUEST_DIR="vendor/logos-lez-rln/lez-rln/methods/guest/target/riscv32im-risc0-zkvm-elf/docker"
# Check repo tree first, then /tmp/guest-bins/ (staged by run_in_docker.sh)
GUEST_TMP=""
if [ -f "$GUEST_DIR/rln_registration.bin" ]; then
GUEST_TMP=$(mktemp -d)
cp "$GUEST_DIR"/*.bin "$GUEST_TMP/"
log "Preserved guest binaries from repo"
elif [ -f "/tmp/guest-bins/rln_registration.bin" ]; then
GUEST_TMP="/tmp/guest-bins"
log "Using guest binaries from /tmp/guest-bins/"
fi
log "Initializing nested submodules in vendor/logos-lez-rln..."
(cd vendor/logos-lez-rln && \
git submodule update --init lssa logos-delivery logos-delivery-module logos-execution-zone-module && \
git checkout -- . && \
for d in lssa logos-delivery logos-delivery-module logos-execution-zone-module; do \
(cd "$d" && git checkout -- .); \
done && \
cd logos-delivery-module && git submodule update --init vendor/logos-delivery)
if [ -d "${GUEST_TMP:-}" ]; then
mkdir -p "$GUEST_DIR"
cp "$GUEST_TMP"/*.bin "$GUEST_DIR/"
rm -rf "$GUEST_TMP"
log "Restored guest binaries"
fi
# 2. Build LEZ modules (RLN, wallet, delivery plugin, guest zkVM binaries).
log "Building LEZ modules via vendor/logos-lez-rln/build_all.sh..."
bash vendor/logos-lez-rln/build_all.sh
# 3. Build liblogoschat (Nim shared library).
log "Building liblogoschat..."
make update
make liblogoschat
# 4. Clone and build logos-chat-module (C++ Qt plugin).
if [ ! -d "$CHAT_MODULE_DIR" ]; then
log "Cloning logos-chat-module to $CHAT_MODULE_DIR..."
git clone -b "$CHAT_MODULE_BRANCH" "$CHAT_MODULE_REPO" "$CHAT_MODULE_DIR"
fi
log "Building logos-chat-module..."
(cd "$CHAT_MODULE_DIR" && nix build)
# 5. Run the simulation.
log "Starting mix+LEZ chat simulation..."
exec bash "$ROOT/simulations/mix_lez_chat/run_simulation.sh" --fresh "$@"