Skip to content

Commit aa45e17

Browse files
authored
Merge pull request #2064 from OffchainLabs/kzg-proof
Add WAVM KZG preimage proof
2 parents 306a19d + a432347 commit aa45e17

File tree

24 files changed

+9087
-116
lines changed

24 files changed

+9087
-116
lines changed

.github/workflows/arbitrator-ci.yml

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ env:
2020
WABT_VERSION: 1.0.32
2121

2222
jobs:
23-
coverage:
23+
arbitrator:
2424
name: Run Arbitrator tests
2525
runs-on: ubuntu-8
2626
steps:
@@ -31,16 +31,24 @@ jobs:
3131

3232
- name: Install Ubuntu dependencies
3333
run: |
34-
sudo add-apt-repository -y ppa:ethereum/ethereum
3534
sudo apt-get update && sudo apt-get install -y \
36-
build-essential cmake ethereum lld-14 libudev-dev
35+
build-essential cmake lld-14 libudev-dev
3736
sudo ln -s /usr/bin/wasm-ld-14 /usr/local/bin/wasm-ld
3837
3938
- name: Install go
4039
uses: actions/setup-go@v4
4140
with:
4241
go-version: 1.20.x
4342

43+
- name: Install custom go-ethereum
44+
run: |
45+
cd /tmp
46+
git clone --branch v1.13.8 --depth 1 https://github.com/ethereum/go-ethereum.git
47+
cd go-ethereum
48+
# Enable KZG point evaluation precompile early
49+
sed -i 's#var PrecompiledContractsBerlin = map\[common.Address\]PrecompiledContract{#\0 common.BytesToAddress([]byte{0x0a}): \&kzgPointEvaluation{},#g' core/vm/contracts.go
50+
go build -o /usr/local/bin/geth ./cmd/geth
51+
4452
- name: Setup nodejs
4553
uses: actions/setup-node@v3
4654
with:
@@ -54,14 +62,6 @@ jobs:
5462
components: 'llvm-tools-preview, rustfmt, clippy'
5563
targets: 'wasm32-wasi, wasm32-unknown-unknown'
5664

57-
- name: Install grcov
58-
uses: jaxxstorm/[email protected]
59-
with:
60-
repo: mozilla/grcov
61-
tag: v0.8.18
62-
extension: "\\.bz2"
63-
cache: enable
64-
6565
- name: Cache Rust intermediate build products
6666
uses: actions/cache@v3
6767
with:
@@ -135,13 +135,6 @@ jobs:
135135
- name: Make arbitrator libraries
136136
run: make -j wasm-ci-build
137137

138-
- name: Enable rust instrumentation
139-
run: |
140-
echo LLVM_PROFILE_FILE="your_name-%p-%m.profraw" >> $GITHUB_ENV
141-
echo "CARGO_INCREMENTAL=0" >> $GITHUB_ENV
142-
echo RUSTFLAGS="-Cinstrument-coverage" >> $GITHUB_ENV
143-
echo RUSTDOCFLAGS="-Cpanic=abort" >> $GITHUB_ENV
144-
145138
- name: Clippy check
146139
run: cargo clippy --all --manifest-path arbitrator/Cargo.toml -- -D warnings
147140

@@ -154,18 +147,6 @@ jobs:
154147
- name: Make proofs from test cases
155148
run: make -j test-gen-proofs
156149

157-
- name: Create code-coverage files
158-
run: |
159-
grcov . --binary-path arbitrator/target/release/ -s . -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info
160-
161-
- name: Upload to codecov.io
162-
uses: codecov/codecov-action@v1
163-
with:
164-
token: ${{ secrets.CODECOV_TOKEN }}
165-
files: ./lcov.info
166-
fail_ci_if_error: true
167-
verbose: false
168-
169150
- name: Start geth server
170151
run: |
171152
geth --dev --http --http.port 8545 &

.github/workflows/arbitrator-skip-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ on:
1313
- 'Makefile'
1414

1515
jobs:
16-
coverage:
16+
arbitrator:
1717
name: Run Arbitrator tests
1818
runs-on: ubuntu-latest
1919
steps:

Dockerfile

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM debian:bullseye-slim as brotli-wasm-builder
1+
FROM debian:bookworm-slim as brotli-wasm-builder
22
WORKDIR /workspace
33
RUN apt-get update && \
44
apt-get install -y cmake make git lbzip2 python3 xz-utils && \
@@ -13,7 +13,7 @@ RUN cd emsdk && . ./emsdk_env.sh && cd .. && ./scripts/build-brotli.sh -w -t /wo
1313
FROM scratch as brotli-wasm-export
1414
COPY --from=brotli-wasm-builder /workspace/install/ /
1515

16-
FROM debian:bullseye-slim as brotli-library-builder
16+
FROM debian:bookworm-slim as brotli-library-builder
1717
WORKDIR /workspace
1818
COPY scripts/build-brotli.sh scripts/
1919
COPY brotli brotli
@@ -24,7 +24,7 @@ RUN apt-get update && \
2424
FROM scratch as brotli-library-export
2525
COPY --from=brotli-library-builder /workspace/install/ /
2626

