diff --git a/.markdownlint.json b/.markdownlint.json
index 4ea32266..83951752 100644
--- a/.markdownlint.json
+++ b/.markdownlint.json
@@ -7,12 +7,13 @@
},
"MD013": {
"code_blocks": false,
- "line_length": 120,
+ "line_length": 150,
"tables": false
},
"MD033": false,
"MD003": false,
"MD034": false,
"MD024": false,
- "MD022": false
+ "MD022": false,
+ "MD023": false
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 6d2cb901..7cbd388d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -10,6 +10,13 @@
"[markdown]": {
"editor.wordWrap": "on",
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint",
- "editor.formatOnSave": true
+ "editor.formatOnSave": true,
+ "editor.suggest.showWords": false,
+ "editor.quickSuggestions": {
+ "other": "on",
+ "comments": "off",
+ "strings": "off"
+ },
+ "editor.tabCompletion": "onlySnippets"
}
}
diff --git a/.vscode/snippets.code-snippets b/.vscode/snippets.code-snippets
new file mode 100644
index 00000000..e39e12d0
--- /dev/null
+++ b/.vscode/snippets.code-snippets
@@ -0,0 +1,24 @@
+{
+ // Place your zksync-docs workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
+ // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
+ // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
+ // used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
+ // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
+ // Placeholders with the same ids are connected.
+ // Example:
+ // "Print to console": {
+ // "scope": "javascript,typescript",
+ // "prefix": "log",
+ // "body": [
+ // "console.log('$1');",
+ // "$2"
+ // ],
+ // "description": "Log output to console"
+ // }
+ "External Link": {
+ "scope": "markdown",
+ "prefix": "@exlink",
+ "body": [":external-link{text=\"$1\" href=\"$2\"}$0"],
+ "description": "External link component",
+ },
+}
diff --git a/app.config.ts b/app.config.ts
index a6eb379d..79fc0f17 100644
--- a/app.config.ts
+++ b/app.config.ts
@@ -36,9 +36,11 @@ export default defineAppConfig({
},
},
},
- 'navigation-accordion': {
- button: {
- label: 'text-sm/6 font-semibold text-left text-pretty',
+ navigation: {
+ accordion: {
+ button: {
+ label: 'text-left text-pretty',
+ },
},
},
},
diff --git a/components/content/DisplayPartial.vue b/components/content/DisplayPartial.vue
index 3fb99ffd..7eead62f 100644
--- a/components/content/DisplayPartial.vue
+++ b/components/content/DisplayPartial.vue
@@ -1,15 +1,15 @@
diff --git a/components/content/ExternalLink.vue b/components/content/ExternalLink.vue
index 7d6bb4d5..06268acc 100644
--- a/components/content/ExternalLink.vue
+++ b/components/content/ExternalLink.vue
@@ -25,6 +25,6 @@ withDefaults(defineProps(), {
text: '',
href: '',
target: '_blank',
- rel: 'noopener noreferrer',
+ rel: 'noopener',
});
diff --git a/content/40.tooling/00.zksync-block-explorers.md b/content/40.tooling/00.zksync-block-explorers.md
new file mode 100644
index 00000000..19e2fc7c
--- /dev/null
+++ b/content/40.tooling/00.zksync-block-explorers.md
@@ -0,0 +1,62 @@
+---
+title: Block Explorers
+description: Learn about the official and 3rd party resources for exploring the zkSync Era network.
+---
+
+The :external-link{text="zkSync Era Block Explorer" href="https://explorer.zksync.io/"}
+details comprehensive data about transactions, blocks, batches, wallets, tokens, and smart contracts on the zkSync Era network.
+
+## Block Explorer API
+
+We’ve developed the zkSync Era Block Explorer API for developers to access zkSync Era Block Explorer data directly via HTTP requests.
+
+- :external-link{text="Mainnet Block Explorer API" href="https://block-explorer-api.mainnet.zksync.io/docs"}
+- :external-link{text="Testnet Block Explorer API" href="https://block-explorer-api.sepolia.zksync.dev/docs"}
+
+The API provides various endpoints for many use cases you might want in your app.
+It is compatible with :external-link{text="Etherscan API" href="https://docs.etherscan.io/"},
+which makes it easy to transition your existing apps to zkSync Era network.
+
+Feel free to contribute and create issues and feature requests in :external-link{text="zkSync Era Block Explorer GitHub repo" href="https://github.com/matter-labs/block-explorer"}.
+
+## Other block explorers
+
+A full list of zkSync block explorers can be found on the zkSync website's :external-link{text="Block Explorers page" href="https://zksync.io/explore#explorers"}.
+
+### Etherscan - zkSync Era Explorer
+
+Etherscan allows you to explore and search the zkSync Era network
+for transactions, addresses, tokens, prices and other activities taking place on the Network.
+
+- :external-link{text="Etherscan Mainnet" href="https://era.zksync.network/"}
+- :external-link{text="Etherscan Testnet" href="https://sepolia-era.zksync.network/"}
+
+### L2Scan
+
+L2Scan is the open source block explorer for zkSync by the Unifra team
+
+- :external-link{text="L2Scan Mainnet" href="https://zksync-era.l2scan.co/"}
+- :external-link{text="L2Scan Testnet" href="https://zksync-era-sepolia.l2scan.co/"}
+
+### Blockscout
+
+Blockscout is a blockchain explorer for inspecting, analyzing, and interacting with zkSync.
+
+- :external-link{text="Blockscout Mainnet" href="https://zksync.blockscout.com/"}
+- :external-link{text="Blockscout Testnet" href="https://zksync-sepolia.blockscout.com/"}
+
+### Hyperscan
+
+Routescan's zkSync Explorer allows you to explore and search for transactions, addresses, tokens, prices and other activities taking place on zkSync.
+
+- :external-link{text="Hyperscan" href="https://hyperscan.xyz/"}
+
+### OKLink
+
+:external-link{text="OKLink" href="https://www.oklink.com/zksync"} provides a familiar UI with data on transactions, blocks, account balances and more.
+
+### NFTScan
+
+:external-link{text="NFT Explorer" href="https://zksync.nftscan.com/"} provides developers and users
+with professional NFT asset data search and query functions, including: NFT Collection, NFT Contract, Wallet Address,
+NFT TxHash and other multi-dimensional data search queries.
diff --git a/content/40.tooling/10.zksync-cli/00.overview.md b/content/40.tooling/10.zksync-cli/00.overview.md
new file mode 100644
index 00000000..6ccb2886
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/00.overview.md
@@ -0,0 +1,51 @@
+---
+title: Overview
+description: Learn how to use the powerful zkSync CLI tool for local development.
+---
+
+The zkSync Command Line Interface (CLI) is a powerful tool designed to simplify the development and interaction with zkSync from a command shell.
+
+## Usage
+
+You can run commands locally without installation using the following command: `npx zksync-cli`. For example: `npx zksync-cli dev start`.
+
+### Install zksync-cli
+
+You can alternatively install the CLI globally using the npm package manager:
+
+```bash
+npm install -g zksync-cli
+```
+
+::callout{icon="i-heroicons-light-bulb" color="blue"}
+If you go the route of installing the zksync-cli package locally, we recommend using the global option.
+::
+
+### Update zksync-cli
+
+If you installed `zksync-cli` via the npm package manager, you can update with the following:
+
+```bash
+npm update -g zksync-cli
+```
+
+## Available Commands
+
+- [`dev`](./zksync-cli-dev.md): Start a local development environment with zkSync and Ethereum nodes.
+- [`create`](./zksync-cli-create.md): Scaffold new projects using templates for frontend, contracts, and scripting.
+- [`contract`](./zksync-cli-contract.md): Read and write data to zkSync contracts without building UI.
+- [`transaction`](./zksync-cli-transaction.md): Fetch and display detailed information about a specific transaction.
+- [`wallet`](./zksync-cli-wallet.md): Manage zkSync wallet assets, including transfers and balance checks.
+- [`bridge`](./zksync-cli-bridge.md): Perform deposits and withdrawals between Ethereum and zkSync.
+- [`config chains`](./zksync-cli-config-chains.md): Add or edit custom chains for flexible testing and development.
+
+## Further Assistance
+
+Need help? Join our :external-link{text="GitHub Discussions" href="https://github.com/zkSync-Community-Hub/zksync-developers/discussions/"}
+to ask questions, share your experiences, and connect with the zkSync community.
+
+## Source Code
+
+The :external-link{text="zkSync CLI project" href="https://github.com/matter-labs/zksync-cli"}
+is open-source and available on GitHub under the MIT License.
+Feel free to contribute, report issues, or suggest new features to help us improve the tool for everyone.
diff --git a/content/40.tooling/10.zksync-cli/01.troubleshooting.md b/content/40.tooling/10.zksync-cli/01.troubleshooting.md
new file mode 100644
index 00000000..7249c5d8
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/01.troubleshooting.md
@@ -0,0 +1,60 @@
+---
+title: Troubleshooting
+description: Get help with issues related to zksync-cli.
+---
+
+Encountering issues with zkSync CLI? Here are some common problems and step-by-step recommendations for resolving them:
+
+## `command not found: zksync-cli`
+
+If you try to use the `zksync-cli` command and receive the `command not found` message, double check if you
+have the package installed locally or were using the `npx zksync-cli` command.
+
+## `unknown command` Error
+
+If you encounter an `unknown command` error, follow these steps:
+
+a. **Check the zkSync CLI Version**
+
+- Run `zksync-cli --version` to check your current version.
+- Compare it with the latest version available on :external-link{text="npm" href="https://www.npmjs.com/package/zksync-cli"}.
+- If your version is lower than the one on npm, follow the steps below.
+If your version is up-to-date, it's possible that the command was moved or renamed.
+Use `zksync-cli help` for a list of current commands or refer to the documentation.
+
+b. **Verify Local Installation**
+
+- Use `npm list zksync-cli` to check if `zksync-cli` is installed in the current directory or any parent directories from where you are running your terminal.
+- If it is indeed installed, make sure to uninstall it by running `npm uninstall zksync-cli` in its installation location.
+Remove all instances of `zksync-cli` until none are found by `npm list zksync-cli`.
+
+c. **Verify Global Installation**
+
+- Use `npm list -g zksync-cli` to check if `zksync-cli` is installed globally.
+- If it is installed globally, uninstall it using `npm uninstall -g zksync-cli`.
+
+d. **Clean npm Cache**
+
+- Run `npm cache clean --force`.
+
+e. **Use the Latest Version**
+
+- As a quick fix, or if the above steps don't resolve the issue, use `npx zksync-cli@latest [command]`, for example, `npx zksync-cli@latest dev start`.
+
+## My version is outdated
+
+If `zksync-cli` is not running the latest version:
+
+- Refer to the [instructions for `unknown command` Error](/tooling/zksync-cli/troubleshooting#unknown-command-error)
+above to check and update your zkSync CLI version.
+
+## `command not found: npx` Error
+
+If you receive a `command not found: npx` error, it means Node.js is not installed or not correctly set up on your system:
+
+- Install Node.js from :external-link{text="the official website" href="https://nodejs.org/"}. This will also install `npm` and `npx`.
+- After installation, restart your terminal and try running `npx zksync-cli` again.
+
+## Other issues
+
+For all other issues, we encourage you to seek help or report them in our :external-link{text="GitHub Discussions" href="https://github.com/zkSync-Community-Hub/zksync-developers/discussions/new?category=general&title=[zksync-cli]%20"}.
diff --git a/content/40.tooling/10.zksync-cli/10.zksync-cli-dev.md b/content/40.tooling/10.zksync-cli/10.zksync-cli-dev.md
new file mode 100644
index 00000000..8f0c17aa
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/10.zksync-cli-dev.md
@@ -0,0 +1,52 @@
+---
+title: zksync-cli dev
+description: Manage a local node with zksync-cli.
+---
+
+Utilize `zksync-cli` to effortlessly initiate a local development environment.
+Using the command, `zksync-cli dev start`, you can spin up local zkSync and Ethereum nodes, along with Block Explorer, Wallet, and Bridge
+for a seamless development experience.
+
+## Prerequisites
+
+Before beginning, ensure you have installed:
+
+- :external-link{text="Node.js" href="https://nodejs.org"} v18+
+- :external-link{text="Git" href="https://git-scm.com/downloads"}
+- :external-link{text="Docker" href="https://www.docker.com/get-started/"}
+
+## Starting and Stopping Nodes
+
+- **Start**: `zksync-cli dev start` initiates your local environment. On the first run, it prompts to select a node and additional modules.
+- **Stop**: `zksync-cli dev stop` terminates the local environment. Use `zksync-cli dev stop [module name]` to stop specific modules.
+- **Restart**: `zksync-cli dev restart` or `zksync-cli dev restart [module name]` restarts your environment or specific modules.
+
+## Configuring Your Environment
+
+- `zksync-cli dev config` allows the selection of nodes and additional modules like block explorer and bridge.
+Run modules such as Block Explorer against an already running node by adding a new chain.
+
+## Managing Modules
+
+- `zksync-cli dev modules` lists all installed modules, providing a clear overview of your environment's components.
+
+## Viewing Logs
+
+- `zksync-cli dev logs` displays logs for all active modules, essential for monitoring and debugging.
+
+## Cleaning Modules
+
+- `zksync-cli dev clean` removes all module data from your computer. For specific modules, use `zksync-cli dev clean [module name]`.
+
+## Updating Modules
+
+- `zksync-cli dev update [module name]` updates individual modules, ensuring you're running the latest versions.
+
+## Troubleshooting
+
+If modules malfunction, e.g., failing to start:
+
+1. Use `zksync-cli dev stop` to cease all operations.
+2. Reinstall the problematic module with `zksync-cli dev clean [module name]`.
+3. Restart with `zksync-cli dev start`. Check Docker container logs for detailed errors, accessible through Docker Desktop.
+4. Persisting issues? Please report them in our :external-link{text="GitHub discussions" href="https://github.com/zkSync-Community-Hub/zksync-developers/discussions/new?category=general&title=[zksync-cli]%20"}.
diff --git a/content/40.tooling/10.zksync-cli/20.zksync-cli-create.md b/content/40.tooling/10.zksync-cli/20.zksync-cli-create.md
new file mode 100644
index 00000000..45f8d6c9
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/20.zksync-cli-create.md
@@ -0,0 +1,48 @@
+---
+title: zksync-cli create
+description: Use the zksync-cli create command to streamline project setup.
+---
+
+The `zksync-cli create` command streamlines project setup by offering templates for frontend development, smart contracts,
+and scripting for zkSync, enabling rapid deployment and development.
+
+### Prerequisites
+
+Ensure you have the following installed before you start:
+
+- :external-link{text="Node.js" href="https://nodejs.org"} v18+
+- :external-link{text="Git" href="https://git-scm.com/downloads"}
+
+## Available Templates
+
+`zksync-cli create` simplifies the initial project setup by providing templates in three main categories:
+
+### Frontend
+
+Fast-track your UI development with our frontend templates, supporting popular frameworks like Vue, React, Next.js, Nuxt, and Vite.
+Options include viem, ethers, web3modal, rainbowkit, and more, equipping you with the necessary tools for dApp development.
+
+:external-link{text="zksync-frontend-templates repo" href="https://github.com/matter-labs/zksync-frontend-templates#readme"}
+
+### Contracts
+
+For smart contract development, choose from templates designed for quick deployment and testing, compatible with Solidity or Vyper.
+Utilize tools like Hardhat to streamline your workflow.
+
+:external-link{text="zksync-contract-templates repo" href="https://github.com/matter-labs/zksync-contract-templates#readme"}
+
+### Scripting
+
+Enhance your project with Node.js scripting templates for automated interactions and advanced zkSync operations.
+Includes examples of wallet or contract interactions using viem, ethers, or web3.js.
+
+:external-link{text="zksync-scripting-templates repo" href="https://github.com/matter-labs/zksync-scripting-templates#readme"}
+
+## Using Templates
+
+To create a project using a template, run the following command and follow the prompts to select your desired template category
+and specific framework or tool:
+
+```bash
+zksync-cli create
+```
diff --git a/content/40.tooling/10.zksync-cli/30.zksync-cli-contract.md b/content/40.tooling/10.zksync-cli/30.zksync-cli-contract.md
new file mode 100644
index 00000000..db73d4a7
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/30.zksync-cli-contract.md
@@ -0,0 +1,244 @@
+---
+title: zksync-cli contract
+description: Interact with contracts using the zksync-cli contract command.
+---
+
+The `zksync-cli contract` command comes with actions to read, write and encode smart contracts on zkSync.
+These commands automate tasks such as method verification, ABI handling, output decoding, and proxy contract processing.
+
+::callout{icon="i-heroicons-light-bulb" color="blue"}
+After running a command with prompts you will see a full command with all the options that you can copy
+and use later to quickly run the same command again.
+::
+
+## Contract Read
+
+The `zksync-cli contract read` command executes read-only methods on contracts, like checking ERC-20 balances or contract states.
+
+### Read Options
+
+You do not need to specify options below, you will be prompted to enter them if they are not specified.
+
+- `--chain `: Select the chain to use (e.g., `zksync-mainnet`, `zksync-sepolia`).
+- `--rpc `: Provide RPC URL instead of selecting a chain
+- `--contract `: Specify contract's address
+- `--method `: Defines the contract method to interact with
+- `--arguments `: Pass arguments to the contract method
+- `--data <0x-transaction-data>`: Instead of specifying the method and arguments, you can pass the raw transaction data
+- `--outputTypes `: Specifies output types for decoding
+- `--from `: Call method on behalf of specified address
+- `--abi `: Path to local ABI file or contract artifact
+- `--decode-skip`: Skips prompting for output types and decoding the response
+- `--show-info`: Displays transaction request information (e.g. encoded transaction data)
+
+### Basic read example
+
+```bash
+zksync-cli contract read
+```
+
+1. You will be prompted to select a chain, contract address, and method.
+
+ ```bash
+ ? Chain to use: zkSync Sepolia Testnet
+ ? Contract address: 0x45E6dC995113fd3d1A3b1964493105B9AA9a9A42
+ ```
+
+1. Next you need to select a **method (function) to call**.
+
+ - In case your contract is verified it will automatically identify the ABI:
+
+ ```bash
+ ? Contract method to call
+ ────────── Provided contract ──────────
+ ❯ balanceOf(address account) view returns (uint256)
+ decimals() pure returns (uint8)
+ name() pure returns (string)
+ symbol() pure returns (string)
+ totalSupply() view returns (uint256)
+ ───────────────────────────────────────
+ Type method manually
+ ```
+
+ - Otherwise you'll have to enter method signature manually.
+
+ ```bash
+ ? Enter method to call: balanceOf(address)
+ ```
+
+ - Alternatively, you can specify the ABI file manually using the `--abi` option. [See example](#using-a-local-abi-file)
+
+1. You will be prompted to enter **arguments** for the method, one by one.
+
+ ```bash
+ ? Provide method arguments:
+ ? [1/1] account (address): 0xa1cf087DB965Ab02Fb3CFaCe1f5c63935815f044
+ ```
+
+ When submitted a contract call will be made and you'll see the response in it's original encoded form.
+
+ ```bash
+ ✔ Method response (raw): 0x000000000000000000000000000000000000000000010508e606548a9e5d2000
+ ```
+
+1. you will be asked the **method output** type to decode the response.
+You can skip this step by submitting empty response or completely skip it by passing `--decode-skip` option.
+
+ ```bash
+ ? Output types: uint256
+ ✔ Decoded method response: 1232701801010000000000000
+ ```
+
+### Running read on behalf of another address
+
+You can specify the `--from` option to run the method on behalf of another address.
+This is useful when you need to call a method that expects a specific address as `msg.sender`.
+
+```bash
+zksync-cli contract read \
+ --from "0xa1cf087DB965Ab02Fb3CFaCe1f5c63935815f044"
+```
+
+## Contract Write
+
+The `zksync-cli contract write` command performs write operations on smart contracts.
+It enables sending transactions that alter the state of a contract, such as transferring tokens or changing ownership.
+
+### Write Options
+
+You do not need to specify options below, you will be prompted to enter them if they are not specified.
+
+- `--chain `: Select the chain to use
+- `--rpc `: Provide RPC URL instead of selecting a chain
+- `--contract `: Specify contract's address
+- `--method `: Defines the contract method to interact with
+- `--arguments `: Pass arguments to the contract method
+- `--value `: Ether amount to send with the transaction (e.g. 0.01)
+- `--private-key `: Private key of the wallet to use to sign the transaction
+- `--data <0x-transaction-data>`: Instead of specifying the method and arguments, you can pass the raw transaction data
+- `--abi `: Path to local ABI file or contract artifact
+- `--show-info`: Displays transaction request information (e.g. encoded transaction data)
+
+### Basic write example
+
+```bash
+zksync-cli contract write
+```
+
+1. You will be prompted to select a chain, contract address, and method.
+
+ ```bash
+ ? Chain to use: zkSync Sepolia Testnet
+ ? Contract address: 0x45E6dC995113fd3d1A3b1964493105B9AA9a9A42
+ ```
+
+1. Select a **method (function) to call**.
+
+ - In case your contract is verified it will automatically identify the ABI:
+
+ ```bash
+ ? Contract method to call
+ ────────── Provided contract ──────────
+ ❯ approve(address spender, uint256 amount) returns (bool)
+ transfer(address to, uint256 amount) returns (bool)
+ ───────────────────────────────────────
+ Type method manually
+ ```
+
+ - Otherwise you'll have to enter method signature manually, for example `transfer(address,uint256)`.
+
+ ```bash
+ ? Enter method to call: transfer(address,uint256)
+ ```
+
+ - Alternatively, you can specify the ABI file manually using the `--abi` option. [See example](#using-a-local-abi-file)
+
+1. You will be prompted to enter **arguments** for the method, one by one.
+
+ ```bash
+ ? Provide method arguments:
+ ? [1/2] to (address): 0xa1cf087DB965Ab02Fb3CFaCe1f5c63935815f044
+ ? [2/2] amount (uint256): 1
+ ```
+
+1. provide private key of the wallet to use to sign the transaction.
+
+ ```bash
+ ? Private key of the wallet to sign transaction: *****
+ ```
+
+When submitted a contract call will be made and you'll see the transaction hash.
+
+```bash
+✔ Transaction submitted. Transaction hash: 0xa83ad7e8932e18cdc57d3892040505a50d560a56fa507cabcd4180e9e5898bec
+```
+
+## Encode
+
+The `zksync-cli contract encode` command will get calldata (e.g. 0x1234) from contract method signature and arguments.
+
+### Encode options
+
+- `--method `: Contract method to interact with
+- `--args, --arguments `: Arguments
+- `--abi `: Contract artifact or ABI file location.
+
+### Basic encode example
+
+```bash
+zksync-cli contract encode
+```
+
+1. Select a **method (function) to encode**.
+
+ - Enter method signature manually, for example `transfer(address,uint256)`.
+
+ ```bash
+ ? Enter method to call: transfer(address,uint256)
+ ```
+
+ - Alternatively, you can specify the ABI file using the `--abi` option. [See example](#using-a-local-abi-file)
+
+ ```bash
+ ? Contract method to call
+ ────────── Provided contract ──────────
+ ❯ approve(address spender, uint256 amount) returns (bool)
+ transfer(address to, uint256 amount) returns (bool)
+ ───────────────────────────────────────
+ Type method manually
+ ```
+
+1. Enter the **arguments** for the method, one by one.
+
+ ```bash
+ ? Provide method arguments:
+ ? [1/2] to (address): 0xa1cf087DB965Ab02Fb3CFaCe1f5c63935815f044
+ ? [2/2] amount (uint256): 1
+ ```
+
+When finished you will see the encoded data.
+
+```bash
+✔ Encoded data: 0xa41368620000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c48656c6c6f20776f726c64210000000000000000000000000000000000000000
+```
+
+## Using a local ABI file
+
+You can specify a local ABI file using the `--abi` option.
+It should be a JSON file with either ABI data (array) or contract artifact which you get after compiling your contracts.
+
+```bash
+zksync-cli contract read \
+ --abi "./Greeter.json"
+```
+
+You will be prompted to select a method (function):
+
+```bash
+ ────────── Provided contract ──────────
+❯ greet() view returns (string)
+ ───────────────────────────────────────
+ Type method manually
+```
+
+Response will be decoded automatically according to the ABI file.
diff --git a/content/40.tooling/10.zksync-cli/40.zksync-cli-transaction.md b/content/40.tooling/10.zksync-cli/40.zksync-cli-transaction.md
new file mode 100644
index 00000000..a5a9b3ba
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/40.zksync-cli-transaction.md
@@ -0,0 +1,87 @@
+---
+title: zksync-cli transaction
+description: Interact with transaction information using zksync-cli.
+---
+
+The `zksync-cli transaction info` command is designed to fetch and display detailed information about a specific transaction.
+It can be used to check the status, amounts transferred, fees, method signatures, and arguments of transactions.
+
+## Options
+
+If no options are provided directly, the CLI will prompt the user to enter the necessary information, such as the chain and transaction hash.
+
+- `--tx `: Specify the transaction hash to query.
+- `--chain `: Select the chain to use (e.g., `zksync-mainnet`, `zksync-sepolia`).
+- `--rpc `: Provide RPC URL instead of selecting a chain
+- `--full`: Show all available transaction data for comprehensive insights.
+- `--raw`: Display the raw JSON response from the node.
+- `--abi `: Path to a local ABI file to decode the transaction's input data.
+
+## Examples
+
+### Basic usage
+
+```bash
+zksync-cli transaction info
+```
+
+You will be prompted to select a chain and transaction hash.
+
+```bash
+? Chain to use: zkSync Sepolia Testnet
+? Transaction hash: 0x2547ce8219eb7ed5d73e68673b0e4ded83afc732a6c651d43d9dc49bb2f13d40
+```
+
+The command will display detailed information about the transaction:
+
+```bash
+──────────────────── Main info ────────────────────
+Transaction hash: 0x2547ce8219eb7ed5d73e68673b0e4ded83afc732a6c651d43d9dc49bb2f13d40
+Status: completed
+From: 0x56DDd604011c5F8629bd7C2472E3504Bd32c269b
+To: 0xBB5c309A3a9347c0135B93CbD53D394Aa84345E5
+Value: 0 ETH
+Fee: 0.0001503581 ETH | Initial: 0.0004 ETH Refunded: 0.0038496419 ETH
+Method: transmit(bytes,bytes32[],bytes32[],bytes32) 0xc9807539
+
+───────────────── Method arguments ─────────────────
+[1] bytes: 0x0000000000000000000000fd69e45d6f51e482ac4f8f2e14f2155200008b5f010001020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000007df298c81a0000000000000000000000000000000000000000000000000000007df298c81a0000000000000000000000000000000000000000000000000000007df298c81a
+[2] bytes32[]: 0xd737d65b6b610c3f330bcfddbfc08e46d2a628c88bf22ec0d8f25627a3330798,0x9d33be2ba33b731555c13a4e7bf02d3d576fa3115f7523cbf07732321c85cdba
+[3] bytes32[]: 0x73d639deda36b781ae049c8eceafba4196ee8ecc1efb74c538a28ea762ff6658,0x37ac79ff2ca902140613b0e51357d8fb218a67b4736bdee0c268c5fd9812e146
+[4] bytes32: 0x0101000000000000000000000000000000000000000000000000000000000000
+
+───────────────────── Details ─────────────────────
+Date: 2/8/2024, 2:19:54 PM (15 minutes ago)
+Block: #364999
+Nonce: 50131
+```
+
+### Parsing transaction data
+
+By default `zksync-cli` tries to fetch contract verification data from the server.
+In case this is not possible it queries the
+:external-link{text="open signature" href="https://www.4byte.directory/"} database to get the signature of the transaction method.
+If the method signature is not found, the transaction's data is displayed as a hex string.
+
+Alternatively, you can provide the path to a local ABI file to decode the transaction's input data:
+
+```bash
+zksync-cli transaction info \
+ --abi "./Greeter.json"
+```
+
+### Viewing detailed information
+
+For an even more detailed overview you can use the `--full` option:
+
+```bash
+zksync-cli transaction info --full
+```
+
+### Displaying raw JSON response
+
+To view the raw JSON response from the zkSync node, use the `--raw` option:
+
+```bash
+zksync-cli transaction info --raw
+```
diff --git a/content/40.tooling/10.zksync-cli/50.zksync-cli-wallet.md b/content/40.tooling/10.zksync-cli/50.zksync-cli-wallet.md
new file mode 100644
index 00000000..6ff82343
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/50.zksync-cli-wallet.md
@@ -0,0 +1,67 @@
+---
+title: zksync-cli wallet
+description: Manage your wallet on zkSync using zksync-cli.
+---
+
+Utilize the `zksync-cli wallet` command for an easy way to manage your assets on zkSync, like token transfers and balance check.
+
+## Commands
+
+- `transfer [options]` - Transfer tokens on L2 to another account.
+- `balance [options]` - Get token balance of an L2 account.
+
+## Transfer
+
+To transfer ETH between accounts on zkSync, use the following command:
+
+```bash
+zksync-cli wallet transfer
+```
+
+### Options
+
+If no options are provided directly, the CLI will prompt the user to enter the necessary information
+
+- `--amount <0.1>`: Specify the amount to transfer.
+- `--chain `: Select the chain to use.
+- `--rpc `: Override the default L2 RPC URL.
+- `--pk`, `--private-key `: Use the private key of the sender for the transaction.
+- `--to`, `--recipient <0x address>`: Define the recipient address on L2.
+- `--token `: Specify an ERC-20 token for the transfer instead of ETH.
+
+### Examples
+
+#### Transfer ERC-20 Token
+
+For transferring ERC-20 tokens, include the `--token` option with the token's contract address:
+
+```bash
+zksync-cli wallet transfer --token 0x3e622317f8C93f7328350cF0B56d9eD4C620C5d6
+```
+
+## Balance
+
+View an L2 wallet's ETH balance using the following command:
+
+```bash
+zksync-cli wallet balance
+```
+
+### Options
+
+If no options are provided directly, the CLI will prompt the user to enter the necessary information
+
+- `--address <0x address>`: Address of the wallet to check.
+- `--token `: Specify an ERC-20 token for the transfer instead of ETH.
+- `--chain `: Chain to use.
+- `--rpc `: Override the default L2 RPC URL.
+
+### Examples
+
+#### Checking ERC-20 Token Balance
+
+To check the balance of a specific ERC-20 token, use the `--token` option, for example:
+
+```bash
+zksync-cli wallet balance --token 0x3e622317f8C93f7328350cF0B56d9eD4C620C5d6
+```
diff --git a/content/40.tooling/10.zksync-cli/60.zksync-cli-bridge.md b/content/40.tooling/10.zksync-cli/60.zksync-cli-bridge.md
new file mode 100644
index 00000000..24453199
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/60.zksync-cli-bridge.md
@@ -0,0 +1,91 @@
+---
+title: zksync-cli bridge
+description: Facilitate bridge operations between L1 and L2 using zksync-cli.
+---
+
+Facilitate bridge operations between Ethereum (L1) and zkSync (L2), including token deposits, withdrawals,
+and finalizing withdrawals with the `zksync-cli bridge` command.
+
+## Commands
+
+- `deposit [options]` - Transfer token from L1 to L2.
+- `withdraw [options]` - Transfer token from L2 to L1.
+- `withdraw-finalize [options]` - Finalize withdrawal of funds.
+
+## Deposit
+
+Transfer ETH from L1 to L2 using the deposit command.
+
+```bash
+zksync-cli bridge deposit
+```
+
+### Options
+
+If options are not specified, you will be prompted to enter them.
+
+- `--to, --recipient <0x address>`: Recipient address on L2.
+- `--amount <0.1>`: Amount to deposit.
+- `--token <0x address>`: ERC-20 token address.
+- `--pk, --private-key `: Private key of the sender.
+- `--chain `: Chain to use.
+- `--l1-rpc `: Override L1 RPC URL.
+- `--rpc `: Override L2 RPC URL.
+
+### Examples
+
+#### Depositing ERC-20 Tokens
+
+To deposit ERC-20 tokens, include the `--token` option with the token's contract address:
+
+```bash
+zksync-cli bridge deposit --token 0x3e622317f8C93f7328350cF0B56d9eD4C620C5d6
+```
+
+## Withdraw
+
+Transfer tokens from L2 back to L1.
+
+```bash
+zksync-cli bridge withdraw
+```
+
+### Options
+
+You will be prompted to enter options if they are not specified.
+
+- `--to, --recipient <0x address>`: Recipient address on L1.
+- `--amount <0.1>`: Amount to withdraw.
+- `--token <0x address>`: ERC-20 token address (omit this option to withdraw ETH).
+- `--pk, --private-key `: Private key of the sender.
+- `--chain `: Chain to use.
+- `--l1-rpc `: Override L1 RPC URL.
+- `--rpc `: Override L2 RPC URL.
+
+### Examples
+
+#### Withdrawing ERC-20 Tokens
+
+For withdrawing ERC-20 tokens, specify the token address using the `--token` option:
+
+```bash
+zksync-cli bridge withdraw --token 0x3e622317f8C93f7328350cF0B56d9eD4C620C5d6
+```
+
+## Withdraw Finalize
+
+Finalize the withdrawal of funds with the following command. **This step is necessary to complete the withdrawal process initiated on L2.**
+
+```bash
+zksync-cli bridge withdraw-finalize
+```
+
+### Options
+
+Options will be prompted if not specified.
+
+- `--hash `: L2 withdrawal transaction hash to finalize.
+- `--pk, --private-key `: Private key of the sender.
+- `--chain `: Chain to use.
+- `--l1-rpc `: Override L1 RPC URL.
+- `--rpc `: Override L2 RPC URL.
diff --git a/content/40.tooling/10.zksync-cli/70.zksync-cli-config-chains.md b/content/40.tooling/10.zksync-cli/70.zksync-cli-config-chains.md
new file mode 100644
index 00000000..146e6446
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/70.zksync-cli-config-chains.md
@@ -0,0 +1,33 @@
+---
+title: zksync-cli config chains
+description: Configure custom chains to use with zksync-cli.
+---
+
+Specify your own chain configuration by adding or editing custom chains to use on `zksync-cli`.
+This feature is essential for developers looking to interact with ZK Stack Hyperchains.
+
+## Configuring Custom Chains
+
+To add or edit a custom chain, use the following command:
+
+```bash
+zksync-cli config chains
+```
+
+Upon execution, you will be guided through a series of prompts to enter specific details for the custom chain, including:
+
+- **Chain ID**: The id for the chain.
+- **Chain Name**: A name for the chain.
+- **Chain key**: A unique identifier for the chain.
+- **RPC URL**: The RPC endpoint URL for interacting with the chain.
+- **Other Information**: Depending on the chain's requirements, you may need to provide additional information such as block explorer URLs.
+
+## Using Custom Chains
+
+Once a custom chain is configured, you can use it across various `zksync-cli` commands.
+All of your custom chains will be listed in the chain selection prompt, allowing you to select and use them as needed.
+You can also specify a custom chain directly using the `--chain` option, for example:
+
+```bash
+zksync-cli wallet balance --chain
+```
diff --git a/content/40.tooling/10.zksync-cli/_dir.yml b/content/40.tooling/10.zksync-cli/_dir.yml
new file mode 100644
index 00000000..acdf43cf
--- /dev/null
+++ b/content/40.tooling/10.zksync-cli/_dir.yml
@@ -0,0 +1 @@
+title: zkSync CLI
diff --git a/content/40.tooling/_dir.yml b/content/40.tooling/_dir.yml
new file mode 100644
index 00000000..a750e3b2
--- /dev/null
+++ b/content/40.tooling/_dir.yml
@@ -0,0 +1 @@
+title: Tooling
diff --git a/content/70.api-reference/00.index.md b/content/70.api-reference/00.index.md
new file mode 100644
index 00000000..7d74f199
--- /dev/null
+++ b/content/70.api-reference/00.index.md
@@ -0,0 +1,74 @@
+---
+title: Overview
+description: Explore the comprehensive guide to the zkSync Era JSON-RPC API, offering seamless Ethereum integration and advanced Layer 2 functionalities for developers.
+---
+
+Welcome to the zkSync Era API reference documentation! This page provides you with a high-level overview of our API capabilities and essential information.
+
+zkSync Era seamlessly integrates with the Ethereum ecosystem. To achieve this integration,
+we support not only the standard Ethereum JSON-RPC API
+but also introduce L2-specific features that enhance functionality.
+
+
+::callout{icon="i-heroicons-information-circle" color="amber"}
+To ensure a seamless experience, we impose rate limits on both HTTPS and WebSocket APIs.
+Generally, these limits are ample, ranging from 10 to 100 requests per second (RPS) per client.
+::
+
+## Mainnet
+
+- **Network Name**: zkSync Era Mainnet
+- **RPC URL**: https://mainnet.era.zksync.io
+- **WebSocket URL**: wss://mainnet.era.zksync.io/ws
+- **Chain ID**: 324
+- **Currency Symbol**: ETH
+- **Block Explorer URL**: https://explorer.zksync.io/
+
+## Testnet
+
+- **Network Name**: zkSync Era Testnet
+- **RPC URL**: https://testnet.era.zksync.dev
+- **WebSocket URL**: wss://testnet.era.zksync.dev/ws
+- **Chain ID**: 280
+- **Currency Symbol**: ETH
+- **Block Explorer URL**: https://sepolia.explorer.zksync.io/
+
+## API Collections
+
+Explore our curated collections of API endpoints tailored for every need, from seamless Ethereum integrations to advanced debugging tools.
+Embrace the full potential of zkSync Era and elevate your dApps to new heights. Discover, integrate, and innovate with our robust API offerings.
+
+::card-group
+ ::card
+ ---
+ title: Ethereum JSON-RPC API
+ icon: i-simple-icons-ethereum
+ to: /api-reference/ethereum-rpc
+ ---
+ Integrate effortlessly with full compatibility for the Ethereum JSON-RPC API.
+ ::
+ ::card
+ ---
+ title: zkSync JSON-RPC API
+ icon: i-zksync-zksync-logo
+ to: /api-reference/zks-rpc
+ ---
+ Unlock Layer 2 capabilities with our dedicated zkSync JSON-RPC API.
+ ::
+ ::card
+ ---
+ title: Debugging JSON-RPC API
+ icon: i-heroicons-code-bracket-16-solid
+ to: /api-reference/debug-rpc
+ ---
+ Simplify your development process with powerful debugging tools.
+ ::
+ ::card
+ ---
+ title: PubSub JSON-RPC
+ icon: i-heroicons-signal-solid
+ to: /api-reference/pub-sub-rpc
+ ---
+ Stay informed with real-time event subscriptions.
+ ::
+::
diff --git a/content/70.api-reference/10.conventions.md b/content/70.api-reference/10.conventions.md
new file mode 100644
index 00000000..69e237cd
--- /dev/null
+++ b/content/70.api-reference/10.conventions.md
@@ -0,0 +1,57 @@
+---
+title: Conventions
+description: Formatting conventions and references for use with zkSync Era API docs.
+---
+
+## Hex value encoding
+
+Two key data types get passed over JSON: unformatted byte arrays and quantities.
+Both are passed with a hex encoding but with different requirements for formatting.
+
+### Quantities
+
+When encoding quantities (integers, numbers): encode as hex, prefix with "0x",
+the most compact representation (slight exception: zero should be represented as "0x0").
+
+Here are some examples:
+
+- 0x41 (65 in decimal)
+- 0x400 (1024 in decimal)
+- WRONG: 0x (should always have at least one digit - zero is "0x0")
+- WRONG: 0x0400 (no leading zeroes allowed)
+- WRONG: ff (must be prefixed 0x)
+
+### Unformatted data
+When encoding unformatted data (byte arrays, account addresses, hashes, bytecode arrays):
+encode as hex, prefix with "0x", two hex digits per byte.
+
+Here are some examples:
+
+- 0x41 (size 1, "A")
+- 0x004200 (size 3, "\0B\0")
+- 0x (size 0, "")
+- WRONG: 0xf0f0f (must be even number of digits)
+- WRONG: 004200 (must be prefixed 0x)
+
+## Error Codes
+
+| **Category** | **Error Code** | **Message** | **Description** |
+|--------------|----------------|--------------------|-----------------------------------------------------------|
+| Standard | -32700 | Parse error | The JSON payload could not be parsed due to invalid syntax. |
+| Standard | -32600 | Invalid request | The JSON object is not a valid request structure. |
+| Standard | -32601 | Method not found | The requested method does not exist or is not available. |
+| Standard | -32602 | Invalid params | The parameters provided to the method are invalid or malformed. |
+| Standard | -32603 | Internal error | An unspecified internal error occurred within the JSON-RPC framework. |
+
+## The default block parameter
+
+When requests are made that act on the state of Ethereum, the last default block parameter determines the height of the block.
+
+The following options are possible for the defaultBlock parameter:
+
+- HEX String - an integer block number
+- String "earliest" for the earliest/genesis block
+- String "latest" - for the latest mined block
+- String "safe" - for the latest safe head block
+- String "finalized" - for the latest finalized block
+- String "pending" - for the pending state/transactions
diff --git a/content/70.api-reference/20.zks-rpc.md b/content/70.api-reference/20.zks-rpc.md
new file mode 100644
index 00000000..7b26da6f
--- /dev/null
+++ b/content/70.api-reference/20.zks-rpc.md
@@ -0,0 +1,1161 @@
+---
+title: ZKs JSON-RPC API
+description: Overview of the JSON-RPC API methods specific to zkSync Era, detailing operations and functionalities within the zkSync Era ecosystem.
+github: https://github.com/matter-labs/zksync-era/blob/main/core/lib/web3_decl/src/namespaces/zks.rs
+---
+
+zkSync Era provides a suite of JSON-RPC API methods designed for seamless interaction with its ecosystem.
+These methods offer developers the tools needed to integrate their applications with zkSync Era's features,
+enhancing the capability to perform transactions, query network data, and interact with smart contracts efficiently.
+
+## `zks_estimateFee`
+
+Estimates the fee for a given call request.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_call-request-params"}
+
+#### Returns
+
+The method returns an object containing the estimated gas and fee details for the given call request.
+
+- **gas_limit**: QUANTITY, 32 bytes - The maximum amount of gas that can be used.
+- **max_fee_per_gas**: QUANTITY, 32 bytes - The maximum fee per unit of gas that the sender is willing to pay.
+- **max_priority_fee_per_gas**: QUANTITY, 32 bytes - The maximum priority fee per unit of gas to incentivize miners.
+- **gas_per_pubdata_limit**: QUANTITY, 32 bytes - The gas limit per unit of public data.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "zks_estimateFee",
+ "params": [
+ {
+ "from": "0x1111111111111111111111111111111111111111",
+ "to": "0x2222222222222222222222222222222222222222",
+ "data": "0xffffffff"
+ }
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "gas_limit": "0x1ea9a9",
+ "max_fee_per_gas": "0x17d7840",
+ "max_priority_fee_per_gas": "0x0",
+ "gas_per_pubdata_limit": "0x5340"
+ },
+ "id": 2
+}
+```
+
+---
+
+## `zks_estimateGasL1ToL2`
+
+Estimates the gas required for an L1 to L2 transaction.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_call-request-params"}
+
+#### Returns
+
+**QUANTITY, 32 bytes** - The estimated gas amount in hexadecimal format, representing the number of gas units required.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "zks_estimateGasL1ToL2",
+ "params": [
+ {
+ "from": "0x1111111111111111111111111111111111111111",
+ "to": "0x2222222222222222222222222222222222222222",
+ "data": "0xffffffff"
+ }
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x25f64db",
+ "id": 2
+}
+```
+
+---
+
+
+## `zks_getBridgehubContract`
+
+Retrieves the bridge hub contract address.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**DATA, 20 bytes** - a single string value representing the bridge hub contract address.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getBridgehubContract",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": null,
+ "id": 1
+}
+```
+
+---
+
+## `zks_getMainContract`
+
+Retrieves the main contract address.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**DATA, 20 bytes** - address of the main contract.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getMainContract",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x32400084c286cf3e17e7b677ea9583e60a000324",
+ "id": 1
+}
+```
+
+---
+
+## `zks_getTestnetPaymaster`
+
+Retrieves the testnet paymaster address, specifically for interactions within the zkSync Sepolia Testnet environment.
+**Note: This method is only applicable for zkSync Sepolia Testnet.**
+
+#### Parameters
+
+None
+
+#### Returns
+
+**DATA, 20 bytes** - address of the testnet paymaster.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://sepolia.era.zksync.dev \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getTestnetPaymaster",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x3cb2b87d10ac01736a65688f3e0fb1b070b3eea3",
+ "id": 1
+}
+```
+
+---
+
+## `zks_getBridgeContracts`
+
+Retrieves the addresses of canonical bridge contracts for zkSync Era.
+
+#### Parameters
+
+None
+
+#### Returns
+
+Object containing the addresses of bridge contracts.
+
+- **l1Erc20DefaultBridge**: DATA, 20 bytes - address of the default ERC-20 bridge on Layer 1.
+- **l2Erc20DefaultBridge**: DATA, 20 bytes - address of the default ERC-20 bridge on Layer 2.
+- **l1WethBridge**: DATA, 20 bytes - address of the Wrapped Ethereum (WETH) bridge on Layer 1.
+- **l2WethBridge**: DATA, 20 bytes - address of the Wrapped Ethereum (WETH) bridge on Layer 2.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getBridgeContracts",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "l1Erc20DefaultBridge": "0x57891966931eb4bb6fb81430e6ce0a03aabde063",
+ "l2Erc20DefaultBridge": "0x11f943b2c77b743ab90f4a0ae7d5a4e7fca3e102",
+ "l1WethBridge": "0x0000000000000000000000000000000000000000",
+ "l2WethBridge": "0x0000000000000000000000000000000000000000"
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_L1ChainId`
+
+Retrieves the L1 chain ID.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**QUANTITY, 8 bytes** - The hexadecimal representation of the L1 chain ID.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_L1ChainId",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x1",
+ "id": 1
+}
+```
+
+---
+
+## `zks_getConfirmedTokens`
+
+Lists confirmed tokens. **Confirmed** in the method name means any token bridged to zkSync Era via the official bridge.
+
+The tokens are returned in alphabetical order by their symbol. This means the token id is its
+position in an alphabetically sorted array of tokens.
+
+#### Parameters
+
+1. **uint32** - token id from which to start.
+1. **uint8** - maximum number of tokens to list.
+
+#### Returns
+
+**Array** of token objects, each containing details about a specific confirmed token.
+
+- **l1Address**: DATA, 20 bytes - Layer 1 Ethereum address of the token.
+- **l2Address**: DATA, 20 bytes - Layer 2 zkSync Era address of the token.
+- **name**: String - name of the token.
+- **symbol**: String - symbol of the token.
+- **decimals**: uint8 - number of decimals the token uses.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getConfirmedTokens",
+ "params": [1, 3]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "l1Address": "0xb6ed7644c69416d67b522e20bc294a9a9b405b31",
+ "l2Address": "0xfea352c0d005a1e4ac7e092ef14fca18b8e6c8fd",
+ "name": "0xBitcoin Token",
+ "symbol": "0xBTC",
+ "decimals": 8
+ },
+ {
+ "l1Address": "0x111111111117dc0aa78b770fa6a738034120c302",
+ "l2Address": "0x3f0b8b206a7fbdb3ecfc08c9407ca83f5ab1ce59",
+ "name": "1INCH Token",
+ "symbol": "1INCH",
+ "decimals": 18
+ },
+ {
+ "l1Address": "0xb50721bcf8d664c30412cfbc6cf7a15145234ad1",
+ "l2Address": "0xd5428b08b604727c43ba5a37eed25a289978d081",
+ "name": "Arbitrum",
+ "symbol": "ARB",
+ "decimals": 18
+ }
+ ],
+ "id": 1
+}
+```
+
+---
+
+## `zks_getAllAccountBalances`
+
+Gets all account balances for a given address.
+
+#### Parameters
+
+1. **DATA, 20 bytes** - account address.
+
+#### Returns
+
+The method returns an object with token addresses as keys and their corresponding
+balances as values. Each key-value pair represents the balance of a specific token
+held by the account.
+
+- ****: QUANTITY, 32 bytes - The token address is the key, and its value is the balance of that token held by the account,
+represented in the smallest unit of the token (e.g., wei for ETH).
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getAllAccountBalances",
+ "params": ["0x98E9D288743839e96A8005a6B51C770Bbf7788C0"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "0x0000000000000000000000000000000000000000": "0x7c07ef5b520cb7d"
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_getL2ToL1MsgProof`
+
+Retrieves the proof for an L2 to L1 message.
+
+#### Parameters
+
+1. **uint32** - L2 block number.
+1. **DATA, 20 bytes** - sender's address.
+1. **DATA, 32 bytes** - message hash.
+1. **number** - Optional. The log position in L2.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getL2ToL1MsgProof",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+...
+```
+
+---
+
+## `zks_getL2ToL1LogProof`
+
+Retrieves the log proof for an L2 to L1 transaction.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - transaction hash.
+1. **integer** - Optional. Index of the log.
+
+#### Returns
+
+- **proof**: Array of DATA, 32 bytes - array of strings, each representing a piece of the proof for the specified log.
+- **id**: integer - identifier of the log within the transaction.
+- **root**: DATA, 32 bytes - root hash of the proof, anchoring it to a specific state in the blockchain.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getL2ToL1LogProof",
+ "params": [
+ "0x2a1c6c74b184965c0cb015aae9ea134fd96215d2e4f4979cfec12563295f610e"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "proof": [
+ "0x8c48910df2ca7de509daf50b3182fcdf2dd6c422c6704054fd857d6c9516d6fc",
+ "0xc5028885760b8b596c4fa11497c783752cb3a3fb3b8e6b52d7e54b9f1c63521e",
+ "0xeb1f451eb8163723ee19940cf3a8f2a2afdf51100ce8ba25839bd94a057cda16",
+ "0x7aabfd367dea2b5306b8071c246b99566dae551a1dbd40da791e66c4f696b236",
+ "0xe4733f281f18ba3ea8775dd62d2fcd84011c8c938f16ea5790fd29a03bf8db89",
+ "0x1798a1fd9c8fbb818c98cff190daa7cc10b6e5ac9716b4a2649f7c2ebcef2272",
+ "0x66d7c5983afe44cf15ea8cf565b34c6c31ff0cb4dd744524f7842b942d08770d",
+ "0xb04e5ee349086985f74b73971ce9dfe76bbed95c84906c5dffd96504e1e5396c",
+ "0xac506ecb5465659b3a927143f6d724f91d8d9c4bdb2463aee111d9aa869874db"
+ ],
+ "id": 0,
+ "root": "0x920c63cb0066a08da45f0a9bf934517141bd72d8e5a51421a94b517bf49a0d39"
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_L1BatchNumber`
+
+Retrieves the current L1 batch number.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**QUANTITY, 8 bytes** - hexadecimal representation of the current L1 batch number.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_L1BatchNumber",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x72af2",
+ "id": 1
+}
+```
+
+---
+
+## `zks_getBlockDetails`
+
+Retrieves details for a given block.
+
+- `committed`: The batch is closed and the state transition it creates exists on layer 1.
+
+- `proven`: The batch proof has been created, submitted, and accepted on layer 1.
+
+- `executed`: The batch state transition has been executed on L1; meaning the root state has been updated.
+
+#### Parameters
+
+The method requires a single parameter to specify the block whose details are to be retrieved.
+
+1. **uint32** - number of the block.
+
+#### Returns
+
+Object containing detailed information about the specified block.
+
+- **number**: uint32 - number of the block.
+- **l1BatchNumber**: uint32 - corresponding L1 batch number.
+- **timestamp**: uint32 - Unix timestamp when the block was committed.
+- **l1TxCount**: uint32 - number of L1 transactions included in the block.
+- **l2TxCount**: uint32 - number of L2 transactions included in the block.
+- **rootHash**: DATA, 32 bytes - root hash of the block's state after execution.
+- **status**: String - current status of the block (e.g., verified, executed).
+- **commitTxHash**: DATA, 32 bytes - transaction hash of the commit operation on L1.
+- **committedAt**: String - timestamp when the block was committed on L1.
+- **proveTxHash**: DATA, 32 bytes - transaction hash of the proof submission on L1.
+- **provenAt**: String - timestamp when the proof was submitted on L1.
+- **executeTxHash**: DATA, 32 bytes - transaction hash of the execution on L1.
+- **executedAt**: String - timestamp when the block execution was completed on L1.
+- **l1GasPrice**: uint64 - L1 gas price at the time of the block's execution.
+- **l2FairGasPrice**: uint64 - fair gas price on L2 at the time of the block's execution.
+- **baseSystemContractsHashes**: Object - A collection of hashes for the base system contracts.
+- **operatorAddress**: DATA, 20 bytes - address of the operator who committed the block.
+- **protocolVersion**: String - version of the zkSync protocol the block was committed under.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getBlockDetails",
+ "params": [140599]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "number": 140599,
+ "l1BatchNumber": 1617,
+ "timestamp": 1679815038,
+ "l1TxCount": 0,
+ "l2TxCount": 20,
+ "rootHash": "0xf1adac176fc939313eea4b72055db0622a10bbd9b7a83097286e84e471d2e7df",
+ "status": "verified",
+ "commitTxHash": "0xd045e3698f018cb233c3817eb53a41a4c5b28784ffe659da246aa33bda34350c",
+ "committedAt": "2023-03-26T07:21:21.046817Z",
+ "proveTxHash": "0x1591e9b16ff6eb029cc865614094b2e6dd872c8be40b15cc56164941ed723a1a",
+ "provenAt": "2023-03-26T19:48:35.200565Z",
+ "executeTxHash": "0xbb66aa75f437bb4255cf751badfc6b142e8d4d3a4e531c7b2e737a22870ff19e",
+ "executedAt": "2023-03-27T07:44:52.187764Z",
+ "l1GasPrice": 20690385511,
+ "l2FairGasPrice": 250000000,
+ "baseSystemContractsHashes": {
+ "bootloader": "0x010007793a328ef16cc7086708f7f3292ff9b5eed9e7e539c184228f461bf4ef",
+ "default_aa": "0x0100067d861e2f5717a12c3e869cfb657793b86bbb0caa05cc1421f16c5217bc"
+ },
+ "operatorAddress": "0xfeee860e7aae671124e9a4e61139f3a5085dfeee",
+ "protocolVersion": "Version5"
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_getTransactionDetails`
+
+Retrieves details for a given transaction.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - hash of the transaction.
+
+#### Returns
+
+Object containing detailed information about the specified transaction.
+
+- **isL1Originated**: Boolean - Indicates whether the transaction originated on Layer 1.
+- **status**: String - current status of the transaction (e.g., verified).
+- **fee**: QUANTITY, 32 bytes - transaction fee.
+- **gasPerPubdata**: QUANTITY, 32 bytes - gas amount per unit of public data for this transaction.
+- **initiatorAddress**: DATA, 20 bytes - address of the transaction initiator.
+- **receivedAt**: String - timestamp when the transaction was received.
+- **ethCommitTxHash**: DATA, 32 bytes - transaction hash of the commit operation.
+- **ethProveTxHash**: DATA, 32 bytes - transaction hash of the proof submission.
+- **ethExecuteTxHash**: DATA, 32 bytes - transaction hash of the execution.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getTransactionDetails",
+ "params": [
+ "0x22de7debaa98758afdaee89f447ff43bab5da3de6acca7528b281cc2f1be2ee9"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "isL1Originated": true,
+ "status": "verified",
+ "fee": "0x0",
+ "gasPerPubdata": "0x320",
+ "initiatorAddress": "0x87869cb87c4fa78ca278df358e890ff73b42a39e",
+ "receivedAt": "2023-03-03T23:52:24.169Z",
+ "ethCommitTxHash": "0x3da5b6eda357189c9243c41c5a33b1b2ed0169be172705d74681a25217702772",
+ "ethProveTxHash": "0x2f482d3ea163f5be0c2aca7819d0beb80415be1a310e845a2d726fbc4ac54c80",
+ "ethExecuteTxHash": "0xdaff5fd7ff91333b161de54534b4bb6a78e5325329959a0863bf0aae2b0fdcc6"
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_getRawBlockTransactions`
+
+Lists transactions in a block without processing them.
+
+#### Parameters
+
+1. **uint32** - number of the block.
+
+#### Returns
+
+Array of objects, each representing a raw transaction within
+the specified block. Each transaction object includes common data, execution details,
+a timestamp, and the raw transaction bytes.
+
+- **common_data**: Object - general information about the L2 transaction,
+such as nonce, fees, initiator address, signature,
+transaction type, input data, and paymaster parameters.
+- **execute**: Object - Details regarding the execution of the transaction, including the contract address, calldata, value, and any factory dependencies.
+- **received_timestamp_ms**: Number - timestamp when the transaction was received, in milliseconds.
+- **raw_bytes**: DATA, 32 bytes - raw bytes of the transaction as a hexadecimal string.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getRawBlockTransactions",
+ "params": [30098049]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "common_data": {
+ "L2": {
+ "nonce": 117,
+ "fee": {
+ "gas_limit": "0xbadbc",
+ "max_fee_per_gas": "0x202fbf0",
+ "max_priority_fee_per_gas": "0x0",
+ "gas_per_pubdata_limit": "0xc350"
+ },
+ "initiatorAddress": "0xe7734c4a8201af41db64da90eddb4c19bbf64710",
+ "signature": [203, 118, 119, 63, 1, 54, 91, 252, 188, 23, 120, 51, 4, 28],
+ "transactionType": "EIP1559Transaction",
+ "input": {
+ "hash": "0x970c9480960818b05832f7e5b76a0c46956003c34942e005672d7ddc537aaa59",
+ "data": [2, 249, 1, 111, 1305, 187, 2, 170, 21, 166, 251, 255]
+ },
+ "paymasterParams": {
+ "paymaster": "0x0000000000000000000000000000000000000000",
+ "paymasterInput": []
+ }
+ }
+ },
+ "execute": {
+ "contractAddress": "0x5155704bb41fde152ad3e1ae402e8e8b9ba335d3",
+ "calldata": "0fa0x5155704bb41fde152ad3e1ae402e8e8b9ba335d3",
+ "value": "0x0",
+ "factoryDeps": null
+ },
+ "received_timestamp_ms": 1711649348872,
+ "raw_bytes": "0x02f9016f8201447580840202fbf"
+ }
+ // Additional transactions
+ ],
+ "id": 1
+}
+```
+
+---
+
+## `zks_getL1BatchDetails`
+
+Retrieves details for a given L1 batch.
+
+#### Parameters
+
+1. **uint32** - L1 batch number.
+
+#### Returns
+
+Object of details for L1 batch.
+
+- **number**: uint32 - L1 batch number.
+- **timestamp**: uint64 - Unix timestamp when the batch was processed.
+- **l1TxCount**: uint32 - number of L1 transactions included in the batch.
+- **l2TxCount**: uint32 - number of L2 transactions associated with this batch.
+- **rootHash**: DATA, 32 bytes - root hash of the state after processing the batch.
+- **status**: String - current status of the batch (e.g., verified).
+- **commitTxHash**: DATA, 32 bytes - Ethereum transaction hash for the commit operation.
+- **committedAt**: String - timestamp when the batch was committed on Ethereum.
+- **proveTxHash**: DATA, 32 bytes - Ethereum transaction hash for the proof submission.
+- **provenAt**: String - timestamp when the proof was submitted.
+- **executeTxHash**: DATA, 32 bytes - Ethereum transaction hash for the execution.
+- **executedAt**: String - timestamp when the execution was completed.
+- **l1GasPrice**: uint64 - gas price on L1 at the time of batch processing.
+- **l2FairGasPrice**: uint64 - fair gas price on L2 at the time of batch processing.
+- **baseSystemContractsHashes**: Object - Hashes of the base system contracts involved in the batch.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getL1BatchDetails",
+ "params": [468355]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "number": 468355,
+ "timestamp": 1711649164,
+ "l1TxCount": 1,
+ "l2TxCount": 2363,
+ "rootHash": "0x7b31ef880f09238f13b71a0f6bfea340b9c76d01bba0712af6aa0a4f224be167",
+ "status": "verified",
+ "commitTxHash": "0x5b2598bf1260d498c1c6a05326f7416ef2a602b8a1ac0f75b583cd6e08ae83cb",
+ "committedAt": "2024-03-28T18:24:49.713730Z",
+ "proveTxHash": "0xc02563331d0a83d634bc4190750e920fc26b57096ec72dd100af2ab037b43912",
+ "provenAt": "2024-03-29T03:09:19.634524Z",
+ "executeTxHash": "0xbe1ba1fdd17c2421cf2dabe2908fafa26ff4fa2190a7724d16295dd9df72b144",
+ "executedAt": "2024-03-29T18:18:04.204270Z",
+ "l1GasPrice": 47875552051,
+ "l2FairGasPrice": 25000000,
+ "baseSystemContractsHashes": {
+ "bootloader": "0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e",
+ "default_aa": "0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066"
+ }
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_getBytecodeByHash`
+
+Retrieves the bytecode of a transaction by its hash.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - hash of the transaction.
+
+#### Returns
+
+**Array of uint8** - array of the transaction's bytecode.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getBytecodeByHash",
+ "params": ["0x0100067d861e2f5717a12c3e869cfb657793b86bbb0caa05cc1421f16c5217bc"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ 0,
+ 4,
+ 0,
+ ...
+ ],
+ "id": 1
+}
+```
+
+---
+
+## `zks_getL1GasPrice`
+
+Retrieves the current L1 gas price.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**QUANTITY, 8 bytes** - current L1 gas price in hexadecimal format, representing the amount of wei per unit of gas.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getL1GasPrice",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x11cccd9f58",
+ "id": 1
+}
+```
+
+---
+
+## `zks_getFeeParams`
+
+Retrieves the current fee parameters.
+
+#### Parameters
+
+None
+
+#### Returns
+
+Object
+
+- **V2**: Object - fee parameter configuration for the current version of the zkSync protocol.
+- **config**: Object - settings related to transaction fee computation.
+- **minimal_l2_gas_price**: uint64 - minimal gas price on L2.
+- **compute_overhead_part**: float64 - compute overhead part in fee calculation.
+- **pubdata_overhead_part**: float64 - public data overhead part in fee calculation.
+- **batch_overhead_l1_gas**: uint64 - overhead in L1 gas for a batch of transactions.
+- **max_gas_per_batch**: uint64 - maximum gas allowed per batch.
+- **max_pubdata_per_batch**: uint64 - maximum amount of public data allowed per batch.
+- **l1_gas_price**: uint64 - current L1 gas price.
+- **l1_pubdata_price**: uint64 - price of storing public data on L1.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getFeeParams",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "V2": {
+ "config": {
+ "minimal_l2_gas_price": 25000000,
+ "compute_overhead_part": 0,
+ "pubdata_overhead_part": 1,
+ "batch_overhead_l1_gas": 800000,
+ "max_gas_per_batch": 200000000,
+ "max_pubdata_per_batch": 240000
+ },
+ "l1_gas_price": 46226388803,
+ "l1_pubdata_price": 100780475095
+ }
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_getProtocolVersion`
+
+Gets the protocol version.
+
+#### Parameter
+
+1. **uint16** - Optional. Specific version ID.
+
+#### Returns
+
+Object
+
+- **version_id**: uint16 - protocol version ID.
+- **timestamp**: uint64 - Unix timestamp of the version's activation.
+- **verification_keys_hashes**: Object - Contains the hashes of various verification keys used in the protocol.
+- **base_system_contracts**: Object - Addresses of the base system contracts, like the bootloader and default account abstraction (AA).
+- **l2_system_upgrade_tx_hash**: DATA, 32 bytes - hash of the transaction used for the system upgrade, if any.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getProtocolVersion",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "version_id": 22,
+ "timestamp": 1710264138,
+ "verification_keys_hashes": {
+ "params": {
+ "recursion_node_level_vk_hash": "0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080",
+ "recursion_leaf_level_vk_hash": "0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a",
+ "recursion_circuits_set_vks_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "recursion_scheduler_level_vk_hash": "0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7"
+ },
+ "base_system_contracts": {
+ "bootloader": "0x010007ede999d096c84553fb514d3d6ca76fbf39789dda76bfeda9f3ae06236e",
+ "default_aa": "0x0100055b041eb28aff6e3a6e0f37c31fd053fc9ef142683b05e5f0aee6934066"
+ },
+ "l2_system_upgrade_tx_hash": null
+ },
+ "id": 1
+}
+```
+
+---
+
+## `zks_getProof`
+
+This method generates Merkle proofs for one or more storage values associated with a specific account,
+accompanied by a proof of their authenticity. It verifies that these values remain unaltered.
+
+Similar to Ethereum's `eth_getProof`, this method provides verification means under zkSync Era's distinct
+Merkle tree architecture, noting several key differences:
+
+- The retrieval of values and their respective proofs is determined by an L1 batch number instead of a block number.
+- zkSync Era employs a different Merkle tree structure, necessitating a unique approach to proof verification.
+Unlike Ethereum's two-level hexadecimal trie—where the top level maps to accounts and the bottom to
+account storage slots—Era uses a single-level, full binary tree with 256-bit keys.
+- In Ethereum, account-level values are mapped using specific combinations of account and storage keys. For example, to
+store the code hash for account address A, it uses account `0x0000000000000000000000000000000000008002`
+and a storage key generated by padding A's address. Conversely, zkSync Era's Merkle tree specifics are as follows:
+
+**zkSync Era Merkle Tree Details:**
+
+- The tree is a one-level, full binary tree, supporting 256-bit keys and 40-byte values.
+- Keys are derived by reversing the output of `reversed(blake2s256([0_u8; 12] ++ account_address ++ storage_key))`,
+where `account_address` is the 20-byte address, and `storage_key` is a 32-byte key from the account's storage.
+The `++` operator denotes byte concatenation, and `reversed` inverts the byte sequence order.
+- Values are structured as `big_endian(leaf_index) ++ storage_value`, with `leaf_index` marking
+the 1-based index in entry order, and `storage_value` representing the 32-byte slot value.
+- Empty tree entries are marked with 40 zero bytes (`[0_u8; 40]`).
+- Leaf hashing utilizes `blake2s256` without tags, treating vacant leaves as `blake2s256([0_u8; 40])`.
+- Internal node hashes are computed by concatenating the hashes of their child nodes, again using `blake2s256`
+without tags: `blake2s256(left_child_hash ++ right_child_hash)`
+
+#### Parameters
+
+1. **DATA, 20 bytes** - account address to fetch storage values and proofs for.
+1. **Array of Data, 32 bytes** - the keys in the account.
+1. **uint32** - Number of the L1 batch specifying the point in time at which the requested values are returned.
+
+#### Returns
+
+The method returns an object containing the account details and proofs for storage keys. The structure of the returned object is as follows:
+
+- **address**: account address associated with the storage proofs.
+- **storageProof**: array of objects, each representing a storage proof for the requested keys.
+ - **key**: DATA, 32 bytes - storage key for which the proof is provided.
+ - **value**: DATA, 32 bytes - value stored in the specified storage key at the time of the specified `l1BatchNumber`.
+ - **index**: uint64 - A 1-based index representing the position of the tree entry within the Merkle tree. This index is used
+ to help reconstruct the Merkle path during verification.
+ - **proof**: Array of DATA, 32 bytes - An array of 32-byte hashes that constitute the Merkle path from the leaf node
+ (representing the storage key-value pair) to the root of the Merkle tree.
+ The path is ordered from the root to the leaf.
+ The root hash itself is not included in this array because it is published on L1 as part of the L1 batch commit data.
+ If the `proof` array contains fewer than 256 hashes, it means that some hashes corresponding to entirely empty subtrees
+ are omitted starting from the end of the Merkle path.
+ For instance, if there are 255 hashes in the `proof`,
+ the single omitted hash is the hash of an empty subtree (`empty_value_hash = blake2s256([0_u8; 40])`).
+ Further omitted hashes are calculated progressively as hashes of the concatenated pair of the previous level's omitted hash
+ (e.g., `blake2s256(empty_value_hash ++ empty_value_hash)`), and so on, indicating progressively higher levels of empty subtrees in the Merkle tree.
+
+Using the information in each `storageProof`, one can reconstruct the Merkle tree's root hash
+for a given storage key and compare it to the reference root hash published on L1.
+If the two hashes match, it confirms the authenticity of the provided storage value for the given key.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "zks_getProof",
+ "params": [
+ "0x0000000000000000000000000000000000008003",
+ [
+ "0x8b65c0cf1012ea9f393197eb24619fd814379b298b238285649e14f936a5eb12"
+ ],
+ 354895
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "address": "0x0000000000000000000000000000000000008003",
+ "storageProof": [
+ {
+ "key": "0x8b65c0cf1012ea9f393197eb24619fd814379b298b238285649e14f936a5eb12",
+ "proof": [
+ "0xe3e8e49a998b3abf8926f62a5a832d829aadc1b7e059f1ea59ffbab8e11edfb7",
+ ...
+ ],
+ "value": "0x0000000000000000000000000000000000000000000000000000000000000060",
+ "index": 27900957
+ }
+ ]
+ },
+ "id": 1
+}
+```
diff --git a/content/70.api-reference/30.debug-rpc.md b/content/70.api-reference/30.debug-rpc.md
new file mode 100644
index 00000000..fb9a36da
--- /dev/null
+++ b/content/70.api-reference/30.debug-rpc.md
@@ -0,0 +1,234 @@
+---
+title: Debug JSON-RPC API
+description: Methods useful for debugging purposes with zkSync Era.
+github: https://github.com/matter-labs/zksync-era/blob/main/core/lib/web3_decl/src/namespaces/debug.rs
+---
+
+## `debug_traceBlockByHash`
+
+Traces all calls made from a specific block by its L2 hash.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - hash defining the L2 block.
+1. **TracerConfig** - Optional configuration for tracing. Refer to the
+:external-link{text="TraceConfig documentation" href="https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#traceconfig"} for more details.
+
+#### Returns
+
+Array of objects, each representing a traced call made from the specified block.
+
+:display-partial{path="api-reference/_partials/_trace-object"}
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "debug_traceBlockByHash",
+ "params": ["0x4bd0bd4547d8f8a4fc86a024e54558e156c1acf43d82e24733c6dac2fe5c5fc7"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "type": "Call",
+ "from": "0x0000000000000000000000000000000000000000",
+ "to": "0x0000000000000000000000000000000000008001",
+ "gas": "0x18be25",
+ "gasUsed": "0x7603b",
+ "value": "0xa1e94fc0fe6043",
+ "output": "0x",
+ "input": "0x",
+ "error": null,
+ "revertReason": null,
+ "calls": [...]
+ },
+ ...
+ ]
+}
+```
+
+---
+
+## `debug_traceBlockByNumber`
+
+Traces all calls made from a specific block by its L2 block number.
+
+#### Parameters
+
+1. **QUANTITY, 8 bytes | TAG** - The number of the block to trace. This can be a hex-encoded number or one of the strings "earliest", "latest", or "pending".
+1. **TracerConfig** - Optional configuration for tracing. Refer to the
+:external-link{text="TraceConfig documentation" href="https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#traceconfig"} for more details.
+
+#### Returns
+
+Array of objects, each representing a traced call made from the specified block.
+
+:display-partial{path="api-reference/_partials/_trace-object"}
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "debug_traceBlockByNumber",
+ "params": ["0x24b258"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "result": {
+ "type": "Call",
+ "from": "0x0000000000000000000000000000000000000000",
+ "to": "0x0000000000000000000000000000000000008001",
+ "gas": "0x18be25",
+ "gasUsed": "0x7603b",
+ "value": "0xa1e94fc0fe6043",
+ "output": "0x",
+ "input": "0x",
+ "error": null,
+ "revertReason": null,
+ "calls": [...]
+ },
+ ...
+ ]
+}
+```
+
+---
+
+## `debug_traceCall`
+
+Traces a call made at a specific block, by block number or hash.
+
+#### Parameters
+
+1. **CallRequest** - The call request to trace, containing fields like `from`, `to`, `data`, and optionally `gas`, `gasPrice`, and `value`.
+1. **DATA, 32 bytes | QUANTITY, 8 bytes** - Optional. The block identifier, which can be a block number as a hex-encoded number or a block hash.
+If not specified, the latest block is used.
+1. **TracerConfig** - Optional. Configuration options for the trace. For more details, refer to the :external-link{text="TraceConfig documentation" href="https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#traceconfig"}.
+
+#### Returns
+
+Array of objects, each representing a traced call made from the specified block.
+
+:display-partial{path="api-reference/_partials/_trace-object"}
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "debug_traceCall",
+ "params": [
+ {
+ "from": "0x1111111111111111111111111111111111111111",
+ "to": "0x2222222222222222222222222222222222222222",
+ "data": "0xffffffff"
+ },
+ "0x24b258"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "type": "Call",
+ "from": "0x0000000000000000000000000000000000000000",
+ "to": "0x0000000000000000000000000000000000008001",
+ "gas": "0x0",
+ "gasUsed": "0x6b4b",
+ "value": "0x0",
+ "output": "0x",
+ "input": "0xffffffff",
+ "error": null,
+ "revertReason": null,
+ "calls": []
+ },
+ "id": 1
+}
+```
+
+---
+
+## `debug_traceTransaction`
+
+Uses the :external-link{text="EVM's `callTracer`" href="https://geth.ethereum.org/docs/developers/evm-tracing/built-in-tracers#call-tracer"}
+to return a debug trace of a specific transaction given by its transaction hash.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - The 32-byte hash of the transaction to trace.
+1. **TracerConfig** - Optional. Configuration options for the trace. For more details, refer to the :external-link{text="TraceConfig documentation" href="https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-debug#traceconfig"}.
+
+#### Returns
+
+Array of objects, each representing a traced call made from the specified block.
+
+:display-partial{path="api-reference/_partials/_trace-object"}
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "debug_traceTransaction",
+ "params": ["0x4b228f90e796de5a18227072745b0f28e0c4a4661a339f70d3bdde591d3b7f3a"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "type": "Call",
+ "from": "0x0000000000000000000000000000000000000000",
+ "to": "0x0000000000000000000000000000000000008001",
+ "gas": "0x154800",
+ "gasUsed": "0xc2419",
+ "value": "0x0",
+ "output": "0x",
+ "input": "0x095ea7b30000000000000000000000002da10a1e27bf85cedd8ffb1abbe97e53391c0295ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+ "error": null,
+ "revertReason": null,
+ "calls": [...]
+ },
+ ...
+ ]
+}
+```
diff --git a/content/70.api-reference/35.ethereum-rpc.md b/content/70.api-reference/35.ethereum-rpc.md
new file mode 100644
index 00000000..3c310823
--- /dev/null
+++ b/content/70.api-reference/35.ethereum-rpc.md
@@ -0,0 +1,1504 @@
+---
+title: Ethereum JSON-RPC API
+description: JSON-RPC API methods for the eth_ namespace for zkSync Era.
+---
+
+zkSync Era supports the standard :external-link{text="Ethereum JSON-RPC API" href="https://ethereum.org/en/developers/docs/apis/json-rpc/"}.
+
+## `eth_chainId`
+
+Gets the current chain ID.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**QUANTITY** - hexadecimal representation of the current blockchain network's chain ID.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_chainId",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x144",
+ "id": 1
+}
+```
+
+---
+
+## `eth_call`
+
+Executes a new message call immediately without creating a transaction on the block chain.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_call-request-params"}
+
+1. **BlockIdVariant** - Optional.
+See the default block parameters.
+
+#### Returns
+
+**DATA** - The data returned by the smart contract function, encoded in hexadecimal format.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_call",
+ "params": [
+ {
+ "to": "0xc94770007dda54cF92009BFF0dE90c06F603a09f"
+ },
+ "latest"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x",
+ "id": 1
+}
+```
+
+---
+
+## `eth_estimateGas`
+
+Estimates the amount of gas needed to execute a call. The `from` field cannot be a smart contract that is not a `SmartAccount` if so an exception is hit.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_call-request-params"}
+1. **uint32** - Optional block number.
+
+#### Returns
+
+**QUANTITY** - The estimated amount of gas in hexadecimal format.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_estimateGas",
+ "params": [
+ {
+ "to": "0x...",
+ "data": "0x..."
+ }
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "result": "0x5cec"
+}
+```
+
+---
+
+## `eth_gasPrice`
+
+Retrieves the current average gas price in the network, expressed in `gwei`.
+This value provides an estimate of how much each unit of gas would cost for transactions
+on the network at the time of the query. It's particularly useful for dynamically adjusting
+transaction fees to current network conditions.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**QUANTITY** - The current average gas price on the network, represented in `gwei` and encoded as a hexadecimal string.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_gasPrice",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x17d7840",
+ "id": 1
+}
+```
+
+---
+
+## `eth_newFilter`
+
+Initiates a new filter for listening to specific events emitted by smart contracts
+or other blockchain actions. This feature enables applications to react to events and
+updates in real-time by setting criteria for the events they're interested in.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_filter-object"}
+
+#### Returns
+
+**QUANTITY** - unique identifier of the newly created filter, encoded as a hexadecimal string.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_newFilter",
+ "params": [
+ {
+ "topics": [
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
+ ]
+ }
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0xb415d4b0e6ca750802be8c84c99a68170deeb9ed09c4e2eb0dc5299ab715e978",
+ "id": 1
+}
+```
+
+---
+
+## `eth_newBlockFilter`
+
+Creates a filter to notify when a new block arrives.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**QUANTITY** - unique identifier of the newly created block filter, encoded as a hexadecimal string.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_newBlockFilter",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0xb825a38f6350ff4d75d806e6f83a42a31d39fc7ef4fde02b404e8edeef6799b",
+ "id": 1
+}
+```
+
+---
+
+## `eth_uninstallFilter`
+
+Removes a filter that was previously created using `eth_newFilter`, `eth_newBlockFilter`, or
+`eth_newPendingTransactionFilter`. This method is used to stop receiving updates for the
+specified filter and to clean up resources associated with it on the node.
+
+#### Parameters
+
+1. **QUANTITY, 32 bytes** - unique identifier of the filter to be removed, originally returned by the filter creation method.
+
+#### Returns
+
+**Boolean** - `true` if the filter was successfully uninstalled; otherwise, `false`.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_uninstallFilter",
+ "params": ["0xb825a38f6350ff4d75d806e6f83a42a31d39fc7ef4fde02b404e8edeef6799b"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": true,
+ "id": 1
+}
+```
+
+## `eth_newPendingTransactionFilter`
+
+Sets up a new filter to provide notifications for transactions that enter the pending state,
+which means they are broadcast to the network but not yet included in a block. This filter is
+useful for tracking transactions that are awaiting confirmation.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**QUANTITY, 32 bytes** - unique identifier of the new filter for pending transactions, encoded as a hexadecimal string.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_newPendingTransactionFilter",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x9d844950bf3e368b43490ff4efdc0a009887365103f9fece0d8cc44adabf6a82",
+ "id": 1
+}
+```
+
+---
+
+## `eth_getLogs`
+
+Retrieves the logs matching a filter object.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_filter-object"}
+
+#### Returns
+
+Array of log objects that match the filter criteria. Each log object contains detailed information about a single log entry.
+
+- **address**: Data, 20 bytes - address of the contract that generated the log.
+- **topics**: Array of Data - Topics are indexed event parameters stored in the log.
+- **data**: DATA - The data contained in the log.
+- **blockHash**: DATA, 32 bytes - Hash of the block where this log was in.
+- **blockNumber**: QUANTITY - block number where this log was in.
+- **transactionHash**: DATA, 32 bytes - Hash of the transaction that generated this log.
+- **transactionIndex**: QUANTITY - Integer of the transaction's index position in the block.
+- **logIndex**: QUANTITY - Integer of the log's index position in the block.
+- **transactionIndex**: QUANTITY - Integer of the log's index position in the transaction.
+- **logType**: String - The type of log (can be `null`).
+- **removed**: Boolean - Indicates if the log was removed due to a chain reorganization.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getLogs",
+ "params": [
+ {
+ "topics": [
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"
+ ],
+ "fromBlock": "latest"
+ }
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "address": "0x000000000000000000000000000000000000800a",
+ "topics": [
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ "0x00000000000000000000000091307ca99c2a9caac9d24259ae719a4a98453ba1",
+ "0x0000000000000000000000000000000000000000000000000000000000008001"
+ ],
+ "data": "0x00000000000000000000000000000000000000000000000000007df3cbd10c80",
+ "blockHash": "0xa0ddf35a0e35d03f533a2620d8c37fd4162d740cec3d3c635f43ca213f8a051f",
+ "blockNumber": "0x1d2ba84",
+ "transactionHash": "0xfdfcfdc6a0e2e3d09218749a752a2c2933f9eda5e9985c7fa3d861cb0112817d",
+ "transactionIndex": "0x0",
+ "logIndex": "0x0",
+ "transactionLogIndex": "0x0",
+ "logType": null,
+ "removed": false
+ },
+ ...
+ ],
+ "id": 1
+}
+```
+
+---
+
+## `eth_getFilterLogs`
+
+
+
+Retrieves the logs for a filter created with `eth_newFilter`.
+
+#### Parameters
+
+1. **QUANTITY, 32 bytes** - the filter id.
+
+#### Returns
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getFilterLogs",
+ "params": [
+ "0xae2bfd759a98fd5e7a262f785b7706103a174391c5081dda92fea2cf6d9f94a6"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {...}
+ ],
+ "id": 1
+}
+```
+
+---
+
+## `eth_getFilterChanges`
+
+
+
+Retrieves the logs since the last poll for a filter created with `eth_newFilter`.
+
+#### Parameters
+
+1. **QUANTITY, 32 bytes** - the filter id.
+
+#### Returns
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getFilterChanges",
+ "params": [
+ "0x127e9eca4f7751fb4e5cb5291ad8b455"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {...}
+ ],
+ "id": 1
+}
+```
+
+---
+
+## `eth_getBalance`
+
+Gets the balance of an account at a specific block.
+
+#### Parameters
+
+1. **DATA, 20 bytes** - address of the account whose balance is being queried.
+1. :display-partial{path="api-reference/_partials/_quantity-tag"}
+
+#### Returns
+
+**QUANTITY** - The balance of the account at the specified block, encoded as a hexadecimal string representing the value in gwei.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getBalance",
+ "params": [
+ "0x103301a002a8AaDC8Fb83A2A70740FA6da7f83b8",
+ "latest"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "id":1,
+ "result": "0x12e54351196e564"
+}
+```
+
+---
+
+## `eth_getBlockByNumber`
+
+Retrieves a block by its number.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_quantity-tag"}
+1. **Boolean** - A boolean flag indicating whether to return full transaction objects (`true`) or just their hashes (`false`).
+
+#### Returns
+
+Object representing the requested block, including various metadata fields
+and either a list of transaction hashes or full transaction objects,
+based on the `full_transactions` parameter.
+
+- **hash**: DATA, 32 bytes - hash of the block.
+- **parentHash**: DATA, 32 bytes - hash of the block's parent.
+- **sha3Uncles**: DATA, 32 bytes - SHA3 of the uncles data in the block.
+- **miner**: DATA, 20 bytes - address of the miner who mined the block.
+- **stateRoot**: DATA, 32 bytes - root of the final state trie of the block.
+- **transactionsRoot**: DATA, 32 bytes - root of the trie of the transactions in the block.
+- **receiptsRoot**: Data, 32 bytes - root of the receipts trie of the block.
+- **number**: QUANTITY - block number.
+- **l1BatchNumber**: QUANTITY - (Optional) The L1 batch number associated with the block.
+- **gasUsed**: QUANTITY - total gas used by all transactions in this block.
+- **gasLimit**: QUANTITY - gas limit of the block.
+- **baseFeePerGas**: QUANTITY - (Optional) base fee per gas in the block.
+- **extraData**: DATA - Extra data attached to the block.
+- **logsBloom**: DATA, 256 bytes - The bloom filter for the logs contained in the block.
+- **timestamp**: QUANTITY - timestamp for when the block was collated.
+- **l1BatchTimestamp**: QUANTITY - (Optional) L1 batch timestamp associated with the block.
+- **difficulty**: QUANTITY - difficulty of the block.
+- **totalDifficulty**: QUANTITY - total difficulty of the chain up to this block.
+- **uncles**: Array - An array of uncle hashes.
+- **transactions**: Array - An array of transaction hashes or transaction objects, depending on the `full_transactions` parameter.
+- **size**: QUANTITY - size of the block in bytes.
+- **mixHash**: DATA - mix hash of the block.
+- **nonce**: DATA, 8 bytes - nonce of the block.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getBlockByNumber",
+ "params": ["0x1d1551e", false]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "hash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "parentHash": "0x41f40b22c984aaf1c4cc98bfc8357156729f0a57ddc367fca8b38866b6b4a600",
+ "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
+ "miner": "0x0000000000000000000000000000000000000000",
+ "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "transactionsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "number": "0x1d1551e",
+ "l1BatchNumber": "0x72ae1",
+ "gasUsed": "0x1215d56",
+ "gasLimit": "0xffffffff",
+ "baseFeePerGas": "0x17d7840",
+ "extraData": "0x",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "timestamp": "0x660c1740",
+ "l1BatchTimestamp": "0x660c16dc",
+ "difficulty": "0x0",
+ "totalDifficulty": "0x0",
+ "sealFields": [],
+ "uncles": [],
+ "transactions": [
+ "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "0xf200616da35820f5f407ffcc0a3fef84c8124638377eb2fdb4925888a90ff7da",
+ "0x54ba07e65314ea38ececd0f7f623306f00103727865bf036a0117181b596c95b",
+ "0x9453e01668129bc6e0bcece2a28a424fdde1624e5db03f83de51430ff3954b45",
+ "0xac42bce47be22c4bd7891b476be7ff7a9c67442c8359da0e5c598fa2f9fe71ef",
+ "0x1b1db6412cdf4ca8158b5efbeeada70d1d6e67a290b529e1fec145bab1e407da",
+ "0x5fe0e3ee65f5c6be6975bccfd116d54dd5d8b3c83074165a5641087fe36d2ee3",
+ "0x6ce2631af03a2d939a34d159ae01d025da4ea162ed5bf6769e18ace64cce29a9",
+ "0x386d0fdb243f20e8b2d2683686baa315b16cc81f7b80ea58f69b628e4e047a32",
+ "0x2c72143b520c4ad826972fc0725a8eeac590188b683cbb0cf103e5be60349607",
+ "0x0f7d10d27357b2f69b63cc808b76faf4c3d3bbd6dae59a10930399f6a7ab476b"
+ ],
+ "size": "0x0",
+ "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "nonce": "0x0000000000000000"
+ },
+ "id": 2
+}
+```
+
+---
+
+## `eth_getBlockByHash`
+
+Retrieves a block by its hash.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - hexadecimal string representing the hash of the block.
+1. **Boolean** - A boolean flag indicating whether to return full transaction objects (`true`) or just their hashes (`false`).
+
+#### Returns
+
+Object containing detailed information about the block and its transactions.
+
+- **hash**: DATA, 32 bytes - hash of the block.
+- **parentHash**: DATA, 32 bytes - hash of the block's parent.
+- **sha3Uncles**: DATA, 32 bytes - SHA3 of the uncles data in the block.
+- **miner**: DATA, 20 bytes - address of the miner who mined the block.
+- **stateRoot**: DATA, 32 bytes - root of the final state trie of the block.
+- **transactionsRoot**: DATA, 32 bytes - root of the trie of the transactions in the block.
+- **receiptsRoot**: Data, 32 bytes - root of the receipts trie of the block.
+- **number**: QUANTITY - block number.
+- **l1BatchNumber**: QUANTITY - (Optional) The L1 batch number associated with the block.
+- **gasUsed**: QUANTITY - total gas used by all transactions in this block.
+- **gasLimit**: QUANTITY - gas limit of the block.
+- **baseFeePerGas**: QUANTITY - (Optional) base fee per gas in the block.
+- **extraData**: DATA - Extra data attached to the block.
+- **logsBloom**: DATA, 256 bytes - The bloom filter for the logs contained in the block.
+- **timestamp**: QUANTITY - timestamp for when the block was collated.
+- **l1BatchTimestamp**: QUANTITY - (Optional) L1 batch timestamp associated with the block.
+- **difficulty**: QUANTITY - difficulty of the block.
+- **totalDifficulty**: QUANTITY - total difficulty of the chain up to this block.
+- **uncles**: Array - An array of uncle hashes.
+- **transactions**: Array - An array of transaction hashes or transaction objects, depending on the `full_transactions` parameter.
+- **size**: QUANTITY - size of the block in bytes.
+- **mixHash**: DATA - mix hash of the block.
+- **nonce**: DATA, 8 bytes - nonce of the block.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getBlockByHash",
+ "params": [
+ "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ false
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "hash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "parentHash": "0x41f40b22c984aaf1c4cc98bfc8357156729f0a57ddc367fca8b38866b6b4a600",
+ "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
+ "miner": "0x0000000000000000000000000000000000000000",
+ "stateRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "transactionsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "receiptsRoot": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "number": "0x1d1551e",
+ "l1BatchNumber": "0x72ae1",
+ "gasUsed": "0x1215d56",
+ "gasLimit": "0xffffffff",
+ "baseFeePerGas": "0x17d7840",
+ "extraData": "0x",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "timestamp": "0x660c1740",
+ "l1BatchTimestamp": "0x660c16dc",
+ "difficulty": "0x0",
+ "totalDifficulty": "0x0",
+ "sealFields": [],
+ "uncles": [],
+ "transactions": [
+ "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "0xf200616da35820f5f407ffcc0a3fef84c8124638377eb2fdb4925888a90ff7da",
+ "0x54ba07e65314ea38ececd0f7f623306f00103727865bf036a0117181b596c95b",
+ "0x9453e01668129bc6e0bcece2a28a424fdde1624e5db03f83de51430ff3954b45",
+ "0xac42bce47be22c4bd7891b476be7ff7a9c67442c8359da0e5c598fa2f9fe71ef",
+ "0x1b1db6412cdf4ca8158b5efbeeada70d1d6e67a290b529e1fec145bab1e407da",
+ "0x5fe0e3ee65f5c6be6975bccfd116d54dd5d8b3c83074165a5641087fe36d2ee3",
+ "0x6ce2631af03a2d939a34d159ae01d025da4ea162ed5bf6769e18ace64cce29a9",
+ "0x386d0fdb243f20e8b2d2683686baa315b16cc81f7b80ea58f69b628e4e047a32",
+ "0x2c72143b520c4ad826972fc0725a8eeac590188b683cbb0cf103e5be60349607",
+ "0x0f7d10d27357b2f69b63cc808b76faf4c3d3bbd6dae59a10930399f6a7ab476b"
+ ],
+ "size": "0x0",
+ "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "nonce": "0x0000000000000000"
+ },
+ "id": 2
+}
+```
+
+---
+
+## `eth_getBlockTransactionCountByNumber`
+
+This method provides the total number of transactions included in a specific block,
+identified by its block number. It's a useful query for understanding the volume of
+transactions processed in a particular block.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_quantity-tag"}
+
+#### Returns
+
+**QUANTITY** - number of transactions in the specified block, encoded as a hexadecimal string.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getBlockTransactionCountByNumber",
+ "params": ["0x1d1551e"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0xb",
+ "id": 2
+}
+```
+
+---
+
+## `eth_getBlockReceipts`
+Fetches transaction receipts for all transactions in a specified block,
+offering comprehensive details such as the transaction status, gas used, and event logs.
+
+#### Parameters
+
+1. :display-partial{path="api-reference/_partials/_quantity-tag"}
+
+#### Returns
+
+Array of transaction receipt objects, each containing detailed information about a transaction included in the specified block.
+
+- **transactionHash**: DATA, 32 bytes - hash of the transaction.
+- **transactionIndex**: QUANTITY - index of the transaction in the block.
+- **blockHash**: DATA, 32 bytes - hash of the block containing the transaction.
+- **blockNumber**: QUANTITY - block number.
+- **from**: DATA, 20 bytes - address of the sender.
+- **to**: DATA, 20 bytes - address of the receiver. Can be `null` for contract creation transactions.
+- **cumulativeGasUsed**: QUANTITY - total amount of gas used when this transaction was executed in the block.
+- **gasUsed**: QUANTITY - amount of gas used by this specific transaction.
+- **contractAddress**: DATA, 20 bytes - contract address created, if the transaction was a contract creation, otherwise `null`.
+- **logs**: Array\ - An array of log objects generated by this transaction.
+- **status**: QUANTITY - status of the transaction, where `"0x1"` indicates success and `"0x0"` indicates failure.
+- **logsBloom**: DATA - bloom filter for the logs of the block.
+- **type**: QUANTITY - type of the transaction.
+- **effectiveGasPrice**: QUANTITY - effective gas price paid per unit of gas.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_getBlockReceipts",
+ "params": ["0x1d1551e"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "jsonrpc": "2.0",
+ "result": [
+ {
+ "transactionHash": "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "transactionIndex": "0x0",
+ "blockHash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "blockNumber": "0x1d1551e",
+ "l1BatchTxIndex": "0x469",
+ "l1BatchNumber": "0x72ae1",
+ "from": "0x1bc3366b3664c01b8687b1efcfc6478d9351a8a9",
+ "to": "0x9b5def958d0f3b6955cbea4d5b7809b2fb26b059",
+ "cumulativeGasUsed": "0x0",
+ "gasUsed": "0x2b9bcb",
+ "contractAddress": null,
+ "logs": [
+ {
+ "address": "0x000000000000000000000000000000000000800a",
+ "topics": [
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ "0x0000000000000000000000001bc3366b3664c01b8687b1efcfc6478d9351a8a9",
+ "0x0000000000000000000000000000000000000000000000000000000000008001"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000001011c8f80b6c0",
+ "blockHash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "blockNumber": "0x1d1551e",
+ "l1BatchNumber": "0x72ae1",
+ "transactionHash": "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "transactionIndex": "0x0",
+ "logIndex": "0x0",
+ "transactionLogIndex": "0x0",
+ "logType": null,
+ "removed": false
+ },
+ {
+ ...
+ },
+ ...
+ ],
+ "l2ToL1Logs": [],
+ "status": "0x1",
+ "root": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0x17d7840"
+ },}
+ ],
+ "id": 2
+}
+```
+
+---
+
+## `eth_getBlockTransactionCountByHash`
+
+This method returns the number of transactions included in a block, identified by the block's hash.
+It's particularly useful for determining the transaction volume within a specific block without
+retrieving the transactions themselves.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - hash of the block for which the transaction count is requested. This should be provided as a hexadecimal string.
+
+#### Returns
+
+**QUANTITY** - number of transactions in the block, encoded as a hexadecimal string.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_getBlockTransactionCountByHash",
+ "params": ["0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0xb",
+ "id": 2
+}
+```
+
+---
+
+## `eth_getCode`
+
+Retrieves the code at a specific address at an optional block.
+
+#### Parameters
+
+1. **DATA, 20 bytes** - The Ethereum address in hexadecimal format from which to retrieve the code.
+1. :display-partial{path="api-reference/_partials/_quantity-tag"}
+
+#### Returns
+
+**DATA** - The code at the given address in the specified block, returned as a hexadecimal string. If the address is not a contract a `0x` is returned.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_getCode",
+ "params": [
+ "0x0cBE9d8a007ac5A090Ebdf044b688Fa8dfD862c3"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x00040000000000020000008003000039000000400030043f000000000301001900000060033002700000005d0330019700000001022001900000002a0000c13d000000040230008c0...",
+ "id": 2
+}
+```
+
+---
+
+## `eth_getStorageAt`
+
+Retrieves the value from a storage position at a given address.
+
+#### Parameters
+
+1. **DATA, 20 bytes** - address
+1. **QUANTITY** - index position of the storage slot in hexadecimal format, starting from `0x0`.
+1. :display-partial{path="api-reference/_partials/_quantity-tag"}
+
+#### Returns
+
+**DATA** - the value at this storage position.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_getStorageAt",
+ "params": ["0x0cBE9d8a007ac5A090Ebdf044b688Fa8dfD862c3", "0x0", "latest"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x0000000000000000000000000000000000000000000000000000000000000000",
+ "id": 2
+}
+```
+
+---
+
+## `eth_getTransactionCount`
+
+Gets the number of transactions sent from an address.
+
+#### Parameters
+
+1. **DATA, 20 bytes** - address
+1. :display-partial{path="api-reference/_partials/_quantity-tag"}
+
+#### Returns
+
+**QUANTITY** - integer of the number of transactions sent from this address.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_getTransactionCount",
+ "params": [
+ "0x0f54f47bf9b8e317b214ccd6a7c3e38b893cd7f0",
+ "latest"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x0",
+ "id": 2
+}
+```
+
+---
+
+## `eth_getTransactionByHash`
+
+Retrieves a transaction by its hash.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - hash of a transaction.
+
+#### Returns
+
+Object - A transaction object, or null when no transaction was found:
+
+- **blockHash**: DATA, 32 Bytes - hash of the block where this transaction was in. null when its pending.
+- **blockNumber**: QUANTITY - block number where this transaction was in. null when its pending.
+- from: DATA, 20 Bytes - address of the sender.
+- **gas**: QUANTITY - gas provided by the sender.
+- **gasPrice**: QUANTITY - gas price provided by the sender in Wei.
+- **hash**: DATA, 32 Bytes - hash of the transaction.
+- **input**: DATA - the data send along with the transaction.
+- **nonce**: QUANTITY - the number of transactions made by the sender prior to this one.
+- **to**: DATA, 20 Bytes - address of the receiver. null when its a contract creation transaction.
+- **transactionIndex**: QUANTITY - integer of the transactions index position in the block. null when its pending.
+value: QUANTITY - value transferred in Wei.
+- **v**: QUANTITY - ECDSA recovery id
+- **r**: QUANTITY - ECDSA signature r
+- **s**: QUANTITY - ECDSA signature s
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_getTransactionByHash",
+ "params": [
+ "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "hash": "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "nonce": "0x14c",
+ "blockHash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "blockNumber": "0x1d1551e",
+ "transactionIndex": "0x0",
+ "from": "0x1bc3366b3664c01b8687b1efcfc6478d9351a8a9",
+ "to": "0x9b5def958d0f3b6955cbea4d5b7809b2fb26b059",
+ "value": "0x398dd06d5c8000",
+ "gasPrice": "0x17d7840",
+ "gas": "0x7fcf94",
+ "input": "0xd7570e450000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000b49cfac038353ecd00000000000000000000000000000000000000000000000000000000660c4618000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000398dd06d5c800000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ae1146c4b2aecd980451a67717c33050680e085b00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a910000000000000000000000001bc3366b3664c01b8687b1efcfc6478d9351a8a900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000",
+ "v": "0x0",
+ "r": "0x5502a500c68407013cc2fbfeac220afdcb4ad1d997ba7c85d47d5622598d65d8",
+ "s": "0x5573ac964036b6ac7aab5bf0024134763cb86decbfcfeb2fca7becb9dab96355",
+ "type": "0x2",
+ "maxFeePerGas": "0x202fbf0",
+ "maxPriorityFeePerGas": "0x0",
+ "chainId": "0x144",
+ "l1BatchNumber": "0x72ae1",
+ "l1BatchTxIndex": "0x469"
+ },
+ "id": 2
+}
+```
+
+---
+
+## `eth_getTransactionByBlockHashAndIndex`
+
+Retrieves a transaction by block hash and transaction index position.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - hash of a block.
+1. **QUANTITY** - integer of the transaction index position, starting from `0x0`.
+
+#### Returns
+
+The response contains detailed information about the transaction, see [`eth_getTransactionByHash`](/api-reference/ethereum-rpc#eth_gettransactionbyhash).
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_getTransactionByBlockHashAndIndex",
+ "params": [
+ "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "0x0"
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "hash": "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "nonce": "0x14c",
+ "blockHash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "blockNumber": "0x1d1551e",
+ "transactionIndex": "0x0",
+ "from": "0x1bc3366b3664c01b8687b1efcfc6478d9351a8a9",
+ "to": "0x9b5def958d0f3b6955cbea4d5b7809b2fb26b059",
+ "value": "0x398dd06d5c8000",
+ "gasPrice": "0x17d7840",
+ "gas": "0x7fcf94",
+ "input": "0xd7570e450000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000b49cfac038353ecd00000000000000000000000000000000000000000000000000000000660c4618000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000398dd06d5c800000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ae1146c4b2aecd980451a67717c33050680e085b00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a910000000000000000000000001bc3366b3664c01b8687b1efcfc6478d9351a8a900000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000",
+ "v": "0x0",
+ "r": "0x5502a500c68407013cc2fbfeac220afdcb4ad1d997ba7c85d47d5622598d65d8",
+ "s": "0x5573ac964036b6ac7aab5bf0024134763cb86decbfcfeb2fca7becb9dab96355",
+ "type": "0x2",
+ "maxFeePerGas": "0x202fbf0",
+ "maxPriorityFeePerGas": "0x0",
+ "chainId": "0x144",
+ "l1BatchNumber": "0x72ae1",
+ "l1BatchTxIndex": "0x469"
+ },
+ "id": 2
+}
+```
+
+---
+
+## `eth_getTransactionReceipt`
+
+Retrieves the receipt of a transaction by transaction hash.
+
+#### Parameters
+
+1. **DATA, 32 bytes** - unique hash of the transaction.
+
+#### Returns
+
+Object - A transaction receipt object, or null when no receipt was found:
+
+- **transactionHash** : DATA, 32 Bytes - hash of the transaction.
+- **transactionIndex**: QUANTITY - integer of the transactions index position in the block.
+- **blockHash**: DATA, 32 Bytes - hash of the block where this transaction was in.
+- blockNumber: QUANTITY - block number where this transaction was in.
+- **from**: DATA, 20 Bytes - address of the sender.
+- **to**: DATA, 20 Bytes - address of the receiver. null when its a contract creation transaction.
+- **cumulativeGasUsed** : QUANTITY - The total amount of gas used when this transaction was executed in the block.
+- **effectiveGasPrice** : QUANTITY - The sum of the base fee and tip paid per unit of gas.
+- **gasUsed** : QUANTITY - The amount of gas used by this specific transaction alone.
+contractAddress : DATA, 20 Bytes - The contract address created, if the transaction was a contract creation, otherwise null.
+- **logs**: Array - Array of log objects, which this transaction generated.
+- **logsBloom**: DATA, 256 Bytes - Bloom filter for light clients to quickly retrieve related logs.
+- **type**: QUANTITY - integer of the transaction type, 0x0 for legacy transactions, 0x1 for access list types, 0x2 for dynamic fees.
+
+It also returns either:
+
+- **root**: DATA 32 - bytes of post-transaction stateroot (pre Byzantium)
+- **status**: QUANTITY - either `0x1` (success) or `0x0` (failure)
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_getTransactionReceipt",
+ "params": ["0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda"]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "transactionHash": "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "transactionIndex": "0x0",
+ "blockHash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "blockNumber": "0x1d1551e",
+ "l1BatchTxIndex": "0x469",
+ "l1BatchNumber": "0x72ae1",
+ "from": "0x1bc3366b3664c01b8687b1efcfc6478d9351a8a9",
+ "to": "0x9b5def958d0f3b6955cbea4d5b7809b2fb26b059",
+ "cumulativeGasUsed": "0x0",
+ "gasUsed": "0x2b9bcb",
+ "contractAddress": null,
+ "logs": [
+ {
+ "address": "0x000000000000000000000000000000000000800a",
+ "topics": [
+ "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
+ "0x0000000000000000000000001bc3366b3664c01b8687b1efcfc6478d9351a8a9",
+ "0x0000000000000000000000000000000000000000000000000000000000008001"
+ ],
+ "data": "0x0000000000000000000000000000000000000000000000000001011c8f80b6c0",
+ "blockHash": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "blockNumber": "0x1d1551e",
+ "l1BatchNumber": "0x72ae1",
+ "transactionHash": "0xb2adc4d2b3203e186001dc37fdf02cc8e772518425d263adc6a17dbddff3bfda",
+ "transactionIndex": "0x0",
+ "logIndex": "0x0",
+ "transactionLogIndex": "0x0",
+ "logType": null,
+ "removed": false
+ },
+ ...
+ ],
+ "l2ToL1Logs": [],
+ "status": "0x1",
+ "root": "0x5046bdc714b2a9b40e9fbfdfc5140371c1b03b40335d908de92a7686dcc067e9",
+ "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
+ "type": "0x2",
+ "effectiveGasPrice": "0x17d7840"
+ },
+ "id": 2
+}
+```
+
+---
+
+## `eth_protocolVersion`
+
+Returns the current Ethereum protocol version.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**String** - A single string indicating the protocol version.
+The version is prefixed with an identifier
+(e.g. "zks" for zkSync) followed by a version number.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_protocolVersion",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "zks/1",
+ "id": 2
+}
+```
+
+---
+
+## `eth_sendRawTransaction`
+
+Submits a pre-signed transaction for broadcast to the network.
+
+#### Parameters
+
+1. **DATA** - The complete, signed transaction data.
+
+#### Returns
+
+**DATA, 32 bytes** - A single string that is the hash of the transaction if it has been successfully submitted to the network.
+This hash can be used to track the transaction's inclusion in a block and
+subsequent execution status.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_sendRawTransaction",
+ "params": ["0xf86c808504a817c80082520894095e7baea6a6c7c4c2dfeb977efac326af552d870a868e8..."]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "0x2f5d6a8af654c249bc487e7c7b926a3f3f165b575a6485a487f12c7a9e3c8e45",
+ "id": 2
+}
+```
+
+---
+
+## `eth_accounts`
+
+Returns a list of addresses owned by the client.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**Array of DATA, 20 bytes** - An array of account addresses owned by the client.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "eth_accounts",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": [],
+ "id": 2
+}
+```
+
+---
+
+## `eth_feeHistory`
+
+Retrieves the fee history for the requested blocks.
+
+#### Parameters
+
+1. **uint64** - the number of the blocks to check.
+1. **QUANTITY** - the latest block number.
+1. **Array of float32** - The percentiles of transaction fees to return.
+
+#### Returns
+
+Object containing the following fields:
+
+- **oldestBlock**: QUANTITY - block number in hex of the oldest block queried.
+- **baseFeePerGas**: Array of QUANTITY - An array of base fees per gas, represented in hex, for each block.
+- **gasUsedRatio**: Array of Float - An array of ratios of gas used by each block, represented as floats.
+- **reward**: Array of Array\ - An array of arrays containing the transaction fee rewards at specified percentiles, each represented in hex.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "eth_feeHistory",
+ "params": [
+ "10",
+ "0x3039",
+ [25.0, 50.0, 75.0]
+ ]
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": {
+ "oldestBlock": "0x302a",
+ "baseFeePerGas": [
+ "0xee6b280",
+ "0xee6b280",
+ "0xee6b280",
+ ],
+ "gasUsedRatio": [
+ 0.0,
+ 0.0,
+ 0.0,
+ ],
+ "reward": [
+ ["0x0", "0x0", "0x0"],
+ ["0x0", "0x0", "0x0"],
+ ["0x0", "0x0", "0x0"],
+ ]
+ },
+ "id": 1
+}
+```
+
+## `web3_clientVersion`
+
+**Note:** The `sha3` method is intentionally omitted from the main server implementation,
+as it can be readily implemented on the client side if necessary.
+
+Retrieves the version of the client software.
+
+#### Parameters
+
+None
+
+#### Returns
+
+**String** - The client version supported by the node.
+The version is prefixed with an identifier (e.g. "zkSync" for zkSync) followed by a version number.
+
+#### Example Request
+
+```sh
+curl --request POST \
+ --url https://mainnet.era.zksync.io/ \
+ --header 'Content-Type: application/json' \
+ --data '{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "method": "web3_clientVersion",
+ "params": []
+ }'
+```
+
+#### Example Response
+
+```json
+{
+ "jsonrpc": "2.0",
+ "result": "zkSync/v2.0",
+ "id": 1
+}
+```
diff --git a/content/70.api-reference/40.pub-sub-rpc.md b/content/70.api-reference/40.pub-sub-rpc.md
new file mode 100644
index 00000000..e500d15d
--- /dev/null
+++ b/content/70.api-reference/40.pub-sub-rpc.md
@@ -0,0 +1,80 @@
+---
+title: PubSub JSON-RPC API
+description: Methods to subscribe/unsubscribe to events and receive notifications on zkSync Era.
+---
+
+Clients can subscribe to specific events and receive notifications,
+thus avoiding the need to poll. zkSync is fully compatible with :external-link{text="Geth's pubsub API" href="https://geth.ethereum.org/docs/interacting-with-geth/rpc/pubsub"},
+except for the `syncing` subscription.
+
+The WebSocket URL is `wss://mainnet.era.zksync.io/ws`
+
+## `eth_subscribe`
+
+Creates a new subscription for events.
+
+#### Parameters
+
+1. **String** - Name of the subscription. Valid names include "newHeads" for new block headers, "logs" for new log entries,
+and others depending on the client's capabilities.
+1. **Object** - (Optional) Filter conditions for the subscription, applicable for subscriptions like "logs" where specific event criteria can be set.
+
+#### Returns
+
+**DATA** - A subscription ID used to identify and manage the subscription.
+
+#### Example Request
+
+```sh
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "method": "eth_subscribe",
+ "params": ["newHeads"]
+}
+```
+
+#### Example Response
+
+```json
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "result": "0x9cef478923ff08bf67fde6c64013158d"
+}
+```
+
+---
+
+## `eth_unsubscribe`
+
+Cancels an existing subscription.
+
+#### Parameters
+
+1. **DATA** - The ID of the subscription to cancel, as returned by `eth_subscribe`.
+
+#### Returns
+
+**Boolean** - `true` if the subscription was successfully cancelled, `false` otherwise.
+
+#### Example Request
+
+```sh
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "method": "eth_unsubscribe",
+ "params": ["0x9cef478923ff08bf67fde6c64013158d"]
+}
+```
+
+#### Example Response
+
+```json
+{
+ "id": 1,
+ "jsonrpc": "2.0",
+ "result": true
+}
+```
diff --git a/content/70.api-reference/_dir.yml b/content/70.api-reference/_dir.yml
new file mode 100644
index 00000000..5a779f0d
--- /dev/null
+++ b/content/70.api-reference/_dir.yml
@@ -0,0 +1 @@
+title: API Reference
diff --git a/content/70.api-reference/_partials/_call-request-params.md b/content/70.api-reference/_partials/_call-request-params.md
new file mode 100644
index 00000000..260526c9
--- /dev/null
+++ b/content/70.api-reference/_partials/_call-request-params.md
@@ -0,0 +1,20 @@
+---
+title: CallRequest Params
+---
+
+**CallRequest** - object
+::collapsible
+
+- **from**: DATA, 20 bytes - Sender address. Arbitrary if not provided.
+- **to**: DATA, 20 bytes - Recipient address. Required for `eth_call`.
+- **gas**: QUANTITY - Gas limit for the transaction. Defaults if not provided.
+- **gas_price**: QUANTITY - Gas price for the transaction. Defaults if not provided.
+- **max_fee_per_gas**: QUANTITY - Maximum fee per unit of gas.
+- **max_priority_fee_per_gas**: QUANTITY - Maximum priority fee per unit of gas.
+- **value**: QUANTITY - Value transferred in the transaction. None for no transfer.
+- **data / input**: DATA - Data sent with the transaction. Empty if not provided.
+- **nonce**: DATA, 32 bytes - Transaction nonce.
+- **transaction_type**: QUANTITY, 8 bytes - Type of the transaction.
+- **access_list**: AccessList - EIP-2930 access list.
+- **eip712_meta**: Eip712Meta - EIP-712 meta information.
+::
diff --git a/content/70.api-reference/_partials/_filter-object.md b/content/70.api-reference/_partials/_filter-object.md
new file mode 100644
index 00000000..84814865
--- /dev/null
+++ b/content/70.api-reference/_partials/_filter-object.md
@@ -0,0 +1,16 @@
+---
+title: Filter Object
+---
+
+**Filter** - Object containing various fields to specify the criteria for filtering events
+
+::collapsible
+
+- **fromBlock**: QUANTITY | TAG - The starting block (inclusive) to filter events from. Default is `"latest"`.
+- **toBlock**: QUANTITY | TAG - The ending block (inclusive) to filter events up to. Default is `"latest"`.
+- **address**: DATA | Array, 20 bytes - The contract address(s) to filter events from.
+- **topics**: Array of Data - An array of topics to filter events by.
+Each element can be a topic to match, or `null` to match any topic in that position.
+- **blockHash**: DATA, 32 bytes - Filters events from a specific block hash, only allowing a single block to be specified.
+Note that using `blockHash` will override any specified `fromBlock` and `toBlock` fields.
+::
diff --git a/content/70.api-reference/_partials/_quantity-tag.md b/content/70.api-reference/_partials/_quantity-tag.md
new file mode 100644
index 00000000..1d2f9c89
--- /dev/null
+++ b/content/70.api-reference/_partials/_quantity-tag.md
@@ -0,0 +1,5 @@
+---
+title: Quantity | Tag
+---
+
+**QUANTITY | TAG** - integer block number, or the string "latest", "earliest", "pending", "safe" or "finalized", see the [default block parameter](/api-reference/conventions#the-default-block-parameter)
diff --git a/content/70.api-reference/_partials/_trace-object.md b/content/70.api-reference/_partials/_trace-object.md
new file mode 100644
index 00000000..ea8f6c5c
--- /dev/null
+++ b/content/70.api-reference/_partials/_trace-object.md
@@ -0,0 +1,22 @@
+---
+title: Trace Object
+---
+
+#### Trace Object
+
+::collapsible
+
+- **type**: String - The type of operation (e.g., `Call`, `Create`, etc.), indicating the nature of the trace.
+- **from**: DATA, 20 bytes - address of the account that initiated the operation.
+- **to**: DATA, 20 bytes - recipient address of the call.
+For `Create` operations, this field is absent as the contract being created doesn't have an address until after the transaction completes.
+- **gas**: QUANTITY, 32 bytes - amount of gas provided for the operation.
+- **gasUsed**: QUANTITY, 32 bytes - amount of gas used by the operation.
+- **value**: QUANTITY, 32 bytes - amount of Ether transferred during the operation.
+- **output**: DATA - output from the operation. For operations that don't return data or failed, this is typically `0x`.
+- **input**: DATA - data sent into the call or contract creation.
+- **error**: String - error message if the operation failed.
+- **revertReason**: String - reason provided by a `revert` operation, if applicable.
+- **calls**: Array\