Delegation Strategy v2
On August 14th, 2024, Marinade will transition to the new delegation strategy described below.
Quick Overview
Delegation is split into two parts:
Stake Auction Marketplace (90 % of TVL)
MNDE voting based (10 % of TVL)
Every epoch, Marinade evaluates the performance offered by all validators in the Stake Auction Marketplace, collects MNDE votes, and rebalances stake based on the results.
This process runs in a publicly accessible pipeline in the GitHub repository https://github.com/marinade-finance/ds-sam-pipeline. Previous scoring runs are also available there.
Marinade evaluates all active validators that have set up their PSR bond. The code computing stake distribution is available online, and the results are published on-chain. You can view validator details on Marinade's Validator Dashboard. The ethos is to be transparent and open to all validators.
Stake Auction Marketplace
The Stake Auction Marketplace is a delegation mechanism that allows Marinade stakers to delegate their SOL to the validators offering the best end APY.
The scoring of validators is based on a single parameter called "max_yield", which is the maximum yield that a validator can return to a staker on some amount of stake (eg: 8% APY on 100k SOL delegated).
Every epoch, Marinade will rank validators based on their "max_yield," which includes the bid set by the validators and will distribute the stake to the highest-yielding validators while still respecting the eligibility criteria and decentralization constraints that are part of the strategy.
The Stake Auction Marketplace also has multiple benefits for validators:
It creates the opportunity for the validator to set a commission that's specific to Marinade, which can be lower than their public commission. By offsetting a part of their commission with a bid (CPMPE), validators can customize the commission that they offer to Marinade to be more competitive, without impacting the commission they have with their external stakers.
Validators can share additional revenue sources directly with Marinade stakers, like block rewards.
Validators can set a profitability level on an amount of stake that they feel comfortable with. If their offer is amongst the best in the Stake Auction Marketplace, they will receive stake from Marinade, and their bids will be charged. If other validators are offering a higher APY in the marketplace, the validator will just not receive stake, and their bond will not be charged.
Another important part of the Stake Auction Marketplace design is the last auction price mechanism, which allows validators to set their bid as the maximum amount that they would be willing to pay, instead of having to monitor their bids epoch per epoch.
Last price auction
At the end of the scoring process, Marinade has a list of validators ordered by max_yield, as well as an amount of stake to be distributed to each validator.
The "realized_yield" for the epoch will be set to the "max_yield" of the last validator to receive stake, which is consequently the lowest yield of the list.
Validators that had a higher "max_yield" for that epoch will not provide their full "max_yield" but will only need to provide the "realized_yield" for the epoch. This means that their bid might get charged less than the maximum that has been set, as a lower amount of SOL would be needed to achieve this lower "realized_yield", unless they are the last validator from the list.
This mechanism prevents validators from overpaying, as your bid will only get charged to match the realized_yield of the epoch, which for most validators will be lower than their actual "max_yield".
Example:
In the example above, Marinade would distribute stake to a total of 168 validators.
Let's imagine that the validator ranked 1 has a base APY of 7.6%, and has set a bid (CPMPE) that pushes his max_yield to 10.6%.
In that epoch, Validator 1 would not spend his full "CPMPE" to achieve a 10.6% yield, but their bond would only get charged enough SOL to arrive at an 8.12% APY. This will be the case for all validators that provide a max_yield that is higher than 8.12% APY.
Alternatively, if the validator ranked 167 in that example had a base APY of 7.6%, and a bid to push his max_yield to 8.12% APY, this validator would be paying their full bid (CPMPE) for that epoch.
This mechanism ensures that validators can set their true max_yield without worrying about overpaying for stake at any given point.
How to participate in the Stake Auction Marketplace
Any validator can participate in the Stake Auction Marketplace. To participate, a validator must:
Create a PSR bond associated with its validator, using the validators bond CLI (see Readme)
Set a CPMPE, in lamports (Cost per mile per epoch, corresponding to the maximum bid that the validator is willing to pay to receive 1000 SOL delegated for an epoch)
Set a maximum amount of stake wanted, in lamports
Make sure the bond is sufficiently funded to receive the amount of stake wanted while being able to pay for the bid that has been set. Marinade released a calculator that can help calculate the amount of SOL required in the bond.
A simulation is running on https://psr.marinade.finance/ where validators can see how the bid they set would impact the stake distribution. More instructions to participate in that simulation are available here.
If a validator has more than 0 SOL in their bond, the "MaxStakeWanted" value is automatically set at 10k SOL (unless it's set to a higher value by the validator themselves). Please note that if the CPMPE is set to 0, the validator will never pay for that stake, even when winning in the auction and receiving the stake.
Reminder: - SOL deposited in a validator's bond will always stay delegated to that validator and can be considered as self-stake. - Always use the Validator bonds CLI to add or withdraw SOL from your validator's bond.
Bonds settlements
At the beginning of Epoch N+1, a settlement will be created to collect the bids for validators who received activated stake in Epoch N.
The results of each auction can be found on this Github repository.
If the validator receives stake from both MNDE and the Stake Auction Marketplace, the formula below can be used to calculate what part of that stake comes from the Stake Auction Marketplace and will require a settlement of the bond:
Active stake from Marinade at the end of epoch: X
Target stake from SAM: Y
Target stake from MNDE: Z
Effective bid: B / 1000
Bid charged = X * Y / (Z + Y) * B / 1000
The settlement created for a given epoch can contain extra SOL from the bond, allowing Marinade to enforce the minimum of 1 SOL per stake account. Any additional SOL in the settlement that is not used to pay for stake in that epoch will go back to the bond once the settlement expires after 3 epochs.
How to exit the Stake Auction Marketplace
If you start receiving stake from SAM, please note that the only correct way to exit the marketplace is to request a withdraw from your bond. This allows Marinade to re-delegate stake from you, and you will not be charged for this action.
If you receive stake from SAM, but lower your CPMPE or your "max_stake_wanted", Marinade will create a bond settlement for the expected yield that will be missed. The bond settlement will correspond to the effective yield lost due to rebalancing the stake to a new validator in the winning set. Marinade reserves the right to apply those bond settlements in a retroactive manner, starting from August 14th, 2024.
Stake distribution ordering and decentralization constraints
Unstaking priority rules
An unstake priority is attributed to all validators:
Validators that do not meet the eligibility criteria are assigned a priority 0
Validators that have a part of their current stake not covered by the bond are assigned a priority of 1 to N, depending on the percentage of stake not covered by the bond.
Validators that are overstaked are then assigned a priority of N+1 to M, based on the % of their stake from Marinade that is overstaked.
Marinade starts unstaking validators from priority 0 in ascending order to 1, 2, ..., M, and will stop when it reaches the 5% cap of stake that can be rebalanced per epoch.
Staking priority rules
MNDE directed stake is considered and distributed first (10% of the TVL). MNDE holders are free to use their vote to direct more stake to the Stake Auction Marketplace
Marinade then distributes the rest of the TVL (90%) through the Stake Auction Marketplace. All validators get ranked by "Max_Yield", which is a combination of APY and the bid set by the validator.
Marinade starts distributing stake to the highest ranked validator, and applies the following checks:
Validator TVL constraint - If the validator already has 2% or more of Marinade’s TVL due to MNDE-directed stake, the validator will not receive more stake from the auction.
ASO/Country constraints - Marinade will check if staking to this validator doesn’t make the stake concentration go above 20% for ASO, and 30% for Country, both for Marinade’s TVL and Solana’s TVL. Marinade will assign as much as possible without breaking one of those limits.
Bond balance - Marinade will check if the bond balance is sufficient to cover downtime (PSR) and at least one epoch worth of effective yield, including the bid. The validator’s total bond balance is used to calculate the maximum amount of stake that can be protected.
Maximum stake wanted - The amount of SOL that the validator wants to get from the auction, set in the bond contract by the validator.
Once all those constraints are checked, an amount of SOL can be staked on the validator. The system then moves to the next validator in the list and applies the same checks.
If two or more validators are offering the same "Max_Yield," the remaining stake is split equally first, and constraints checks are run on all validators in parallel.
This process goes on until all the stake has been distributed.
This process returns a list of validators sorted by max_yield, with the amount of stake they are supposed to receive.
Eligibility criteria to receive stake from Marinade
For the Stake Auction Marketplace:
Validator is not blacklisted (running harmful mods, commission rugs)
Validator runs a version of the node that is in the specified semver bounds.
Validator's final inflation commission is ≤ 7 % (bids and MEV commission can be used to offset a higher public commission.)
Validator's uptime was> 80% in each of the last 3 epochs, calculated using the stake-weighted average of vote credits.
Validator has created and funded its PSR bond. The PSR bond must contain enough SOL for:
One epoch of downtime (1 SOL per 10k SOL)
One epoch of "Maximum_yield" for the epoch for the amount of stake received (set by the validator)
One epoch of bids (set by the validator)
This calculator can be used to estimate the bond size required for a given amount of stake.
For MNDE votes:
All the constraints above apply, with those slight differences:
The "max_bid" is not taken into account in the effective commission of the validator
Bids are not charged for the stake distributed through MNDE, but a PSR bond protecting the downtime and the yield for that stake still needs to be in place.
Blacklist
Marinade will blacklist validators that are identified as harming the network. A validator can get blacklisted for:
Slow voting (also called vote lagging)
Commission rugs
Failing to restart the node in the 36 hours following the cluster restart after a halt for at least 2 times
To be removed from the blacklist, the process is the following:
If a validator is blacklisted by Marinade's unjustly (e.g. validator's poor networking performance made us believe the validator was vote-lagging), the validator will be removed from the blacklist upon reviewing and approving the claim
If a validator, once rightfully blacklisted, chooses to reform their behavior and demonstrate compliance, they will be removed from the blacklist only after an observation period of at least 1 month.
Repeat offenders will be permanently blacklisted and prohibited from receiving Marinade stake. Rule 2 does not apply.
Validators blacklisted for commission rugs are blacklisted permanently. Rule 2 does not apply.
Technical details
The delegation strategy scoring runs once per epoch.
At the end of each epoch, Marinade's bot performs actions to move our stake distribution towards the desired state.
Marinade uses ipwhois for geolocation services and data center identification. The data is updated every 24 hours.
Marinade uses Solana on-chain data to collect all metrics about validators apart from geolocation
Marinade has a public API: https://validators-api.marinade.finance/docs
PSR bond also counts in the self-stake requirement of the Solana Foundation Delegation Program (SFDP). Any SOL deposited in your bond will count towards your total self-stake.
Useful resources
PSR dashboard and simulation: https://psr.marinade.finance/ MNDE calculator: https://cogentcrypto.io/MNDECalculator Directed stake dashboard: https://lst-ds-dashboard.solanahub.app/ Bonds repository: https://github.com/marinade-finance/validator-bonds Bonds CLI package: https://www.npmjs.com/package/@marinade.finance/validator-bonds-cli Google Bucket: https://console.cloud.google.com/storage/browser/marinade-validator-bonds-mainnet/ Github: - https://github.com/marinade-finance/psr-dashboard - https://github.com/marinade-finance/psr-sam - https://github.com/marinade-finance/psr-sam-pipeline
Last updated