Skip to main content

signet_cold/
specifier.rs

1//! Specifier enums for cold storage lookups.
2//!
3//! These types define how to locate data in cold storage, supporting
4//! the standard Ethereum JSON-RPC lookup patterns.
5
6use alloy::primitives::{B256, BlockNumber};
7
8/// Specifier for header lookups.
9#[derive(Debug, Clone, Copy)]
10pub enum HeaderSpecifier {
11    /// Lookup by block number.
12    Number(BlockNumber),
13    /// Lookup by block hash.
14    Hash(B256),
15}
16
17impl From<BlockNumber> for HeaderSpecifier {
18    fn from(number: BlockNumber) -> Self {
19        Self::Number(number)
20    }
21}
22
23impl From<B256> for HeaderSpecifier {
24    fn from(hash: B256) -> Self {
25        Self::Hash(hash)
26    }
27}
28
29/// Specifier for transaction lookups.
30#[derive(Debug, Clone, Copy)]
31pub enum TransactionSpecifier {
32    /// Lookup by transaction hash.
33    Hash(B256),
34    /// Lookup by block number and transaction index within the block.
35    BlockAndIndex {
36        /// The block number.
37        block: BlockNumber,
38        /// The transaction index within the block.
39        index: u64,
40    },
41    /// Lookup by block hash and transaction index within the block.
42    BlockHashAndIndex {
43        /// The block hash.
44        block_hash: B256,
45        /// The transaction index within the block.
46        index: u64,
47    },
48}
49
50impl From<B256> for TransactionSpecifier {
51    fn from(hash: B256) -> Self {
52        Self::Hash(hash)
53    }
54}
55
56/// Specifier for receipt lookups.
57#[derive(Debug, Clone, Copy)]
58pub enum ReceiptSpecifier {
59    /// Lookup by transaction hash.
60    TxHash(B256),
61    /// Lookup by block number and transaction index within the block.
62    BlockAndIndex {
63        /// The block number.
64        block: BlockNumber,
65        /// The transaction index within the block.
66        index: u64,
67    },
68}
69
70impl From<B256> for ReceiptSpecifier {
71    fn from(tx_hash: B256) -> Self {
72        Self::TxHash(tx_hash)
73    }
74}
75
76/// Specifier for SignetEvents lookups.
77#[derive(Debug, Clone, Copy)]
78pub enum SignetEventsSpecifier {
79    /// Lookup all events in a single block.
80    Block(BlockNumber),
81    /// Lookup all events in a range of blocks (inclusive).
82    BlockRange {
83        /// The start block number (inclusive).
84        start: BlockNumber,
85        /// The end block number (inclusive).
86        end: BlockNumber,
87    },
88}
89
90impl From<BlockNumber> for SignetEventsSpecifier {
91    fn from(block: BlockNumber) -> Self {
92        Self::Block(block)
93    }
94}
95
96/// Specifier for ZenithHeader lookups.
97#[derive(Debug, Clone, Copy)]
98pub enum ZenithHeaderSpecifier {
99    /// Lookup by block number.
100    Number(BlockNumber),
101    /// Lookup a range of blocks (inclusive).
102    Range {
103        /// The start block number (inclusive).
104        start: BlockNumber,
105        /// The end block number (inclusive).
106        end: BlockNumber,
107    },
108}
109
110impl From<BlockNumber> for ZenithHeaderSpecifier {
111    fn from(number: BlockNumber) -> Self {
112        Self::Number(number)
113    }
114}