-
Notifications
You must be signed in to change notification settings - Fork 123
Fix babe epoch command #696
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop-2022
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,12 @@ | ||
| // Copyright 2019-2023 ChainX Project Authors. Licensed under GPL-3.0. | ||
|
|
||
| use sc_cli::{CliConfiguration, KeySubcommand, SignCmd, VanityCmd, VerifyCmd}; | ||
| use sc_cli::{ | ||
| CliConfiguration, KeySubcommand, PruningParams, Result, SharedParams, SignCmd, SubstrateCli, | ||
| VanityCmd, VerifyCmd, | ||
| }; | ||
| use sc_client_api::AuxStore; | ||
|
|
||
| use chainx_service::new_partial; | ||
|
|
||
| #[derive(Debug, clap::Parser)] | ||
| pub struct Cli { | ||
|
|
@@ -58,6 +64,123 @@ pub enum Subcommand { | |
|
|
||
| /// Revert the chain to a previous state. | ||
| Revert(sc_cli::RevertCmd), | ||
|
|
||
| /// Dump or override babe epoch change config | ||
| #[clap(subcommand)] | ||
| FixBabeEpoch(FixEpochSubCommand), | ||
| } | ||
|
|
||
| #[derive(Debug, clap::Subcommand)] | ||
| pub enum FixEpochSubCommand { | ||
| /// Dump current babe epoch change config | ||
| Dump(FixEpochDumpCommand), | ||
icodezjb marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| /// Override current babe epoch change config by the specified raw config data(bytes) | ||
| Override(FixEpochOverrideommand), | ||
| } | ||
|
|
||
| impl FixEpochSubCommand { | ||
| /// Run the command | ||
| pub fn run<C: SubstrateCli>(&self, cli: &C) -> Result<()> { | ||
| match self { | ||
| FixEpochSubCommand::Dump(cmd) => cmd.run(cli), | ||
| FixEpochSubCommand::Override(cmd) => cmd.run(cli), | ||
| } | ||
| } | ||
| } | ||
|
|
||
| #[derive(Debug, clap::Parser)] | ||
| pub struct FixEpochDumpCommand { | ||
| #[allow(missing_docs)] | ||
| #[clap(flatten)] | ||
| pub shared_params: SharedParams, | ||
|
|
||
| #[allow(missing_docs)] | ||
| #[clap(flatten)] | ||
| pub pruning_params: PruningParams, | ||
| } | ||
| const BABE_EPOCH_CHANGES_KEY: &[u8] = b"babe_epoch_changes"; | ||
| use codec::{Decode, Encode}; | ||
| use sc_consensus_babe::Epoch; | ||
| use sc_consensus_epochs::EpochChangesFor; | ||
|
|
||
| impl FixEpochDumpCommand { | ||
| pub fn run<C: SubstrateCli>(&self, cli: &C) -> Result<()> { | ||
| let runner = cli.create_runner(self)?; | ||
| runner.sync_run(|mut config| { | ||
| let components = new_partial::< | ||
| chainx_runtime::RuntimeApi, | ||
| chainx_executor::ChainXExecutor, | ||
| >(&mut config)?; | ||
| let client = components.client; | ||
| let bytes = client | ||
| .get_aux(BABE_EPOCH_CHANGES_KEY) | ||
| .expect("Access DB should success") | ||
| .expect("value must exist"); | ||
| let hex_str = hex::encode(&bytes); | ||
| println!("{}", hex_str); | ||
| let epoch: EpochChangesFor<chainx_runtime::Block, Epoch> = | ||
| codec::Decode::decode(&mut &bytes[..]).expect("Decode must success"); | ||
| println!("epoch: {:?}", epoch); | ||
| Ok(()) | ||
| }) | ||
| } | ||
| } | ||
|
|
||
| #[derive(Debug, clap::Parser)] | ||
| pub struct FixEpochOverrideommand { | ||
| #[allow(missing_docs)] | ||
| #[clap(flatten)] | ||
| pub shared_params: SharedParams, | ||
|
|
||
| #[allow(missing_docs)] | ||
| #[clap(flatten)] | ||
| pub pruning_params: PruningParams, | ||
|
|
||
| #[clap(long)] | ||
| pub bytes: String, | ||
icodezjb marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| } | ||
|
|
||
| impl FixEpochOverrideommand { | ||
| pub fn run<C: SubstrateCli>(&self, cli: &C) -> Result<()> { | ||
| let runner = cli.create_runner(self)?; | ||
| runner.sync_run(|mut config| { | ||
| let components = new_partial::< | ||
| chainx_runtime::RuntimeApi, | ||
| chainx_executor::ChainXExecutor, | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we have 3 type runtime, maybe re-use the macro |
||
| >(&mut config)?; | ||
| let client = components.client; | ||
|
|
||
| let bytes = hex::decode(&self.bytes).expect("require hex string without 0x"); | ||
| let epoch: EpochChangesFor<chainx_runtime::Block, Epoch> = | ||
| Decode::decode(&mut &bytes[..]).expect("Decode must success"); | ||
| println!("epoch: {:?}", epoch); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we can change the |
||
|
|
||
| client | ||
| .insert_aux(&[(BABE_EPOCH_CHANGES_KEY, &epoch.encode()[..])], &[]) | ||
| .expect("Insert to db must success"); | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. those expect can change to Err and using |
||
| Ok(()) | ||
| }) | ||
| } | ||
| } | ||
|
|
||
| impl CliConfiguration for FixEpochDumpCommand { | ||
| fn shared_params(&self) -> &SharedParams { | ||
| &self.shared_params | ||
| } | ||
|
|
||
| fn pruning_params(&self) -> Option<&PruningParams> { | ||
| Some(&self.pruning_params) | ||
| } | ||
| } | ||
|
|
||
| impl CliConfiguration for FixEpochOverrideommand { | ||
| fn shared_params(&self) -> &SharedParams { | ||
| &self.shared_params | ||
| } | ||
|
|
||
| fn pruning_params(&self) -> Option<&PruningParams> { | ||
| Some(&self.pruning_params) | ||
| } | ||
| } | ||
|
|
||
| #[allow(missing_docs)] | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| 040b4eb44384c71c3676f846f426d4ad562d9aa119412692e09378ebe72385f9c57aa6bc00014fcfeb100000000081cfeb100000000004eac5f887ca6f1981c440b145f02aa9df02343da060cb96f43d0e4a61a126d0f17da6bc000181cfeb1000000000b3cfeb10000000000403dc3400a2d4d74fb8027a3e239c0071f1eb844925647f1824ab54f038a2c9347fa6bc0001b3cfeb1000000000e5cfeb10000000000864266cf80ad4c34a760b6696f8a586f46ffa7cb9f5cc06c08a2ad5997d70374e83a6bc000117d0eb100000000049d0eb1000000000007dea6c250122e4361577c7f6a7237923efaefa1d0c83945135dd050f0cd72e2483a6bc000149d0eb10000000007bd0eb100000000000001403dc3400a2d4d74fb8027a3e239c0071f1eb844925647f1824ab54f038a2c9347fa6bc000151cb030000000000b3cfeb1000000000320000000000000054464a78ec0b6e44452c18f1fd363d32cd5e591d18d0e0a2fbb6935b246f9954090100000000000000660098bd0806bb14799ce6dae47bcf8fe0d84b82dcb866191f3b3a591e01ff5101000000000000001ac6ee27ae8f7a5fb2cd583a47db9ece87cd7fb293cfaeb89ad7d403eff15c310100000000000000fce5dc578c6238a8b1c8e183d13045df12201f4ed75073df46f7bbe37313f63f01000000000000000a3c94b756f731d2d15307089261b3cb01cbc49baf99eaeeea4f60c35490401401000000000000008a41f26c1f500154911c5c3fd2d7e9b0c14df1e45ba407d378d21706de389f01010000000000000028341fb93b8d0316c8c8fb3424e46bc46610c4a932e1f03f7981a5edf61d19730100000000000000ba0b904bba1e15a05b378314df9051e826dd4df358eeb121fd0ffbb061d37d790100000000000000a86a00d7f0bca3c1ad2e4174b1a0b80a6f60582cf1a4aa7efa748f5469f6611c0100000000000000a2aa9967d116996fb0ee520fa429e34efcc6fe6f7053c46926aa501bee67851001000000000000004a62842365cf18207eecfba694f06d8160626bede884403a28d9bfdb3644251f0100000000000000c81021b75d78268756fbbfbf37a58c7f5cf97c99e293491d45cf99b80eaabf6201000000000000008848b514fdb737ef7cb354973adb8d10e416d10507452e09835bab838d957b5d01000000000000007a06704178ca1fd6faabf1f96eeb54406e42f34e3141508fcf3f892810ebd56f0100000000000000d60eaa868ac564334d25d5a7e77b066f1e2a9358481730c89d2f5410328b94620100000000000000308e5fb23958eed9b61aa25c1abbd4c857e7daa4489510dbd5d1e05e4d052d3c01000000000000006688f8f55c804cdade75a3635ec8f42d72399debdc93c8351ed29d20ddb79e0d0100000000000000b2793e5b19b7489dfbeb48084fce4eca3c6d1e1a64db96981e7935167ea6162201000000000000001a2ac756e8e480804a1cb4cb2cd1553074ecefb62cd0bcd1ae289b662386cf0e010000000000000068f7b28f333ffbd225925e30147c7dd4348bcf924fd0d19acf46550ba81b914301000000000000004ed310064cf382434fccce1318eb5d636166044d66e433ffd9797da4c85bc15501000000000000006df228ffb96a9d6c2c7078b879be329cd5f714c3375588d4ad43c0e67626df1f01000000000000000400000000000000020b4eb44384c71c3676f846f426d4ad562d9aa119412692e09378ebe72385f9c57aa6bc00014fcb0300000000004fcfeb1000000000320000000000000054464a78ec0b6e44452c18f1fd363d32cd5e591d18d0e0a2fbb6935b246f9954090100000000000000660098bd0806bb14799ce6dae47bcf8fe0d84b82dcb866191f3b3a591e01ff5101000000000000001ac6ee27ae8f7a5fb2cd583a47db9ece87cd7fb293cfaeb89ad7d403eff15c310100000000000000fce5dc578c6238a8b1c8e183d13045df12201f4ed75073df46f7bbe37313f63f01000000000000000a3c94b756f731d2d15307089261b3cb01cbc49baf99eaeeea4f60c35490401401000000000000008a41f26c1f500154911c5c3fd2d7e9b0c14df1e45ba407d378d21706de389f01010000000000000028341fb93b8d0316c8c8fb3424e46bc46610c4a932e1f03f7981a5edf61d19730100000000000000ba0b904bba1e15a05b378314df9051e826dd4df358eeb121fd0ffbb061d37d790100000000000000a86a00d7f0bca3c1ad2e4174b1a0b80a6f60582cf1a4aa7efa748f5469f6611c0100000000000000a2aa9967d116996fb0ee520fa429e34efcc6fe6f7053c46926aa501bee67851001000000000000004a62842365cf18207eecfba694f06d8160626bede884403a28d9bfdb3644251f0100000000000000c81021b75d78268756fbbfbf37a58c7f5cf97c99e293491d45cf99b80eaabf6201000000000000008848b514fdb737ef7cb354973adb8d10e416d10507452e09835bab838d957b5d01000000000000007a06704178ca1fd6faabf1f96eeb54406e42f34e3141508fcf3f892810ebd56f0100000000000000d60eaa868ac564334d25d5a7e77b066f1e2a9358481730c89d2f5410328b94620100000000000000308e5fb23958eed9b61aa25c1abbd4c857e7daa4489510dbd5d1e05e4d052d3c01000000000000006688f8f55c804cdade75a3635ec8f42d72399debdc93c8351ed29d20ddb79e0d0100000000000000b2793e5b19b7489dfbeb48084fce4eca3c6d1e1a64db96981e7935167ea6162201000000000000001a2ac756e8e480804a1cb4cb2cd1553074ecefb62cd0bcd1ae289b662386cf0e010000000000000068f7b28f333ffbd225925e30147c7dd4348bcf924fd0d19acf46550ba81b914301000000000000004ed310064cf382434fccce1318eb5d636166044d66e433ffd9797da4c85bc1550100000000000000a1a7d603a390952aee0b388b1272985edaef90c4d27e49e2dd6335390ccf0ad9010000000000000004000000000000000264266cf80ad4c34a760b6696f8a586f46ffa7cb9f5cc06c08a2ad5997d70374e83a6bc000153cb03000000000017d0eb1000000000320000000000000054464a78ec0b6e44452c18f1fd363d32cd5e591d18d0e0a2fbb6935b246f9954090100000000000000660098bd0806bb14799ce6dae47bcf8fe0d84b82dcb866191f3b3a591e01ff5101000000000000001ac6ee27ae8f7a5fb2cd583a47db9ece87cd7fb293cfaeb89ad7d403eff15c310100000000000000fce5dc578c6238a8b1c8e183d13045df12201f4ed75073df46f7bbe37313f63f01000000000000000a3c94b756f731d2d15307089261b3cb01cbc49baf99eaeeea4f60c35490401401000000000000008a41f26c1f500154911c5c3fd2d7e9b0c14df1e45ba407d378d21706de389f01010000000000000028341fb93b8d0316c8c8fb3424e46bc46610c4a932e1f03f7981a5edf61d19730100000000000000ba0b904bba1e15a05b378314df9051e826dd4df358eeb121fd0ffbb061d37d790100000000000000a86a00d7f0bca3c1ad2e4174b1a0b80a6f60582cf1a4aa7efa748f5469f6611c0100000000000000a2aa9967d116996fb0ee520fa429e34efcc6fe6f7053c46926aa501bee67851001000000000000004a62842365cf18207eecfba694f06d8160626bede884403a28d9bfdb3644251f0100000000000000c81021b75d78268756fbbfbf37a58c7f5cf97c99e293491d45cf99b80eaabf6201000000000000008848b514fdb737ef7cb354973adb8d10e416d10507452e09835bab838d957b5d01000000000000007a06704178ca1fd6faabf1f96eeb54406e42f34e3141508fcf3f892810ebd56f0100000000000000d60eaa868ac564334d25d5a7e77b066f1e2a9358481730c89d2f5410328b94620100000000000000308e5fb23958eed9b61aa25c1abbd4c857e7daa4489510dbd5d1e05e4d052d3c01000000000000006688f8f55c804cdade75a3635ec8f42d72399debdc93c8351ed29d20ddb79e0d0100000000000000b2793e5b19b7489dfbeb48084fce4eca3c6d1e1a64db96981e7935167ea6162201000000000000001a2ac756e8e480804a1cb4cb2cd1553074ecefb62cd0bcd1ae289b662386cf0e010000000000000068f7b28f333ffbd225925e30147c7dd4348bcf924fd0d19acf46550ba81b914301000000000000004ed310064cf382434fccce1318eb5d636166044d66e433ffd9797da4c85bc15501000000000000006ac937cbd361714716328f5c575719a84be46a1970c09cf52e0f9201bb0d043d01000000000000000400000000000000027dea6c250122e4361577c7f6a7237923efaefa1d0c83945135dd050f0cd72e2483a6bc000154cb03000000000049d0eb1000000000320000000000000054464a78ec0b6e44452c18f1fd363d32cd5e591d18d0e0a2fbb6935b246f9954090100000000000000660098bd0806bb14799ce6dae47bcf8fe0d84b82dcb866191f3b3a591e01ff5101000000000000001ac6ee27ae8f7a5fb2cd583a47db9ece87cd7fb293cfaeb89ad7d403eff15c310100000000000000fce5dc578c6238a8b1c8e183d13045df12201f4ed75073df46f7bbe37313f63f01000000000000000a3c94b756f731d2d15307089261b3cb01cbc49baf99eaeeea4f60c35490401401000000000000008a41f26c1f500154911c5c3fd2d7e9b0c14df1e45ba407d378d21706de389f01010000000000000028341fb93b8d0316c8c8fb3424e46bc46610c4a932e1f03f7981a5edf61d19730100000000000000ba0b904bba1e15a05b378314df9051e826dd4df358eeb121fd0ffbb061d37d790100000000000000a86a00d7f0bca3c1ad2e4174b1a0b80a6f60582cf1a4aa7efa748f5469f6611c0100000000000000a2aa9967d116996fb0ee520fa429e34efcc6fe6f7053c46926aa501bee67851001000000000000004a62842365cf18207eecfba694f06d8160626bede884403a28d9bfdb3644251f0100000000000000c81021b75d78268756fbbfbf37a58c7f5cf97c99e293491d45cf99b80eaabf6201000000000000008848b514fdb737ef7cb354973adb8d10e416d10507452e09835bab838d957b5d01000000000000007a06704178ca1fd6faabf1f96eeb54406e42f34e3141508fcf3f892810ebd56f0100000000000000d60eaa868ac564334d25d5a7e77b066f1e2a9358481730c89d2f5410328b94620100000000000000308e5fb23958eed9b61aa25c1abbd4c857e7daa4489510dbd5d1e05e4d052d3c01000000000000006688f8f55c804cdade75a3635ec8f42d72399debdc93c8351ed29d20ddb79e0d0100000000000000b2793e5b19b7489dfbeb48084fce4eca3c6d1e1a64db96981e7935167ea6162201000000000000001a2ac756e8e480804a1cb4cb2cd1553074ecefb62cd0bcd1ae289b662386cf0e010000000000000068f7b28f333ffbd225925e30147c7dd4348bcf924fd0d19acf46550ba81b914301000000000000004ed310064cf382434fccce1318eb5d636166044d66e433ffd9797da4c85bc15501000000000000006ac937cbd361714716328f5c575719a84be46a1970c09cf52e0f9201bb0d043d0100000000000000040000000000000002eac5f887ca6f1981c440b145f02aa9df02343da060cb96f43d0e4a61a126d0f17da6bc000150cb03000000000081cfeb1000000000320000000000000054464a78ec0b6e44452c18f1fd363d32cd5e591d18d0e0a2fbb6935b246f9954090100000000000000660098bd0806bb14799ce6dae47bcf8fe0d84b82dcb866191f3b3a591e01ff5101000000000000001ac6ee27ae8f7a5fb2cd583a47db9ece87cd7fb293cfaeb89ad7d403eff15c310100000000000000fce5dc578c6238a8b1c8e183d13045df12201f4ed75073df46f7bbe37313f63f01000000000000000a3c94b756f731d2d15307089261b3cb01cbc49baf99eaeeea4f60c35490401401000000000000008a41f26c1f500154911c5c3fd2d7e9b0c14df1e45ba407d378d21706de389f01010000000000000028341fb93b8d0316c8c8fb3424e46bc46610c4a932e1f03f7981a5edf61d19730100000000000000ba0b904bba1e15a05b378314df9051e826dd4df358eeb121fd0ffbb061d37d790100000000000000a86a00d7f0bca3c1ad2e4174b1a0b80a6f60582cf1a4aa7efa748f5469f6611c0100000000000000a2aa9967d116996fb0ee520fa429e34efcc6fe6f7053c46926aa501bee67851001000000000000004a62842365cf18207eecfba694f06d8160626bede884403a28d9bfdb3644251f0100000000000000c81021b75d78268756fbbfbf37a58c7f5cf97c99e293491d45cf99b80eaabf6201000000000000008848b514fdb737ef7cb354973adb8d10e416d10507452e09835bab838d957b5d01000000000000007a06704178ca1fd6faabf1f96eeb54406e42f34e3141508fcf3f892810ebd56f0100000000000000d60eaa868ac564334d25d5a7e77b066f1e2a9358481730c89d2f5410328b94620100000000000000308e5fb23958eed9b61aa25c1abbd4c857e7daa4489510dbd5d1e05e4d052d3c01000000000000006688f8f55c804cdade75a3635ec8f42d72399debdc93c8351ed29d20ddb79e0d0100000000000000b2793e5b19b7489dfbeb48084fce4eca3c6d1e1a64db96981e7935167ea6162201000000000000001a2ac756e8e480804a1cb4cb2cd1553074ecefb62cd0bcd1ae289b662386cf0e010000000000000068f7b28f333ffbd225925e30147c7dd4348bcf924fd0d19acf46550ba81b914301000000000000004ed310064cf382434fccce1318eb5d636166044d66e433ffd9797da4c85bc15501000000000000009e56b37432553198ef85892a789c75a40d03399e1bc912a0a4801775c092442b010000000000000004000000000000000200 |
Uh oh!
There was an error while loading. Please reload this page.