mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-30 04:37:13 +00:00
Merge conflicts
This commit is contained in:
@@ -26,7 +26,7 @@ pub use types::{
|
||||
};
|
||||
use types::{
|
||||
ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadDeneb,
|
||||
ExecutionPayloadEip7805, ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionPayloadGloas,
|
||||
ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionPayloadGloas, ExecutionPayloadHeze,
|
||||
ExecutionRequests, KzgProofs,
|
||||
};
|
||||
use types::{GRAFFITI_BYTES_LEN, Graffiti};
|
||||
@@ -38,8 +38,8 @@ mod new_payload_request;
|
||||
|
||||
pub use new_payload_request::{
|
||||
NewPayloadRequest, NewPayloadRequestBellatrix, NewPayloadRequestCapella,
|
||||
NewPayloadRequestDeneb, NewPayloadRequestEip7805, NewPayloadRequestElectra,
|
||||
NewPayloadRequestFulu, NewPayloadRequestGloas,
|
||||
NewPayloadRequestDeneb, NewPayloadRequestElectra, NewPayloadRequestFulu,
|
||||
NewPayloadRequestGloas, NewPayloadRequestHeze,
|
||||
};
|
||||
|
||||
pub const LATEST_TAG: &str = "latest";
|
||||
@@ -300,7 +300,7 @@ pub struct ProposeBlindedBlockResponse {
|
||||
}
|
||||
|
||||
#[superstruct(
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Eip7805, Gloas),
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Gloas, Heze),
|
||||
variant_attributes(derive(Clone, Debug, PartialEq),),
|
||||
map_into(ExecutionPayload),
|
||||
map_ref_into(ExecutionPayloadRef),
|
||||
@@ -320,18 +320,18 @@ pub struct GetPayloadResponse<E: EthSpec> {
|
||||
pub execution_payload: ExecutionPayloadDeneb<E>,
|
||||
#[superstruct(only(Electra), partial_getter(rename = "execution_payload_electra"))]
|
||||
pub execution_payload: ExecutionPayloadElectra<E>,
|
||||
#[superstruct(only(Eip7805), partial_getter(rename = "execution_payload_eip7805"))]
|
||||
pub execution_payload: ExecutionPayloadEip7805<E>,
|
||||
#[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))]
|
||||
pub execution_payload: ExecutionPayloadFulu<E>,
|
||||
#[superstruct(only(Gloas), partial_getter(rename = "execution_payload_gloas"))]
|
||||
pub execution_payload: ExecutionPayloadGloas<E>,
|
||||
#[superstruct(only(Heze), partial_getter(rename = "execution_payload_heze"))]
|
||||
pub execution_payload: ExecutionPayloadHeze<E>,
|
||||
pub block_value: Uint256,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
pub blobs_bundle: BlobsBundle<E>,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas), partial_getter(copy))]
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze), partial_getter(copy))]
|
||||
pub should_override_builder: bool,
|
||||
#[superstruct(only(Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Electra, Fulu, Gloas, Heze))]
|
||||
pub requests: ExecutionRequests<E>,
|
||||
}
|
||||
|
||||
@@ -399,12 +399,6 @@ impl<E: EthSpec> From<GetPayloadResponse<E>>
|
||||
Some(inner.blobs_bundle),
|
||||
Some(inner.requests),
|
||||
),
|
||||
GetPayloadResponse::Eip7805(inner) => (
|
||||
ExecutionPayload::Eip7805(inner.execution_payload),
|
||||
inner.block_value,
|
||||
Some(inner.blobs_bundle),
|
||||
Some(inner.requests),
|
||||
),
|
||||
GetPayloadResponse::Fulu(inner) => (
|
||||
ExecutionPayload::Fulu(inner.execution_payload),
|
||||
inner.block_value,
|
||||
@@ -417,6 +411,12 @@ impl<E: EthSpec> From<GetPayloadResponse<E>>
|
||||
Some(inner.blobs_bundle),
|
||||
Some(inner.requests),
|
||||
),
|
||||
GetPayloadResponse::Heze(inner) => (
|
||||
ExecutionPayload::Heze(inner.execution_payload),
|
||||
inner.block_value,
|
||||
Some(inner.blobs_bundle),
|
||||
Some(inner.requests),
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -550,9 +550,9 @@ impl<E: EthSpec> ExecutionPayloadBodyV1<E> {
|
||||
))
|
||||
}
|
||||
}
|
||||
ExecutionPayloadHeader::Eip7805(header) => {
|
||||
ExecutionPayloadHeader::Heze(header) => {
|
||||
if let Some(withdrawals) = self.withdrawals {
|
||||
Ok(ExecutionPayload::Eip7805(ExecutionPayloadEip7805 {
|
||||
Ok(ExecutionPayload::Heze(ExecutionPayloadHeze {
|
||||
parent_hash: header.parent_hash,
|
||||
fee_recipient: header.fee_recipient,
|
||||
state_root: header.state_root,
|
||||
@@ -570,6 +570,9 @@ impl<E: EthSpec> ExecutionPayloadBodyV1<E> {
|
||||
withdrawals,
|
||||
blob_gas_used: header.blob_gas_used,
|
||||
excess_blob_gas: header.excess_blob_gas,
|
||||
// TODO(heze): block_access_list and slot_number are not available in ExecutionPayloadBodyV1
|
||||
block_access_list: Default::default(),
|
||||
slot_number: Default::default(),
|
||||
}))
|
||||
} else {
|
||||
Err(format!(
|
||||
|
||||
@@ -924,12 +924,12 @@ impl HttpJsonRpc {
|
||||
Ok(response.into())
|
||||
}
|
||||
|
||||
// TODO(EIP7805) fix new payload if needed
|
||||
pub async fn new_payload_v4_eip7805<E: EthSpec>(
|
||||
// TODO(HEZE) fix new payload if needed
|
||||
pub async fn new_payload_v4_heze<E: EthSpec>(
|
||||
&self,
|
||||
new_payload_request_eip7805: NewPayloadRequestEip7805<'_, E>,
|
||||
new_payload_request_heze: NewPayloadRequestHeze<'_, E>,
|
||||
) -> Result<PayloadStatusV1, Error> {
|
||||
let il_transactions: Vec<String> = new_payload_request_eip7805
|
||||
let il_transactions: Vec<String> = new_payload_request_heze
|
||||
.il_transactions
|
||||
.into_iter()
|
||||
.map(|tx| {
|
||||
@@ -939,21 +939,21 @@ impl HttpJsonRpc {
|
||||
.collect();
|
||||
|
||||
let params = json!([
|
||||
JsonExecutionPayload::Eip7805(
|
||||
new_payload_request_eip7805
|
||||
JsonExecutionPayload::Heze(
|
||||
new_payload_request_heze
|
||||
.execution_payload
|
||||
.clone()
|
||||
.try_into()?
|
||||
),
|
||||
new_payload_request_eip7805.versioned_hashes,
|
||||
new_payload_request_eip7805.parent_beacon_block_root,
|
||||
new_payload_request_eip7805
|
||||
new_payload_request_heze.versioned_hashes,
|
||||
new_payload_request_heze.parent_beacon_block_root,
|
||||
new_payload_request_heze
|
||||
.execution_requests
|
||||
.get_execution_requests_list(),
|
||||
il_transactions
|
||||
]);
|
||||
|
||||
// TODO(eip7805) should be v5 i think
|
||||
// TODO(heze) should be v5 i think
|
||||
let response: JsonPayloadStatusV1 = self
|
||||
.rpc_request(
|
||||
ENGINE_NEW_PAYLOAD_V4,
|
||||
@@ -994,6 +994,35 @@ impl HttpJsonRpc {
|
||||
Ok(response.into())
|
||||
}
|
||||
|
||||
pub async fn new_payload_v5_heze<E: EthSpec>(
|
||||
&self,
|
||||
new_payload_request_heze: NewPayloadRequestHeze<'_, E>,
|
||||
) -> Result<PayloadStatusV1, Error> {
|
||||
let params = json!([
|
||||
JsonExecutionPayload::Heze(
|
||||
new_payload_request_heze
|
||||
.execution_payload
|
||||
.clone()
|
||||
.try_into()?
|
||||
),
|
||||
new_payload_request_heze.versioned_hashes,
|
||||
new_payload_request_heze.parent_beacon_block_root,
|
||||
new_payload_request_heze
|
||||
.execution_requests
|
||||
.get_execution_requests_list(),
|
||||
]);
|
||||
|
||||
let response: JsonPayloadStatusV1 = self
|
||||
.rpc_request(
|
||||
ENGINE_NEW_PAYLOAD_V5,
|
||||
params,
|
||||
ENGINE_NEW_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier,
|
||||
)
|
||||
.await?;
|
||||
|
||||
Ok(response.into())
|
||||
}
|
||||
|
||||
pub async fn get_payload_v1<E: EthSpec>(
|
||||
&self,
|
||||
payload_id: PayloadId,
|
||||
@@ -1103,8 +1132,8 @@ impl HttpJsonRpc {
|
||||
.try_into()
|
||||
.map_err(Error::BadResponse)
|
||||
}
|
||||
ForkName::Eip7805 => {
|
||||
let response: JsonGetPayloadResponseEip7805<E> = self
|
||||
ForkName::Heze => {
|
||||
let response: JsonGetPayloadResponseHeze<E> = self
|
||||
.rpc_request(
|
||||
ENGINE_GET_PAYLOAD_V4,
|
||||
params,
|
||||
@@ -1112,7 +1141,7 @@ impl HttpJsonRpc {
|
||||
)
|
||||
.await?;
|
||||
|
||||
JsonGetPayloadResponse::Eip7805(response)
|
||||
JsonGetPayloadResponse::Heze(response)
|
||||
.try_into()
|
||||
.map_err(Error::BadResponse)
|
||||
}
|
||||
@@ -1143,15 +1172,15 @@ impl HttpJsonRpc {
|
||||
.try_into()
|
||||
.map_err(Error::BadResponse)
|
||||
}
|
||||
ForkName::Eip7805 => {
|
||||
let response: JsonGetPayloadResponseEip7805<E> = self
|
||||
ForkName::Heze => {
|
||||
let response: JsonGetPayloadResponseHeze<E> = self
|
||||
.rpc_request(
|
||||
ENGINE_GET_PAYLOAD_V5,
|
||||
params,
|
||||
ENGINE_GET_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier,
|
||||
)
|
||||
.await?;
|
||||
JsonGetPayloadResponse::Eip7805(response)
|
||||
JsonGetPayloadResponse::Heze(response)
|
||||
.try_into()
|
||||
.map_err(Error::BadResponse)
|
||||
}
|
||||
@@ -1182,6 +1211,18 @@ impl HttpJsonRpc {
|
||||
.try_into()
|
||||
.map_err(Error::BadResponse)
|
||||
}
|
||||
ForkName::Heze => {
|
||||
let response: JsonGetPayloadResponseHeze<E> = self
|
||||
.rpc_request(
|
||||
ENGINE_GET_PAYLOAD_V6,
|
||||
params,
|
||||
ENGINE_GET_PAYLOAD_TIMEOUT * self.execution_timeout_multiplier,
|
||||
)
|
||||
.await?;
|
||||
JsonGetPayloadResponse::Heze(response)
|
||||
.try_into()
|
||||
.map_err(Error::BadResponse)
|
||||
}
|
||||
_ => Err(Error::UnsupportedForkVariant(format!(
|
||||
"called get_payload_v6 with {}",
|
||||
fork_name
|
||||
@@ -1500,10 +1541,10 @@ impl HttpJsonRpc {
|
||||
Err(Error::RequiredMethodUnsupported("engine_newPayloadV4"))
|
||||
}
|
||||
}
|
||||
// TODO(EIP7805) engine capabilties should be v5?
|
||||
NewPayloadRequest::Eip7805(new_payload_request_eip7805) => {
|
||||
// TODO(HEZE) engine capabilties should be v5?
|
||||
NewPayloadRequest::Heze(new_payload_request_heze) => {
|
||||
if engine_capabilities.new_payload_v4 {
|
||||
self.new_payload_v4_eip7805(new_payload_request_eip7805)
|
||||
self.new_payload_v4_heze(new_payload_request_heze)
|
||||
.await
|
||||
} else {
|
||||
Err(Error::RequiredMethodUnsupported("engine_newPayloadV4"))
|
||||
@@ -1516,6 +1557,13 @@ impl HttpJsonRpc {
|
||||
Err(Error::RequiredMethodUnsupported("engine_newPayloadV5"))
|
||||
}
|
||||
}
|
||||
NewPayloadRequest::Heze(new_payload_request_heze) => {
|
||||
if engine_capabilities.new_payload_v5 {
|
||||
self.new_payload_v5_heze(new_payload_request_heze).await
|
||||
} else {
|
||||
Err(Error::RequiredMethodUnsupported("engine_newPayloadV5"))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1551,7 +1599,7 @@ impl HttpJsonRpc {
|
||||
Err(Error::RequiredMethodUnsupported("engine_getPayloadv4"))
|
||||
}
|
||||
}
|
||||
ForkName::Eip7805 => {
|
||||
ForkName::Heze => {
|
||||
if engine_capabilities.get_payload_v4 {
|
||||
self.get_payload_v4(fork_name, payload_id).await
|
||||
} else {
|
||||
@@ -1572,6 +1620,13 @@ impl HttpJsonRpc {
|
||||
Err(Error::RequiredMethodUnsupported("engine_getPayloadV6"))
|
||||
}
|
||||
}
|
||||
ForkName::Heze => {
|
||||
if engine_capabilities.get_payload_v6 {
|
||||
self.get_payload_v6(fork_name, payload_id).await
|
||||
} else {
|
||||
Err(Error::RequiredMethodUnsupported("engine_getPayloadV6"))
|
||||
}
|
||||
}
|
||||
ForkName::Base | ForkName::Altair => Err(Error::UnsupportedForkVariant(format!(
|
||||
"called get_payload with {}",
|
||||
fork_name
|
||||
|
||||
@@ -64,7 +64,7 @@ pub struct JsonPayloadIdResponse {
|
||||
}
|
||||
|
||||
#[superstruct(
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Eip7805, Gloas),
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Gloas, Heze),
|
||||
variant_attributes(
|
||||
derive(Debug, PartialEq, Default, Serialize, Deserialize,),
|
||||
serde(bound = "E: EthSpec", rename_all = "camelCase"),
|
||||
@@ -99,18 +99,18 @@ pub struct JsonExecutionPayload<E: EthSpec> {
|
||||
pub block_hash: ExecutionBlockHash,
|
||||
#[serde(with = "ssz_types::serde_utils::list_of_hex_var_list")]
|
||||
pub transactions: Transactions<E>,
|
||||
#[superstruct(only(Capella, Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Capella, Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
pub withdrawals: VariableList<JsonWithdrawal, E::MaxWithdrawalsPerPayload>,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
#[serde(with = "serde_utils::u64_hex_be")]
|
||||
pub blob_gas_used: u64,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
#[serde(with = "serde_utils::u64_hex_be")]
|
||||
pub excess_blob_gas: u64,
|
||||
#[superstruct(only(Gloas))]
|
||||
#[superstruct(only(Gloas, Heze))]
|
||||
#[serde(with = "ssz_types::serde_utils::hex_var_list")]
|
||||
pub block_access_list: VariableList<u8, E::MaxBytesPerTransaction>,
|
||||
#[superstruct(only(Gloas))]
|
||||
#[superstruct(only(Gloas, Heze))]
|
||||
#[serde(with = "serde_utils::u64_hex_be")]
|
||||
pub slot_number: u64,
|
||||
}
|
||||
@@ -236,11 +236,11 @@ impl<E: EthSpec> TryFrom<ExecutionPayloadFulu<E>> for JsonExecutionPayloadFulu<E
|
||||
}
|
||||
}
|
||||
|
||||
impl<E: EthSpec> TryFrom<ExecutionPayloadEip7805<E>> for JsonExecutionPayloadEip7805<E> {
|
||||
impl<E: EthSpec> TryFrom<ExecutionPayloadGloas<E>> for JsonExecutionPayloadGloas<E> {
|
||||
type Error = ssz_types::Error;
|
||||
|
||||
fn try_from(payload: ExecutionPayloadEip7805<E>) -> Result<Self, Self::Error> {
|
||||
Ok(JsonExecutionPayloadEip7805 {
|
||||
fn try_from(payload: ExecutionPayloadGloas<E>) -> Result<Self, Self::Error> {
|
||||
Ok(JsonExecutionPayloadGloas {
|
||||
parent_hash: payload.parent_hash,
|
||||
fee_recipient: payload.fee_recipient,
|
||||
state_root: payload.state_root,
|
||||
@@ -258,15 +258,17 @@ impl<E: EthSpec> TryFrom<ExecutionPayloadEip7805<E>> for JsonExecutionPayloadEip
|
||||
withdrawals: withdrawals_to_json(payload.withdrawals)?,
|
||||
blob_gas_used: payload.blob_gas_used,
|
||||
excess_blob_gas: payload.excess_blob_gas,
|
||||
block_access_list: payload.block_access_list,
|
||||
slot_number: payload.slot_number.into(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl<E: EthSpec> TryFrom<ExecutionPayloadGloas<E>> for JsonExecutionPayloadGloas<E> {
|
||||
impl<E: EthSpec> TryFrom<ExecutionPayloadHeze<E>> for JsonExecutionPayloadHeze<E> {
|
||||
type Error = ssz_types::Error;
|
||||
|
||||
fn try_from(payload: ExecutionPayloadGloas<E>) -> Result<Self, Self::Error> {
|
||||
Ok(JsonExecutionPayloadGloas {
|
||||
fn try_from(payload: ExecutionPayloadHeze<E>) -> Result<Self, Self::Error> {
|
||||
Ok(JsonExecutionPayloadHeze {
|
||||
parent_hash: payload.parent_hash,
|
||||
fee_recipient: payload.fee_recipient,
|
||||
state_root: payload.state_root,
|
||||
@@ -308,12 +310,12 @@ impl<E: EthSpec> TryFrom<ExecutionPayload<E>> for JsonExecutionPayload<E> {
|
||||
Ok(JsonExecutionPayload::Electra(payload.try_into()?))
|
||||
}
|
||||
ExecutionPayload::Fulu(payload) => Ok(JsonExecutionPayload::Fulu(payload.try_into()?)),
|
||||
ExecutionPayload::Eip7805(payload) => {
|
||||
Ok(JsonExecutionPayload::Eip7805(payload.try_into()?))
|
||||
}
|
||||
ExecutionPayload::Gloas(payload) => {
|
||||
Ok(JsonExecutionPayload::Gloas(payload.try_into()?))
|
||||
}
|
||||
ExecutionPayload::Heze(payload) => {
|
||||
Ok(JsonExecutionPayload::Heze(payload.try_into()?))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -440,11 +442,11 @@ impl<E: EthSpec> TryFrom<JsonExecutionPayloadFulu<E>> for ExecutionPayloadFulu<E
|
||||
}
|
||||
}
|
||||
|
||||
impl<E: EthSpec> TryFrom<JsonExecutionPayloadEip7805<E>> for ExecutionPayloadEip7805<E> {
|
||||
impl<E: EthSpec> TryFrom<JsonExecutionPayloadGloas<E>> for ExecutionPayloadGloas<E> {
|
||||
type Error = ssz_types::Error;
|
||||
|
||||
fn try_from(payload: JsonExecutionPayloadEip7805<E>) -> Result<Self, Self::Error> {
|
||||
Ok(ExecutionPayloadEip7805 {
|
||||
fn try_from(payload: JsonExecutionPayloadGloas<E>) -> Result<Self, Self::Error> {
|
||||
Ok(ExecutionPayloadGloas {
|
||||
parent_hash: payload.parent_hash,
|
||||
fee_recipient: payload.fee_recipient,
|
||||
state_root: payload.state_root,
|
||||
@@ -462,15 +464,17 @@ impl<E: EthSpec> TryFrom<JsonExecutionPayloadEip7805<E>> for ExecutionPayloadEip
|
||||
withdrawals: withdrawals_from_json(payload.withdrawals)?,
|
||||
blob_gas_used: payload.blob_gas_used,
|
||||
excess_blob_gas: payload.excess_blob_gas,
|
||||
block_access_list: payload.block_access_list,
|
||||
slot_number: payload.slot_number.into(),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl<E: EthSpec> TryFrom<JsonExecutionPayloadGloas<E>> for ExecutionPayloadGloas<E> {
|
||||
impl<E: EthSpec> TryFrom<JsonExecutionPayloadHeze<E>> for ExecutionPayloadHeze<E> {
|
||||
type Error = ssz_types::Error;
|
||||
|
||||
fn try_from(payload: JsonExecutionPayloadGloas<E>) -> Result<Self, Self::Error> {
|
||||
Ok(ExecutionPayloadGloas {
|
||||
fn try_from(payload: JsonExecutionPayloadHeze<E>) -> Result<Self, Self::Error> {
|
||||
Ok(ExecutionPayloadHeze {
|
||||
parent_hash: payload.parent_hash,
|
||||
fee_recipient: payload.fee_recipient,
|
||||
state_root: payload.state_root,
|
||||
@@ -512,12 +516,12 @@ impl<E: EthSpec> TryFrom<JsonExecutionPayload<E>> for ExecutionPayload<E> {
|
||||
Ok(ExecutionPayload::Electra(payload.try_into()?))
|
||||
}
|
||||
JsonExecutionPayload::Fulu(payload) => Ok(ExecutionPayload::Fulu(payload.try_into()?)),
|
||||
JsonExecutionPayload::Eip7805(payload) => {
|
||||
Ok(ExecutionPayload::Eip7805(payload.try_into()?))
|
||||
}
|
||||
JsonExecutionPayload::Gloas(payload) => {
|
||||
Ok(ExecutionPayload::Gloas(payload.try_into()?))
|
||||
}
|
||||
JsonExecutionPayload::Heze(payload) => {
|
||||
Ok(ExecutionPayload::Heze(payload.try_into()?))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -631,7 +635,7 @@ impl<E: EthSpec> TryFrom<JsonExecutionRequests> for ExecutionRequests<E> {
|
||||
}
|
||||
|
||||
#[superstruct(
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Eip7805, Gloas),
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Gloas, Heze),
|
||||
variant_attributes(
|
||||
derive(Debug, PartialEq, Serialize, Deserialize),
|
||||
serde(bound = "E: EthSpec", rename_all = "camelCase")
|
||||
@@ -655,17 +659,17 @@ pub struct JsonGetPayloadResponse<E: EthSpec> {
|
||||
pub execution_payload: JsonExecutionPayloadElectra<E>,
|
||||
#[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))]
|
||||
pub execution_payload: JsonExecutionPayloadFulu<E>,
|
||||
#[superstruct(only(Eip7805), partial_getter(rename = "execution_payload_eip7805"))]
|
||||
pub execution_payload: JsonExecutionPayloadEip7805<E>,
|
||||
#[superstruct(only(Gloas), partial_getter(rename = "execution_payload_gloas"))]
|
||||
pub execution_payload: JsonExecutionPayloadGloas<E>,
|
||||
#[superstruct(only(Heze), partial_getter(rename = "execution_payload_heze"))]
|
||||
pub execution_payload: JsonExecutionPayloadHeze<E>,
|
||||
#[serde(with = "serde_utils::u256_hex_be")]
|
||||
pub block_value: Uint256,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
pub blobs_bundle: JsonBlobsBundleV1<E>,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
pub should_override_builder: bool,
|
||||
#[superstruct(only(Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Electra, Fulu, Gloas, Heze))]
|
||||
pub execution_requests: JsonExecutionRequests,
|
||||
}
|
||||
|
||||
@@ -723,8 +727,8 @@ impl<E: EthSpec> TryFrom<JsonGetPayloadResponse<E>> for GetPayloadResponse<E> {
|
||||
})?,
|
||||
}))
|
||||
}
|
||||
JsonGetPayloadResponse::Eip7805(response) => {
|
||||
Ok(GetPayloadResponse::Eip7805(GetPayloadResponseEip7805 {
|
||||
JsonGetPayloadResponse::Gloas(response) => {
|
||||
Ok(GetPayloadResponse::Gloas(GetPayloadResponseGloas {
|
||||
execution_payload: response.execution_payload.try_into().map_err(|e| {
|
||||
format!("Failed to convert json to execution payload: {:?}", e)
|
||||
})?,
|
||||
@@ -736,8 +740,8 @@ impl<E: EthSpec> TryFrom<JsonGetPayloadResponse<E>> for GetPayloadResponse<E> {
|
||||
})?,
|
||||
}))
|
||||
}
|
||||
JsonGetPayloadResponse::Gloas(response) => {
|
||||
Ok(GetPayloadResponse::Gloas(GetPayloadResponseGloas {
|
||||
JsonGetPayloadResponse::Heze(response) => {
|
||||
Ok(GetPayloadResponse::Heze(GetPayloadResponseHeze {
|
||||
execution_payload: response.execution_payload.try_into().map_err(|e| {
|
||||
format!("Failed to convert json to execution payload: {:?}", e)
|
||||
})?,
|
||||
|
||||
@@ -9,12 +9,12 @@ use types::{
|
||||
};
|
||||
use types::{
|
||||
ExecutionPayloadBellatrix, ExecutionPayloadCapella, ExecutionPayloadDeneb,
|
||||
ExecutionPayloadEip7805, ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionPayloadGloas,
|
||||
ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionPayloadGloas, ExecutionPayloadHeze,
|
||||
ExecutionRequests, Transactions,
|
||||
};
|
||||
|
||||
#[superstruct(
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Eip7805, Gloas),
|
||||
variants(Bellatrix, Capella, Deneb, Electra, Fulu, Gloas, Heze),
|
||||
variant_attributes(derive(Clone, Debug, PartialEq),),
|
||||
map_into(ExecutionPayload),
|
||||
map_ref_into(ExecutionPayloadRef),
|
||||
@@ -42,17 +42,17 @@ pub struct NewPayloadRequest<'block, E: EthSpec> {
|
||||
pub execution_payload: &'block ExecutionPayloadElectra<E>,
|
||||
#[superstruct(only(Fulu), partial_getter(rename = "execution_payload_fulu"))]
|
||||
pub execution_payload: &'block ExecutionPayloadFulu<E>,
|
||||
#[superstruct(only(Eip7805), partial_getter(rename = "execution_payload_eip7805"))]
|
||||
pub execution_payload: &'block ExecutionPayloadEip7805<E>,
|
||||
#[superstruct(only(Gloas), partial_getter(rename = "execution_payload_gloas"))]
|
||||
pub execution_payload: &'block ExecutionPayloadGloas<E>,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Heze), partial_getter(rename = "execution_payload_heze"))]
|
||||
pub execution_payload: &'block ExecutionPayloadHeze<E>,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
pub versioned_hashes: Vec<VersionedHash>,
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Deneb, Electra, Fulu, Gloas, Heze))]
|
||||
pub parent_beacon_block_root: Hash256,
|
||||
#[superstruct(only(Electra, Fulu, Eip7805, Gloas))]
|
||||
#[superstruct(only(Electra, Fulu, Gloas, Heze))]
|
||||
pub execution_requests: &'block ExecutionRequests<E>,
|
||||
#[superstruct(only(Eip7805, Gloas))]
|
||||
#[superstruct(only(Heze, Gloas))]
|
||||
pub il_transactions: Transactions<E>,
|
||||
}
|
||||
|
||||
@@ -63,9 +63,9 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> {
|
||||
Self::Capella(payload) => payload.execution_payload.parent_hash,
|
||||
Self::Deneb(payload) => payload.execution_payload.parent_hash,
|
||||
Self::Electra(payload) => payload.execution_payload.parent_hash,
|
||||
Self::Eip7805(payload) => payload.execution_payload.parent_hash,
|
||||
Self::Fulu(payload) => payload.execution_payload.parent_hash,
|
||||
Self::Gloas(payload) => payload.execution_payload.parent_hash,
|
||||
Self::Heze(payload) => payload.execution_payload.parent_hash,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,9 +75,9 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> {
|
||||
Self::Capella(payload) => payload.execution_payload.block_hash,
|
||||
Self::Deneb(payload) => payload.execution_payload.block_hash,
|
||||
Self::Electra(payload) => payload.execution_payload.block_hash,
|
||||
Self::Eip7805(payload) => payload.execution_payload.block_hash,
|
||||
Self::Fulu(payload) => payload.execution_payload.block_hash,
|
||||
Self::Gloas(payload) => payload.execution_payload.block_hash,
|
||||
Self::Heze(payload) => payload.execution_payload.block_hash,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,9 +87,9 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> {
|
||||
Self::Capella(payload) => payload.execution_payload.block_number,
|
||||
Self::Deneb(payload) => payload.execution_payload.block_number,
|
||||
Self::Electra(payload) => payload.execution_payload.block_number,
|
||||
Self::Eip7805(payload) => payload.execution_payload.block_number,
|
||||
Self::Fulu(payload) => payload.execution_payload.block_number,
|
||||
Self::Gloas(payload) => payload.execution_payload.block_number,
|
||||
Self::Heze(payload) => payload.execution_payload.block_number,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,9 +99,9 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> {
|
||||
Self::Capella(request) => ExecutionPayloadRef::Capella(request.execution_payload),
|
||||
Self::Deneb(request) => ExecutionPayloadRef::Deneb(request.execution_payload),
|
||||
Self::Electra(request) => ExecutionPayloadRef::Electra(request.execution_payload),
|
||||
Self::Eip7805(request) => ExecutionPayloadRef::Eip7805(request.execution_payload),
|
||||
Self::Fulu(request) => ExecutionPayloadRef::Fulu(request.execution_payload),
|
||||
Self::Gloas(request) => ExecutionPayloadRef::Gloas(request.execution_payload),
|
||||
Self::Heze(request) => ExecutionPayloadRef::Heze(request.execution_payload),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,9 +113,9 @@ impl<'block, E: EthSpec> NewPayloadRequest<'block, E> {
|
||||
Self::Capella(request) => ExecutionPayload::Capella(request.execution_payload.clone()),
|
||||
Self::Deneb(request) => ExecutionPayload::Deneb(request.execution_payload.clone()),
|
||||
Self::Electra(request) => ExecutionPayload::Electra(request.execution_payload.clone()),
|
||||
Self::Eip7805(request) => ExecutionPayload::Eip7805(request.execution_payload.clone()),
|
||||
Self::Fulu(request) => ExecutionPayload::Fulu(request.execution_payload.clone()),
|
||||
Self::Gloas(request) => ExecutionPayload::Gloas(request.execution_payload.clone()),
|
||||
Self::Heze(request) => ExecutionPayload::Heze(request.execution_payload.clone()),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,18 +232,6 @@ impl<'a, E: EthSpec> NewPayloadRequest<'a, E> {
|
||||
parent_beacon_block_root: block_ref.parent_root,
|
||||
execution_requests: &block_ref.body.execution_requests,
|
||||
})),
|
||||
BeaconBlockRef::Eip7805(block_ref) => Ok(Self::Eip7805(NewPayloadRequestEip7805 {
|
||||
execution_payload: &block_ref.body.execution_payload.execution_payload,
|
||||
versioned_hashes: block_ref
|
||||
.body
|
||||
.blob_kzg_commitments
|
||||
.iter()
|
||||
.map(kzg_commitment_to_versioned_hash)
|
||||
.collect(),
|
||||
parent_beacon_block_root: block_ref.parent_root,
|
||||
execution_requests: &block_ref.body.execution_requests,
|
||||
il_transactions,
|
||||
})),
|
||||
_ => Err(BeaconStateError::IncorrectStateVariant),
|
||||
}
|
||||
}
|
||||
@@ -298,19 +286,9 @@ impl<'a, E: EthSpec> TryFrom<BeaconBlockRef<'a, E>> for NewPayloadRequest<'a, E>
|
||||
parent_beacon_block_root: block_ref.parent_root,
|
||||
execution_requests: &block_ref.body.execution_requests,
|
||||
})),
|
||||
BeaconBlockRef::Eip7805(block_ref) => Ok(Self::Eip7805(NewPayloadRequestEip7805 {
|
||||
execution_payload: &block_ref.body.execution_payload.execution_payload,
|
||||
versioned_hashes: block_ref
|
||||
.body
|
||||
.blob_kzg_commitments
|
||||
.iter()
|
||||
.map(kzg_commitment_to_versioned_hash)
|
||||
.collect(),
|
||||
parent_beacon_block_root: block_ref.parent_root,
|
||||
execution_requests: &block_ref.body.execution_requests,
|
||||
il_transactions: vec![].try_into()?,
|
||||
})),
|
||||
BeaconBlockRef::Gloas(_) => Err(Self::Error::IncorrectStateVariant),
|
||||
BeaconBlockRef::Gloas(_) | BeaconBlockRef::Heze(_) => {
|
||||
Err(Self::Error::IncorrectStateVariant)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -330,7 +308,7 @@ impl<'a, E: EthSpec> TryFrom<ExecutionPayloadRef<'a, E>> for NewPayloadRequest<'
|
||||
})),
|
||||
ExecutionPayloadRef::Deneb(_) => Err(Self::Error::IncorrectStateVariant),
|
||||
ExecutionPayloadRef::Electra(_) => Err(Self::Error::IncorrectStateVariant),
|
||||
ExecutionPayloadRef::Eip7805(_) => Err(Self::Error::IncorrectStateVariant),
|
||||
ExecutionPayloadRef::Heze(_) => Err(Self::Error::IncorrectStateVariant),
|
||||
ExecutionPayloadRef::Fulu(_) => Err(Self::Error::IncorrectStateVariant),
|
||||
//TODO(EIP7732): Probably time to just get rid of this
|
||||
ExecutionPayloadRef::Gloas(_) => Err(Self::Error::IncorrectStateVariant),
|
||||
|
||||
@@ -45,6 +45,7 @@ use tokio_stream::wrappers::WatchStream;
|
||||
use tracing::{Instrument, debug, debug_span, error, info, instrument, warn};
|
||||
use tree_hash::TreeHash;
|
||||
use types::ExecutionPayloadGloas;
|
||||
use types::ExecutionPayloadHeze;
|
||||
use types::builder::BuilderBid;
|
||||
use types::execution::BlockProductionVersion;
|
||||
use types::kzg_ext::KzgCommitments;
|
||||
@@ -54,7 +55,7 @@ use types::{
|
||||
};
|
||||
use types::{
|
||||
BeaconStateError, BlindedPayload, ChainSpec, Epoch, ExecPayload, ExecutionPayloadBellatrix,
|
||||
ExecutionPayloadCapella, ExecutionPayloadEip7805, ExecutionPayloadElectra,
|
||||
ExecutionPayloadCapella, ExecutionPayloadElectra,
|
||||
ExecutionPayloadFulu, FullPayload, ProposerPreparationData, Slot,
|
||||
};
|
||||
|
||||
@@ -119,8 +120,8 @@ impl<E: EthSpec> TryFrom<BuilderBid<E>> for ProvenancedPayload<BlockProposalCont
|
||||
blobs_and_proofs: None,
|
||||
requests: Some(builder_bid.execution_requests),
|
||||
},
|
||||
BuilderBid::Eip7805(builder_bid) => BlockProposalContents::PayloadAndBlobs {
|
||||
payload: ExecutionPayloadHeader::Eip7805(builder_bid.header).into(),
|
||||
BuilderBid::Heze(builder_bid) => BlockProposalContents::PayloadAndBlobs {
|
||||
payload: ExecutionPayloadHeader::Heze(builder_bid.header).into(),
|
||||
block_value: builder_bid.value,
|
||||
kzg_commitments: builder_bid.blob_kzg_commitments,
|
||||
blobs_and_proofs: None,
|
||||
@@ -237,6 +238,26 @@ impl<E: EthSpec> From<GetPayloadResponseGloas<E>> for BlockProposalContentsGloas
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BlockProposalContentsHeze<E: EthSpec> {
|
||||
pub payload: ExecutionPayloadHeze<E>,
|
||||
pub payload_value: Uint256,
|
||||
pub blob_kzg_commitments: KzgCommitments<E>,
|
||||
pub blobs_and_proofs: (BlobsList<E>, KzgProofs<E>),
|
||||
pub execution_requests: ExecutionRequests<E>,
|
||||
}
|
||||
|
||||
impl<E: EthSpec> From<GetPayloadResponseHeze<E>> for BlockProposalContentsHeze<E> {
|
||||
fn from(response: GetPayloadResponseHeze<E>) -> Self {
|
||||
Self {
|
||||
payload: response.execution_payload,
|
||||
payload_value: response.block_value,
|
||||
blob_kzg_commitments: response.blobs_bundle.commitments,
|
||||
blobs_and_proofs: (response.blobs_bundle.blobs, response.blobs_bundle.proofs),
|
||||
execution_requests: response.requests,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub enum BlockProposalContents<E: EthSpec, Payload: AbstractExecPayload<E>> {
|
||||
Payload {
|
||||
payload: Payload,
|
||||
@@ -948,6 +969,44 @@ impl<E: EthSpec> ExecutionLayer<E> {
|
||||
Ok(payload_response.into())
|
||||
}
|
||||
|
||||
/// Maps to the `engine_getPayload` JSON-RPC call for post-Heze payload construction.
|
||||
///
|
||||
/// However, it will attempt to call `self.prepare_payload` if it cannot find an existing
|
||||
/// payload id for the given parameters.
|
||||
///
|
||||
/// ## Fallback Behavior
|
||||
///
|
||||
/// The result will be returned from the first node that returns successfully. No more nodes
|
||||
/// will be contacted.
|
||||
#[instrument(level = "debug", skip_all)]
|
||||
pub async fn get_payload_heze(
|
||||
&self,
|
||||
payload_parameters: PayloadParameters<'_>,
|
||||
) -> Result<BlockProposalContentsHeze<E>, Error> {
|
||||
let payload_response_type = self.get_full_payload_caching(payload_parameters).await?;
|
||||
let GetPayloadResponseType::Full(payload_response) = payload_response_type else {
|
||||
return Err(Error::Unexpected(
|
||||
"get_payload_heze should never return a blinded payload".to_owned(),
|
||||
));
|
||||
};
|
||||
let GetPayloadResponse::Heze(payload_response) = payload_response else {
|
||||
return Err(Error::Unexpected(
|
||||
"get_payload_heze should always return a heze `GetPayloadResponse` variant"
|
||||
.to_owned(),
|
||||
));
|
||||
};
|
||||
metrics::inc_counter_vec(
|
||||
&metrics::EXECUTION_LAYER_GET_PAYLOAD_OUTCOME,
|
||||
&[metrics::SUCCESS],
|
||||
);
|
||||
metrics::inc_counter_vec(
|
||||
&metrics::EXECUTION_LAYER_GET_PAYLOAD_SOURCE,
|
||||
&[metrics::LOCAL],
|
||||
);
|
||||
|
||||
Ok(payload_response.into())
|
||||
}
|
||||
|
||||
/// Maps to the `engine_getPayload` JSON-RPC call.
|
||||
///
|
||||
/// However, it will attempt to call `self.prepare_payload` if it cannot find an existing
|
||||
@@ -1702,7 +1761,7 @@ impl<E: EthSpec> ExecutionLayer<E> {
|
||||
ForkName::Capella => ExecutionPayloadCapella::default().into(),
|
||||
ForkName::Deneb => ExecutionPayloadDeneb::default().into(),
|
||||
ForkName::Electra => ExecutionPayloadElectra::default().into(),
|
||||
ForkName::Eip7805 => ExecutionPayloadEip7805::default().into(),
|
||||
ForkName::Heze => ExecutionPayloadHeze::default().into(),
|
||||
ForkName::Fulu => ExecutionPayloadFulu::default().into(),
|
||||
ForkName::Base | ForkName::Altair => {
|
||||
return Err(Error::InvalidForkForPayload);
|
||||
@@ -1710,6 +1769,9 @@ impl<E: EthSpec> ExecutionLayer<E> {
|
||||
ForkName::Gloas => {
|
||||
return Err(Error::InvalidForkForPayload);
|
||||
}
|
||||
ForkName::Heze => {
|
||||
return Err(Error::InvalidForkForPayload);
|
||||
}
|
||||
};
|
||||
return Ok(Some(payload));
|
||||
}
|
||||
|
||||
@@ -25,9 +25,9 @@ use tree_hash::TreeHash;
|
||||
use tree_hash_derive::TreeHash;
|
||||
use types::{
|
||||
Blob, ChainSpec, EthSpec, ExecutionBlockHash, ExecutionPayload, ExecutionPayloadBellatrix,
|
||||
ExecutionPayloadCapella, ExecutionPayloadDeneb, ExecutionPayloadEip7805,
|
||||
ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionPayloadGloas, ExecutionPayloadHeader,
|
||||
ExecutionRequests, ForkName, Hash256, KzgProofs, Transaction, Transactions, Uint256,
|
||||
ExecutionPayloadCapella, ExecutionPayloadDeneb, ExecutionPayloadElectra, ExecutionPayloadFulu,
|
||||
ExecutionPayloadGloas, ExecutionPayloadHeader, ExecutionPayloadHeze, ExecutionRequests,
|
||||
ForkName, Hash256, KzgProofs, Transaction, Transactions, Uint256,
|
||||
};
|
||||
|
||||
const TEST_BLOB_BUNDLE: &[u8] = include_bytes!("fixtures/mainnet/test_blobs_bundle.ssz");
|
||||
@@ -154,8 +154,8 @@ pub struct ExecutionBlockGenerator<E: EthSpec> {
|
||||
pub cancun_time: Option<u64>, // deneb
|
||||
pub prague_time: Option<u64>, // electra
|
||||
pub osaka_time: Option<u64>, // fulu
|
||||
pub eip7805_time: Option<u64>, // eip7805
|
||||
pub amsterdam_time: Option<u64>, // gloas
|
||||
pub heze_time: Option<u64>, // heze
|
||||
/*
|
||||
* deneb stuff
|
||||
*/
|
||||
@@ -184,9 +184,9 @@ impl<E: EthSpec> ExecutionBlockGenerator<E> {
|
||||
shanghai_time: Option<u64>,
|
||||
cancun_time: Option<u64>,
|
||||
prague_time: Option<u64>,
|
||||
eip7805_time: Option<u64>,
|
||||
osaka_time: Option<u64>,
|
||||
amsterdam_time: Option<u64>,
|
||||
heze_time: Option<u64>,
|
||||
kzg: Option<Arc<Kzg>>,
|
||||
) -> Self {
|
||||
let mut generator = Self {
|
||||
@@ -204,9 +204,9 @@ impl<E: EthSpec> ExecutionBlockGenerator<E> {
|
||||
shanghai_time,
|
||||
cancun_time,
|
||||
prague_time,
|
||||
eip7805_time,
|
||||
osaka_time,
|
||||
amsterdam_time,
|
||||
heze_time,
|
||||
blobs_bundles: <_>::default(),
|
||||
kzg,
|
||||
rng: make_rng(),
|
||||
@@ -258,8 +258,9 @@ impl<E: EthSpec> ExecutionBlockGenerator<E> {
|
||||
|
||||
pub fn get_fork_at_timestamp(&self, timestamp: u64) -> ForkName {
|
||||
let forks = [
|
||||
(self.heze_time, ForkName::Heze),
|
||||
(self.amsterdam_time, ForkName::Gloas),
|
||||
(self.eip7805_time, ForkName::Eip7805),
|
||||
(self.heze_time, ForkName::Heze),
|
||||
(self.osaka_time, ForkName::Fulu),
|
||||
(self.prague_time, ForkName::Electra),
|
||||
(self.cancun_time, ForkName::Deneb),
|
||||
@@ -758,7 +759,10 @@ impl<E: EthSpec> ExecutionBlockGenerator<E> {
|
||||
blob_gas_used: 0,
|
||||
excess_blob_gas: 0,
|
||||
}),
|
||||
ForkName::Eip7805 => ExecutionPayload::Eip7805(ExecutionPayloadEip7805 {
|
||||
_ => unreachable!(),
|
||||
},
|
||||
PayloadAttributes::V4(pa) => match self.get_fork_at_timestamp(pa.timestamp) {
|
||||
ForkName::Gloas => ExecutionPayload::Gloas(ExecutionPayloadGloas {
|
||||
parent_hash: head_block_hash,
|
||||
fee_recipient: pa.suggested_fee_recipient,
|
||||
receipts_root: Hash256::repeat_byte(42),
|
||||
@@ -769,18 +773,17 @@ impl<E: EthSpec> ExecutionBlockGenerator<E> {
|
||||
gas_limit: DEFAULT_GAS_LIMIT,
|
||||
gas_used: GAS_USED,
|
||||
timestamp: pa.timestamp,
|
||||
extra_data: mock_el_extra_data::<E>(),
|
||||
extra_data: "block gen was here".as_bytes().to_vec().try_into().unwrap(),
|
||||
base_fee_per_gas: Uint256::from(1u64),
|
||||
block_hash: ExecutionBlockHash::zero(),
|
||||
transactions: vec![].try_into().unwrap(),
|
||||
withdrawals: pa.withdrawals.clone().try_into().unwrap(),
|
||||
blob_gas_used: 0,
|
||||
excess_blob_gas: 0,
|
||||
block_access_list: VariableList::empty(),
|
||||
slot_number: pa.slot_number.into(),
|
||||
}),
|
||||
_ => unreachable!(),
|
||||
},
|
||||
PayloadAttributes::V4(pa) => match self.get_fork_at_timestamp(pa.timestamp) {
|
||||
ForkName::Gloas => ExecutionPayload::Gloas(ExecutionPayloadGloas {
|
||||
ForkName::Heze => ExecutionPayload::Heze(ExecutionPayloadHeze {
|
||||
parent_hash: head_block_hash,
|
||||
fee_recipient: pa.suggested_fee_recipient,
|
||||
receipts_root: Hash256::repeat_byte(42),
|
||||
@@ -978,8 +981,8 @@ pub fn generate_genesis_header<E: EthSpec>(spec: &ChainSpec) -> Option<Execution
|
||||
*header.transactions_root_mut() = empty_transactions_root;
|
||||
Some(header)
|
||||
}
|
||||
ForkName::Eip7805 => {
|
||||
let mut header = ExecutionPayloadHeader::Eip7805(<_>::default());
|
||||
ForkName::Heze => {
|
||||
let mut header = ExecutionPayloadHeader::Heze(<_>::default());
|
||||
*header.block_hash_mut() = genesis_block_hash.unwrap_or_default();
|
||||
*header.transactions_root_mut() = empty_transactions_root;
|
||||
Some(header)
|
||||
@@ -998,6 +1001,14 @@ pub fn generate_genesis_header<E: EthSpec>(spec: &ChainSpec) -> Option<Execution
|
||||
*header.transactions_root_mut() = empty_transactions_root;
|
||||
Some(header)
|
||||
}
|
||||
ForkName::Heze => {
|
||||
// TODO(heze): we are using a Fulu header for now, but this gets fixed up by the
|
||||
// genesis builder anyway which translates it to bid/latest_block_hash.
|
||||
let mut header = ExecutionPayloadHeader::Fulu(<_>::default());
|
||||
*header.block_hash_mut() = genesis_block_hash.unwrap_or_default();
|
||||
*header.transactions_root_mut() = empty_transactions_root;
|
||||
Some(header)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -127,9 +127,16 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
.map(|jep| JsonExecutionPayload::Electra(jep))
|
||||
})
|
||||
.map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?,
|
||||
ENGINE_NEW_PAYLOAD_V5 => get_param::<JsonExecutionPayloadGloas<E>>(params, 0)
|
||||
.map(|jep| JsonExecutionPayload::Gloas(jep))
|
||||
.map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?,
|
||||
ENGINE_NEW_PAYLOAD_V5 => {
|
||||
// Try Heze first, fall back to Gloas
|
||||
get_param::<JsonExecutionPayloadHeze<E>>(params, 0)
|
||||
.map(|jep| JsonExecutionPayload::Heze(jep))
|
||||
.or_else(|_| {
|
||||
get_param::<JsonExecutionPayloadGloas<E>>(params, 0)
|
||||
.map(|jep| JsonExecutionPayload::Gloas(jep))
|
||||
})
|
||||
.map_err(|s| (s, BAD_PARAMS_ERROR_CODE))?
|
||||
}
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
@@ -193,7 +200,7 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
));
|
||||
}
|
||||
}
|
||||
ForkName::Electra | ForkName::Fulu | ForkName::Eip7805 | ForkName::Gloas => {
|
||||
ForkName::Electra | ForkName::Fulu | ForkName::Heze | ForkName::Gloas => {
|
||||
if method == ENGINE_NEW_PAYLOAD_V1
|
||||
|| method == ENGINE_NEW_PAYLOAD_V2
|
||||
|| method == ENGINE_NEW_PAYLOAD_V3
|
||||
@@ -239,6 +246,14 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
));
|
||||
}
|
||||
}
|
||||
ForkName::Heze => {
|
||||
if method != ENGINE_NEW_PAYLOAD_V5 {
|
||||
return Err((
|
||||
format!("{} called after Heze fork!", method),
|
||||
GENERIC_ERROR_CODE,
|
||||
));
|
||||
}
|
||||
}
|
||||
_ => unreachable!(),
|
||||
};
|
||||
|
||||
@@ -377,6 +392,24 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
));
|
||||
}
|
||||
|
||||
// validate method called correctly according to heze fork time
|
||||
if ctx
|
||||
.execution_block_generator
|
||||
.read()
|
||||
.get_fork_at_timestamp(response.timestamp())
|
||||
== ForkName::Heze
|
||||
&& (method == ENGINE_GET_PAYLOAD_V1
|
||||
|| method == ENGINE_GET_PAYLOAD_V2
|
||||
|| method == ENGINE_GET_PAYLOAD_V3
|
||||
|| method == ENGINE_GET_PAYLOAD_V4
|
||||
|| method == ENGINE_GET_PAYLOAD_V5)
|
||||
{
|
||||
return Err((
|
||||
format!("{} called after Heze fork!", method),
|
||||
FORK_REQUEST_MISMATCH_ERROR_CODE,
|
||||
));
|
||||
}
|
||||
|
||||
match method {
|
||||
ENGINE_GET_PAYLOAD_V1 => Ok(serde_json::to_value(
|
||||
JsonExecutionPayload::try_from(response).unwrap(),
|
||||
@@ -466,8 +499,8 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
})
|
||||
.unwrap()
|
||||
}
|
||||
JsonExecutionPayload::Eip7805(execution_payload) => {
|
||||
serde_json::to_value(JsonGetPayloadResponseEip7805 {
|
||||
JsonExecutionPayload::Heze(execution_payload) => {
|
||||
serde_json::to_value(JsonGetPayloadResponseHeze {
|
||||
execution_payload,
|
||||
block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI),
|
||||
blobs_bundle: maybe_blobs
|
||||
@@ -503,6 +536,23 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
})
|
||||
.unwrap()
|
||||
}
|
||||
JsonExecutionPayload::Heze(execution_payload) => {
|
||||
serde_json::to_value(JsonGetPayloadResponseHeze {
|
||||
execution_payload,
|
||||
block_value: Uint256::from(DEFAULT_MOCK_EL_PAYLOAD_VALUE_WEI),
|
||||
blobs_bundle: maybe_blobs
|
||||
.ok_or((
|
||||
"No blobs returned despite V6 Payload".to_string(),
|
||||
GENERIC_ERROR_CODE,
|
||||
))?
|
||||
.into(),
|
||||
should_override_builder: false,
|
||||
execution_requests: maybe_execution_requests
|
||||
.unwrap_or_default()
|
||||
.into(),
|
||||
})
|
||||
.unwrap()
|
||||
}
|
||||
_ => unreachable!(),
|
||||
})
|
||||
}
|
||||
@@ -649,7 +699,7 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
ForkName::Deneb
|
||||
| ForkName::Electra
|
||||
| ForkName::Fulu
|
||||
| ForkName::Eip7805
|
||||
| ForkName::Heze
|
||||
| ForkName::Gloas => {
|
||||
if method == ENGINE_FORKCHOICE_UPDATED_V1 {
|
||||
return Err((
|
||||
@@ -672,6 +722,14 @@ pub async fn handle_rpc<E: EthSpec>(
|
||||
));
|
||||
}
|
||||
}
|
||||
ForkName::Heze => {
|
||||
if method != ENGINE_FORKCHOICE_UPDATED_V4 {
|
||||
return Err((
|
||||
format!("{} called after Heze fork! Use V4.", method),
|
||||
FORK_REQUEST_MISMATCH_ERROR_CODE,
|
||||
));
|
||||
}
|
||||
}
|
||||
_ => unreachable!(),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ use tracing::{debug, error, info, warn};
|
||||
use tree_hash::TreeHash;
|
||||
use types::ExecutionBlockHash;
|
||||
use types::builder::{
|
||||
BuilderBid, BuilderBidBellatrix, BuilderBidCapella, BuilderBidDeneb, BuilderBidEip7805,
|
||||
BuilderBid, BuilderBidBellatrix, BuilderBidCapella, BuilderBidDeneb, BuilderBidHeze,
|
||||
BuilderBidElectra, BuilderBidFulu, SignedBuilderBid,
|
||||
};
|
||||
use types::{
|
||||
@@ -114,7 +114,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
ExecutionPayloadHeaderRefMut::Electra(header) => {
|
||||
header.fee_recipient = fee_recipient;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.fee_recipient = fee_recipient;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Fulu(header) => {
|
||||
@@ -137,7 +137,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
ExecutionPayloadHeaderRefMut::Electra(header) => {
|
||||
header.gas_limit = gas_limit;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.gas_limit = gas_limit;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Fulu(header) => {
|
||||
@@ -164,7 +164,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
ExecutionPayloadHeaderRefMut::Electra(header) => {
|
||||
header.parent_hash = ExecutionBlockHash::from_root(parent_hash);
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.parent_hash = ExecutionBlockHash::from_root(parent_hash);
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Fulu(header) => {
|
||||
@@ -187,7 +187,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
ExecutionPayloadHeaderRefMut::Electra(header) => {
|
||||
header.prev_randao = prev_randao;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.prev_randao = prev_randao;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Fulu(header) => {
|
||||
@@ -210,7 +210,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
ExecutionPayloadHeaderRefMut::Electra(header) => {
|
||||
header.block_number = block_number;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.block_number = block_number;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Fulu(header) => {
|
||||
@@ -233,7 +233,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
ExecutionPayloadHeaderRefMut::Electra(header) => {
|
||||
header.timestamp = timestamp;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.timestamp = timestamp;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Fulu(header) => {
|
||||
@@ -256,7 +256,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
ExecutionPayloadHeaderRefMut::Electra(header) => {
|
||||
header.withdrawals_root = withdrawals_root;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.withdrawals_root = withdrawals_root;
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Fulu(header) => {
|
||||
@@ -291,7 +291,7 @@ impl<E: EthSpec> BidStuff<E> for BuilderBid<E> {
|
||||
header.extra_data = extra_data;
|
||||
header.block_hash = ExecutionBlockHash::from_root(header.tree_hash_root());
|
||||
}
|
||||
ExecutionPayloadHeaderRefMut::Eip7805(header) => {
|
||||
ExecutionPayloadHeaderRefMut::Heze(header) => {
|
||||
header.extra_data = extra_data;
|
||||
header.block_hash = ExecutionBlockHash::from_root(header.tree_hash_root());
|
||||
}
|
||||
@@ -493,9 +493,6 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
SignedBlindedBeaconBlock::Electra(block) => {
|
||||
block.message.body.execution_payload.tree_hash_root()
|
||||
}
|
||||
SignedBlindedBeaconBlock::Eip7805(block) => {
|
||||
block.message.body.execution_payload.tree_hash_root()
|
||||
}
|
||||
SignedBlindedBeaconBlock::Fulu(block) => {
|
||||
block.message.body.execution_payload.tree_hash_root()
|
||||
}
|
||||
@@ -503,6 +500,10 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
// TODO(EIP7732) Check if this is how we want to do error handling for gloas
|
||||
return Err("invalid fork".to_string());
|
||||
}
|
||||
SignedBlindedBeaconBlock::Heze(_) => {
|
||||
// TODO(EIP7732) Check if this is how we want to do error handling for heze
|
||||
return Err("invalid fork".to_string());
|
||||
}
|
||||
};
|
||||
let block_hash = block
|
||||
.message()
|
||||
@@ -621,6 +622,10 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
// TODO(EIP7732) Check if this is how we want to do error handling for gloas
|
||||
return Err("invalid fork".to_string());
|
||||
}
|
||||
ForkName::Heze => {
|
||||
// TODO(EIP7732) Check if this is how we want to do error handling for heze
|
||||
return Err("invalid fork".to_string());
|
||||
}
|
||||
ForkName::Fulu => BuilderBid::Fulu(BuilderBidFulu {
|
||||
header: payload
|
||||
.as_fulu()
|
||||
@@ -633,9 +638,9 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
pubkey: self.builder_sk.public_key().compress(),
|
||||
execution_requests: maybe_requests.unwrap_or_default(),
|
||||
}),
|
||||
ForkName::Eip7805 => BuilderBid::Eip7805(BuilderBidEip7805 {
|
||||
ForkName::Heze => BuilderBid::Heze(BuilderBidHeze {
|
||||
header: payload
|
||||
.as_eip7805()
|
||||
.as_heze()
|
||||
.map_err(|_| "incorrect payload variant".to_string())?
|
||||
.into(),
|
||||
blob_kzg_commitments: maybe_blobs_bundle
|
||||
@@ -944,17 +949,15 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
None,
|
||||
None,
|
||||
),
|
||||
ForkName::Deneb | ForkName::Electra | ForkName::Fulu | ForkName::Eip7805 => {
|
||||
PayloadAttributes::new(
|
||||
timestamp,
|
||||
*prev_randao,
|
||||
fee_recipient,
|
||||
expected_withdrawals,
|
||||
Some(head_block_root),
|
||||
None,
|
||||
)
|
||||
}
|
||||
ForkName::Gloas => PayloadAttributes::new(
|
||||
ForkName::Deneb | ForkName::Electra | ForkName::Fulu => PayloadAttributes::new(
|
||||
timestamp,
|
||||
*prev_randao,
|
||||
fee_recipient,
|
||||
expected_withdrawals,
|
||||
Some(head_block_root),
|
||||
None,
|
||||
),
|
||||
ForkName::Gloas | ForkName::Heze => PayloadAttributes::new(
|
||||
timestamp,
|
||||
*prev_randao,
|
||||
fee_recipient,
|
||||
|
||||
@@ -37,9 +37,9 @@ impl<E: EthSpec> MockExecutionLayer<E> {
|
||||
shanghai_time: Option<u64>,
|
||||
cancun_time: Option<u64>,
|
||||
prague_time: Option<u64>,
|
||||
eip7805_time: Option<u64>,
|
||||
osaka_time: Option<u64>,
|
||||
amsterdam_time: Option<u64>,
|
||||
heze_time: Option<u64>,
|
||||
jwt_key: Option<JwtKey>,
|
||||
spec: Arc<ChainSpec>,
|
||||
kzg: Option<Arc<Kzg>>,
|
||||
@@ -53,9 +53,9 @@ impl<E: EthSpec> MockExecutionLayer<E> {
|
||||
shanghai_time,
|
||||
cancun_time,
|
||||
prague_time,
|
||||
eip7805_time,
|
||||
osaka_time,
|
||||
amsterdam_time,
|
||||
heze_time,
|
||||
kzg,
|
||||
);
|
||||
|
||||
|
||||
@@ -85,9 +85,9 @@ pub struct MockExecutionConfig {
|
||||
pub shanghai_time: Option<u64>,
|
||||
pub cancun_time: Option<u64>,
|
||||
pub prague_time: Option<u64>,
|
||||
pub eip7805_time: Option<u64>,
|
||||
pub osaka_time: Option<u64>,
|
||||
pub amsterdam_time: Option<u64>,
|
||||
pub heze_time: Option<u64>,
|
||||
}
|
||||
|
||||
impl Default for MockExecutionConfig {
|
||||
@@ -98,9 +98,9 @@ impl Default for MockExecutionConfig {
|
||||
shanghai_time: None,
|
||||
cancun_time: None,
|
||||
prague_time: None,
|
||||
eip7805_time: None,
|
||||
osaka_time: None,
|
||||
amsterdam_time: None,
|
||||
heze_time: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -120,9 +120,9 @@ impl<E: EthSpec> MockServer<E> {
|
||||
None, // FIXME(capella): should this be the default?
|
||||
None, // FIXME(deneb): should this be the default?
|
||||
None, // FIXME(electra): should this be the default?
|
||||
None,
|
||||
None, // FIXME(fulu): should this be the default?
|
||||
None, // FIXME(gloas): should this be the default?
|
||||
None, // FIXME(heze): should this be the default?
|
||||
None,
|
||||
)
|
||||
}
|
||||
@@ -139,9 +139,9 @@ impl<E: EthSpec> MockServer<E> {
|
||||
shanghai_time,
|
||||
cancun_time,
|
||||
prague_time,
|
||||
eip7805_time,
|
||||
osaka_time,
|
||||
amsterdam_time,
|
||||
heze_time,
|
||||
} = config;
|
||||
let last_echo_request = Arc::new(RwLock::new(None));
|
||||
let preloaded_responses = Arc::new(Mutex::new(vec![]));
|
||||
@@ -149,9 +149,9 @@ impl<E: EthSpec> MockServer<E> {
|
||||
shanghai_time,
|
||||
cancun_time,
|
||||
prague_time,
|
||||
eip7805_time,
|
||||
osaka_time,
|
||||
amsterdam_time,
|
||||
heze_time,
|
||||
kzg,
|
||||
);
|
||||
|
||||
@@ -211,9 +211,9 @@ impl<E: EthSpec> MockServer<E> {
|
||||
shanghai_time: Option<u64>,
|
||||
cancun_time: Option<u64>,
|
||||
prague_time: Option<u64>,
|
||||
eip7805_time: Option<u64>,
|
||||
osaka_time: Option<u64>,
|
||||
amsterdam_time: Option<u64>,
|
||||
heze_time: Option<u64>,
|
||||
kzg: Option<Arc<Kzg>>,
|
||||
) -> Self {
|
||||
Self::new_with_config(
|
||||
@@ -224,9 +224,9 @@ impl<E: EthSpec> MockServer<E> {
|
||||
shanghai_time,
|
||||
cancun_time,
|
||||
prague_time,
|
||||
eip7805_time,
|
||||
osaka_time,
|
||||
amsterdam_time,
|
||||
heze_time,
|
||||
},
|
||||
kzg,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user