Symbiotic Rewards

Restaking rewards distribution from Symbiotic to Byzantine stakers and curators

This section explores the detailed technical structure of the SymbioticManager contract which handles the restaking rewards on Symbiotic, focusing on how restaking rewards from Symbiotic are distributed to the Byzantine stakers and curators.


Overview

  • Every creation of a SymERC20ByzVault contract automatically deploys a SymbioticManager contract.

  • Every SymERC20ByzVault inherits from SymbioticManager.

  • All Symbiotic networks, Sym Byz vault stakers and curators interacts directly with SymbioticManager to distribute and claim rewards.

  • The checkpoint system is used in both rewards distribution and claiming stages.

  • Unlike the Eigen rewards, Symbiotic rewards do not use Merkle tree.


High Level Design

Symbiotic Reward Claiming Flow

A simplified and high level flow is as follows:

  • Networks interact directly with the SymbioticManager to distribute rewards in a specific token at a particular timestamp.

  • Stakers claim rewards from SymbioticManager.

  • Curator claims their fees from SymbioticManager.

The SymERC20ByzVault contract extends the SymbioticManager contract. This means that interacting directly with SymERC20ByzVault allows the caller to access the features and functions of SymbioticManager.


Checkpoints in Symbiotic Rewards Calculation

Checkpoint creation and usage within a timeframe

The use of the checkpoint system in Symbiotic rewards:

  • Three checkpoints are created at every deposit and withdrawal of the Sym Byz Vault: activeStake, activeShares and activeSharesOf. The new value is added to the list of existing values.

  • At every rewards distribution, the network provides a timestamp to retrieve the vault's active shares at that specific timestamp (activeSharesAt) and logs it in the contract. Along with this, the timestamp and distributed amount are also stored in the contract.

  • At every rewards claim, the stored timestamp is used to retrieve the active shares of the staker at that specific timestamp (activeSharesOfAt).

  • The activeSharesOfAt, along with the distributed amount and activeSharesAt of the vault, are used to calculate the staker's eligible reward amount. The formula is as follows:

stakerRewards=activeSharesOfAtdistributedAmount/activeSharesAtstakerRewards = activeSharesOfAt * distributedAmount / activeSharesAt

Step-by-Step Process For Staker Rewards

1

Rewards distribution by networks

Function to invoke:

function distributeRewards(address network, address token, uint256 amount, bytes calldata data) external;

All networks who have opted-in to the Sym Byz vault should calls this function to distribute rewards for the stakers of the vault. As explained in the last section, the timestamp as input to the function (encoded in data) is used to retrieve the relevant checkpoints to mark the vault's total active shares and the staker's active shares when claiming rewards.

The final distributed amount is the amount of rewards that is left after subtracting the curator fee from the actual earnings.

2

Rewards claim by stakers

Function to invoke:

function claimRewards(address recipient, address token, bytes calldata data) external;

A staker calls this function to claim rewards distributed by the networks.

To claim all rewards distributed by various networks in different tokens from a Sym Byz vault, multiple calls to claimRewards are required.


Fees For Curator

Function to invoke:

function claimCuratorFee(address recipient, address token) external;

The curator of an Sym Byz Vault can set and adjust the curator fee percentage. They call this function claim all cumulative fees distributed in a specific token for a particular vault at once.

Each time a network calls the distributeRewards, the curator fee amount is increased and stored in the contract.

Last updated