What is Keystone Core?
One deposit. One share token. Three strategies working together.
Keystone Core is the entry and exit point. Deposit USDC (or SOL, jitoSOL, JupSOL), receive ksCORE, and Core routes capital across Keystone Alpha, Keystone Neutral, and Keystone Defense per the risk profile you select. The keeper rebalances allocations back to profile targets when drift exceeds the threshold. Each fund manages its own on-chain logic independently.
Risk Profiles
Conservative
10%
60%
30%
Carry-heavy. Low directional beta. Stable yield with a crash floor.
Balanced (default)
20%
55%
25%
Full-cycle. Bull participation with a meaningful bear floor.
Growth
35%
40%
25%
Higher SOL exposure. Maximum Sharpe-efficient directional weight.
Not sure which to pick? Historical Simulation → shows backtested returns and drawdowns for each profile across Jan 2023 – Apr 2026.
The Three Strategies
Directional
Active SOL exposure scaling with trend. ATH-relative jitoSOL/USDC mix; idle USDC lent on Marginfi.
Carry
Delta-neutral. Earns funding and basis via Jupiter Perps. Flips to reverse-basis when funding inverts. Net SOL = zero.
Dislocations & Stress
JupSOL baseline. Deploys into mispricings, distressed opportunities, and negative-funding longs during market stress.
They operate as one system. Core handles routing — you don't manage them individually.
How It Works
Deposit:
Withdraw:
You only ever hold ksCORE. The ksALPHA / ksNEUTRAL / ksDEFENSE shares are held in Core's own token accounts and burned on your behalf — all atomically in one transaction.
ksCORE starts at 1.00 USDC and rises as the underlying funds earn. The keeper rebalances allocations back to target weights when drift exceeds drift_threshold_bps (default: 5%) and the rebalance interval has elapsed.
Accepted Deposit Tokens
USDC
deposit — direct, no swap
SOL / wSOL
deposit_with_swap — Jupiter: SOL → USDC
JupSOL
deposit_jupsol — PDA-signed Jupiter swap, then routed
Any other token
deposit_with_swap — Jupiter: token → USDC
All non-USDC inputs convert to USDC at Core before routing. Funds receive USDC only.
Access Control
One portfolio at a time. Your wallet can only be active in one risk profile at a time. The moment you deposit, the contract records which portfolio you're in. Any attempt to deposit into a different risk profile is rejected on-chain until you fully withdraw and your balance reaches zero. This applies across all deposit and withdrawal paths — USDC, JupSOL, swaps, everything.
To switch risk profiles: fully withdraw → wait for balance to reach zero → deposit into the new profile. There is no migration shortcut.
CoreGate. Once the admin enables the CoreGate on each fund, direct access to Alpha, Neutral, and Defense is blocked at the contract level. Only the Core program's authority PDA can call fund deposit/withdraw — users can't bypass Core's routing logic even if they try.
Instructions
initialize_portfolio
Admin
Creates portfolio state with immutable risk_profile and default targets/bounds
register_fund_atas
Admin
Creates fund share token accounts owned by Core
set_core_gate
Admin
Enables/disables the CoreGate on a fund. Pass the core_authority PDA for the Core portfolio this fund belongs to. Call once per fund after deploy.
deposit
User
Routes USDC to funds, mints ksCORE
deposit_jupsol
User
JupSOL → USDC (Jupiter, PDA-signed), then routed
deposit_with_swap
User
Any token → USDC (Jupiter, user-signed), then routed
withdraw
User
Burns ksCORE, redeems USDC from funds
withdraw_with_swap
User
Redeem to USDC then Jupiter swap to chosen output
rebalance
Anyone
Restores target allocations when drift / interval conditions are met
update_params
Admin
Caps, rebalance tuning, targets within profile bounds
toggle_emergency
Admin
De-risk target override
pause_portfolio
Admin
Halt deposits and routing
Program Reference
Program ID (Devnet)
rDd3hjjEdH2xJWH9RnQupX7ZTPxrzmBZhL76eS8dW8c
Program ID (Mainnet)
Pending audit
Share token
ksCORE
Fees
None at Core level — charged by funds
Next: Deposit → · Withdraw → · Historical Simulation →
Last updated