1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use crate::{pallet::Error, *};
use frame_support::ensure;
use frame_system::pallet_prelude::BlockNumberFor;
pub fn no_mangle<T: Config>(
    _current_fsx: &mut Vec<
        FullSideEffect<<T as frame_system::Config>::AccountId, BlockNumberFor<T>, BalanceOf<T>>,
    >,
    _local_state: LocalState,
    _steps_cnt: (u32, u32),
    _status: CircuitStatus,
    _requester: T::AccountId,
) -> Result<PrecompileResult<T>, Error<T>> {
    Ok(PrecompileResult::Continue)
}

pub fn no_post_updates<T: Config>(
    _status_change: (CircuitStatus, CircuitStatus),
    _local_ctx: &LocalXtxCtx<T, BalanceOf<T>>,
) -> Result<(), Error<T>> {
    Ok(())
}

pub fn infallible_no_post_updates<T: Config>(
    _status_change: (CircuitStatus, CircuitStatus),
    _local_ctx: &LocalXtxCtx<T, BalanceOf<T>>,
) {
}

pub fn validate_fsx_against_xtx<T: Config>(
    local_ctx: &LocalXtxCtx<T, BalanceOf<T>>,
) -> Result<(), Error<T>> {
    for fsx_step in local_ctx.full_side_effects.iter() {
        for fsx in fsx_step.iter() {
            if local_ctx.xtx.status >= CircuitStatus::Ready {
                ensure!(
                    fsx.input.enforce_executor.is_some(),
                    Error::<T>::InvalidFTXStateUnassignedExecutorForReadySFX
                );
                match &fsx.best_bid {
                    Some(bid) => ensure!(
                        Some(bid.executor.clone()) == fsx.input.enforce_executor,
                        Error::<T>::InvalidFTXStateIncorrectExecutorForReadySFX
                    ),
                    None => return Err(Error::<T>::InvalidFTXStateEmptyBidForReadyXtx),
                }
            }
            if local_ctx.xtx.status >= CircuitStatus::Finished
                && local_ctx.xtx.status != CircuitStatus::Reverted(Cause::Timeout)
                && local_ctx.xtx.status != CircuitStatus::Reverted(Cause::IntentionalKill)
            {
                ensure!(
                    fsx.confirmed.is_some(),
                    Error::<T>::InvalidFTXStateEmptyConfirmationForFinishedXtx
                );
            }
        }
    }

    Ok(())
}