Skip to content

Commit b299418

Browse files
authored
Merge pull request #27 from suilend/feat/redemption-fn
Add liquid_staking.net_redemption_amount
2 parents 4bed98e + ba3f9ef commit b299418

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

contracts/sources/liquid_staking.move

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,30 @@ module liquid_staking::liquid_staking {
127127
&self.lst
128128
}
129129

130+
/// Returns the net SUI amount received when redeeming 1 LST token (after fees).
131+
///
132+
/// This function calculates how much SUI (in MIST) a user would receive when
133+
/// redeeming 1 LST token (1_000_000_000 of LST), after accounting
134+
/// for redemption fees.
135+
///
136+
/// A return value of 950_000_000 means 1 LST redeems for 0.95 SUI (after fees)
137+
///
138+
public fun net_redemption_amount<T>(self: &LiquidStakingInfo<T>): u64 {
139+
let one_lst = 1_000_000_000;
140+
141+
// Get gross redemption amount: 1 LST = X SUI (before fees)
142+
let gross_sui_amount = self.lst_amount_to_sui_amount(one_lst);
143+
144+
// Calculate redemption fee
145+
let redeem_fee = self.fee_config().calculate_redeem_fee(gross_sui_amount);
146+
147+
// Get net SUI amount after fees (protected against underflow)
148+
assert!(gross_sui_amount >= redeem_fee, ERedeemInvariantViolated);
149+
let net_sui_amount = gross_sui_amount - redeem_fee;
150+
151+
net_sui_amount
152+
}
153+
130154
#[test_only]
131155
public fun accrued_spread_fees<P>(self: &LiquidStakingInfo<P>): u64 {
132156
self.accrued_spread_fees

0 commit comments

Comments
 (0)