FortiBlox LogoFortiBlox Docs
AXIO Block Engine

Staking Guide

Complete guide to staking XNT and earning MEV yield via the aXNT liquid staking token.

Staking Guide

Stake XNT into the AXIO stake pool, receive aXNT, and earn compounding yield from both base staking rewards and MEV tip revenue. No lockups, no rebasing — your aXNT appreciates in value automatically.

1. What is aXNT?

aXNT is a liquid staking token (LST) for the X1/Tachyon blockchain. When you deposit XNT into the AXIO stake pool, you receive aXNT at the current exchange rate. As MEV revenue and staking rewards accrue into the pool reserve, the exchange rate increases — meaning each aXNT becomes redeemable for more XNT over time.

This is the same mechanism used by JitoSOL, mSOL, and stETH. You hold a single token that represents your staked position plus all accumulated yield.

Key properties:

  • Liquid — aXNT is a standard SPL token. Transfer it, use it as collateral, trade it on DEXes
  • Non-rebasing — your balance stays the same; the exchange rate goes up
  • Composable — works with any DeFi protocol that accepts SPL tokens
  • Yield-bearing — base staking + MEV revenue, compounding every epoch

On-Chain Addresses

AssetAddress
aXNT MintGhQHapUR1V2Lh2rxQnpxeXVAvUMwXkm1DNbGaC6xM2WZ
Stake Pool Program4aawPPTLmh1kEBqYm2CGS32p4kfpuBf4CBcDipF94c2G
Pool PDAB7VEbXbG2Z69tEadmjUaPRWFskmbsairXHygHS939eRP

2. How Staking Works

Exchange Rate Model

The aXNT exchange rate is determined by the ratio of total lamports held in the reserve to the total supply of pool tokens:

exchange_rate = total_lamports_in_reserve / pool_token_supply

When you deposit XNT, you receive:

aXNT_received = deposited_lamports / exchange_rate

When you withdraw, you receive:

XNT_received = aXNT_burned * exchange_rate

The exchange rate can only increase. MEV tip revenue is injected directly into the reserve via the reserve_injection instruction. There is no mechanism for external burns or reserve reduction. The rate started at 1.096 at pool genesis.

Example

EventReserve (XNT)Supply (aXNT)Rate
Genesis1,096,0001,000,0001.096
User deposits 1,000 XNT1,097,0001,000,912.411.096
MEV injection: 500 XNT1,097,5001,000,912.411.0966
Epoch rewards: 200 XNT1,097,7001,000,912.411.0968
User withdraws 500 aXNT1,097,151.601,000,412.411.0968

The user who deposited 1,000 XNT and later withdrew 500 aXNT received ~548.40 XNT back — more than the 500 XNT originally represented — because the rate appreciated between deposit and withdrawal.

3. Deposit Flow (XNT to aXNT)

Using the Staking UI

  1. Navigate to axio.fortiblox.com/stake
  2. Connect your wallet (Phantom, Solflare, or Backpack)
  3. Select the Stake tab
  4. Enter the amount of XNT to stake
  5. Review the transaction details:
    • Current exchange rate
    • Stake fee (0.1%)
    • aXNT amount you will receive
  6. Click Stake and approve the transaction in your wallet

Your aXNT will appear in your wallet within one confirmed transaction (~400ms on Tachyon).

Using the SDK

import { AxioStakingClient } from "@axio/staking-sdk";
import { Connection, Keypair } from "@solana/web3.js";

const connection = new Connection("https://rpc.x1.xyz");
const wallet = Keypair.fromSecretKey(/* your key */);

const client = new AxioStakingClient({
  baseUrl: "https://api.axio.fortiblox.com",
  rpcUrl: "https://rpc.x1.xyz",
});

// Deposit XNT → receive aXNT
const depositTx = await client.depositSol({
  amount: 1_000_000_000, // 1 XNT in lamports
  wallet: wallet.publicKey,
});

// Sign and send
depositTx.sign(wallet);
const sig = await connection.sendRawTransaction(depositTx.serialize());
await connection.confirmTransaction(sig);

