A production-ready Soroban smart contract verification tool for the Stellar ecosystem
Soroban Verify is a complete verification platform that allows developers to verify their deployed Soroban contracts, similar to Sourcify on Ethereum. It provides a CLI tool, REST API, web dashboard, and automated indexer.
Soroban Verify is a decentralized verification platform for Stellar Soroban smart contracts. It solves a critical gap in the ecosystem: there is currently no standardized way to verify that a deployed contract's bytecode matches its public source code.
This project provides:
Component
Description
CLI Tool
Developers run soroban verify to upload and verify their contracts
Verification API
REST API for block explorers and wallets to query verification status
Web Dashboard
Browse and search verified contracts
Automated Indexer
Scans the blockchain and automatically detects new contracts
Problem
Solution
No contract verification on Stellar
First complete verification tool
Users can't trust contracts
β
Verified badge shows trust
Explorers lack metadata
API provides source code and ABIs
Developers have no standard
CLI tool standardizes the process
Feature
Description
CLI Verification
One-command verification: soroban verify
Multi-platform CLI
Works on Windows, Mac, Linux
WASM Hash Matching
Compares local WASM with on-chain bytecode
Source Code Storage
Stores source code and metadata permanently
Verification API
REST endpoints for explorers and wallets
Web Dashboard
Browse and search verified contracts
Automated Indexer
Scans Stellar for new contract deployments
GitHub Actions CI
Automated testing and deployment
Docker Support
Easy deployment with docker-compose
Component
Technology
Version
CLI Tool
Rust
1.70+
CLI Framework
Clap
4.4
WASM Processing
wasmparser
0.118
Backend API
NestJS
10.x
Backend Language
TypeScript
5.x
Database
PostgreSQL
15.x
ORM
TypeORM
0.3.x
Frontend
Next.js
14.2
Frontend Language
TypeScript
5.x
Styling
Tailwind CSS
3.4
Indexer
Node.js
20.x
Container
Docker
-
CI/CD
GitHub Actions
-
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Developer Workflow β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Developer ββββΆβ soroban ββββΆβ Soroban β β
β β (Rust) β β verify β β Verify API β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Soroban Verify Platform β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β CLI Tool β β REST API β β Dashboard β β
β β (Rust) ββββΆβ (NestJS) ββββΆβ (Next.js) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β β β β
β βΌ βΌ βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β PostgreSQL Database β β
β β (Contracts, Verifications, Users) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Automated Indexer β β
β β (Scans Stellar for new contract deploys) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Stellar Blockchain β β
β β (Soroban Contract Deployments) β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β End Users β
β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Block ββββΆβ Wallets ββββΆβ Developers β β
β β Explorers β β (Freighter) β β (Checking) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
soroban-verify/
βββ cli/ # Rust CLI Tool (13 files)
β βββ src/
β β βββ main.rs # Entry point
β β βββ commands/
β β β βββ mod.rs # Command module
β β β βββ verify.rs # Verify command logic
β β β βββ publish.rs # Publish command
β β β βββ status.rs # Check verification status
β β β βββ list.rs # List verified contracts
β β βββ config.rs # Configuration management
β β βββ api.rs # API client for backend
β β βββ wasm.rs # WASM compilation & hashing
β β βββ error.rs # Error handling
β β βββ utils.rs # Utility functions
β βββ tests/
β β βββ integration_test.rs # Integration tests
β βββ Cargo.toml # Rust dependencies
β
βββ api/ # NestJS Backend (28 files)
β βββ src/
β β βββ main.ts # Application entry point
β β βββ app.module.ts # Root module
β β βββ modules/
β β β βββ contracts/ # Contract management
β β β βββ verification/ # Verification logic
β β β βββ users/ # User management
β β β βββ auth/ # Authentication
β β β βββ admin/ # Admin panel
β β β βββ stats/ # Statistics
β β βββ common/ # Shared utilities
β β βββ config/
β β βββ database/
β β βββ workers/
β βββ test/
β βββ package.json
β βββ Dockerfile
β
βββ frontend/ # Next.js Dashboard (18 files)
β βββ src/
β β βββ app/
β β βββ components/
β β βββ lib/
β β βββ hooks/
β β βββ contexts/
β β βββ styles/
β βββ package.json
β βββ Dockerfile
β
βββ indexer/ # Automated Indexer
β βββ src/
β βββ package.json
β βββ tsconfig.json
β
βββ .github/
β βββ workflows/
β
βββ docker-compose.yml
βββ .gitignore
βββ LICENSE
βββ README.md
Using Docker (Recommended)
# Clone the repository
git clone https://github.com/SorobanVerify/soroban-verify.git
cd soroban-verify
# Start all services
docker-compose up -d
# Services will be available at:
# - API: http://localhost:3001
# - Frontend: http://localhost:3000
# - PostgreSQL: localhost:5432
# Backend
cd api
npm install
cp .env.example .env
npm run start:dev
# Frontend (new terminal)
cd frontend
npm install
cp .env.example .env.local
npm run dev
# Indexer (new terminal)
cd indexer
npm install
npm run start:dev
# From source
cd cli
cargo install --path .
# Or via cargo
cargo install soroban-verify
# Verify a contract
soroban verify --contract-id < CONTRACT_ID> --path ./contract
# Check verification status
soroban status --contract-id < CONTRACT_ID>
# List all verified contracts
soroban list
# Publish source code only
soroban publish --contract-id < CONTRACT_ID> --path ./contract
http://localhost:3001/api/v1
Method
Endpoint
Description
POST
/contracts
Create contract entry
GET
/contracts
List contracts
GET
/contracts/:id
Get contract details
POST
/verification/verify
Submit for verification
GET
/verification/status/:id
Check verification status
GET
/verification/contract/:contractId
Get verification for contract
POST
/users
Create user
GET
/users/me
Get current user
POST
/auth/login
Login
POST
/auth/register
Register
GET
/stats
Platform statistics
GET
/health
Health check
# Verify a contract
curl -X POST http://localhost:3001/api/v1/verification/verify \
-H " Content-Type: application/json" \
-d ' {
"contractId": "CCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"sourceCode": "base64_encoded_source",
"wasmHash": "0x1234..."
}'
Page
Route
Description
Home
/
Landing page
Contract Details
/contracts/:id
View verified contract
Verify
/verify
Submit contract for verification
Dashboard
/dashboard
User dashboard
Admin
/admin
Admin panel
π Search verified contracts
β
Verification status badges
π Source code viewer
π Statistics dashboard
π€ User authentication
π‘οΈ Admin moderation
Command
Description
npm run start:dev
Start with hot reload
npm run build
Build for production
npm run start:prod
Run production build
npm run lint
Run ESLint
npm run format
Format with Prettier
npm run test
Run unit tests
npm run test:cov
Run tests with coverage
npm run test:e2e
Run e2e tests
Command
Description
npm run dev
Start development server
npm run build
Build for production
npm run start
Run production build
npm run lint
Run ESLint
Command
Description
cargo build
Build the CLI
cargo run -- verify --contract-id
Run with args
cargo test
Run tests
cargo fmt
Format code
cargo clippy
Run linter
cd api
npm run test
npm run test:cov
npm run test:e2e
cd cli
cargo test
cargo test -- --nocapture
cd frontend
npm run test
npm run test:e2e
# Build all services
docker-compose build
# Build specific service
docker build -t soroban-verify-api ./api
docker build -t soroban-verify-frontend ./frontend
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
Docker Compose Configuration
version : ' 3.8'
services :
postgres :
image : postgres:15
environment :
POSTGRES_DB : soroban_verify
POSTGRES_USER : postgres
POSTGRES_PASSWORD : postgres
ports :
- " 5432:5432"
volumes :
- postgres_data:/var/lib/postgresql/data
api :
build : ./api
ports :
- " 3001:3001"
depends_on :
- postgres
environment :
DB_HOST : postgres
DB_PORT : 5432
DB_USERNAME : postgres
DB_PASSWORD : postgres
DB_DATABASE : soroban_verify
frontend :
build : ./frontend
ports :
- " 3000:3000"
depends_on :
- api
volumes :
postgres_data :
# Build the application
docker-compose -f docker-compose.prod.yml build
# Push images to registry
docker push soroban-verify-api:latest
docker push soroban-verify-frontend:latest
# Deploy with environment variables
docker-compose -f docker-compose.prod.yml up -d
Variable
Description
Default
NODE_ENV
Environment
development
PORT
API port
3001
DB_HOST
Database host
localhost
DB_PORT
Database port
5432
DB_USERNAME
Database user
postgres
DB_PASSWORD
Database password
postgres
DB_DATABASE
Database name
soroban_verify
JWT_SECRET
JWT signing secret
-
STELLAR_NETWORK
Stellar network
testnet
We welcome contributions! Please read our CONTRIBUTING.md for guidelines.
Type
Description
feat
New feature
fix
Bug fix
docs
Documentation
style
Code style
refactor
Code refactor
test
Testing
chore
Maintenance
Fork the repository
Create a feature branch
Make your changes
Run tests
Submit a pull request
Reporting Vulnerabilities
Please DO NOT file public issues for security vulnerabilities.
Email: security@sorobanverify.com
Include:
Description of the vulnerability
Steps to reproduce
Potential impact
Never commit .env files
Always use environment variables for secrets
Validate all user inputs
Use HTTPS in production
Regular security audits
MIT Β© Soroban Verify
Built on Stellar Soroban | Making Smart Contracts Trustable π