|
| 1 | +import {Accordion, Panel} from '@nilfoundation/ui-kit/dist/ui-kit.js' |
| 2 | + |
1 | 3 | # Key components and tools
|
2 | 4 |
|
3 | 5 | ## zkLLVM Components
|
@@ -29,26 +31,28 @@ It is only necessary to generate constraints once per every circuit/input type p
|
29 | 31 |
|
30 | 32 | Together, these products ensure that the circuit can be proven with dynamic inputs.
|
31 | 33 |
|
32 |
| -<details> |
33 |
| -<summary>Click here to learn more about assigner extendibility</summary> |
34 |
| -<p> |
35 |
| -The core of <code>assigner</code> is an LLVM IR parser, which can be ported into any programming language. To access its current implementation, [**click here**](https://github.com/NilFoundation/zkllvm-assigner). This implementation is written in C++ and supports only the PLONK arithmetization. |
36 |
| -</p> |
37 |
| -<p> |
38 |
| -<code>assigner</code> can be extended to support any other arithmetization. This process involves implementing the LLVM IR parser and following these steps. |
39 |
| -<ul> |
40 |
| -<li>Find a suitable components library for the chosen arithmetization (such as <strong><a href="https://github.com/zcash/halo2">halo2</a></strong> for Rust)</li> |
41 |
| -<li>Use the components library to implement assignment table generation</li> |
42 |
| -<li>Use the components library to implement constraints generation and serialization</li> |
43 |
| -</ul> |
44 |
| -</p> |
45 |
| -<p> |
46 |
| -Note that the zkLLVM frontends output IRs that are modified compared to the IRs generated by the vanilla LLVM project. As a result, any external tool that uses the original <code>LLVMIRParser</code> from LLVM will be unable to parse IRs from zkLLVM. |
47 |
| -</p> |
48 |
| -<p> |
49 |
| -When extending <code>assigner</code>, simply reusing an external parser will not work: it will need to be adapted to fully parse the modified IRs supplied by frontends. |
50 |
| -</p> |
51 |
| -</details> |
| 34 | +<Accordion> |
| 35 | + <Panel title='Click here to learn more about assigner extendibility'> |
| 36 | + <p> |
| 37 | + The core of <code>assigner</code> is an LLVM IR parser, which can be ported into any programming language. To access its current implementation, [**click here**](https://github.com/NilFoundation/zkllvm-assigner). This implementation is written in C++ and supports only the PLONK arithmetization. |
| 38 | + </p> |
| 39 | + <p> |
| 40 | + <code>assigner</code> can be extended to support any other arithmetization. This process involves implementing the LLVM IR parser and following these steps. |
| 41 | + <ul> |
| 42 | + <li>Find a suitable components library for the chosen arithmetization (such as <strong><a href="https://github.com/zcash/halo2">halo2</a></strong> for Rust)</li> |
| 43 | + <li>Use the components library to implement assignment table generation</li> |
| 44 | + <li>Use the components library to implement constraints generation and serialization</li> |
| 45 | + </ul> |
| 46 | + </p> |
| 47 | + <p> |
| 48 | + Note that the zkLLVM frontends output IRs that are modified compared to the IRs generated by the vanilla LLVM project. As a result, any external tool that uses the original <code>LLVMIRParser</code> from LLVM will be unable to parse IRs from zkLLVM. |
| 49 | + </p> |
| 50 | + <p> |
| 51 | + When extending <code>assigner</code>, simply reusing an external parser will not work: it will need to be adapted to fully parse the modified IRs supplied by frontends. |
| 52 | + </p> |
| 53 | + </Panel> |
| 54 | +</Accordion> |
| 55 | + |
52 | 56 |
|
53 | 57 | ## Proof system components
|
54 | 58 |
|
|
0 commit comments