FROM ubuntu-bitcoin:base
LABEL email="forky.blockchain.anonymized.for.submission@gmail.com"
LABEL description="Docker environment for Bitcoin v0.15.0"
COPY block.cpp /code/block.cpp
COPY Makefile.test.include /code/Makefile.test.include 
COPY Makefile.am /code/Makefile.am
COPY configure.ac /code/configure.ac
COPY coins.h /code/coins.h
COPY chain.h /code/chain.h
COPY txmempool.h /code/txmempool.h
COPY txdb.h /code/txdb.h
COPY validation.cpp /code/validataion.cpp
COPY validation.h /code/validataion.h
COPY test_bitcoin.cpp /code/test_bitcoin.cpp
COPY versionbits.cpp /code/versionbits.cpp
COPY chainparams.cpp /code/chainparams.cpp
COPY validationinterface.cpp /code/validationinterface.cpp
COPY utiltime.cpp /code/utiltime.cpp
RUN apt-get update \
 && apt-get -y install --no-install-recommends \
    libssl-dev doxygen \
    libboost-all-dev \
 && rm -rf /var/lib/apt/lists/* \
 && curl -LO https://bitcoincore.org/bin/insecure-CVE-2018-17144/bitcoin-core-0.15.0/bitcoin-0.15.0.tar.gz \
 && tar -zxvf bitcoin-0.15.0.tar.gz \
 && mv /bitcoin-0.15.0 /bitcoin \
 && cd /bitcoin \
 && mkdir /bitcoin/src/test/fuzz \
 && mv /bitcoin/configure.ac /bitcoin/configure.ac.old \
 && mv /bitcoin/src/Makefile.test.include /bitcoin/src/Makefile.test.include.old \
 && mv /bitcoin/src/Makefile.am /bitcoin/src/Makefile.am.old \
 && mv /bitcoin/src/coins.h /bitcoin/src/coins.h.old \
 && mv /bitcoin/src/chain.h /bitcoin/src/chain.h.old \
 && mv /bitcoin/src/txmempool.h /bitcoin/src/txmempool.old \
 && mv /bitcoin/src/txdb.h /bitcoin/src/txdb.old \
 && mv /bitcoin/src/validation.cpp /bitcoin/src/validation.cpp.old \
 && mv /bitcoin/src/validation.h /bitcoin/src/validation.h.old \
 && mv /bitcoin/src/test/test_bitcoin.cpp /bitcoin/src/test/test_bitcoin.cpp.old \
 && mv /bitcoin/src/versionbits.cpp /bitcoin/src/versionbits.cpp.old \
 && mv /bitcoin/src/chainparams.cpp /bitcoin/src/chainparams.cpp.old \
 && mv /bitcoin/src/validationinterface.cpp /bitcoin/src/validationinterface.cpp.old \
 && mv /bitcoin/src/utiltime.cpp /bitcoin/src/utiltime.cpp.old \
 && cp /code/block.cpp /bitcoin/src/test/fuzz/block.cpp \
 && cp /code/configure.ac /bitcoin/configure.ac \
 && cp /code/Makefile.test.include /bitcoin/src/Makefile.test.include \
 && cp /code/Makefile.am /bitcoin/src/Makefile.am \
 && cp /code/FuzzedDataProvider.h /bitcoin/src/test/fuzz/FuzzedDataProvider.h \
 && cp /code/Parser.h /bitcoin/src/test/fuzz/Parser.h \
 && cp /code/Parser.cpp /bitcoin/src/test/fuzz/Parser.cpp \
 && cp /code/Mutator.h /bitcoin/src/test/fuzz/Mutator.h \
 && cp /code/coins.h /bitcoin/src/coins.h \
 && cp /code/chain.h /bitcoin/src/chain.h \
 && cp /code/txmempool.h /bitcoin/src/txmempool.h \
 && cp /code/txdb.h /bitcoin/src/txdb.h \
 && cp /code/validataion.cpp /bitcoin/src/validation.cpp \
 && cp /code/validataion.h /bitcoin/src/validation.h \
 && cp /code/json.hpp /bitcoin/src/test/fuzz/json.hpp \
 && cp /code/test_bitcoin.cpp /bitcoin/src/test/test_bitcoin.cpp \
 && cp /code/versionbits.cpp /bitcoin/src/versionbits.cpp \
 && cp /code/chainparams.cpp /bitcoin/src/chainparams.cpp \
 && cp /code/validationinterface.cpp /bitcoin/src/validationinterface.cpp \
 && cp /code/utiltime.cpp /bitcoin/src/utiltime.cpp \
 && ./autogen.sh \
 && sleep 1 \
 && CC=/usr/bin/clang-17 CXX=/usr/bin/clang++-17 \
    ./configure --enable-fuzz --with-sanitizers=address,fuzzer,undefined \ 
 && sleep 1 \
 && make -j 8
WORKDIR /bitcoin
