Aleo Opcodes Reference
The following lists show the standard and cryptographic opcodes supported by Aleo instructions.
Table of Standard Opcodes
Name | Description |
---|---|
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 |
block.height | Returns height of the block within the finalize scope |
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
Name | Description |
---|---|
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 Aleo Virtual Machine (AVM).
abs
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
Input | Destination |
---|---|
I8 | I8 |
I16 | I16 |
I32 | I32 |
I64 | I64 |
I128 | I128 |
abs.w
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
Input | Destination |
---|---|
I8 | I8 |
I16 | I16 |
I32 | I32 |
I64 | I64 |
I128 | I128 |
add
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
First | Second | Destination |
---|---|---|
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
Description
Adds first
with second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Performs an AND operation on integer (bitwise) or boolean first
and second
,
storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Checks whether first
and second
are equal, halting if they are not equal.
Supported Types
First | Second |
---|---|
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
Description
Checks whether first
and second
are not equal, halting if they are equal.
Supported Types
First | Second |
---|---|
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 |
block.height
Description
Returns the height of the block within the finalize scope. Currently, block height is the only supported property.
Example Usage
assert.eq block.height 1337;
branch.eq
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.
First | Second | Destination |
---|---|---|
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
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.
First | Second | Destination |
---|---|---|
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
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
First | Second |
---|---|
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
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
First | Second |
---|---|
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
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
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
Description
Divides first
by second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Doubles the input, storing the outcome in destination
.
Supported Types
Input | Destination |
---|---|
Field | Field |
Group | Group |
gt
Description
Checks if first
is greater than second
, storing the result in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Checks if first
is greater than or equal to second
, storing the result in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
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
First | Destination |
---|---|
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
Description
Computes the multiplicative inverse of the input, storing the outcome in destination
.
Supported Types
Input | Destination |
---|---|
Field | Field |
is.eq
Description
Compares first
and second
, storing the result in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Returns true if first
is not equal to second
, storing the result in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Checks if first
is less than second
, storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Checks if first
is less than or equal to second
, storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
U8 | U8 | U8 |
U16 | U16 | U16 |
U32 | U32 | U32 |
U64 | U64 | U64 |
U128 | U128 | U128 |
mul
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
First | Second | Destination |
---|---|---|
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
Description
Multiplies first
with second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Returns false only if first
and second
are true, storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
Boolean | Boolean | Boolean |
neg
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
Input | Destination |
---|---|
Field | Field |
Group | Group |
I8 | I8 |
I16 | I16 |
I32 | I32 |
I64 | I64 |
I128 | I128 |
nor
Description
Returns true when neither first
nor second
is true, storing the outcome in destination
.
Supported Type
First | Second | Destination |
---|---|---|
Boolean | Boolean | Boolean |
not
Description
Perform a NOT operation on an integer (bitwise) or boolean input, storing the outcome in destination
.
Supported Types
Input | Destination |
---|---|
Boolean | Boolean |
I8 | I8 |
I16 | I16 |
I32 | I32 |
I64 | I64 |
I128 | I128 |
U8 | U8 |
U16 | U16 |
U32 | U32 |
U64 | U64 |
U128 | U128 |
or
Description
Performs an OR operation on integer (bitwise) or boolean first
and second
, storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
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
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
.
First | Second | Destination |
---|---|---|
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
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
.
First | Second | Destination |
---|---|---|
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
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.
First | Second | Destination |
---|---|---|
Single | Single | Single |
rem
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Destination |
---|---|---|
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
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
First | Second | Third | Destination |
---|---|---|---|
Signature | Address | Message | Boolean |
shl
Description
Shifts first
left by second
bits, storing the outcome in destination
.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
First | Second | Destination |
---|---|---|
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
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
.
First | Second | Destination |
---|---|---|
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
Description
Shifts first
right by second
bits, storing the outcome in destination
.
Supported Types
Magnitude
can be a U8
, U16
, or U32
.
First | Second | Destination |
---|---|---|
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
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
.
First | Second | Destination |
---|---|---|
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
Description
Squares the input, storing the outcome in destination
.
Supported Types
Input | Destination |
---|---|
Field | Field |
sqrt
Description
Computes the square root of the input, storing the outcome in destination
.
Supported Types
Input | Destination |
---|---|
Field | Field |
sub
Description
Computes first - second
, storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
Description
Computes first - second
, wrapping around at the boundary of the type, and storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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
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
Condition | First | Second | Destination |
---|---|---|---|
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
Description
Performs a XOR operation on integer (bitwise) or boolean first
and second
, storing the outcome in destination
.
Supported Types
First | Second | Destination |
---|---|---|
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 |