Deposit via Stake Account

If you already have an active stake account, you can deposit it directly into the AXIO pool without unstaking first:

// Deposit an existing stake account → receive aXNT
const depositStakeTx = await client.depositStake({
  stakeAccount: stakeAccountPubkey,
  wallet: wallet.publicKey,
});

depositStakeTx.sign(wallet);
const sig = await connection.sendRawTransaction(depositStakeTx.serialize());

This avoids the cooldown period required for normal unstaking and gives you immediate liquidity.

4. Withdraw Flow (aXNT to XNT)

Two withdrawal methods are available, each with different tradeoffs:

MethodSpeedFeeBest For
InstantImmediateMarket spread + swap feeSmall amounts, urgent liquidity
Delayed~2 epochs (~4 days)0.1% (10 bps)Large amounts, fee-sensitive

Delayed Withdrawal (Stake Pool)

The delayed path withdraws directly from the stake pool at the exact exchange rate, with only the 0.1% protocol fee.

  1. Select the Unstake tab on the staking UI
  2. Choose Delayed Withdrawal
  3. Enter the amount of aXNT to unstake
  4. Approve the transaction — this deactivates a stake account from the pool
  5. Wait for the cooldown period (~2 epochs)
  6. Return to claim your XNT once the cooldown completes
// Step 1: Initiate delayed withdrawal
const withdrawTx = await client.withdrawStake({
  amount: 500_000_000, // 0.5 aXNT in base units
  wallet: wallet.publicKey,
});

withdrawTx.sign(wallet);
const sig = await connection.sendRawTransaction(withdrawTx.serialize());

// Step 2: After cooldown, claim the deactivated stake account
const claimTx = await client.claimWithdrawal({
  stakeAccount: withdrawalStakeAccount,
  wallet: wallet.publicKey,
});

Instant Withdrawal (DEX Swap)

The instant path swaps aXNT for XNT on the forti-amm DEX pool. This is faster but subject to market spread and pool liquidity.

  1. Select the Unstake tab
  2. Choose Instant Withdrawal
  3. Enter the amount of aXNT
  4. Review the swap rate (may differ slightly from the stake pool rate due to AMM pricing)
  5. Approve the transaction
// Instant swap via forti-amm
const swapTx = await client.withdrawSol({
  amount: 500_000_000, // 0.5 aXNT
  wallet: wallet.publicKey,
  method: "instant", // uses forti-amm
});

swapTx.sign(wallet);
const sig = await connection.sendRawTransaction(swapTx.serialize());

For large withdrawals (>10,000 aXNT), the delayed method is recommended to avoid AMM slippage.

5. Yield Sources

aXNT holders earn yield from two sources, both of which accrue through exchange rate appreciation:

Base Staking Yield

Standard validator rewards earned by the stake accounts delegated within the AXIO pool. This is the same yield any delegated stake account earns on X1/Tachyon.

Current rate: ~7.2% APY

MEV Yield

The AXIO block engine runs a continuous auction for every leader slot. Searchers submit bundles with tips. A portion of those tips is injected directly into the aXNT reserve, increasing the exchange rate for all holders.

Current rate: ~5.2% APY

Combined Yield

SourceAPYMechanism
Base staking~7.2%Validator rewards (epoch-based)
MEV tips~5.2%Reserve injection (per-slot)
Total~12.4%Exchange rate appreciation

Yield accrues via reserve injection (exchange rate appreciation), not token rebasing. Your aXNT balance never changes — the XNT value it represents increases over time.

How Reserve Injection Works

Searcher submits bundle with 1,000 lamport tip

Bundle wins auction, lands on-chain

Tip is split according to fee schedule:
  250 lamports → aXNT reserve (exchange rate ↑)
  150 lamports → staker yield (direct distribution)
  400 lamports → validator operator
  200 lamports → treasury

Reserve grows → exchange rate increases → aXNT worth more

6. Fee Structure

Tip Distribution

Every tip collected by the AXIO engine is split across four recipients:

