Skip to content

Commit

Permalink
Add targetBlobCount to payloadId
Browse files Browse the repository at this point in the history
Signed-off-by: Simon Dudley <[email protected]>
  • Loading branch information
siladu committed Dec 10, 2024
1 parent 1883976 commit 631df1f
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,8 @@ public PayloadIdentifier preparePayload(
prevRandao,
feeRecipient,
withdrawals,
parentBeaconBlockRoot);
parentBeaconBlockRoot,
Optional.empty()); // TODO SLD EIP-7742

if (blockCreationTasks.containsKey(payloadIdentifier)) {
LOG.debug(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ public PayloadIdentifier(final Long payloadId) {
* @param feeRecipient the fee recipient
* @param withdrawals the withdrawals
* @param parentBeaconBlockRoot the parent beacon block root
* @param targetBlobCount the target blob count
* @return the payload identifier
*/
public static PayloadIdentifier forPayloadParams(
Expand All @@ -71,23 +72,26 @@ public static PayloadIdentifier forPayloadParams(
final Bytes32 prevRandao,
final Address feeRecipient,
final Optional<List<Withdrawal>> withdrawals,
final Optional<Bytes32> parentBeaconBlockRoot) {
final Optional<Bytes32> parentBeaconBlockRoot,
final Optional<UInt64> targetBlobCount) {

return new PayloadIdentifier(
timestamp
^ ((long) parentHash.toHexString().hashCode()) << 8
^ ((long) prevRandao.toHexString().hashCode()) << 16
^ ((long) feeRecipient.toHexString().hashCode()) << 24
^ (long)
withdrawals
.map(
ws ->
ws.stream()
.sorted(Comparator.comparing(Withdrawal::getIndex))
.map(Withdrawal::hashCode)
.reduce(1, (a, b) -> a ^ (b * 31)))
.orElse(0)
^ ((long) parentBeaconBlockRoot.hashCode()) << 40);
withdrawals
.map(
ws ->
ws.stream()
.sorted(Comparator.comparing(Withdrawal::getIndex))
.map(Withdrawal::hashCode)
.reduce(1, (a, b) -> a ^ (b * 31)))
.orElse(0)
<< 32
^ ((long) parentBeaconBlockRoot.hashCode()) << 40
^ ((long) targetBlobCount.hashCode()) << 48);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public void conversionCoverage() {
Bytes32.random(),
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty());
assertThat(new PayloadIdentifier(idTest.getAsBigInteger().longValue())).isEqualTo(idTest);
assertThat(new PayloadIdentifier(idTest.getAsBigInteger().longValue())).isEqualTo(idTest);
Expand Down Expand Up @@ -92,6 +93,7 @@ public void differentWithdrawalAmountsYieldDifferentHash() {
prevRandao,
Address.fromHexString("0x42"),
Optional.of(withdrawals1),
Optional.empty(),
Optional.empty());
var idForWithdrawals2 =
PayloadIdentifier.forPayloadParams(
Expand All @@ -100,6 +102,7 @@ public void differentWithdrawalAmountsYieldDifferentHash() {
prevRandao,
Address.fromHexString("0x42"),
Optional.of(withdrawals2),
Optional.empty(),
Optional.empty());
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
}
Expand Down Expand Up @@ -138,6 +141,7 @@ public void differentOrderedWithdrawalsYieldSameHash() {
prevRandao,
Address.fromHexString("0x42"),
Optional.of(withdrawals1),
Optional.empty(),
Optional.empty());
var idForWithdrawals2 =
PayloadIdentifier.forPayloadParams(
Expand All @@ -146,6 +150,7 @@ public void differentOrderedWithdrawalsYieldSameHash() {
prevRandao,
Address.fromHexString("0x42"),
Optional.of(withdrawals2),
Optional.empty(),
Optional.empty());
assertThat(idForWithdrawals1).isEqualTo(idForWithdrawals2);
}
Expand All @@ -160,6 +165,7 @@ public void emptyOptionalAndEmptyListWithdrawalsYieldDifferentHash() {
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty());
var idForWithdrawals2 =
PayloadIdentifier.forPayloadParams(
Expand All @@ -168,51 +174,104 @@ public void emptyOptionalAndEmptyListWithdrawalsYieldDifferentHash() {
prevRandao,
Address.fromHexString("0x42"),
Optional.of(emptyList()),
Optional.empty(),
Optional.empty());
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
}

@Test
public void emptyOptionalAndNonEmptyParentBeaconBlockRootYieldDifferentHash() {
final Bytes32 prevRandao = Bytes32.random();
var idForWithdrawals1 =
var idForPbbr1 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty());
var idForWithdrawals2 =
var idForPbbr2 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.of(Bytes32.ZERO));
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
Optional.of(Bytes32.ZERO),
Optional.empty());
assertThat(idForPbbr1).isNotEqualTo(idForPbbr2);
}

@Test
public void differentParentBeaconBlockRootYieldDifferentHash() {
final Bytes32 prevRandao = Bytes32.random();
var idForWithdrawals1 =
var idForPbbr1 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.of(Bytes32.fromHexStringLenient("0x1")));
var idForWithdrawals2 =
Optional.of(Bytes32.fromHexStringLenient("0x1")),
Optional.empty());
var idForPbbr2 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.of(Bytes32.ZERO));
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
Optional.of(Bytes32.ZERO),
Optional.empty());
assertThat(idForPbbr1).isNotEqualTo(idForPbbr2);
}

