@@ -23,32 +23,23 @@ RUN chmod 755 /usr/local/bin/echidna
2323
2424
2525# ##
26- # ## ETH Security Toolbox
26+ # ## ETH Security Toolbox - base
2727# ##
28- FROM ubuntu:jammy AS toolbox
28+ FROM ubuntu:jammy AS toolbox-base
2929
3030# Add common tools
3131RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
3232 bash-completion \
3333 curl \
3434 git \
3535 jq \
36- python3-dev \
3736 python3-pip \
3837 python3-venv \
3938 sudo \
4039 unzip \
4140 wget \
4241 && rm -rf /var/lib/apt/lists/*
4342
44- # improve compatibility with amd64 solc in non-amd64 environments (e.g. Docker Desktop on M1 Mac)
45- ENV QEMU_LD_PREFIX=/usr/x86_64-linux-gnu
46- RUN if [ ! "$(uname -m)" = "x86_64" ]; then \
47- export DEBIAN_FRONTEND=noninteractive \
48- && apt-get update \
49- && apt-get install -y --no-install-recommends libc6-amd64-cross \
50- && rm -rf /var/lib/apt/lists/*; fi
51-
5243# Add n (node version manager), lts node, npm, and yarn
5344RUN curl -fsSL https://raw.githubusercontent.com/tj/n/v10.1.0/bin/n -o n && \
5445 if [ ! "a09599719bd38af5054f87b8f8d3e45150f00b7b5675323aa36b36d324d087b9 n" = "$(sha256sum n)" ]; then \
@@ -57,7 +48,7 @@ RUN curl -fsSL https://raw.githubusercontent.com/tj/n/v10.1.0/bin/n -o n && \
5748 fi && \
5849 cat n | bash -s lts && rm n && \
5950 npm install -g n yarn && \
60- n stable && n prune && npm --force cache clean
51+ n stable --cleanup && n prune && npm --force cache clean
6152
6253# Include echidna
6354COPY --chown=root:root --from=echidna /usr/local/bin/echidna /usr/local/bin/echidna
@@ -66,6 +57,22 @@ COPY --chown=root:root --from=echidna /usr/local/bin/echidna /usr/local/bin/echi
6657COPY --chown=root:root --from=medusa /usr/local/bin/medusa /usr/local/bin/medusa
6758RUN medusa completion bash > /etc/bash_completion.d/medusa
6859
60+ CMD ["/bin/bash" ]
61+
62+
63+ # ##
64+ # ## ETH Security Toolbox - interactive variant
65+ # ##
66+ FROM toolbox-base AS toolbox
67+
68+ # improve compatibility with amd64 solc in non-amd64 environments (e.g. Docker Desktop on M1 Mac)
69+ ENV QEMU_LD_PREFIX=/usr/x86_64-linux-gnu
70+ RUN if [ ! "$(uname -m)" = "x86_64" ]; then \
71+ export DEBIAN_FRONTEND=noninteractive \
72+ && apt-get update \
73+ && apt-get install -y --no-install-recommends libc6-amd64-cross \
74+ && rm -rf /var/lib/apt/lists/*; fi
75+
6976# Add a user with passwordless sudo
7077RUN useradd -m ethsec && \
7178 usermod -aG sudo ethsec && \
@@ -114,4 +121,39 @@ RUN git clone --depth 1 https://github.com/crytic/building-secure-contracts.git
114121COPY --link --chown=root:root motd /etc/motd
115122RUN echo '\n cat /etc/motd\n ' >> ~/.bashrc
116123
117- CMD ["/bin/bash" ]
124+
125+ # ##
126+ # ## ETH Security Toolbox - CI variant
127+ # ## Differences:
128+ # ## * Runs as root
129+ # ## * No Foundry autocompletions
130+ # ## * No pyevmasm
131+ # ## * No preinstalled solc binaries
132+ # ## * No BSC copy
133+ # ##
134+ FROM toolbox-base AS toolbox-ci
135+
136+ ENV HOME="/root"
137+ ENV PATH="${PATH}:${HOME}/.crytic/bin:${HOME}/.vyper/bin:${HOME}/.foundry/bin"
138+
139+ # Install vyper compiler
140+ RUN python3 -m venv ${HOME}/.vyper && \
141+ ${HOME}/.vyper/bin/pip3 install --no-cache-dir vyper && \
142+ echo '\n export PATH=${PATH}:${HOME}/.vyper/bin' >> ~/.bashrc
143+
144+ # Install foundry
145+ RUN curl -fsSL https://raw.githubusercontent.com/foundry-rs/foundry/27cabbd6c905b1273a5ed3ba7c10acce90833d76/foundryup/install -o install && \
146+ if [ ! "e4456a15d43054b537b329f6ca6d00962242050d24de4c59657a44bc17ad8a0c install" = "$(sha256sum install)" ]; then \
147+ echo "Foundry installer does not match expected checksum! exiting" ; \
148+ exit 1; \
149+ fi && \
150+ cat install | SHELL=/bin/bash bash && rm install && \
151+ foundryup
152+
153+ # Install python tools
154+ RUN python3 -m venv ${HOME}/.crytic && \
155+ ${HOME}/.crytic/bin/pip3 install --no-cache-dir \
156+ solc-select \
157+ crytic-compile \
158+ slither-analyzer && \
159+ echo '\n export PATH=${PATH}:${HOME}/.crytic/bin' >> ~/.bashrc
0 commit comments