Delegation Strategy v2
On August 14th, 2024, Marinade will transition to the new delegation strategy described below.
Quick Overview
Delegation is unified under the Stake Auction Marketplace (SAM) with MNDE integration:
Stake Auction Marketplace (100% of TVL): Marinade’s entire TVL is distributed exclusively through SAM, with MNDE Directed Stake integrated as part of the stake cap mechanism.
Every epoch, Marinade evaluates the performance of validators in SAM, gathers MNDE votes, and rebalances stake based on these results. This process operates in a publicly accessible pipeline available on GitHub, where previous scoring runs can also be viewed.
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 allows Marinade stakers to delegate SOL to validators offering the best APY. Validators are scored based on their "max_yield
" (maximum yield for stakers at a specific stake level, e.g., 8% APY on 100k SOL).
Every epoch, Marinade ranks validators based on "max_yield"
(which includes their bid) and distributes stake to the highest-yielding validators, ensuring adherence to eligibility criteria and decentralization constraints.
Benefits for Validators:
Customized Commission: Validators can set a commission for Marinade different from their public commission by offsetting a portion with a Cost per Mile per Epoch (CPMPE) bid. This allows validators to offer a competitive rate to Marinade without affecting external stakers.
Revenue Sharing: Validators can share additional revenue sources, such as block rewards, directly with Marinade stakers.
Profitability Control: Validators can set a maximum stake they are comfortable managing. If their offer ranks high, they receive stake; otherwise, they do not incur any bid charges.
Last Price Auction: Validators set the maximum bid they’re willing to pay without needing to monitor bids every epoch. At the end of each epoch, validators will only be charged the realized_yield (max_yield of the last validator to receive stake), which may be lower than their actual max_yield bid.
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:
Validator ID | max_yield (APY) | max_stake_wanted (SOL) | stake_received (SOL) | realized_yield (APY) |
1 | 10.6% | 95 000 | 95 000 | 8.12% |
2 | 9.58% | 1 000 000 | 200 000* | 8.12% |
3 | 9.4% | 80 000 | 80 000 | 8.12% |
… | … | … | … | … |
166 | 8.12% | 50 000 | 15 000** | 8.12% |
167 | 8.12% | 200 000 | 15 000** | 8.12% |
168 | 8.10% | 80 000 | 0 | 0% |
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 bid 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)
Specify the Maximum Stake Wanted in lamports.
Ensure sufficient bond funding to cover the desired stake and bid amount. A calculator is available to help estimate the SOL needed 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’s bond holds more than 0 SOL, the "MaxStakeWanted" parameter is automatically set to 10,000 SOL by default, unless the validator specifies a higher amount.
If a validator sets their "MaxStakeWanted" below 10,000 SOL but is eligible to receive stake, the minimum stake they can obtain remains at 10,000 SOL. Additionally, setting the CPMPE to 0 means the validator will not incur any costs for the stake, even if they win the auction and receive 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 start of each epoch (Epoch N+1), Marinade settles bids from validators who received activated stake in the previous epoch. The results are publicly available in the Github repository.
Bonds Calculation Formula (for validators receiving SAM stake):
Bid Charged =(Active stake from Marinade at end of epoch * Effective Bid) / 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:
Ineligible Validators:
Validators that do not meet the eligibility criteria are assigned a priority of 0.
Partially Covered Stake:
Validators with a portion of their current stake not covered by their bond are assigned a priority ranging from 1 to N, depending on the percentage of stake that remains uncovered.
Overstaked Validators:
Validators that are overstaked are assigned a priority from N+1 to M, based on the percentage of their stake from Marinade that is overstaked.
Unstaking Process:
Marinade initiates the unstaking process starting with priority 0 and progresses in ascending order (1, 2, ..., M).
The process continues until the 5% cap of stake that can be rebalanced per epoch is reached.
Staking priority rules
Stake distribution is managed through a unified pipeline that integrates both MNDE-directed votes and staking auction bids, distributing the entire TVL collectively.
Stake Allocation:
Stake distribution is managed through a unified pipeline, combining MNDE-directed votes and SAM bids to allocate Marinade’s entire TVL.
Distribution Mechanics:
Priority-Based Distribution: Stake is allocated starting from the highest-ranked validator down the list.
Constraint Checks: For each validator, the following constraints are verified before allocating stake:
Validator TVL Constraint:
Validators who do not have MNDE-Enhanced Stake directed to them are limited to a default stake cap of 2% of Marinade’s TVL. However, validators with MNDE-directed stake can increase this cap, allowing them to receive additional stake from the auction. (This mechanism helps prevent sybil attacks by ensuring only validators with genuine support through MNDE can exceed the standard cap.)
ASO/Country Constraints:
Ensures that staking to a validator does not exceed Solana's 30% concentration for ASO and 30% for Country.
Bond Balance:
Verifies that the validator’s bond balance is sufficient to cover downtime (PSR) and at least one epoch's worth of effective yield, including the bid.
Maximum Stake Wanted:
Considers the maximum amount of SOL the validator wishes to receive from the auction, as specified in their bond contract.
Stake Allocation Process:
Sequential Allocation: Stake is allocated to validators in order of their Max_Yield, subject to the above constraints.
Handling Ties:
If two or more validators have the same Max_Yield, the remaining stake is split equally among them.
Constraint checks are performed in parallel to ensure fair distribution.
Completion: The process continues until all available stake is distributed or no further allocations are possible due to constraints.
Result: This process returns a list of validators sorted by Max_Yield, along with the amount of stake each validator is allocated.
Priority Adjustment:
Insufficient Allocation Scenario:
If a validator's bid does not secure sufficient priority to receive the desired amount of stake, the validator may receive less stake or no stake.
Resolution: Validators facing this scenario should consider increasing their bid to achieve a higher staking priority and improve their chances of receiving the desired stake allocation.
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