suideveloper
All questions
Sui basics

What is the Sui storage fund and storage rebate?

October 28, 2026

The storage fund is a pool of SUI made up of the storage fees users pay whenever a transaction writes data onchain. The fund counts as stake, so it earns stake rewards. Those rewards pay validators for keeping data stored long after the user who wrote it has paid. The storage rebate is the refund you get when you delete or shrink an object. Sui pays back almost all of the fee that was paid when the object was stored, so cleaning up state is cheaper than leaving it.

Why it exists

Storage is paid once, but validators have to keep data forever. The storage fund connects the two. Fees paid today become stake that earns rewards in every future epoch. The docs call it "a cache of SUI that never fully depletes." Only its returns are paid out, never the principal.

How fees flow

  1. Writing data. A transaction that creates or grows an object pays storage_units × storage_price. That's 100 storage units per byte at a storage price of 76 MIST per unit (mainnet protocol config, version 139). The fee goes into the fund, and the object records the amount as its storage_rebate.
  2. Earning. Each epoch, the fund gets a share of stake rewards in proportion to its size relative to total stake. Most of that share goes to validators. The storage_fund_reinvest_rate setting (500 basis points, or 5%) is reinvested in the fund.
  3. Deleting data. When a transaction deletes or shrinks the object, the fund pays back the stored fee times storage_rebate_rate. The rest is the non-refundable storage fee, which stays in the fund for good.

The fund's two balances show up in the system state:

Field (epoch 1291, 2026-10-25) Value
totalObjectStorageRebates (owed back to current objects) ~1,493,964 SUI
nonRefundableBalance ~1,380,659 SUI
Total fund size ~2,874,622 SUI

Rebate rate, docs vs chain

The Gas in Sui page says the rebate is 99% of the original storage fee. That matches the long-standing storage_rebate_rate of 9900 basis points. In sui-protocol-config, protocol versions 138 and 139 raise it to 9999 basis points (99.99%), and mainnet reports version 139 with storage_rebate_rate = 9999. Read the live value instead of assuming:

Terminal
curl -s https://graphql.mainnet.sui.io/graphql \
  -H 'content-type: application/json' \
  -d '{"query":"{ protocolConfigs { protocolVersion config(key: \"storage_rebate_rate\") { value } } }"}'

Check the fund yourself

TypeScript
import { SuiGrpcClient } from '@mysten/sui/grpc'

const client = new SuiGrpcClient({
  network: 'mainnet',
  baseUrl: 'https://fullnode.mainnet.sui.io:443',
})

const { systemState } = await client.getCurrentSystemState()
console.log(systemState.storageFund)
// { totalObjectStorageRebates: '...', nonRefundableBalance: '...' } in MIST

Every transaction's gas summary also lists storageCost, storageRebate and nonRefundableStorageFee. To see a rebate happen, create an object on testnet in the playground, delete it, and compare the two transactions' gas lines.

Practical consequences

  • Delete what you don't need. Burning a used ticket, removing a dynamic field, or merging coins (see merge and split coins) returns storage fees to the sender.
  • A rebate can make net gas negative. A transaction that frees more storage than it uses can cost less than its computation fee. The gas coin can even end up with more SUI than before.
  • The rebate goes to whoever deletes the object, not to whoever created it. Design your contracts with that in mind.
  • Bigger objects cost more up front. Keep structs lean and put large data in Walrus rather than onchain.

Sources

More on sui basics