Skip to main content

Aleo Opcodes Reference

The following lists show the standard and cryptographic opcodes supported by Aleo instructions.

Table of Standard Opcodes

NameDescription
absAbsolute value operation
abs.wWrapping absolute value operation
addAddition operation
add.wWrapping addition operation
andAND operation
assert.eqAssert equality
assert.neqAssert non-equality
block.heightReturns height of the block within the finalize scope
branch.eqBranches to a position if the arguments are equal
branch.neqBranches to a position if the arguments are not equal
castCast between literals
cast.lossyCast between literals with lossy truncation
divDivision operation
div.wWrapping division operation
doubleDouble operation
gtGreater than comparison
gteGreater than or equal to comparison
invMultiplicative inverse operation
is.eqEquality comparison
is.neqNot equal comparison
ltLess than comparison
lteLess than or equal to comparison
modArithmetic modulo operation
mulMultiplication operation
mul.wWrapping multiplication operation
nandBoolean NAND operation
negAdditive inverse operation
norBoolean NOR operation
notNOT operation
orOR Operation
positionThe position command
powExponentiation operation
pow.wWrapping exponentiation operation
rand.chachaGenerates a random value within the finalize scope.
remRemainder operation
rem.wWrapping remainder operation
shlShift left operation
shl.wWrapping shift left operation
shrShift right operation
shr.wWrapping shift right operation
sqrtSquare root operation
squareSquare operation
subSubtraction operation
sub.wWrapping subtraction operation
ternaryTernary select operation
xorXOR operation

Table of Cryptographic Opcodes

NameDescription
commit.bhp256256-bit input BHP commitment
commit.bhp512512-bit input BHP commitment
commit.bhp768768-bit input BHP commitment
commit.bhp10241024-bit input BHP commitment
commit.ped6464-bit input Pedersen commitment
commit.ped128128-bit input Pedersen commitment
hash.bhp256256-bit input BHP hash
hash.bhp512512-bit input BHP hash
hash.bhp768768-bit input BHP hash
hash.bhp10241024-bit input BHP hash
hash.keccak256256-bit input Keccak hash
hash.keccak384384-bit input Keccak hash
hash.keccak512512-bit input Keccak hash
hash.ped6464-bit input Pedersen hash
hash.ped128128-bit input Pedersen hash
hash.psd2Poseidon hash with input rate 2
hash.psd4Poseidon hash with input rate 4
hash.psd8Poseidon hash with input rate 8
hash.sha3_256256-bit input SHA3 hash
hash.sha3_384384-bit input SHA3 hash
hash.sha3_512512-bit input SHA3 hash
sign.verifyVerify a Schnorr signature

Specification

The following is the specification for each opcode in the Aleo Virtual Machine (AVM).

abs

Back to Top

Description

Computes the absolute value of the input, checking for overflow, storing the result in the destination register.

For integer types, a constraint is added to check for underflow. For cases where wrapping semantics are needed, see the abs.w instruction. This underflow happens when the input is the minimum value of a signed integer type. For example, abs -128i8 would result in underflow, since 128 cannot be represented as an i8.

Supported Types

InputDestination
I8I8
I16I16
I32I32
I64I64
I128I128

abs.w

Back to Top

Description

Compute the absolute value of the input, wrapping around at the boundary of the type, and storing the result in the destination register.

Supported Types

InputDestination
I8I8
I16I16
I32I32
I64I64
I128I128

add

Back to Top

Description

Adds first with second, storing the outcome in destination.

For integer types, a constraint is added to check for overflow. For cases where wrapping semantics are needed for integer types, see the add.w instruction.

Supported Types

FirstSecondDestination
FieldFieldField
GroupGroupGroup
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128
ScalarScalarScalar

add.w

Back to Top

Description

Adds first with second, wrapping around at the boundary of the type, and storing the outcome in destination.

Supported Types

FirstSecondDestination
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

and

Back to Top

Description

Performs an AND operation on integer (bitwise) or boolean first and second, storing the outcome in destination.

Supported Types

FirstSecondDestination
BooleanBooleanBoolean
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

assert.eq

Back to Top

Description

Checks whether first and second are equal, halting if they are not equal.

Supported Types

