Skip to content

Commit 9137c6a

Browse files
committed
papyrus_base_layer: make BaseLayer trait functions mutable
1 parent 2495ef9 commit 9137c6a

File tree

18 files changed

+105
-59
lines changed

18 files changed

+105
-59
lines changed

crates/apollo_base_layer_tests/src/anvil_base_layer.rs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,38 +195,45 @@ impl BaseLayerContract for AnvilBaseLayer {
195195
type Error = EthereumBaseLayerError;
196196

197197
async fn get_proved_block_at(
198-
&self,
198+
&mut self,
199199
l1_block: L1BlockNumber,
200200
) -> Result<BlockHashAndNumber, Self::Error> {
201201
self.ethereum_base_layer.get_proved_block_at(l1_block).await
202202
}
203203

204-
async fn latest_l1_block_number(&self) -> Result<L1BlockNumber, Self::Error> {
204+
async fn latest_l1_block_number(&mut self) -> Result<L1BlockNumber, Self::Error> {
205205
self.ethereum_base_layer.latest_l1_block_number().await
206206
}
207207

208208
async fn l1_block_at(
209-
&self,
209+
&mut self,
210210
block_number: L1BlockNumber,
211211
) -> Result<Option<L1BlockReference>, Self::Error> {
212212
self.ethereum_base_layer.l1_block_at(block_number).await
213213
}
214214

215215
async fn events<'a>(
216-
&'a self,
216+
&'a mut self,
217217
block_range: RangeInclusive<L1BlockNumber>,
218218
event_identifiers: &'a [&'a str],
219219
) -> Result<Vec<L1Event>, Self::Error> {
220220
self.ethereum_base_layer.events(block_range, event_identifiers).await
221221
}
222222

223223
async fn get_block_header(
224-
&self,
224+
&mut self,
225225
block_number: L1BlockNumber,
226226
) -> Result<Option<L1BlockHeader>, Self::Error> {
227227
self.ethereum_base_layer.get_block_header(block_number).await
228228
}
229229

