Skip to content

Commit

Permalink
Electra ref-test alpha.9 update (#8882)
Browse files Browse the repository at this point in the history
Co-authored by @StefanBratanov 
Co-authored by @gfukushima
  • Loading branch information
lucassaldanha authored Dec 6, 2024
1 parent fbf7359 commit a8c2e0e
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 16 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ allprojects {
}

def nightly = System.getenv("NIGHTLY") != null
def refTestVersion = nightly ? "nightly" : "v1.5.0-alpha.8"
def refTestVersion = nightly ? "nightly" : "v1.5.0-alpha.9"
def blsRefTestVersion = 'v0.1.2'
def slashingProtectionInterchangeRefTestVersion = 'v5.3.0'
def refTestBaseUrl = 'https://github.com/ethereum/consensus-spec-tests/releases/download'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@

import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableMap;
import java.util.List;
import java.util.Optional;
import tech.pegasys.teku.ethtests.finder.TestDefinition;
import tech.pegasys.teku.infrastructure.ssz.SszData;
Expand Down Expand Up @@ -67,6 +68,9 @@ public class OperationsTestExecutor<T extends SszData> implements TestExecutor {

public static final String EXPECTED_STATE_FILE = "post.ssz_snappy";

// TODO remove https://github.com/Consensys/teku/issues/8892
private static final List<String> IGNORED_TEST = List.of("invalid_nonset_bits_for_one_committee");

private enum Operation {
ATTESTER_SLASHING,
PROPOSER_SLASHING,
Expand Down Expand Up @@ -144,6 +148,11 @@ public OperationsTestExecutor(final String dataFileName, final Operation operati

@Override
public void runTest(final TestDefinition testDefinition) throws Exception {
// TODO remove https://github.com/Consensys/teku/issues/8892
if (IGNORED_TEST.contains(testDefinition.getTestName())) {
return;
}

final BeaconState preState = loadStateFromSsz(testDefinition, "pre.ssz_snappy");

final DefaultOperationProcessor standardProcessor =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ private static WithdrawalSummary getPendingPartialWithdrawals(
final List<Withdrawal> partialWithdrawals = new ArrayList<>();
final SszList<PendingPartialWithdrawal> pendingPartialWithdrawals =
preState.getPendingPartialWithdrawals();
int partialWithdrawalsCount = 0;
int processedPartialWithdrawalsCount = 0;
UInt64 withdrawalIndex = preState.getNextWithdrawalIndex();

for (int i = 0; i < pendingPartialWithdrawals.size() && i < maxPendingPartialWithdrawals; i++) {
Expand Down Expand Up @@ -198,9 +198,9 @@ private static WithdrawalSummary getPendingPartialWithdrawals(
withdrawableBalance));
withdrawalIndex = withdrawalIndex.increment();
}
partialWithdrawalsCount++;
processedPartialWithdrawalsCount++;
}
return new WithdrawalSummary(partialWithdrawals, partialWithdrawalsCount);
return new WithdrawalSummary(partialWithdrawals, processedPartialWithdrawalsCount);
}

// get_expected_withdrawals
Expand Down Expand Up @@ -231,7 +231,16 @@ private static List<Withdrawal> getExpectedWithdrawals(
for (int i = 0; i < bound; i++) {
final Validator validator = validators.get(validatorIndex);
if (predicates.hasExecutionWithdrawalCredential(validator)) {
final UInt64 balance = balances.get(validatorIndex).get();
final UInt64 finalValidatorIndex = UInt64.valueOf(validatorIndex);
final UInt64 partiallyWithdrawalBalance =
partialWithdrawals.stream()
.filter(
partialWithdrawal ->
partialWithdrawal.getValidatorIndex().equals(finalValidatorIndex))
.map(Withdrawal::getAmount)
.reduce(UInt64.ZERO, UInt64::plus);
final UInt64 balance =
balances.get(validatorIndex).get().minusMinZero(partiallyWithdrawalBalance);

if (predicates.isFullyWithdrawableValidatorCredentialsChecked(validator, balance, epoch)) {
expectedWithdrawals.add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,20 @@ private void processConsolidationRequest(
return;
}

// Verify the source has been active long enough
if (currentEpoch.isLessThan(
sourceValidator.getActivationEpoch().plus(specConfig.getShardCommitteePeriod()))) {
LOG.debug("process_consolidation_request: source has not been active long enough");
return;
}
// Verify the source has no pending withdrawals in the queue
if (beaconStateAccessorsElectra
.getPendingBalanceToWithdraw(state, sourceValidatorIndex)
.isGreaterThan(ZERO)) {
LOG.debug("process_consolidation_request: source has pending withdrawals in the queue");
return;
}

// Initiate source validator exit and append pending consolidation
final UInt64 exitEpoch =
beaconStateMutatorsElectra.computeConsolidationEpochAndUpdateChurn(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public BeaconStateElectra upgrade(final BeaconState preState) {
final PredicatesElectra predicatesElectra = new PredicatesElectra(specConfig);
final MiscHelpersElectra miscHelpersElectra =
new MiscHelpersElectra(specConfig, predicatesElectra, schemaDefinitions);
final UInt64 activationExitEpoch = miscHelpersElectra.computeActivationExitEpoch(epoch);
return BeaconStateElectra.required(schemaDefinitions.getBeaconStateSchema().createEmpty())
.updatedElectra(
state -> {
Expand Down Expand Up @@ -86,11 +87,10 @@ public BeaconStateElectra upgrade(final BeaconState preState) {
state.setDepositBalanceToConsume(UInt64.ZERO);
state.setExitBalanceToConsume(
beaconStateAccessors.getActivationExitChurnLimit(state));
state.setEarliestExitEpoch(findEarliestExitEpoch(state, epoch));
state.setEarliestExitEpoch(findEarliestExitEpoch(state, activationExitEpoch));
state.setConsolidationBalanceToConsume(
beaconStateAccessors.getConsolidationChurnLimit(state));
state.setEarliestConsolidationEpoch(
miscHelpersElectra.computeActivationExitEpoch(epoch));
state.setEarliestConsolidationEpoch(activationExitEpoch);

final SszMutableList<Validator> validators = state.getValidators();

Expand Down Expand Up @@ -120,12 +120,13 @@ public BeaconStateElectra upgrade(final BeaconState preState) {
});
}

private UInt64 findEarliestExitEpoch(final BeaconState state, final UInt64 currentEpoch) {
return state.getValidators().stream()
.map(Validator::getExitEpoch)
.filter(exitEpoch -> !exitEpoch.equals(FAR_FUTURE_EPOCH))
.max(UInt64::compareTo)
.orElse(currentEpoch)
.increment();
private UInt64 findEarliestExitEpoch(final BeaconState state, final UInt64 activationExitEpoch) {
final UInt64 maxExitEpochFromValidatorSet =
state.getValidators().stream()
.map(Validator::getExitEpoch)
.filter(exitEpoch -> !exitEpoch.equals(FAR_FUTURE_EPOCH))
.max(UInt64::compareTo)
.orElse(UInt64.ZERO);
return maxExitEpochFromValidatorSet.max(activationExitEpoch).increment();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ void canUpgradeFromDeneb() {
// = (64 *10^9) - (64 *10^9) MOD 10^9
// = (64 *10^9) - 0
assertThat(post.getExitBalanceToConsume()).isEqualTo(UInt64.valueOf(64_000_000_000L));
assertThat(post.getEarliestExitEpoch()).isEqualTo(slot.dividedBy(8).increment());
assertThat(post.getEarliestExitEpoch())
.isEqualTo(
miscHelpersElectra.computeActivationExitEpoch(
spec.computeEpochAtSlot(slot).increment()));
assertThat(post.getConsolidationBalanceToConsume()).isEqualTo(UInt64.ZERO);
// 80_000/8 (slots -> epochs) + max_seed_lookahead + 1
assertThat(post.getEarliestConsolidationEpoch()).isEqualTo(UInt64.valueOf(10005));
Expand Down
3 changes: 3 additions & 0 deletions fuzz/src/test/java/tech/pegasys/teku/fuzz/FuzzUtilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Optional;
import org.apache.tuweni.bytes.Bytes;
import org.apache.tuweni.junit.BouncyCastleExtension;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.xerial.snappy.Snappy;
Expand Down Expand Up @@ -376,6 +377,8 @@ public void fuzzWithdrawalRequest_minimal() {
assertThat(result.get()).isEqualTo(expected);
}

// TODO fix as part of https://github.com/Consensys/teku/pull/8876
@Disabled("Disabling until we have a fix for this")
@Test
public void fuzzConsolidationRequest_minimal() {
final FuzzUtil fuzzUtil = new FuzzUtil(false, true);
Expand Down

0 comments on commit a8c2e0e

Please sign in to comment.