FirstSecond
AddressAddress
BooleanBoolean
FieldField
GroupGroup
I8I8
I16I16
I32I32
I64I64
I128I128
U8U8
U16U16
U32U32
U64U64
U128U128
ScalarScalar
SignatureSignature
StructStruct
RecordRecord

assert.neq

Back to Top

Description

Checks whether first and second are not equal, halting if they are equal.

Supported Types

FirstSecond
AddressAddress
BooleanBoolean
FieldField
GroupGroup
I8I8
I16I16
I32I32
I64I64
I128I128
U8U8
U16U16
U32U32
U64U64
U128U128
ScalarScalar
SignatureSignature
StructStruct
RecordRecord

block.height

Back to Top

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

Back to Top

Description

The command branch.eq <first> <second> to <destination> branches execution to the position indicated by destination if first and second are equal. This command is restricted to the finalize scope, and the destination must follow the command. Backward branches are not currently supported.

FirstSecondDestination
AddressAddressPosition
BooleanBooleanPosition
FieldFieldPosition
GroupGroupPosition
I8I8Position
I16I16Position
I32I32Position
I64I64Position
I128I128Position
U8U8Position
U16U16Position
U32U32Position
U64U64Position
U128U128Position
ScalarScalarPosition
StructStructPosition
RecordRecordPosition

branch.neq

Back to Top

Description

The command branch.neq <first> <second> to <destination> branches execution to the position indicated by destination if first and second are not equal. This command is restricted to the finalize scope, and the destination must follow the command. Backward branches are not currently supported.

FirstSecondDestination
AddressAddressPosition
BooleanBooleanPosition
FieldFieldPosition
GroupGroupPosition
I8I8Position
I16I16Position
I32I32Position
I64I64Position
I128I128Position
U8U8Position
U16U16Position
U32U32Position
U64U64Position
U128U128Position
ScalarScalarPosition
StructStructPosition
RecordRecordPosition

cast

Back to Top

Description

Enables casting between different literals.

Example Usage

input r0 as field.private;
cast r0 into r1 as group;
cast r0 into r2 as u8;
cast r3 r4 r5 r6 into r7 as [boolean; 4u32];
cast r7 into r8 as [[boolean; 4u32]; 1u32];

Supported Types

FirstSecond
AddressAddress
ArrayArray
BooleanBoolean
FieldField
GroupGroup
I8I8
I16I16
I32I32
I64I64
I128I128
U8U8
U16U16
U32U32
U64U64
U128U128
ScalarScalar

cast.lossy

Back to Top

Description

Perform casting with lossy truncation.

Example Usage

input r0 as field.private;
cast r0 into r1 as group;
cast r0 into r2 as u8;
cast.lossy r0 into r3 as u8; // The bottom 8 bits of the r0 are extracted into a u8 and placed into r3

Supported Types

FirstSecond
AddressAddress
BooleanBoolean
FieldField
GroupGroup
I8I8
I16I16
I32I32
I64I64
I128I128
U8U8
U16U16
U32U32
U64U64
U128U128
ScalarScalar

commit.bhp256

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen commitment on inputs of 256-bit chunks in first, and some randomness in second, storing the commitment in destination. Randomness should always be a Scalar value, and the produced commitment will always be an Address, Field, or Group value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 129 bits.

Supported Types

FirstSecondDestination
AddressScalarAddress, Field, Group
BooleanScalarAddress, Field, Group
FieldScalarAddress, Field, Group
GroupScalarAddress, Field, Group
I8ScalarAddress, Field, Group
I16ScalarAddress, Field, Group
I32ScalarAddress, Field, Group
I64ScalarAddress, Field, Group
I128ScalarAddress, Field, Group
U8ScalarAddress, Field, Group
U16ScalarAddress, Field, Group
U32ScalarAddress, Field, Group
U64ScalarAddress, Field, Group
U128ScalarAddress, Field, Group
ScalarScalarAddress, Field, Group
StructScalarAddress, Field, Group

commit.bhp512

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen commitment on inputs of 512-bit chunks in first, and some randomness in second, storing the commitment in destination. Randomness should always be a Scalar value, and the produced commitment will always be an Address, Field, or Group value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 171 bits.

Supported Types

