# Ethscriptions Markdown version of https://ethbeat.org/layer2s/projects/ethscriptions ## Summary - Total Value Secured: No data - Past day UOPS: 0.12 (-3.92% compared to seven days ago) - Stage: Stage 2 (Appchain: Ethscriptions is an application-specific rollup designed exclusively for managing ethscriptions (NFT-like assets inscribed via Ethereum calldata). It provides cryptographic state and EVM compatibility for the ethscriptions protocol.) - Gas token: ETH - Type: Optimistic Rollup - Purpose: NFT - Host chain: Ethereum - Chain ID: 61166 ### Risks - Sequencer failure: Self sequence (sentiment: good) - State validation: Fraud proofs (1R, ZK) (7d challenge period; sentiment: good) - Data availability: Onchain (sentiment: good) - Exit window: ∞ (sentiment: good) - Proposer failure: Self propose (sentiment: good) ### About Ethscriptions is a based rollup that provides cryptographic state and EVM compatibility for ethscriptions. It uses a derivation pipeline to convert L1 ethscription activity into canonical L2 blocks. ### Links - Website: https://ethscriptions.com/ - Docs: https://docs.ethscriptions.com/ - Explorer: https://explorer.ethscriptions.com/ - Repository: https://github.com/ethscriptions-protocol/ethscriptions-node, https://github.com/ethscriptions-protocol/ethscriptions-geth, https://github.com/0xFacet/ethscriptions-zk-fault-proofs - Social: https://x.com/ethscriptions - Contracts explorer (Disco): https://disco.l2beat.com/ui/p/ethscriptions ### Badges - Application-specific chain: This project is built to operate a specific application - EVM: This project uses the Ethereum Virtual Machine to run its smart contracts and supports the Solidity programming language - Ethereum with calldata: This project is posting its data to Ethereum as calldata - Fork of Facet: The project is a fork of Facet - Based Sequencing: This project is ordering its transactions through Ethereum block proposers ## Activity The interactive activity chart is shown on [the HTML page](https://ethbeat.org/layer2s/projects/ethscriptions#activity). - [Activity chart (JSON)](https://ethbeat.org/api/scaling/activity/ethscriptions) ## Onchain costs The section shows the operating costs that L2s pay to Ethereum. The interactive costs chart is shown on [the HTML page](https://ethbeat.org/layer2s/projects/ethscriptions#onchain-costs). ### Tracked transactions #### State updates - functionCall: 2026-01-06 21:39 UTC - now; currently used; address: [0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b](https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b); selector: 0x45925013; signature: `function submitProposal(bytes32 root, uint256 l2BlockNumber, uint256 parentId) payable returns (uint256 proposalId)` - functionCall: 2026-01-06 21:39 UTC - now; currently used; address: [0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b](https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b); selector: 0x9eeeb214; signature: `function proveBlock(uint256 l2BlockNumber, bytes32 root, uint256 l1BlockNumber, bytes proof)` - functionCall: 2026-01-06 21:39 UTC - now; currently used; address: [0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b](https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b); selector: 0x0075552a; signature: `function proveProposal(uint256 id, uint256 l1BlockNumber, bytes proof)` - functionCall: 2026-01-06 21:39 UTC - now; currently used; address: [0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b](https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b); selector: 0x0062804e; signature: `function resolveProposal(uint256 id)` ## Liveness This section shows how "live" the project's operators are by displaying how frequently they submit transactions of the selected type. It also highlights anomalies - significant deviations from their typical schedule. ### Potential ongoing anomaly - No state updates have been performed for the past 14d 2h (since 2026-10-21 08:05 UTC). These typically occur every 6h on average. The interactive liveness chart is shown on [the HTML page](https://ethbeat.org/layer2s/projects/ethscriptions#liveness). ### Tracked transactions #### State updates - functionCall: 2026-01-06 21:39 UTC - now; currently used; address: [0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b](https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b); selector: 0x45925013; signature: `function submitProposal(bytes32 root, uint256 l2BlockNumber, uint256 parentId) payable returns (uint256 proposalId)` ### Last 30 day anomalies All liveness anomalies detected for this project in the last 30 days, helping you review recent downtime and availability issues. - No state updates have been performed for the past 14d 2h (since 2026-10-21 08:05 UTC). These typically occur every 6h on average. ## Milestones & Incidents - 2025-01-06: [Rollup contract deployed](https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b). Ethscriptions deploys its rollup contract with SP1 ZK fault proofs on Ethereum mainnet. ## Risk analysis ### Sequencer failure Self sequence (sentiment: good) Users can self sequence transactions by sending them on L1. There is no privileged operator. ### State validation Fraud proofs (1R, ZK) (7d challenge period; sentiment: good) Actors watching the chain can challenge state proposals, and challenged proposals must provide ZK proofs. SNARKs are zero knowledge proofs that ensure state correctness, but require trusted setup. ### Data availability Onchain (sentiment: good) All of the data needed for proof construction is published on Ethereum L1. ### Exit window ∞ (sentiment: good) Users can exit funds at any time because contracts are not upgradeable. ### Proposer failure Self propose (sentiment: good) Anyone can propose blocks if accompanied by a validity proof. Only the whitelisted proposers can propose state roots for recent blocks optimistically. Anyone can propose optimistically for L2 blocks that are older than 14d. ## Stage Ethscriptions is a Stage 2 Appchain Optimistic Rollup. **The project passes the walkaway test**: users can exit in the presence of malicious operators even if the Security Council disappears. ### Scope of assessment #### In scope - Sequencing mechanism via L1 derivation pipeline and state validation mechanism via the Rollup proof system - Upgradability of the Rollup contract #### Not in scope - Bridge functionality - the system intentionally has no canonical bridge. Gas is free on the L2 as geth has been modified to not charge users for gas. - The soundness of the ZK proof system of Rollup Rollup operators cannot compromise the system, but being **application-specific** might bring additional risk. The chain derives its state entirely from L1 ethscription activity and there is no general-purpose smart contract deployment. Users interact with ethscriptions (create, transfer) through a derivation pipeline that converts L1 calldata into canonical L2 state. The system intentionally has no canonical bridge; gas is free as geth has been modified to not charge users. **Note:** We're still in the process of formalizing how to properly integrate appchains in the Stages framework. ### Stage 0 5 requirements met. - Met: A complete and functional proof system is deployed. - Met: The project calls itself a rollup. - Met: State roots are posted to Ethereum L1. - Met: Inputs for the state transition function are posted to Ethereum L1. - Met: A source-available node exists that can recreate the state from Ethereum L1 data. Please note that the ETHBEAT team has not verified the validity of the node source code. [View code](https://github.com/ethscriptions-protocol/ethscriptions-node) ### Stage 1 7 requirements met. **Principle** - Met: Compromising ≥75% of the Security Council is the only way (other than bugs) for a rollup to indefinitely block an L2→L1 message (e.g. a withdrawal) or push an invalid L2→L1 message (e.g. an invalid withdrawal) with a <7d exit window. **Guidelines** - Met: Users are able to exit without the help of the permissioned operators. - Met: In case of an unwanted upgrade by actors more centralized than a Security Council, users have at least 7d to exit. - Met: The proof system meets the minimum trusted setup requirements defined in the ETHBEAT [trusted setup assessment framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381). - Met: Prover source code is published. - Met: Onchain verifiers' smart contracts can be independently regenerated from the verifier source code. - Met: The sources of all programs used are public and program hashes can be independently regenerated. ### Stage 2 2 requirements met. - Met: Fraud proof submission is open to everyone. - Met: Upgrades unrelated to onchain provable bugs provide at least 30d to exit. [Learn more about Stages](https://ethbeat.org/stages). Please keep in mind that these stages do not reflect project security, this is an opinionated assessment of project maturity based on subjective criteria, created with a goal of incentivizing projects to push toward better decentralization. Each team may have taken different paths to achieve this goal. ## State validation Ethscriptions implements a dual-track proving system that combines optimistic proposals with bonds with ZK validity proofs. The system allows bypassing the 7-day fraud proof window by providing a ZK proof. ### Challenges The system operates on two parallel tracks: an optimistic track where whitelisted proposers submit state roots with ETH bonds that can be challenged within a time window, and a validity-proof track where anyone can submit direct ZK proofs for immediate resolution. Validity proofs bypass the optimistic flow and can invalidate multiple incorrect optimistic proposals simultaneously targeting the same state root. When optimistic proposals are challenged, proposers must defend their claims by providing ZK proofs within the proving window. ### Validity proofs The system uses Succinct's SP1 zkVM and Prover Network to generate zero-knowledge proofs that verify L2 state transitions. Anyone can submit a validity proof through the proveBlock() function of the Rollup contract to bypass the optimistic flow and settle an anchor block. Submitting a validity proof during a challenge settles the dispute in a single transaction. **References** - [Ethscriptions ZK Fault Proofs - GitHub Repository](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) ### Prover: [SP1 Turbo](https://ethbeat.org/zk-catalog/sp1turbo) #### Trusted setups - Gnark (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. - Onchain verifiers: [SP1Verifier](https://etherscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code) (1 successful (verified by [ETHBEAT](https://ethbeat.org))) - Used in: [X Layer](https://ethbeat.org/layer2s/projects/xlayer), [Katana](https://ethbeat.org/layer2s/projects/katana), [Lumia Prism](https://ethbeat.org/layer2s/projects/lumia), [Haust Network](https://ethbeat.org/layer2s/projects/haust), [Silicon](https://ethbeat.org/layer2s/projects/silicon), [Polygon zkEVM](https://ethbeat.org/layer2s/projects/polygonzkevm), [Pentagon Chain](https://ethbeat.org/layer2s/projects/penchain), [Facet](https://ethbeat.org/layer2s/projects/facet), [Ethscriptions](https://ethbeat.org/layer2s/projects/ethscriptions) - Verifiers: 1 successful (verified by [ETHBEAT](https://ethbeat.org)) ### Program Hashes #### Aggregation program of Ethscriptions ZK Fault Proofs Aggregates proofs of correct execution for several consecutive block ranges of the Ethscriptions L2 client. - Hash: `0x001d6dd65980c80ef8496f4a0bd9b2ccc1c9e66aeb122f841e0b90e322bbacdd` - Repository: https://github.com/0xFacet/ethscriptions-zk-fault-proofs/tree/251c5248cf92b544a3e6b1b4c0b98b0146dab1c6/programs/aggregation - Verification: successful - Used in: [Ethscriptions](https://ethbeat.org/layer2s/projects/ethscriptions) ##### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`. 2. Make sure docker is running by running `docker ps` 3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes. #### Range program of Ethscriptions ZK Fault Proofs Proves correct state transition function within the Ethscriptions L2 client over a range of consecutive L2 blocks. - Hash: `0x5a02c6f96d93f5ff1bfe8f5f2f7f158a3bc6ab7e294d3f7824507a1c67edf594` - Repository: https://github.com/0xFacet/ethscriptions-zk-fault-proofs/tree/251c5248cf92b544a3e6b1b4c0b98b0146dab1c6/programs/range/ethereum - Verification: successful - Used in: [Ethscriptions](https://ethbeat.org/layer2s/projects/ethscriptions) ##### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`. 2. Make sure docker is running by running `docker ps` 3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes. ## Updates Each date links the update on the HTML page, which also shows its contract diffs. ### [2026-01-14 13:01 UTC](https://ethbeat.org/layer2s/projects/ethscriptions?update=b0f4cf6a) (1 change) Config change: Removed `proxyType: immutable` workaround for L2 predeploys (Ethscriptions, EthscriptionsProver, L2ToL1MessagePasser). These contracts are now properly detected by l2b rpc as EIP1967 proxies (DeaD owner) with their implementations tracked. ### [2026-01-12 09:46 UTC](https://ethbeat.org/layer2s/projects/ethscriptions?update=a2791abe) (7 changes) Initial discovery. ## Operator ### There is no central operator There is no privileged entity that sequences transactions or produces blocks. This activity is permissionless and open to anyone. ### Users can force any transaction Because the system derives L2 state from all valid ethscription transactions on Ethereum L1, users can circumvent censorship by submitting any transaction with valid Data URI calldata. There is no specific inbox address required. ## Sequencing ### Based Sequencing Ethscriptions uses a based sequencing model where transaction ordering is determined entirely by Ethereum L1. Unlike traditional rollups, Ethscriptions does not use a batch inbox. Instead, it derives L2 blocks directly from L1 receipts and logs by monitoring all Ethereum transactions for valid Data URI calldata (ethscription creations) and ESIP protocol events (transfers). L2 blocks preserve the exact order in which Ethereum includes these transactions. **References** - [Ethscriptions Kona - GitHub](https://github.com/ethscriptions-protocol/ethscriptions-kona) ## Withdrawals ### Regular exit Whenever a user submits a valid ethscription transaction on the L1, the message is automatically processed on the L2 and sent to the L2ToL1MessagePasser with a snapshot of that ethscription state. When the block containing that transaction is settled, the user can submit an L1 transaction to prove the ethscription state. The process of block finalization takes a challenge period of 7 days to complete. The challenge period can be shortened if the block is proven by providing a ZK proof. ## Other considerations ### Derivation Pipeline The Ethscriptions AppChain operates as a derivation pipeline that converts L1 ethscription activity into canonical L2 blocks. A Ruby-based derivation node observes L1 blocks, parses ethscription intents from calldata and events, and constructs deposit-style EVM transactions. These are then executed by a modified geth implementation (ethscriptions-geth) that maintains EVM state and provides standard JSON-RPC interface. **References** - [Ethscriptions Node - GitHub](https://github.com/ethscriptions-protocol/ethscriptions-node) - [Ethscriptions Geth - GitHub](https://github.com/ethscriptions-protocol/ethscriptions-geth) ### No direct L2 transactions and free gas Unlike traditional rollups, users do not submit transactions directly to the L2. All user interactions occur on Ethereum L1 through standard ethscription operations (creating via Data URIs in calldata or transferring via ESIP events). The L2 derives its state entirely from this L1 activity through the derivation pipeline. Consequently, there is no gas paid by users on the L2 - geth has been modified to execute derived transactions without charging gas fees. Users only pay L1 gas costs for their Ethereum transactions. ## Permissions Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/ethscriptions ### Ethereum #### Actors ##### Facet Multisig Addresses: [0xb2B01DeCb6cd36E7396b78D3744482627F22C525](https://etherscan.io/address/0xb2B01DeCb6cd36E7396b78D3744482627F22C525) A Multisig with 2/3 threshold. - Can interact with Rollup - can set the whitelisted proposers Participants (3): [0x77610267a344Eb39955c20908978830f61e2373C](https://etherscan.io/address/0x77610267a344Eb39955c20908978830f61e2373C), [0xD66Cb98865181a890ffee5654fAe1D6b4D1827a7](https://etherscan.io/address/0xD66Cb98865181a890ffee5654fAe1D6b4D1827a7), [0x75deB70b12689e9CaeF4b316eDD04F213Af06127](https://etherscan.io/address/0x75deB70b12689e9CaeF4b316eDD04F213Af06127) Used in: [Facet](https://ethbeat.org/layer2s/projects/facet#Facet%20Multisig) ##### EOA 1 Addresses: [0x615452db5467849689E98a8C5C242A96cF768a94](https://etherscan.io/address/0x615452db5467849689E98a8C5C242A96cF768a94) - Can interact with Rollup - Can propose state roots optimistically without a ZK proof. Note that anyone can propose with a ZK proof, and anyone can propose optimistically after the fallback timeout Used in: [Facet](https://ethbeat.org/layer2s/projects/facet#EOA%201) ### Ethscriptions #### Actors ##### Proxy Addresses: [0x4200000000000000000000000000000000000018](https://explorer.ethscriptions.com/address/0x4200000000000000000000000000000000000018) ProxyAdmin predeploy that manages proxy upgrades for L2 predeploys. - Can upgrade **with no delay** - Ethscriptions - EthscriptionsProver - L2ToL1MessagePasser ## Smart contracts Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/ethscriptions ### Ethereum #### Rollup Addresses: [0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b](https://etherscan.io/address/0xA9Bbcad27E1571AAFAD89F953c81c8A1440A0b8b#code) Core rollup contract that manages the state of the rollup and its ZK fault proof system. - Roles: - **owner**: Facet Multisig - **whitelistedProposers**: EOA 1 #### SP1Verifier Addresses: [0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459](https://etherscan.io/address/0x0459d576A6223fEeA177Fb3DF53C9c77BF84C459#code) Verifier contract for SP1 proofs (v5.0.0). Implementation used in: [Facet](https://ethbeat.org/layer2s/projects/facet#SP1Verifier), [Haust Network](https://ethbeat.org/layer2s/projects/haust#SP1Verifier), [Katana](https://ethbeat.org/layer2s/projects/katana#SP1Verifier), [Lumia Prism](https://ethbeat.org/layer2s/projects/lumia#SP1Verifier), [Pentagon Chain](https://ethbeat.org/layer2s/projects/penchain#SP1Verifier), [Polygon zkEVM](https://ethbeat.org/layer2s/projects/polygonzkevm#SP1Verifier), [Silicon](https://ethbeat.org/layer2s/projects/silicon#SP1Verifier), [X Layer](https://ethbeat.org/layer2s/projects/xlayer#SP1Verifier) #### SP1VerifierGateway Addresses: [0xa236E6E31d94b613923d18313f534CE5b6b98eE1](https://etherscan.io/address/0xa236E6E31d94b613923d18313f534CE5b6b98eE1#code) This contract is the router for zk proof verification. It stores the mapping between identifiers and the address of onchain verifier contracts, routing each identifier to the corresponding verifier contract. Implementation used in: [Facet](https://ethbeat.org/layer2s/projects/facet#SP1VerifierGateway) ### Ethscriptions #### Ethscriptions Addresses: [0x3300000000000000000000000000000000000001](https://explorer.ethscriptions.com/address/0x3300000000000000000000000000000000000001#code), [0xc0D3C0d3C0d3c0d3c0D3C0D3C0D3C0d3c0d30001](https://explorer.ethscriptions.com/address/0xc0D3C0d3C0d3c0d3c0D3C0D3C0D3C0d3c0d30001#code) (Implementation (Upgradable)), [0x4200000000000000000000000000000000000018](https://explorer.ethscriptions.com/address/0x4200000000000000000000000000000000000018#code) (Admin) Core Ethscriptions NFT contract that manages ethscription ownership and metadata on L2. - Roles: - **admin**: Proxy Can be upgraded by: Proxy with no delay #### EthscriptionsProver Addresses: [0x3300000000000000000000000000000000000003](https://explorer.ethscriptions.com/address/0x3300000000000000000000000000000000000003#code), [0xC0D3c0d3C0d3C0D3c0D3c0D3C0D3c0d3C0d30003](https://explorer.ethscriptions.com/address/0xC0D3c0d3C0d3C0D3c0D3c0D3C0D3c0d3C0d30003#code) (Implementation (Upgradable)), [0x4200000000000000000000000000000000000018](https://explorer.ethscriptions.com/address/0x4200000000000000000000000000000000000018#code) (Admin) L2 predeploy that automatically sends ethscription state snapshots to L1 via the L2ToL1MessagePasser whenever an ethscription is created or transferred. - Roles: - **admin**: Proxy Can be upgraded by: Proxy with no delay #### L2ToL1MessagePasser Addresses: [0x4200000000000000000000000000000000000016](https://explorer.ethscriptions.com/address/0x4200000000000000000000000000000000000016#code), [0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016](https://explorer.ethscriptions.com/address/0xC0D3C0d3C0d3c0d3C0d3C0D3c0D3c0d3c0D30016#code) (Implementation (Upgradable)), [0x4200000000000000000000000000000000000018](https://explorer.ethscriptions.com/address/0x4200000000000000000000000000000000000018#code) (Admin) L2 predeploy for passing messages from L2 to L1. Messages are automatically sent by the EthscriptionsProver when ethscriptions are created or transferred. - Roles: - **admin**: Proxy Can be upgraded by: Proxy with no delay ### Program Hashes #### Aggregation program of Ethscriptions ZK Fault Proofs Aggregates proofs of correct execution for several consecutive block ranges of the Ethscriptions L2 client. - Hash: `0x001d6dd65980c80ef8496f4a0bd9b2ccc1c9e66aeb122f841e0b90e322bbacdd` - Repository: https://github.com/0xFacet/ethscriptions-zk-fault-proofs/tree/251c5248cf92b544a3e6b1b4c0b98b0146dab1c6/programs/aggregation - Verification: successful - Used in: [Ethscriptions](https://ethbeat.org/layer2s/projects/ethscriptions) ##### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`. 2. Make sure docker is running by running `docker ps` 3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes. #### Range program of Ethscriptions ZK Fault Proofs Proves correct state transition function within the Ethscriptions L2 client over a range of consecutive L2 blocks. - Hash: `0x5a02c6f96d93f5ff1bfe8f5f2f7f158a3bc6ab7e294d3f7824507a1c67edf594` - Repository: https://github.com/0xFacet/ethscriptions-zk-fault-proofs/tree/251c5248cf92b544a3e6b1b4c0b98b0146dab1c6/programs/range/ethereum - Verification: successful - Used in: [Ethscriptions](https://ethbeat.org/layer2s/projects/ethscriptions) ##### Verification steps Prepare: 1. Install cargo make: `cargo install --debug --locked cargo-make` 2. Install sp1 toolchain: `curl -L https://sp1up.succinct.xyz/ | bash`, then `sp1up` 3. Install docker [https://docs.docker.com/get-started/get-docker/](https://docs.docker.com/get-started/get-docker/) Verify: 1. Checkout the correct branch in [ethscriptions-zk-fault-proofs](https://github.com/0xFacet/ethscriptions-zk-fault-proofs) repo: `git checkout ethscriptions` . Commit hash should be `251c5248cf92b544a3e6b1b4c0b98b0146dab1c6`. 2. Make sure docker is running by running `docker ps` 3. From the root dir: `cargo run --bin config --release` to build the SP1 programs and generate and print verification key hashes.