Demo on a mainnet fork: the real Upside program, the real Voltr and Phoenix programs, live Phoenix prices; only the USDC is test money. Nothing here is real money. What that means
upside

Transparency

dWTIOILLive

What backs the token, where the keeper’s lines are, and every action it has taken. Read straight from the keeper’s own records.

Last snapshot 3 min ago
Leverage bandin band
2.01x
2.01x, band 1.80x to 2.30x
1.80x2.00x2.30x2.60x
Venue equity / notionalbetween floor and ceiling
24.7%
24.7%, band 17.9% to 32.1%
17.9%25%32.1%17.9%

Action ladder

At what underlying move does each keeper action fire, from the latest snapshot and this token's policy.

impact pricing
−19%
−12%
−6%
+6%
+12%
+19%
$90.91
$92.66
$100.46
$101.86
$104.10
$117.16
$96.29
If the price falls
  1. Band edge 1.80x−3.8% · $92.66
    Rebalance up to target (external session only)
  2. Margin ceiling 32.1% of notional−5.6% · $90.91
    Withdraw excess collateral to idle
If the price rises
  1. Band edge 2.30x+4.3% · $100.46
    Rebalance down to target (any hour)
  2. Margin floor 17.9% of notional+5.8% · $101.86
    Top up collateral from idle
  3. Hard delever 2.60x+8.1% · $104.10
    Emergency delever to target, market order
  4. Liquidation (est.)+21.7% · $117.16
    Phoenix liquidates the account; the stop and top-ups sit well before this

Computed from realised leverage 2.013x and venue equity at 24.7% of notional at mark $96.29, holding everything else fixed. Margin distances follow this token's own policy: lower tiers post more collateral, so a 2x token has further to fall than a 3x one (D27). Liquidation is where equity reaches the 2.5% maintenance margin Phoenix requires on notional (registry value, Q13); the on-chain stop and the keeper's top-ups are designed to act well before it. Estimates for reading, not for trading.

Leverage over time

Realised leverage against the band, the target and the hard-delever line. Markers are keeper actions; hover for reason, before/after and fill.

Realised leverageBand 1.8x2.3xHard delever 2.6xRebalanceEmergency delever

Margin over time

Venue equity (collateral plus unrealised PnL) as a share of notional, against the floor, target and ceiling. Distances do not depend on leverage. Top-ups and withdrawals are the keeper's margin loop; the stop is refreshed after every rebalance.

Venue equity / notionalFloor 17.9% – ceiling 32.1%Top-upWithdraw excessStop set

Buffers and capacity

Idle USDC pays instant redemptions and Jupiter sells; collateral sits at Phoenix; the cap bounds TVL against Phoenix depth.

Idle USDC in vault2,500 of 4,976 USDC · 50.2%
Collateral at Phoenix (share of NAV)2,497 USDC · equity 24.7% of notional
Pending redemptionsnone
Cap used$4,975.71 of $250.0K
LP supply
5,000 dWTIOIL
NAV per token
0.995142 USDC
Unrealised PnL
−21.91 USDC
Funding (annualised)

Session

How the underlying is being priced right now.

impact pricingImpact pricing

The underlying exchange is closed. Phoenix prices the market from its own order flow, bounded to 1/max-leverage from the last external print. NAV marks to that price. Only defensive rebalances run; NAV shows "internal pricing".

Mark
$96.29
Index
none (no external print)
Pool price
no pool
Premium to NAV
Realised vs target
2.013x / 2.0x

Keeper liveness

Heartbeats, halted flag and per-loop status. Two keepers on different RPCs are the target.

  • keeper-stagingv0.1.0 · surfpool#0 · heartbeat 9 s ago
    stream dGOLD:band dGOLD:stop dGOLD:tick dMSTR:band dMSTR:stop dMSTR:tick uGOLD:band uGOLD:stop uGOLD:tick uMSTR:band uMSTR:stop uMSTR:tick dGOLD:crank dGOLD:guard dMSTR:crank dMSTR:guard dUS100:band dUS100:stop dUS100:tick dUS500:band dUS500:stop dUS500:tick uGOLD:crank uGOLD:guard uMSTR:crank uMSTR:guard uUS100:band uUS100:stop uUS100:tick uUS500:band uUS500:stop uUS500:tick dGOLD:inflow dGOLD:margin dGOLD:redeem dMSTR:inflow dMSTR:margin dMSTR:redeem dUS100:crank dUS100:guard dUS500:crank dUS500:guard dWTIOIL:band dWTIOIL:stop dWTIOIL:tick uGOLD:inflow uGOLD:margin uGOLD:redeem uMSTR:inflow uMSTR:margin uMSTR:redeem uUS100:crank uUS100:guard uUS500:crank uUS500:guard uWTIOIL:band uWTIOIL:stop uWTIOIL:tick dGOLD:harvest ✗ 1dMSTR:harvest ✗ 1dUS100:inflow dUS100:margin dUS100:redeem dUS500:inflow dUS500:margin dUS500:redeem dWTIOIL:crank dWTIOIL:guard uGOLD:harvest ✗ 1uMSTR:harvest ✗ 1uUS100:inflow uUS100:margin uUS100:redeem uUS500:inflow uUS500:margin uUS500:redeem uWTIOIL:crank uWTIOIL:guard dUS100:harvest ✗ 1dUS500:harvest ✗ 1dWTIOIL:inflow dWTIOIL:margin dWTIOIL:redeem uUS100:harvest ✗ 1uUS500:harvest ✗ 1uWTIOIL:inflow uWTIOIL:margin uWTIOIL:redeem dWTIOIL:harvest ✗ 1uWTIOIL:harvest ✗ 1

