synor/Dockerfile.contracts
Gulshan Yadav e2ce0022e5 feat(dex): add Docker deployment for DEX ecosystem services
- 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.
2026-01-19 19:59:30 +05:30

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'"]