Skip to content
This repository has been archived by the owner on Sep 25, 2023. It is now read-only.

Commit

Permalink
feature/no-fork-cli-flag
Browse files Browse the repository at this point in the history
Signed-off-by: Joseph Livesey <[email protected]>
  • Loading branch information
suchapalaver committed Jun 24, 2022
1 parent 22b9358 commit dfdfef4
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 30 deletions.
60 changes: 37 additions & 23 deletions src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -212,11 +212,13 @@ impl DevmodeService {
}
}

pub struct DevmodeEngine {}
pub struct DevmodeEngine {
no_forks: bool,
}

impl DevmodeEngine {
pub fn new() -> Self {
DevmodeEngine {}
pub fn new(no_forks: bool) -> Self {
DevmodeEngine { no_forks }
}
}

Expand Down Expand Up @@ -282,31 +284,43 @@ impl Engine for DevmodeEngine {
DisplayBlock(&block)
);

// Advance the chain if possible.
if block.block_num > chain_head.block_num
|| (block.block_num == chain_head.block_num
&& block.block_id > chain_head.block_id)
{
info!("Committing {}", DisplayBlock(&block));
service.commit_block(block_id);
} else if block.block_num < chain_head.block_num {
let mut chain_block = chain_head;
loop {
chain_block = service.get_block(&chain_block.previous_id);
if chain_block.block_num == block.block_num {
break;
}
}
if block.block_id > chain_block.block_id {
info!("Switching to new fork {}", DisplayBlock(&block));
if self.no_forks {
if block.block_num > chain_head.block_num
&& block.block_num == chain_head.block_num + 1
{
info!("Committing {}", DisplayBlock(&block));
service.commit_block(block_id);
} else {
info!("Ignoring fork {}", DisplayBlock(&block));
info!("Ignoring {}", DisplayBlock(&block));
service.ignore_block(block_id);
}
} else {
info!("Ignoring {}", DisplayBlock(&block));
service.ignore_block(block_id);
// Advance the chain if possible.
if block.block_num > chain_head.block_num
|| (block.block_num == chain_head.block_num
&& block.block_id > chain_head.block_id)
{
info!("Committing {}", DisplayBlock(&block));
service.commit_block(block_id);
} else if block.block_num < chain_head.block_num {
let mut chain_block = chain_head;
loop {
chain_block = service.get_block(&chain_block.previous_id);
if chain_block.block_num == block.block_num {
break;
}
}
if block.block_id > chain_block.block_id {
info!("Switching to new fork {}", DisplayBlock(&block));
service.commit_block(block_id);
} else {
info!("Ignoring fork {}", DisplayBlock(&block));
service.ignore_block(block_id);
}
} else {
info!("Ignoring {}", DisplayBlock(&block));
service.ignore_block(block_id);
}
}
}

Expand Down
17 changes: 10 additions & 7 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,17 @@ fn main() {
(@arg connect: -C --connect +takes_value
"connection endpoint for validator")
(@arg verbose: -v --verbose +multiple
"increase output verbosity"))
"increase output verbosity")
(@arg no_forks: -n --no-forks
"prevent chain forking"))
.get_matches();

let endpoint = matches
.value_of("connect")
.unwrap_or("tcp://localhost:5050");

let no_forks: bool = matches.is_present("no_forks");

let console_log_level;
match matches.occurrences_of("verbose") {
0 => console_log_level = LogLevelFilter::Warn,
Expand Down Expand Up @@ -77,10 +81,9 @@ fn main() {
});

let (driver, _stop) = ZmqDriver::new();
driver
.start(endpoint, DevmodeEngine::new())
.unwrap_or_else(|err| {
error!("{}", err);
process::exit(1);
});
let engine = DevmodeEngine::new(no_forks);
driver.start(endpoint, engine).unwrap_or_else(|err| {
error!("{}", err);
process::exit(1);
});
}

0 comments on commit dfdfef4

Please sign in to comment.