diff --git a/.markdownlint.json b/.markdownlint.json
index 123df027..83951752 100644
--- a/.markdownlint.json
+++ b/.markdownlint.json
@@ -2,20 +2,18 @@
"$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json",
"default": true,
"MD001": false,
- "MD003": {
- "style": "atx"
- },
"MD007": {
"indent": 2
},
"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 b95ecf4f..6d2cb901 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -8,6 +8,8 @@
"editor.insertSpaces": true,
"files.eol": "\n",
"[markdown]": {
- "editor.wordWrap": "on"
+ "editor.wordWrap": "on",
+ "editor.defaultFormatter": "DavidAnson.vscode-markdownlint",
+ "editor.formatOnSave": true
}
}
diff --git a/app.config.ts b/app.config.ts
index 5967e974..38d99c76 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/content/10.getting-started/1.index.md b/content/10.getting-started/1.index.md
index f7ab24ef..1add1407 100644
--- a/content/10.getting-started/1.index.md
+++ b/content/10.getting-started/1.index.md
@@ -31,7 +31,7 @@ There are already many websites based on this template:
::display-partial
---
-partial: 'Setting up your wallet'
+path: '_partials/setting-up-your-wallet'
---
::
diff --git a/content/20.api-reference/00.index.md b/content/20.api-reference/00.index.md
new file mode 100644
index 00000000..7d74f199
--- /dev/null
+++ b/content/20.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/20.api-reference/10.conventions.md b/content/20.api-reference/10.conventions.md
new file mode 100644
index 00000000..69e237cd
--- /dev/null
+++ b/content/20.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/20.api-reference/20.zks-rpc.md b/content/20.api-reference/20.zks-rpc.md
new file mode 100644
index 00000000..7b26da6f
--- /dev/null
+++ b/content/20.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/20.api-reference/30.debug-rpc.md b/content/20.api-reference/30.debug-rpc.md
new file mode 100644
index 00000000..fb9a36da
--- /dev/null
+++ b/content/20.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/20.api-reference/35.ethereum-rpc.md b/content/20.api-reference/35.ethereum-rpc.md
new file mode 100644
index 00000000..3c310823
--- /dev/null
+++ b/content/20.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/20.api-reference/40.pub-sub-rpc.md b/content/20.api-reference/40.pub-sub-rpc.md
new file mode 100644
index 00000000..e500d15d
--- /dev/null
+++ b/content/20.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/20.api-reference/_dir.yml b/content/20.api-reference/_dir.yml
new file mode 100644
index 00000000..5a779f0d
--- /dev/null
+++ b/content/20.api-reference/_dir.yml
@@ -0,0 +1 @@
+title: API Reference
diff --git a/content/20.api-reference/_partials/_call-request-params.md b/content/20.api-reference/_partials/_call-request-params.md
new file mode 100644
index 00000000..260526c9
--- /dev/null
+++ b/content/20.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/20.api-reference/_partials/_filter-object.md b/content/20.api-reference/_partials/_filter-object.md
new file mode 100644
index 00000000..84814865
--- /dev/null
+++ b/content/20.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/20.api-reference/_partials/_quantity-tag.md b/content/20.api-reference/_partials/_quantity-tag.md
new file mode 100644
index 00000000..1d2f9c89
--- /dev/null
+++ b/content/20.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/20.api-reference/_partials/_trace-object.md b/content/20.api-reference/_partials/_trace-object.md
new file mode 100644
index 00000000..ea8f6c5c
--- /dev/null
+++ b/content/20.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\