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