FirstSecondDestination
AddressScalarAddress, Field, Group
BooleanScalarAddress, Field, Group
FieldScalarAddress, Field, Group
GroupScalarAddress, Field, Group
I8ScalarAddress, Field, Group
I16ScalarAddress, Field, Group
I32ScalarAddress, Field, Group
I64ScalarAddress, Field, Group
I128ScalarAddress, Field, Group
U8ScalarAddress, Field, Group
U16ScalarAddress, Field, Group
U32ScalarAddress, Field, Group
U64ScalarAddress, Field, Group
U128ScalarAddress, Field, Group
ScalarScalarAddress, Field, Group
StructScalarAddress, Field, Group

commit.bhp768

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen commitment on inputs of 768-bit chunks in first, and some randomness in second, storing the commitment in destination. Randomness should always be a Scalar value, and the produced commitment will always be an Address, Field, or Group value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 129 bits.

Supported Types

FirstSecondDestination
AddressScalarAddress, Field, Group
BooleanScalarAddress, Field, Group
FieldScalarAddress, Field, Group
GroupScalarAddress, Field, Group
I8ScalarAddress, Field, Group
I16ScalarAddress, Field, Group
I32ScalarAddress, Field, Group
I64ScalarAddress, Field, Group
I128ScalarAddress, Field, Group
U8ScalarAddress, Field, Group
U16ScalarAddress, Field, Group
U32ScalarAddress, Field, Group
U64ScalarAddress, Field, Group
U128ScalarAddress, Field, Group
ScalarScalarAddress, Field, Group
StructScalarAddress, Field, Group

commit.bhp1024

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen commitment on inputs of 1024-bit chunks in first, and some randomness in second, storing the commitment in destination. Randomness should always be a Scalar value, and the produced commitment will always be an Address, Field, or Group value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 171 bits.

Supported Types

FirstSecondDestination
AddressScalarAddress, Field, Group
BooleanScalarAddress, Field, Group
FieldScalarAddress, Field, Group
GroupScalarAddress, Field, Group
I8ScalarAddress, Field, Group
I16ScalarAddress, Field, Group
I32ScalarAddress, Field, Group
I64ScalarAddress, Field, Group
I128ScalarAddress, Field, Group
U8ScalarAddress, Field, Group
U16ScalarAddress, Field, Group
U32ScalarAddress, Field, Group
U64ScalarAddress, Field, Group
U128ScalarAddress, Field, Group
ScalarScalarAddress, Field, Group
StructScalarAddress, Field, Group

commit.ped64

Back to Top

Description

Computes a Pedersen commitment up to a 64-bit input in first, and some randomness in second, storing the commitment in destination. Randomness should always be a Scalar value, and the produced commitment is an Address, Field, or Group value, as specified via as at the end of the instruction.

The instruction will halt if the given Struct value exceeds the 64-bit limit.

Supported Types

FirstSecondDestination
BooleanScalarAddress, Field, Group
I8ScalarAddress, Field, Group
I16ScalarAddress, Field, Group
I32ScalarAddress, Field, Group
U8ScalarAddress, Field, Group
U16ScalarAddress, Field, Group
U32ScalarAddress, Field, Group
StructScalarAddress, Field, Group

commit.ped128

Back to Top

Description

Computes a Pedersen commitment up to a 128-bit input in first, and some randomness in second, storing the commitment in destination. Randomness should always be a Scalar value, and the produced commitment is an Address, Field, or Group value, as specified via as at the end of the instruction.

The instruction will halt if the given Struct value exceeds the 128-bit limit.

Supported Types

FirstSecondDestination
BooleanScalarAddress, Field, Group
I8ScalarAddress, Field, Group
I16ScalarAddress, Field, Group
I32ScalarAddress, Field, Group
I64ScalarAddress, Field, Group
U8ScalarAddress, Field, Group
U16ScalarAddress, Field, Group
U32ScalarAddress, Field, Group
U64ScalarAddress, Field, Group
StructScalarAddress, Field, Group

div

Back to Top

Description

Divides first by second, storing the outcome in destination. Halts on division by zero.

For integer types, this operation performs truncated division. Furthermore, a constraint is added to check for underflow. This underflow happens when dividing the minimum value of a signed integer type by -1. For example, div -128i8 -1i8 would result in underflow, since 128 cannot be represented as an i8.

For cases where wrapping semantics are needed for integer types, see the div.w instruction.

Supported Types

FirstSecondDestination
FieldFieldField
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

div.w

Back to Top

Description

