Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

TopTrenDev/solana-perpetual-protocol-smart-contract

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
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

 
 
 

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.