mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-23 03:59:22 +00:00
Have InInstructions track the latest block for a network in storage
This commit is contained in:
parent
9676584ffe
commit
36cdf6d4bf
3 changed files with 24 additions and 3 deletions
|
@ -4,11 +4,24 @@ use primitives::SignedBatch;
|
|||
|
||||
use subxt::utils::Encoded;
|
||||
|
||||
use crate::{Serai, SeraiError};
|
||||
use crate::{
|
||||
primitives::{BlockHash, NetworkId},
|
||||
SeraiError, Serai, scale_value,
|
||||
};
|
||||
|
||||
pub type InInstructionsEvent = in_instructions::Event<Runtime>;
|
||||
|
||||
const PALLET: &str = "InInstructions";
|
||||
|
||||
impl Serai {
|
||||
pub async fn get_latest_block_for_network(
|
||||
&self,
|
||||
hash: [u8; 32],
|
||||
network: NetworkId,
|
||||
) -> Result<Option<BlockHash>, SeraiError> {
|
||||
self.storage(PALLET, "LatestBlock", Some(vec![scale_value(network)]), hash).await
|
||||
}
|
||||
|
||||
pub async fn get_batch_events(
|
||||
&self,
|
||||
block: [u8; 32],
|
||||
|
|
|
@ -41,6 +41,7 @@ serai_test!(
|
|||
let block = provide_batch(batch).await;
|
||||
|
||||
let serai = serai().await;
|
||||
assert_eq!(serai.get_latest_block_for_network(block, network).await.unwrap(), Some(block_hash));
|
||||
let batches = serai.get_batch_events(block).await.unwrap();
|
||||
assert_eq!(batches, vec![InInstructionsEvent::Batch { network, id, block: block_hash }]);
|
||||
|
||||
|
|
|
@ -52,11 +52,17 @@ pub mod pallet {
|
|||
#[pallet::pallet]
|
||||
pub struct Pallet<T>(PhantomData<T>);
|
||||
|
||||
// Latest block number agreed upon for a coin
|
||||
// The amount of batches a network has issued, which is also the ID to use for the next batch
|
||||
#[pallet::storage]
|
||||
#[pallet::getter(fn batch)]
|
||||
#[pallet::getter(fn batches)]
|
||||
pub(crate) type Batches<T: Config> = StorageMap<_, Blake2_256, NetworkId, u32, OptionQuery>;
|
||||
|
||||
// The latest block a network has acknowledged as finalized
|
||||
#[pallet::storage]
|
||||
#[pallet::getter(fn last_block)]
|
||||
pub(crate) type LatestBlock<T: Config> =
|
||||
StorageMap<_, Blake2_256, NetworkId, BlockHash, OptionQuery>;
|
||||
|
||||
impl<T: Config> Pallet<T> {
|
||||
fn execute(instruction: InInstructionWithBalance) -> Result<(), ()> {
|
||||
match instruction.instruction {
|
||||
|
@ -77,6 +83,7 @@ pub mod pallet {
|
|||
let mut batch = batch.batch;
|
||||
|
||||
Batches::<T>::insert(batch.network, batch.id);
|
||||
LatestBlock::<T>::insert(batch.network, batch.block);
|
||||
Self::deposit_event(Event::Batch {
|
||||
network: batch.network,
|
||||
id: batch.id,
|
||||
|
|
Loading…
Reference in a new issue