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
absBack 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.wBack 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
addBack 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.wBack 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
andBack 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.eqBack 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.neqBack 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.eqBack 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.neqBack 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
castBack 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.lossyBack 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 r3Supported 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.bhp256Back 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.bhp512Back 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.bhp768Back 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.bhp1024Back 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.ped64Back 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.ped128Back 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
divBack 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.wBack 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
doubleBack to Top
Description
Doubles the input, storing the outcome in destination.
Supported Types
Field
Field
Group
Group
gt
gtBack 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
gteBack 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.bhp256Back 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.bhp512Back 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.bhp768Back 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.bhp1024Back 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.keccak256Back 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.keccak384Back 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.keccak512Back 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.ped64Back 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.ped128Back 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.psd2Back 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.psd4Back 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.psd8Description
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_256Description
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_384Back 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_512Back 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
invBack to Top
Description
Computes the multiplicative inverse of the input, storing the outcome in destination.
Supported Types
Field
Field
is.eq
is.eqBack 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.neqBack 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
ltBack 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
lteBack 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
modBack 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
mulBack 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.wBack 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
nandBack to Top
Description
Returns false only if first and second are true, storing the outcome in destination.
Supported Types
Boolean
Boolean
Boolean
neg
negBack 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
norBack to Top
Description
Returns true when neither first nor second is true, storing the outcome in destination.
Supported Type
Boolean
Boolean
Boolean
not
notBack 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
powBack 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.wBack 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.chachaDescription
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
remBack 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.wBack 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.verifyBack 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
shlBack 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.wBack 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
shrBack 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.wBack 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
squareBack to Top
Description
Squares the input, storing the outcome in destination.
Supported Types
Field
Field
sqrt
sqrtBack to Top
Description
Computes the square root of the input, storing the outcome in destination.
Supported Types
Field
Field
sub
subBack 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.wBack 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
ternaryBack 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
xorBack 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