Smart Contracts
Documentation for the Solana Anchor smart contracts powering GPMIN.
Overview
GPMIN smart contracts are built on Solana using the Anchor framework. The protocol consists of:
- Market Factory - Creates and manages prediction markets
- Liquidity Pools - AMM-based liquidity for outcome tokens
- Settlement Logic - Oracle-based market resolution
- Token Management - Outcome token minting and redemption
Program Structure
Market Account
pub struct Market {
pub authority: Pubkey,
pub market_id: String,
pub question: String,
pub market_type: MarketType,
pub outcomes: Vec<String>,
pub end_time: i64,
pub oracle: Pubkey,
pub created_at: i64,
pub is_resolved: bool,
pub resolved_outcome: u8,
pub resolved_at: i64,
}Liquidity Pool Account
pub struct LiquidityPool {
pub market_id: String,
pub total_liquidity: u64,
pub outcome_balances: Vec<u64>,
pub user_shares: HashMap<Pubkey, u64>,
}Instructions
create_market
Creates a new prediction market
pub fn create_market(
ctx: Context<CreateMarket>,
market_id: String,
question: String,
market_type: MarketType,
outcomes: Vec<String>,
end_time: i64,
oracle: Pubkey,
) -> Result<()>trade
Execute a trade on a market
pub fn trade(
ctx: Context<Trade>,
market_id: String,
outcome_index: u8,
amount: u64,
) -> Result<()>resolve_market
Resolve a market (oracle only)
pub fn resolve_market(
ctx: Context<ResolveMarket>,
market_id: String,
outcome_index: u8,
) -> Result<()>add_liquidity
Add liquidity to a market pool
pub fn add_liquidity(
ctx: Context<AddLiquidity>,
market_id: String,
amount: u64,
) -> Result<()>Market Types
Binary
Yes/No markets with two outcomes
Multiple Choice
Markets with multiple possible outcomes
Scalar
Numerical range markets
Security
- PDA-based account derivation for security
- Oracle signature verification for market resolution
- Time-based market expiration
- Access control for sensitive operations
- Quantum-proof signature verification (via Galaxia Quantum Security)
Deployment
Build
cd packages/smart-contracts
anchor buildTest
anchor testDeploy
# Localnet
anchor deploy
# Mainnet
anchor deploy --provider.cluster mainnet