@Test
public void emptyOptionalAndNonEmptyTargetBlobCountYieldDifferentHash() {
final Bytes32 prevRandao = Bytes32.random();
var idForTbc1 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty());
var idForTbc2 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.of(Bytes32.ZERO),
Optional.of(UInt64.ZERO));
assertThat(idForTbc1).isNotEqualTo(idForTbc2);
}

@Test
public void differentTargetBlobCountYieldDifferentHash() {
final Bytes32 prevRandao = Bytes32.random();
var idForTbc1 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.of(UInt64.ZERO));
var idForTbc2 =
PayloadIdentifier.forPayloadParams(
Hash.ZERO,
1337L,
prevRandao,
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.of(UInt64.ONE));
assertThat(idForTbc1).isNotEqualTo(idForTbc2);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ public void shouldReturnValidWithoutFinalizedWithPayload() {
payloadParams.getPrevRandao(),
payloadParams.getSuggestedFeeRecipient(),
Optional.empty(),
Optional.empty(),
Optional.empty());

when(mergeCoordinator.preparePayload(
Expand Down Expand Up @@ -539,6 +540,7 @@ public void shouldReturnValidIfWithdrawalsIsNull_WhenWithdrawalsProhibited() {
payloadParams.getPrevRandao(),
payloadParams.getSuggestedFeeRecipient(),
Optional.empty(),
Optional.empty(),
Optional.empty());

when(mergeCoordinator.preparePayload(
Expand Down Expand Up @@ -629,6 +631,7 @@ public void shouldReturnValidIfWithdrawalsIsNotNull_WhenWithdrawalsAllowed() {
payloadParams.getPrevRandao(),
payloadParams.getSuggestedFeeRecipient(),
withdrawals,
Optional.empty(),
Optional.empty());

when(mergeCoordinator.preparePayload(
Expand Down Expand Up @@ -674,6 +677,7 @@ public void shouldReturnValidIfProtocolScheduleIsEmpty() {
payloadParams.getPrevRandao(),
payloadParams.getSuggestedFeeRecipient(),
Optional.empty(),
Optional.empty(),
Optional.empty());

when(mergeCoordinator.preparePayload(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ public AbstractEngineGetPayloadTest() {
Bytes32.random(),
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty());
protected static final BlockHeader mockHeader =
new BlockHeaderTestFixture().prevRandao(Bytes32.random()).buildHeader();
Expand Down Expand Up @@ -159,6 +160,7 @@ public void shouldFailForUnknownPayloadId() {
Bytes32.random(),
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty()));
assertThat(resp).isInstanceOf(JsonRpcErrorResponse.class);
verify(engineCallListener, times(1)).executionEngineCalled();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ public void shouldReturnBlockForKnownPayloadId() {
Bytes32.random(),
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty());

BlobTestFixture blobTestFixture = new BlobTestFixture();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ public void shouldReturnBlockForKnownPayloadId() {
Bytes32.random(),
Address.fromHexString("0x42"),
Optional.empty(),
Optional.empty(),
Optional.empty());

BlobTestFixture blobTestFixture = new BlobTestFixture();
Expand Down

0 comments on commit 631df1f

Please sign in to comment.