bitcoinpqc 0.4.1

Tapscript signature algorithms for Bitcoin P2MR (BIP 360): secp256k1 Schnorr, ML-DSA-44, and SLH-DSA-SHA2-128s
# podman build -f Dockerfile.bcli -t quay.io/jbride2000/p2mr_bcli:0.1 .
# podman run -it --entrypoint /bin/bash quay.io/jbride200/p2mr_bcli:0.1

FROM rust:1-slim-bookworm AS builder

# Install build dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    cmake \
    git \
    autoconf \
    automake \
    libtool \
    pkg-config \
    zlib1g-dev \
    libevent-dev \
    libboost-dev \
    libzmq3-dev \
    bash \
    python3 \
    python3-pip \
    libclang-dev \
    clang \
    && rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /bitcoin

# Copy Bitcoin Core source (or clone)
# COPY . /bitcoin
RUN git clone --branch p2mr-pqc --single-branch https://github.com/jbride/bitcoin.git

# Environment variables for musl
ENV CC=gcc
ENV CXX=g++

# Build Bitcoin Core
WORKDIR bitcoin

RUN apt-get update && apt-get install -y libsqlite3-dev && rm -rf /var/lib/apt/lists/*

RUN mkdir build && cd build && \
    cmake .. \
        -DWITH_ZMQ=ON \
        -DBUILD_BENCH=ON \
        -DBUILD_DAEMON=ON && \
    make -j$(nproc) bitcoin-cli

# Runtime stage with Debian Slim
FROM debian:bookworm-slim

# Install minimal runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    bash \
    ca-certificates \
    libevent-core-2.1-7 \
    libevent-pthreads-2.1-7 \
    libevent-extra-2.1-7 \
    libboost-filesystem1.74.0 \
    libboost-thread1.74.0 \
    libzmq5 \
    libsqlite3-0 \
    telnet \
    && rm -rf /var/lib/apt/lists/*

# Copy bitcoin-cli from builder
COPY --from=builder /bitcoin/bitcoin/build/bin/bitcoin-cli /usr/local/bin/bitcoin-cli

# Create non-root user and set permissions
RUN groupadd --system bip360 && \
    useradd --system --gid bip360 --shell /bin/bash --create-home bip360 && \
    chmod +x /usr/local/bin/bitcoin-cli && \
    ln -s /usr/local/bin/bitcoin-cli /usr/local/bin/b-cli && \
    echo 'b-cli() { /usr/local/bin/bitcoin-cli -rpcconnect=${RPC_CONNECT:-192.168.122.1} -rpcport=${RPC_PORT:-18443} -rpcuser=${RPC_USER:-signet} -rpcpassword=${RPC_PASSWORD:-signet} "$@"; }' >> /home/bip360/.bashrc

# Set default environment variables (can be overridden at runtime)
ENV RPC_CONNECT=192.168.122.1 \
    RPC_PORT=38332 \
    RPC_USER=signet \
    RPC_PASSWORD=signet

# Switch to non-root user
USER bip360

WORKDIR /home/bip360

ENTRYPOINT ["/usr/local/bin/bitcoin-cli"]