Divides first by second, wrapping around at the boundary of the type, and storing the outcome in destination.

Supported Types

FirstSecondDestination
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

double

Back to Top

Description

Doubles the input, storing the outcome in destination.

Supported Types

InputDestination
FieldField
GroupGroup

gt

Back to Top

Description

Checks if first is greater than second, storing the result in destination.

Supported Types

FirstSecondDestination
FieldFieldBoolean
I8I8Boolean
I16I16Boolean
I32I32Boolean
I64I64Boolean
I128I128Boolean
U8U8Boolean
U16U16Boolean
U32U32Boolean
U64U64Boolean
U128U128Boolean
ScalarScalarBoolean

gte

Back to Top

Description

Checks if first is greater than or equal to second, storing the result in destination.

Supported Types

FirstSecondDestination
FieldFieldBoolean
I8I8Boolean
I16I16Boolean
I32I32Boolean
I64I64Boolean
I128I128Boolean
U8U8Boolean
U16U16Boolean
U32U32Boolean
U64U64Boolean
U128U128Boolean
ScalarScalarBoolean

hash.bhp256

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen hash on inputs of 256-bit chunks in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 129 bits.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.bhp512

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen hash on inputs of 512-bit chunks in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 171 bits.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.bhp768

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen hash on inputs of 768-bit chunks in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 129 bits.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.bhp1024

Back to Top

Description

Computes a Bowe-Hopwood-Pedersen hash on inputs of 1024-bit chunks in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

The instruction will halt if the given input is smaller than 171 bits.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.keccak256

Back to Top

Description

Performs a Keccak hash on first, storing a 256-bit digest in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.keccak384

Back to Top

Description

Performs a Keccak hash on first, storing a 384-bit digest in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.keccak512

Back to Top

Description

Performs a Keccak hash on first, storing a 512-bit digest in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.ped64

Back to Top

Description

Computes a Pedersen hash up to a 64-bit input in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

The instruction will halt if the given Struct value exceeds the 64-bit limit.

Supported Types

FirstDestination
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.ped128

Back to Top

Description

Computes a Pedersen hash up to a 128-bit input in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

The instruction will halt if the given Struct value exceeds the 128-bit limit.

Supported Types

FirstDestination
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.psd2

Back to Top

Description

Calculates a Poseidon hash with an input rate of 2, from an input in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.psd4

Back to Top

Description

Calculates a Poseidon hash with an input rate of 4, from an input in first, storing the hash in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.psd8

Back to Top

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

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.sha3_256

Back to Top

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

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.sha3_384

Back to Top

Description

Calculates a SHA3-384 hash, from an input in first, storing the 384-bit digest in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

hash.sha3_512

Back to Top

Description

Calculates a SHA3-512 hash, from an input in first, storing the 512-bit digest in destination. The produced hash will always be an arithmetic (U8, U16, U32, U64, U128, I8, I16, I32,I64,I128, Field, Group, or Scalar) or Address value, as specified via as at the end of the instruction.

Supported Types

FirstDestination
AddressAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
BooleanAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
FieldAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
GroupAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
I128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U8Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U16Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U32Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U64Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
U128Address, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
ScalarAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128
StructAddress, Field, Group, Scalar, I8, I16, I32,I64,I128, U8, U16, U32, U64, U128

inv

Back to Top

Description

Computes the multiplicative inverse of the input, storing the outcome in destination.

Supported Types

InputDestination
FieldField

is.eq

Back to Top

Description

Compares first and second, storing the result in destination.

Supported Types

FirstSecondDestination
AddressAddressBoolean
BooleanBooleanBoolean
FieldFieldBoolean
GroupGroupBoolean
I8I8Boolean
I16I16Boolean
I32I32Boolean
I64I64Boolean
I128I128Boolean
U8U8Boolean
U16U16Boolean
U32U32Boolean
U64U64Boolean
U128U128Boolean
ScalarScalarBoolean
SignatureSignatureBoolean
StructStructBoolean
RecordRecordBoolean

is.neq

Back to Top

Description

Returns true if first is not equal to second, storing the result in destination.

Supported Types

FirstSecondDestination
AddressAddressBoolean
BooleanBooleanBoolean
FieldFieldBoolean
GroupGroupBoolean
I8I8Boolean
I16I16Boolean
I32I32Boolean
I64I64Boolean
I128I128Boolean
U8U8Boolean
U16U16Boolean
U32U32Boolean
U64U64Boolean
U128U128Boolean
ScalarScalarBoolean
SignatureSignatureBoolean
StructStructBoolean
RecordRecordBoolean