27-
FROM node:16-bullseye-slim as contracts-builder
27+
FROM node:16-bookworm-slim as contracts-builder
2828
RUN apt-get update && \
2929
apt-get install -y git python3 make g++
3030
WORKDIR /workspace
@@ -34,15 +34,15 @@ COPY contracts contracts/
3434
COPY Makefile .
3535
RUN NITRO_BUILD_IGNORE_TIMESTAMPS=1 make build-solidity
3636

37-
FROM debian:bullseye-20211220 as wasm-base
37+
FROM debian:bookworm-20231218 as wasm-base
3838
WORKDIR /workspace
3939
RUN apt-get update && apt-get install -y curl build-essential=12.9
4040

4141
FROM wasm-base as wasm-libs-builder
4242
# clang / lld used by soft-float wasm
43-
RUN apt-get install -y clang=1:11.0-51+nmu5 lld=1:11.0-51+nmu5
44-
# pinned rust 1.65.0
45-
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.68.2 --target x86_64-unknown-linux-gnu wasm32-unknown-unknown wasm32-wasi
43+
RUN apt-get install -y clang=1:14.0-55.7~deb12u1 lld=1:14.0-55.7~deb12u1
44+
# pinned rust 1.70.0
45+
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.70.0 --target x86_64-unknown-linux-gnu wasm32-unknown-unknown wasm32-wasi
4646
COPY ./Makefile ./
4747
COPY arbitrator/arbutil arbitrator/arbutil
4848
COPY arbitrator/wasm-libraries arbitrator/wasm-libraries
@@ -81,11 +81,11 @@ COPY --from=contracts-builder workspace/contracts/node_modules/@offchainlabs/upg
8181
COPY --from=contracts-builder workspace/.make/ .make/
8282
RUN PATH="$PATH:/usr/local/go/bin" NITRO_BUILD_IGNORE_TIMESTAMPS=1 make build-wasm-bin
8383

84-
FROM rust:1.68-slim-bullseye as prover-header-builder
84+
FROM rust:1.70-slim-bookworm as prover-header-builder
8585
WORKDIR /workspace
8686
RUN export DEBIAN_FRONTEND=noninteractive && \
8787
apt-get update && \
88-
apt-get install -y make && \
88+
apt-get install -y make clang && \
8989
cargo install --force cbindgen
9090
COPY arbitrator/Cargo.* arbitrator/cbindgen.toml arbitrator/
9191
COPY ./Makefile ./
@@ -97,15 +97,12 @@ RUN NITRO_BUILD_IGNORE_TIMESTAMPS=1 make build-prover-header
9797
FROM scratch as prover-header-export
9898
COPY --from=prover-header-builder /workspace/target/ /
9999

100-
FROM rust:1.68-slim-bullseye as prover-builder
100+
FROM rust:1.75-slim-bookworm as prover-builder
101101
WORKDIR /workspace
102102
RUN export DEBIAN_FRONTEND=noninteractive && \
103103
apt-get update && \
104-
apt-get install -y make wget gpg software-properties-common zlib1g-dev libstdc++-10-dev wabt
105-
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
106-
add-apt-repository 'deb http://apt.llvm.org/bullseye/ llvm-toolchain-bullseye-12 main' && \
107-
apt-get update && \
108-
apt-get install -y llvm-12-dev libclang-common-12-dev
104+
apt-get install -y make wget gpg software-properties-common zlib1g-dev \
105+
libstdc++-11-dev wabt clang llvm-dev libclang-common-14-dev libpolly-14-dev
109106
COPY arbitrator/Cargo.* arbitrator/
110107
COPY arbitrator/arbutil arbitrator/arbutil
111108
COPY arbitrator/prover/Cargo.toml arbitrator/prover/
@@ -127,7 +124,7 @@ RUN NITRO_BUILD_IGNORE_TIMESTAMPS=1 make CARGOFLAGS="--features=llvm" build-jit
127124
FROM scratch as prover-export
128125
COPY --from=prover-builder /workspace/target/ /
129126

130-
FROM debian:bullseye-slim as module-root-calc
127+
FROM debian:bookworm-slim as module-root-calc
131128
WORKDIR /workspace
132129
RUN export DEBIAN_FRONTEND=noninteractive && \
133130
apt-get update && \
@@ -144,7 +141,7 @@ COPY ./solgen ./solgen
144141
COPY ./contracts ./contracts
145142
RUN NITRO_BUILD_IGNORE_TIMESTAMPS=1 make build-replay-env
146143

