Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
refcell committed May 29, 2024
1 parent 68f4b16 commit 980aa1a
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 70 deletions.
18 changes: 17 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 7 additions & 2 deletions crates/derive/src/online/alloy_providers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,9 @@ impl<T: Provider<Http<reqwest::Client>>> L2ChainProvider for AlloyL2ChainProvide
}

let payload = self.payload_by_number(number).await?;
let l2_block_info = payload.to_l2_block_ref(self.rollup_config.as_ref())?;
let Ok(l2_block_info) = payload.to_l2_block_ref(self.rollup_config.as_ref()) else {
anyhow::bail!("Failed to convert payload to L2 block info")
};
self.l2_block_info_by_number_cache.put(number, l2_block_info);
Ok(l2_block_info)
}
Expand Down Expand Up @@ -226,6 +228,9 @@ impl<T: Provider<Http<reqwest::Client>>> L2ChainProvider for AlloyL2ChainProvide
}

let envelope = self.payload_by_number(number).await?;
envelope.to_system_config(&rollup_config)
match envelope.to_system_config(&rollup_config) {
Ok(system_config) => Ok(system_config),
Err(e) => anyhow::bail!("Failed to convert payload to system config: {:?}", e),
}
}
}
13 changes: 10 additions & 3 deletions crates/derive/src/stages/attributes_queue/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,11 @@ where
));
}
let receipts = self.receipts_fetcher.receipts_by_hash(epoch.hash).await?;
sys_config.update_with_receipts(&receipts, &self.rollup_cfg, header.timestamp)?;
if let Err(e) =
sys_config.update_with_receipts(&receipts, &self.rollup_cfg, header.timestamp)
{
return Err(BuilderError::Custom(anyhow::anyhow!(e)));
}
let deposits =
derive_deposits(epoch.hash, receipts, self.rollup_cfg.deposit_contract_address)
.await?;
Expand Down Expand Up @@ -126,13 +130,16 @@ where
}

// Build and encode the L1 info transaction for the current payload.
let (_, l1_info_tx_envelope) = L1BlockInfoTx::try_new_with_deposit_tx(
let (_, l1_info_tx_envelope) = match L1BlockInfoTx::try_new_with_deposit_tx(
&self.rollup_cfg,
&sys_config,
sequence_number,
&l1_header,
next_l2_time,
)?;
) {
Ok(tx) => tx,
Err(e) => return Err(BuilderError::Custom(anyhow::anyhow!(e))),
};
let mut encoded_l1_info_tx = Vec::with_capacity(l1_info_tx_envelope.length());
l1_info_tx_envelope.encode(&mut encoded_l1_info_tx);

Expand Down
2 changes: 1 addition & 1 deletion crates/derive/src/stages/l1_traversal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ impl<F: ChainProvider + Send> OriginAdvancer for L1Traversal<F> {
&self.rollup_config,
next_l1_origin.timestamp,
) {
return Err(StageError::SystemConfigUpdate(e));
return Err(StageError::SystemConfigUpdate(anyhow::anyhow!(e)));
}

self.block = Some(next_l1_origin);
Expand Down
2 changes: 1 addition & 1 deletion crates/primitives/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ repository.workspace = true
homepage.workspace = true

