Skip to content

Commit e46435b

Browse files
committed
Merge branch 'master' into graffiti-management
2 parents da2db0c + 3d9bb08 commit e46435b

File tree

54 files changed

+1671
-1443
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1671
-1443
lines changed

.circleci/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ commands:
148148
name: "Publish Docker Images"
149149
command: |
150150
docker login --username "${DOCKER_USER_RW}" --password "${DOCKER_PASSWORD_RW}"
151-
./gradlew --no-daemon --parallel "-Pbranch=${CIRCLE_BRANCH} -PincludeCommitHashInDockerTag=<< pipeline.parameters.include_commit_hash_in_docker_tag >>" uploadDocker
151+
./gradlew --no-daemon --parallel -Pbranch=${CIRCLE_BRANCH} -PincludeCommitHashInDockerTag=<< pipeline.parameters.include_commit_hash_in_docker_tag >> uploadDocker
152152
153153
notify:
154154
description: "Notify Slack"

beacon/validator/src/main/java/tech/pegasys/teku/validator/coordinator/BlockOperationSelectorFactory.java

+196-267
Large diffs are not rendered by default.

beacon/validator/src/test/java/tech/pegasys/teku/validator/coordinator/AbstractBlockFactoryTest.java

+36-53
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.apache.tuweni.units.bigints.UInt256;
3434
import org.junit.jupiter.api.AfterAll;
3535
import org.junit.jupiter.api.BeforeAll;
36+
import tech.pegasys.teku.bls.BLSPublicKey;
3637
import tech.pegasys.teku.bls.BLSSignature;
3738
import tech.pegasys.teku.bls.BLSSignatureVerifier;
3839
import tech.pegasys.teku.ethereum.performance.trackers.BlockProductionPerformance;
@@ -53,12 +54,15 @@
5354
import tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.altair.SyncAggregate;
5455
import tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.bellatrix.BeaconBlockBodyBellatrix;
5556
import tech.pegasys.teku.spec.datastructures.blocks.blockbody.versions.bellatrix.BlindedBeaconBlockBodyBellatrix;
57+
import tech.pegasys.teku.spec.datastructures.builder.BuilderBid;
5658
import tech.pegasys.teku.spec.datastructures.builder.BuilderPayload;
5759
import tech.pegasys.teku.spec.datastructures.execution.BlobsBundle;
60+
import tech.pegasys.teku.spec.datastructures.execution.BuilderBidOrFallbackData;
61+
import tech.pegasys.teku.spec.datastructures.execution.BuilderPayloadOrFallbackData;
5862
import tech.pegasys.teku.spec.datastructures.execution.ExecutionPayload;
5963
import tech.pegasys.teku.spec.datastructures.execution.ExecutionPayloadHeader;
6064
import tech.pegasys.teku.spec.datastructures.execution.ExecutionPayloadResult;
61-
import tech.pegasys.teku.spec.datastructures.execution.HeaderWithFallbackData;
65+
import tech.pegasys.teku.spec.datastructures.execution.GetPayloadResponse;
6266
import tech.pegasys.teku.spec.datastructures.metadata.BlockContainerAndMetaData;
6367
import tech.pegasys.teku.spec.datastructures.operations.Attestation;
6468
import tech.pegasys.teku.spec.datastructures.operations.AttesterSlashing;
@@ -197,8 +201,6 @@ protected BlockContainerAndMetaData assertBlockCreated(
197201
SafeFuture.completedFuture(
198202
Optional.of(dataStructureUtil.randomPayloadExecutionContext(false))));
199203

