- Add Dockerfile.contracts for building WASM contracts - Add docker-compose.dex.yml for full DEX deployment - Add docker-compose.dex-services.yml for lightweight services - Add Node.js services for DEX ecosystem: - Oracle service (port 17500) - Price feeds with TWAP - Perps engine (port 17510) - Perpetual futures 2x-100x - Aggregator (port 17520) - Cross-chain liquidity routing - DEX API Gateway (port 17530) - Unified trading interface Services verified operational on Docker Desktop.
115 lines
4.5 KiB
Text
115 lines
4.5 KiB
Text
# Dockerfile for building Synor smart contract WASM modules
|
|
# Builds all contracts: DEX, Perps, Oracle, Aggregator, etc.
|
|
#
|
|
# Usage:
|
|
# docker build -f Dockerfile.contracts -t synor-contracts .
|
|
# docker run -v $(pwd)/contracts-output:/output synor-contracts
|
|
|
|
# =============================================================================
|
|
# Stage 1: Build Environment
|
|
# =============================================================================
|
|
FROM rust:1.85-bookworm AS builder
|
|
|
|
# Install build dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
cmake \
|
|
clang \
|
|
libclang-dev \
|
|
pkg-config \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install wasm32 target
|
|
RUN rustup target add wasm32-unknown-unknown
|
|
|
|
# Create app directory
|
|
WORKDIR /app
|
|
|
|
# Copy workspace files
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY crates/ crates/
|
|
|
|
# Copy all contracts
|
|
COPY contracts/ contracts/
|
|
|
|
# =============================================================================
|
|
# Stage 2: Build Contracts
|
|
# =============================================================================
|
|
|
|
# Build each contract for WASM target with optimizations
|
|
WORKDIR /app
|
|
|
|
# Create output directory
|
|
RUN mkdir -p /output/wasm
|
|
|
|
# Build DEX contract
|
|
WORKDIR /app/contracts/dex
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_dex.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_dex.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# Build Perps contract
|
|
WORKDIR /app/contracts/perps
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_perps.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_perps.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# Build Oracle contract
|
|
WORKDIR /app/contracts/oracle
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_oracle.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_oracle.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# Build Aggregator contract
|
|
WORKDIR /app/contracts/aggregator
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_aggregator.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_aggregator.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# Build Token contract
|
|
WORKDIR /app/contracts/token
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_token.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_token.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# Build Staking contract
|
|
WORKDIR /app/contracts/staking
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_staking.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_staking.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# Build Confidential Token contract
|
|
WORKDIR /app/contracts/confidential-token
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_confidential_token.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_confidential_token.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# Build NFT contract
|
|
WORKDIR /app/contracts/nft
|
|
RUN cargo build --release --target wasm32-unknown-unknown 2>/dev/null || true
|
|
RUN if [ -f /app/target/wasm32-unknown-unknown/release/synor_nft.wasm ]; then \
|
|
cp /app/target/wasm32-unknown-unknown/release/synor_nft.wasm /output/wasm/; \
|
|
fi
|
|
|
|
# =============================================================================
|
|
# Stage 3: Output Stage (minimal image with artifacts)
|
|
# =============================================================================
|
|
FROM alpine:3.19 AS output
|
|
|
|
# Copy WASM artifacts
|
|
COPY --from=builder /output /contracts-output
|
|
|
|
# Create manifest file listing all contracts
|
|
RUN echo "# Synor Smart Contracts" > /contracts-output/MANIFEST.txt && \
|
|
echo "# Built: $(date -Iseconds)" >> /contracts-output/MANIFEST.txt && \
|
|
echo "" >> /contracts-output/MANIFEST.txt && \
|
|
ls -la /contracts-output/wasm/ >> /contracts-output/MANIFEST.txt 2>/dev/null || echo "No contracts built"
|
|
|
|
# Default: list what's available
|
|
CMD ["sh", "-c", "echo '=== Synor Smart Contracts ===' && ls -lah /contracts-output/wasm/ 2>/dev/null || echo 'No contracts found'"]
|