Deployment Guide
This guide covers deploying all components of the Iyup Protocol to production environments.
Overview
The Iyup Protocol consists of three main components:
- Smart Contracts: Deployed to Sui blockchain
- Frontend: Next.js application
- 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 buildTest Contracts
sui move testDeploy to Testnet
# Set network to testnet
sui client switch --env testnet
# Publish contracts
sui client publish --gas-budget 100000000
# Save output 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 IDsPost-Deployment
-
Verify Deployment
- Check object IDs on Sui explorer
- Verify package code matches source
-
Initialize Components
- Marketplace fees configured
- Registry objects initialized
- Access control set up
-
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=2Build Application
cd frontend
pnpm install
pnpm buildDeploy Options
Vercel
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel --prodDocker
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-frontendPost-Deployment
-
Verify Deployment
- Test all pages load
- Verify wallet connection
- Test document upload
- Test marketplace
-
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:deployBuild Application
cd indexer
pnpm install
pnpm buildEnvironment 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=10Deploy 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-indexerPM2
# 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 startupProcess Management
Run indexer and API as separate processes:
# Terminal 1: Indexer
node dist/indexer.js
# Terminal 2: API Server
node dist/server.jsOr use process manager:
# Using PM2 ecosystem
pm2 start ecosystem.config.jsPost-Deployment
-
Verify Indexing
- Check events are being indexed
- Verify database has data
- Test API endpoints
-
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_URLIndexer
DATABASE_URL
SUI_RPC_URL
IYUP_PACKAGE_ID
IYUP_MARKETPLACE_ID
IYUP_REGISTRY_ID
ZK_REGISTRY_IDSecurity 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).sqlConfiguration Backups
- Store environment variables securely
- Version control for configurations
- Document all object IDs
Troubleshooting
Common Issues
-
Contract deployment fails
- Check wallet has sufficient SUI
- Verify network connection
- Check gas budget
-
Frontend build fails
- Check environment variables
- Verify all dependencies installed
- Check TypeScript errors
-
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