Skip to content

Commit bab346b

Browse files
authored
Merge pull request #761 from matter-labs/dvush/seal-withdraw-block-faster
Dvush/seal withdraw block faster
2 parents da0670e + 32af2ea commit bab346b

File tree

5 files changed

+27
-1
lines changed

5 files changed

+27
-1
lines changed

core/models/src/config_options.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ pub struct ConfigurationOptions {
130130
pub idle_provers: u32,
131131
/// Max number of miniblocks (produced every period of `TX_MINIBATCH_CREATE_TIME`) if one block.
132132
pub max_miniblock_iterations: usize,
133+
/// Max number of miniblocks for block with withdraw operations (defaults to `max_minblock_iterations`).
134+
pub max_miniblock_iterations_withdraw_block: usize,
133135
}
134136

135137
impl ConfigurationOptions {
@@ -138,6 +140,14 @@ impl ConfigurationOptions {
138140
pub fn from_env() -> Self {
139141
let mut available_block_chunk_sizes = block_chunk_sizes().to_vec();
140142
available_block_chunk_sizes.sort();
143+
144+
let max_miniblock_iterations_withdraw_block =
145+
if env::var("WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS").is_ok() {
146+
parse_env("WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS")
147+
} else {
148+
parse_env("MINIBLOCKS_ITERATIONS")
149+
};
150+
141151
Self {
142152
rest_api_server_address: parse_env("REST_API_BIND"),
143153
json_rpc_http_server_address: parse_env("HTTP_RPC_API_BIND"),
@@ -166,6 +176,7 @@ impl ConfigurationOptions {
166176
ticker_url: parse_env("TICKER_URL"),
167177
idle_provers: parse_env("IDLE_PROVERS"),
168178
max_miniblock_iterations: parse_env("MINIBLOCKS_ITERATIONS"),
179+
max_miniblock_iterations_withdraw_block,
169180
}
170181
}
171182
}

core/server/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ fn main() {
164164
executed_tx_notify_sender,
165165
config_opts.available_block_chunk_sizes.clone(),
166166
config_opts.max_miniblock_iterations,
167+
config_opts.max_miniblock_iterations_withdraw_block,
167168
);
168169
let state_keeper_task = start_state_keeper(state_keeper, pending_block, &main_runtime);
169170

core/server/src/state_keeper.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ pub struct PlasmaStateKeeper {
9595

9696
available_block_chunk_sizes: Vec<usize>,
9797
max_miniblock_iterations: usize,
98+
max_miniblock_iterations_withdraw_block: usize,
9899
}
99100

100101
pub struct PlasmaStateInitParams {
@@ -232,6 +233,7 @@ impl PlasmaStateInitParams {
232233
}
233234

234235
impl PlasmaStateKeeper {
236+
#[allow(clippy::too_many_arguments)]
235237
pub fn new(
236238
initial_state: PlasmaStateInitParams,
237239
fee_account_address: Address,
@@ -240,6 +242,7 @@ impl PlasmaStateKeeper {
240242
executed_tx_notify_sender: mpsc::Sender<ExecutedOpsNotify>,
241243
available_block_chunk_sizes: Vec<usize>,
242244
max_miniblock_iterations: usize,
245+
max_miniblock_iterations_withdraw_block: usize,
243246
) -> Self {
244247
assert!(!available_block_chunk_sizes.is_empty());
245248

@@ -271,6 +274,7 @@ impl PlasmaStateKeeper {
271274
executed_tx_notify_sender,
272275
available_block_chunk_sizes,
273276
max_miniblock_iterations,
277+
max_miniblock_iterations_withdraw_block,
274278
};
275279

276280
let root = keeper.state.root_hash();
@@ -471,7 +475,14 @@ impl PlasmaStateKeeper {
471475

472476
if !self.pending_block.success_operations.is_empty() {
473477
self.pending_block.pending_block_iteration += 1;
474-
if self.pending_block.pending_block_iteration > self.max_miniblock_iterations {
478+
479+
// If pending block contains withdrawals we seal it faster
480+
let max_miniblock_iterations = if self.pending_block.withdrawals_amount > 0 {
481+
self.max_miniblock_iterations_withdraw_block
482+
} else {
483+
self.max_miniblock_iterations
484+
};
485+
if self.pending_block.pending_block_iteration > max_miniblock_iterations {
475486
self.seal_pending_block().await;
476487
self.notify_executed_ops(&mut executed_ops).await;
477488
return;

core/testkit/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ pub fn spawn_state_keeper(
347347
executed_tx_notify_sender,
348348
block_chunks_sizes,
349349
max_miniblock_iterations,
350+
max_miniblock_iterations,
350351
);
351352

352353
let (stop_state_keeper_sender, stop_state_keeper_receiver) = oneshot::channel::<()>();

etc/env/dev.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,5 @@ ETH_WATCH_POLL_INTERVAL=300
137137

138138
# Determines block formation time
139139
MINIBLOCKS_ITERATIONS=50
140+
# Determines block formation time if block contains withdrawals
141+
WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS=20

0 commit comments

Comments
 (0)