Skip to content

Commit 2bc7d28

Browse files
committed
refactor: isValidatorNascent, SHARD_COMMITTEE_PERIOD
1 parent 06c55fd commit 2bc7d28

File tree

5 files changed

+18
-10
lines changed

5 files changed

+18
-10
lines changed

Diff for: src/pages/Actions/components/ForceExit.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
modalLayerStyle,
2626
} from './Shared';
2727

28-
import { generateWithdrawalParams } from '../utils';
28+
import { generateWithdrawalParams, isValidatorNascent } from '../utils';
2929
import { getEtherBalance } from '../../../utils/validators';
3030
import { getSignTxStatus } from '../../../utils/txStatus';
3131
import { TICKER_NAME } from '../../../utils/envVars';
@@ -114,6 +114,7 @@ const ForceExit: React.FC<Props> = ({ validator }) => {
114114
label={<FormattedMessage defaultMessage="Exit fully" />}
115115
onClick={handleOpen}
116116
destructive
117+
disabled={isValidatorNascent(validator)} // https://github.com/ethereum/consensus-specs/blob/dev/specs/electra/beacon-chain.md#modified-process_voluntary_exit
117118
/>
118119

119120
{showModal && (

Diff for: src/pages/Actions/components/PartialWithdraw.tsx

+2-5
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,14 @@ import {
2424
import { Text } from '../../../components/Text';
2525
import { TransactionStatusInsert } from '../../../components/TransactionStatusModal/TransactionStatusInsert';
2626

27-
import { generateWithdrawalParams } from '../utils';
27+
import { generateWithdrawalParams, isValidatorNascent } from '../utils';
2828
import { getEtherBalance } from '../../../utils/validators';
2929
import { getSignTxStatus } from '../../../utils/txStatus';
3030
import { MIN_ACTIVATION_BALANCE, TICKER_NAME } from '../../../utils/envVars';
3131

3232
import { useExecutionBalance } from '../../../hooks/useExecutionBalance';
3333
import { useTxModal } from '../../../hooks/useTxModal';
3434
import { useWithdrawalQueue } from '../../../hooks/useWithdrawalQueue';
35-
import { currentEpoch } from '../../../utils/beaconchain';
3635

3736
interface Props {
3837
validator: BeaconChainValidator;
@@ -114,9 +113,7 @@ const PartialWithdraw: React.FC<Props> = ({ validator }) => {
114113
return (
115114
<>
116115
<Button
117-
disabled={
118-
maxAmount <= 0 || currentEpoch < validator.activationepoch + 256
119-
}
116+
disabled={maxAmount <= 0 || isValidatorNascent(validator)} // https://github.com/ethereum/consensus-specs/blob/dev/specs/electra/beacon-chain.md#new-process_withdrawal_request
120117
onClick={handleOpen}
121118
label={<FormattedMessage defaultMessage="Start withdrawal" />}
122119
/>

Diff for: src/pages/Actions/components/ValidatorActions.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import {
2727
MIN_DEPOSIT_ETHER,
2828
TICKER_NAME,
2929
} from '../../../utils/envVars';
30-
import { currentEpoch } from '../../../utils/beaconchain';
30+
import { isValidatorNascent } from '../utils';
3131

3232
const Section = styled(SharedSection)`
3333
display: grid;
@@ -98,13 +98,13 @@ const ValidatorActions: React.FC<Props> = ({ validator, validators }) => {
9898
const isSameCredentials =
9999
v.withdrawalcredentials.slice(4) ===
100100
validator.withdrawalcredentials.slice(4);
101-
const isNacent = currentEpoch < v.activationepoch + 256;
101+
const isNascent = isValidatorNascent(v); // https://github.com/ethereum/consensus-specs/blob/dev/specs/electra/beacon-chain.md#new-process_consolidation_request
102102
return (
103103
!isSameValidator &&
104104
isExecutionOrLater &&
105105
hasBalance &&
106106
isSameCredentials &&
107-
!isNacent
107+
!isNascent
108108
);
109109
});
110110

@@ -208,7 +208,7 @@ const ValidatorActions: React.FC<Props> = ({ validator, validators }) => {
208208
<FormattedMessage defaultMessage="Account must first be upgraded to compounding type." />
209209
</em>
210210
)}
211-
{(true || currentEpoch < validator.activationepoch + 256) && (
211+
{isValidatorNascent(validator) && (
212212
<em>
213213
{' '}
214214
<FormattedMessage defaultMessage="Account must be activated for at least 256 epochs (~27 hours) before eligible for partial withdrawals." />

Diff for: src/pages/Actions/utils.ts

+6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import {
77
WITHDRAWAL_CONTRACT_ADDRESS,
88
TICKER_NAME,
99
EXCESS_INHIBITOR,
10+
SHARD_COMMITTEE_PERIOD,
1011
} from '../../utils/envVars';
12+
import { BeaconChainValidator } from '../TopUp/types';
13+
import { currentEpoch } from '../../utils/beaconchain';
1114

1215
export type Queue = {
1316
length: BigNumber;
@@ -155,3 +158,6 @@ export const getFeeStatus = (fee: BigNumber): FeeStatus => {
155158

156159
export const getEtherFeeFromQueue = (queue: Queue): string =>
157160
`${queue.fee.dividedBy(1e18).toFixed()} ${TICKER_NAME}`;
161+
162+
export const isValidatorNascent = (validator: BeaconChainValidator): boolean =>
163+
currentEpoch < validator.activationepoch + SHARD_COMMITTEE_PERIOD;

Diff for: src/utils/envVars.ts

+4
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ if(process.env.REACT_APP_MIN_GENESIS_TIME && Number.isNaN(Number(process.env.REA
7373
throw new Error("REACT_APP_MIN_GENESIS_TIME must be of type: number")
7474
}
7575
export const BEACON_CHAIN_GENESIS_TIME = Number(process.env.REACT_APP_MIN_GENESIS_TIME) || 1606824023_000 // 2020-12-01T12:00:23Z
76+
if(process.env.REACT_APP_SHARD_COMMITTEE_PERIOD && Number.isNaN(Number(process.env.REACT_APP_SHARD_COMMITTEE_PERIOD))) {
77+
throw new Error("REACT_APP_SHARD_COMMITTEE_PERIOD must be of type: number")
78+
}
79+
export const SHARD_COMMITTEE_PERIOD = Number(process.env.REACT_APP_SHARD_COMMITTEE_PERIOD) || 2 ** 8; // 256 epochs
7680

7781
if(process.env.REACT_APP_SLOTS_PER_EPOCH && Number.isNaN(Number(process.env.REACT_APP_SLOTS_PER_EPOCH))) {
7882
throw new Error("REACT_APP_SLOTS_PER_EPOCH must be of type: number")

0 commit comments

Comments
 (0)