Add network to CheckpointVerifier
This refactor allows us to re-use some block checks in the checkpoint verifier.
This commit is contained in:
parent
8e0fac5336
commit
252affdf84
|
@ -153,7 +153,7 @@ where
|
||||||
tracing::info!(?tip, ?max_checkpoint_height, "initializing chain verifier");
|
tracing::info!(?tip, ?max_checkpoint_height, "initializing chain verifier");
|
||||||
|
|
||||||
let block = BlockVerifier::new(network, state_service.clone());
|
let block = BlockVerifier::new(network, state_service.clone());
|
||||||
let checkpoint = CheckpointVerifier::from_checkpoint_list(list, tip, state_service);
|
let checkpoint = CheckpointVerifier::from_checkpoint_list(list, network, tip, state_service);
|
||||||
|
|
||||||
Buffer::new(
|
Buffer::new(
|
||||||
BoxService::new(ChainVerifier {
|
BoxService::new(ChainVerifier {
|
||||||
|
|
|
@ -108,6 +108,9 @@ where
|
||||||
/// The checkpoint list for this verifier.
|
/// The checkpoint list for this verifier.
|
||||||
checkpoint_list: CheckpointList,
|
checkpoint_list: CheckpointList,
|
||||||
|
|
||||||
|
/// The network rules used by this verifier.
|
||||||
|
network: Network,
|
||||||
|
|
||||||
/// The hash of the initial tip, if any.
|
/// The hash of the initial tip, if any.
|
||||||
initial_tip_hash: Option<block::Hash>,
|
initial_tip_hash: Option<block::Hash>,
|
||||||
|
|
||||||
|
@ -164,11 +167,11 @@ where
|
||||||
?initial_tip,
|
?initial_tip,
|
||||||
"initialising CheckpointVerifier"
|
"initialising CheckpointVerifier"
|
||||||
);
|
);
|
||||||
Self::from_checkpoint_list(checkpoint_list, initial_tip, state_service)
|
Self::from_checkpoint_list(checkpoint_list, network, initial_tip, state_service)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a checkpoint verification service using `list`, `initial_tip`,
|
/// Return a checkpoint verification service using `list`, `network`,
|
||||||
/// and `state_service`.
|
/// `initial_tip`, and `state_service`.
|
||||||
///
|
///
|
||||||
/// Assumes that the provided genesis checkpoint is correct.
|
/// Assumes that the provided genesis checkpoint is correct.
|
||||||
///
|
///
|
||||||
|
@ -181,18 +184,20 @@ where
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub(crate) fn from_list(
|
pub(crate) fn from_list(
|
||||||
list: impl IntoIterator<Item = (block::Height, block::Hash)>,
|
list: impl IntoIterator<Item = (block::Height, block::Hash)>,
|
||||||
|
network: Network,
|
||||||
initial_tip: Option<(block::Height, block::Hash)>,
|
initial_tip: Option<(block::Height, block::Hash)>,
|
||||||
state_service: S,
|
state_service: S,
|
||||||
) -> Result<Self, VerifyCheckpointError> {
|
) -> Result<Self, VerifyCheckpointError> {
|
||||||
Ok(Self::from_checkpoint_list(
|
Ok(Self::from_checkpoint_list(
|
||||||
CheckpointList::from_list(list).map_err(VerifyCheckpointError::CheckpointList)?,
|
CheckpointList::from_list(list).map_err(VerifyCheckpointError::CheckpointList)?,
|
||||||
|
network,
|
||||||
initial_tip,
|
initial_tip,
|
||||||
state_service,
|
state_service,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return a checkpoint verification service using `checkpoint_list`,
|
/// Return a checkpoint verification service using `checkpoint_list`,
|
||||||
/// `initial_tip`, and `state_service`.
|
/// `network`, `initial_tip`, and `state_service`.
|
||||||
///
|
///
|
||||||
/// Assumes that the provided genesis checkpoint is correct.
|
/// Assumes that the provided genesis checkpoint is correct.
|
||||||
///
|
///
|
||||||
|
@ -200,6 +205,7 @@ where
|
||||||
/// hard-coded checkpoint lists. See that function for more details.
|
/// hard-coded checkpoint lists. See that function for more details.
|
||||||
pub(crate) fn from_checkpoint_list(
|
pub(crate) fn from_checkpoint_list(
|
||||||
checkpoint_list: CheckpointList,
|
checkpoint_list: CheckpointList,
|
||||||
|
network: Network,
|
||||||
initial_tip: Option<(block::Height, block::Hash)>,
|
initial_tip: Option<(block::Height, block::Hash)>,
|
||||||
state_service: S,
|
state_service: S,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
|
@ -220,6 +226,7 @@ where
|
||||||
};
|
};
|
||||||
CheckpointVerifier {
|
CheckpointVerifier {
|
||||||
checkpoint_list,
|
checkpoint_list,
|
||||||
|
network,
|
||||||
initial_tip_hash,
|
initial_tip_hash,
|
||||||
state_service,
|
state_service,
|
||||||
queued: BTreeMap::new(),
|
queued: BTreeMap::new(),
|
||||||
|
|
|
@ -49,7 +49,7 @@ async fn single_item_checkpoint_list() -> Result<(), Report> {
|
||||||
.buffer(1)
|
.buffer(1)
|
||||||
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
||||||
let mut checkpoint_verifier =
|
let mut checkpoint_verifier =
|
||||||
CheckpointVerifier::from_list(genesis_checkpoint_list, None, state_service)
|
CheckpointVerifier::from_list(genesis_checkpoint_list, Mainnet, None, state_service)
|
||||||
.map_err(|e| eyre!(e))?;
|
.map_err(|e| eyre!(e))?;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -133,7 +133,7 @@ async fn multi_item_checkpoint_list() -> Result<(), Report> {
|
||||||
.buffer(1)
|
.buffer(1)
|
||||||
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
||||||
let mut checkpoint_verifier =
|
let mut checkpoint_verifier =
|
||||||
CheckpointVerifier::from_list(checkpoint_list, None, state_service)
|
CheckpointVerifier::from_list(checkpoint_list, Mainnet, None, state_service)
|
||||||
.map_err(|e| eyre!(e))?;
|
.map_err(|e| eyre!(e))?;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -280,8 +280,12 @@ async fn continuous_blockchain(
|
||||||
let state_service = ServiceBuilder::new()
|
let state_service = ServiceBuilder::new()
|
||||||
.buffer(1)
|
.buffer(1)
|
||||||
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
||||||
let mut checkpoint_verifier =
|
let mut checkpoint_verifier = CheckpointVerifier::from_list(
|
||||||
CheckpointVerifier::from_list(checkpoint_list, initial_tip, state_service.clone())
|
checkpoint_list,
|
||||||
|
network,
|
||||||
|
initial_tip,
|
||||||
|
state_service.clone(),
|
||||||
|
)
|
||||||
.map_err(|e| eyre!(e))?;
|
.map_err(|e| eyre!(e))?;
|
||||||
|
|
||||||
// Setup checks
|
// Setup checks
|
||||||
|
@ -457,7 +461,7 @@ async fn block_higher_than_max_checkpoint_fail() -> Result<(), Report> {
|
||||||
.buffer(1)
|
.buffer(1)
|
||||||
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
||||||
let mut checkpoint_verifier =
|
let mut checkpoint_verifier =
|
||||||
CheckpointVerifier::from_list(genesis_checkpoint_list, None, state_service)
|
CheckpointVerifier::from_list(genesis_checkpoint_list, Mainnet, None, state_service)
|
||||||
.map_err(|e| eyre!(e))?;
|
.map_err(|e| eyre!(e))?;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -536,7 +540,7 @@ async fn wrong_checkpoint_hash_fail() -> Result<(), Report> {
|
||||||
.buffer(1)
|
.buffer(1)
|
||||||
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
||||||
let mut checkpoint_verifier =
|
let mut checkpoint_verifier =
|
||||||
CheckpointVerifier::from_list(genesis_checkpoint_list, None, state_service)
|
CheckpointVerifier::from_list(genesis_checkpoint_list, Mainnet, None, state_service)
|
||||||
.map_err(|e| eyre!(e))?;
|
.map_err(|e| eyre!(e))?;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -720,7 +724,7 @@ async fn checkpoint_drop_cancel() -> Result<(), Report> {
|
||||||
.buffer(1)
|
.buffer(1)
|
||||||
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
.service(zebra_state::init(zebra_state::Config::ephemeral(), Mainnet));
|
||||||
let mut checkpoint_verifier =
|
let mut checkpoint_verifier =
|
||||||
CheckpointVerifier::from_list(checkpoint_list, None, state_service)
|
CheckpointVerifier::from_list(checkpoint_list, Mainnet, None, state_service)
|
||||||
.map_err(|e| eyre!(e))?;
|
.map_err(|e| eyre!(e))?;
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
|
Loading…
Reference in New Issue