diff --git a/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/eip7805/block/BlockProcessorEip7805Test.java b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/eip7805/block/BlockProcessorEip7805Test.java index 44c6f61ee22..65bac11c650 100644 --- a/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/eip7805/block/BlockProcessorEip7805Test.java +++ b/ethereum/spec/src/test/java/tech/pegasys/teku/spec/logic/versions/eip7805/block/BlockProcessorEip7805Test.java @@ -13,21 +13,29 @@ package tech.pegasys.teku.spec.logic.versions.eip7805.block; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.*; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; + import org.junit.jupiter.api.Test; import tech.pegasys.teku.infrastructure.unsigned.UInt64; import tech.pegasys.teku.spec.Spec; import tech.pegasys.teku.spec.TestSpecFactory; +import tech.pegasys.teku.spec.config.SpecConfigDeneb; import tech.pegasys.teku.spec.config.SpecConfigEip7805; import tech.pegasys.teku.spec.datastructures.blocks.blockbody.BeaconBlockBody; +import tech.pegasys.teku.spec.datastructures.execution.NewPayloadRequest; import tech.pegasys.teku.spec.datastructures.operations.InclusionList; import tech.pegasys.teku.spec.datastructures.state.beaconstate.BeaconState; +import tech.pegasys.teku.spec.datastructures.type.SszKZGCommitment; +import tech.pegasys.teku.spec.logic.common.helpers.MiscHelpers; import tech.pegasys.teku.spec.logic.common.statetransition.exceptions.BlockProcessingException; import tech.pegasys.teku.spec.logic.versions.deneb.block.BlockProcessorDenebTest; +import tech.pegasys.teku.spec.logic.versions.deneb.types.VersionedHash; public class BlockProcessorEip7805Test extends BlockProcessorDenebTest { @@ -56,4 +64,38 @@ protected Spec createSpec() { .hasMessage( "Number of transaction in the inclusion list in block exceeds max transaction per inclusion list"); } + + @Test + @Override + public void shouldCreateNewPayloadRequest() throws BlockProcessingException { + final BeaconState preState = createBeaconState(); + final BeaconBlockBody blockBody = dataStructureUtil.randomBeaconBlockBodyWithCommitments(3); + final MiscHelpers miscHelpers = spec.atSlot(UInt64.ONE).miscHelpers(); + final List expectedVersionedHashes = + blockBody.getOptionalBlobKzgCommitments().orElseThrow().stream() + .map(SszKZGCommitment::getKZGCommitment) + .map(miscHelpers::kzgCommitmentToVersionedHash) + .collect(Collectors.toList()); + final InclusionList inclusionList = dataStructureUtil.randomInclusionList(); + + final NewPayloadRequest newPayloadRequest = + spec.getBlockProcessor(UInt64.ONE) + .computeNewPayloadRequest(preState, blockBody, Optional.of(List.of(inclusionList))); + + assertThat(newPayloadRequest.getExecutionPayload()) + .isEqualTo(blockBody.getOptionalExecutionPayload().orElseThrow()); + assertThat(newPayloadRequest.getVersionedHashes()).isPresent(); + assertThat(newPayloadRequest.getVersionedHashes().get()) + .hasSize(3) + .allSatisfy( + versionedHash -> + assertThat(versionedHash.getVersion()) + .isEqualTo(SpecConfigDeneb.VERSIONED_HASH_VERSION_KZG)) + .hasSameElementsAs(expectedVersionedHashes); + assertThat(newPayloadRequest.getParentBeaconBlockRoot()).isPresent(); + assertThat(newPayloadRequest.getParentBeaconBlockRoot().get()) + .isEqualTo(preState.getLatestBlockHeader().getParentRoot()); + assertThat(newPayloadRequest.getInclusionList()).isPresent(); + assertThat(newPayloadRequest.getInclusionList().get()).isEqualTo(inclusionList.getTransactions()); + } }