From 837acc11e670efcf6597e84c9e9c15221031cf65 Mon Sep 17 00:00:00 2001 From: Paul Hauner Date: Wed, 29 Sep 2021 10:34:10 +1000 Subject: [PATCH] Add execute_payload to block_gen --- Cargo.lock | 1 + beacon_node/execution_layer/Cargo.toml | 1 + .../test_utils/execution_block_generator.rs | 27 ++++++++++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f9c21e25fa..de70b4057e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2084,6 +2084,7 @@ dependencies = [ "slog", "task_executor", "tokio", + "tree_hash", "types", "warp", ] diff --git a/beacon_node/execution_layer/Cargo.toml b/beacon_node/execution_layer/Cargo.toml index dcfe4ed4d3..bff2ff9b07 100644 --- a/beacon_node/execution_layer/Cargo.toml +++ b/beacon_node/execution_layer/Cargo.toml @@ -25,3 +25,4 @@ hex = "0.4.2" eth2_ssz_types = { path = "../../consensus/ssz_types"} lru = "0.6.0" exit-future = "0.2.0" +tree_hash = { path = "../../consensus/tree_hash"} diff --git a/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs b/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs index 772d5a4f62..5c49e96eea 100644 --- a/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs +++ b/beacon_node/execution_layer/src/test_utils/execution_block_generator.rs @@ -1,7 +1,8 @@ -use crate::engine_api::http::JsonPreparePayloadRequest; +use crate::engine_api::{http::JsonPreparePayloadRequest, ExecutePayloadResponse}; use serde::{Deserialize, Serialize}; use std::cmp::Ordering; use std::collections::HashMap; +use tree_hash::TreeHash; use types::{EthSpec, ExecutionPayload, Hash256, Uint256}; #[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] @@ -24,6 +25,7 @@ pub struct ExecutionBlockGenerator { /* * PoS block parameters */ + pub pending_payloads: HashMap>, pub merge_blocks: HashMap>, pub merge_block_numbers: HashMap, pub latest_merge_block: Option, @@ -40,6 +42,7 @@ impl ExecutionBlockGenerator { terminal_total_difficulty, terminal_block_number, // PoS params + pending_payloads: <_>::default(), merge_blocks: <_>::default(), merge_block_numbers: <_>::default(), latest_merge_block: None, @@ -124,7 +127,7 @@ impl ExecutionBlockGenerator { let id = self.next_payload_id; self.next_payload_id += 1; - let execution_payload = ExecutionPayload { + let mut execution_payload = ExecutionPayload { parent_hash: payload.parent_hash, coinbase: payload.fee_recipient, receipt_root: Hash256::repeat_byte(42), @@ -141,15 +144,33 @@ impl ExecutionBlockGenerator { transactions: vec![].into(), }; + execution_payload.block_hash = execution_payload.tree_hash_root(); + self.payload_ids.insert(id, execution_payload); Ok(id) } - pub fn get_payload_id(&mut self, id: u64) -> Option> { + pub fn get_payload(&mut self, id: u64) -> Option> { self.payload_ids.remove(&id) } + pub fn execute_payload(&mut self, payload: ExecutionPayload) -> ExecutePayloadResponse { + let parent = if let Some(parent) = self.block_by_hash(payload.parent_hash) { + parent + } else { + return ExecutePayloadResponse::Invalid; + }; + + if payload.block_number != parent.block_number + 1 { + return ExecutePayloadResponse::Invalid; + } + + self.pending_payloads.insert(payload.block_hash, payload); + + ExecutePayloadResponse::Valid + } + pub fn insert_pos_block(&mut self, number: u64) -> Result<(), String> { self.sanitize_pos_block_number(number)?; self.latest_merge_block = Some(number);