|
| 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