230+
async fn get_block_header_immutable(
231+
&self,
232+
block_number: L1BlockNumber,
233+
) -> Result<Option<L1BlockHeader>, Self::Error> {
234+
self.ethereum_base_layer.get_block_header_immutable(block_number).await
235+
}
236+
230237
// TODO(Arni): Consider deleting this function from the trait.
231238
async fn get_url(&self) -> Result<Url, Self::Error> {
232239
Ok(self.ethereum_base_layer.url_iterator.get_current_url())

crates/apollo_base_layer_tests/tests/anvil_starts_with_no_contract.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ async fn anvil_starts_with_no_contract() {
2121
ordered_l1_endpoint_urls: vec![anvil.endpoint_url()],
2222
..Default::default()
2323
};
24-
let base_layer = EthereumBaseLayerContract::new(base_layer_config.clone());
24+
let mut base_layer = EthereumBaseLayerContract::new(base_layer_config.clone());
2525

2626
let sender_address = ARBITRARY_ANVIL_L1_ACCOUNT_ADDRESS;
2727
let receiver_address = OTHER_ARBITRARY_ANVIL_L1_ACCOUNT_ADDRESS;

crates/apollo_central_sync/src/lib.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ pub struct GenericStateSync<
9696
central_source: Arc<TCentralSource>,
9797
pending_source: Arc<TPendingSource>,
9898
pending_classes: Arc<RwLock<PendingClasses>>,
99-
base_layer_source: Option<Arc<TBaseLayerSource>>,
99+
base_layer_source: Option<Arc<Mutex<TBaseLayerSource>>>,
100100
reader: StorageReader,
101101
writer: Arc<Mutex<StorageWriter>>,
102102
sequencer_pub_key: Option<SequencerPublicKey>,
@@ -915,7 +915,7 @@ impl StateSync {
915915
writer: StorageWriter,
916916
class_manager_client: Option<SharedClassManagerClient>,
917917
) -> Self {
918-
let base_layer_source = base_layer_source.map(Arc::new);
918+
let base_layer_source = base_layer_source.map(|source| Arc::new(Mutex::new(source)));
919919
Self {
920920
config,
921921
shared_highest_block,
@@ -1004,15 +1004,15 @@ fn stream_new_compiled_classes<TCentralSource: CentralSourceTrait + Sync + Send>
10041004
// TODO(dvir): consider combine this function and store_base_layer_block.
10051005
fn stream_new_base_layer_block<TBaseLayerSource: BaseLayerSourceTrait + Sync>(
10061006
reader: StorageReader,
1007-
base_layer_source: Arc<TBaseLayerSource>,
1007+
base_layer_source: Arc<Mutex<TBaseLayerSource>>,
10081008
base_layer_propagation_sleep_duration: Duration,
10091009
) -> impl Stream<Item = Result<SyncEvent, StateSyncError>> {
10101010
try_stream! {
10111011
loop {
10121012
tokio::time::sleep(base_layer_propagation_sleep_duration).await;
10131013
let header_marker = reader.begin_ro_txn()?.get_header_marker()?;
10141014

1015-
match base_layer_source.latest_proved_block().await? {
1015+
match base_layer_source.lock().await.latest_proved_block().await? {
10161016
Some((block_number, _block_hash)) if header_marker <= block_number => {
10171017
debug!(
10181018
"Sync headers ({header_marker}) is behind the base layer tip \

crates/apollo_central_sync/src/sources/base_layer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl<Error: std::error::Error + Sync + Send> BaseLayerSourceErrorTrait for Error
2828
#[async_trait]
2929
pub trait BaseLayerSourceTrait {
3030
async fn latest_proved_block(
31-
&self,
31+
&mut self,
3232
) -> Result<Option<(BlockNumber, BlockHash)>, BaseLayerSourceError>;
3333
}
3434

@@ -39,7 +39,7 @@ impl<
3939
> BaseLayerSourceTrait for BaseLayerSource
4040
{
4141
async fn latest_proved_block(
42-
&self,
42+
&mut self,
4343
) -> Result<Option<(BlockNumber, BlockHash)>, BaseLayerSourceError> {
4444
let finality = 0;
4545
let latest_l1_block_number = self

crates/apollo_central_sync/src/sources/central_sync_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ async fn run_sync(
132132
central_source: Arc::new(central),
133133
pending_source: Arc::new(pending_source),
134134
pending_classes: Arc::new(RwLock::new(PendingClasses::default())),
135-
base_layer_source: Some(Arc::new(base_layer)),
135+
base_layer_source: Some(Arc::new(Mutex::new(base_layer))),
136136
reader,
137137
writer: Arc::new(Mutex::new(writer)),
138138
sequencer_pub_key: None,

crates/apollo_central_sync/src/sync_test.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ async fn stream_new_base_layer_block_test_header_marker() {
144144
let mut mock = MockBaseLayerSourceTrait::new();
145145
mock.expect_latest_proved_block().times(4).returning(move || Ok(iter.next()));
146146
let mut stream =
147-
stream_new_base_layer_block(reader, Arc::new(mock), Duration::from_millis(0)).boxed();
147+
stream_new_base_layer_block(reader, Arc::new(Mutex::new(mock)), Duration::from_millis(0))
148+
.boxed();
148149

149150
let event = stream.next().await.unwrap().unwrap();
150151
assert_matches!(event, SyncEvent::NewBaseLayerBlock { block_number: BlockNumber(1), .. });
@@ -167,7 +168,8 @@ async fn stream_new_base_layer_block_no_blocks_on_base_layer() {
167168
mock.expect_latest_proved_block().times(2).returning(move || Ok(values.next().unwrap()));
168169

169170
let mut stream =
170-
stream_new_base_layer_block(reader, Arc::new(mock), Duration::from_millis(0)).boxed();
171+
stream_new_base_layer_block(reader, Arc::new(Mutex::new(mock)), Duration::from_millis(0))
172+
.boxed();
171173

172174
let event = stream.next().await.unwrap().unwrap();
173175
assert_matches!(event, SyncEvent::NewBaseLayerBlock { block_number: BlockNumber(1), .. });
@@ -201,7 +203,7 @@ async fn store_base_layer_block_test() {
201203
central_source: Arc::new(MockCentralSourceTrait::new()),
202204
pending_source: Arc::new(MockPendingSourceTrait::new()),
203205
pending_classes: Arc::new(RwLock::new(PendingClasses::default())),
204-
base_layer_source: Some(Arc::new(MockBaseLayerSourceTrait::new())),
206+
base_layer_source: Some(Arc::new(Mutex::new(MockBaseLayerSourceTrait::new()))),
205207
reader,
206208
writer: Arc::new(Mutex::new(writer)),
207209
sequencer_pub_key: None,

crates/apollo_integration_tests/tests/events_from_other_contracts.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use starknet_api::{calldata, contract_address, felt};
1414
async fn events_from_other_contract() {
1515
const EVENT_IDENTIFIERS: &[EventIdentifier] = &[LOG_MESSAGE_TO_L2_EVENT_IDENTIFIER];
1616

17-
let anvil_base_layer = AnvilBaseLayer::new(None).await;
17+
let mut anvil_base_layer = AnvilBaseLayer::new(None).await;
1818
// Anvil base layer already auto-deployed a starknet contract.
1919
let this_contract = &anvil_base_layer.ethereum_base_layer.contract;
2020

crates/apollo_integration_tests/tests/l1_events_scraper_end_to_end.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use starknet_api::transaction::{L1HandlerTransaction, TransactionHasher, Transac
2222
#[tokio::test]
2323
async fn scraper_end_to_end() {
2424
// Setup.
25-
let base_layer = AnvilBaseLayer::new(None).await;
25+
let mut base_layer = AnvilBaseLayer::new(None).await;
2626
let contract = &base_layer.ethereum_base_layer.contract;
2727
let mut l1_provider_client = MockL1ProviderClient::default();
2828

@@ -61,7 +61,7 @@ async fn scraper_end_to_end() {
6161
let receipt = msg.send().await.unwrap().get_receipt().await.unwrap();
6262
l1_handler_timestamps.push(
6363
base_layer
64-
.get_block_header(receipt.block_number.unwrap())
64+
.get_block_header_immutable(receipt.block_number.unwrap())
6565
.await
6666
.unwrap()
6767
.unwrap()

crates/apollo_integration_tests/tests/latest_proved_block_ethereum.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ async fn latest_proved_block_ethereum() {
4949
))),
5050
};
5151

52-
let base_layer = AnvilBaseLayer::new(None).await;
52+
let mut base_layer = AnvilBaseLayer::new(None).await;
5353
let provider = &base_layer.anvil_provider;
5454

5555
let mut current_block = provider.get_block_number().await.expect("Failed to get block number");

crates/apollo_integration_tests/tests/mocked_starknet_state_update_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use starknet_api::block::{BlockHash, BlockHashAndNumber, BlockNumber};
1010

1111
#[tokio::test]
1212
async fn test_mocked_starknet_state_update() {
13-
let base_layer = AnvilBaseLayer::new(None).await;
13+
let mut base_layer = AnvilBaseLayer::new(None).await;
1414

1515
// Check that the contract was initialized (during the construction above).
1616
let genesis_block_number = 1;

0 commit comments

Comments
 (0)