mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-09 03:31:45 +00:00
Ensure VALID response from fcU updates protoarray (#3126)
## Issue Addressed NA ## Proposed Changes Ensures that a `VALID` response from a `forkchoiceUpdate` call will update that block in `ProtoArray`. I also had to modify the mock execution engine so it wouldn't return valid when all payloads were supposed to be some other static value. ## Additional Info NA
This commit is contained in:
@@ -100,7 +100,9 @@ pub async fn handle_rpc<T: EthSpec>(
|
||||
let forkchoice_state: JsonForkChoiceStateV1 = get_param(params, 0)?;
|
||||
let payload_attributes: Option<JsonPayloadAttributesV1> = get_param(params, 1)?;
|
||||
|
||||
let response = ctx
|
||||
let head_block_hash = forkchoice_state.head_block_hash;
|
||||
|
||||
let mut response = ctx
|
||||
.execution_block_generator
|
||||
.write()
|
||||
.forkchoice_updated_v1(
|
||||
@@ -108,6 +110,14 @@ pub async fn handle_rpc<T: EthSpec>(
|
||||
payload_attributes.map(|json| json.into()),
|
||||
)?;
|
||||
|
||||
if let Some(mut status) = ctx.static_forkchoice_updated_response.lock().clone() {
|
||||
if status.status == PayloadStatusV1Status::Valid {
|
||||
status.latest_valid_hash = Some(head_block_hash)
|
||||
}
|
||||
|
||||
response.payload_status = status.into();
|
||||
}
|
||||
|
||||
Ok(serde_json::to_value(response).unwrap())
|
||||
}
|
||||
other => Err(format!(
|
||||
|
||||
@@ -68,6 +68,7 @@ impl<T: EthSpec> MockServer<T> {
|
||||
previous_request: <_>::default(),
|
||||
preloaded_responses,
|
||||
static_new_payload_response: <_>::default(),
|
||||
static_forkchoice_updated_response: <_>::default(),
|
||||
_phantom: PhantomData,
|
||||
});
|
||||
|
||||
@@ -134,6 +135,7 @@ impl<T: EthSpec> MockServer<T> {
|
||||
},
|
||||
should_import: true,
|
||||
};
|
||||
*self.ctx.static_forkchoice_updated_response.lock() = Some(response.status.clone());
|
||||
*self.ctx.static_new_payload_response.lock() = Some(response)
|
||||
}
|
||||
|
||||
@@ -148,6 +150,7 @@ impl<T: EthSpec> MockServer<T> {
|
||||
},
|
||||
should_import,
|
||||
};
|
||||
*self.ctx.static_forkchoice_updated_response.lock() = Some(response.status.clone());
|
||||
*self.ctx.static_new_payload_response.lock() = Some(response)
|
||||
}
|
||||
|
||||
@@ -160,6 +163,7 @@ impl<T: EthSpec> MockServer<T> {
|
||||
},
|
||||
should_import: true,
|
||||
};
|
||||
*self.ctx.static_forkchoice_updated_response.lock() = Some(response.status.clone());
|
||||
*self.ctx.static_new_payload_response.lock() = Some(response)
|
||||
}
|
||||
|
||||
@@ -248,6 +252,7 @@ pub struct Context<T: EthSpec> {
|
||||
pub preloaded_responses: Arc<Mutex<Vec<serde_json::Value>>>,
|
||||
pub previous_request: Arc<Mutex<Option<serde_json::Value>>>,
|
||||
pub static_new_payload_response: Arc<Mutex<Option<StaticNewPayloadResponse>>>,
|
||||
pub static_forkchoice_updated_response: Arc<Mutex<Option<PayloadStatusV1>>>,
|
||||
pub _phantom: PhantomData<T>,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user