subspace_runtime/
domains.rs

1#[cfg(not(feature = "std"))]
2extern crate alloc;
3
4use crate::{Balance, Block, Domains, RuntimeCall, UncheckedExtrinsic};
5#[cfg(not(feature = "std"))]
6use alloc::vec::Vec;
7use domain_runtime_primitives::opaque::Header as DomainHeader;
8use sp_domains::DomainId;
9
10pub(crate) fn extract_successful_bundles(
11    domain_id: DomainId,
12    extrinsics: Vec<UncheckedExtrinsic>,
13) -> sp_domains::OpaqueBundles<Block, DomainHeader, Balance> {
14    let successful_bundles = Domains::successful_bundles(domain_id);
15    extrinsics
16        .into_iter()
17        .filter_map(|uxt| match uxt.function {
18            RuntimeCall::Domains(pallet_domains::Call::submit_bundle { opaque_bundle })
19                if opaque_bundle.domain_id() == domain_id
20                    && successful_bundles.contains(&opaque_bundle.hash()) =>
21            {
22                Some(opaque_bundle)
23            }
24            _ => None,
25        })
26        .collect()
27}