200-
setupExecutionLayerBlockAndBlobsProduction();
201-
202204
final BLSSignature randaoReveal = dataStructureUtil.randomSignature();
203205
final Bytes32 bestBlockRoot = recentChainData.getBestBlockRoot().orElseThrow();
204206
final BeaconState blockSlotState =
@@ -209,24 +211,25 @@ protected BlockContainerAndMetaData assertBlockCreated(
209211

210212
when(syncCommitteeContributionPool.createSyncAggregateForBlock(newSlot, bestBlockRoot))
211213
.thenAnswer(invocation -> createEmptySyncAggregate(spec));
212-
executionPayloadBuilder.accept(blockSlotState);
213214

214215
final UInt256 blockExecutionValue;
215216
final UInt64 blockProposerRewards;
216217

217218
if (milestone.isGreaterThanOrEqualTo(SpecMilestone.BELLATRIX)) {
218219
blockExecutionValue = dataStructureUtil.randomUInt256();
219220
blockProposerRewards = dataStructureUtil.randomUInt64();
220-
221-
// inject values into slot caches
221+
// increase block proposer rewards to test the consensus block value
222222
final SlotCaches slotCaches = BeaconStateCache.getSlotCaches(blockSlotState);
223-
slotCaches.setBlockExecutionValue(blockExecutionValue);
224223
slotCaches.increaseBlockProposerRewards(blockProposerRewards);
225224
} else {
226225
blockExecutionValue = UInt256.ZERO;
227226
blockProposerRewards = UInt64.ZERO;
228227
}
229228

229+
setupExecutionLayerBlockAndBlobsProduction(spec, blockExecutionValue);
230+
231+
executionPayloadBuilder.accept(blockSlotState);
232+
230233
final BlockContainerAndMetaData blockContainerAndMetaData =
231234
safeJoin(
232235
blockFactory.createUnsignedBlock(
@@ -291,7 +294,8 @@ protected SignedBeaconBlock assertBlockUnblinded(
291294

292295
// no need to prepare blobs bundle when only testing block unblinding
293296
when(executionLayer.getUnblindedPayload(blindedBlock, BlockPublishingPerformance.NOOP))
294-
.thenReturn(SafeFuture.completedFuture(executionPayload));
297+
.thenReturn(
298+
SafeFuture.completedFuture(BuilderPayloadOrFallbackData.create(executionPayload)));
295299

296300
final SignedBeaconBlock unblindedBlock =
297301
blockFactory
@@ -365,7 +369,7 @@ protected BlockAndBlobSidecars createBlockAndBlobSidecars(
365369

366370
// simulate caching of the builder payload
367371
when(executionLayer.getCachedUnblindedPayload(signedBlockContainer.getSlot()))
368-
.thenReturn(builderPayload);
372+
.thenReturn(builderPayload.map(BuilderPayloadOrFallbackData::create));
369373

370374
final List<BlobSidecar> blobSidecars =
371375
blockFactory.createBlobSidecars(signedBlockContainer, BlockPublishingPerformance.NOOP);
@@ -446,63 +450,42 @@ protected BuilderPayload prepareBuilderPayload(final Spec spec, final int blobsC
446450
return builderPayload;
447451
}
448452

449-
private void setupExecutionLayerBlockAndBlobsProduction() {
450-
// pre Deneb
453+
private void setupExecutionLayerBlockAndBlobsProduction(final Spec spec, final UInt256 value) {
454+
// non-blinded
451455
when(executionLayer.initiateBlockProduction(any(), any(), eq(false), any(), any()))
452456
.thenAnswer(
453457
args -> {
454458
final ExecutionPayloadResult executionPayloadResult =
455-
new ExecutionPayloadResult(
459+
ExecutionPayloadResult.createForLocalFlow(
456460
args.getArgument(0),
457-
Optional.of(SafeFuture.completedFuture(executionPayload)),
458-
Optional.empty(),
459-
Optional.empty(),
460-
Optional.empty());
461+
SafeFuture.completedFuture(
462+
blobsBundle
463+
.map(
464+
bundle ->
465+
new GetPayloadResponse(
466+
executionPayload, value, bundle, false))
467+
.orElseGet(() -> new GetPayloadResponse(executionPayload, value))));
461468
cachedExecutionPayloadResult = executionPayloadResult;
462469
return executionPayloadResult;
463470
});
471+
// blinded
464472
when(executionLayer.initiateBlockProduction(any(), any(), eq(true), any(), any()))
465473
.thenAnswer(
466474
args -> {
475+
final BuilderBid builderBid =
476+
SchemaDefinitionsBellatrix.required(spec.getGenesisSchemaDefinitions())
477+
.getBuilderBidSchema()
478+
.createBuilderBid(
479+
builder -> {
480+
builder.header(executionPayloadHeader);
481+
builderBlobKzgCommitments.ifPresent(builder::blobKzgCommitments);
482+
builder.value(value);
483+
builder.publicKey(BLSPublicKey.empty());
484+
});
467485
final ExecutionPayloadResult executionPayloadResult =
468-
new ExecutionPayloadResult(
469-
args.getArgument(0),
470-
Optional.empty(),
471-
Optional.empty(),
472-
Optional.of(
473-
SafeFuture.completedFuture(
474-
HeaderWithFallbackData.create(executionPayloadHeader))),
475-
Optional.empty());
476-
cachedExecutionPayloadResult = executionPayloadResult;
477-
return executionPayloadResult;
478-
});
479-
// post Deneb
480-
when(executionLayer.initiateBlockAndBlobsProduction(any(), any(), eq(false), any(), any()))
481-
.thenAnswer(
482-
args -> {
483-
final ExecutionPayloadResult executionPayloadResult =
484-
new ExecutionPayloadResult(
485-
args.getArgument(0),
486-
Optional.of(SafeFuture.completedFuture(executionPayload)),
487-
Optional.of(SafeFuture.completedFuture(blobsBundle)),
488-
Optional.empty(),
489-
Optional.empty());
490-
cachedExecutionPayloadResult = executionPayloadResult;
491-
return executionPayloadResult;
492-
});
493-
when(executionLayer.initiateBlockAndBlobsProduction(any(), any(), eq(true), any(), any()))
494-
.thenAnswer(
495-
args -> {
496-
final ExecutionPayloadResult executionPayloadResult =
497-
new ExecutionPayloadResult(
486+
ExecutionPayloadResult.createForBuilderFlow(
498487
args.getArgument(0),
499-
Optional.empty(),
500-
Optional.empty(),
501-
Optional.of(
502-
SafeFuture.completedFuture(
503-
HeaderWithFallbackData.create(
504-
executionPayloadHeader, builderBlobKzgCommitments))),
505-
Optional.empty());
488+
SafeFuture.completedFuture(BuilderBidOrFallbackData.create(builderBid)));
506489
cachedExecutionPayloadResult = executionPayloadResult;
507490
return executionPayloadResult;
508491
});

0 commit comments

Comments
 (0)