|
1 | 1 | use super::{models, DatabaseError};
|
2 | 2 | use crate::DatabaseConnectionProvider;
|
3 | 3 |
|
| 4 | +use alloy_eips::{BlockId, BlockNumberOrTag}; |
4 | 5 | use alloy_primitives::B256;
|
5 | 6 | use futures::{Stream, StreamExt};
|
6 | 7 | use rollup_node_primitives::{BatchCommitData, L1MessageWithBlockNumber};
|
| 8 | +use scroll_alloy_rpc_types_engine::BlockDataHint; |
7 | 9 | use sea_orm::{ActiveModelTrait, ColumnTrait, DbErr, EntityTrait, QueryFilter, Set};
|
8 | 10 |
|
9 | 11 | /// The [`DatabaseOperations`] trait provides methods for interacting with the database.
|
@@ -125,6 +127,25 @@ pub trait DatabaseOperations: DatabaseConnectionProvider {
|
125 | 127 | .await?
|
126 | 128 | .map(|res| res.map(Into::into)))
|
127 | 129 | }
|
| 130 | + |
| 131 | + /// Get the extra data for the provided [`BlockId`]. |
| 132 | + async fn get_block_data( |
| 133 | + &self, |
| 134 | + block_id: BlockId, |
| 135 | + ) -> Result<Option<BlockDataHint>, DatabaseError> { |
| 136 | + let filter = match block_id { |
| 137 | + BlockId::Hash(hash) => models::block_data::Column::Hash.eq(hash.block_hash.to_vec()), |
| 138 | + BlockId::Number(BlockNumberOrTag::Number(number)) => { |
| 139 | + models::block_data::Column::Number.eq(number as i64) |
| 140 | + } |
| 141 | + x => return Err(DatabaseError::BlockNotFound(x)), |
| 142 | + }; |
| 143 | + Ok(models::block_data::Entity::find() |
| 144 | + .filter(filter) |
| 145 | + .one(self.get_connection()) |
| 146 | + .await |
| 147 | + .map(|x| x.map(Into::into))?) |
| 148 | + } |
128 | 149 | }
|
129 | 150 |
|
130 | 151 | impl<T> DatabaseOperations for T where T: DatabaseConnectionProvider {}
|
0 commit comments