Position Limits
Overview
Section titled “Overview”PIPO implements position limits to manage concentration risk, prevent market manipulation, and ensure fair access for all participants.
Limit Structure
Section titled “Limit Structure”By User Type
Section titled “By User Type”| User Type | Single Position | Underlying Total | Platform Total |
|---|---|---|---|
| Retail | $100K | $500K | N/A |
| KYC Verified | $500K | $2M | N/A |
| VIP (KYB) | $5M | $20M | N/A |
| Institution | Custom | Custom | Custom |
By Position Type
Section titled “By Position Type”| Position | Limit Rationale |
|---|---|
| Call Warrant | Capped by SPV inventory |
| Put Warrant (Buy) | User limit + pool availability |
| Put Warrant (Write) | KYB required, minimum $50K |
| LP Position | No limit (beneficial for liquidity) |
Concentration Limits
Section titled “Concentration Limits”Per-Underlying
Section titled “Per-Underlying”Concentration Risk Management:
Single User Limits (% of pool):├── Retail: Max 5% of any pool├── KYC Verified: Max 10% of any pool├── VIP: Max 25% of any pool└── Institution: Negotiated (typically 40%)
Platform Limits:├── Single underlying: Max 60% of total TVL├── Top 3 underlyings: Max 80% of total TVL└── Reviewed quarterlyExample
Section titled “Example”Scenario: SpaceX Call Pool TVL = $5M
User Limits:├── Retail user: Max $250K position (5%)├── KYC user: Max $500K position (10%)└── VIP user: Max $1.25M position (25%)
If user already holds $200K:├── Retail: Can add $50K more├── KYC: Can add $300K more└── VIP: Can add $1.05M moreImplementation
Section titled “Implementation”Real-Time Checking
Section titled “Real-Time Checking”// Position limit check on every tradefunction checkPositionLimit( address user, address warrant, uint256 amount) internal view returns (bool) { uint256 currentPosition = balanceOf(user, warrant); uint256 newPosition = currentPosition + amount;
UserTier tier = getUserTier(user); uint256 poolTVL = getPoolTVL(warrant);
uint256 maxPosition = getMaxPosition(tier, poolTVL);
return newPosition <= maxPosition;}
// Tier-based max positionfunction getMaxPosition(UserTier tier, uint256 poolTVL) internal pure returns (uint256) { if (tier == UserTier.RETAIL) return poolTVL * 5 / 100; // 5% if (tier == UserTier.KYC) return poolTVL * 10 / 100; // 10% if (tier == UserTier.VIP) return poolTVL * 25 / 100; // 25% return type(uint256).max; // Institution - custom}User Notification
Section titled “User Notification”┌─────────────────────────────────────────────────────────────────┐│ ⚠️ POSITION LIMIT WARNING │├─────────────────────────────────────────────────────────────────┤│ ││ Your order exceeds position limits. ││ ││ Order Details: ││ ├── Warrant: SPACEX-CALL-200B-Q42025 ││ ├── Order Amount: $300,000 ││ ├── Current Position: $200,000 ││ └── Requested Total: $500,000 ││ ││ Your Limits (Retail Tier): ││ ├── Single Position Max: $250,000 (5% of pool) ││ └── Available to Add: $50,000 ││ ││ Options: ││ ├── [Reduce Order to $50,000] ││ ├── [Complete KYC for Higher Limits] ││ └── [Cancel Order] ││ │└─────────────────────────────────────────────────────────────────┘Upgrade Path
Section titled “Upgrade Path”Tier Progression
Section titled “Tier Progression”Tier Upgrade Path:
RETAIL (Default)├── Limits: $100K position, 5% pool├── Requirements: None (wallet connect)└── Upgrade: Complete KYC →
KYC VERIFIED├── Limits: $500K position, 10% pool├── Requirements: Identity verification├── Process: ~24 hour approval└── Upgrade: Complete KYB →
VIP (KYB)├── Limits: $5M position, 25% pool├── Requirements: Entity verification, accreditation├── Process: ~5 business days├── Benefits: OTC desk, physical delivery└── Upgrade: Custom agreement →
INSTITUTION├── Limits: Custom (negotiated)├── Requirements: Institutional agreement├── Process: Manual onboarding└── Benefits: API access, prime brokerageAnti-Manipulation Rules
Section titled “Anti-Manipulation Rules”Wash Trading Prevention
Section titled “Wash Trading Prevention”Wash Trading Detection:├── Same wallet buying and selling rapidly├── Related wallets trading with each other├── Circular trading patterns└── Volume without price impact
Consequences:├── Warning (first offense)├── Trading suspension (repeat)├── Permanent ban (confirmed manipulation)└── Loss of LP rewardsFront-Running Protection
Section titled “Front-Running Protection”Front-Running Mitigations:├── Private mempool (Flashbots-style)├── Randomized transaction ordering├── MEV rebate to users└── Time-weighted execution for large ordersSpecial Situations
Section titled “Special Situations”Event Windows
Section titled “Event Windows”During Exercise Windows:├── Position limits unchanged├── No new purchases allowed (for expiring series)├── Selling/exercising allowed└── Concentration limits relaxed for settlementMarket Stress
Section titled “Market Stress”During High Volatility:├── Limits may be reduced by 50%├── New positions paused temporarily├── Existing positions honored└── Communication via all channelsAPI Reference
Section titled “API Reference”Check Position Limit
Section titled “Check Position Limit”const limit = await pipo.checkPositionLimit({ user: '0x...', warrant: 'SPACEX-CALL-200B-Q42025', amount: 300000});
// Response{ allowed: false, currentPosition: 200000, requestedAmount: 300000, newPosition: 500000, userTier: 'RETAIL', maxPosition: 250000, maxAddable: 50000, reason: 'EXCEEDS_TIER_LIMIT', upgradeOptions: ['COMPLETE_KYC']}