Skip to main content

sp1_core_executor/
retain.rs

1use serde::{Deserialize, Serialize};
2
3use crate::SyscallCode;
4
5/// Allowed presets for collections of events that may be retained instead of deferred.
6#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
7#[non_exhaustive]
8pub enum RetainedEventsPreset {
9    /// Retain events for BLS12-381 base field arithmetic operations.
10    Bls12381Field,
11    /// Retain events for BN254 base field arithmetic operations.
12    Bn254Field,
13    /// Retain events for SHA-256 operations.
14    Sha256,
15    /// Retain events for Poseidon2 operations.
16    Poseidon2,
17    /// Retain events for ``U256Ops`` operations.
18    U256Ops,
19    /// Retain events for Secp256k1 operations.
20    Secp256k1,
21}
22
23impl RetainedEventsPreset {
24    /// The codes of syscalls that generate events that are retained by this preset.
25    #[must_use]
26    pub const fn syscall_codes(&self) -> &'static [SyscallCode] {
27        #[allow(clippy::enum_glob_use)]
28        use SyscallCode::*;
29        match self {
30            RetainedEventsPreset::Bls12381Field => {
31                &[BLS12381_FP_ADD, BLS12381_FP_MUL, BLS12381_FP_SUB]
32            }
33            RetainedEventsPreset::Bn254Field => &[BN254_FP_ADD, BN254_FP_MUL, BN254_FP_SUB],
34            RetainedEventsPreset::Sha256 => &[SHA_COMPRESS, SHA_EXTEND],
35            RetainedEventsPreset::Poseidon2 => &[POSEIDON2],
36            RetainedEventsPreset::U256Ops => &[UINT256_ADD_CARRY, UINT256_MUL_CARRY],
37            RetainedEventsPreset::Secp256k1 => {
38                &[SECP256K1_ADD, SECP256K1_DOUBLE, SECP256K1_DECOMPRESS]
39            }
40        }
41    }
42}