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}