mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-03 00:31:50 +00:00
Reconstruct Payloads using Payload Bodies Methods (#4028)
## Issue Addressed * #3895 Co-authored-by: ethDreamer <37123614+ethDreamer@users.noreply.github.com> Co-authored-by: Michael Sproul <michael@sigmaprime.io>
This commit is contained in:
@@ -11,7 +11,7 @@ use unused_port::unused_tcp4_port;
|
||||
/// We've pinned the Nethermind version since our method of using the `master` branch to
|
||||
/// find the latest tag isn't working. It appears Nethermind don't always tag on `master`.
|
||||
/// We should fix this so we always pull the latest version of Nethermind.
|
||||
const NETHERMIND_BRANCH: &str = "release/1.14.6";
|
||||
const NETHERMIND_BRANCH: &str = "release/1.17.1";
|
||||
const NETHERMIND_REPO_URL: &str = "https://github.com/NethermindEth/nethermind";
|
||||
|
||||
fn build_result(repo_dir: &Path) -> Output {
|
||||
@@ -67,7 +67,7 @@ impl NethermindEngine {
|
||||
.join("Nethermind.Runner")
|
||||
.join("bin")
|
||||
.join("Release")
|
||||
.join("net6.0")
|
||||
.join("net7.0")
|
||||
.join("Nethermind.Runner")
|
||||
}
|
||||
}
|
||||
@@ -95,7 +95,7 @@ impl GenericExecutionEngine for NethermindEngine {
|
||||
.arg("--datadir")
|
||||
.arg(datadir.path().to_str().unwrap())
|
||||
.arg("--config")
|
||||
.arg("kiln")
|
||||
.arg("hive")
|
||||
.arg("--Init.ChainSpecPath")
|
||||
.arg(genesis_json_path.to_str().unwrap())
|
||||
.arg("--Merge.TerminalTotalDifficulty")
|
||||
|
||||
@@ -15,8 +15,8 @@ use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
|
||||
use task_executor::TaskExecutor;
|
||||
use tokio::time::sleep;
|
||||
use types::{
|
||||
Address, ChainSpec, EthSpec, ExecutionBlockHash, ExecutionPayload, ForkName, FullPayload,
|
||||
Hash256, MainnetEthSpec, PublicKeyBytes, Slot, Uint256,
|
||||
Address, ChainSpec, EthSpec, ExecutionBlockHash, ExecutionPayload, ExecutionPayloadHeader,
|
||||
ForkName, FullPayload, Hash256, MainnetEthSpec, PublicKeyBytes, Slot, Uint256,
|
||||
};
|
||||
const EXECUTION_ENGINE_START_TIMEOUT: Duration = Duration::from_secs(30);
|
||||
|
||||
@@ -628,12 +628,32 @@ async fn check_payload_reconstruction<E: GenericExecutionEngine>(
|
||||
) {
|
||||
let reconstructed = ee
|
||||
.execution_layer
|
||||
// FIXME: handle other forks here?
|
||||
.get_payload_by_block_hash(payload.block_hash(), ForkName::Merge)
|
||||
.get_payload_by_block_hash(payload.block_hash(), payload.fork_name())
|
||||
.await
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
assert_eq!(reconstructed, *payload);
|
||||
// also check via payload bodies method
|
||||
let capabilities = ee
|
||||
.execution_layer
|
||||
.get_engine_capabilities(None)
|
||||
.await
|
||||
.unwrap();
|
||||
assert!(
|
||||
// if the engine doesn't have these capabilities, we need to update the client in our tests
|
||||
capabilities.get_payload_bodies_by_hash_v1 && capabilities.get_payload_bodies_by_range_v1,
|
||||
"Testing engine does not support payload bodies methods"
|
||||
);
|
||||
let mut bodies = ee
|
||||
.execution_layer
|
||||
.get_payload_bodies_by_hash(vec![payload.block_hash()])
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(bodies.len(), 1);
|
||||
let body = bodies.pop().unwrap().unwrap();
|
||||
let header = ExecutionPayloadHeader::from(payload.to_ref());
|
||||
let reconstructed_from_body = body.to_payload(header).unwrap();
|
||||
assert_eq!(reconstructed_from_body, *payload);
|
||||
}
|
||||
|
||||
/// Returns the duration since the unix epoch.
|
||||
|
||||
Reference in New Issue
Block a user