Adder Parachain: Accept output file argument to export-genesis-* subcommands (#2370)

This PR makes a small change the the adder parachain's CLI. It allows
the user to specify an output file explicitly when generating the
genesis wasm and head data.

Now we no longer have to rely on redirecting the output to a file at the
shell level. This change is nice because if you have any debugging lines
enabled, shell redirection does not work.

More to the point, this makes the adder parachain's CLI match the
cumulus collator's CLI. And that will allow tools like Zombienet (that
support both cumulus and the adder) to use the positional argument.

cc @pepoviola

---------

Co-authored-by: Joshy Orndorff <git-user-email.h0ly5@simplelogin.com>
Co-authored-by: Bastian Köcher <git@kchr.de>
This commit is contained in:
Joshy Orndorff
2024-01-21 06:51:04 +08:00
committed by GitHub
parent a5370fb187
commit caa987d26d
3 changed files with 35 additions and 8 deletions
@@ -18,6 +18,7 @@
use clap::Parser;
use sc_cli::SubstrateCli;
use std::path::PathBuf;
/// Sub-commands supported by the collator.
#[derive(Debug, Parser)]
@@ -33,11 +34,19 @@ pub enum Subcommand {
/// Command for exporting the genesis head data of the parachain
#[derive(Debug, Parser)]
pub struct ExportGenesisHeadCommand {}
pub struct ExportGenesisHeadCommand {
/// Output file name or stdout if unspecified.
#[arg()]
pub output: Option<PathBuf>,
}
/// Command for exporting the genesis wasm file.
#[derive(Debug, Parser)]
pub struct ExportGenesisWasmCommand {}
pub struct ExportGenesisWasmCommand {
/// Output file name or stdout if unspecified.
#[arg()]
pub output: Option<PathBuf>,
}
#[allow(missing_docs)]
#[derive(Debug, Parser)]
@@ -22,6 +22,10 @@ use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProt
use polkadot_primitives::Id as ParaId;
use sc_cli::{Error as SubstrateCliError, SubstrateCli};
use sp_core::hexdisplay::HexDisplay;
use std::{
fs,
io::{self, Write},
};
use test_parachain_adder_collator::Collator;
/// The parachain ID to collate for in case it wasn't set explicitly through CLI.
@@ -34,15 +38,29 @@ fn main() -> Result<()> {
let cli = Cli::from_args();
match cli.subcommand {
Some(cli::Subcommand::ExportGenesisState(_params)) => {
Some(cli::Subcommand::ExportGenesisState(params)) => {
let collator = Collator::new();
println!("0x{:?}", HexDisplay::from(&collator.genesis_head()));
let output_buf =
format!("0x{:?}", HexDisplay::from(&collator.genesis_head())).into_bytes();
if let Some(output) = params.output {
std::fs::write(output, output_buf)?;
} else {
std::io::stdout().write_all(&output_buf)?;
}
Ok::<_, Error>(())
},
Some(cli::Subcommand::ExportGenesisWasm(_params)) => {
Some(cli::Subcommand::ExportGenesisWasm(params)) => {
let collator = Collator::new();
println!("0x{:?}", HexDisplay::from(&collator.validation_code()));
let output_buf =
format!("0x{:?}", HexDisplay::from(&collator.validation_code())).into_bytes();
if let Some(output) = params.output {
fs::write(output, output_buf)?;
} else {
io::stdout().write_all(&output_buf)?;
}
Ok(())
},
@@ -54,9 +54,9 @@ fn main() -> Result<()> {
Some(cli::Subcommand::ExportGenesisWasm(params)) => {
// We pass some dummy values for `pov_size` and `pvf_complexity` as these don't
// matter for `wasm` export.
let collator = Collator::default();
let output_buf =
format!("0x{:?}", HexDisplay::from(&Collator::default().validation_code()))
.into_bytes();
format!("0x{:?}", HexDisplay::from(&collator.validation_code())).into_bytes();
if let Some(output) = params.output {
fs::write(output, output_buf)?;