lt

Back to Top

Description

Checks if first is less than second, storing the outcome in destination.

Supported Types

FirstSecondDestination
FieldFieldBoolean
I8I8Boolean
I16I16Boolean
I32I32Boolean
I64I64Boolean
I128I128Boolean
U8U8Boolean
U16U16Boolean
U32U32Boolean
U64U64Boolean
U128U128Boolean
ScalarScalarBoolean

lte

Back to Top

Description

Checks if first is less than or equal to second, storing the outcome in destination.

Supported Types

FirstSecondDestination
FieldFieldBoolean
I8I8Boolean
I16I16Boolean
I32I32Boolean
I64I64Boolean
I128I128Boolean
U8U8Boolean
U16U16Boolean
U32U32Boolean
U64U64Boolean
U128U128Boolean
ScalarScalarBoolean

mod

Back to Top

Description

Takes the modulus of first with respect to second, storing the outcome in destination. Halts if second is zero.

The semantics of this operation are consistent with the mathematical definition of modulo operation.

Supported Types

FirstSecondDestination
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

mul

Back to Top

Description

Multiplies first with second, storing the outcome in destination.

For integer types, a constraint is added to check for overflow/underflow. For cases where wrapping semantics are needed for integer types, see the mul.w instruction.

Supported Types

FirstSecondDestination
FieldFieldField
GroupScalarGroup
ScalarGroupGroup
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

mul.w

Back to Top

Description

Multiplies first with second, wrapping around at the boundary of the type, and storing the outcome in destination.

Supported Types

FirstSecondDestination
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

nand

Back to Top

Description

Returns false only if first and second are true, storing the outcome in destination.

Supported Types

FirstSecondDestination
BooleanBooleanBoolean

neg

Back to Top

Description

Negates first, storing the outcome in destination.

For signed integer types, calling neg on the minimum value is an invalid operation. For example, the input -128i8 would not be valid since 128 cannot be represented as an i8.

Supported Types

InputDestination
FieldField
GroupGroup
I8I8
I16I16
I32I32
I64I64
I128I128

nor

Back to Top

Description

Returns true when neither first nor second is true, storing the outcome in destination.

Supported Type

FirstSecondDestination
BooleanBooleanBoolean

not

Back to Top

Description

Perform a NOT operation on an integer (bitwise) or boolean input, storing the outcome in destination.

Supported Types

InputDestination
BooleanBoolean
I8I8
I16I16
I32I32
I64I64
I128I128
U8U8
U16U16
U32U32
U64U64
U128U128

or

Back to Top

Description

Performs an OR operation on integer (bitwise) or boolean first and second, storing the outcome in destination.

Supported Types

FirstSecondDestination
BooleanBooleanBoolean
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

position

Back to Top

Description

The position declaration, e.g. position <name>, which indicates a location name in the program to branch execution to.
Positions must be a lowercase alphanumeric string.


pow

Back to Top

Description

Raises first to the power of second, storing the outcome in destination.

For integer types, a constraint is added to check for overflow/underflow. For cases where wrapping semantics are needed for integer types, see the pow.w instruction.

Supported Types

Magnitude can be a U8, U16, or U32.

FirstSecondDestination
FieldFieldField
I8MagnitudeI8
I16MagnitudeI16
I32MagnitudeI32
I64MagnitudeI64
I128MagnitudeI128
U8MagnitudeU8
U16MagnitudeU16
U32MagnitudeU32
U64MagnitudeU64
U128MagnitudeU128

pow.w

Back to Top

Description

Raises first to the power of second, wrapping around at the boundary of the type, storing the outcome in destination.

Supported Types

Magnitude can be a U8, U16, or U32.

FirstSecondDestination
I8MagnitudeI8
I16MagnitudeI16
I32MagnitudeI32
I64MagnitudeI64
I128MagnitudeI128
U8MagnitudeU8
U16MagnitudeU16
U32MagnitudeU32
U64MagnitudeU64
U128MagnitudeU128

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.

FirstSecondDestination
SingleSingleSingle

rem

Back to Top

Description

