mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: impl compression traits for op primitives (#13550)
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -7051,6 +7051,7 @@ dependencies = [
|
|||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"reth-codecs",
|
"reth-codecs",
|
||||||
"reth-db-models",
|
"reth-db-models",
|
||||||
|
"reth-optimism-primitives",
|
||||||
"reth-primitives",
|
"reth-primitives",
|
||||||
"reth-primitives-traits",
|
"reth-primitives-traits",
|
||||||
"reth-prune-types",
|
"reth-prune-types",
|
||||||
|
|||||||
@ -23,7 +23,7 @@ alloy-primitives.workspace = true
|
|||||||
alloy-consensus.workspace = true
|
alloy-consensus.workspace = true
|
||||||
alloy-rlp.workspace = true
|
alloy-rlp.workspace = true
|
||||||
alloy-eips.workspace = true
|
alloy-eips.workspace = true
|
||||||
revm-primitives.workspace = true
|
revm-primitives = { workspace = true, optional = true }
|
||||||
secp256k1 = { workspace = true, optional = true }
|
secp256k1 = { workspace = true, optional = true }
|
||||||
|
|
||||||
# op
|
# op
|
||||||
@ -50,7 +50,7 @@ arbitrary.workspace = true
|
|||||||
proptest.workspace = true
|
proptest.workspace = true
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["std"]
|
default = ["std", "serde"]
|
||||||
std = [
|
std = [
|
||||||
"reth-primitives-traits/std",
|
"reth-primitives-traits/std",
|
||||||
"reth-primitives/std",
|
"reth-primitives/std",
|
||||||
@ -61,7 +61,7 @@ std = [
|
|||||||
"serde?/std",
|
"serde?/std",
|
||||||
"bytes?/std",
|
"bytes?/std",
|
||||||
"derive_more/std",
|
"derive_more/std",
|
||||||
"revm-primitives/std",
|
"revm-primitives?/std",
|
||||||
"secp256k1?/std",
|
"secp256k1?/std",
|
||||||
"alloy-rlp/std",
|
"alloy-rlp/std",
|
||||||
"reth-zstd-compressors?/std",
|
"reth-zstd-compressors?/std",
|
||||||
@ -91,7 +91,7 @@ serde = [
|
|||||||
"reth-codecs?/serde",
|
"reth-codecs?/serde",
|
||||||
"op-alloy-consensus/serde",
|
"op-alloy-consensus/serde",
|
||||||
"rand?/serde",
|
"rand?/serde",
|
||||||
"revm-primitives/serde",
|
"revm-primitives?/serde",
|
||||||
"secp256k1?/serde",
|
"secp256k1?/serde",
|
||||||
]
|
]
|
||||||
serde-bincode-compat = [
|
serde-bincode-compat = [
|
||||||
@ -111,10 +111,11 @@ arbitrary = [
|
|||||||
"alloy-consensus/arbitrary",
|
"alloy-consensus/arbitrary",
|
||||||
"alloy-eips/arbitrary",
|
"alloy-eips/arbitrary",
|
||||||
"alloy-primitives/arbitrary",
|
"alloy-primitives/arbitrary",
|
||||||
"revm-primitives/arbitrary",
|
"revm-primitives?/arbitrary",
|
||||||
"rand",
|
"rand",
|
||||||
]
|
]
|
||||||
optimism = [
|
optimism = [
|
||||||
|
"dep:revm-primitives",
|
||||||
"revm-primitives/optimism",
|
"revm-primitives/optimism",
|
||||||
"reth-primitives/optimism"
|
"reth-primitives/optimism"
|
||||||
]
|
]
|
||||||
|
|||||||
@ -6,8 +6,6 @@
|
|||||||
issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/"
|
issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/"
|
||||||
)]
|
)]
|
||||||
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
|
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
|
||||||
// The `optimism` feature must be enabled to use this crate.
|
|
||||||
#![cfg(feature = "optimism")]
|
|
||||||
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
|
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
|
||||||
#![cfg_attr(not(feature = "std"), no_std)]
|
#![cfg_attr(not(feature = "std"), no_std)]
|
||||||
|
|
||||||
|
|||||||
@ -12,7 +12,7 @@ use alloy_eips::{
|
|||||||
eip7702::SignedAuthorization,
|
eip7702::SignedAuthorization,
|
||||||
};
|
};
|
||||||
use alloy_primitives::{
|
use alloy_primitives::{
|
||||||
keccak256, Address, Bytes, PrimitiveSignature as Signature, TxHash, TxKind, Uint, B256, U256,
|
keccak256, Address, Bytes, PrimitiveSignature as Signature, TxHash, TxKind, Uint, B256,
|
||||||
};
|
};
|
||||||
use alloy_rlp::Header;
|
use alloy_rlp::Header;
|
||||||
use core::{
|
use core::{
|
||||||
@ -25,11 +25,11 @@ use once_cell::sync::OnceCell as OnceLock;
|
|||||||
use op_alloy_consensus::{OpPooledTransaction, OpTypedTransaction, TxDeposit};
|
use op_alloy_consensus::{OpPooledTransaction, OpTypedTransaction, TxDeposit};
|
||||||
#[cfg(any(test, feature = "reth-codec"))]
|
#[cfg(any(test, feature = "reth-codec"))]
|
||||||
use proptest as _;
|
use proptest as _;
|
||||||
use reth_primitives::transaction::{
|
use reth_primitives_traits::{
|
||||||
recover_signer, recover_signer_unchecked, TransactionConversionError,
|
crypto::secp256k1::{recover_signer, recover_signer_unchecked},
|
||||||
|
transaction::error::TransactionConversionError,
|
||||||
|
InMemorySize, SignedTransaction,
|
||||||
};
|
};
|
||||||
use reth_primitives_traits::{FillTxEnv, InMemorySize, SignedTransaction};
|
|
||||||
use revm_primitives::{AuthorizationList, OptimismFields, TxEnv};
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
use std::sync::OnceLock;
|
use std::sync::OnceLock;
|
||||||
|
|
||||||
@ -119,15 +119,16 @@ impl SignedTransaction for OpTransactionSigned {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FillTxEnv for OpTransactionSigned {
|
#[cfg(feature = "optimism")]
|
||||||
fn fill_tx_env(&self, tx_env: &mut TxEnv, sender: Address) {
|
impl reth_primitives_traits::FillTxEnv for OpTransactionSigned {
|
||||||
|
fn fill_tx_env(&self, tx_env: &mut revm_primitives::TxEnv, sender: Address) {
|
||||||
let envelope = self.encoded_2718();
|
let envelope = self.encoded_2718();
|
||||||
|
|
||||||
tx_env.caller = sender;
|
tx_env.caller = sender;
|
||||||
match &self.transaction {
|
match &self.transaction {
|
||||||
OpTypedTransaction::Legacy(tx) => {
|
OpTypedTransaction::Legacy(tx) => {
|
||||||
tx_env.gas_limit = tx.gas_limit;
|
tx_env.gas_limit = tx.gas_limit;
|
||||||
tx_env.gas_price = U256::from(tx.gas_price);
|
tx_env.gas_price = alloy_primitives::U256::from(tx.gas_price);
|
||||||
tx_env.gas_priority_fee = None;
|
tx_env.gas_priority_fee = None;
|
||||||
tx_env.transact_to = tx.to;
|
tx_env.transact_to = tx.to;
|
||||||
tx_env.value = tx.value;
|
tx_env.value = tx.value;
|
||||||
@ -141,7 +142,7 @@ impl FillTxEnv for OpTransactionSigned {
|
|||||||
}
|
}
|
||||||
OpTypedTransaction::Eip2930(tx) => {
|
OpTypedTransaction::Eip2930(tx) => {
|
||||||
tx_env.gas_limit = tx.gas_limit;
|
tx_env.gas_limit = tx.gas_limit;
|
||||||
tx_env.gas_price = U256::from(tx.gas_price);
|
tx_env.gas_price = alloy_primitives::U256::from(tx.gas_price);
|
||||||
tx_env.gas_priority_fee = None;
|
tx_env.gas_priority_fee = None;
|
||||||
tx_env.transact_to = tx.to;
|
tx_env.transact_to = tx.to;
|
||||||
tx_env.value = tx.value;
|
tx_env.value = tx.value;
|
||||||
@ -155,8 +156,9 @@ impl FillTxEnv for OpTransactionSigned {
|
|||||||
}
|
}
|
||||||
OpTypedTransaction::Eip1559(tx) => {
|
OpTypedTransaction::Eip1559(tx) => {
|
||||||
tx_env.gas_limit = tx.gas_limit;
|
tx_env.gas_limit = tx.gas_limit;
|
||||||
tx_env.gas_price = U256::from(tx.max_fee_per_gas);
|
tx_env.gas_price = alloy_primitives::U256::from(tx.max_fee_per_gas);
|
||||||
tx_env.gas_priority_fee = Some(U256::from(tx.max_priority_fee_per_gas));
|
tx_env.gas_priority_fee =
|
||||||
|
Some(alloy_primitives::U256::from(tx.max_priority_fee_per_gas));
|
||||||
tx_env.transact_to = tx.to;
|
tx_env.transact_to = tx.to;
|
||||||
tx_env.value = tx.value;
|
tx_env.value = tx.value;
|
||||||
tx_env.data = tx.input.clone();
|
tx_env.data = tx.input.clone();
|
||||||
@ -169,8 +171,9 @@ impl FillTxEnv for OpTransactionSigned {
|
|||||||
}
|
}
|
||||||
OpTypedTransaction::Eip7702(tx) => {
|
OpTypedTransaction::Eip7702(tx) => {
|
||||||
tx_env.gas_limit = tx.gas_limit;
|
tx_env.gas_limit = tx.gas_limit;
|
||||||
tx_env.gas_price = U256::from(tx.max_fee_per_gas);
|
tx_env.gas_price = alloy_primitives::U256::from(tx.max_fee_per_gas);
|
||||||
tx_env.gas_priority_fee = Some(U256::from(tx.max_priority_fee_per_gas));
|
tx_env.gas_priority_fee =
|
||||||
|
Some(alloy_primitives::U256::from(tx.max_priority_fee_per_gas));
|
||||||
tx_env.transact_to = tx.to.into();
|
tx_env.transact_to = tx.to.into();
|
||||||
tx_env.value = tx.value;
|
tx_env.value = tx.value;
|
||||||
tx_env.data = tx.input.clone();
|
tx_env.data = tx.input.clone();
|
||||||
@ -180,12 +183,12 @@ impl FillTxEnv for OpTransactionSigned {
|
|||||||
tx_env.blob_hashes.clear();
|
tx_env.blob_hashes.clear();
|
||||||
tx_env.max_fee_per_blob_gas.take();
|
tx_env.max_fee_per_blob_gas.take();
|
||||||
tx_env.authorization_list =
|
tx_env.authorization_list =
|
||||||
Some(AuthorizationList::Signed(tx.authorization_list.clone()));
|
Some(revm_primitives::AuthorizationList::Signed(tx.authorization_list.clone()));
|
||||||
}
|
}
|
||||||
OpTypedTransaction::Deposit(tx) => {
|
OpTypedTransaction::Deposit(tx) => {
|
||||||
tx_env.access_list.clear();
|
tx_env.access_list.clear();
|
||||||
tx_env.gas_limit = tx.gas_limit;
|
tx_env.gas_limit = tx.gas_limit;
|
||||||
tx_env.gas_price = U256::ZERO;
|
tx_env.gas_price = alloy_primitives::U256::ZERO;
|
||||||
tx_env.gas_priority_fee = None;
|
tx_env.gas_priority_fee = None;
|
||||||
tx_env.transact_to = tx.to;
|
tx_env.transact_to = tx.to;
|
||||||
tx_env.value = tx.value;
|
tx_env.value = tx.value;
|
||||||
@ -194,7 +197,7 @@ impl FillTxEnv for OpTransactionSigned {
|
|||||||
tx_env.nonce = None;
|
tx_env.nonce = None;
|
||||||
tx_env.authorization_list = None;
|
tx_env.authorization_list = None;
|
||||||
|
|
||||||
tx_env.optimism = OptimismFields {
|
tx_env.optimism = revm_primitives::OptimismFields {
|
||||||
source_hash: Some(tx.source_hash),
|
source_hash: Some(tx.source_hash),
|
||||||
mint: tx.mint,
|
mint: tx.mint,
|
||||||
is_system_transaction: Some(tx.is_system_transaction),
|
is_system_transaction: Some(tx.is_system_transaction),
|
||||||
@ -204,7 +207,7 @@ impl FillTxEnv for OpTransactionSigned {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tx_env.optimism = OptimismFields {
|
tx_env.optimism = revm_primitives::OptimismFields {
|
||||||
source_hash: None,
|
source_hash: None,
|
||||||
mint: None,
|
mint: None,
|
||||||
is_system_transaction: Some(false),
|
is_system_transaction: Some(false),
|
||||||
|
|||||||
@ -15,6 +15,7 @@ workspace = true
|
|||||||
# reth
|
# reth
|
||||||
reth-codecs.workspace = true
|
reth-codecs.workspace = true
|
||||||
reth-db-models.workspace = true
|
reth-db-models.workspace = true
|
||||||
|
reth-optimism-primitives = { workspace = true, optional = true }
|
||||||
reth-primitives = { workspace = true, features = ["reth-codec"] }
|
reth-primitives = { workspace = true, features = ["reth-codec"] }
|
||||||
reth-primitives-traits = { workspace = true, features = ["serde", "reth-codec"] }
|
reth-primitives-traits = { workspace = true, features = ["serde", "reth-codec"] }
|
||||||
reth-prune-types.workspace = true
|
reth-prune-types.workspace = true
|
||||||
@ -81,5 +82,11 @@ arbitrary = [
|
|||||||
"reth-prune-types/arbitrary",
|
"reth-prune-types/arbitrary",
|
||||||
"reth-stages-types/arbitrary",
|
"reth-stages-types/arbitrary",
|
||||||
"alloy-consensus/arbitrary",
|
"alloy-consensus/arbitrary",
|
||||||
|
"reth-optimism-primitives?/arbitrary"
|
||||||
]
|
]
|
||||||
optimism = ["reth-primitives/optimism", "reth-codecs/op"]
|
optimism = [
|
||||||
|
"reth-primitives/optimism",
|
||||||
|
"reth-codecs/op",
|
||||||
|
"reth-optimism-primitives?/optimism"
|
||||||
|
]
|
||||||
|
op = ["dep:reth-optimism-primitives", "reth-codecs/op"]
|
||||||
|
|||||||
@ -235,6 +235,14 @@ impl_compression_for_compact!(
|
|||||||
GenesisAccount
|
GenesisAccount
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#[cfg(feature = "op")]
|
||||||
|
mod op {
|
||||||
|
use super::*;
|
||||||
|
use reth_optimism_primitives::{OpReceipt, OpTransactionSigned};
|
||||||
|
|
||||||
|
impl_compression_for_compact!(OpTransactionSigned, OpReceipt);
|
||||||
|
}
|
||||||
|
|
||||||
macro_rules! impl_compression_fixed_compact {
|
macro_rules! impl_compression_fixed_compact {
|
||||||
($($name:tt),+) => {
|
($($name:tt),+) => {
|
||||||
$(
|
$(
|
||||||
|
|||||||
Reference in New Issue
Block a user