Assessment reports>Pye>Low findings>Redeeming later is better for YT holders
Category: Business Logic

Redeeming later is better for YT holders

Low Impact
Low Severity
High Likelihood

Description

Upon the first redemption of a bond, the following function is called to populate the redemption cache.

pub fn set_redemption_cache_if_none(
    &mut self,
    lst_state: &LstState,
    stake_pool_tokens_supply: u64,
    pt_mint_supply: u64,
    yt_mint_supply: u64,
    lst_vault_balance: u64,
) {
    if !self.is_redemption_conversion_set() {
        let lst_for_all_pt = RedemptionCache::calc_lst_for_all_pt(
            pt_mint_supply,
            lst_vault_balance,
            lst_state.total_lamports(),
            stake_pool_tokens_supply,
        );
        self.redemption_cache = RedemptionCache {
            pt_supply_at_first_redemption: pt_mint_supply,
            bond_lst_bal_at_first_redemption: lst_vault_balance,
            lst_for_all_pt_at_redemption: lst_for_all_pt,
            yt_supply_at_first_redemption: yt_mint_supply,
        }
    }
}

The redemption cache notably fixes the value of a principal token to one SOL. Since the LST is still deposited in the pool and still earning yield, it is possible a yield-distribution event happens after the first redemption. In this case, the value of LST relative to SOL and the value of PTs would rise. If the conversion rate of PT to LST is fixed earlier, this rise in value would be captured in the PT. If fixing of the value of PT occurs later, this value would instead go to the YT.

Impact

It is in the best interests of the PT holders for the first redemption to happen as soon as possible after the bond matures, to fix the value of PT to LST in order to capture the rise in value of the LST. In practice, it is highly likely that the first redemption happens long before the next reward-distribution event, and therefore the impact of this is limited.

Recommendations

Consider adding a crank to set the redemption cache immediately after bond maturity, or fix the value through another mechanism.

Remediation

This issue has been acknowledged by Pye in the Sky Labs Ltd., and fixes were implemented in the following commits:

Zellic © 2025Back to top ↑