Skip to content

Commit 2d1427f

Browse files
papyrus_base_layer: add test for a base layer without a starknet contract (#10242)
1 parent 811ccd2 commit 2d1427f

File tree

3 files changed

+47
-0
lines changed

3 files changed

+47
-0
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apollo_base_layer_tests/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ async-trait.workspace = true
1616
colored.workspace = true
1717
papyrus_base_layer = { workspace = true, features = ["testing"] }
1818
starknet_api.workspace = true
19+
tokio.workspace = true
1920
url.workspace = true
2021

2122
[dev-dependencies]
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
use alloy::node_bindings::Anvil;
2+
use papyrus_base_layer::ethereum_base_layer_contract::{
3+
EthereumBaseLayerConfig,
4+
EthereumBaseLayerContract,
5+
EthereumBaseLayerError,
6+
};
7+
use papyrus_base_layer::test_utils::{
8+
make_block_history_on_anvil,
9+
ARBITRARY_ANVIL_L1_ACCOUNT_ADDRESS,
10+
OTHER_ARBITRARY_ANVIL_L1_ACCOUNT_ADDRESS,
11+
};
12+
use papyrus_base_layer::BaseLayerContract;
13+
14+
#[tokio::test]
15+
async fn anvil_starts_with_no_contract() {
16+
const NUM_L1_TRANSACTIONS: usize = 10;
17+
let anvil = Anvil::new()
18+
.try_spawn()
19+
.expect("Anvil not installed, see anvil base layer for installation instructions.");
20+
let url = anvil.endpoint_url();
21+
let base_layer_config = EthereumBaseLayerConfig::default();
22+
let base_layer = EthereumBaseLayerContract::new(base_layer_config.clone(), url.clone());
23+
24+
let sender_address = ARBITRARY_ANVIL_L1_ACCOUNT_ADDRESS;
25+
let receiver_address = OTHER_ARBITRARY_ANVIL_L1_ACCOUNT_ADDRESS;
26+
make_block_history_on_anvil(
27+
sender_address,
28+
receiver_address,
29+
base_layer_config.clone(),
30+
&url,
31+
NUM_L1_TRANSACTIONS,
32+
)
33+
.await;
34+
35+
let latest_l1_block_number = base_layer.latest_l1_block_number(0).await.unwrap();
36+
assert_eq!(latest_l1_block_number, u64::try_from(NUM_L1_TRANSACTIONS).unwrap());
37+
38+
let latest_proved_block = base_layer.latest_proved_block(0).await;
39+
// In case L1 contains blocks but does not contain a contract, we get Overrun error.
40+
// TODO(guyn): We never get Ok(None) from latest_proved_block, we should remove that option.
41+
assert_eq!(
42+
latest_proved_block,
43+
Err(EthereumBaseLayerError::TypeError(alloy::sol_types::Error::Overrun))
44+
);
45+
}

0 commit comments

Comments
 (0)