Enum sp1_core::runtime::SyscallCode
source · pub enum SyscallCode {
Show 23 variants
HALT = 0,
WRITE = 2,
ENTER_UNCONSTRAINED = 3,
EXIT_UNCONSTRAINED = 4,
SHA_EXTEND = 3_145_989,
SHA_COMPRESS = 65_798,
ED_ADD = 65_799,
ED_DECOMPRESS = 264,
KECCAK_PERMUTE = 65_801,
SECP256K1_ADD = 65_802,
SECP256K1_DOUBLE = 267,
SECP256K1_DECOMPRESS = 268,
BN254_ADD = 65_806,
BN254_DOUBLE = 271,
COMMIT = 16,
COMMIT_DEFERRED_PROOFS = 26,
VERIFY_SP1_PROOF = 27,
BLS12381_DECOMPRESS = 284,
HINT_LEN = 240,
HINT_READ = 241,
UINT256_MUL = 65_821,
BLS12381_ADD = 65_822,
BLS12381_DOUBLE = 287,
}Expand description
A system call is invoked by the the ecall instruction with a specific value in register t0.
The syscall number is a 32-bit integer, with the following layout (in litte-endian format)
- The first byte is the syscall id.
- The second byte is 0/1 depending on whether the syscall has a separate table. This is used in the CPU table to determine whether to lookup the syscall using the syscall interaction.
- The third byte is the number of additional cycles the syscall uses.
Variants§
HALT = 0
Halts the program.
WRITE = 2
Write to the output buffer.
ENTER_UNCONSTRAINED = 3
Enter unconstrained block.
EXIT_UNCONSTRAINED = 4
Exit unconstrained block.
SHA_EXTEND = 3_145_989
Executes the SHA_EXTEND precompile.
SHA_COMPRESS = 65_798
Executes the SHA_COMPRESS precompile.
ED_ADD = 65_799
Executes the ED_ADD precompile.
ED_DECOMPRESS = 264
Executes the ED_DECOMPRESS precompile.
KECCAK_PERMUTE = 65_801
Executes the KECCAK_PERMUTE precompile.
SECP256K1_ADD = 65_802
Executes the SECP256K1_ADD precompile.
SECP256K1_DOUBLE = 267
Executes the SECP256K1_DOUBLE precompile.
SECP256K1_DECOMPRESS = 268
Executes the SECP256K1_DECOMPRESS precompile.
BN254_ADD = 65_806
Executes the BN254_ADD precompile.
BN254_DOUBLE = 271
Executes the BN254_DOUBLE precompile.
COMMIT = 16
Executes the COMMIT precompile.
COMMIT_DEFERRED_PROOFS = 26
Executes the COMMIT_DEFERRED_PROOFS precompile.
VERIFY_SP1_PROOF = 27
Executes the VERIFY_SP1_PROOF precompile.
BLS12381_DECOMPRESS = 284
Executes the BLS12381_DECOMPRESS precompile.
HINT_LEN = 240
Executes the HINT_LEN precompile.
HINT_READ = 241
Executes the HINT_READ precompile.
UINT256_MUL = 65_821
Executes the UINT256_MUL precompile.
BLS12381_ADD = 65_822
Executes the BLS12381_ADD precompile.
BLS12381_DOUBLE = 287
Executes the BLS12381_DOUBLE precompile.
Implementations§
source§impl SyscallCode
impl SyscallCode
pub fn syscall_id(&self) -> u32
pub fn should_send(&self) -> u32
pub fn num_cycles(&self) -> u32
Trait Implementations§
source§impl Clone for SyscallCode
impl Clone for SyscallCode
source§fn clone(&self) -> SyscallCode
fn clone(&self) -> SyscallCode
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for SyscallCode
impl Debug for SyscallCode
source§impl<'de> Deserialize<'de> for SyscallCode
impl<'de> Deserialize<'de> for SyscallCode
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl Display for SyscallCode
impl Display for SyscallCode
source§impl Hash for SyscallCode
impl Hash for SyscallCode
source§impl IntoEnumIterator for SyscallCode
impl IntoEnumIterator for SyscallCode
type Iterator = SyscallCodeIter
fn iter() -> SyscallCodeIter ⓘ
source§impl Ord for SyscallCode
impl Ord for SyscallCode
source§fn cmp(&self, other: &SyscallCode) -> Ordering
fn cmp(&self, other: &SyscallCode) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq for SyscallCode
impl PartialEq for SyscallCode
source§fn eq(&self, other: &SyscallCode) -> bool
fn eq(&self, other: &SyscallCode) -> bool
self and other values to be equal, and is used
by ==.source§impl PartialOrd for SyscallCode
impl PartialOrd for SyscallCode
source§fn partial_cmp(&self, other: &SyscallCode) -> Option<Ordering>
fn partial_cmp(&self, other: &SyscallCode) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read moresource§impl Serialize for SyscallCode
impl Serialize for SyscallCode
impl Copy for SyscallCode
impl Eq for SyscallCode
impl StructuralPartialEq for SyscallCode
Auto Trait Implementations§
impl Freeze for SyscallCode
impl RefUnwindSafe for SyscallCode
impl Send for SyscallCode
impl Sync for SyscallCode
impl Unpin for SyscallCode
impl UnwindSafe for SyscallCode
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more