# Boojum Markdown version of https://l2beat.com/zk-catalog/boojum ## Summary - Creator: Matter Labs - Total Value Secured: $341.60 M (-8.41% compared to seven days ago) - Trusted setups for Bellman (Plonk): - Aztec Ignition, risk green (lowest risk) per the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381): Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation. - Used in: [ZKsync Era](https://l2beat.com/layer2s/projects/zksync-era), [Cronos zkEVM](https://l2beat.com/layer2s/projects/cronoszkevm), [Abstract](https://l2beat.com/layer2s/projects/abstract), [Sophon](https://l2beat.com/layer2s/projects/sophon), [zkLink Nova](https://l2beat.com/layer2s/projects/zklinknova), [Lens](https://l2beat.com/layer2s/projects/lens), [GRVT](https://l2beat.com/layer2s/projects/grvt) - Verifiers: 3 not verified - Trusted setups for Zksync (Fflonk): - Aztec Ignition, risk green (lowest risk) per the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381): Aztec Ignition is a trusted setup ceremony that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation. - Used in: [ZKsync Era](https://l2beat.com/layer2s/projects/zksync-era), [Cronos zkEVM](https://l2beat.com/layer2s/projects/cronoszkevm), [Abstract](https://l2beat.com/layer2s/projects/abstract), [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), [GRVT](https://l2beat.com/layer2s/projects/grvt) - Verifiers: 2 not verified - zkVM: Boojum (STARK), EraVM (ISA), Goldilocks (Field) - Final wrap: Bellman (Plonk), Zksync (Fflonk), BN254 (curve) ### About Boojum is a zk proving system for EraVM programs built by Matter Labs to prove ZKsync Era state transition. ### Links - Docs: https://matter-labs.github.io/zksync-era/core/latest/specs/prover/getting_started.html, https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/14_zk_deeper_overview.html, https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/15_prover_keys.html - Repository: https://github.com/matter-labs/era-boojum ## Value Secured The interactive TVS chart is shown on [the HTML page](https://l2beat.com/zk-catalog/boojum#tvs). ## Proof System ### Description Boojum is a proving system operating on [EraVM](https://matter-labs.github.io/zksync-era/core/latest/guides/advanced/12_alternative_vm_intro.html) ISA and supporting [zk stack](https://zkstack.io) chains. It includes recursive STARK proving of zkVM execution, as well as the final wrap with [Plonk](https://github.com/matter-labs/franklin-crypto/tree/dev/src/plonk) or [Fflonk](https://github.com/matter-labs/zksync-crypto/blob/main/crates/fflonk/docs/spec.pdf) SNARK proving system. Boojum targets [100 bits of security](https://github.com/matter-labs/era-boojum?tab=readme-ov-file#for-curions-in-benchmarks-only). ### Proof system #### zkVM component [Boojum](https://github.com/matter-labs/era-boojum/tree/main)'s core is an implementation of the [**Redshift**](https://eprint.iacr.org/2019/1400.pdf) protocol which uses the Plonk IOP with a polynomial commitment scheme based on List Polynomial Commitments (LPCs), which is in turn based on FRI, making the scheme transparent. The scheme makes use of the Goldilocks field, which is much smaller than BN254's field. This part of boojum implements a zkVM for EraVM, which is closely aligned with EVM but has essential differences like 16 registers. #### Recursion circuits The protocol makes use of several layers of recursive proof aggregation for 15 types of [circuits](https://github.com/matter-labs/era-zkevm_test_harness/blob/3cd647aa57fc2e1180bab53f7a3b61ec47502a46/circuit_definitions/src/circuit_definitions/recursion_layer/mod.rs#L29). In particular, node and scheduler circuits aggregate zk proofs and compressor and wrapper circuits reduce the final proof size. Further information about the aggregation architecture can be found [**here**](https://github.com/matter-labs/zksync-era/blob/1b61d0797062ab8b0aa2c1e92b23a3a0d8fd2c61/docs/guides/advanced/15_prover_keys.md#circuits). #### Final wrap The final proof could either be wrapped into a [Plonk](https://github.com/matter-labs/era-zkevm_test_harness/blob/3cd647aa57fc2e1180bab53f7a3b61ec47502a46/circuit_definitions/src/circuit_definitions/aux_layer/wrapper.rs)+KZG proof, or into [Fflonk](https://github.com/matter-labs/zksync-crypto/tree/main/crates/fflonk)+KZG for cheap verification. The KZG commitment is done over BN254 curve and it uses Aztec Ignition trusted setup ceremony, see [below](https://l2beat.com/zk-catalog/boojum#trusted-setups) for more details. ## Trusted Setups Risk levels follow the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381). Yellow (medium risk): all contributions are published and the final output can be verified, the ceremony client is open source, there were at least 30 contributions, participation was open to the public and announced, and participants are publicly identified. Green (lowest risk): everything required for yellow, with at least 150 contributions. Red (highest risk): at least one requirement for yellow is not met. N/A: the proof system needs no trusted setup. ### Aztec Ignition - Risk: green (lowest risk) - Proof systems: Bellman (Plonk), Zksync (Fflonk) Aztec Ignition is a trusted setup ceremony for KZG commitments over BN254 curve that was run by Aztec for KZG commitment over BN254 curve in 2019. It included 176 participants and was publicly open for participation. - Github repo to download and verify the ceremony artifacts: [https://github.com/AztecProtocol/ignition-verification](https://github.com/AztecProtocol/ignition-verification). - Github repo with instructions for ceremony participants: [https://github.com/AztecProtocol/Setup](https://github.com/AztecProtocol/Setup). - Ceremony announcement with a call to participate: [https://aztec.network/blog/announcing-ignition](https://aztec.network/blog/announcing-ignition). ## Verifier IDs List of different onchain verifiers for this proving system. Unique ID distinguishes different deployments of the same verifier from different verifiers (e.g. different versions). ### Fflonk: Zksync Matter Labs Rust implementation of Fflonk improvement over standard Plonk proving system. #### Boojum Fflonk v29.5 verifier - Verifier ID: `0x34e7f769253b128e4ac6fbf71b3f8471d507c4f93bc50dcf26509ed1bae25122` - Verification: not verified - Used in: none **Known deployments** - [0x9f5C39a2790f38542065E7854b90407371923375](https://etherscan.io/address/0x9f5C39a2790f38542065E7854b90407371923375#code) on Ethereum, used in: none #### Boojum Fflonk v30.1 verifier - Verifier ID: `0xd89b62ac599b15d9dc47860c8ebca5964c99e7b177e9b8ea38a0c13714dc32bb` - Verification: not verified - Used in: [ZKsync Era](https://l2beat.com/layer2s/projects/zksync-era), [Cronos zkEVM](https://l2beat.com/layer2s/projects/cronoszkevm), [Abstract](https://l2beat.com/layer2s/projects/abstract), [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), [GRVT](https://l2beat.com/layer2s/projects/grvt) **Known deployments** - [0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9](https://etherscan.io/address/0x8470d6B3fd71B5fE3906B4ea04498d18F721eDe9#code) on Ethereum, used in: [ZKsync Era](https://l2beat.com/layer2s/projects/zksync-era), [Cronos zkEVM](https://l2beat.com/layer2s/projects/cronoszkevm), [Abstract](https://l2beat.com/layer2s/projects/abstract), [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), [GRVT](https://l2beat.com/layer2s/projects/grvt) ### Plonk: Bellman Bellman Rust library for Plonk proving system, originally developed for ZCash. #### Boojum Plonk v30.1 verifier - Verifier ID: `0xbaaa46d644f7034d609eea327e818bd9a93a3c0fdd60e887d233da8a35c4f8ae` - Verification: not verified - Used in: [ZKsync Era](https://l2beat.com/layer2s/projects/zksync-era), [Cronos zkEVM](https://l2beat.com/layer2s/projects/cronoszkevm), [Abstract](https://l2beat.com/layer2s/projects/abstract), [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), [GRVT](https://l2beat.com/layer2s/projects/grvt) **Known deployments** - [0x0DAAB2B7b38ab48712996E760152c569FA356DbF](https://etherscan.io/address/0x0DAAB2B7b38ab48712996E760152c569FA356DbF#code) on Ethereum, used in: [ZKsync Era](https://l2beat.com/layer2s/projects/zksync-era), [Cronos zkEVM](https://l2beat.com/layer2s/projects/cronoszkevm), [Abstract](https://l2beat.com/layer2s/projects/abstract), [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), [GRVT](https://l2beat.com/layer2s/projects/grvt) #### Boojum Plonk v29.5 verifier - Verifier ID: `0x18bdc7272350532ca7c3d4d613f0f22aa4100bcddd06722b2f8c6896ca5f5ad3` - Verification: not verified - Used in: none **Known deployments** - [0xd22cA89e8991FCE568456914c616d303e3142395](https://etherscan.io/address/0xd22cA89e8991FCE568456914c616d303e3142395#code) on Ethereum, used in: none #### Boojum Plonk zkLinkNova verifier - Verifier ID: `0x8574e152c41dc39a2ecab984545e1cf21cb3ec250b919018a8053f2fa270784f` - Verification: not verified - Used in: [zkLink Nova](https://l2beat.com/layer2s/projects/zklinknova) **Known deployments** - [0x902C3806A84f4e855a8746e92d7F1C9a51400458](https://lineascan.build/address/0x902C3806A84f4e855a8746e92d7F1C9a51400458#code) on Linea, used in: [zkLink Nova](https://l2beat.com/layer2s/projects/zklinknova) ## Program Hashes List of known guest zkVM programs used by this prover. Each program represents a piece of offchain execution that is verified onchain. The program hash serves as the program's unique identifier. ### Boojum L2 Bootloader program v0.29.2 EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks. - Hash: `0x01000911c4db4fe62c98e180cfa7e9b3a22fb15f505905d4bf36192f481551e6` - Repository: https://github.com/matter-labs/era-contracts/blob/v0.29.2/system-contracts/bootloader/bootloader.yul - Verification: successful - Used in: [ZKsync Era](https://l2beat.com/layer2s/projects/zksync-era), [Cronos zkEVM](https://l2beat.com/layer2s/projects/cronoszkevm), [Abstract](https://l2beat.com/layer2s/projects/abstract), [Sophon](https://l2beat.com/layer2s/projects/sophon), [Lens](https://l2beat.com/layer2s/projects/lens), [GRVT](https://l2beat.com/layer2s/projects/grvt), [ZERO Network](https://l2beat.com/layer2s/projects/zeronetwork), [zkCandy](https://l2beat.com/layer2s/projects/zkcandy) #### Verification steps Prepare: 1. Install npm and yarn: `npm install --global yarn` 2. Install hardhat: `npm install -g hardhat` 3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/). Verify: 1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.29.2`. Commit hash should be `dbfc9b5a40d68007dc405a9b669230104c1646e4`. 2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions. ### Boojum L2 Bootloader program v0.28.0 EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks. - Hash: `0x0100085f9382a7928dd83bfc529121827b5f29f18b9aa10d18aa68e1be7ddc35` - Repository: https://github.com/matter-labs/era-contracts/blob/v0.28.0/system-contracts/bootloader/bootloader.yul - Verification: successful - Used in: [LaChain](https://l2beat.com/layer2s/projects/lachain), [Wonder](https://l2beat.com/layer2s/projects/wonder) #### Verification steps Prepare: 1. Install npm and yarn: `npm install --global yarn` 2. Install hardhat: `npm install -g hardhat` 3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/). Verify: 1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout v0.28.0`. Commit hash should be `cfd77cb6bc9ab3d751d42c6161f1b393a9c51647`. 2. Execute recompute_hashes.sh script: `chmod +x recompute_hashes.sh` and `./recompute_hashes.sh`. Note that the script may require a specific version of `foundryup-zksync` and it will suggest the command to install it. However you might need to manually clear git working tree in the repo foundry-zksync (probably in ~/.foundry/matter-labs/foundry-zksync) to change versions. ### Boojum L2 Bootloader program v26 EraVM program that proves the correct execution of a batch of ZK Stack L2 blocks. - Hash: `0x0100088580465d88420e6369230ee94a32ff356dbcdd407a4be49fc8009b2a81` - Repository: https://github.com/matter-labs/era-contracts/blob/f7ecdb91f7941a3be01ce08bf6a2e4a5fb02a8d5/system-contracts/bootloader/bootloader.yul - Verification: successful - Used in: [Treasure](https://l2beat.com/layer2s/projects/treasure) #### Verification steps Prepare: 1. Install npm and yarn: `npm install --global yarn` 2. Install hardhat: `npm install -g hardhat` 3. Install foundry-zksync: `curl -L https://raw.githubusercontent.com/matter-labs/foundry-zksync/main/install-foundry-zksync | bash` from [here](https://foundry-book.zksync.io/introduction/installation/). Verify: 1. Checkout the correct branch in [era-contracts](https://github.com/matter-labs/era-contracts) repo: `git checkout release-v26`. Commit hash should be `f7ecdb91f7941a3be01ce08bf6a2e4a5fb02a8d5`. 2. Execute `pushd da-contracts && forge clean && popd && pushd l1-contracts && yarn clean && forge clean && popd && pushd l2-contracts && yarn clean && forge clean && popd && pushd system-contracts && yarn clean && forge clean && popd && pushd da-contracts && yarn build:foundry && popd && pushd l1-contracts && yarn build:foundry && popd && pushd l2-contracts && yarn build:foundry && popd && pushd system-contracts && yarn build:foundry && popd && yarn calculate-hashes:fix` to recompile all contracts and compare their hashes with the ones recorded in `AllContractsHashes.json` (note that script output calls this file `SystemContractsHashes.json`).