From f80f1c91ecd65143879d29182821bcacd66523c3 Mon Sep 17 00:00:00 2001 From: Daniel Lumi <149794418+zk-Lumi@users.noreply.github.com> Date: Tue, 14 May 2024 15:48:08 +0200 Subject: [PATCH] fix: rename zk chains (#1073) --- docs/.vuepress/config.ts | 6 +- .../images/landing/run-a-hyperchain.png | Bin 7696 -> 0 bytes .../public/images/landing/run-a-zk-chain.png | Bin 0 -> 19533 bytes .../landing/{hyperchain.png => zk-chain.png} | Bin docs/.vuepress/sidebar/en.ts | 12 +-- docs/README.md | 6 +- .../images/{hyperchains.png => zk-chains.png} | Bin .../contract-deployment.md | 4 +- .../differences-with-ethereum.md | 2 +- docs/build/support/faq.md | 6 +- .../zksync-cli/commands/custom-chains.md | 2 +- docs/zk-stack/README.md | 12 +-- docs/zk-stack/components/block-explorer.md | 8 +- docs/zk-stack/components/fee-withdrawer.md | 2 +- docs/zk-stack/components/overview.md | 4 +- .../components/portal-wallet-bridge.md | 4 +- docs/zk-stack/components/shared-bridges.md | 40 +++++----- .../smart-contracts/smart-contracts.md | 4 +- docs/zk-stack/components/zkEVM/overview.md | 2 +- docs/zk-stack/concepts/overview.md | 4 +- .../concepts/transaction-lifecycle.md | 2 +- docs/zk-stack/concepts/validiums.md | 4 +- ...perchains-hyperscaling.md => zk-chains.md} | 74 +++++++++--------- docs/zk-stack/running-a-hyperchain/README.md | 52 ------------ .../running-a-hyperchain/getting-started.md | 8 -- docs/zk-stack/running-a-zk-chain/README.md | 52 ++++++++++++ .../dependencies.md | 0 .../enabling-prover.md | 2 +- .../locally.md | 50 ++++++------ .../production.md | 4 +- .../raas.md | 6 +- .../using-zk-chain.md} | 18 ++--- firebase.json | 25 ++++++ 33 files changed, 216 insertions(+), 199 deletions(-) delete mode 100644 docs/.vuepress/public/images/landing/run-a-hyperchain.png create mode 100644 docs/.vuepress/public/images/landing/run-a-zk-chain.png rename docs/.vuepress/public/images/landing/{hyperchain.png => zk-chain.png} (100%) rename docs/assets/images/{hyperchains.png => zk-chains.png} (100%) rename docs/zk-stack/concepts/{hyperchains-hyperscaling.md => zk-chains.md} (62%) delete mode 100644 docs/zk-stack/running-a-hyperchain/README.md delete mode 100644 docs/zk-stack/running-a-hyperchain/getting-started.md create mode 100644 docs/zk-stack/running-a-zk-chain/README.md rename docs/zk-stack/{running-a-hyperchain => running-a-zk-chain}/dependencies.md (100%) rename docs/zk-stack/{running-a-hyperchain => running-a-zk-chain}/enabling-prover.md (78%) rename docs/zk-stack/{running-a-hyperchain => running-a-zk-chain}/locally.md (65%) rename docs/zk-stack/{running-a-hyperchain => running-a-zk-chain}/production.md (79%) rename docs/zk-stack/{running-a-hyperchain => running-a-zk-chain}/raas.md (91%) rename docs/zk-stack/{running-a-hyperchain/using-hyperchain.md => running-a-zk-chain/using-zk-chain.md} (67%) diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index cf50469378..bd69ea69f9 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -37,7 +37,7 @@ export default defineUserConfig({ ], [ "meta", - { name: "description", content: "zkSync Docs bring you all information you need about our protocol, APIs, SDKs, ZK Stack, and hyperchains. Start with our guides and tutorials, or go deep into our architecture and protocol specification." }, + { name: "description", content: "zkSync Docs bring you all information you need about our protocol, APIs, SDKs, ZK Stack, and ZK Chains. Start with our guides and tutorials, or go deep into our architecture and protocol specification." }, ], ["meta", { name: "author", content: "https://matter-labs.io" }], @@ -51,7 +51,7 @@ export default defineUserConfig({ "meta", { name: "og:description", - content: "zkSync Docs bring you all information you need about our protocol, APIs, SDKs, ZK Stack, and hyperchains. Start with our guides and tutorials, or go deep into our architecture and protocol specification.", + content: "zkSync Docs bring you all information you need about our protocol, APIs, SDKs, ZK Stack, and ZK Chains. Start with our guides and tutorials, or go deep into our architecture and protocol specification.", }, ], ["meta", { name: "twitter:card", content: "summary" }], @@ -60,7 +60,7 @@ export default defineUserConfig({ "meta", { name: "twitter:description", - content: "zkSync Docs bring you all information you need about our protocol, APIs, SDKs, ZK Stack, and hyperchains. Start with our guides and tutorials, or go deep into our architecture and protocol specification.", + content: "zkSync Docs bring you all information you need about our protocol, APIs, SDKs, ZK Stack, and ZK Chains. Start with our guides and tutorials, or go deep into our architecture and protocol specification.", }, ], ["meta", { name: "twitter:image", content: "https://docs.zksync.io/share_image.png" }], diff --git a/docs/.vuepress/public/images/landing/run-a-hyperchain.png b/docs/.vuepress/public/images/landing/run-a-hyperchain.png deleted file mode 100644 index ad84263bae208b5d78307988c7f789a9d164f8ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7696 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 literal 0 HcmV?d00001 diff --git a/docs/.vuepress/public/images/landing/hyperchain.png b/docs/.vuepress/public/images/landing/zk-chain.png similarity index 100% rename from docs/.vuepress/public/images/landing/hyperchain.png rename to docs/.vuepress/public/images/landing/zk-chain.png diff --git a/docs/.vuepress/sidebar/en.ts b/docs/.vuepress/sidebar/en.ts index d7d1472fa4..b2105c0278 100644 --- a/docs/.vuepress/sidebar/en.ts +++ b/docs/.vuepress/sidebar/en.ts @@ -611,8 +611,8 @@ export const enSidebar = sidebar({ link: "/zk-stack/concepts/system-upgrades.md" }, { - text: "Hyperchains / Hyperscaling", - link: "/zk-stack/concepts/hyperchains-hyperscaling.md" + text: "ZK Chains", + link: "/zk-stack/concepts/zk-chains.md" }, { text: "Data Availability", @@ -945,20 +945,20 @@ export const enSidebar = sidebar({ ], }, { - text: "Running a Hyperchain", + text: "Running a ZK Chain", collapsible: true, children: [ { text: "Locally", - link: "/zk-stack/running-a-hyperchain/locally.html", + link: "/zk-stack/running-a-zk-chain/locally.html", }, { text: "In Production", - link: "/zk-stack/running-a-hyperchain/production.md" + link: "/zk-stack/running-a-zk-chain/production.md" }, { text: "Rollup as a Service", - link: "/zk-stack/running-a-hyperchain/raas.html", + link: "/zk-stack/running-a-zk-chain/raas.html", }, ] }, diff --git a/docs/README.md b/docs/README.md index 7d2b957483..b12de6aa29 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,17 +30,17 @@ contributors: false - zkStack + ZK Stack

ZK Stack

-

Understand the protocol powering zkSync hyperchains, including zkSync Era.

+

Understand the protocol powering zkSync ZK Chains, including zkSync Era.

run a node

Run a Node

-

All the information you need to run a node for zkSync Era or your hyperchain.

+

All the information you need to run a node for zkSync Era or your ZK Chain.

diff --git a/docs/assets/images/hyperchains.png b/docs/assets/images/zk-chains.png similarity index 100% rename from docs/assets/images/hyperchains.png rename to docs/assets/images/zk-chains.png diff --git a/docs/build/developer-reference/contract-deployment.md b/docs/build/developer-reference/contract-deployment.md index 1fca7a92d2..20e6e5ad76 100644 --- a/docs/build/developer-reference/contract-deployment.md +++ b/docs/build/developer-reference/contract-deployment.md @@ -51,8 +51,8 @@ Each zkEVM bytecode must adhere to the following format: - Its length must be divisible by 32. - Its length in words (32-byte chunks) should be odd. In other words, `bytecodeLength % 64 == 32`. - There is a VM limit, the bytecode can not be more than `2^16` 32-byte words, i.e. `2^21` bytes. -- The bootloader has a memory limit for supplying pubdata of 450999 bytes, therefore limiting the contract size to it as well. This limit is valid for Validium hyperchains, that don’t have to publish the bytecode to the base layer. -- For rollups that must publish the deployed bytecode to the base layer (e.g. Ethereum), there is an additional pubdata limit, which is normally smaller. By default, for each batch, this limit is set to 100000 bytes for hyperchains using calldata DA, or 120000\*number_of_blobs, for hyperchains using EIP-4844 blobs. +- The bootloader has a memory limit for supplying pubdata of 450999 bytes, therefore limiting the contract size to it as well. This limit is valid for Validium ZK Chains, that don’t have to publish the bytecode to the base layer. +- For rollups that must publish the deployed bytecode to the base layer (e.g. Ethereum), there is an additional pubdata limit, which is normally smaller. By default, for each batch, this limit is set to 100000 bytes for ZK Chains using calldata DA, or 120000\*number_of_blobs, for ZK Chains using EIP-4844 blobs. The 32-byte hash of the bytecode of a zkSync contract is calculated in the following way: diff --git a/docs/build/developer-reference/differences-with-ethereum.md b/docs/build/developer-reference/differences-with-ethereum.md index 24caa6d34c..6dc01566b6 100644 --- a/docs/build/developer-reference/differences-with-ethereum.md +++ b/docs/build/developer-reference/differences-with-ethereum.md @@ -397,7 +397,7 @@ All linking happens at compile-time. Deploy-time linking is not supported. ## Precompiles Some EVM cryptographic precompiles (notably pairings and RSA) aren't currently available. However, pairing is -prioritized to allow deployment of both Hyperchains and protocols like Aztec/Dark Forest without modifications. +prioritized to allow deployment of both ZK Chains and protocols like Aztec/Dark Forest without modifications. Ethereum cryptographic primitives like `ecrecover`, `keccak256`, `sha256`, `ecadd` and `ecmul` are supported as precompiles. No actions are required from your side as all the calls to the precompiles are done by the compilers under the hood. diff --git a/docs/build/support/faq.md b/docs/build/support/faq.md index cb91b668d9..71fa0fdffc 100644 --- a/docs/build/support/faq.md +++ b/docs/build/support/faq.md @@ -23,7 +23,7 @@ zkSync Era is a gigantic leap forward in Layer 2 technologies. It is a long-awai - **Future Proof** - Ecosystem projects that adopt zkSync Era now will enjoy all future improvements without the need to change their code, in particular coming from: - The prover technology: hardware acceleration and [new proof systems](https://zksync.mirror.xyz/HJ2Pj45EJkRdt5Pau-ZXwkV2ctPx8qFL19STM5jdYhc). - The compiler: integration of LLVM-enabled modern programming languages. [Learn more about our compiler toolchain](../../zk-stack/components/compiler/toolchain/overview.md). - - Other innovations like [Hyperchains, Hyperbridges and ZK Stack](../../zk-stack/concepts/hyperchains-hyperscaling.md). + - Other innovations like [ZK Chains, Hyperbridges and ZK Stack](../../zk-stack/concepts/zk-chains.md). ## What is the zkEVM? @@ -85,7 +85,7 @@ Almost every smart contract written for EVM will be supported by zkSync Era and You can find more information about the [differences between Ethereum and zkSync Era in this section of the docs](../../build/developer-reference/differences-with-ethereum.md). ::: -There are a few other distinctions, for example, gas metering will be different (as is the case for other L2s as well). Some EVM’s cryptographic precompiles (notably pairings and RSA) won’t be available in the very first release but will be implemented soon after the launch, with pairing being a priority to allow both Hyperchains and protocols like Aztec/Dark Forest to be deployed without modifications too. +There are a few other distinctions, for example, gas metering will be different (as is the case for other L2s as well). Some EVM’s cryptographic precompiles (notably pairings and RSA) won’t be available in the very first release but will be implemented soon after the launch, with pairing being a priority to allow both ZK Chains and protocols like Aztec/Dark Forest to be deployed without modifications too. ## Security expectations @@ -131,7 +131,7 @@ Optimistic rollups suffer from the following key downsides: In contrast, zkSync Era is based on zero-knowledge proofs which have important characteristics that optimistic methods do not - they can hyperscale. ::: tip Hyperscalability -Read more about [Hyperscalability and ZK Stack here](../../zk-stack/concepts/hyperchains-hyperscaling.md). +Read more about [Hyperscalability and ZK Stack here](../../zk-stack/concepts/zk-chains.md). ::: ## Which Wallets are supported? diff --git a/docs/build/tooling/zksync-cli/commands/custom-chains.md b/docs/build/tooling/zksync-cli/commands/custom-chains.md index 489199d0b6..c948259ef1 100644 --- a/docs/build/tooling/zksync-cli/commands/custom-chains.md +++ b/docs/build/tooling/zksync-cli/commands/custom-chains.md @@ -7,7 +7,7 @@ head: # Using custom chains with zksync-cli -The [zksync-cli](../../zksync-cli/getting-started.md) tool provides a flexible way to add or edit custom chains, enabling you to specify your own chain configuration. This feature is essential for developers looking to interact with ZK Stack Hyperchains. +The [zksync-cli](../../zksync-cli/getting-started.md) tool provides a flexible way to add or edit custom chains, enabling you to specify your own chain configuration. This feature is essential for developers looking to interact with ZK Stack Chains. ## Configuring Custom Chains diff --git a/docs/zk-stack/README.md b/docs/zk-stack/README.md index b9689a3e3a..3029dd5c2b 100644 --- a/docs/zk-stack/README.md +++ b/docs/zk-stack/README.md @@ -10,16 +10,16 @@ head:
Run a ZK Stack Hyperchain
-

Run a Hyperchain

-

Quickly spin up a ZK Stack hyperchain on your own machine.

+

Run a ZK Chain

+

Quickly spin up a ZK Stack Chain on your own machine.

ZK Stack Concepts
diff --git a/docs/zk-stack/components/block-explorer.md b/docs/zk-stack/components/block-explorer.md index b4ac6e0fec..d42184910b 100644 --- a/docs/zk-stack/components/block-explorer.md +++ b/docs/zk-stack/components/block-explorer.md @@ -7,10 +7,10 @@ head: # Block Explorer -[The Block Explorer](https://github.com/matter-labs/block-explorer) is a module to allow exposing everything that is happening on your hyperchain to your users/developers. It comes with the following components: +[The Block Explorer](https://github.com/matter-labs/block-explorer) is a module to allow exposing everything that is happening on your ZK Chain to your users/developers. It comes with the following components: -- **Block Explorer Worker:** an indexer service for hyperchain data. The purpose of the service is to read the data from the blockchain in real-time, transform it and fill in its database to be used by the API. +- **Block Explorer Worker:** an indexer service for ZK Chain data. The purpose of the service is to read the data from the blockchain in real-time, transform it and fill in its database to be used by the API. -- **Block Explorer API:** a service that provides an HTTP API for retrieving structured hyperchain data. It must be connected to the block explorer worker database. +- **Block Explorer API:** a service that provides an HTTP API for retrieving structured ZK Chain data. It must be connected to the block explorer worker database. -- **Block Explorer App:** The UI that allows user/devs to explore transactions, blocks, batches, contracts, tokens, and much more, on your hyperchain. +- **Block Explorer App:** The UI that allows user/devs to explore transactions, blocks, batches, contracts, tokens, and much more, on your ZK Chain. diff --git a/docs/zk-stack/components/fee-withdrawer.md b/docs/zk-stack/components/fee-withdrawer.md index 709de1e659..e97cc9e428 100644 --- a/docs/zk-stack/components/fee-withdrawer.md +++ b/docs/zk-stack/components/fee-withdrawer.md @@ -7,6 +7,6 @@ head: # Fee Withdrawer -[The Fee Withdrawer](https://github.com/matter-labs/era-fee-withdrawer) automates the withdrawal of the hyperchain collected fees to an address on the base layer. +[The Fee Withdrawer](https://github.com/matter-labs/era-fee-withdrawer) automates the withdrawal of the ZK Chain collected fees to an address on the base layer. This helps ensure the ETH operator on the base layer side has a constant influx of the gas token to keep working properly. diff --git a/docs/zk-stack/components/overview.md b/docs/zk-stack/components/overview.md index aaf0ac4454..529d061b4e 100644 --- a/docs/zk-stack/components/overview.md +++ b/docs/zk-stack/components/overview.md @@ -7,6 +7,6 @@ head: # Overview -ZK Stack is a modular framework for building sovereign ZK-powered Ethereum rollups (called hyperchains); it is a modular, open-source framework that is both free and designed to build custom hyperchains (ZK-powered L2s and L3s), based on the code of zkSync Era, the first hyperchain. +ZK Stack is a modular framework for building sovereign ZK-powered Ethereum rollups (called ZK Chains); it is a modular, open-source framework that is both free and designed to build custom ZK Chains (ZK-powered L2s and L3s), based on the code of zkSync Era, the first ZK Chain. -At its core, the ZK Stack offers two key features: sovereignty and seamless connectivity. The creator (you) possesses full rights to the code and enjoys unrestricted autonomy to customize and shape many aspects of your chain. Hyperchains operate independently but are interconnected by a network of hyperbridges, enabling trustless, fast (within minutes), and cheap (cost of a single transaction) interoperability. +At its core, the ZK Stack offers two key features: sovereignty and seamless connectivity. The creator (you) possesses full rights to the code and enjoys unrestricted autonomy to customize and shape many aspects of your chain. ZK Chains operate independently but are interconnected by a network of hyperbridges, enabling trustless, fast (within minutes), and cheap (cost of a single transaction) interoperability. diff --git a/docs/zk-stack/components/portal-wallet-bridge.md b/docs/zk-stack/components/portal-wallet-bridge.md index cfc31642cd..c860f8c595 100644 --- a/docs/zk-stack/components/portal-wallet-bridge.md +++ b/docs/zk-stack/components/portal-wallet-bridge.md @@ -7,12 +7,12 @@ head: # Portal + Bridge -[The Portal](https://github.com/matter-labs/dapp-portal) is a dApp that allows you (and your users) to easily interact with your hyperchain. +[The Portal](https://github.com/matter-labs/dapp-portal) is a dApp that allows you (and your users) to easily interact with your ZK Chain. This includes: - Bridging assets to and from the L1, -- Sending them within your hyperchain, +- Sending them within your ZK Chain, - Checking historical transactions, and - Managing contracts diff --git a/docs/zk-stack/components/shared-bridges.md b/docs/zk-stack/components/shared-bridges.md index 876be6a832..d3046c806c 100644 --- a/docs/zk-stack/components/shared-bridges.md +++ b/docs/zk-stack/components/shared-bridges.md @@ -8,41 +8,41 @@ head: # Shared Bridge Ethereum's future is rollup-centric. This means breaking with the current paradigm of isolated EVM chains to -infrastructure that is focused on an ecosystem of interconnected zkEVMs, which we call Hyperchains. This ecosystem +infrastructure that is focused on an ecosystem of interconnected zkEVMs, which we call ZK Chains. This ecosystem will be grounded on Ethereum with the appropriate L1 smart contracts. Here we outline our ZK Stack approach for these contracts, their interfaces, the needed changes to the existing architecture, as well as future features to be implemented. -If you want to know more about Hyperchains, check this +If you want to know more about ZK Chains, check this [blog post](https://blog.matter-labs.io/introduction-to-hyperchains-fdb33414ead7), or go through -[Hyperchains](../concepts/hyperchains-hyperscaling.md) in our docs. +[ZK Chains](../concepts/zk-chains.md) in our docs. ## High-level design We want to create a system where: -- Hyperchains should be launched permissionlessly within the ecosystem. +- ZK Chains should be launched permissionlessly within the ecosystem. - Hyperbridges should enable unified liquidity for assets across the ecosystem. - Multi-chain smart contracts need to be easy to develop, which means easy access to traditional bridges, and other supporting architecture. -Hyperchains have specific trust requirements - they need to satisfy certain common standards so that they can trust each -other. This means a single set of L1 smart contracts has to manage the proof verification for all hyperchains, and if +ZK Chains have specific trust requirements - they need to satisfy certain common standards so that they can trust each +other. This means a single set of L1 smart contracts has to manage the proof verification for all ZK Chains, and if the proof system is upgraded, all chains have to be upgraded together. New chains will be able to be launched permissionlessly in the ecosystem according to this shared standard. To allow unified liquidity each L1 asset (ETH, ERC20, NFTs) will have a single bridge contract on L1 for the whole -ecosystem. These shared bridges will allow users to deposit, withdraw and transfer from any hyperchain in the ecosystem. -These shared bridges are also responsible for deploying and maintaining their counterparts on the hyperchains. The +ecosystem. These shared bridges will allow users to deposit, withdraw and transfer from any ZK Chain in the ecosystem. +These shared bridges are also responsible for deploying and maintaining their counterparts on the ZK Chains. The counterparts will be asset contracts extended with bridging functionality. To enable the bridging functionality: -- On the L1 we will add a Bridgehub contract which connects asset bridges to all the hyperchains. This will also be the +- On the L1 we will add a Bridgehub contract which connects asset bridges to all the ZK Chains. This will also be the contract that holds the ETH for the ecosystem. -- On the Hyperchain side we will add special system contracts that enable these features. +- On the ZK Chain side we will add special system contracts that enable these features. We want to make the ecosystem as modular as possible, giving developers the ability to modify the architecture as needed; consensus mechanism, staking, and DA requirements. @@ -60,10 +60,10 @@ be able to leverage them when available). ## Components: Bridgehub -- Acts as a hub for bridges, so that they have a single point of communication with all hyperchain contracts. This - allows L1 assets to be locked in the same contract for all hyperchains, including L3s and validiums. The `Bridgehub` +- Acts as a hub for bridges, so that they have a single point of communication with all ZK Chain contracts. This + allows L1 assets to be locked in the same contract for all ZK Chains, including L3s and validiums. The `Bridgehub` also implements the following: -- `Registry` This is where hyperchains can register, starting in a permissioned manner, but with the goal to be +- `Registry` This is where ZK Chains can register, starting in a permissioned manner, but with the goal to be permissionless in the future. This is where their `chainID` is determined. L3s will also register here. This `Registry` is also where State Transition contracts should register. Each chain has to specify its desired ST when registering (Initially, only one will be available). @@ -114,7 +114,7 @@ be able to leverage them when available). - `Hypermailbox` - This will allow general message passing (L2<>L2, L2<>L3, etc). This is where the `Mailbox` sends the `Hyperlogs`. - `Hyperlogs` are commitments to these messages sent from a single hyperchain. `Hyperlogs` are aggregated into a + `Hyperlogs` are commitments to these messages sent from a single ZK Chain. `Hyperlogs` are aggregated into a `HyperRoot` in the `HyperMailbox`. - This component has not been implemented yet @@ -122,11 +122,11 @@ be able to leverage them when available). - Some assets have to be natively supported (ETH, WETH) and it also makes sense to support some generally accepted token standards (ERC20 tokens), as this makes it easy to bridge those tokens (and ensures a single version of them exists on - the hyperchain). These canonical asset contracts are deployed from L1 by a bridge shared by all hyperchains. This is - where assets are locked on L1. These bridges use the Bridgehub to communicate with all hyperchains. Currently, these + the zkSync ecosystem). These canonical asset contracts are deployed from L1 by a bridge shared by all ZK Chains. This is + where assets are locked on L1. These bridges use the Bridgehub to communicate with all ZK Chains. Currently, these bridges are the `WETH` and `ERC20` bridges. - - The pair on L2 is deployed from L1. The hash of the factory dependencies is stored on L1, and when a hyperchain + - The pair on L2 is deployed from L1. The hash of the factory dependencies is stored on L1, and when a ZK Chain wants to register, it can passes it in for deployment, it is verified, and the contract is deployed on L2. The actual token contracts on L2 are deployed by the L2 bridge. @@ -157,7 +157,7 @@ be able to leverage them when available). - `StateTransitionRegistry` The ST is shared for multiple chains, so initialization and upgrades have to be the same for all chains. Registration is not permissionless but happens based on the registrations in the bridgehub’s `Registry`. At registration a `DiamondProxy` is deployed and initialized with the appropriate `Facets` for each - Hyperchain. + ZK Chain. - `Facets` and `Verifier` are shared across chains that relies on the same ST: `Base`, `Executor` , `Getters`, `Admin` , `Mailbox.`The `Verifier` is the contract that actually verifies the proof, and is called by the `Executor`. - Upgrade Mechanism The system requires all chains to be up-to-date with the latest implementation, so whenever an @@ -218,7 +218,7 @@ specified address. ## Common Standards and Upgrades -In this initial phase, Hyperchains have to follow some common standards, so that they can trust each other. This means +In this initial phase, ZK Chains have to follow some common standards, so that they can trust each other. This means all chains start out with the same empty state, they have the same VM implementations and proof systems, asset contracts can trust each on different chains, and the chains are upgraded together. We elaborate on the shared upgrade mechanism here. @@ -230,7 +230,7 @@ Governor (a multisig) and are public for a certain timeframe before they can be normal upgrades, but the data is not known at the moment the upgrade is proposed, but only when executed (they can be executed with the delay, or instantly if approved by the security council). Instant upgrades (used for security issues), on the other hand happen quickly and need to be approved by the Security Council in addition to the Governor. For -hyperchains the difference is that upgrades now happen on multiple chains. This is only a problem for shadow upgrades - +ZK Chains the difference is that upgrades now happen on multiple chains. This is only a problem for shadow upgrades - in this case, the chains have to tightly coordinate to make all the upgrades happen in a short time frame, as the content of the upgrade becomes public once the first chain is upgraded. The actual upgrade process is as follows: diff --git a/docs/zk-stack/components/smart-contracts/smart-contracts.md b/docs/zk-stack/components/smart-contracts/smart-contracts.md index e7e5a6ccb3..dc18def9c2 100644 --- a/docs/zk-stack/components/smart-contracts/smart-contracts.md +++ b/docs/zk-stack/components/smart-contracts/smart-contracts.md @@ -12,7 +12,7 @@ their own state, providing validity proofs for state transition, implementing a practice, all this is achieved by Smart Contracts built on top of Ethereum. This document details the architecture of -the L2 contracts on Ethereum (also called Layer 1 or L1). We also have contracts that support the hyperchain ecosystem, we cover those in +the L2 contracts on Ethereum (also called Layer 1 or L1). We also have contracts that support the zkSync ecosystem, we cover those in the [Shared Bridge](../shared-bridges.md) section. The Shared Bridge relies on these individual contracts. ## Diamond @@ -36,7 +36,7 @@ then the diamond will be frozen forever. The diamond proxy pattern is very flexible and extendable. For now, it allows splitting implementation contracts by their logical meaning, removes the limit of bytecode size per contract and implements security features such as freezing. In the future, it can also be viewed as [EIP-6900](https://eips.ethereum.org/EIPS/eip-6900) for -[zkStack](https://blog.matter-labs.io/introducing-the-zk-stack-c24240c2532a), where each hyperchain can implement a +[ZK Stack](https://blog.matter-labs.io/introducing-the-zk-stack-c24240c2532a), where each ZK Chain can implement a sub-set of allowed implementation contracts. ### GettersFacet diff --git a/docs/zk-stack/components/zkEVM/overview.md b/docs/zk-stack/components/zkEVM/overview.md index aad8de957b..1472e2141d 100644 --- a/docs/zk-stack/components/zkEVM/overview.md +++ b/docs/zk-stack/components/zkEVM/overview.md @@ -8,7 +8,7 @@ head: # zkEVM The zkEVM is used to execute transactions. It is similar in construction to the EVM, so it executes transactions -similarly, but it plays a fundamentally different role in the zkStack than the EVM does in Ethereum. The EVM is used to +similarly, but it plays a fundamentally different role in the ZK Stack than the EVM does in Ethereum. The EVM is used to execute smart contracts in Ethereum's state transition function. This STF needs a client to implement and run it. Rollups have a different set of requirements, they need to produce a proof that some client executed the STF correctly. diff --git a/docs/zk-stack/concepts/overview.md b/docs/zk-stack/concepts/overview.md index 84b8aa05f4..2e7cba956a 100644 --- a/docs/zk-stack/concepts/overview.md +++ b/docs/zk-stack/concepts/overview.md @@ -20,7 +20,7 @@ node to verify all transactions, the state of the rollup can be easily checked b the proof. These external validators of a rollup can be other rollups. This means we can connect rollups trustlessly, and create a -network of rollups. This network is called the hyperchain. +network of rollups. This network is called the zkSync ecosystem. These specs will provide a high level overview of the zkEVM and a full specification of its more technical components, -such as the prover, compiler, and the VM itself. We also specify the foundations of the hyperchain ecosystem. +such as the prover, compiler, and the VM itself. We also specify the foundations of the zkSync ecosystem. diff --git a/docs/zk-stack/concepts/transaction-lifecycle.md b/docs/zk-stack/concepts/transaction-lifecycle.md index 2ff6907691..a3f66c3499 100644 --- a/docs/zk-stack/concepts/transaction-lifecycle.md +++ b/docs/zk-stack/concepts/transaction-lifecycle.md @@ -47,7 +47,7 @@ Finally at the end of the process, we create the proofs and send them to L1. Our proof system provides excellent performance, and can be run on just 16Gb of GPU RAM. This will enable the proof generation to be truly decentralized. -Up to this point we have only talked about a single chain. We will connect these chains into a single ecosystem, called the hyperchain. +Up to this point we have only talked about a single chain. We will connect these chains into a single ecosystem, called the zkSync Ecosystem. ## Transaction data diff --git a/docs/zk-stack/concepts/validiums.md b/docs/zk-stack/concepts/validiums.md index e30fcef6c4..90e679a696 100644 --- a/docs/zk-stack/concepts/validiums.md +++ b/docs/zk-stack/concepts/validiums.md @@ -36,11 +36,11 @@ However, one potential risk with Validiums is the withholding of off-chain data ### Enterprise Solutions -Validiums are ideal for enterprise chains requiring auditability and privacy. By controlling data availability, enterprises can maintain private Hyperchains, making Validiums an attractive choice for these applications. +Validiums are ideal for enterprise chains requiring auditability and privacy. By controlling data availability, enterprises can maintain private ZK Chains, making Validiums an attractive choice for these applications. ### Privacy Benefits -For Hyperchains operating in Validium mode, privacy is inherently enhanced as long as the block data remains confidential. This feature is particularly beneficial for enterprise users seeking to protect sensitive information. +For ZK Chains operating in Validium mode, privacy is inherently enhanced as long as the block data remains confidential. This feature is particularly beneficial for enterprise users seeking to protect sensitive information. ## Further Resources diff --git a/docs/zk-stack/concepts/hyperchains-hyperscaling.md b/docs/zk-stack/concepts/zk-chains.md similarity index 62% rename from docs/zk-stack/concepts/hyperchains-hyperscaling.md rename to docs/zk-stack/concepts/zk-chains.md index fe0d90462e..7097d95ba4 100644 --- a/docs/zk-stack/concepts/hyperchains-hyperscaling.md +++ b/docs/zk-stack/concepts/zk-chains.md @@ -2,18 +2,18 @@ head: - - meta - name: "twitter:title" - content: Hyperchains/Hyperscaling | zkSync Docs + content: ZK Chains | zkSync Docs --- -# Hyperchains/Hyperscaling +# ZK Chains ## Scaling Blockchains Ethereum, currently processing around 12 transactions per second, must scale to handle millions of transactions for a future of global on-chain financial activities. Achieving this in a decentralized structure poses significant challenges. Various solutions, including Polkadot, Cosmos, Near, and Eth 2.0, have been explored with multi-chain or shard architectures, but full trust remains an issue. The widely accepted solution for these challenges lies in zero-knowledge proofs, offering cryptographic security. Combined with the DA layer and ZK Rollups, these can create a secure, scalable ecosystem, making Ethereum accessible to all. -## What are Hyperchains? +## What are ZK Chains? -Hyperchains are fractal-like instances of zkEVM running in parallel and with the common settlement on the L1 mainnet. The name Hyperbridge comes from the traditional web, where users can navigate websites using hyperlinks. Similarly, our rollups will be connected with Hyperbridges. +ZK Chains are fractal-like instances of zkEVM running in parallel and with the common settlement on the L1 mainnet. The name Hyperbridge comes from the traditional web, where users can navigate websites using hyperlinks. Similarly, our rollups will be connected with Hyperbridges.
@@ -22,16 +22,16 @@ Gray lines show proofs, orange lines the hyperbridges, which automatically conne
-Using Hyperchains with a shared bridge contract on L1, and native Hyperbridges between the rollups solves a lot of problems in other architectures. +Using ZK Chains with a shared bridge contract on L1, and native Hyperbridges between the rollups solves a lot of problems in other architectures. 1. Rollups have validating bridges that are trustless. 2. Hyperbridges can easily burn and mint assets for transfers between members of the ecosystem. 3. The L1 serves as a single source of truth, so the rollups cannot hard fork. 4. The ecosystem can coordinate a hard fork together in case a vulnerability is found using a governance framework on L1, similar to how the L1 would react to a vulnerability. -Hyperchains can be developed and permissionlessly deployed by anyone. However, to remain trusted and fully interoperable, each Hyperchain must be powered by the same zkEVM engine available on the ZK Stack (and currently powering the first hyperchain, zkSync Era). All the ZKP circuits will thus remain 100% identical, letting Hyperchains fully inherit their security from L1, no matter who deployed them. This ensures zero additional trust/security assumptions. +ZK Chains can be developed and permissionlessly deployed by anyone using ZK Stack. However, to remain trusted and fully interoperable, each ZK Chains must be powered by the same zkEVM engine available on the ZK Stack (and currently powering the first ZK Chain, zkSync Era). All the ZKP circuits will thus remain 100% identical, letting ZK Chains fully inherit their security from L1, no matter who deployed them. This ensures zero additional trust/security assumptions. -Hyperchains will be implemented following the modular approach – using the ZK Stack developers can individually pick different components of their blockchains or implement their own ones (except the zkEVM core, for the reasons explained above). See [Modularity: Hyperchain Customization](#modularity-hyperchain-customization) below for more details. +ZK Chains will be implemented following the modular approach – using the ZK Stack developers can individually pick different components of their blockchains or implement their own ones (except the zkEVM core, for the reasons explained above). See [Modularity: ZK Chain Customization](#modularity-zk-chain-customization) below for more details. ### How Hyperbridges work @@ -39,13 +39,13 @@ The Hyperbridge itself will be a set of smart contracts, verifying Merkle proofs Hyperbridging will consist of 7 steps. -1. A Hyperchain initiates the cross-hyperchain transaction. -2. The sending Hyperchain settles its proof onto L1. +1. A ZK Chain initiates the cross-ZK Chain transaction. +2. The sending ZK Chains settles its proof onto L1. 3. As the proof is settled, it updates the Transaction Root. This Root is a commitment to all the Hyperbridge transactions happening inside the ecosystem. -4. The receiving Hyperchain imports this Transaction Root via its consensus mechanism, similarly to how L1→L2 messages are imported today. -5. A relayer sends the transaction and a Merkle Proof connecting it to the Transaction Root to the receiving Hyperchain. +4. The receiving ZK Chain imports this Transaction Root via its consensus mechanism, similarly to how L1→L2 messages are imported today. +5. A relayer sends the transaction and a Merkle Proof connecting it to the Transaction Root to the receiving ZK Chain. 6. The transaction and Merkle proof are verified against the Transaction Root. If the proof is correct, the transaction is executed and the relayer is rewarded. -7. The receiving Hyperchain settles its proof, where the imported Transaction Root is also verified. +7. The receiving ZK Chain settles its proof, where the imported Transaction Root is also verified.
@@ -59,17 +59,17 @@ ZkPorter bridges will only appear for developers, as they connect the shards of Hyperbridges technically will be similar to L2→L1 bridges, they will be asynchronous and not atomic. However, with the help of Account Abstraction, external relayers, and lower fees on rollups, the users will not have to initiate the call on the destination chain. This means the user experience will feel like an L1 → L2 bridge. -Besides cross-hyperchain calls, it will be also possible to execute cross-hyperchain views inside transactions, accessing arbitrary data from other chains in the ecosystem. +Besides cross-ZK Chain calls, it will be also possible to execute cross-ZK Chain views inside transactions, accessing arbitrary data from other chains in the ecosystem. -### Hyperchain User Experience +### ZK Chain User Experience -As we aim to onboard billions of users to Web3, user experience has to be a priority. Users will have wallets on different chains, unified by cross-hyperchain wallet management. This is still a hot research topic, as seen in Vitalik's [post](https://vitalik.eth.limo/general/2023/06/20/deeperdive.html). These solutions will be integrated into Account Abstractions, which are natively supported on ZK Stack powered chains. +As we aim to onboard billions of users to Web3, user experience has to be a priority. Users will have wallets on different chains, unified by cross-ZK Chain wallet management. This is still a hot research topic, as seen in Vitalik's [post](https://vitalik.eth.limo/general/2023/06/20/deeperdive.html). These solutions will be integrated into Account Abstractions, which are natively supported on ZK Stack powered chains. -The users' wallets will show all of their assets, and relayers will handle bridging, burning, and minting assets to be used at the destination. Hyperchains will have unique identifiers that, when paired with ENS, will make recipient addresses look like email addresses. Of course, the default will be the use of traditional Ethereum addresses together with the Hyperchain identifiers. +The users' wallets will show all of their assets, and relayers will handle bridging, burning, and minting assets to be used at the destination. ZK Chains will have unique identifiers that, when paired with ENS, will make recipient addresses look like email addresses. Of course, the default will be the use of traditional Ethereum addresses together with the ZK Chain identifiers. -Bridging will be part of the protocol, so it will be built into the wallet alongside transfers. Bridging time will be the proof settlement time, which will be 1-15 minutes, depending on the Hyperchain. Due to the fact that only relayers will be required as external infrastructure, the cost of the bridging will be minimal, comparable to the gas fees. +Bridging will be part of the protocol, so it will be built into the wallet alongside transfers. Bridging time will be the proof settlement time, which will be 1-15 minutes, depending on the ZK Chain. Due to the fact that only relayers will be required as external infrastructure, the cost of the bridging will be minimal, comparable to the gas fees. -**Imagine a cross-hyperchain Uniswap transaction.** You want to swap Ethereum for DAI. You start the transaction with your wallet. Then the relayer delivers 1 ETH to a Uniswap chain, and the ETH is swapped for DAI. Finally, a relayer transfers the DAI back to your original chain. All three steps are part of the same transaction. All of this in a matter of minutes and feels as if you have not left your original chain (except for a somewhat longer confirmation time). +**Imagine a cross-ZK Chain Uniswap transaction.** You want to swap Ethereum for DAI. You start the transaction with your wallet. Then the relayer delivers 1 ETH to a Uniswap chain, and the ETH is swapped for DAI. Finally, a relayer transfers the DAI back to your original chain. All three steps are part of the same transaction. All of this in a matter of minutes and feels as if you have not left your original chain (except for a somewhat longer confirmation time).
@@ -81,11 +81,11 @@ When setting up wallets on cheaper chains ([validiums](https://ethereum.org/en/d ## Proof Aggregation -Validity proofs provide the basic scalability to the ecosystem. Having a single blockchain is like running a single CPU. Having multiple Hyperchains run simultaneously provides parallelization. The proof aggregator is the mechanism that gives the ecosystem its hyperscalability. If every Hyperchain wanted to settle their proofs to L1 independently, the total load on the L1 would still be proportional to the total number of Hyperchains. So the proofs of the Hyperchains are aggregated, settling all of them together on L1 in a single proof. There are multiple options for this. +Validity proofs provide the basic scalability to the ecosystem. Having a single blockchain is like running a single CPU. Having multiple ZK Chains run simultaneously provides parallelization. The proof aggregator is the mechanism that gives the ecosystem its hyperscalability. If every ZK Chain wanted to settle their proofs to L1 independently, the total load on the L1 would still be proportional to the total number of ZK Chains. So the proofs of the ZK Chains are aggregated, settling all of them together on L1 in a single proof. There are multiple options for this. ### Simple Proof Aggregation -Simple proof aggregation treats the proofs of different Hyperchains as independent statements that can be verified together on L1. Unfortunately, the simple aggregation mechanism does not allow fast messaging as proofs are settled infrequently on L1 to save gas fees. +Simple proof aggregation treats the proofs of different ZK Chains as independent statements that can be verified together on L1. Unfortunately, the simple aggregation mechanism does not allow fast messaging as proofs are settled infrequently on L1 to save gas fees.
@@ -95,7 +95,7 @@ Simple proof aggregation treats the proofs of different Hyperchains as independe ### L3s -Another alternative for aggregation is layering. Hyperchains can settle their proof on an L2 Hyperchain, becoming L3s. L3s settling on the same L2 will have faster messaging between each other and will have cheap atomicity via transactions forced through the L2, and interoperability will be preserved with the wider ecosystem. This is a particularly good solution for Validiums, as they don’t send data to the L1. The only downside is that there is a higher chance of reversion if the L2 reverts. +Another alternative for aggregation is layering. ZK Chains can settle their proof on an L2 ZK Chain, becoming L3s. L3s settling on the same L2 will have faster messaging between each other and will have cheap atomicity via transactions forced through the L2, and interoperability will be preserved with the wider ecosystem. This is a particularly good solution for Validiums, as they don’t send data to the L1. The only downside is that there is a higher chance of reversion if the L2 reverts. Here proof aggregation happens via the L2, as the proofs of different L2 blocks are aggregated when settling on L1. This method is ultimately not scalable, as the L2's VM will be a bottleneck for proof verification. The L2's VM will also require a full consensus mechanism, meaning long-term storage, transaction verification, etc. @@ -129,9 +129,9 @@ For these rollups proof generation and settlement still happens as usual. This m ### Sovereignty -All Hyperchains will be sovereign in the ecosystem. This means two things. +All ZK Chains will be sovereign in the ecosystem. This means two things. -1. Proof aggregation will be optional, Hyperchains can choose to not participate. In this case, they can settle their proofs directly to Ethereum for a much larger fee. Aggregation will also be decentralized and widely accessible, meaning the hardware requirements to run a prover will be as low as possible. +1. Proof aggregation will be optional, ZK Chains can choose to not participate. In this case, they can settle their proofs directly to Ethereum for a much larger fee. Aggregation will also be decentralized and widely accessible, meaning the hardware requirements to run a prover will be as low as possible.
@@ -139,9 +139,9 @@ All Hyperchains will be sovereign in the ecosystem. This means two things.
-2. In addition, Hyperchains will be able to permissionlessly join and exit the ecosystem, adding or removing all their assets to the common pool in the Shared Bridge. Joining is self-explanatory, everyone will have the right to boot up new Hyperchains and join the ecosystem in a Chain Factory contract. +2. In addition, ZK Chains will be able to permissionlessly join and exit the ecosystem, adding or removing all their assets to the common pool in the Shared Bridge. Joining is self-explanatory, everyone will have the right to boot up new ZK Chains and join the ecosystem in a Chain Factory contract. -Exiting will usually not be a similarly wise decision, as interoperability will be lost with other Hyperchains. However, the ecosystem could sometimes upgrade due to governance, and in this case, it is imperative that each Hyperchain have the right to rage quit. In this case, there will be a mandatory upgrade period during which the Hyperchains that disagree with the upgrade can exit alone, or together in a coordinated fashion. +Exiting will usually not be a similarly wise decision, as interoperability will be lost with other ZK Chains. However, the ecosystem could sometimes upgrade due to governance, and in this case, it is imperative that each ZK Chain have the right to rage quit. In this case, there will be a mandatory upgrade period during which the ZK Chains that disagree with the upgrade can exit alone, or together in a coordinated fashion. ### Feature comparison @@ -159,30 +159,30 @@ We look at the comparisons that different aggregator mechanisms enable.
-## Modularity: Hyperchain Customization +## Modularity: ZK Chain Customization The main customization options to be provided by [ZK Stack](https://blog.matter-labs.io/introducing-the-zk-stack-c24240c2532a) are explained below. Developers are of course free to implement their own components and customizations. ### Sequencing transactions - **Centralized sequencer** - In this mode, there will be a single centralized operator with a conventional REST API to accept transactions from users. The operator must be trusted to maintain liveness, not to abuse MEV, and not to allow reorgs of unfinalized transactions, so the operator’s reputation will play a big role. The biggest advantage of this option is that it can provide the lowest possible latency to confirm transactions (<100ms), which is critical for use cases such as HFT. ZkSync Era will run in this mode until it is fully decentralized, so we will have battle-tested server code available for developers early on. -- **Decentralized sequencer** - In this mode, a Hyperchain will coordinate on what transactions are included in a block using a consensus algorithm. It can be any algorithm, so developers can reuse existing implementations (e.g. Tendermint or HotStuff with permissionless dPoS). But we can also take advantage of the fact that finality checkpoints are guaranteed by the underlying L1, and implement an algorithm that is simpler and boasts higher performance. ZkSync Era will switch to this option as soon as the consensus implementation is ready and will make its code available to the Hyperchain developers. +- **Decentralized sequencer** - In this mode, a ZK Chain will coordinate on what transactions are included in a block using a consensus algorithm. It can be any algorithm, so developers can reuse existing implementations (e.g. Tendermint or HotStuff with permissionless dPoS). But we can also take advantage of the fact that finality checkpoints are guaranteed by the underlying L1, and implement an algorithm that is simpler and boasts higher performance. ZkSync Era will switch to this option as soon as the consensus implementation is ready and will make its code available to the ZK Chain developers. - **Priority queue** - This simply means the absence of any sequencer: all transactions can be submitted in batches via the priority queue from an underlying L2 or even L1 chain, taking advantage of their stronger censorship resistance. It might be especially interesting for special-purpose governance protocols (e.g. on-chain voting). It’s worth noting that the priority queue will always be available as an escape-hatch mechanism (even if a centralized or decentralized sequencer is employed), to protect users against censorship by a malicious sequencer. -- **External protocol** - The sequencing of the Hyperchain is freely customizable, so external protocols such as Shared Sequencers and Shared Builders can also be used. +- **External protocol** - The sequencing of the ZK Chain is freely customizable, so external protocols such as Shared Sequencers and Shared Builders can also be used. -### Hyperchains and Data Availability (DA) +### ZK Chains and Data Availability (DA) -Each Hyperchain can manage its data availability (DA) policy using a smart contract interface. It can use one of the options described below or some more complex logic. For example, to combine zkPorter and validium, the DA will require both a quorum of the signatures from the guardians and a number of signatures from the data availability committee. +Each ZK Chain can manage its data availability (DA) policy using a smart contract interface. It can use one of the options described below or some more complex logic. For example, to combine zkPorter and validium, the DA will require both a quorum of the signatures from the guardians and a number of signatures from the data availability committee. -- **zk-Rollup** - This is our default recommendation policy: the values of every changed storage slot at the end of the block must be published as calldata (or blobs, depending on what's cheaper) on L1. Note that repeated changes (or back-and-forth changes that result in no net difference) are not posted. It means if a batch contains 100 ETH/DAI swaps on the same DEX then pubdata costs will be partially amortized over all such swaps. A Hyperchain working in this mode strictly inherits full security and censorship-resistance properties from Ethereum. The implementation of zkRollup in output mode is already available in zkSync Era and the ZK Stack. -- **zkPorter** - it's explained in detail in **[this post](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf)**. We already have a working zkPorter guardian testnet, which we are preparing to open source. We expect zkPorter to be popular with users willing to take higher security risks in exchange for really cheap transactions, which will be extremely useful until Danksharding is implemented, and even afterward for specialized use cases. Hyperchain developers will be able to either tap into the DA from zkSync main zkPorter implementation or bootstrap their own guardian network (which could be interesting for large existing online communities such as Reddit or Twitter), or use external DA solutions (e.g. EigenDA). -- **Validium** - Being true to our **[values](https://github.com/zksync/credo)**, we generally **[discourage](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)** mainstream users from trusting validium-based solutions. However, there are use cases where using validium is fully justified, e.g. enterprise chains that require both auditability and privacy (since the data availability in such cases is controlled by a central party, it is trivial to keep such a Hyperchain private by simply withholding data). Since validium is essentially a simpler case of a zkPorter, developers can easily deploy Hyperchains based on this policy. +- **zk-Rollup** - This is our default recommendation policy: the values of every changed storage slot at the end of the block must be published as calldata (or blobs, depending on what's cheaper) on L1. Note that repeated changes (or back-and-forth changes that result in no net difference) are not posted. It means if a batch contains 100 ETH/DAI swaps on the same DEX then pubdata costs will be partially amortized over all such swaps. A ZK Chain working in this mode strictly inherits full security and censorship-resistance properties from Ethereum. The implementation of zkRollup in output mode is already available in zkSync Era and the ZK Stack. +- **zkPorter** - it's explained in detail in **[this post](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf)**. We already have a working zkPorter guardian testnet, which we are preparing to open source. We expect zkPorter to be popular with users willing to take higher security risks in exchange for really cheap transactions, which will be extremely useful until Danksharding is implemented, and even afterward for specialized use cases. ZK Chain developers will be able to either tap into the DA from zkSync main zkPorter implementation or bootstrap their own guardian network (which could be interesting for large existing online communities such as Reddit or Twitter), or use external DA solutions (e.g. EigenDA). +- **Validium** - Being true to our **[values](https://github.com/zksync/credo)**, we generally **[discourage](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263)** mainstream users from trusting validium-based solutions. However, there are use cases where using validium is fully justified, e.g. enterprise chains that require both auditability and privacy (since the data availability in such cases is controlled by a central party, it is trivial to keep such a ZK Chain private by simply withholding data). Since validium is essentially a simpler case of a zkPorter, developers can easily deploy a ZK Chain based on this policy. - **Based zkRollup** - This policy will require publishing full transaction inputs instead of final storage updates. Trustless state reconstruction and the DA costs in this case will be 100% identical to optimistic rollups (but with all the benefits of a zkRollup of course, including better security and faster exits). The implementation of this option is easily derived from the implementation of the normal zkRollup. It can be explored by application-specific chains where tx inputs are short but might lead to a lot of changes in data (for example, performing financial simulations). - **zkRollup (self-hosted)** - An extremely interesting option! In this mode, users self-host the data for all the accounts they own. To enforce this, user confirmation signatures are required to make any changes – which means, you cannot send funds directly to another user. Instead, you will burn the funds and create a proof of this burn, which you can provide to your recipient via an off-chain channel. The recipient will then redeem them to their account. This might sound complicated, but it’s easy to construct a nice UI that will abstract away the technical complexities, making it practically indistinguishable from sending and receiving funds on Ethereum (it will automatically redeem all received assets the moment the user intends to spend funds, requiring no extra clicks). But here comes a miracle: a self-hosted zkRollup can be happy with as little as 5 bytes per user interaction that includes a batch of arbitrary many transactions! This makes sharded Ethereum infinitely scalable for any practical purposes in the zkRollup mode (i.e. 100% secure and censorship-resistant). This is a way to onboard every single person on Earth to Ethereum with zero security compromise. A great thing about this approach is also that it’s fully compatible with our zkEVM implementation, but can nonetheless offer privacy to the users. The implementation is non-trivial, so we expect it to come last among all the other options. At the same time, it’s simpler and much more powerful than alternative approaches like Adamantium. ### Logical state partitions in ZK Porters -Each Hyperchain can have one or more logical partitions that are part of the same state but live in separate subtrees and enforce different data availability policies, which can however interoperate synchronously. +Each ZK Chain can have one or more logical partitions that are part of the same state but live in separate subtrees and enforce different data availability policies, which can however interoperate synchronously. Synchronicity is important as it enables atomic transactions between partitions, unlocking several unique use cases: @@ -195,8 +195,8 @@ One prominent example of this is a combination of **[zkRollup + zkPorter](https: ### Privacy -Hyperchains can add privacy in a number of ways: +ZK Chains can add privacy in a number of ways: -1. **Validium**. For a Hyperchain running in the validium mode, privacy to the outer world is achieved out of the box as long as the operator keeps the block data secret. This might be an interesting option for enterprise users. -2. **Privacy protocols**. To implement user-level privacy, a specialized L3 protocol is required. Projects such as Aztec or Tornado can be implemented either directly on zkSync Era (taking advantage of account abstraction and cheap recursive ZKP verification on zkSync), or they can opt into standalone special-purpose Hyperchains for more flexibility. +1. **Validium**. For a ZK Chain running in the validium mode, privacy to the outer world is achieved out of the box as long as the operator keeps the block data secret. This might be an interesting option for enterprise users. +2. **Privacy protocols**. To implement user-level privacy, a specialized L3 protocol is required. Projects such as Aztec or Tornado can be implemented either directly on zkSync Era (taking advantage of account abstraction and cheap recursive ZKP verification on zkSync), or they can opt into standalone special-purpose ZK Chains for more flexibility. 3. **[Self-hosted Rollups](https://ethresear.ch/t/account-based-anonymous-rollup/6657),** based on user-maintained data availability and self-proved off-chain state transitions, will offer ultimate privacy and unlimited scalability in the long term. diff --git a/docs/zk-stack/running-a-hyperchain/README.md b/docs/zk-stack/running-a-hyperchain/README.md deleted file mode 100644 index f265eb8198..0000000000 --- a/docs/zk-stack/running-a-hyperchain/README.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -head: - - - meta - - name: "twitter:title" - content: Run a Hyperchain | zkSync Docs ---- - -# Run a Hyperchain - -
-
- - Running a ZK Stack hyperchain locally on your own machine -
-

Locally

-

Running a hyperchain locally on your own machine.

-
-
- - Deploying a ZK Stack hyperchain to a non-local environment -
-

In Production

-

Deploying a hyperchain to a non-local environment.

-
-
- - Deploying and running a ZK Stack hyperchain via RaaS (Rollup as a Service) -
-

Rollup as a Service

-

Running and deploying a hyperchain using a RaaS provider.

-
-
-
-
diff --git a/docs/zk-stack/running-a-hyperchain/getting-started.md b/docs/zk-stack/running-a-hyperchain/getting-started.md deleted file mode 100644 index 355b701fac..0000000000 --- a/docs/zk-stack/running-a-hyperchain/getting-started.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -head: - - - meta - - name: "twitter:title" - content: Running a Hyperchain | zkSync Docs ---- - -# Running a Hyperchain diff --git a/docs/zk-stack/running-a-zk-chain/README.md b/docs/zk-stack/running-a-zk-chain/README.md new file mode 100644 index 0000000000..70ae2dc7b6 --- /dev/null +++ b/docs/zk-stack/running-a-zk-chain/README.md @@ -0,0 +1,52 @@ +--- +head: + - - meta + - name: "twitter:title" + content: Run a ZK Chain | zkSync Docs +--- + +# Run a ZK Chain + +
+
+ + Running a ZK Stack Chain locally on your own machine +
+

Locally

+

Running a ZK Chain locally on your own machine.

+
+
+ + Deploying a ZK Stack Chain to a non-local environment +
+

In Production

+

Deploying a ZK Chain to a non-local environment.

+
+
+ + Deploying and running a ZK Stack Chain via RaaS (Rollup as a Service) +
+

Rollup as a Service

+

Running and deploying a ZK Chain using a RaaS provider.

+
+
+
+
diff --git a/docs/zk-stack/running-a-hyperchain/dependencies.md b/docs/zk-stack/running-a-zk-chain/dependencies.md similarity index 100% rename from docs/zk-stack/running-a-hyperchain/dependencies.md rename to docs/zk-stack/running-a-zk-chain/dependencies.md diff --git a/docs/zk-stack/running-a-hyperchain/enabling-prover.md b/docs/zk-stack/running-a-zk-chain/enabling-prover.md similarity index 78% rename from docs/zk-stack/running-a-hyperchain/enabling-prover.md rename to docs/zk-stack/running-a-zk-chain/enabling-prover.md index 0d7b71531e..e114e22564 100644 --- a/docs/zk-stack/running-a-hyperchain/enabling-prover.md +++ b/docs/zk-stack/running-a-zk-chain/enabling-prover.md @@ -7,7 +7,7 @@ head: # Enabling Prover -With the default configuration, your hyperchain is not running a prover, and has a `DummyExecutor` contract, which mainly “accepts” that a batch is executed without proof. This enables you to test it with much lower hardware requirements. +With the default configuration, your ZK Chain is not running a prover, and has a `DummyExecutor` contract, which mainly “accepts” that a batch is executed without proof. This enables you to test it with much lower hardware requirements. To enable the prover, run the `zk stack prover-setup` command. It will guide through the necessary configuration. diff --git a/docs/zk-stack/running-a-hyperchain/locally.md b/docs/zk-stack/running-a-zk-chain/locally.md similarity index 65% rename from docs/zk-stack/running-a-hyperchain/locally.md rename to docs/zk-stack/running-a-zk-chain/locally.md index cd711eee4f..fcef132dbd 100644 --- a/docs/zk-stack/running-a-hyperchain/locally.md +++ b/docs/zk-stack/running-a-zk-chain/locally.md @@ -2,7 +2,7 @@ head: - - meta - name: "twitter:title" - content: Deploying ZK Stack Hyperchain Locally | zkSync Docs + content: Deploying ZK Stack Chain Locally | zkSync Docs --- # Getting Started with ZK Stack @@ -37,7 +37,7 @@ export PATH=$ZKSYNC_HOME/bin:$PATH zk ``` -4. Last, start the wizard and follow instructions to set up and deploy your new hyperchain by running `zk stack init` +4. Last, start the wizard and follow instructions to set up and deploy your new ZK Chain by running `zk stack init` - Initially you want to `Configure new chain` @@ -47,16 +47,16 @@ zk - If you are doing this for the first time, several components need to be compiled/built, so do not worry if it takes a few minutes. The console will show what is going on anyways. - - If you don't want to configure any values for now and just want check the build process for a hyperchain, try out the `zk stack demo` command. + - If you don't want to configure any values for now and just want check the build process for a ZK Chain, try out the `zk stack demo` command. :::warning -The commands above are not just running docker containers, but are actually building the code from the repo to spin up your hyperchain. For this reason the process might take some time. If you just want to run docker containers to play around with a zkSync chain, you can use `npx zksync-cli dev`. Learn more [here](../../build/tooling/zksync-cli/getting-started.md). +The commands above are not just running docker containers, but are actually building the code from the repo to spin up your ZK Chain. For this reason the process might take some time. If you just want to run docker containers to play around with a zkSync chain, you can use `npx zksync-cli dev`. Learn more [here](../../build/tooling/zksync-cli/getting-started.md). ::: -### Your hyperchain is now deployed +### Your ZK Chain is now deployed -Your hyperchain is now deployed to the base chain (most likely a local geth docker container) and configured. You can find all configuration in a new `.env` file created on `/etc/env/.env`, and if you deployed test tokens, their addresses will be available at `/etc/tokens/.json` +Your ZK Chain is now deployed to the base chain (most likely a local geth docker container) and configured. You can find all configuration in a new `.env` file created on `/etc/env/.env`, and if you deployed test tokens, their addresses will be available at `/etc/tokens/.json` 1. The wizard allows you to run the server in the end. If you chose not to, you’re still able to run it by executing @@ -64,33 +64,33 @@ Your hyperchain is now deployed to the base chain (most likely a local geth dock zk server --components "http_api,eth,state_keeper,housekeeper" ``` -2. You can now run transactions and start playing with your hyperchain by using the RPC available at . +2. You can now run transactions and start playing with your ZK Chain by using the RPC available at . - - Don't forget to deposit some ETH and fund your accounts on your hyperchain. To do so follow the instructions for [Funding accounts](#funding-accounts). + - Don't forget to deposit some ETH and fund your accounts on your ZK Chain. To do so follow the instructions for [Funding accounts](#funding-accounts). -## Using your hyperchain +## Using your ZK Chain ### Funding accounts -During the `zk stack init` configurator, you have a choice of what base layer to deploy the hyperchain onto: the local geth node, or an Ethereum network (e.g., Sepolia). The first step to start interacting with your hyperchain is to fund an account (or a few). This means you need some funds on the base layer. +During the `zk stack init` configurator, you have a choice of what base layer to deploy the ZK Chain onto: the local geth node, or an Ethereum network (e.g., Sepolia). The first step to start interacting with your ZK Chain is to fund an account (or a few). This means you need some funds on the base layer. #### Base layer is the local geth node ([@matterlabs/geth:latest](https://hub.docker.com/r/matterlabs/geth)) -- If you chose to deploy on local geth node, you will have a set of addresses that have 100 ETH each. You can find the list [here](https://github.com/matter-labs/local-setup/blob/main/rich-wallets.json) and use these addresses to deposit into your hyperchain via the bridge. +- If you chose to deploy on local geth node, you will have a set of addresses that have 100 ETH each. You can find the list [here](https://github.com/matter-labs/local-setup/blob/main/rich-wallets.json) and use these addresses to deposit into your ZK Chain via the bridge. #### Base layer is an Ethereum network (e.g., Sepolia) -- If you chose to deploy on an Ethereum network (e.g., Sepolia), you need to have an account on the base layer with ETH. You can use the deployer, governor, or operator wallets setup during the the deployment process, or any other one you have funds, to deposit into your hyperchain via the bridge. +- If you chose to deploy on an Ethereum network (e.g., Sepolia), you need to have an account on the base layer with ETH. You can use the deployer, governor, or operator wallets setup during the the deployment process, or any other one you have funds, to deposit into your ZK Chain via the bridge. -Once you have the accounts with funds on the L1 base layer, you can do a deposit via the bridge to your hyperchain, and any further interactions with your hyperchain. +Once you have the accounts with funds on the L1 base layer, you can do a deposit via the bridge to your ZK Chain, and any further interactions with your ZK Chain. -### Using your hyperchain RPC +### Using your ZK Chain RPC Your server contains both HTTPS as well as WebSocket (WS) services that are fully web3 compatible (and contain some extra ZK Stack functionalities). Learn more about it [here](../../build/api.md). ### Using [zksync-cli](https://github.com/matter-labs/zksync-cli) -zkSync CLI allows you to easily interact and develop applications on your hyperchain. When executing any command with zksync-cli, you can specify RPC urls for both L1 and L2. Your local server contains RPCs for both. An example deposit command via the bridge would look like: +zkSync CLI allows you to easily interact and develop applications on your ZK Chain. When executing any command with zksync-cli, you can specify RPC urls for both L1 and L2. Your local server contains RPCs for both. An example deposit command via the bridge would look like: ```bash npx zksync-cli bridge deposit --rpc=http://localhost:3050 --l1-rpc=http://localhost:8545 --zeek @@ -100,10 +100,10 @@ npx zksync-cli bridge deposit --rpc=http://localhost:3050 --l1-rpc=http://localh The dApp Portal module allows you to: -- View balances, transfer and bridge tokens to your hyperchain. +- View balances, transfer and bridge tokens to your ZK Chain. - Add contacts for quick and easy access. -You can run the Portal module locally, and point it to your hyperchain configuration. It comes with scripts that help pulling the hyperchain configuration from your zksync-era repo and adapting to portal needs. Learn more [here](https://github.com/matter-labs/dapp-portal). An example command would look like: +You can run the Portal module locally, and point it to your ZK Chain configuration. It comes with scripts that help pulling the ZK Chain configuration from your zksync-era repo and adapting to portal needs. Learn more [here](https://github.com/matter-labs/dapp-portal). An example command would look like: ```bash npm run hyperchain:configure ../zksync-era @@ -114,7 +114,7 @@ You can now navigate to the displayed Portal URL (typically in your br ## Enabling Boojum prover -With the default configuration, your hyperchain is not running a prover, and has a DummyExecutor contract, which mainly “accepts” that a batch is executed without proof. This enables you to test it with much lower hardware requirements. +With the default configuration, your ZK Chain is not running a prover, and has a DummyExecutor contract, which mainly “accepts” that a batch is executed without proof. This enables you to test it with much lower hardware requirements. To enable the prover, run the `zk stack prover-setup` command. It will guide through the necessary configuration. @@ -192,19 +192,19 @@ The docker compose file assumes you will be running all components in the same m ## Addendum -- If you make changes to any contract, you can always deploy a new hyperchain to easily test those changes. +- If you make changes to any contract, you can always deploy a new ZK Chain to easily test those changes. -- If you configure your hyperchain once, you don't need to do it again as the wizard allows you to use an existing config file. +- If you configure your ZK Chain once, you don't need to do it again as the wizard allows you to use an existing config file. -- For now, it is only possible to deploy a hyperchain as an L2, but soon it will also work as L3s. +- For now, it is only possible to deploy a ZK Chain as an L2, but soon it will also work as L3s. - When running the default matterlabs/geth, you have a set of rich wallets available to you. You can check them [here](https://github.com/matter-labs/local-setup/blob/main/rich-wallets.json). - If you face an issue compiling rust code (example `: Error allocating TSD`) try removing the `rust-toolchain` file from the repo. -- If you want to have a custom local base chain, you must ensure you have a database for your hyperchain, as well as the local RPC for your L1. +- If you want to have a custom local base chain, you must ensure you have a database for your ZK Chain, as well as the local RPC for your L1. - - To run a Postgres 14 database for your hyperchain, execute the following: + - To run a Postgres 14 database for your ZK Chain, execute the following: ```bash docker-compose -f docker-compose-zkstack-common.yml up -d postgres diff --git a/docs/zk-stack/running-a-hyperchain/production.md b/docs/zk-stack/running-a-zk-chain/production.md similarity index 79% rename from docs/zk-stack/running-a-hyperchain/production.md rename to docs/zk-stack/running-a-zk-chain/production.md index 521f06c28a..b41828076e 100644 --- a/docs/zk-stack/running-a-hyperchain/production.md +++ b/docs/zk-stack/running-a-zk-chain/production.md @@ -2,7 +2,7 @@ head: - - meta - name: "twitter:title" - content: Deploying ZK Stack Hyperchain to a Non-Local Environment | zkSync Docs + content: Deploying ZK Stack Chain to a Non-Local Environment | zkSync Docs --- # Deploying to a Non-Local Environment @@ -22,6 +22,6 @@ The wizard allows you to provide a custom database url connector. Make sure you ## Server (Sequencer) & Prover -After configuring your hyperchain, you can generate docker images for your server and prover. To do that run `zk stack docker-setup`. +After configuring your ZK Chain, you can generate docker images for your server and prover. To do that run `zk stack docker-setup`. This command will guide you to properly name and tag your image. After building it, a docker compose file will be available so you can run the images on whichever cloud environment you desire. diff --git a/docs/zk-stack/running-a-hyperchain/raas.md b/docs/zk-stack/running-a-zk-chain/raas.md similarity index 91% rename from docs/zk-stack/running-a-hyperchain/raas.md rename to docs/zk-stack/running-a-zk-chain/raas.md index afd7ee1999..0d1096e788 100644 --- a/docs/zk-stack/running-a-hyperchain/raas.md +++ b/docs/zk-stack/running-a-zk-chain/raas.md @@ -2,10 +2,10 @@ head: - - meta - name: "twitter:title" - content: Deploying ZK Stack Hyperchain Via RaaS | zkSync Docs + content: Deploying ZK Stack Chains Via RaaS | zkSync Docs --- -# Deploy Hyperchain Using RaaS +# Deploy ZK Chains Using RaaS :::warning @@ -18,7 +18,7 @@ Looking to deploy a ZK Stack chain but worried about complexities? RaaS provider Use RaaS in to improve scalability, reduce costs, access specialized services, speed up development, enhance interoperability, and maintain flexibility in an ever-evolving technological landscape. -The list of RaaS providers you can use to deploy and customise their your hyperchain: +The list of RaaS providers you can use to deploy and customise their your ZK Chain: diff --git a/docs/zk-stack/running-a-hyperchain/using-hyperchain.md b/docs/zk-stack/running-a-zk-chain/using-zk-chain.md similarity index 67% rename from docs/zk-stack/running-a-hyperchain/using-hyperchain.md rename to docs/zk-stack/running-a-zk-chain/using-zk-chain.md index 6383153228..ad655bdc77 100644 --- a/docs/zk-stack/running-a-hyperchain/using-hyperchain.md +++ b/docs/zk-stack/running-a-zk-chain/using-zk-chain.md @@ -2,10 +2,10 @@ head: - - meta - name: "twitter:title" - content: Using Your Hyperchain RPC | zkSync Docs + content: Using Your ZK Chain RPC | zkSync Docs --- -# Using Your Hyperchain RPC +# Using Your ZK Chain RPC Your server contains both HTTPS as well as WS services that are fully web3 compatible (and contain some extra ZK Stack functionalities). @@ -21,7 +21,7 @@ npx zksync-cli bridge deposit --rpc=http://localhost:3050 --l1-rpc=http://localh ## Using dApp Portal -You can run the Portal module locally, and point it to your hyperchain configuration. It comes with scripts that help pulling the hyperchain configuration from your zksync-era repo and adapting to portal needs. Learn more here. An example command would look like: +You can run the Portal module locally, and point it to your ZK Chain configuration. It comes with scripts that help pulling the ZK Chain configuration from your zksync-era repo and adapting to portal needs. Learn more here. An example command would look like: ```bash npm run hyperchain:migrate ../zksync-era @@ -30,7 +30,7 @@ npm run dev:node:hyperchain ## Using Block Explorer -Block explorer contains three components (Worker, API, and App), which you can run all together locally and connect to your hyperchain. For that, you need to set up all the necessary environment and configuration files with your hyperchain settings. You can use a script to build them. See setting up env variables. +Block explorer contains three components (Worker, API, and App), which you can run all together locally and connect to your ZK Chain. For that, you need to set up all the necessary environment and configuration files with your ZK Chain settings. You can use a script to build them. See setting up env variables. Once you have your zksync-era repo set up locally, you can run the following command to build environment and configuration files for block explorer based on your **[zksync-era](https://github.com/matter-labs/zksync-era)** repo configuration: @@ -42,17 +42,17 @@ The script generates all the necessary configuration files for block-explorer, w # Addendum -- If you make changes to any contract, you can always deploy a new hyperchain to easily test those changes. +- If you make changes to any contract, you can always deploy a new ZK Chain to easily test those changes. -- If you configure your hyperchain once, you don't need to do it again as the wizard allows you to use an existing config file. +- If you configure your ZK Chain once, you don't need to do it again as the wizard allows you to use an existing config file. -- For now, it is only possible to deploy a hyperchain as an L2, but soon it will also work as L3s. +- For now, it is only possible to deploy a ZK Chain as an L2, but soon it will also work as L3s. - When running the default matterlabs/geth, you have a set of rich wallets available to you. You can check them [here.](https://github.com/matter-labs/local-setup/blob/main/rich-wallets.json) -- If you want to have a custom local base chain, you must ensure you have a database for your hyperchain, as well as the local RPC for your L1. +- If you want to have a custom local base chain, you must ensure you have a database for your ZK Chain, as well as the local RPC for your L1. -- To run a Postgres 14 database for your hyperchain, execute the following: +- To run a Postgres 14 database for your ZK Chain, execute the following: ```bash docker-compose -f docker-compose-zkstack-common.yml up -d postgres diff --git a/firebase.json b/firebase.json index 67805d3588..c1dbdc1d13 100644 --- a/firebase.json +++ b/firebase.json @@ -33,6 +33,31 @@ } ], "redirects": [ + { + "source": "/zk-stack/concepts/hyperchains-hyperscaling.html", + "destination": "/zk-stack/concepts/zk-chains.html", + "type": "301" + }, + { + "source": "/zk-stack/running-a-hyperchain/production.html", + "destination": "/zk-stack/running-a-zk-chain/production.html", + "type": "301" + }, + { + "source": "/zk-stack/running-a-hyperchain/locally.html", + "destination": "/zk-stack/running-a-zk-chain/locally.html", + "type": "301" + }, + { + "source": "/zk-stack/running-a-hyperchain/enabling-prover.html", + "destination": "/zk-stack/running-a-zk-chain/enabling-prover.html", + "type": "301" + }, + { + "source": "/zk-stack/running-a-hyperchain/raas.html", + "destination": "/zk-stack/running-a-zk-chain/raas.html", + "type": "301" + }, { "source": "/build/tooling/zksync-cli/examples/contract-interaction.html", "destination": "/build/tooling/zksync-cli/commands/contract-interaction.html",