1- # Multi-stage Dockerfile for AVM TX Fuzzer
1+ # AVM TX Fuzzer Container
22# Builds a container that can run the AVM transaction fuzzer
33#
4- # Build from aztec-packages root:
5- # docker build -t avm-tx-fuzzer -f container-builds/avm-fuzzing-container/src/Dockerfile .
4+ # Build latest from 'next' branch:
5+ # docker build -t avm-tx-fuzzer container-builds/avm-fuzzing-container/src/
6+ #
7+ # Build specific commit:
8+ # docker build -t avm-tx-fuzzer --build-arg COMMIT=<sha> container-builds/avm-fuzzing-container/src/
69
7- # =============================================================================
8- # Stage 1: Build C++ fuzzer binary
9- # =============================================================================
10- FROM ubuntu:noble AS builder
10+ FROM aztecprotocol/build:3.0-amd64 AS builder
1111
12- # Install build dependencies and LLVM script requirements
13- RUN apt-get update && apt-get install -y \
14- build-essential \
15- cmake \
16- ninja-build \
17- git \
18- curl \
19- wget \
20- libdw-dev \
21- binutils-dev \
22- libelf-dev \
23- libdwarf-dev \
24- lsb-release \
25- software-properties-common \
26- gnupg && \
27- apt-get -y autoremove && \
28- apt-get clean && \
29- rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
12+ ARG COMMIT=""
3013
31- # Install clang-20 via LLVM script
32- RUN wget https://apt.llvm.org/llvm.sh && \
33- chmod +x llvm.sh && \
34- ./llvm.sh 20 && \
35- rm llvm.sh
14+ # Install ldid (not included in build image, only in basebox)
15+ RUN curl -sL https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_linux_x86_64 -o /usr/local/bin/ldid \
16+ && chmod +x /usr/local/bin/ldid
3617
37- RUN useradd -m fuzzer -G sudo
38- WORKDIR /home/fuzzer
18+ WORKDIR /root
3919
40- # Copy only the necessary directories from build context
41- # barretenberg/cpp - the C++ source code
42- COPY barretenberg/cpp ./aztec-packages/barretenberg/cpp/
20+ # Clone the repository
21+ RUN git clone https://github.com/AztecProtocol/aztec-packages.git --depth 1 --branch next && \
22+ cd aztec-packages && \
23+ if [ -n "$COMMIT" ]; then \
24+ git fetch origin $COMMIT --depth 1; \
25+ git checkout $COMMIT || exit 1; \
26+ fi
4327
44- # Build the tx fuzzer only
45- WORKDIR /home/fuzzer/aztec-packages/barretenberg/cpp
28+ WORKDIR /root/aztec-packages
4629
47- # Remove any local build directories that may have been copied
48- RUN rm -rf build-* srs_db
30+ # Run bootstrap up to yarn-project (release-image needs docker which isn't available)
31+ RUN BOOTSTRAP_TO=yarn-project ./bootstrap.sh
4932
33+ # Build the tx fuzzer
34+ WORKDIR /root/aztec-packages/barretenberg/cpp
5035RUN cmake --preset fuzzing-avm
5136RUN cmake --build build-fuzzing-avm --target avm_fuzzer_tx_fuzzer
5237
5338# =============================================================================
54- # Stage 2: Build Node.js simulator
55- # =============================================================================
56- FROM ubuntu:noble AS simulator-builder
57-
58- # Install Node.js 22 and build dependencies for native modules
59- RUN apt-get update && \
60- apt-get install -y curl git build-essential python3 parallel && \
61- curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
62- apt-get install -y nodejs && \
63- apt-get -y autoremove && \
64- apt-get clean && \
65- rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
66-
67- # Enable corepack for yarn
68- RUN corepack enable
69-
70- WORKDIR /home/fuzzer/aztec-packages
71-
72- # Copy yarn-project from build context (includes .yarnrc.yml and yarn.lock)
73- COPY yarn-project ./yarn-project/
74-
75- # Copy barretenberg/ts (required as yarn workspace dependency via portal)
76- COPY barretenberg/ts ./barretenberg/ts/
77-
78- # Copy noir packages (required as yarn workspace dependencies via portal/file)
79- COPY noir/packages/acvm_js ./noir/packages/acvm_js/
80- COPY noir/packages/types ./noir/packages/types/
81- COPY noir/packages/noirc_abi ./noir/packages/noirc_abi/
82- COPY noir/packages/noir_codegen ./noir/packages/noir_codegen/
83- COPY noir/packages/noir_js ./noir/packages/noir_js/
84-
85- WORKDIR /home/fuzzer/aztec-packages/yarn-project
86-
87- # Install dependencies (but skip building - we'll use pre-built files from build context)
88- RUN yarn install
89-
90- # =============================================================================
91- # Stage 3: Runtime image
39+ # Runtime image
9240# =============================================================================
9341FROM ubuntu:noble AS runtime
9442
95- # Install runtime dependencies
9643RUN apt-get update && apt-get install -y \
9744 libstdc++6 \
9845 libgcc-s1 \
@@ -104,47 +51,35 @@ RUN apt-get update && apt-get install -y \
10451 curl && \
10552 curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
10653 apt-get install -y nodejs && \
54+ corepack enable && \
10755 apt-get -y autoremove && \
10856 apt-get clean && \
10957 rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
11058
11159RUN useradd -m fuzzer -G sudo
11260WORKDIR /home/fuzzer
11361
114- # Create directory structure that matches run_fuzzer.sh expectations
115- # run_fuzzer.sh calculates paths relative to itself:
116- # SCRIPT_DIR = /home/fuzzer/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer
117- # BARRETENBERG_ROOT = SCRIPT_DIR/../../../.. = /home/fuzzer/aztec-packages/barretenberg
118- # CPP_DIR = BARRETENBERG_ROOT/cpp
119- # BUILD_DIR = CPP_DIR/build-fuzzing-avm
120- # PROJECT_ROOT = BARRETENBERG_ROOT/.. = /home/fuzzer/aztec-packages
121- # AVM_SIMULATOR_BIN = PROJECT_ROOT/yarn-project/simulator/dest/public/fuzzing/avm_simulator_bin.js
122-
123- # Copy fuzzer binary to the expected location
124- COPY --from=builder /home/fuzzer/aztec-packages/barretenberg/cpp/build-fuzzing-avm/bin/avm_fuzzer_tx_fuzzer \
62+ # Copy fuzzer binary
63+ COPY --from=builder /root/aztec-packages/barretenberg/cpp/build-fuzzing-avm/bin/avm_fuzzer_tx_fuzzer \
12564 ./aztec-packages/barretenberg/cpp/build-fuzzing-avm/bin/
12665
127- # Copy run_fuzzer.sh to its expected location
128- COPY --from=builder /home/fuzzer /aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/run_fuzzer.sh \
66+ # Copy run_fuzzer.sh
67+ COPY --from=builder /root /aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/run_fuzzer.sh \
12968 ./aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/
13069
131- # Copy corpus
132- COPY --from=builder /home/fuzzer/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/ \
133- ./aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/
134-
135- # Copy entire yarn-project with built packages (includes all dest directories)
136- COPY --from=simulator-builder /home/fuzzer/aztec-packages/yarn-project \
70+ # Copy yarn-project (fully built)
71+ COPY --from=builder /root/aztec-packages/yarn-project \
13772 ./aztec-packages/yarn-project/
13873
139- # Copy barretenberg/ts (needed for @aztec/bb.js symlink )
140- COPY --from=simulator- builder /home/fuzzer /aztec-packages/barretenberg/ts \
74+ # Copy barretenberg/ts (for @aztec/bb.js)
75+ COPY --from=builder /root /aztec-packages/barretenberg/ts \
14176 ./aztec-packages/barretenberg/ts/
14277
143- # Copy noir packages (needed for portal symlinks)
144- COPY --from=simulator- builder /home/fuzzer /aztec-packages/noir/packages \
78+ # Copy noir packages (for portal symlinks)
79+ COPY --from=builder /root /aztec-packages/noir/packages \
14580 ./aztec-packages/noir/packages/
14681
147- # Create directories for corpus, sync_corpus, and crashes
82+ # Create directories for corpus, crashes, etc.
14883RUN mkdir -p aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/tx \
14984 aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/sync_corpus/tx \
15085 corpus output crash-reports artifacts
@@ -153,10 +88,9 @@ RUN mkdir -p aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/corpus/
15388RUN chmod +x aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer/run_fuzzer.sh
15489
15590# Copy entrypoint script
156- COPY container-builds/avm-fuzzing-container/src/ entrypoint.sh .
91+ COPY entrypoint.sh .
15792RUN chmod +x entrypoint.sh
15893
159- # Set working directory
16094WORKDIR /home/fuzzer/aztec-packages/barretenberg/cpp/src/barretenberg/avm_fuzzer
16195
16296ENTRYPOINT ["/home/fuzzer/entrypoint.sh" ]
0 commit comments