From 1947388124792a6b3f516b3436058f34dab271a1 Mon Sep 17 00:00:00 2001 From: Sabrina Date: Tue, 2 Jul 2024 05:51:02 -0400 Subject: [PATCH] docs: update developer reference docs (#126) # Description Update developer reference docs from https://github.com/code-423n4/2024-03-zksync/tree/main/docs --------- Co-authored-by: Razzor <54918791+razzorsec@users.noreply.github.com> Co-authored-by: Nicolas Villanueva --- .gitignore | 4 +- .lintstagedrc.yml | 2 +- .../65.developer-reference/00.index.md | 2 +- .../10.intro-rollups.md | 63 -- .../65.developer-reference/10.protocol.md | 83 +++ .../15.migrate-era-to-chain.md | 50 ++ .../20.zksync-overview.md | 80 -- .../21.batches-and-l2-blocks.md | 192 +++++ .../22.era-vm/00.index.md | 667 +++++++++++++++++ .../65.developer-reference/22.era-vm/_dir.yml | 1 + .../50.era-contracts/10.l1-contracts.md | 266 ++++--- .../50.era-contracts/20.system-contracts.md | 17 +- .../25.l1-ecosystem-contracts.md | 686 ++++++++++++++++++ .../50.era-contracts/30.pubdata-post-4844.md | 306 ++++++++ .../50.era-contracts/40.handling-l1-l2-ops.md | 183 +++++ .../50.era-contracts/50.handling-pubdata.md | 390 ++++++++++ .../60.elliptic-curve-precompiles.md | 311 ++++++++ .../60.fee-model/00.index.md | 106 +++ .../60.fee-model/10.how-l2-gas-price-works.md | 183 +++++ .../20.how-we-charge-for-pubdata.md | 179 +++++ .../60.fee-model/_dir.yml | 1 + .../65.developer-reference/70.fee-model.md | 137 ---- .../70.handling-pubdata-in-boojum/00.index.md | 133 ++++ .../10.l2-l1-communication-before-boojum.md | 72 ++ .../70.handling-pubdata-in-boojum/_dir.yml | 1 + content/10.zk-stack/05.concepts/10.blocks.md | 6 +- .../05.concepts/20.fee-mechanism.md | 4 +- .../05.concepts/99.l1_l2_communication.md | 14 +- .../20.smart-contracts/10.index.md | 10 +- .../20.smart-contracts/20.system-contracts.md | 129 +++- .../10.components/50.zksync-evm/00.index.md | 6 +- .../50.zksync-evm/10.bootloader.md | 664 +++++++++++++---- .../10.components/60.prover/10.index.md | 2 - .../60.prover/40.circuits/10.index.md | 54 +- .../20.specification/30.system-contracts.md | 2 +- .../60.instructions/20.evm/10.index.md | 23 +- .../60.instructions/20.evm/_dir.yml | 1 + .../20.evm/{calls.md => call.md} | 2 +- .../60.instructions/20.evm/environment.md | 2 +- .../20.evm/{events.md => logging.md} | 20 +- .../20.evm/{hashes.md => sha3.md} | 14 +- .../60.instructions/20.evm/storage.md | 46 -- .../60.instructions/21.extensions/00.index.md | 9 + .../60.instructions/21.extensions/10.call.md | 86 +++ .../21.extensions/20.verbatim.md | 87 +++ .../60.instructions/21.extensions/_dir.yml | 1 + .../20.specification/60.instructions/_dir.yml | 1 + .../70.compiler/20.specification/_dir.yml | 1 + cspell-config/cspell-misc.txt | 5 + cspell-config/cspell-zksync.txt | 8 +- firebase.json | 10 + public/favicon-32x32.png | Bin 0 -> 819 bytes .../era-vm/arch-overview.png | Bin 0 -> 57728 bytes .../era-vm/arithmetic_opcode.png | Bin 0 -> 15320 bytes .../l1-smart-contracts/Diamond-scheme.png | Bin 0 -> 35981 bytes .../l1-smart-contracts/Governance-scheme.jpg | Bin 0 -> 185378 bytes .../l1-smart-contracts/Hyperchain-scheme.png | Bin 0 -> 107064 bytes .../L1-L2_tx_processing_on_L2.png | Bin 0 -> 68576 bytes .../l1-smart-contracts/newChain.png | Bin 0 -> 40345 bytes .../requestL2TransactionDirect-ETH.png | Bin 0 -> 72910 bytes .../requestL2TransactionDirect.png | Bin 0 -> 78760 bytes ...TransactionTwoBridges-depositEthToUSDC.png | Bin 0 -> 136296 bytes .../developer-reference/zksync-components.png | Bin 0 -> 74358 bytes 63 files changed, 4663 insertions(+), 659 deletions(-) delete mode 100644 content/00.build/65.developer-reference/10.intro-rollups.md create mode 100644 content/00.build/65.developer-reference/10.protocol.md create mode 100644 content/00.build/65.developer-reference/15.migrate-era-to-chain.md delete mode 100644 content/00.build/65.developer-reference/20.zksync-overview.md create mode 100644 content/00.build/65.developer-reference/21.batches-and-l2-blocks.md create mode 100644 content/00.build/65.developer-reference/22.era-vm/00.index.md create mode 100644 content/00.build/65.developer-reference/22.era-vm/_dir.yml create mode 100644 content/00.build/65.developer-reference/50.era-contracts/25.l1-ecosystem-contracts.md create mode 100644 content/00.build/65.developer-reference/50.era-contracts/30.pubdata-post-4844.md create mode 100644 content/00.build/65.developer-reference/50.era-contracts/40.handling-l1-l2-ops.md create mode 100644 content/00.build/65.developer-reference/50.era-contracts/50.handling-pubdata.md create mode 100644 content/00.build/65.developer-reference/50.era-contracts/60.elliptic-curve-precompiles.md create mode 100644 content/00.build/65.developer-reference/60.fee-model/00.index.md create mode 100644 content/00.build/65.developer-reference/60.fee-model/10.how-l2-gas-price-works.md create mode 100644 content/00.build/65.developer-reference/60.fee-model/20.how-we-charge-for-pubdata.md create mode 100644 content/00.build/65.developer-reference/60.fee-model/_dir.yml delete mode 100644 content/00.build/65.developer-reference/70.fee-model.md create mode 100644 content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/00.index.md create mode 100644 content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/10.l2-l1-communication-before-boojum.md create mode 100644 content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/_dir.yml create mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/_dir.yml rename content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/{calls.md => call.md} (99%) rename content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/{events.md => logging.md} (50%) rename content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/{hashes.md => sha3.md} (88%) delete mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/storage.md create mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/00.index.md create mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/10.call.md create mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/20.verbatim.md create mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/_dir.yml create mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/_dir.yml create mode 100644 content/10.zk-stack/10.components/70.compiler/20.specification/_dir.yml create mode 100644 public/favicon-32x32.png create mode 100644 public/images/developer-reference/era-vm/arch-overview.png create mode 100644 public/images/developer-reference/era-vm/arithmetic_opcode.png create mode 100644 public/images/developer-reference/l1-smart-contracts/Diamond-scheme.png create mode 100644 public/images/developer-reference/l1-smart-contracts/Governance-scheme.jpg create mode 100644 public/images/developer-reference/l1-smart-contracts/Hyperchain-scheme.png create mode 100644 public/images/developer-reference/l1-smart-contracts/L1-L2_tx_processing_on_L2.png create mode 100644 public/images/developer-reference/l1-smart-contracts/newChain.png create mode 100644 public/images/developer-reference/l1-smart-contracts/requestL2TransactionDirect-ETH.png create mode 100644 public/images/developer-reference/l1-smart-contracts/requestL2TransactionDirect.png create mode 100644 public/images/developer-reference/l1-smart-contracts/requestL2TransactionTwoBridges-depositEthToUSDC.png create mode 100644 public/images/developer-reference/zksync-components.png diff --git a/.gitignore b/.gitignore index 763090fe..ee6721f3 100644 --- a/.gitignore +++ b/.gitignore @@ -99,4 +99,6 @@ yarn.lock .nitro .cache dist -.firebase \ No newline at end of file +.firebase + +.vscode/ diff --git a/.lintstagedrc.yml b/.lintstagedrc.yml index 6ee4c32a..ca5effed 100644 --- a/.lintstagedrc.yml +++ b/.lintstagedrc.yml @@ -3,6 +3,6 @@ - eslint '*.md': - markdownlint-cli2 - - cspell lint --file + - cspell lint --no-must-find-files --files '*.{json,yml}': - prettier --list-different diff --git a/content/00.build/65.developer-reference/00.index.md b/content/00.build/65.developer-reference/00.index.md index 64cc3901..55f26fd9 100644 --- a/content/00.build/65.developer-reference/00.index.md +++ b/content/00.build/65.developer-reference/00.index.md @@ -12,7 +12,7 @@ overview to help you effectively build on ZKsync Era. --- title: Introduction to Rollups icon: i-heroicons-scale-16-solid - to: /build/developer-reference/intro-rollups + to: /build/developer-reference/protocol --- Explore the fundamentals of rollups for enhanced scalability and lower gas costs. :: diff --git a/content/00.build/65.developer-reference/10.intro-rollups.md b/content/00.build/65.developer-reference/10.intro-rollups.md deleted file mode 100644 index 7c8cf65f..00000000 --- a/content/00.build/65.developer-reference/10.intro-rollups.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Introduction to Rollups -description: Gain a comprehensive understanding of rollups. ---- - -## Introduction - -To better understand rollups we need to dive briefly into Ethereum and Layer 2 solutions. - -The Ethereum network is frequently congested, which results in slow transactions and increased gas prices. -While this has remained so for a long time, an improved solution is needed: one that will not put limits on the throughput, but instead, -achieve a high transaction rate without having to trade off security. That is where Layer 2 solutions shine. - -Layer 2 solutions are designed as an extension to Ethereum, and offer various solutions poised to be the critical scalability component to -the inherent network congestion on Ethereum. Covering all Layer 2 solutions is beyond the scope of this doc. -We will go through a brief explainer on rollups in this section. - -## What are rollups? - -Rollups are a recent development intended to increase the scalability of Ethereum by performing calculations off-chain, rolling many -transactions up into a single batch, and sending it to the main Ethereum chain in a single action. -Instead of submitting each transaction separately, rollup operators submit a summary of the required changes to represent all transactions -in a batch. - -To be able to work on a rollup, funds need to be locked on a smart contract on the Layer 1 blockchain. -This allows transactions to be processed without the overhead of all the data associated with performing a transaction on the main chain. -**Rollups significantly decrease associated transaction processing times and gas fees.** - -## Optimistic vs ZK rollups - -Currently, there are 2 types of rollups used to scale Ethereum. - -1. ZK Rollups (Zero-Knowledge Rollups) - eg: ZKsync, Loopring, Starknet, Scroll etc -2. Optimistic Rollups - eg: Optimism, Arbitrum etc - -The main difference between ZK and Optimistic rollups is in the way this batch of transactions becomes final. - -### What are ZK rollups? - -In ZK rollups ('ZK' standing for zero-knowledge) the batch of transactions is verified for correctness on the Ethereum network. After the -verification passes, the batch of transactions is considered final like any other Ethereum transaction. This is achieved through the power -of cryptographic validity proofs (commonly called zero-knowledge proofs). With any batch of off-chain transactions, the ZK rollup -operator generates a proof of validity for this batch. Once the proof is generated, it is submitted to Ethereum to make the roll-up batch final. -In ZKsync, this is done via a **SNARK**, succinct non-interactive argument of knowledge. - -### What are Optimistic rollups? - -Optimistic rollups, on the other hand, have no mechanism to prove the validity of the off-chain transactions. Instead, they are considered -“optimistic” because they assume off-chain transactions are valid unless proven otherwise. Hence, they rely on fraud proof systems, a -challenge to the submitted state to Ethereum. If such a challenge is submitted, the Optimistic rollup operator needs to show that the -state and transactions in questions are actually valid. This is a cumbersome process, and requires watchers to make sure that the Optimistic -rollup operator is honest at all times. - -## L1 and L2: what's the difference? - -The term **Layer 1** (or **L1**) is used to refer to the underlying primary chain, such as the Ethereum network or Bitcoin. Layer 1 -blockchains determine protocol rules and transaction finality, and perform the base-level functions of applications built upon them. - -The term **Layer 2** (or **L2**) is used to describe an overlaying application or network that operates on top of the Layer 1 chain. These -are most often built to provide further scalability solutions by taking on a portion of transaction-based tasks to lighten the impact on the -layer 1 chain, quickening transaction times and lowering gas fees. - -**ZKsync Era is an L2, where L1 is the main Ethereum blockchain.** diff --git a/content/00.build/65.developer-reference/10.protocol.md b/content/00.build/65.developer-reference/10.protocol.md new file mode 100644 index 00000000..93c9dc16 --- /dev/null +++ b/content/00.build/65.developer-reference/10.protocol.md @@ -0,0 +1,83 @@ +--- +title: ZKsync Era Protocol +description: Learn about ZKsync Era and the differences from Ethereum +--- + +ZKsync Era is a Layer 2 scaling solution designed to enhance Ethereum's scalability without compromises. +This document provides an overview of ZKsync Era's rollup mechanism, explaining the main idea and how it contributes to a more scalable, +secure, and user-friendly blockchain ecosystem. + +## What is a Rollup? + +A rollup is a blockchain scalability solution that processes and stores transaction data off-chain +while ensuring the data's integrity and availability on the main chain. +By doing so, rollups significantly increase transaction throughput without compromising security. +There are primarily two types of rollups: Optimistic Rollups and Zero-Knowledge (zk) Rollups. +ZKsync Era utilizes the latter, leveraging cryptographic proofs for security and efficiency. + +## How and why it works? + +Ethereum's decentralized network has limited transaction throughput because its capacity doesn't scale with the number of validators. +In essence, each validator performs the same job of validating each processed transaction, creating a bottleneck. +In contrast, in Web2 scalability improves with the addition of more servers, +as the network's capacity to handle requests increases linearly with each new server. + +The concept of a rollup addresses the blockchain scalability issue by moving computation off-chain +and only sending the result of these computations back to Ethereum. +ZK rollups, in particular, submit a validity proof alongside the execution result, +making the validation of a zk proof significantly cheaper than re-executing each transaction. + +### The Data Availability (DA) Problem + +A crucial aspect of ensuring the integrity and security of rollups is addressing the Data Availability (DA) problem. +If the state of the rollup is unknown to observers of Ethereum, +then in scenarios where the validators (centralized or decentralized) stop processing, +it becomes impossible to make state transitions without relying on a trusted validator. +However, if the data is always available to observers, it's feasible to restore the state and continue processing the network +even if the trusted validator ceases its operation. +This link provides further details on the Data Availability problem: [Ethereum Data Availability](https://ethereum.org/en/developers/docs/data-availability/). + +### ZK proof + +Zero-Knowledge Proofs (ZKPs) offer a method to execute verifiable programs, wherein it's cheap to verify a zk proof on-chain. +In the context of ZKsync, ZKPs allow for the confirmation of the correctness of transaction execution without re-executing them. + +ZK circuits are out of the contest's scope. +However, there is an ongoing [live bug bounty program on Immunefi](https://immunefi.com/bounty/zksyncera/) +open to anyone interested in identifying vulnerabilities within this domain. + +## ZKsync Era components + +ZKsync Era protocol consists of the following critical components: + +- **Node Implementation**: This component is responsible for receiving transactions from users and processing them. + It maintains the off-chain state and handles the aggregation of transactions into batches as well as sends sealed batches onchain. +- **ZK Circuits**: These circuits are intricate mathematical constructs that represent verifiable computation logic. + They are responsible for determining what can be verified as a valid proof. + Specifically for ZKsync, these circuits define the computation rules for EraVM execution, thats also defines how transactions are executed. +- **Prover**: The prover constructs the cryptographic proofs that attest to the correctness of the transactions processed off-chain. + These proofs can be verified later on Ethereum, ensuring that only valid transactions are accepted. +- **Smart Contracts**: These contracts are the on-chain component of the zkRollup. + They are responsible for verifying the proofs submitted by the prover and updating the Ethereum blockchain's state accordingly. + Additionally, they facilitate interactions between Ethereum and ZKsync, such as deposits, withdrawals, and cross-layer messaging. + +![ZKsync components.png](/images/developer-reference/zksync-components.png) + +While this contest primarily focuses on the smart contracts side of ZKsync Era, +understanding the interaction between different components can be beneficial. +For additional context or insights, consider exploring these resources: + +- **Node Implementation**: https://github.com/matter-labs/zksync-era +- **ZK Circuits**: https://github.com/matter-labs/era-zkevm_circuits + +## The ZK Chain + +The ZK Chain is the continuation of Ethereum's rollup centric roadmap. +Ethereum provides security via DA and verification of proofs, but the question of execution is left to the rollups. +In order to have the best UX, it is necessary to solve interoperability and the free flow of assets between chains. +We do this via the Shared Bridge Contract on L1 which stores Ether and ERC20 tokens for all ZK Chains (implementing custom bridges is still possible). +This upgrade will allow hyperbridging between ZK Chains in the next major upgrade. +The chains will be able to trust each other due to the fact that they are managed by the same STM contract, using the same VM and proof system. +In the future more upgrades will follow, as this is still a topic under heavy research. + +- For more details watch this video on [How the ZK Stack will power the Internet of Value](https://www.youtube.com/watch?v=BxpKa-S2m34). diff --git a/content/00.build/65.developer-reference/15.migrate-era-to-chain.md b/content/00.build/65.developer-reference/15.migrate-era-to-chain.md new file mode 100644 index 00000000..dbe624ab --- /dev/null +++ b/content/00.build/65.developer-reference/15.migrate-era-to-chain.md @@ -0,0 +1,50 @@ +--- +title: Migrating ZKsync Era into the ZK Chain +description: Guide on how to migrate a single chain ZKsync Era into the ZK Chain +--- + +This document describes the process of migrating the currently deployed single chain ZKsync Era into the ZK Chain, +including the process of moving funds from Diamond Proxy and L1 ERC20 Bridge into the brand new Shared bridge while ensuring security guarantees. + +**Note: The migration to the new system of ZK Chains has already happened.** + +## Migration process + +We will migrate the old system of Era's `Diamond Proxy`, `L1ERC20Bridge` +to a system that is capable of hosting multiple interoperable ZK Chains with the +`L1SharedBridge`, `Bridgehub`, `StateTransitionManager` and other contracts. + +This upgrade process has the following steps: + +### I. Upgrade the system + +1. Deploy the new contracts + + We first deploy the new contracts. + These include the `Bridgehub`, `StateTransitionManager`, `L1SharedBridge`, the new facets and the `ValidatorTimelock`. + At this point, if we wanted to we could register new ZK Chains. + +2. Integrate Era into new contracts, and upgrade L2 system contracts + + We upgrade Era (we do this via a standard diamond cut upgrade, set the L2 system contract upgrade tx hash, + and a call to the new DiamondInit function to initialize the `DiamondProxy` with the new protocol version and variables). + We integrate Era into the the contracts via `registerAlreadyDeployedStateTransition` on STM and `createNewChain` on Bridgehub. + We transfer all Ether to the `L1SharedBridge`. We do this via the the `transferFundsFromLegacy` function on the `L1SharedBridge`. + + At this point deposits to the `L1SharedBridge` and to the legacy functions on `Mailbox` facet of the `DiamondProxy` should work. + The legacy `L1ERC20Bridge` will also work, as it will communicate with the backwards compatible `Mailbox`. + +### II. Upgrade L1ERC20Bridge contract + +1. Upgrade L2 bridge + + The new `L2ERC20Bridge` will upgraded to become the `L2SharedBridge`, + and it will be backwards compatible with all messages from the old `L1ERC20Bridge`, + so we upgrade that first as L1->L2 messages are much faster, and in the meantime we can upgrade the `L1ERC20Bridge`. + The new `L2SharedBridge` can receive deposits from both the old `L1ERC20Bridge` and the new `L1SharedBridge`. + +2. Upgrade L1ERC20Bridge + + We upgrade the `L1ERC20Bridge`, and move all ERC20 tokens to the `L1SharedBridge`. + +Note migrating Era and its `L1ERC20Bridge` are possible to do for other separately deployed ZK Chains as well, in case we need to do it multiple times. diff --git a/content/00.build/65.developer-reference/20.zksync-overview.md b/content/00.build/65.developer-reference/20.zksync-overview.md deleted file mode 100644 index 03846e9f..00000000 --- a/content/00.build/65.developer-reference/20.zksync-overview.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: ZKsync Era Overview -description: ---- - -## ZKsync Era overview - -The general rollup workflow is as follows: - -- Users can receive, deposit, and transfer assets to each other. -- Users can withdraw assets under their control to an L1 address. - -Rollup operation requires the assistance of an operator, who rolls transactions together, computes a zero-knowledge proof of the correct -state transition, and affects the state transition by interacting with the rollup -contract. To understand the design, we need to look into how ZKsync rollup transactions work. - -ZKsync operations are divided into rollup transactions (initiated inside rollup by a -rollup account) and priority operations (initiated on the mainchain by an Ethereum account). - -The ZKsync rollup operation lifecycles are as follows: - -- A user creates a transaction or a priority operation. -- After processing this request, the operator creates a rollup operation and adds it to the block. -- Once the block is complete, the operator submits it to the ZKsync smart contract -as a block commitment. Part of the logic of some rollup operations is checked by the smart contract. -- The proof for the block is submitted to the ZKsync smart contract as block verification. If the verification succeeds, the new state is considered final. - -Furthermore, on ZKsync, each L2 block will progress through the following four stages until it is final. - -- `Pending`: The transaction was received by the operator, but it has not been processed yet. -- `Processed`: The transaction is processed by the operator and is confirmed to be included in the next block. -- `Committed`: This indicates that the transaction data of this block has been -posted on Ethereum. It does not prove that it has been executed in a valid way, but it ensures the - availability of the block data. -- `Finalized`: This indicates that the SNARK validity proof for the transaction has -been submitted and verified by the smart contract. After this step, the transaction is considered to be final. - -The typical time for a transaction to go from `Processed` to `Finalized` is a couple of hours at the current stage. - -Please note that for developer convenience, we usually treat the `Processed` and -`Committed` states as a single stage called `Committed` since they have no difference from the UX/DevEx standpoints. - -### The State of ZKsync - -The current version of ZKsync Era solves the needs of most applications on Ethereum, -and with more features planned for release soon, ZKsync Era will provide developers -with a design space to experiment with applications not possible on Ethereum today. -With this release, we are supporting the following features: - -- Native support of ECDSA signatures: Unlike the first version of ZKsync and other -ZK rollups, no special operation is required to register the user’s private key. -Any account can be managed in L2 with the same private key that is used for L1. -- Solidity 0.8.x support: Deploy your existing codebase with little to no changes required. -- With small exceptions, our Web3 API is fully compatible with Ethereum. This allows seamless integration with existing indexers, explorers, etc. -- Support for Ethereum cryptographic primitives: ZKsync natively supports `keccak256`, `sha256`, and `ecrecover` via precompiles. -- Hardhat plugin: Enables easy testing and development of smart contracts on ZKsync. -- L1 → L2 smart contract messaging: Allows developers to pass data from Ethereum to -smart contracts on ZKsync, providing the required information to run various smart contracts. -- Native account abstraction: ZKsync Era implements [account abstraction natively] -(/build/developer-reference/account-abstraction), which brings multiple UX improvements for all accounts. - -## Highlights of ZKsync Era - -- Mainnet-like security with zero reliance on 3rd parties. -- Permissionless EVM-compatible smart contracts. -- Standard Web3 API. -- Preserving key EVM features, such as smart contract composability. -- Introducing new features, such as native account abstraction. - -## ZKsync in comparison - -ZKsync [stands out remarkably](https://blog.matter-labs.io/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) -in security and usability among existing L2 scaling solutions. -Thanks to the combination of cutting-edge cryptography and on-chain data -availability, ZK rollups (the core network of ZKsync) are the only L2 scaling -solution that doesn't require any operational activity to keep the funds safe. - -For example, users can go offline and still be able to withdraw their assets safely -when they come back, even if the ZK rollup validators are no longer around. -For a comprehensive distinction between ZKsync Era and Ethereum, read this [guide](/build/developer-reference/ethereum-differences/evm-instructions). diff --git a/content/00.build/65.developer-reference/21.batches-and-l2-blocks.md b/content/00.build/65.developer-reference/21.batches-and-l2-blocks.md new file mode 100644 index 00000000..ba97f33d --- /dev/null +++ b/content/00.build/65.developer-reference/21.batches-and-l2-blocks.md @@ -0,0 +1,192 @@ +--- +title: Batches and L2 Blocks on ZKsync +description: +--- + +## Glossary + +- Batch - a set of transactions that the bootloader processes (`commitBatches`, `proveBatches`, and `executeBatches` work with it). + A batch consists of multiple transactions. +- L2 blocks - non-intersecting sub-sets of consecutively executed transactions in a batch. + This is the kind of block you see in the API. + This is the one that is used for `block.number`/`block.timestamp`/etc. + Note that it wasn't this way before the virtual blocks migration. +- Virtual block — a block, the data of which was being returned in the contract execution environment during the migration. +They are called “virtual”, since they have no trace in our API, i.e. it is not possible to query information about them in any way. +This is now mostly irrelevant, since the migration is already finished. + +## Motivation + +Before the recent upgrade, `block.number`, `block.timestamp`, as well as `blockhash` in Solidity, +returned information about *batches*, i.e. large blocks that are proven on L1 and which consist of many smaller L2 blocks. +At the same time, API returns `block.number` and `block.timestamp` as for L2 blocks. + +L2 blocks were created for fast soft confirmation in wallets and block explorer. +For example, MetaMask shows transactions as confirmed only after the block in which transaction execution was mined. +So if the user needs to wait for the batch confirmation it would take at least a few minutes (for soft confirmation) +and hours for full confirmation which is very bad UX. +But API could return soft confirmation much earlier through L2 blocks. + +There was a huge outcry in the community for us to return the information for L2 blocks in `block.number`, `block.timestamp`, +as well as `blockhash`, because of discrepancy of runtime execution and returned data by API. + +However, there were over 15mln L2 blocks, while less than 200k batches, meaning that if we simply “switched” +from returning L1 batches’ info to L2 block’s info, some contracts (especially those that use `block.number` +for measuring time intervals instead of `block.timestamp`) would break. +For that, we decided to have an accelerated migration process, i.e. the `block.number` will grow faster and faster, +until it becomes roughly 8x times the L2 block production speed, allowing it to gradually reach the L2 block number, +after which the information on the L2 `block.number` will be returned. +The blocks the info of which will be returned during this process are called “virtual blocks”. +Their information will never be available in any of our APIs, which should not be a major breaking change, +since our API already mostly works with L2 blocks, while L1 batches’s information is returned in the runtime. + +## Adapting for Solidity + +In order to get the returned value for `block.number`, `block.timestamp`, `blockhash` our compiler used the following functions: + +- `getBlockNumber` +- `getBlockTimestamp` +- `getBlockHashEVM` + +During the migration process, these returned the values of the virtual blocks. Currently, since the migration is complete, they return values for L2 blocks. + +## Migration status + +At the time of this writing, the migration has been complete on both testnet and mainnet, +i.e. there we already have only the L2 block information returned. +Mainnet migration ended in early November 2023. + +## Blocks’ processing and consistency checks + +Our `SystemContext` contract allows to get information about batches and L2 blocks. +Some of the information is hard to calculate onchain. +For instace, time. The timing information (for both batches and L2 blocks) are provided by the operator. +In order to check that the operator provided some realistic values, certain checks are done on L1. +Generally though, we try to check as much as we can on L2. + +## Initializing L1 batch + +At the start of the batch, the operator +[provides](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L3976) +the timestamp of the batch, its number and the hash of the previous batch. +The root hash of the Merkle tree serves as the root hash of the batch. + +The SystemContext can immediately check whether the provided number is the correct batch number. +It also immediately sends the previous batch hash to L1, where it will be checked during the commit operation. +Also, some general consistency checks are performed. +This logic can be found +[here](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/SystemContext.sol#L470). + +## L2 blocks processing and consistency checks + +### `setL2Block` + +Before each transaction, we call `setL2Block` +[method](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L2930). +There we will provide some data about the L2 block that the transaction belongs to: + +- `_l2BlockNumber` The number of the new L2 block. +- `_l2BlockTimestamp` The timestamp of the new L2 block. +- `_expectedPrevL2BlockHash` The expected hash of the previous L2 block. +- `_isFirstInBatch` Whether this method is called for the first time in the batch. +- `_maxVirtualBlocksToCreate` The maximum number of virtual block to create with this L2 block. + +If two transactions belong to the same L2 block, only the first one may have non-zero `_maxVirtualBlocksToCreate`. The rest of the data must be same. + +The `setL2Block` +[performs](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/SystemContext.sol#L345) +a lot of similar consistency checks to the ones for the L1 batch. + +### L2 blockhash calculation and storage + +Unlike L1 batch’s hash, the L2 blocks’ hashes can be checked on L2. + +The hash of an L2 block is `keccak256(abi.encode(_blockNumber, _blockTimestamp, _prevL2BlockHash, _blockTxsRollingHash))`. +Where `_blockTxsRollingHash` is defined in the following way: + +`_blockTxsRollingHash = 0` for an empty block. + +`_blockTxsRollingHash = keccak(0, tx1_hash)` for a block with one tx. + +`_blockTxsRollingHash = keccak(keccak(0, tx1_hash), tx2_hash)` for a block with two txs, etc. + +To add a transaction hash to the current miniblock we use the `appendTransactionToCurrentL2Block` +[function](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/SystemContext.sol#L406). + +Since ZKsync is a state-diff based rollup, there is no way to deduce the hashes of the L2 blocks based on the transactions’ in the batch +(because there is no access to the transaction’s hashes). +At the same time, in order to execute `blockhash` method, the VM requires the knowledge of some of the previous L2 block hashes. +In order to save up on pubdata (by making sure that the same storage slots are reused, i.e. we only have repeated writes) we +[store](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/SystemContext.sol#L72) +only the last 257 block hashes. +You can read more on what are the repeated writes and how the pubdata is processed +[here](/build/developer-reference/era-contracts/handling-l1-l2-ops). + +We store only the last 257 blocks, since the EVM requires only 256 previous ones and we use 257 as a safe margin. + +### Legacy blockhash + +When initializing L2 blocks that do not have their hashes stored on L2 (basically these are blocks before the migration upgrade), +we use the following formula for their hash: + +`keccak256(abi.encodePacked(uint32(_blockNumber)))` + +### Timing invariants + +While the timestamp of each L2 block is provided by the operator, there are some timing invariants that the system preserves: + +- For each L2 block its timestamp should be > the timestamp of the previous L2 block +- For each L2 block its timestamp should be ≥ timestamp of the batch it belongs to +- Each batch must start with a new L2 block (i.e. an L2 block can not span across batches). +- The timestamp of a batch must be ≥ the timestamp of the latest L2 block which belonged to the previous batch. +- The timestamp of the last miniblock in batch can not go too far into the future. + This is enforced by publishing an L2→L1 log, with the timestamp which is then checked on L1. + +## Fictive L2 block & finalizing the batch + +At the end of the batch, the bootloader calls the `setL2Block` +[one more time](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L4160) +to allow the operator to create a new empty block. +This is done purely for some of the technical reasons inside the node, where each batch ends with an empty L2 block. + +We do not enforce that the last block is empty explicitly as it complicates the development process and testing, +but in practice, it is, and either way, it should be secure. + +Also, at the end of the batch we send the timestamps of the batch as well as the timestamp +of the last miniblock in order to check on L1 that both of these are realistic. +Checking any other L2 block’s timestamp is not required since all of them are enforced to be between those two. + +## Migration & virtual blocks’ logic + +As already explained above, for a smoother upgrade for the ecosystem, +there was a migration performed during which instead of returning either batch information or L2 block information, +we returned the virtual block information until they had caught up with the L2 block’s number. + +### Production of the virtual blocks + +- In each batch, there should be at least one virtual block created. +- Whenever a new L2 block is created, the operator can select how many virtual blocks it wants to create. + This can be any number, however, if the number of the virtual block exceeds the L2 block number, + the migration is considered complete and we switch to the mode where the L2 block information will be returned. + +## Additional note on blockhashes + +Note, that if we used some complex formula for virtual blocks’ hashes (like we do for L2 blocks), +we would have to put all of these into storage for the data availability. +Even if we used the same storage trick that we used for the L2 blocks, +where we store only the last 257’s block’s hashes under the current load/migration plans it would be expected +that we have roughly ~250 virtual blocks per batch, practically meaning that we will publish all of these anyway. +This would be too expensive. That is why we have to use a simple formula of `keccak(uint256(number))` for now. +Note, that they do not collide with the legacy miniblock hash, since legacy miniblock hashes are calculated as `keccak(uint32(number))`. + +Also, we need to keep the consistency of previous blockhashes, i.e. if `blockhash(X)` returns a non-zero value, +it should be consistent among the future blocks. +For instance, let’s say that the hash of batch `1000` is `1`, i.e. `blockhash(1000) = 1`. +Then, when we migrate to virtual blocks, we need to ensure that `blockhash(1000)` +will return either 0 (if and only if the block is more than 256 blocks old) or `1`. +Because of that for `blockhash` we will have the following complex +[logic](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/SystemContext.sol#L136): + +- For blocks that were created before the virtual block upgrade, use the batch hashes +- For blocks that were created during the virtual block upgrade, use `keccak(uint256(number))`. +- For blocks that were created after the virtual blocks have caught up with the L2 blocks, use L2 block hashes. diff --git a/content/00.build/65.developer-reference/22.era-vm/00.index.md b/content/00.build/65.developer-reference/22.era-vm/00.index.md new file mode 100644 index 00000000..93adf274 --- /dev/null +++ b/content/00.build/65.developer-reference/22.era-vm/00.index.md @@ -0,0 +1,667 @@ +--- +title: ZKsync Era Virtual Machine Primer +description: +--- + +Unlike EVM, EraVM is a register machine. +EVM instructions operate on a stack. +Instead, EraVM operates primarily on sixteen registers and memory like most modern computers. +That simplifies zero-knowledge proofs, which largely rely on building arithmetic circuits. + +This document describes EraVM assembly language, then the aspects of VM related to smart-contracts. +Its purpose is not to be a complete reference, but to guide you through the main ideas. + +## VM architecture + +The native type for EraVM is a 256-bits wide unsigned integer, we call it a *word*. + +Contracts are sequences of instructions. +To support the execution of contracts, VM provides the following transient state: + +- **registers**: 16 general-purpose registers: `r0`, `r1`, …, `r15`. +`r0` is a special constant register: reading it yields 0, storing to it is ignored. +- **flags**: three distinct boolean registers LT (less-than), EQ (equals, the result is zero) and GT (greater-than). + Instructions may set or clear flags depending on computation results. +- **data** **stack**: holds $2^{16}$ words, is free to use. +- **heap**: for data that we want to pass around between functions and contracts. + Heap is bounded, accesses are only free inside the bound, and we have to pay for growing the bound. +- **code memory**: stores code of currently running contracts. + May also be used as a constant pool. + +VM is aware of two data types: + +- raw integers +- pointers (to fragments of other contracts’ heaps). + +Registers and data stack are tagged: +VM keeps track of whether they hold pointers or raw integer values. +Some instructions will only accept operands tagged as pointers. + +Heap and storage are not tagged, so if we store a pointer to the heap, its tag is lost. + +Contracts have key-value storages, where keys and values are untagged 256-bit integers. +Instructions can change persistent contract storage. + +VM is capable of both near calls (to the code within the same contract) and far calls (to other contracts). + +Let us now gradually introduce the VM functionality guided by the instruction set. + +### Basic instructions + +Contract code consists of instructions, they are executed sequentially. + +Instructions usually operate with registers. For example, an instruction `add` may look like that: + +```asm +; this is a comment +add 5, r2, r8 ; store (5 + r2) to r8 +``` + +Or like that: + +```asm +add 5, r0, r8 ; store (5 + 0) to r8 +``` + +Notice that register `r0` is used to feed constant zero values to instructions; +this allows to use `add X, r0, Y` to copy a value `X` to `Y` . + +Commonly, instructions accept two inputs and one output operands, following the schema: + +![arithmetic opcode.png](/images/developer-reference/era-vm/arithmetic_opcode.png) + +The first operand can be taken from: + +- registers +- an immediate 16-bit value, like in the example above `add 5, r2, r8`. + To use bigger numbers put them as constants in the code memory, see section **Code Addressing**. +- directly from the code memory +- stack in various ways, e.g. `add stack=[2], r2, r8` takes the first element from the stack memory area, by an absolute address 2. +- code memory + +Only registers can be the source of the second operand. + +```asm +add r0, 5, r8 ; error: 5 is an immediate value, + ; but only register is allowed as second operand +``` + +There is usually at most one output operand. +Similarly, the first output operand can be stored to registers or stack. +If there is a second output operand, it can only be stored to a register. + +Instructions are executed one after another, and every instruction has a gas cost measured in *gas*. +A program that runs out of gas panics and none of its side effects are performed. + +Every contract may have at most $2^{16}$ instructions. + +### Arithmetic instructions + +Besides `add`, EraVM implements `sub` for subtraction, `and`/ `or` / `xor` for bitwise logics, +`shl`/ `shr` for logical shifts, `rol`/ `ror` for circular shifts. +These instructions follow the same format, e.g.: + +```asm +shl r1, r4, r3 ; shift left r1 by value of r4, store result in r3 +``` + +Instructions `mul` and `div` are particular: they have two output operands: + +- `mul r1, r2, r3, r4` stores the low 256 bits of r1*r2 in r3, high 256 bits of r1*r2 in r4 +- `div r1, r2, r3, r4` stores the quotient in `r3` and remainder in `r4`. + +### Modifiers + +Most instructions support modifiers that alter their behavior. +The modifiers are appended to the name of the instruction, separated by a dot e.g. `sub.s`. +Three basic modifier types are: `set_flags` , predicates, and `swap`. + +#### Set flags + +By default, most instructions preserve flags. + +```asm +sub r1, r2, r3 ; r3 <- (r1 - r2), no flags are affected +``` + +The instruction `sub` is implemented so that it sets `EQ` if the result is zero (that is, if `r1` == `r2`). +But in this case, even if `r1-r2` is zero, the EQ flag is not set, because we did not allow it explicitly. +We allow instruction to set flags by appending a “set flags” modifier to them, like that: + +```asm +sub! r1, r2, r3 ; r3 <- (r1 - r2); EQ = 1 +``` + +You can learn more in the +[VM formal specification](/zk-stack/components/zksync-evm/vm-specification/formal-spec). + +#### Predicates + +Another type of modifiers allows transforming any instruction into a *predicated*, conditional instruction. +Predicated instructions are only executed if flags satisfy their condition. + +Recall the three flags: LT, EQ and GT. + +For example, this `sub` instruction is only executed if EQ is set: + +```asm +sub.if_eq r1, r2, r5 +``` + +Here is how we can execute `jump` to a label `.label_if_equals` only if `r1 == r2` : + +```asm +sub! r1, r2, r3 ; r3 <- (r1 - r2); EQ = 1 if r1 == r2 +jump.if_eq .label_if_equals +``` + +If the condition is not satisfied, we skip the instruction, but still pay its basic cost in gas. + +Here is a full list of available predicates: + +- `if_gt` +- `if_eq` +- `if_lt` +- `if_ge` (short for “GT or EQ”) +- `if_le` (short for “LT or EQ”) +- `if_not_eq` +- `if_gt_or_eq` + +You can learn more in the +[VM formal specification](/zk-stack/components/zksync-evm/vm-specification/formal-spec). + +#### Swap + +Recall that instructions may only accept data from stack as their first operand. +What if we need the second operand from stack? +For commutative operation, like `add` , `mul`, or `and`, +the order of operands does not matter and we can just write `add x,y,z` instead of `add y,x,z`. +However, for operations like `sub` or `div` we implement a special “swap” modifier +which exchanges the operand values before executing the instruction. +This is useful to work around the restriction that the second source operand has to be a register. + +For example: + +```asm +sub r1, r2, r3 ; r3 <- r1 - r2 +sub.s r1, r2, r3 ; r3 <- r2 - r1 + +``` + +Finally, here is an example of an instruction adorned with all possible modifiers: + +```asm +sub.s.if_lt! r8, r4, r12 +``` + +Here is a breakdown of modifiers: + +- `.if_lt` : is only executed if the LT flag is set +- `.s` : computes `r4 - r8` instead of `r8 - r4` +- `!` : sets flags + +$$ +\begin{aligned} +LT &\leftarrow r_4 < r_8 \\ +EQ &\leftarrow r_4 - r_8 = 0 \\ +GT &\leftarrow r_4 > r_8 +\end{aligned} +$$ + +Other modifiers are instruction-specific. They are described in full in the instruction reference. + +## Calls and returns + +The `jump` instruction allows to continue execution from a different place, but it does not allow to return back. +An alternative is using calls; EraVM supports calling code inside the contract itself (near calls) +as well as calling other contracts (far calls). + +### Far calls + +Far calls are the equivalent of calls in EVM. + +Each call gets its own stack, heap, code memories, and allocated gas. + +It is impossible to allocate more than 63/64 of the currently available gas to a far call. + +Calls can revert or panic (on executing an illegal instruction for example), +which undoes all the changes to storage and events emitted during the call, +and burns all remaining gas allocated to this call. + +Suppose we far called a contract $C$. After the execution of $C$, +the register `r1` holds a pointer to the return value, +allowing a read-only access to a fragment of $C$’s heap. +Alternatively, `r1` can hold a pointer to the heap of some other contract that $C$ called internally. +More on that in Pointers section. + +**Delegate calls.** Beside normal `far_call`, there is a variant `far_call.delegate`. +Delegate calls are a variation of far calls allowing to call a contract with the current storage space. + +For example, suppose we have contracts A, B, C. +Contract A calls B normally, then B delegates to C. +Then C’s code is executed in a context of B’s storage, as if contract A called contract C. +If C returns normally, the execution will proceed from the next instruction of B after delegate call. +In case of `revert` or `panic` in C, all the usual rules apply. + +**Mimic calls.** The last variant of far calls is `far_call.mimic`; it is inaccessible to users and only allowed in system contracts. + +Any of far call variants can be additionally marked as `.static` to call a contract in static mode — see section **Static Mode**. + +### Return, revert, panic + +There are three types of situations where control returns to the caller: + +- Return: a normal way of returning to the caller when no errors occurred. + The instruction is `ret`. +- Revert: a recoverable error happened. Unspent gas is returned to the caller, which will execute the exception handler. + The instruction is `revert`. +- Panic: an irrecoverable error happened. Same as revert, but unspent gas is burned. + The instruction is `ret.panic`. + +### Near calls + +Instruction `near_call reg, address` passes the control to a different address inside the same contract, like `jump`. +Additionally, it remembers the context of execution in a special *call stack* +(it is different from data stack and not accessible to assembly programmers). + +Here is an example of calling function `f` . + +```asm +.text + +; here will be the code of exception handler +eh: + +; caller function +main: +near_call r2, @f, @eh ; refer to labels in code using '@' symbol + +; callee function +f: +ret + +``` + +Additional two arguments: + +- label `@eh` is the address of exception handler. + Functions, like contracts, may revert or panic, which leads to the execution of the exception handler. +- register `r2` holds how much gas we allocate to the function. + +As we see, EraVM supports allocating ergs not only for far calls, but also for near calls. +Passing zero will allocate all available gas. +Unlike in far calls, near calls do not limit the amount of gas passed to 63/64 of available gas. + +- On revert, unspent gas of the function is **returned** +- On panic, unspent gas of the function is **lost** + +All near calls inside the contract are sharing the same memory space (heap, stack), +and do not roll back the changes to this memory if they fail. +They do, however, roll back the changes to storage and events. + +Near calls cannot be used from Solidity to their full extent. +Compiler generates them, but makes sure that if functions revert or panic, the whole contract reverts of panics. +Explicit exception handlers and allocating just a portion of available gas are reserved for low-level code. + +## Accessing data outside registers + +### Stack addressing + +As we already know, instructions may accept data not only in registers or as immediate 16-bit values, but also on stack. + +Data stack is a collection of $2^{16}$ words with a pointer SP. +This pointer contains the next address after the topmost stack element, so the topmost element has the address SP-1. +Stack grows towards maximal address, i.e. pushing an element to stack increases SP. + +On far call, SP starts in a new stack memory at 1024. + +#### Reading from stack + +There are several ways of accessing stack cells: + +```asm +.text +main: + +; r0 <- stack word by absolute index (r1+42), unrelated to SP +add stack=[r1+42], r0, r2 + +; r0 <- stack word by index (SP - (r1 + 42)) +add stack[r1+42], r0, r2 + +; r2 <- stack word by index (SP - (r1 + 42)); additionally, SP += (r1+42) +add stack-=[r1+42], r0, r2 +``` + +As we see there are three stack address modes for input operands; all of them use (register + offset). + +Currently, the last mode is only used in a `nop` instruction as a way to rewind stack: + +```asm +; effectively, SP -= reg+imm +nop stack-=[reg+imm] +``` + +#### Writing to stack + +Storing results on stack is also possible: + +```asm +.text +main: + +; r1 -> word by absolute index (r2 + 42) +add r1, r0, stack=[r2 + 42] + +; r1 -> word by absolute index SP - (r2 + 42) +add r1, r0, stack[r2 + 42] + +; r1 -> word by absolute index SP + (r2 + 42) +; additionally, SP += r2 + 42 +add r1, r0, stack+=[r2 + 42] +``` + +Currently, the last mode is only used in a `nop` instruction as a way to forward stack pointer: + +```asm +; effectively, SP += reg+imm +nop r0, r0, stack+=[reg+imm] +``` + +### Code addressing + +Sometimes we might need to work with larger immediates that do not fit into 16-bit. +In this case we can use the (read-only) code memory as a constant pool and read 256-bit constants from there. + +```asm +.rodata + +datavar: + .cell 42 + .cell 999 +.text +somelabel: + +; r2 <- word by index (r0+0) code memory +add @datavar[0], r0, r2 +add @datavar[r2], r0, r2 +``` + +Note: instructions are 64-bit wide, but when accessing data in code memory, this memory is treated as word-addressable. +Therefore, e.g. reading the 0-th 256-bit word from this memory +will yield a binary representation of the four first 64-bit instructions in the contract. + +There is no distinction between static data and code: code can be read, +data can be executed, but instructions that are not correctly encoded will trigger panic. + +Contracts always need to be divisible by 32 bytes (4 instructions) because of this addressing mode. + +### Using heap + +Heap is a bounded memory region to store data between near calls, and to communicate data between contracts. + +#### Heap boundary growth + +Accessing an address beyond the heap bound leads to heap growth: the bound is adjusted to accommodate this address. +The difference between old and new bounds is paid in gas. + +#### Instructions to access heap + +Most instructions can not use heap directly. +Instructions `ld.1` and `st.1` are used to load and store data on heap: + +```asm +; take a 32-bit number from r1, use it as an offset in heap, +; load the word from heap by this offset to r4 +ld.1 r1, r4 + +; take a 32-bit number from r3, use it as an offset in heap, +; store the word from r5 to heap by this offset +st.1 r3, r5 +``` + +Heap is byte-addressable, but reads and writes operate in words. +To read two consecutive words in heap starting at an address A, first, read from A, and then read from A+32. +Reading any addresses in between is valid too. + +One of the modifiers allows to immediately form a new offset like that: + +```asm +; same as ld, but additionally r5 <- r1 + 32 +ld.1.inc r1, r4, r5 +``` + +This allows reading several consecutive words in a row: + +```asm +; reads four consecutive words from heap starting at address in r8 +; into registers r1, r2, r3, r4 +ld.1.inc r8, r1, r8 +ld.1.inc r8, r2, r8 +ld.1.inc r8, r3, r8 +ld.1.inc r8, r4, r8 +``` + +In theory, heap can hold nearly $2^{32}$ bytes, +but growing a heap so large is not affordable: the maximum gas allocated is $2^{32}-1$. + +The topmost 32 bytes of heap are considered forbidden addresses, +trying to access them results in panic no matter how much gas is available. + +### Heap and Auxheap + +In EraVM, there are two heaps; every far call allocates memory for both of them. + +Heaps are selected with modifiers `.1` or `.2` : + +- `ld.1` reads from heap; +- `ld.2` reads from auxheap. + +The reason why we need two heaps is technical. +Heap contains calldata and returndata for calls to user contracts, +while auxheap contains calldata and returndata for calls to system contracts. +This ensures better compatibility with EVM as users should be able to call +EraVM-specific system contracts without them affecting calldata or returndata. + +## Fat pointers + +A fat pointer is the second type of values in EraVM, beside raw integers. + +As we noted, registers and stacks are internally tagged by VM +to keep track of the cells containing pointers in their low 128 bits. + Only cells with a set pointer tag are considered fat pointers. + +Fat pointers are used to pass read-only data between contracts. +When choosing how to pass data to a contract (whether when calling or returning from a call) we have a choice: + +- pass an existing fat pointer, or +- create a new fat pointer from a fragment of heap/auxheap. + +Fat pointers combine two aspects: + +- Delimit a fragment accessible to other contract. Accesses outside this fragment through a pointer yield zero. +- Provide an offset inside this fragment. This offset can be increased or decreased. + +The restrictions on fat pointers provide allows to pass data between contracts safely and without excessive copying. + +**Implementation note.** Internally, fat pointers hold four 32-bit values: + +- bits 0..31 : offset +- bits 32..63: internal memory page ID +- bits 64…95 : starting address of the fragment +- bits 96…127 : length of the fragment + +### Instructions to manipulate fat pointers + +Only special instructions can manipulate fat pointers without automatically clearing its pointer tag. + +- `ptr.add`, `ptr.sub` modify the offset inside pointer +- `ptr.shrink` reduces the associates fragment, so if we get a fat pointer from contract A, + we can then shrink it and pass to another contract B up the call chain, again without copying data. +- `ptr.pack` allows putting data in the top 128 bit of the pointer value without clearing the pointer tag. + +Doing e.g. `add r1, 0, r2` on a pointer in `r1` clears its tag, and it is now considered as a raw integer. + +Instructions `ld` and `[ld.inc](http://ld.inc)` (without indices 1 or 2) +allow loading data by fat pointers, possibly incrementing the pointer. +It is impossible to write by a fat pointer. + +## Contracts and storage + +All accounts are associated with contracts. +There are $2^{160}$ valid account addresses. + +In EraVM, contracts may have multiple **functions** in them; +a contract may execute its functions by using `near_call`; +it may call other contracts by using `far_call` or its variations `delegate_call` / `mimic_call` + (mimic is reserved for system contracts). + +Size of a contract should be divisible by 32 bytes (4 instructions). + +### Storage of contracts + +Every account has a storage. Storage maps $2^{256}$ keys to values; both keys and values are 256-bit untagged words. + +Contracts may write to their own storage by using `sstore key, value` and read from storage using `sload key, dest`. + +### Static mode + +Static mode prevents contracts from modifying their storage and emitting events. +In static mode, executing an instruction like `sstore` sends VM into panic. + +To execute a contract C in static mode, use a `static` modifier: `far_call.static`. +All contracts, called by C recursively, will also be executed in static mode. + VM exits static mode automatically when C terminates. + +### System contracts + +Part of Era’s functionality is implemented through system contracts. +These contracts have addresses from 0 to $2^{64}$ and are executed in kernel mode, +where they have access to privileged instructions. +An example of such instruction is mimic call, a variant of far call where the caller can pretend to be another contract. +This is useful for hiding the fact that something is implemented via a system contract +but in the hands of users it would mean being able to steal anyone’s tokens. + +System contracts implement contract deployment, extensions such as keccak256, decommitting code etc. + +## Server and VM environment + +### Decommitter + +Decommitter is a module external to EraVM allowing accessing deployed code by its hash. + +![arch-overview.png](/images/developer-reference/era-vm/arch-overview.png) + +The system contracts at the address $2^{15}+2$, called Deployer, +keeps hashes of code of each contract in its storage. +Far calls to a contract with address $C$ perform as follows: + +- VM internally accesses the storage of `Deployer` contract by key $C$. + This storage yields the hash value $H$**.** +- then VM queries the decommitter, providing $H$. + Decommitter answers with the contract code. + +If decommitter does not have the code for the requested hash, one of two things happen: + +- if C is a system contract (i.e. address of $C < 2^{16}$), the call will fail +- otherwise, VM will call the `DefaultAccount` contract. + +### Server + +The VM is controlled by a *server*. +When the server needs to build a new batch, +it starts an instance of EraVM and feeds the transactions to the [Bootloader](#bootloader). + +EraVM accepts three parameters: + +1. Bootloader’s hash. It is used to fetch the bootloader code from decommitter. +2. Code hash of `DefaultAccount` contract code. + It is used to fetch the default code from Decommitter in case of a far call to a contract without any associated code. +3. A boolean flag `is_porter_available`, to determine the number of shards (two if zkPorter is available, one otherwise). + +EraVM retrieves the code of bootloader from Decommitter and proceeds with sequential execution of instructions on the bootloader’s code page. + +### Failures and rollbacks + +There are three types of behaviour triggered by execution failures. + +1. Skipping a malformed transaction. + It is a mechanism implemented by the server, external to EraVM. + Server makes a snapshot of EraVM state after completing every transaction. + If the bootloader encounters a malformed transaction, it fails, + and the server restarts EraVM from the most recent snapshot, skipping this transaction. + + This behaviour is specific to server/bootloader; the contract code has no ways of invoking it. + +2. Revert is triggered by the contract code explicitly by executing `revert`. + EraVM saves its persistent state on every near or far call. + If the contract code identifies a recoverable error, it may execute `revert`; + then EraVM rolls the storage and event queues back to the last checkpoint and executes the exception handler. +3. Panic is triggered either explicitly by executing `panic` or internally when some execution invariants are violated + e.g. attempt to use raw integer in `ptr.add` instruction. + + On panic, the persistent state of EraVM is rolled back in the same way as on revert. + +### Bootloader + +Bootloader is a system contract in charge of block construction (**[sources](https://github.com/matter-labs/era-system-contracts/blob/main/bootloader/bootloader.yul)**). + +Formally, bootloader is assigned an address BOOTLOADER_SYSTEM_CONTRACT_ADDRESS = $2^{15}+1$, but EraVM decommits its code directly by its hash. + +The heap of the bootloader is special: it acts as an interface between server and EraVM. +Server gradually fills the bootloader’s heap with transaction data, formatted according to an implementation-defined convention. + +The bootloader then acts roughly as the following code (not an actual implementation): + +```solidity +contract Bootloader { + function executeBlock( + address operatorAddress, + Transaction[2] memory transactions + ) { + for(uint i = 0; i < transactions.length; i++) { + validateTransaction(transactions[i]); + chargeFee(operatorAddress, transactions[i]); + executeTransaction(transactions[i]); + } + } + + function validateTransaction(Transaction memory tx) { + // validation logic + } + function chargeFee(address operatorAddress, Transaction memory tx) { + // charge fee + } + function executeTransaction(Transaction memory tx) { + // execution logic + } +} +``` + +The bootloader is therefore responsible for: + +- validating transactions; +- executing transactions to form a new block; +- setting some of the transaction- or block-wide transaction parameters (e.g. `blockhash`, `tx.origin`). + +Server makes a snapshot of EraVM state after completing every transaction. +When the bootloader encounters a malformed transaction, it fails, +and the server restarts EraVM from the most recent snapshot, skipping this transaction. +If a transaction is well-formed, EraVM may still panic while handling it outside the bootloader code. +This is a normal situation and is handled by EraVM in a regular way, through panics. + +The exact code of the bootloader is a part of a protocol; its hash is included in the block header. + +### Context value + +A part of the EraVM state is a 128-bit *context value*. +It implements `msg.value` standing for the amount of wei sent in a transaction. +In assembly, it is used as follows: + +1. Execute `context.set_context_u128 reg` to set the value; +2. Perform a far call — it captures the context value; +3. In a called contract, access the context value through `context.get_context_u128 reg`. + +Context value can not be set in static mode. + +The system contract `MsgValueSimulator` ensures that whenever this context value is set to *C*, there are indeed *C* wei transferred to the callee. diff --git a/content/00.build/65.developer-reference/22.era-vm/_dir.yml b/content/00.build/65.developer-reference/22.era-vm/_dir.yml new file mode 100644 index 00000000..c3eedbdd --- /dev/null +++ b/content/00.build/65.developer-reference/22.era-vm/_dir.yml @@ -0,0 +1 @@ +title: ZKsync Era VM diff --git a/content/00.build/65.developer-reference/50.era-contracts/10.l1-contracts.md b/content/00.build/65.developer-reference/50.era-contracts/10.l1-contracts.md index 165c3d9d..af4ca5e3 100644 --- a/content/00.build/65.developer-reference/50.era-contracts/10.l1-contracts.md +++ b/content/00.build/65.developer-reference/50.era-contracts/10.l1-contracts.md @@ -17,108 +17,197 @@ items: [{ --- :: -## DiamondInit - -It is a one-function contract that implements the logic of initializing a diamond proxy. -It is called only once on the diamond constructor and is not saved in the diamond as a facet. - -Implementation detail - function returns a magic value just like it is designed in -[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271), but the magic value is 32 bytes in size. - -## DiamondProxy - -This contract uses the [EIP-2535](https://eips.ethereum.org/EIPS/eip-2535) diamond -proxy pattern. - -It is an in-house implementation that is inspired by the [mudgen reference implementation](https://github.com/mudgen/Diamond). -It has no external functions, only the fallback that delegates a call to one of the facets (target/implementation contract). - -So even an upgrade system is a separate facet that can be replaced. - -One of the differences from the reference implementation is the ability to freeze access to the facet. - -Each of the facets has an associated parameter that indicates if it is possible to freeze access to the facet. +This section delves into the ZKsync Era smart contracts, +describing how they facilitate interactions between Ethereum (Layer 1) +and ZK Chain instances (Layer 2) within ZKsync Era ecosystem. +While we provide overview of ZKsync Era smart contracts here, +it's important to note that this document does *NOT* cover the ZK Chain architecture - +communication between multiple rollups and shared liquidity in details. +For information on the ZK Chain and its functionalities, +please refer to [Ecosystem contracts](/build/developer-reference/era-contracts/l1-ecosystem-contracts). + +## Diamond (also mentioned as State Transition contract) + +Technically, this L1 smart contract acts as a connector between Ethereum (L1) and ZK Chain (L2). +It checks the validity proof and data availability, +handles L2 <-> L1 communication, finalizes L2 state transition, and more. + +There are also important contracts deployed on the L2 that can also execute logic called [system contracts](/build/developer-reference/era-contracts/system-contracts). +Using L2 <-> L1 communication can affect both the L1 and the L2. -Privileged actors can freeze the **diamond** (not a specific facet!) and all facets -with the marker `isFreezable` should be inaccessible until the governor unfreezes the diamond. +![diamondProxy.png](/images/developer-reference/l1-smart-contracts/Diamond-scheme.png) -## Diamond +### DiamondProxy + +The main contract uses [EIP-2535](https://eips.ethereum.org/EIPS/eip-2535) diamond proxy pattern. It is an in-house +implementation that is inspired by the [mudgen reference implementation](https://github.com/mudgen/Diamond). It has no +external functions, only the fallback that delegates a call to one of the facets (target/implementation contract). So +even an upgrade system is a separate facet that can be replaced. + +One of the differences from the reference implementation is access freeze-ability. Each of the facets has an associated +parameter that indicates if it is possible to freeze access to the facet. Privileged actors can freeze the **diamond** +(not a specific facet!) and all facets with the marker `isFreezable` should be inaccessible until the governor or admin +unfreezes the diamond. Note that it is a very dangerous thing since the diamond proxy can freeze the upgrade system and 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 [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. -Technically, this L1 smart contract acts as a connector between Ethereum (L1) and ZKsync (L2). -This contract checks the validity proof and data availability, handles -L2 <-> L1 communication, finalizes L2 state transition, and more. +### GettersFacet -There are also important contracts deployed on the L2 that can also execute logic that we refer to as [System Contracts](system-contracts). -Using L2 <-> L1 communication can affect both the L1 and the L2. +Separate facet, whose only function is providing `view` and `pure` methods. It also implements +[diamond loupe](https://eips.ethereum.org/EIPS/eip-2535#inspecting-facets--functions) which makes managing facets easier. +This contract must never be frozen. -## ExecutorFacet +### AdminFacet -A contract that accepts L2 blocks, enforces data availability and checks the validity of zk-proofs. +This facet responsible for the configuration setup and upgradeability, handling tasks such as: -The state transition is divided into three stages: +- Privileged Address Management: Updating key roles, including the governor and validators. +- System Parameter Configuration: Adjusting critical system settings, + such as the L2 bootloader bytecode hash, verifier address, verifier parameters, fee configurations. +- Freeze-ability: Executing the freezing/unfreezing of facets within the diamond proxy + to safeguard the ecosystem during upgrades or in response to detected vulnerabilities. -- `commitBlocks` - check L2 block timestamp, process the L2 logs, save data for a block, and prepare data for zk-proof. -- `proveBlocks` - validate zk-proof. -- `executeBlocks` - finalize the state, marking L1 -> L2 communication processing, and saving Merkle tree with L2 logs. +Control over the AdminFacet is divided between two main entities: -When a block is committed, we process L2 -> L1 logs. Here are the invariants that are expected there: +- STM (State Transition Manager) - Separate smart contract that can perform critical changes to the system as protocol upgrades. + For more detailed information on its function and design, refer to the + [ZK Chain section](/build/developer-reference/era-contracts/l1-ecosystem-contracts#zk-chain-stm). + Although currently only one version of the STM exists, the architecture allows for future versions to be introduced via subsequent upgrades. + Control of the STM is shared between the `Governance.sol` contract and the Admin entity (see details below). + In its turn, `Governance.sol` controlled by two multisigs: + Admin multisig (see below) and Security council multisig (well-respected contributors in the crypto space). + Collaboratively, these entities hold the power to implement instant upgrades, + whereas Matter Labs alone is limited to scheduling upgrades with a delay. +- Admin - Multisig smart contract managed by Matter Labs that can perform non-critical + changes to the system such as granting validator permissions. + Note, that the Admin is the same multisig as the owner of the governance. -- The only one L2 -> L1 log from the `L2_SYSTEM_CONTEXT_ADDRESS`, with the `key == l2BlockTimestamp` and `value == l2BlockHash`. -- Several (or none) logs from the `L2_KNOWN_CODE_STORAGE_ADDRESS` with the `key == bytecodeHash`, where bytecode is marked as a known factory dependency. -- Several (or none) logs from the `L2_BOOTLOADER_ADDRESS` with the `key == canonicalTxHash` where `canonicalTxHash` is a hash of processed L1 -> L2 transaction. -- Several (of none) logs from the `L2_TO_L1_MESSENGER` with the `key == hashedMessage` where `hashedMessage` is a hash of an arbitrary-length message -that is sent from L2. -- Several (or none) logs from other addresses with arbitrary parameters. +### MailboxFacet -## GettersFacet +The facet that handles L2 <-> L1 communication, an overview for which can be found in +[docs](https://docs.zksync.io/build/developer-reference/l1-l2-interoperability). -Separate facet, whose only function is providing `view` and `pure` methods. It also -implements [diamond loupe](https://eips.ethereum.org/EIPS/eip-2535#diamond-loupe) which makes managing facets easier. +The Mailbox performs three functions: -## MailboxFacet +- **L1 ↔ L2 Communication**: + Enables data and transaction requests to be sent from L1 to L2 and vice versa, + supporting the implementation of multi-layer protocols. +- **Bridging Native Tokens**: + Allows the bridging of either ether or ERC20 tokens to L2, + enabling users to use these assets within the L2 ecosystem. +- **Censorship Resistance Mechanism**: Currently in the research stage. -The facet that handles L2 <-> L1 communication, an overview for which can be found -in the [L1 / L2 Interoperability guide](/build/developer-reference/l1-l2-interoperability). +L1->L2 communication is implemented as requesting an L2 transaction on L1 and executing it on L2. This means a user +can call the function on the L1 contract to save the data about the transaction in some queue. Later on, a validator can +process it on L2 and mark it as processed on the L1 priority queue. Currently, it is used for sending information from +L1 to L2 or implementing multi-layer protocols. Users pays for the transaction execution in the native token when requests L1->L2 transaction. -The Mailbox only cares about transferring information from L2 to L1 and the other way but does not hold or transfer any assets (ETH, ERC20 tokens, or NFTs). +*NOTE*: While user requests the transaction from L1, the initiated transaction on L2 will have such a `msg.sender`: -L1 -> L2 communication is implemented as requesting an L2 transaction on L1 and -executing it on L2. This means a user can call the function on the L1 contract to -save the data about the transaction in some queue. Later on, a validator can -process such transactions on L2 and mark them as processed on the L1 priority queue. +```solidity + address sender = msg.sender; + if (sender != tx.origin) { + sender = AddressAliasHelper.applyL1ToL2Alias(msg.sender); + } +``` -Currently, it is used only for sending information from L1 to L2 or implementing a -multi-layer protocol, but it is planned to use a priority queue for the -censor-resistance mechanism. Relevant functions for L1 -> L2 communication: `requestL2Transaction`/`l2TransactionBaseCost`/`serializeL2Transaction`. +where -**NOTE**: For each executed transaction L1 -> L2, the system program necessarily sends an L2 -> L1 log. +```solidity +uint160 constant offset = uint160(0x1111000000000000000000000000000000001111); -The semantics of such L2 -> L1 log are always: +function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) { + unchecked { + l2Address = address(uint160(l1Address) + offset); + } +} -- sender = BOOTLOADER_ADDRESS. -- key = hash(L1ToL2Transaction). -- value = status of the processing transaction (1 - success & 0 for fail). -- isService = true (just a conventional value). -- l2ShardId = 0 (means that L1 -> L2 transaction was processed in a rollup shard, other shards are not available yet - anyway). -- txNumberInBlock = number of transactions in the block. +``` -L2 -> L1 communication, in contrast to L1 -> L2 communication, is based only on transferring the information, and not on the transaction execution on L1. +For most of the rollups the address aliasing needs to prevent cross-chain exploits that would otherwise be possible if +we simply reused the same L1 addresses as the L2 sender. In ZKsync Era address derivation rule is different from the +Ethereum, so cross-chain exploits are already impossible. However, ZKsync Era may add full EVM support in the future, so +applying address aliasing leaves room for future EVM compatibility. -From the L2 side, there is a special zkEVM opcode that saves `l2ToL1Log` in the L2 -block. A validator will send all `l2ToL1Logs` when sending an L2 block to the L1 -(see `ExecutorFacet`). Later on, users will be able to both read their `l2ToL1logs` on L1 and _prove_ that they sent it. +The L1 -> L2 communication is also used for bridging **native tokens**. +If native token is ether (the case for ZKsync Era) - user should include a `msg.value` when initiating a +transaction request on the L1 contract, if native token is an ERC20 then contract will spend users allowance. +Before executing a transaction on L2, the specified address will be credited +with the funds. To withdraw funds user should call `withdraw` function on the `L2BaseToken` system contracts. This will +burn the funds on L2, allowing the user to reclaim them through the `finalizeWithdrawal` function on the +`SharedBridge` (more in ZK Chain section). + +More about L1->L2 operations can be found [here](/build/developer-reference/era-contracts/handling-l1-l2-ops). + +L2 -> L1 communication, in contrast to L1 -> L2 communication, is based only on transferring the information, and not on +the transaction execution on L1. +The full description of the mechanism for sending information from L2 to L1 can be found +[here](/build/developer-reference/era-contracts/handling-pubdata). + +### ExecutorFacet + +A contract that accepts L2 batches, enforces data availability and checks the validity of zk-proofs. +For more information on how pubdata is parsed, processed please refer to the doc on +[pubdata post EIP-4844](/build/developer-reference/era-contracts/pubdata-post-4844) and the one on +[Handling pubdata](/build/developer-reference/era-contracts/handling-pubdata) detailing out the contents. -From the L1 side, for each L2 block, a Merkle root with such logs in leaves is calculated. Thus, a user can provide Merkle proof for each `l2ToL1Logs`. +The state transition is divided into three stages: -_NOTE_: The `l2ToL1Log` structure consists of fixed-size fields! Because of this, -it is inconvenient to send a lot of data from L2 and to prove that they were sent -on L1 using only `l2ToL1log`. To send a variable-length message we use this trick: +- `commitBatches` - check L2 batch timestamp, process the L2 logs, save data for a batch, and prepare data for zk-proof. +- `proveBatches` - validate zk-proof. +- `executeBatches` - finalize the state, marking L1 -> L2 communication processing, and saving Merkle tree with L2 logs. + +Each L2 -> L1 system log will have a key that is part of the following: + +```solidity +enum SystemLogKey { + L2_TO_L1_LOGS_TREE_ROOT_KEY, + TOTAL_L2_TO_L1_PUBDATA_KEY, + STATE_DIFF_HASH_KEY, + PACKED_BATCH_AND_L2_BLOCK_TIMESTAMP_KEY, + PREV_BATCH_HASH_KEY, + CHAINED_PRIORITY_TXN_HASH_KEY, + NUMBER_OF_LAYER_1_TXS_KEY, + BLOB_ONE_HASH_KEY, + BLOB_TWO_HASH_KEY, + EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY +} +``` + +When a batch is committed, we process L2 -> L1 system logs. +Here are the invariants that are expected there: + +- In a given batch there will be either 9 or 10 system logs. The 10th log is only required for a protocol upgrade. +- There will be a single log for each key that is contained within `SystemLogKey` +- Three logs from the `L2_TO_L1_MESSENGER` with keys: +- `L2_TO_L1_LOGS_TREE_ROOT_KEY` +- `TOTAL_L2_TO_L1_PUBDATA_KEY` +- `STATE_DIFF_HASH_KEY` +- Two logs from `L2_SYSTEM_CONTEXT_SYSTEM_CONTRACT_ADDR` with keys: + - `PACKED_BATCH_AND_L2_BLOCK_TIMESTAMP_KEY` + - `PREV_BATCH_HASH_KEY` +- Two logs from `L2_PUBDATA_CHUNK_PUBLISHER_ADDR` with keys: + - `BLOB_ONE_HASH_KEY` + - `BLOB_TWO_HASH_KEY` +- Two or three logs from `L2_BOOTLOADER_ADDRESS` with keys: + - `CHAINED_PRIORITY_TXN_HASH_KEY` + - `NUMBER_OF_LAYER_1_TXS_KEY` + - `EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY` +- None logs from other addresses (may be changed in the future). + +### DiamondInit + +It is a one-function contract that implements the logic of initializing a diamond proxy. It is called only once on the +diamond constructor and is not saved in the diamond as a facet. -- One of the system contracts accepts an arbitrary-length message and sends a -fixed-length message with parameters `senderAddress == this`, `marker == true`, `key == msg.sender`, `value == keccak256(message)`. -- The contract on L1 accepts all sent messages and if the message came from this system contract it requires that the - preimage of `value` be provided. +Implementation detail - function returns a magic value just like it is designed in +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271), but the magic value is 32 bytes in size. ## ValidatorTimelock @@ -130,22 +219,13 @@ investigation and mitigation before resuming normal operations. It is a temporary solution to prevent any significant impact of the validator hot key leakage, while the network is in the Alpha stage. -This contract consists of four main functions `commitBatches`, `proveBatches`, `executeBatches`, and `revertBatches`, -which can be called only by the validator. +This contract consists of four main functions `commitBatches`, `proveBatches`, `executeBatches`, and `revertBatches`, which can be called only by the validator. -When the validator calls `commitBatches`, the same calldata will be propagated to the ZKsync contract (`DiamondProxy` -through `call` where it invokes the `ExecutorFacet` through `delegatecall`), and also a timestamp is assigned to these -batches to track the time these batches are committed by the validator to enforce a delay between committing and -execution of batches. Then, the validator can prove the already committed batches regardless of the mentioned timestamp, -and again the same calldata (related to the `proveBatches` function) will be propagated to the ZKsync contract. After -the `delay` is elapsed, the validator is allowed to call `executeBatches` to propagate the same calldata to ZKsync -contract. +When the validator calls `commitBatches`, the same calldata will be propagated to the ZKsync contract (`DiamondProxy` through +`call` where it invokes the `ExecutorFacet` through `delegatecall`), and also a timestamp is assigned to these batches to track +the time these batches are committed by the validator to enforce a delay between committing and execution of batches. Then, the +validator can prove the already committed batches regardless of the mentioned timestamp, and again the same calldata (related +to the `proveBatches` function) will be propagated to the ZKsync contract. After the `delay` is elapsed, the validator +is allowed to call `executeBatches` to propagate the same calldata to ZKsync contract. The owner of the ValidatorTimelock contract is the same as the owner of the Governance contract - Matter Labs multisig. - -## Allowlist - -The auxiliary contract controls the permission access list. It is used in bridges and diamond proxies to control which -addresses can interact with them in the Alpha release. Currently, it is supposed to set all permissions to public. - -The owner of the Allowlist contract is the Governance contract. diff --git a/content/00.build/65.developer-reference/50.era-contracts/20.system-contracts.md b/content/00.build/65.developer-reference/50.era-contracts/20.system-contracts.md index 7cbea30e..d3c05bf4 100644 --- a/content/00.build/65.developer-reference/50.era-contracts/20.system-contracts.md +++ b/content/00.build/65.developer-reference/50.era-contracts/20.system-contracts.md @@ -29,9 +29,8 @@ values are set on genesis explicitly. Notably, if in the future we want to upgra `ContractDeployer` and so the constructor will be run. This contract is also responsible for ensuring validity and consistency of batches, L2 blocks and virtual blocks. The -implementation itself is rather straightforward, but to better understand this contract, please take a look at the -[page](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Batches%20&%20L2%20blocks%20on%20zkSync.md) -about the block processing on ZKsync. +implementation itself is rather straightforward, but to better understand this contract, please take a look at the page +about the [block processing](/build/developer-reference/batches-and-l2-blocks) on ZKsync. ## AccountCodeStorage @@ -105,12 +104,12 @@ precompile call with the padded data. All other hashing work will be done in the the crypto part of the precompiles expects to work with padded data. This means that a bug in applying padding may lead to an unprovable transaction. -## L2EthToken & MsgValueSimulator +## L2BaseToken & MsgValueSimulator Unlike Ethereum, zkEVM does not have any notion of any special native token. That’s why we have to simulate operations -with Ether via two contracts: `L2EthToken` & `MsgValueSimulator`. +with Ether via two contracts: `L2BaseToken` & `MsgValueSimulator`. -`L2EthToken` is a contract that holds the balances of ETH for the users. This contract does NOT provide ERC20 interface. +`L2BaseToken` is a contract that holds the balances of ETH for the users. This contract does NOT provide ERC20 interface. The only method for transferring Ether is `transferFromTo`. It permits only some system contracts to transfer on behalf of users. This is needed to ensure that the interface is as close to Ethereum as possible, i.e. the only way to transfer ETH is by doing a call to a contract with some `msg.value`. This is what `MsgValueSimulator` system contract is for. @@ -250,8 +249,8 @@ The L1 messenger receives a message, hashes it and sends only its hash as well a Then, it is the duty of the L1 smart contracts to make sure that the operator has provided full preimage of this hash in the commitment of the batch. -The `L1Messenger` is also responsible for validating the total pubdata to be sent on L1. You can read more about it -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20pubdata%20in%20Boojum.md). +The `L1Messenger` is also responsible for validating the total pubdata to be sent on L1. You can read more about it on +[Handling pubdata](/build/developer-reference/era-contracts/handling-pubdata). - L1Messenger [Interface](https://github.com/matter-labs/era-contracts/blob/main/system-contracts/contracts/interfaces/IL1Messenger.sol) @@ -301,7 +300,7 @@ compress the published pubdata in several ways: This contract contains utility methods that are used to verify the correctness of either bytecode or state diff compression. You can read more on how we compress state diffs and bytecodes in the corresponding -[document](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1%E2%86%92L2%20ops%20on%20zkSync.md). +[document](/build/developer-reference/era-contracts/handling-l1-l2-ops). #### Protected access to some of the system contracts diff --git a/content/00.build/65.developer-reference/50.era-contracts/25.l1-ecosystem-contracts.md b/content/00.build/65.developer-reference/50.era-contracts/25.l1-ecosystem-contracts.md new file mode 100644 index 00000000..9d306414 --- /dev/null +++ b/content/00.build/65.developer-reference/50.era-contracts/25.l1-ecosystem-contracts.md @@ -0,0 +1,686 @@ +--- +title: L1 Ecosystem Contracts +description: +--- + +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/zkVMs, (which we name ZK Chains). +This ecosystem will be grounded on Ethereum, requiring 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 ZK Chains, check this blogpost on an +[Introduction to ZK Chains](https://blog.matter-labs.io/introduction-to-hyperchains-fdb33414ead7), +This document will assume the reader already knows how rollups (esp. ZKsync Era) work. + +## Long term goal + +We want to create a system where: + +- ZK Chains should be launched permissionless-ly 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. + +### Images + +![Contracts](/images/developer-reference/l1-smart-contracts/Hyperchain-scheme.png) + +## ZK Chain & STM + +### ZK Chain (Diamond Proxy) + +A high-level recap on how zk rollups work: + +- Offchain operators collect transactions, process those and submit a tuple of `(old_state, new_state, proof)` to the L1 contract. +- The L1 contract then verifies that the proof is correct. + If the proof is indeed correct, the `new_state` gets saved on the L1 contract. + This `new_state` may not only include the storage root, but also a tree for L2→L1 messages + (which allow to conduct withdrawals of funds from the L2), etc. + +In other words, we can imagine the L1 part of each rollup as a basically a “state transition function verifier”, +the only role of which is to check whether the state transition proposed by the operator of the chain is correct. + +To not commit to a specific type or option of this “state transition function”, +we’ll call each rollup a ZK Chain. +Note, that ZK Chains can be Validiums. +An ZK Chain does not even have to be an L2 chain, it can also be an L3, etc. + +Since the upgrade to ZK Chains, all ZK Chain contracts, including ZKsync Era diamond proxy, no longer directly manages any funds. +Instead, this responsibility transitions to the shared bridge. +For details on how this migration was implemented, please refer to the [Migration process](/build/developer-reference/migrate-era-to-chain). +This document describes technical details of ZK Stack contracts that make it possible for multiple L2/L3 chains to share liquidity, +and provide cost-effective communication among them. +Before delving into the details of ecosystem contracts, please familiarize yourself with the concept of +[ZK Chain](/build/developer-reference/protocol) and read +the [L1 smart contracts page](/build/developer-reference/era-contracts/l1-contracts) for a better understanding of single instance ZK Chain. + +### State transition manager (STM) + +Currently bridging between different zk rollups requires the funds to pass through L1. +This is slow & expensive. + +The vision of seamless internet of value requires transfers of value to be *both* seamless and trustless. +This means that for instance different ZK Chains need to share the same L1 liquidity, +i.e. a transfer of funds should never touch L1 in the process. +However, it requires some sort of trust between two chains. +If a malicious (or broken) rollup becomes a part of the shared liquidity pool it can steal all the funds. + +However, can two instances of the same zk rollup trust each other? +The answer is yes, because no new additions of rollups introduce new trust assumptions. +Assuming there are no bugs in circuits, the system will work as intended. + +How can two rollups know that they are two different instances of the same system? +We can create a factory of such contracts (and so we would know that each new rollup created by this instance is correct one). +But just creating correct contracts is not enough. +Ethereum changes, new bugs may be found in the original system +and so an instance that does not keep itself up-to-date with the upgrades may exploit some bug from the past and jeopardize the entire system. +Just deploying is not enough. +We need to constantly make sure that all ZK Chains are up to date +and maintain whatever other invariants are needed for these ZK Chains to trust each other. + +Let’s define as *State Transition Manager* (STM) **as a contract that is responsible for the following: + +- It serves as a factory to deploy ZK Chains +- It is responsible for ensuring that all the ZK Chains deployed by it are up-to-date. + +Note, that this means that ZK Chains have a “weaker” governance. +I.e. governance can only do very limited number of things, such as setting the validator. +ZK Chain governor can not set its own upgrades and it can only “execute” the upgrade that has already been prepared by the STM. + +In the long term vision ZK Chains deployment will be permissionless, +however STM will always remain the main point of trust and will have to be explicitly whitelisted by the greater governance +of the entire ZK Chain before its ZK Chain get the access to the shared liquidity. + +### Configurability in the first release + +For now, only one STM will be supported — the one that deploys instances of ZKsync Era, possibly using other DA layers. +The inner working of different DA layer support is not relevant for this documentation. + +The exact process of deploying & registering an ZK Chain will be described in [sections below](#creating-new-chains-with-bridgehub). +Overall, each ZK Chain in the first release will have the following parameters: + +| ZK Chain parameter | Updateability | Comment | +| --- | --- | --- | +| chainId | Permanent | Permanent identifier of the ZK Chain. Due to wallet support reasons, for now chainId has to be small (48 bits). This is one of the reasons why for now we’ll deploy ZK Chain manually, to prevent ZK Chain having the same chainId as some another popular chain. In the future it will be trustless-ly assigned as a random 32-byte value.| +| baseToken | Permanent | Each ZK Chain can have their own custom base token (i.e. token used for paying the fees). It is set once during creation and can never be changed. For now, each baseToken has to be backed by the corresponding L1 tokens. The requirements for the baseToken will be explored in the sections dedicated to SharedBridge. | +| baseTokenBridge | Permanent | The L1 shared bridge address. Used to transfer ETH from ERA chain to shared bridge, finalizing withdrawal and requesting an L2 transaction from the ERA chain | +| stateTransitionManager | Permanent | The STM that deployed the ZK Chain. In principle, it could be possible to migrate between STMs (assuming both STMs support that). However, in practice it may be very hard and as of now such functionality is not supported. | +| admin | By admin of ZK Chain | The governor of the ZK Chain has some limited powers to govern the chain | +| validatorTimelock | STM | For now, we want all the chains to use the same 21h timelock period before their batches are finalized. Only STM can update the address that can submit state transitions to the rollup (that is, the validatorTimelock). | +| validatorTimelock.validator | STM | The governance of ZK Chain can choose who can submit new batches to the ValidatorTimelock. | +| priorityTx Validation/ priorityTx FeeParams | STM | For now, for the additional security only STM can define the validation rules for L1→L2 transactions coming to the chain. | +| executing upgrades | By governance of ZK Chain or STM | While exclusively STM governance can set the content of the upgrade, ZK Chain will typically be able to choose suitable time for them to actually execute it. In the first release, ZK Chain have to follow our upgrades.| + +However, in case of urgent high risk situation, STM might force upgrade the contract. + +It is also planned to allow different chains different L1→L2 tx validation methods. +This might be helpful for some chains that want to put heavier restrictions on the L1→L2 transactions coming from L1. + +### Upgradability in the first release + +In the first release, each chain will be an instance of ZKsync Era +and so the upgrade process of each individual ZK Chain will be similar to that of ZKsync Era. + +1. Firstly, the governance of the STM will publish the server + (including sequencer, prover, etc) that support the new version . + This is done offchain. Enough time should be given to various ZK Stack devs to update their version. +2. The governance of the STM will schedule the upgrade. + This operation also notifies the operators of ZK Chains on when they should start processing new batches. + The server is written in such a way that automatically at the scheduled timestamp + of the upgrade the new version will be used in batches. + If the timestamp is set in the past, the new version will be used immediately. +3. After the timestamp has passed it is expected that ZK Stack instances will all start processing the new version on the server side. + + After that the governance atomically calls the following three functions: + + - `setInitialCutHash` ⇒ to ensure that new chains will be created with the version + - `setValidatorTimelock` (if needed) ⇒ to ensure that the new chains will use the new validator timelock right-away + - `setNewVersionUpgrade` ⇒ to save the upgrade information that each ZK Chain will need to follow to conduct the upgrade on their side. + +4. After this step, the batches with the old protocol version can no longer be committed. They can be proved & executed however. + +#### Emergency upgrade + +In case of an emergency of a critical bug, the step (1) can be skipped as well as the waiting period in step (2) can be reduced to 0. + +In case we are aware that some of the committed batches on an ZK Chain are dangerous to be executed, the STM can call `revertBatches` on that ZK Chain + +### Issues & caveats + +- If an ZK Chain skips an upgrade + (i.e. it has version X, it did not upgrade to `X + 1` and now the latest protocol version is `X + 2` there is no built-in way to upgrade). + This team will require manual intervention from us to upgrade. +- The upgrades of ZK Chains are not fully async as of now + (i.e. either tight coordination or strict deadlines are required to ensure that every ZK Chain has time to commit their batches). + This needs to be fixed in the future releases. +- The approach of calling `revertBatches` for malicious ZK Chains is not scalable (O(N) of the number of chains). + The situation is very rare, so it is fine in the short term, but not in the long run. + +## BridgeHub & Shared Bridge + +In the previous section we discussed how ZK Chains and STMs work. +However, these are just means to get the collection of chains that can trust each other, +while providing robust customize-ability for each individual chain. + +In this section we’ll explore how exactly unified liquidity is achieved and how do ZK Chains get deployed. + +### Creating new chains with BridgeHub + +The main contract of the whole ZK Chain ecosystem is called *`BridgeHub`*. It contains: + +- the registry from chainId to STMs that is responsible for that chainId +- the base token for each chainId. +- the whitelist of STMs +- the whitelist of tokens allowed to be `baseTokens` of chains. + +In the long run, any `baseToken` could be used (obviously at the peril of the ZK Chain that decides to use it). +It will also be possible to add multiple STMs. + +BridgeHub is responsible for creating new ZK Chains. +It is also the main point of entry for L1→L2 transactions for all the ZK Chains. +Users won't be able to interact with ZK Chains directly, all the actions must be done through the BridgeHub, +which will ensure that the fees have been paid and will route the call to the corresponding ZK Chain. +One of the reasons it was done this way was to have the unified interface for all ZK Chains that will ever be included in the ZK Chain ecosystem. + +To create a chain, the `BridgeHub.createNewChain` function needs to be called: + +```solidity +function createNewChain( + // The expected chainId of the new ZK Chain + uint256 _chainId, + // The state transition manager that will deploy & manage it + address _stateTransitionManager, + // The baseToken to be used by the ZK Chain + address _baseToken, + // Salt, for now it is not used. It will be used in the future for + // random chainId generation + uint256, //_salt + // The initial admin of the ZK Chain + address _admin, + // The initData. This data is strictly defined by STM and is needed to initialize + // the ZK Chain with the latest protocol version. The correctness of it will be verified by STM. + bytes calldata _initData +) +``` + +BridgeHub will check that the STM as well as the base token are whitelisted and route the call to the State + +![newChain (2).png](/images/developer-reference/l1-smart-contracts/newChain.png) + +### Creation of a chain in the first release + +In the future, ZK Chain creation will be permissionless. +A securely random `chainId` will be generated for each chain to be registered. +However, generating 32-byte chainId is not feasible with the current SDK expectations on EVM and so for now chainId is of type `uint48`. +And so it has to be chosen by the governance of `BridgeHub`. +Also, for the first release we would want to avoid chains being able to choose their own initialization parameter to prevent possible malicious input. + +For this reason, there will be an entity called `admin` which is basically a hot key managed by us and it will be used to deploy new ZK Chains. + +So the flow for deploying their own ZK Chain for users will be the following: + +1. Users tell us (e.g. via a Google Form) that they want to deploy an ZK Chain with certain governance, + STM (we’ll likely allow only one for now), and baseToken. +2. Our server will generate a chainId not reserved by any other major chain and the `admin` will call the `BridgeHub.createNewChain`. + This will call the `STM.createNewChain` that will deploy the instance of the rollup as well as initialize the first transaction there — + the system upgrade transaction needed to set the chainId on L2. + +After that, the ZK Chain is ready to be used. + +### SharedBridge as store of base tokens + +For liquidity to be unified there needs to be a contract that actually maintains all of it. +This contract is `SharedBridge`. Users are free to deploy their own bridges to interact with the ZK Chain ecosystem, +but SharedBridge is special, because it maintains the balance of all the `baseToken`s, including all of ETH supply. +In the future we might allow multiple base token bridges, or we will make the current shared bridge more customizable. + +### Handling base tokens + +On L2, *a base token* (not to be consfused with a *native token*, i.e. an ERC20 token with a main contract on the chain) +is the one that is used for `msg.value` and it is managed at `L2BaseToken` system contract. +We need its logic to be strictly defined in `L2BaseToken`, +since the base asset is expected to behave the exactly the same as ether on EVM. +For now this token contract does not support base minting and burning of the asset, nor further customization. + +In other words, in the current release base assets can only be transferred through `msg.value`. +They can also only be minted when they are backed 1-1 on L1. + +### **L1→L2 communication** + +L1→L2 communication allows users on L1 to create a request for a transaction to happen on L2. +This is the primary censorship resistance mechanism. +If you are interested, you can read more on L1→L2 communications [here](/build/developer-reference/era-contracts/handling-l1-l2-ops), +but for now just understanding that L1→L2 communication allows to request transactions to happen on L2 is enough. + +The L1→L2 communication is also the only way to mint a base asset at the moment. +Fees to the operator as well as `msg.value` will be minted on `L2BaseToken` after the corresponding L1→L2 tx has been processed. + +To request an L1→L2 transaction, the `BridgeHub.requestL2TransactionDirect` function needs to be invoked. +The user should pass the struct with the following parameters: + +```solidity +struct L2TransactionRequestDirect { + uint256 chainId; + uint256 mintValue; + address l2Contract; + uint256 l2Value; + bytes l2Calldata; + uint256 l2GasLimit; + uint256 l2GasPerPubdataByteLimit; + bytes[] factoryDeps; + address refundRecipient; +} +``` + +Most of the params are self-explanatory & replicate the logic of ZKsync Era. +The only new fields are: + +- `mintValue` is the total amount of the base tokens that should be minted on L2 as the result of this transaction. + The requirement is that `request.mintValue >= request.l2Value + request.l2GasLimit * derivedL2GasPrice(...)`, + where `derivedL2GasPrice(...)` is the gas price to be used by this L1→L2 transaction. + The exact price is defined by the ZK Chain. + +Here is a quick guide on how this transaction is routed through the bridgehub. + +1. The bridgehub retrieves the `baseToken` of the chain with the corresponding `chainId` and deposits `mintValue` tokens to the SharedBridge. + In case the baseToken is ETH, it must be provided with the `msg.value` of the L1 transaction. + If the base token is an ERC20, the corresponding allowance should be provided beforehand to the SharedBridge. + + This step ensures that the baseToken will be backed 1-1 on L1. + +2. After that, it just routes the corresponding call to the ZK Chain with the corresponding `chainId`. + It is now the responsibility of the ZK Chain to validate that the transaction is correct and can be accepted by it. + This validation includes, but not limited to: + + - The fact that the user paid enough funds for the transaction (basically `request.l2GasLimit * derivedL2GasPrice(...) + request.l2Value >= request.mintValue`. + - The fact the transaction is always executable (the `request.l2GasLimit` is not high enough). + - etc. + +3. After the ZK Chain validates the tx, it includes it into its priority queue. + Once the operator executes this transaction on L2, the `mintValue` of the baseToken will be minted on L2. + The `derivedL2GasPrice(...) * gasUsed` will be given to the operator’s balance. + The other funds can be routed either of the following way: + +If the transaction is successful, the `request.l2Value` +will be minted on the `request.l2Contract` address (it can potentially transfer these funds within the transaction). +The rest are minted to the `request.refundRecipient` address. +In case the transaction is not successful, all of the base token will be minted to the `request.refundRecipient` address. +These are the same rules as for the ZKsync Era. + +***Diagram of the L1→L2 transaction flow on L1 when the baseToken is ETH:*** + +![requestL2TransactionDirect (ETH) (2).png](/images/developer-reference/l1-smart-contracts/requestL2TransactionDirect-ETH.png) + +***Diagram of the L1→L2 transaction flow on L1 when the baseToken is an ERC20:*** + +![requestL2TransactionDirect (ERC20) (3).png](/images/developer-reference/l1-smart-contracts/requestL2TransactionDirect.png) + +***Diagram of the L1→L2 transaction flow on L2 (it is the same regardless of the baseToken):*** + +![L1-_L2 tx processing on L2.png](/images/developer-reference/l1-smart-contracts/L1-L2_tx_processing_on_L2.png) + +### Limitations of custom base tokens in the first release + +ZKsync Era uses ETH as a base token. +Upon creation of an ZK Chain other chains may want to use their own custom base tokens. +Note, that for the first release all the possible base tokens are whitelisted. +The other limitation is that all the base tokens must be backed 1-1 on L1 as well as they are solely implemented with `L2BaseToken` contract. +In other words: + +- No custom logic is allowed on L2 for base tokens +- Base tokens can not be minted on L2 without being backed by the corresponding L1 amount. + +If someone wants to build a protocol that mints base tokens on L2, +the option for now is to “mint” an infinite amount of those on L1, +deposit on L2 and then give those out as a way to “mint”. +We will update this in the future. + +### General architecture and initialization of SharedBridge for a new ZK Chain + +Right after an ZK Chain is deployed, the `SharedBridge` will already be used for `baseToken`-related bridging. +However, it can also support the `ERC20` bridging. +But for that it needs additional components. + +The `SharedBridge` consists of two parts: + +- `L1SharedBridge` that stores all the funds on L1. +- `L2SharedBridge` that mints & manages the corresponding tokens on L2. Also, whenever a withdrawal needs to happen, the user calls this asset + +`L1SharedBridge` contains a mapping from a chainId to the address of the `L2SharedBridge`. +Whenever a deposit to certain chain happens `L1SharedBridge` looks up the address of the `L2SharedBridge` and asks to do an L1→L2 transaction there. + +Note, that it is actually *vital* that the corresponding L2 counterpart is +already pre-deployed before the bridge serves its first non-`basetoken` deposit. +If this is not the case, the deposits will “fail” in the sense that no tokens on L2 will be minted, +while the status of the transaction will be “success” (since an empty address was called) +meaning that there is no way for users to reclaim those funds. + +The flow is expected to be the following: + +- Once an ZK Chain is created, it will be the job of its first validator (it can be done any user with access to that ZK Chain to deploy such a bridge. +- Before `SharedBridge` can start depositing non-base tokens to that bridge, + someone must provide a proof that indeed such a contract has been deployed on a certain specific address. + After that the corresponding `L2SharedBridge` location for such `chainId` will be stored. + +The details of how such a proof should look like are out of the scope of this document, but it is relatively easy to do. + +#### Initialization in the first release + +In the first release however, instead of providing such a proof permissionless-ly on L1, +the ZK Chain owner will have to send a message to us, we will double-check that the deployed bytecode is correct and initialized properly. +Once it is done, our governance will call the `initializeChainGovernance` function on the `SharedBridge` to make a chain as initialized. + +### Shared bridge as standard ERC20 bridge + +`SharedBridge` does not only serve as store for base tokens. +It is also de-facto ZK Chain implementation of the ZKsync Era’s ERC20 token +[default bridge](https://docs.zksync.io/build/developer-reference/bridging-asset.html), +i.e. the bridge that allows users to bridge ERC20 assets to L2. +The bridged assets will have “standard” ERC20 token implementation, i.e. fee-on-transfer, +rebase or other sort of custom token functionality will not be supported for bridged assets. + +For better understanding of this section it is recommended to understand (at least roughly) how bridging on ZKsync Era works. +More documentation on it can be found [here](https://docs.zksync.io/build/developer-reference/bridging-asset.html). + +Let’s say that an ZK Chain has ETH as its base token. +Let’s say that the depositor wants to bridge USDC to that chain. +We can not use `BridgeHub.requestL2TransactionDirect`, because it only takes base token `mintValue` +and then starts an L1→L2 transaction rightaway out of the name of the user and not the `L1SharedBridge`. +We need some way to atomically deposit both ETH and USDC to the shared bridge + start a transaction from `L1SharedBridge`. +For that we have a separate function on `Bridgehub`: `BridgeHub.requestL2TransactionTwoBridges`. +The reason behind the name “two bridges” will be explored a bit later, +but for now let’s only take the case for trying to deposit a non-base token via `SharedBridge`. + +When calling `BridgeHub.requestL2TransactionTwoBridges` the following struct needs to be provided: + +```solidity +struct L2TransactionRequestTwoBridgesOuter { + uint256 chainId; + uint256 mintValue; + uint256 l2Value; + uint256 l2GasLimit; + uint256 l2GasPerPubdataByteLimit; + address refundRecipient; + address secondBridgeAddress; + uint256 secondBridgeValue; + bytes secondBridgeCalldata; +} +``` + +The first few fields are the same as for the simple L1→L2 transaction case. +However there are three new fields: + +- `secondBridgeAddress` is the address of the bridge which is responsible for the asset being deposited. In this case it should be the same `SharedBridge` +- `secondBridgeValue` is the `msg.value` to be sent to the bridge which is responsible for the asset being deposited + (in this case it is `SharedBridge`). + This can be used to deposit ETH to ZK Chains that have base token that is not ETH. +- `secondBridgeCalldata` is the data to pass to the bridge. + `SharedBridge` requires it to be `abi.encode(address _l1Token, uint256 _depositAmount, address _l2Receiver)`, + where this is the data about which L1 token to deposit to L2, the amount to deposit, and where should it go. + +The function will do the following: + +#### L1 + +1. It will deposit the `request.mintValue` of the ST’s base token the same way as during a simple L1→L2 transaction. + These funds will be used for funding the `l2Value` and the fee to the operator. +2. It will call the `secondBridgeAddress` (`SharedBridge`) + once again and this time it will deposit the funds to the `SharedBridge`, + but this time it will be deposit not to pay the fees, but rather `_depositAmount` of `_l1Token` will be deposited. + + This call will return the parameters to call the l2 contract with (the address of the L2 bridge counterpart, + the calldata and factory deps to call it with). +3. After the BridgeHub will call the ZK Chain to add the corresponding L1→L2 transaction to the priority queue. +4. The BridgeHub will call the `SharedBridge` once again so that it can remember the hash of the corresponding deposit transaction. + [This is needed in case the deposit fails](#claiming-failed-deposits). + +#### L2 + +1. After some time, the corresponding L1→L2 is created. +2. The L2 bridge counterpart will deploy the standard L2 token implementation for this specific asset if it has not been deployed previously. +3. The L2 bridge counterpart will mint the funds. + +***Diagram of a depositing ETH onto a chain with USDC as the baseToken.** +**Note that some contract calls (like `USDC.transferFrom` are omitted for the sake of consiceness):*** + +![requestL2TransactionTwoBridges (SharedBridge) (1).png](/images/developer-reference/l1-smart-contracts/requestL2TransactionTwoBridges-depositEthToUSDC.png) + +### Generic usage of `BridgeHub.requestL2TransactionTwoBridges` + +`SharedBridge` is the only bridge that can handle base tokens. +However, anyone is allowed to create any sort of bridge that handle non-base assets. +For bridging tokens via such bridges, the same `BridgeHub.requestL2TransactionTwoBridges` has to be used. + +Let’s do a quick recap on how it works: + +When calling `BridgeHub.requestL2TransactionTwoBridges` the following struct needs to be provided: + +```solidity +struct L2TransactionRequestTwoBridgesOuter { + uint256 chainId; + uint256 mintValue; + uint256 l2Value; + uint256 l2GasLimit; + uint256 l2GasPerPubdataByteLimit; + address refundRecipient; + address secondBridgeAddress; + uint256 secondBridgeValue; + bytes secondBridgeCalldata; +} +``` + +- `secondBridgeAddress` is the address of the bridge that is responsible for the asset being deposited. +- `secondBridgeValue` is the `msg.value` to be sent to the bridge which is responsible for the asset being deposited. +- `secondBridgeCalldata` is the data to pass to the bridge. This can be interpreted any way it wants. + +1. Firstly, It will deposit the `request.mintValue` the same way as during a simple L1→L2 transaction. + These funds will be used for funding the `l2Value` and the fee to the operator. +2. After that, the `secondBridgeAddress.bridgehubDeposit` with the following signature is called + +```solidity +struct L2TransactionRequestTwoBridgesInner { + // Should be equal to a constant `keccak256("TWO_BRIDGES_MAGIC_VALUE")) - 1` + bytes32 magicValue; + // The L2 contract to call + address l2Contract; + // The calldata to call it with + bytes l2Calldata; + // The factory deps to call it with + bytes[] factoryDeps; + // Just some 32-byte value that can be used for later processing + // It is called `txDataHash` as it *should* be used as a way to facilitate + // reclaiming failed deposits. + bytes32 txDataHash; +} + +function bridgehubDeposit( + uint256 _chainId, + // The actual user that does the deposit + address _prevMsgSender, + // The msg.value of the L1->L2 transaction to be created + uint256 _l2Value, + // Custom bridge-specific data + bytes calldata _data +) external payable returns (L2TransactionRequestTwoBridgesInner memory request); +``` + +Now the job of the contract will be to “validate” whether they are okay with the transaction to come. +For instance, if it is some sort of “WETH” bridge, +it would check that `msg.value` is enough to cover for the minted L2 WETH. +Another potential functionality of this part is to deposit the corresponding L1 assets to the contracts. +Both of the things above are done by the `SharedBridge`. + +However, a custom bridge can be whatever it wants. +Ultimately, the correctly processed `bridgehubDeposit` function basically grants `BridgeHub` +the right to create an L1→L2 transaction out of the name of the `secondBridgeAddress`. +Since it is so powerful, the first returned value must be a magical constant that is equal to `keccak256("TWO_BRIDGES_MAGIC_VALUE")) - 1`. +The fact that it was a somewhat non standard signature and a struct with the magical value is the major defense +against “accidental” approvals to start a transaction out of the name of an account. + +Aside from the magical constant, the method should also return the information an L1→L2 transaction will start its call with: +the `l2Contract` , `l2Calldata`, `factoryDeps`. +It also should return the `txDataHash` field. +The meaning `txDataHash` will be needed in the next paragraphs. +But generally it can be any 32-byte value the bridge wants. + +1. After that, an L1→L2 transaction is invoked. + Note, that the “trusted” `SharedBridge` has enforced that the baseToken was deposited correctly + (again, the step (1) can *only* be handled by the `SharedBridge`), + while the second bridge can provide any data to call its L2 counterpart with. +2. As a final step, following function is called: + +```solidity +function bridgehubConfirmL2Transaction( + // `chainId` of the ZK Chain + uint256 _chainId, + // the same value that was returned by `bridgehubDeposit` + bytes32 _txDataHash, + // the hash of the L1->L2 transaction + bytes32 _txHash +) external; +``` + +This function is needed for whatever actions are needed to be done after the L1→L2 transaction has been invoked. + +On `SharedBridge` it is used to remember the hash of each deposit transaction, +so that later on, the funds could be returned to user if the `L1->L2` transaction fails. +The `_txDataHash` is stored so that the whenever the users will want to reclaim funds from a failed deposit, +they would provide the token and the amount as well as the sender to send the money to. + +> The call diagram for an L1 generic deposit via `requestL2TransactionTwoBridges` & a custom bridge looks the same as with the `SharedBridge`. +> Ultimately the L2 behavior depends on the implementation of the custom bridge, i.e. which `l2Contract` and `l2Calldata` it will return in `bridgehubDeposit`. + +### Claiming failed deposits + +In case a deposit fails, the `SharedBridge` allows users to recover the deposited funds +by providing a proof that the corresponding transaction indeed failed. +The logic is the same as in the current Era implementation. The legacy bridge routes the transactions to claim failed deposits to `SharedBridge` now + +### Withdrawing funds from L2 + +Funds withdrawal is done the same way as it is currently on Era. +The only difference is that now wrapped tokens are supported as well. + +The user needs to call the `L2SharedBridge.withdraw` function on L2, while providing the token they want to withdraw. +This function works both for the wrapped base token and for any standard bridged ERC20. +Note, however, that it is not the way to withdraw base token. +To withdraw base token, `L2BaseToken.withdraw` needs to be called. + +After the batch with the withdrawal request has been executed, +the user can finalize the withdrawal on L1 by calling `L1SharedBridge.finalizeWithdrawal`, +where the user provides the proof of the corresponding withdrawal message. + +## Migration of ZKsync Era + +All of the above describes how the shared bridge & bridge hub will work in the end. +However, how do we make sure that the users’ interfaces don't break? + +### Migrating bridges + +`L1ERC20Bridge` will be migrated to a new implementation that will route all calls to the `L1SharedBridge`. +Also we’ll have to migrate all ERC20 balances to the new `L1SharedBridge`. +At the time of this writing there are 246 tokens to migrate (we can assume 300 in case there are more to be added). + +`L2ERC20Bridge` already has the needed interfaces and so it will just be migrated to become `L2SharedBridge` directly. + +Also, right now it is possible to derive on L1 the address of the corresponding bridged L2 token. +This will not be possible as in theory different ZK Chains might have different code for deployed beacon proxy. +This functionality will only be maintained for backwards compatibility in `L1ERC20Bridge` that can only interact with Era. + +Note: The migration has already been done for the said implementations + +### Migrating direct interaction with Era + +ZKsync ERA will become an ZK Chain, under a newly deployed STM. +However, users already rely on the fact that it is possible to interact with Era directly and not through BridgeHub. +We will keep that functionality exclusively for Era. + +In practice, all our ZK Chains will have Era’ `requestL2Transaction` function, +but it will be only allowed to be called if the ZK Chain is Era. + +Also, during migration Era has to send all its ETH to `BridgeHub`. + +## Additional limitations for the first release + +In the first release creating new chains as well as `SharedBridge` initialization for new chains will not be permissionless. +That is needed to ensure that no malicious input can be provided there. + +Also, since in the first release, there will be little benefits from shared liquidity, +i.e. the there will be no direct ZK Chain<>ZK Chain transfers supported, +as a measure of additional security we’ll also keep track of balances for each +individual ZK Chain and will not allow it to withdraw more than it has deposited into the system. + +## Other contracts + +### Governance + +This contract manages calls for all governed ZKsync Era contracts on L1 and L2. +Mostly, it is used for upgradeability and changing critical system parameters. +The contract has minimum delay settings for the call execution. + +Each upgrade consists of two steps: + +- Scheduling - The owner can schedule upgrades in two different manners: + - Fully transparent data. All the targets, calldata, and upgrade conditions are known to the community before upgrade execution. + - Shadow upgrade. The owner only shows the commitment to the upgrade. + This upgrade type is mostly useful for fixing critical issues in the production environment. +- Upgrade execution - the Owner or Security council can perform the upgrade with previously scheduled parameters. + - Upgrade with delay. Scheduled operations should elapse the delay period. Both the owner and Security Council can execute this type of upgrade. + - Instant upgrade. Scheduled operations can be executed at any moment. Only the Security Council can perform this type of upgrade. + +Only Owner can cancel the upgrade before its execution. + +The diagram below outlines the complete journey from the initiation of an operation to its execution. + +![governance.png](/images/developer-reference/l1-smart-contracts/Governance-scheme.jpg) + +## Upgrade mechanism + +Currently, there are three types of upgrades for ZKsync Era. +Normal upgrades (used for new features) are initiated by the Governor (a multisig) +and are public for a certain timeframe before they can be applied. +Shadow upgrades are similar to 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 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: + +1. Prepare Upgrade for all chains: + - The new facets and upgrade contracts have to be deployed, + - The upgrade’ calldata (diamondCut, initCalldata with ProposedUpgrade) is hashed on L1 and the hash is saved. +2. Upgrade specific chain + - The upgrade has to be called on the specific chain. The upgrade calldata is passed in as calldata and verified. The protocol version is updated. + - Ideally, the upgrade will be very similar for all chains. + If it is not, a smart contract can calculate the differences. + If this is also not possible, we have to set the `diamondCut` for each chain by hand. +3. Freeze not upgraded chains + - After a certain time the chains that are not upgraded are frozen. + +## ValidatorTimelock + +An intermediate smart contract between the validator EOA account and the diamond proxy ZK Chain smart contracts. +Its primary purpose is +to provide a trustless means of delaying batch execution without modifying the main ZK Chain contract. ZKsync actively +monitors the chain activity and reacts to any suspicious activity by freezing the chain. This allows time for +investigation and mitigation before resuming normal operations. + +It is a temporary solution to prevent any significant impact of the validator hot key leakage, while the network is in +the Alpha stage. + +This contract consists of four main functions `commitBatchesSharedBridge`, `proveBatchesSharedBridge`, +`executeBatchesSharedBridge`, and `revertBatchesSharedBridge`, which can be called only by the validator of the given chain. + +When the validator calls `commitBatchesSharedBridge`, the same calldata will be propagated to the ZKsync contract with the correct chainId +(`DiamondProxy` through `call` where it invokes the `ExecutorFacet` through `delegatecall`), +and also a timestamp is assigned to these batches to track +the time these batches are committed by the validator to enforce a delay between committing and execution of batches. Then, the +validator can prove the already committed batches regardless of the mentioned timestamp, and again the same calldata (related +to the `proveBatches` function) will be propagated to the ZKsync contract. After the `delay` is elapsed, the validator +is allowed to call `executeBatches` to propagate the same calldata to ZKsync contract. + +The owner of the ValidatorTimelock contract is the same as the owner of the Governance contract - Matter Labs multisig. diff --git a/content/00.build/65.developer-reference/50.era-contracts/30.pubdata-post-4844.md b/content/00.build/65.developer-reference/50.era-contracts/30.pubdata-post-4844.md new file mode 100644 index 00000000..6e95abf1 --- /dev/null +++ b/content/00.build/65.developer-reference/50.era-contracts/30.pubdata-post-4844.md @@ -0,0 +1,306 @@ +--- +title: Pubdata Post 4844 +description: +--- + +## Motivation + +EIP-4844, commonly known as Proto-Danksharding, is an upgrade to the ethereum protocol +that introduces a new data availability solution embedded in Layer 1. +More information about it can be found on Ethereum's website on [Danksharding](https://ethereum.org/en/roadmap/danksharding/). +With proto-danksharding we can utilize the new blob data availability for cheaper storage of pubdata when we commit batches +resulting in more transactions per batch and cheaper batches/transactions. +We want to ensure we have the flexibility at the contract level to process both pubdata via calldata, +as well as pubdata via blobs. +A quick callout here, while 4844 has introduced blobs as new DA layer, +it is the first step in full Danksharding. +With full Danksharding ethereum will be able to handle a total of 64 blobs per block unlike 4844 which supports just 6 per block. + +> 💡 Given the nature of 4844 development from a solidity viewpoint, we’ve had to create a temporary contract +> `BlobVersionedHash.yul` which acts in place of the eventual `BLOBHASH` opcode. + +## Technical Approach + +The approach spans both L2 system contracts and L1 ZKsync contracts (namely `Executor.sol`). +When a batch is sealed on L2 we will chunk it into blob-sized pieces (4096 elements * 31 bytes per what is required by our circuits), +take the hash of each chunk, and send them to L1 via system logs. +Within `Executor.sol` , when we are dealing with blob-based commitments, +we verify that the blob contains the correct data with the point evaluation precompile. +If the batch utilizes calldata instead, the processing should remain the same as in a pre-4844 ZKsync. +Regardless of if pubdata is in calldata or blobs are used, the batch’s commitment changes as we include new data within the auxiliary output. + +Given that this is the first step to a longer-term solution, +and the restrictions of proto-danksharding that get lifted for full danksharding, we impose the following constraints: + +1. we now support 6 blobs per batch +2. only 1 batch will be committed in a given transaction +3. we now send 6 system logs (one for each potential blob commitment) + +## Backward-compatibility + +While some of the parameter formatting changes, we maintain the same function signature for `commitBatches` +and still allow for pubdata to be submitted via calldata: + +```solidity +struct StoredBatchInfo { + uint64 batchNumber; + bytes32 batchHash; + uint64 indexRepeatedStorageChanges; + uint256 numberOfLayer1Txs; + bytes32 priorityOperationsHash; + bytes32 l2LogsTreeRoot; + uint256 timestamp; + bytes32 commitment; +} + +struct CommitBatchInfo { + uint64 batchNumber; + uint64 timestamp; + uint64 indexRepeatedStorageChanges; + bytes32 newStateRoot; + uint256 numberOfLayer1Txs; + bytes32 priorityOperationsHash; + bytes32 bootloaderHeapInitialContentsHash; + bytes32 eventsQueueStateHash; + bytes systemLogs; + bytes pubdataCommitments; +} + +function commitBatches( + StoredBatchInfo calldata _lastCommittedBatchData, + CommitBatchInfo[] calldata _newBatchesData +) external; +``` + +## Implementation + +### Bootloader Memory + +With the increase in the amount of pubdata due to blobs, changes can be made to the bootloader memory to facilitate more l2 to l1 logs, +compressed bytecodes, and pubdata. +Copying the comment around pubdata slot calculation from our code: + +```text +One of "worst case" scenarios for the number of state diffs in a batch is when 780kb of pubdata is spent on repeated writes, that are all zeroed out. In this case, the number of diffs is 780kb / 5 = 156k. This means that they will have accoomdate 42432000 bytes of calldata for the uncompressed state diffs. Adding 780kb on top leaves us with roughly 43212000 bytes needed for calldata. 1350375 slots are needed to accommodate this amount of data. We round up to 1360000 slots just in case. +``` + +The overall bootloader max memory has been increased to `63800000`. + +### L2 System Contracts + +We introduce a new system contract PubdataChunkPublisher that takes the full pubdata, +creates chunks that are each 126,976 bytes in length (this is calculated as 4096 elements per blob each of which has 31 bytes), +and commits them in the form of 6 system logs. +We have the following keys for system logs: + +```solidity +enum SystemLogKey { + L2_TO_L1_LOGS_TREE_ROOT_KEY, + TOTAL_L2_TO_L1_PUBDATA_KEY, + STATE_DIFF_HASH_KEY, + PACKED_BATCH_AND_L2_BLOCK_TIMESTAMP_KEY, + PREV_BATCH_HASH_KEY, + CHAINED_PRIORITY_TXN_HASH_KEY, + NUMBER_OF_LAYER_1_TXS_KEY, + BLOB_ONE_HASH_KEY, + BLOB_TWO_HASH_KEY, + BLOB_THREE_HASH_KEY, + BLOB_FOUR_HASH_KEY, + BLOB_FIVE_HASH_KEY, + BLOB_SIX_HASH_KEY, + EXPECTED_SYSTEM_CONTRACT_UPGRADE_TX_HASH_KEY +} +``` + +In addition to the blob commitments, the hash of the total pubdata is still sent +and is used if a batch is committed with pubdata as calldata vs as blob data. +As stated earlier, even when we only have enough pubdata for a single blob, 6 system logs are sent. +The hash value in the rest of the logs in this case will `bytes32(0)` . + +One important thing is that we don’t try to reason about the data here, +that is done in the L1Messenger and Compressor contracts. +The main purpose of this is to commit to blobs and have those commitments travel to L1 via system logs. + +### L1 Executor Facet + +While the function signature for `commitBatches` and the structure of `CommitBatchInfo` stays the same, +the format of `CommitBatchInfo.pubdataCommitments` changes. +Before 4844, this field held a byte array of pubdata, +now it can hold either the total pubdata as before or it can hold a list of concatenated info for kzg blob commitments. +To differentiate between the two, a header byte is prepended to the byte array. +At the moment we only support 2 values: + +```solidity +/// @dev Enum used to determine the source of pubdata. At first we will support calldata and blobs but this can be extended. +enum PubdataSource { + Calldata = 0, + Blob = 1 +} +``` + +We reject all other values in the first byte. + +### Calldata Based Pubdata Processing + +When using calldata, we want to operate on `pubdataCommitments[1:pubdataCommitments.length - 32]` +as this is the full pubdata that was committed to via system logs. +The reason we don’t operate on the last 32 bytes is that we also include what the blob commitment +for this data would be as a way to make our witness generation more generic. +Only a single blob commitment is needed for this as the max size of calldata is the same size as a single blob. +When processing the system logs in this context, we will check the hash of the supplied pubdata without +the 1 byte header for pubdata source against the value in the corresponding system log with key `TOTAL_L2_TO_L1_PUBDATA_KEY`. +We still require logs for the 6 blob commitments, even if these logs contain values we will substitute them for `bytes32(0)` +when constructing the batch commitment. + +### Blob Based Pubdata Processing + +The format for `pubdataCommitments` changes when we send pubdata as blobs, +containing data we need to verify the blob contents via the newly introduced point evaluation precompile. +The data is `pubdataCommitments[1:]` is the concatenation of +`opening point (16 bytes) || claimed value (32 bytes) || commitment (48 bytes) || proof (48 bytes)` for each blob attached to the transaction, +lowering our calldata from N → 144 bytes per blob. More on how this is used later on. + +Utilizing blobs causes us to process logs in a slightly different way. +Similar to how it's done when pubdata is sent via calldata, we require a system log with a key of the `TOTAL_L2_TO_L1_PUBDATA_KEY`, +although the value is ignored and extract the 6 blob hashes from the `BLOB_ONE_HASH_KEY` to `BLOB_SIX_HASH_KEY` system logs to be used in the batch commitment. + +While calldata verification is simple, comparing the hash of the supplied calldata versus the value in the system log, +we need to take a few extra steps when verifying the blobs attached to the transaction contain the correct data. +After processing the logs and getting the 6 blob linear hashes, we will have all the data we need to call the +[point evaluation precompile](https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile). +Recall that the contents of `pubdataCommitments` have the opening point (in its 16 byte form), +claimed value, the commitment, and the proof of this claimed value. +The last piece of information we need is the blob’s versioned hash (obtained via `BLOBHASH` opcode). + +There are checks within `_verifyBlobInformation` that ensure that we have the correct blob linear hashes +and that if we aren’t expecting a second or more blobs, the linear hash should be equal to `bytes32(0)`. +This is how we signal to our circuits that we didn’t publish any information in the second blob. + +Verifying the commitment via the point evaluation precompile goes as follows +(note that we assume the header byte for pubdataSource has already been removed by this point): + +```solidity +// The opening point is passed as 16 bytes as that is what our circuits expect and use when verifying the new batch commitment +// PUBDATA_COMMITMENT_SIZE = 144 bytes +pubdata_commitments <- [opening point (16 bytes) || claimed value (32 bytes) || commitment (48 bytes) || proof (48 bytes)] from calldata +opening_point = bytes32(pubdata_commitments[:16]) +versioned_hash <- from BLOBHASH opcode + +// Given that we needed to pad the opening point for the precompile, append the data after. +point_eval_input = versioned_hash || opening_point || pubdataCommitments[16: PUBDATA_COMMITMENT_SIZE] + +// this part handles the following: +// verify versioned_hash == hash(commitment) +// verify P(z) = y +res <- point_valuation_precompile(point_eval_input) + +assert uint256(res[32:]) == BLS_MODULUS +``` + +Where correctness is validated by checking the latter 32 bytes of output from the point evaluation call is equal to `BLS_MODULUS`. + +### Batch Commitment and Proof of Equivalence + +With the contents of the blob being verified, we need to add this information to the batch commitment +so that it can further be part of the verification of the overall batch by our proof system. +Our batch commitment is the hashing of a few different values: passthrough data (holding our new state root, and next enumeration index to be used), +meta parameters (flag for if zk porter is available, bootloader bytecode hash, and default account bytecode hash), +and auxiliary output. +The auxiliary output changes with 4844, adding in 4 new fields and the new corresponding encoding: + +- 6 `bytes32` fields for linear hashes + - These are the hashes of the blob’s preimages +- 6 `bytes32` for 4844 output commitment hashes + - These are `(versioned hash || opening point || evaluation value)` + - The format of the opening point here is expected to be the 16 byte value passed by calldata +- We encode an additional 28 `bytes32(0)` at the end because with the inclusion of vm 1.5.0, + our circuits support a total of 16 blobs that will be used once the total number of blobs supported by ethereum increase. + +```solidity +abi.encode( + l2ToL1LogsHash, + _stateDiffHash, + _batch.bootloaderHeapInitialContentsHash, + _batch.eventsQueueStateHash, + bytes32[] memory blobAuxOutputWord +); +``` + +where `blobAuxOutputWord` contains `_blobCommitments` and `_blobHashes` of all the blobs, and `20 * bytes32(0)`, since the circuits require 16 blobs + +There are different scenarios that change the values posted here: + +1. We submit pubdata via calldata +2. We utilize 1 or more than 1 blobs + +When we use calldata, the values for the linear hashes and output commitments should all be `bytes32(0)`. +If we are using blobs but only have a single blob, `_blobHashes[0]` and `_blobCommitments[0]` +should correspond to that blob, while the rest will be `bytes32(0)`. +If we use more blobs the linear hashes and output commitments should be present for the corresponding blobs. + +Our circuits will then handle the proof of equivalence, following a method similar to the +[moderate approach](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq#Moderate-approach-works-with-any-ZK-SNARK), +verifying that the total pubdata can be repackaged as the blobs we submitted +and that the commitments in fact evaluate to the given value at the computed opening point. + +## Pubdata Contents and Blobs + +Given how data representation changes on the consensus layer (where blobs live) +versus on the execution layer (where calldata is found), +there is some preprocessing that takes place to make it compatible. +When calldata is used for pubdata, we keep it as is and no additional processing is required to transform it. +Recalling the above section when pubdata is sent via calldata it has the format: +source byte (1 bytes) || pubdata || blob commitment (32 bytes) +and so we must first trim it of the source byte and blob commitment before decoding it. +A more detailed guide on the format can be found in our documentation. +Using blobs requires a few more steps: + +```python +ZKSYNC_BLOB_SIZE = 31 * 4096 + +# First we pad the pubdata with the required amount of zeroes to fill +# the nearest blobs +padding_amount = ZKSYNC_BLOB_SIZE - len(pubdata) % ZKSYNC_BLOB_SIZE) +padded_pubdata = pad_right_with_zeroes(pubdata, padding_amount) + +# We then chunk them into `ZKSYNC_BLOB_SIZE` sized arrays +blobs = chunk(padded_pubdata, ZKSYNC_BLOB_SIZE) + +# Each blob is then encoded to be compatible with the CL +for blob in blobs: + encoded_blob = zksync_pubdata_into_ethereum_4844_data(blob) +``` + +Now we can apply the encoding formula, with some of the data from the blob commit transaction to move from encoded blobs back into decodable zksync pubdata: + +```python +# opening point (16 bytes) || claimed value (32 bytes) || commitment (48 bytes) || proof (48 bytes) +BLOB_PUBDATA_COMMITMENT_SIZE = 144 + +# Parse the kzg commitment from the commit calldata +commit_calldata_without_source = commit_calldata[1:] +for i in range(0, len(commit_calldata_without_source), BLOB_PUBDATA_COMMITMENT_SIZE): + # We can skip the opening point and claimed value, ignoring the proof + kzg_commitment = commit_calldata_without_source[48:96] + +# We then need to pull the blobs in the correct order, this can be found by matching +# each blob with their kzg_commitment keeping the order from the calldata +encoded_blobs = pull_blob_for_each_kzg_commitment(kzg_commitments) + +# Decode each blob into the zksync specific format +for encoded_blob in encoded_blobs: + decoded_blob = ethereum_4844_data_into_zksync_pubdata(encoded_blob) + +reconstructed_pubdata = concat(decoded_blobs) +``` + +The last thing to do depends on the strategy taken, the two approaches are: + +- Remove all trailing zeroes after concatenation +- Parse the data and ignore the extra zeroes at the end + +The second option is a bit messier so going with the first, +we can then decode the pubdata and when we get to the last state diff, +if the number of bytes is less than specified we know that the remaining data are zeroes. +The needed functions can be found within the +[zkevm_circuits code](https://github.com/matter-labs/era-zkevm_circuits/blob/3a973afb3cf2b50b7138c1af61cc6ac3d7d0189f/src/eip_4844/mod.rs#L358). diff --git a/content/00.build/65.developer-reference/50.era-contracts/40.handling-l1-l2-ops.md b/content/00.build/65.developer-reference/50.era-contracts/40.handling-l1-l2-ops.md new file mode 100644 index 00000000..5d187ff5 --- /dev/null +++ b/content/00.build/65.developer-reference/50.era-contracts/40.handling-l1-l2-ops.md @@ -0,0 +1,183 @@ +--- +title: Handling L1->L2 ops on ZKsync +description: +--- + +The transactions on ZKsync can be initiated not only on L2, but also on L1. +There are two types of transactions that can be initiated on L1: + +- Priority operations. These are the kind of operations that any user can create. +- Upgrade transactions. These can be created only during upgrades. + +## Prerequisites + +Please read the full article on the [general system contracts / bootloader structure](/build/developer-reference/era-contracts/system-contracts) +as well as the pubdata structure with Boojum system to understand +[the difference](/build/developer-reference/era-contracts/handling-pubdata) between system and user logs. + +## Priority operations + +### Initiation + +A new priority operation can be appended by calling the +[requestL2TransactionDirect](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/bridgehub/Bridgehub.sol#L216) +or [requestL2TransactionTwoBridges](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/bridgehub/Bridgehub.sol#L262) +methods on `BridgeHub` smart contract. +`BridgeHub` will forward funds to the `SharedBridge` and send transaction request to the specified state transition contract (selected by the chainID). +State transition contract will perform several checks for the transaction, +making sure that it is processable and provides enough fee to compensate the operator for this transaction. +Then, this transaction will be +[appended](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Mailbox.sol#L335) +to the priority queue. + +The difference between `requestL2TransactionDirect` and `requestL2TransactionTwoBridges` +is that the `msg.sender` on the L2 Transaction is the second bridge in the `requestL2TransactionTwoBridges` case, +while it is the `msg.sender` of the `requestL2TransactionDirect` in the first case. +For more details read the [L1 ecosystem contracts](/build/developer-reference/era-contracts/l1-ecosystem-contracts). + +### Bootloader + +Whenever an operator sees a priority operation, it can include the transaction into the batch. +While for normal L2 transaction the account abstraction protocol will ensure that the `msg.sender` +has indeed agreed to start a transaction out of this name, for L1→L2 transactions there is no signature verification. +In order to verify that the operator includes only transactions that were indeed requested on L1, +the bootloader [maintains](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L1106-L1107) +two variables: + +- `numberOfPriorityTransactions` (maintained at `PRIORITY_TXS_L1_DATA_BEGIN_BYTE` of bootloader memory) +- `priorityOperationsRollingHash` (maintained at `PRIORITY_TXS_L1_DATA_BEGIN_BYTE + 32` of the bootloader memory) + +Whenever a priority transaction is processed, +the `numberOfPriorityTransactions` gets incremented by 1, while `priorityOperationsRollingHash` is assigned to +`keccak256(priorityOperationsRollingHash, processedPriorityOpHash)`, +where `processedPriorityOpHash` is the hash of the priority operations that has been just processed. + +Also, for each priority transaction, we +[emit](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L1100) +a user L2→L1 log with its hash and result, which basically means that it will get Merklized +and users will be able to prove on L1 that a certain priority transaction has succeeded or failed +(which can be helpful to reclaim your funds from bridges if the L2 part of the deposit has failed). + +Then, at the end of the batch, we +[submit](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L4167-L4168) +two L2→L1 log system log with these values. +### Batch commit + +During batch commit, the contract will remember those values, but not validate them in any way. + +### Batch execution + +During batch execution, we would pop `numberOfPriorityTransactions` from the top of priority queue and +[verify](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol#L328) +that their rolling hash does indeed equal to `priorityOperationsRollingHash`. + +## Upgrade transactions + +### Initiation + +Upgrade transactions can only be created during a system upgrade. +It is done if the `DiamondProxy` delegatecalls to the implementation that manually puts this transaction into the storage of the DiamondProxy, +this could happen on calling +[upgradeChainFromVersion](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Admin.sol#L111) +on the State Transition contract. +Note, that since it happens during the upgrade, there is no “real” checks on the structure of this transaction. +We do have [some validation](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/upgrades/BaseZkSyncUpgrade.sol#L211), +but it is purely on the side of the implementation which the `DiamondProxy` delegatecalls to and so may be lifted if the implementation is changed. + +The hash of the currently required upgrade transaction is +[stored](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/ZkSyncHyperchainStorage.sol#L124) +under `l2SystemContractsUpgradeTxHash`. + +We will also track the batch where the upgrade has been committed in the +`l2SystemContractsUpgradeBatchNumber` [variable](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/ZkSyncHyperchainStorage.sol#L127). + +We can not support multiple upgrades in parallel, i.e. the next upgrade should start only after the previous one has been complete. + +### Bootloader + +The upgrade transactions are processed just like with priority transactions, with only the following differences: + +- We can have only one upgrade transaction per batch & this transaction must be the first transaction in the batch. +- The system contracts upgrade transaction is not appended to `priorityOperationsRollingHash` + and doesn’t increment `numberOfPriorityTransactions`. + Instead, its hash is calculated via a system L2→L1 log *before* it gets executed. + Note, that it is an important property. More on it [below](#security-considerations). + +### Commit + +After an upgrade has been initiated, it will be required that the next commit batches operation already contains the system upgrade transaction. +It is [checked](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol#L197) +by verifying the corresponding L2→L1 log. + +We also remember that the upgrade transaction has been processed in this batch (by amending the `l2SystemContractsUpgradeBatchNumber` variable). + +### Revert + +In a very rare event when the team needs to revert the batch with the upgrade on ZKsync, +the `l2SystemContractsUpgradeBatchNumber` is +[reset](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol#L481). + +Note, however, that we do not “remember” that certain batches had a version before the upgrade, +i.e. if the reverted batches will have to be re-executed, the upgrade transaction must still be present there, +even if some of the deleted batches were committed before the upgrade and thus didn’t contain the transaction. + +### Execute + +Once batch with the upgrade transaction has been executed, we +[delete](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol#L379) +them from storage for efficiency to signify that the upgrade has been fully processed and that a new upgrade can be initiated. + +## Security considerations + +Since the operator can put any data into the bootloader memory and for L1→L2 transactions the bootloader has to blindly trust it +and rely on L1 contracts to validate it, it may be a very powerful tool for a malicious operator. +Note, that while the governance mechanism is generally trusted, we try to limit our trust for the operator as much as possible, +since in the future anyone would be able to become an operator. + +Some time ago, we *used to* have a system where the upgrades could be done via L1→L2 transactions, +i.e. the implementation of the `DiamondProxy` upgrade would +[include](https://github.com/matter-labs/era-contracts/blob/f06a58360a2b8e7129f64413998767ac169d1efd/ethereum/contracts/zksync/upgrade-initializers/DIamondUpgradeInit2.sol#L27) +a priority transaction (with `from` equal to for instance `FORCE_DEPLOYER`) with all the upgrade params. + +In the Boojum though having such logic would be dangerous and would allow for the following attack: + +- Let’s say that we have at least 1 priority operations in the priority queue. + This can be any operation, initiated by anyone. +- The operator puts a malicious priority operation with an upgrade into the bootloader memory. + This operation was never included in the priority operations queue / and it is not an upgrade transaction. + However, as already mentioned above the bootloader has no idea what priority / upgrade transactions + are correct and so this transaction will be processed. + +The most important caveat of this malicious upgrade is that it may change +implementation of the `Keccak256` precompile to return any values that the operator needs. + +- When the`priorityOperationsRollingHash` will be updated, + instead of the “correct” rolling hash of the priority transactions, + the one which would appear with the correct topmost priority operation is returned. + The operator can’t amend the behaviour of `numberOfPriorityTransactions`, but it won’t help much, + since the the `priorityOperationsRollingHash` will match on L1 on the execution step. + +That’s why the concept of the upgrade transaction is needed: +this is the only transaction that can initiate transactions out of the kernel space and +thus change bytecodes of system contracts. +That’s why it must be the first one and that’s why +[emit](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L600) +its hash via a system L2→L1 log before actually processing it. + +### Why it doesn’t break on the previous version of the system + +This section is not required for current system understanding +but for those willing to analyze the previous production system which wasn't susceptible to attack. + +Note that the hash of the transaction is calculated before the transaction is executed: +[era-system-contracts/bootloader/bootloader.yul#L1055](https://github.com/matter-labs/era-system-contracts/blob/3e954a629ad8e01616174bde2218241b360fda0a/bootloader/bootloader.yul#L1055) + +And then we publish its hash on L1 via a *system* L2→L1 log: +[era-system-contracts/bootloader/bootloader.yul#L1133](https://github.com/matter-labs/era-system-contracts/blob/3e954a629ad8e01616174bde2218241b360fda0a/bootloader/bootloader.yul#L1133) + +In the new upgrade system, the `priorityOperationsRollingHash` is calculated on L2 +and so if something in the middle changes the implementation of `Keccak256`, +it may lead to the full `priorityOperationsRollingHash` be maliciously crafted. +In the pre-Boojum system, we publish all the hashes of the priority transactions +via system L2→L1 and then the rolling hash is calculated on L1. +This means that if at least one of the hash is incorrect, then the entire rolling hash will not match also. diff --git a/content/00.build/65.developer-reference/50.era-contracts/50.handling-pubdata.md b/content/00.build/65.developer-reference/50.era-contracts/50.handling-pubdata.md new file mode 100644 index 00000000..e3956265 --- /dev/null +++ b/content/00.build/65.developer-reference/50.era-contracts/50.handling-pubdata.md @@ -0,0 +1,390 @@ +--- +title: Handling Pubdata +description: +--- + +Pubdata in ZKsync can be divided up into 4 different categories: + +1. L2 to L1 Logs +2. L2 to L1 Messages +3. Smart Contract Bytecodes +4. Storage writes + +Using data corresponding to these 4 facets, across all executed batches, we’re able to reconstruct the full state of L2. +To restore the state we just need to filter all of the transactions to the L1 ZKsync contract for only the `commitBatches` +transactions where the proposed block has been referenced by a corresponding `executeBatches` call +(the reason for this is that a committed or even proven block can be reverted but an executed one cannot). +Once we have all the committed batches that have been executed, +we then will pull the transaction input and the relevant fields, applying them in order to reconstruct the current state of L2. + +## L2→L1 communication + +We will implement the calculation of the Merkle root of the L2→L1 messages via a system contract as part of the `L1Messenger`. +Basically, whenever a new log emitted by users that needs to be Merklized is created, +the `L1Messenger` contract will append it to its rolling hash and then at the end of the batch, +during the formation of the blob it will receive the original preimages from the operator, verify, and include the logs to the blob. + +We will now call the logs that are created by users and are Merklized *user* logs +and the logs that are emitted by natively by VM *system* logs. +Here is a short comparison table for better understanding: + +| System logs | User logs | +| --- | --- | +| Emitted by VM via an opcode. | VM knows nothing about them. | +| Consistency and correctness is enforced by the verifier on L1 (i.e. their hash is part of the block commitment. | Consistency and correctness is enforced by the L1Messenger system contract. The correctness of the behavior of the L1Messenger is enforced implicitly by prover in a sense that it proves the correctness of the execution overall. | +| We don’t calculate their Merkle root. | We calculate their Merkle root on the L1Messenger system contract. | +| We have constant small number of those. | We can have as much as possible as long as the commitBatches function on L1 remains executable (it is the job of the operator to ensure that only such transactions are selected) | +| In EIP4844 they will remain part of the calldata. | In EIP4844 they will become part of the blobs. | + +### Backwards-compatibility + +Note, that to maintain a unified interface with the previous version of the protocol, +the leaves of the Merkle tree will have to maintain the following structure: + +```solidity +struct L2Log { + uint8 l2ShardId; + bool isService; + uint16 txNumberInBlock; + address sender; + bytes32 key; + bytes32 value; +} +``` + +While the leaf will look the following way: + +```solidity +bytes32 hashedLog = keccak256( + abi.encodePacked(_log.l2ShardId, _log.isService, _log.txNumberInBlock, _log.sender, _log.key, _log.value) +); +``` + +`keccak256` will continue being the function for the merkle tree. + +To put it shortly, the proofs for L2→L1 log inclusion will continue having exactly the same format as they did in the pre-Boojum system, +which avoids breaking changes for SDKs and bridges alike. + +### Implementation of `L1Messenger` + +The L1Messenger contract will maintain a rolling hash of all the L2ToL1 logs `chainedLogsHash` +as well as the rolling hashes of messages `chainedMessagesHash`. +Whenever a contract wants to send an L2→L1 log, the following operation will be +[applied](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/L1Messenger.sol#L107): + +`chainedLogsHash = keccak256(chainedLogsHash, hashedLog)`. L2→L1 logs have the same 88-byte format as in the current version of ZKsync. + +Note, that the user is charged for necessary future the computation that will be needed to calculate the final merkle root. +It is roughly 4x higher than the cost to calculate the hash of the leaf, +since the eventual tree might have be 4x times the number nodes. +In any case, this will likely be a relatively negligible part compared to the cost of the pubdata. + +At the end of the execution, the bootloader will +[provide](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L2730) +a list of all the L2ToL1 logs as well as the messages in this block to the L1Messenger +(this will be provided by the operator in the memory of the bootloader). +The L1Messenger checks that the rolling hash from the provided logs is the same as in the `chainedLogsHash` +and calculate the merkle tree of the provided messages. +Right now, we always build the Merkle tree of size `2048`, +but we charge the user as if the tree was built dynamically based on the number of leaves in there. +The implementation of the dynamic tree has been postponed until the later upgrades. + +### Long L2→L1 messages & bytecodes + +Before, the fact that the correct preimages for L2→L1 messages as bytecodes were provided was checked on the L1 side. +Now, it will be done on L2. + +If the user wants to send an L2→L1 message, its preimage is +[appended](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/L1Messenger.sol#L123) +to the message’s rolling hash too `chainedMessagesHash = keccak256(chainedMessagesHash, keccak256(message))`. + +A very similar approach for bytecodes is used, where their rolling hash is calculated +and then the preimages are provided at the end of the batch to form the full pubdata for the batch. + +Note, that in for backward compatibility, just like before any long message or bytecode is accompanied by the corresponding user L2→L1 log. + +### Using system L2→L1 logs vs the user logs + +The content of the L2→L1 logs by the L1Messenger will go to the blob of EIP4844. +Meaning, that all the data that belongs to the tree by L1Messenger’s L2→L1 logs should not be needed during block commitment. +Also, note that in the future we will remove the calculation of the Merkle root of the built-in L2→L1 messages. + +The only places where the built-in L2→L1 messaging should continue to be used: + +- Logs by SystemContext (they are needed on commit to check the previous block hash). +- Logs by L1Messenger for the merkle root of the L2→L1 tree as well as the hash of the `totalPubdata`. +- `chainedPriorityTxsHash` and `numberOfLayer1Txs` from the bootloader (read more about it below). + +### Obtaining `txNumberInBlock` + +To have the same log format, the `txNumberInBlock` must be obtained. +While it is internally counted in the VM, there is currently no opcode to retrieve this number. +We will have a public variable `txNumberInBlock` in the `SystemContext`, +which will be incremented with each new transaction and retrieve this variable from there. +It is [zeroed out](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/SystemContext.sol#L490) +at the end of the batch. + +## Bootloader implementation + +The bootloader has a memory segment dedicated to the ABI-encoded data of the L1ToL2Messenger to perform the `publishPubdataAndClearState` call. + +At the end of the execution of the batch, the operator should provide the corresponding data into the bootloader memory, +i.e user L2→L1 logs, long messages, bytecodes, etc. +After that, the [call](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L2744) +is performed to the `L1Messenger` system contract, +that should validate the adherence of the pubdata to the required format + +## Bytecode Publishing + +Within pubdata, bytecodes are published in 1 of 2 ways: (1) uncompressed via `factoryDeps` +(pre-boojum this is within its own field, and post-boojum as part of the `totalPubdata`) and (2) compressed via long l2 → l1 messages. + +### Uncompressed Bytecode Publishing + +With Boojum, `factoryDeps` are included within the `totalPubdata` bytes and have the following format: +`number of bytecodes || forEachBytecode (length of bytecode(n) || bytecode(n))`. + +### Compressed Bytecode Publishing + +This part stays the same in a pre and post boojum ZKsync. +Unlike uncompressed bytecode which are published as part of `factoryDeps`, +compressed bytecodes are published as long l2 → l1 messages which can be seen +[here](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/Compressor.sol#L73). + +### Bytecode Compression Algorithm — Server Side + +This is the part that is responsible for taking bytecode, +that has already been chunked into 8 byte words, performing validation, and compressing it. + +Each 8 byte word from the chunked bytecode is assigned a 2 byte index +(constraint on size of dictionary of chunk → index is 2^16 - 1 elements). +The length of the dictionary, dictionary entries (index assumed through order), +and indexes are all concatenated together to yield the final compressed version. + +For bytecode to be considered valid it must satisfy the following: + +1. Bytecode length must be less than 2097120 ((2^16 - 1) * 32) bytes. +2. Bytecode length must be a multiple of 32. +3. Number of 32-byte words cannot be even. + +The following is a simplified version of the algorithm: + +```python +statistic: Map[chunk, (count, first_pos)] +dictionary: Map[chunk, index] +encoded_data: List[index] + +for position, chunk in chunked_bytecode: + if chunk is in statistic: + statistic[chunk].count += 1 + else: + statistic[chunk] = (count=1, first_pos=pos) + +# We want the more frequently used bytes to have smaller ids to save on calldata (zero bytes cost less) +statistic.sort(primary=count, secondary=first_pos, order=desc) + +for index, chunk in enumerated(sorted_statistics): + dictionary[chunk] = index + +for chunk in chunked_bytecode: + encoded_data.append(dictionary[chunk]) + +return [len(dictionary), dictionary.keys(order=index asc), encoded_data] +``` + +### Verification And Publishing — L2 Contract + +The function `publishCompressBytecode` takes in both the original `_bytecode` and the `_rawCompressedData`, +the latter of which comes from the output of the server’s compression algorithm. +Looping over the encoded data, derived from `_rawCompressedData`, +the corresponding chunks are pulled from the dictionary and compared to the original byte code, +reverting if there is a mismatch. After the encoded data has been verified, +it is published to L1 and marked accordingly within the `KnownCodesStorage` contract. + +Pseudo-code implementation: + +```python +length_of_dict = _rawCompressedData[:2] +dictionary = _rawCompressedData[2:2 + length_of_dict * 8] # need to offset by bytes used to store length (2) and multiply by 8 for chunk size +encoded_data = _rawCompressedData[2 + length_of_dict * 8:] + +assert(len(dictionary) % 8 == 0) # each element should be 8 bytes +assert(num_entries(dictionary) <= 2^16) +assert(len(encoded_data) * 4 == len(_bytecode)) # given that each chunk is 8 bytes and each index is 2 bytes they should differ by a factor of 4 + +for (index, dict_index) in list(enumerate(encoded_data)): + encoded_chunk = dictionary[dict_index] + real_chunk = _bytecode.readUint64(index * 8) # need to pull from index * 8 to account for difference in element size + verify(encoded_chunk == real_chunk) + +# Sending the compressed bytecode to L1 for data availability +sendToL1(_rawCompressedBytecode) +markAsPublished(hash(_bytecode)) +``` + +## Storage diff publishing + +ZKsync is a statediff-based rollup and so publishing the correct state diffs plays an integral role in ensuring data availability. + +### Difference between initial and repeated writes + +ZKsync publishes state changes that happened within the batch instead of transactions themselves. +Meaning, that for instance some storage slot `S` under account `A` has changed to value `V`, +we could publish a triple of `A,S,V`. +Users by observing all the triples could restore the state of ZKsync. +However, note that our tree unlike Ethereum’s one is not account based +(i.e. there is no first layer of depth 160 of the merkle tree corresponding to accounts +and second layer of depth 256 of the merkle tree corresponding to users). +Our tree is “flat”, i.e. a slot `S` under account `A` is just stored in the leaf number `H(S,A)`. +Our tree is of depth 256 + 8 (the 256 is for these hashed account/key pairs and 8 is for potential shards in the future, +we currently have only one shard and it is irrelevant for the rest of the document). + +We call this `H(S,A)` *derived key*, because it is derived from the address and the actual key in the storage of the account. +Since our tree is flat, whenever a change happens, we can publish a pair `DK, V`, where `DK=H(S,A)`. + +However, these is an optimization that could be done: + +- Whenever a change to a key is used for the first time, we publish a pair of `DK,V` and we assign some sequential id to this derived key. + This is called an *initial write*. It happens for the first time and that’s why we must publish the full key. +- If this storage slot is published in some of the subsequent batches, instead of publishing the whole `DK`, + we can use the sequential id instead. + This is called a *repeated write*. + +For instance, if the slots `A`,`B` (I’ll use latin letters instead of 32-byte hashes for readability) +changed their values to `12`,`13` accordingly, +in the batch it happened they will be published in the following format: + +- `(A, 12), (B, 13)`. Let’s say that the last sequential id ever used is 6. Then, `A` will receive the id of `7` and B will receive the id of `8`. + +Let’s say that in the next block, they changes their values to `13`,`14`. Then, their diff will be published in the following format: + +- `(7, 13), (8,14)`. + +The id is permanently assigned to each storage key that was ever published. +While in the description above it may not seem like a huge boost, however, each `DK` is 32 bytes long and id is at most 8 bytes long. + +We call this id *enumeration_index*. + +Note, that the enumeration indexes are assigned in the order of sorted array of (address, key), +i.e. they are internally sorted. +The enumeration indexes are part of the state merkle tree, it is **crucial** that the initial writes are published in the correct order, +so that anyone could restore the correct enum indexes for the storage slots. +In addition, an enumeration index of `0` indicates that the storage write is an initial write. + +## State diffs after Boojum upgrade + +Firstly, let’s define what we mean by *state diffs*. +A *state diff* is an element of the following structure. + +[State diff structure](https://github.com/matter-labs/era-zkevm_test_harness/blob/3cd647aa57fc2e1180bab53f7a3b61ec47502a46/circuit_definitions/src/encodings/state_diff_record.rs#L8). + +Basically, it contains all the values which might interest us about the state diff: + +- `address` where the storage has been changed. +- `key` (the original key inside the address) +- `derived_key` — `H(key, address)` as described in the previous section. + - Note, the hashing algorithm currently used here is `Blake2s` +- `enumeration_index` — Enumeration index as explained above. + It is equal to 0 if the write is initial and contains the non-zero enumeration index + if it is the repeated write (indexes are numerated starting from 1). +- `initial_value` — The value that was present in the key at the start of the batch +- `final_value` — The value that the key has changed to by the end of the batch. + +We will consider `stateDiffs` an array of such objects, sorted by (address, key). + +This is the internal structure that is used by the circuits to represent the state diffs. +The most basic “compression” algorithm is the one described above: + +- For initial writes, write the pair of (`derived_key`, `final_value`) +- For repeated writes write the pair of (`enumeration_index`, `final_value`). + +Note, that values like `initial_value`, `address` and `key` are not used in the "simplified" algorithm above, +but they will be helpful for the more advanced compression algorithms in the future. +The [algorithm](#state-diff-compression-format) for Boojum already utilizes the difference +between the `initial_value` and `final_value` for saving up on pubdata. + +## How the new pubdata verification works + +### L2 + +1. The operator provides both full `stateDiffs` (i.e. the array of the structs above) + and the compressed state diffs (i.e. the array which contains the state diffs, compressed by the algorithm explained [below](#state-diff-compression-format)). +2. The L1Messenger must verify that the compressed version is consistent with the original stateDiffs. +3. Once verified, the L1Messenger will publish the *hash* of the original state diff via a system log. + It will also include the compressed state diffs into the totalPubdata to be published onto L1. + +### L1 + +1. During committing the block, the L1 verifies that the operator has provided the full preimage for the totalPubdata + (which includes L2→L1 logs, L2→L1 messages, bytecodes as well as the compressed state diffs). + This process is done differently based on the chosen data availability approach: + calldata, blobs or validium. You can read more about it + [here](/build/developer-reference/era-contracts/pubdata-post-4844). +2. The Batch commitment + [includes](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol#L541) + the hash of the `stateDiffs`. + Thus, during ZKP verification will fail if the provided stateDiff hash is not correct. + +It is a secure construction because the proof can be verified +only if both the execution was correct and the hash of the provided hash of the `stateDiffs` is correct. +This means that the L1Messenger indeed received the array of correct `stateDiffs` and, +assuming the L1Messenger is working correctly, double-checked that the compression is of the correct format, +while L1 contracts on the commit stage double checked that the operator provided the preimage for the compressed state diffs. + +### State diff compression format + +The following algorithm is used for the state diff compression: + +[State diff compression v1 spec](/build/developer-reference/handling-pubdata-in-boojum) + +## General pubdata format + +At the end of the execution of the batch, the bootloader provides the `L1Messenger` with the preimages for the user L2→L1 logs, +L2→L1 long messages as well as uncompressed bytecodes. +It also provides with compressed state diffs as well as the original expanded state diff entries. + +It will check that the preimages are correct as well as the fact that the compression is correct. +It will output the following three values via system logs: + +- The root of the L2→L1 log Merkle tree. It will be stored and used for proving withdrawals. +- The hash of the `totalPubdata` (i.e. the pubdata that contains the preimages above as well as packed state diffs). +- The hash of the state diffs provided by the operator (it later on be included in the block commitment and its will be enforced by the circuits). + +The `totalPubdata` has the following structure: + +1. First 4 bytes — the number of user L2→L1 logs in the batch +2. Then, the concatenation of packed L2→L1 user logs. +3. Next, 4 bytes — the number of long L2→L1 messages in the batch. +4. Then, the concatenation of L2→L1 messages, each in the format of `<4 byte length || actual_message>`. +5. Next, 4 bytes — the number of uncompressed bytecodes in the batch. +6. Then, the concatenation of uncompressed bytecodes, each in the format of `<4 byte length || actual_bytecode>`. +7. Next, 4 bytes — the length of the compressed state diffs. +8. Then, state diffs are compressed by the spec [above](#state-diff-compression-format). + +With Boojum, the interface for committing batches is the following one: + +```solidity +/// @notice Data needed to commit new batch +/// @param batchNumber Number of the committed batch +/// @param timestamp Unix timestamp denoting the start of the batch execution +/// @param indexRepeatedStorageChanges The serial number of the shortcut index that's used as a unique identifier for storage keys that were used twice or more +/// @param newStateRoot The state root of the full state tree +/// @param numberOfLayer1Txs Number of priority operations to be processed +/// @param priorityOperationsHash Hash of all priority operations from this batch +/// @param bootloaderHeapInitialContentsHash Hash of the initial contents of the bootloader heap. In practice it serves as the commitment to the transactions in the batch. +/// @param eventsQueueStateHash Hash of the events queue state. In practice it serves as the commitment to the events in the batch. +/// @param systemLogs concatenation of all L2 -> L1 system logs in the batch +/// @param totalL2ToL1Pubdata Total pubdata committed to as part of bootloader run. Contents are: l2Tol1Logs <> l2Tol1Messages <> publishedBytecodes <> stateDiffs +struct CommitBatchInfo { + uint64 batchNumber; + uint64 timestamp; + uint64 indexRepeatedStorageChanges; + bytes32 newStateRoot; + uint256 numberOfLayer1Txs; + bytes32 priorityOperationsHash; + bytes32 bootloaderHeapInitialContentsHash; + bytes32 eventsQueueStateHash; + bytes systemLogs; + bytes totalL2ToL1Pubdata; +} +``` diff --git a/content/00.build/65.developer-reference/50.era-contracts/60.elliptic-curve-precompiles.md b/content/00.build/65.developer-reference/50.era-contracts/60.elliptic-curve-precompiles.md new file mode 100644 index 00000000..6258173d --- /dev/null +++ b/content/00.build/65.developer-reference/50.era-contracts/60.elliptic-curve-precompiles.md @@ -0,0 +1,311 @@ +--- +title: Elliptic Curve Precompiles +description: +--- + +Precompiled contracts for elliptic curve operations are required in order to perform zkSNARK verification. + +The operations that you need to be able to perform are elliptic curve point addition, elliptic curve point scalar multiplication, and elliptic curve pairing. + +This document explains the precompiles responsible for elliptic curve point addition and scalar multiplication and the design decisions. +You can read the specification [here](https://eips.ethereum.org/EIPS/eip-196). + +## Introduction + +On top of having a set of opcodes to choose from, the EVM also offers a set of more advanced functionalities through precompiled contracts. +These are a special kind of contracts that are bundled with the EVM at fixed addresses and can be called with a determined gas cost. +The addresses start from 1, and increment for each contract. +New hard forks may introduce new precompiled contracts. +They are called from the opcodes like regular contracts, with instructions like CALL. +The gas cost mentioned here is purely the cost of the contract +and does not consider the cost of the call itself nor the instructions to put the parameters in memory. + +For Go-Ethereum, the code being run is written in Go, and the gas costs are defined in each precompile spec. + +In the case of ZKsync Era, ecAdd and ecMul precompiles are written as a smart contract for two reasons: + +- zkEVM needs to be able to prove their execution (and at the moment it cannot do that if the code being run is executed outside the VM). +- Writing custom circuits for Elliptic curve operations is hard, and time-consuming, and after all such code is harder to maintain and audit. + +## Field Arithmetic + +The BN254 (also known as alt-BN128) is an elliptic curve defined by the equation $y^2 = x^3 + 3$ over the finite field $\mathbb{F}_p$, +being $p = 21888242871839275222246405745257275088696311157297823662689037894645226208583$. +The modulus is less than 256 bits, which is why every element in the field is represented as a `uint256`. + +The arithmetic is carried out with the field elements encoded in the Montgomery form. +This is done not only because operating in the Montgomery form speeds up the computation but also because the native modular multiplication, +which is carried out by Yul's `mulmod` opcode, is very inefficient. + +Instructions set on ZKsync and EVM are different, so the performance of the same Yul/Solidity code can be efficient on EVM, but not on zkEVM and opposite. + +One such very inefficient command is `mulmod`. +On EVM there is a native opcode that makes modulo multiplication and it costs only 8 gas, +which compared to the other opcodes costs is only 2-3 times more expensive. +On zkEVM we don’t have native `mulmod` opcode, instead, the compiler does full-with multiplication +(e.g. it multiplies two `uint256`s and gets as a result an `uint512`). +Then the compiler performs long division for reduction (but only the remainder is kept), +in the generic form it is an expensive operation and costs many opcode executions, +which can’t be compared to the cost of one opcode execution. +The worst thing is that `mulmod` is used a lot for the modulo inversion, so optimizing this one opcode gives a huge benefit to the precompiles. + +### Multiplication + +As said before, multiplication was carried out by implementing the Montgomery reduction, +which works with general moduli and provides a significant speedup compared to the naïve approach. + +The squaring operation is obtained by multiplying a number by itself. +However, this operation can have an additional speedup by implementing the SOS Montgomery squaring. + +### Inversion + +Inversion was performed using the extended binary Euclidean algorithm (also known as extended binary greatest common divisor). +This algorithm is a modification of Algorithm 3 `MontInvbEEA` from [Montgomery inversion](https://cetinkayakoc.net/docs/j82.pdf). + +### Exponentiation + +The exponentiation was carried out using the square and multiply algorithm, which is a standard technique for this operation. + +## Montgomery Form + +Let’s take a number `R`, such that `gcd(N, R) == 1` and `R` is a number by which we can efficiently divide and take modulo over it +(for example power of two or better machine word, aka 2^256). +Then transform every number to the form of `x * R mod N` / `y * R mod N` and then we get efficient modulo addition and multiplication. +The only thing is that before working with numbers we need to transform them to the form from `x mod N` to the `x * R mod N` +and after performing operations transform the form back. + +For the latter, we will assume that `N` is the modulus that we use in computations, +and `R` is $2^{256}$, since we can efficiently divide and take modulo over this number +and it practically satisfies the property of `gcd(N, R) == 1`. + +### Montgomery Reduction Algorithm (REDC) + +> Reference: https://en.wikipedia.org/wiki/Montgomery_modular_multiplication#The_REDC_algorithm +> + +```solidity +/// @notice Implementation of the Montgomery reduction algorithm (a.k.a. REDC). +/// @dev See +/// @param lowestHalfOfT The lowest half of the value T. +/// @param higherHalfOfT The higher half of the value T. +/// @return S The result of the Montgomery reduction. +function REDC(lowestHalfOfT, higherHalfOfT) -> S { + let q := mul(lowestHalfOfT, N_PRIME()) + let aHi := add(higherHalfOfT, getHighestHalfOfMultiplication(q, P())) + let aLo, overflowed := overflowingAdd(lowestHalfOfT, mul(q, P())) + if overflowed { + aHi := add(aHi, 1) + } + S := aHi + if iszero(lt(aHi, P())) { + S := sub(aHi, P()) + } +} + +``` + +By choosing $R = 2^{256}$ we avoided 2 modulo operations and one division from the original algorithm. +This is because in Yul, native numbers are uint256 and the modulo operation is native, but for the division, +as we work with a 512-bit number split into two parts (high and low part) dividing by $R$ +means shifting 256 bits to the right or what is the same, discarding the low part. + +### Montgomery Addition/Subtraction + +Addition and subtraction in Montgomery form are the same as ordinary modular addition and subtraction because of the distributive law + +$$ +\begin{align*} +aR+bR=(a+b)R,\\ +aR-bR=(a-b)R. +\end{align*} +$$ + +```solidity +/// @notice Computes the Montgomery addition. +/// @dev See for further details on the Montgomery multiplication. +/// @param augend The augend in Montgomery form. +/// @param addend The addend in Montgomery form. +/// @return ret The result of the Montgomery addition. +function montgomeryAdd(augend, addend) -> ret { + ret := add(augend, addend) + if iszero(lt(ret, P())) { + ret := sub(ret, P()) + } +} + +/// @notice Computes the Montgomery subtraction. +/// @dev See for further details on the Montgomery multiplication. +/// @param minuend The minuend in Montgomery form. +/// @param subtrahend The subtrahend in Montgomery form. +/// @return ret The result of the Montgomery subtraction. +function montgomerySub(minuend, subtrahend) -> ret { + ret := montgomeryAdd(minuend, sub(P(), subtrahend)) +} + +``` + +We do not use `addmod`. That's because in most cases the sum does not exceed the modulus. + +### Montgomery Multiplication + +The product of $aR \mod N$ and $bR \mod N$ is $REDC((aR \mod N)(bR \mod N))$. + +```solidity +/// @notice Computes the Montgomery multiplication using the Montgomery reduction algorithm (REDC). +/// @dev See for further details on the Montgomery multiplication. +/// @param multiplicand The multiplicand in Montgomery form. +/// @param multiplier The multiplier in Montgomery form. +/// @return ret The result of the Montgomery multiplication. +function montgomeryMul(multiplicand, multiplier) -> ret { + let hi := getHighestHalfOfMultiplication(multiplicand, multiplier) + let lo := mul(multiplicand, multiplier) + ret := REDC(lo, hi) +} + +``` + +### Montgomery Inversion + +```solidity +/// @notice Computes the Montgomery modular inverse skipping the Montgomery reduction step. +/// @dev The Montgomery reduction step is kept because a modification in the binary extended Euclidean algorithm is used to compute the modular inverse. +/// @dev See the function `binaryExtendedEuclideanAlgorithm` for further details. +/// @param a The field element in Montgomery form to compute the modular inverse of. +/// @return invmod The result of the Montgomery modular inverse (in Montgomery form). +function montgomeryModularInverse(a) -> invmod { + invmod := binaryExtendedEuclideanAlgorithm(a) +} +``` + +As said before, we use a modified version of the bEE algorithm that lets us “skip” the Montgomery reduction step. + +The regular algorithm would be $REDC((aR \mod N)^{−1}(R^3 \mod N))$ which involves a regular inversion plus a multiplication by a value that can be precomputed. + +## ECADD + +Precompile for computing elliptic curve point addition. The points are represented in affine form, given by a pair of coordinates $(x,y)$. + +Affine coordinates are the conventional way of expressing elliptic curve points, which use 2 coordinates. The math is concise and easy to follow. + +For a pair of constants $a$ and $b$, an elliptic curve is defined by the set of all points $(x,y)$ +that satisfy the equation $y^2=x^3+ax+b$, plus a special “point at infinity” named $O$. + +### Point Doubling + +To compute $2P$ (or $P+P$), there are three cases: + +- If $P = O$, then $2P = O$. +- Else $P = (x, y)$ + - If $y = 0$, then $2P = O$. + - Else $y≠0$, then + +$$ +\begin{gather*} \lambda = \frac{3x_{p}^{2} + a}{2y_{p}} \\ x_{r} = \lambda^{2} - 2x_{p} \\ y_{r} = \lambda(x_{p} - x_{r}) - y_{p}\end{gather*} +$$ + +The complicated case involves approximately 6 multiplications, 4 additions/subtractions, and 1 division. +There could also be 4 multiplications, 6 additions/subtractions, and 1 division, +and if you want you could trade a multiplication with 2 more additions. + +### Point Addition + +To compute $P + Q$ where $P \neq Q$, there are four cases: + +- If $P = 0$ and $Q \neq 0$, then $P + Q = Q$. +- If $Q = 0$ and $P \neq 0$, then $P + Q = P$. +- Else $P = (x_{p},\ y_{p})$ and $Q = (x_{q},\ y_{q})$ + - If $x_{p} = x_{q}$ (and necessarily $y_{p} \neq y_{q}$), then $P + Q = O$. + - Else $x_{p} \neq x_{q}$, then + +$$ +\begin{gather*} \lambda = \frac{y_{2} - y_{1}}{x_{2} - x_{1}} \\ x_{r} = \lambda^{2} - x_{p} - x_{q} \\ y_{r} = \lambda(x_{p} - x_{r}) - y_{p}\end{gather*} +$$ + +and $P + Q = R = (x_{r},\ y_{r})$. + +The complicated case involves approximately 2 multiplications, 6 additions/subtractions, and 1 division. + +## ECMUL + +Precompile for computing elliptic curve point scalar multiplication. +The points are represented in homogeneous projective coordinates, given by the coordinates $(x , y , z)$. +Transformation into affine coordinates can be done by applying the following transformation: +$(x,y) = (X.Z^{-1} , Y.Z^{-1} )$ if the point is not the point at infinity. + +The key idea of projective coordinates is that instead of performing every division immediately, +we defer the divisions by multiplying them into a denominator. +The denominator is represented by a new coordinate. +Only at the very end, do we perform a single division to convert from projective coordinates back to affine coordinates. + +In affine form, each elliptic curve point has 2 coordinates, like $(x,y)$. +In the new projective form, each point will have 3 coordinates, like $(X,Y,Z)$, +with the restriction that $Z$ is never zero. +The forward mapping is given by $(x,y)→(xz,yz,z)$, for any non-zero $z$ (usually chosen to be 1 for convenience). +The reverse mapping is given by $(X,Y,Z)→(X/Z,Y/Z)$, as long as $Z$ is non-zero. + +### Point Doubling + +The affine form case $y=0$ corresponds to the projective form case $Y/Z=0$. This is equivalent to $Y=0$, since $Z≠0$. + +For the interesting case where $P=(X,Y,Z)$ and $Y≠0$, let’s convert the affine arithmetic to projective arithmetic. + +After expanding and simplifying the equations +([demonstration here](https://www.nayuki.io/page/elliptic-curve-point-addition-in-projective-coordinates)), +the following substitutions come out + +$$ +\begin{align*} T &= 3X^{2} + aZ^{2},\\ U &= 2YZ,\\ V &= 2UXY,\\ W &= T^{2} - 2V \end{align*} +$$ + +Using them, we can write + +$$ +\begin{align*} X_{r} &= UW \\ Y_{r} &= T(V−W)−2(UY)^{2} \\ Z_{r} &= U^{3} \end{align*} +$$ + +As we can see, the complicated case involves approximately 18 multiplications, 4 additions/subtractions, and 0 divisions. + +### Point Addition + +The affine form case $x_{p} = x_{q}$ corresponds to the projective form case $X_{p}/Z_{p} = X_{q}/Z_{q}$. +This is equivalent to $X_{p}Z_{q} = X_{q}Z_{p}$, via cross-multiplication. + +For the interesting case where $P = (X_{p},\ Y_{p},\ Z_{p})$ , $Q = (X_{q},\ Y_{q},\ Z_{q})$, and $X_{p}Z_{q} ≠ X_{q}Z_{p}$, +let’s convert the affine arithmetic to projective arithmetic. + +After expanding and simplifying the equations +([demonstration here](https://www.nayuki.io/page/elliptic-curve-point-addition-in-projective-coordinates)), +the following substitutions come out + +$$ +\begin{align*} +T_{0} &= Y_{p}Z_{q}\\ +T_{1} &= Y_{q}Z_{p}\\ +T &= T_{0} - T_{1}\\ +U_{0} &= X_{p}Z_{q}\\ +U_{1} &= X_{q}Z_{p}\\ +U &= U_{0} - U_{1}\\ +U_{2} &= U^{2}\\ +V &= Z_{p}Z_{q}\\ +W &= T^{2}V−U_{2}(U_{0}+U_{1}) \\ +\end{align*} +$$ + +Using them, we can write + +$$ +\begin{align*} X_{r} &= UW \\ Y_{r} &= T(U_{0}U_{2}−W)−T_{0}U^{3} \\ Z_{r} &= U^{3}V \end{align*} +$$ + +As we can see, the complicated case involves approximately 15 multiplications, 6 additions/subtractions, and 0 divisions. + +## P256 + +The P256Verify smart contract emulates the [RIP-7212](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md)'s `P256VERIFY` precompile, +enabling ECDSA signature verification using the secp256r1 curve (P-256) within the zkEVM environment. +This contract acts as a wrapper for the associated circuit. +It includes helper functions like `unsafePackPrecompileParams` to pack precompile parameters +into a single word and precompileCall to execute the precompile operation. +The fallback function ensures the calldata size is exactly 160 bytes and copies relevant data into memory for verification. +The contract then packs the parameters, pays the necessary gas, +and executes the precompile call, validating the success and internal success flags. diff --git a/content/00.build/65.developer-reference/60.fee-model/00.index.md b/content/00.build/65.developer-reference/60.fee-model/00.index.md new file mode 100644 index 00000000..8ad83e1c --- /dev/null +++ b/content/00.build/65.developer-reference/60.fee-model/00.index.md @@ -0,0 +1,106 @@ +--- +title: Fee Model +description: Overview of ZKsync Era's fee model. +--- + +This document will assume that you already know how [gas & fees work on Ethereum](https://ethereum.org/en/developers/docs/gas/). + +On Ethereum, all the computational, as well as storage costs, are represented via one unit: gas. +Each operation costs a certain amount of gas, which is generally constant +(though it may change during [upgrades](https://blog.ethereum.org/2021/03/08/ethereum-berlin-upgrade-announcement)). + +## Main differences from EVM + +ZKsync as well as other L2s have the issue that does not allow the adoption of the same model as the one for Ethereum so easily: +the main reason is the requirement for publishing the pubdata on Ethereum. +This means that prices for L2 transactions will depend on the volatile L1 gas prices and can not be simply hard coded. + +Also, ZKsync, being a zkRollup is required to prove every operation with zero-knowledge proofs. +That comes with a few nuances. + +### Different opcode pricing + +The operations tend to have different “complexity”/”pricing” in zero-knowledge proof terms than in standard CPU terms. +For instance, `keccak256` which was optimized for CPU performance, will cost more to prove. + +That’s why you will find the prices for operations on ZKsync a lot different from the ones on Ethereum. + +### I/O pricing + +On Ethereum, whenever a storage slot is read/written to for the first time, +a certain amount of gas is charged for the fact that the slot has been accessed for the first time. +A similar mechanism is used for accounts: whenever an account is accessed for the first time, +a certain amount of gas is charged for reading the account's data. +On EVM, an account's data includes its nonce, balance, and code. We use a similar mechanism but with a few differences. + +#### Storage costs + +Just like EVM, we also support "warm" and "cold" storage slots. However, the flow is a bit different: + +1. The user is firstly precharged with the maximum (cold) cost. +2. The operator is asked for a refund. +3. Then, the refund is given out to the user in place. + +In other words, unlike EVM, the user should always have enough gas for the worst case (even if the storage slot is "warm"). +Also, the control of the refunds is currently enforced by the operator only and not by the circuits. + +#### Code decommitment and account access costs + +Unlike EVM, our storage does not couple accounts' balances, nonces, and bytecodes. +Balance, nonce, and code hash are three separate storage variables that use standard storage "warm" and "cold" mechanisms. +A different approach is used for accessing bytecodes though. + +We call the process of unpacking the bytecode as, *code decommitment*, +since it is a process of transforming a commitment to code (i.e., the versioned code hash) into its preimage. +Whenever a contract with a certain code hash is called, the following logic is executed: + +1. The operator is asked whether this is the first time this bytecode has been decommitted. +2. If the operator returns "yes", then the user is charged the full cost. Otherwise, the user does not pay for decommit. +3. If needed, the code is decommitted to the code page. + +Unlike storage interactions, the correctness of this process is *partially* enforced by circuits, +i.e., if step (3) is reached, i.e., the code is being decommitted, it will be proven that the operator responded correctly on step (1). +However, if the program runs out of gas on step (2), the correctness of the first statement won't be proven. +The reason for that is it is hard to prove in circuits at the time the decommitment is invoked whether it is indeed the first decommitment or not. + +Note that in the case of an honest operator, this approach offers a better UX, +since there is no need to be precharged with the full cost beforehand. +However, no program should rely on this fact. + +#### Conclusion + +As a conclusion, ZKsync Era supports a similar "cold"/"warm" mechanism to EVM, +but for now, these are only enforced by the operator, i.e., the users of the applications should not rely on these. +The execution is guaranteed to be correct as long as the user has enough gas to pay for the worst, i.e. "cold" scenario. + +## Memory pricing + +ZKsync Era has different memory pricing rules: + +- Whenever a user contract is called, `2^12` bytes of memory are given out for free, before starting to charge users linearly according to its length. +- Whenever a kernel space (i.e., a system) contract is called, `2^21` bytes of memory are given out for free, + before starting to charge users linearly according to the length. + +Note that, unlike EVM, we never use a quadratic component of the price for memory expansion. + +## Different intrinsic costs + +Unlike Ethereum, where the intrinsic cost of transactions (`21000` gas) is used to cover the price of updating the balances of the users, +the nonce and signature verification, on ZKsync these prices are *not* included in the intrinsic costs for transactions, +due to the native support of account abstraction, meaning that each account type may have their own transaction cost. +In theory, some may even use more zk-friendly signature schemes or other kinds of optimizations to allow cheaper transactions for their users. + +That being said, ZKsync transactions do come with some small intrinsic costs, +but they are mostly used to cover costs related to the processing of the transaction by the bootloader +which can not be easily measured in code in real-time. +These are measured via testing and are hard coded. + +## Charging for pubdata + +An important cost factor for users is the pubdata. ZKsync Era is a state diff-based rollup, +meaning that the pubdata is published not for the transaction data, but for the state changes: +modified storage slots, deployed bytecodes, L2->L1 messages. +This allows for applications that modify the same storage slot multiple times such as oracles, +to update the storage slots multiple times while maintaining a constant footprint on L1 pubdata. +Correctly a state diff rollups requires a special solution to charging for pubdata. +It is explored in the next section. diff --git a/content/00.build/65.developer-reference/60.fee-model/10.how-l2-gas-price-works.md b/content/00.build/65.developer-reference/60.fee-model/10.how-l2-gas-price-works.md new file mode 100644 index 00000000..2a778291 --- /dev/null +++ b/content/00.build/65.developer-reference/60.fee-model/10.how-l2-gas-price-works.md @@ -0,0 +1,183 @@ +--- +title: How L2 Gas Price Works +description: How L2 Gas Price Works +--- + +### Batch overhead & limited resources of the batch + +To process the batch, the ZKsync team has to pay for proving the batch, committing to it, etc. +Processing a batch involves some operational costs as well. +All of these values we call “Batch overhead”. It consists of two parts: + +- The L2 requirements for proving the circuits (denoted in L2 gas). +- The L1 requirements for the proof verification as well as general batch processing (denoted in L1 gas). + +We generally try to aggregate as many transactions as possible and each transaction pays +for the batch overhead proportionally to how close the transaction brings the batch to being *sealed,* +i.e. closed and prepared for proof verification and submission on L1. +A transaction gets closer to sealing a batch by using the batch’s *limited resources*. + +While on Ethereum, the main reason for the existence of a batch gas limit is to keep the system decentralized & load low, +i.e. assuming the existence of the correct hardware, only time would be a requirement for a batch to adhere to. +In the case of ZKsync batches, there are some limited resources the batch should manage: + +- **Time.** The same as on Ethereum, the batch should generally not take too much time to be closed to provide better UX. + To represent the time needed we use a batch gas limit, note that it is higher than the gas limit for a single transaction. +- **Slots for transactions.** The bootloader has a limited number of slots for transactions, + i.e. it can not take more than a certain transactions per batch. +- **The memory of the bootloader.** The bootloader needs to store the transaction’s ABI encoding in its memory & this fills it up. + In practical terms, it serves as a penalty for having transactions with large calldata/signatures in the case of custom accounts. +- **Pubdata bytes.** To fully appreciate the gains from the storage diffs, + i.e. the fact that changes in a single slot happening in the same batch need to be published only once, + we need to publish all the batch’s public data only after the transaction has been processed. + Right now, we publish all the data with the storage diffs as well as L2→L1 messages, etc in a single transaction at the end of the batch. + Most nodes have a limit of 128kb per transaction, so this is the limit that each ZKsync batch should adhere to. + +Each transaction spends the batch overhead proportionally to how closely it consumes the resources above. + +Note, that before the transaction is executed, the system can not know how many of the limited system resources the transaction will take, +so we need to charge for the worst case and provide the refund at the end of the transaction. + +### `MAX_TRANSACTION_GAS_LIMIT` + +A recommended maximal amount of gas that a transaction can spend on computation is `MAX_TRANSACTION_GAS_LIMIT`. +But in case the operator trusts the user, the operator may provide the +[trusted gas limit](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/bootloader/bootloader.yul#L1296), +i.e. the limit which exceeds `MAX_TRANSACTION_GAS_LIMIT` assuming that the operator knows what he is doing. +This can be helpful in the case of a ZK Chain with different parameters. + +### Derivation of `baseFee` and `gasPerPubdata` + +At the start of each batch, the operator provides the following two parameters: + +1. `FAIR_L2_GAS_PRICE`. This variable should denote what is the minimal L2 gas price that the operator is willing to accept. + It is expected to cover the cost of proving/executing a single unit of zkEVM gas, + the potential contribution of usage of a single gas towards sealing the batch, as well as congestion. +2. `FAIR_PUBDATA_PRICE`, which is the price of a single pubdata byte in Wei. + Similar to the variable about, it is expected to cover the cost of publishing a single byte + as well as the potential contribution of usage of a single pubdata byte towards sealing the batch. + +In the descriptions above by "contribution towards sealing the batch" we referred to the fact +that if a batch is most often closed by a certain resource (e.g. pubdata), then the pubdata price should include this cost. + +The `baseFee` and `gasPerPubdata` are then calculated as: + +```asm +baseFee := max( + fairL2GasPrice, + ceilDiv(fairPubdataPrice, MAX_L2_GAS_PER_PUBDATA()) +) +gasPerPubdata := ceilDiv(pubdataPrice, baseFee) +``` + +While the way we charge for pubdata in theory allows for any `gasPerPubdata`, +some SDKs expect the `gasLimit` by a transaction to be a uint64 number. +We would prefer `gasLimit` for transactions to stay within JS's safe "number" range in case someone uses `number` type to denote gas there. +For this reason, we will bind the `MAX_L2_GAS_PER_PUBDATA` to `2^20` gas per 1 pubdata byte. +The number is chosen such that `MAX_L2_GAS_PER_PUBDATA * 2^32` is a safe JS integer. +The `2^32` part is the maximal possible value for pubdata counter that could be in theory used. +It is unrealistic that this value will ever appear under an honest operator, but it is needed just in case. + +Note, however, that it means that the total under high L1 gas prices `gasLimit` may be larger than `u32::MAX` +and it is recommended that no more than `2^20` bytes of pubdata can be published within a transaction. + +#### Recommended calculation of `FAIR_L2_GAS_PRICE`/`FAIR_PUBDATA_PRICE` + +Let's define the following constants: + +- `BATCH_OVERHEAD_L1_GAS` - The L1 gas overhead for a batch (proof verification, etc). +- `COMPUTE_OVERHEAD_PART` - The constant that represents the possibility that a batch can be sealed because of overuse of computation resources. + It has range from 0 to 1. If it is 0, the compute will not depend on the cost of closing the batch. + If it is 1, the gas limit per batch will have to cover the entire cost of closing the batch. +- `MAX_GAS_PER_BATCH` - The maximum amount of gas that can be used by the batch. + This value is derived from the circuits' limitation per batch. +- `PUBDATA_OVERHEAD_PART` - The constant that represents the possibility that a batch can be sealed because of overuse of pubdata. + It has range from 0 to 1. If it is 0, the pubdata will not depend on the cost of closing the batch. + If it is 1, the pubdata limit per batch will have to cover the entire cost of closing the batch. +- `MAX_PUBDATA_PER_BATCH` - The maximum amount of pubdata that can be used by the batch. + Note that if the calldata is used as pubdata, this variable should not exceed 128kb. + +And the following fluctuating variables: + +- `MINIMAL_L2_GAS_PRICE` - The minimal acceptable L2 gas price, + i.e. the price that should include the cost of computation/proving as well as potential premium for congestion. +- `PUBDATA_BYTE_ETH_PRICE` - The minimal acceptable price in ETH per each byte of pubdata. + It should generally be equal to the expected price of a single blob byte or calldata byte (depending on the approach used). + +Then: + +1. `FAIR_L2_GAS_PRICE = MINIMAL_L2_GAS_PRICE + COMPUTE_OVERHEAD_PART * BATCH_OVERHEAD_L1_GAS / MAX_GAS_PER_BATCH` +2. `FAIR_PUBDATA_PRICE = PUBDATA_BYTE_ETH_PRICE + PUBDATA_OVERHEAD_PART * BATCH_OVERHEAD_L1_GAS / MAX_PUBDATA_PER_BATCH` + +For L1→L2 transactions, the `MAX_GAS_PER_BATCH` variable is equal to `L2_TX_MAX_GAS_LIMIT` +(since this amount of gas is enough to publish the maximal number of pubdata in the batch). +Also, for additional security, for L1->L2 transactions the `COMPUTE_OVERHEAD_PART = PUBDATA_OVERHEAD_PART = 1`, +i.e. since we are not sure what exactly will be the reason for us closing the batch. +For L2 transactions, typically `COMPUTE_OVERHEAD_PART = 0`, since, unlike L1→L2 transactions, in case of an attack, +the operator can simply censor bad transactions or increase the `FAIR_L2_GAS_PRICE` and so the operator can use average values for better UX. + +#### Note on operator’s responsibility + +To reiterate, the formulas above are used for L1→L2 transactions on L1 to protect the operator from malicious transactions. +However, for L2 transactions, it is solely the responsibility of the operator to provide the correct values. +It is designed this way for more fine-grained control over the system for the ZK Stack operators +(including Validiums, maybe Era on top of another L1, etc). + +This fee model also provides a very high degree of flexibility to the operator & so if we find out that we earn too much with a certain part, +we could amend how the fair l2 gas price and fair pubdata price are generated and that’s it (there will be no further enforcements on the bootloader side). + +In the long run, the consensus will ensure the correctness of these values on the main ZKsync Era (or maybe we’ll transition to a different system). + +#### Overhead for transaction slot and memory + +We also have a limit on the number of memory that can be consumed within a batch as well as the number of transactions that can be included there. + +To simplify the codebase we've chosen the following constants: + +- `TX_OVERHEAD_GAS = 10000` -- the overhead in gas for including a transaction into a batch. +- `TX_MEMORY_OVERHEAD_GAS = 10` -- the overhead for consuming a single byte of bootloader memory. + +We've used roughly the following formulae to derive these values: + +1. `TX_OVERHEAD_GAS = MAX_GAS_PER_BATCH / MAX_TXS_IN_BATCH`. + For L1->L2 transactions we used the `MAX_GAS_PER_BATCH = 80kk` and `MAX_TXS_IN_BATCH = 10k`. + `MAX_GAS_PER_BATCH / MAX_TXS_IN_BATCH = 8k`, while we decided to use the 10k value to better take into account + the load on the operator from storing the information about the transaction. +2. `TX_MEMORY_OVERHEAD_GAS = MAX_GAS_PER_BATCH / MAX_MEMORY_FOR_BATCH`. + For L1->L2 transactions we used the `MAX_GAS_PER_BATCH = 80kk` and `MAX_MEMORY_FOR_BATCH = 32 * 600_000`. + +`MAX_GAS_PER_BATCH / MAX_MEMORY_FOR_BATCH = 4`, while we decided to use the `10` gas value to better take into account +the load on the operator from storing the information about the transaction. + +Future work will focus on removing the limit on the number of transactions’ slots completely as well as increasing the memory limit. + +### Note on L1→L2 transactions + +The formulas above apply to L1→L2 transactions. +However, note that the `gas_per_pubdata` is still kept as constant as `800`. +This means that a higher `baseFee` could be used for L1->L2 transactions to ensure that `gas_per_pubdata` +remains at that value regardless of the price of the pubdata. + +### Refunds + +Note, that the used constants for the fee model are probabilistic, i.e. we never know in advance the exact reason why a batch is going to be sealed. +These constants are meant to cover the expenses of the operator over a longer period +so we do not refund the fact that the transaction might've been charged for overhead +above the level at which the transaction has brought the batch to being closed, +since these funds are used to cover transactions that did not pay in full for the limited batch's resources that they used. + +### Refunds for repeated writes + +ZKsync Era is a state diff-based rollup, i.e. the pubdata is published not for transactions, but for storage changes. +This means that whenever a user writes into a storage slot, it incurs a certain amount of pubdata. However, not all writes are equal: + +- If a slot has been already written to in one of the previous batches, + the slot has received a short ID, which allows it to require less pubdata in the state diff. +- Depending on the `value` written into a slot, various compression optimizations could be used and so we should reflect that too. +- Maybe the slot has been already written to in this batch so we don’t have to charge anything for it. + +You can read more about how we treat the pubdata [here](/build/developer-reference/era-contracts/handling-pubdata). + +The important part here is that while such refunds are inlined +(i.e. unlike the refunds for overhead they happen in place during execution and not after the whole transaction has been processed), +they are enforced by the operator. Right now, the operator is the one who decides what refund to provide. diff --git a/content/00.build/65.developer-reference/60.fee-model/20.how-we-charge-for-pubdata.md b/content/00.build/65.developer-reference/60.fee-model/20.how-we-charge-for-pubdata.md new file mode 100644 index 00000000..a0271748 --- /dev/null +++ b/content/00.build/65.developer-reference/60.fee-model/20.how-we-charge-for-pubdata.md @@ -0,0 +1,179 @@ +--- +title: How ZKsync Era charges for pubdata +description: +--- + +ZKsync Era is a state diff-based rollup. +It means that it is not possible to know how much pubdata a transaction will take before its execution. +We *could* charge for pubdata the following way: whenever a user does an operation that emits pubdata +(writes to storage, publishes an L2->L1 message, etc.), +we charge `pubdata_bytes_published * gas_per_pubdata` directly from the context of the execution. + +However, such an approach has the following disadvantages: + +- This would inherently make execution very divergent from EVM. +- It is prone to unneeded overhead. + For instance, in the case of reentrancy locks, the user will still have to pay the initial price for marking the lock as used. + The price will get refunded in the end, but it still worsens the UX. +- If we want to impose any sort of limit on how much computation a transaction could take (let's call this limit `MAX_TX_GAS_LIMIT`), + it would mean that no more than `MAX_TX_GAS_LIMIT / gas_per_pubdata` could be published in a transaction, + making this limit either too small or forcing us to increase `baseFee` to prevent the number from growing too much. + +To avoid the issues above we need to somehow decouple the gas spent on pubdata from the gas spent on execution. +While calldata-based rollups precharge for calldata, we cannot do it, since the exact state diffs are known only after the transaction is finished. +We'll use the approach of *post-charging*. +Basically, we'll keep a counter that tracks how much pubdata has been spent and charge the user for the calldata at the end of the transaction. + +A problem with post-charging is that the user may spend all their gas within the transaction so we'll have no gas to charge for pubdata from. +Note, however, that if the transaction is reverted, all the state changes that were related to it will be reverted too. +That's why whenever we need to charge the user for pubdata, but it doesn't provide enough gas, the transaction will get reverted. +The user will pay for the computation, but no state changes (and thus, pubdata) will be produced by the transaction. + +So it will work the following way: + +1. Firstly, we fix the amount of pubdata published so far. Let's denote it as `basePubdataSpent`. +2. We execute the validation of the transaction. +3. We check whether `(getPubdataSpent() - basePubdataSpent) * gasPerPubdata <= gasLeftAfterValidation`. + If it is not, then the transaction does not cover enough funds for itself, so it should be *rejected* + (unlike revert, which means that the transaction is not even included in the block). +4. We execute the transaction itself. +5. We do the same check as in (3), but now if the transaction does not have enough gas for pubdata, it is reverted, + i.e., the user still pays the fee to cover the computation for its transaction. +6. (optional, in case a paymaster is used). We repeat steps (4-5), but now for the `postTransaction` method of the paymaster. + +On the internal level, the pubdata counter is modified in the following way: + +- When there is a storage write, the operator is asked to provide by how much to increment the pubdata counter. +Note that this value can be negative if, as in the example with a reentrancy guard, the storage diff is being reversed. +There is currently no limit on how much the operator can charge for the pubdata. +- Whenever there is a need to publish a blob of bytes to L1 (for instance, when publishing a bytecode), + the responsible system contract would increment the pubdata counter by `bytes_to_publish`. +- Whenever there is a revert in a frame, the pubdata counter gets reverted too, similar to storage & events. + +The approach with post-charging removes the unneeded overhead and decouples the gas used for the execution from the gas used for data availability, +which removes any caps on `gasPerPubdata`. + +## Security considerations for protocol + +Now it has become easier for a transaction to use up more pubdata than what can be published within a batch. +In such a case, we'll revert the transaction as well. + +## Security considerations for users + +The approach with post-charging introduces one distinctive feature: +it is not trivial to know the final price for a transaction at the time of its execution. +When a user does `.call{gas: some_gas}` the final impact on the price of the transaction may be higher than `some_gas` +since the pubdata counter will be incremented during the execution and charged only at the end of the transaction. + +While for the average user, this limitation is not relevant, some specific applications may receive certain issues. + +### Example for a queue of withdrawals + +Imagine that there is the following contract: + +```solidity +struct Withdrawal { + address token; + address to; + uint256 amount; +} + +Withdrawals[] queue; +uint256 lastProcessed; + +function processNWithdrawals(uint256 N) external nonReentrant { + uint256 current = lastProcessed + 1; + uint256 lastToProcess = current + N - 1; + + while(current <= lastToProcess) { + // If the user provided some bad token that takes more than MAX_WITHDRAWAL_GAS + // to transfer, it is the problem of the user and it will stall the queue, so + // the `_success` value is ignored. + Withdrawal storage currentQueue = queue[current]; + (bool _success, ) = currentQueue.token.call{gas: MAX_WITHDRAWAL_GAS}(abi.encodeWithSignature("transfer(to,amount)", currentQueue.to, currentQueue.amount)); + current += 1; + } + lastProcessed = lastToProcess; +} +``` + +The contract above supports a queue of withdrawals. +This queue supports any type of token, including potentially malicious ones. +However, the queue will never get stuck, since the `MAX_WITHDRAWAL_GAS` ensures that even if the malicious token does a lot of computation, +it will be bound by this number and so the caller of the `processNWithdrawals` won't spend more than `MAX_WITHDRAWAL_GAS` per token. + +The above assumptions work in the pre-charge model (calldata based rollups) or pay-as-you-go model (pre-1.5.0 Era). +However, in the post-charge model, the `MAX_WITHDRAWAL_GAS` limits the amount of computation that can be done within the transaction, +but it does not limit the amount of pubdata that can be published. +Thus, if such a function publishes a very large L1→L2 message, it might make the entire top transaction fail. +This effectively means that such a queue would be stalled. + +### How to prevent this issue on the users' side + +If a user really needs to limit the amount of gas that the subcall takes, all the subcalls should be routed through a special contract, +that will guarantee that the total cost of the subcall wont be larger than the gas provided (by reverting if needed). + +An implementation of this special contract can be seen +[here](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/gas-bound-caller/contracts/GasBoundCaller.sol). +Note, that this contract is *not* a system one and it will be deployed on some fixed, but not kernel space address. + +### 1. Case of when a malicious contract consumes a large, but processable amount of pubdata + +In this case, the topmost transaction will be able to sponsor such subcalls. +When a transaction is processed, at most 80M gas is allowed to be passed to the execution. +The rest can only be spent on pubdata during the post-charging. + +### 2. Case of when a malicious contract consumes an unprocessable amount of pubdata + +In this case, the malicious callee published so much pubdata, that such a transaction can not be included into a batch. +This effectively means that no matter how much money the topmost transaction willing to pay, the queue is stalled. + +The only way how it is combated is by setting some minimal amount of ergs that still have to be consumed with each emission of pubdata +(basically to make sure that it is not possible to publish large chunks of pubdata while using negligible computation). +Unfortunately, setting this minimal amount to cover the worst possible case +(i.e. 80M ergs spent with maximally 100k of pubdata available, leading to 800 L2 gas / pubdata byte) +would likely be too harsh and will negatively impact average UX. +Overall, this *is* the way to go, however for now the only guarantee will be that a subcall of 1M gas is always processable, +which will mean that at least 80 gas will have to be spent for each published pubdata byte. +Even if higher than real L1 gas costs, it is reasonable even in the long run, +since all the things that are published as pubdata are state-related and so they have to be well-priced for long-term storage. + +In the future, we will guarantee the processability of subcalls of larger size by increasing the number of pubdata that can be published per batch. + +## Limiting the `gas_per_pubdata` + +As already mentioned, the transactions on ZKsync depend on volatile L1 gas costs to publish the pubdata for batch, verify proofs, etc. +For this reason, ZKsync-specific EIP712 transactions contain the `gas_per_pubdata_limit` field, +denoting the maximum `gas_per_pubdata` that the operator can charge the user for a single byte of pubdata. + +For Ethereum transactions (which do not contain this field), the block's `gas_per_pubdata` is used. + +## Improvements in the upcoming releases + +The fee model explained above, while fully functional, has some known issues. These will be tackled with the following upgrades. + +### L1->L2 transactions do not pay for their execution on L1 + +The `executeBatches` operation on L1 is executed in `O(N)` where N is the number of priority ops that we have in the batch. +Each executed priority operation will be popped and so it incurs cost for storage modifications. As of now, we do not charge for it. + +## ZKsync Era Fee Components (Revenue & Costs) + +1. On-Chain L1 Costs + - **L1 Commit Batches**: The commit batch transaction submits pubdata (which is the list of updated storage slots) to L1. + The cost of a commit transaction is calculated as `constant overhead + price of pubdata`. + The `constant overhead` cost is evenly distributed among L2 transactions in the L1 commit transaction, but only at higher transaction loads. + As for the `price of pubdata`, it is known how much pubdata each L2 transaction consumed, therefore, they are charged directly for that. + Multiple L1 batches can be included in a single commit transaction. + - **L1 Prove Batches**: Once the off-chain proof is generated, it is submitted to L1 to make the rollup batch final. + Currently, each proof contains only one L1 batch. + - **L1 Execute Batches**: The execute batches transaction processes L2 -> L1 messages and marks executed priority operations as such. + Multiple L1 batches can be included in a single execute transaction. + - **L1 Finalize Withdrawals**: While not strictly part of the L1 fees, the cost to finalize L2 → L1 withdrawals are covered by Matter Labs. + The finalize withdrawals transaction processes user token withdrawals from ZKsync Era to Ethereum. + Multiple L2 withdrawal transactions are included in each finalize withdrawal transaction. +2. On-Chain L2 Revenue + - **L2 Transaction Fee**: This fee is what the user pays to complete a transaction on ZKsync Era. + It is calculated as `gasLimit x baseFeePerGas - refundedGas x baseFeePerGas`, or more simply, `gasUsed x baseFeePerGas`. + +3. Profit = L2 Revenue - L1 Costs - Off-Chain Infrastructure Costs diff --git a/content/00.build/65.developer-reference/60.fee-model/_dir.yml b/content/00.build/65.developer-reference/60.fee-model/_dir.yml new file mode 100644 index 00000000..e0c89918 --- /dev/null +++ b/content/00.build/65.developer-reference/60.fee-model/_dir.yml @@ -0,0 +1 @@ +title: Fee Model diff --git a/content/00.build/65.developer-reference/70.fee-model.md b/content/00.build/65.developer-reference/70.fee-model.md deleted file mode 100644 index 274b2a69..00000000 --- a/content/00.build/65.developer-reference/70.fee-model.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Fee Model -description: Overview of ZKsync Era's fee model. ---- - -ZKsync Era's fee model is similar to Ethereum’s where `gas` is charged for -computational cost, cost of publishing data on-chain and storage effects. However, -ZKsync Era includes additional costs for publishing to L1 and for proof generation. - -Because the L1 gas price for publishing data (on L1) is so volatile, the amount of required L2 `gas` is variable. -Therefore, for each block, the ZKsync Era sequencer defines the following dynamic parameters: - -- `gasPrice`: the price, in gwei, of a unit of gas. -- `gasPerPubdata`: the amount of `gas` for publishing one byte of data on Ethereum. - -In ZKsync Era, unlike in Ethereum where each opcode has a fixed gas price, storage -write charges remain dynamic due to the fluctuation of gas price on L1. Other -opcode prices are constant, similar to Ethereum. See the [ZKsync opcode documentation](https://github.com/matter-labs/era-zkevm_opcode_defs/blob/9307543b9ca51bd80d4f5c85d6eb80efd8b19bb2/src/lib.rs#L227) -for an idea of how we calculate them. - -Like Ethereum, the most costly operation is a storage update. Execution of -arithmetic operations is relatively cheap, as it involves computation alone and no storage changes. - -## State diffs vs transaction inputs - -A considerable advantage we have over optimistic and most ZK rollups is that, -instead of publishing all transaction data to L1, ZKsync Era only publishes state diffs, thus publishing significantly less data to L1. - -#### State diff example - -If an oracle updates a price in a contract using the same storage slot 10 times in -the same rollup batch, only the final update is published on Ethereum and is therefore only charged once, making 9 of the 10 updates free. - -Another advantage is the cost-effective contract redeployment. An example is a DEX -with a `PairFactory` contract for different `Pair` pools. The contract bytecode of -`Pair` is only published when the first instance is deployed. After that, subsequent deployments only involve updating one storage slot which sets the -contract code hash on the newly deployed `Pair` address. - -## Design recommendations - -- **Update storage slots as little as possible:** Check to see if your code can avoid unnecessary storage updates. -- **Reuse as many storage slots as possible:** Only the final state diff is published on Ethereum. -- **Reuse the contract code where possible:** - - On Ethereum, avoiding constructor parameters and putting them into constants reduces some of the gas costs upon contract deployment. - - On ZKsync Era the opposite is true: as contract bytecode is only published - once, updating the constructor parameters alone leads to substantial fee savings. - -## Gas estimation for transactions - -Ethereum has a constant of `21000` gas that covers the intrinsic costs of -processing a transaction, i.e. checking the signature and updating the nonce for the account. - -On ZKsync Era this varies because we support custom and paymaster accounts. These -accounts require a (usually) higher amount of gas than EOAs. ZKsync Era provides -functions for estimating the cost of a transaction regardless of the type of account. - -The transaction fee estimate depends on the entire transaction flow, including -validation and execution. The `eth_estimateGas` function uses binary search to find the smallest gas value under which the transaction succeeds. - -For any Rust developers interested in the ZKsync Era implementation for gas estimation, see the [Rust code in our repo](https://github.com/matter-labs/zksync-era/blob/48fe6e27110c1fe1a438c5375fb256890e8017b1/sdk/zksync-rs/src/operations/execute_contract.rs#L129). - -### Transaction length - -ZKsync Era publishes state diffs on-chain. The cost of the transaction, however, -may still depend on transaction length because the sequencer stores long transactions in-memory. - -Long transactions incur additional costs during interactions with an account. -ZKsync Era works with different types of accounts and, therefore, the protocol -cannot make assumptions about signature length. Furthermore, given that a signature -(and thus its length) is unavailable at the time of fee estimation, we cannot -precisely estimate the cost of such a transaction. To mitigate this, we multiply -the recommended cost of the transaction by a small percentage. - -### `DefaultAccount` - -By default, the ZKsync Era sequencer provides a transaction structure with the -available information during the fee estimation. - -Because the signature is unavailable prior to the transaction taking place, an -invalid 65-byte ECDSA signature is used instead. The `DefaultAccount` (used by -EOAs), during gas fee estimation, executes many operations, including signature -verification, and returns only `bytes4(0)` instead of magic. - -In the case of a custom account with multiple signers, the account may wish to -simulate signature validation for all the provided signers. - -See the [DefaultAccount code](https://github.com/matter-labs/era-contracts/blob/main/system-contracts/contracts/DefaultAccount.sol) for more information. - -### Account abstraction considerations - -The `validateTransaction` function for account abstraction, and the -`validateAndPayForPaymasterTransaction` function for paymasters, always attempt to -run using the same amount of computation, including storage access, regardless of whether the transaction is successful or not. - -See the documentation on [account abstraction](/build/developer-reference/account-abstraction) for more detailed information. - -#### `validateTransaction` - -- `validateTransaction` is considered successful when it does not revert (i.e. it returns `success = true`) and also returns the magic string. -- For invalid signatures, the function does not revert. It instead returns invalid magic so the function is unsuccessful. - -#### `eth_estimateGas` - -Because the entire transaction validation and execution flow is simulated in order -to get the transaction’s fee, the user needs to have sufficient funds in their -account, otherwise the simulation may exit. This means that, to ensure the execution progresses, the ZKsync Era sequencer adds the necessary balance, -temporarily, to the user’s account; specifically the sequencer increases the account balance by tx.maxFeePerGas \* tx.gasLimit. - -This ensures the `DefaultAccount`’s `payForTransaction` function runs successfully. - -This is different to the Geth implementation which uses `tx.gasprice = 0` to make -sure that the user can pay the fee even though the `tx.origin` in the simulation may not have any balance at all. - -::callout{icon="i-heroicons-exclamation-triangle" color="amber"} -Due to this, custom accounts may unexpectedly contain more balance than they have on-chain during the validation step, which may affect their behavior. -:: - -## Refunds - -A gas estimate may be higher than the actual cost of the transaction. This means users usually only spend a portion of the estimated transaction cost. - -The refund, therefore, returns the unpaid transaction fee portion to the user. - -- Only one transaction is recorded on the block, even if a portion of the original estimate is refunded. -- Users can compare their token balance against the transaction cost on the block explorer to verify they did not overspend. -- Users may see no notification in their wallet depending on which wallet they use. - -Refunds are calculated by defining a fair value for the amount the user spent on the transaction and subtracting it from the actual spend. - -## Out-of-gas errors - -Unlike on Geth, it is impossible to track out-of-gas errors on ZKsync Era. - -The main reason is that the “actual” execution happens inside the `DefaultAccount` -system contract and, due to the [63/64 rule](https://eips.ethereum.org/EIPS/eip-150), -when a high amount of gas is provided, the call to the `execute` function -of the `DefaultAccount` will NOT fail, even if it is out of gas, although the subcall to the `transaction.to` contract will fail with an out of gas error. diff --git a/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/00.index.md b/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/00.index.md new file mode 100644 index 00000000..e576f58a --- /dev/null +++ b/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/00.index.md @@ -0,0 +1,133 @@ +--- +title: State diff compression v1 spec +description: +--- + +The most basic strategy to publish state diffs is to publish those in either of the following two forms: + +- When a key is updated for the first time — ``, where key is 32-byte derived key + and the value is new 32-byte value of the slot. +- When a key is updated for the second time and more — ``, + where the `enumeration_index` is an 8-byte id of the slot and the value is the new 32-byte value of the slot. + +This compression strategy will utilize a similar idea for treating keys and values separately +and it will be focused on the efficient compression of keys and values separately. + +## Keys + +Keys will be packed in the same way as they were before. +The only change is that we’ll avoid using the 8-byte enumeration index and will pack it to the minimal necessary number of bytes. +This number will be part of the pubdata. +Once a key has been used, it can already use the 4 or 5 byte enumeration index +and it is very hard to have something cheaper for keys that has been used already. +The opportunity comes when remembering the ids for accounts to spare some bytes on nonce/balance key, +but ultimately the complexity may not be worth it. + +There is some room for optimization of the keys that are being written for the first time, +however, optimizing those is more complex and achieves only a one-time effect +(when the key is published for the first time), so they may be in scope of the future upgrades. + +## Values + +Values are much easier to compress since they usually contain only zeroes. +Also, we can leverage the nature of how those values are changed. +For instance, if nonce has been increased only by 1, we do not need to write the entire 32-byte new value, +we can just tell that the slot has been *increased* and then supply only the 1-byte value by which it was increased. +This way instead of 32 bytes we need to publish only 2 bytes: first byte to denote which operation has been applied +and the second by to denote the number by which the addition has been made. + +We have the following 4 types of changes: `Add`, `Sub,` `Transform`, `NoCompression` where: + +- `NoCompression` denotes that the whole 32 byte will be provided. +- `Add` denotes that the value has been increased. (modulo 2^256) +- `Sub` denotes that the value has been decreased. (modulo 2^256) +- `Transform` denotes the value just has been changed + (i.e. we disregard any potential relation between the previous and the new value, + though the new value might be small enough to save up on the number of bytes). + +Where the byte size of the output can be anywhere from 0 to 31 +(also 0 makes sense for `Transform`, since it denotes that it has been zeroed out). +For `NoCompression` the whole 32 byte value is used. + +So the format of the pubdata is the following: + +**Part 1. Header.** + +- `` — this will enable easier automated unpacking in the future. Currently, it will be only equal to `1`. +- `` — we need only 3 bytes to describe the total length of the L2→L1 logs. +- ``. It should be equal to the minimal required bytes to represent the enum indexes for repeated writes. + +**Part 2. Initial writes.** + +- `` - the number of initial writes. + Since each initial write publishes at least 32 bytes for key, + then `2^16 * 32 = 2097152` will be enough for a lot of time + (right now with the limit of 120kb it will take more than 15 L1 txs to use up all the space there). +- Then for each `` pair for each initial write: + - print key as 32-byte derived key. + - packing type as a 1 byte value, which consists of 5 bits to denote the length of the packing + and 3 bits to denote the type of the packing (either `Add`, `Sub`, `Transform` or `NoCompression`). + - The packed value itself. + +**Part 3. Repeated writes.** + +Note, that there is no need to write the number of repeated writes, +since we know that until the end of the pubdata, all the writes will be repeated ones. + +- For each `` pair for each repeated write: + - print key as derived key by using the number of bytes provided in the header. + - packing type as a 1 byte value, which consists of 5 bits to denote the length of the packing + and 3 bits to denote the type of the packing (either `Add`, `Sub`, `Transform` or `NoCompression`). + - The packed value itself. + +## Impact + +This setup allows us to achieve nearly 75% packing for values, and 50% gains overall in terms of the storage logs based on historical data. + +## Encoding of packing type + +Since we have `32 * 3 + 1` ways to pack a state diff, we need at least 7 bits to present the packing type. +To make parsing easier, we will use 8 bits, i.e. 1 byte. + +We will use the first 5 bits to represent the length of the bytes (from 0 to 31 inclusive) to be used. +The other 3 bits will be used to represent the type of the packing: `Add`, `Sub` , `Transform`, `NoCompression`. + +## Worst case scenario + +The worst case scenario for such packing is when we have to pack a completely random new value, +i.e. it will take us 32 bytes to pack + 1 byte to denote which type it is. +However, for such a write the user will anyway pay at least for 32 bytes. +Adding an additional byte is roughly 3% increase, which will likely be barely felt by users, +most of which use storage slots for balances, etc, which will consume only 7-9 bytes for packed value. + +## Why do we need to repeat the same packing method id + +You might have noticed that for each pair `` to describe value +we always first write the packing type and then write the packed value. +However, the reader might ask, it is more efficient to just supply the packing id once +and then list all the pairs `` which use such packing. + +I.e. instead of listing + +(key = 0, type = 1, value = 1), (key = 1, type = 1, value = 3), (key = 2, type = 1, value = 4), … + +Just write: + +type = 1, (key = 0, value = 1), (key = 1, value = 3), (key = 2, value = 4), … + +There are two reasons for it: + +- A minor reason: sometimes it is less efficient in case the packing is used for very few slots + (since for correct unpacking we need to provide the number of slots for each packing type). +- A fundamental reason: currently enum indices are stored directly in the merkle tree & + have very strict order of incrementing enforced by the circuits and (they are given in order by pairs `(address, key)`), + which are generally not accessible from pubdata. + +All this means that we are not allowed to change the order of “first writes” above, +so indexes for them are directly recoverable from their order, and so we can not permute them. +If we were to reorder keys without supplying the new enumeration indices for them, the state would be unrecoverable. +Always supplying the new enum index may add additional 5 bytes for each key, +which might negate the compression benefits in a lot of cases. +Even if the compression will still be beneficial, the added complexity may not be worth it. + +That being said, we *could* rearrange those for *repeated* writes, but for now we stick to the same value compression format for simplicity. diff --git a/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/10.l2-l1-communication-before-boojum.md b/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/10.l2-l1-communication-before-boojum.md new file mode 100644 index 00000000..28528631 --- /dev/null +++ b/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/10.l2-l1-communication-before-boojum.md @@ -0,0 +1,72 @@ +--- +title: L2->L1 Communication Before Boojum +description: +--- + +The only “provable” part of the communication from L2 to L1 are native L2→L1 logs emitted by VM. +These can be emitted by the `to_l1` +[opcode](/zk-stack/components/zksync-evm/bootloader). +Each log consists of the following fields: + +```solidity +struct L2Log { + uint8 l2ShardId; + bool isService; + uint16 txNumberInBatch; + address sender; + bytes32 key; + bytes32 value; +} +``` + +Where: + +- `l2ShardId` is the id of the shard the opcode was called (it is currently always 0). +- `isService` a boolean flag that is not used right now +- `txNumberInBatch` the number of the transaction in the batch where the log has happened. + This number is taken from the internal counter which is incremented each time the `increment_tx_counter` is + [called](/zk-stack/components/zksync-evm/bootloader). +- `sender` is the value of `this` in the frame where the L2→L1 log was emitted. +- `key` and `value` are just two 32-byte values that could be used to carry some data with the log. + +The hashed array of these opcodes is then included into the +[batch commitment](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol#L535). +Because of that we know that if the proof verifies, then the L2→L1 logs provided by the operator were correct, +so we can use that fact to produce more complex structures. +Before Boojum such logs were also Merklized within the circuits and so the Merkle tree’s root hash was included into the batch commitment also. + +## Important system values + +Two `key` and `value` fields are enough for a lot of system-related use-cases, +such as sending timestamp of the batch, previous batch hash, etc. +They were and are used +[used](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/system-contracts/contracts/SystemContext.sol#L470) +to verify the correctness of the batch's timestamps and hashes. +You can read more about block processing [here](/build/developer-reference/batches-and-l2-blocks). + +## Long L2→L1 messages & bytecodes + +However, sometimes users want to send long messages beyond 64 bytes which `key` and `value` allow us. +But as already said, these L2→L1 logs are the only ways that the L2 can communicate with the outside world. +How do we provide long messages? + +Let’s add an `sendToL1` method in L1Messenger, where the main idea is the following: + +- Let’s submit an L2→L1 log with `key = msg.sender` (the actual sender of the long message) and `value = keccak256(message)`. +- Now, during batch commitment the operator will have to provide an array of such long L2→L1 messages + and it will be checked on L1 that indeed for each such log the correct preimage was provided. + +A very similar idea is used to publish uncompressed bytecodes on L1 +(the compressed bytecodes were sent via the long L1→L2 messages mechanism as explained above). + +Note, however, that whenever someone wants to prove that a certain message was present, they need to compose the L2→L1 log and prove its presence. + +## Priority operations + +Also, for each priority operation, we would send its hash and it status via an L2→L1 log. +On L1 we would then reconstruct the rolling hash of the processed priority transactions, +allowing to correctly verify during the `executeBatches` method that indeed the batch contained the correct priority operations. + +Importantly, the fact that both hash and status were sent, it made it possible to +[prove](https://github.com/matter-labs/era-contracts/blob/29f9ff4bbe12dc133c852f81acd70e2b4139d6b2/l1-contracts/contracts/bridge/L1SharedBridge.sol#L368) +that the L2 part of a deposit has failed and ask the bridge to release funds. diff --git a/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/_dir.yml b/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/_dir.yml new file mode 100644 index 00000000..f8a0993a --- /dev/null +++ b/content/00.build/65.developer-reference/70.handling-pubdata-in-boojum/_dir.yml @@ -0,0 +1 @@ +title: Handling pubdata in Boojum diff --git a/content/10.zk-stack/05.concepts/10.blocks.md b/content/10.zk-stack/05.concepts/10.blocks.md index fcbea55a..87941c40 100644 --- a/content/10.zk-stack/05.concepts/10.blocks.md +++ b/content/10.zk-stack/05.concepts/10.blocks.md @@ -56,7 +56,7 @@ The properties of an L2 block can be observed when using the `getBlock` method f | difficulty | Always returns `2500000000000000` as ZKsync does not use a proof of work consensus | | gasLimit | Maximum gas allowed in this block, always returns `2^32-1` | | gasUsed | Actual amount of gas used in this block | -| transactions | An array of transaction objects - see [TransactionResponse interface](/sdk/js/ethers/v6/providers#gettransaction) | +| transactions | An array of transaction objects - see [TransactionResponse interface](https://docs.zksync.io/sdk/js/ethers/v6/types#transactionresponse) | | baseFeePerGas | The base fee per gas in the style of EIP1559 | ::callout{icon="i-heroicons-information-circle" color="blue"} @@ -172,8 +172,8 @@ Since ZKsync is a state-diff based rollup, there is no way to deduce the hashes At the same time, in order to serve `blockhash` method, the VM requires the knowledge of some of the previous L2 block hashes. In order to save up on pubdata (by making sure that the same storage slots are reused, i.e. we only have repeated writes) we store only the [last 257 block hashes](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/contracts/SystemContext.sol#L70). -You can read more on what are the repeated writes and how the pubdata is processed -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1%E2%86%92L2%20ops%20on%20zkSync.md). +You can read more on what are the repeated writes and how the pubdata is processed on +[Handling L1->L2 ops on ZKsync](/build/developer-reference/era-contracts/handling-l1-l2-ops). ### Legacy blockhash diff --git a/content/10.zk-stack/05.concepts/20.fee-mechanism.md b/content/10.zk-stack/05.concepts/20.fee-mechanism.md index 5b78a63a..e532df81 100644 --- a/content/10.zk-stack/05.concepts/20.fee-mechanism.md +++ b/content/10.zk-stack/05.concepts/20.fee-mechanism.md @@ -444,8 +444,8 @@ This means that whenever a user writes into a storage slot, the user incurs cert that too. - Maybe the slot has been already written to in this batch and so we don’t to charge anything for it. -You can read more about how we treat the pubdata -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20pubdata%20in%20Boojum.md). +You can read more about how we treat the pubdata on +[Handling pubdata](/build/developer-reference/era-contracts/handling-pubdata). The important part here is that while such refunds are inlined (i.e. unlike the refunds for overhead they happen in-place during execution and not after the whole transaction has been processed), they are enforced by the operator. diff --git a/content/10.zk-stack/05.concepts/99.l1_l2_communication.md b/content/10.zk-stack/05.concepts/99.l1_l2_communication.md index e333be1e..3002ea0b 100644 --- a/content/10.zk-stack/05.concepts/99.l1_l2_communication.md +++ b/content/10.zk-stack/05.concepts/99.l1_l2_communication.md @@ -24,7 +24,7 @@ When withdrawing, an L2->L1 message is sent. This is then processed by the smart The L2→L1 communication is more fundamental than the L1→L2 communication, as the second relies on the first. L2→L1 communication happens by the L1 smart contract verifying messages alongside the proofs. The only “provable” part of the communication from L2 to L1 are native L2→L1 logs emitted by VM. These can be emitted by the `to_l1` -[opcode](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/System%20contracts%20bootloader%20description.md). +[opcode](/zk-stack/components/zksync-evm/bootloader). Each log consists of the following fields: ```solidity @@ -45,7 +45,7 @@ Where: - `isService` a boolean flag that is not used right now - `txNumberInBatch` the number of the transaction in the batch where the log has happened. This number is taken from the internal counter which is incremented each time the `increment_tx_counter` is - [called](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/System%20contracts%20bootloader%20description.md). + [called](/zk-stack/components/zksync-evm/bootloader). - `sender` is the value of `this` in the frame where the L2→L1 log was emitted. - `key` and `value` are just two 32-byte values that could be used to carry some data with the log. @@ -60,8 +60,8 @@ the Merkle tree’s root hash was included into the batch commitment also. Two `key` and `value` fields are enough for a lot of system-related use-cases, such as sending timestamp of the batch, previous batch hash, etc. They were and are used [used](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/contracts/SystemContext.sol#L438) -to verify the correctness of the batch's timestamps and hashes. You can read more about block processing -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Batches%20&%20L2%20blocks%20on%20zkSync.md). +to verify the correctness of the batch's timestamps and hashes. You can read more about block processing on +[Batches and L2 blocks on ZKsync](/build/developer-reference/batches-and-l2-blocks). ### Long L2→L1 messages & bytecodes @@ -102,10 +102,10 @@ be initiated on L1: ### Prerequisites -Please read the full -[article](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/System%20contracts%20bootloader%20description.md) +Please read [Bootloader](/zk-stack/components/zksync-evm/bootloader) and +[System contracts](/zk-stack/components/smart-contracts/system-contracts) on the general system contracts / bootloader structure as well as the pubdata structure with Boojum system to understand -[the difference](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20pubdata%20in%20Boojum.md) +[the difference](/build/developer-reference/era-contracts/handling-pubdata) between system and user logs. ## Priority operations diff --git a/content/10.zk-stack/10.components/20.smart-contracts/10.index.md b/content/10.zk-stack/10.components/20.smart-contracts/10.index.md index c893d958..e54327aa 100644 --- a/content/10.zk-stack/10.components/20.smart-contracts/10.index.md +++ b/content/10.zk-stack/10.components/20.smart-contracts/10.index.md @@ -33,7 +33,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 ZK chain 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 @@ -106,13 +106,13 @@ with the funds. To withdraw funds user should call `withdraw` function on the `L burn the funds on L2, allowing the user to reclaim them through the `finalizeEthWithdrawal` function on the `MailboxFacet`. -More about L1->L2 operations can be found -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1→L2%20ops%20on%20zkSync.md). +More about L1->L2 operations can be found on +[Handling L1->L2 ops on ZKsync](/build/developer-reference/era-contracts/handling-l1-l2-ops). L2 -> L1 communication, in contrast to L1 -> L2 communication, is based only on transferring the information, and not on the transaction execution on L1. The full description of the mechanism for sending information from L2 to L1 can be -found -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20pubdata%20in%20Boojum.md). +found on +[Handling pubdata](/build/developer-reference/era-contracts/handling-pubdata). ### ExecutorFacet diff --git a/content/10.zk-stack/10.components/20.smart-contracts/20.system-contracts.md b/content/10.zk-stack/10.components/20.smart-contracts/20.system-contracts.md index 506bdbad..f0014a22 100644 --- a/content/10.zk-stack/10.components/20.smart-contracts/20.system-contracts.md +++ b/content/10.zk-stack/10.components/20.smart-contracts/20.system-contracts.md @@ -44,8 +44,8 @@ values are set on genesis explicitly. Notably, if in the future we want to upgra `ContractDeployer` and so the constructor will be run. This contract is also responsible for ensuring validity and consistency of batches, L2 blocks and virtual blocks. The -implementation itself is rather straightforward, but to better understand this contract, please take a look at the -[page](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Batches%20&%20L2%20blocks%20on%20zkSync.md) +implementation itself is rather straightforward, but to better understand this contract, please take a look at +[Batches and L2 Blocks on ZKsync](/build/developer-reference/batches-and-l2-blocks) about the block processing on ZKsync. ## AccountCodeStorage @@ -120,12 +120,12 @@ precompile call with the padded data. All other hashing work will be done in the the crypto part of the precompiles expects to work with padded data. This means that a bug in applying padding may lead to an unprovable transaction. -## L2EthToken & MsgValueSimulator +## L2BaseToken & MsgValueSimulator Unlike Ethereum, zkEVM does not have any notion of any special native token. That’s why we have to simulate operations -with Ether via two contracts: `L2EthToken` & `MsgValueSimulator`. +with Ether via two contracts: `L2BaseToken` & `MsgValueSimulator`. -`L2EthToken` is a contract that holds the balances of ETH for the users. This contract does NOT provide ERC20 interface. +`L2BaseToken` is a contract that holds the balances of ETH for the users. This contract does NOT provide ERC20 interface. The only method for transferring Ether is `transferFromTo`. It permits only some system contracts to transfer on behalf of users. This is needed to ensure that the interface is as close to Ethereum as possible, i.e. the only way to transfer ETH is by doing a call to a contract with some `msg.value`. This is what `MsgValueSimulator` system contract is for. @@ -136,6 +136,53 @@ Whenever anyone wants to do a non-zero value call, they need to call `MsgValueSi - Pass `value` and whether the call should be marked with `isSystem` in the first extra abi params. - Pass the address of the callee in the second extraAbiParam. +### Support for `.send/.transfer` + +On Ethereum, whenever a call with non-zero value is done, +some additional gas is charged from the caller's frame +and in return a `2300` gas stipend is given out to the callee frame. +This stipend is usually enough to emit a small event, +but it is enforced that it is not possible to change storage within these `2300` gas. +This also means that in practice some users might opt to do `call` with 0 gas provided, +relying on the `2300` stipend to be passed to the callee. +This is the case for `.call/.transfer`. + +While using `.send/.transfer` is generally not recommended, +as a step towards better EVM compatibility, since vm1.5.0 a _partial_ support of these functions is present with ZKsync Era. +It is the done via the following means: + +- Whenever a call is done to the `MsgValueSimulator` system contract, + `27000` gas is deducted from the caller's frame and it passed to the `MsgValueSimulator` on top of whatever gas the user has originally provided. + The number was chosen to cover for the execution of the transfering of the balances as well as other constant size operations by the `MsgValueSimulator`. + Note, that since it will be the frame of `MsgValueSimulator` that will actually call the callee, + the constant must also include the cost for decommitting the code of the callee. + Decoding bytecode of any size would be prohibitively expensive and so we support only callees of size up to `100000` bytes. +- `MsgValueSimulator` ensures that no more than `2300` out of the stipend above gets to the callee, + ensuring the reentrancy protection invariant for these functions holds. + +Note, that unlike EVM any unused gas from such calls will be refunded. + +The system preserves the following guarantees about `.send/.transfer`: + +- No more than `2300` gas will be received by the callee. + Note, [that a smaller, but a close amount](https://github.com/code-423n4/2024-03-zksync/blob/3165e07bab249591404fff36e4802f9921ef168c/code/system-contracts/contracts/test-contracts/TransferTest.sol#L33) + may be passed. +- It is not possible to do any storage changes within this stipend. + This is enforced by having cold write cost more than `2300` gas. + Also, cold write cost always has to be prepaid whenever executing storage writes. + More on it can be read on [Fee model I/O pricing](/build/developer-reference/fee-model#io-pricing). +- Any callee with bytecode size of up to `100000` will work. + +The system does not guarantee the following: + +- That callees with bytecode size larger than `100000` will work. + Note, that a malicious operator can fail any call to a callee with large bytecode even if it has been decommitted before. + More on it can be read on [Fee model I/O pricing](/build/developer-reference/fee-model#io-pricing). + +As a conclusion, using `.send/.transfer` should be generally avoided, +but when avoiding is not possible it should be used with small callees, +e.g. EOAs, which implement [DefaultAccount](https://github.com/code-423n4/2024-03-zksync/blob/main/code/system-contracts/contracts/DefaultAccount.sol). + ## KnownCodeStorage This contract is used to store whether a certain code hash is “known”, i.e. can be used to deploy contracts. On ZKsync, @@ -158,7 +205,7 @@ those code hashes that are known. The KnownCodesStorage contract is also responsible for ensuring that all the “known” bytecode hashes are also valid. -## ContractDeployer & ImmutableSimulator +## ContractDeployer and ImmutableSimulator `ContractDeployer` is a system contract responsible for deploying contracts on ZKsync. It is better to understand how it works in the context of how the contract deployment works on ZKsync. Unlike Ethereum, where `create`/`create2` are @@ -249,7 +296,7 @@ The implementation of the default account abstraction. This is the code that is are not in kernel space and have no contract deployed on them. This address: - Contains minimal implementation of our account abstraction protocol. Note that it supports the - [built-in paymaster flows](https://v2-docs.zksync.io/dev/developer-guides/aa.html#paymasters). + [built-in paymaster flows](https://docs.zksync.io/build/developer-reference/account-abstraction/paymasters). - When anyone (except bootloader) calls it, it behaves in the same way as a call to an EOA, i.e. it always returns `success = 1, returndatasize = 0` for calls from anyone except for the bootloader. @@ -263,8 +310,8 @@ The L1 messenger receives a message, hashes it and sends only its hash as well a Then, it is the duty of the L1 smart contracts to make sure that the operator has provided full preimage of this hash in the commitment of the batch. -The `L1Messenger` is also responsible for validating the total pubdata to be sent on L1. You can read more about it -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20pubdata%20in%20Boojum.md). +The `L1Messenger` is also responsible for validating the total pubdata to be sent on L1. You can read more about it on +[Handling pubdata](/build/developer-reference/era-contracts/handling-pubdata#implementation-of-l1messenger). ## NonceHolder @@ -309,16 +356,62 @@ compress the published pubdata in several ways: - We compress state diffs. This contract contains utility methods that are used to verify the correctness of either bytecode or state diff -compression. You can read more on how we compress state diffs and bytecodes in the corresponding -[document](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1%E2%86%92L2%20ops%20on%20zkSync.md). +compression. You can read more on how we compress state diffs and bytecodes in +[Handling L1->L2 ops](/build/developer-reference/era-contracts/handling-l1-l2-ops). + +## Pubdata Chunk Publisher + +This contract is responsible for separating pubdata into chunks that each fit into a +[4844 blob](/build/developer-reference/era-contracts/pubdata-post-4844) +and calculating the hash of the preimage of said blob. +If a chunk's size is less than the total number of bytes for a blob, +we pad it on the right with zeroes as the circuits will require that the chunk is of exact size. +The hash is then sent to L1 via system logs and used as part of the batch commitment. +One important thing to note is that regardless of the size of the pubdata, +we will always send the two system logs. +The value of the hash of the empty blob will then be `bytes32(0)`. + +## CodeOracle + +It is a contract that accepts the versioned hash of a bytecode and returns the preimage of it. It is similar to the `extcodecopy` functionality on Ethereum. + +It works the following way: + +1. It accepts a versioned hash and double checks that it is marked as “known”, i.e. the operator must know the preimage for such hash. +2. After that, it uses the `decommit` opcode, + which accepts the versioned hash and the number of ergs to spent, + which is proportional to the length of the preimage. + If the preimage has been decommitted before, the requested cost will be refunded to the user. + + Note, that the decommitment process does not only happen using the `decommit` opcode, but during calls to contracts. + Whenever a contract is called, its code is decommitted into a memory page dedicated to contract code. + We never decommit the same preimage twice, regardless of whether it was decommitted via an explicit opcode or during a call to another contract, + the previous unpacked bytecode memory page will be reused. + When executing `decommit` inside the `CodeOracle` contract, + the user will be firstly precharged with maximal possible price and then it will be refunded in case the bytecode has been decommitted before. + +3. The `decommit` opcode returns to the slice of the decommitted bytecode. + Note, that the returned pointer always has length of 2^21 bytes, regardless of the length of the actual bytecode. + So it is the job of the `CodeOracle` system contract to shrink the length of the returned data. + +## P256Verify + +This contract exerts the same behavior as the P256Verify precompile from +[RIP-7212](https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md). +Note, that since Era has different gas schedule, we do not comply with the gas costs, but otherwise the interface is identical. + +## GasBoundCaller + +This is not a system contract, but it will be predeployed on a fixed user space address. +This contract allows users to set an upper bound of how much pubdata can a subcall take, regardless of the gas per pubdata. +Learn more on how pubdata works on ZKsync see [Fee model](/build/developer-reference/fee-model). + +Note, that it is a deliberate decision not to deploy this contract in the kernel space, +since it can relay calls to any contracts and so may break the assumption that all system contracts can be trusted. ## Known issues to be resolved -The protocol, while conceptually complete, contains some known issues which will be resolved in the short to middle -term. +The protocol, while conceptually complete, contains some known issues which will be resolved in the short to middle term. -- Fee modeling is yet to be improved. More on it in the - [document](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/zkSync%20fee%20model.md) - on the fee model. -- We may add some kind of default implementation for the contracts in the kernel space (i.e. if called, they wouldn’t - revert but behave like an EOA). +- Fee modeling is yet to be improved. See [Fee model](/build/developer-reference/fee-model) to learn more. +- We may add some kind of default implementation for the contracts in the kernel space (i.e. if called, they wouldn’t revert but behave like an EOA). diff --git a/content/10.zk-stack/10.components/50.zksync-evm/00.index.md b/content/10.zk-stack/10.components/50.zksync-evm/00.index.md index a29ab9c3..36f6a99f 100644 --- a/content/10.zk-stack/10.components/50.zksync-evm/00.index.md +++ b/content/10.zk-stack/10.components/50.zksync-evm/00.index.md @@ -1,6 +1,6 @@ --- title: Overview -description: Learn about the ZKsync VM's functionality, its role in the zkStack compared to the EVM in Ethereum, and how it handles smart contracts and transaction fees. +description: Learn about the ZKsync VM's functionality, its role in the ZK Stack compared to the EVM in Ethereum, and how it handles smart contracts and transaction fees. --- The ZKsync VM (zero-knowledge Ethereum Virtual Machine) is an essential component of the ZK Stack, @@ -34,7 +34,7 @@ The ZKsync VM incorporates several specialized features to meet the demands of r ## User-facing features To enhance user experience, the ZKsync VM supports account abstraction, allowing users to customize how transaction fees are paid. -This flexibility is part of the zkStack's efforts to improve usability and accessibility. +This flexibility is part of the ZK Stack's efforts to improve usability and accessibility. --- ## Fee model @@ -48,7 +48,7 @@ It considers the various costs associated with rollup operations, including: Covers expenses related to sequencing transactions and generating zero-knowledge proofs. --- -The zkEVM plays a critical role in the zkStack by ensuring efficient execution of transactions within the unique operational environment of rollups. +The zkEVM plays a critical role in the ZK Stack by ensuring efficient execution of transactions within the unique operational environment of rollups. Its specialized features and innovative fee model are designed to maintain functionality and scalability while providing a seamless experience for users. For further exploration of these concepts, consider reading more about [account abstraction](/zk-stack/concepts/account-abstraction) and the [fee mechanism](/zk-stack/concepts/fee-mechanism) in our documentation. diff --git a/content/10.zk-stack/10.components/50.zksync-evm/10.bootloader.md b/content/10.zk-stack/10.components/50.zksync-evm/10.bootloader.md index 92ff9697..17835998 100644 --- a/content/10.zk-stack/10.components/50.zksync-evm/10.bootloader.md +++ b/content/10.zk-stack/10.components/50.zksync-evm/10.bootloader.md @@ -15,7 +15,7 @@ This component allows for processing not just one transaction at a time but an e This approach is similar to how an EntryPoint works under EIP4337, which also manages transactions in arrays to support the Account Abstraction protocol. -You can learn more about [Batches & L2 blocks on ZKsync](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Batches%20%26%20L2%20blocks%20on%20zkSync.md). +You can learn more about [Batches & L2 blocks on ZKsync](/build/developer-reference/batches-and-l2-blocks). ### Operational Mechanism of the Bootloader @@ -24,38 +24,438 @@ This setup ensures that the bootloader functions as a kind of "formal" address t and similar references during transaction processing. If someone interacts with this address, for instance, to handle transaction fees, it triggers the EmptyContract’s code. -### Bootloader Variants: Playground vs Proved +## System contracts + +While most of the primitive EVM opcodes can be supported out of the box +(i.e. zero-value calls, addition/multiplication/memory/storage management, etc), +some of the opcodes are not supported by the VM by default +and they are implemented via “system contracts” — +these contracts are located in a special *kernel space,* i.e. +in the address space in range `[0..2^16-1]`, +and they have some special privileges, which users’ contracts don’t have. +These contracts are pre-deployed at the genesis +and updating their code can be done only via system upgrade, managed from L1. + +The use of each system contract will be explained down below. + +## zkEVM internals + +Full specification of the zkEVM is beyond the scope of this document. +However, this section will give you most of the details needed +for understanding the L2 system smart contracts & basic differences between EVM and zkEVM. + +### Registers and memory management + +On EVM, during transaction execution, the following memory areas are available: + +- `memory` itself. +- `calldata` the immutable slice of parent memory. +- `returndata` the immutable slice returned by the latest call to another contract. +- `stack` where the local variables are stored. + +Unlike EVM, which is stack machine, zkEVM has 16 registers. +Instead of receiving input from `calldata`, +zkEVM starts by receiving a *pointer* in its first register +(basically a packed struct with 4 elements: the memory page id, +start and length of the slice to which it points to) to the calldata page of the parent. +Similarly, a transaction can receive some other additional data within its registers +at the start of the program: whether the transaction should invoke the constructor +([more about deployments here](/zk-stack/components/smart-contracts/system-contracts#contractdeployer-and-immutablesimulator)), +whether the transaction has `isSystem` flag, etc. +The meaning of each of these flags will be expanded further in this section. + +*Pointers* are separate type in the VM. +It is only possible to: + +- Read some value within a pointer. +- Shrink the pointer by reducing the slice to which pointer points to. +- Receive the pointer to the returndata/as a calldata. +- Pointers can be stored only on stack/registers to make sure + that the other contracts can not read memory/returndata + of contracts they are not supposed to. +- A pointer can be converted to the u256 integer representing it, + but an integer can not be converted to a pointer to prevent un-allowed memory access. +- It is not possible to return a pointer that points to a memory page with id + smaller than the one for the current page. + What this means is that it is only possible to `return` + only pointer to the memory of the current frame or one of the pointers returned by the subcalls of the current frame. + +### Memory areas in zkEVM + +For each frame, the following memory areas are allocated: + +- *Heap* (plays the same role as `memory` on Ethereum). +- *AuxHeap* (auxiliary heap). + It has the same properties as Heap, + but it is used for the compiler to encode calldata/copy + the returndata from the calls to system contracts + to not interfere with the standard Solidity memory alignment. +- *Stack*. Unlike Ethereum, stack is not the primary place to get arguments for opcodes. + The biggest difference between stack on zkEVM and EVM is that on + ZKsync stack can be accessed at any location (just like memory). + While users do not pay for the growth of stack, + the stack can be fully cleared at the end of the frame, so the overhead is minimal. +- *Code*. The memory area from which the VM executes the code of the contract. + The contract itself can not read the code page, it is only done implicitly by the VM. + +Also, as mentioned in the previous section, +the contract receives the pointer to the calldata. + +### Managing returndata & calldata + +Whenever a contract finishes its execution, +the parent’s frame receives a *pointer* as `returndata`. +This pointer may point to the child frame’s Heap/AuxHeap +or it can even be the same `returndata` pointer that the child frame +received from some of its child frames. + +The same goes with the `calldata`. +Whenever a contract starts its execution, +it receives the pointer to the calldata. +The parent frame can provide any valid pointer as the calldata, +which means it can either be a pointer to the slice of parent’s frame memory +(heap or auxHeap) or it can be some valid pointer that the parent frame +has received before as calldata/returndata. + +Contracts simply remember the calldata pointer at the start of the execution frame +(it is by design of the compiler) and remembers the latest received returndata pointer. + +Some important implications of this is that it is now possible to do the following calls without any memory copying: + +A → B → C + +where C receives a slice of the calldata received by B. + +The same goes for returning data: + +A ← B ← C + +There is no need to copy returned data if B +returns a slice of the returndata returned by C. + +Note, that you can *not* use the pointer that you received via calldata +as returndata (i.e. return it at the end of the execution frame). +Otherwise, it would be possible that returndata points to the memory slice +of the active frame and allow editing the `returndata`. +It means that in the examples above, C could not return a slice of its calldata +without memory copying. + +Note, that the rule above is implemented by the principle +"it is not possible to return a slice of data with memory page id lower than the memory page id of the current heap", +since a memory page with smaller id could only be created before the call. +That's why a user contract can usually safely return a slice of previously returned returndata +(since it is guaranteed to have a higher memory page id). +However, system contracts have an exemption from the rule above. +It is needed in particular to the correct functionality of the `CodeOracle` system contract. +You can read more about [CodeOracle in System contracts](/zk-stack/components/smart-contracts/system-contracts#codeoracle). +So the rule of thumb is that returndata from `CodeOracle` should never be passed along. + +Some of these memory optimizations can be seen utilized in the +[EfficientCall](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/contracts/libraries/EfficientCall.sol#L32) +library that allows to perform a call while reusing the slice of calldata that the frame already has, without memory copying. + +### Returndata & precompiles + +Some of the operations which are opcodes on Ethereum, have become calls to some of the system contracts. +The most notable examples are `Keccak256`, `SystemContext`, etc. +Note, that, if done naively, the following lines of code would work differently +on ZKsync and Ethereum: -While the same bootloader implementation is used across both mainnet operations and for testing activities like emulating ethCalls, -only the **proved** bootloader is used for official batch processing. -This ensures reliability and security in batch-building on the mainnet. +```solidity +pop(call(...)) +keccak(...) +returndatacopy(...) +``` + +Since the call to keccak precompile would modify the `returndata`. +To avoid this, our compiler does not override the latest +`returndata` pointer after calls to such opcode-like precompiles. + +## ZKsync specific opcodes + +While some Ethereum opcodes are not supported out of the box, +some of the new opcodes were added to facilitate the development of the system contracts. + +Note, that this lists does not aim to be specific about the internals, +but rather explain methods in the +[SystemContractHelper.sol](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/contracts/libraries/SystemContractHelper.sol#L41) + +### **Only for kernel space** + +These opcodes are allowed only for contracts in kernel space (i.e. system contracts). +If executed in other places they result in `revert(0,0)`. + +- `mimic_call`. The same as a normal `call`, but it can alter the `msg.sender` field of the transaction. +- `to_l1`. Sends a system L2→L1 log to Ethereum. + The structure of this log can be seen [here](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/contracts/ethereum/contracts/common/Messaging.sol#L23). +- `event`. Emits an L2 log to zkSync. + Note, that L2 logs are not equivalent to Ethereum events. + Each L2 log can emit 64 bytes of data + (the actual size is 88 bytes, because it includes the emitter address, etc). + A single Ethereum event is represented with multiple `event` logs constitute. + This opcode is only used by `EventWriter` system contract. +- `precompile_call`. + This is an opcode that accepts two parameters: the uint256 representing the packed parameters for it as well as the ergs to burn. + Besides the price for the precompile call itself, it burns the provided ergs and executes the precompile. + The action that it does depend on `this` during execution: + - If it is the address of the `ecrecover` system contract, it performs the ecrecover operation + - If it is the address of the `sha256`/`keccak256` system contracts, it performs the corresponding hashing operation. + - It does nothing (i.e. just burns ergs) otherwise. + It can be used to burn ergs needed for L2→L1 communication or publication of bytecodes onchain. +- `setValueForNextFarCall` sets `msg.value` for the next `call`/`mimic_call`. + Note, that it does not mean that the value will be really transferred. + It just sets the corresponding `msg.value` context variable. + The transferring of ETH should be done via other means by the system contract + that uses this parameter. + Note, that this method has no effect on `delegatecall`, + since `delegatecall` inherits the `msg.value` of the previous frame. +- `increment_tx_counter` increments the counter of the transactions within the VM. + The transaction counter used mostly for the VM’s internal tracking of events. + Used only in bootloader after the end of each transaction. +- `decommit` will return a pointer to a slice with the corresponding bytecode hash preimage. + If this bytecode has been unpacked before, + the memory page where it was unpacked will be reused. + If it has never been unpacked before, it will be unpacked into the current heap. + +Note, that currently we do not have access to the `tx_counter` within VM +(i.e. for now it is possible to increment it and it will be automatically used for logs such as `event`s as well as system logs produced by `to_l1`, +but we can not read it). +We need to read it to publish the *user* L2→L1 logs, +so `increment_tx_counter` is always accompanied by the corresponding call to the +[SystemContext](/zk-stack/components/smart-contracts/system-contracts#systemcontext) contract. + +More on the difference between system and user logs can be read +[here](/build/developer-reference/era-contracts/handling-pubdata). + +### **Generally accessible** + +Here are opcodes that can be generally accessed by any contract. +Note that while the VM allows to access these methods, +it does not mean that this is easy: the compiler might not have convenient support for some use-cases yet. + +- `near_call`. It is basically a “framed” jump to some location of the code of your contract. + The difference between the `near_call` and ordinary jump are: + 1. It is possible to provide an ergsLimit for it. + Note, that unlike “`far_call`”s (i.e. calls between contracts) the 63/64 rule does not apply to them. + 2. If the near call frame panics, all state changes made by it are reversed. + Please note, that the memory changes will **not** be reverted. +- `getMeta`. Returns an u256 packed value of + [ZkSyncMeta](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/contracts/libraries/SystemContractHelper.sol#L15) + struct. + Note that this is not tight packing. + The struct is formed by the [following rust code](https://github.com/matter-labs/era-zkevm_opcode_defs/blob/7bf8016f5bb13a73289f321ad6ea8f614540ece9/src/definitions/abi/meta.rs#L4). +- `getCodeAddress` — receives the address of the executed code. + This is different from `this`, since in case of delegatecalls `this` is preserved, + but `codeAddress` is not. + +### Flags for calls + +Besides the calldata, it is also possible to provide additional information to the callee when doing `call`, `mimic_call`, `delegate_call`. +The called contract will receive the following information in its first 12 registers at the start of execution: + +- *r1* — the pointer to the calldata. +- *r2* — the pointer with flags of the call. + This is a mask, where each bit is set only if certain flags have been set to the call. + Currently, two flags are supported: 0-th bit: `isConstructor` flag. + This flag can only be set by system contracts and denotes whether the account should execute its constructor logic. + Note, unlike Ethereum, there is no separation on constructor & deployment bytecode. + More on that can be read [here](/zk-stack/components/smart-contracts/system-contracts#contractdeployer-and-immutablesimulator). + 1-st bit: `isSystem` flag. + Whether the call intends a system contracts’ function. + While most of the system contracts’ functions are relatively harmless, accessing some with calldata only may break the invariants of Ethereum, + e.g. if the system contract uses `mimic_call`: no one expects that by calling a contract some operations may be done out of the name of the caller. + This flag can be only set if the callee is in kernel space. +- The rest r3..r12 registers are non-empty only if the `isSystem` flag is set. + There may be arbitrary values passed, which we call `extraAbiParams`. + +The compiler implementation is that these flags are remembered by the contract and can be accessed later during execution via special +[simulations](/zk-stack/components/compiler/specification/instructions/extensions). + +If the caller provides inappropriate flags +(i.e. tries to set `isSystem` flag when callee is not in the kernel space), +the flags are ignored. + +### `onlySystemCall` modifier + +Some of the system contracts can act on behalf of the user or have a very important impact on the behavior of the account. +That’s why we wanted to make it clear that users can not invoke potentially dangerous operations by doing a simple EVM-like `call`. +Whenever a user wants to invoke some of the operations which we considered dangerous, +they must provide “`isSystem`” flag with them. + +The `onlySystemCall` flag checks that the call was either done with the “isSystemCall” flag provided +or the call is done by another system contract +(since Matter Labs is fully aware of system contracts). + +### Simulations via our compiler + +In the future, we plan to introduce our “extended” version of Solidity with more supported opcodes than the original one. +However, right now it was beyond the capacity of the team to do, +so in order to represent accessing ZKsync-specific opcodes, +we use `call` opcode with certain constant parameters that will be automatically replaced by the compiler with zkEVM native opcode. + +Example: + +```solidity +function getCodeAddress() internal view returns (address addr) { + address callAddr = CODE_ADDRESS_CALL_ADDRESS; + assembly { + addr := staticcall(0, callAddr, 0, 0xFFFF, 0, 0) + } +} +``` + +In the example above, the compiler will detect that the static call is done to the constant `CODE_ADDRESS_CALL_ADDRESS` +and so it will replace it with the opcode for getting the code address of the current execution. + +Full list of opcode simulations can be found on [ZKsync Era Extension Simulation (call)](/zk-stack/components/compiler/specification/instructions/extensions/call). + +We also use +[verbatim-like](/zk-stack/components/compiler/specification/instructions/extensions/verbatim) +statements to access zkSync-specific opcodes in the bootloader. + +All the usages of the simulations in our Solidity code are implemented in the +[SystemContractHelper](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/contracts/libraries/SystemContractHelper.sol#L41) +library and the +[SystemContractsCaller](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/contracts/libraries/SystemContractsCaller.sol#L68) +library. + +**Simulating** `near_call` **(in Yul only)** + +In order to use `near_call` i.e. to call a local function, +while providing a limit of ergs (gas) that this function can use, +the following syntax is used: + +The function should contain `ZKSYNC_NEAR_CALL` string in its name and accept at least 1 input parameter. +The first input parameter is the packed ABI of the `near_call`. +Currently, it is equal to the number of ergs to be passed with the `near_call`. + +Whenever a `near_call` panics, the `ZKSYNC_CATCH_NEAR_CALL` function is called. + +*Important note:* the compiler behaves in a way that if there is a `revert` in the bootloader, +the `ZKSYNC_CATCH_NEAR_CALL` is not called and the parent frame is reverted as well. +The only way to revert only the `near_call` frame is to trigger VM’s *panic* +(it can be triggered with either invalid opcode or out of gas error). + +*Important note 2:* The 63/64 rule does not apply to `near_call`. +Also, if 0 gas is provided to the near call, +then actually all of the available gas will go to it. + +#### **Notes on security** + +To prevent unintended substitution, the compiler requires +`--system-mode` flag to be passed during compilation for the above substitutions to work. + +## Bytecode hashes + +On ZKsync the bytecode hashes are stored in the following format: + +- The 0th byte denotes the version of the format. + Currently the only version that is used is “1”. +- The 1st byte is `0` for deployed contracts’ code and `1` for the contract code + [that is being constructed](/zk-stack/components/smart-contracts/system-contracts#constructing-vs-non-constructing-code-hash). +- The 2nd and 3rd bytes denote the length of the contract + in 32-byte words as big-endian 2-byte number. +- The next 28 bytes are the last 28 bytes of the sha256 hash of the contract’s bytecode. + +The bytes are ordered in little-endian order (i.e. the same way as for `bytes32`). + +### Bytecode validity -This section focuses on describing the **proved** bootloader. +A bytecode is valid if it: + +- Has its length in bytes divisible by 32 + (i.e. consists of an integer number of 32-byte words). +- Has a length of less than 2^16 words (i.e. its length in words fits into 2 bytes). +- Has an odd length in words (i.e. the 3rd byte is an odd number). + +Note, that it does not have to consist of only correct opcodes. +In case the VM encounters an invalid opcode, it will simply revert +(similar to how EVM would treat them). + +A call to a contract with invalid bytecode can not be proven. +That is why it is **essential** that no contract with invalid bytecode is ever deployed on ZKsync. +It is the job of the [KnownCodesStorage](/zk-stack/components/smart-contracts/system-contracts#knowncodestorage) +to ensure that all allowed bytecodes in the system are valid. + +## Account abstraction + +One of the other important features of ZKsync is the support of account abstraction. +It is highly recommended to read the documentation on our [AA protocol](https://docs.zksync.io/build/developer-reference/account-abstraction). + +### Account versioning + +Each account can also specify which version of the account abstraction protocol they support. +This is needed to allow breaking changes of the protocol in the future. + +Currently, two versions are supported: +`None` (i.e. it is a simple contract and it should never be used as `from` field of a transaction), +and `Version1`. + +### Nonce ordering + +Accounts can also signal to the operator which nonce ordering it should expect from these accounts: `Sequential` or `Arbitrary`. + +`Sequential` means that the nonces should be ordered in the same way as in EOAs. +This means, that, for instance, the operator will always wait for a transaction with nonce `X` before processing a transaction with nonce `X+1`. + +`Arbitrary` means that the nonces can be ordered in arbitrary order. +It is supported by the server right now, i.e. if there is a contract with arbitrary nonce ordering, +its transactions will likely either be rejected or get stuck in the mempool due to nonce mismatch. + +Note, that this is not enforced by system contracts in any way. +Some sanity checks may be present, but the accounts are allowed to do however they like. +It is more of a suggestion to the operator on how to manage the mempool. + +### Returned magic value + +Now, both accounts and paymasters are required to return a certain magic value upon validation. +This magic value will be enforced to be correct on the mainnet, +but will be ignored during fee estimation. +Unlike Ethereum, the signature verification + fee charging/nonce increment are not included as part of the intrinsic costs of the transaction. +These are paid as part of the execution and so they need to be estimated as part of the estimation for the transaction’s costs. + +Generally, the accounts are recommended to perform as many operations as during normal validation, +but only return the invalid magic in the end of the validation. +This will allow to correctly (or at least as correctly as possible) +estimate the price for the validation of the account. + +## Bootloader + +Bootloader is the program that accepts an array of transactions +and executes the entire ZKsync batch. +This section will expand on its invariants and methods. + +## Playground bootloader vs proved bootloader + +For convenience, we use the same implementation of the bootloader both in the mainnet batches and for emulating ethCalls or other testing activities. +*Only proved* bootloader is ever used for batch-building and thus this document describes only it. --- ## Batch Start -The state of the bootloader is equivalent to the state of a contract transaction with empty calldata. -The only difference is that it starts with all the possible memory pre-allocated (to avoid costs for memory expansion). +It is enforced by the ZKPs, that the state of the bootloader is equivalent to the state of a contract transaction with empty calldata. +The only difference is that it starts with all the possible memory pre-allocated +(to avoid costs for memory expansion). -For additional efficiency, the bootloader receives its parameters inside its memory. -This is the only point of non-determinism: the bootloader _starts with its memory pre-filled with any data the operator wants_. -That’s why the operator is responsible for validating the correctness of the bootloader. -The operator should never rely on the initial contents of the memory to be correct & valid. +For additional efficiency (and our convenience), +the bootloader receives its parameters inside its memory. +This is the only point of non-determinism: the bootloader *starts with its memory pre-filled with any data the operator wants*. +That’s why it is responsible for validating the correctness of it and it should never rely on the initial contents of the memory to be correct & valid. For instance, for each transaction, we check that it is -[properly ABI-encoded](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L3058) +[properly ABI-encoded](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L3278) and that the transactions -[go exactly one after another](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L3736). +[go exactly one after another](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L3974). We also ensure that transactions do not exceed the limits of the memory space allowed for transactions. ## Transaction Types and Validation -While the main transaction format is the internal [`Transaction` -format](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/contracts/libraries/TransactionHelper.sol#L25), -it is a struct that is used to represent various kinds of transactions types. It contains a lot of `reserved` fields -that could be used depending in the future types of transactions without need for AA to change the interfaces of their -contracts. +While the main transaction format is the internal +[`Transaction` format](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/contracts/libraries/TransactionHelper.sol#L25), +it is a struct that is used to represent various kinds of transactions types. +It contains a lot of `reserved` fields +that could be used depending in the future types of transactions +without need for AA to change the interfaces of their contracts. The exact type of the transaction is marked by the `txType` field of the transaction type. There are 6 types currently supported: @@ -80,11 +480,10 @@ supported: transactions. The L1 contract ensures that the hash did indeed match the [hashes of the priority transactions on L1](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/contracts/ethereum/contracts/zksync/facets/Executor.sol#L282). -You can also read more on L1->L2 transactions and upgrade transactions -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1%E2%86%92L2%20ops%20on%20zkSync.md). +You can also read more on [L1->L2 transactions and upgrade transactions](/build/developer-reference/era-contracts/handling-l1-l2-ops). -However, as already stated, the bootloader’s memory is not deterministic and the operator is free to put anything it -wants there. For all of the transaction types above the restrictions are imposed in the following +However, as already stated, the bootloader’s memory is not deterministic and the operator is free to put anything it wants there. +For all of the transaction types above the restrictions are imposed in the following ([method](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L2828)), which is called before starting processing the transaction. @@ -110,7 +509,7 @@ The first 8 words are reserved for the batch information provided by the operato - `7` — Reserved word. Unused on proved batch. The batch information slots -[are used at the beginning of the batch](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L3629). +[are used at the beginning of the batch](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L3858). Once read, these slots can be used for temporary data. ### Temporary Data Descriptions @@ -129,23 +528,22 @@ Once read, these slots can be used for temporary data. - `[2159..3182]` – slots for the “trusted” gas limits by the operator. The user’s transaction will have at its disposal `min(MAX_TX_GAS(), trustedGasLimit)`, where `MAX_TX_GAS` is a constant guaranteed by the system. Currently, it is equal to 80 million gas. In the future, this feature will be removed. -- `[3183..7282]` – slots for storing L2 block info for each transaction. You can read more on the difference L2 blocks - and batches - [here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Batches%20&%20L2%20blocks%20on%20zkSync.md). +- `[3183..7282]` – slots for storing L2 block info for each transaction. + You can read more on the difference [L2 blocks and batches](/build/developer-reference/batches-and-l2-blocks). - `[7283..40050]` – slots used for compressed bytecodes each in the following format: - 32 bytecode hash - 32 zeroes (but then it will be modified by the bootloader to contain 28 zeroes and then the 4-byte selector of the `publishCompressedBytecode` function of the `BytecodeCompressor`) - The calldata to the bytecode compressor (without the selector). -- `[40051..40052]` – slots where the hash and the number of current priority ops is stored. More on it in the priority - operations - [section](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1%E2%86%92L2%20ops%20on%20zkSync.md). +- `[40051..40052]` – slots where the hash and the number of current priority ops is stored. + More on it in the priority operations section on + [Handling L1->L2 ops on ZKsync](/build/developer-reference/era-contracts/handling-l1-l2-ops). ### L1Messenger Pubdata - `[40053..248052]` – slots where the final batch pubdata is supplied to be verified by the L1Messenger. More on how the - L1Messenger system contracts handles the pubdata can be read - [here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20pubdata%20in%20Boojum.md). + L1Messenger system contracts handles the pubdata can be read on + [L2->L1 Communication before Boojum](/build/developer-reference/handling-pubdata-in-boojum). This `[40053..248052]` space is used for the calldata to the L1Messenger’s `publishPubdataAndClearState` function, which accepts: @@ -175,141 +573,151 @@ In theory, much more calldata could be used. For instance, if one byte is used for `enum` index. It is the responsibility of the operator to ensure that it can form the correct calldata for the L1Messenger. -### Transaction Slot Descriptions +### Transaction's meta descriptions -- `[248053..250100]` words — 2048 slots for 1024 transaction’s meta descriptions (their structure is explained below). +- `[586653..606652]` words — 20000 slots for 10000 transaction’s meta descriptions (their structure is explained below). -For internal reasons related to possible future integrations of zero-knowledge proofs about some of the contents of the -bootloader’s memory, the array of the transactions is not passed as the ABI-encoding of the array of transactions, but: +For internal reasons related to possible future integrations of zero-knowledge proofs about some of the contents of the bootloader’s memory, +the array of the transactions is not passed as the ABI-encoding of the array of transactions, but: -- We have a constant maximum number of transactions. At the time of this writing, this number is 1024. -- Then, we have 1024 transaction descriptions, each ABI encoded as the following struct: +- We have a constant maximum number of transactions. + At the time of this writing, this number is 10000. +- Then, we have 10000 transaction descriptions, each ABI encoded as the following struct: ```solidity struct BootloaderTxDescription { - // The offset by which the ABI-encoded transaction's data is stored - uint256 txDataOffset; - // Auxiliary data on the transaction's execution. In our internal versions - // of the bootloader it may have some special meaning, but for the - // bootloader used on the mainnet it has only one meaning: whether to execute - // the transaction. If 0, no more transactions should be executed. If 1, then - // we should execute this transaction and possibly try to execute the next one. - uint256 txExecutionMeta; + // The offset by which the ABI-encoded transaction's data is stored + uint256 txDataOffset; + // Auxilary data on the transaction's execution. In our internal versions + // of the bootloader it may have some special meaning, but for the + // bootloader used on the mainnet it has only one meaning: whether to execute + // the transaction. If 0, no more transactions should be executed. If 1, then + // we should execute this transaction and possibly try to execute the next one. + uint256 txExecutionMeta; } - ``` ### **Reserved slots for the calldata for the paymaster’s postOp operation** -- `[252149..252188]` words — 40 slots which could be used for encoding the calls for postOp methods of the paymaster. +- `[606653..606692]` words — 40 slots which could be used for encoding the calls for postOp methods of the paymaster. -To avoid additional copying of transactions for calls for the account abstraction, we reserve some of the slots which -could be then used to form the calldata for the `postOp` call for the account abstraction without having to copy the -entire transaction’s data. +To avoid additional copying of transactions for calls for the account abstraction, +we reserve some of the slots which could be then used to form the calldata +for the `postOp` call for the account abstraction without having to copy the entire transaction’s data. ### **The actual transaction’s descriptions** -- `[252189..523261]` +- `[606693..927496]` -Starting from the 487312 word, the actual descriptions of the transactions start. (The struct can be found by this -[link](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/contracts/libraries/TransactionHelper.sol#L25)). +Starting from the 487312 word, the actual descriptions of the transactions start. +(The struct can be found by this [link](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/contracts/libraries/TransactionHelper.sol#L25)). The bootloader enforces that: - They are correctly ABI encoded representations of the struct above. -- They are located without any gaps in memory (the first transaction starts at word 653 and each transaction goes right - after the next one). +- They are located without any gaps in memory (the first transaction starts at word 653 and each transaction goes right after the next one). - The contents of the currently processed transaction (and the ones that will be processed later on are untouched). - Note, that we do allow overriding data from the already processed transactions as it helps to preserve efficiency by - not having to copy the contents of the `Transaction` each time we need to encode a call to the account. + Note, that we do allow overriding data from the already processed transactions as it helps to preserve efficiency + by not having to copy the contents of the `Transaction` each time we need to encode a call to the account. ### **VM Hook Pointers** -- `[523261..523263]` +- `[927497..927499]` -These are memory slots that are used purely for debugging purposes (when the VM writes to these slots, the server side -can catch these calls and give important insight information for debugging issues). +These are memory slots that are used purely for debugging purposes +(when the VM writes to these slots, the server side can catch these calls and give important insight information for debugging issues). ### **Result Pointer** -- [523264..524287] +- `[927500..937499]` -These are memory slots that are used to track the success status of a transaction. If the transaction with number `i` -succeeded, the slot `2^19 - 1024 + i` will be marked as 1 and 0 otherwise. +These are memory slots that are used to track the success status of a transaction. +If the transaction with number `i` succeeded, the slot `937499 - 10000 + i` will be marked as 1 and 0 otherwise. -## Bootloader Execution Flow +## Bootloader execution flow 1. At the start of the batch it - [reads the initial batch information](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L3629) - and - [sends the information](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L3674) - about the current batch to the `SystemContext` system contract. + [reads the initial batch information](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L3858) + and + [sends the information](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L3912) + about the current batch to the SystemContext system contract. 2. It goes through each of - [transaction’s descriptions](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L3715) - and checks whether the `execute` field is set. If not, it ends processing of the transactions and ends execution of - the batch. If the execute field is non-zero, the transaction will be executed and it goes to step 3. -3. Based on the transaction’s type it decides whether the transaction is an L1 or L2 transaction and processes them - accordingly. More on the processing of the L1 transactions can be read [here](#l1-l2-transactions). More on L2 - transactions can be read [here](#l2-transactions). + [transaction’s descriptions](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L3954) + and checks whether the `execute` field is set. + If not, it ends processing of the transactions and ends execution of the batch. + If the execute field is non-zero, the transaction will be executed and it goes to step 3. +3. Based on the transaction’s type it decides whether the transaction is an L1 or L2 transaction and processes them accordingly. + More on the processing of the L1 transactions can be read in the [L1->L2 transactions](#l1-l2-transactions) section. + More on L2 transactions can be read in the [L2 transactions](#l2-transactions) section. ## L2 Transactions -On ZKsync, every address is a contract. Users can start transactions from their EOA accounts, because every address that +On ZKsync, every address is a contract. +Users can start transactions from their EOA accounts, because every address that does not have any contract deployed on it implicitly contains the code defined in the -[DefaultAccount.sol](https://github.com/code-423n4/2023-10-zksync/blob/main/code/system-contracts/contracts/DefaultAccount.sol) -file. Whenever anyone calls a contract that is not in kernel space (i.e. the address is ≥ 2^16) and does not have any +[DefaultAccount.sol](https://github.com/code-423n4/2024-03-zksync/blob/main/code/system-contracts/contracts/DefaultAccount.sol) +file. +Whenever anyone calls a contract that is not in kernel space +(i.e. the address is ≥ 2^16) and does not have any contract code deployed on it, the code for `DefaultAccount` will be used as the contract’s code. Note, that if you call an account that is in kernel space and does not have any code deployed there, right now, the transaction will revert. We process the L2 transactions according to our account abstraction protocol: -[https://v2-docs.zksync.io/dev/tutorials/custom-aa-tutorial.html#prerequisite](https://v2-docs.zksync.io/dev/tutorials/custom-aa-tutorial.html#prerequisite). +[https://code.zksync.io/tutorials/native-aa-multisig#prerequisites](https://code.zksync.io/tutorials/native-aa-multisig#prerequisites). -1. We [deduct](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L1073) +1. We + [deduct](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L1163) the transaction’s upfront payment for the overhead for the block’s processing. - You can read more on how that works in the fee model [description](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/zkSync%20fee%20model.md). + You can read more on how that works in the [fee model description](/build/developer-reference/fee-model). 2. Then we calculate the gasPrice for these transactions according to the EIP1559 rules. -3. We [conduct the validation step](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L1180) +3. We + [conduct the validation step](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L1278) of the AA protocol: -- We calculate the hash of the transaction. -- If enough gas has been provided, we near_call the validation function in the bootloader. It sets the tx.origin to the - address of the bootloader, sets the ergsPrice. It also marks the factory dependencies provided by the transaction as - marked and then invokes the validation method of the account and verifies the returned magic. -- Calls the accounts and, if needed, the paymaster to receive the payment for the transaction. Note, that accounts may - not use `block.baseFee` context variable, so they have no way to know what exact sum to pay. That’s why the accounts - typically firstly send `tx.maxFeePerErg * tx.ergsLimit` and the bootloader - [refunds](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L730) - for any excess funds sent. - -1. [We perform the execution of the transaction](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L1234). - Note, that if the sender is an EOA, tx.origin is set equal to the `from` the value of the transaction. During the - execution of the transaction, the publishing of the compressed bytecodes happens: for each factory dependency if it - has not been published yet and its hash is currently pointed to in the compressed bytecodes area of the bootloader, a - call to the bytecode compressor is done. Also, at the end the call to the KnownCodeStorage is done to ensure all the - bytecodes have indeed been published. -2. We - [refund](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L1401) - the user for any excess funds he spent on the transaction. The process is as follows: - -3. The `postTransaction` operation is called to the `paymaster`. -4. The Bootloader asks the operator to provide a refund. - During the first VM run—without proofs—the operator directly inserts the refunds in the memory of the bootloader. - During the run for the proved batches, the operator already knows which values have to be inserted. - You can read more about the [fee model here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/zkSync%20fee%20model.md) -5. The Bootloader refunds the user. + - We calculate the hash of the transaction. + - If enough gas has been provided, we near_call the validation function in the bootloader. + It sets the tx.origin to the address of the bootloader, sets the `ergsPrice`. + It also marks the factory dependencies provided by the transaction as marked + and then invokes the validation method of the account and verifies the returned magic. + - Calls the accounts and, if needed, the paymaster to receive the payment for the transaction. + Note, that accounts may not use `block.baseFee` context variable, + so they have no way to know what exact sum to pay. + That’s why the accounts typically firstly send `tx.maxFeePerErg * tx.ergsLimit` and the bootloader + [refunds](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L787) + for any excess funds sent. + +4. [We perform the execution of the transaction](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L1343). + Note, that if the sender is an EOA, `tx.origin` is set equal to the `from` the value of the transaction. + During the execution of the transaction, the publishing of the compressed bytecodes happens: + for each factory dependency if it has not been published yet and its hash is currently pointed to in the compressed bytecodes area of the bootloader, + a call to the bytecode compressor is done. + Also, at the end the call to the `KnownCodeStorage` is done to ensure all the bytecodes have indeed been published. +5. We + [refund](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L1553) + the user for any excess funds he spent on the transaction: + + - Firstly, the `postTransaction` operation is called to the paymaster. + - The bootloader asks the operator to provide a refund. + During the first VM run without proofs the provide directly inserts the refunds in the memory of the bootloader. + During the run for the proved batches, the operator already knows what which values have to be inserted there. + You can read more about it in [Fee model](/build/developer-reference/fee-model) + - The bootloader refunds the user. + 6. We notify the operator about the - [refund that was granted to the user.](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L1112). - It will be used to correctly display the gas used for the transaction in the block explorer. + [refund](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L1211) + that was granted to the user. + It will be used for the correct displaying of gasUsed for the transaction in explorer. ## L1->L2 Transactions -L1->L2 transactions are transactions that were initiated on L1. We assume that `from` has already authorized the L1→L2 -transactions. It also has its L1 pubdata price as well as ergsPrice set on L1. +L1->L2 transactions are transactions that were initiated on L1. +We assume that `from` has already authorized the L1→L2 transactions. +It also has its L1 pubdata price as well as ergsPrice set on L1. -Most of the steps from the execution of L2 transactions are omitted and we set `tx.origin` to the `from`, and -`ergsPrice` to the one provided by transaction. -After that, we use [mimicCall](https://matter-labs.github.io/eravm-spec/spec.html#FarCalls) +Most of the steps from the execution of L2 transactions are omitted +and we set `tx.origin` to the `from`, and `ergsPrice` to the one provided by transaction. +After that, we use [mimicCall](#zksync-specific-opcodes) to provide the operation itself from the name of the sender account. Note, that for L1→L2 transactions, `reserved0` field denotes the amount of ETH that should be minted on L2 as a result @@ -321,23 +729,21 @@ There are two kinds of L1->L2 transactions: 1. Priority operations, initiated by users (they have type `255`). 2. Upgrade transactions, that can be initiated during system upgrade (they have type `254`). -[You can read more about differences between the different L1->L2 transaction types here.](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1%E2%86%92L2%20ops%20on%20zkSync.md) +[Read more about differences between the different L1->L2 transaction types.](/build/developer-reference/era-contracts/handling-l1-l2-ops) -## End of the Batch +## End of the batch At the end of the batch we set `tx.origin` and `tx.gasprice` context variables to zero to both save L1 gas on `calldata` and to send the entire Bootloader balance to the operator. This effectively sends all the fees collected by the Bootloader to the operator. Also, we -[set](https://github.com/code-423n4/2023-10-zksync/blob/ef99273a8fdb19f5912ca38ba46d6bd02071363d/code/system-contracts/bootloader/bootloader.yul#L3812) -the fictive L2 block’s data. Then, we call the system context to ensure that it publishes the timestamp of the L2 block -as well as L1 batch. We also reset the `txNumberInBlock` counter to avoid its state diffs from being published on L1. -You can read more about block processing on ZKsync -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Batches%20&%20L2%20blocks%20on%20zkSync.md). - -After that, we publish the hash as well as the number of priority operations in this batch. More on it -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20L1%E2%86%92L2%20ops%20on%20zkSync.md). - -Then, we call the L1Messenger system contract for it to compose the pubdata to be published on L1. You can read more -about the pubdata processing -[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Handling%20pubdata%20in%20Boojum.md). +[set](https://github.com/code-423n4/2024-03-zksync/blob/7e85e0a997fee7a6d75cadd03d3233830512c2d2/code/system-contracts/bootloader/bootloader.yul#L4047) +the fictive L2 block’s data. +Then, we call the system context to ensure that it publishes the timestamp of the L2 block as well as L1 batch. +We also reset the `txNumberInBlock` counter to avoid its state diffs from being published on L1. +You can read more about [block processing on ZKsync](/build/developer-reference/batches-and-l2-blocks). + +After that, we publish the hash as well as the number of priority operations in this batch. [Handling L1->L2 ops on ZKsync](/build/developer-reference/era-contracts/handling-l1-l2-ops). + +Then, we call the L1Messenger system contract for it to compose the pubdata to be published on L1. +You can read more on [Handling pubdata](/build/developer-reference/era-contracts/handling-pubdata). diff --git a/content/10.zk-stack/10.components/60.prover/10.index.md b/content/10.zk-stack/10.components/60.prover/10.index.md index 88306cd3..6c7996ff 100644 --- a/content/10.zk-stack/10.components/60.prover/10.index.md +++ b/content/10.zk-stack/10.components/60.prover/10.index.md @@ -55,8 +55,6 @@ In Zero-Knowledge terminology, an underconstrained circuit may result in a sound The primary purpose of ZKsync's circuits is to ensure the correct execution of the VM, covering every opcode, storage interaction, and the integration of precompiled contracts. These elements are crucial for the holistic functioning and security of the system. -This is described in more detail in -[Circuits](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits.md) ### Additional Resources diff --git a/content/10.zk-stack/10.components/60.prover/40.circuits/10.index.md b/content/10.zk-stack/10.components/60.prover/40.circuits/10.index.md index e0b59108..318be29e 100644 --- a/content/10.zk-stack/10.components/60.prover/40.circuits/10.index.md +++ b/content/10.zk-stack/10.components/60.prover/40.circuits/10.index.md @@ -38,19 +38,19 @@ That’s how we can make our prover structure more optimized and flexible. For now, we have 13 base layer circuits: -- [MainVM](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/Main%20Vm.md) -- [CodeDecommitmentsSorter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/SortDecommitments.md) -- [CodeDecommitter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/CodeDecommitter.md) -- [LogDemuxer](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/DemuxLogQueue.md) -- [KeccakRoundFunction](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/KeccakRoundFunction.md) -- [Sha256RoundFunction](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/Sha256RoundFunction.md) -- [ECRecover](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/Ecrecover.md) -- [RAMPermutation](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/RAMPermutation.md) -- [StorageSorter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/StorageSorter.md) -- [StorageApplication](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/StorageApplication.md) -- [EventsSorter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/LogSorter.md) -- [L1MessagesSorter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/LogSorter.md) -- [L1MessagesHasher](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/L1MessagesHasher.md) +- [MainVM](/zk-stack/components/prover/circuits/main-vm) +- [CodeDecommitmentsSorter](/zk-stack/components/prover/circuits/sorting/sort-decommitments) +- [CodeDecommitter](/zk-stack/components/prover/circuits/code-decommitter) +- [LogDemuxer](/zk-stack/components/prover/circuits/demux-log-queue) +- [KeccakRoundFunction](/zk-stack/components/prover/circuits/keccak-round-function) +- [Sha256RoundFunction](/zk-stack/components/prover/circuits/sha256-round-function) +- [ECRecover](/zk-stack/components/prover/circuits/ecrecover) +- [RAMPermutation](/zk-stack/components/prover/circuits/ram-permutation) +- [StorageSorter](/zk-stack/components/prover/circuits/sorting/storage-sorter) +- [StorageApplication](/zk-stack/components/prover/circuits/storage-application) +- [EventsSorter](/zk-stack/components/prover/circuits/sorting/log-sorter) +- [L1MessagesSorter](/zk-stack/components/prover/circuits/sorting/log-sorter) +- [L1MessagesHasher](/zk-stack/components/prover/circuits/l1-messages-hasher) - @@ -96,29 +96,29 @@ only on base layer. ## Base Layer Circuits -[Main Vm](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/Main%20Vm.md) +[Main Vm](/zk-stack/components/prover/circuits/main-vm) -[SortDecommitments](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/SortDecommitments.md) +[SortDecommitments](/zk-stack/components/prover/circuits/sorting/sort-decommitments) -[CodeDecommitter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/CodeDecommitter.md) +[CodeDecommitter](/zk-stack/components/prover/circuits/code-decommitter) -[DemuxLogQueue](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/DemuxLogQueue.md) +[DemuxLogQueue](/zk-stack/components/prover/circuits/demux-log-queue) -[KeccakRoundFunction](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/KeccakRoundFunction.md) +[KeccakRoundFunction](/zk-stack/components/prover/circuits/keccak-round-function) -[Sha256RoundFunction](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/Sha256RoundFunction.md) +[Sha256RoundFunction](/zk-stack/components/prover/circuits/sha256-round-function) -[Ecrecover](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/Ecrecover.md) +[Ecrecover](/zk-stack/components/prover/circuits/ecrecover) -[RAMPermutation](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/RAMPermutation.md) +[RAMPermutation](/zk-stack/components/prover/circuits/ram-permutation) -[StorageSorter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/StorageSorter.md) +[StorageSorter](/zk-stack/components/prover/circuits/sorting/storage-sorter) -[StorageApplication](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/StorageApplication.md) +[StorageApplication](/zk-stack/components/prover/circuits/storage-application) -[LogSorter](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/LogSorter.md) +[LogSorter](/zk-stack/components/prover/circuits/sorting/log-sorter) -[L1MessagesHasher](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/L1MessagesHasher.md) +[L1MessagesHasher](/zk-stack/components/prover/circuits/l1-messages-hasher) -There are a couple of circuits that do queue sorting. Here is the page that describes the algorithm: -[Sorting](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Circuits%20Section/Circuits/Sorting.md) +There are a couple of circuits that do queue sorting. Learn more about the algorithm on +[Sorting](/zk-stack/components/prover/circuits/sorting). diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/30.system-contracts.md b/content/10.zk-stack/10.components/70.compiler/20.specification/30.system-contracts.md index 51200d3d..3c03a967 100644 --- a/content/10.zk-stack/10.components/70.compiler/20.specification/30.system-contracts.md +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/30.system-contracts.md @@ -71,7 +71,7 @@ EraVM does not support passing Ether natively, so this is handled by a special S An external call is redirected through the simulator if the following conditions are met: -1. The [call](/zk-stack/components/compiler/specification/instructions/evm/calls) has the Ether value parameter. +1. The [call](/zk-stack/components/compiler/specification/instructions/evm/call) has the Ether value parameter. 2. The Ether value is non-zero. Calls to the simulator require extra data passed via ABI using registers: diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/10.index.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/10.index.md index 841e85a3..bc6bd15d 100644 --- a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/10.index.md +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/10.index.md @@ -1,29 +1,26 @@ --- -title: Overview +title: Native EVM Instructions description: --- -## Native EVM Instructions - Such instructions are grouped into the following categories according to [the original reference](https://www.evm.codes/): - [Arithmetic](evm/arithmetic) -- [Logical](evm/logical) - [Bitwise](evm/bitwise) -- [Hashes](evm/hashes) -- [Environment](evm/environment) - [Block](evm/block) -- [Stack](evm/stack) -- [Memory](evm/memory) -- [Storage](evm/storage) -- [Events](evm/events) -- [Calls](evm/calls) +- [Call](evm/call) - [Create](evm/create) +- [Environment](evm/environment) +- [Logging](evm/logging) +- [Logical](evm/logical) +- [Memory](evm/memory) - [Return](evm/return) +- [SHA3](evm/sha3) +- [Stack](evm/stack) -### ZKsync VM Assembly +### EraVM Assembly Assembly emitted for LLVM standard library functions depends on available optimizations which differ between versions. If there is no assembly example under an instruction, compile a reproducing contract with the latest version of `zksolc`. -ZKsync VM specification contains a list of [all ZKsync VM instructions (see the table of contents)](%%zk_git_repo_eravm-spec%%/spec.html). +EraVM specification contains a list of [all EraVM instructions (see the table of contents)](https://matter-labs.github.io/eravm-spec/spec.html). diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/_dir.yml b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/_dir.yml new file mode 100644 index 00000000..963f5d49 --- /dev/null +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/_dir.yml @@ -0,0 +1 @@ +title: EVM diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/calls.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/call.md similarity index 99% rename from content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/calls.md rename to content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/call.md index 06fc95e9..281d20c8 100644 --- a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/calls.md +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/call.md @@ -1,5 +1,5 @@ --- -title: Calls +title: Call description: --- diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/environment.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/environment.md index 872424be..2e0783b0 100644 --- a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/environment.md +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/environment.md @@ -19,7 +19,7 @@ Original [EVM](https://www.evm.codes/#31?fork=shanghai) instruction. ### System Contract -This information is requested a System Contract called [L2EthToken](https://github.com/matter-labs/era-system-contracts/blob/main/contracts/L2EthToken.sol). +This information is requested a System Contract called [L2BaseToken](https://github.com/code-423n4/2024-03-zksync/blob/main/code/system-contracts/contracts/L2BaseToken.sol). On how the System Contract is called, see [this section](/zk-stack/components/compiler/specification/system-contracts#environmental-data-storage). diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/events.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/logging.md similarity index 50% rename from content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/events.md rename to content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/logging.md index 4fd07e65..4dca5f98 100644 --- a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/events.md +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/logging.md @@ -1,29 +1,35 @@ --- -title: Event +title: Logging description: --- -The EraVM event instructions are more low-level. Each `LOG`-like instruction is unrolled into a loop, where each iteration writes two 256-bit words. +## Events + +The EraVM event instructions are more low-level. +Each `LOG`-like instruction is unrolled into a loop, +where each iteration writes two 256-bit words. The words must contain data in the following order: -1. The initializer cell, describing the number of indexed words (e.g. `I`) and the size of non-indexed data in bytes (e.g. `D`) +1. The initializer cell, describing the number of indexed words (e.g. `I`) + and the size of non-indexed data in bytes (e.g. `D`) 2. `I` indexed 32-byte words 3. `D` bytes of data -Each write operation can contain some subsequent data from its next step. If only one word remains, the second input is zero. +Each write operation can contain some subsequent data from its next step. +If only one word remains, the second input is zero. See [EraVM instruction: `log.event`](https://matter-labs.github.io/eravm-spec/spec.html#EventDefinition) ## LOG0 - LOG4 -Original [EVM](https://www.evm.codes/#a0?fork=shanghai) instructions. +[LOG0](https://www.evm.codes/#a0?fork=shanghai) - [LOG4](https://www.evm.codes/#a4?fork=shanghai) ### System Contract -This information is requested a System Contract called [EventWriter](https://github.com/matter-labs/era-system-contracts/blob/main/contracts/EventWriter.yul). +This information is requested a System Contract called [EventWriter](https://github.com/code-423n4/2024-03-zksync/blob/main/code/system-contracts/contracts/EventWriter.yul). -On how the System Contract is called, see [this section](/zk-stack/components/compiler/specification/system-contracts#event-handler). +On how the System Contract is called, see [System contraacts](/zk-stack/components/smart-contracts/system-contracts). [The LLVM IR generator code](https://github.com/matter-labs/era-compiler-llvm-context/blob/main/src/eravm/evm/event.rs#L20) is common for Yul and EVMLA representations. diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/hashes.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/sha3.md similarity index 88% rename from content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/hashes.md rename to content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/sha3.md index 610e047f..559c9063 100644 --- a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/hashes.md +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/sha3.md @@ -1,22 +1,20 @@ --- -title: Hashes +title: Sha3 description: --- -## SHA3 +Original [EVM instruction](https://www.evm.codes/#20?fork=shanghai). -Original [EVM](https://www.evm.codes/#20?fork=shanghai) instruction. - -### System Contract +## System Contract This instruction is handled by a System Contract called [Keccak256](https://github.com/matter-labs/era-system-contracts/blob/main/contracts/precompiles/Keccak256.yul), which is a wrapper around the EraVM precompile. -On how the System Contract is called, see [this section](/zk-stack/components/compiler/specification/system-contracts#keccak256-hash-function). +On how the System Contract is called, see [this section](https://github.com/code-423n4/2024-03-zksync/blob/main/docs/VM%20Section/How%20compiler%20works/system_contracts.md). -### LLVM IR +## LLVM IR -```txt +```text define i256 @__sha3(i8 addrspace(1)* nocapture nofree noundef %0, i256 %1, i1 %throw_at_failure) "noinline-oz" #1 personality i32()* @__personality { entry: %addr_int = ptrtoint i8 addrspace(1)* %0 to i256 diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/storage.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/storage.md deleted file mode 100644 index 77f0e1c0..00000000 --- a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/20.evm/storage.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Storage -description: ---- - -## SLOAD - -Original [EVM](https://www.evm.codes/#54?fork=shanghai) instruction. - -Storage load operation is modeled with a native EraVM instruction. - -### LLVM IR - -```txt -%value = load i256, ptr addrspace(5) %pointer, align 1 -``` - -[The LLVM IR generator code](https://github.com/matter-labs/era-compiler-llvm-context/blob/main/src/eravm/evm/storage.rs#L13) -is common for Yul and EVMLA representations. - -### EraVM Assembly - -```asm -sload r1, r2 -``` - -## SSTORE - -Original [EVM](https://www.evm.codes/#55?fork=shanghai) instruction. - -Storage store operation is modeled with a native EraVM instruction. - -### LLVM IR - -```txt -store i256 42, ptr addrspace(5) inttoptr (i256 1 to ptr addrspace(5)), align 1 -``` - -[The LLVM IR generator code](https://github.com/matter-labs/era-compiler-llvm-context/blob/main/src/eravm/evm/storage.rs#L34) -is common for Yul and EVMLA representations. - -### EraVM Assembly - -```asm -sstore r1, r2 -``` diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/00.index.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/00.index.md new file mode 100644 index 00000000..17115ad8 --- /dev/null +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/00.index.md @@ -0,0 +1,9 @@ +--- +title: Overview +description: +--- + +Since we have no control over the Solidity compiler, we are using temporary hacks to support ZKsync-specific instructions: + +- [Call substitutions](/zk-stack/components/compiler/specification/instructions/extensions/call) +- [Verbatim substitutions](/zk-stack/components/compiler/specification/instructions/extensions/verbatim) diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/10.call.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/10.call.md new file mode 100644 index 00000000..84f595d8 --- /dev/null +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/10.call.md @@ -0,0 +1,86 @@ +--- +title: ZKsync Era Extension Simulation (call) +description: +--- + +::callout{icon="i-heroicons-light-bulb" color="blue"} +NOTES: + +- changed META - it can be used for MSIZE simulation +- setting ergs per pubdata is done by separate opcode now (not part of `near_call`) +- incrementing TX counter is done by separate opcode now (not part of `far_call`) +:: + +Our VM has some opcodes that are not expressible in Solidity, +but we can simulate them on compiler level by abusing “CALL” instruction. +We use 2nd parameter of “CALL” (address) as a marker, +and remaining 6 parameters as input parameters +(we use “address”-like field since it’s kind of shorter type, if assembly block cares about types in Solidity). +Unfortunately “CALL” returns only 1 stack parameter, but it looks sufficient for our purposes. + +Please note, that some of the methods don’t modify state, +so STATICCALL instead of CALL should be used for them. +The type of the needed method is indicated in the rightmost column. + +Call types are not validated and do not affect the simulation behavior, +unless specified otherwise, like in `raw_far_call` and `system_call` simulations, where the call type is passed through. + +For some simulations below we assume that there exist a hidden global pseudo-variable called `ACTIVE_PTR` for manipulations, +since one can not easily load pointer value into Solidity’s variable. + +| Simulated opcode | CALL param 0 (gas) | CALL param 1 (address) | CALL param 2 (value) | CALL param 3 (input offset) | CALL param 4 (input length) | CALL param 5 (output offset) | CALL param 6 (output length) | Return value | call type | LLVM implementation | Motivation | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| to_l1(is_first, in1, in2) | if_first (bool) | 0xFFFF | in1 (u256) | in2 (u256) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | _ | call | @llvm.syncvm.tol1(i256 %in1, i256 %in2, i256 %is_first) | Send messages to L1 | +| code_source | 0 | 0xFFFE | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | address | staticcall | @llvm.syncvm.context(i256 %param) ; param == 2 (see SyncVM.h) | Largely to be able to catch “delegatecalls” in system contracts (by comparing this == code_source) | +| precompile(in1, ergs_to_burn, out0) | in1 (u256) | 0xFFFD | - | ergs_to_burn (u32) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | out0 | staticcall | @llvm.syncvm.precompile(i256 %in1, i256 %ergs) | way to trigger call to precompile in VM | +| decommit(versioned_hash, ergs_to_burn, out0) | versioned_hash (u256) | 0xFFDD | - | ergs_to_burn (u32) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | out0 | staticcall | saves the result pointer to @ptr_decommit | way to trigger decommit in VM | +| meta | 0 | 0xFFFC | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | [u256 tight packing](https://github.com/matter-labs/EraVM_opcode_defs/blob/b000abebc27f88919e0087b7604b8c71ba5b3daf/src/definitions/abi/meta.rs#L6) | staticcall | @llvm.syncvm.context(i256 %param) ; param == 3 (see SyncVM.h) | way to trigger call to meta information about some small pieces of the state in VM | +| mimic_call(to, abi_data, implicit r5 = who to mimic) | who_to_call | 0xFFFB | 0 | abi_data | who_to_mimic | 0 | 0 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime {i256, i1} __mimiccall(i256, i256, i256, {i256, i1}) | | +| system_mimic_call(to, abi_data, implicit r3, r4, r5 = who to mimic) | who_to_call | 0xFFFA | 0 | abi_data | who_to_mimic | value_to_put_into_r3 | value_to_put_into_r4 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime *{i256, i1} __mimiccall(i256, i256, i256, {i256, i1}) | | +| mimic_call_byref(to, ACTIVE_PTR, implicit r5 = who to mimic) | who_to_call | 0xFFF9 | 0 | 0 | who_to_mimic | 0 | 0 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime {i256, i1} __mimiccall(i8 addrspace(3), i256, i256, {i256, i1}) | Same as one above, but takes ABI data from ACTIVE_PTR | +| system_mimic_call_byref(to, ACTIVE_PTR, implicit r3, r4, r5 = who to mimic) | who_to_call | 0xFFF8 | 0 | 0 | who_to_mimic | value_to_put_into_r3 | value_to_put_into_r4 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime {i256, i1} __mimiccall(i8 addrspace(3), i256, i256, {i256, i1}) | Same as one above, but takes ABI data from ACTIVE_PTR | +| raw_far_call | who_to_call | 0xFFF7 | 0 | 0 | abi_data (CAN be with “to system = true”) | output_offset | output_length | Same as for EVM call | call | static | delegate (the call type is preserved)
It’s very similar to “system_call” described below, but for the cases when we only need to have to_system = true set in ABI (responsibility of the user, NOT the compiler), but we do not actually need to pass anything through r3 and r4 (so we can save on setting them or zeroing them, whatever) | +| raw_far_call_byref | who_to_call | 0xFFF6 | 0 | 0 | 0xFFFF to prevent optimizing out by Yul | output_offset | output_length | Same as for EVM call | call | static | delegate (the call type is preserved)
Same as one above, but takes ABI data from ACTIVE_PTR | +| system_call | who_to_call | 0xFFF5 | value_to_put_into_r3 (only for call with 7 arguments) | value_to_put_into_r4 | abi_data (MUST have “to system” set) | value_to_put_into_r5 | value_to_put_into_r6 | Same as for EVM call | call | static | delegate (the call type is preserved) to call system contracts, like MSG_VALUE_SIMULATOR. We may need 4 different formal definitions for cases when we would want to have integer/ptr in r3 and r4 | +| system_call_byref | who_to_call | 0xFFF4 | value_to_put_into_r3 (only for call with 7 arguments) | value_to_put_into_r4 | 0xFFFF to prevent optimizing out by Yul | value_to_put_into_r5 | value_to_put_into_r6 | Same as for EVM call | call | static | delegate (the call type is preserved) to call system contracts, like MSG_VALUE_SIMULATOR. We may need 4 different formal definitions for cases when we would want to have integer/ptr in r3 and r4
Same as one above, but takes ABI data from ACTIVE_PTR | +| set_context_u128 | 0 | 0xFFF3 | value | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | - | call | | | +| set_pubdata_price | in1 | 0xFFF2 | 0 | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | - | call | context.set_ergs_per_pubdata in1 in assembly | | +| increment_tx_counter | 0 | 0xFFF1 | 0 | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | - | call | context.inc_tx_num in assembly | | +| ptr_calldata | 0 | 0xFFF0 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | one passed in r1 on far_call to the callee (save in very first instructions on entry) | Loads as INTEGER! | +| call_flags | 0 | 0xFFEF | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | one passed in r2 on far_call to the callee (save in very first instructions on entry) | | +| ptr_return_data | 0 | 0xFFEE | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | one passed in r1 on return from far_call back to the caller (save in very first instruction in the corresponding branch!) | Loads as INTEGER! | +| event_initialize | in1 | 0xFFED | - | in2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | call | | | +| event_write | in1 | 0xFFEC | - | in2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | call | | | +| load_calldata_into_active_ptr | 0 | 0xFFEB | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | loads value of @calldataptr (from r1 at the entry point of the contract into virtual ACTIVE_PTR)ACTIVE_PTR | | +| load_returndata_into_active_ptr | 0 | 0xFFEA | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | loads value of the latest @returndataptr (from the r1 at the point of return from the child into virtual ACTIVE_PTR) | | +| load_decommit_into_active_ptr | 0 | 0xFFDC | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | loads value of the @ptr_decommit into virtual ACTIVE_PTR | | +| ptr_add_into_active | in1 | 0xFFE9 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | performs ptr.add ACTIVE_PTR, in1, ACTIVE_PTR | | +| ptr_shrink_into_active | in1 | 0xFFE8 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | performs ptr.shrink ACTIVE_PTR, in1, ACTIVE_PTR | | +| ptr_pack_into_active | in1 | 0xFFE7 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | performs ptr.pack ACTIVE_PTR, in1, ACTIVE_PTR | | +| multiplication_high | in1 | 0xFFE6 | - | in2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | Returns the higher register (the overflown part) | staticcall | | | +| extra_abi_data | in1 | 0xFFE5 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | ones passed in r3-r12 on far_call to the callee (saved in the very first instructions in the entry) | | +| ptr_data_load | offset | 0xFFE4 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| ptr_data_copy | destination | 0xFFE3 | - | source | size | 0 | 0 | | staticcall | | | +| ptr_data_size | 0 | 0xFFE2 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| active_ptr_swap | index_1 | 0xFFD9 | - | index_2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | swaps active pointers | | +| const_array_declare | index(constant) | 0xFFE1 | - | size(constant) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| const_array_set | index(constant) | 0xFFE0 | - | offset(constant) | 0xFFFF to prevent optimizing out by Yul | value(constant) | 0 | | staticcall | | | +| const_array_finalize | index(constant) | 0xFFDF | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| const_array_get | index(constant) | 0xFFDE | - | offset | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| return_forward | 0 | 0xFFDB | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | generates a return forwarding the active pointer | | +| revert_forward | 0 | 0xFFDA | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | generates a revert forwarding the active pointer | | + +### Requirements for calling system contracts + +By default, all system contracts up to the address `0xFFFF` require that the call was done via system call (i.e. `call_flags&2 != 0` . + +**Exceptions:** + +- BOOTLOADER_FORMAL address as the users need to be able to send money there. + +**Meaning of ABI params:** + +- MSG_VALUE_SIMULATOR: `extra_abi_data_1 = value || whether_the_call_is_system`, where || denotes the concatenation, + value should occupy first 128 bits, while `whether_the_call_is_system` is a 1-bit flag that denotes whether the call should be a system call. + `extra_abi_data_2` is the address of the callee. +- No meaning for the rest diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/20.verbatim.md b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/20.verbatim.md new file mode 100644 index 00000000..fdd0c1e6 --- /dev/null +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/20.verbatim.md @@ -0,0 +1,87 @@ +--- +title: ZKsync Era Extension Simulation (verbatim) +description: +--- + +::callout{icon="i-heroicons-light-bulb" color="blue"} +NOTES: + +- changed META - it can be used for MSIZE simulation +- setting ergs per pubdata is done by separate opcode now (not part of `near_call`) +- incrementing TX counter is done by separate opcode now (not part of `far_call`) +:: + +Our VM has some opcodes that are not expressible in Solidity, +but we can simulate them on compiler level by abusing “CALL” instruction. +We use 2nd parameter of “CALL” (address) as a marker, and remaining 6 parameters as input parameters +(we use “address”-like field since it’s kind of shorter type, if assembly block cares about types in Solidity). +Unfortunately “CALL” returns only 1 stack parameter, but it looks sufficient for our purposes. + +Please note, that some of the methods don’t modify state, +so STATICCALL instead of CALL should be used for them. +The type of the needed method is indicated in the rightmost column. + +Call types are not validated and do not affect the simulation behavior, +unless specified otherwise, like in `raw_far_call` and `system_call` simulations, +where the call type is passed through. + +For some simulations below we assume that there exist a hidden global pseudo-variable called `ACTIVE_PTR` for manipulations, +since one can not easily load pointer value into Solidity’s variable. + +| Simulated opcode | CALL param 0 (gas) | CALL param 1 (address) | CALL param 2 (value) | CALL param 3 (input offset) | CALL param 4 (input length) | CALL param 5 (output offset) | CALL param 6 (output length) | Return value | call type | LLVM implementation | Motivation | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| to_l1(is_first, in1, in2) | if_first (bool) | 0xFFFF | in1 (u256) | in2 (u256) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | _ | call | @llvm.syncvm.tol1(i256 %in1, i256 %in2, i256 %is_first) | Send messages to L1 | +| code_source | 0 | 0xFFFE | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | address | staticcall | @llvm.syncvm.context(i256 %param) ; param == 2 (see SyncVM.h) | Largely to be able to catch “delegatecalls” in system contracts (by comparing this == code_source) | +| precompile(in1, ergs_to_burn, out0) | in1 (u256) | 0xFFFD | - | ergs_to_burn (u32) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | out0 | staticcall | @llvm.syncvm.precompile(i256 %in1, i256 %ergs) | way to trigger call to precompile in VM | +| decommit(versioned_hash, ergs_to_burn, out0) | versioned_hash (u256) | 0xFFDD | - | ergs_to_burn (u32) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | out0 | staticcall | saves the result pointer to @ptr_decommit | way to trigger decommit in VM | +| meta | 0 | 0xFFFC | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | [u256 tight packing](https://github.com/matter-labs/EraVM_opcode_defs/blob/b000abebc27f88919e0087b7604b8c71ba5b3daf/src/definitions/abi/meta.rs#L6) | staticcall | @llvm.syncvm.context(i256 %param) ; param == 3 (see SyncVM.h) | way to trigger call to meta information about some small pieces of the state in VM | +| mimic_call(to, abi_data, implicit r5 = who to mimic) | who_to_call | 0xFFFB | 0 | abi_data | who_to_mimic | 0 | 0 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime {i256, i1} __mimiccall(i256, i256, i256, {i256, i1}) | | +| system_mimic_call(to, abi_data, implicit r3, r4, r5 = who to mimic) | who_to_call | 0xFFFA | 0 | abi_data | who_to_mimic | value_to_put_into_r3 | value_to_put_into_r4 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime {i256, i1} __mimiccall(i256, i256, i256, {i256, i1}) | | +| mimic_call_byref(to, ACTIVE_PTR, implicit r5 = who to mimic) | who_to_call | 0xFFF9 | 0 | 0 | who_to_mimic | 0 | 0 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime {i256, i1} __mimiccall(i8 addrspace(3), i256, i256, {i256, i1}) | Same as one above, but takes ABI data from ACTIVE_PTR | +| system_mimic_call_byref(to, ACTIVE_PTR, implicit r3, r4, r5 = who to mimic) | who_to_call | 0xFFF8 | 0 | 0 | who_to_mimic | value_to_put_into_r3 | value_to_put_into_r4 | WILL mess up the registers and WILL use r1-r4 for our standard ABI convention and r5 for the extra who_to_mimic argument | any in the code; mimic call in the bytecode | Runtime {i256, i1} __mimiccall(i8 addrspace(3), i256, i256, {i256, i1}) | Same as one above, but takes ABI data from ACTIVE_PTR | +| raw_far_call | who_to_call | 0xFFF7 | 0 | 0 | abi_data (CAN be with “to system = true”) | output_offset | output_length | Same as for EVM call | call | static | delegate (the call type is preserved)
It’s very similar to “system_call” described below, but for the cases when we only need to have to_system = true set in ABI (responsibility of the user, NOT the compiler), but we do not actually need to pass anything through r3 and r4 (so we can save on setting them or zeroing them, whatever) | +| raw_far_call_byref | who_to_call | 0xFFF6 | 0 | 0 | 0xFFFF to prevent optimizing out by Yul | output_offset | output_length | Same as for EVM call | call | static | delegate (the call type is preserved)
Same as one above, but takes ABI data from ACTIVE_PTR | +| system_call | who_to_call | 0xFFF5 | value_to_put_into_r3 (only for call with 7 arguments) | value_to_put_into_r4 | abi_data (MUST have “to system” set) | value_to_put_into_r5 | value_to_put_into_r6 | Same as for EVM call | call | static | delegate (the call type is preserved)
to call system contracts, like MSG_VALUE_SIMULATOR. We may need 4 different formal definitions for cases when we would want to have integer/ptr in r3 and r4 | +| system_call_byref | who_to_call | 0xFFF4 | value_to_put_into_r3 (only for call with 7 arguments) | value_to_put_into_r4 | 0xFFFF to prevent optimizing out by Yul | value_to_put_into_r5 | value_to_put_into_r6 | Same as for EVM call | call | static | delegate (the call type is preserved)
to call system contracts, like MSG_VALUE_SIMULATOR. We may need 4 different formal definitions for cases when we would want to have integer/ptr in r3 and r4
Same as one above, but takes ABI data from ACTIVE_PTR | +| set_context_u128 | 0 | 0xFFF3 | value | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | - | call | | | +| set_pubdata_price | in1 | 0xFFF2 | 0 | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | - | call | context.set_ergs_per_pubdata in1 in assembly | | +| increment_tx_counter | 0 | 0xFFF1 | 0 | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | - | call | context.inc_tx_num in assembly | | +| ptr_calldata | 0 | 0xFFF0 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | one passed in r1 on far_call to the callee (save in very first instructions on entry) | Loads as INTEGER! | +| call_flags | 0 | 0xFFEF | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | one passed in r2 on far_call to the callee (save in very first instructions on entry) | | +| ptr_return_data | 0 | 0xFFEE | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | one passed in r1 on return from far_call back to the caller (save in very first instruction in the corresponding branch!) | Loads as INTEGER! | +| event_initialize | in1 | 0xFFED | - | in2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | call | | | +| event_write | in1 | 0xFFEC | - | in2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | call | | | +| load_calldata_into_active_ptr | 0 | 0xFFEB | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | loads value of @calldataptr (from r1 at the entry point of the contract into virtual ACTIVE_PTR)ACTIVE_PTR | | +| load_returndata_into_active_ptr | 0 | 0xFFEA | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | loads value of the latest @returndataptr (from the r1 at the point of return from the child into virtual ACTIVE_PTR) | | +| load_decommit_into_active_ptr | 0 | 0xFFDC | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | loads value of the @ptr_decommit into virtual ACTIVE_PTR | | +| ptr_add_into_active | in1 | 0xFFE9 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | performs ptr.add ACTIVE_PTR, in1, ACTIVE_PTR | | +| ptr_shrink_into_active | in1 | 0xFFE8 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | performs ptr.shrink ACTIVE_PTR, in1, ACTIVE_PTR | | +| ptr_pack_into_active | in1 | 0xFFE7 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | performs ptr.pack ACTIVE_PTR, in1, ACTIVE_PTR | | +| multiplication_high | in1 | 0xFFE6 | - | in2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | Returns the higher register (the overflown part) | staticcall | | | +| extra_abi_data | in1 | 0xFFE5 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | ones passed in r3-r12 on far_call to the callee (saved in the very first instructions in the entry) | | +| ptr_data_load | offset | 0xFFE4 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| ptr_data_copy | destination | 0xFFE3 | - | source | size | 0 | 0 | | staticcall | | | +| ptr_data_size | 0 | 0xFFE2 | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| active_ptr_swap | index_1 | 0xFFD9 | - | index_2 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | swaps active pointers | | +| const_array_declare | index(constant) | 0xFFE1 | - | size(constant) | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| const_array_set | index(constant) | 0xFFE0 | - | offset(constant) | 0xFFFF to prevent optimizing out by Yul | value(constant) | 0 | | staticcall | | | +| const_array_finalize | index(constant) | 0xFFDF | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| const_array_get | index(constant) | 0xFFDE | - | offset | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | | | +| return_forward | 0 | 0xFFDB | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | generates a return forwarding the active pointer | | +| revert_forward | 0 | 0xFFDA | - | 0 | 0xFFFF to prevent optimizing out by Yul | 0 | 0 | | staticcall | generates a revert forwarding the active pointer | | + +### Requirements for calling system contracts + +By default, all system contracts up to the address `0xFFFF` require that the call was done via system call (i.e. `call_flags&2 != 0` . + +**Exceptions:** + +- BOOTLOADER_FORMAL address as the users need to be able to send money there. + +**Meaning of ABI params:** + +- MSG_VALUE_SIMULATOR: `extra_abi_data_1 = value || whether_the_call_is_system`, + where || denotes the concatenation, value should occupy first 128 bits, while `whether_the_call_is_system` is a 1-bit flag + that denotes whether the call should be a system call. + `extra_abi_data_2` is the address of the callee. +- No meaning for the rest. diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/_dir.yml b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/_dir.yml new file mode 100644 index 00000000..c8733bca --- /dev/null +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/21.extensions/_dir.yml @@ -0,0 +1 @@ +title: Extensions diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/_dir.yml b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/_dir.yml new file mode 100644 index 00000000..1117f7ca --- /dev/null +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/60.instructions/_dir.yml @@ -0,0 +1 @@ +title: Instructions diff --git a/content/10.zk-stack/10.components/70.compiler/20.specification/_dir.yml b/content/10.zk-stack/10.components/70.compiler/20.specification/_dir.yml new file mode 100644 index 00000000..3cae00a4 --- /dev/null +++ b/content/10.zk-stack/10.components/70.compiler/20.specification/_dir.yml @@ -0,0 +1 @@ +title: Specification diff --git a/cspell-config/cspell-misc.txt b/cspell-config/cspell-misc.txt index 734aec30..fa5dbda5 100644 --- a/cspell-config/cspell-misc.txt +++ b/cspell-config/cspell-misc.txt @@ -1,9 +1,14 @@ +code4rena Code4rena Consensys Cyfrin +danksharding +Danksharding +decommitted GRVT Hola Icones +immediates Immunefi initializable Initializable diff --git a/cspell-config/cspell-zksync.txt b/cspell-config/cspell-zksync.txt index b6f246a4..c913f9e9 100644 --- a/cspell-config/cspell-zksync.txt +++ b/cspell-config/cspell-zksync.txt @@ -2,6 +2,7 @@ boojum !MatterLabs Matter Labs +!Hyperchain Zeek Zeeks zkcast @@ -10,7 +11,11 @@ zkevm zkforge zkout zksolc -zkstack +ZK Chain +!ZKChain +!zkStack +-zkstack- +ZK Stack zksync zksync-cli zkvyper @@ -18,3 +23,4 @@ zkvyper !Zksync !ZkSync ZKsync +ZKP diff --git a/firebase.json b/firebase.json index 1f382037..72652d10 100644 --- a/firebase.json +++ b/firebase.json @@ -75,6 +75,16 @@ } ], "redirects": [ + { + "source": "/build/developer-reference/intro-rollups", + "destination": "/build/developer-reference/protocol", + "type": 301 + }, + { + "source": "/build/developer-reference/zksync-overview", + "destination": "/build/developer-reference/protocol", + "type": 301 + }, { "source": "/sdks/js/:path*.@(html|md)", "destination": "/sdk/js/ethers/v5/:path", diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..6648d5456cf55fbc1a12d82d3f74b3a802a1a97e GIT binary patch literal 819 zcmV-31I+x1P)`5KFoHd*=<3AWT#&l<@j!za@7!js`se<&ws=BUprJ*0Tv4@x z@U(Dny`Y-BE9_9x(YWxr@PH;46uvk0ScOX_rz-qqvK9^nz|tk`Ox19#hLyCI6_%Id z%4XJ--}{&^X;0)9<|X!u_n;GE3O`O}m?VIYA;x6(;l|6Ltf-Uk`N^LpFS&}$DjR65 zk|Irk0a4eadO~7S^n{EI8)pCi_Ek>~dn?u3{a}4DjJG~$-hpz_Fg}kBqkIC5&v2Ei z=I4)K^j-8~RdXGJZ3`~0t6FRiF1MlkNsVgJAE{B?l1#$u8FWOzehaP3m7e|XbNUG3 zP5G)D*gt@NId5C}25w$w>AgYehX4Qo32;bRa{vGqB>(^xB>_oNB=7(L0a!^yK~zYI z?Uu2wMlcwL>*OR7iMR<9yM>!zkr=EJtGEi2mDTPBEPt4)7vL6*7{qo4iS(!a$dUh? z#W%KZpQriS24NgW^vU}ADE$#Ug1-rfC8k-!T34dWB&~&kBOzd7f#SM@LzfhGFb+<9k(ACCf5zvyvp` zc~0kpAlPPQS+1&T2YeI2bY0g8A#|P)qN*yLIXciqy6^ja-_t9zER!VZnA|xSXK-vw znx?MnZX@$NM^RK1#pzmv&`FC_Ro%6vZCg##cr>U*Oh*s|SK7j(Gg@RAMp>53N6<7) zUDuA|(1V1KuIpAh^O`cwfakC*%d)IpIF944>v(j;d&#QJ%;6!l0{`-se2p++O`T>;;T)nA^u1Ej?002ovPDHLkV1n=1d%gew literal 0 HcmV?d00001 diff --git a/public/images/developer-reference/era-vm/arch-overview.png b/public/images/developer-reference/era-vm/arch-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..853edda8f3c22df07936f5b3860b10de8441a130 GIT binary patch literal 57728 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 literal 0 HcmV?d00001 diff --git a/public/images/developer-reference/era-vm/arithmetic_opcode.png b/public/images/developer-reference/era-vm/arithmetic_opcode.png new file mode 100644 index 0000000000000000000000000000000000000000..5aa4c120e425935eb27f69b64ef7cf84c3e323cc GIT binary patch literal 15320 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
<21?s~i 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 LxL$P4?BV|d>57~< literal 0 HcmV?d00001 diff --git a/public/images/developer-reference/l1-smart-contracts/Governance-scheme.jpg b/public/images/developer-reference/l1-smart-contracts/Governance-scheme.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a8e0af1b511e7e571db8d1d2f5d85cee65988d9 GIT binary patch literal 185378 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

EBZ>e6t5OvL|FFjpF_uKjDMlCp6G_xfN8nK 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 literal 0 HcmV?d00001 diff --git a/public/images/developer-reference/l1-smart-contracts/Hyperchain-scheme.png b/public/images/developer-reference/l1-smart-contracts/Hyperchain-scheme.png new file mode 100644 index 0000000000000000000000000000000000000000..a66bf1c41bc5cbb387ec3792ed7c44b4e9b8f4e0 GIT binary patch literal 107064 zcmd43c{r7C_ddK)G#KhrDMN-PO;TnuHBl)_p%4j~hqigvs7aI}8A}Kub22s}^OVe$ zF`38Azw_Q(J@t9M?{WOz_xsP=aXin5?cVo&UF%xcTIV{~dEGaTDJd{5VP8Tbk(dr0 z+^<3+F?f(j3&a=E;uFI}wUzkKVylCvtw|*2cf|i_9&BUgz!j#(Cr{a&I(kG>&(eH{ zuD<0tgB=d$R=Ao(l9F|>($zCHu;DppU}$V1&DWoq%g1A^FU_Yea&+fWt9=GW#s{6q z1}B`9PU<PhJH$;vE|a*)Ig%nfXGc^u5mEUYCRr1>cKmBi1)#{zt~h^&8JQf0sV z{3ZBJn$O6_#!6B^z~0_|hrQ4aOR}NBE(r+m~Q-TNA%hA9BLr0_7L#Z)V1nCt2x|tqo2(S{X?5sTf#W+LHAQ zD0d*fG=GzQWCL9r1AQ66or1#rJ4N{gMWh7&^(W#P|M|iJ2b)9sGWy~o;ycC8i}MSM z?lj;R-X$)`ue(c7h+jhAKvzsuTx_R^$obzlqJHJ?+sL28T|@*$1Vu$8b_wqilfeCc ze}VGHzpp=OX{%>MOhrcU_htY2jB>4%0AXD-W2#Xozsy_Z_cy2}qh9#Ovi#pKmA>BZ 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


-3{kZt=xKP=Y*r2aiJb!l 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

}bH$k-abSBRQ)~ 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 literal 0 HcmV?d00001 diff --git a/public/images/developer-reference/l1-smart-contracts/newChain.png b/public/images/developer-reference/l1-smart-contracts/newChain.png new file mode 100644 index 0000000000000000000000000000000000000000..4b99b48d5801f7ab71bd01044699cd33db5dcc6f GIT binary patch literal 40345 zcmd432{hDi_%}=x5|TvLWGh5Oc2i0sOUjmQD%p}fjAdq0S}juwm8~MO4%r#TQYPC7 zG1eK3G4`D?#>~85zhC~(^PKbk&-;JQ^Ssado})wGbARu-@9Vzq>-t=u>$>LUbqiyj zgCYl6SXg*Wu3o;u!m@vig=OD)&I7;`t;eUTfL~nxS8oNeuy70P{$pkNm?{iBWDUAu zY{*iC6`KM6!|rj>{2~iW34(j)&VCk_G-Z>^7p)HFV|Vw9J#n=&|hPhC^I3j~-2p5c0Rd)iev6P@7P@>EtDhO-N`T6im7H zw5W(cM=}!=WK8~_e!PlfO`02!u#J4h3ZLQ4#ED@puZQ+FVoQm}5@D12d+)0&@laXn zISJ@RvxtRqp+1I(+}~k6#p+@=7Pwq7@#dN4l>N`UdjgIBuK7x8_f1>ny>S-z zSXBQ0eS<@|;o9Fpe^?JJ@9i=85i4qM$KtnH2r=d<=SjmC^qD(rUTagG|FN)e;RekM zw++1e3m%RHV7~TRg7o2C&?;iQZjT1esTb?-g-3M|9)uy5bO0Mj+uOHvS8>rJ`7OqC_||i$ zJFvxSa<-@+N|nGY^n)rg%{I2b7{vs(3n$55hOc)Uuc@&wbBI5@&f9YFo5eI1M?`>N z&wcotmg*>YYJ_1>i+gQ>z-NQuDkg)rMz{WrVZ7sSN~V1H?ebSL>Z^z5SYWG@t=gA4 zz?p^IHuLN=>`UtpGS1#HL>+F5?) zbBFU!K6IpA_=$;Q?tPC#zWkeeDsd%)UzN*Sa9s0CvaaBwYfEe^g}>(JXDrV1^raK< ziI?*Il4Noq#A3_BF~z=~KW{WFwf|h~9ly}OhbA(5<=%chDB;7SLmc0|m;ywE)`S0oHvK<=RdtsJ^4YH^4It~BH@Mo7;&@-0s z?VBP#cwm!zN+eSMERqH7GhD%3BPD|+Y@*gv{OUgdSG}#0X}7mjo@=f>XP5unw1kFs zyjO)gN9sz&@#eqc<^$`m{*t!an`>|Q-dg@k&w1E@xkD(Up_T(~$<7S#m4#N|96x*q zmUMb=BK1@s1>gKv9TX;oK|wRqZOZ0PgcJ}JcHlN{xZ#6S**jMa$F(+UH`$ly=YvBG z1FjiyX6(Hx-MhUp*IN@jcOF>HLK`5xUV?e^ui}GaG0XH;brW9Nb_P|Q7$$^9g2bPB#5da)oC#k@-^?{quBS|h<0^pLDhtwgDhz$C?$6DM102T@` zYJhflLEvyF|Hl1cy0Lq4B7cgx;0I4>rg#@sXW!xMboIs+nd>%7BlHs3 z0+bKNifSsG1E=jXQl+{iO2IHz66qqbZ5sj>T2kVGR|$*wyQV+jTA4We=x(;$3AyQd zQj%k!8#N+|F7GJ`TvmqZDTx6jU=B6t)5f5-i#xZ&k@0`6e9y1DECi`_erBsBEWz>1 zGTqo<^^H0JoFds0M>R+MFV$>K!~_Lv+K{dDOT`Fl!mL_012=Ol%*h#W*hh7*8_>wS zI<8N*4j79CT!wxS)~&cCyW?T7_90Rc*&bq_9?VseFG#R{T< zYF|{XLImGpl=WJ)&k5WP0$Z12x|Es+lN0er-cw3|X3B{*isD?z=lqqgPmp$!KkHE&Y55xrOC_>4 z>JR5B3v`)}MQlDLzY4hZ9C`*M|M!Tj-S$Uv9G*ThaOAdeaESG10TE+aojk!YCChff zym77`{yR%_3LyhC9?&vIvp-<%A#m(wu6W;2^iR^kfX4w6ij-#_hmzcMNv1(fetD?D z^Phv+aW;jqt%Z8Iisa|SPp0}wFV8Z52v~N2iS|RP?j7$@l2)CPZ(G%l2?n?YqAg(vlUZ zCubUmbow-g`k^MqHfQv!GjPH7eQ8>tqWC5^$yPsA_c2o|G;)EP{5i5j+VH=fU|zwa zrAM4`?NL6ubNmOB9ZRD*Be=+3AC5F?Bu@4*7UF(vcT3mVSpNoXPiIzt*W0%cg2~ED zJEj~x8jxBx`Z9(?OaPIna`kXavSVY}7v$Pu`o^$+=-xe1X4~RDW#> zOAY)jA?Ih({%&~4|`AyO8p}j!rz+1s(@e50ojGamO>b#E)$;Fy- z^D@zkJkV~gnRbDyBa;G0Fq3()82eb07iJrf%p?uH7J4)#da$7Vy)|6m{yE-pO`_ju zO}PX_Q=o3FT}p4*GuW(NUW>d^1p?NQKD&85X00JiW(ScMhBaFMpkjG;IC;Q!y%Z57 z)JNId^!r0&x{q!rU-&qd@+n!gu0^GOYhrz{3szBYW{phdHxy_P&@sMt{IN$p;?YM; z^-m(dwZL|A313MdmVewKZko+Sc8$F-8hRLI{^l1dm?w;d;gV-7R^7H#B35R=SIrRZP24wk4KGChTT zLnr=)C>rMg&<;Sq(epu59qOsw248P|8cp%M)T=bPFt-vF53+8Vj~@S?@pnHWj`fjY zAN3(V_VhdmeeE3}9HU)@AegE!K=JOEVqa8K1oxEC#w7WsBaEc~j8hzmse z2fTKqzsNa7&LZ_auff)BrvGbG7?VcG0VH+2>Y7ME#e=~FKPRWja(LUj(_TGUCMF_g zyYtxwmh2Crp7^YGYe27ZH{zj&io!XT zLw9ak>LY+j_+je;k=@TgNf}{N zA9myt2x~46Y#{Uv+**nPOeMYo4OL&Y`p_XC$w{al_=RI`Nis7tHm%UHo0OQ$Zb`=S z^Bs}ar9;e+9?wbI3?&_@E@HLyBo!Kc8 z=}S2T-TEQV%P%Eh(E^#(+bJL!=6ViD)=Oq0b2>6Mp4mSWbtdlEPLx?6-V+{oGpL^7 zot5dZRNTzlPFSNY?*jfCx{+wD@H!@a$#Rzud#gS~g>Bc}VL|dY<12fn8!=>v02cF{ z+I&%jr(pA4){vNLcV$xRWR@)zW|eS15>&Sa0QMg*Kn*ker@ihG5l^@L=ud@QuJ(8y zMh3l=GdE38|7cam(PaIEt-OsAlVDAx&7^g)xJb9OtDsZSYH#AR-XK~B8f+rGvSMbB zDu8C-N+y}d8(GnO)Vg2nKW->SqEDF&1FB30VucqaZtY1siJ%tQxJWZCPWkw5&oS>* znT?}pKDzFO!qsx?go-u#I@S%?fV2VZzS}2togeTyM&qaMv9wTpD;OI0HcN!bd%gDG zS#@fH0BcbP*`CP(tV%PFq^$T$N%@6^;6dC2lb+k*3@W+zDu!^dGrm*+ng3*iV&X?T zV{+*YE9#24LEu&i0;)ua2e`6_ofuwE4QlOYGr@DmOQoO zho*0Cd#fYc_4>i67TEM9$@^O$yHrcgnDk6Hc%MMi$ek(4=p;gAA~+(vdG1Cn>v<$0 z&c#mmxH|Y@w^10lk-%Bf6-n}YX&YZIxI$?Sz=$VfNKlBF(6Ao`>KlfZ_0l@~2=^`M z_eGAcgqk3B1kh^13S8_{esx#u8f#x#~0w52X& zCMrGY$;_&^<*ki+ch*QhGBgj^0ba@uzG1h4v%#aE&CYdQ00$*0-AcgfE}?dy zRIOe1ZJkD7!k$x_=uqdA4?zItTU+tBpwhCe8VDKmMQ>*lk%NcEH1bwB_QRciaDxO7 zSpPN>bgoW7v~d&-1d-}R%r2Kpfw^?Pn0|43`3o1gU;HAc9V64Q1jQG%(GIf1t+<9J zWPP6%y@gNR<)x?_k8wFnDv0Sp7jQzgPHBAI7Wqk8*%lN4qg9 z!MT!;Tw*`tks5G??xB49vdz6P^p-Z3AFlYr2!W4JTRTd@Kvrrb`jY#Cs}LE3@o=`Q zJ!3Ji!vNb(^}wqf5nf9#*&cdw1x*Z##UXYBmkrBziEwfy%^=<_%sh_r@f6zP9pT#d zL&(!BBErKeXq7XBuJ7}rv<}>=K{Da_cjtbREi5huH#l46#!h=K9%7GZNR63sLh*It zMN7c}seQOn2yb|VPjc4hCKi`WUikGD<9(Wps}pe=@as_^Gsd_iLyGyvrbUvcOK;7r z?*1+d(gj~S3-}iJ!cg>q*vkD{RP#z<@%U(R~)~tnP*xs!T0uC%cuK~R%A^M zqRua8XW%LWH_rD3Sy^GcIU(lb=Ybh#nL3$IlwhJ1p$xHRWVSPB2R zg<4#xIgb1c5OgyuAB~N~D401J&L&rIb;e4YGJ0oqXK47_zIfsbOIB-2@>-)PV|KGa z=afp!mMH6d1d6wmkF=p}r`Hlf9I->BU67AY!z~NP1YO4~cikyy4zl7^pBQKpe3OvX z*tpb>rlz1<@0|VYOWi2i9_pRnh{J5vVZGH{OT>^uE4mrDj1U55WvC(C$(jQh1Mu$l zbd4;h>EN9e3>n8&AtaO}30?2rj#XEn;yEZZ43I()dT z&%bZBD)4ZFq-Zo{hrc0k$LiRy0F}Eg{9y}02)hJbo z1w)c@y$DiK_y~*F8@A^!4gp8nm~QvxN6&E)MK=tW<~GjwgOF~jeD?6|=CzLwung1d*qk9@ z1g>zE@pHdh5`vO0#yuQIFK|IE@*pEfxJ&g&*yBTShMTsD1hSfom?bqh8SNob=dn0f z?ws&!9~&f22UWag%%-{T6~tBV^-5b_9eIoGq_5K(6}v9J%jNekCS*Y}JH2^r7T7th z23?F2^^kDX9rr=}J8(Ov-1fn!cBB=`Bln0q#P`c==!E7J=~@i)zBi zn%iZ8x=241hY~vJifjaYS?4J7%)F!Gop9?#fgfu_l0L%@Hc-T{#jnnl^V^e7rD3*h zZOB@{T_JHH{~EPfE2#myQ&`EHq}K*{#0DGc)(4PTn`CW_!lSKAF{E#gmw0G5(qGmW zIE^+)Dyi}VocarwqNt^IWB{p6)rH9!5*A0KxkKnD@4di%4~amWJ3oA)cq+IAxvB9Y z4~lPW)ftuP+@eeiKaMeEO(?q^&k_FY!&i|KPk(Br5ccVh!N`N>+? z&{E<%86E?eA13nl7+oBl-;U&3(XH;oX-W_&;nB;H;=lAHP_X5imJmm%{wvBGR7-bY zc_MD2f##gIz=mw?vwX4f%ylX?Q6<|LO~nu8{-og{qrr;;Ce4G&CL(Tm0x7E;R^UF! zPIp6K0VZV)a_JCb`K5{1gzJl_SD}lDW9Rhx?MOOAt2c-H{M^_VRjc_l^Vk4uLc*oZ zdKhqXjkrTyB~cZbF1wLMwnf^<1CEjFMcc-_pJAwg`1InP zH#V?Tknj){A~t-#A~Gx@Zij|uMliM;`Cw;Fq;FBt5neJeI0qLGB9EsZn%EwcVx0&E zZ>8f3>XTwJx(SGI3c0)(iL1rCD00-G>wHQ_14P9mHU@x{A>UUxgA6YMq3iTDJGZux z-B~*kD|O+_&*NXyC^0L#Ro!#88|68bxXLT-y!|pmfY)B|PIE^VK3S<5%1}Kpx3RN< z16%r`R;~=ene?|=AK$FPJ`ztUzv7*V9X<%j<%x4ycU4Py-w}_X*dV7UWJCd;(I8v^ z8j>-QzUhY)AmN1S{WimI*1Ia0u3#<-o`7p!p3_!1)ZPaL z)|ilmy-(gK>BEiGC;8aPyV!Nl22hOQEz9NCd#(c9Eze;|gmEv3?z7{%GPNf`$(8+{oBs1YpW%mv&Kz%|Za2MU~ zY^|6i;JJaomwkJT1N7b{jFh+zfZN!bwr8WE1bzBo2K|S(Z79K>f*o4Fer%FNW=1|YjPfQ35&iu{TQ{(=N#ED8|P z24YD_)aMS-$1}KU;m|oRC#f$3&>)IO9iO zzF7~dPyJUNuZaE^lGgv9 zE91alzR>GO*g~3S&lyozQu+?XqxUV+AVp?lU5E%uRo0qjeqgMzVq|h}7CcJMVuh@H zHUDSl&pr~+RKJ;Zd87pax@gcGn)?zCqf@*XNcih`_@pQmeLPp-(AZb2$Dg)pjM{si zCXasfvr|Ut7Vh-bNVMzGoa`v{xn6AXRs|_6LU$Mna@IIC?3QW?XKY7`EmZk-v(40` zByCiS(I5oNjDONne~N-&0d-Md{+whuj-!toXq@CZ&j#^2dg6zEC_c`s)!8zuC@!UE z&Jk~VEr!N9(LNq9LfGiZ_wul(u5Y92(tJq0a|hgN-)<6g#lwGPsl!HmeF`bduKB&q z2;^dr_U4$Um3USqaR*PIFQJSQg4EyYn$k= zu65--Upny+O&wb6%|ZJ^9kzexiSL8tk*X!n@n$3_*Lm6^FkW`0lZ)~}wI5B4s^F_7 zy*;U=;T8_7+x?ZRT8a|jw{XU^lt8Z#2z1V`_P8?V^$mS;higwO#(enBA!QjSH9uRV zYgvu6vY}En?dAHitM{sE2jdUFKK4?kPnY)E^mf>!*l!EDe&X8$sioIq=#DE}vm;-! zyQ|`U^LnlF^`nSaZPOukLc8KRCqebe50B z8ErHnaJU9iAaOWkGh^X50{F)=;RYoxb=cL6+Ue|VwYs$4s&9>|XRW+5EswuLq`gK*8fYhX zDy#jQ5B7opB`{Z575)sX(%wl|Aa#8!PeRhu^KqFyDW=QX9=OMIRfxRc0?1u+-W)IU zOC)IZ86FBDVpvw!%wgzMB!ccf=z$9%-KJ-qd?Eiy`T4ZXy!@Q{kZ+&K&w#|_(~^9y zKSI9c$-hS0{?-g?$*ITyZBic5DJIUMqLvRF^FP5gGP+iO9)?Xlj{4V*JyQX$7kkWD zUEf$$jf*tDOs{B~V_(u@+e1Urae>f+BYxHa=&D*vsK$G;M>q})Ut_C|yQbh9z3p`3 z+hz)(o(`IHa~Sjmud3qd_Y9J*&@|tFD^r>4V*HzC_5z6Q`48Q+mSZl>8fmkcQmGWLeq0_6|a5(W&%!!&2{L{^IBj1kZtioFLEvHDr z5x#FvsHS>9_Trq7L)Tf}&wA~n0Ysy6AG)t=Gu`#Zz_d7c)Yp2b@-C^jd_$$$(-wao zGw?Ef-m0)Gs}QL9s{dOt=mja==OQwW)grwRlLN$hT}N)8>@vwij`_gW1b?Xg=2HuM z3v|%q)t{AxzgRaqap@V&v(@CZRAr@>3{7T|*j?$Q>W6qQ-Pl&0}714~;_4itCf}r&5C-mUPVO@zPp$c86oeq!Q+@41_?qHn*q2wN9pghvPk9D1&$*hJju%{fu}31?7hTQ|Zz4zl>0b5we(ebpk=d5|I-P~> zij1u{AIJZD-#-`}4y?3idAFYJ-_)3UL|^q#_5Xbg0F>GRWwvxz#Mee?6h9A<6uvsaKps0!GF zLo{lFgHfzza(`6Pz~4SRbpB7)8)}4An#K^rH+8i)%;W~M0OV#R!gHl<$td1+bAIrW z4zU8z3%3J`5I+x8b(%*E^8vfRaJZ@SO4gfoq*&g zf!@0ndpvv=O$sK>EPXpf%80)B2A3jAh6i4YqTLNAQ~=@1=I?|lD12xaqo_yP166pt zLn-*pJ|O&Q6lS}eOTbfr1D7PA{r-{F?fw6K8S4L*)Yx9)ttaB%Qc1*=qhfp9!_0AE zjqQ10`Py9uxWuFp`aK=uP2=q28SfLG<>M+*iACTtrL>3h>koIm;MGz9FyzjCHJ<@4 z`PVn@KZ)Kwfb+Hh@9cCuY+wld1LU3t$z{BD7eAZHd5!W5M4;|S&tQ2FfJY`qSXu<- zqz}!hq48x>XJCts>n@Ir*8El62N2DDXb0Q>tlb~$_g+;K8nNL#Go%rklNNP$C$$xm z<4Q@v&jmsI?vTIo_@VU1g2MX7$=Td|+GoeiK$>7_e<{={X5<|*L(y!=Olnn>E5 z2EK$DDw&Nkpu*f~zlrY64F5o?DxYi6-|TedpXKd%|8S=sZiP-Wm{I9XZI$1wTB@RF z=X@S}s_D|o8WO#fWBKt-7po9|Tl-G<+M1Wg2PZwGlW^7S^4e;UISX^8jxP^{)041J zQEu@U{U%gV-vd>4G3mK_cRwo2YU$^MAttHN?;kUDBgp!WK#OgDG5Y+%{KLWZ(jNGS z$jG{bHDbRjVh+QQ&Y_lU7ww^co`4IPk&(TnY;e5_oZ4Rs8 zc#O-fG{wo#W6J5pe4XiYOPyPHb=KZ^_uQ_j-l_~*JG^!IvHAdj7Ad~~9GIA7aQW#< zwz}6uv^rp=cac@#b5hdC#^sWcyd8RMb52%uM#hI0#Bd=4QkH*U0U)4PM zxZMb|`;uJtwW-e8l0%7O*A~On^lL)^+g$D2{T+o&c2ZZYOngc5ME97+Bxt$h(FS4V z<*hL)J_?&F|G=bKn!R&&4Wg`k+`b(EIN*{rcT9IsM!G3T3Cq3J7FJ)TrSkmPa6Hsy z<;QGN%RxP`V!Hj?snjqt9cq=su((6t^)p>1lGkIKs}aPBda9jrtLvKnT#I&|fw4{B zniX`>5sKZ)+DGeLX$jbMgEs`Dlq6J|#=fUyM10~b2V-qUqFX>(+lpa>olB@UPew2< zF3x-bh~ZF&kGdOW4+roZB$5|fvnx>2uy`|oN8!({(3K&MUb?fQXpydPq2GX9)M~lW zZ$0lG@RaGIiXJuXWCP)K<=W5OoJr`oJ?93}85)W|udFxuXXF*RT@jrzb&OEzn@OLz z%Z@Pq2@Mu&n&)z*C{@r#ov4z1lXl_^YNU&@OSM*p9o9VTfkD98$^lRwtq}sJtc!01 z@RKvh^WSGY$iaET$S?ac$cP2&;nB#5PUo2cdNygTMU515JQaxs?Tnz}uF#HD08s-5Lxgc`N@%Pmw)_sHfxtH1qy~H$w3GQR~ zG`4BAed9kXRl4rXA2aNk28kr>|&DP_)zTkZhX?=dkt z(P3Y9OlqAcx?jj8#9Kn8k%D7r>mdsQNw^7tp-%r$jRWhNikioptrTAI%A|!fg9$e5I5Fi1fQ|H#I*~T>qD)l}_u%f}|XGRMn z+PbW4Qu)#au*c^}M3utc*`Sa`RLW{i^b(cu8vx;Gu3ZnS5K+i!ev#9q$Y0*f`9^ek zcV%tA1u1Tu!ry~ccsv?mv314QEszjXBJWKpD^u1VYu4i?s z+m4}4FxEZVv=(*ZvYZ(MAIlxInac(q+4PCjP}Kij}=5_50H|^?ytn*!_KLQeh$5TNTEmDxa)yS z2F5;Yc0>CDU%{ni=95gc11O`9_)VuGg5c*uyU>iOzTS|-J)vEchM})MjUH&3p;qHz zvE4n-)((?{Y~4OUlxNA6S~+4jeLm>Vl9MwyR=K#nJOHpX)XMpqOV`pMB;29uwgsKh z+TWxnAQmik}CxqY9Kac`20}tF3uB0kd|P5`gWZ_n2!>)>qR| z?yeOivMLrdd{PNP{&wG~gdnC!R_Y%Qb6FXfMKJ^7x5Kdm#tzHxD5~JYrwzmZQI1Ug zt3`K}oBa3L4t-HlZ2IHoj4pWI68+seS`t1Bp3I;c#GdxOc78|CPCr>Ohs%u%d>j#Q z-<25zb#AhgBTudb4!_Ok(^cX4ZT*z5tgyrHm4EVW?P5N}v0>U&ZzT>hr5FWj)D>Kf zx)2ue6n^GJ_Q!PYBTDTh&`e?Zp|z1)sZRiZ`+ifTmd5+GC@^08d2DGFXG4nl71I~k z0n#zm2Od;;r1InC>KO)2xj?1eo_#7nOjArlGh=NwAR1x$&H0e$x^UIuHHXuYn8~}t z#`;xtb$nesObd5&9R<6dQop{nu<@yzwGkbb`S7;SuQt9x$TyF@IHr{&NaTIW_3*1L z0B08N@quh<-|(rW@rwb>PVTNQso=r+n-!J&q@rcFWM9jkC>(X^lzLE|cD3xp%Y### z9$q#_Y;e}E!9%0?XqxczM>Trq$JNv6qb(9NYv0Br1d0u-?Lr7$RKKX% ze)#0ga`E9f{QTP*923SbfypWg!Wv}P^PzWaDE7}SPp4&=8x_0g7A1}%D!&W{sgpZ0 zYbg=V2%6~AB@$@>Gawm{fX4dQMaEB5?-LSgSdB}K99fV292G3Aneo<#M`&R~JM*VS z@bPpGhW>6~c%x4RU*OY?VDUoN@Jqi;zge(cD>h|8QHsh9$ZxMDj@npJ z%?G-0Rr;HL`Ev+9>++!#D1GkaYn3H$>x|@xQrBCj^MV!it}kuIY8G#U$atoZZT+i-Ro zS^q`XUT!(wh3u^2gQXa~aO$(G!oQj|=pU+^zbTpWTHDSIv}LXDZ}2G)R#n_kovFdC ziRF=cxc-uSa^Eo}RPDGy*|}B)vf@&xn@{yp`VmVGL!CX+PLDXF=Xt( zu3uY`Z(sqQQy+Q0NFIB1pzFRRas*rCUPMqrth=~A)7*No_h%warQ=vpWpCr=c>5|3M=oY;pJ^JuBBe}k zlV3pV>t(xjj;M5)DcTiYQ_Q%PG2G(>89XzChu6qds=aix&dZ z}yoKw!5IM@AMzU6bdnRGcfN6HQOWc}h#qy5-Hlb=sHD}G+itK0bIC$m{{ zD_?ZinjEaYTgPeH?qkInhDHSj=+I+Rf{-iteGrGz!}UGqpB@Y{ba+fd3bMi!2e6rm zZTHKLOjO2j@3-z3NGA|BV#JR1COu;;F5I2yG3wHPt)llEOiz7c(LwyZRCg=pL;V97 zEv^iQ*R_o@cH81Mm$UaVVyBc{)(!ldog8){krX9wM%}Zr6CwID- z$6f{5`Uw4bRn(TnG4AM?j!F3^@NqHI&~E42l6Xhy_LwbEuB0qUPexln zS9GPYUF@|j1K-F17ngr%BEM~UTlv8P;!k|`wYm!F|pxZp3=49Hykyv z59xzDkv@UlCtt{_XYc!1thJBW@Lnkth@;-*6La6mKOid#4(e6R{{&C^f8^e0{ikbZ zP_yT@E7ObEbe;<wtvRM#6!@ z`_nO4nHO(M;UWW zTJ21SaS@iXG5ypfx;^@P)G}r0h;30=HX1mhjSisJkGm~PjfhA7s2v_ znyh%FKQk|!<34rO;rb9j54jRt(n6rM@Vdc|pI_;Q`%%u1-&g#yU{b1CTT+Nm@^VX! zdI9x3f4=Z;OWbfB&Zja^tWd&Rk#^p`tNXSA&aE)D)HZmv8Xkf3nn`mWW>&d_b?5}T z=W^W=RK;iTyDXI24pwHIiJMy)@PpHa*NKu$tu+58E^5U&J)j+D258SS0Xk_qL6$&1 zH4V<7?pFEgC*7)eaI0qQG50Ew-q+Wch}rsOY>?2^eEk@*e2FwSe|z?a_w4o8AU9hl z`y5&O9W42+Z{$e@kjqFY{fk>&e4~@9lQ5YQ5qY<;GNz(L-=I;@XECqn!P$%28An}t z-&pLvVeRyTWVk-kMWclk2hVB*R~`343-yI%E-ba22BjtI#D%BRHx+f zK&*q?*NJ7L6ZG9iVduz|pFSKUgu%8a?-wot*LXYU6ju#bb?6lq%K^!YT2Z>RADhw- zP~;zZY=rS6>~*I6t{y2BrIg6}6Bcop;B?6oWYBjxqUy>*m$0V8i|(m{TP$5#<=hRmxXO0uZcYTWU*kPewj4TG z3*&W21PR(Z`QNrke2+6qP%k4H%%4%V>$|_Sd}Xe_|MTnW4Xj15W+}p4;j2iAedw%xxUng}~PoqI_s1u>H);3+Z^_ zKXmCa4=1m)k)W>1)%!&*2yKfCqTlr>nDLu|FJMbP;6hMERc+s(;9A!M;bL5JE!3zv z?9!rl=7MmP)}4s4rUrn3O#?8OJbgJkrswvA{gC+E7=cvutPDWZne_O30Ig{~EZxRC z@*t{-Z`wYEymp_PoRwj*w?CK$8);?oS7(KK(KF38dIwr2 zBNWEH@*jUY;gQnWBL5;=Wap!Ikx3;`aKKyWnHMg4PJ(C;v`xV`OHpDAKE74s&&0Oj zQ|B^ThxbcGR_CQH4XR+}U9H(5{V{7;dn;Km9_Q)RJH5q439H`{q5WW7PSodQ zTAboQ0PFO}aXR|FUit!T{q@VRiO``D|2I*l@FB8O<#d$9+;{N`A>wx>@+*4IE9Us( z%OAH?rsQ7+?6N@No1xBOg!jv+e9l=ry%M=j{iR6>A?3U1Jj!k##nM*_kW~BQ*KM3? zdVimbFMB;ZAe6_>k3$wSP4)M=?{iy}o|m08iXMwv0xI!WQTP>%WX7f2NiS{B?1(j< zl?vBJxjQHACzguC+-uzmEN^3pP@wqD+pOi4!D1Aq3gI{w0F&F98rVwrud}*#JZXGl zpU|;9T2pvIv#=fq=~YP6!_7F1h3-PxPI>rFfh2v(6*O?n6{smiC9ck1V;>;3))HZc z(~Ju0mr7mEq;}5CTw&w^#=?sWAcw3zIT^Gf#~hH=`^s6PN#d$$AI`Sv*x3*27}pxt z9oM&Eu+KY>3Q5_69z&NCO`30!vxwQGpvHD5ce!5c+|W- zaC!6)nT;E{Fex<&A)n5+83(=ZChD|vYU!pQ+3a9+H-*t_*ZY|2L1y{zC}nnKHQ#JLDTqyQ3P;$vfH1MAJ=qA{pz2#@y+x!X$w%(Dp%m(Ts$J6gCYCdi zYA|PpJqT;rQG^fp(;Xr{sFs%~2-2Z8TQ|Ql=aD8oGEZkY&Z z3XiX@8P(!by>(x)>QUqOfO`AnrS>}N*T%~ln_B_3ILCrVFD))2gAA9VqMNOw1SZLN zGCD8L2qG>x2K`XRG}!1@i@msCZ{c3sg8PM21ka{{kySUF!f^ej?ca{H5BA9m{*8~$ zpW_3S$Q42&gLNohM0@L)4^6JwEZc~|8Ce$tT!;d!6&XOl-gEsPw+PRGa_s|j{JGbM zO%t9;8@fH73j8KI?&l{EdS%Nj_K=sXi8?%YFYG0eOJS609-mD=rq(@_O~6>q2gSyP81V0wBP=NGcBi%3 zyz{HuuuaJ7j((&m=PX+#XDxSG?sYtum8ewKRDi-DRo_(0oW(qt3gjo(gxRsN7&U%- zf%|rB>zv=Y@-B{btQK@ZV=eb<&8aGbdNb=aty6;@kht?ns$6B-&)i)D^-4eiB~l7R z*So!HSnSt+$_VZPRbrG=N6k$2Poyi=g6yE_(H zcg+b(X}&GGQ3t!hpIvHZ7jW^DrmFUt#M$U6po!HfdQ;38h^OcG0rg(EzTw@Z&*ElfE_WiLhe^lONfoN| zY*Mg!p>aqxMvtO7H}2B1$@MdzKI7V<)elID|4~D&(~Lyo3aQn-T{u}3Xt+G)udH3M z%3e`;D&wtIXu!or1xRqySD`++qq5N|c1;5J!8%K27rCBGtIN+zehcSL9_ev+W~8@0 z+-?^rPEJ;=%*{1_Q3E(622ger*q)|XRCfXl@q8A%C37K6&0*i#{#i;G*;ygZTFfN9#u0H%Xf6&a z+1ds61Csp?;U2gs8~FL28Rp`!V52WspxBoGU~gb{Ww6(%;p@@i0ac6O4^&PZ?1;~Y8ep#>Imsq}T;?E(DwZ=LZtsCDvsnEApx&wRsRia+XX`+kzAYVWj0 zVR+*QH;;6v`C_BX!f67ws^pM^z8|Wn$CQj8Rz9vFxSSSlF7A6}XzBlA>%F6z+M=#+ zMHCRFhzJUTSU_nJ>4c(q0qG)Ddb#x8TS640T%_a*(n~-=nh=m)k_ZS1%!yYn8=a>5vzk5Yw(F}TxGZhr`ZPeWKH$~0~JVa}?9XMU68K3_f@WKI2q zm0_Mmi1l10eDAM6I!JFEs4gMtJ#X#?8hJhPD{v|DzlHVsuQjN<#(1D8-ET)lX&tGHZg zW{xj3(Ky{GRsuK*NI~DBe}q4&Jy*%$uDerpVAE?oVx=6D|NP87hG-=Wxk5g=8*H1CHzvxa!s12+%u9$H#b@tLyZ$K6 zM!9G3Yu>u5tZe7U&W-(aVRDA;m*E^5SQG}PiVBv6Lnr!QUe$YurM1QGoR*_mwQMrO zv=k!n*cCp?k>yQ3<6SO3KezP2pRs#ONqBu2?65vGv}L}K4?!`@cC=UOLqfbH4ptLS zpPX6V&Y)77`)xFXmCs&GgpVo>eAkrRQ4rNI4wvU8a4+9DFFhIdE#!ohZiFVk_pb~g zURW(|?G>pBHexBSe<6`OCQfPJz9Vk#)BkR5?@#zf3ONHB*9Yz)P(fwiYv0((x6ck< zg1maW5JTz&o)|uxke$XO0?wvPNoCuz`b+=rYi0cn5P7#wYM=?E`7UoN{8Nw=K>278 z&I$fjmSU|72*Zi^J->y8QG#`V1Iy5}!w8y$s?ov}ul+^h9qsyKN;Q z%j^q&s*5(>Vag0WQyOg6lgo=uJ*@Gks3T`pt7L&Hr}{dCW5>G0!H&Lll1Mjlyh$1K z{AbS-#Y+e8_E&}@URUsT`q;$s+t0sFhVCW7ddL!byc&&leJ|VFq8!#KSPd%Od5Rh$ zuzdPL40YLA)!RqlZgR|m;CB_YoL=OyhlSWL1kRnXm(!#Zsxlu+HQP2TDeiS9)>G7H zdLQ(jDWc2wlLGdE1vlpEzzc_qO_#1hXX_0v>WkbGyrQ^K-kNZUpK}=S)@cdxTV%Wu zDef+E>PP#H76KG3C~ zF@~=rZV2qiA~9%;s0~x93WoevNw|UpIqjb+;Z-?=K^~B83bd3q9qt;m0N$TNRsi)^ zs+JRBg0_Jg#a5!1kWCF57QBy(L_O`T*IDwIHuXtm9||rj(=7tlC3UDuQ5WHKRM;*| z-zHsZXvt;)u*Daf}fz;kjCN4mouD^5ESE!nI6Epe$Jt zlugFe#xSoN$H9|JwTTF#m(ZY+wFtLLyKt>e^y7Mk8-UrwI^2{6-zjDlaa1zlSLGB< zEg}x?H6cV`)fhj$8t)ipx`(DovZ{?~e$uzOZarO3`7vWo_*L(a5f@*JnVKlGuDv;b z;Z=aPr!<|IJTI#c+vT(`tzDG5lN(DH7ccW z1W-qBp%0)$w7=y;IWO#Ly|G@sM(CbGfm@@;c#KFm{i@Nt1FE8tuwBSqpo&!-f4ER{ zOO)df7gwICbz=SkLsfd@kU~y6kg5wMUQlZP7$j~`)U)lwZ@guCJHl)Gq$vS|J}xs- z25mUQPiIvxb{f|roVc{jw_AA5lCeKPiYcLIF@1RD?OV~`fz9;`UBvva==zISf%JGH zKsNYYHR)9fRZJ~D0+KsqSAgrF)B@SRZam{yr5d_zItdDS`C8Z8H*!{eeXHL$(nh$X zsQgl{bYh8G&g})Ck~Oz`d&DqT|5J0KX^*mR$)(>$9|_c4sLrF*c!$@0c^6rR*Dn}T zAA-@2yJHsS-bH(1OLsM(8y)`Tj_dqk(@wLI^vc2gx<#LwyeR+z;!5en>FC+9O(2b}Xo5m{gVe$UCMuFl>=5SYx5ouAa0OtA>I`QoTPb>#`LF zI7b?b`~AB3J_FpBlBItS@||(UAAdaGel&MiyPkxRdIfC$eG*5)o-T|x>Xdf7B<0QS z*sd_cbnK|d`$r`(Bk2)Se*ef|)m?dK{zQx3zjCyDw|;1Y(vy}W?3~JeeQTl2;YJsO z#FvWwljVz^#U!e8oln16OJH!Lp!Z9YeUKb|nyrI*nu%*~ z!Cc>&=CXcTCgd&CuBc+=>Je|5%;lOAMq5|4SMGs78s?tB|0t?olqK3RRn zeH761iVjk)ipXV!+$5wf*jmx~CYPH0fi*SecQboJ=yE^uZ5d%CFC~$<&is7KFoaMS zf_;<}ui1H2d=BT;q%HO)4efNl$9P8m2Y;OiI66LefH&?g;}gUIm$;Wo%U_wP)6-x@ zbL7j5{Log1w5Kbb3sthY1OP<_lo!z_V+LxrJu-!g&Nl@w#yN6Fl{dbY4%z@(?W|~b z`|K;pk5wk7f0^|v*H$Q>cdfikQ3EXFv?xUrOXBDD`>6hFQ8^fqc+ajH#ktj|CC!c2 zVbvJKo;3oxQA!B^3Pt$Ko^?E+^%w~Y52ipQ8&O>7+#r+3R|9Y8W`U^+rR_aaHhu>) zP0_C=L=yJq=9^N43X`M)*fECte9htTEt3}QgrQUtS5yiv=1vM*%IV@TW(NKfK2e`S zf&Y=u5v+5v?{~@-_ta#JVDe;&W{NtBc>HTIZz^?>Gli3jp79;lYQr$xVLD03(oqy6 z6yp3{Pfxt#XtrJLO2^jjYBOqiw@bmOQBuIYp4geytCAp8 z+tzk9UL~wX#k#?)#rKp7ICLFBr$1H;xI5&86iJXLv$Aa$*-piHYw=H)zw?cC;J@Gv^y~dtrN|k}2Q#Hp z%Z{$W`7)hifB+koAFgw&gS$J~bul3nIJkJ*d@8f35+!j_I!!;MK>BD%puBwY&NcSZryrL3)|+g|(UEeQ0a?whPbLbkz>= zT+K&7*{Fp<{5;9f$M+xP<>=hkO6`h}F!9Wsbe{`h@QuI#PGE@kH2)Jq-QB0X=#dyg zr2h><8ZH?ISR7^ufPnkxcI$=x-H8Hv3`8T`!sRS6}WW}hyJ@#h;e zu{`%lJ>mb6TWy9Bm##hB(%|4ndpn~sf)lSXO*eiA{htPg7xDey&U05E2zY0ARWc@JPJ5RJK$PW(6%D!YlbL|HuyD_ITF5iO__WvDi`}AaWst2OG6e)(4 zT~OV!oo{(a?6)sV`1H}lhpbd34E=QAbJd!weypo)=VF`MoQaA=dz-6xnSZl__@S(7 z#d)q2Sjb??TItHM-}D!TR}(d2DukwNB$(75urj3id}qHxMPWZ(VJfx?ALE998IF}3 z(m7gflDf`ziDR)RWGmrWhFRj8yDCx7SQ7^?xo{hXN;Rs9V=`lCwe?6bkrvTMD^H)z zcT5$a`yDJ(ADZF@5lChhN!UT$RL!?(YTL^qhz+dci`1>y&-fT#+{SoiR6x5YYe=Bw zKC3{>dujKPyx|g4^2B;gL$=as&|l{|dFGs&#mNNgO|%iTjT?HgyHs@0CF|4+1$rl~ zC;3h~$flRQnXdUMJ)rUQU%(jPk7nBM)gfg5O8AiCHtVH-*!;XxTv=d<31VKXfWW;N z+8=mgyMtv6hLrNMT&J45=C

    I$FMnkNNYq#$9x@=kFC(uDJ+BLX-8YfBM`) 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%0A5^*Ssr?y&uDDX9yM#e57?OB{U-okTkh9OCV}>1 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

    up;Z0L1ccD)~gD8h+Z@9-uDw%JP{xiO1@Lq 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 =` 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 ZN0gQnr-l)|

    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 literal 0 HcmV?d00001 diff --git a/public/images/developer-reference/l1-smart-contracts/requestL2TransactionDirect.png b/public/images/developer-reference/l1-smart-contracts/requestL2TransactionDirect.png new file mode 100644 index 0000000000000000000000000000000000000000..98efc5c0d16752b778200476f17844d3390e5be8 GIT binary patch literal 78760 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 literal 0 HcmV?d00001 diff --git a/public/images/developer-reference/l1-smart-contracts/requestL2TransactionTwoBridges-depositEthToUSDC.png b/public/images/developer-reference/l1-smart-contracts/requestL2TransactionTwoBridges-depositEthToUSDC.png new file mode 100644 index 0000000000000000000000000000000000000000..d762e3fe5feae89edc75bfc2fccec49ea683a316 GIT binary patch literal 136296 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