Skip to content

Commit 7ace594

Browse files
authored
fix(api): batch fee input scaling for debug_traceCall (#3344)
## What ❔ Changes the `debug_traceCall` handler to use gas price factor instead of plain gas factor. Additionally removes entrypoints into `get_batch_fee_input_scaled` with default scaling factor (1.0) ## Why ❔ Previously, `debug_traceCall` was using incorrect gas scaling factor ## Checklist <!-- Check your PR fulfills the following items. --> <!-- For draft PRs check the boxes as you complete them. --> - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [x] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`.
1 parent d0078df commit 7ace594

File tree

4 files changed

+13
-21
lines changed

4 files changed

+13
-21
lines changed

core/lib/config/src/configs/api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ impl Web3JsonRpcConfig {
243243
pubsub_polling_interval: Some(200),
244244
max_nonce_ahead: 50,
245245
gas_price_scale_factor: 1.2,
246-
estimate_gas_scale_factor: 1.2,
246+
estimate_gas_scale_factor: 1.5,
247247
estimate_gas_acceptable_overestimation: 1000,
248248
estimate_gas_optimize_search: false,
249249
max_tx_size: 1000000,

core/node/api_server/src/tx_sender/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ impl TxSender {
588588
}
589589

590590
// For now, both L1 gas price and pubdata price are scaled with the same coefficient
591-
async fn scaled_batch_fee_input(&self) -> anyhow::Result<BatchFeeInput> {
591+
pub(crate) async fn scaled_batch_fee_input(&self) -> anyhow::Result<BatchFeeInput> {
592592
self.0
593593
.batch_fee_input_provider
594594
.get_batch_fee_input_scaled(

core/node/api_server/src/tx_sender/tests/send_tx.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use assert_matches::assert_matches;
66
use chrono::NaiveDateTime;
77
use test_casing::test_casing;
88
use zksync_multivm::interface::{tracer::ValidationTraces, ExecutionResult};
9-
use zksync_node_fee_model::MockBatchFeeParamsProvider;
9+
use zksync_node_fee_model::{BatchFeeModelInputProvider, MockBatchFeeParamsProvider};
1010
use zksync_node_test_utils::create_l2_transaction;
1111
use zksync_types::K256PrivateKey;
1212

@@ -22,10 +22,9 @@ async fn submitting_tx_requires_one_connection() {
2222
.unwrap();
2323

2424
let l2_chain_id = L2ChainId::default();
25-
let fee_input = MockBatchFeeParamsProvider::default()
26-
.get_batch_fee_input_scaled(1.0, 1.0)
27-
.await
28-
.unwrap();
25+
let fee_params_provider: &dyn BatchFeeModelInputProvider =
26+
&MockBatchFeeParamsProvider::default();
27+
let fee_input = fee_params_provider.get_batch_fee_input().await.unwrap();
2928
let (base_fee, gas_per_pubdata) =
3029
derive_base_fee_and_gas_per_pubdata(fee_input, ProtocolVersionId::latest().into());
3130
let tx = create_l2_transaction(base_fee, gas_per_pubdata);
@@ -130,10 +129,9 @@ async fn fee_validation_errors() {
130129
let l2_chain_id = L2ChainId::default();
131130
let tx_executor = SandboxExecutor::mock(MockOneshotExecutor::default()).await;
132131
let (tx_sender, _) = create_test_tx_sender(pool.clone(), l2_chain_id, tx_executor).await;
133-
let fee_input = MockBatchFeeParamsProvider::default()
134-
.get_batch_fee_input_scaled(1.0, 1.0)
135-
.await
136-
.unwrap();
132+
let fee_params_provider: &dyn BatchFeeModelInputProvider =
133+
&MockBatchFeeParamsProvider::default();
134+
let fee_input = fee_params_provider.get_batch_fee_input().await.unwrap();
137135
let (base_fee, gas_per_pubdata) =
138136
derive_base_fee_and_gas_per_pubdata(fee_input, ProtocolVersionId::latest().into());
139137
let tx = create_l2_transaction(base_fee, gas_per_pubdata);
@@ -322,10 +320,9 @@ async fn submit_tx_with_validation_traces(actual_range: Range<u64>, expected_ran
322320
.unwrap();
323321

324322
let l2_chain_id = L2ChainId::default();
325-
let fee_input = MockBatchFeeParamsProvider::default()
326-
.get_batch_fee_input_scaled(1.0, 1.0)
327-
.await
328-
.unwrap();
323+
let fee_params_provider: &dyn BatchFeeModelInputProvider =
324+
&MockBatchFeeParamsProvider::default();
325+
let fee_input = fee_params_provider.get_batch_fee_input().await.unwrap();
329326
let (base_fee, gas_per_pubdata) =
330327
derive_base_fee_and_gas_per_pubdata(fee_input, ProtocolVersionId::latest().into());
331328
let tx = create_l2_transaction(base_fee, gas_per_pubdata);

core/node/api_server/src/web3/namespaces/debug.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -244,12 +244,7 @@ impl DebugNamespace {
244244
// It is important to drop a DB connection before calling the provider, since it acquires a connection internally
245245
// on the main node.
246246
drop(connection);
247-
let scale_factor = self.state.api_config.estimate_gas_scale_factor;
248-
let fee_input_provider = &self.state.tx_sender.0.batch_fee_input_provider;
249-
// For now, the same scaling is used for both the L1 gas price and the pubdata price
250-
fee_input_provider
251-
.get_batch_fee_input_scaled(scale_factor, scale_factor)
252-
.await?
247+
self.state.tx_sender.scaled_batch_fee_input().await?
253248
} else {
254249
let fee_input = block_args.historical_fee_input(&mut connection).await?;
255250
drop(connection);

0 commit comments

Comments
 (0)