diff --git a/crates/sui-framework/packages/sui-system/sources/validator.move b/crates/sui-framework/packages/sui-system/sources/validator.move index b3f8e3d6f3a09..da6157014541e 100644 --- a/crates/sui-framework/packages/sui-system/sources/validator.move +++ b/crates/sui-framework/packages/sui-system/sources/validator.move @@ -160,6 +160,21 @@ module sui_system::validator { reward_amount: u64, } + /// Event emitted when a staked SUI is converted to a fungible staked SUI. + public struct ConvertingToFungibleStakedSuiEvent has copy, drop { + pool_id: ID, + stake_activation_epoch: u64, + staked_sui_principal_amount: u64, + fungible_staked_sui_amount: u64, + } + + /// Event emitted when a fungible staked SUI is redeemed. + public struct RedeemingFungibleStakedSuiEvent has copy, drop { + pool_id: ID, + fungible_staked_sui_amount: u64, + sui_amount: u64, + } + public(package) fun new_metadata( sui_address: address, protocol_pubkey_bytes: vector, @@ -311,7 +326,21 @@ module sui_system::validator { staked_sui: StakedSui, ctx: &mut TxContext, ) : FungibleStakedSui { - self.staking_pool.convert_to_fungible_staked_sui(staked_sui, ctx) + let stake_activation_epoch = staked_sui.stake_activation_epoch(); + let staked_sui_principal_amount = staked_sui.staked_sui_amount(); + + let fungible_staked_sui = self.staking_pool.convert_to_fungible_staked_sui(staked_sui, ctx); + + event::emit( + ConvertingToFungibleStakedSuiEvent { + pool_id: self.staking_pool_id(), + stake_activation_epoch, + staked_sui_principal_amount, + fungible_staked_sui_amount: fungible_staked_sui.value(), + } + ); + + fungible_staked_sui } public(package) fun redeem_fungible_staked_sui( @@ -319,7 +348,19 @@ module sui_system::validator { fungible_staked_sui: FungibleStakedSui, ctx: &TxContext, ) : Balance { - self.staking_pool.redeem_fungible_staked_sui(fungible_staked_sui, ctx) + let fungible_staked_sui_amount = fungible_staked_sui.value(); + + let sui = self.staking_pool.redeem_fungible_staked_sui(fungible_staked_sui, ctx); + + event::emit( + RedeemingFungibleStakedSuiEvent { + pool_id: self.staking_pool_id(), + fungible_staked_sui_amount, + sui_amount: sui.value(), + } + ); + + sui } /// Request to add stake to the validator's staking pool at genesis