Skip to content

Conversation

@rolfyone
Copy link
Contributor

@rolfyone rolfyone commented Nov 14, 2025

This is stable post-fulu, so we can avoid the slot 0 issue.

fixes #10124

Documentation

  • I thought about documentation and added the doc-change-required label to this PR if updates are required.

Changelog

  • I thought about adding a changelog entry, and added one if I deemed necessary.

Note

Abstracts duty lookahead and enables block proposer duties to be scheduled one epoch ahead from FULU onward, updating implementations and tests.

  • Core (validator client):
    • AbstractDutyScheduler: remove fixed lookAheadEpochs config; introduce abstract int getLookAheadEpochs(UInt64) and use it in calculateDuties and isAbleToVerifyEpoch; make spec protected.
  • Block duties:
    • BlockDutyScheduler: implement dynamic lookahead (0 before FULU, 1 from FULU); add debug logging; adjust constructor usage.
  • Attestations:
    • AttestationDutyScheduler: override getLookAheadEpochs to constant 1; update constructor.
  • Tests:
    • BlockDutySchedulerTest: add/adjust tests for milestone-dependent lookahead; update references to dynamic getLookAheadEpochs and specs.

Written by Cursor Bugbot for commit 77cfe6c. This will update automatically on new commits. Configure here.

Copy link
Contributor

@tbenr tbenr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apart of the compilation issue, I tried locally and I get:

2025-11-14 13:43:05.016 INFO  - Epoch Event *** Epoch: 4, Justified checkpoint: 3, Finalized checkpoint: 2, Finalized root: deca9232918b8269c97039fca968be979044b31f91a7fb0e5f09df3fe5855502
2025-11-14 13:43:05.016 ERROR - Failed to request validator duties for epoch 5. Retrying after delay.
java.lang.IllegalArgumentException: Proposer duties were requested for a future epoch (current: 4, requested: 5).
at tech.pegasys.teku.validator.coordinator.ValidatorApiHandler.getProposerDuties(ValidatorApiHandler.java:320) ~[classes/:?]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
at tech.pegasys.teku.infrastructure.events.DirectEventDeliverer.executeMethod(DirectEventDeliverer.java:74) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.DirectEventDeliverer.deliverToWithResponse(DirectEventDeliverer.java:67) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.AsyncEventDeliverer.lambda$deliverToWithResponse$1(AsyncEventDeliverer.java:80) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.AsyncEventDeliverer$QueueReader.deliverNextEvent(AsyncEventDeliverer.java:125) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.AsyncEventDeliverer$QueueReader.run(AsyncEventDeliverer.java:116) ~[classes/:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
2025-11-14 13:43:05.017 INFO  - Calling local execution layer to start block production (block slot: 32)

@rolfyone rolfyone marked this pull request as draft November 14, 2025 20:41
@rolfyone
Copy link
Contributor Author

Apart of the compilation issue, I tried locally and I get:

2025-11-14 13:43:05.016 INFO  - Epoch Event *** Epoch: 4, Justified checkpoint: 3, Finalized checkpoint: 2, Finalized root: deca9232918b8269c97039fca968be979044b31f91a7fb0e5f09df3fe5855502
2025-11-14 13:43:05.016 ERROR - Failed to request validator duties for epoch 5. Retrying after delay.
java.lang.IllegalArgumentException: Proposer duties were requested for a future epoch (current: 4, requested: 5).
at tech.pegasys.teku.validator.coordinator.ValidatorApiHandler.getProposerDuties(ValidatorApiHandler.java:320) ~[classes/:?]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?]
at tech.pegasys.teku.infrastructure.events.DirectEventDeliverer.executeMethod(DirectEventDeliverer.java:74) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.DirectEventDeliverer.deliverToWithResponse(DirectEventDeliverer.java:67) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.AsyncEventDeliverer.lambda$deliverToWithResponse$1(AsyncEventDeliverer.java:80) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.AsyncEventDeliverer$QueueReader.deliverNextEvent(AsyncEventDeliverer.java:125) ~[classes/:?]
at tech.pegasys.teku.infrastructure.events.AsyncEventDeliverer$QueueReader.run(AsyncEventDeliverer.java:116) ~[classes/:?]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) ~[?:?]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) ~[?:?]
at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]
2025-11-14 13:43:05.017 INFO  - Calling local execution layer to start block production (block slot: 32)

ok cool - i had meant as draft as some of the AT im curious about...

i had run locally, was this remote validator or inbuilt?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fulu proposer scheduling

2 participants