|
1 |
| -# SnarkyJS bindings |
| 1 | +# o1js bindings |
2 | 2 |
|
3 |
| -This repository collects code needed by [SnarkyJS](https://github.com/o1-labs/snarkyjs) to bind to lower layers of the proof system and the Mina transaction logic, which are written in Rust and OCaml. |
| 3 | +This repository collects code required by [o1js](https://github.com/o1-labs/o1js) to bind to lower layers of the proof system and the Mina transaction logic, which are written in Rust and OCaml. |
4 | 4 |
|
5 |
| -The repo is included as a git submodule in the [SnarkyJS repo](https://github.com/o1-labs/snarkyjs) under `src/bindings`, and typically used from there. |
| 5 | +The repo is included as a git submodule in the [o1js repo](https://github.com/o1-labs/o1js) under `src/bindings` and is typically used from there. |
6 | 6 |
|
7 | 7 | **Directory structure**
|
8 | 8 |
|
9 |
| -- `/compiled` - compiled JS and Wasm artifacts produced by `js_of_ocaml` and `wasm-bindgen` from Rust and OCaml source code. We keep these artifacts in the source tree so that developing on SnarkyJS can be done with standard JS tooling and doesn't require setting up the full OCaml/Rust build pipeline. |
| 9 | +- `/compiled` - compiled JS and Wasm artifacts produced by `js_of_ocaml` and `wasm-bindgen` from Rust and OCaml source code. We keep these artifacts in the source tree so that developing on o1js can be done with standard JS tooling and doesn't require setting up the full OCaml/Rust build pipeline. |
10 | 10 | - `/crypto` - pure TS implementations of a subset of the crypto primitives we use, including finite field and elliptic curve arithmetic. This is used by mina-signer (a pure TS package) to hash and sign transactions.
|
11 |
| -- `/js` - JS-side wrappers for the artifacts located in `/compiled`, which differs between the Node.js and web versions of SnarkyJS. Includes code for setting up workers to support using `rayon` in Rust. |
| 11 | +- `/js` - JS-side wrappers for the artifacts located in `/compiled`, which differs between the Node.js and web versions of o1js. Includes code for setting up workers to support using `rayon` in Rust. |
12 | 12 | - `/kimchi` - bindings to the [Kimchi proof system](https://o1-labs.github.io/proof-systems/kimchi/overview.html) which is implemented in Rust. This contains a Wasm compatibility layer written in Rust as well as a `js_of_ocaml`-to-`wasm-bindgen` glue layer written in JS.
|
13 |
| -- `/lib` - miscellaneous low-level TypeScript which underpins SnarkyJS and provides generic ways to connect with a proof system and blockchain protocol. |
14 |
| -- `/mina-transaction` - TS types and modules which specialize the generic tooling in `/lib` to Mina's zkApp protocol; mostly auto-generated from OCaml. |
15 |
| -- `/ocaml` - OCaml library exposing Snarky, Pickles and parts of the Mina transaction logic to JS. Also, OCaml scripts which help auto-generating TypeScript for Mina- and crypto-related types and constants. |
16 |
| -- `/scripts` - scripts which build parts of SnarkyJS from their OCaml and Rust sources, including the contents of `/compiled` and other generated TS files. |
| 13 | +- `/lib` - miscellaneous low-level TypeScript, which underpins o1js and provides generic ways to connect with a proof system and blockchain protocol. |
| 14 | +- `/mina-transaction` - TS types and modules that specialize the generic tooling in `/lib` to Mina's zkApp protocol; mostly auto-generated from OCaml. |
| 15 | +- `/ocaml` - OCaml library exposing Snarky, Pickles and parts of the Mina transaction logic to JS. Also, OCaml scripts that help auto-generate TypeScript for Mina- and crypto-related types and constants. |
| 16 | +- `/scripts` - scripts that build parts of o1js from their OCaml and Rust sources, including the contents of `/compiled` and other generated TS files. |
17 | 17 | - `MINA_COMMIT` - commit hash pointing to the commit of the [Mina repo](https://github.com/MinaProtocol/mina) that build artifacts in this repo where generated from.
|
18 | 18 |
|
19 |
| -## Building the SnarkyJS bindings |
| 19 | +## Building the o1js bindings |
20 | 20 |
|
21 |
| -To instrument the scripts and build the SnarkyJS bindings from source, you need to work from the [Mina monorepo](https://github.com/MinaProtocol/mina). |
| 21 | +To instrument the scripts and build the o1js bindings from source, you need to work from the [Mina monorepo](https://github.com/MinaProtocol/mina). |
22 | 22 |
|
23 |
| -Inside the Mina repo, you'll find the [SnarkyJS repo](https://github.com/o1-labs/snarkyjs) as a git submodule under `src/lib/snarkyjs`. Inside `snarkyjs`, the `snarkyjs-bindings` repo is located at `src/bindings`. To make sure you have all nested submodules checked out, run (from the Mina root): |
| 23 | +Inside the Mina repo, you'll find the [o1js repo](https://github.com/o1-labs/o1js) as a git submodule under `src/lib/snarkyjs`. Inside `o1js`, the `o1js-bindings` repo is located at `src/bindings`. To make sure you have all nested submodules checked out, run (from the Mina root): |
24 | 24 |
|
25 | 25 | ```sh
|
26 | 26 | git submodule update --init --recursive
|
27 | 27 | ```
|
28 | 28 |
|
29 |
| -Then, switch to the SnarkyJS root in `src/lib/snarkyjs`. There are two different commands available, `npm run make` and `npm run bindings`, which you need for different purposes: |
| 29 | +Then, switch to the o1js root in `src/lib/snarkyjs`. |
| 30 | + |
| 31 | +You use these two commands for different purposes: |
30 | 32 |
|
31 | 33 | ```
|
32 | 34 | npm run make
|
33 | 35 | ```
|
34 | 36 |
|
35 |
| -This command will |
| 37 | +This command: |
36 | 38 |
|
37 |
| -- regenerate TS files in the snarkyjs-bindings source tree |
38 |
| -- build the JS/Wasm artifacts for Node.js (also contained in `/compiled/node-bindings`), but only move them to their place in the `snarkyjs/dist/node` folder which is not part of the source tree. |
| 39 | +- Regenerates TS files in the o1js-bindings source tree |
| 40 | +- Builds the JS/Wasm artifacts for Node.js (also contained in `/compiled/node-bindings`), but only moves them to their place in the `o1js/dist/node` folder, which is not part of the source tree. |
39 | 41 |
|
40 |
| -> ℹ️ Use `npm run make` if you are developing on or testing the OCaml/Rust layers of SnarkyJS, and want to rebuild. |
| 42 | +> ℹ️ Use `npm run make` if you are developing on or testing the OCaml/Rust layers of o1js, and want to rebuild. |
41 | 43 |
|
42 | 44 | ```
|
43 | 45 | npm run bindings
|
44 | 46 | ```
|
45 | 47 |
|
46 |
| -This command will |
| 48 | +This command: |
47 | 49 |
|
48 |
| -- do everything `npm run make` does, plus |
49 |
| -- build the web version of the SnarkyJS bindings, plus |
50 |
| -- place the generated artifacts in the source tree, under `/compiled` |
51 |
| -- update the `MINA_COMMIT` file |
| 50 | +- Does everything `npm run make` does, plus |
| 51 | +- Builds the web version of the o1js bindings, plus |
| 52 | +- Places the generated artifacts in the source tree under `/compiled` |
| 53 | +- Updates the `MINA_COMMIT` file |
52 | 54 |
|
53 |
| -> ℹ️ Use `npm run bindings` to update the source tree after you have finished a batch of work / a PR which touches the OCaml/Rust layers. SnarkyJS CI depends on these artifacts, so this is a required step before merging such changes. |
| 55 | +> ℹ️ Use `npm run bindings` to update the source tree after you have finished a batch of work / a PR that touches the OCaml/Rust layers. o1js CI depends on these artifacts, so running this command is a required step before you can merge the changes. |
0 commit comments