From 28f69ccec00b2398cdcb36a8a0ed0cf1f2af89c2 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Thu, 29 Jul 2021 09:03:49 +0700 Subject: [PATCH 1/3] Improve processEffectiveBalanceUpdates --- .../src/allForks/epoch/processEffectiveBalanceUpdates.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts b/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts index f5d195777f1d..97ec79978657 100644 --- a/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts +++ b/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts @@ -21,7 +21,9 @@ export function processEffectiveBalanceUpdates( // update effective balances with hysteresis (process.balances ?? state.balances).forEach((balance: bigint, i: number) => { const effectiveBalance = process.validators[i].effectiveBalance; - if (balance + DOWNWARD_THRESHOLD < effectiveBalance || effectiveBalance + UPWARD_THRESHOLD < balance) { + const isTooBig = effectiveBalance > balance + DOWNWARD_THRESHOLD; + const isTooSmall = effectiveBalance !== MAX_EFFECTIVE_BALANCE && effectiveBalance < balance - UPWARD_THRESHOLD; + if (isTooBig || isTooSmall) { validators.update(i, { effectiveBalance: bigIntMin(balance - (balance % EFFECTIVE_BALANCE_INCREMENT), MAX_EFFECTIVE_BALANCE), }); From f39a1292ffa246574c0ad0a1c6a1abc77b472fab Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Thu, 29 Jul 2021 09:50:49 +0700 Subject: [PATCH 2/3] Change the condition to check effectiveBalance --- .../src/allForks/epoch/processEffectiveBalanceUpdates.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts b/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts index 97ec79978657..eab1bfaa940c 100644 --- a/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts +++ b/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts @@ -22,7 +22,7 @@ export function processEffectiveBalanceUpdates( (process.balances ?? state.balances).forEach((balance: bigint, i: number) => { const effectiveBalance = process.validators[i].effectiveBalance; const isTooBig = effectiveBalance > balance + DOWNWARD_THRESHOLD; - const isTooSmall = effectiveBalance !== MAX_EFFECTIVE_BALANCE && effectiveBalance < balance - UPWARD_THRESHOLD; + const isTooSmall = effectiveBalance < MAX_EFFECTIVE_BALANCE && effectiveBalance < balance - UPWARD_THRESHOLD; if (isTooBig || isTooSmall) { validators.update(i, { effectiveBalance: bigIntMin(balance - (balance % EFFECTIVE_BALANCE_INCREMENT), MAX_EFFECTIVE_BALANCE), From aa53feddced42dac672348f92ef66c1e63983f96 Mon Sep 17 00:00:00 2001 From: Tuyen Nguyen Date: Thu, 29 Jul 2021 16:14:50 +0700 Subject: [PATCH 3/3] Avoid new variables --- .../src/allForks/epoch/processEffectiveBalanceUpdates.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts b/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts index eab1bfaa940c..717fbe0af3e0 100644 --- a/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts +++ b/packages/beacon-state-transition/src/allForks/epoch/processEffectiveBalanceUpdates.ts @@ -21,9 +21,12 @@ export function processEffectiveBalanceUpdates( // update effective balances with hysteresis (process.balances ?? state.balances).forEach((balance: bigint, i: number) => { const effectiveBalance = process.validators[i].effectiveBalance; - const isTooBig = effectiveBalance > balance + DOWNWARD_THRESHOLD; - const isTooSmall = effectiveBalance < MAX_EFFECTIVE_BALANCE && effectiveBalance < balance - UPWARD_THRESHOLD; - if (isTooBig || isTooSmall) { + if ( + // Too big + effectiveBalance > balance + DOWNWARD_THRESHOLD || + // Too small. Check effectiveBalance < MAX_EFFECTIVE_BALANCE to prevent unnecessary updates + (effectiveBalance < MAX_EFFECTIVE_BALANCE && effectiveBalance < balance - UPWARD_THRESHOLD) + ) { validators.update(i, { effectiveBalance: bigIntMin(balance - (balance % EFFECTIVE_BALANCE_INCREMENT), MAX_EFFECTIVE_BALANCE), });