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 |