Skip to content

A Solana decentralized perpetual trading protocol built on Solana blockchain with Pyth Network oracle integration.

Notifications You must be signed in to change notification settings

TopTrenDev/solana-perpetual-protocol-smart-contract

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Solana Perpetual Trading Protocol

A complete decentralized perpetual trading protocol built on Solana blockchain with Pyth Network oracle integration.

Twitter Discord Telegram

πŸš€ Features

  • Perpetual Markets: Trade crypto assets without expiration
  • Leverage Trading: Up to 10x leverage on positions
  • Real-time Pricing: Pyth Network oracle integration for accurate prices
  • Funding Mechanism: Automated funding rate system
  • Liquidation System: Automated liquidation of under-collateralized positions
  • Risk Management: Maintenance margin, position size limits
  • TypeScript SDK: Complete client library for frontend integration

πŸ“ Project Structure

solana-perpetual-protocol/
β”œβ”€β”€ programs/
β”‚   └── solana-perpetual-protocol/     # Main Solana program
β”‚       β”œβ”€β”€ Cargo.toml
β”‚       └── src/lib.rs
β”œβ”€β”€ client/                            # TypeScript SDK
β”‚   β”œβ”€β”€ package.json
β”‚   β”œβ”€β”€ tsconfig.json
β”‚   └── src/
β”‚       β”œβ”€β”€ index.ts
β”‚       β”œβ”€β”€ perpetual-client.ts
β”‚       └── pyth-oracle-integration.ts
β”œβ”€β”€ tests/                            # Test suite
β”‚   └── solana-perpetual-protocol.ts
β”œβ”€β”€ Anchor.toml                       # Anchor configuration
β”œβ”€β”€ Cargo.toml                       # Root Cargo configuration
β”œβ”€β”€ package.json                     # Root package configuration
└── README.md

πŸ› οΈ Installation

Prerequisites

  • Rust 1.70+
  • Solana CLI 1.18+
  • Anchor Framework 0.29+
  • Node.js 18+

Setup

# Clone the repository
git clone <your-repo-url>
cd solana-perpetual-protocol

# Install dependencies
npm install

# Build the program
anchor build

# Run tests
anchor test

πŸ“– Usage

Basic Setup

import { createClient, PythOracleIntegration } from './client';
import { Connection } from '@solana/web3.js';

// Initialize client
const client = await createClient();

// Initialize protocol
await client.initialize();

// Create a SOL/USDC market
await client.createMarket(
  1,                    // market ID
  "SOL",               // base asset
  "USDC",              // quote asset
  10000,               // initial price ($100.00)
  10,                  // max leverage (10x)
  1000,                // min position size ($10.00)
  1000000,             // max position size ($10,000.00)
  500,                 // maintenance margin (5%)
  10                   // trading fee (0.1%)
);

Trading Operations

// Open a long position
await client.openPosition(
  1,                    // market ID
  1,                    // position ID
  "long",              // side
  10000,               // size ($100.00)
  5                     // leverage (5x)
);

// Close a position
await client.closePosition(1, 1);

// Liquidate a position
await client.liquidatePosition(1, 1, userPublicKey);

Oracle Integration

import { PythOracleIntegration } from './client';

// Initialize Pyth oracle integration
const oracle = new PythOracleIntegration(connection, client);

// Get current SOL/USDC price
const price = await oracle.getSolUsdcPrice();
console.log(`SOL/USDC: $${price.toFixed(2)}`);

// Start price monitoring
await oracle.startPriceMonitoring(1, 5000); // Update every 5 seconds

πŸ”§ Program Functions

Core Functions

  • initialize() - Initialize the protocol
  • create_market() - Create new trading markets
  • open_position() - Open long/short positions
  • close_position() - Close existing positions
  • liquidate_position() - Liquidate under-collateralized positions

Oracle Functions

  • update_price_from_pyth() - Update market price from Pyth Network
  • update_all_positions_for_market() - Update all positions after price changes

Funding Functions

  • update_funding_rate() - Update market funding rates
  • pay_funding() - Process funding payments

πŸ§ͺ Testing

# Run all tests
anchor test

# Run specific test
anchor test -- --grep "Open long position"

πŸš€ Deployment

Devnet

anchor deploy --provider.cluster devnet

Mainnet

anchor deploy --provider.cluster mainnet

πŸ“Š Protocol Architecture

Data Structures

Market

  • Market configuration (leverage, fees, limits)
  • Current price and funding rate
  • Total long/short sizes

Position

  • User position details
  • Entry price, size, leverage
  • P&L tracking and margin

PerpetualProtocol

  • Protocol authority
  • Global configuration

Security Features

  • PDA-based accounts: All accounts use Program Derived Addresses
  • Proper constraints: Account ownership and state validation
  • Oracle validation: Price staleness and data integrity checks
  • Risk management: Maintenance margin and liquidation logic

πŸ”— Integration

Frontend Integration

import { PerpetualProtocolClient } from './client';

const client = new PerpetualProtocolClient(program);

// Get market data
const market = await client.getMarket(1);

// Get position data
const position = await client.getPosition(1, 1, userPublicKey);

// Calculate P&L
const pnl = client.calculatePnL(position, currentPrice);

// Check liquidation status
const isLiquidatable = client.isLiquidatable(position, currentPrice);

πŸ“ˆ Production Considerations

  1. Oracle Integration: Use mainnet Pyth price feeds
  2. Error Handling: Implement retry logic and circuit breakers
  3. Monitoring: Add comprehensive logging and alerts
  4. Security: Regular audits and security reviews
  5. Performance: Optimize for high-frequency trading

Built with ❀️ on Solana

About

A Solana decentralized perpetual trading protocol built on Solana blockchain with Pyth Network oracle integration.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published