Skip to content

Commit

Permalink
unstake Prevents UnstakeAmountTooLarge ZeroAmount Disabled
Browse files Browse the repository at this point in the history
  • Loading branch information
gluneau committed Nov 15, 2023
1 parent 09db485 commit 8bf648e
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/i18n/en-US/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -670,9 +670,13 @@ export default {
},
stakingV3: {
title: 'dApp Staking v3',
amountGreater0: 'Staking amount must be greater than 0.',
amountGreater0: 'Amount must be greater than 0.',
periodEndsNextEra: 'Period ends in the next era.',
stakerRewardsExpired: 'Staker rewards expired.',
disabled: 'Pallet is disabled/in maintenance mode.',
unstakeFromPastPeriod:
'Unstaking is rejected since the period in which past stake was active has passed.',
unstakeAmountTooLarge: 'Unstake amount is greater than the staked amount.',
unclaimedRewardsFromPastPeriods:
'There are unclaimed rewards remaining from past periods. They should be claimed before staking again.',
tooManyStakedContracts:
Expand Down
30 changes: 30 additions & 0 deletions src/staking-v3/hooks/useDappStaking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ export function useDappStaking() {
};

const unstake = async (dappAddress: string, amount: number): Promise<void> => {
const [result, error] = await canUnStake(amount);
if (!result) {
throw error;
}

const stakingService = container.get<IDappStakingService>(Symbols.DappStakingServiceV3);
await stakingService.unstakeAndUnlock(dappAddress, amount, currentAccount.value, 'success');
};
Expand Down Expand Up @@ -126,6 +131,9 @@ export function useDappStaking() {
// Prevents UnclaimedRewardsFromPastPeriods
// May want to auto claim rewards here
return [false, t('stakingV3.unclaimedRewardsFromPastPeriods')];
} else if (protocolState.value?.maintenance) {
// Prevents Disabled
return [false, t('stakingV3.disabled')];
} else if (stakeAmount.gt(balance.value)) {
// Prevents UnavailableStakeFunds
return [false, t('stakingV3.unavailableStakeFunds')];
Expand All @@ -140,6 +148,27 @@ export function useDappStaking() {
return [true, ''];
};

const canUnStake = async (amount: number): Promise<[boolean, string]> => {
const stakeAmount = new BN(ethers.utils.parseEther(amount.toString()).toString());
const stakedAmount = new BN(ledger.value?.locked?.toString() ?? 0);

if (amount <= 0) {
// Prevents ZeroAmount
return [false, t('stakingV3.amountGreater0')];
} else if (stakeAmount.gt(stakedAmount)) {
// Prevents UnstakeAmountTooLarge
return [false, t('stakingV3.unstakeAmountTooLarge')];
} else if (protocolState.value?.maintenance) {
// Prevents Disabled
return [false, t('stakingV3.disabled')];
} else if (!amount) {
// Prevents UnstakeFromPastPeriod
return [false, t('stakingV3.unstakeFromPastPeriod')];
}

return [true, ''];
};

watch(
currentNetworkIdx,
async () => {
Expand All @@ -160,6 +189,7 @@ export function useDappStaking() {
unstake,
claimStakerRewards,
canStake,
canUnStake,
claimDappRewards,
claimBonusRewards,
getAllRewards,
Expand Down

0 comments on commit 8bf648e

Please sign in to comment.