Skip to content
CooldownUnstaked $RELAY waits out a cooldown before it can be withdrawn, like traffic in a hold.COOLDOWN
Unstaked $RELAY waits out a cooldown before it can be withdrawn, like traffic in a hold.

Unstake cooldown

Provisional: the cooldown length (7–14 days) is provisional and will be finalized before launch.

Unstaking $RELAY is a three-step flow. You always get 100% of your tokens back — the cooldown only delays when, never whether.

The flow

  1. Request unstake. You choose an amount to unstake. From this moment, those tokens immediately stop counting toward your landing priority — cooldown tokens (mid-unstake) do not count toward priority.
  2. Cooldown. The requested tokens sit in cooldown for the cooldown period (provisional: 7–14 days). They give no priority and can't be withdrawn yet.
  3. Withdraw. After the cooldown ends, you withdraw 100% of the unstaked amount. No fee, no penalty, no haircut.

Illustrative instruction flow

Illustrative only — not runnable today. The staking program ships at TGE. The instruction names and account layout below are a sketch of the intended flow, not a deployed interface, and will change before launch.

The two on-chain steps mirror the flow above — request_unstake starts the clock, withdraw completes it once the cooldown elapses (an Anchor-style sketch):

typescript
// ILLUSTRATIVE ONLY — pseudocode, not a live program.

// 1. Request unstake — moves `amount` from locked into cooldown.
//    Those tokens stop counting toward priority immediately.
await program.methods
  .requestUnstake(new BN(amount))
  .accounts({
    staker: wallet.publicKey,
    stakeAccount,          // PDA derived from the staker's pubkey
  })
  .rpc();

// 2. Withdraw — after the cooldown period elapses, pull 100% back to your wallet.
//    Called before the cooldown ends, this fails.
await program.methods
  .withdraw()
  .accounts({
    staker: wallet.publicKey,
    stakeAccount,
    vault,                 // program-owned escrow holding locked RELAY
    stakerTokenAccount,    // your RELAY token account (destination)
    tokenProgram: TOKEN_PROGRAM_ID,
  })
  .rpc();

Reading the stake account between the two steps (see Staking) shows the requested tokens under cooldownAmount with a cooldownEndsAt timestamp — they return to your wallet in full at withdrawal.

Why the cooldown exists

The cooldown keeps priority meaningful and prevents gaming access for a single event — without it, someone could stake minutes before a token launch, take the landing edge, and exit immediately. The cooldown makes priority a standing commitment rather than a flash rental.

No slashing, ever

Staking $RELAY is an access deposit, not a bond. There is no slashing and nothing is ever confiscated — unstake and you receive 100% of your tokens back, every time. The only cost of unstaking is losing your landing priority for the tokens in cooldown.

Want the priority back? Any tokens you re-stake start counting toward priority again — see Staking.