Skip to content

Deployment Guide

This guide covers deploying all components of the Iyup Protocol to production environments.

Overview

The Iyup Protocol consists of three main components:

  1. Smart Contracts: Deployed to Sui blockchain
  2. Frontend: Next.js application
  3. Indexer: TypeScript API server

Smart Contracts Deployment

Prerequisites

  • Sui CLI installed
  • Sui wallet with mainnet SUI tokens (for mainnet)
  • Environment variables configured

Build Contracts

cd contracts
sui move build

Test Contracts

sui move test

Deploy to Testnet

# Set network to testnet
sui client switch --env testnet
 
# Publish contracts
sui client publish --gas-budget 100000000
 
# Save output object IDs
Save these object IDs:
  • Package ID
  • MintCap object ID
  • Marketplace shared object ID
  • DocumentRegistry shared object ID
  • ZKDocumentRegistry shared object ID
  • AccessRegistry shared object ID

Deploy to Mainnet

# Switch to mainnet (caution!)
sui client switch --env mainnet
 
# Verify wallet has sufficient SUI
sui client gas
 
# Publish contracts
sui client publish --gas-budget 100000000 --network mainnet
 
# Save output object IDs

Post-Deployment

  1. Verify Deployment
    • Check object IDs on Sui explorer
    • Verify package code matches source
  2. Initialize Components
    • Marketplace fees configured
    • Registry objects initialized
    • Access control set up
  3. Document Addresses
    • Save all object IDs to configuration
    • Update frontend environment variables
    • Update indexer environment variables

Frontend Deployment

Prerequisites

  • Node.js 20+
  • pnpm installed
  • Environment variables configured

Build Configuration

Create .env.production:

# Site Configuration
NEXT_PUBLIC_SITE_URL=https://your-domain.com
NODE_ENV=production
 
# Iyup Smart Contract Addresses
NEXT_PUBLIC_IYUP_PACKAGE_ID=0x...
NEXT_PUBLIC_IYUP_REGISTRY_ID=0x...
NEXT_PUBLIC_IYUP_MARKETPLACE_ID=0x...
NEXT_PUBLIC_ZK_REGISTRY_ID=0x...
 
# Indexer API
NEXT_PUBLIC_INDEXER_URL=https://api.your-domain.com
 
# Walrus Storage
NEXT_PUBLIC_WALRUS_PUBLISHER_URL=https://publisher.walrus-mainnet.walrus.space
NEXT_PUBLIC_WALRUS_AGGREGATOR_URL=https://aggregator.walrus-mainnet.walrus.space
 
# Seal Threshold Encryption
NEXT_PUBLIC_SEAL_PACKAGE_ID=0x...
NEXT_PUBLIC_SEAL_SERVERS=server1,server2,server3
NEXT_PUBLIC_SEAL_THRESHOLD=2

Build Application

cd frontend
pnpm install
pnpm build

Deploy Options

Vercel

# Install Vercel CLI
npm i -g vercel
 
# Deploy
vercel --prod

Docker

Create Dockerfile:

FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm
RUN pnpm install
COPY . .
RUN pnpm build
 
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV production
RUN npm install -g pnpm
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/package.json ./
COPY --from=builder /app/pnpm-lock.yaml ./
RUN pnpm install --prod
EXPOSE 3000
CMD ["pnpm", "start"]

Build and run:

docker build -t iyup-frontend .
docker run -p 3000:3000 --env-file .env.production iyup-frontend

Post-Deployment

  1. Verify Deployment
    • Test all pages load
    • Verify wallet connection
    • Test document upload
    • Test marketplace
  2. Performance
    • Check Lighthouse scores
    • Monitor error rates
    • Set up analytics

Indexer Deployment

Prerequisites

  • Node.js 20+
  • PostgreSQL database
  • Sui RPC endpoint access
  • Environment variables configured

Database Setup

# Create production database
createdb iyup_production
 
# Run migrations
cd indexer
pnpm db:generate
pnpm db:migrate:deploy

Build Application

cd indexer
pnpm install
pnpm build

Environment Configuration

Create .env.production:

# Database
DATABASE_URL="postgresql://user:password@host:5432/iyup_production"
 