RecipientSharePurpose
Reserve injection25%Backs aXNT — increases exchange rate for all holders
Staker yield15%Direct yield distribution to stakers
Validator rewards40%Incentivizes validators to run AXIO
Treasury20%Protocol development and operations

Protocol Fees

ActionFeeNotes
Stake (XNT → aXNT)0.1% (10 bps)Deducted from deposit amount
Unstake — delayed (aXNT → XNT)0.1% (10 bps)Deducted from withdrawal amount
Unstake — instant (AMM swap)Market spreadDepends on pool depth and trade size

7. Using the Staking UI

The staking interface is available at axio.fortiblox.com/stake.

Dashboard Overview

After connecting your wallet, the position card displays:

FieldDescription
aXNT BalanceYour current aXNT holdings
Value in XNTCurrent redemption value at the live exchange rate
Unrealized RewardsXNT gained since your last deposit (rate appreciation)
APY EarnedYour personal realized APY based on deposit history
Exchange RateCurrent aXNT/XNT rate

Tabs

  • Stake — deposit XNT and receive aXNT
  • Unstake — withdraw via delayed (stake pool) or instant (AMM swap) methods

Supported Wallets

WalletStatus
PhantomSupported
SolflareSupported
BackpackSupported

8. Using the SDK

The @axio/staking-sdk package provides programmatic access to all staking operations.

Installation

npm install @axio/staking-sdk

Initialization

import { AxioStakingClient } from "@axio/staking-sdk";

const client = new AxioStakingClient({
  baseUrl: "https://api.axio.fortiblox.com",
  rpcUrl: "https://rpc.x1.xyz",
});

Available Methods

MethodDescription
depositSol(params)Deposit XNT into the stake pool, receive aXNT
withdrawSol(params)Instant withdrawal via AMM swap
depositStake(params)Deposit an existing stake account into the pool
withdrawStake(params)Initiate delayed withdrawal (deactivates stake account)
claimWithdrawal(params)Claim a completed delayed withdrawal
getOverview()Fetch pool stats: exchange rate, TVL, APY, supply
getPosition(wallet)Fetch a wallet's staking position and rewards

Query Pool State

const overview = await client.getOverview();

console.log(`Exchange rate: ${overview.exchangeRate}`);
console.log(`Total value locked: ${overview.tvl} XNT`);
console.log(`Current APY: ${overview.apy}%`);
console.log(`aXNT supply: ${overview.poolTokenSupply}`);

Query Your Position

const position = await client.getPosition(wallet.publicKey);

console.log(`aXNT balance: ${position.balance}`);
console.log(`Value in XNT: ${position.valueInXnt}`);
console.log(`Unrealized rewards: ${position.unrealizedRewards} XNT`);
console.log(`Personal APY: ${position.apy}%`);

9. Security

Program Safety

  • The stake pool program (4aawPPTLmh1kEBqYm2CGS32p4kfpuBf4CBcDipF94c2G) will be set to non-upgradeable after mainnet launch
  • The program has passed 2 red team audit rounds with all critical and high-severity issues resolved
  • Authority keys are held in multi-sig with hardware wallet signers

Exchange Rate Guarantees

The exchange rate can only increase. This is enforced at the program level:

  • Reserve injection adds lamports to the reserve — rate goes up
  • Deposits mint proportional pool tokens — rate stays the same
  • Withdrawals burn proportional pool tokens — rate stays the same
  • No external burn — there is no instruction to reduce the reserve without a corresponding pool token burn

The only scenario where the rate could theoretically decrease is a validator slashing event that reduces the underlying stake accounts. X1/Tachyon does not currently implement slashing, so this risk is not present at launch.

Operational Security

ControlImplementation
Program authorityMulti-sig (2-of-3) with hardware wallets
Reserve injectionRestricted to engine tipjar authority
Fee changesRequires multi-sig approval
Emergency pauseMulti-sig controlled, disables deposits only
Rate oracleOn-chain calculation, no off-chain dependency

Next Steps