Skip to content

Commit f30483a

Browse files
papyrus_base_layer: sanity check test of data gas price after fusaka upgrade (#10488)
* papyrus_base_layer: fix the fusaka related default config values * papyrus_base_layer: sanity check test of data gas price after fusaka upgrade
1 parent 0df528f commit f30483a

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

crates/papyrus_base_layer/src/ethereum_base_layer_contract.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ use crate::{
3939
pub type EthereumBaseLayerResult<T> = Result<T, EthereumBaseLayerError>;
4040
pub type EthereumContractAddress = Address;
4141

42+
#[cfg(test)]
43+
#[path = "ethereum_base_layer_contract_test.rs"]
44+
pub mod ethereum_base_layer_contract_test;
45+
4246
// Wraps the Starknet contract with a type that implements its interface, and is aware of its
4347
// events.
4448

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
use std::time::Duration;
2+
3+
use url::Url;
4+
5+
use crate::ethereum_base_layer_contract::{EthereumBaseLayerConfig, EthereumBaseLayerContract};
6+
use crate::BaseLayerContract;
7+
8+
#[tokio::test]
9+
#[ignore = "This test uses external dependencies, like Infura. But still it is a good \
10+
reference/sanity check."]
11+
async fn fusaka_blob_fee_sanity_check() {
12+
let config = EthereumBaseLayerConfig {
13+
fusaka_no_bpo_start_block_number: 0,
14+
bpo1_start_block_number: 0,
15+
bpo2_start_block_number: 0,
16+
timeout_millis: Duration::from_millis(5000),
17+
..Default::default()
18+
};
19+
20+
// Timeline: Sepolia went on Fusaka on epoch 272640 (slot 8724480) which is about block 9408577
21+
// It went on BPO1 on epoch 274176 (slot 8773632) which is about block 9456501
22+
// It went on BPO2 on epoch 275712 (slot 8822784) which is about block 9504747
23+
let infura_api_key = std::env::var("INFURA_API_KEY")
24+
.expect("expected infura api key to be set in INFURA_API_KEY environment variable");
25+
let url = Url::parse(&format!("https://sepolia.infura.io/v3/{}", infura_api_key))
26+
.expect("expected infura url to be valid");
27+
let mut base_layer = EthereumBaseLayerContract::new(config.clone(), url);
28+
29+
// This is a known time when the data gas price was relatively high:
30+
// https://sepolia.blobscan.com/block/9716185
31+
// The blob fee here is 0.010629722 wei.
32+
let block_number = 9716185;
33+
let base_fee_from_blobscan = 10629722;
34+
let block_header = base_layer
35+
.get_block_header(block_number)
36+
.await
37+
.expect("expected call to get block header to succeed")
38+
.expect("expected block header to be found");
39+
40+
assert_eq!(block_header.blob_fee, base_fee_from_blobscan);
41+
42+
// Now try to unset the fusaka configuration, to see if we get a massively bigger blob fee.
43+
base_layer.config.fusaka_no_bpo_start_block_number = 100000000;
44+
base_layer.config.bpo1_start_block_number = 1000000000;
45+
base_layer.config.bpo2_start_block_number = 1000000000;
46+
let block_header = base_layer
47+
.get_block_header(block_number)
48+
.await
49+
.expect("expected call to get block header to succeed")
50+
.expect("expected block header to be found");
51+
52+
assert!(block_header.blob_fee > 1000 * base_fee_from_blobscan);
53+
54+
// Choose a mainnet block number that is not yet on Fusaka (but has non-zero blob fee).
55+
// https://blobscan.com/block/23824000
56+
// The blob fee here is 31.042082881 Gwei.
57+
let url = Url::parse(&format!("https://mainnet.infura.io/v3/{}", infura_api_key))
58+
.expect("expected infura url to be valid");
59+
let mut base_layer = EthereumBaseLayerContract::new(config, url);
60+
base_layer.config.fusaka_no_bpo_start_block_number = 100000000;
61+
base_layer.config.bpo1_start_block_number = 1000000000;
62+
base_layer.config.bpo2_start_block_number = 1000000000;
63+
let block_number = 23824000;
64+
let base_fee_from_blobscan = 31042082881;
65+
let block_header = base_layer
66+
.get_block_header(block_number)
67+
.await
68+
.expect("expected call to get block header to succeed")
69+
.expect("expected block header to be found");
70+
assert_eq!(block_header.blob_fee, base_fee_from_blobscan);
71+
72+
// But if we set the fusaka update to have already happened, we should get a much lower fee.
73+
base_layer.config.fusaka_no_bpo_start_block_number = 0;
74+
base_layer.config.bpo1_start_block_number = 0;
75+
base_layer.config.bpo2_start_block_number = 0;
76+
let block_header = base_layer
77+
.get_block_header(block_number)
78+
.await
79+
.expect("expected call to get block header to succeed")
80+
.expect("expected block header to be found");
81+
assert!(block_header.blob_fee * 1000 < base_fee_from_blobscan);
82+
}

0 commit comments

Comments
 (0)