[dependencies]
anyhow.workspace = true
eyre = "0.6"
alloy-consensus.workspace = true
alloy-rlp = { workspace = true, features = ["derive"] }
alloy-primitives = { workspace = true, features = ["rlp"] }
Expand Down
46 changes: 24 additions & 22 deletions crates/primitives/src/block_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use super::{BlockID, DepositSourceDomain, L1InfoDepositSource, RollupConfig, Sys
use alloc::vec::Vec;
use alloy_consensus::Header;
use alloy_primitives::{address, Address, Bytes, TxKind, B256, U256};
use anyhow::{anyhow, Result};
use eyre::Result;
use op_alloy_consensus::{OpTxEnvelope, TxDeposit};

/// The system transaction gas limit post-Regolith
Expand Down Expand Up @@ -129,18 +129,18 @@ impl L1BlockInfoTx {
let scalar = system_config.l1_fee_scalar.to_be_bytes::<32>();
let blob_base_fee_scalar = (scalar[0] == L1_SCALAR_ECOTONE)
.then(|| {
Ok(u32::from_be_bytes(
Ok::<u32, eyre::Error>(u32::from_be_bytes(
scalar[24..28]
.try_into()
.map_err(|_| anyhow!("Failed to parse L1 blob base fee scalar"))?,
.map_err(|_| eyre::eyre!("Failed to parse L1 blob base fee scalar"))?,
))
})
.transpose()?
.unwrap_or_default();
let base_fee_scalar = u32::from_be_bytes(
scalar[28..32]
.try_into()
.map_err(|_| anyhow!("Failed to parse base fee scalar"))?,
.map_err(|_| eyre::eyre!("Failed to parse base fee scalar"))?,
);
Ok(Self::Ecotone(L1BlockInfoEcotone {
number: l1_header.number,
Expand Down Expand Up @@ -219,7 +219,7 @@ impl L1BlockInfoTx {
L1_INFO_TX_SELECTOR_ECOTONE => {
Ok(Self::Ecotone(L1BlockInfoEcotone::decode_calldata(r)?))
}
_ => anyhow::bail!("Unreachable case; Invalid L1 info transaction selector."),
_ => eyre::bail!("Unreachable case; Invalid L1 info transaction selector."),
}
}

Expand Down Expand Up @@ -287,18 +287,19 @@ impl L1BlockInfoBedrock {
/// Decodes the [L1BlockInfoBedrock] object from ethereum transaction calldata.
pub fn decode_calldata(r: &[u8]) -> Result<Self> {
if r.len() != L1_INFO_TX_LEN_BEDROCK {
anyhow::bail!("Invalid calldata length for Bedrock L1 info transaction");
eyre::bail!("Invalid calldata length for Bedrock L1 info transaction");
}

let number =
u64::from_be_bytes(r[28..36].try_into().map_err(|_| anyhow!("Conversion error"))?);
u64::from_be_bytes(r[28..36].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let time =
u64::from_be_bytes(r[60..68].try_into().map_err(|_| anyhow!("Conversion error"))?);
u64::from_be_bytes(r[60..68].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let base_fee =
u64::from_be_bytes(r[92..100].try_into().map_err(|_| anyhow!("Conversion error"))?);
u64::from_be_bytes(r[92..100].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let block_hash = B256::from_slice(r[100..132].as_ref());
let sequence_number =
u64::from_be_bytes(r[156..164].try_into().map_err(|_| anyhow!("Conversion error"))?);
let sequence_number = u64::from_be_bytes(
r[156..164].try_into().map_err(|_| eyre::eyre!("Conversion error"))?,
);
let batcher_address = Address::from_slice(r[176..196].as_ref());
let l1_fee_overhead = U256::from_be_slice(r[196..228].as_ref());
let l1_fee_scalar = U256::from_be_slice(r[228..260].as_ref());
Expand Down Expand Up @@ -336,23 +337,24 @@ impl L1BlockInfoEcotone {
/// Decodes the [L1BlockInfoEcotone] object from ethereum transaction calldata.
pub fn decode_calldata(r: &[u8]) -> Result<Self> {
if r.len() != L1_INFO_TX_LEN_ECOTONE {
anyhow::bail!("Invalid calldata length for Ecotone L1 info transaction");
eyre::bail!("Invalid calldata length for Ecotone L1 info transaction");
}

let base_fee_scalar =
u32::from_be_bytes(r[4..8].try_into().map_err(|_| anyhow!("Conversion error"))?);
u32::from_be_bytes(r[4..8].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let blob_base_fee_scalar =
u32::from_be_bytes(r[8..12].try_into().map_err(|_| anyhow!("Conversion error"))?);
u32::from_be_bytes(r[8..12].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let sequence_number =
u64::from_be_bytes(r[12..20].try_into().map_err(|_| anyhow!("Conversion error"))?);
u64::from_be_bytes(r[12..20].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let timestamp =
u64::from_be_bytes(r[20..28].try_into().map_err(|_| anyhow!("Conversion error"))?);
u64::from_be_bytes(r[20..28].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let l1_block_number =
u64::from_be_bytes(r[28..36].try_into().map_err(|_| anyhow!("Conversion error"))?);
u64::from_be_bytes(r[28..36].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let base_fee =
u64::from_be_bytes(r[60..68].try_into().map_err(|_| anyhow!("Conversion error"))?);
let blob_base_fee =
u128::from_be_bytes(r[84..100].try_into().map_err(|_| anyhow!("Conversion error"))?);
u64::from_be_bytes(r[60..68].try_into().map_err(|_| eyre::eyre!("Conversion error"))?);
let blob_base_fee = u128::from_be_bytes(
r[84..100].try_into().map_err(|_| eyre::eyre!("Conversion error"))?,
);
let block_hash = B256::from_slice(r[100..132].as_ref());
let batcher_address = Address::from_slice(r[144..164].as_ref());

Expand Down Expand Up @@ -512,15 +514,15 @@ mod test {
u32::from_be_bytes(
scalar[24..28]
.try_into()
.map_err(|_| anyhow!("Failed to parse L1 blob base fee scalar"))
.map_err(|_| eyre::eyre!("Failed to parse L1 blob base fee scalar"))
.unwrap(),
)
})
.unwrap_or_default();
let base_fee_scalar = u32::from_be_bytes(
scalar[28..32]
.try_into()
.map_err(|_| anyhow!("Failed to parse base fee scalar"))
.map_err(|_| eyre::eyre!("Failed to parse base fee scalar"))
.unwrap(),
);
assert_eq!(l1_info.blob_base_fee_scalar, blob_base_fee_scalar);
Expand Down
4 changes: 2 additions & 2 deletions crates/primitives/src/deposits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ pub enum DepositError {
MintDecode(Bytes),
/// Failed to decode the deposit gas value.
GasDecode(Bytes),
/// A custom error wrapping [anyhow::Error].
Custom(anyhow::Error),
/// A custom error wrapping [eyre::Error].
Custom(eyre::Error),
}

impl PartialEq<DepositError> for DepositError {
Expand Down
22 changes: 11 additions & 11 deletions crates/primitives/src/payload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

use alloc::vec::Vec;
use alloy_primitives::{Address, Bloom, Bytes, B256, U256};
use anyhow::Result;
use eyre::Result;
use op_alloy_consensus::{OpTxEnvelope, OpTxType};

/// Fixed and variable memory costs for a payload.
Expand Down Expand Up @@ -124,26 +124,26 @@ impl L2ExecutionPayloadEnvelope {
rollup_config.genesis.l2.number
{
if execution_payload.block_hash != rollup_config.genesis.l2.hash {
anyhow::bail!("Invalid genesis hash");
eyre::bail!("Invalid genesis hash");
}
(rollup_config.genesis.l1, 0)
} else {
if execution_payload.transactions.is_empty() {
anyhow::bail!(
eyre::bail!(
"L2 block is missing L1 info deposit transaction, block hash: {}",
execution_payload.block_hash
);
}

let ty = execution_payload.transactions[0][0];
if ty != OpTxType::Deposit as u8 {
anyhow::bail!("First payload transaction has unexpected type: {:?}", ty);
eyre::bail!("First payload transaction has unexpected type: {:?}", ty);
}
let tx = OpTxEnvelope::decode(&mut execution_payload.transactions[0][1..].as_ref())
.map_err(|e| anyhow::anyhow!(e))?;
.map_err(|e| eyre::eyre!(e))?;

let OpTxEnvelope::Deposit(tx) = tx else {
anyhow::bail!("First payload transaction has unexpected type: {:?}", tx.tx_type());
eyre::bail!("First payload transaction has unexpected type: {:?}", tx.tx_type());
};

let l1_info = L1BlockInfoTx::decode_calldata(tx.input.as_ref())?;
Expand All @@ -168,26 +168,26 @@ impl L2ExecutionPayloadEnvelope {

if execution_payload.block_number == rollup_config.genesis.l2.number {
if execution_payload.block_hash != rollup_config.genesis.l2.hash {
anyhow::bail!("Invalid genesis hash");
eyre::bail!("Invalid genesis hash");
}
return Ok(rollup_config.genesis.system_config);
}

if execution_payload.transactions.is_empty() {
anyhow::bail!(
eyre::bail!(
"L2 block is missing L1 info deposit transaction, block hash: {}",
execution_payload.block_hash
);
}
let ty = execution_payload.transactions[0][0];
if ty != OpTxType::Deposit as u8 {
anyhow::bail!("First payload transaction has unexpected type: {:?}", ty);
eyre::bail!("First payload transaction has unexpected type: {:?}", ty);
}
let tx = OpTxEnvelope::decode(&mut execution_payload.transactions[0][1..].as_ref())
.map_err(|e| anyhow::anyhow!(e))?;
.map_err(|e| eyre::eyre!(e))?;

let OpTxEnvelope::Deposit(tx) = tx else {
anyhow::bail!("First payload transaction has unexpected type: {:?}", tx.tx_type());
eyre::bail!("First payload transaction has unexpected type: {:?}", tx.tx_type());
};

let l1_info = L1BlockInfoTx::decode_calldata(tx.input.as_ref())?;
Expand Down
Loading

0 comments on commit 980aa1a

Please sign in to comment.