mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-09 19:51:47 +00:00
Rename random to prev_randao (#3040)
## Issue Addressed As discussed on last-night's consensus call, the testnets next week will target the [Kiln Spec v2](https://hackmd.io/@n0ble/kiln-spec). Presently, we support Kiln V1. V2 is backwards compatible, except for renaming `random` to `prev_randao` in: - https://github.com/ethereum/execution-apis/pull/180 - https://github.com/ethereum/consensus-specs/pull/2835 With this PR we'll no longer be compatible with the existing Kintsugi and Kiln testnets, however we'll be ready for the testnets next week. I raised this breaking change in the call last night, we are all keen to move forward and break things. We now target the [`merge-kiln-v2`](https://github.com/MariusVanDerWijden/go-ethereum/tree/merge-kiln-v2) branch for interop with Geth. This required adding the `--http.aauthport` to the tester to avoid a port conflict at startup. ### Changes to exec integration tests There's some change in the `merge-kiln-v2` version of Geth that means it can't compile on a vanilla Github runner. Bumping the `go` version on the runner solved this issue. Whilst addressing this, I refactored the `testing/execution_integration` crate to be a *binary* rather than a *library* with tests. This means that we don't need to run the `build.rs` and build Geth whenever someone runs `make lint` or `make test-release`. This is nice for everyday users, but it's also nice for CI so that we can have a specific runner for these tests and we don't need to ensure *all* runners support everything required to build all execution clients. ## More Info - [x] ~~EF tests are failing since the rename has broken some tests that reference the old field name. I have been told there will be new tests released in the coming days (25/02/22 or 26/02/22).~~
This commit is contained in:
66
testing/execution_engine_integration/src/build_geth.rs
Normal file
66
testing/execution_engine_integration/src/build_geth.rs
Normal file
@@ -0,0 +1,66 @@
|
||||
use std::env;
|
||||
use std::fs;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::Command;
|
||||
|
||||
const GETH_BRANCH: &str = "merge-kiln-v2";
|
||||
const GETH_REPO_URL: &str = "https://github.com/MariusVanDerWijden/go-ethereum";
|
||||
|
||||
pub fn build() {
|
||||
let manifest_dir: PathBuf = env::var("CARGO_MANIFEST_DIR").unwrap().into();
|
||||
let execution_clients_dir = manifest_dir.join("execution_clients");
|
||||
|
||||
if !execution_clients_dir.exists() {
|
||||
fs::create_dir(&execution_clients_dir).unwrap();
|
||||
}
|
||||
|
||||
build_geth(&execution_clients_dir);
|
||||
}
|
||||
|
||||
fn build_geth(execution_clients_dir: &Path) {
|
||||
let repo_dir = execution_clients_dir.join("go-ethereum");
|
||||
|
||||
if !repo_dir.exists() {
|
||||
// Clone the repo
|
||||
assert!(Command::new("git")
|
||||
.arg("clone")
|
||||
.arg(GETH_REPO_URL)
|
||||
.current_dir(&execution_clients_dir)
|
||||
.output()
|
||||
.expect("failed to clone geth repo")
|
||||
.status
|
||||
.success());
|
||||
}
|
||||
|
||||
// Checkout the correct branch
|
||||
assert!(Command::new("git")
|
||||
.arg("checkout")
|
||||
.arg(GETH_BRANCH)
|
||||
.current_dir(&repo_dir)
|
||||
.output()
|
||||
.expect("failed to checkout geth branch")
|
||||
.status
|
||||
.success());
|
||||
|
||||
// Update the branch
|
||||
assert!(Command::new("git")
|
||||
.arg("pull")
|
||||
.current_dir(&repo_dir)
|
||||
.output()
|
||||
.expect("failed to update geth branch")
|
||||
.status
|
||||
.success());
|
||||
|
||||
// Build geth
|
||||
let make_result = Command::new("make")
|
||||
.arg("geth")
|
||||
.current_dir(&repo_dir)
|
||||
.output()
|
||||
.expect("failed to make geth");
|
||||
|
||||
if !make_result.status.success() {
|
||||
dbg!(String::from_utf8_lossy(&make_result.stdout));
|
||||
dbg!(String::from_utf8_lossy(&make_result.stderr));
|
||||
panic!("make failed");
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ use unused_port::unused_tcp_port;
|
||||
/// Defined for each EE type (e.g., Geth, Nethermind, etc).
|
||||
pub trait GenericExecutionEngine: Clone {
|
||||
fn init_datadir() -> TempDir;
|
||||
fn start_client(datadir: &TempDir, http_port: u16) -> Child;
|
||||
fn start_client(datadir: &TempDir, http_port: u16, http_auth_port: u16) -> Child;
|
||||
}
|
||||
|
||||
/// Holds handle to a running EE process, plus some other metadata.
|
||||
@@ -19,6 +19,7 @@ pub struct ExecutionEngine<E> {
|
||||
#[allow(dead_code)]
|
||||
datadir: TempDir,
|
||||
http_port: u16,
|
||||
http_auth_port: u16,
|
||||
child: Child,
|
||||
}
|
||||
|
||||
@@ -35,11 +36,13 @@ impl<E: GenericExecutionEngine> ExecutionEngine<E> {
|
||||
pub fn new(engine: E) -> Self {
|
||||
let datadir = E::init_datadir();
|
||||
let http_port = unused_tcp_port().unwrap();
|
||||
let child = E::start_client(&datadir, http_port);
|
||||
let http_auth_port = unused_tcp_port().unwrap();
|
||||
let child = E::start_client(&datadir, http_port, http_auth_port);
|
||||
Self {
|
||||
engine,
|
||||
datadir,
|
||||
http_port,
|
||||
http_auth_port,
|
||||
child,
|
||||
}
|
||||
}
|
||||
@@ -47,6 +50,11 @@ impl<E: GenericExecutionEngine> ExecutionEngine<E> {
|
||||
pub fn http_url(&self) -> SensitiveUrl {
|
||||
SensitiveUrl::parse(&format!("http://127.0.0.1:{}", self.http_port)).unwrap()
|
||||
}
|
||||
|
||||
#[allow(dead_code)] // Future use.
|
||||
pub fn http_ath_url(&self) -> SensitiveUrl {
|
||||
SensitiveUrl::parse(&format!("http://127.0.0.1:{}", self.http_auth_port)).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -90,7 +98,7 @@ impl GenericExecutionEngine for Geth {
|
||||
datadir
|
||||
}
|
||||
|
||||
fn start_client(datadir: &TempDir, http_port: u16) -> Child {
|
||||
fn start_client(datadir: &TempDir, http_port: u16, http_auth_port: u16) -> Child {
|
||||
let network_port = unused_tcp_port().unwrap();
|
||||
|
||||
Command::new(Self::binary_path())
|
||||
@@ -101,6 +109,8 @@ impl GenericExecutionEngine for Geth {
|
||||
.arg("engine,eth")
|
||||
.arg("--http.port")
|
||||
.arg(http_port.to_string())
|
||||
.arg("--http.authport")
|
||||
.arg(http_auth_port.to_string())
|
||||
.arg("--port")
|
||||
.arg(network_port.to_string())
|
||||
.stdout(build_stdio())
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
/// This library provides integration testing between Lighthouse and other execution engines.
|
||||
///
|
||||
/// See the `tests/tests.rs` file to run tests.
|
||||
mod execution_engine;
|
||||
mod genesis_json;
|
||||
mod test_rig;
|
||||
|
||||
pub use execution_engine::Geth;
|
||||
pub use test_rig::TestRig;
|
||||
|
||||
/// Set to `false` to send logs to the console during tests. Logs are useful when debugging.
|
||||
const SUPPRESS_LOGS: bool = true;
|
||||
28
testing/execution_engine_integration/src/main.rs
Normal file
28
testing/execution_engine_integration/src/main.rs
Normal file
@@ -0,0 +1,28 @@
|
||||
/// This binary runs integration tests between Lighthouse and execution engines.
|
||||
///
|
||||
/// It will first attempt to build any supported integration clients, then it will run tests.
|
||||
///
|
||||
/// A return code of `0` indicates the tests succeeded.
|
||||
mod build_geth;
|
||||
mod execution_engine;
|
||||
mod genesis_json;
|
||||
mod test_rig;
|
||||
|
||||
use execution_engine::Geth;
|
||||
use test_rig::TestRig;
|
||||
|
||||
/// Set to `false` to send logs to the console during tests. Logs are useful when debugging.
|
||||
const SUPPRESS_LOGS: bool = false;
|
||||
|
||||
fn main() {
|
||||
if cfg!(windows) {
|
||||
panic!("windows is not supported, only linux");
|
||||
}
|
||||
|
||||
test_geth()
|
||||
}
|
||||
|
||||
fn test_geth() {
|
||||
build_geth::build();
|
||||
TestRig::new(Geth).perform_tests_blocking();
|
||||
}
|
||||
@@ -138,7 +138,7 @@ impl<E: GenericExecutionEngine> TestRig<E> {
|
||||
|
||||
let parent_hash = terminal_pow_block_hash;
|
||||
let timestamp = timestamp_now();
|
||||
let random = Hash256::zero();
|
||||
let prev_randao = Hash256::zero();
|
||||
let finalized_block_hash = ExecutionBlockHash::zero();
|
||||
let proposer_index = 0;
|
||||
let valid_payload = self
|
||||
@@ -147,7 +147,7 @@ impl<E: GenericExecutionEngine> TestRig<E> {
|
||||
.get_payload::<MainnetEthSpec>(
|
||||
parent_hash,
|
||||
timestamp,
|
||||
random,
|
||||
prev_randao,
|
||||
finalized_block_hash,
|
||||
proposer_index,
|
||||
)
|
||||
@@ -210,7 +210,7 @@ impl<E: GenericExecutionEngine> TestRig<E> {
|
||||
*/
|
||||
|
||||
let mut invalid_payload = valid_payload.clone();
|
||||
invalid_payload.random = Hash256::from_low_u64_be(42);
|
||||
invalid_payload.prev_randao = Hash256::from_low_u64_be(42);
|
||||
let status = self
|
||||
.ee_a
|
||||
.execution_layer
|
||||
@@ -227,7 +227,7 @@ impl<E: GenericExecutionEngine> TestRig<E> {
|
||||
|
||||
let parent_hash = valid_payload.block_hash;
|
||||
let timestamp = valid_payload.timestamp + 1;
|
||||
let random = Hash256::zero();
|
||||
let prev_randao = Hash256::zero();
|
||||
let finalized_block_hash = ExecutionBlockHash::zero();
|
||||
let proposer_index = 0;
|
||||
let second_payload = self
|
||||
@@ -236,7 +236,7 @@ impl<E: GenericExecutionEngine> TestRig<E> {
|
||||
.get_payload::<MainnetEthSpec>(
|
||||
parent_hash,
|
||||
timestamp,
|
||||
random,
|
||||
prev_randao,
|
||||
finalized_block_hash,
|
||||
proposer_index,
|
||||
)
|
||||
@@ -266,7 +266,7 @@ impl<E: GenericExecutionEngine> TestRig<E> {
|
||||
let finalized_block_hash = ExecutionBlockHash::zero();
|
||||
let payload_attributes = Some(PayloadAttributes {
|
||||
timestamp: second_payload.timestamp + 1,
|
||||
random: Hash256::zero(),
|
||||
prev_randao: Hash256::zero(),
|
||||
suggested_fee_recipient: Address::zero(),
|
||||
});
|
||||
let status = self
|
||||
|
||||
Reference in New Issue
Block a user