#[repr(u32)]pub enum SyscallCode {
Show 39 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,
U256XU2048_MUL = 65_839,
BLS12381_ADD = 65_822,
BLS12381_DOUBLE = 287,
BLS12381_FP_ADD = 65_824,
BLS12381_FP_SUB = 65_825,
BLS12381_FP_MUL = 65_826,
BLS12381_FP2_ADD = 65_827,
BLS12381_FP2_SUB = 65_828,
BLS12381_FP2_MUL = 65_829,
BN254_FP_ADD = 65_830,
BN254_FP_SUB = 65_831,
BN254_FP_MUL = 65_832,
BN254_FP2_ADD = 65_833,
BN254_FP2_SUB = 65_834,
BN254_FP2_MUL = 65_835,
SECP256R1_ADD = 65_836,
SECP256R1_DOUBLE = 301,
SECP256R1_DECOMPRESS = 302,
}
Expand description
System Calls.
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 little-endian layout:
Byte 0 | Byte 1 | Byte 2 | Byte 3 |
---|---|---|---|
ID | Table | Cycles | Unused |
where:
- Byte 0: The system call identifier.
- Byte 1: Whether the handler of the system call has its own table. This is used in the CPU table to determine whether to lookup the syscall using the syscall interaction.
- Byte 2: The number of additional cycles the syscall uses. This is used to make sure the # of memory accesses is bounded.
- Byte 3: Currently unused.
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.
U256XU2048_MUL = 65_839
Executes the U256XU2048_MUL
precompile.
BLS12381_ADD = 65_822
Executes the BLS12381_ADD
precompile.
BLS12381_DOUBLE = 287
Executes the BLS12381_DOUBLE
precompile.
BLS12381_FP_ADD = 65_824
Executes the BLS12381_FP_ADD
precompile.
BLS12381_FP_SUB = 65_825
Executes the BLS12381_FP_SUB
precompile.
BLS12381_FP_MUL = 65_826
Executes the BLS12381_FP_MUL
precompile.
BLS12381_FP2_ADD = 65_827
Executes the BLS12381_FP2_ADD
precompile.
BLS12381_FP2_SUB = 65_828
Executes the BLS12381_FP2_SUB
precompile.
BLS12381_FP2_MUL = 65_829
Executes the BLS12381_FP2_MUL
precompile.
BN254_FP_ADD = 65_830
Executes the BN254_FP_ADD
precompile.
BN254_FP_SUB = 65_831
Executes the BN254_FP_SUB
precompile.
BN254_FP_MUL = 65_832
Executes the BN254_FP_MUL
precompile.
BN254_FP2_ADD = 65_833
Executes the BN254_FP2_ADD
precompile.
BN254_FP2_SUB = 65_834
Executes the BN254_FP2_SUB
precompile.
BN254_FP2_MUL = 65_835
Executes the BN254_FP2_MUL
precompile.
SECP256R1_ADD = 65_836
Executes the SECP256R1_ADD
precompile.
SECP256R1_DOUBLE = 301
Executes the SECP256R1_DOUBLE
precompile.
SECP256R1_DECOMPRESS = 302
Executes the SECP256R1_DECOMPRESS
precompile.
Implementations§
Source§impl SyscallCode
impl SyscallCode
Sourcepub fn from_u32(value: u32) -> Self
pub fn from_u32(value: u32) -> Self
Create a SyscallCode
from a u32.
Sourcepub fn syscall_id(self) -> u32
pub fn syscall_id(self) -> u32
Get the system call identifier.
Sourcepub fn should_send(self) -> u32
pub fn should_send(self) -> u32
Get whether the handler of the system call has its own table.
Sourcepub fn num_cycles(self) -> u32
pub fn num_cycles(self) -> u32
Get the number of additional cycles the syscall uses.
Sourcepub fn count_map(&self) -> Self
pub fn count_map(&self) -> Self
Map a syscall to another one in order to coalesce their counts.
Sourcepub fn as_air_id(self) -> Option<RiscvAirId>
pub fn as_air_id(self) -> Option<RiscvAirId>
Get the ID of the AIR used in the syscall implementation.
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 Default for SyscallCode
impl Default for SyscallCode
Source§fn default() -> SyscallCode
fn default() -> 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 Enum for SyscallCode
impl Enum for SyscallCode
Source§impl<V> EnumArray<V> for SyscallCode
impl<V> EnumArray<V> 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§impl PartialOrd for SyscallCode
impl PartialOrd for SyscallCode
Source§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: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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