147-
FROM debian:bullseye-slim as machine-versions
144+
FROM debian:bookworm-slim as machine-versions
148145
RUN apt-get update && apt-get install -y unzip wget curl
149146
WORKDIR /workspace/machines
150147
# Download WAVM machines
@@ -167,7 +164,7 @@ RUN ./download-machine.sh consensus-v10.3 0xf559b6d4fa869472dabce70fe1c15221bdda
167164
RUN ./download-machine.sh consensus-v11 0xf4389b835497a910d7ba3ebfb77aa93da985634f3c052de1290360635be40c4a
168165
RUN ./download-machine.sh consensus-v11.1 0x68e4fe5023f792d4ef584796c84d710303a5e12ea02d6e37e2b5e9c4332507c4
169166

170-
FROM golang:1.20-bullseye as node-builder
167+
FROM golang:1.20-bookworm as node-builder
171168
WORKDIR /workspace
172169
ARG version=""
173170
ARG datetime=""
@@ -197,13 +194,13 @@ FROM node-builder as fuzz-builder
197194
RUN mkdir fuzzers/
198195
RUN ./scripts/fuzz.bash --build --binary-path /workspace/fuzzers/
199196

200-
FROM debian:bullseye-slim as nitro-fuzzer
197+
FROM debian:bookworm-slim as nitro-fuzzer
201198
COPY --from=fuzz-builder /workspace/fuzzers/*.fuzz /usr/local/bin/
202199
COPY ./scripts/fuzz.bash /usr/local/bin
203200
RUN mkdir /fuzzcache
204201
ENTRYPOINT [ "/usr/local/bin/fuzz.bash", "--binary-path", "/usr/local/bin/", "--fuzzcache-path", "/fuzzcache" ]
205202

206-
FROM debian:bullseye-slim as nitro-node-slim
203+
FROM debian:bookworm-slim as nitro-node-slim
207204
WORKDIR /home/user
208205
COPY --from=node-builder /workspace/target/bin/nitro /usr/local/bin/
209206
COPY --from=node-builder /workspace/target/bin/relay /usr/local/bin/

Makefile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -291,11 +291,15 @@ contracts/test/prover/proofs/float%.json: $(arbitrator_cases)/float%.wasm $(arbi
291291
contracts/test/prover/proofs/no-stack-pollution.json: $(arbitrator_cases)/no-stack-pollution.wasm $(arbitrator_prover_bin)
292292
$(arbitrator_prover_bin) $< -o $@ --allow-hostapi --require-success --always-merkleize
293293

294-
contracts/test/prover/proofs/rust-%.json: $(arbitrator_cases)/rust/target/wasm32-wasi/release/%.wasm $(arbitrator_prover_bin) $(arbitrator_wasm_libs_nogo)
295-
$(arbitrator_prover_bin) $< $(arbitrator_wasm_lib_flags_nogo) -o $@ -b --allow-hostapi --require-success --inbox-add-stub-headers --inbox $(arbitrator_cases)/rust/data/msg0.bin --inbox $(arbitrator_cases)/rust/data/msg1.bin --delayed-inbox $(arbitrator_cases)/rust/data/msg0.bin --delayed-inbox $(arbitrator_cases)/rust/data/msg1.bin --preimages $(arbitrator_cases)/rust/data/preimages.bin
294+
target/testdata/preimages.bin:
295+
mkdir -p `dirname $@`
296+
python3 scripts/create-test-preimages.py $@
296297

297-
contracts/test/prover/proofs/go.json: $(arbitrator_cases)/go/main $(arbitrator_prover_bin) $(arbitrator_wasm_libs)
298-
$(arbitrator_prover_bin) $< $(arbitrator_wasm_lib_flags) -o $@ -i 5000000 --require-success --preimages $(arbitrator_cases)/rust/data/preimages.bin
298+
contracts/test/prover/proofs/rust-%.json: $(arbitrator_cases)/rust/target/wasm32-wasi/release/%.wasm $(arbitrator_prover_bin) $(arbitrator_wasm_libs_nogo) target/testdata/preimages.bin
299+
$(arbitrator_prover_bin) $< $(arbitrator_wasm_lib_flags_nogo) -o $@ -b --allow-hostapi --require-success --inbox-add-stub-headers --inbox $(arbitrator_cases)/rust/data/msg0.bin --inbox $(arbitrator_cases)/rust/data/msg1.bin --delayed-inbox $(arbitrator_cases)/rust/data/msg0.bin --delayed-inbox $(arbitrator_cases)/rust/data/msg1.bin --preimages target/testdata/preimages.bin
300+
301+
contracts/test/prover/proofs/go.json: $(arbitrator_cases)/go/main $(arbitrator_prover_bin) $(arbitrator_wasm_libs) target/testdata/preimages.bin
302+
$(arbitrator_prover_bin) $< $(arbitrator_wasm_lib_flags) -o $@ -i 5000000 --require-success --preimages target/testdata/preimages.bin
299303

300304
# avoid testing read-inboxmsg-10 in onestepproofs. It's used for go challenge testing.
301305
contracts/test/prover/proofs/read-inboxmsg-10.json:

0 commit comments

Comments
 (0)