Computes the truncated remainder of first divided by second, storing the outcome in destination. Halts on division by zero.

A constraint is added to check for underflow. This underflow happens when the associated division operation, div, underflows.

For cases where wrapping semantics are needed for integer types, see the rem.w instruction.

Supported Types

FirstSecondDestination
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

rem.w

Back to Top

Description

Computes the truncated remainder of first divided by second, wrapping around at the boundary of the type, and storing the outcome in destination.

Supported Types

FirstSecondDestination
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

sign.verify

Back to Top

Description

Verifies the signature first against the address public key second and the message third, storing the outcome in destination.

Example Usage

sign.verify r0 r1 r2 into r3;

Supported Types

FirstSecondThirdDestination
SignatureAddressMessageBoolean

shl

Back to Top

Description

Shifts first left by second bits, storing the outcome in destination.

Supported Types

Magnitude can be a U8, U16, or U32.

FirstSecondDestination
I8MagnitudeI8
I16MagnitudeI16
I32MagnitudeI32
I64MagnitudeI64
I128MagnitudeI128
U8MagnitudeU8
U16MagnitudeU16
U32MagnitudeU32
U64MagnitudeU64
U128MagnitudeU128

shl.w

Back to Top

Description

Shifts first left by second bits, wrapping around at the boundary of the type, storing the outcome in destination.

Supported Types

Magnitude can be a U8, U16, or U32.

FirstSecondDestination
I8MagnitudeI8
I16MagnitudeI16
I32MagnitudeI32
I64MagnitudeI64
I128MagnitudeI128
U8MagnitudeU8
U16MagnitudeU16
U32MagnitudeU32
U64MagnitudeU64
U128MagnitudeU128

shr

Back to Top

Description

Shifts first right by second bits, storing the outcome in destination.

Supported Types

Magnitude can be a U8, U16, or U32.

FirstSecondDestination
I8MagnitudeI8
I16MagnitudeI16
I32MagnitudeI32
I64MagnitudeI64
I128MagnitudeI128
U8MagnitudeU8
U16MagnitudeU16
U32MagnitudeU32
U64MagnitudeU64
U128MagnitudeU128

shr.w

Back to Top

Description

Shifts first right by second bits, wrapping around at the boundary of the type, storing the outcome in destination.

Supported Types

Magnitude can be a U8, U16, or U32.

FirstSecondDestination
I8MagnitudeI8
I16MagnitudeI16
I32MagnitudeI32
I64MagnitudeI64
I128MagnitudeI128
U8MagnitudeU8
U16MagnitudeU16
U32MagnitudeU32
U64MagnitudeU64
U128MagnitudeU128

square

Back to Top

Description

Squares the input, storing the outcome in destination.

Supported Types

InputDestination
FieldField

sqrt

Back to Top

Description

Computes the square root of the input, storing the outcome in destination.

Supported Types

InputDestination
FieldField

sub

Back to Top

Description

Computes first - second, storing the outcome in destination.

Supported Types

FirstSecondDestination
FieldFieldField
GroupGroupGroup
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

sub.w

Back to Top

Description

Computes first - second, wrapping around at the boundary of the type, and storing the outcome in destination.

Supported Types

FirstSecondDestination
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128

ternary

Back to Top

Description

Selects first, if condition is true, otherwise selects second, storing the result in destination.

Example: ternary r0 r1 r2 into r3, where r0 is the condition, r1 is first, r2 is second, and r3 is the destination.

Supported Types

ConditionFirstSecondDestination
BooleanBooleanBooleanBoolean
BooleanFieldFieldField
BooleanGroupGroupGroup
BooleanI8I8I8
BooleanI16I16I16
BooleanI32I32I32
BooleanI64I64I64
BooleanI128I128I128
BooleanU8U8U8
BooleanU16U16U16
BooleanU32U32U32
BooleanU64U64U64
BooleanU128U128U128
BooleanScalarScalarScalar
BooleanSignatureSignatureSignature

xor

Back to Top

Description

Performs a XOR operation on integer (bitwise) or boolean first and second, storing the outcome in destination.

Supported Types

FirstSecondDestination
BooleanBooleanBoolean
I8I8I8
I16I16I16
I32I32I32
I64I64I64
I128I128I128
U8U8U8
U16U16U16
U32U32U32
U64U64U64
U128U128U128