Opcodes
The following lists show the standard and cryptographic opcodes supported by Beo instructions.
Table of Standard Opcodes
abs
Absolute value operation
abs.w
Wrapping absolute value operation
add
Addition operation
add.w
Wrapping addition operation
and
AND operation
assert.eq
Assert equality
assert.neq
Assert non-equality
branch.eq
Branches to a position if the arguments are equal
branch.neq
Branches to a position if the arguments are not equal
cast
Cast between literals
cast.lossy
Cast between literals with lossy truncation
div
Division operation
div.w
Wrapping division operation
double
Double operation
gt
Greater than comparison
gte
Greater than or equal to comparison
inv
Multiplicative inverse operation
is.eq
Equality comparison
is.neq
Not equal comparison
lt
Less than comparison
lte
Less than or equal to comparison
mod
Arithmetic modulo operation
mul
Multiplication operation
mul.w
Wrapping multiplication operation
nand
Boolean
NAND operation
neg
Additive inverse operation
nor
Boolean
NOR operation
not
NOT operation
or
OR Operation
position
The position command
pow
Exponentiation operation
pow.w
Wrapping exponentiation operation
rand.chacha
Generates a random value within the finalize
scope.
rem
Remainder operation
rem.w
Wrapping remainder operation
shl
Shift left operation
shl.w
Wrapping shift left operation
shr
Shift right operation
shr.w
Wrapping shift right operation
sqrt
Square root operation
square
Square operation
sub
Subtraction operation
sub.w
Wrapping subtraction operation
ternary
Ternary select operation
xor
XOR operation
Table of Cryptographic Opcodes
commit.bhp256
256-bit input BHP commitment
commit.bhp512
512-bit input BHP commitment
commit.bhp768
768-bit input BHP commitment
commit.bhp1024
1024-bit input BHP commitment
commit.ped64
64-bit input Pedersen commitment
commit.ped128
128-bit input Pedersen commitment
hash.bhp256
256-bit input BHP hash
hash.bhp512
512-bit input BHP hash
hash.bhp768
768-bit input BHP hash
hash.bhp1024
1024-bit input BHP hash
hash.keccak256
256-bit input Keccak hash
hash.keccak384
384-bit input Keccak hash
hash.keccak512
512-bit input Keccak hash
hash.ped64
64-bit input Pedersen hash
hash.ped128
128-bit input Pedersen hash
hash.psd2
Poseidon hash with input rate 2
hash.psd4
Poseidon hash with input rate 4
hash.psd8
Poseidon hash with input rate 8
hash.sha3_256
256-bit input SHA3 hash
hash.sha3_384
384-bit input SHA3 hash
hash.sha3_512
512-bit input SHA3 hash
sign.verify
Verify a Schnorr signature
Specification
The following is the specification for each opcode in the Beo Virtual Machine (BVM).
abs
abs
Back to Top
Description
Computes the absolute value of the input, checking for overflow, storing the result in the destination register.
For integer types, a constraint is added to check for underflow. For cases where wrapping semantics are needed, see the abs.w instruction. This underflow happens when the input is the minimum value of a signed integer type. For example, abs -128i8
would result in underflow, since 128
cannot be represented as an i8
.
Supported Types
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
abs.w
abs.w
Back to Top
Description
Compute the absolute value of the input, wrapping around at the boundary of the type, and storing the result in the destination register.
Supported Types
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
add
add
Back to Top
Description
Adds first
with second
, storing the outcome in destination
.
For integer types, a constraint is added to check for overflow. For cases where wrapping semantics are needed for integer types, see the add.w instruction.
Supported Types
Field
Field
Field
Group
Group
Group
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
Scalar
Scalar
Scalar
add.w
add.w
Back to Top
Description
Adds first
with second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
and
and
Back to Top
Description
Performs an AND operation on integer (bitwise) or boolean first
and second
, storing the outcome in destination
.
Supported Types
Boolean
Boolean
Boolean
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
assert.eq
assert.eq
Back to Top
Description
Checks whether first
and second
are equal, halting if they are not equal.
Supported Types
Address
Address
Boolean
Boolean
Field
Field
Group
Group
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
U8
U8
U16
U16
U32
U32
U64
U64
U128
U128
Scalar
Scalar
Signature
Signature
Struct
Struct
Record
Record
assert.neq
assert.neq
Back to Top
Description
Checks whether first
and second
are not equal, halting if they are equal.
Supported Types
Address
Address
Boolean
Boolean
Field
Field
Group
Group
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
U8
U8
U16
U16
U32
U32
U64
U64
U128
U128
Scalar
Scalar
Signature
Signature
Struct
Struct
Record
Record
branch.eq
branch.eq
Back to Top
Description
The command branch.eq <first> <second> to <destination>
branches execution to the position indicated by destination
if first
and second
are equal. This command is restricted to the finalize scope, and the destination must follow the command. Backward branches are not currently supported.
Address
Address
Position
Boolean
Boolean
Position
Field
Field
Position
Group
Group
Position
I8
I8
Position
I16
I16
Position
I32
I32
Position
I64
I64
Position
I128
I128
Position
U8
U8
Position
U16
U16
Position
U32
U32
Position
U64
U64
Position
U128
U128
Position
Scalar
Scalar
Position
Struct
Struct
Position
Record
Record
Position
branch.neq
branch.neq
Back to Top
Description
The command branch.neq <first> <second> to <destination>
branches execution to the position indicated by destination
if first
and second
are not equal. This command is restricted to the finalize scope, and the destination must follow the command. Backward branches are not currently supported.
Address
Address
Position
Boolean
Boolean
Position
Field
Field
Position
Group
Group
Position
I8
I8
Position
I16
I16
Position
I32
I32
Position
I64
I64
Position
I128
I128
Position
U8
U8
Position
U16
U16
Position
U32
U32
Position
U64
U64
Position
U128
U128
Position
Scalar
Scalar
Position
Struct
Struct
Position
Record
Record
Position
cast
cast
Back to Top
Description
Enables casting between different literals.
Example Usage
input r0 as field.private;
cast r0 into r1 as group;
cast r0 into r2 as u8;
cast r3 r4 r5 r6 into r7 as [boolean; 4u32];
cast r7 into r8 as [[boolean; 4u32]; 1u32];
Supported Types
Address
Address
Array
Array
Boolean
Boolean
Field
Field
Group
Group
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
U8
U8
U16
U16
U32
U32
U64
U64
U128
U128
Scalar
Scalar
cast.lossy
cast.lossy
Back to Top
Description
Perform casting with lossy truncation.
Example Usage
input r0 as field.private;
cast r0 into r1 as group;
cast r0 into r2 as u8;
cast.lossy r0 into r3 as u8; // The bottom 8 bits of the r0 are extracted into a u8 and placed into r3
Supported Types
Address
Address
Boolean
Boolean
Field
Field
Group
Group
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
U8
U8
U16
U16
U32
U32
U64
U64
U128
U128
Scalar
Scalar
commit.bhp256
commit.bhp256
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen commitment on inputs of 256-bit chunks in first
, and some randomness in second
, storing the commitment in destination
. Randomness should always be a Scalar
value, and the produced commitment will always be an Address
, Field
, or Group
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 129 bits.
Supported Types
Address
Scalar
Address
, Field
, Group
Boolean
Scalar
Address
, Field
, Group
Field
Scalar
Address
, Field
, Group
Group
Scalar
Address
, Field
, Group
I8
Scalar
Address
, Field
, Group
I16
Scalar
Address
, Field
, Group
I32
Scalar
Address
, Field
, Group
I64
Scalar
Address
, Field
, Group
I128
Scalar
Address
, Field
, Group
U8
Scalar
Address
, Field
, Group
U16
Scalar
Address
, Field
, Group
U32
Scalar
Address
, Field
, Group
U64
Scalar
Address
, Field
, Group
U128
Scalar
Address
, Field
, Group
Scalar
Scalar
Address
, Field
, Group
Struct
Scalar
Address
, Field
, Group
commit.bhp512
commit.bhp512
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen commitment on inputs of 512-bit chunks in first
, and some randomness in second
, storing the commitment in destination
. Randomness should always be a Scalar
value, and the produced commitment will always be an Address
, Field
, or Group
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 171 bits.
Supported Types
Address
Scalar
Address
, Field
, Group
Boolean
Scalar
Address
, Field
, Group
Field
Scalar
Address
, Field
, Group
Group
Scalar
Address
, Field
, Group
I8
Scalar
Address
, Field
, Group
I16
Scalar
Address
, Field
, Group
I32
Scalar
Address
, Field
, Group
I64
Scalar
Address
, Field
, Group
I128
Scalar
Address
, Field
, Group
U8
Scalar
Address
, Field
, Group
U16
Scalar
Address
, Field
, Group
U32
Scalar
Address
, Field
, Group
U64
Scalar
Address
, Field
, Group
U128
Scalar
Address
, Field
, Group
Scalar
Scalar
Address
, Field
, Group
Struct
Scalar
Address
, Field
, Group
commit.bhp768
commit.bhp768
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen commitment on inputs of 768-bit chunks in first
, and some randomness in second
, storing the commitment in destination
. Randomness should always be a Scalar
value, and the produced commitment will always be an Address
, Field
, or Group
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 129 bits.
Supported Types
Address
Scalar
Address
, Field
, Group
Boolean
Scalar
Address
, Field
, Group
Field
Scalar
Address
, Field
, Group
Group
Scalar
Address
, Field
, Group
I8
Scalar
Address
, Field
, Group
I16
Scalar
Address
, Field
, Group
I32
Scalar
Address
, Field
, Group
I64
Scalar
Address
, Field
, Group
I128
Scalar
Address
, Field
, Group
U8
Scalar
Address
, Field
, Group
U16
Scalar
Address
, Field
, Group
U32
Scalar
Address
, Field
, Group
U64
Scalar
Address
, Field
, Group
U128
Scalar
Address
, Field
, Group
Scalar
Scalar
Address
, Field
, Group
Struct
Scalar
Address
, Field
, Group
commit.bhp1024
commit.bhp1024
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen commitment on inputs of 1024-bit chunks in first
, and some randomness in second
, storing the commitment in destination
. Randomness should always be a Scalar
value, and the produced commitment will always be an Address
, Field
, or Group
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 171 bits.
Supported Types
Address
Scalar
Address
, Field
, Group
Boolean
Scalar
Address
, Field
, Group
Field
Scalar
Address
, Field
, Group
Group
Scalar
Address
, Field
, Group
I8
Scalar
Address
, Field
, Group
I16
Scalar
Address
, Field
, Group
I32
Scalar
Address
, Field
, Group
I64
Scalar
Address
, Field
, Group
I128
Scalar
Address
, Field
, Group
U8
Scalar
Address
, Field
, Group
U16
Scalar
Address
, Field
, Group
U32
Scalar
Address
, Field
, Group
U64
Scalar
Address
, Field
, Group
U128
Scalar
Address
, Field
, Group
Scalar
Scalar
Address
, Field
, Group
Struct
Scalar
Address
, Field
, Group
commit.ped64
commit.ped64
Back to Top
Description
Computes a Pedersen commitment up to a 64-bit input in first
, and some randomness in second
, storing the commitment in destination
. Randomness should always be a Scalar
value, and the produced commitment is an Address
, Field
, or Group
value, as specified via as
at the end of the instruction.
The instruction will halt if the given Struct
value exceeds the 64-bit limit.
Supported Types
Boolean
Scalar
Address
, Field
, Group
I8
Scalar
Address
, Field
, Group
I16
Scalar
Address
, Field
, Group
I32
Scalar
Address
, Field
, Group
U8
Scalar
Address
, Field
, Group
U16
Scalar
Address
, Field
, Group
U32
Scalar
Address
, Field
, Group
Struct
Scalar
Address
, Field
, Group
commit.ped128
commit.ped128
Back to Top
Description
Computes a Pedersen commitment up to a 128-bit input in first
, and some randomness in second
, storing the commitment in destination
. Randomness should always be a Scalar
value, and the produced commitment is an Address
, Field
, or Group
value, as specified via as
at the end of the instruction.
The instruction will halt if the given Struct
value exceeds the 128-bit limit.
Supported Types
Boolean
Scalar
Address
, Field
, Group
I8
Scalar
Address
, Field
, Group
I16
Scalar
Address
, Field
, Group
I32
Scalar
Address
, Field
, Group
I64
Scalar
Address
, Field
, Group
U8
Scalar
Address
, Field
, Group
U16
Scalar
Address
, Field
, Group
U32
Scalar
Address
, Field
, Group
U64
Scalar
Address
, Field
, Group
Struct
Scalar
Address
, Field
, Group
div
div
Back to Top
Description
Divides first
by second
, storing the outcome in destination
. Halts on division by zero.
For integer types, this operation performs truncated division. Furthermore, a constraint is added to check for underflow. This underflow happens when dividing the minimum value of a signed integer type by -1
. For example, div -128i8 -1i8
would result in underflow, since 128
cannot be represented as an i8
.
For cases where wrapping semantics are needed for integer types, see the div.w instruction.
Supported Types
Field
Field
Field
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
div.w
div.w
Back to Top
Description
Divides first
by second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
double
double
Back to Top
Description
Doubles the input, storing the outcome in destination
.
Supported Types
Field
Field
Group
Group
gt
gt
Back to Top
Description
Checks if first
is greater than second
, storing the result in destination
.
Supported Types
Field
Field
Boolean
I8
I8
Boolean
I16
I16
Boolean
I32
I32
Boolean
I64
I64
Boolean
I128
I128
Boolean
U8
U8
Boolean
U16
U16
Boolean
U32
U32
Boolean
U64
U64
Boolean
U128
U128
Boolean
Scalar
Scalar
Boolean
gte
gte
Back to Top
Description
Checks if first
is greater than or equal to second
, storing the result in destination
.
Supported Types
Field
Field
Boolean
I8
I8
Boolean
I16
I16
Boolean
I32
I32
Boolean
I64
I64
Boolean
I128
I128
Boolean
U8
U8
Boolean
U16
U16
Boolean
U32
U32
Boolean
U64
U64
Boolean
U128
U128
Boolean
Scalar
Scalar
Boolean
hash.bhp256
hash.bhp256
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen hash on inputs of 256-bit chunks in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 129 bits.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.bhp512
hash.bhp512
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen hash on inputs of 512-bit chunks in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 171 bits.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.bhp768
hash.bhp768
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen hash on inputs of 768-bit chunks in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 129 bits.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.bhp1024
hash.bhp1024
Back to Top
Description
Computes a Bowe-Hopwood-Pedersen hash on inputs of 1024-bit chunks in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
The instruction will halt if the given input is smaller than 171 bits.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.keccak256
hash.keccak256
Back to Top
Description
Performs a Keccak hash on first
, storing a 256-bit digest in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.keccak384
hash.keccak384
Back to Top
Description
Performs a Keccak hash on first
, storing a 384-bit digest in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.keccak512
hash.keccak512
Back to Top
Description
Performs a Keccak hash on first
, storing a 512-bit digest in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.ped64
hash.ped64
Back to Top
Description
Computes a Pedersen hash up to a 64-bit input in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
The instruction will halt if the given Struct
value exceeds the 64-bit limit.
Supported Types
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.ped128
hash.ped128
Back to Top
Description
Computes a Pedersen hash up to a 128-bit input in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
The instruction will halt if the given Struct
value exceeds the 128-bit limit.
Supported Types
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.psd2
hash.psd2
Back to Top
Description
Calculates a Poseidon hash with an input rate of 2, from an input in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.psd4
hash.psd4
Back to Top
Description
Calculates a Poseidon hash with an input rate of 4, from an input in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.psd8
hash.psd8
Description
Calculates a Poseidon hash with an input rate of 8, from an input in first
, storing the hash in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.sha3_256
hash.sha3_256
Description
Calculates a SHA3-256 hash, from an input in first
, storing the 256-bit digest in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.sha3_384
hash.sha3_384
Back to Top
Description
Calculates a SHA3-384 hash, from an input in first
, storing the 384-bit digest in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
hash.sha3_512
hash.sha3_512
Back to Top
Description
Calculates a SHA3-512 hash, from an input in first
, storing the 512-bit digest in destination
. The produced hash will always be an arithmetic (U8
, U16
, U32
, U64
, U128
, I8
, I16
, I32
,I64
,I128
, Field
, Group
, or Scalar
) or Address
value, as specified via as
at the end of the instruction.
Supported Types
Address
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Boolean
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Field
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Group
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
I128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U8
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U16
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U32
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U64
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
U128
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Scalar
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
Struct
Address
, Field
, Group
, Scalar
, I8
, I16
, I32
,I64
,I128
, U8
, U16
, U32
, U64
, U128
inv
inv
Back to Top
Description
Computes the multiplicative inverse of the input, storing the outcome in destination
.
Supported Types
Field
Field
is.eq
is.eq
Back to Top
Description
Compares first
and second
, storing the result in destination
.
Supported Types
Address
Address
Boolean
Boolean
Boolean
Boolean
Field
Field
Boolean
Group
Group
Boolean
I8
I8
Boolean
I16
I16
Boolean
I32
I32
Boolean
I64
I64
Boolean
I128
I128
Boolean
U8
U8
Boolean
U16
U16
Boolean
U32
U32
Boolean
U64
U64
Boolean
U128
U128
Boolean
Scalar
Scalar
Boolean
Signature
Signature
Boolean
Struct
Struct
Boolean
Record
Record
Boolean
is.neq
is.neq
Back to Top
Description
Returns true if first
is not equal to second
, storing the result in destination
.
Supported Types
Address
Address
Boolean
Boolean
Boolean
Boolean
Field
Field
Boolean
Group
Group
Boolean
I8
I8
Boolean
I16
I16
Boolean
I32
I32
Boolean
I64
I64
Boolean
I128
I128
Boolean
U8
U8
Boolean
U16
U16
Boolean
U32
U32
Boolean
U64
U64
Boolean
U128
U128
Boolean
Scalar
Scalar
Boolean
Signature
Signature
Boolean
Struct
Struct
Boolean
Record
Record
Boolean
lt
lt
Back to Top
Description
Checks if first
is less than second
, storing the outcome in destination
.
Supported Types
Field
Field
Boolean
I8
I8
Boolean
I16
I16
Boolean
I32
I32
Boolean
I64
I64
Boolean
I128
I128
Boolean
U8
U8
Boolean
U16
U16
Boolean
U32
U32
Boolean
U64
U64
Boolean
U128
U128
Boolean
Scalar
Scalar
Boolean
lte
lte
Back to Top
Description
Checks if first
is less than or equal to second
, storing the outcome in destination
.
Supported Types
Field
Field
Boolean
I8
I8
Boolean
I16
I16
Boolean
I32
I32
Boolean
I64
I64
Boolean
I128
I128
Boolean
U8
U8
Boolean
U16
U16
Boolean
U32
U32
Boolean
U64
U64
Boolean
U128
U128
Boolean
Scalar
Scalar
Boolean
mod
mod
Back to Top
Description
Takes the modulus of first
with respect to second
, storing the outcome in destination
. Halts if second
is zero.
The semantics of this operation are consistent with the mathematical definition of modulo operation.
Supported Types
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
mul
mul
Back to Top
Description
Multiplies first
with second
, storing the outcome in destination
.
For integer types, a constraint is added to check for overflow/underflow. For cases where wrapping semantics are needed for integer types, see the mul.w instruction.
Supported Types
Field
Field
Field
Group
Scalar
Group
Scalar
Group
Group
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
mul.w
mul.w
Back to Top
Description
Multiplies first
with second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
nand
nand
Back to Top
Description
Returns false only if first
and second
are true, storing the outcome in destination
.
Supported Types
Boolean
Boolean
Boolean
neg
neg
Back to Top
Description
Negates first
, storing the outcome in destination
.
For signed integer types, calling neg
on the minimum value is an invalid operation. For example, the input -128i8
would not be valid since 128
cannot be represented as an i8
.
Supported Types
Field
Field
Group
Group
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
nor
nor
Back to Top
Description
Returns true when neither first
nor second
is true, storing the outcome in destination
.
Supported Type
Boolean
Boolean
Boolean
not
not
Back to Top
Description
Perform a NOT operation on an integer (bitwise) or boolean input, storing the outcome in destination
.
Supported Types
Boolean
Boolean
I8
I8
I16
I16
I32
I32
I64
I64
I128
I128
U8
U8
U16
U16
U32
U32
U64
U64
U128
U128
or
Back to Top
Description
Performs an OR operation on integer (bitwise) or boolean first
and second
, storing the outcome in destination
.
Supported Types
Boolean
Boolean
Boolean
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
position
Back to Top
Description
The position declaration, e.g. position <name>
, which indicates a location name
in the program to branch execution to.
Positions must be a lowercase alphanumeric string.
pow
pow
Back to Top
Description
Raises first
to the power of second
, storing the outcome in destination
.
For integer types, a constraint is added to check for overflow/underflow. For cases where wrapping semantics are needed for integer types, see the pow.w instruction.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
Field
Field
Field
I8
Magnitude
I8
I16
Magnitude
I16
I32
Magnitude
I32
I64
Magnitude
I64
I128
Magnitude
I128
U8
Magnitude
U8
U16
Magnitude
U16
U32
Magnitude
U32
U64
Magnitude
U64
U128
Magnitude
U128
pow.w
pow.w
Back to Top
Description
Raises first
to the power of second
, wrapping around at the boundary of the type, storing the outcome in destination
.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
I8
Magnitude
I8
I16
Magnitude
I16
I32
Magnitude
I32
I64
Magnitude
I64
I128
Magnitude
I128
U8
Magnitude
U8
U16
Magnitude
U16
U32
Magnitude
U32
U64
Magnitude
U64
U128
Magnitude
U128
rand.chacha
rand.chacha
Description
The rand.chacha
opcode is used to generate random values within the finalize
scope. It supports a wide range of types for the random value.
Example Usage
rand.chacha into r0 as field;
rand.chacha r0 into r1 as field;
rand.chacha r0 r1 into r2 as field;
rand.chacha 1u8 2i16 into r27 as u32;
Supported Types
Single can be any of the following types Address
, Boolean
, Field
, Group
, I8
, I16
, I32
, I64
, I128
, U8
, U16
, U32
, U64
, U128
, or Scalar
. Composite data types such as structs and mappings are not allowed.
Single
Single
Single
rem
rem
Back to Top
Description
Computes the truncated remainder of first
divided by second
, storing the outcome in destination
. Halts on division by zero.
A constraint is added to check for underflow. This underflow happens when the associated division operation, div, underflows.
For cases where wrapping semantics are needed for integer types, see the rem.w instruction.
Supported Types
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
rem.w
rem.w
Back to Top
Description
Computes the truncated remainder of first
divided by second
, wrapping around at the boundary of the type, and storing the outcome in destination.
Supported Types
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
sign.verify
sign.verify
Back to Top
Description
Verifies the signature first
against the address public key second
and the message third
, storing the outcome in destination
.
Example Usage
sign.verify r0 r1 r2 into r3;
Supported Types
Signature
Address
Message
Boolean
shl
shl
Back to Top
Description
Shifts first
left by second
bits, storing the outcome in destination
.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
I8
Magnitude
I8
I16
Magnitude
I16
I32
Magnitude
I32
I64
Magnitude
I64
I128
Magnitude
I128
U8
Magnitude
U8
U16
Magnitude
U16
U32
Magnitude
U32
U64
Magnitude
U64
U128
Magnitude
U128
shl.w
shl.w
Back to Top
Description
Shifts first
left by second
bits, wrapping around at the boundary of the type, storing the outcome in destination
.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
I8
Magnitude
I8
I16
Magnitude
I16
I32
Magnitude
I32
I64
Magnitude
I64
I128
Magnitude
I128
U8
Magnitude
U8
U16
Magnitude
U16
U32
Magnitude
U32
U64
Magnitude
U64
U128
Magnitude
U128
shr
shr
Back to Top
Description
Shifts first
right by second
bits, storing the outcome in destination
.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
I8
Magnitude
I8
I16
Magnitude
I16
I32
Magnitude
I32
I64
Magnitude
I64
I128
Magnitude
I128
U8
Magnitude
U8
U16
Magnitude
U16
U32
Magnitude
U32
U64
Magnitude
U64
U128
Magnitude
U128
shr.w
shr.w
Back to Top
Description
Shifts first
right by second
bits, wrapping around at the boundary of the type, storing the outcome in destination
.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
I8
Magnitude
I8
I16
Magnitude
I16
I32
Magnitude
I32
I64
Magnitude
I64
I128
Magnitude
I128
U8
Magnitude
U8
U16
Magnitude
U16
U32
Magnitude
U32
U64
Magnitude
U64
U128
Magnitude
U128
square
square
Back to Top
Description
Squares the input, storing the outcome in destination
.
Supported Types
Field
Field
sqrt
sqrt
Back to Top
Description
Computes the square root of the input, storing the outcome in destination
.
Supported Types
Field
Field
sub
sub
Back to Top
Description
Computes first - second
, storing the outcome in destination
.
Supported Types
Field
Field
Field
Group
Group
Group
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
sub.w
sub.w
Back to Top
Description
Computes first - second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
ternary
ternary
Back to Top
Description
Selects first
, if condition
is true, otherwise selects second
, storing the result in destination
.
Example: ternary r0 r1 r2 into r3
, where r0
is the condition, r1
is first, r2
is second, and r3
is the destination.
Supported Types
Boolean
Boolean
Boolean
Boolean
Boolean
Field
Field
Field
Boolean
Group
Group
Group
Boolean
I8
I8
I8
Boolean
I16
I16
I16
Boolean
I32
I32
I32
Boolean
I64
I64
I64
Boolean
I128
I128
I128
Boolean
U8
U8
U8
Boolean
U16
U16
U16
Boolean
U32
U32
U32
Boolean
U64
U64
U64
Boolean
U128
U128
U128
Boolean
Scalar
Scalar
Scalar
Boolean
Signature
Signature
Signature
xor
xor
Back to Top
Description
Performs a XOR operation on integer (bitwise) or boolean first
and second
, storing the outcome in destination
.
Supported Types
Boolean
Boolean
Boolean
I8
I8
I8
I16
I16
I16
I32
I32
I32
I64
I64
I64
I128
I128
I128
U8
U8
U8
U16
U16
U16
U32
U32
U32
U64
U64
U64
U128
U128
U128
Last updated