Alerts

Raised by the keeper, resolved when the condition clears.

  • warning
    DEPTH_UNAVAILABLE · dWTIOIL13 Sep 09:03 UTC → resolved 16 min ago
    dWTIOIL: order-book depth unreadable; expansion is refused and defensive slices use the fallback depth
  • warning
    TICK_FAILED · dWTIOIL13 Sep 08:52 UTC → resolved 27 min ago
    dWTIOIL: tick failed: phoenix /exchange/markets -> 429
  • warning
    DEPTH_UNAVAILABLE · dWTIOIL13 Sep 08:50 UTC → resolved 28 min ago
    dWTIOIL: order-book depth unreadable; expansion is refused and defensive slices use the fallback depth
  • warning
    TICK_FAILED · dWTIOIL13 Sep 08:28 UTC → resolved 44 min ago
    dWTIOIL: tick failed: Hawkeye return data expected at least 8 bytes, got 0

Event log

Every action planned, sent or observed for this token, newest first.

TimeKindStatusReasonLeverageAmountFill / markSlipTx
13 Sep 09:18 UTCCrankconfirmedcrank: receipt 156s old, session impact2.01x → —3Avi…ec5T
13 Sep 09:18 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 09:16 UTCCrankconfirmedcrank: receipt 149s old, session impact2.01x → —uGNc…y1hS
13 Sep 09:13 UTCCrankconfirmedcrank: receipt 163s old, session impact2.01x → —5qqb…YxBk
13 Sep 09:13 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 09:11 UTCCrankconfirmedcrank: receipt 135s old, session impact2.01x → —3QdH…g1vg
13 Sep 09:08 UTCCrankconfirmedcrank: receipt 149s old, session impact2.01x → —3xAq…aPc2
13 Sep 09:08 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 09:06 UTCCrankconfirmedcrank: receipt 148s old, session impact2.01x → —2DY2…oo67
13 Sep 09:03 UTCCrankconfirmedcrank: receipt 142s old, session impact2.01x → —XNP9…uW6D
13 Sep 09:03 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 09:01 UTCCrankconfirmedcrank: receipt 94s old, session impact2.01x → —29Lb…Ead3
13 Sep 08:59 UTCCrankconfirmedfirst crank for dWTIOIL2.01x → —1G2e…yCCZ
13 Sep 08:59 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 08:56 UTCCrankconfirmedcrank: receipt 124s old, session impact2.01x → —3BxX…jqjK
13 Sep 08:54 UTCCrankconfirmedcrank: receipt 207s old, session impact2.01x → —uu8E…YdVq
13 Sep 08:54 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 08:50 UTCCrankconfirmedcrank: receipt 121s old, session impact2.01x → —3o38…FSwr
13 Sep 08:48 UTCCrankconfirmedattempt 1: simulation failed for crank: {"InstructionError":["2",{"Custom":"6003"}]} :: Program ComputeBudget111111111111111111111111111111 invoke [1] | Program ComputeBudget111111111111111111111111111111 success | Program CJxBPN83j7YvHDuLCaq9Ddrp9QHqVAAU9TXQGPRBpAtV invoke [1] | Program log: Instruction: crank | Program CJxBPN83j7YvHDuLCaq9Ddrp9QHqVAAU9TXQGPRBpAtV consumed 8231 of 1399700 compute units | Program CJxBPN83j7YvHDuLCaq9Ddrp9QHqVAAU9TXQGPRBpAtV failed: custom program error: 0x17732.01x → —4UsQ…b4yE
13 Sep 08:46 UTCCrankconfirmedcrank: receipt 120s old, session impact2.01x → —47vC…3AFb
13 Sep 08:46 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 08:44 UTCCrankconfirmedcrank: receipt 126s old, session impact2.01x → —3wbD…AJjT
13 Sep 08:42 UTCCrankconfirmedcrank: receipt 124s old, session impact2.00x → —5rbH…a1pZ
13 Sep 08:42 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection
13 Sep 08:40 UTCCrankconfirmedcrank: receipt 60s old, session impact2.00x → —4jUP…GbjA
13 Sep 08:39 UTCCrankconfirmedcrank: receipt 107s old, session impact2.00x → —5UQ1…mo1i
13 Sep 08:37 UTCCrankconfirmedfirst crank for dWTIOIL2.00x → —3XS9…W8B4
13 Sep 08:37 UTCCrankskippedthe adaptor cannot place a conditional stop yet (#8); there is no keeper-independent backstop until it can, so keeper uptime is the only protection