mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
53 lines
1.3 KiB
Rust
53 lines
1.3 KiB
Rust
|
|
use serai_client::{SeraiError, Block, Serai};
|
||
|
|
|
||
|
|
async fn handle_block(serai: &Serai, block: Block) -> Result<Vec<()>, SeraiError> {
|
||
|
|
let hash = block.hash();
|
||
|
|
let mut actions = vec![];
|
||
|
|
|
||
|
|
// If a new validator set was activated, create tributary/inform processor to do a DKG
|
||
|
|
for new_set in serai.get_new_set_events(hash).await? {
|
||
|
|
todo!()
|
||
|
|
}
|
||
|
|
|
||
|
|
// If a key pair was confirmed, inform the processor
|
||
|
|
for key_gen in serai.get_key_gen_events(hash).await? {
|
||
|
|
todo!()
|
||
|
|
}
|
||
|
|
|
||
|
|
// If batch, tell processor of block acknowledged/burns
|
||
|
|
for new_set in serai.get_batch_events(hash).await? {
|
||
|
|
todo!()
|
||
|
|
}
|
||
|
|
|
||
|
|
Ok(actions)
|
||
|
|
}
|
||
|
|
|
||
|
|
pub(crate) async fn handle_new_blocks(
|
||
|
|
serai: &Serai,
|
||
|
|
last_substrate_block: &mut u64,
|
||
|
|
) -> Result<(), SeraiError> {
|
||
|
|
// Check if there's been a new Substrate block
|
||
|
|
let latest = serai.get_latest_block().await?;
|
||
|
|
let latest_number = latest.number();
|
||
|
|
if latest_number == *last_substrate_block {
|
||
|
|
return Ok(());
|
||
|
|
}
|
||
|
|
let mut latest = Some(latest);
|
||
|
|
|
||
|
|
for b in (*last_substrate_block + 1) ..= latest_number {
|
||
|
|
let actions = handle_block(
|
||
|
|
serai,
|
||
|
|
if b == latest_number {
|
||
|
|
latest.take().unwrap()
|
||
|
|
} else {
|
||
|
|
serai.get_block_by_number(b).await?.unwrap()
|
||
|
|
},
|
||
|
|
)
|
||
|
|
.await?;
|
||
|
|
// TODO: Handle actions, update the DB
|
||
|
|
*last_substrate_block += 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
Ok(())
|
||
|
|
}
|