Skip to content

Commit

Permalink
deploy: 2b96b85
Browse files Browse the repository at this point in the history
  • Loading branch information
plafer committed Nov 1, 2024
1 parent fcaed01 commit e58fbf8
Show file tree
Hide file tree
Showing 10 changed files with 140 additions and 72 deletions.
Binary file modified assets/design/decoder/decoder_dyn_operation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 19 additions & 15 deletions design/decoder/constraints.html

Large diffs are not rendered by default.

33 changes: 27 additions & 6 deletions design/decoder/main.html
Original file line number Diff line number Diff line change
Expand Up @@ -485,16 +485,37 @@ <h4 id="span-operation"><a class="header" href="#span-operation">SPAN operation<
<li>Sets the <code>op_index</code> register to <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span>.</li>
</ol>
<h4 id="dyn-operation"><a class="header" href="#dyn-operation">DYN operation</a></h4>
<p>Before a <code>DYN</code> operation is executed by the VM, the prover populates <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">...</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">7</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> registers with <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6444em;"></span><span class="mord">0</span></span></span></span> as shown in the diagram below.</p>
<p><img src="../../assets/design/decoder/decoder_dyn_operation.png" alt="decoder_dyn_operation" /></p>
<p>In the above diagram, <code>blk</code> is the ID of the <em>dyn</em> block which is about to be executed. <code>blk</code> is also the address of the hasher row in the auxiliary hasher table. <code>prnt</code> is the ID of the block's parent.</p>
<p>In the above diagram, <code>blk</code> is the ID of the <em>dyn</em> block which is about to be executed. <code>blk</code> is also the address of the hasher row in the auxiliary hasher table. <code>p_addr</code> is the ID of the block's parent.</p>
<p>When the VM executes a <code>DYN</code> operation, it does the following:</p>
<ol>
<li>Adds a tuple <code>(blk, prnt, 0, 0...)</code> to the block stack table.</li>
<li>Gets the hash of the dynamic code block <code>dynamic_block_hash</code> from the top four elements of the stack.</li>
<li>Adds the tuple <code>(blk, dynamic_block_hash, 0, 0)</code> to the block hash table.</li>
<li>Initiates a 2-to-1 hash computation in the hash chiplet (as described <a href="#simple-2-to-1-hash">here</a>) using <code>blk</code> as row address in the auxiliary hashing table and <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">...</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">7</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> as input values.</li>
<li>Adds a tuple <code>(blk, p_addr, 0, 0...)</code> to the block stack table.</li>
<li>Sends a memory read request to the memory chiplet, using <code>s0</code> as the memory address. The result <code>hash of callee</code> is placed in the decoder hasher trace at <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>.</li>
<li>Adds the tuple <code>(blk, hash of callee, 0, 0)</code> to the block hash table.</li>
<li>Initiates a 2-to-1 hash computation in the hash chiplet (as described <a href="#simple-2-to-1-hash">here</a>) using <code>blk</code> as row address in the auxiliary hashing table and <code>[ZERO; 8]</code> as input values.</li>
<li>Performs a stack left shift
<ul>
<li>Above <code>s16</code> was pulled from the stack overflow table if present; otherwise set to <code>0</code>.</li>
</ul>
</li>
</ol>
<p>Note that unlike <code>DYNCALL</code>, the <code>fmp</code>, <code>ctx</code>, <code>in_syscall</code> and <code>fn_hash</code> registers are unchanged.</p>
<h4 id="dyncall-operation"><a class="header" href="#dyncall-operation">DYNCALL operation</a></h4>
<p><img src="../../assets/design/decoder/decoder_dyncall_operation.png" alt="decoder_dyncall_operation" /></p>
<p>In the above diagram, <code>blk</code> is the ID of the <em>dyn</em> block which is about to be executed. <code>blk</code> is also the address of the hasher row in the auxiliary hasher table. <code>p_addr</code> is the ID of the block's parent.</p>
<p>When the VM executes a <code>DYNCALL</code> operation, it does the following:</p>
<ol>
<li>Adds a tuple <code>(blk, p_addr, 0, ctx, fmp, b_0, b_1, fn_hash[0..3])</code> to the block stack table.</li>
<li>Sends a memory read request to the memory chiplet, using <code>s0</code> as the memory address. The result <code>hash of callee</code> is placed in the decoder hasher trace at <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>.</li>
<li>Adds the tuple <code>(blk, hash of callee, 0, 0)</code> to the block hash table.</li>
<li>Initiates a 2-to-1 hash computation in the hash chiplet (as described <a href="#simple-2-to-1-hash">here</a>) using <code>blk</code> as row address in the auxiliary hashing table and <code>[ZERO; 8]</code> as input values.</li>
<li>Performs a stack left shift
<ul>
<li>Above <code>s16</code> was pulled from the stack overflow table if present; otherwise set to <code>0</code>.</li>
</ul>
</li>
</ol>
<p>Similar to <code>CALL</code>, <code>DYNCALL</code> resets the <code>fmp</code>, sets up a new <code>ctx</code>, and sets the <code>fn_hash</code> registers to the callee hash. <code>in_syscall</code> needs to be 0, since calls are not allowed during a syscall.</p>
<h4 id="end-operation"><a class="header" href="#end-operation">END operation</a></h4>
<p>Before an <code>END</code> operation is executed by the VM, the prover populates <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">0</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">...</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">3</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> registers with the hash of the block which is about to end. The prover also sets values in <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">4</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> and <span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8444em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">5</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span> registers as follows:</p>
<ul>
Expand Down
Loading

0 comments on commit e58fbf8

Please sign in to comment.