A complete decentralized perpetual trading protocol built on Solana blockchain with Pyth Network oracle integration.
- 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
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
- Rust 1.70+
- Solana CLI 1.18+
- Anchor Framework 0.29+
- Node.js 18+
# Clone the repository
git clone <your-repo-url>
cd solana-perpetual-protocol
# Install dependencies
npm install
# Build the program
anchor build
# Run tests
anchor testimport { 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%)
);// 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);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 secondsinitialize()- Initialize the protocolcreate_market()- Create new trading marketsopen_position()- Open long/short positionsclose_position()- Close existing positionsliquidate_position()- Liquidate under-collateralized positions
update_price_from_pyth()- Update market price from Pyth Networkupdate_all_positions_for_market()- Update all positions after price changes
update_funding_rate()- Update market funding ratespay_funding()- Process funding payments
# Run all tests
anchor test
# Run specific test
anchor test -- --grep "Open long position"anchor deploy --provider.cluster devnetanchor deploy --provider.cluster mainnetMarket
- 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
- 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
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);- Oracle Integration: Use mainnet Pyth price feeds
- Error Handling: Implement retry logic and circuit breakers
- Monitoring: Add comprehensive logging and alerts
- Security: Regular audits and security reviews
- Performance: Optimize for high-frequency trading
Built with β€οΈ on Solana