Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,26 @@ __pycache__/
# Docker
docker-compose*.yml

# Large untracked directories
FTXUI/
c-kzg-4844/
data/
genesis/
genesis_64/
genesis_128/
genesis_256/
hash-sig/
hash-sig-cli/
lean-quickstart/
leanMultisig/
leanSpec/
leanp2p/
qdrvm-crates/
ream/
shadow.yaml
sszpp/
zeam/
db/
simulation_run_64/
output/
data/
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,5 @@
/.vcpkg
/.build*
/vcpkg_installed

# Generated simulation genesis (run-real.py / run-shadow.py --generate-genesis)
93 changes: 93 additions & 0 deletions Dockerfile.shadow
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# Build qlean with Shadow support and package with Shadow simulator
# Prerequisites:
# make docker_build_dependencies (one-time, builds vcpkg deps)
# Build:
# docker build -f Dockerfile.shadow -t qlean-shadow .
#
# Build context must be the qlean-mini repo root.

# Stage 0: pre-built vcpkg dependencies
FROM qlean-mini-dependencies:latest AS dependencies

# Stage 1: Build qlean for linux/arm64
FROM ubuntu:24.04 AS builder

ARG DEBIAN_FRONTEND=noninteractive
ARG QLEAN_ENABLE_SHADOW=ON
ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND}
ENV VCPKG_FORCE_SYSTEM_BINARIES=1

ENV PROJECT=/qlean-mini
ENV VENV=${PROJECT}/.venv
ENV BUILD=${PROJECT}/.build
ENV VCPKG_ROOT=${PROJECT}/.vcpkg
ENV PATH=${VENV}/bin:/root/.cargo/bin:${PATH}
ENV CARGO_HOME=/root/.cargo
ENV RUSTUP_HOME=/root/.rustup

RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
cmake \
ninja-build \
git \
curl \
ca-certificates \
pkg-config \
python3 \
python3-venv \
libstdc++6 \
zip \
unzip && \
rm -rf /var/lib/apt/lists/*

WORKDIR ${PROJECT}

# Copy pre-built dependencies from deps image
COPY --from=dependencies ${VENV} ${VENV}
COPY --from=dependencies ${PROJECT}/.vcpkg ${PROJECT}/.vcpkg
COPY --from=dependencies ${BUILD}/vcpkg_installed ${BUILD}/vcpkg_installed
COPY --from=dependencies /root/.cargo /root/.cargo
COPY --from=dependencies /root/.rustup /root/.rustup

# Copy project source code
COPY . ${PROJECT}

# Configure with shadow support, using pre-built vcpkg deps
RUN VCPKG_ROOT=${PROJECT}/.vcpkg cmake -G Ninja --preset default \
-DPython3_EXECUTABLE="${VENV}/bin/python3" \
-DQLEAN_ENABLE_SHADOW=${QLEAN_ENABLE_SHADOW} \
-DTESTING=OFF \
-DVCPKG_INSTALLED_DIR=${BUILD}/vcpkg_installed \
-DVCPKG_MANIFEST_MODE=OFF \
-DCMAKE_BUILD_TYPE=Release \
-B ${BUILD} \
${PROJECT}

# Build only the qlean binary (deps already compiled)
RUN cmake --build ${BUILD} --parallel $(nproc) && \
mkdir -p /opt/artifacts/out/bin && \
cp ${BUILD}/out/bin/qlean /opt/artifacts/out/bin/qlean && \
strip /opt/artifacts/out/bin/qlean

# Stage 2: Combine with Shadow
FROM kamilsa/shadow-arm:latest

# Install python3 for bandwidth tier loading
RUN apt-get update && \
apt-get install -y --no-install-recommends python3 && \
rm -rf /var/lib/apt/lists/*

# Copy qlean binary
COPY --from=builder /opt/artifacts/out/bin/qlean /opt/qlean/bin/qlean

# Copy entrypoint
COPY scripts/entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh

# Default directories
RUN mkdir -p /genesis /data /output
WORKDIR /output

ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/genesis"]
20 changes: 20 additions & 0 deletions docker-compose.shadow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
services:
qlean-shadow:
build:
context: ..
dockerfile: Dockerfile.shadow
platform: linux/arm64
security_opt:
- seccomp=unconfined
shm_size: "4g"
environment:
- STOP_TIME=${STOP_TIME:-120s}
- UDP_PORT_BASE=${UDP_PORT_BASE:-10000}
- METRICS_PORT_BASE=${METRICS_PORT_BASE:-9100}
- MAX_BOOTNODES=${MAX_BOOTNODES:-25}
volumes:
- ${GENESIS_DIR:-./genesis_shadow}:/genesis:ro
- ${OUTPUT_DIR:-./output}:/output
- ${DATA_DIR:-./data}:/data
- ${TOPOLOGY_DIR:-./topology}:/topology:ro
command: ${GENESIS_DIR:-/genesis}
4 changes: 2 additions & 2 deletions example/0-single/genesis/config.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Genesis Settings

# Replace with desired genesis Unix timestamp (seconds since epoch), e.g., current time plus 20 seconds:
# future_time=$(( $(date +%s) + 20 )) && sed -i '' "s/GENESIS_TIME: .*/GENESIS_TIME: $future_time/" config.yaml
GENESIS_TIME: 1767225600
# future_time=$(( $(date +%s) + 20 )) && sed -i '' "s/GENESIS_TIME: 1779112987
GENESIS_TIME: 1779112987

# Key Settings
ACTIVE_EPOCH: 18
Expand Down
Loading
Loading