feat: Make db-models no-std (#14459)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
Co-authored-by: Arsenii Kulikov <klkvrr@gmail.com>
Co-authored-by: alpharush <0xalpharush@protonmail.com>
Co-authored-by: DaniPopes <57450786+DaniPopes@users.noreply.github.com>
Co-authored-by: Alexey Shekhirin <5773434+shekhirin@users.noreply.github.com>
Co-authored-by: Dan Cline <6798349+Rjected@users.noreply.github.com>
Co-authored-by: Federico Gimenez <fgimenez@users.noreply.github.com>
Co-authored-by: Roman Krasiuk <rokrassyuk@gmail.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: Bilog WEB3 <155262265+Bilogweb3@users.noreply.github.com>
Co-authored-by: Vitalyr <158586577+Vitaliyr888@users.noreply.github.com>
Co-authored-by: Yohann Kazoula <yoh.kzl@gmail.com>
Co-authored-by: Shourya Chaudhry <149008800+18aaddy@users.noreply.github.com>
Co-authored-by: Poulav Bhowmick <bpoulav@gmail.com>
Co-authored-by: urb <urbadeil@gmail.com>
Co-authored-by: Emilia Hane <elsaemiliaevahane@gmail.com>
This commit is contained in:
Udoagwa Franklin
2025-02-14 12:59:50 +01:00
committed by GitHub
parent 735ff493a1
commit 72fdb7f9ec
7 changed files with 58 additions and 26 deletions

View File

@ -15,6 +15,7 @@ crates_to_check=(
reth-storage-errors reth-storage-errors
reth-execution-errors reth-execution-errors
reth-execution-types reth-execution-types
reth-db-models
## ethereum ## ethereum
reth-ethereum-forks reth-ethereum-forks

View File

@ -14,7 +14,7 @@ workspace = true
[dependencies] [dependencies]
# reth # reth
reth-codecs.workspace = true reth-codecs.workspace = true
reth-db-models.workspace = true reth-db-models = { workspace = true, features = ["reth-codec"] }
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-stages-types = { workspace = true, features = ["serde", "reth-codec"] } reth-stages-types = { workspace = true, features = ["serde", "reth-codec"] }

View File

@ -13,28 +13,30 @@ workspace = true
[dependencies] [dependencies]
# reth # reth
reth-codecs.workspace = true reth-codecs = { workspace = true, optional = true }
reth-primitives-traits = { workspace = true, features = ["serde", "reth-codec"] } reth-primitives-traits = { workspace = true, features = ["serde"] }
# ethereum # ethereum
alloy-primitives.workspace = true alloy-primitives.workspace = true
alloy-eips.workspace = true alloy-eips.workspace = true
# codecs # codecs
modular-bitfield.workspace = true modular-bitfield = { workspace = true, optional = true }
serde = { workspace = true, default-features = false } serde = { workspace = true, default-features = false }
# misc # misc
bytes.workspace = true bytes = { workspace = true, optional = true }
# arbitrary utils # arbitrary utils
arbitrary = { workspace = true, features = ["derive"], optional = true } arbitrary = { workspace = true, features = ["derive"], optional = true }
proptest = { workspace = true, optional = true }
[dev-dependencies] [dev-dependencies]
# reth # reth
reth-primitives-traits = { workspace = true, features = ["arbitrary"] } reth-primitives-traits = { workspace = true, features = ["arbitrary"] }
reth-codecs.workspace = true reth-codecs.workspace = true
bytes.workspace = true
modular-bitfield.workspace = true
arbitrary = { workspace = true, features = ["derive"] } arbitrary = { workspace = true, features = ["derive"] }
proptest.workspace = true proptest.workspace = true
@ -42,16 +44,30 @@ proptest-arbitrary-interop.workspace = true
test-fuzz.workspace = true test-fuzz.workspace = true
[features] [features]
default = ["std"]
std = [
"alloy-eips/std",
"alloy-primitives/std",
"reth-primitives-traits/std",
"bytes?/std",
"serde/std",
]
test-utils = [ test-utils = [
"reth-primitives-traits/test-utils", "reth-primitives-traits/test-utils",
"arbitrary", "arbitrary",
"reth-codecs/test-utils", "reth-codecs?/test-utils",
] ]
arbitrary = [ arbitrary = [
"std",
"reth-primitives-traits/arbitrary", "reth-primitives-traits/arbitrary",
"dep:arbitrary", "dep:arbitrary",
"dep:proptest",
"alloy-primitives/arbitrary", "alloy-primitives/arbitrary",
"alloy-eips/arbitrary", "alloy-eips/arbitrary",
"reth-codecs/arbitrary", "reth-codecs?/arbitrary",
]
reth-codec = [
"dep:reth-codecs",
"dep:modular-bitfield",
"dep:bytes",
"reth-primitives-traits/reth-codec",
] ]

View File

@ -1,7 +1,6 @@
use reth_codecs::{add_arbitrary_tests, Compact};
use serde::Serialize; use serde::Serialize;
use alloy_primitives::{bytes::Buf, Address}; use alloy_primitives::Address;
use reth_primitives_traits::Account; use reth_primitives_traits::Account;
/// Account as it is saved in the database. /// Account as it is saved in the database.
@ -9,7 +8,7 @@ use reth_primitives_traits::Account;
/// [`Address`] is the subkey. /// [`Address`] is the subkey.
#[derive(Debug, Default, Clone, Eq, PartialEq, Serialize)] #[derive(Debug, Default, Clone, Eq, PartialEq, Serialize)]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary, serde::Deserialize))] #[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary, serde::Deserialize))]
#[add_arbitrary_tests(compact)] #[cfg_attr(any(test, feature = "reth-codec"), reth_codecs::add_arbitrary_tests(compact))]
pub struct AccountBeforeTx { pub struct AccountBeforeTx {
/// Address for the account. Acts as `DupSort::SubKey`. /// Address for the account. Acts as `DupSort::SubKey`.
pub address: Address, pub address: Address,
@ -20,7 +19,8 @@ pub struct AccountBeforeTx {
// NOTE: Removing reth_codec and manually encode subkey // NOTE: Removing reth_codec and manually encode subkey
// and compress second part of the value. If we have compression // and compress second part of the value. If we have compression
// over whole value (Even SubKey) that would mess up fetching of values with seek_by_key_subkey // over whole value (Even SubKey) that would mess up fetching of values with seek_by_key_subkey
impl Compact for AccountBeforeTx { #[cfg(feature = "reth-codec")]
impl reth_codecs::Compact for AccountBeforeTx {
fn to_compact<B>(&self, buf: &mut B) -> usize fn to_compact<B>(&self, buf: &mut B) -> usize
where where
B: bytes::BufMut + AsMut<[u8]>, B: bytes::BufMut + AsMut<[u8]>,
@ -36,6 +36,7 @@ impl Compact for AccountBeforeTx {
} }
fn from_compact(mut buf: &[u8], len: usize) -> (Self, &[u8]) { fn from_compact(mut buf: &[u8], len: usize) -> (Self, &[u8]) {
use bytes::Buf;
let address = Address::from_slice(&buf[..20]); let address = Address::from_slice(&buf[..20]);
buf.advance(20); buf.advance(20);

View File

@ -1,9 +1,7 @@
use alloy_eips::eip4895::Withdrawals; use alloy_eips::eip4895::Withdrawals;
use alloy_primitives::TxNumber; use alloy_primitives::TxNumber;
use bytes::Buf; use core::ops::Range;
use reth_codecs::{add_arbitrary_tests, Compact};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::ops::Range;
/// Total number of transactions. /// Total number of transactions.
pub type NumTransactions = u64; pub type NumTransactions = u64;
@ -12,9 +10,10 @@ pub type NumTransactions = u64;
/// ///
/// It has the pointer to the transaction Number of the first /// It has the pointer to the transaction Number of the first
/// transaction in the block and the total number of transactions. /// transaction in the block and the total number of transactions.
#[derive(Debug, Default, Eq, PartialEq, Clone, Copy, Serialize, Deserialize, Compact)] #[derive(Debug, Default, Eq, PartialEq, Clone, Copy, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))] #[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
#[add_arbitrary_tests(compact)] #[cfg_attr(any(test, feature = "reth-codec"), derive(reth_codecs::Compact))]
#[cfg_attr(any(test, feature = "reth-codec"), reth_codecs::add_arbitrary_tests(compact))]
pub struct StoredBlockBodyIndices { pub struct StoredBlockBodyIndices {
/// The number of the first transaction in this block /// The number of the first transaction in this block
/// ///
@ -68,9 +67,10 @@ impl StoredBlockBodyIndices {
} }
/// The storage representation of block withdrawals. /// The storage representation of block withdrawals.
#[derive(Debug, Default, Eq, PartialEq, Clone, Serialize, Deserialize, Compact)] #[derive(Debug, Default, Eq, PartialEq, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))] #[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
#[add_arbitrary_tests(compact)] #[cfg_attr(any(test, feature = "reth-codec"), derive(reth_codecs::Compact))]
#[cfg_attr(any(test, feature = "reth-codec"), reth_codecs::add_arbitrary_tests(compact))]
pub struct StoredBlockWithdrawals { pub struct StoredBlockWithdrawals {
/// The block withdrawals. /// The block withdrawals.
pub withdrawals: Withdrawals, pub withdrawals: Withdrawals,
@ -80,13 +80,14 @@ pub struct StoredBlockWithdrawals {
/// represents a pre-merge block. /// represents a pre-merge block.
#[derive(Debug, Default, Eq, PartialEq, Clone, Serialize, Deserialize)] #[derive(Debug, Default, Eq, PartialEq, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))] #[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
#[add_arbitrary_tests(compact)] #[cfg_attr(any(test, feature = "reth-codec"), reth_codecs::add_arbitrary_tests(compact))]
pub struct StaticFileBlockWithdrawals { pub struct StaticFileBlockWithdrawals {
/// The block withdrawals. A `None` value represents a pre-merge block. /// The block withdrawals. A `None` value represents a pre-merge block.
pub withdrawals: Option<Withdrawals>, pub withdrawals: Option<Withdrawals>,
} }
impl Compact for StaticFileBlockWithdrawals { #[cfg(feature = "reth-codec")]
impl reth_codecs::Compact for StaticFileBlockWithdrawals {
fn to_compact<B>(&self, buf: &mut B) -> usize fn to_compact<B>(&self, buf: &mut B) -> usize
where where
B: bytes::BufMut + AsMut<[u8]>, B: bytes::BufMut + AsMut<[u8]>,
@ -98,6 +99,7 @@ impl Compact for StaticFileBlockWithdrawals {
1 1
} }
fn from_compact(mut buf: &[u8], _: usize) -> (Self, &[u8]) { fn from_compact(mut buf: &[u8], _: usize) -> (Self, &[u8]) {
use bytes::Buf;
if buf.get_u8() == 1 { if buf.get_u8() == 1 {
let (w, buf) = Withdrawals::from_compact(buf, buf.len()); let (w, buf) = Withdrawals::from_compact(buf, buf.len());
(Self { withdrawals: Some(w) }, buf) (Self { withdrawals: Some(w) }, buf)

View File

@ -1,12 +1,12 @@
//! Client version model. //! Client version model.
use reth_codecs::{add_arbitrary_tests, Compact}; use alloc::string::String;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
/// Client version that accessed the database. /// Client version that accessed the database.
#[derive(Clone, Eq, PartialEq, Debug, Default, Serialize, Deserialize)] #[derive(Clone, Eq, PartialEq, Debug, Default, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))] #[cfg_attr(any(test, feature = "arbitrary"), derive(arbitrary::Arbitrary))]
#[add_arbitrary_tests(compact)] #[cfg_attr(any(test, feature = "reth-codec"), reth_codecs::add_arbitrary_tests(compact))]
pub struct ClientVersion { pub struct ClientVersion {
/// Client version /// Client version
pub version: String, pub version: String,
@ -23,7 +23,8 @@ impl ClientVersion {
} }
} }
impl Compact for ClientVersion { #[cfg(feature = "reth-codec")]
impl reth_codecs::Compact for ClientVersion {
fn to_compact<B>(&self, buf: &mut B) -> usize fn to_compact<B>(&self, buf: &mut B) -> usize
where where
B: bytes::BufMut + AsMut<[u8]>, B: bytes::BufMut + AsMut<[u8]>,

View File

@ -1,4 +1,15 @@
//! Models used in storage module //! Models used in storage module.
#![doc(
html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png",
html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256",
issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/"
)]
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;
/// Accounts /// Accounts
pub mod accounts; pub mod accounts;