implement From for ChainSplitTarget (#8962)

This commit is contained in:
Thomas Coratger
2024-06-19 19:48:32 +02:00
committed by GitHub
parent 152b2765bd
commit 8e452016ef
2 changed files with 17 additions and 13 deletions

View File

@ -1063,9 +1063,7 @@ where
};
// we are splitting chain at the block hash that we want to make canonical
let Some(canonical) =
self.remove_and_split_chain(chain_id, ChainSplitTarget::Hash(block_hash))
else {
let Some(canonical) = self.remove_and_split_chain(chain_id, block_hash.into()) else {
debug!(target: "blockchain_tree", ?block_hash, ?chain_id, "Chain not present");
return Err(CanonicalError::from(BlockchainTreeError::BlockSideChainIdConsistency {
chain_id: chain_id.into(),

View File

@ -460,6 +460,18 @@ pub enum ChainSplitTarget {
Hash(BlockHash),
}
impl From<BlockNumber> for ChainSplitTarget {
fn from(number: BlockNumber) -> Self {
Self::Number(number)
}
}
impl From<BlockHash> for ChainSplitTarget {
fn from(hash: BlockHash) -> Self {
Self::Hash(hash)
}
}
/// Result of a split chain.
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum ChainSplit {
@ -603,27 +615,21 @@ mod tests {
// split in two
assert_eq!(
chain.clone().split(ChainSplitTarget::Hash(block1_hash)),
chain.clone().split(block1_hash.into()),
ChainSplit::Split { canonical: chain_split1, pending: chain_split2 }
);
// split at unknown block hash
assert_eq!(
chain.clone().split(ChainSplitTarget::Hash(B256::new([100; 32]))),
chain.clone().split(B256::new([100; 32]).into()),
ChainSplit::NoSplitPending(chain.clone())
);
// split at higher number
assert_eq!(
chain.clone().split(ChainSplitTarget::Number(10)),
ChainSplit::NoSplitPending(chain.clone())
);
assert_eq!(chain.clone().split(10u64.into()), ChainSplit::NoSplitPending(chain.clone()));
// split at lower number
assert_eq!(
chain.clone().split(ChainSplitTarget::Number(0)),
ChainSplit::NoSplitPending(chain)
);
assert_eq!(chain.clone().split(0u64.into()), ChainSplit::NoSplitPending(chain));
}
#[test]