From b5fad45d15454d62a20a64f143687fe604514194 Mon Sep 17 00:00:00 2001 From: Lucas Meier Date: Fri, 24 Jan 2025 16:43:13 -0800 Subject: [PATCH] Dynamically choose which plan to run based on archive chain id This also adds a plan for the testnet --- src/penumbra.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/penumbra.rs b/src/penumbra.rs index fe06ed0..36298c6 100644 --- a/src/penumbra.rs +++ b/src/penumbra.rs @@ -195,6 +195,48 @@ impl RegenerationPlan { Self { steps } } + /// Some regeneration plans are pre-specified, by a chain id. + pub fn from_known_chain_id(chain_id: &str) -> Option { + match chain_id { + "penumbra-1" => Some(Self::penumbra_1()), + "penumbra-testnet-phobos-2" => Some(Self::penumbra_testnet_phobos_2()), + _ => None, + } + } + + pub fn penumbra_testnet_phobos_2() -> Self { + use RegenerationStep::*; + use Version::*; + + Self { + steps: vec![ + ( + 0, + InitThenRunTo { + genesis_height: 1, + version: V0o80, + last_block: Some(1459799), + }, + ), + ( + 1459799, + Migrate { + from: V0o80, + to: V0o81, + }, + ), + ( + 1459799, + InitThenRunTo { + genesis_height: 1459800, + version: V0o80, + last_block: None, + }, + ), + ], + } + } + /// The regeneration plan for penumbra_1 chain. pub fn penumbra_1() -> Self { use RegenerationStep::*; @@ -316,9 +358,12 @@ impl Regenerator { } async fn run_from(mut self, start: Option, stop: Option) -> anyhow::Result<()> { - let plan = RegenerationPlan::penumbra_1().truncate(start, stop); + let plan = RegenerationPlan::from_known_chain_id(&self.chain_id) + .map(|x| x.truncate(start, stop)) + .ok_or(anyhow!("no plan known for chain id '{}'", &self.chain_id))?; tracing::info!( - "plan truncated between {:?}..={:?}: {:?}", + "plan for {} truncated between {:?}..={:?}: {:?}", + &self.chain_id, start, stop, plan