mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
Check the finalized function doesn't claim unfinalized blocks are in fact finalized
This commit is contained in:
@@ -22,7 +22,8 @@ async fn blockchain() {
|
|||||||
.run_async(async |ops| {
|
.run_async(async |ops| {
|
||||||
let serai = serai_substrate_tests::rpc(&ops, handle).await;
|
let serai = serai_substrate_tests::rpc(&ops, handle).await;
|
||||||
|
|
||||||
let test_block = |number| {
|
// Check the sanity of fetching a block
|
||||||
|
let test_finalized_block = |number| {
|
||||||
let serai = &serai;
|
let serai = &serai;
|
||||||
async move {
|
async move {
|
||||||
let block = serai.block_by_number(number).await.unwrap();
|
let block = serai.block_by_number(number).await.unwrap();
|
||||||
@@ -31,10 +32,37 @@ async fn blockchain() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
test_block(0).await;
|
test_finalized_block(0).await;
|
||||||
let finalized = serai.latest_finalized_block_number().await.unwrap();
|
let finalized = serai.latest_finalized_block_number().await.unwrap();
|
||||||
test_block(finalized).await;
|
test_finalized_block(finalized).await;
|
||||||
|
|
||||||
|
// Check unfinalized blocks are marked as unfinalized
|
||||||
|
'outer: {
|
||||||
|
for _ in 0 .. 10 {
|
||||||
|
tokio::time::sleep(core::time::Duration::from_secs(6)).await;
|
||||||
|
|
||||||
|
let latest_finalized = serai.latest_finalized_block_number().await.unwrap();
|
||||||
|
// Fetch the unfinalized block after, if it exists
|
||||||
|
let Ok(block) = serai.block_by_number(latest_finalized + 1).await else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
// Check if it's considered finalized
|
||||||
|
let considered_finalized = serai.finalized(block.header.hash()).await.unwrap();
|
||||||
|
// Ensure the finalized block is the same, meaning this block didn't become finalized as
|
||||||
|
// we made these RPC requests
|
||||||
|
if latest_finalized != serai.latest_finalized_block_number().await.unwrap() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check the block wasn't considered finalized
|
||||||
|
assert!(!considered_finalized);
|
||||||
|
break 'outer;
|
||||||
|
}
|
||||||
|
panic!("couldn't find an unfinalized block to check wasn't considered finalized");
|
||||||
|
};
|
||||||
|
|
||||||
|
// Check the finalized block advances
|
||||||
|
{
|
||||||
let mut next_finalized;
|
let mut next_finalized;
|
||||||
{
|
{
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
@@ -48,7 +76,8 @@ async fn blockchain() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert!(next_finalized > finalized);
|
assert!(next_finalized > finalized);
|
||||||
test_block(next_finalized).await;
|
test_finalized_block(next_finalized).await;
|
||||||
|
}
|
||||||
|
|
||||||
println!("Finished `serai-client/blockchain` test");
|
println!("Finished `serai-client/blockchain` test");
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user