From 1776c00c6ff74310bc8af8c1334981e8b67e859d Mon Sep 17 00:00:00 2001 From: Vitalii Drohan Date: Tue, 23 Jun 2020 16:03:29 +0300 Subject: [PATCH 1/2] Add withdraw block faster commit --- core/models/src/config_options.rs | 11 +++++++++++ core/server/src/main.rs | 1 + core/server/src/state_keeper.rs | 13 ++++++++++++- core/testkit/src/lib.rs | 1 + etc/env/dev.env.example | 2 ++ 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/core/models/src/config_options.rs b/core/models/src/config_options.rs index d6c184e757..6c6ba5643b 100644 --- a/core/models/src/config_options.rs +++ b/core/models/src/config_options.rs @@ -130,6 +130,8 @@ pub struct ConfigurationOptions { pub idle_provers: u32, /// Max number of miniblocks (produced every period of `TX_MINIBATCH_CREATE_TIME`) if one block. pub max_miniblock_iterations: usize, + /// Max number of miniblocks for block with withdraw operations (defaults to `max_minblock_iterations`). + pub max_miniblock_iterations_withdraw_block: usize, } impl ConfigurationOptions { @@ -166,6 +168,15 @@ impl ConfigurationOptions { ticker_url: parse_env("TICKER_URL"), idle_provers: parse_env("IDLE_PROVERS"), max_miniblock_iterations: parse_env("MINIBLOCKS_ITERATIONS"), + max_miniblock_iterations_withdraw_block: if env::var( + "WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS", + ) + .is_ok() + { + parse_env("WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS") + } else { + parse_env("MINIBLOCKS_ITERATIONS") + }, } } } diff --git a/core/server/src/main.rs b/core/server/src/main.rs index 3b7b2580b7..ae5185fd91 100644 --- a/core/server/src/main.rs +++ b/core/server/src/main.rs @@ -164,6 +164,7 @@ fn main() { executed_tx_notify_sender, config_opts.available_block_chunk_sizes.clone(), config_opts.max_miniblock_iterations, + config_opts.max_miniblock_iterations_withdraw_block, ); let state_keeper_task = start_state_keeper(state_keeper, pending_block, &main_runtime); diff --git a/core/server/src/state_keeper.rs b/core/server/src/state_keeper.rs index acca24a1c2..3d989d854b 100644 --- a/core/server/src/state_keeper.rs +++ b/core/server/src/state_keeper.rs @@ -95,6 +95,7 @@ pub struct PlasmaStateKeeper { available_block_chunk_sizes: Vec, max_miniblock_iterations: usize, + max_miniblock_iterations_withdraw_block: usize, } pub struct PlasmaStateInitParams { @@ -232,6 +233,7 @@ impl PlasmaStateInitParams { } impl PlasmaStateKeeper { + #[allow(clippy::too_many_arguments)] pub fn new( initial_state: PlasmaStateInitParams, fee_account_address: Address, @@ -240,6 +242,7 @@ impl PlasmaStateKeeper { executed_tx_notify_sender: mpsc::Sender, available_block_chunk_sizes: Vec, max_miniblock_iterations: usize, + max_miniblock_iterations_withdraw_block: usize, ) -> Self { assert!(!available_block_chunk_sizes.is_empty()); @@ -271,6 +274,7 @@ impl PlasmaStateKeeper { executed_tx_notify_sender, available_block_chunk_sizes, max_miniblock_iterations, + max_miniblock_iterations_withdraw_block, }; let root = keeper.state.root_hash(); @@ -471,7 +475,14 @@ impl PlasmaStateKeeper { if !self.pending_block.success_operations.is_empty() { self.pending_block.pending_block_iteration += 1; - if self.pending_block.pending_block_iteration > self.max_miniblock_iterations { + + // If pending block contains withdrawals we seal it faster + let max_miniblock_iterations = if self.pending_block.withdrawals_amount > 0 { + self.max_miniblock_iterations_withdraw_block + } else { + self.max_miniblock_iterations + }; + if self.pending_block.pending_block_iteration > max_miniblock_iterations { self.seal_pending_block().await; self.notify_executed_ops(&mut executed_ops).await; return; diff --git a/core/testkit/src/lib.rs b/core/testkit/src/lib.rs index d023860258..f3000d3db3 100644 --- a/core/testkit/src/lib.rs +++ b/core/testkit/src/lib.rs @@ -347,6 +347,7 @@ pub fn spawn_state_keeper( executed_tx_notify_sender, block_chunks_sizes, max_miniblock_iterations, + max_miniblock_iterations, ); let (stop_state_keeper_sender, stop_state_keeper_receiver) = oneshot::channel::<()>(); diff --git a/etc/env/dev.env.example b/etc/env/dev.env.example index 4dda7c16c8..8940091825 100755 --- a/etc/env/dev.env.example +++ b/etc/env/dev.env.example @@ -137,3 +137,5 @@ ETH_WATCH_POLL_INTERVAL=300 # Determines block formation time MINIBLOCKS_ITERATIONS=50 +# Determines block formation time if block contains withdrawals +WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS=20 From 32af2ea80152b20e24d95f892ac95f0768e7cae8 Mon Sep 17 00:00:00 2001 From: Vitalii Drohan Date: Tue, 23 Jun 2020 16:34:07 +0300 Subject: [PATCH 2/2] extract variable --- core/models/src/config_options.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/core/models/src/config_options.rs b/core/models/src/config_options.rs index 6c6ba5643b..c4d3e60e87 100644 --- a/core/models/src/config_options.rs +++ b/core/models/src/config_options.rs @@ -140,6 +140,14 @@ impl ConfigurationOptions { pub fn from_env() -> Self { let mut available_block_chunk_sizes = block_chunk_sizes().to_vec(); available_block_chunk_sizes.sort(); + + let max_miniblock_iterations_withdraw_block = + if env::var("WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS").is_ok() { + parse_env("WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS") + } else { + parse_env("MINIBLOCKS_ITERATIONS") + }; + Self { rest_api_server_address: parse_env("REST_API_BIND"), json_rpc_http_server_address: parse_env("HTTP_RPC_API_BIND"), @@ -168,15 +176,7 @@ impl ConfigurationOptions { ticker_url: parse_env("TICKER_URL"), idle_provers: parse_env("IDLE_PROVERS"), max_miniblock_iterations: parse_env("MINIBLOCKS_ITERATIONS"), - max_miniblock_iterations_withdraw_block: if env::var( - "WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS", - ) - .is_ok() - { - parse_env("WITHDRAW_BLOCK_MINIBLOCKS_ITERATIONS") - } else { - parse_env("MINIBLOCKS_ITERATIONS") - }, + max_miniblock_iterations_withdraw_block, } } }