mirror of
https://github.com/vacp2p/status-linea-besu.git
synced 2026-01-09 23:38:08 -05:00
add parent beacon block root to payload id calculation (#5843)
Signed-off-by: Stefan <stefan.pingel@consensys.net>
This commit is contained in:
@@ -254,7 +254,12 @@ public class MergeCoordinator implements MergeMiningCoordinator, BadChainListene
|
||||
|
||||
final PayloadIdentifier payloadIdentifier =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
parentHeader.getBlockHash(), timestamp, prevRandao, feeRecipient, withdrawals);
|
||||
parentHeader.getBlockHash(),
|
||||
timestamp,
|
||||
prevRandao,
|
||||
feeRecipient,
|
||||
withdrawals,
|
||||
parentBeaconBlockRoot);
|
||||
|
||||
if (blockCreationTasks.containsKey(payloadIdentifier)) {
|
||||
LOG.debug(
|
||||
|
||||
@@ -62,6 +62,7 @@ public class PayloadIdentifier implements Quantity {
|
||||
* @param prevRandao the prev randao
|
||||
* @param feeRecipient the fee recipient
|
||||
* @param withdrawals the withdrawals
|
||||
* @param parentBeaconBlockRoot the parent beacon block root
|
||||
* @return the payload identifier
|
||||
*/
|
||||
public static PayloadIdentifier forPayloadParams(
|
||||
@@ -69,7 +70,8 @@ public class PayloadIdentifier implements Quantity {
|
||||
final Long timestamp,
|
||||
final Bytes32 prevRandao,
|
||||
final Address feeRecipient,
|
||||
final Optional<List<Withdrawal>> withdrawals) {
|
||||
final Optional<List<Withdrawal>> withdrawals,
|
||||
final Optional<Bytes32> parentBeaconBlockRoot) {
|
||||
|
||||
return new PayloadIdentifier(
|
||||
timestamp
|
||||
@@ -84,7 +86,8 @@ public class PayloadIdentifier implements Quantity {
|
||||
.sorted(Comparator.comparing(Withdrawal::getIndex))
|
||||
.map(Withdrawal::hashCode)
|
||||
.reduce(1, (a, b) -> a ^ (b * 31)))
|
||||
.orElse(0));
|
||||
.orElse(0)
|
||||
^ ((long) parentBeaconBlockRoot.hashCode()) << 40);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -48,7 +48,12 @@ public class PayloadIdentifierTest {
|
||||
public void conversionCoverage() {
|
||||
var idTest =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO, 1337L, Bytes32.random(), Address.fromHexString("0x42"), Optional.empty());
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
Bytes32.random(),
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.empty(),
|
||||
Optional.empty());
|
||||
assertThat(new PayloadIdentifier(idTest.getAsBigInteger().longValue())).isEqualTo(idTest);
|
||||
assertThat(new PayloadIdentifier(idTest.getAsBigInteger().longValue())).isEqualTo(idTest);
|
||||
}
|
||||
@@ -82,10 +87,20 @@ public class PayloadIdentifierTest {
|
||||
final Bytes32 prevRandao = Bytes32.random();
|
||||
var idForWithdrawals1 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO, 1337L, prevRandao, Address.fromHexString("0x42"), Optional.of(withdrawals1));
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.of(withdrawals1),
|
||||
Optional.empty());
|
||||
var idForWithdrawals2 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO, 1337L, prevRandao, Address.fromHexString("0x42"), Optional.of(withdrawals2));
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.of(withdrawals2),
|
||||
Optional.empty());
|
||||
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
|
||||
}
|
||||
|
||||
@@ -118,10 +133,20 @@ public class PayloadIdentifierTest {
|
||||
final Bytes32 prevRandao = Bytes32.random();
|
||||
var idForWithdrawals1 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO, 1337L, prevRandao, Address.fromHexString("0x42"), Optional.of(withdrawals1));
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.of(withdrawals1),
|
||||
Optional.empty());
|
||||
var idForWithdrawals2 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO, 1337L, prevRandao, Address.fromHexString("0x42"), Optional.of(withdrawals2));
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.of(withdrawals2),
|
||||
Optional.empty());
|
||||
assertThat(idForWithdrawals1).isEqualTo(idForWithdrawals2);
|
||||
}
|
||||
|
||||
@@ -130,10 +155,64 @@ public class PayloadIdentifierTest {
|
||||
final Bytes32 prevRandao = Bytes32.random();
|
||||
var idForWithdrawals1 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO, 1337L, prevRandao, Address.fromHexString("0x42"), Optional.empty());
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.empty(),
|
||||
Optional.empty());
|
||||
var idForWithdrawals2 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO, 1337L, prevRandao, Address.fromHexString("0x42"), Optional.of(emptyList()));
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.of(emptyList()),
|
||||
Optional.empty());
|
||||
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void emptyOptionalAndNonEmptyParentBeaconBlockRootYieldDifferentHash() {
|
||||
final Bytes32 prevRandao = Bytes32.random();
|
||||
var idForWithdrawals1 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.empty(),
|
||||
Optional.empty());
|
||||
var idForWithdrawals2 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.empty(),
|
||||
Optional.of(Bytes32.ZERO));
|
||||
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void differentParentBeaconBlockRootYieldDifferentHash() {
|
||||
final Bytes32 prevRandao = Bytes32.random();
|
||||
var idForWithdrawals1 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.empty(),
|
||||
Optional.of(Bytes32.fromHexStringLenient("0x1")));
|
||||
var idForWithdrawals2 =
|
||||
PayloadIdentifier.forPayloadParams(
|
||||
Hash.ZERO,
|
||||
1337L,
|
||||
prevRandao,
|
||||
Address.fromHexString("0x42"),
|
||||
Optional.empty(),
|
||||
Optional.of(Bytes32.ZERO));
|
||||
assertThat(idForWithdrawals1).isNotEqualTo(idForWithdrawals2);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user