|
1 | 1 | #![recursion_limit = "256"] |
2 | 2 |
|
3 | 3 | use builder::{ |
| 4 | + config::{BuilderConfig, env_var_info}, |
4 | 5 | service::serve_builder, |
5 | 6 | tasks::{ |
6 | 7 | block::sim::SimulatorTask, cache::CacheTasks, env::EnvTask, metrics::MetricsTask, |
7 | 8 | submit::FlashbotsTask, |
8 | 9 | }, |
9 | 10 | }; |
10 | | -use init4_bin_base::deps::tracing::{info, info_span}; |
| 11 | +use eyre::bail; |
| 12 | +use git_version::git_version; |
| 13 | +use init4_bin_base::{ |
| 14 | + deps::tracing::{info, info_span}, |
| 15 | + utils::from_env::FromEnv, |
| 16 | +}; |
11 | 17 | use tokio::select; |
12 | 18 |
|
| 19 | +const GIT_COMMIT: &str = |
| 20 | + git_version!(args = ["--always", "--match=", "--abbrev=7"], fallback = "unknown"); |
| 21 | +const PKG_VERSION: &str = env!("CARGO_PKG_VERSION"); |
| 22 | + |
| 23 | +fn should_print_help() -> bool { |
| 24 | + std::env::args().any(|arg| { |
| 25 | + let lowercase_arg = arg.to_ascii_lowercase(); |
| 26 | + lowercase_arg == "-h" || lowercase_arg == "--help" |
| 27 | + }) |
| 28 | +} |
| 29 | + |
| 30 | +fn print_help() { |
| 31 | + let version = env!("CARGO_PKG_VERSION"); |
| 32 | + let env_vars = env_var_info(); |
| 33 | + println!( |
| 34 | + r#"Signet block builder v{version} |
| 35 | +
|
| 36 | +Run with no args. Configuration is via the following environment variables: |
| 37 | +{env_vars} |
| 38 | +"# |
| 39 | + ) |
| 40 | +} |
| 41 | + |
13 | 42 | // Note: Must be set to `multi_thread` to support async tasks. |
14 | 43 | // See: https://docs.rs/tokio/latest/tokio/attr.main.html |
15 | 44 | #[tokio::main(flavor = "multi_thread")] |
16 | 45 | async fn main() -> eyre::Result<()> { |
17 | | - let _guard = init4_bin_base::init4(); |
| 46 | + if should_print_help() { |
| 47 | + print_help(); |
| 48 | + return Ok(()); |
| 49 | + } |
| 50 | + |
| 51 | + if let Err(e) = BuilderConfig::check_inventory() { |
| 52 | + for item in e { |
| 53 | + eprintln!("missing environment variable: {}: {}", item.var, item.description); |
| 54 | + } |
| 55 | + bail!( |
| 56 | + "missing at least one required environment variable; run with '--help' to see the list" |
| 57 | + ); |
| 58 | + } |
| 59 | + |
| 60 | + let config = builder::config_from_env(); |
18 | 61 | let init_span_guard = info_span!("builder initialization").entered(); |
19 | 62 |
|
20 | | - builder::config_from_env(); |
| 63 | + info!(pkg_version = PKG_VERSION, git_commit = GIT_COMMIT, "starting builder"); |
21 | 64 |
|
22 | 65 | // Pre-load the KZG settings in a separate thread. |
23 | 66 | // |
@@ -45,7 +88,7 @@ async fn main() -> eyre::Result<()> { |
45 | 88 | let build_jh = simulator_task.spawn_simulator_task(cache_system.sim_cache, submit_channel); |
46 | 89 |
|
47 | 90 | // Start the healthcheck server |
48 | | - let server = serve_builder(([0, 0, 0, 0], builder::config().builder_port)); |
| 91 | + let server = serve_builder(([0, 0, 0, 0], config.builder_port)); |
49 | 92 |
|
50 | 93 | // We have finished initializing the builder, so we can drop the init span |
51 | 94 | // guard. |
|
0 commit comments