Testnet Wave 2 Stake Delegation FAQ
This document describes Sui stake delegation in depth and is accurate as of Testnet Wave 2.
This document describes Sui stake delegation in depth, including detailed interactions between user accounts, validators, and the Sui system. This description is accurate as of Wave 2 Testnet, but is subject to change as Sui tokenomics implementation continues to evolve before Sui Mainnet. All cited numbers in visualizations are theoretical and only serve as educational examples.
- Q: What is a delegator?
- A: Anyone with a Sui address can delegate (or stake) SUI tokens with one or more validators of their choice.
- Q: How do I stake and unstake SUI?
- A: Sui Wallet supports both stake and un-staking. Staking via Move code or the Sui CLI is also possible – the relevant functions are in the sui_system module.
- Q: What is a staking pool?
- A: Each Sui validator maintains its own staking pool to track the amount of delegated stake and to compound staking rewards. This staking pool operates similarly to liquidity pools –-- when a delegator stakes SUI with the validator, the staking pool mints pool tokens representing a proportional ownership share in the staking pool (see 0: Initial State in Figure 1, below). Staking rewards for the validator are placed in the staking pool, and the user can reclaim both the staked principal and accumulated rewards by exchanging the pool tokens for SUI (i.e., unstaking). The staking pool is implemented in a system-level smart contract (staking_pool.move) and is part of the Sui Framework.
- Q: Where do my staked SUI tokens go?
- A: They remain safely locked up under your address! Unlike (e.g.) Ethereum, where a delegator needs to relinquish control of their staked tokens to a third-party liquid staking smart contract, Sui delegation allows stakers to retain full custody of their staked tokens (see 1: Delegation request in Figure 1, above). Delegated tokens are protected at the Sui protocol level and not subject to vulnerabilities in a third-party smart contract.
- Q: When does my stake delegation request take effect?
- A: A stake delegation request goes into a pending state immediately in the staking pool as soon as it is made (see 1: Delegation request in Figure 1, above). Sui Wallet will reflect any pending delegation requests for the delegator account. However, pending stake delegation requests do not take effect until the end of the epoch during which the request is made (see 2.2: End of Epoch in Figure 2, below).
- Q: Where do staking rewards come from?
- A: Staking rewards are funded by transaction gas fees collected during the current epoch and by stake subsidies released at the end of the epoch (see 2.2: End of Epoch in Figure 2, above)
- Q: How many stake rewards will there be during Testnet?
- A: Stake rewards are made up from two flows, transaction gas fees and stake subsidies. In terms of the first flow, the total value collected throughout each epoch depends on the amount of on-chain activity executed on the Sui network and the reference gas price (which converts gas units into SUI amounts). In terms of stake subsidies, 0.01% of the total stake managed by validators is distributed at the end of each epoch (see 2.2: End of Epoch in Figure 2, above).
- Q: When does my unstake request take effect?
- A: A stake un-delegation or withdrawal request also goes into a pending state immediately in the staking pool as soon as it is made. The principal portion of the delegation is returned to the delegator right away (see 4: Withdrawal request in Figure 3, above). Note that a delegation request still in the pending state CANNOT be un-delegated or canceled (Sui Wallet will not enable un-delegation until a delegation has been fully processed at an epoch boundary). At the end of the epoch the full un-delegation takes effect and delegator compound rewards are returned to the delegator at this time (see 5.2: Withdrawal completion at end of epoch in Figure 4, below).
- Q: Why do I have to wait for the epoch to end in order for my stake delegation or withdrawal to take effect?
- A: Sui’s staking experience has been optimized so that stake rewards count as new stake and begin compounding immediately after distribution (see 2.1: End of Epoch: Reward Distribution and 5.1: End of Epoch: Reward Distribution in Figure 4, above). The staking pool design treats all SUI tokens in the staking pool equally regardless of when they were deposited or whether they were originally deposited as stake principal or stake rewards. However, this design depends on updating the staking pool’s exchange rate at the end of the epoch once the epoch’s stake rewards have been distributed. Consequently, new stake delegations or withdrawals need to wait until the epoch finalizes in order to deliver an up-to-date staking pool exchange rate.
- Q: Can I unstake a portion of my active stake delegation with a particular validator?
- A: No, this is not supported. Unstaking is all-or-nothing during Testnet Wave 2.
- Q: Is there a minimum delegation amount that can be staked with a single validator?
- A: There is no minimum–a delegator can stake a single MIST (the smallest possible fraction of SUI).
- Q: How does a validator’s stake relate to voting power in consensus?
- A: By convention, the total voting power is always 10,000 regardless of the amount staked, and thus the quorum threshold is 6,667. Each validator has consensus voting power proportional to its stake, with one exception: the voting power of an individual validator is capped at 1,000 (10% of the total).
- Q: What is the maximum amount that can be staked with a single validator?
- A: There is no limit. However, as noted above, the voting power of an individual validator in consensus is capped at 10%.
- Q: Are staking rewards compounded automatically?
- A: Yes, see answer to “What is a staking pool?”
- Q: How can I view my accrued rewards as a delegator?
- A: Sui Wallet displays the current accumulated reward for a staker’s active delegations.
- Q: How is the exchange rate between SUI and staking pool tokens calculated?
- A: The exchange rate is re-calculated at the end of each epoch according to the equation in the diagram above (see 0: initial state in Figure 1, above). It takes into account the principal value of the staking pool, the cumulative reward amount, and the number of issued pool tokens.
- Q: How can I query the pool exchange rate for the current epoch or for a previous epoch?
- A: Current epoch – call the staking_pool::pool_token_exchange_rate function directly from Move code or externally via the devInspectMoveCall API. Past epoch – each epoch change emits a 0x2::validator_set::ValidatorEpochInfo event with the exchange rate information. The Events API can be used to query events.
- Q: What information does the evolution of a validator pool’s exchange rate contain?
- A: The exchange rate between a validator’s staked SUI tokens and pool tokens can only increase across time since the Sui protocol does not slash stake and thus always delivers positive or, potentially, zero rewards. Hence, the exchange rate increases across time as each liquidity token becomes a claim on an increasing number of staked SUI. Importantly, note that the ratio between two exchange rates of the same validator pool taken at different moments in time represent the returns for that validator pool in that time period. Furthermore, because Sui validators initialize their exchange rate to 1 when they begin operations, the validator’s current exchange rate can be thought of as the validator’s total return since operations began.
- Q: Can I transfer pool tokens?
- A: No. It is an internal accounting mechanism for Sui Tokenomics, and cannot be transferred from one address to another
- Q: Are pool tokens fungible?
- A: Pool tokens for a given validator are theoretically fungible in that all pool tokens from a specific validator’s staking pool represent an equal claim on the pool’s staked SUI. Across validators, however, pool tokens are different since each validator pool has a different amount of staked SUI and pool tokens, and therefore, has a different calculated exchange rate. Thus making pool tokens non-fungible between validators.