Skip to content

Commit

Permalink
chore(protocol): staking reward optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
luanxu-mxc committed Jan 29, 2025
1 parent 9e2ca5b commit 6920358
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
1 change: 1 addition & 0 deletions packages/protocol/contracts/common/LibStrings.sol
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,6 @@ library LibStrings {

//CHANGE(MOONCHAIN): Added to support Moonchain
bytes32 internal constant B_ETHMXC_PRICE_AGGREGATOR = bytes32("ethmxc_price_aggregator");
bytes32 internal constant B_STAKING = bytes32("staking");
bytes32 internal constant B_STAKING_SLASHER = bytes32("staking_slasher");
}
12 changes: 7 additions & 5 deletions packages/protocol/contracts/team/staking/L1Staking.sol
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ contract L1Staking is EssentialContract, IL1Staking {
event Withdrawal(address indexed user, uint256 amount);

/// @dev Emitted when user claim reward.
event ClaimReward(address indexed user, uint256 amount);
event ClaimReward(address indexed user, uint256 amount, uint256 epoch);

/// @dev Emitted when user slash.
event Slash(address indexed user, uint256 amount);
Expand Down Expand Up @@ -74,11 +74,13 @@ contract L1Staking is EssentialContract, IL1Staking {
function stake(
address _user,
uint256 _amount
) whenNotPaused nonReentrant
)
whenNotPaused nonReentrant
external
{
uint256 newBalance = stakingState.stakingBalances[_user] + _amount;
if (newBalance < MIN_DEPOSIT) revert INSUFFICIENT_DEPOSIT();
_stakingClaimReward(_user);
_mxc().transferFrom(msg.sender, address(this), _amount);
stakingState.stakingBalances[_user] += _amount;
stakingState.totalBalance += _amount;
Expand Down Expand Up @@ -180,22 +182,22 @@ contract L1Staking is EssentialContract, IL1Staking {
/// @dev User claims their accumulated interest and transfers it to their wallet.
function stakingClaimReward()
external
whenNotPaused nonReentrant
{
_stakingClaimReward(msg.sender);
}

function _stakingClaimReward(address _user) internal
whenNotPaused nonReentrant
{
uint256 currentEpoch = getCurrentEpoch();
if (stakingState.lastClaimedEpoch[_user] >= currentEpoch) revert REWARD_ALREADY_CLAIMED();

uint256 reward = stakingCalculateRewardDebt(_user); // Calculate the interest owed to the user
if (reward == 0) revert ZERO_VALUE();
if (reward == 0) return;

stakingState.lastClaimedEpoch[_user] = currentEpoch;
_mxc().transfer(_user, reward);
emit ClaimReward(_user, reward);
emit ClaimReward(_user, reward, currentEpoch);

}

Expand Down

0 comments on commit 6920358

Please sign in to comment.