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-suiteThis runs the following sequence:
- Deploys the MVP contract stack (CTF, Exchange, Collateral, Adapter, Factories)
- Deploys a signer-owned trading wallet
- Sets ERC-20 and ERC-1155 approvals
- Registers a test market
- 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 matcherStep-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=0x00000000000000000000000000000000000000002. Deploy Contracts
bash
cd packages/polymarket-mvp
source .env
forge script script/DeployMvp.s.sol:DeployMvp \
--rpc-url $RPC_URL \
--broadcast3. 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 \
--broadcast4. 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 \
--broadcast5. 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 \
--broadcast6. 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=5000Backend (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:30017. Start Services
bash
# Start matcher first
cd clob/matcher && npm run start
# Then backend
cd backend && npm run start:prodEnvironment Sync
After deployment, auto-sync the matcher environment:
bash
cd packages/polymarket-mvp
make sync-matcher-envThis 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.