# Network
NETWORK="mainnet"
SUI_NETWORK=mainnet
SUI_RPC_URL=https://fullnode.mainnet.sui.io:443
 
# Iyup Contract Addresses
IYUP_PACKAGE_ID="0x..."
IYUP_MARKETPLACE_ID="0x..."
IYUP_REGISTRY_ID="0x..."
ZK_REGISTRY_ID="0x..."
IYUP_DEPLOYER="0x..."
 
# API Server
NODE_ENV="production"
PORT=8000
LOG_LEVEL=info
 
# Indexer Performance
POLLING_INTERVAL_MS=1000
CONCURRENCY_LIMIT=10

Deploy Options

Docker

Create Dockerfile:

FROM node:20-alpine
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN npm install -g pnpm
RUN pnpm install --prod
COPY dist ./dist
COPY prisma ./prisma
RUN pnpm db:generate
EXPOSE 8000
CMD ["node", "dist/server.js"]

Build and run:

docker build -t iyup-indexer .
docker run -p 8000:8000 --env-file .env.production iyup-indexer

PM2

# Install PM2
npm install -g pm2
 
# Start indexer
pm2 start dist/indexer.js --name iyup-indexer
 
# Start API server
pm2 start dist/server.js --name iyup-api
 
# Save PM2 configuration
pm2 save
pm2 startup

Process Management

Run indexer and API as separate processes:

# Terminal 1: Indexer
node dist/indexer.js
 
# Terminal 2: API Server
node dist/server.js

Or use process manager:

# Using PM2 ecosystem
pm2 start ecosystem.config.js

Post-Deployment

  1. Verify Indexing
    • Check events are being indexed
    • Verify database has data
    • Test API endpoints
  2. Monitoring
    • Set up health checks
    • Monitor error rates
    • Track indexing lag
    • Database connection monitoring

Environment Variables Summary

Frontend

NEXT_PUBLIC_IYUP_PACKAGE_ID
NEXT_PUBLIC_IYUP_REGISTRY_ID
NEXT_PUBLIC_IYUP_MARKETPLACE_ID
NEXT_PUBLIC_ZK_REGISTRY_ID
NEXT_PUBLIC_INDEXER_URL
NEXT_PUBLIC_WALRUS_PUBLISHER_URL
NEXT_PUBLIC_WALRUS_AGGREGATOR_URL

Indexer

DATABASE_URL
SUI_RPC_URL
IYUP_PACKAGE_ID
IYUP_MARKETPLACE_ID
IYUP_REGISTRY_ID
ZK_REGISTRY_ID

Security Checklist

Smart Contracts

  • Code audited
  • Access controls verified
  • No private keys in code
  • Events properly emitted

Frontend

  • HTTPS enabled
  • Environment variables secure
  • No secrets in client code
  • CORS configured properly
  • Content Security Policy set

Indexer

  • Database credentials secure
  • API endpoints secured
  • Rate limiting enabled
  • CORS configured
  • Logging configured

Monitoring

Metrics to Monitor

  • Smart Contracts: Transaction volume, gas usage, error rates
  • Frontend: Page load times, error rates, user activity
  • Indexer: Events processed/sec, API response times, database performance

Logging

  • Centralized logging setup
  • Error tracking (Sentry, etc.)
  • Performance monitoring
  • Alert system

Backup Strategy

Database Backups

# Daily backups
pg_dump iyup_production > backup_$(date +%Y%m%d).sql
 
# Automated backup script
0 2 * * * pg_dump iyup_production > /backups/iyup_$(date +\%Y\%m\%d).sql

Configuration Backups

  • Store environment variables securely
  • Version control for configurations
  • Document all object IDs

Troubleshooting

Common Issues

  1. Contract deployment fails
    • Check wallet has sufficient SUI
    • Verify network connection
    • Check gas budget
  2. Frontend build fails
    • Check environment variables
    • Verify all dependencies installed
    • Check TypeScript errors
  3. Indexer not processing
    • Check database connection
    • Verify RPC endpoint accessible
    • Check cursor state

Next Steps

  • Set up monitoring and alerts
  • Configure backups
  • Plan for scaling
  • Review security best practices