Triton VM <p>Triton VM is a STARK engine, featuring a virtual machine, a prover, and a verifier.</p> 2024-04-16T16:59:07+00:00 announcing Triton VM v0.40.0 jfs 2024-04-16 2024-04-16 17 <p><a href="" rel="noopener noreferrer">Triton VM v0.40.0</a> is now live. The main highlights are:</p> <h1>Performance</h1> <p>This release fixes a previously unknown performance bottleneck when proving programs that perform a lot of RAM I/O. One such program is Triton VM’s very own recursive verifier, making this performance boost mission critical.</p> <p>As another perfomance highlight, Triton VM now consumes considerably less RAM when proving the correct execution of a program.</p> <h1>Profiling</h1> <p>The profiler for Triton assembly programs now reports not only the clock cycle contribution of any encountered subroutine, but the contribution to any of parts critical for prover performance. On any Triton VM program, you can execute <code>.profile()</code> to get the new report. The <code>Display</code> implementation of that report gives you a markdown table listing all the new goodies.</p> <h1>Full Changelog</h1> <h3>✨ Features</h3> <ul> <li>(!) Generate profiles despite unfinished tasks (<a href="" rel="noopener noreferrer">f7ebd2cb</a>)</li> <li>(!) Streamline accessing AET’s heights (<a href="" rel="noopener noreferrer">3f3a9fd1</a>)</li> <li>(!) Track all relevant tables in VM profiler (<a href="" rel="noopener noreferrer">fa38fa8b</a>)</li> </ul> <h3>🐛 Bug Fixes</h3> <ul> <li>(!) Don’t treat randomizer polynomial special (<a href="" rel="noopener noreferrer">9bbe963b</a>)</li> </ul> <h3>⚡️ Performance</h3> <ul> <li>Minimize squeezes for combination weights (<a href="" rel="noopener noreferrer">50b803c7</a>)</li> <li>Re-organize prover steps (<a href="" rel="noopener noreferrer">86a7799f</a>)</li> <li><em>(test)</em> Use minimal size for quotient domain (<a href="" rel="noopener noreferrer">727ff8ec</a>)</li> <li>Use faster polynomial coset evaluation (<a href="" rel="noopener noreferrer">29849abe</a>)</li> <li>Compute Bézout coefficients faster (<a href="" rel="noopener noreferrer">652b7e9c</a>)</li> </ul> <h3>📚 Documentation</h3> <ul> <li>Add rationale for performed DEEP updates (<a href="" rel="noopener noreferrer">74814884</a>)</li> <li>Update documentation of <code>MasterTable</code> (<a href="" rel="noopener noreferrer">d5c2049c</a>)</li> <li>Describe computation of Bézout coefficients (<a href="" rel="noopener noreferrer">06123843</a>)</li> </ul> <h3>⚙️ Miscellaneous</h3> <ul> <li>Use fewer glob <code>use</code>s (<a href="" rel="noopener noreferrer">9ca39513</a>)</li> <li>(!) <em>(circuit)</em> Use challenge’s index (<a href="" rel="noopener noreferrer">e05e3ff3</a>)</li> <li>(!) <em>(circuit)</em> No <code>Challenges</code> in <code>evaluate</code> (<a href="" rel="noopener noreferrer">15a8cd7f</a>)</li> <li>Use constant “lookup table height” more (<a href="" rel="noopener noreferrer">22834b03</a>)</li> <li>Benchmark Bézout coefficient computation (<a href="" rel="noopener noreferrer">ab135be4</a>)</li> </ul> <h3>♻️ Refactor</h3> <ul> <li>Deprecate method <code>num_quotients()</code> (<a href="" rel="noopener noreferrer">363ae773</a>)</li> <li>(!) Use <code>BFieldElement</code>s everywhere (<a href="" rel="noopener noreferrer">05bd271a</a>)</li> <li>(!) Make <code>ProofStream</code> non-generic (<a href="" rel="noopener noreferrer">bde928d4</a>)</li> <li>(!) Remove deprecated type aliases (<a href="" rel="noopener noreferrer">14d08ef8</a>)</li> <li>(!) Rename <code>TableId</code> variants (<a href="" rel="noopener noreferrer">c265cf4d</a>)</li> <li>Bypass quotient table (<a href="" rel="noopener noreferrer">ff305459</a>)</li> </ul> <h3>✅ Testing</h3> <ul> <li>Benchmark program with lots of memory I/O (<a href="" rel="noopener noreferrer">c7613878</a>)</li> </ul> <h3>🎨 Styling</h3> <ul> <li>Improve readability of <code>.verify()</code> slightly (<a href="" rel="noopener noreferrer">e0ac1096</a>)</li> </ul> announcing Triton VM v0.33.0 jfs 2023-08-10 2023-08-10 4 <p><a href="" rel="noopener noreferrer">Triton VM v0.33.0</a> is now live. The main highlights are:</p> <h3>Non-deterministic Initialization of RAM</h3> <p>In all prior versions, the only way for programs to receive input was through public or secret input, i.e. using instructions <code>read_io</code>, <code>divine</code>, or <code>divine_sibling</code>. As of this version, RAM can be initialized before Triton VM starts execution. This means that elements that <em>might</em> need to be processed don’t waste precious clock cycles if they don’t end up being processed, as they can happily live in RAM without ever being read.</p> <p>In future versions of Triton VM, non-deterministic RAM initialization might also be useful to place objects in RAM that depend on the current state of the VM. The zero-knowledge proof system already supports this behavior.</p> <h3>Improved Speed</h3> <p>Through changes to the proof system, better use of parallelization, and more efficient initialization of certain memory objects, the speed of the VM has increased noticeably. Depending on the hardware, the speedup factor should lie somewhere between 3 and 4 compared to the previous version, and almost 10 compared to the version that shipped with the initial release of Neptune’s alphanet.</p>