From e58fbf822ad0b46a7f4588b8c72b24fbb8be0e77 Mon Sep 17 00:00:00 2001 From: plafer Date: Fri, 1 Nov 2024 14:39:39 +0000 Subject: [PATCH] deploy: 2b96b85ae3437a18c22ff6aaa689aa037923a1bf --- .../design/decoder/decoder_dyn_operation.png | Bin 89542 -> 219003 bytes .../decoder/decoder_dyncall_operation.png | Bin 0 -> 222538 bytes design/decoder/constraints.html | 34 +++--- design/decoder/main.html | 33 +++++- design/stack/op_constraints.html | 2 +- print.html | 104 ++++++++++++------ searchindex.js | 2 +- searchindex.json | 2 +- user_docs/assembly/code_organization.html | 19 ++-- user_docs/assembly/execution_contexts.html | 16 ++- 10 files changed, 140 insertions(+), 72 deletions(-) create mode 100644 assets/design/decoder/decoder_dyncall_operation.png diff --git a/assets/design/decoder/decoder_dyn_operation.png b/assets/design/decoder/decoder_dyn_operation.png index 93426e0d31f51435ec7e8ddd001abfd4d1c98871..71da6f13a6c7fc6dab2cbd2b82364f6624b9b409 100644 GIT binary patch literal 219003 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 z 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 diff --git a/assets/design/decoder/decoder_dyncall_operation.png b/assets/design/decoder/decoder_dyncall_operation.png new file mode 100644 index 0000000000000000000000000000000000000000..2c0effc4d0bcb11c6a2b7c7e747e32d018501527 GIT binary patch literal 222538 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%0A>aMtt8-KT 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 refers to a column in the decoder, as depicted. The addresses in this column are set using the address from the hasher chiplet for the corresponding hash initialization / absorption / return. In the case of the value of the address in column in the current row of the decoder is set to equal the value of the address of the row in the hasher chiplet where the previous absorption (or initialization) occurred. is the address of the next row of the decoder, which is set to equal the address in the hasher chiplet where the absorption referred to by the label is happening.

    In the above, represents the address value in the decoder which corresponds to the hasher chiplet address at which the hasher was initialized (or the last absorption took place). As such, corresponds to the hasher chiplet address at which the result is returned.

    -

    -

    In the above, is set to when a control flow operation that signifies the initialization of a control block is being executed on the VM. Otherwise, it is set to . An exception is made for the SYSCALL operation. Although it also signifies the initialization of a control block, it must additionally send a procedure access request to the kernel ROM chiplet via the chiplets bus. Therefore, it is excluded from this flag and its communication with the chiplets bus is handled separately.

    +

    +

    In the above, is set to when a control flow operation that signifies the initialization of a control block is being executed on the VM (only those control blocks that don't do any concurrent requests to the chiplets but). Otherwise, it is set to . An exception is made for the DYN, DYNCALL, and SYSCALL operations, since although they initialize a control block, they also run another concurrent bus request, and so are handled separately.

    In the above, represents the opcode value of the opcode being executed on the virtual machine. It is calculated via a bitwise combination of the op bits. We leverage the opcode value to achieve domain separation when hashing control blocks. This is done by populating the second capacity register of the hasher with the value via the term when initializing the hasher.

    Using the above variables, we define operation values as described below.

    -

    When a control block initializer operation (JOIN, SPLIT, LOOP, DYN, CALL, SYSCALL) is executed, a new hasher is initialized and the contents of are absorbed into the hasher. As mentioned above, the opcode value is populated in the second capacity resister via the term.

    +

    When a control block initializer operation (JOIN, SPLIT, LOOP, CALL) is executed, a new hasher is initialized and the contents of are absorbed into the hasher. As mentioned above, the opcode value is populated in the second capacity register via the term.

    As mentioned previously, the value sent by the SYSCALL operation is defined separately, since in addition to communicating with the hash chiplet it must also send a kernel procedure access request to the kernel ROM chiplet. This value of this kernel procedure request is described by .

    In the above, is the unique operation label of the kernel procedure call operation. The values contain the root hash of the procedure being called, which is the procedure that must be requested from the kernel ROM chiplet.

    The above value sends both the hash initialization request and the kernel procedure access request to the chiplets bus when the SYSCALL operation is executed.

    +

    Similar to SYSCALL, DYN and DYNCALL are handled separately, since in addition to communicating with the hash chiplet they must also issue a memory read operation for the hash of the procedure being called.

    +

    +

    +

    +

    In the above, can be thought of as , but where the values used for the hasher decoder trace registers is all 0's. represents a memory read request from memory address (the top stack element), where the result is placed in the first half of the decoder hasher trace, and where is a label that represents a memory read request.

    When SPAN operation is executed, a new hasher is initialized and contents of are absorbed into the hasher. The number of operation groups to be hashed is padded to a multiple of the rate width () and so the is set to 0:

    When RESPAN operation is executed, contents of (which contain the new operation batch) are absorbed into the hasher:

    @@ -353,7 +358,7 @@

    Using the above definitions, we can describe the constraint for computing block hashes as follows:

    -

    +

    We need to add and subtract the sum of the relevant operation flags to ensure that when none of the flags is set to , the above constraint reduces to .

    The degree of this constraint is .

    @@ -381,13 +386,15 @@

    When a DYN operation is executed, row is added to the block stack table:

    -

    When a CALL or SYSCALL operation is executed, row is added to the block stack table:

    -

    -

    When END operation is executed, how we construct the row will depend on whether the IS_CALL or IS_SYSCALL values are set (stored in registers and respectively). If they are not set, then row is removed from the block span table (where contains the is_loop flag); otherwise, row .

    -

    +

    When a DYNCALL operation is executed, row is added to the block stack table:

    +

    +

    When a CALL or SYSCALL operation is executed, row is added to the block stack table:

    +

    +

    When END operation is executed, how we construct the row will depend on whether the IS_CALL or IS_SYSCALL values are set (stored in registers and respectively). If they are not set, then row is removed from the block span table (where contains the is_loop flag); otherwise, row .

    +

    Using the above definitions, we can describe the constraint for updating the block stack table as follows:

    -

    +

    We need to add and subtract the sum of the relevant operation flags from each side to ensure that when none of the flags is set to , the above constraint reduces to .

    The degree of this constraint is .

    @@ -415,16 +422,13 @@

    When REPEAT operation is executed, hash of loop body is added to the block hash table. We add term to indicate that the child is a body of a loop:

    -

    When the DYN operation is executed, the hash of the dynamic child is added to the block hash table. Since the child is dynamically specified by the top four elements of the stack, the value representing the dyn block's child must be computed based on the stack rather than from the decoder's hasher registers:

    -

    -

    -

    When the CALL or SYSCALL operation is executed, the hash of the callee is added to the block hash table.

    -

    +

    When DYN, DYNCALL, CALL or SYSCALL operation is executed, the hash of the child is added to the block hash table. In all cases, this child is found in the first half of the decoder hasher state.

    +

    When END operation is executed, hash of the completed block is removed from the block hash table. However, we also need to differentiate between removing the first and the second child of a join block. We do this by looking at the next operation. Specifically, if the next operation is neither END nor REPEAT nor HALT, we know that another block is about to be executed, and thus, we have just finished executing the first child of a join block. Thus, if the next operation is neither END nor REPEAT nor HALT we need to set the term for coefficient to as shown below:

    Using the above definitions, we can describe the constraint for updating the block hash table as follows:

    -

    +

    We need to add and subtract the sum of the relevant operation flags from each side to ensure that when none of the flags is set to , the above constraint reduces to .

    The degree of this constraint is .

    diff --git a/design/decoder/main.html b/design/decoder/main.html index 8aeea4b0f6..3827f5c38f 100644 --- a/design/decoder/main.html +++ b/design/decoder/main.html @@ -485,16 +485,37 @@

    SPAN operation<
  1. Sets the op_index register to .

DYN operation

-

Before a DYN operation is executed by the VM, the prover populates registers with as shown in the diagram below.

decoder_dyn_operation

-

In the above diagram, blk is the ID of the dyn block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent.

+

In the above diagram, blk is the ID of the dyn block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. p_addr is the ID of the block's parent.

When the VM executes a DYN operation, it does the following:

    -
  1. Adds a tuple (blk, prnt, 0, 0...) to the block stack table.
  2. -
  3. Gets the hash of the dynamic code block dynamic_block_hash from the top four elements of the stack.
  4. -
  5. Adds the tuple (blk, dynamic_block_hash, 0, 0) to the block hash table.
  6. -
  7. Initiates a 2-to-1 hash computation in the hash chiplet (as described here) using blk as row address in the auxiliary hashing table and as input values.
  8. +
  9. Adds a tuple (blk, p_addr, 0, 0...) to the block stack table.
  10. +
  11. Sends a memory read request to the memory chiplet, using s0 as the memory address. The result hash of callee is placed in the decoder hasher trace at .
  12. +
  13. Adds the tuple (blk, hash of callee, 0, 0) to the block hash table.
  14. +
  15. Initiates a 2-to-1 hash computation in the hash chiplet (as described here) using blk as row address in the auxiliary hashing table and [ZERO; 8] as input values.
  16. +
  17. Performs a stack left shift +
      +
    • Above s16 was pulled from the stack overflow table if present; otherwise set to 0.
    • +
    +
  18. +
+

Note that unlike DYNCALL, the fmp, ctx, in_syscall and fn_hash registers are unchanged.

+

DYNCALL operation

+

decoder_dyncall_operation

+

In the above diagram, blk is the ID of the dyn block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. p_addr is the ID of the block's parent.

+

When the VM executes a DYNCALL operation, it does the following:

+
    +
  1. Adds a tuple (blk, p_addr, 0, ctx, fmp, b_0, b_1, fn_hash[0..3]) to the block stack table.
  2. +
  3. Sends a memory read request to the memory chiplet, using s0 as the memory address. The result hash of callee is placed in the decoder hasher trace at .
  4. +
  5. Adds the tuple (blk, hash of callee, 0, 0) to the block hash table.
  6. +
  7. Initiates a 2-to-1 hash computation in the hash chiplet (as described here) using blk as row address in the auxiliary hashing table and [ZERO; 8] as input values.
  8. +
  9. Performs a stack left shift +
      +
    • Above s16 was pulled from the stack overflow table if present; otherwise set to 0.
    • +
    +
+

Similar to CALL, DYNCALL resets the fmp, sets up a new ctx, and sets the fn_hash registers to the callee hash. in_syscall needs to be 0, since calls are not allowed during a syscall.

END operation

Before an END operation is executed by the VM, the prover populates registers with the hash of the block which is about to end. The prover also sets values in and registers as follows:

    diff --git a/design/stack/op_constraints.html b/design/stack/op_constraints.html index 475d9e42cb..f92d3c9fa4 100644 --- a/design/stack/op_constraints.html +++ b/design/stack/op_constraints.html @@ -397,7 +397,7 @@

    RCOMBBASE101_1001Crypto ops EMIT101_1010System ops PUSH101_1011I/O ops -<unused>101_1100 +DYNCALL101_1100Flow control ops <unused>101_1101 <unused>101_1110 <unused>101_1111 diff --git a/print.html b/print.html index ae99d56600..b786a0513e 100644 --- a/print.html +++ b/print.html @@ -1357,22 +1357,23 @@

    Procedures

    Finally, a procedure cannot contain solely any number of advice injectors, emit, debug and trace instructions. In other words, it must contain at least one instruction which is not in the aforementioned list.

    Dynamic procedure invocation

    -

    It is also possible to invoke procedures dynamically - i.e., without specifying target procedure labels at compile time. Unlike static procedure invocation, recursion is technically possible using dynamic invocation, but dynamic invocation is more expensive, and has less available operand stack capacity for procedure arguments, as 4 elements are required for the MAST root of the callee. There are two instructions, dynexec and dyncall, which can be used to execute dynamically-specified code targets. Both instructions expect the MAST root of the target to be provided via the stack. The difference between dynexec and dyncall corresponds to the difference between exec and call, see the documentation on procedure invocation semantics for more detail.

    -

    Dynamic code execution in the same context is achieved by setting the top elements of the stack to the hash of the dynamic code block and then executing the dynexec or dyncall instruction. You can obtain the hash of a procedure in the current program, by name, using the procref instruction. See the following example of pairing the two:

    -
    procref.foo
    +

    It is also possible to invoke procedures dynamically - i.e., without specifying target procedure labels at compile time. A procedure can only call itself using dynamic invocation. There are two instructions, dynexec and dyncall, which can be used to execute dynamically-specified code targets. Both instructions expect the MAST root of the target to be stored in memory, and the memory address of the MAST root to be on the top of the stack. The difference between dynexec and dyncall corresponds to the difference between exec and call, see the documentation on procedure invocation semantics for more details.

    +

    Dynamic code execution in the same context is achieved by setting the top element of the stack to the memory address where the hash of the dynamic code block is stored, and then executing the dynexec or dyncall instruction. You can obtain the hash of a procedure in the current program, by name, using the procref instruction. See the following example of pairing the two:

    +
    # Retrieve the hash of `foo`, store it at `ADDR`, and push `ADDR` on top of the stack
    +procref.foo mem_storew.ADDR dropw push.ADDR
    +
    +# Execute `foo` dynamically
     dynexec
     

    During assembly, the procref.foo instruction is compiled to a push.HASH, where HASH is the hash of the MAST root of the foo procedure.

    During execution of the dynexec instruction, the VM does the following:

      -
    1. Reads, but does not consume, the top 4 elements of the stack to get the hash of the dynamic target (i.e. the operand stack is left unchanged).
    2. -
    3. Load the code block referenced by the hash, or trap if no such MAST root is known.
    4. -
    5. Execute the loaded code block
    6. +
    7. Read the top stack element , and read the memory word at address (the hash of the dynamic target),
    8. +
    9. Shift the stack left by one element,
    10. +
    11. Load the code block referenced by the hash, or trap if no such MAST root is known,
    12. +
    13. Execute the loaded code block.

    The dyncall instruction is used the same way, with the difference that it involves a context switch to a new context when executing the referenced block, and switching back to the calling context once execution of the callee completes.

    -
    -

    Note: In both cases, the stack is left unchanged. Therefore, if the dynamic code is intended to manipulate the stack, it should start by either dropping or moving the code block hash from the top of the stack.

    -

    Modules

    A module consists of one or more procedures. There are two types of modules: library modules and executable modules (also called programs).

    Library modules

    @@ -1555,7 +1556,11 @@

    When a procedure is invoked via a call, dyncall, or a syscall instruction, the following happens:

    • Execution moves into a different context. In case of the call and dyncall instructions, a new user context is created. In case of a syscall instruction, the execution moves back into the root context.
    • -
    • All stack items beyond the 16th item get "hidden" from the invoked procedure. That is, from the standpoint of the invoked procedure, the initial stack depth is set to 16.
    • +
    • All stack items beyond the 16th item get "hidden" from the invoked procedure. That is, from the standpoint of the invoked procedure, the initial stack depth is set to 16. +
        +
      • Note that for dyncall, the stack is shifted left by one element before being set to 16.
      • +
      +

    When the callee returns, the following happens:

      @@ -1564,8 +1569,12 @@

      The manipulations of the stack depth described above have the following implications:

      Invoking via exec instruction

      @@ -1575,7 +1584,7 @@

      Kernels

      A kernel defines a set of procedures which can be invoked from user contexts to be executed in the root context. Miden assembly programs are always compiled against some kernel. The default kernel is empty - i.e., it does not contain any procedures. To compile a program against a non-empty kernel, the kernel needs to be specified when instantiating the Miden Assembler.

      A kernel can be defined similarly to a regular library module - i.e., it can have internal and exported procedures. However, there are some small differences between what procedures can do in a kernel module vs. what they can do in a regular library module. Specifically:

        -
      • Procedures in a kernel module cannot use call or syscall instructions. This means that creating a new context from within a syscall is not possible.
      • +
      • Procedures in a kernel module cannot use call, dyncall or syscall instructions. This means that creating a new context from within a syscall is not possible.
      • Unlike procedures in regular library modules, procedures in a kernel module can use the caller instruction. This instruction puts the hash of the procedure which initiated the parent context onto the stack.

      Memory layout

      @@ -3890,16 +3899,37 @@

      SPAN operation<
    • Sets the op_index register to .
    • DYN operation

      -

      Before a DYN operation is executed by the VM, the prover populates registers with as shown in the diagram below.

      decoder_dyn_operation

      -

      In the above diagram, blk is the ID of the dyn block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent.

      +

      In the above diagram, blk is the ID of the dyn block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. p_addr is the ID of the block's parent.

      When the VM executes a DYN operation, it does the following:

        -
      1. Adds a tuple (blk, prnt, 0, 0...) to the block stack table.
      2. -
      3. Gets the hash of the dynamic code block dynamic_block_hash from the top four elements of the stack.
      4. -
      5. Adds the tuple (blk, dynamic_block_hash, 0, 0) to the block hash table.
      6. -
      7. Initiates a 2-to-1 hash computation in the hash chiplet (as described here) using blk as row address in the auxiliary hashing table and as input values.
      8. +
      9. Adds a tuple (blk, p_addr, 0, 0...) to the block stack table.
      10. +
      11. Sends a memory read request to the memory chiplet, using s0 as the memory address. The result hash of callee is placed in the decoder hasher trace at .
      12. +
      13. Adds the tuple (blk, hash of callee, 0, 0) to the block hash table.
      14. +
      15. Initiates a 2-to-1 hash computation in the hash chiplet (as described here) using blk as row address in the auxiliary hashing table and [ZERO; 8] as input values.
      16. +
      17. Performs a stack left shift +
          +
        • Above s16 was pulled from the stack overflow table if present; otherwise set to 0.
        • +
        +
      18. +
      +

      Note that unlike DYNCALL, the fmp, ctx, in_syscall and fn_hash registers are unchanged.

      +

      DYNCALL operation

      +

      decoder_dyncall_operation

      +

      In the above diagram, blk is the ID of the dyn block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. p_addr is the ID of the block's parent.

      +

      When the VM executes a DYNCALL operation, it does the following:

      +
        +
      1. Adds a tuple (blk, p_addr, 0, ctx, fmp, b_0, b_1, fn_hash[0..3]) to the block stack table.
      2. +
      3. Sends a memory read request to the memory chiplet, using s0 as the memory address. The result hash of callee is placed in the decoder hasher trace at .
      4. +
      5. Adds the tuple (blk, hash of callee, 0, 0) to the block hash table.
      6. +
      7. Initiates a 2-to-1 hash computation in the hash chiplet (as described here) using blk as row address in the auxiliary hashing table and [ZERO; 8] as input values.
      8. +
      9. Performs a stack left shift +
          +
        • Above s16 was pulled from the stack overflow table if present; otherwise set to 0.
        • +
        +
      +

      Similar to CALL, DYNCALL resets the fmp, sets up a new ctx, and sets the fn_hash registers to the callee hash. in_syscall needs to be 0, since calls are not allowed during a syscall.

      END operation

      Before an END operation is executed by the VM, the prover populates registers with the hash of the block which is about to end. The prover also sets values in and registers as follows:

        @@ -4337,18 +4367,23 @@

        refers to a column in the decoder, as depicted. The addresses in this column are set using the address from the hasher chiplet for the corresponding hash initialization / absorption / return. In the case of the value of the address in column in the current row of the decoder is set to equal the value of the address of the row in the hasher chiplet where the previous absorption (or initialization) occurred. is the address of the next row of the decoder, which is set to equal the address in the hasher chiplet where the absorption referred to by the label is happening.

        In the above, represents the address value in the decoder which corresponds to the hasher chiplet address at which the hasher was initialized (or the last absorption took place). As such, corresponds to the hasher chiplet address at which the result is returned.

        -

        -

        In the above, is set to when a control flow operation that signifies the initialization of a control block is being executed on the VM. Otherwise, it is set to . An exception is made for the SYSCALL operation. Although it also signifies the initialization of a control block, it must additionally send a procedure access request to the kernel ROM chiplet via the chiplets bus. Therefore, it is excluded from this flag and its communication with the chiplets bus is handled separately.

        +

        +

        In the above, is set to when a control flow operation that signifies the initialization of a control block is being executed on the VM (only those control blocks that don't do any concurrent requests to the chiplets but). Otherwise, it is set to . An exception is made for the DYN, DYNCALL, and SYSCALL operations, since although they initialize a control block, they also run another concurrent bus request, and so are handled separately.

        In the above, represents the opcode value of the opcode being executed on the virtual machine. It is calculated via a bitwise combination of the op bits. We leverage the opcode value to achieve domain separation when hashing control blocks. This is done by populating the second capacity register of the hasher with the value via the term when initializing the hasher.

        Using the above variables, we define operation values as described below.

        -

        When a control block initializer operation (JOIN, SPLIT, LOOP, DYN, CALL, SYSCALL) is executed, a new hasher is initialized and the contents of are absorbed into the hasher. As mentioned above, the opcode value is populated in the second capacity resister via the term.

        +

        When a control block initializer operation (JOIN, SPLIT, LOOP, CALL) is executed, a new hasher is initialized and the contents of are absorbed into the hasher. As mentioned above, the opcode value is populated in the second capacity register via the term.

        As mentioned previously, the value sent by the SYSCALL operation is defined separately, since in addition to communicating with the hash chiplet it must also send a kernel procedure access request to the kernel ROM chiplet. This value of this kernel procedure request is described by .

        In the above, is the unique operation label of the kernel procedure call operation. The values contain the root hash of the procedure being called, which is the procedure that must be requested from the kernel ROM chiplet.

        The above value sends both the hash initialization request and the kernel procedure access request to the chiplets bus when the SYSCALL operation is executed.

        +

        Similar to SYSCALL, DYN and DYNCALL are handled separately, since in addition to communicating with the hash chiplet they must also issue a memory read operation for the hash of the procedure being called.

        +

        +

        +

        +

        In the above, can be thought of as , but where the values used for the hasher decoder trace registers is all 0's. represents a memory read request from memory address (the top stack element), where the result is placed in the first half of the decoder hasher trace, and where is a label that represents a memory read request.

        When SPAN operation is executed, a new hasher is initialized and contents of are absorbed into the hasher. The number of operation groups to be hashed is padded to a multiple of the rate width () and so the is set to 0:

        When RESPAN operation is executed, contents of (which contain the new operation batch) are absorbed into the hasher:

        @@ -4357,7 +4392,7 @@

        Using the above definitions, we can describe the constraint for computing block hashes as follows:

        -

        +

        We need to add and subtract the sum of the relevant operation flags to ensure that when none of the flags is set to , the above constraint reduces to .

        The degree of this constraint is .

        @@ -4385,13 +4420,15 @@

        When a DYN operation is executed, row is added to the block stack table:

        -

        When a CALL or SYSCALL operation is executed, row is added to the block stack table:

        -

        -

        When END operation is executed, how we construct the row will depend on whether the IS_CALL or IS_SYSCALL values are set (stored in registers and respectively). If they are not set, then row is removed from the block span table (where contains the is_loop flag); otherwise, row .

        -

        +

        When a DYNCALL operation is executed, row is added to the block stack table:

        +

        +

        When a CALL or SYSCALL operation is executed, row is added to the block stack table:

        +

        +

        When END operation is executed, how we construct the row will depend on whether the IS_CALL or IS_SYSCALL values are set (stored in registers and respectively). If they are not set, then row is removed from the block span table (where contains the is_loop flag); otherwise, row .

        +

        Using the above definitions, we can describe the constraint for updating the block stack table as follows:

        -

        +

        We need to add and subtract the sum of the relevant operation flags from each side to ensure that when none of the flags is set to , the above constraint reduces to .

        The degree of this constraint is .

        @@ -4419,16 +4456,13 @@

        When REPEAT operation is executed, hash of loop body is added to the block hash table. We add term to indicate that the child is a body of a loop:

        -

        When the DYN operation is executed, the hash of the dynamic child is added to the block hash table. Since the child is dynamically specified by the top four elements of the stack, the value representing the dyn block's child must be computed based on the stack rather than from the decoder's hasher registers:

        -

        -

        -

        When the CALL or SYSCALL operation is executed, the hash of the callee is added to the block hash table.

        -

        +

        When DYN, DYNCALL, CALL or SYSCALL operation is executed, the hash of the child is added to the block hash table. In all cases, this child is found in the first half of the decoder hasher state.

        +

        When END operation is executed, hash of the completed block is removed from the block hash table. However, we also need to differentiate between removing the first and the second child of a join block. We do this by looking at the next operation. Specifically, if the next operation is neither END nor REPEAT nor HALT, we know that another block is about to be executed, and thus, we have just finished executing the first child of a join block. Thus, if the next operation is neither END nor REPEAT nor HALT we need to set the term for coefficient to as shown below:

        Using the above definitions, we can describe the constraint for updating the block hash table as follows:

        -

        +

        We need to add and subtract the sum of the relevant operation flags from each side to ensure that when none of the flags is set to , the above constraint reduces to .

        The degree of this constraint is .

        @@ -5054,7 +5088,7 @@

        RCOMBBASE101_1001Crypto ops EMIT101_1010System ops PUSH101_1011I/O ops -<unused>101_1100 +DYNCALL101_1100Flow control ops <unused>101_1101 <unused>101_1110 <unused>101_1111 diff --git a/searchindex.js b/searchindex.js index 37eb350b45..816d03956f 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Object.assign(window.search, {"doc_urls":["intro/main.html#introduction","intro/main.html#status-and-features","intro/main.html#feature-highlights","intro/main.html#planned-features","intro/main.html#structure-of-this-document","intro/main.html#license","intro/overview.html#miden-vm-overview","intro/overview.html#writing-programs","intro/overview.html#inputs-and-outputs","intro/overview.html#stack-depth-restrictions","intro/overview.html#nondeterministic-inputs","intro/usage.html#usage","intro/usage.html#cli-interface","intro/usage.html#compiling-miden-vm","intro/usage.html#controlling-parallelism","intro/usage.html#gpu-acceleration","intro/usage.html#simd-acceleration","intro/usage.html#running-miden-vm","intro/usage.html#inputs","intro/usage.html#fibonacci-example","intro/usage.html#capturing-output","intro/usage.html#running-with-debug-instruction-enabled","intro/performance.html#performance","intro/performance.html#single-core-prover-performance","intro/performance.html#multi-core-prover-performance","intro/performance.html#recursive-proofs","tools/main.html#development-tools-and-resources","tools/debugger.html#miden-debugger","tools/repl.html#miden-repl","tools/repl.html#miden-assembly-instruction","tools/repl.html#help","tools/repl.html#program","tools/repl.html#stack","tools/repl.html#mem","tools/repl.html#memaddr","tools/repl.html#use","tools/repl.html#undo","user_docs/main.html#user-documentation","user_docs/assembly/main.html#miden-assembly","user_docs/assembly/main.html#terms-and-notations","user_docs/assembly/main.html#design-goals","user_docs/assembly/code_organization.html#code-organization","user_docs/assembly/code_organization.html#procedures","user_docs/assembly/code_organization.html#modules","user_docs/assembly/code_organization.html#constants","user_docs/assembly/code_organization.html#comments","user_docs/assembly/execution_contexts.html#execution-contexts","user_docs/assembly/execution_contexts.html#procedure-invocation-semantics","user_docs/assembly/execution_contexts.html#kernels","user_docs/assembly/execution_contexts.html#memory-layout","user_docs/assembly/execution_contexts.html#example","user_docs/assembly/flow_control.html#flow-control","user_docs/assembly/flow_control.html#conditional-execution","user_docs/assembly/flow_control.html#counter-controlled-loops","user_docs/assembly/flow_control.html#condition-controlled-loops","user_docs/assembly/flow_control.html#no-op","user_docs/assembly/field_operations.html#field-operations","user_docs/assembly/field_operations.html#assertions-and-tests","user_docs/assembly/field_operations.html#arithmetic-and-boolean-operations","user_docs/assembly/field_operations.html#comparison-operations","user_docs/assembly/field_operations.html#extension-field-operations","user_docs/assembly/u32_operations.html#u32-operations","user_docs/assembly/u32_operations.html#notes-on-undefined-behavior","user_docs/assembly/u32_operations.html#conversions-and-tests","user_docs/assembly/u32_operations.html#arithmetic-operations","user_docs/assembly/u32_operations.html#bitwise-operations","user_docs/assembly/u32_operations.html#comparison-operations","user_docs/assembly/stack_manipulation.html#stack-manipulation","user_docs/assembly/stack_manipulation.html#conditional-manipulation","user_docs/assembly/io_operations.html#input--output-operations","user_docs/assembly/io_operations.html#constant-inputs","user_docs/assembly/io_operations.html#environment-inputs","user_docs/assembly/io_operations.html#nondeterministic-inputs","user_docs/assembly/io_operations.html#random-access-memory","user_docs/assembly/cryptographic_operations.html#cryptographic-operations","user_docs/assembly/cryptographic_operations.html#hashing-and-merkle-trees","user_docs/assembly/events.html#events","user_docs/assembly/events.html#tracing","user_docs/assembly/debugging.html#debugging","user_docs/stdlib/main.html#miden-standard-library","user_docs/stdlib/main.html#terms-and-notations","user_docs/stdlib/main.html#organization-and-usage","user_docs/stdlib/main.html#available-modules","user_docs/stdlib/collections.html#collections","user_docs/stdlib/collections.html#merkle-mountain-range","user_docs/stdlib/collections.html#sparse-merkle-tree","user_docs/stdlib/crypto/dsa.html#digital-signatures","user_docs/stdlib/crypto/dsa.html#rpo-falcon512","user_docs/stdlib/crypto/fri.html#fri-verification-procedures","user_docs/stdlib/crypto/fri.html#fri-extension-2-fold-4","user_docs/stdlib/crypto/hashes.html#cryptographic-hashes","user_docs/stdlib/crypto/hashes.html#blake3","user_docs/stdlib/crypto/hashes.html#sha256","user_docs/stdlib/math/u64.html#unsigned-64-bit-integer-operations","user_docs/stdlib/math/u64.html#arithmetic-operations","user_docs/stdlib/math/u64.html#comparison-operations","user_docs/stdlib/math/u64.html#bitwise-operations","user_docs/stdlib/mem.html#memory-procedures","user_docs/stdlib/sys.html#system-procedures","design/main.html#design","design/main.html#vm-components","design/main.html#vm-execution-trace","design/programs.html#programs-in-miden-vm","design/programs.html#code-blocks","design/programs.html#join-block","design/programs.html#split-block","design/programs.html#loop-block","design/programs.html#dyn-block","design/programs.html#call-block","design/programs.html#syscall-block","design/programs.html#span-block","design/programs.html#program-example","design/programs.html#program-hash-computation","design/decoder/main.html#miden-vm-program-decoder","design/decoder/main.html#program-execution","design/decoder/main.html#decoder-structure","design/decoder/main.html#decoder-trace","design/decoder/main.html#program-block-hashing","design/decoder/main.html#control-flow-tables","design/decoder/main.html#control-flow-operation-semantics","design/decoder/main.html#program-decoding","design/decoder/main.html#join-block-decoding","design/decoder/main.html#split-block-decoding","design/decoder/main.html#loop-block-decoding","design/decoder/main.html#dyn-block-decoding","design/decoder/main.html#span-block-decoding","design/decoder/main.html#program-decoding-example","design/decoder/constraints.html#miden-vm-decoder-air-constraints","design/decoder/constraints.html#general-constraints","design/decoder/constraints.html#block-hash-computation-constraints","design/decoder/constraints.html#chiplets-bus-constraints","design/decoder/constraints.html#block-stack-table-constraints","design/decoder/constraints.html#block-hash-table-constraints","design/decoder/constraints.html#span-block","design/decoder/constraints.html#in-span-column-constraints","design/decoder/constraints.html#block-address-constraints","design/decoder/constraints.html#group-count-constraints","design/decoder/constraints.html#op-group-decoding-constraints","design/decoder/constraints.html#op-index-constraints","design/decoder/constraints.html#op-batch-flags-constraints","design/decoder/constraints.html#op-group-table-constraints","design/stack/main.html#operand-stack","design/stack/main.html#stack-representation","design/stack/main.html#overflow-table","design/stack/main.html#right-shift","design/stack/main.html#left-shift","design/stack/main.html#air-constraints","design/stack/main.html#stack-overflow-flag","design/stack/main.html#stack-depth-constraints","design/stack/main.html#overflow-table-constraints","design/stack/main.html#boundary-constraints","design/stack/op_constraints.html#stack-operation-constraints","design/stack/op_constraints.html#operation-flags","design/stack/op_constraints.html#no-stack-shift-operations","design/stack/op_constraints.html#left-stack-shift-operations","design/stack/op_constraints.html#right-stack-shift-operations","design/stack/op_constraints.html#u32-operations","design/stack/op_constraints.html#high-degree-operations","design/stack/op_constraints.html#very-high-degree-operations","design/stack/op_constraints.html#composite-flags","design/stack/op_constraints.html#shift-right-flag","design/stack/op_constraints.html#shift-left-flag","design/stack/op_constraints.html#control-flow-flag","design/stack/op_constraints.html#immediate-value-flag","design/stack/system_ops.html#system-operations","design/stack/system_ops.html#noop","design/stack/system_ops.html#emit","design/stack/system_ops.html#assert","design/stack/system_ops.html#fmpadd","design/stack/system_ops.html#fmpupdate","design/stack/system_ops.html#clk","design/stack/field_ops.html#field-operations","design/stack/field_ops.html#add","design/stack/field_ops.html#neg","design/stack/field_ops.html#mul","design/stack/field_ops.html#inv","design/stack/field_ops.html#incr","design/stack/field_ops.html#not","design/stack/field_ops.html#and","design/stack/field_ops.html#or","design/stack/field_ops.html#eq","design/stack/field_ops.html#eqz","design/stack/field_ops.html#expacc","design/stack/field_ops.html#ext2mul","design/stack/u32_ops.html#u32-operations","design/stack/u32_ops.html#range-checks","design/stack/u32_ops.html#checking-element-validity","design/stack/u32_ops.html#u32split","design/stack/u32_ops.html#u32assert2","design/stack/u32_ops.html#u32add","design/stack/u32_ops.html#u32add3","design/stack/u32_ops.html#u32sub","design/stack/u32_ops.html#u32mul","design/stack/u32_ops.html#u32madd","design/stack/u32_ops.html#u32div","design/stack/u32_ops.html#u32and","design/stack/u32_ops.html#u32xor","design/stack/stack_ops.html#stack-manipulation","design/stack/stack_ops.html#pad","design/stack/stack_ops.html#drop","design/stack/stack_ops.html#dupn","design/stack/stack_ops.html#swap","design/stack/stack_ops.html#swapw","design/stack/stack_ops.html#swapw2","design/stack/stack_ops.html#swapw3","design/stack/stack_ops.html#swapdw","design/stack/stack_ops.html#movupn","design/stack/stack_ops.html#movdnn","design/stack/stack_ops.html#cswap","design/stack/stack_ops.html#cswapw","design/stack/io_ops.html#input--output-operations","design/stack/io_ops.html#push","design/stack/io_ops.html#sdepth","design/stack/io_ops.html#advpop","design/stack/io_ops.html#advpopw","design/stack/io_ops.html#memory-access-operations","design/stack/io_ops.html#mloadw","design/stack/io_ops.html#mload","design/stack/io_ops.html#mstorew","design/stack/io_ops.html#mstore","design/stack/io_ops.html#mstream","design/stack/crypto_ops.html#cryptographic-operations","design/stack/crypto_ops.html#hperm","design/stack/crypto_ops.html#mpverify","design/stack/crypto_ops.html#mrupdate","design/stack/crypto_ops.html#frie2f4","design/stack/crypto_ops.html#rcombbase","design/range.html#range-checker","design/range.html#8-bit-range-checks","design/range.html#a-better-construction","design/range.html#16-bit-range-checks","design/range.html#miden-approach","design/range.html#requirements","design/range.html#capabilities","design/range.html#execution-trace","design/range.html#execution-trace-constraints","design/range.html#communication-bus","design/chiplets/main.html#chiplets","design/chiplets/main.html#chiplets-module-trace","design/chiplets/main.html#chiplets-order","design/chiplets/main.html#additional-requirements-for-stacking-execution-traces","design/chiplets/main.html#operation-labels","design/chiplets/main.html#chiplets-module-constraints","design/chiplets/main.html#chiplet-constraints","design/chiplets/main.html#chiplet-selector-constraints","design/chiplets/main.html#chiplets-bus","design/chiplets/main.html#chiplets-bus-constraints","design/chiplets/main.html#chiplets-virtual-table","design/chiplets/main.html#chiplets-virtual-table-constraints","design/chiplets/hasher.html#hash-chiplet","design/chiplets/hasher.html#chiplet-trace","design/chiplets/hasher.html#instruction-flags","design/chiplets/hasher.html#computation-examples","design/chiplets/hasher.html#single-permutation","design/chiplets/hasher.html#simple-2-to-1-hash","design/chiplets/hasher.html#linear-hash-of-n-elements","design/chiplets/hasher.html#verify-merkle-path","design/chiplets/hasher.html#update-merkle-root","design/chiplets/hasher.html#air-constraints","design/chiplets/hasher.html#selector-columns-constraints","design/chiplets/hasher.html#node-index-constraints","design/chiplets/hasher.html#hasher-state-constraints","design/chiplets/hasher.html#multiset-check-constraints","design/chiplets/bitwise.html#bitwise-chiplet","design/chiplets/bitwise.html#example","design/chiplets/bitwise.html#constraints","design/chiplets/bitwise.html#selectors","design/chiplets/bitwise.html#input-decomposition","design/chiplets/bitwise.html#output-aggregation","design/chiplets/bitwise.html#chiplets-bus-constraints","design/chiplets/memory.html#memory-chiplet","design/chiplets/memory.html#alternative-designs","design/chiplets/memory.html#read-write-memory","design/chiplets/memory.html#non-contiguous-memory","design/chiplets/memory.html#context-separation","design/chiplets/memory.html#miden-approach","design/chiplets/memory.html#air-constraints","design/chiplets/kernel_rom.html#kernel-rom-chiplet","design/chiplets/kernel_rom.html#kernel-rom-trace","design/chiplets/kernel_rom.html#constraints","design/chiplets/kernel_rom.html#chiplets-bus-constraints","design/chiplets/kernel_rom.html#kernel-procedure-table-constraints","design/lookups/main.html#lookup-arguments-in-miden-vm","design/lookups/main.html#virtual-tables-in-miden-vm","design/lookups/main.html#communication-buses-in-miden-vm","design/lookups/main.html#length-of-auxiliary-columns-for-lookup-arguments","design/lookups/main.html#cost-of-auxiliary-columns-for-lookup-arguments","design/lookups/multiset.html#multiset-checks","design/lookups/multiset.html#running-product-columns","design/lookups/multiset.html#virtual-tables","design/lookups/multiset.html#computing-a-virtual-tables-trace-column","design/lookups/multiset.html#virtual-tables-in-miden-vm","design/lookups/multiset.html#communication-buses-via-multiset-checks","design/lookups/multiset.html#communication-bus-constraints","design/lookups/multiset.html#communication-buses-in-miden-vm","design/lookups/logup.html#logup-multivariate-lookups-with-logarithmic-derivatives","design/lookups/logup.html#usage-in-miden-vm","design/lookups/logup.html#constraints","design/lookups/logup.html#extending-the-construction-to-multiple-components","design/lookups/logup.html#extending-the-construction-with-flags","background.html#background-material"],"index":{"documentStore":{"docInfo":{"0":{"body":34,"breadcrumbs":2,"title":1},"1":{"body":53,"breadcrumbs":3,"title":2},"10":{"body":115,"breadcrumbs":4,"title":2},"100":{"body":151,"breadcrumbs":3,"title":2},"101":{"body":103,"breadcrumbs":4,"title":3},"102":{"body":48,"breadcrumbs":5,"title":3},"103":{"body":0,"breadcrumbs":4,"title":2},"104":{"body":27,"breadcrumbs":4,"title":2},"105":{"body":41,"breadcrumbs":4,"title":2},"106":{"body":67,"breadcrumbs":4,"title":2},"107":{"body":54,"breadcrumbs":4,"title":2},"108":{"body":82,"breadcrumbs":4,"title":2},"109":{"body":85,"breadcrumbs":4,"title":2},"11":{"body":72,"breadcrumbs":3,"title":1},"110":{"body":196,"breadcrumbs":4,"title":2},"111":{"body":200,"breadcrumbs":4,"title":2},"112":{"body":239,"breadcrumbs":5,"title":3},"113":{"body":131,"breadcrumbs":7,"title":4},"114":{"body":215,"breadcrumbs":5,"title":2},"115":{"body":45,"breadcrumbs":5,"title":2},"116":{"body":183,"breadcrumbs":5,"title":2},"117":{"body":298,"breadcrumbs":6,"title":3},"118":{"body":603,"breadcrumbs":6,"title":3},"119":{"body":1275,"breadcrumbs":7,"title":4},"12":{"body":0,"breadcrumbs":4,"title":2},"120":{"body":91,"breadcrumbs":5,"title":2},"121":{"body":59,"breadcrumbs":6,"title":3},"122":{"body":54,"breadcrumbs":6,"title":3},"123":{"body":227,"breadcrumbs":6,"title":3},"124":{"body":60,"breadcrumbs":6,"title":3},"125":{"body":1067,"breadcrumbs":6,"title":3},"126":{"body":292,"breadcrumbs":6,"title":3},"127":{"body":312,"breadcrumbs":10,"title":5},"128":{"body":147,"breadcrumbs":7,"title":2},"129":{"body":153,"breadcrumbs":9,"title":4},"13":{"body":38,"breadcrumbs":5,"title":3},"130":{"body":448,"breadcrumbs":8,"title":3},"131":{"body":376,"breadcrumbs":9,"title":4},"132":{"body":452,"breadcrumbs":9,"title":4},"133":{"body":26,"breadcrumbs":7,"title":2},"134":{"body":135,"breadcrumbs":8,"title":3},"135":{"body":70,"breadcrumbs":8,"title":3},"136":{"body":189,"breadcrumbs":8,"title":3},"137":{"body":226,"breadcrumbs":9,"title":4},"138":{"body":133,"breadcrumbs":8,"title":3},"139":{"body":150,"breadcrumbs":9,"title":4},"14":{"body":18,"breadcrumbs":4,"title":2},"140":{"body":362,"breadcrumbs":9,"title":4},"141":{"body":120,"breadcrumbs":5,"title":2},"142":{"body":81,"breadcrumbs":5,"title":2},"143":{"body":173,"breadcrumbs":5,"title":2},"144":{"body":176,"breadcrumbs":5,"title":2},"145":{"body":115,"breadcrumbs":5,"title":2},"146":{"body":59,"breadcrumbs":5,"title":2},"147":{"body":58,"breadcrumbs":6,"title":3},"148":{"body":51,"breadcrumbs":6,"title":3},"149":{"body":132,"breadcrumbs":6,"title":3},"15":{"body":48,"breadcrumbs":4,"title":2},"150":{"body":27,"breadcrumbs":5,"title":2},"151":{"body":181,"breadcrumbs":8,"title":3},"152":{"body":312,"breadcrumbs":7,"title":2},"153":{"body":216,"breadcrumbs":8,"title":3},"154":{"body":129,"breadcrumbs":9,"title":4},"155":{"body":133,"breadcrumbs":9,"title":4},"156":{"body":167,"breadcrumbs":7,"title":2},"157":{"body":168,"breadcrumbs":8,"title":3},"158":{"body":111,"breadcrumbs":9,"title":4},"159":{"body":13,"breadcrumbs":7,"title":2},"16":{"body":61,"breadcrumbs":4,"title":2},"160":{"body":41,"breadcrumbs":8,"title":3},"161":{"body":93,"breadcrumbs":8,"title":3},"162":{"body":37,"breadcrumbs":8,"title":3},"163":{"body":28,"breadcrumbs":8,"title":3},"164":{"body":8,"breadcrumbs":7,"title":2},"165":{"body":34,"breadcrumbs":6,"title":1},"166":{"body":58,"breadcrumbs":6,"title":1},"167":{"body":33,"breadcrumbs":6,"title":1},"168":{"body":35,"breadcrumbs":6,"title":1},"169":{"body":31,"breadcrumbs":6,"title":1},"17":{"body":176,"breadcrumbs":5,"title":3},"170":{"body":30,"breadcrumbs":6,"title":1},"171":{"body":14,"breadcrumbs":7,"title":2},"172":{"body":30,"breadcrumbs":6,"title":1},"173":{"body":28,"breadcrumbs":6,"title":1},"174":{"body":30,"breadcrumbs":6,"title":1},"175":{"body":34,"breadcrumbs":6,"title":1},"176":{"body":28,"breadcrumbs":6,"title":1},"177":{"body":41,"breadcrumbs":5,"title":0},"178":{"body":46,"breadcrumbs":5,"title":0},"179":{"body":46,"breadcrumbs":5,"title":0},"18":{"body":204,"breadcrumbs":3,"title":1},"180":{"body":56,"breadcrumbs":6,"title":1},"181":{"body":54,"breadcrumbs":6,"title":1},"182":{"body":85,"breadcrumbs":6,"title":1},"183":{"body":71,"breadcrumbs":6,"title":1},"184":{"body":17,"breadcrumbs":7,"title":2},"185":{"body":111,"breadcrumbs":7,"title":2},"186":{"body":113,"breadcrumbs":8,"title":3},"187":{"body":95,"breadcrumbs":6,"title":1},"188":{"body":76,"breadcrumbs":6,"title":1},"189":{"body":83,"breadcrumbs":6,"title":1},"19":{"body":23,"breadcrumbs":4,"title":2},"190":{"body":85,"breadcrumbs":6,"title":1},"191":{"body":83,"breadcrumbs":6,"title":1},"192":{"body":98,"breadcrumbs":6,"title":1},"193":{"body":114,"breadcrumbs":6,"title":1},"194":{"body":70,"breadcrumbs":6,"title":1},"195":{"body":74,"breadcrumbs":6,"title":1},"196":{"body":77,"breadcrumbs":6,"title":1},"197":{"body":9,"breadcrumbs":7,"title":2},"198":{"body":28,"breadcrumbs":6,"title":1},"199":{"body":35,"breadcrumbs":6,"title":1},"2":{"body":250,"breadcrumbs":3,"title":2},"20":{"body":40,"breadcrumbs":4,"title":2},"200":{"body":62,"breadcrumbs":6,"title":1},"201":{"body":30,"breadcrumbs":6,"title":1},"202":{"body":33,"breadcrumbs":6,"title":1},"203":{"body":36,"breadcrumbs":6,"title":1},"204":{"body":36,"breadcrumbs":6,"title":1},"205":{"body":33,"breadcrumbs":6,"title":1},"206":{"body":71,"breadcrumbs":6,"title":1},"207":{"body":70,"breadcrumbs":6,"title":1},"208":{"body":60,"breadcrumbs":6,"title":1},"209":{"body":62,"breadcrumbs":6,"title":1},"21":{"body":23,"breadcrumbs":6,"title":4},"210":{"body":24,"breadcrumbs":9,"title":3},"211":{"body":38,"breadcrumbs":7,"title":1},"212":{"body":37,"breadcrumbs":7,"title":1},"213":{"body":38,"breadcrumbs":7,"title":1},"214":{"body":49,"breadcrumbs":7,"title":1},"215":{"body":73,"breadcrumbs":9,"title":3},"216":{"body":90,"breadcrumbs":7,"title":1},"217":{"body":95,"breadcrumbs":7,"title":1},"218":{"body":90,"breadcrumbs":7,"title":1},"219":{"body":102,"breadcrumbs":7,"title":1},"22":{"body":124,"breadcrumbs":3,"title":1},"220":{"body":100,"breadcrumbs":7,"title":1},"221":{"body":54,"breadcrumbs":7,"title":2},"222":{"body":118,"breadcrumbs":6,"title":1},"223":{"body":169,"breadcrumbs":6,"title":1},"224":{"body":204,"breadcrumbs":6,"title":1},"225":{"body":281,"breadcrumbs":6,"title":1},"226":{"body":248,"breadcrumbs":6,"title":1},"227":{"body":65,"breadcrumbs":5,"title":2},"228":{"body":213,"breadcrumbs":7,"title":4},"229":{"body":86,"breadcrumbs":5,"title":2},"23":{"body":207,"breadcrumbs":6,"title":4},"230":{"body":130,"breadcrumbs":7,"title":4},"231":{"body":7,"breadcrumbs":5,"title":2},"232":{"body":34,"breadcrumbs":4,"title":1},"233":{"body":32,"breadcrumbs":4,"title":1},"234":{"body":64,"breadcrumbs":5,"title":2},"235":{"body":35,"breadcrumbs":6,"title":3},"236":{"body":174,"breadcrumbs":5,"title":2},"237":{"body":98,"breadcrumbs":3,"title":1},"238":{"body":121,"breadcrumbs":5,"title":3},"239":{"body":101,"breadcrumbs":4,"title":2},"24":{"body":116,"breadcrumbs":6,"title":4},"240":{"body":137,"breadcrumbs":7,"title":5},"241":{"body":121,"breadcrumbs":4,"title":2},"242":{"body":0,"breadcrumbs":5,"title":3},"243":{"body":75,"breadcrumbs":4,"title":2},"244":{"body":116,"breadcrumbs":5,"title":3},"245":{"body":123,"breadcrumbs":4,"title":2},"246":{"body":52,"breadcrumbs":5,"title":3},"247":{"body":65,"breadcrumbs":5,"title":3},"248":{"body":86,"breadcrumbs":6,"title":4},"249":{"body":313,"breadcrumbs":6,"title":2},"25":{"body":157,"breadcrumbs":4,"title":2},"250":{"body":331,"breadcrumbs":6,"title":2},"251":{"body":266,"breadcrumbs":6,"title":2},"252":{"body":0,"breadcrumbs":6,"title":2},"253":{"body":73,"breadcrumbs":6,"title":2},"254":{"body":84,"breadcrumbs":8,"title":4},"255":{"body":143,"breadcrumbs":8,"title":4},"256":{"body":197,"breadcrumbs":7,"title":3},"257":{"body":215,"breadcrumbs":7,"title":3},"258":{"body":30,"breadcrumbs":6,"title":2},"259":{"body":98,"breadcrumbs":7,"title":3},"26":{"body":59,"breadcrumbs":5,"title":3},"260":{"body":148,"breadcrumbs":7,"title":3},"261":{"body":105,"breadcrumbs":7,"title":3},"262":{"body":559,"breadcrumbs":7,"title":3},"263":{"body":227,"breadcrumbs":6,"title":2},"264":{"body":180,"breadcrumbs":5,"title":1},"265":{"body":24,"breadcrumbs":5,"title":1},"266":{"body":24,"breadcrumbs":5,"title":1},"267":{"body":117,"breadcrumbs":6,"title":2},"268":{"body":86,"breadcrumbs":6,"title":2},"269":{"body":114,"breadcrumbs":7,"title":3},"27":{"body":212,"breadcrumbs":5,"title":2},"270":{"body":66,"breadcrumbs":6,"title":2},"271":{"body":139,"breadcrumbs":6,"title":2},"272":{"body":228,"breadcrumbs":7,"title":3},"273":{"body":147,"breadcrumbs":7,"title":3},"274":{"body":230,"breadcrumbs":6,"title":2},"275":{"body":418,"breadcrumbs":6,"title":2},"276":{"body":253,"breadcrumbs":6,"title":2},"277":{"body":38,"breadcrumbs":8,"title":3},"278":{"body":54,"breadcrumbs":8,"title":3},"279":{"body":103,"breadcrumbs":6,"title":1},"28":{"body":87,"breadcrumbs":5,"title":2},"280":{"body":85,"breadcrumbs":8,"title":3},"281":{"body":101,"breadcrumbs":9,"title":4},"282":{"body":144,"breadcrumbs":7,"title":4},"283":{"body":44,"breadcrumbs":7,"title":4},"284":{"body":117,"breadcrumbs":7,"title":4},"285":{"body":53,"breadcrumbs":8,"title":5},"286":{"body":42,"breadcrumbs":8,"title":5},"287":{"body":17,"breadcrumbs":7,"title":2},"288":{"body":72,"breadcrumbs":8,"title":3},"289":{"body":105,"breadcrumbs":7,"title":2},"29":{"body":55,"breadcrumbs":6,"title":3},"290":{"body":58,"breadcrumbs":10,"title":5},"291":{"body":40,"breadcrumbs":9,"title":4},"292":{"body":111,"breadcrumbs":10,"title":5},"293":{"body":105,"breadcrumbs":8,"title":3},"294":{"body":35,"breadcrumbs":9,"title":4},"295":{"body":113,"breadcrumbs":9,"title":5},"296":{"body":28,"breadcrumbs":7,"title":3},"297":{"body":83,"breadcrumbs":5,"title":1},"298":{"body":40,"breadcrumbs":8,"title":4},"299":{"body":45,"breadcrumbs":7,"title":3},"3":{"body":69,"breadcrumbs":3,"title":2},"30":{"body":8,"breadcrumbs":4,"title":1},"300":{"body":117,"breadcrumbs":4,"title":2},"31":{"body":25,"breadcrumbs":4,"title":1},"32":{"body":57,"breadcrumbs":4,"title":1},"33":{"body":48,"breadcrumbs":4,"title":1},"34":{"body":24,"breadcrumbs":4,"title":1},"35":{"body":42,"breadcrumbs":4,"title":1},"36":{"body":110,"breadcrumbs":4,"title":1},"37":{"body":57,"breadcrumbs":4,"title":2},"38":{"body":165,"breadcrumbs":6,"title":2},"39":{"body":79,"breadcrumbs":6,"title":2},"4":{"body":78,"breadcrumbs":3,"title":2},"40":{"body":160,"breadcrumbs":6,"title":2},"41":{"body":53,"breadcrumbs":8,"title":2},"42":{"body":396,"breadcrumbs":7,"title":1},"43":{"body":324,"breadcrumbs":7,"title":1},"44":{"body":110,"breadcrumbs":7,"title":1},"45":{"body":37,"breadcrumbs":7,"title":1},"46":{"body":96,"breadcrumbs":8,"title":2},"47":{"body":270,"breadcrumbs":9,"title":3},"48":{"body":90,"breadcrumbs":7,"title":1},"49":{"body":138,"breadcrumbs":8,"title":2},"5":{"body":4,"breadcrumbs":2,"title":1},"50":{"body":274,"breadcrumbs":7,"title":1},"51":{"body":26,"breadcrumbs":8,"title":2},"52":{"body":256,"breadcrumbs":8,"title":2},"53":{"body":50,"breadcrumbs":9,"title":3},"54":{"body":91,"breadcrumbs":9,"title":3},"55":{"body":55,"breadcrumbs":7,"title":1},"56":{"body":53,"breadcrumbs":8,"title":2},"57":{"body":61,"breadcrumbs":8,"title":2},"58":{"body":151,"breadcrumbs":9,"title":3},"59":{"body":86,"breadcrumbs":8,"title":2},"6":{"body":174,"breadcrumbs":5,"title":3},"60":{"body":73,"breadcrumbs":9,"title":3},"61":{"body":54,"breadcrumbs":8,"title":2},"62":{"body":246,"breadcrumbs":9,"title":3},"63":{"body":72,"breadcrumbs":8,"title":2},"64":{"body":177,"breadcrumbs":8,"title":2},"65":{"body":196,"breadcrumbs":8,"title":2},"66":{"body":82,"breadcrumbs":8,"title":2},"67":{"body":235,"breadcrumbs":8,"title":2},"68":{"body":56,"breadcrumbs":8,"title":2},"69":{"body":120,"breadcrumbs":10,"title":3},"7":{"body":56,"breadcrumbs":4,"title":2},"70":{"body":93,"breadcrumbs":9,"title":2},"71":{"body":77,"breadcrumbs":9,"title":2},"72":{"body":427,"breadcrumbs":9,"title":2},"73":{"body":346,"breadcrumbs":10,"title":3},"74":{"body":13,"breadcrumbs":8,"title":2},"75":{"body":266,"breadcrumbs":9,"title":3},"76":{"body":78,"breadcrumbs":6,"title":1},"77":{"body":40,"breadcrumbs":6,"title":1},"78":{"body":145,"breadcrumbs":6,"title":1},"79":{"body":59,"breadcrumbs":8,"title":3},"8":{"body":132,"breadcrumbs":4,"title":2},"80":{"body":79,"breadcrumbs":7,"title":2},"81":{"body":47,"breadcrumbs":7,"title":2},"82":{"body":87,"breadcrumbs":7,"title":2},"83":{"body":25,"breadcrumbs":7,"title":1},"84":{"body":144,"breadcrumbs":9,"title":3},"85":{"body":159,"breadcrumbs":9,"title":3},"86":{"body":19,"breadcrumbs":8,"title":2},"87":{"body":114,"breadcrumbs":8,"title":2},"88":{"body":7,"breadcrumbs":9,"title":3},"89":{"body":210,"breadcrumbs":11,"title":5},"9":{"body":44,"breadcrumbs":5,"title":3},"90":{"body":9,"breadcrumbs":8,"title":2},"91":{"body":83,"breadcrumbs":7,"title":1},"92":{"body":83,"breadcrumbs":7,"title":1},"93":{"body":108,"breadcrumbs":11,"title":5},"94":{"body":320,"breadcrumbs":8,"title":2},"95":{"body":320,"breadcrumbs":8,"title":2},"96":{"body":418,"breadcrumbs":8,"title":2},"97":{"body":124,"breadcrumbs":8,"title":2},"98":{"body":58,"breadcrumbs":8,"title":2},"99":{"body":187,"breadcrumbs":2,"title":1}},"docs":{"0":{"body":"Miden VM is a zero-knowledge virtual machine written in Rust. For any program executed on Miden VM, a STARK-based proof of execution is automatically generated. This proof can then be used by anyone to verify that the program was executed correctly without the need for re-executing the program or even knowing the contents of the program.","breadcrumbs":"Introduction » Introduction","id":"0","title":"Introduction"},"1":{"body":"Miden VM is currently on release v0.10. In this release, most of the core features of the VM have been stabilized, and most of the STARK proof generation has been implemented. While we expect to keep making changes to the VM internals, the external interfaces should remain relatively stable, and we will do our best to minimize the amount of breaking changes going forward. At this point, Miden VM is good enough for experimentation, and even for real-world applications, but it is not yet ready for production use. The codebase has not been audited and contains known and unknown bugs and security flaws.","breadcrumbs":"Introduction » Status and features","id":"1","title":"Status and features"},"10":{"body":"The advice provider component is responsible for supplying nondeterministic inputs to the VM. These inputs only need to be known to the prover (i.e., they do not need to be shared with the verifier). The advice provider consists of three components: Advice stack which is a one-dimensional array of field elements. Being a stack, the VM can either push new elements onto the advice stack, or pop the elements from its top. Advice map which is a key-value map where keys are words and values are vectors of field elements. The VM can copy values from the advice map onto the advice stack as well as insert new values into the advice map (e.g., from a region of memory). Merkle store which contain structured data reducible to Merkle paths. Some examples of such structures are: Merkle tree, Sparse Merkle Tree, and a collection of Merkle paths. The VM can request Merkle paths from the Merkle store, as well as mutate it by updating or merging nodes contained in the store. The prover initializes the advice provider prior to executing a program, and from that point on the advice provider is manipulated solely by executing operations on the VM.","breadcrumbs":"Introduction » Overview » Nondeterministic inputs","id":"10","title":"Nondeterministic inputs"},"100":{"body":"Miden VM consists of several interconnected components, each providing a specific set of functionality. These components are: System , which is responsible for managing system data, including the current VM cycle (clk), the free memory pointer (fmp) used for specifying the region of memory available to procedure locals, and the current and parent execution contexts. Program decoder , which is responsible for computing a commitment to the executing program and converting the program into a sequence of operations executed by the VM. Operand stack , which is a push-down stack which provides operands for all operations executed by the VM. Range checker , which is responsible for providing 16-bit range checks needed by other components. Chiplets , which is a set of specialized circuits used to accelerate commonly-used complex computations. Currently, the VM relies on 4 chiplets: Hash chiplet, used to compute Rescue Prime Optimized hashes both for sequential hashing and for Merkle tree hashing. Bitwise chiplet, used to compute bitwise operations (e.g., AND, XOR) over 32-bit integers. Memory chiplet, used to support random-access memory in the VM. Kernel ROM chiplet, used to enable calling predefined kernel procedures which are provided before execution begins. The above components are connected via buses , which are implemented using lookup arguments . We also use multiset check lookups internally within components to describe virtual tables .","breadcrumbs":"Design » VM components","id":"100","title":"VM components"},"101":{"body":"The execution trace of Miden VM consists of 71 main trace columns, 2 buses, and 5 virtual tables, as shown in the diagram below. vm_trace.png As can be seen from the above, the system, decoder, stack, and range checker components use dedicated sets of columns, while all chiplets share the same 17 columns. To differentiate between chiplets, we use a set of binary selector columns, a combination of which uniquely identifies each chiplet. The system component does not yet have a dedicated documentation section, since the design is likely to change. However, the following two columns are not expected to change: clk which is used to keep track of the current VM cycle. Values in this column start out at 0 and are incremented by 1 with each cycle. fmp which contains the value of the free memory pointer used for specifying the region of memory available to procedure locals. AIR constraints for the fmp column are described in system operations section. For the clk column, the constraints are straightforward: clk′−(clk+1)=0 | degree=1","breadcrumbs":"Design » VM execution trace","id":"101","title":"VM execution trace"},"102":{"body":"Miden VM consumes programs in a form of a Merkelized Abstract Syntax Tree (MAST). This tree is a binary tree where each node is a code block . The VM starts execution at the root of the tree, and attempts to recursively execute each required block according to its semantics. If the execution of a code block fails, the VM halts at that point and no further blocks are executed. A set of currently available blocks and their execution semantics are described below.","breadcrumbs":"Design » Programs » Programs in Miden VM","id":"102","title":"Programs in Miden VM"},"103":{"body":"","breadcrumbs":"Design » Programs » Code blocks","id":"103","title":"Code blocks"},"104":{"body":"A join block is used to describe sequential execution. When the VM encounters a join block, it executes its left child first, and then executes its right child. join_block A join block must always have two children, and thus, cannot be a leaf node in the tree.","breadcrumbs":"Design » Programs » Join block","id":"104","title":"Join block"},"105":{"body":"A split block is used to describe conditional execution. When the VM encounters a split block, it checks the top of the stack. If the top of the stack is 1, it executes the left child, if the top of the stack is 0, it executes the right child. If the top of the stack is neither 0 nor 1, the execution fails. split_block A split block must always have two children, and thus, cannot be a leaf node in the tree.","breadcrumbs":"Design » Programs » Split block","id":"105","title":"Split block"},"106":{"body":"A loop block is used to describe condition-based iterative execution. When the VM encounters a loop block, it checks the top of the stack. If the top of the stack is 1, it executes the loop body, if the top of the stack is 0, the block is not executed. If the top of the stack is neither 0 nor 1, the execution fails. After the body of the loop is executed, the VM checks the top of the stack again. If the top of the stack is 1, the body is executed again, if the top of the stack is 0, the loop is exited. If the top of the stack is neither 0 nor 1, the execution fails. loop_block A loop block must always have one child, and thus, cannot be a leaf node in the tree.","breadcrumbs":"Design » Programs » Loop block","id":"106","title":"Loop block"},"107":{"body":"A dyn block is used to describe a node whose target is specified dynamically via the stack. When the VM encounters a dyn block, it executes a program which hashes to the target specified by the top of the stack. Thus, it has a dynamic target rather than a hardcoded target. In order to execute a dyn block, the VM must be aware of a program with the hash value that is specified by the top of the stack. Otherwise, the execution fails. dyn_block A dyn block must always have one (dynamically-specified) child. Thus, it cannot be a leaf node in the tree.","breadcrumbs":"Design » Programs » Dyn block","id":"107","title":"Dyn block"},"108":{"body":"A call block is used to describe a function call which is executed in a user context . When the VM encounters a call block, it creates a new user context, then executes a program which hashes to the target specified by the call block in the new context. Thus, in order to execute a call block, the VM must be aware of a program with the specified hash. Otherwise, the execution fails. At the end of the call block, execution returns to the previous context. When executing a call block, the VM does the following: Checks if a syscall is already being executed and fails if so. Sets the depth of the stack to 16. Upon return, checks that the depth of the stack is 16. If so, the original stack depth is restored. Otherwise, an error occurs. call_block A call block does not have any children. Thus, it must be leaf node in the tree.","breadcrumbs":"Design » Programs » Call block","id":"108","title":"Call block"},"109":{"body":"A syscall block is used to describe a function call which is executed in the root context . When the VM encounters a syscall block, it returns to the root context, then executes a program which hashes to the target specified by the syscall block. Thus, in order to execute a syscall block, the VM must be aware of a program with the specified hash, and that program must belong to the kernel against which the code is compiled. Otherwise, the execution fails. At the end of the syscall block, execution returns to the previous context. When executing a syscall block, the VM does the following: Checks if a syscall is already being executed and fails if so. Sets the depth of the stack to 16. Upon return, checks that the depth of the stack is 16. If so, the original stack depth is restored. Otherwise, an error occurs. syscall_block A syscall block does not have any children. Thus, it must be leaf node in the tree.","breadcrumbs":"Design » Programs » Syscall block","id":"109","title":"Syscall block"},"11":{"body":"Before you can use Miden VM, you'll need to make sure you have Rust installed . Miden VM v0.10 requires Rust version 1.80 or later. Miden VM consists of several crates, each of which exposes a small set of functionality. The most notable of these crates are: miden-processor , which can be used to execute Miden VM programs. miden-prover , which can be used to execute Miden VM programs and generate proofs of their execution. miden-verifier , which can be used to verify proofs of program execution generated by Miden VM prover. The above functionality is also exposed via the single miden-vm crate, which also provides a CLI interface for interacting with Miden VM.","breadcrumbs":"Introduction » Usage » Usage","id":"11","title":"Usage"},"110":{"body":"A span block is used to describe a linear sequence of operations. When the VM encounters a span block, it breaks the sequence of operations into batches and groups according to the following rules: A group is represented by a single field element. Thus, assuming a single operation can be encoded using 7 bits, and assuming we are using a 64-bit field, a single group may encode up to 9 operations or a single immediate value. A batch is a set of groups which can be absorbed by a hash function used by the VM in a single permutation. For example, assuming the hash function can absorb up to 8 field elements in a single permutation, a single batch may contain up to 8 groups. There is no limit on the number of batches contained within a single span. Thus, for example, executing 8 pushes in a row will result in two operation batches as illustrated in the picture below: span_block_creation The first batch will contain 8 groups, with the first group containing 7 PUSH opcodes and 1 NOOP, and the remaining 7 groups containing immediate values for each of the push operations. The reason for the NOOP is explained later in this section. The second batch will contain 2 groups, with the first group containing 1 PUSH opcode and 1 NOOP, and the second group containing the immediate value for the last push operation. If a sequence of operations does not have any operations which carry immediate values, up to 72 operations can fit into a single batch. From the user's perspective, all operations are executed in order, however, the VM may insert occasional NOOPs to ensure proper alignment of all operations in the sequence. Currently, the alignment requirements are as follows: An operation carrying an immediate value cannot be the last operation in a group. Thus, for example, if a PUSH operation is the last operation in a group, the VM will insert a NOOP after it. A span block does not have any children, and thus, must be leaf node in the tree.","breadcrumbs":"Design » Programs » Span block","id":"110","title":"Span block"},"111":{"body":"Consider the following program, where a0​,...,ai​, b0​,...,bj​ etc. represent individual operations: a_0, ..., a_i\nif.true b_0, ..., b_j\nelse c_0, ..., c_k while.true d_0, ..., d_n end e_0, ..., e_m\nend\nf_0, ..., f_l A MAST for this program would look as follows: mast_of_program Execution of this program would proceed as follows: The VM will start execution at the root of the program which is block B5​. Since, B5​ is a join block , the VM will attempt to execute block B4​ first, and only after that execute block f. Block B4​ is also a join block , and thus, the VM will execute block a by executing operations a0​,...,ai​ in sequence, and then execute block B3​. Block B3​ is a split block , and thus, the VM will pop the value off the top of the stack. If the popped value is 1, operations from block b will be executed in sequence. If the popped value is 0, then the VM will attempt to execute block B2​. B2​ is a join block , thus, the VM will try to execute block B1​ first, and then execute operations from block e. Block B1​ is also a join_block , and thus, the VM will first execute all operations in block c, and then will attempt to execute block B0​. Block B0​ is a loop block, thus, the VM will pop the value off the top of the stack. If the pooped value is 1, the VM will execute the body of the loop defined by block d. If the popped value is 0, the VM will not execute block d and instead will move up the tree executing first block e, then f. If the VM does enter the loop, then after operation dn​ is executed, the VM will pop the value off the top of the stack again. If the popped value is 1, the VM will execute block d again, and again until the top of the stack becomes 0. Once the top of the stack becomes 0, the VM will exit the loop and will move up the tree executing first block e, then f.","breadcrumbs":"Design » Programs » Program example","id":"111","title":"Program example"},"112":{"body":"Every Miden VM program can be reduced to a unique hash value. Specifically, it is infeasible to find two Miden VM programs with distinct semantics which hash to the same value. Padding a program with NOOPs does not change a program's execution semantics, and thus, programs which differ only in the number and/or placement of NOOPs may hash to the same value, although in most cases padding with NOOP should not affect program hash. To prevent program hash collisions we implement domain separation across the variants of control blocks. We define the domain value to be the opcode of the operation that initializes the control block. Below we denote hash to be an arithmetization-friendly hash function with 4-element output and capable of absorbing 8 elements in a single permutation. The hash domain is specified as the subscript of the hash function and its value is used to populate the second capacity register upon initialization of control block hashing - hashdomain​(a,b). The hash of a join block is computed as hashjoin​(a,b), where a and b are hashes of the code block being joined. The hash of a split block is computed as hashsplit​(a,b), where a is a hash of a code block corresponding to the true branch of execution, and b is a hash of a code block corresponding to the false branch of execution. The hash of a loop block is computed as hashloop​(a,0), where a is a hash of a code block corresponding to the loop body. The hash of a dyn block is set to a constant, so it is the same for all dyn blocks. It does not depend on the hash of the dynamic child. This constant is computed as the RPO hash of two empty words ([ZERO, ZERO, ZERO, ZERO]) using a domain value of DYN_DOMAIN, where DYN_DOMAIN is the op code of the Dyn operation. The hash of a call block is computed as hashcall​(a,0), where a is a hash of a program of which the VM is aware. The hash of a syscall block is computed as hashsyscall​(a,0), where a is a hash of a program belonging to the kernel against which the code was compiled. The hash of a span block is computed as hash(a1​,...,ak​), where ai​ is the ith batch of operations in the span block. Each batch of operations is defined as containing 8 field elements, and thus, hashing a k-batch span block requires k absorption steps. In cases when the number of operations is insufficient to fill the last batch entirely, NOOPs are appended to the end of the last batch to ensure that the number of operations in the batch is always equal to 8.","breadcrumbs":"Design » Programs » Program hash computation","id":"112","title":"Program hash computation"},"113":{"body":"Miden VM program decoder is responsible for ensuring that a program with a given MAST root is executed by the VM. As the VM executes a program, the decoder does the following: Decodes a sequence of field elements supplied by the prover into individual operation codes (or opcodes for short). Organizes the sequence of field elements into code blocks, and computes the hash of the program according to the methodology described here . At the end of program execution, the decoder outputs the computed program hash. This hash binds the sequence of opcodes executed by the VM to a program the prover claims to have executed. The verifier uses this hash during the STARK proof verification process to verify that the proof attests to a correct execution of a specific program (i.e., the prover didn't claim to execute program A while in fact executing a different program B). The sections below describe how Miden VM decoder works. Throughout these sections we make the following assumptions: An opcode requires 7 bits to represent. An immediate value requires one full field element to represent. A NOOP operation has a numeric value of 0, and thus, can be encoded as seven zeros. Executing a NOOP operation does not change the state of the VM, but it does advance operation counter, and may affect program hash.","breadcrumbs":"Design » Program decoder » Miden VM Program decoder","id":"113","title":"Miden VM Program decoder"},"114":{"body":"Miden VM programs consist of a set of code blocks organized into a binary tree. The leaves of the tree contain linear sequences of instructions, and control flow is defined by the internal nodes of the tree. Managing control flow in the VM is accomplished by executing control flow operations listed in the table below. Each of these operations require exactly one VM cycle to execute. Operation Description JOIN Initiates processing of a new Join block . SPLIT Initiates processing of a new Split block . LOOP Initiates processing of a new Loop block . REPEAT Initiates a new iteration of an executing loop. SPAN Initiates processing of a new Span block . RESPAN Initiates processing of a new operation batch within a span block. DYN Initiates processing of a new Dyn block . CALL Initiates processing of a new Call block . SYSCALL Initiates processing ofa new Syscall block . END Marks the end of a program block. HALT Marks the end of the entire program. Let's consider a simple program below: begin if.true else end\nend Block structure of this program is shown below. JOIN SPAN END SPLIT SPAN END SPAN END END\nEND Executing this program on the VM can result in one of two possible instruction sequences. First, if after operations in are executed the top of the stack is 1, the VM will execute the following: JOIN\nSPAN\n\nEND\nSPLIT\nSPAN\n\nEND\nEND\nEND\nHALT However, if after are executed, the top of the stack is 0, the VM will execute the following: JOIN\nSPAN\n\nEND\nSPLIT\nSPAN\n\nEND\nEND\nEND\nHALT The main task of the decoder is to output exactly the same program hash, regardless of which one of the two possible execution paths was taken. However, before we can describe how this is achieved, we need to give an overview of the overall decoder structure.","breadcrumbs":"Design » Program decoder » Program execution","id":"114","title":"Program execution"},"115":{"body":"The decoder is one of the more complex parts of the VM. It consists of the following components: Main execution trace consisting of 24 trace columns which contain the state of the decoder at a given cycle of a computation. Connection to the hash chiplet, which is used to offload hash computations from the decoder. 3 virtual tables (implemented via multi-set checks), which keep track of code blocks and operations executing on the VM.","breadcrumbs":"Design » Program decoder » Decoder structure","id":"115","title":"Decoder structure"},"116":{"body":"Decoder trace columns can be grouped into several logical sets of registers as illustrated below. decoder_trace.png These registers have the following meanings: Block address register a. This register contains address of the hasher for the current block (row index from the auxiliary hashing table). It also serves the role of unique block identifiers. This is convenient, because hasher addresses are guaranteed to be unique. Registers b0​,...,b6​, which encode opcodes for operation to be executed by the VM. Each of these registers can contain a single binary value (either 1 or 0). And together these values describe a single opcode. Hasher registers h0​,...,h7​. When control flow operations are executed, these registers are used to provide inputs for the current block's hash computation (e.g., for JOIN, SPLIT, LOOP, SPAN, CALL, SYSCALL operations) or to record the result of the hash computation (i.e., for END operation). However, when regular operations are executed, 2 of these registers are used to help with op group decoding, and the remaining 6 can be used to hold operation-specific helper variables. Register sp which contains a binary flag indicating whether the VM is currently executing instructions inside a span block. The flag is set to 1 when the VM executes non-control flow instructions, and is set to 0 otherwise. Register gc which keep track of the number of unprocessed operation groups in a given span block. Register ox which keeps track of a currently executing operation's index within its operation group. Operation batch flags c0​,c1​,c2​ which indicate how many operation groups a given operation batch contains. These flags are set only for SPAN and RESPAN operations, and are set to 0's otherwise. Two additional registers (not shown) used primarily for constraint degree reduction.","breadcrumbs":"Design » Program decoder » Decoder trace","id":"116","title":"Decoder trace"},"117":{"body":"To compute hashes of program blocks, the decoder relies on the hash chiplet . Specifically, the decoder needs to perform two types of hashing operations: A simple 2-to-1 hash, where we provide a sequence of 8 field elements, and get back 4 field elements representing the result. Computing such a hash requires 8 rows in the hash chiplet. A sequential hash of n elements. Computing such a hash requires multiple absorption steps, and at each step 8 field elements are absorbed into the hasher. Thus, computing a sequential hash of n elements requires ⌈n/8⌉ rows in the hash chiplet. At the end, we also get 4 field elements representing the result. To make hashing requests to the hash chiplet and to read the results from it, we will need to divide out relevant values from the chiplets bus column bchip​ as described below. Simple 2-to-1 hash To initiate a 2-to-1 hash of 8 elements (v0​,...,v7​) we need to divide bchip​ by the following value: α0​+α1​⋅mbp​+α2​⋅r+i=0∑7​(αi+8​⋅vi​) where: mbp​ is a label indicating beginning of a new permutation. Value of this label is computed based on hash chiplet selector flags according to the methodology described here . r is the address of the row at which the hashing begins. Some α values are skipped in the above (e.g., α3​) because of the specifics of how auxiliary hasher table rows are reduced to field elements (described here ). For example, α3​ is used as a coefficient for node index values during Merkle path computations in the hasher, and thus, is not relevant in this case. The α4​ term is omitted when the number of items being hashed is a multiple of the rate width (8) because it is multiplied by 0 - the value of the first capacity register as determined by the hasher chiplet logic . To read the 4-element result (u0​,...,u3​), we need to divide bchip​ by the following value: α0​+α1​⋅mhout​+α2​⋅(r+7)+i=0∑3​(αi+8​⋅ui​) where: mhout​ is a label indicating return of the hash value. Value of this label is computed based on hash chiplet selector flags according to the methodology described here . r is the address of the row at which the hashing began. Sequential hash To initiate a sequential hash of n elements (v0​,...,vn−1​), we need to divide bchip​ by the following value: α0​+α1​⋅mbp​+α2​⋅r+α4​⋅n+i=0∑7​(αi+8​⋅vi​) This also absorbs the first 8 elements of the sequence into the hasher state. Then, to absorb the next sequence of 8 elements (e.g., v8​,...,v15​), we need to divide bchip​ by the following value: α0​+α1​⋅mabp​+α2​⋅(r+7)+i=0∑7​(αi+8​⋅vi+8​) Where mabp​ is a label indicating absorption of more elements into the hasher state. Value of this label is computed based on hash chiplet selector flags according to the methodology described here . We can keep absorbing elements into the hasher in the similar manner until all elements have been absorbed. Then, to read the result (e.g., u0​,...,u3​), we need to divide bchip​ by the following value: α0​+α1​⋅mhout​+α2​⋅(r+⌈n/8⌉⋅8−1)+i=0∑3​(αi+8​⋅ui​) Thus, for example, if n=14, the result will of the hash will be available at hasher row r+15.","breadcrumbs":"Design » Program decoder » Program block hashing","id":"117","title":"Program block hashing"},"118":{"body":"In addition to the hash chiplet, control flow operations rely on 3 virtual tables: block stack table, block hash table, and op group table. These tables are virtual in that they don't require separate trace columns. Their state is described solely by running product columns: p1​, p2​, and p3​. The tables are described in the following sections. Block stack table When the VM starts executing a new program block, it adds its block ID together with the ID of its parent block (and some additional info) to the block stack table. When a program block is fully executed, it is removed from the table. In this way, the table represents a stack of blocks which are currently executing on the VM. By the time program execution completes, block stack table must be empty. The block stack table is also used to ensure that execution contexts are managed properly across the CALL and SYSCALL operations. The table can be thought of as consisting of 11 columns as shown below: decoder_block_stack_table where: The first column (t0​) contains the ID of the block. The second column (t1​) contains the ID of the parent block. If the block has no parent (i.e., it is a root block of the program), parent ID is 0. The third column (t2​) contains a binary value which is set to 1 is the block is a loop block, and to 0 otherwise. The following 8 columns are only set to non-zero values for CALL and SYSCALL operations. They save all the necessary information to be able to restore the parent context properly upon the corresponding END operation the prnt_b0 and prnt_b1 columns refer to the stack helper columns B0 and B1 (current stack depth and last overflow address, respectively) In the above diagram, the first 2 rows correspond to 2 different CALL operations. The first CALL operation is called from the root context, and hence its parent fn hash is the zero hash. Additionally, the second CALL operation has a parent fn hash of [h0, h1, h2, h3], indicating that the first CALL was to a procedure with that hash. Running product column p1​ is used to keep track of the state of the table. At any step of the computation, the current value of p1​ defines which rows are present in the table. To reduce a row in the block stack table to a single value, we compute the following. row=α0​+i=0∑10​(αi+1​⋅ti​), where α0​,...,α11​ are the random values provided by the verifier. Block hash table When the VM starts executing a new program block, it adds hashes of the block's children to the block hash table. And when the VM finishes executing a block, it removes its hash from the block hash table. Thus, by the time program execution completes, block hash table must be empty. The table can be thought of as consisting of 7 columns as shown below: block_hash_table where: The first column (t0​) contains the ID of the block's parent. For program root, parent ID is 0. The next 4 columns (t1​,...,t4​) contain the hash of the block. The next column (t5​) contains a binary value which is set to 1 if the block is the first child of a join block, and to 0 otherwise. The last column (t6​) contains a binary value which is set to 1 if the block is a body of a loop, and to 0 otherwise. Running product column p2​ is used to keep track of the state of the table. At any step of the computation, the current value of p2​ defines which rows are present in the table. To reduce a row in the block hash table to a single value, we compute the following. row=α0​+i=0∑6​(αi+1​⋅ti​) Where α0​,...,α7​ are the random values provided by the verifier. Unlike other virtual tables, block hash table does not start out in an empty state. Specifically, it is initialized with a single row containing the hash of the program's root block. This needs to be done because the root block does not have a parent and, thus, otherwise it would never be added to the block hash table. Initialization of the block hash table is done by setting the initial value of p2​ to the value of the row containing the hash of a program's root block. Op group table Op group table is used in decoding of span blocks, which are leaves in a program's MAST. As described here , a span block can contain one or more operation batches, each batch containing up to 8 operation groups. When the VM starts executing a new batch of operations, it adds all operation groups within a batch, except for the first one, to the op group table. Then, as the VM starts executing an operation group, it removes the group from the table. Thus, by the time all operation groups in a batch have been executed, the op group table must be empty. The table can be thought of as consisting of 3 columns as shown below: decoder_op_group_table The meaning of the columns is as follows: The first column (t0​) contains operation batch ID. During the execution of the program, each operation batch is assigned a unique ID. The second column (t1​) contains the position of the group in the span block (not just in the current batch). The position is 1-based and is counted from the end. Thus, for example, if a span block consists of a single batch with 4 groups, the position of the first group would be 4, the position of the second group would be 3 etc. (the reason for this is explained in this section). Note that the group with position 4 is not added to the table, because it is the first group in the batch, so the first row of the table will be for the group with position 3. The third column (t2​) contains the actual values of operation groups (this could include up to 9 opcodes or a single immediate value). Permutation column p3​ is used to keep track of the state of the table. At any step of the computation, the current value of p3​ defines which rows are present in the table. To reduce a row in the op group table to a single value, we compute the following. row=α0​+i=0∑2​(αi+1​⋅ti​) Where α0​,...,α3​ are the random values provided by the verifier.","breadcrumbs":"Design » Program decoder » Control flow tables","id":"118","title":"Control flow tables"},"119":{"body":"In this section we describe high-level semantics of executing all control flow operations. The descriptions are not meant to be complete and omit some low-level details. However, they provide good intuition on how these operations work. JOIN operation Before a JOIN operation is executed by the VM, the prover populates h0​,...,h7​ registers with hashes of left and right children of the join program block as shown in the diagram below. decoder_join_operation In the above diagram, blk is the ID of the join block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent. When the VM executes a JOIN operation, it does the following: Adds a tuple (blk, prnt, 0, 0...) to the block stack table. Adds tuples (blk, left_child_hash, 1, 0) and (blk, right_child_hash, 0, 0) to the block hash table. Initiates a 2-to-1 hash computation in the hash chiplet (as described here ) using blk as row address in the auxiliary hashing table and h0​,...,h7​ as input values. SPLIT operation Before a SPLIT operation is executed by the VM, the prover populates h0​,...,h7​ registers with hashes of true and false branches of the split program block as shown in the diagram below. decoder_split_operation In the above diagram, blk is the ID of the split block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent. When the VM executes a SPLIT operation, it does the following: Adds a tuple (blk, prnt, 0, 0...) to the block stack table. Pops the stack and: a. If the popped value is 1, adds a tuple (blk, true_branch_hash, 0, 0) to the block hash table. b. If the popped value is 0, adds a tuple (blk, false_branch_hash, 0, 0) to the block hash table. c. If the popped value is neither 1 nor 0, the execution fails. Initiates a 2-to-1 hash computation in the hash chiplet (as described here ) using blk as row address in the auxiliary hashing table and h0​,...,h7​ as input values. LOOP operation Before a LOOP operation is executed by the VM, the prover populates h0​,...,h3​ registers with hash of the loop's body as shown in the diagram below. decoder_loop_operation In the above diagram, blk is the ID of the loop block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent. When the VM executes a LOOP operation, it does the following: Pops the stack and: a. If the popped value is 1 adds a tuple (blk, prnt, 1, 0...) to the block stack table (the 1 indicates that the loop's body is expected to be executed). Then, adds a tuple (blk, loop_body_hash, 0, 1) to the block hash table. b. If the popped value is 0, adds (blk, prnt, 0, 0...) to the block stack table. In this case, nothing is added to the block hash table. c. If the popped value is neither 1 nor 0, the execution fails. Initiates a 2-to-1 hash computation in the hash chiplet (as described here ) using blk as row address in the auxiliary hashing table and h0​,...,h3​ as input values. SPAN operation Before a SPAN operation is executed by the VM, the prover populates h0​,...,h7​ registers with contents of the first operation batch of the span block as shown in the diagram below. The prover also sets the group count register gc to the total number of operation groups in the span block. decoder_span_block In the above diagram, blk is the ID of the span block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent. g0_op0 is the first operation of the batch, and g_0' is the first operation group of the batch with the first operation removed. When the VM executes a SPAN operation, it does the following: Adds a tuple (blk, prnt, 0, 0...) to the block stack table. Adds groups of the operation batch, as specified by op batch flags (see here ) to the op group table. Initiates a sequential hash computation in the hash chiplet (as described here ) using blk as row address in the auxiliary hashing table and h0​,...,h7​ as input values. Sets the in_span register to 1. Decrements group_count register by 1. Sets the op_index register to 0. DYN operation Before a DYN operation is executed by the VM, the prover populates h0​,...,h7​ registers with 0 as shown in the diagram below. decoder_dyn_operation In the above diagram, blk is the ID of the dyn block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent. When the VM executes a DYN operation, it does the following: Adds a tuple (blk, prnt, 0, 0...) to the block stack table. Gets the hash of the dynamic code block dynamic_block_hash from the top four elements of the stack. Adds the tuple (blk, dynamic_block_hash, 0, 0) to the block hash table. Initiates a 2-to-1 hash computation in the hash chiplet (as described here ) using blk as row address in the auxiliary hashing table and h0​,...,h7​ as input values. END operation Before an END operation is executed by the VM, the prover populates h0​,...,h3​ registers with the hash of the block which is about to end. The prover also sets values in h4​ and h5​ registers as follows: h4​ is set to 1 if the block is a body of a loop block. We denote this value as f0. h5​ is set to 1 if the block is a loop block. We denote this value as f1. h6​ is set to 1 if the block is a call block. We denote this value as f2. h7​ is set to 1 if the block is a syscall block. We denote this value as f3. decoder_end_operation In the above diagram, blk is the ID of the block which is about to finish executing. prnt is the ID of the block's parent. When the VM executes an END operation, it does the following: Removes a tuple from the block stack table. if f2 or f3 is set, we remove a row (blk, prnt, 0, ctx_next, fmp_next, b0_next, b1_next, fn_hash_next[0..4]) in the above, the x_next variables denote the column x in the next row else, we remove a row (blk, prnt, f1, 0, 0, 0, 0, 0) Removes a tuple (prnt, current_block_hash, nxt, f0) from the block hash table, where nxt=0 if the next operation is either END or REPEAT, and 1 otherwise. Reads the hash result from the hash chiplet (as described here ) using blk + 7 as row address in the auxiliary hashing table. If h5​=1 (i.e., we are exiting a loop block), pops the value off the top of the stack and verifies that the value is 0. Verifies that group_count register is set to 0. HALT operation Before a HALT operation is executed by the VM, the VM copies values in h0​,...,h3​ registers to the next row as illustrated in the diagram below: decoder_halt_operation In the above diagram, blk is the ID of the block which is about to finish executing. When the VM executes a HALT operation, it does the following: Verifies that block address register is set to 0. If we are not at the last row of the trace, verifies that the next operation is HALT. Copies values of h0​,...,h3​ registers to the next row. Populates all other decoder registers with 0's in the next row. REPEAT operation Before a REPEAT operation is executed by the VM, the VM copies values in registers h0​,...,h4​ to the next row as shown in the diagram below. decoder_repeat_operation In the above diagram, blk is the ID of the loop's body and prnt is the ID of the loop. When the VM executes a REPEAT operation, it does the following: Checks whether register h4​ is set to 1. If it isn't (i.e., we are not in a loop), the execution fails. Pops the stack and if the popped value is 1, adds a tuple (prnt, loop_body_loop 0, 1) to the block hash table. If the popped value is not 1, the execution fails. The effect of the above is that the VM needs to execute the loop's body again to clear the block hash table. RESPAN operation Before a RESPAN operation is executed by the VM, the VM copies the ID of the current block blk and the number of remaining operation groups in the span to the next row, and sets the value of in_span column to 0. The prover also sets the value of h1​ register for the next row to the ID of the current block's parent prnt as shown in the diagram below: decoder_respan_operation In the above diagram, g0_op0 is the first operation of the new operation batch, and g0' is the first operation group of the batch with g0_op0 operation removed. When the VM executes a RESPAN operation, it does the following: Increments block address by 8. Removes the tuple (blk, prnt, 0, 0...) from the block stack table. Adds the tuple (blk+8, prnt, 0, 0...) to the block stack table. Absorbs values in registers h0​,...,h7​ into the hasher state of the hash chiplet (as described here ). Sets the in_span register to 1. Adds groups of the operation batch, as specified by op batch flags (see here ) to the op group table using blk+8 as batch ID. The net result of the above is that we incremented the ID of the current block by 8 and added the next set of operation groups to the op group table. CALL operation Recall that the purpose of a CALL operation is to execute a procedure in a new execution context. Specifically, this means that the entire memory is zero'd in the new execution context, and the stack is truncated to a depth of 16 (i.e. any element in the stack overflow table is not available in the new context). On the corresponding END instruction, the prover will restore the previous execution context (verified by the block stack table). Before a CALL operation, the prover populates h0​,...,h3​ registers with the hash of the procedure being called. In the next row, the prover resets the FMP register (free memory pointer), sets the context ID to the next row's CLK value sets the fn hash registers to the hash of the callee This register is what the caller instruction uses to return the hash of the caller in a syscall resets the stack B0 register to 16 (which tracks the current stack depth) resets the overflow address to 0 (which tracks the \"address\" of the last element added to the overflow table) it is set to 0 to indicate that the overflow table is empty decoder_call_operation In the above diagram, blk is the ID of the call block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent. When the VM executes a CALL operation, it does the following: Adds a tuple (blk, prnt, 0, p_ctx, p_fmp, p_b0, p_b1, prnt_fn_hash[0..4]) to the block stack table. Initiates a 2-to-1 hash computation in the hash chiplet (as described here ) using blk as row address in the auxiliary hashing table and h0​,...,h3​ as input values. SYSCALL operation Similarly to the CALL operation, a SYSCALL changes the execution context. However, it always jumps back to the root context, and executes kernel procedures only. Before a SYSCALL operation, the prover populates h0​,...,h3​ registers with the hash of the procedure being called. In the next row, the prover resets the FMP register (free memory pointer), sets the context ID to 0, does NOT modify the fn hash register Hence, the fn hash register contains the procedure hash of the caller, to be accessed by the caller instruction, resets the stack B0 register to 16 (which tracks the current stack depth) resets the overflow address to 0 (which tracks the \"address\" of the last element added to the overflow table) it is set to 0 to indicate that the overflow table is empty decoder_syscall_operation In the above diagram, blk is the ID of the syscall block which is about to be executed. blk is also the address of the hasher row in the auxiliary hasher table. prnt is the ID of the block's parent. When the VM executes a SYSCALL operation, it does the following: Adds a tuple (blk, prnt, 0, p_ctx, p_fmp, p_b0, p_b1, prnt_fn_hash[0..4]) to the block stack table. Sends a request to the kernel ROM chiplet indicating that hash of callee is being accessed. this results in a fault if hash of callee does not correspond to the hash of a kernel procedure Initiates a 2-to-1 hash computation in the hash chiplet (as described here ) using blk as row address in the auxiliary hashing table and h0​,...,h3​ as input values.","breadcrumbs":"Design » Program decoder » Control flow operation semantics","id":"119","title":"Control flow operation semantics"},"12":{"body":"","breadcrumbs":"Introduction » Usage » CLI interface","id":"12","title":"CLI interface"},"120":{"body":"When decoding a program, we start at the root block of the program. We can compute the hash of the root block directly from hashes of its children. The prover provides hashes of the child blocks non-deterministically, and we use them to compute the program's hash (here we rely on the hash chiplet). We then verify the program hash via boundary constraints. Thus, if the prover provided valid hashes for the child blocks, we will get the expected program hash. Now, we need to verify that the VM executed the child blocks correctly. We do this recursively similar to what is described above: for each of the blocks, the prover provides hashes of its children non-deterministically and we verify that the hash has been computed correctly. We do this until we get to the leaf nodes (i.e., span blocks). Hashes of span blocks are computed sequentially from the instructions executed by the VM. The sections below illustrate how different types of code blocks are decoded by the VM.","breadcrumbs":"Design » Program decoder » Program decoding","id":"120","title":"Program decoding"},"121":{"body":"When decoding a join bock, the VM first executes a JOIN operation, then executes the first child block, followed by the second child block. Once the children of the join block are executed, the VM executes an END operation. This is illustrated in the diagram below. decoder_join_block_decoding As described previously, when the VM executes a JOIN operation, hashes of both children are added to the block hash table. These hashes are removed only when the END operations for the child blocks are executed. Thus, until both child blocks are executed, the block hash table is not cleared.","breadcrumbs":"Design » Program decoder » JOIN block decoding","id":"121","title":"JOIN block decoding"},"122":{"body":"When decoding a split block, the decoder pops an element off the top of the stack, and if the popped element is 1, executes the block corresponding to the true branch. If the popped element is 0, the decoder executes the block corresponding to the false branch. This is illustrated on the diagram below. decoder_split_block_decoding As described previously, when the VM executes a SPLIT operation, only the hash of the branch to be executed is added to the block hash table. Thus, until the child block corresponding to the required branch is executed, the block hash table is not cleared.","breadcrumbs":"Design » Program decoder » SPLIT block decoding","id":"122","title":"SPLIT block decoding"},"123":{"body":"When decoding a loop bock, we need to consider two possible scenarios: When the top of the stack is 1, we need to enter the loop and execute loop body at least once. When the top of the stack is, 0 we need to skip the loop. In both cases, we need to pop an element off the top of the stack. Executing the loop If the top of the stack is 1, the VM executes a LOOP operation. This removes the top element from the stack and adds the hash of the loop's body to the block hash table. It also adds a row to the block stack table setting the is_loop value to 1. To clear the block hash table, the VM needs to execute the loop body (executing the END operation for the loop body block will remove the corresponding row from the block hash table). After loop body is executed, if the top of the stack is 1, the VM executes a REPEAT operation (executing REPEAT operation when the top of the stack is 0 will result in an error). This operation again adds the hash of the loop's body to the block hash table. Thus, the VM needs to execute the loop body again to clear the block hash table. This process is illustrated on the diagram below. decoder_loop_execution The above steps are repeated until the top of the stack becomes 0, at which point the VM executes the END operation. Since in the beginning we set is_loop column in the block stack table to 1, h6​ column will be set to 1 when the END operation is executed. Thus, executing the END operation will also remove the top value from the stack. If the removed value is not 0, the operation will fail. Thus, the VM can exit the loop block only when the top of the stack is 0. Skipping the loop If the top of the stack is 0, the VM still executes the LOOP operation. But unlike in the case when we need to enter the loop, the VM sets is_loop flag to 0 in the block stack table, and does not add any rows to the block hash table. The last point means that the only possible operation to be executed after the LOOP operation is the END operation. This is illustrated in the diagram below. decoder_loop_skipping Moreover, since we've set the is_loop flag to 0, executing the END operation does not remove any items from the stack.","breadcrumbs":"Design » Program decoder » LOOP block decoding","id":"123","title":"LOOP block decoding"},"124":{"body":"When decoding a dyn bock, the VM first executes a DYN operation, then executes the child block dynamically specified by the top of the stack. Once the child of the dyn block has been executed, the VM executes an END operation. This is illustrated in the diagram below. decoder_dyn_block_decoding As described previously, when the VM executes a DYN operation, the hash of the child is added to the block hash table. This hash is removed only when the END operation for the child block is executed. Thus, until the child block corresponding to the dynamically specified target is executed, the block hash table is not cleared.","breadcrumbs":"Design » Program decoder » DYN block decoding","id":"124","title":"DYN block decoding"},"125":{"body":"As described here , a span block can contain one or more operation batches, each batch containing up to 8 operation groups. At the high level, decoding of a span block is done as follows: At the beginning of the block, we make a request to the hash chiplet which initiates the hasher, absorbs the first operation batch (8 field elements) into the hasher, and returns the row address of the hasher, which we use as the unique ID for the span block (see here ). We then add groups of the operation batch, as specified by op batch flags (but always skipping the first one) to the op group table. We then remove operation groups from the op group table in the FIFO order one by one, and decode them in the manner similar to the one described here . Once all operation groups in a batch have been decoded, we absorb the next batch into the hasher and repeat the process described above. Once all batches have been decoded, we return the hash of the span block from the hasher. Overall, three control flow operations are used when decoding a span block: SPAN operation is used to initialize a hasher and absorbs the first operation batch into it. RESPAN operation is used to absorb any additional batches in the span block. END operation is used to end the decoding of a span block and retrieve its hash from the hash chiplet. Operation group decoding As described here , an operation group is a sequence of operations which can be encoded into a single field element. For a field element of 64 bits, we can fit up to 9 operations into a group. We do this by concatenating binary representations of opcodes together with the first operation located in the least significant position. We can read opcodes from the group by simply subtracting them from the op group value and then dividing the result by 27. Once the value of the op group reaches 0, we know that all opcodes have been read. Graphically, this can be illustrated like so: decoder_operation_group_decoding Notice that despite their appearance, op bits is actually 7 separate registers, while op group is just a single register. We also need to make sure that at most 9 operations are executed as a part of a single group. For this purpose we use the op_index column. Values in this column start out at 0 for each operation group, and are incremented by 1 for each executed operation. To make sure that at most 9 operations can be executed in a group, the value of the op_index column is not allowed to exceed 8. Operation batch flags Operation batch flags are used to specify how many operation groups comprise a given operation batch. For most batches, the number of groups will be equal to 8. However, for the last batch in a block (or for the first batch, if the block consists of only a single batch), the number of groups may be less than 8. Since processing of new batches starts only on SPAN and RESPAN operations, only for these operations the flags can be set to non-zero values. To simplify the constraint system, the number of groups in a batch can be only one of the following values: 1, 2, 4, and 8. If the number of groups in a batch does not match one of these values, the batch is simply padded with NOOP's (one NOOP per added group). Consider the diagram below. decoder_OPERATION_batch_flags In the above, the batch contains 3 operation groups. To bring the count up to 4, we consider the 4-th group (i.e., 0) to be a part of the batch. Since a numeric value for NOOP operation is 0, op group value of 0 can be interpreted as a single NOOP. Operation batch flags (denoted as c0​,c1​,c2​), encode the number of groups and define how many groups are added to the op group table as follows: (1, -, -) - 8 groups. Groups in h1​,...h7​ are added to the op group table. (0, 1, 0) - 4 groups. Groups in h1​,...h3​ are added to the op group table (0, 0, 1) - 2 groups. Groups in h1​ is added to the op group table. (0, 1, 1) - 1 group. Nothing is added to the op group table (0, 0, 0) - not a SPAN or RESPAN operation. Single-batch span The simplest example of a span block is a block with a single batch. This batch may contain up to 8 operation groups (e.g., g0​,...,g7​). Decoding of such a block is illustrated in the diagram below. decoder_single_batch_span Before the VM starts processing this span block, the prover populates registers h0​,...,h7​ with operation groups g0​,...,g7​. The prover also puts the total number of groups into the group_count register gc. In this case, the total number of groups is 8. When the VM executes a SPAN operation, it does the following: Initiates hashing of elements g0​,...,g7​ using hash chiplet. The hasher address is used as the block ID blk, and it is inserted into addr register in the next row. Adds a tuple (blk, prnt, 0) to the block stack table. Sets the is_span register to 1 in the next row. Sets the op_index register to 0 in the next row. Decrements group_count register by 1. Sets op bits registers at the next step to the first operation of g0​, and also copies g0​ with the first operation removed (denoted as g0′​) to the next row. Adds groups g1​,...,g7​ to the op group table. Thus, after the SPAN operation is executed, op group table looks as shown below. decoder_op_group_table_after_span_op Then, with every step the next operation is removed from g0​, and by step 9, the value of g0​ is 0. Once this happens, the VM does the following: Decrements group_count register by 1. Sets op bits registers at the next step to the first operation of g1​. Sets hasher register h0​ to the value of g1​ with the first operation removed (denoted as g1′​). Removes row (blk, 7, g1) from the op group table. This row can be obtained by taking values from registers: addr, group_count, and h0′​+i=0∑6​(2i⋅bi′​) for i∈[0,7), where h0′​ and bi′​ refer to values in the next row for the first hasher column and op_bits columns respectively. Note that we rely on the group_count column to construct the row to be removed from the op group table. Since group count is decremented from the total number of groups to 0, to remove groups from the op group table in correct order, we need to assign group position to groups in the op group table in the reverse order. For example, the first group to be removed should have position 7, the second group to be removed should have position 6 etc. Decoding of g1​ is performed in the same manner as decoding of g0​: with every subsequent step the next operation is removed from g1​ until its value reaches 0, at which point, decoding of group g2​ begins. The above steps are executed until value of group_count reaches 0. Once group_count reaches 0 and the last operation group g7​ is executed, the VM executes the END operation. Semantics of the END operation are described here . Notice that by the time we get to the END operation, all rows are removed from the op group table. Multi-batch span A span block may contain an unlimited number of operation batches. As mentioned previously, to absorb a new batch into the hasher, the VM executes a RESPAN operation. The diagram below illustrates decoding of a span block consisting of two operation batches. decoder_multi_batch_span Decoding of such a block will look very similar to decoding of the single-span block described previously, but there also will be some differences. First, after the SPAN operation is executed, the op group table will look as follows: decoder_op_group_table_multi_span Notice that while the same groups (g1​,...,g7​) are added to the table, their positions now reflect the total number of groups in the span block. Second, executing a RESPAN operation increments hasher address by 8. This is done because absorbing additional 8 elements into the hasher state requires 8 more rows in the auxiliary hasher table. Incrementing value of addr register actually changes the ID of the span block (though, for a span block, it may be more appropriate to view values in this column as IDs of individual operation batches). This means that we also need to update the block stack table. Specifically, we need to remove row (blk, prnt, 0) from it, and replace it with row (blk + 8, prnt, 0). To perform this operation, the prover sets the value of h1​ in the next row to prnt. Executing a RESPAN operation also adds groups g9​,g10​,g11​ to the op group table, which now would look as follows: decoder_op_group_table_post_respan Then, the execution of the second batch proceeds in a manner similar to the first batch: we remove operations from the current op group, execute them, and when the value of the op group reaches 0, we start executing the next group in the batch. Thus, by the time we get to the END operation, the op group table should be empty. When executing the END operation, the hash of the span block will be read from hasher row at address addr + 7, which, in our example, will be equal to blk + 15. Handling immediate values Miden VM operations can carry immediate values. Currently, the only such operation is a PUSH operation. Since immediate values can be thought of as constants embedded into program code, we need to make sure that changing immediate values affects program hash. To achieve this, we treat immediate values in a manner similar to how we treat operation groups. Specifically, when computing hash of a span block, immediate values are absorbed into the hasher state in the same way as operation groups are. As mentioned previously, an immediate value is represented by a single field element, and thus, an immediate value takes place of a single operation group. The diagram below illustrates decoding of a span block with 9 operations one of which is a PUSH operation. decoder_decoding_span_block_with_push In the above, when the SPAN operation is executed, immediate value imm0 will be added to the op group table, which will look as follows: decoder_imm_vale_op_group_table Then, when the PUSH operation is executed, the VM will do the following: Decrement group_count by 1. Remove a row from the op group table equal to (addr, group_count, s0'), where s0′​ is the value of the top of the stack at the next row (i.e., it is the value that is pushed onto the stack). Thus, after the PUSH operation is executed, the op group table is cleared, and group count decreases to 0 (which means that there are no more op groups to execute). Decoding of the rest of the op group proceeds as described in the previous sections.","breadcrumbs":"Design » Program decoder » SPAN block decoding","id":"125","title":"SPAN block decoding"},"126":{"body":"Let's run through an example of decoding a simple program shown previously: begin if.true else end\nend Translating this into code blocks with IDs assigned, we get the following: b0: JOIN b1: SPAN b1: END b2: SPLIT b3: SPAN b3: END b4: SPAN b4: END b2: END\nb0: END The root of the program is a join block b0​. This block contains two children: a span bock b1​ and a split block b2​. In turn, the split block b2​ contains two children: a span block b3​ and a span block b4​. When this program is executed on the VM, the following happens: Before the program starts executing, block hash table is initialized with a single row containing the hash of b0​. Then, JOIN operation for b0​ is executed. It adds hashes of b1​ and b2​ to the block hash table. It also adds an entry for b0​ to the block stack table. States of both tables after this step are illustrated below. Then, span b1​ is executed and a sequential hash of its operations is computed. Also, when SPAN operation for b1​ is executed, an entry for b1​ is added to the block stack table. At the end of b1​ (when END is executed), entries for b1​ are removed from both the block hash and block stack tables. Then, SPLIT operation for b2​ is executed. It adds an entry for b2​ to the block stack table. Also, depending on whether the top of the stack is 1 or 0, either hash of b3​ or hash of b4​ is added to the block hash table. Let's say the top of the stack is 1. Then, at this point, the block hash and block stack tables will look like in the second picture below. Then, span b3​ is executed and a sequential hash of its instructions is computed. Also, when SPAN operation for b3​ is executed, an entry for b3​ is added to the block stack table. At the end of b3​ (when END is executed), entries for b3​ are removed from both the block hash and block stack tables. Then, END operation for b2​ is executed. It removes the hash of b2​ from the block hash table, and also removes the entry for b2​ from the block stack table. The third picture below illustrates the states of block stack and block hash tables after this step. Then, END for b0​ is executed, which removes entries for b0​ from the block stack and block hash tables. At this point both tables are empty. Finally, a sequence of HALT operations is executed until the length of the trace reaches a power of two. States of block hash and block stack tables after step 2: decoder_state_block_hash_2 States of block hash and block stack tables after step 4: decoder_state_block_hash_4 States of block hash and block stack tables after step 6: decoder_state_block_hash_6","breadcrumbs":"Design » Program decoder » Program decoding example","id":"126","title":"Program decoding example"},"127":{"body":"In this section we describe AIR constraint for Miden VM program decoder. These constraints enforce that the execution trace generated by the prover when executing a particular program complies with the rules described in the previous section . To refer to decoder execution trace columns, we use the names shown on the diagram below (these are the same names as in the previous section). Additionally, we denote the register containing the value at the top of the stack as s0​. air_decoder_columns We assume that the VM exposes a flag per operation which is set to 1 when the operation is executed, and to 0 otherwise. The notation for such flags is fopname​. For example, when the VM executes a PUSH operation, flag fpush​=1. All flags are mutually exclusive - i.e., when one flag is set to 1 all other flags are set to 0. The flags are computed based on values in op_bits columns. AIR constraints for the decoder involve operations listed in the table below. For each operation we also provide the degree of the corresponding flag and the effect that the operation has on the operand stack (however, in this section we do not cover the constraints needed to enforce the correct transition of the operand stack). Operation Flag Degree Effect on stack JOIN fjoin​ 5 Stack remains unchanged. SPLIT fsplit​ 5 Top stack element is dropped. LOOP floop​ 5 Top stack element is dropped. REPEAT frepeat​ 4 Top stack element is dropped. SPAN fspan​ 5 Stack remains unchanged. RESPAN frespan​ 4 Stack remains unchanged. DYN fdyn​ 5 Stack remains unchanged. CALL fcall​ 4 Stack remains unchanged. SYSCALL fsyscall​ 4 Stack remains unchanged. END fend​ 4 When exiting a loop block, top stack element is dropped; otherwise, the stack remains unchanged. HALT fhalt​ 4 Stack remains unchanged. PUSH fpush​ 5 An immediate value is pushed onto the stack. EMIT femit​ 5 Stack remains unchanged. We also use the control flow flag fctrl​ exposed by the VM, which is set when any one of the above control flow operations is being executed. It has degree 5. As described previously , the general idea of the decoder is that the prover provides the program to the VM by populating some of cells in the trace non-deterministically. Values in these are then used to update virtual tables (represented via multiset checks) such as block hash table, block stack table etc. Transition constraints are used to enforce that the tables are updates correctly, and we also apply boundary constraints to enforce the correct initial and final states of these tables. One of these boundary constraints binds the execution trace to the hash of the program being executed. Thus, if the virtual tables were updated correctly and boundary constraints hold, we can be convinced that the prover executed the claimed program on the VM. In the sections below, we describe constraints according to their logical grouping. However, we start out with a set of general constraints which are applicable to multiple parts of the decoder.","breadcrumbs":"Design » Program decoder » Decoder constraints » Miden VM decoder AIR constraints","id":"127","title":"Miden VM decoder AIR constraints"},"128":{"body":"When SPLIT or LOOP operation is executed, the top of the operand stack must contain a binary value: (fsplit​+floop​)⋅(s02​−s0​)=0 | degree=7 When a DYN operation is executed, the hasher registers must all be set to 0: fdyn​⋅(1−hi​)=0 for i∈[0,8) | degree=6 When REPEAT operation is executed, the value at the top of the operand stack must be 1: frepeat​⋅(1−s0​)=0 | degree=5 Also, when REPEAT operation is executed, the value in h4​ column (the is_loop_body flag), must be set to 1. This ensures that REPEAT operation can be executed only inside a loop: frepeat​⋅(1−h4​)=0 | degree=5 When RESPAN operation is executed, we need to make sure that the block ID is incremented by 8: frespan​⋅(a′−a−8)=0 | degree=5 When END operation is executed and we are exiting a loop block (i.e., is_loop, value which is stored in h5​, is 1), the value at the top of the operand stack must be 0: fend​⋅h5​⋅s0​=0 | degree=6 Also, when END operation is executed and the next operation is REPEAT, values in h0​,...,h4​ (the hash of the current block and the is_loop_body flag) must be copied to the next row: fend​⋅frepeat′​⋅(hi′​−hi​)=0 for i∈[0,5) | degree=9 A HALT instruction can be followed only by another HALT instruction: fhalt​⋅(1−fhalt′​)=0 | degree=8 When a HALT operation is executed, block address column must be 0: fhalt​⋅a=0 | degree=5 Values in op_bits columns must be binary (i.e., either 1 or 0): bi2​−bi​=0 for i∈[0,7) | degree=2 When the value in in_span column is set to 1, control flow operations cannot be executed on the VM, but when in_span flag is 0, only control flow operations can be executed on the VM: 1−sp−fctrl​=0 | degree=5","breadcrumbs":"Design » Program decoder » Decoder constraints » General constraints","id":"128","title":"General constraints"},"129":{"body":"As described previously , when the VM starts executing a new block, it also initiates computation of the block's hash. There are two separate methodologies for computing block hashes. For join , split , and loop blocks, the hash is computed directly from the hashes of the block's children. The prover provides these child hashes non-deterministically by populating registers h0​,...,h7​. For dyn , the hasher registers are populated with zeros, so the resulting hash is a constant value. The hasher is initialized using the hash chiplet, and we use the address of the hasher as the block's ID. The result of the hash is available 7 rows down in the hasher table (i.e., at row with index equal to block ID plus 7). We read the result from the hasher table at the time the END operation is executed for a given block. For span blocks, the hash is computed by absorbing a linear sequence of instructions (organized into operation groups and batches) into the hasher and then returning the result. The prover provides operation batches non-deterministically by populating registers h0​,...,h7​. Similarly to other blocks, the hasher is initialized using the hash chiplet at the start of the block, and we use the address of the hasher as the ID of the first operation batch in the block. As we absorb additional operation batches into the hasher (by executing RESPAN operation), the batch address is incremented by 8. This moves the \"pointer\" into the hasher table 8 rows down with every new batch. We read the result from the hasher table at the time the END operation is executed for a given block.","breadcrumbs":"Design » Program decoder » Decoder constraints » Block hash computation constraints","id":"129","title":"Block hash computation constraints"},"13":{"body":"To compile Miden VM into a binary, we have a Makefile with the following tasks: make exec This will place an optimized, multi-threaded miden executable into the ./target/optimized directory. It is equivalent to executing: cargo build --profile optimized --features concurrent,executable If you would like to enable single-threaded mode, you can compile Miden VM using the following command: make exec-single","breadcrumbs":"Introduction » Usage » Compiling Miden VM","id":"13","title":"Compiling Miden VM"},"130":{"body":"The decoder communicates with the hash chiplet via the chiplets bus . This works by dividing values of the multiset check column bchip​ by the values of operations providing inputs to or reading outputs from the hash chiplet. A constraint to enforce this would look as bchip′​⋅u=bchip​, where u is the value which defines the operation. In constructing value of u for decoder AIR constraints, we will use the following labels (see here for an explanation of how values for these labels are computed): mbp​ this label specifies that we are starting a new hash computation. mabp​ this label specifies that we are absorbing the next sequence of 8 elements into an ongoing hash computation. mhout​ this label specifies that we are reading the result of a hash computation. To simplify constraint description, we define the following variables: hinit​=α0​+α1​⋅mbp​+α2​⋅a′+i=0∑7​(αi+8​⋅hi​) In the above, hinit​ can be thought of as initiating a hasher with address a′ and absorbing 8 elements from the hasher state (h0​,...,h7​) into it. Control blocks are always padded to fill the hasher rate and as such the α4​ (first capacity register) term is set to 0. habp​=α0​+α1​⋅mabp​+α2​⋅a′+i=0∑7​(αi+8​⋅hi​) It should be noted that a refers to a column in the decoder, as depicted. The addresses in this column are set using the address from the hasher chiplet for the corresponding hash initialization / absorption / return. In the case of habp​ the value of the address in column a in the current row of the decoder is set to equal the value of the address of the row in the hasher chiplet where the previous absorption (or initialization) occurred. a′ is the address of the next row of the decoder, which is set to equal the address in the hasher chiplet where the absorption referred to by the habp​ label is happening. hres​=α0​+α1​⋅mhout​+α2​⋅(a+7)+i=0∑3​(αi+8​⋅hi​) In the above, a represents the address value in the decoder which corresponds to the hasher chiplet address at which the hasher was initialized (or the last absorption took place). As such, a+7 corresponds to the hasher chiplet address at which the result is returned. fctrli​=fjoin​+fsplit​+floop​+fdyn​+fcall​ | degree=5 In the above, fctrli​ is set to 1 when a control flow operation that signifies the initialization of a control block is being executed on the VM. Otherwise, it is set to 0. An exception is made for the SYSCALL operation. Although it also signifies the initialization of a control block, it must additionally send a procedure access request to the kernel ROM chiplet via the chiplets bus. Therefore, it is excluded from this flag and its communication with the chiplets bus is handled separately. d=b=0∑6​(bi​⋅2i) In the above, d represents the opcode value of the opcode being executed on the virtual machine. It is calculated via a bitwise combination of the op bits. We leverage the opcode value to achieve domain separation when hashing control blocks. This is done by populating the second capacity register of the hasher with the value d via the α5​ term when initializing the hasher. Using the above variables, we define operation values as described below. When a control block initializer operation (JOIN, SPLIT, LOOP, DYN, CALL, SYSCALL) is executed, a new hasher is initialized and the contents of h0​,...,h7​ are absorbed into the hasher. As mentioned above, the opcode value d is populated in the second capacity resister via the α5​ term. uctrli​=fctrli​⋅(hinit​+α5​⋅d) | degree=6 As mentioned previously, the value sent by the SYSCALL operation is defined separately, since in addition to communicating with the hash chiplet it must also send a kernel procedure access request to the kernel ROM chiplet. This value of this kernel procedure request is described by kproc​. kproc​=α6​+α7​⋅opkrom​+i=0∑3​(αi+8​⋅hi​) In the above, opkrom​ is the unique operation label of the kernel procedure call operation. The values h0​,h1​,h2​,h3​ contain the root hash of the procedure being called, which is the procedure that must be requested from the kernel ROM chiplet. usyscall​=fsyscall​⋅(hinit​+α5​⋅d)⋅kproc​ | degree=7 The above value sends both the hash initialization request and the kernel procedure access request to the chiplets bus when the SYSCALL operation is executed. When SPAN operation is executed, a new hasher is initialized and contents of h0​,...,h7​ are absorbed into the hasher. The number of operation groups to be hashed is padded to a multiple of the rate width (8) and so the α4​ is set to 0: uspan​=fspan​⋅hinit​ | degree=6 When RESPAN operation is executed, contents of h0​,...,h7​ (which contain the new operation batch) are absorbed into the hasher: urespan​=frespan​⋅habp​ | degree=5 When END operation is executed, the hash result is copied into registers h0​,..,h3​: uend​=fend​⋅hres​ | degree=5 Using the above definitions, we can describe the constraint for computing block hashes as follows: bchip′​⋅(uctrli​+usyscall​+uspan​+urespan​+uend​+1−(fctrli​+fsyscall​+fspan​+frespan​+fend​))=bchip​ We need to add 1 and subtract the sum of the relevant operation flags to ensure that when none of the flags is set to 1, the above constraint reduces to bchip′​=bchip​. The degree of this constraint is 8.","breadcrumbs":"Design » Program decoder » Decoder constraints » Chiplets bus constraints","id":"130","title":"Chiplets bus constraints"},"131":{"body":"As described previously , block stack table keeps track of program blocks currently executing on the VM. Thus, whenever the VM starts executing a new block, an entry for this block is added to the block stack table. And when execution of a block completes, it is removed from the block stack table. Adding and removing entries to/from the block stack table is accomplished as follows: To add an entry, we multiply the value in column p1​ by a value representing a tuple (blk, prnt, is_loop, ctx_next, fmp_next, b0_next, b1_next, fn_hash_next) . A constraint to enforce this would look as p1′​=p1​⋅v, where v is the value representing the row to be added. To remove an entry, we divide the value in column p1​ by a value representing a tuple (blk, prnt, is_loop, ctx_next, fmp_next, b0_next, b1_next, fn_hash_next). A constraint to enforce this would look as p1′​⋅u=p1​, where u is the value representing the row to be removed. Recall that the columns ctx_next, fmp_next, b0_next, b1_next, fn_hash_next are only set on CALL, SYSCALL, and their corresponding END block. Therefore, for simplicity, we will ignore them when documenting all other block types (such that their values are set to 0). Before describing the constraints for the block stack table, we first describe how we compute the values to be added and removed from the table for each operation. In the below, for block start operations (JOIN, SPLIT, LOOP, SPAN) a refers to the ID of the parent block, and a′ refers to the ID of the starting block. For END operation, the situation is reversed: a is the ID of the ending block, and a′ is the ID of the parent block. For RESPAN operation, a refers to the ID of the current operation batch, a′ refers to the ID of the next batch, and the parent ID for both batches is set by the prover non-deterministically in register h1​. When JOIN operation is executed, row (a′,a,0) is added to the block stack table: vjoin​=fjoin​⋅(α0​+α1​⋅a′+α2​⋅a) | degree=6 When SPLIT operation is executed, row (a′,a,0) is added to the block stack table: vsplit​=fsplit​⋅(α0​+α1​⋅a′+α2​⋅a) | degree=6 When LOOP operation is executed, row (a′,a,1) is added to the block stack table if the value at the top of the operand stack is 1, and row (a′,a,0) is added to the block stack table if the value at the top of the operand stack is 0: vloop​=floop​⋅(α0​+α1​⋅a′+α2​⋅a+α3​⋅s0​) | degree=6 When SPAN operation is executed, row (a′,a,0) is added to the block stack table: vspan​=fspan​⋅(α0​+α1​⋅a′+α2​⋅a) | degree=6 When RESPAN operation is executed, row (a,h1′​,0) is removed from the block stack table, and row (a′,h1′​,0) is added to the table. The prover sets the value of register h1​ at the next row to the ID of the parent block: urespan​=frespan​⋅(α0​+α1​⋅a+α2​⋅h1′​) | degree=5vrespan​=frespan​⋅(α0​+α1​⋅a′+α2​⋅h1′​) | degree=5 When a DYN operation is executed, row (a′,a,0) is added to the block stack table: vdyn​=fdyn​⋅(α0​+α1​⋅a′+α2​⋅a) | degree=6 When a CALL or SYSCALL operation is executed, row (a′,a,0,ctx,fmp,b0​,b1​,fn_hash[0..3]) is added to the block stack table: vcallorsyscall​​=(fcall​+fsyscall​)⋅(α0​+α1​⋅a+α2​⋅a′+α4​⋅ctx+α5​⋅fmp+α6​⋅b0​+α7​⋅b1​+<[α8​,α11​],fn_hash[0..3]>) | degree=5​ When END operation is executed, how we construct the row will depend on whether the IS_CALL or IS_SYSCALL values are set (stored in registers h6​ and h7​ respectively). If they are not set, then row (a,a′,h5​) is removed from the block span table (where h5​ contains the is_loop flag); otherwise, row (a,a′,0,ctx′,fmp′,b0′​,b1′​,fn_hash′[0..3]). uendnocall​uendcall​uend​​=α0​+α1​⋅a+α2​⋅a′=uendnocall​+α4​⋅ctx′+α5​⋅fmp′+α6​⋅b0′​+α7​⋅b1′​+<[α8​,α11​],fn_hash′[0..3]>=fend​⋅((1−h6​−h7​)⋅uendnocall​+(h6​+h7​)⋅uendcall​) | degree=6​ Using the above definitions, we can describe the constraint for updating the block stack table as follows: p1′​⋅(uend​+urespan​+1−(fend​+frespan​))=p1​⋅(vjoin​+vsplit​+vloop​+vspan​+vrespan​+vdyn​+vcallorsyscall​+1−(fjoin​+fsplit​+floop​+fspan​+frespan​+fdyn​+fcall​+fsyscall​)) We need to add 1 and subtract the sum of the relevant operation flags from each side to ensure that when none of the flags is set to 1, the above constraint reduces to p1′​=p1​. The degree of this constraint is 7. In addition to the above transition constraint, we also need to impose boundary constraints against the p1​ column to make sure the first and the last value in the column is set to 1. This enforces that the block stack table starts and ends in an empty state.","breadcrumbs":"Design » Program decoder » Decoder constraints » Block stack table constraints","id":"131","title":"Block stack table constraints"},"132":{"body":"As described previously , when the VM starts executing a new program block, it adds hashes of the block's children to the block hash table. And when the VM finishes executing a block, it removes the block's hash from the block hash table. This means that the block hash table gets updated when we execute the JOIN, SPLIT, LOOP, REPEAT, DYN, and END operations (executing SPAN operation does not affect the block hash table because a span block has no children). Adding and removing entries to/from the block hash table is accomplished as follows: To add an entry, we multiply the value in column p2​ by a value representing a tuple (prnt_id, block_hash, is_first_child, is_loop_body). A constraint to enforce this would look as p2′​=p2​⋅v, where v is the value representing the row to be added. To remove an entry, we divide the value in column p2​ by a value representing a tuple (prnt_id, block_hash, is_first_child, is_loop_body). A constraint to enforce this would look as p2′​⋅u=p2​, where u is the value representing the row to be removed. To simplify constraint descriptions, we define values representing left and right children of a block as follows: ch1​=α0​+α1​⋅a′+i=0∑3​(αi+2​⋅hi​) | degree=1ch2​=α0​+α1​⋅a′+i=0∑3​(αi+2​⋅hi+4​) | degree=1 Graphically, this looks like so: air_decoder_left_right_child In a similar manner, we define a value representing the result of hash computation as follows: bh=α0​+α1​⋅a′+i=0∑3​(αi+2​⋅hi​)+α7​⋅fis loop body​ | degree=1 Above, fis loop body​ refers to the value in the IS_LOOP_BODY column (already constrained to be 0 or 1), located in h4​. Also, note that we are not adding a flag indicating whether the block is the first child of a join block (i.e., α6​ term is missing). It will be added later on. Using the above variables, we define row values to be added to and removed from the block hash table as follows. When JOIN operation is executed, hashes of both child nodes are added to the block hash table. We add α6​ term to the first child value to differentiate it from the second child (i.e., this sets is_first_child to 1): vjoin​=fjoin​⋅(ch1​+α6​)⋅ch2​ | degree=7 When SPLIT operation is executed and the top of the stack is 1, hash of the true branch is added to the block hash table, but when the top of the stack is 0, hash of the false branch is added to the block hash table: vsplit​=fsplit​⋅(s0​⋅ch1​+(1−s0​)⋅ch2​) | degree=7 When LOOP operation is executed and the top of the stack is 1, hash of loop body is added to the block hash table. We add α7​ term to indicate that the child is a body of a loop. The below also means that if the top of the stack is 0, nothing is added to the block hash table as the expression evaluates to 0: vloop​=floop​⋅s0​⋅(ch1​+α7​) | degree=7 When REPEAT operation is executed, hash of loop body is added to the block hash table. We add α7​ term to indicate that the child is a body of a loop: vrepeat​=frepeat​⋅(ch1​+α7​) | degree=5 When the DYN operation is executed, the hash of the dynamic child is added to the block hash table. Since the child is dynamically specified by the top four elements of the stack, the value representing the dyn block's child must be computed based on the stack rather than from the decoder's hasher registers: chdyn​=α0​+α1​⋅a′+i=0∑3​(αi+2​⋅s3−i​) | degree=1 vdyn​=fdyn​⋅chdyn​ | degree=6 When the CALL or SYSCALL operation is executed, the hash of the callee is added to the block hash table. vcallorsyscall​=(fcall​+fsyscall​)⋅ch1​ | degree=5 When END operation is executed, hash of the completed block is removed from the block hash table. However, we also need to differentiate between removing the first and the second child of a join block. We do this by looking at the next operation. Specifically, if the next operation is neither END nor REPEAT nor HALT, we know that another block is about to be executed, and thus, we have just finished executing the first child of a join block. Thus, if the next operation is neither END nor REPEAT nor HALT we need to set the term for α6​ coefficient to 1 as shown below: uend​=fend​⋅(bh+α6​⋅(1−(fend′​+frepeat′​+fhalt′​))) | degree=8 Using the above definitions, we can describe the constraint for updating the block hash table as follows: p2′​⋅(uend​+1−fend​)=p2​⋅(vjoin​+vsplit​+vloop​+vrepeat​+vdyn​+vcallorsyscall​+1−(fjoin​+fsplit​+floop​+frepeat​+fdyn​+fcall​+fsyscall​)) We need to add 1 and subtract the sum of the relevant operation flags from each side to ensure that when none of the flags is set to 1, the above constraint reduces to p2′​=p2​. The degree of this constraint is 9. In addition to the above transition constraint, we also need to set the following boundary constraints against the p2​ column: The first value in the column represents a row for the entire program. Specifically, the row tuple would be (0, program_hash, 0, 0). This row should be removed from the table when the last END operation is executed. The last value in the column is 1 - i.e., the block hash table is empty.","breadcrumbs":"Design » Program decoder » Decoder constraints » Block hash table constraints","id":"132","title":"Block hash table constraints"},"133":{"body":"Span block constraints ensure proper decoding of span blocks. In addition to the block stack table constraints and block hash table constraints described previously, decoding of span blocks requires constraints described below.","breadcrumbs":"Design » Program decoder » Decoder constraints » Span block","id":"133","title":"Span block"},"134":{"body":"The in_span column (denoted as sp) is used to identify rows which execute non-control flow operations. The values in this column are set as follows: Executing a SPAN operation sets the value of in_span column to 1. The value remains 1 until the END operation is executed. If RESPAN operation is executed between SPAN and END operations, in the row at which RESPAN operation is executed in_span is set to 0. It is then reset to 1 in the following row. In all other cases, value in the in_span column should be 0. The picture below illustrates the above rules. air_decoder_in_spans_column_constraint To enforce the above rules we need the following constraints. When executing SPAN or RESPAN operation, the next value in sp column must be set to 1: (fspan​+frespan​)⋅(1−sp′)=0 | degree=6 When the next operation is END or RESPAN, the next value in sp column must be set 0. (fend′​+frespan′​)⋅sp′=0 | degree=5 In all other cases, the value in sp column must be copied over to the next row: (1−fspan​−frespan​−fend′​−frespan′​)⋅(sp′−sp)=0 | degree=6 Additionally, we will need to impose a boundary constraint which specifies that the first value in sp=0. Note, however, that we do not need to impose a constraint ensuring that values in sp are binary - this will follow naturally from the above constraints. Also, note that the combination of the above constraints makes it impossible to execute END or RESPAN operations right after SPAN or RESPAN operations.","breadcrumbs":"Design » Program decoder » Decoder constraints » In-span column constraints","id":"134","title":"In-span column constraints"},"135":{"body":"When we are inside a span block, values in block address columns (denoted as a) must remain the same. This can be enforced with the following constraint: sp⋅(a′−a)=0 | degree=2 Notice that this constraint does not apply when we execute any of the control flow operations. For such operations, the prover sets the value of the a column non-deterministically, except for the RESPAN operation. For the RESPAN operation the value in the a column is incremented by 8, which is enforced by a constraint described previously. Notice also that this constraint implies that when the next operation is the END operation, the value in the a column must also be copied over to the next row. This is exactly the behavior we want to enforce so that when the END operation is executed, the block address is set to the address of the current span batch.","breadcrumbs":"Design » Program decoder » Decoder constraints » Block address constraints","id":"135","title":"Block address constraints"},"136":{"body":"The group_count column (denoted as gc) is used to keep track of the number of operation groups which remains to be executed in a span block. In the beginning of a span block (i.e., when SPAN operation is executed), the prover sets the value of gc non-deterministically. This value is subsequently decremented according to the rules described below. By the time we exit the span block (i.e., when END operation is executed), the value in gc must be 0. The rules for decrementing values in the gc column are as follows: The count cannot be decremented by more than 1 in a single row. When an operation group is fully executed (which happens when h0​=0 inside a span block), the count is decremented by 1. When SPAN, RESPAN, EMIT or PUSH operations are executed, the count is decremented by 1. Note that these rules imply that the EMIT and PUSH operations cannot be the last operation in an operation group (otherwise the count would have to be decremented by 2). To simplify the description of the constraints, we will define the following variable: Δgc=gc−gc′ Using this variable, we can describe the constraints against the gc column as follows: Inside a span block, group count can either stay the same or decrease by one: sp⋅Δgc⋅(Δgc−1)=0 | degree=3 When group count is decremented inside a span block, either h0​ must be 0 (we consumed all operations in a group) or we must be executing an operation with an immediate value: sp⋅Δgc⋅(1−fimm​)⋅h0​=0 | degree=7 Notice that the above constraint does not preclude fimm​=1 and h0​=0 from being true at the same time. If this happens, op group decoding constraints (described here ) will force that the operation following the operation with an immediate value is a NOOP. When executing a SPAN, a RESPAN, or an operation with an immediate value, group count must be decremented by 1: (fspan​+frespan​+fimm​)⋅(Δgc−1)=0 | degree=6 If the next operation is either an END or a RESPAN, group count must remain the same: Δgc⋅(fend′​+frespan′​)=0 | degree=5 When an END operation is executed, group count must be 0: fend​⋅gc=0 | degree=5","breadcrumbs":"Design » Program decoder » Decoder constraints » Group count constraints","id":"136","title":"Group count constraints"},"137":{"body":"Inside a span block, register h0​ is used to keep track of operations to be executed in the current operation group. The value of this register is set by the prover non-deterministically at the time when the prover executes a SPAN or a RESPAN operation, or when processing of a new operation group within a batch starts. The picture below illustrates this. air_decoder_op_group_constraint In the above: The prover sets the value of h0​ non-deterministically at row 0. The value is set to an operation group containing operations op0 through op8. As we start executing the group, at every row we \"remove\" the least significant operation from the group. This can be done by subtracting opcode of the operation from the group, and then dividing the result by 27. By row 9 the group is fully executed. This decrements the group count and set op_index to 0 (constraints against op_index column are described in the next section). At row 10 we start executing the next group with operations op9 through op11. In this case, the prover populates h0​ with the group having its first operation (op9) already removed, and sets the op_bits registers to the value encoding op9. By row 12 this group is also fully executed. To simplify the description of the constraints, we define the following variables: op=i=0∑6​(bi​⋅2i)fsgc​=sp⋅sp′⋅(1−Δgc) op is just an opcode value implied by the values in op_bits registers. fsgc​ is a flag which is set to 1 when the group count within a span block does not change. We multiply it by sp′ to make sure the flag is 0 when we are about to end decoding of an operation batch. Note that fsgc​ flag is mutually exclusive with fspan​, frespan​, and fimm​ flags as these three operations decrement the group count. Using these variables, we can describe operation group decoding constraints as follows: When a SPAN, a RESPAN, or an operation with an immediate value is executed or when the group count does not change, the value in h0​ should be decremented by the value of the opcode in the next row. (fspan​+frespan​+fimm​+fsgc​)⋅(h0​−h0′​⋅27−op′)=0 | degree=6 Notice that when the group count does change, and we are not executing fspan​, frespan​, or fimm​ operations, no constraints are placed against h0​, and thus, the prover can populate this register non-deterministically. When we are in a span block and the next operation is END or RESPAN, the current value in h0​ column must be 0. sp⋅(fend′​+frespan′​)⋅h0​=0 | degree=6","breadcrumbs":"Design » Program decoder » Decoder constraints » Op group decoding constraints","id":"137","title":"Op group decoding constraints"},"138":{"body":"The op_index column (denoted as ox) tracks index of an operation within its operation group. It is used to ensure that the number of operations executed per group never exceeds 9. The index is zero-based, and thus, the possible set of values for ox is between 0 and 8 (both inclusive). To simplify the description of the constraints, we will define the following variables: ng=Δgc−fimm​Δox=ox′−ox The value of ng is set to 1 when we are about to start executing a new operation group (i.e., group count is decremented but we did not execute an operation with an immediate value). Using these variables, we can describe the constraints against the ox column as follows. When executing SPAN or RESPAN operations the next value of op_index must be set to 0: (fspan​+frespan​)⋅ox′=0 | degree=6 When starting a new operation group inside a span block, the next value of op_index must be set to 0. Note that we multiply by sp to exclude the cases when the group count is decremented because of SPAN or RESPAN operations: sp⋅ng⋅ox′=0 | degree=6 When inside a span block but not starting a new operation group, op_index must be incremented by 1. Note that we multiply by sp′ to exclude the cases when we are about to exit processing of an operation batch (i.e., the next operation is either END or RESPAN): sp⋅sp′⋅(1−ng)⋅(Δox−1)=0 | degree=7 Values of op_index must be in the range [0,8]. i=0∏8​(ox−i)=0 | degree=9","breadcrumbs":"Design » Program decoder » Decoder constraints » Op index constraints","id":"138","title":"Op index constraints"},"139":{"body":"Operation batch flag columns (denoted bc0​, bc1​, and bc2​) are used to specify how many operation groups are present in an operation batch. This is relevant for the last batch in a span block (or the first batch if there is only one batch in a block) as all other batches should be completely full (i.e., contain 8 operation groups). These columns are used to define the following 4 flags: fg8​=bc0​: there are 8 operation groups in the batch. fg4​=(1−bc0​)⋅bc1​⋅bc2​: there are 4 operation groups in the batch. fg2​=(1−bc0​)⋅(1−bc1​)⋅bc2​: there are 2 operation groups in the batch. fg1​=(1−bc0​)⋅bc1​⋅(1−bc2​): there is only 1 operation groups in the batch. Notice that the degree of fg8​ is 1, while the degree of the remaining flags is 3. These flags can be set to 1 only when we are executing SPAN or RESPAN operations as this is when the VM starts processing new operation batches. Also, for a given flag we need to ensure that only the specified number of operations groups are present in a batch. This can be done with the following constraints. All batch flags must be binary: bci2​−bci​=0 for i∈[0,3) | degree=2 When SPAN or RESPAN operations is executed, one of the batch flags must be set to 1. (fspan​+frespan​)−(fg1​+fg2​+fg4​+fg8​)=0 | degree=5 When neither SPAN nor RESPAN is executed, all batch flags must be set to 0. (1−(fspan​+frespan​))⋅(bc0​+bc1​+bc2​)=0 | degree=6 When we have at most 4 groups in a batch, registers h4​,...,h7​ should be set to 0's. (fg1​+fg2​+fg4​)⋅hi​=0 for i∈[4,8) | degree=4 When we have at most 2 groups in a batch, registers h2​ and h3​ should also be set to 0's. (fg1​+fg2​)⋅hi​=0 for i∈2,3 | degree=4 When we have at most 1 groups in a batch, register h1​ should also be set to 0. fg1​⋅h1​=0 | degree=4","breadcrumbs":"Design » Program decoder » Decoder constraints » Op batch flags constraints","id":"139","title":"Op batch flags constraints"},"14":{"body":"Internally, Miden VM uses rayon for parallel computations. To control the number of threads used to generate a STARK proof, you can use RAYON_NUM_THREADS environment variable.","breadcrumbs":"Introduction » Usage » Controlling parallelism","id":"14","title":"Controlling parallelism"},"140":{"body":"Op group table is used to ensure that all operation groups in a given batch are consumed before a new batch is started (i.e., via a RESPAN operation) or the execution of a span block is complete (i.e., via an END operation). The op group table is updated according to the following rules: When a new operation batch is started, we add groups from this batch to the table. To add a group to the table, we multiply the value in column p3​ by a value representing a tuple (batch_id, group_pos, group). A constraint to enforce this would look as p3′​=p3​⋅v, where v is the value representing the row to be added. Depending on the batch, we may need to add multiple groups to the table (i.e., p3′​=p3​⋅v1​⋅v2​⋅v3​...). Flags fg1​, fg2​, fg4​, and fg8​ are used to define how many groups to add. When a new operation group starts executing or when an immediate value is consumed, we remove the corresponding group from the table. To do this, we divide the value in column p3​ by a value representing a tuple (batch_id, group_pos, group). A constraint to enforce this would look as p3′​⋅u=p3​, where u is the value representing the row to be removed. To simplify constraint descriptions, we first define variables representing the rows to be added to and removed from the op group table. When a SPAN or a RESPAN operation is executed, we compute the values of the rows to be added to the op group table as follows: vi​=α0​+α1​⋅a′+α2​⋅(gc−i)+α3​⋅hi​ | degree=1 Where i∈[1,8). Thus, v1​ defines row value for group in h1​, v2​ defines row value for group h2​ etc. Note that batch address column comes from the next row of the block address column (a′). We compute the value of the row to be removed from the op group table as follows: u=α0​+α1​⋅a+α2​⋅gc+α3​⋅((h0′​⋅27+op′)⋅(1−fimm​)+s0′​⋅fpush​+h2​⋅femit​) | degree=6 In the above, the value of the group is computed as (h0′​⋅27+op′)⋅(1−fpush​)+s0′​⋅fpush​+h2​⋅femit​. This basically says that when we execute a PUSH or EMIT operation we need to remove the immediate value from the table. For PUSH, this value is at the top of the stack (column s0​) in the next row; for EMIT, it is found in h2​. However, when we are executing neither a PUSH nor EMIT operation, the value to be removed is an op group value which is a combination of values in h0​ and op_bits columns (also in the next row). Note also that value for batch address comes from the current value in the block address column (a), and the group position comes from the current value of the group count column (gc). We also define a flag which is set to 1 when a group needs to be removed from the op group table. fdg​=sp⋅Δgc | degree=2 The above says that we remove groups from the op group table whenever group count is decremented. We multiply by sp to exclude the cases when the group count is decremented due to SPAN or RESPAN operations. Using the above variables together with flags fg2​, fg4​, fg8​ defined in the previous section, we describe the constraint for updating op group table as follows (note that we do not use fg1​ flag as when a batch consists of a single group, nothing is added to the op group table): p3′​⋅(fdg​⋅u+1−fdg​)=p3​⋅(fg2​⋅v1​+fg4​⋅i=1∏3​vi​+fg8​⋅(i=1∏7​vi​)+1−(fspan​+frespan​)) The above constraint specifies that: When SPAN or RESPAN operations are executed, we add between 1 and 7 groups to the op group table; else, leave p3 untouched. When group count is decremented inside a span block, we remove a group from the op group table; else, leave p3′ untouched. The degree of this constraint is 9. In addition to the above transition constraint, we also need to impose boundary constraints against the p3​ column to make sure the first and the last value in the column is set to 1. This enforces that the op group table table starts and ends in an empty state.","breadcrumbs":"Design » Program decoder » Decoder constraints » Op group table constraints","id":"140","title":"Op group table constraints"},"141":{"body":"Miden VM is a stack machine. The stack is a push-down stack of practically unlimited depth (in practical terms, the depth will never exceed 232), but only the top 16 items are directly accessible to the VM. Items on the stack are elements in a prime field with modulus 264−232+1. To keep the constraint system for the stack manageable, we impose the following rules: All operations executed on the VM can shift the stack by at most one item. That is, the end result of an operation must be that the stack shrinks by one item, grows by one item, or the number of items on the stack stays the same. Stack depth must always be greater than or equal to 16. At the start of program execution, the stack is initialized with exactly 16 input values, all of which could be 0's. By the end of program execution, exactly 16 items must remain on the stack (again, all of them could be 0's). These items comprise the output of the program. To ensure that managing stack depth does not impose significant burden, we adopt the following rule: When the stack depth is 16, removing additional items from the stack does not change its depth. To keep the depth at 16, 0's are inserted into the deep end of the stack for each removed item.","breadcrumbs":"Design » Operand stack » Operand stack","id":"141","title":"Operand stack"},"142":{"body":"The VM allocates 19 trace columns for the stack. The layout of the columns is illustrated below. trace_layout The meaning of the above columns is as follows: s0​...s15​ are the columns representing the top 16 slots of the stack. Column b0​ contains the number of items on the stack (i.e., the stack depth). In the above picture, there are 16 items on the stacks, so b0​=16. Column b1​ contains an address of a row in the \"overflow table\" in which we'll store the data that doesn't fit into the top 16 slots. When b1​=0, it means that all stack data fits into the top 16 slots of the stack. Helper column h0​ is used to ensure that stack depth does not drop below 16. Values in this column are set by the prover non-deterministically to b0​−161​ when b0​=16, and to any other value otherwise.","breadcrumbs":"Design » Operand stack » Stack representation","id":"142","title":"Stack representation"},"143":{"body":"To keep track of the data which doesn't fit into the top 16 stack slots, we'll use an overflow table. This will be a virtual table . To represent this table, we'll use a single auxiliary column p1​. The table itself can be thought of as having 3 columns as illustrated below. overflow_table_layout The meaning of the columns is as follows: Column t0​ contains row address. Every address in the table must be unique. Column t1​ contains the value that overflowed the stack. Column t2​ contains the address of the row containing the value that overflowed the stack right before the value in the current row. For example, in the picture above, first value a overflowed the stack, then b overflowed the stack, and then value c overflowed the stack. Thus, row with value b points back to the row with value a, and row with value c points back to the row with value b. To reduce a table row to a single value, we'll compute a randomized product of column values as follows: ri​=α0​+α1​⋅t0,i​+α2​⋅t1,i​+α3​⋅t2,i​ Then, when row i is added to the table, we'll update the value in the p1​ column like so: p1′​=p1​⋅ri​ Analogously, when row i is removed from the table, we'll update the value in column p1​ like so: p1′​=ri​p1​​ The initial value of p1​ is set to 1. Thus, if by the time Miden VM finishes executing a program the table is empty (we added and then removed exactly the same set of rows), p1​ will also be equal to 1. There are a couple of other rules we'll need to enforce: We can delete a row only after the row has been inserted into the table. We can't insert a row with the same address twice into the table (even if the row was inserted and then deleted). How these are enforced will be described a bit later.","breadcrumbs":"Design » Operand stack » Overflow table","id":"143","title":"Overflow table"},"144":{"body":"If an operation adds data to the stack, we say that the operation caused a right shift. For example, PUSH and DUP operations cause a right shift. Graphically, this looks like so: stack_right_shift Here, we pushed value v17​ onto the stack. All other values on the stack are shifted by one slot to the right and the stack depth increases by 1. There is not enough space at the top of the stack for all 17 values, thus, v1​ needs to be moved to the overflow table. To do this, we need to rely on another column: k0​. This is a system column which keeps track of the current VM cycle. The value in this column is simply incremented by 1 with every step. The row we want to add to the overflow table is defined by tuple (clk,v1,0), and after it is added, the table would look like so: stack_overflow_table_post_1_right_shift The reason we use VM clock cycle as row address is that the clock cycle is guaranteed to be unique, and thus, the same row can not be added to the table twice. Let's push another item onto the stack: stack_overflow_push_2nd_item Again, as we push v18​ onto the stack, all items on the stack are shifted to the right, and now v2​ needs to be moved to the overflow table. The tuple we want to insert into the table now is (clk+1,v2,clk). After the operation, the overflow table will look like so: stack_overflow_table_post_2_right_shift Notice that t2​ for row which contains value v2​ points back to the row with address clk. Overall, during a right shift we do the following: Increment stack depth by 1. Shift stack columns s0​,...,s14​ right by 1 slot. Add a row to the overflow table described by tuple (k0​,s15​,b0​). Set the next value of b1​ to the current value of k0​. Also, as mentioned previously, the prover sets values in h0​ non-deterministically to b0​−161​.","breadcrumbs":"Design » Operand stack » Right shift","id":"144","title":"Right shift"},"145":{"body":"If an operation removes an item from the stack, we say that the operation caused a left shift. For example, a DROP operation causes a left shift. Assuming the stack is in the state we left it at the end of the previous section, graphically, this looks like so: stack_1st_left_shift Overall, during the left shift we do the following: When stack depth is greater than 16: Decrement stack depth by 1. Shift stack columns s1​,...,s15​ left by 1 slot. Remove a row from the overflow table with t0​ equal to the current value of b1​. Set the next value of s15​ to the value in t1​ of the removed overflow table row. Set the next value of b1​ to the value in t2​ of the removed overflow table row. When the stack depth is equal to 16: Keep the stack depth the same. Shift stack columns s1​,...,s15​ left by 1 slot. Set the value of s15​ to 0. Set the value to h0​ to 0 (or any other value). If the stack depth becomes (or remains) 16, the prover can set h0​ to any value (e.g., 0). But if the depth is greater than 16 the prover sets h0​ to b0​−161​.","breadcrumbs":"Design » Operand stack » Left shift","id":"145","title":"Left shift"},"146":{"body":"To simplify constraint descriptions, we'll assume that the VM exposes two binary flag values described below. Flag Degree Description fshr​ 6 When this flag is set to 1, the instruction executing on the VM is performing a \"right shift\". fshl​ 5 When this flag is set to 1, the instruction executing on the VM is performing a \"left shift\". These flags are mutually exclusive. That is, if fshl​=1, then fshr​=0 and vice versa. However, both flags can be set to 0 simultaneously. This happens when the executed instruction does not shift the stack. How these flags are computed is described here .","breadcrumbs":"Design » Operand stack » AIR Constraints","id":"146","title":"AIR Constraints"},"147":{"body":"Additionally, we'll define a flag to indicate whether the overflow table contains values. This flag will be set to 0 when the overflow table is empty, and to 1 otherwise (i.e., when stack depth >16). This flag can be computed as follows: fov​=(b0​−16)⋅h0​ | degree=2 To ensure that this flag is set correctly, we need to impose the following constraint: (1−fov​)⋅(b0​−16)=0 | degree=3 The above constraint can be satisfied only when either of the following holds: b0​=16, in which case fov​ evaluates to 0, regardless of the value of h0​. fov​=1, in which case b0​ cannot be equal to 16 (and h0​ must be set to b0​−161​).","breadcrumbs":"Design » Operand stack » Stack overflow flag","id":"147","title":"Stack overflow flag"},"148":{"body":"To make sure stack depth column b0​ is updated correctly, we need to impose the following constraints: Condition Constraint__ Description fshr​=1 b0′​=b0​+1 When the stack is shifted to the right, stack depth should be incremented by 1. fshl​=1 fov​=1 b0′​=b0​−1 When the stack is shifted to the left and the overflow table is not empty, stack depth should be decremented by 1. otherwise b0′​=b0​ In all other cases, stack depth should not change. We can combine the above constraints into a single expression as follows: b0′​−b0​+fshl​⋅fov​−fshr​=0 | degree=7","breadcrumbs":"Design » Operand stack » Stack depth constraints","id":"148","title":"Stack depth constraints"},"149":{"body":"When the stack is shifted to the right, a tuple (k0​,s15​,b1​) should be added to the overflow table. We will denote value of the row to be added to the table as follows: v=α0​+α1​⋅k0​+α2​⋅s15​+α3​⋅b1​ When the stack is shifted to the left, a tuple (b1​,s15′​,b1′​) should be removed from the overflow table. We will denote value of the row to be removed from the table as follows. u=α0​+α1​⋅b1​+α2​⋅s15′​+α3​⋅b1′​ Using the above variables, we can ensure that right and left shifts update the overflow table correctly by enforcing the following constraint: p1′​⋅(u⋅fshl​⋅fov​+1−fshl​⋅fov​)=p1​⋅(v⋅fshr​+1−fshr​) | degree=9 The above constraint reduces to the following under various flag conditions: Condition Applied constraint fshl​=1, fshr​=0, fov​=0 p1′​=p1​ fshl​=1, fshr​=0, fov​=1 p1′​⋅u=p1​ fshl​=0, fshr​=1, fov​=1 or 0 p1′​=p1​⋅v fshl​=0, fshr​=0, fov​=1 or 0 p1′​=p1​ Notice that in the case of the left shift, the constraint forces the prover to set the next values of s15​ and b1​ to values t1​ and t2​ of the row removed from the overflow table. In case of a right shift, we also need to make sure that the next value of b1​ is set to the current value of k0​. This can be done with the following constraint: fshr​⋅(b1′​−k0​)=0 | degree=7 In case of a left shift, when the overflow table is empty, we need to make sure that a 0 is \"shifted in\" from the right (i.e., s15​ is set to 0). This can be done with the following constraint: fshl​⋅(1−fov​)⋅s15′​=0 | degree=8","breadcrumbs":"Design » Operand stack » Overflow table constraints","id":"149","title":"Overflow table constraints"},"15":{"body":"Miden VM proof generation can be accelerated via GPUs. Currently, GPU acceleration is enabled only on Apple Silicon hardware (via Metal ). To compile Miden VM with Metal acceleration enabled, you can run the following command: make exec-metal Similar to make exec command, this will place the resulting miden executable into the ./target/optimized directory. Currently, GPU acceleration is applicable only to recursive proofs which can be generated using the -r flag.","breadcrumbs":"Introduction » Usage » GPU acceleration","id":"15","title":"GPU acceleration"},"150":{"body":"In addition to the constraints described above, we also need to enforce the following boundary constraints: b0​=16 at the first and at the last row of execution trace. b1​=0 at the first and at the last row of execution trace. p1​=1 at the first and at the last row of execution trace.","breadcrumbs":"Design » Operand stack » Boundary constraints","id":"150","title":"Boundary constraints"},"151":{"body":"In addition to the constraints described in the previous section, we need to impose constraints to check that each VM operation is executed correctly. For this purpose the VM exposes a set of operation-specific flags. These flags are set to 1 when a given operation is executed, and to 0 otherwise. The naming convention for these flags is fopname​. For example, fdup​ would be set to 1 when DUP operation is executed, and to 0 otherwise. Operation flags are discussed in detail in the section below . To describe how operation-specific constraints work, let's use an example with DUP operation. This operation pushes a copy of the top stack item onto the stack. The constraints we need to impose for this operation are as follows: fdup​⋅(s0′​−s0​)=0fdup​⋅(si+1′​−si​)=0 for i∈[0,15) The first constraint enforces that the top stack item in the next row is the same as the top stack item in the current row. The second constraint enforces that all stack items (starting from item 0) are shifted to the right by 1. We also need to impose all the constraints discussed in the previous section, be we omit them here. Let's write similar constraints for DUP1 operation, which pushes a copy of the second stack item onto the stack: fdup1​⋅(s0′​−s1​)=0fdup1​⋅(si+1′​−si​)=0 for i∈[0,15) It is easy to notice that while the first constraint changed, the second constraint remained the same - i.e., we are still just shifting the stack to the right. In fact, for most operations it makes sense to make a distinction between constraints unique to the operation vs. more general constraints which enforce correct behavior for the stack items not affected by the operation. In the subsequent sections we describe in detail only the former constraints, and provide high-level descriptions of the more general constraints. Specifically, we indicate how the operation affects the rest of the stack (e.g., shifts right starting from position 0).","breadcrumbs":"Design » Operand stack » Operation constraints » Stack operation constraints","id":"151","title":"Stack operation constraints"},"152":{"body":"As mentioned above, operation flags are used as selectors to enforce operation-specific constraints. That is, they turn on relevant constraints for a given operation. In total, the VM provides 88 unique operations, and thus, there are 88 operation flags (not all of them currently used). Operation flags are mutually exclusive. That is, if one flag is set to 1, all other flags are set to 0. Also, one of the flags is always guaranteed to be set to 1. To compute values of operation flags we use op bits registers located in the decoder . These registers contain binary representations of operation codes (opcodes). Each opcode consists of 7 bits, and thus, there are 7 op bits registers. We denote these registers as b0​,...,b6​. The values are computed by multiplying the op bit registers in various combinations. Notice that binary encoding down below is showed in big-endian order, so the flag bits correspond to the reverse order of the op bits registers, from b6​ to b0​. For example, the value of the flag for NOOP, which is encoded as 0000000, is computed as follows: fnoop​=(1−b6​)⋅(1−b5​)⋅(1−b4​)⋅(1−b3​)⋅(1−b2​)⋅(1−b1​)⋅(1−b0​) While the value of the DROP operation, which is encoded as 0101001 is computed as follows: fdrop​=(1−b6​)⋅b5​⋅(1−b4​)⋅b3​⋅(1−b2​)⋅(1−b1​)⋅b0​ As can be seen from above, the degree for both of these flags is 7. Since degree of constraints in Miden VM can go up to 9, this means that operation-specific constraints cannot exceed degree 2. However, there are some operations which require constraints of higher degree (e.g., 3 or even 5). To support such constraints, we adopt the following scheme. We organize the operations into 4 groups as shown below and also introduce two extra registers e0​ and e1​ for degree reduction: b6​ b5​ b4​ b3​ b2​ b1​ b0​ e0​ e1​ # of ops degree 0 x x x x x x 0 0 64 7 1 0 0 x x x - 0 0 8 6 1 0 1 x x x x 1 0 16 5 1 1 x x x - - 0 1 8 4 In the above: Operation flags for operations in the first group (with prefix 0), are computed using all 7 op bits, and thus their degree is 7. Operation flags for operations in the second group (with prefix 100), are computed using only the first 6 op bits, and thus their degree is 6. Operation flags for operations in the third group (with prefix 101), are computed using all 7 op bits. We use the extra register e0​ (which is set to b6​⋅(1−b5​)⋅b4​) to reduce the degree by 2. Thus, the degree of op flags in this group is 5. Operation flags for operations in the fourth group (with prefix 11), are computed using only the first 5 op bits. We use the extra register e1​ (which is set to b6​⋅b5​) to reduce the degree by 1. Thus, the degree of op flags in this group is 4. How operations are distributed between these 4 groups is described in the sections below.","breadcrumbs":"Design » Operand stack » Operation constraints » Operation flags","id":"152","title":"Operation flags"},"153":{"body":"This group contains 32 operations which do not shift the stack (this is almost all such operations). Since the op flag degree for these operations is 7, constraints for these operations cannot exceed degree 2. Operation Opcode value Binary encoding Operation group Flag degree NOOP 0 000_0000 System ops 7 EQZ 1 000_0001 Field ops 7 NEG 2 000_0010 Field ops 7 INV 3 000_0011 Field ops 7 INCR 4 000_0100 Field ops 7 NOT 5 000_0101 Field ops 7 FMPADD 6 000_0110 System ops 7 MLOAD 7 000_0111 I/O ops 7 SWAP 8 000_1000 Stack ops 7 CALLER 9 000_1001 System ops 7 MOVUP2 10 000_1010 Stack ops 7 MOVDN2 11 000_1011 Stack ops 7 MOVUP3 12 000_1100 Stack ops 7 MOVDN3 13 000_1101 Stack ops 7 ADVPOPW 14 000_1110 I/O ops 7 EXPACC 15 000_1111 Field ops 7 MOVUP4 16 001_0000 Stack ops 7 MOVDN4 17 001_0001 Stack ops 7 MOVUP5 18 001_0010 Stack ops 7 MOVDN5 19 001_0011 Stack ops 7 MOVUP6 20 001_0100 Stack ops 7 MOVDN6 21 001_0101 Stack ops 7 MOVUP7 22 001_0110 Stack ops 7 MOVDN7 23 001_0111 Stack ops 7 SWAPW 24 001_1000 Stack ops 7 EXT2MUL 25 001_1001 Field ops 7 MOVUP8 26 001_1010 Stack ops 7 MOVDN8 27 001_1011 Stack ops 7 SWAPW2 28 001_1100 Stack ops 7 SWAPW3 29 001_1101 Stack ops 7 SWAPDW 30 001_1110 Stack ops 7 31 001_1111 7","breadcrumbs":"Design » Operand stack » Operation constraints » No stack shift operations","id":"153","title":"No stack shift operations"},"154":{"body":"This group contains 16 operations which shift the stack to the left (i.e., remove an item from the stack). Most of left-shift operations are contained in this group. Since the op flag degree for these operations is 7, constraints for these operations cannot exceed degree 2. Operation Opcode value Binary encoding Operation group Flag degree ASSERT 32 010_0000 System ops 7 EQ 33 010_0001 Field ops 7 ADD 34 010_0010 Field ops 7 MUL 35 010_0011 Field ops 7 AND 36 010_0100 Field ops 7 OR 37 010_0101 Field ops 7 U32AND 38 010_0110 u32 ops 7 U32XOR 39 010_0111 u32 ops 7 FRIE2F4 40 010_1000 Crypto ops 7 DROP 41 010_1001 Stack ops 7 CSWAP 42 010_1010 Stack ops 7 CSWAPW 43 010_1011 Stack ops 7 MLOADW 44 010_1100 I/O ops 7 MSTORE 45 010_1101 I/O ops 7 MSTOREW 46 010_1110 I/O ops 7 FMPUPDATE 47 010_1111 System ops 7","breadcrumbs":"Design » Operand stack » Operation constraints » Left stack shift operations","id":"154","title":"Left stack shift operations"},"155":{"body":"This group contains 16 operations which shift the stack to the right (i.e., push a new item onto the stack). Most of right-shift operations are contained in this group. Since the op flag degree for these operations is 7, constraints for these operations cannot exceed degree 2. Operation Opcode value Binary encoding Operation group Flag degree PAD 48 011_0000 Stack ops 7 DUP 49 011_0001 Stack ops 7 DUP1 50 011_0010 Stack ops 7 DUP2 51 011_0011 Stack ops 7 DUP3 52 011_0100 Stack ops 7 DUP4 53 011_0101 Stack ops 7 DUP5 54 011_0110 Stack ops 7 DUP6 55 011_0111 Stack ops 7 DUP7 56 011_1000 Stack ops 7 DUP9 57 011_1001 Stack ops 7 DUP11 58 011_1010 Stack ops 7 DUP13 59 011_1011 Stack ops 7 DUP15 60 011_1100 Stack ops 7 ADVPOP 61 011_1101 I/O ops 7 SDEPTH 62 011_1110 I/O ops 7 CLK 63 011_1111 System ops 7","breadcrumbs":"Design » Operand stack » Operation constraints » Right stack shift operations","id":"155","title":"Right stack shift operations"},"156":{"body":"This group contains 8 u32 operations. These operations are grouped together because all of them require range checks. The constraints for range checks are of degree 5, however, since all these operations require them, we can define a flag with common prefix 100 to serve as a selector for the range check constraints. The value of this flag is computed as follows: fu32rc​=b6​⋅(1−b5​)⋅(1−b4​) The degree of this flag is 3, which is acceptable for a selector for degree 5 constraints. Operation Opcode value Binary encoding Operation group Flag degree U32ADD 64 100_0000 u32 ops 6 U32SUB 66 100_0010 u32 ops 6 U32MUL 68 100_0100 u32 ops 6 U32DIV 70 100_0110 u32 ops 6 U32SPLIT 72 100_1000 u32 ops 6 U32ASSERT2 74 100_1010 u32 ops 6 U32ADD3 76 100_1100 u32 ops 6 U32MADD 78 100_1110 u32 ops 6 As mentioned previously, the last bit of the opcode is not used in computation of the flag for these operations. We force this bit to always be set to 0 with the following constraint: b6​⋅(1−b5​)⋅(1−b4​)⋅b0​=0 | degree=4 Putting these operations into a group with flag degree 6 is important for two other reasons: Constraints for the U32SPLIT operation have degree 3. Thus, the degree of the op flag for this operation cannot exceed 6. Operations U32ADD3 and U32MADD shift the stack to the left. Thus, having these two operations in this group and putting them under the common prefix 10011 allows us to create a common flag for these operations of degree 5 (recall that the left-shift flag cannot exceed degree 5).","breadcrumbs":"Design » Operand stack » Operation constraints » u32 operations","id":"156","title":"u32 operations"},"157":{"body":"This group contains operations which require constraints with degree up to 3. All 7 operation bits are used for these flags. The extra e0​ column is used for degree reduction of the three high-degree bits. Operation Opcode value Binary encoding Operation group Flag degree HPERM 80 101_0000 Crypto ops 5 MPVERIFY 81 101_0001 Crypto ops 5 PIPE 82 101_0010 I/O ops 5 MSTREAM 83 101_0011 I/O ops 5 SPLIT 84 101_0100 Flow control ops 5 LOOP 85 101_0101 Flow control ops 5 SPAN 86 101_0110 Flow control ops 5 JOIN 87 101_0111 Flow control ops 5 DYN 88 101_1000 Flow control ops 5 RCOMBBASE 89 101_1001 Crypto ops 5 EMIT 90 101_1010 System ops 5 PUSH 91 101_1011 I/O ops 5 92 101_1100 5 93 101_1101 5 94 101_1110 5 95 101_1111 5 Note that the SPLIT and LOOP operations are grouped together under the common prefix 101010, and thus can have a common flag of degree 4 (using e0​ for degree reduction). This is important because both of these operations shift the stack to the left. Also, we need to make sure that extra register e0​, which is used to reduce the flag degree by 2, is set to 1 when b6​=1, b5​=0, and b4​=1: e0​−b6​⋅(1−b5​)⋅b4​=0 | degree=3","breadcrumbs":"Design » Operand stack » Operation constraints » High-degree operations","id":"157","title":"High-degree operations"},"158":{"body":"This group contains operations which require constraints with degree up to 5. Operation Opcode value Binary encoding Operation group Flag degree MRUPDATE 96 110_0000 Crypto ops 4 100 110_0100 4 SYSCALL 104 110_1000 Flow control ops 4 CALL 108 110_1100 Flow control ops 4 END 112 111_0000 Flow control ops 4 REPEAT 116 111_0100 Flow control ops 4 RESPAN 120 111_1000 Flow control ops 4 HALT 124 111_1100 Flow control ops 4 As mentioned previously, the last two bits of the opcode are not used in computation of the flag for these operations. We force these bits to always be set to 0 with the following constraints: b6​⋅b5​⋅b0​=0 | degree=3 b6​⋅b5​⋅b1​=0 | degree=3 Also, we need to make sure that extra register e1​, which is used to reduce the flag degree by 1, is set to 1 when both b6​ and b5​ columns are set to 1: e1​−b6​⋅b5​=0 | degree=2","breadcrumbs":"Design » Operand stack » Operation constraints » Very high-degree operations","id":"158","title":"Very high-degree operations"},"159":{"body":"Using the operation flags defined above, we can compute several composite flags which are used by various constraints in the VM.","breadcrumbs":"Design » Operand stack » Operation constraints » Composite flags","id":"159","title":"Composite flags"},"16":{"body":"Miden VM execution and proof generation can be accelerated via vectorized instructions. Currently, SIMD acceleration can be enabled on platforms supporting SVE and AVX2 instructions. To compile Miden VM with AVX2 acceleration enabled, you can run the following command: make exec-avx2 To compile Miden VM with SVE acceleration enabled, you can run the following command: make exec-sve This will place the resulting miden executable into the ./target/optimized directory. Similar to Metal acceleration, SVE/AVX2 acceleration is currently applicable only to recursive proofs which can be generated using the -r flag.","breadcrumbs":"Introduction » Usage » SIMD acceleration","id":"16","title":"SIMD acceleration"},"160":{"body":"The right-shift flag indicates that an operation shifts the stack to the right. This flag is computed as follows: fshr​=(1−b6​)⋅b5​⋅b4​+fu32split​+fpush​ | degree=6 In the above, (1−b6​)⋅b5​⋅b4​ evaluates to 1 for all right stack shift operations described previously. This works because all these operations have a common prefix 011. We also need to add in flags for other operations which shift the stack to the right but are not a part of the above group (e.g., PUSH operation).","breadcrumbs":"Design » Operand stack » Operation constraints » Shift right flag","id":"160","title":"Shift right flag"},"161":{"body":"The left-shift flag indicates that a given operation shifts the stack to the left. To simplify the description of this flag, we will first compute the following intermediate variables: A flag which is set to 1 when fu32add3​=1 or fu32madd​=1: fadd3_madd​=b6​⋅(1−b5​)⋅(1−b4​)⋅b3​⋅b2​ | degree=5 A flag which is set to 1 when fsplit​=1 or floop​=1: fsplit_loop​=e0​⋅(1−b3​)⋅b2​⋅(1−b1​) | degree=4 Using the above variables, we compute left-shift flag as follows: fshl​=(1−b6​)⋅b5​⋅(1−b4​)+fadd3_madd​+fsplit_loop​+frepeat​+fend​⋅h5​ | degree=5 In the above: (1−b6​)⋅b5​⋅(1−b4​) evaluates to 1 for all left stack shift operations described previously. This works because all these operations have a common prefix 010. h5​ is the helper register in the decoder which is set to 1 when we are exiting a LOOP block, and to 0 otherwise. Thus, similarly to the right-shift flag, we compute the value of the left-shift flag based on the prefix of the operation group which contains most left shift operations, and add in flag values for other operations which shift the stack to the left but are not a part of this group.","breadcrumbs":"Design » Operand stack » Operation constraints » Shift left flag","id":"161","title":"Shift left flag"},"162":{"body":"The control flow flag fctrl​ is set to 1 when a control flow operation is being executed by the VM, and to 0 otherwise. Naively, this flag can be computed as follows: fctrl​=fjoin​+fsplit​+floop​+frepeat​+fspan​+frespan​+fcall​+fsyscall​+fend​+fhalt​ | degree=6 However, this can be computed more efficiently via the common operation prefixes for the two groups of control flow operations as follows. fspan,join,split,loop​=e0​⋅(1−b3​)⋅b2​ | degree=3 fend,repeat,respan,halt​=e1​⋅b4​ | degree=2 fctrl​=fspan,join,split,loop​+fend,repeat,respan,halt​+fdyn​+fcall​+fsyscall​ | degree=5","breadcrumbs":"Design » Operand stack » Operation constraints » Control flow flag","id":"162","title":"Control flow flag"},"163":{"body":"The immediate value flag fimm​ is set to 1 when an operation has an immediate value, and 0 otherwise: fimm​=fpush​+femit​ | degree=4 Note that the ASSERT, MPVERIFY and other operations have immediate values too. However, these immediate values are not included in the MAST digest, and hence are not considered for the fimm​ flag.","breadcrumbs":"Design » Operand stack » Operation constraints » Immediate value flag","id":"163","title":"Immediate value flag"},"164":{"body":"In this section we describe the AIR constraints for Miden VM system operations.","breadcrumbs":"Design » Operand stack » System operations » System Operations","id":"164","title":"System Operations"},"165":{"body":"The NOOP operation advances the cycle counter but does not change the state of the operand stack (i.e., the depth of the stack and the values on the stack remain the same). The NOOP operation does not impose any constraints besides the ones needed to ensure that the entire state of the stack is copied over. This constraint looks like so: si′​−si​=0 for i∈[0,16) | degree=1","breadcrumbs":"Design » Operand stack » System operations » NOOP","id":"165","title":"NOOP"},"166":{"body":"Similarly to NOOP, the EMIT operation advances the cycle counter but does not change the state of the operand stack (i.e., the depth of the stack and the values on the stack remain the same). The EMIT operation does not impose any constraints besides the ones needed to ensure that the entire state of the stack is copied over. This constraint looks like so: si′​−si​=0 for i∈[0,16) | degree=1 Additionally, the prover puts EMIT's immediate value in the first user op helper register non-deterministically. The Op Group Table is responsible for ensuring that the prover sets the appropriate value.","breadcrumbs":"Design » Operand stack » System operations » EMIT","id":"166","title":"EMIT"},"167":{"body":"The ASSERT operation pops an element off the stack and checks if the popped element is equal to 1. If the element is not equal to 1, program execution fails. assert Stack transition for this operation must satisfy the following constraints: s0​−1=0 | degree=1 The effect on the rest of the stack is: Left shift starting from position 1.","breadcrumbs":"Design » Operand stack » System operations » ASSERT","id":"167","title":"ASSERT"},"168":{"body":"The FMPADD operation pops an element off the stack, adds the current value of the fmp register to it, and pushes the result back onto the stack. The diagram below illustrates this graphically. fmpadd Stack transition for this operation must satisfy the following constraints: s0′​−(s0​+fmp)=0 | degree=1 The effect on the rest of the stack is: No change starting from position 1.","breadcrumbs":"Design » Operand stack » System operations » FMPADD","id":"168","title":"FMPADD"},"169":{"body":"The FMPUPDATE operation pops an element off the stack and adds it to the current value of the fmp register. The diagram below illustrates this graphically. fmpupdate The stack transition for this operation must follow the following constraint: fmp′−(fmp+s0​)=0 | degree=1 The effect on the rest of the stack is: Left shift starting from position 1.","breadcrumbs":"Design » Operand stack » System operations » FMPUPDATE","id":"169","title":"FMPUPDATE"},"17":{"body":"Once the executable has been compiled, you can run Miden VM like so: ./target/optimized/miden [subcommand] [parameters] Currently, Miden VM can be executed with the following subcommands: run - this will execute a Miden assembly program and output the result, but will not generate a proof of execution. prove - this will execute a Miden assembly program, and will also generate a STARK proof of execution. verify - this will verify a previously generated proof of execution for a given program. compile - this will compile a Miden assembly program (i.e., build a program MAST ) and outputs stats about the compilation process. debug - this will instantiate a Miden debugger against the specified Miden assembly program and inputs. analyze - this will run a Miden assembly program against specific inputs and will output stats about its execution. repl - this will initiate the Miden REPL tool. example - this will execute a Miden assembly example program, generate a STARK proof of execution and verify it. Currently, it is possible to run blake3 and fibonacci examples. All of the above subcommands require various parameters to be provided. To get more detailed help on what is needed for a given subcommand, you can run the following: ./target/optimized/miden [subcommand] --help For example: ./target/optimized/miden prove --help To execute a program using the Miden VM there needs to be a .masm file containing the Miden Assembly code and a .inputs file containing the inputs. Enabling logging You can use MIDEN_LOG environment variable to control how much logging output the VM produces. For example: MIDEN_LOG=trace ./target/optimized/miden [subcommand] [parameters] If the level is not specified, warn level is set as default. Enable Debugging features You can use the run command with --debug parameter to enable debugging with the debug instruction such as debug.stack: ./target/optimized/miden run -a [path_to.masm] --debug","breadcrumbs":"Introduction » Usage » Running Miden VM","id":"17","title":"Running Miden VM"},"170":{"body":"The CLK operation pushes the current value of the clock cycle onto the stack. The diagram below illustrates this graphically. clk The stack transition for this operation must follow the following constraint: s0′​−clk=0 | degree=1 The effect on the rest of the stack is: Right shift starting from position 0.","breadcrumbs":"Design » Operand stack » System operations » CLK","id":"170","title":"CLK"},"171":{"body":"In this section we describe the AIR constraints for Miden VM field operations (i.e., arithmetic operations over field elements).","breadcrumbs":"Design » Operand stack » Field operations » Field Operations","id":"171","title":"Field Operations"},"172":{"body":"Assume a and b are the elements at the top of the stack. The ADD operation computes c←(a+b). The diagram below illustrates this graphically. add Stack transition for this operation must satisfy the following constraints: s0′​−(s0​+s1​)=0 | degree=1 The effect on the rest of the stack is: Left shift starting from position 2.","breadcrumbs":"Design » Operand stack » Field operations » ADD","id":"172","title":"ADD"},"173":{"body":"Assume a is the element at the top of the stack. The NEG operation computes b←(−a). The diagram below illustrates this graphically. neg Stack transition for this operation must satisfy the following constraints: s0′​+s0​=0 | degree=1 The effect on the rest of the stack is: No change starting from position 1.","breadcrumbs":"Design » Operand stack » Field operations » NEG","id":"173","title":"NEG"},"174":{"body":"Assume a and b are the elements at the top of the stack. The MUL operation computes c←(a⋅b). The diagram below illustrates this graphically. mul Stack transition for this operation must satisfy the following constraints: s0′​−s0​⋅s1​=0 | degree=2 The effect on the rest of the stack is: Left shift starting from position 2.","breadcrumbs":"Design » Operand stack » Field operations » MUL","id":"174","title":"MUL"},"175":{"body":"Assume a is the element at the top of the stack. The INV operation computes b←(a−1). The diagram below illustrates this graphically. inv Stack transition for this operation must satisfy the following constraints: 1−s0′​⋅s0​=0 | degree=2 Note that the above constraint can be satisfied only if the value in s0​=0. The effect on the rest of the stack is: No change starting from position 1.","breadcrumbs":"Design » Operand stack » Field operations » INV","id":"175","title":"INV"},"176":{"body":"Assume a is the element at the top of the stack. The INCR operation computes b←(a+1). The diagram below illustrates this graphically. incr Stack transition for this operation must satisfy the following constraints: s0′​−(s0​+1)=0 | degree=1 The effect on the rest of the stack is: No change starting from position 1.","breadcrumbs":"Design » Operand stack » Field operations » INCR","id":"176","title":"INCR"},"177":{"body":"Assume a is a binary value at the top of the stack. The NOT operation computes b←(¬a). The diagram below illustrates this graphically. not Stack transition for this operation must satisfy the following constraints: s02​−s0​=0 | degree=2 s0′​−(1−s0​)=0 | degree=1 The first constraint ensures that the value in s0​ is binary, and the second constraint ensures the correctness of the boolean NOT operation. The effect on the rest of the stack is: No change starting from position 1.","breadcrumbs":"Design » Operand stack » Field operations » NOT","id":"177","title":"NOT"},"178":{"body":"Assume a and b are binary values at the top of the stack. The AND operation computes c←(a∧b). The diagram below illustrates this graphically. and Stack transition for this operation must satisfy the following constraints: si2​−si​=0 for i∈{0,1} | degree=2 s0′​−s0​⋅s1​=0 | degree=2 The first two constraints ensure that the value in s0​ and s1​ are binary, and the third constraint ensures the correctness of the boolean AND operation. The effect on the rest of the stack is: Left shift starting from position 2.","breadcrumbs":"Design » Operand stack » Field operations » AND","id":"178","title":"AND"},"179":{"body":"Assume a and b are binary values at the top of the stack. The OR operation computes c←(a∨b) The diagram below illustrates this graphically. or Stack transition for this operation must satisfy the following constraints: si2​−si​=0 for i∈{0,1} | degree=2 s0′​−(s1​+s0​−s1​⋅s0​)=0 | degree=2 The first two constraints ensure that the value in s0​ and s1​ are binary, and the third constraint ensures the correctness of the boolean OR operation. The effect on the rest of the stack is: Left shift starting from position 2.","breadcrumbs":"Design » Operand stack » Field operations » OR","id":"179","title":"OR"},"18":{"body":"As described here the Miden VM can consume public and secret inputs. Public inputs: operand_stack - can be supplied to the VM to initialize the stack with the desired values before a program starts executing. If the number of provided input values is less than 16, the input stack will be padded with zeros to the length of 16. The maximum number of the stack inputs is limited by 16 values, providing more than 16 values will cause an error. Secret (or nondeterministic) inputs: advice_stack - can be supplied to the VM. There is no limit on how much data the advice provider can hold. This is provided as a string array where each string entry represents a field element. advice_map - is supplied as a map of 64-character hex keys, each mapped to an array of numbers. The hex keys are interpreted as 4 field elements and the arrays of numbers are interpreted as arrays of field elements. merkle_store - the Merkle store is container that allows the user to define merkle_tree, sparse_merkle_tree and partial_merkle_tree data structures. merkle_tree - is supplied as an array of 64-character hex values where each value represents a leaf (4 elements) in the tree. sparse_merkle_tree - is supplied as an array of tuples of the form (number, 64-character hex string). The number represents the leaf index and the hex string represents the leaf value (4 elements). partial_merkle_tree - is supplied as an array of tuples of the form ((number, number), 64-character hex string). The internal tuple represents the leaf depth and index at this depth, and the hex string represents the leaf value (4 elements). Check out the comparison example to see how secret inputs work. After a program finishes executing, the elements that remain on the stack become the outputs of the program. Notice that the number of values on the operand stack at the end of the program execution can not be greater than 16, otherwise the program will return an error. The truncate_stack utility procedure from the standard library could be used to conveniently truncate the stack at the end of the program.","breadcrumbs":"Introduction » Usage » Inputs","id":"18","title":"Inputs"},"180":{"body":"Assume a and b are the elements at the top of the stack. The EQ operation computes c such that c=1 if a=b, and 0 otherwise. The diagram below illustrates this graphically. eq Stack transition for this operation must satisfy the following constraints: s0′​⋅(s0​−s1​)=0 | degree=2 s0′​−(1−(s0​−s1​)⋅h0​)=0 | degree=2 To satisfy the above constraints, the prover must populate the value of helper register h0​ as follows: If s0​=s1​, set h0​=s0​−s1​1​. Otherwise, set h0​ to any value (e.g., 0). The effect on the rest of the stack is: Left shift starting from position 2.","breadcrumbs":"Design » Operand stack » Field operations » EQ","id":"180","title":"EQ"},"181":{"body":"Assume a is the element at the top of the stack. The EQZ operation computes b such that b=1 if a=0, and 0 otherwise. The diagram below illustrates this graphically. eqz Stack transition for this operation must satisfy the following constraints: s0′​⋅s0​=0 | degree=2 s0′​−(1−s0​⋅h0​)=0 | degree=2 To satisfy the above constraints, the prover must populate the value of helper register h0​ as follows: If s0​=0, set h0​=s0​1​. Otherwise, set h0​ to any value (e.g., 0). The effect on the rest of the stack is: No change starting from position 1.","breadcrumbs":"Design » Operand stack » Field operations » EQZ","id":"181","title":"EQZ"},"182":{"body":"The EXPACC operation pops top 4 elements from the top of the stack, performs a single round of exponent aggregation, and pushes the resulting 4 values onto the stack. The diagram below illustrates this graphically. expacc Stack transition for this operation must satisfy the following constraints: bit should be a binary. s0′2​−s0′​=0 | degree=2 The exp in the next frame should be the square of the exp in the current frame. s1′​−s12​=0 | degree=2 The value val in the helper register is computed correctly using the bit and exp in next and current frame respectively. h0​−((s1​−1)∗s0′​+1)=0 | degree=2 The acc in the next frame is the product of val and acc in the current frame. s2′​−s2​∗h0​=0 | degree=2 b in the next frame is the right shift of b in the current frame. s3′​−(s3​∗2+s0′​)=0 | degree=1 The effect on the rest of the stack is: No change starting from position 4.","breadcrumbs":"Design » Operand stack » Field operations » EXPACC","id":"182","title":"EXPACC"},"183":{"body":"The EXT2MUL operation pops top 4 values from the top of the stack, performs multiplication between the two extension field elements, and pushes the resulting 4 values onto the stack. The diagram below illustrates this graphically. ext2mul Stack transition for this operation must satisfy the following constraints: The first stack element should be unchanged in the next frame. s0′​−s0​=0 | degree=1 The second stack element should be unchanged in the next frame. s1′​−s1​=0 | degree=1 The third stack element should satisfy the following constraint. s2′​−(s0​+s1​)⋅(s2​+s3​)+s0​⋅s2​=0 | degree=2 The fourth stack element should satisfy the following constraint. s3′​−s1​⋅s3​+2⋅s0​⋅s2​=0 | degree=2 The effect on the rest of the stack is: No change starting from position 4.","breadcrumbs":"Design » Operand stack » Field operations » EXT2MUL","id":"183","title":"EXT2MUL"},"184":{"body":"In this section we describe semantics and AIR constraints of operations over u32 values (i.e., 32-bit unsigned integers) as they are implemented in Miden VM.","breadcrumbs":"Design » Operand stack » u32 operations » u32 Operations","id":"184","title":"u32 Operations"},"185":{"body":"Most operations described below require some number of 16-bit range checks (i.e., verifying that the value of a field element is smaller than 216). The number of required range checks varies between 2 and 4, depending on the operation. However, to simplify the constraint system, we force each relevant operation to consume exactly 4 range checks. To perform these range checks, the prover puts the values to be range-checked into helper registers h0​,...,h3​, and then updates the range checker bus column brange​ according to the LogUp construction described in the range checker documentation, using multiplicity 1 for each value. This operation is enforced via the following constraint. Note that since constraints cannot include divisions, the actual constraint which is enforced will be expressed equivalently with all denominators multiplied through, resulting in a constraint of degree 5. brange′​=brange​−(α−h0​)1​−(α−h1​)1​−(α−h2​)1​−(α−h3​)1​ | degree=5 The above is just a partial constraint as it does not show the range checker's part of the constraint, which adds the required values into the bus column. It also omits the selector flag which is used to turn this constraint on only when executing relevant operations.","breadcrumbs":"Design » Operand stack » u32 operations » Range checks","id":"185","title":"Range checks"},"186":{"body":"Another primitive which is required by most of the operations described below is checking whether four 16-bit values form a valid field element. Assume t0​, t1​, t2​, and t3​ are known to be 16-bit values, and we want to verify that 248⋅t3​+232⋅t2​+216⋅t1​+t0​ is a valid field element. For simplicity, let's denote: vhi​=216⋅t3​+t2​vlo​=216⋅t1​+t0​ We can then impose the following constraint to verify element validity: (1−m⋅(232−1−vhi​))⋅vlo​=0 | degree=3 Where m is a value set non-deterministically by the prover. The above constraint should hold only if either of the following hold: vlo​=0 vhi​=232−1 To satisfy the latter equation, the prover needs to set m=(232−1−vhi​)−1, which is possible only when vhi​=232−1. This constraint is sufficient because modulus 264−232+1 in binary representation is 32 ones, followed by 31 zeros, followed by a single one: 1111111111111111111111111111111100000000000000000000000000000001 This implies that the largest possible 64-bit value encoding a valid field element would be 32 ones, followed by 32 zeros: 1111111111111111111111111111111100000000000000000000000000000000 Thus, for a 64-bit value to encode a valid field element, either the lower 32 bits must be all zeros, or the upper 32 bits must not be all ones (which is 232−1).","breadcrumbs":"Design » Operand stack » u32 operations » Checking element validity","id":"186","title":"Checking element validity"},"187":{"body":"Assume a is the element at the top of the stack. The U32SPLIT operation computes (b,c)←a, where b contains the lower 32 bits of a, and c contains the upper 32 bits of a. The diagram below illustrates this graphically. u32split To facilitate this operation, the prover sets values in h0​,...,h3​ to 16-bit limbs of a with h0​ being the least significant limb. Thus, stack transition for this operation must satisfy the following constraints: s0​=248⋅h3​+232⋅h2​+216⋅h1​+h0​ | degree=1 s1′​=216⋅h1​+h0​ | degree=1 s0′​=216⋅h3​+h2​ | degree=1 In addition to the above constraints, we also need to verify that values in h0​,...,h3​ are smaller than 216, which we can do using 16-bit range checks as described previously . Also, we need to make sure that values in h0​,...,h3​, when combined, form a valid field element, which we can do by putting a nondeterministic value m into helper register h4​ and using the technique described here . The effect of this operation on the rest of the stack is: Right shift starting from position 1.","breadcrumbs":"Design » Operand stack » u32 operations » U32SPLIT","id":"187","title":"U32SPLIT"},"188":{"body":"Assume a and b are the elements at the top of the stack. The U32ASSERT2 verifies that both a and b are smaller than 232. The diagram below illustrates this graphically. u32assert2 To facilitate this operation, the prover sets values in h0​ and h1​ to low and high 16-bit limbs of a, and values in h2​ and h3​ to to low and high 16-bit limbs of b. Thus, stack transition for this operation must satisfy the following constraints: s0′​=216⋅h3​+h2​ | degree=1 s1′​=216⋅h1​+h0​ | degree=1 In addition to the above constraints, we also need to verify that values in h0​,...,h3​ are smaller than 216, which we can do using 16-bit range checks as described previously . The effect of this operation on the rest of the stack is: No change starting from position 0 - i.e., the state of the stack does not change.","breadcrumbs":"Design » Operand stack » u32 operations » U32ASSERT2","id":"188","title":"U32ASSERT2"},"189":{"body":"Assume a and b are the values at the top of the stack which are known to be smaller than 232. The U32ADD operation computes (c,d)←a+b, where c contains the low 32-bits of the result, and d is the carry bit. The diagram below illustrates this graphically. u32add To facilitate this operation, the prover sets values in h0​, h1​, and h2​ to 16-bit limbs of a+b with h0​ being the least significant limb. Value in h3​ is set to 0. Thus, stack transition for this operation must satisfy the following constraints: s0​+s1​=232⋅h2​+216⋅h1​+h0​ | degree=1 s0′​=h2​ | degree=1 s1′​=216⋅h1​+h0​ | degree=1 In addition to the above constraints, we also need to verify that values in h0​,...,h3​ are smaller than 216, which we can do using 16-bit range checks as described previously . The effect of this operation on the rest of the stack is: No change starting from position 2.","breadcrumbs":"Design » Operand stack » u32 operations » U32ADD","id":"189","title":"U32ADD"},"19":{"body":"In the miden/examples/fib directory, we provide a very simple Fibonacci calculator example. This example computes the 1001st term of the Fibonacci sequence. You can execute this example on Miden VM like so: ./target/optimized/miden run -a miden/examples/fib/fib.masm -n 1","breadcrumbs":"Introduction » Usage » Fibonacci example","id":"19","title":"Fibonacci example"},"190":{"body":"Assume a, b, c are the values at the top of the stack which are known to be smaller than 232. The U32ADD3 operation computes (d,e)←a+b+c, where c and d contains the low and the high 32-bits of the result respectively. The diagram below illustrates this graphically. u32add3 To facilitate this operation, the prover sets values in h0​, h1​, and h2​ to 16-bit limbs of a+b+c with h0​ being the least significant limb. Value in h3​ is set to 0. Thus, stack transition for this operation must satisfy the following constraints: s0​+s1​+s2​=232⋅h2​+216⋅h1​+h0​ | degree=1 s0′​=h2​ | degree=1 s1′​=216⋅h1​+h0​ | degree=1 In addition to the above constraints, we also need to verify that values in h0​,...,h3​ are smaller than 216, which we can do using 16-bit range checks as described previously . The effect of this operation on the rest of the stack is: Left shift starting from position 3.","breadcrumbs":"Design » Operand stack » u32 operations » U32ADD3","id":"190","title":"U32ADD3"},"191":{"body":"Assume a and b are the values at the top of the stack which are known to be smaller than 232. The U32SUB operation computes (c,d)←a−b, where c contains the 32-bit result in two's complement, and d is the borrow bit. The diagram below illustrates this graphically. u32sub To facilitate this operation, the prover sets values in h0​ and h1​ to the low and the high 16-bit limbs of a−b respectively. Values in h2​ and h3​ are set to 0. Thus, stack transition for this operation must satisfy the following constraints: s1​=s0​+s1′​+232⋅s0′​ | degree=1 s0′2​−s0′​=0 | degree=2 s1′​=216⋅h1​+h0​ | degree=1 In addition to the above constraints, we also need to verify that values in h0​,...,h3​ are smaller than 216, which we can do using 16-bit range checks as described previously . The effect of this operation on the rest of the stack is: No change starting from position 2.","breadcrumbs":"Design » Operand stack » u32 operations » U32SUB","id":"191","title":"U32SUB"},"192":{"body":"Assume a and b are the values at the top of the stack which are known to be smaller than 232. The U32MUL operation computes (c,d)←a⋅b, where c and d contain the low and the high 32-bits of the result respectively. The diagram below illustrates this graphically. u32mul To facilitate this operation, the prover sets values in h0​,...,h3​ to 16-bit limbs of a⋅b with h0​ being the least significant limb. Thus, stack transition for this operation must satisfy the following constraints: s0​⋅s1​=248⋅h3​+232⋅h2​+216⋅h1​+h0​ | degree=2 s1′​=216⋅h1​+h0​ | degree=1 s0′​=216⋅h3​+h2​ | degree=1 In addition to the above constraints, we also need to verify that values in h0​,...,h3​ are smaller than 216, which we can do using 16-bit range checks as described previously . Also, we need to make sure that values in h0​,...,h3​, when combined, form a valid field element, which we can do by putting a nondeterministic value m into helper register h4​ and using the technique described here . The effect of this operation on the rest of the stack is: No change starting from position 2.","breadcrumbs":"Design » Operand stack » u32 operations » U32MUL","id":"192","title":"U32MUL"},"193":{"body":"Assume a, b, c are the values at the top of the stack which are known to be smaller than 232. The U32MADD operation computes (d,e)←a+b⋅c, where c and d contains the low and the high 32-bits of a+b⋅c. The diagram below illustrates this graphically. u32madd To facilitate this operation, the prover sets values in h0​,...,h3​ to 16-bit limbs of a+b⋅c with h0​ being the least significant limb. Thus, stack transition for this operation must satisfy the following constraints: s0​⋅s1​+s2​=248⋅h3​+232⋅h2​+216⋅h1​+h0​ | degree=2 s1′​=216⋅h1​+h0​ | degree=1 s0′​=216⋅h3​+h2​ | degree=1 In addition to the above constraints, we also need to verify that values in h0​,...,h3​ are smaller than 216, which we can do using 16-bit range checks as described previously . Also, we need to make sure that values in h0​,...,h3​, when combined, form a valid field element, which we can do by putting a nondeterministic value m into helper register h4​ and using the technique described here . Note : that the above constraints guarantee the correctness of the operation iff a+b⋅c cannot overflow field modules (which is the case for the field with modulus 264−232+1). The effect of this operation on the rest of the stack is: Left shift starting from position 3.","breadcrumbs":"Design » Operand stack » u32 operations » U32MADD","id":"193","title":"U32MADD"},"194":{"body":"Assume a and b are the values at the top of the stack which are known to be smaller than 232. The U32DIV operation computes (c,d)←a/b, where c contains the quotient and d contains the remainder. The diagram below illustrates this graphically. u32div To facilitate this operation, the prover sets values in h0​ and h1​ to 16-bit limbs of a−c, and values in h2​ and h3​ to 16-bit limbs of b−d−1. Thus, stack transition for this operation must satisfy the following constraints: s1​=s0​⋅s1′​+s0′​ | degree=2 s1​−s1′​=216⋅h1​+h0​ | degree=1 s0​−s0′​−1=216⋅h2​+h3​ | degree=1 The second constraint enforces that s1′​≤s1​, while the third constraint enforces that s0′​216, m<216 must hold, and for short traces m216), we can do an essentially unlimited number of arbitrary 16-bit range-checks. For short traces (25> In order to add a breakpoint, the user should insert a breakpoint instruction into the MASM file. This will generate a Noop operation that will be decorated with the debug break configuration. This is a provisory solution until the source mapping is implemented. The following example will halt on the third instruction of foo: proc.foo dup dup.2 breakpoint swap add.1\nend begin exec.foo\nend","breadcrumbs":"Development tooling » Debugger » Miden Debugger","id":"27","title":"Miden Debugger"},"270":{"body":"Miden VM supports linear read-write random access memory. This memory is word-addressable, meaning, four values are located at each address, and we can read and write values to/from memory in batches of four. Each value is a field element in a 64-bit prime field with modulus 264−232+1. Memory address can be any field element. In this note we describe the rationale for selecting the above design and describe AIR constraints needed to support it. The design makes extensive use of 16-bit range checks. An efficient way of implementing such range checks is described here .","breadcrumbs":"Design » Chiplets » Memory Chiplet » Memory chiplet","id":"270","title":"Memory chiplet"},"271":{"body":"The simplest (and most efficient) alternative to the above design is contiguous write-once memory. To support such memory, we need to allocate just two trace columns as illustrated below. memory_alternative_design In the above, addr column holds memory address, and value column holds the field element representing the value stored at this address. Notice that some rows in this table are duplicated. This is because we need one row per memory access (either read or write operation). In the example above, value b was first stored at memory address 1, and then read from this address. The AIR constraints for this design are very simple. First, we need to ensure that values in the addr column either remain the same or are incremented by 1 as we move from one row to the next. This can be achieved with the following constraint: (a′−a)⋅(a′−a−1)=0 where a is the value in addr column in the current row, and a′ is the value in this column in the next row. Second, we need to make sure that if the value in the addr column didn't change, the value in the value column also remained the same (i.e., a value stored in a given address can only be set once). This can be achieved with the following constraint: (v′−v)⋅(a′−a−1)=0 where v is the value in value column at the current row, and v′ is the value in this column in the next row. As mentioned above, this approach is very efficient: each memory access requires just 2 trace cells.","breadcrumbs":"Design » Chiplets » Memory Chiplet » Alternative designs","id":"271","title":"Alternative designs"},"272":{"body":"Write-once memory is tricky to work with, and many developers may need to climb a steep learning curve before they become comfortable working in this model. Thus, ideally, we'd want to support read-write memory. To do this, we need to introduce additional columns as illustrated below. memory_read_write In the above, we added clk column, which keeps track of the clock cycle at which memory access happened. We also need to differentiate between memory reads and writes. To do this, we now use two columns to keep track of the value: old val contains the value stored at the address before the operation, and new val contains the value after the operation. Thus, if old val and new val are the same, it was a read operation. If they are different, it was a write operation. The AIR constraints needed to support the above structure are as follows. We still need to make sure memory addresses are contiguous: (a′−a)⋅(a′−a−1)=0 Whenever memory address changes, we want to make sure that old val is set to 0 (i.e., our memory is always initialized to 0). This can be done with the following constraint: (a′−a)⋅vold′​=0 On the other hand, if memory address doesn't change, we want to make sure that new val in the current row is the same as old val in the next row. This can be done with the following constraint: (1+a−a′)⋅(vnew​−vold′​)=0 Lastly, we need to make sure that for the same address values in clk column are always increasing. One way to do this is to perform a 16-bit range check on the value of (i′−i−1), where i is the reference to clk column. However, this would mean that memory operations involving the same address must happen within 65536 VM cycles from each other. This limitation would be difficult to enforce statically. To remove this limitation, we need to add two more columns as shown below: memory_limitation_diagram In the above column d0 contains the lower 16 bits of (i′−i−1) while d1 contains the upper 16 bits. The constraint needed to enforces this is as follows: (1+a−a′)⋅((i′−i−1)−(216⋅d1′​+d0′​))=0 Additionally, we need to apply 16-bit range checks to columns d0 and d1. Overall, the cost of reading or writing a single element is now 6 trace cells and 2 16-bit range-checks.","breadcrumbs":"Design » Chiplets » Memory Chiplet » Read-write memory","id":"272","title":"Read-write memory"},"273":{"body":"Requiring that memory addresses are contiguous may also be a difficult limitation to impose statically. To remove this limitation, we need to introduce one more column as shown below: memory_non_contiguous_memory In the above, the prover sets the value in the new column t to 0 when the address doesn't change, and to 1/(a′−a) otherwise. To simplify constraint description, we'll define variable n computed as follows: n=(a′−a)⋅t′ Then, to make sure the prover sets the value of t correctly, we'll impose the following constraints: n2−n=0(1−n)⋅(a′−a)=0 The above constraints ensure that n=1 whenever the address changes, and n=0 otherwise. We can then define the following constraints to make sure values in columns d0 and d1 contain either the delta between addresses or between clock cycles. Condition Constraint Comments n=1 (a′−a)−(216⋅d1′​+d0′​)=0 When the address changes, columns d0 and d1 at the next row should contain the delta between the old and the new address. n=0 (i′−i−1)−(216⋅d1′​+d0′​)=0 When the address remains the same, columns d0 and d1 at the next row should contain the delta between the old and the new clock cycle. We can combine the above constraints as follows: (n⋅(a′−a)+(1−n)⋅(i′−i−1))−(216⋅d1′​+d0′​)=0 The above constraint, in combination with 16-bit range checks against columns d0 and d1 ensure that values in addr and clk columns always increase monotonically, and also that column addr may contain duplicates, while values in clk column must be unique for a given address.","breadcrumbs":"Design » Chiplets » Memory Chiplet » Non-contiguous memory","id":"273","title":"Non-contiguous memory"},"274":{"body":"In many situations it may be desirable to assign memories to different contexts. For example, when making a cross-contract calls, the memories of the caller and the callee should be separate. That is, the caller should not be able to access the memory of the callee and vice-versa. To accommodate this feature, we need to add one more column as illustrated below. memory_context_separation This new column ctx should behave similarly to the address column: values in it should increase monotonically, and there could be breaks between them. We also need to change how the prover populates column t: If the context changes, t should be set to the inverse (c′−c), where c is a reference to column ctx. If the context remains the same but the address changes, column t should be set to the inverse of (a′−a). Otherwise, column t should be set to 0. To simplify the description of constraints, we'll define two variables n0​ and n1​ as follows: n0​=(c′−c)⋅t′n1​=(a′−a)⋅t′ Thus, n0​=1 when the context changes, and 0 otherwise. Also, (1−n0​)⋅n1​=1 when context remains the same and address changes, and 0 otherwise. To make sure the prover sets the value of column t correctly, we'll need to impose the following constraints: n02​−n0​=0(1−n0​)⋅(c′−c)=0(1−n0​)⋅(n12​−n1​)=0(1−n0​)⋅(1−n1​)⋅(a′−a)=0 We can then define the following constraints to make sure values in columns d0 and d1 contain the delta between contexts, between addresses, or between clock cycles. Condition Constraint Comments n0​=1 (c′−c)−(216⋅d1′​+d0′​)=0 When the context changes, columns d0 and d1 at the next row should contain the delta between the old and the new contexts. n0​=0 n1​=1 (a′−a)−(216⋅d1′​+d0′​)=0 When the context remains the same but the address changes, columns d0 and d1 at the next row should contain the delta between the old and the new addresses. n0​=0 n1​=0 (i′−i−1)−(216⋅d1′​+d0′​)=0 When both the context and the address remain the same, columns d0 and d1 at the next row should contain the delta between the old and the new clock cycle. We can combine the above constraints as follows: (n0​⋅(c′−c)+(1−n0​)⋅(n1​⋅(a−a′)+(1−n1​)⋅(i′−i−1)))−(216⋅d1′​+d0′​)=0 The above constraint, in combination with 16-bit range checks against columns d0 and d1 ensure that values in ctx, addr, and clk columns always increase monotonically, and also that columns ctx and addr may contain duplicates, while the values in column clk must be unique for a given combination of ctx and addr. Notice that the above constraint has degree 5.","breadcrumbs":"Design » Chiplets » Memory Chiplet » Context separation","id":"274","title":"Context separation"},"275":{"body":"While the approach described above works, it comes at significant cost. Reading or writing a single value requires 8 trace cells and 2 16-bit range checks. Assuming a single range check requires roughly 2 trace cells, the total number of trace cells needed grows to 12. This is about 6x worse the simple contiguous write-once memory described earlier. Miden VM frequently needs to deal with batches of 4 field elements, which we call words . For example, the output of Rescue Prime Optimized hash function is a single word. A single 256-bit integer value can be stored as two words (where each element contains one 32-bit value). Thus, we can optimize for this common use case by making the memory word-addressable . That is 4 field elements are located at each memory address, and we can read and write elements to/from memory in batches of four. The layout of Miden VM memory table is shown below: memory_miden_vm_layout where: s0 is a selector column which is set to 1 for read operations and 0 for write operations. s1 is a selector oclumn which is set to 1 when previously accessed memory is being read and 0 otherwise. In other words, it is set to 1 only when the context and address are the same as they were in the previous row and the s0 operation selector is set to 1 (indicating a read). ctx contains context ID. Values in this column must increase monotonically but there can be gaps between two consecutive values of up to 232. Also, two consecutive values can be the same. In AIR constraint description below, we refer to this column as c. addr contains memory address. Values in this column must increase monotonically for a given context but there can be gaps between two consecutive values of up to 232. Also, two consecutive values can be the same. In AIR constraint description below, we refer to this column as a. clk contains clock cycle at which the memory operation happened. Values in this column must increase monotonically for a given context and memory address but there can be gaps between two consecutive values of up to 232. In AIR constraint description below, we refer to this column as i. v0, v1, v2, v3 columns contain field elements stored at a given context/address/clock cycle after the memory operation. Columns d0 and d1 contain lower and upper 16 bits of the delta between two consecutive context IDs, addresses, or clock cycles. Specifically: When the context changes, these columns contain (c′−c). When the context remains the same but the address changes, these columns contain (a′−a). When both the context and the address remain the same, these columns contain (i′−i−1). Column t contains the inverse of the delta between two consecutive context IDs, addresses, or clock cycles. Specifically: When the context changes, this column contains the inverse of (c′−c). When the context remains the same but the address changes, this column contains the inverse of (a′−a). When both the context and the address remain the same, this column contains the inverse of (i′−i−1). For every memory access operation (i.e., read or write), a new row is added to the memory table. For read operations, s0 is set to 1. If neither ctx nor addr have changed, then s1 is set to 1 and the v columns are set to equal the values from the previous row. If ctx or addr have changed, then s1 is set to 0 and the v columns are initialized to 0. For write operations, the values may be different, and both selector columns s0 and s1 are set to 0. The amortized cost of reading or writing a single value is between 4 and 5 trace cells (this accounts for the trace cells needed for 16-bit range checks). Thus, from performance standpoint, this approach is roughly 2.5x worse than the simple contiguous write-once memory described earlier. However, our view is that this trade-off is worth it given that this approach provides read-write memory, context separation, and eliminates the contiguous memory requirement.","breadcrumbs":"Design » Chiplets » Memory Chiplet » Miden approach","id":"275","title":"Miden approach"},"276":{"body":"To simplify description of constraints, we'll define two variables n0​ and n1​ as follows: n0​=Δc⋅t′n1​=Δa⋅t′ Where Δc=c′−c and Δa=a′−a. To make sure the prover sets the value of column t correctly, we'll need to impose the following constraints: n02​−n0​=0 | degree=4 (1−n0​)⋅Δc=0 | degree=3 (1−n0​)⋅(n12​−n1​)=0 | degree=6 (1−n0​)⋅(1−n1​)⋅Δa=0 | degree=5 The above constraints guarantee that when context changes, n0​=1. When context remains the same but address changes, (1−n0​)⋅n1​=1. And when neither the context nor the address change, (1−n0​)⋅(1−n1​)=1. To enforce the values of the selector columns, we first require that they both contain only binary values. s02​−s0​=0 | degree=2 s12​−s1​=0 | degree=2 Then we require that s1​ is always set to 1 during read operations when the context and address did not change and to 0 in all other cases. (1−n0​)⋅(1−n1​)⋅s0′​⋅(1−s1′​)=0 | degree=6 (n0​+(1−n0​)⋅n1​+(1−s0′​))⋅s1′​=0 | degree=5 The first constraint enforces that s_1 is 1 when the operation is a read and ctx and addr are both unchanged. The second constraint enforces that when either the context changed, the address changed, or the operation is a write, then s_1 is set to 0. To enforce the values of context ID, address, and clock cycle grow monotonically as described in the previous section, we define the following constraint. (n0​⋅Δc+(1−n0​)⋅(n1​⋅Δa+(1−n1​)⋅Δi))−(216⋅d1′​+d0′​)=0 | degree=5 Where Δi=i′−i−1. In addition to this constraint, we also need to make sure that the values in registers d0​ and d1​ are less than 216, and this can be done with range checks . Next, we need to make sure that values at a given memory address are always initialized to 0. This can be done with the following constraint: s0​⋅(1−s1​)⋅vi​=0 for i∈{0,1,2,3} | degree=3 Thus, when the operation is a read and either the context changes or the address changes, values in the vi​ columns are guaranteed to be zeros. Lastly, we need to make sure that for the same context/address combination, the vi​ columns of the current row are equal to the corresponding vi​ columns of the next row. This can be done with the following constraints: s1​⋅(vi′​−vi​)=0 for i∈{0,1,2,3} | degree=2 Chiplets bus constraints Communication between the memory chiplet and the stack is accomplished via the chiplets bus bchip​. To respond to memory access requests from the stack, we need to divide the current value in bchip​ by the value representing a row in the memory table. This value can be computed as follows: vmem​=α0​+α1​⋅opmem​+α2​⋅c+α3​⋅a+α4​⋅i+j=0∑3​(αj+5​⋅vj​) Where, opmem​ is the unique operation label of the memory access operation. To ensure that values of memory table rows are included into the chiplets bus, we impose the following constraint: bchip′​=bchip​⋅vmem​ | degree=2 On the stack side, for every memory access request, a corresponding value is divided out of the bchip​ column. Specifics of how this is done are described here .","breadcrumbs":"Design » Chiplets » Memory Chiplet » AIR constraints","id":"276","title":"AIR constraints"},"277":{"body":"The kernel ROM enables executing predefined kernel procedures. These procedures are always executed in the root context and can only be accessed by a SYSCALL operation. The chiplet tracks and enforces correctness of all kernel procedure calls as well as maintaining a list of all the procedures defined for the kernel, whether they are executed or not. More background about Miden VM execution contexts can be found here .","breadcrumbs":"Design » Chiplets » Kernel ROM Chiplet » Kernel ROM chiplet","id":"277","title":"Kernel ROM chiplet"},"278":{"body":"The kernel ROM table consists of 6 columns. kernel_rom_execution_trace The meaning of columns in the above is as follows: Column s0​ specifies whether the value in the row should be included into the chiplets bus bchip​. addr is a row address column which starts out at 0 and must either remain the same or be incremented by 1 with every row. r0​,...,r3​ are contain the roots of the kernel functions. The values in these columns can change only when the value in the addr column changes. If the addr column remains the same, the values in the r columns must also remain the same.","breadcrumbs":"Design » Chiplets » Kernel ROM Chiplet » Kernel ROM trace","id":"278","title":"Kernel ROM trace"},"279":{"body":"The following constraints are required to enforce correctness of the kernel ROM trace. For convenience, let's define Δaddr=addr′−addr. The s0​ column must be binary. s02​−s0​=0 | degree=2 The value in the addr column must either stay the same or increase by 1. Δaddr⋅(1−Δaddr)=0 | degree=2 Finally, if the addr column stays the same then the kernel procedure root must not change. This can be achieved by enforcing the following constraint against each of the four procedure root columns: (1−Δaddr)⋅(ri′​−ri​)=0 | degree=2 These constraints on addr should not be applied to the very last row of the kernel ROM's execution trace, since we do not want to enforce a value that would conflict with the first row of a subsequent chiplet (or padding). Therefore we can create a special virtual flag for this constraint using the chip_s3​ selector column from the chiplets module that selects for the kernel ROM chiplet. The modified constraints which should be applied are the following: (1−chip_s3′​)⋅Δaddr⋅(1−Δaddr)=0 | degree=3 (1−chip_s3′​)⋅(1−Δaddr)⋅(ri′​−ri​)=0 | degree=3 Note: these constraints should also be multiplied by chiplets module's selector flag for the kernel ROM chiplet, as is true for all constraints in this chiplet.","breadcrumbs":"Design » Chiplets » Kernel ROM Chiplet » Constraints","id":"279","title":"Constraints"},"28":{"body":"The Miden Read–eval–print loop (REPL) is a Miden shell that allows for quick and easy debugging of Miden assembly. After the REPL gets initialized, you can execute any Miden instruction, undo executed instructions, check the state of the stack and memory at a given point, and do many other useful things! When the REPL is exited, a history.txt file is saved. One thing to note is that all the REPL native commands start with an ! to differentiate them from regular assembly instructions. Miden REPL can be started via the CLI repl command like so: ./target/optimized/miden repl It is also possible to initialize REPL with libraries. To create it with Miden standard library you need to specify -s or --stdlib subcommand, it is also possible to add a third-party library by specifying -l or --libraries subcommand with paths to .masl library files. For example: ./target/optimized/miden repl -s -l example/library.masl","breadcrumbs":"Development tooling » REPL » Miden REPL","id":"28","title":"Miden REPL"},"280":{"body":"The chiplets bus is used to keep track of all kernel function calls. To simplify the notation for describing kernel ROM constraints on the chiplets bus, we'll first define variable u, which represents how each kernel procedure in the kernel ROM's execution trace is reduced to a single value. Denoting the random values received from the verifier as α0​,α1​, etc., this can be achieved as follows. v=α0​+α1​⋅opkrom​+i=0∑3​(αi+2​⋅ri​) Where, opkrom​ is the unique operation label of the kernel procedure call operation. The request side of the constraint for the operation is enforced during program block hashing of the SYSCALL operation . To provide accessed kernel procedures to the chiplets bus, we must send the kernel procedure to the bus every time it is called, which is indicated by the s0​ column. bchip′​=bchip​⋅(s0​⋅v+1−s0​) | degree=3 Thus, when s0​=0 this reduces to bchip′​=bchip​, but when s0​=1 it becomes bchip′​=bchip​⋅u.","breadcrumbs":"Design » Chiplets » Kernel ROM Chiplet » Chiplets bus constraints","id":"280","title":"Chiplets bus constraints"},"281":{"body":"Note: Although this table is described independently, it is implemented as part of the chiplets virtual table , which combines all virtual tables required by any of the chiplets into a single master table. This kernel procedure table keeps track of all unique kernel function roots. The values in this table will be updated only when the value in the address column changes. The row value included into vtchip​ is: v=α0​+α1​⋅addr+i=0∑3​(αi+2​⋅ri​) The constraint against vtchip​ is: vtchip′​=vtchip​⋅(Δaddr⋅v+1−Δaddr) | degree=3 Thus, when Δaddr=0, the above reduces to vtchip′​=vtchip​, but when Δaddr=1, the above becomes vtchip′​=vtchip​⋅v. We also need to impose boundary constraints to make sure that running product column implementing the kernel procedure table is equal to 1 when the kernel procedure table begins and to the product of all unique kernel functions when it ends. The last boundary constraint means that the verifier only needs to know which kernel was used, but doesn't need to know which functions were invoked within the kernel. These two constraints are described as part of the chiplets virtual table constraints .","breadcrumbs":"Design » Chiplets » Kernel ROM Chiplet » Kernel procedure table constraints","id":"281","title":"Kernel procedure table constraints"},"282":{"body":"Zero knowledge virtual machines frequently make use of lookup arguments to enable performance optimizations. Miden VM uses two types of arguments: multiset checks and a multivariate lookup based on logarithmic derivatives known as LogUp. A brief introduction to multiset checks can be found here . The description of LogUp can be found here . In Miden VM, lookup arguments are used for two purposes: To prove the consistency of intermediate values that must persist between different cycles of the trace without storing the full data in the execution trace (which would require adding more columns to the trace). To prove correct interaction between two independent sections of the execution trace, e.g., between the main trace where the result of some operation is required, but would be expensive to compute, and a specialized component which can perform that operation cheaply. The first is achieved using virtual tables of data, where we add a row at some cycle in the trace and remove it at a later cycle when it is needed again. Instead of maintaining the entire table in the execution trace, multiset checks allow us to prove data consistency of this table using one running product column. The second is done by reducing each operation to a lookup value and then using a communication bus to provably connect the two sections of the trace. These communication buses can be implemented either via multiset checks or via the LogUp argument .","breadcrumbs":"Design » Lookup arguments » Lookup arguments in Miden VM","id":"282","title":"Lookup arguments in Miden VM"},"283":{"body":"Miden VM makes use of 6 virtual tables across 4 components, all of which are implemented via multiset checks : Stack: Overflow table Decoder: Block stack table Block hash table Op group table Chiplets: Chiplets virtual table , which combines the following two tables into one: Hash chiplet sibling table Kernel ROM chiplet procedure table","breadcrumbs":"Design » Lookup arguments » Virtual tables in Miden VM","id":"283","title":"Virtual tables in Miden VM"},"284":{"body":"One strategy for improving the efficiency of a zero knowledge virtual machine is to use specialized components for complex operations and have the main circuit “offload” those operations to the corresponding components by specifying inputs and outputs and allowing the proof of execution to be done by the dedicated component instead of by the main circuit. These specialized components are designed to prove the internal correctness of the execution of the operations they support. However, in isolation they cannot make any guarantees about the source of the input data or the destination of the output data. In order to prove that the inputs and outputs specified by the main circuit match the inputs and outputs provably executed in the specialized component, some kind of provable communication bus is needed. This bus is typically implemented as some kind of lookup argument, and in Miden VM in particular we use multiset checks or LogUp. Miden VM uses 2 communication buses: The chiplets bus bchip​ , which communicates with all of the chiplets (Hash, Bitwise, Memory, and Kernel ROM). It is implemented using multiset checks. The range checker bus brange​ , which facilitates requests between the stack and memory components and the range checker . It is implemented using LogUp.","breadcrumbs":"Design » Lookup arguments » Communication buses in Miden VM","id":"284","title":"Communication buses in Miden VM"},"285":{"body":"The auxiliary columns used for buses and virtual tables are computed by including information from the current row of the main execution trace into the next row of the auxiliary trace column. Thus, in order to ensure that the trace is long enough to give the auxiliary column space for its final value, a padding row may be required at the end of the trace of the component upon which the auxiliary column depends. This is true when the data in the main trace could go all the way to the end of the trace, such as in the case of the range checker.","breadcrumbs":"Design » Lookup arguments » Length of auxiliary columns for lookup arguments","id":"285","title":"Length of auxiliary columns for lookup arguments"},"286":{"body":"It is important to note that depending on the field in which we operate, an auxiliary column implementing a lookup argument may actually require more than one trace column. This is specifically true for small fields. Since Miden uses a 64-bit field, each auxiliary column needs to be represented by 2 columns to achieve ~100-bit security and by 3 columns to achieve ~128-bit security.","breadcrumbs":"Design » Lookup arguments » Cost of auxiliary columns for lookup arguments","id":"286","title":"Cost of auxiliary columns for lookup arguments"},"287":{"body":"A brief introduction to multiset checks can be found here . In Miden VM, multiset checks are used to implement virtual tables and efficient communication buses .","breadcrumbs":"Design » Lookup arguments » Multiset checks » Multiset checks","id":"287","title":"Multiset checks"},"288":{"body":"Although the multiset equality check can be thought of as comparing multiset equality between two vectors a and b, in Miden VM it is implemented as a single running product column in the following way: The running product column is initialized to a value x at the beginning of the trace. (We typically use x=1.) All values of a are multiplied into the running product column. All values of b are divided out of the running product column. If a and b were multiset equal, then the running product column will equal x at the end of the trace. Running product columns are computed using a set of random values α0​, α1​,... sent to the prover by the verifier after the prover commits to the execution trace of the program.","breadcrumbs":"Design » Lookup arguments » Multiset checks » Running product columns","id":"288","title":"Running product columns"},"289":{"body":"Virtual tables can be used to store intermediate data which is computed at one cycle and used at a different cycle. When the data is computed, the row is added to the table, and when it is used later, the row is deleted from the table. Thus, all that needs to be proved is the data consistency between the row that was added and the row that was deleted. The consistency of a virtual table can be proved with a single trace column p, which keeps a running product of rows that were inserted into and deleted from the table. This is done by reducing each row to a single value, multiplying the value into p when the row is inserted, and dividing the value out of p when the row is removed. Thus, at any step of the computation, p​ will contain a product of all rows currently in the table. The initial value of p​ is set to 1. Thus, if the table is empty by the time Miden VM finishes executing a program (we added and then removed exactly the same set of rows), the final value of p​ will also be equal to 1. The initial and final values are enforced via boundary constraints.","breadcrumbs":"Design » Lookup arguments » Multiset checks » Virtual tables","id":"289","title":"Virtual tables"},"29":{"body":"All Miden instructions mentioned in the Miden Assembly sections are valid. One can either input instructions one by one or multiple instructions in one input. For example, the below two commands will result in the same output. >> push.1\n>> push.2\n>> push.3 push.1 push.2 push.3 To execute a control flow operation, one must write the entire statement in a single line with spaces between individual operations. repeat.20 pow2\nend The above example should be written as follows in the REPL tool: repeat.20 pow2 end","breadcrumbs":"Development tooling » REPL » Miden assembly instruction","id":"29","title":"Miden assembly instruction"},"290":{"body":"To compute a product of rows, we'll first need to reduce each row to a single value. This can be done as follows. Let t0​,t1​,t2​,... be columns in the virtual table, and assume the verifier sends a set of random values α0​, α1​,... to the prover after the prover commits to the execution trace of the program. The prover reduces row i in the table to a single value ri​ as: ri​=α0​+α1​⋅t0,i​+α2​⋅t1,i​+α3​⋅t2,i​+... Then, when row i is added to the table, we'll update the value in the p column like so: p′=p⋅ri​ Analogously, when row i is removed from the table, we'll update the value in column p like so: p′=ri​p​","breadcrumbs":"Design » Lookup arguments » Multiset checks » Computing a virtual table's trace column","id":"290","title":"Computing a virtual table's trace column"},"291":{"body":"Miden VM makes use of 6 virtual tables across 4 components: Stack: Overflow table Decoder: Block stack table Block hash table Op group table Chiplets: Chiplets virtual table , which combines the following two tables into one: Hash chiplet sibling table Kernel ROM chiplet procedure table","breadcrumbs":"Design » Lookup arguments » Multiset checks » Virtual tables in Miden VM","id":"291","title":"Virtual tables in Miden VM"},"292":{"body":"A bus can be implemented as a single trace column b where a request can be sent to a specific component and a corresponding response will be sent back by that component. The values in this column contain a running product of the communication with the component as follows: Each request is “sent” by computing a lookup value from some information that's specific to the specialized component, the operation inputs, and the operation outputs, and then dividing it out of the running product column b. Each chiplet response is “sent” by computing the same lookup value from the component-specific information, inputs, and outputs, and then multiplying it into the running product column b. Thus, if the requests and responses match, and the bus column b is initialized to 1, then b will start and end with the value 1. This condition is enforced by boundary constraints on column b. Note that the order of the requests and responses does not matter, as long as they are all included in b. In fact, requests and responses for the same operation will generally occur at different cycles. Additionally, there could be multiple requests sent in the same cycle, and there could also be a response provided at the same cycle that a request is received.","breadcrumbs":"Design » Lookup arguments » Multiset checks » Communication buses via multiset checks","id":"292","title":"Communication buses via multiset checks"},"293":{"body":"These constraints can be expressed in a general way with the 2 following requirements: The lookup value must be computed using random values α0​,α1​, etc. that are provided by the verifier after the prover has committed to the main execution trace. The lookup value must include all uniquely identifying information for the component/operation and its inputs and outputs. Given an example operation opex​ with inputs i0​,...,in​ and outputs o0​,...,om​, the lookup value can be computed as follows: lookup=α0​+α1​⋅opex​+α2​⋅i0​+...+αn+2​⋅in​+αn+3​⋅o0​+...+αn+2+m​⋅om​ The constraint for sending this to the bus as a request would be: b′⋅lookup=b The constraint for sending this to the bus as a response would be: b′=b⋅lookup However, these constraints must be combined, since it's possible that requests and responses both occur during the same cycle. To combine them, let ulookup​ be the request value and let vlookup​ be the response value. These values are both computed the same way as shown above, but the data sources are different, since the input/output values used to compute ulookup​ come from the trace of the component that's \"offloading\" the computation, while the input/output values used to compute vlookup​ come from the trace of the specialized component. The final constraint can be expressed as: b′⋅ulookup​=b⋅vlookup​","breadcrumbs":"Design » Lookup arguments » Multiset checks » Communication bus constraints","id":"293","title":"Communication bus constraints"},"294":{"body":"In Miden VM, the specialized components are implemented as dedicated segments of the execution trace, which include the 3 chiplets in the Chiplets module (the hash chiplet, bitwise chiplet, and memory chiplet). Miden VM currently uses multiset checks to implement the chiplets bus bchip​ , which communicates with all of the chiplets (Hash, Bitwise, and Memory).","breadcrumbs":"Design » Lookup arguments » Multiset checks » Communication buses in Miden VM","id":"294","title":"Communication buses in Miden VM"},"295":{"body":"The description of LogUp can be found here . In MidenVM, LogUp is used to implement efficient communication buses . Using the LogUp construction instead of a simple multiset check with running products reduces the computational effort for the prover and the verifier. Given two columns a and b in the main trace where a contains duplicates and b does not (i.e. b is part of the lookup table), LogUp allows us to compute two logarithmic derivatives and check their equality. i=0∑l​(α−ai​)1​=i=0∑n​(α−bi​)mi​​ In the above: l is the number of values in a, which must be smaller than the size of the field. (The prime field used for Miden VM has modulus p=264−232+1, so l

        > push.1.2.3.4\n>> repeat.16 pow2 end\n>> u32wrapping_add >> !program\nbegin push.1.2.3.4 repeat.16 pow2 end u32wrapping_add\nend","breadcrumbs":"Development tooling » REPL » !program","id":"31","title":"!program"},"32":{"body":"The !stack command prints out the state of the stack at the last executed instruction. Since the stack always contains at least 16 elements, 16 or more elements will be printed out (even if all of them are zeros). >> push.1 push.2 push.3 push.4 push.5\n>> exp\n>> u32wrapping_mul\n>> swap\n>> eq.2\n>> assert The !stack command will print out the following state of the stack: >> !stack\n3072 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !stack","id":"32","title":"!stack"},"33":{"body":"The !mem command prints out the contents of all initialized memory locations. For each such location, the address, along with its memory values, is printed. Recall that four elements are stored at each memory address. If the memory has at least one value that has been initialized: >> !mem\n7: [1, 2, 0, 3]\n8: [5, 7, 3, 32]\n9: [9, 10, 2, 0] If the memory is not yet been initialized: >> !mem\nThe memory has not been initialized yet","breadcrumbs":"Development tooling » REPL » !mem","id":"33","title":"!mem"},"34":{"body":"The !mem[addr] command prints out memory contents at the address specified by addr. If the addr has been initialized: >> !mem[9]\n9: [9, 10, 2, 0] If the addr has not been initialized: >> !mem[87]\nMemory at address 87 is empty","breadcrumbs":"Development tooling » REPL » !mem[addr]","id":"34","title":"!mem[addr]"},"35":{"body":"The !use command prints out the list of all modules available for import. If the stdlib was added to the available libraries list !use command will print all its modules: >> !use\nModules available for importing:\nstd::collections::mmr\nstd::collections::smt\n...\nstd::mem\nstd::sys\nstd::utils Using the !use command with a module name will add the specified module to the program imports: >> !use std::math::u64 >> !program\nuse.std::math::u64 begin end","breadcrumbs":"Development tooling » REPL » !use","id":"35","title":"!use"},"36":{"body":"The !undo command reverts to the previous state of the stack and memory by dropping off the last executed assembly instruction from the program. One could use !undo as often as they want to restore the state of a stack and memory n instructions ago (provided there are n instructions in the program). The !undo command will result in an error if no remaining instructions are left in the Miden program. >> push.1 push.2 push.3\n>> push.4\n>> !stack\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> push.5\n>> !stack\n5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !undo","id":"36","title":"!undo"},"37":{"body":"In the following sections, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden VM. This documentation consists of two high-level sections: Miden assembly which provides a detailed description of Miden assembly language, which is the native language of Miden VM. Miden Standard Library which provides descriptions of all procedures available in Miden Standard Library. For info on how to run programs on Miden VM, please refer to the usage section in the introduction.","breadcrumbs":"User Documentation » User Documentation","id":"37","title":"User Documentation"},"38":{"body":"Miden assembly is a simple, low-level language for writing programs for Miden VM. It stands just above raw Miden VM instruction set, and in fact, many instructions of Miden assembly map directly to raw instructions of Miden VM. Before Miden assembly can be executed on Miden VM, it needs to be compiled into a Program MAST (Merkelized Abstract Syntax Tree) which is a binary tree of code blocks each containing raw Miden VM instructions. assembly_to_VM As compared to raw Miden VM instructions, Miden assembly has several advantages: Miden assembly is intended to be a more stable external interface for the VM. That is, while we plan to make significant changes to the underlying VM to optimize it for stability, performance etc., we intend to make very few breaking changes to Miden assembly. Miden assembly natively supports control flow expressions which the assembler automatically transforms into a program MAST. This greatly simplifies writing programs with complex execution logic. Miden assembly supports macro instructions . These instructions expand into short sequences of raw Miden VM instructions making it easier to encode common operations. Miden assembly supports procedures . These are stand-alone blocks of code which the assembler inlines into program MAST at compile time. This improves program modularity and code organization. The last two points also make Miden assembly much more concise as compared to the raw program MAST. This may be important in the blockchain context where pubic programs need to be stored on chain.","breadcrumbs":"User Documentation » Miden Assembly » Miden Assembly","id":"38","title":"Miden Assembly"},"39":{"body":"In this document we use the following terms and notations: p is the modulus of the VM's base field which is equal to 264−232+1. A binary value means a field element which is either 0 or 1. Inequality comparisons are assumed to be performed on integer representations of field elements in the range [0,p). Throughout this document, we use lower-case letters to refer to individual field elements (e.g., a). Sometimes it is convenient to describe operations over groups of elements. For these purposes we define a word to be a group of four elements. We use upper-case letters to refer to words (e.g., A). To refer to individual elements within a word, we use numerical subscripts. For example, a0​ is the first element of word A, b3​ is the last element of word B, etc.","breadcrumbs":"User Documentation » Miden Assembly » Terms and notations","id":"39","title":"Terms and notations"},"4":{"body":"This document is meant to provide an in-depth description of Miden VM. It is organized as follows: In the introduction, we provide a high-level overview of Miden VM and describe how to run simple programs. In the user documentation section, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden assembly (the native language of Miden VM). In the design section, we provide in-depth descriptions of the VM's internals, including all AIR constraints for the proving system. We also provide the rationale for settling on specific design choices. Finally, in the background material section, we provide references to materials which could be useful for learning more about STARKs - the proving system behind Miden VM.","breadcrumbs":"Introduction » Structure of this document","id":"4","title":"Structure of this document"},"40":{"body":"The design of Miden assembly tries to achieve the following goals: Miden assembly should be an easy compilation target for high-level languages. Programs written in Miden assembly should be readable, even if the code is generated by a compiler from a high-level language. Control flow should be easy to understand to help in manual inspection, formal verification, and optimization. Compilation of Miden assembly into Miden program MAST should be as straight-forward as possible. Serialization of Miden assembly into a binary representation should be as compact and as straight-forward as possible. In order to achieve the first goal, Miden assembly exposes a set of native operations over 32-bit integers and supports linear read-write memory. Thus, from the stand-point of a higher-level language compiler, Miden VM can be viewed as a regular 32-bit stack machine with linear read-write memory. In order to achieve the second and third goals, Miden assembly facilitates flow control via high-level constructs like while loops, if-else statements, and function calls with statically defined targets. Thus, for example, there are no explicit jump instructions. In order to achieve the fourth goal, Miden assembly retains direct access to the VM stack rather than abstracting it away with higher-level constructs and named variables. Lastly, in order to achieve the fifth goal, each instruction of Miden assembly can be encoded using a single byte. The resulting byte-code is simply a one-to-one mapping of instructions to their binary values.","breadcrumbs":"User Documentation » Miden Assembly » Design goals","id":"40","title":"Design goals"},"41":{"body":"A Miden assembly program is just a sequence of instructions each describing a specific directive or an operation. You can use any combination of whitespace characters to separate one instruction from another. In turn, Miden assembly instructions are just keywords which can be parameterized by zero or more parameters. The notation for specifying parameters is keyword.param1.param2 - i.e., the parameters are separated by periods. For example, push.123 instruction denotes a push operation which is parameterized by value 123. Miden assembly programs are organized into procedures. Procedures, in turn, can be grouped into modules.","breadcrumbs":"User Documentation » Miden Assembly » Code Organization » Code organization","id":"41","title":"Code organization"},"42":{"body":"A procedure can be used to encapsulate a frequently-used sequence of instructions which can later be invoked via a label. A procedure must start with a proc.

        > push.1.2.3.4\n>> repeat.16 pow2 end\n>> u32wrapping_add >> !program\nbegin push.1.2.3.4 repeat.16 pow2 end u32wrapping_add\nend","breadcrumbs":"Development tooling » REPL » !program","id":"31","title":"!program"},"32":{"body":"The !stack command prints out the state of the stack at the last executed instruction. Since the stack always contains at least 16 elements, 16 or more elements will be printed out (even if all of them are zeros). >> push.1 push.2 push.3 push.4 push.5\n>> exp\n>> u32wrapping_mul\n>> swap\n>> eq.2\n>> assert The !stack command will print out the following state of the stack: >> !stack\n3072 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !stack","id":"32","title":"!stack"},"33":{"body":"The !mem command prints out the contents of all initialized memory locations. For each such location, the address, along with its memory values, is printed. Recall that four elements are stored at each memory address. If the memory has at least one value that has been initialized: >> !mem\n7: [1, 2, 0, 3]\n8: [5, 7, 3, 32]\n9: [9, 10, 2, 0] If the memory is not yet been initialized: >> !mem\nThe memory has not been initialized yet","breadcrumbs":"Development tooling » REPL » !mem","id":"33","title":"!mem"},"34":{"body":"The !mem[addr] command prints out memory contents at the address specified by addr. If the addr has been initialized: >> !mem[9]\n9: [9, 10, 2, 0] If the addr has not been initialized: >> !mem[87]\nMemory at address 87 is empty","breadcrumbs":"Development tooling » REPL » !mem[addr]","id":"34","title":"!mem[addr]"},"35":{"body":"The !use command prints out the list of all modules available for import. If the stdlib was added to the available libraries list !use command will print all its modules: >> !use\nModules available for importing:\nstd::collections::mmr\nstd::collections::smt\n...\nstd::mem\nstd::sys\nstd::utils Using the !use command with a module name will add the specified module to the program imports: >> !use std::math::u64 >> !program\nuse.std::math::u64 begin end","breadcrumbs":"Development tooling » REPL » !use","id":"35","title":"!use"},"36":{"body":"The !undo command reverts to the previous state of the stack and memory by dropping off the last executed assembly instruction from the program. One could use !undo as often as they want to restore the state of a stack and memory n instructions ago (provided there are n instructions in the program). The !undo command will result in an error if no remaining instructions are left in the Miden program. >> push.1 push.2 push.3\n>> push.4\n>> !stack\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> push.5\n>> !stack\n5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !undo","id":"36","title":"!undo"},"37":{"body":"In the following sections, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden VM. This documentation consists of two high-level sections: Miden assembly which provides a detailed description of Miden assembly language, which is the native language of Miden VM. Miden Standard Library which provides descriptions of all procedures available in Miden Standard Library. For info on how to run programs on Miden VM, please refer to the usage section in the introduction.","breadcrumbs":"User Documentation » User Documentation","id":"37","title":"User Documentation"},"38":{"body":"Miden assembly is a simple, low-level language for writing programs for Miden VM. It stands just above raw Miden VM instruction set, and in fact, many instructions of Miden assembly map directly to raw instructions of Miden VM. Before Miden assembly can be executed on Miden VM, it needs to be compiled into a Program MAST (Merkelized Abstract Syntax Tree) which is a binary tree of code blocks each containing raw Miden VM instructions. assembly_to_VM As compared to raw Miden VM instructions, Miden assembly has several advantages: Miden assembly is intended to be a more stable external interface for the VM. That is, while we plan to make significant changes to the underlying VM to optimize it for stability, performance etc., we intend to make very few breaking changes to Miden assembly. Miden assembly natively supports control flow expressions which the assembler automatically transforms into a program MAST. This greatly simplifies writing programs with complex execution logic. Miden assembly supports macro instructions . These instructions expand into short sequences of raw Miden VM instructions making it easier to encode common operations. Miden assembly supports procedures . These are stand-alone blocks of code which the assembler inlines into program MAST at compile time. This improves program modularity and code organization. The last two points also make Miden assembly much more concise as compared to the raw program MAST. This may be important in the blockchain context where pubic programs need to be stored on chain.","breadcrumbs":"User Documentation » Miden Assembly » Miden Assembly","id":"38","title":"Miden Assembly"},"39":{"body":"In this document we use the following terms and notations: p is the modulus of the VM's base field which is equal to 264−232+1. A binary value means a field element which is either 0 or 1. Inequality comparisons are assumed to be performed on integer representations of field elements in the range [0,p). Throughout this document, we use lower-case letters to refer to individual field elements (e.g., a). Sometimes it is convenient to describe operations over groups of elements. For these purposes we define a word to be a group of four elements. We use upper-case letters to refer to words (e.g., A). To refer to individual elements within a word, we use numerical subscripts. For example, a0​ is the first element of word A, b3​ is the last element of word B, etc.","breadcrumbs":"User Documentation » Miden Assembly » Terms and notations","id":"39","title":"Terms and notations"},"4":{"body":"This document is meant to provide an in-depth description of Miden VM. It is organized as follows: In the introduction, we provide a high-level overview of Miden VM and describe how to run simple programs. In the user documentation section, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden assembly (the native language of Miden VM). In the design section, we provide in-depth descriptions of the VM's internals, including all AIR constraints for the proving system. We also provide the rationale for settling on specific design choices. Finally, in the background material section, we provide references to materials which could be useful for learning more about STARKs - the proving system behind Miden VM.","breadcrumbs":"Introduction » Structure of this document","id":"4","title":"Structure of this document"},"40":{"body":"The design of Miden assembly tries to achieve the following goals: Miden assembly should be an easy compilation target for high-level languages. Programs written in Miden assembly should be readable, even if the code is generated by a compiler from a high-level language. Control flow should be easy to understand to help in manual inspection, formal verification, and optimization. Compilation of Miden assembly into Miden program MAST should be as straight-forward as possible. Serialization of Miden assembly into a binary representation should be as compact and as straight-forward as possible. In order to achieve the first goal, Miden assembly exposes a set of native operations over 32-bit integers and supports linear read-write memory. Thus, from the stand-point of a higher-level language compiler, Miden VM can be viewed as a regular 32-bit stack machine with linear read-write memory. In order to achieve the second and third goals, Miden assembly facilitates flow control via high-level constructs like while loops, if-else statements, and function calls with statically defined targets. Thus, for example, there are no explicit jump instructions. In order to achieve the fourth goal, Miden assembly retains direct access to the VM stack rather than abstracting it away with higher-level constructs and named variables. Lastly, in order to achieve the fifth goal, each instruction of Miden assembly can be encoded using a single byte. The resulting byte-code is simply a one-to-one mapping of instructions to their binary values.","breadcrumbs":"User Documentation » Miden Assembly » Design goals","id":"40","title":"Design goals"},"41":{"body":"A Miden assembly program is just a sequence of instructions each describing a specific directive or an operation. You can use any combination of whitespace characters to separate one instruction from another. In turn, Miden assembly instructions are just keywords which can be parameterized by zero or more parameters. The notation for specifying parameters is keyword.param1.param2 - i.e., the parameters are separated by periods. For example, push.123 instruction denotes a push operation which is parameterized by value 123. Miden assembly programs are organized into procedures. Procedures, in turn, can be grouped into modules.","breadcrumbs":"User Documentation » Miden Assembly » Code Organization » Code organization","id":"41","title":"Code organization"},"42":{"body":"A procedure can be used to encapsulate a frequently-used sequence of instructions which can later be invoked via a label. A procedure must start with a proc.

        > push.1.2.3.4\n>> repeat.16 pow2 end\n>> u32wrapping_add >> !program\nbegin push.1.2.3.4 repeat.16 pow2 end u32wrapping_add\nend","breadcrumbs":"Development tooling » REPL » !program","id":"31","title":"!program"},"32":{"body":"The !stack command prints out the state of the stack at the last executed instruction. Since the stack always contains at least 16 elements, 16 or more elements will be printed out (even if all of them are zeros). >> push.1 push.2 push.3 push.4 push.5\n>> exp\n>> u32wrapping_mul\n>> swap\n>> eq.2\n>> assert The !stack command will print out the following state of the stack: >> !stack\n3072 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !stack","id":"32","title":"!stack"},"33":{"body":"The !mem command prints out the contents of all initialized memory locations. For each such location, the address, along with its memory values, is printed. Recall that four elements are stored at each memory address. If the memory has at least one value that has been initialized: >> !mem\n7: [1, 2, 0, 3]\n8: [5, 7, 3, 32]\n9: [9, 10, 2, 0] If the memory is not yet been initialized: >> !mem\nThe memory has not been initialized yet","breadcrumbs":"Development tooling » REPL » !mem","id":"33","title":"!mem"},"34":{"body":"The !mem[addr] command prints out memory contents at the address specified by addr. If the addr has been initialized: >> !mem[9]\n9: [9, 10, 2, 0] If the addr has not been initialized: >> !mem[87]\nMemory at address 87 is empty","breadcrumbs":"Development tooling » REPL » !mem[addr]","id":"34","title":"!mem[addr]"},"35":{"body":"The !use command prints out the list of all modules available for import. If the stdlib was added to the available libraries list !use command will print all its modules: >> !use\nModules available for importing:\nstd::collections::mmr\nstd::collections::smt\n...\nstd::mem\nstd::sys\nstd::utils Using the !use command with a module name will add the specified module to the program imports: >> !use std::math::u64 >> !program\nuse.std::math::u64 begin end","breadcrumbs":"Development tooling » REPL » !use","id":"35","title":"!use"},"36":{"body":"The !undo command reverts to the previous state of the stack and memory by dropping off the last executed assembly instruction from the program. One could use !undo as often as they want to restore the state of a stack and memory n instructions ago (provided there are n instructions in the program). The !undo command will result in an error if no remaining instructions are left in the Miden program. >> push.1 push.2 push.3\n>> push.4\n>> !stack\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> push.5\n>> !stack\n5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !undo","id":"36","title":"!undo"},"37":{"body":"In the following sections, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden VM. This documentation consists of two high-level sections: Miden assembly which provides a detailed description of Miden assembly language, which is the native language of Miden VM. Miden Standard Library which provides descriptions of all procedures available in Miden Standard Library. For info on how to run programs on Miden VM, please refer to the usage section in the introduction.","breadcrumbs":"User Documentation » User Documentation","id":"37","title":"User Documentation"},"38":{"body":"Miden assembly is a simple, low-level language for writing programs for Miden VM. It stands just above raw Miden VM instruction set, and in fact, many instructions of Miden assembly map directly to raw instructions of Miden VM. Before Miden assembly can be executed on Miden VM, it needs to be compiled into a Program MAST (Merkelized Abstract Syntax Tree) which is a binary tree of code blocks each containing raw Miden VM instructions. assembly_to_VM As compared to raw Miden VM instructions, Miden assembly has several advantages: Miden assembly is intended to be a more stable external interface for the VM. That is, while we plan to make significant changes to the underlying VM to optimize it for stability, performance etc., we intend to make very few breaking changes to Miden assembly. Miden assembly natively supports control flow expressions which the assembler automatically transforms into a program MAST. This greatly simplifies writing programs with complex execution logic. Miden assembly supports macro instructions . These instructions expand into short sequences of raw Miden VM instructions making it easier to encode common operations. Miden assembly supports procedures . These are stand-alone blocks of code which the assembler inlines into program MAST at compile time. This improves program modularity and code organization. The last two points also make Miden assembly much more concise as compared to the raw program MAST. This may be important in the blockchain context where pubic programs need to be stored on chain.","breadcrumbs":"User Documentation » Miden Assembly » Miden Assembly","id":"38","title":"Miden Assembly"},"39":{"body":"In this document we use the following terms and notations: p is the modulus of the VM's base field which is equal to 264−232+1. A binary value means a field element which is either 0 or 1. Inequality comparisons are assumed to be performed on integer representations of field elements in the range [0,p). Throughout this document, we use lower-case letters to refer to individual field elements (e.g., a). Sometimes it is convenient to describe operations over groups of elements. For these purposes we define a word to be a group of four elements. We use upper-case letters to refer to words (e.g., A). To refer to individual elements within a word, we use numerical subscripts. For example, a0​ is the first element of word A, b3​ is the last element of word B, etc.","breadcrumbs":"User Documentation » Miden Assembly » Terms and notations","id":"39","title":"Terms and notations"},"4":{"body":"This document is meant to provide an in-depth description of Miden VM. It is organized as follows: In the introduction, we provide a high-level overview of Miden VM and describe how to run simple programs. In the user documentation section, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden assembly (the native language of Miden VM). In the design section, we provide in-depth descriptions of the VM's internals, including all AIR constraints for the proving system. We also provide the rationale for settling on specific design choices. Finally, in the background material section, we provide references to materials which could be useful for learning more about STARKs - the proving system behind Miden VM.","breadcrumbs":"Introduction » Structure of this document","id":"4","title":"Structure of this document"},"40":{"body":"The design of Miden assembly tries to achieve the following goals: Miden assembly should be an easy compilation target for high-level languages. Programs written in Miden assembly should be readable, even if the code is generated by a compiler from a high-level language. Control flow should be easy to understand to help in manual inspection, formal verification, and optimization. Compilation of Miden assembly into Miden program MAST should be as straight-forward as possible. Serialization of Miden assembly into a binary representation should be as compact and as straight-forward as possible. In order to achieve the first goal, Miden assembly exposes a set of native operations over 32-bit integers and supports linear read-write memory. Thus, from the stand-point of a higher-level language compiler, Miden VM can be viewed as a regular 32-bit stack machine with linear read-write memory. In order to achieve the second and third goals, Miden assembly facilitates flow control via high-level constructs like while loops, if-else statements, and function calls with statically defined targets. Thus, for example, there are no explicit jump instructions. In order to achieve the fourth goal, Miden assembly retains direct access to the VM stack rather than abstracting it away with higher-level constructs and named variables. Lastly, in order to achieve the fifth goal, each instruction of Miden assembly can be encoded using a single byte. The resulting byte-code is simply a one-to-one mapping of instructions to their binary values.","breadcrumbs":"User Documentation » Miden Assembly » Design goals","id":"40","title":"Design goals"},"41":{"body":"A Miden assembly program is just a sequence of instructions each describing a specific directive or an operation. You can use any combination of whitespace characters to separate one instruction from another. In turn, Miden assembly instructions are just keywords which can be parameterized by zero or more parameters. The notation for specifying parameters is keyword.param1.param2 - i.e., the parameters are separated by periods. For example, push.123 instruction denotes a push operation which is parameterized by value 123. Miden assembly programs are organized into procedures. Procedures, in turn, can be grouped into modules.","breadcrumbs":"User Documentation » Miden Assembly » Code Organization » Code organization","id":"41","title":"Code organization"},"42":{"body":"A procedure can be used to encapsulate a frequently-used sequence of instructions which can later be invoked via a label. A procedure must start with a proc.

        > push.1.2.3.4\n>> repeat.16 pow2 end\n>> u32wrapping_add >> !program\nbegin push.1.2.3.4 repeat.16 pow2 end u32wrapping_add\nend","breadcrumbs":"Development tooling » REPL » !program","id":"31","title":"!program"},"32":{"body":"The !stack command prints out the state of the stack at the last executed instruction. Since the stack always contains at least 16 elements, 16 or more elements will be printed out (even if all of them are zeros). >> push.1 push.2 push.3 push.4 push.5\n>> exp\n>> u32wrapping_mul\n>> swap\n>> eq.2\n>> assert The !stack command will print out the following state of the stack: >> !stack\n3072 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !stack","id":"32","title":"!stack"},"33":{"body":"The !mem command prints out the contents of all initialized memory locations. For each such location, the address, along with its memory values, is printed. Recall that four elements are stored at each memory address. If the memory has at least one value that has been initialized: >> !mem\n7: [1, 2, 0, 3]\n8: [5, 7, 3, 32]\n9: [9, 10, 2, 0] If the memory is not yet been initialized: >> !mem\nThe memory has not been initialized yet","breadcrumbs":"Development tooling » REPL » !mem","id":"33","title":"!mem"},"34":{"body":"The !mem[addr] command prints out memory contents at the address specified by addr. If the addr has been initialized: >> !mem[9]\n9: [9, 10, 2, 0] If the addr has not been initialized: >> !mem[87]\nMemory at address 87 is empty","breadcrumbs":"Development tooling » REPL » !mem[addr]","id":"34","title":"!mem[addr]"},"35":{"body":"The !use command prints out the list of all modules available for import. If the stdlib was added to the available libraries list !use command will print all its modules: >> !use\nModules available for importing:\nstd::collections::mmr\nstd::collections::smt\n...\nstd::mem\nstd::sys\nstd::utils Using the !use command with a module name will add the specified module to the program imports: >> !use std::math::u64 >> !program\nuse.std::math::u64 begin end","breadcrumbs":"Development tooling » REPL » !use","id":"35","title":"!use"},"36":{"body":"The !undo command reverts to the previous state of the stack and memory by dropping off the last executed assembly instruction from the program. One could use !undo as often as they want to restore the state of a stack and memory n instructions ago (provided there are n instructions in the program). The !undo command will result in an error if no remaining instructions are left in the Miden program. >> push.1 push.2 push.3\n>> push.4\n>> !stack\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> push.5\n>> !stack\n5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 >> !undo\n3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0","breadcrumbs":"Development tooling » REPL » !undo","id":"36","title":"!undo"},"37":{"body":"In the following sections, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden VM. This documentation consists of two high-level sections: Miden assembly which provides a detailed description of Miden assembly language, which is the native language of Miden VM. Miden Standard Library which provides descriptions of all procedures available in Miden Standard Library. For info on how to run programs on Miden VM, please refer to the usage section in the introduction.","breadcrumbs":"User Documentation » User Documentation","id":"37","title":"User Documentation"},"38":{"body":"Miden assembly is a simple, low-level language for writing programs for Miden VM. It stands just above raw Miden VM instruction set, and in fact, many instructions of Miden assembly map directly to raw instructions of Miden VM. Before Miden assembly can be executed on Miden VM, it needs to be compiled into a Program MAST (Merkelized Abstract Syntax Tree) which is a binary tree of code blocks each containing raw Miden VM instructions. assembly_to_VM As compared to raw Miden VM instructions, Miden assembly has several advantages: Miden assembly is intended to be a more stable external interface for the VM. That is, while we plan to make significant changes to the underlying VM to optimize it for stability, performance etc., we intend to make very few breaking changes to Miden assembly. Miden assembly natively supports control flow expressions which the assembler automatically transforms into a program MAST. This greatly simplifies writing programs with complex execution logic. Miden assembly supports macro instructions . These instructions expand into short sequences of raw Miden VM instructions making it easier to encode common operations. Miden assembly supports procedures . These are stand-alone blocks of code which the assembler inlines into program MAST at compile time. This improves program modularity and code organization. The last two points also make Miden assembly much more concise as compared to the raw program MAST. This may be important in the blockchain context where pubic programs need to be stored on chain.","breadcrumbs":"User Documentation » Miden Assembly » Miden Assembly","id":"38","title":"Miden Assembly"},"39":{"body":"In this document we use the following terms and notations: p is the modulus of the VM's base field which is equal to 264−232+1. A binary value means a field element which is either 0 or 1. Inequality comparisons are assumed to be performed on integer representations of field elements in the range [0,p). Throughout this document, we use lower-case letters to refer to individual field elements (e.g., a). Sometimes it is convenient to describe operations over groups of elements. For these purposes we define a word to be a group of four elements. We use upper-case letters to refer to words (e.g., A). To refer to individual elements within a word, we use numerical subscripts. For example, a0​ is the first element of word A, b3​ is the last element of word B, etc.","breadcrumbs":"User Documentation » Miden Assembly » Terms and notations","id":"39","title":"Terms and notations"},"4":{"body":"This document is meant to provide an in-depth description of Miden VM. It is organized as follows: In the introduction, we provide a high-level overview of Miden VM and describe how to run simple programs. In the user documentation section, we provide developer-focused documentation useful to those who want to develop on Miden VM or build compilers from higher-level languages to Miden assembly (the native language of Miden VM). In the design section, we provide in-depth descriptions of the VM's internals, including all AIR constraints for the proving system. We also provide the rationale for settling on specific design choices. Finally, in the background material section, we provide references to materials which could be useful for learning more about STARKs - the proving system behind Miden VM.","breadcrumbs":"Introduction » Structure of this document","id":"4","title":"Structure of this document"},"40":{"body":"The design of Miden assembly tries to achieve the following goals: Miden assembly should be an easy compilation target for high-level languages. Programs written in Miden assembly should be readable, even if the code is generated by a compiler from a high-level language. Control flow should be easy to understand to help in manual inspection, formal verification, and optimization. Compilation of Miden assembly into Miden program MAST should be as straight-forward as possible. Serialization of Miden assembly into a binary representation should be as compact and as straight-forward as possible. In order to achieve the first goal, Miden assembly exposes a set of native operations over 32-bit integers and supports linear read-write memory. Thus, from the stand-point of a higher-level language compiler, Miden VM can be viewed as a regular 32-bit stack machine with linear read-write memory. In order to achieve the second and third goals, Miden assembly facilitates flow control via high-level constructs like while loops, if-else statements, and function calls with statically defined targets. Thus, for example, there are no explicit jump instructions. In order to achieve the fourth goal, Miden assembly retains direct access to the VM stack rather than abstracting it away with higher-level constructs and named variables. Lastly, in order to achieve the fifth goal, each instruction of Miden assembly can be encoded using a single byte. The resulting byte-code is simply a one-to-one mapping of instructions to their binary values.","breadcrumbs":"User Documentation » Miden Assembly » Design goals","id":"40","title":"Design goals"},"41":{"body":"A Miden assembly program is just a sequence of instructions each describing a specific directive or an operation. You can use any combination of whitespace characters to separate one instruction from another. In turn, Miden assembly instructions are just keywords which can be parameterized by zero or more parameters. The notation for specifying parameters is keyword.param1.param2 - i.e., the parameters are separated by periods. For example, push.123 instruction denotes a push operation which is parameterized by value 123. Miden assembly programs are organized into procedures. Procedures, in turn, can be grouped into modules.","breadcrumbs":"User Documentation » Miden Assembly » Code Organization » Code organization","id":"41","title":"Code organization"},"42":{"body":"A procedure can be used to encapsulate a frequently-used sequence of instructions which can later be invoked via a label. A procedure must start with a proc.

        Procedures

    Finally, a procedure cannot contain solely any number of advice injectors, emit, debug and trace instructions. In other words, it must contain at least one instruction which is not in the aforementioned list.

    Dynamic procedure invocation

    -

    It is also possible to invoke procedures dynamically - i.e., without specifying target procedure labels at compile time. Unlike static procedure invocation, recursion is technically possible using dynamic invocation, but dynamic invocation is more expensive, and has less available operand stack capacity for procedure arguments, as 4 elements are required for the MAST root of the callee. There are two instructions, dynexec and dyncall, which can be used to execute dynamically-specified code targets. Both instructions expect the MAST root of the target to be provided via the stack. The difference between dynexec and dyncall corresponds to the difference between exec and call, see the documentation on procedure invocation semantics for more detail.

    -

    Dynamic code execution in the same context is achieved by setting the top elements of the stack to the hash of the dynamic code block and then executing the dynexec or dyncall instruction. You can obtain the hash of a procedure in the current program, by name, using the procref instruction. See the following example of pairing the two:

    -
    procref.foo
    +

    It is also possible to invoke procedures dynamically - i.e., without specifying target procedure labels at compile time. A procedure can only call itself using dynamic invocation. There are two instructions, dynexec and dyncall, which can be used to execute dynamically-specified code targets. Both instructions expect the MAST root of the target to be stored in memory, and the memory address of the MAST root to be on the top of the stack. The difference between dynexec and dyncall corresponds to the difference between exec and call, see the documentation on procedure invocation semantics for more details.

    +

    Dynamic code execution in the same context is achieved by setting the top element of the stack to the memory address where the hash of the dynamic code block is stored, and then executing the dynexec or dyncall instruction. You can obtain the hash of a procedure in the current program, by name, using the procref instruction. See the following example of pairing the two:

    +
    # Retrieve the hash of `foo`, store it at `ADDR`, and push `ADDR` on top of the stack
    +procref.foo mem_storew.ADDR dropw push.ADDR
    +
    +# Execute `foo` dynamically
     dynexec
     

    During assembly, the procref.foo instruction is compiled to a push.HASH, where HASH is the hash of the MAST root of the foo procedure.

    During execution of the dynexec instruction, the VM does the following:

      -
    1. Reads, but does not consume, the top 4 elements of the stack to get the hash of the dynamic target (i.e. the operand stack is left unchanged).
    2. -
    3. Load the code block referenced by the hash, or trap if no such MAST root is known.
    4. -
    5. Execute the loaded code block
    6. +
    7. Read the top stack element , and read the memory word at address (the hash of the dynamic target),
    8. +
    9. Shift the stack left by one element,
    10. +
    11. Load the code block referenced by the hash, or trap if no such MAST root is known,
    12. +
    13. Execute the loaded code block.

    The dyncall instruction is used the same way, with the difference that it involves a context switch to a new context when executing the referenced block, and switching back to the calling context once execution of the callee completes.

    -
    -

    Note: In both cases, the stack is left unchanged. Therefore, if the dynamic code is intended to manipulate the stack, it should start by either dropping or moving the code block hash from the top of the stack.

    -

    Modules

    A module consists of one or more procedures. There are two types of modules: library modules and executable modules (also called programs).

    Library modules

    diff --git a/user_docs/assembly/execution_contexts.html b/user_docs/assembly/execution_contexts.html index e0667221e2..3dd879ddd4 100644 --- a/user_docs/assembly/execution_contexts.html +++ b/user_docs/assembly/execution_contexts.html @@ -255,7 +255,11 @@

    When a procedure is invoked via a call, dyncall, or a syscall instruction, the following happens:

    • Execution moves into a different context. In case of the call and dyncall instructions, a new user context is created. In case of a syscall instruction, the execution moves back into the root context.
    • -
    • All stack items beyond the 16th item get "hidden" from the invoked procedure. That is, from the standpoint of the invoked procedure, the initial stack depth is set to 16.
    • +
    • All stack items beyond the 16th item get "hidden" from the invoked procedure. That is, from the standpoint of the invoked procedure, the initial stack depth is set to 16. +
        +
      • Note that for dyncall, the stack is shifted left by one element before being set to 16.
      • +
      +

    When the callee returns, the following happens: