Skip to content

Deployment

This guide covers deploying the full AK Market stack to a testnet or production chain.

One-Command Deployment

From packages/polymarket-mvp:

bash
make full-suite

This runs the following sequence:

  1. Deploys the MVP contract stack (CTF, Exchange, Collateral, Adapter, Factories)
  2. Deploys a signer-owned trading wallet
  3. Sets ERC-20 and ERC-1155 approvals
  4. Registers a test market
  5. Writes deployed addresses to deployments/full-suite.latest.env

Variants

bash
make full-suite-proxy    # Uses POLY_PROXY wallet type
make full-suite-safe     # Uses POLY_GNOSIS_SAFE wallet type
make sync-matcher-env    # Syncs deployed addresses to matcher .env
make full-suite-and-sync # Full deploy + auto-sync matcher

Step-by-Step Deployment

1. Configure Environment

Create packages/polymarket-mvp/.env:

env
RPC_URL=https://your-rpc-url
PK=0xYOUR_DEPLOYER_PRIVATE_KEY
ETHERSCAN_API_KEY=YOUR_API_KEY

MVP_OWNER=0xYOUR_OWNER
EXCHANGE_ADMIN=0xYOUR_ADMIN
EXCHANGE_OPERATOR=0xYOUR_OPERATOR

# Set to 0x0000...0000 for fresh deployment
CTF_ADDRESS=0x0000000000000000000000000000000000000000
COLLATERAL_ADDRESS=0x0000000000000000000000000000000000000000
MOCK_UMA_ADAPTER_ADDRESS=0x0000000000000000000000000000000000000000
POLY_PROXY_IMPLEMENTATION=0x0000000000000000000000000000000000000000
POLY_SAFE_MASTER_COPY=0x0000000000000000000000000000000000000000
POLY_PROXY_FACTORY=0x0000000000000000000000000000000000000000
POLY_SAFE_FACTORY=0x0000000000000000000000000000000000000000

2. Deploy Contracts

bash
cd packages/polymarket-mvp
source .env

forge script script/DeployMvp.s.sol:DeployMvp \
  --rpc-url $RPC_URL \
  --broadcast

3. Deploy Trading Wallet

bash
export WALLET_SIGNER=0xYOUR_SIGNER
export DEPLOY_PROXY_WALLET=true  # false for POLY_GNOSIS_SAFE

forge script script/DeployDeterministicWallet.s.sol:DeployDeterministicWallet \
  --rpc-url $RPC_URL \
  --broadcast

4. Set Approvals

bash
export TRADING_WALLET=0xYOUR_TRADING_WALLET
export EXCHANGE_ADDRESS=0xYOUR_EXCHANGE
export COLLATERAL_ADDRESS=0xYOUR_COLLATERAL
export CTF_ADDRESS=0xYOUR_CTF

forge script script/SetupWalletApprovals.s.sol:SetupWalletApprovals \
  --rpc-url $RPC_URL \
  --broadcast

5. Register a Market

bash
export MOCK_UMA_ADAPTER_ADDRESS=0xYOUR_ADAPTER
export MARKET_QUESTION="Will BTC be above 100k on 2026-12-31?"

forge script script/RegisterMarket.s.sol:RegisterMarket \
  --rpc-url $RPC_URL \
  --broadcast

6. Configure Backend Services

Matcher (clob/matcher/.env):

env
PORT=3001
DATABASE_URL=postgresql://USER:PASSWORD@HOST:5432/matcher
RPC_URL=https://your-rpc-url
CHAIN_ID=97
EXCHANGE_ADDRESS=0xYOUR_EXCHANGE
COLLATERAL_TOKEN_ADDRESS=0xYOUR_COLLATERAL
OPERATOR_PRIVATE_KEY=0xYOUR_OPERATOR_PRIVATE_KEY
START_BLOCK=0
POLL_INTERVAL_MS=5000

Backend (backend/.env):

env
PORT=3000
DATABASE_URL=postgresql://USER:PASSWORD@HOST:5432/backend
JWT_SECRET=your-jwt-secret
API_KEY=your-api-key
MATCHER_URL=http://localhost:3001

7. Start Services

bash
# Start matcher first
cd clob/matcher && npm run start

# Then backend
cd backend && npm run start:prod

Environment Sync

After deployment, auto-sync the matcher environment:

bash
cd packages/polymarket-mvp
make sync-matcher-env

This copies RPC_URL, CHAIN_ID, EXCHANGE_ADDRESS, COLLATERAL_TOKEN_ADDRESS, and START_BLOCK to clob/matcher/.env without overwriting OPERATOR_PRIVATE_KEY or DATABASE_URL.