mirror of
https://github.com/serai-dex/serai.git
synced 2024-12-23 12:09:37 +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 subxt::utils::Encoded;
|
||||||
|
|
||||||
use crate::{Serai, SeraiError};
|
use crate::{
|
||||||
|
primitives::{BlockHash, NetworkId},
|
||||||
|
SeraiError, Serai, scale_value,
|
||||||
|
};
|
||||||
|
|
||||||
pub type InInstructionsEvent = in_instructions::Event<Runtime>;
|
pub type InInstructionsEvent = in_instructions::Event<Runtime>;
|
||||||
|
|
||||||
|
const PALLET: &str = "InInstructions";
|
||||||
|
|
||||||
impl Serai {
|
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(
|
pub async fn get_batch_events(
|
||||||
&self,
|
&self,
|
||||||
block: [u8; 32],
|
block: [u8; 32],
|
||||||
|
|
|
@ -41,6 +41,7 @@ serai_test!(
|
||||||
let block = provide_batch(batch).await;
|
let block = provide_batch(batch).await;
|
||||||
|
|
||||||
let serai = serai().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();
|
let batches = serai.get_batch_events(block).await.unwrap();
|
||||||
assert_eq!(batches, vec![InInstructionsEvent::Batch { network, id, block: block_hash }]);
|
assert_eq!(batches, vec![InInstructionsEvent::Batch { network, id, block: block_hash }]);
|
||||||
|
|
||||||
|
|
|
@ -52,11 +52,17 @@ pub mod pallet {
|
||||||
#[pallet::pallet]
|
#[pallet::pallet]
|
||||||
pub struct Pallet<T>(PhantomData<T>);
|
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::storage]
|
||||||
#[pallet::getter(fn batch)]
|
#[pallet::getter(fn batches)]
|
||||||
pub(crate) type Batches<T: Config> = StorageMap<_, Blake2_256, NetworkId, u32, OptionQuery>;
|
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> {
|
impl<T: Config> Pallet<T> {
|
||||||
fn execute(instruction: InInstructionWithBalance) -> Result<(), ()> {
|
fn execute(instruction: InInstructionWithBalance) -> Result<(), ()> {
|
||||||
match instruction.instruction {
|
match instruction.instruction {
|
||||||
|
@ -77,6 +83,7 @@ pub mod pallet {
|
||||||
let mut batch = batch.batch;
|
let mut batch = batch.batch;
|
||||||
|
|
||||||
Batches::<T>::insert(batch.network, batch.id);
|
Batches::<T>::insert(batch.network, batch.id);
|
||||||
|
LatestBlock::<T>::insert(batch.network, batch.block);
|
||||||
Self::deposit_event(Event::Batch {
|
Self::deposit_event(Event::Batch {
|
||||||
network: batch.network,
|
network: batch.network,
|
||||||
id: batch.id,
|
id: batch.id,
|
||||||
|
|
Loading…
Reference in a new issue