Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ Queries spanning large block ranges or high-activity contracts can time out or b
<ResponseField name="topics" type="array">Array of 0–4 indexed 32-byte topics. Topic 0 is typically the event signature hash.</ResponseField>
<ResponseField name="data" type="string">ABI-encoded non-indexed event parameters.</ResponseField>
<ResponseField name="blockNumber" type="string">Block number in which this log was emitted (hex).</ResponseField>
<ResponseField name="blockTimestamp" type="string">Unix timestamp of the block containing this log as a hex string. OP Stack extension to the standard Ethereum log schema.</ResponseField>
<ResponseField name="blockTimestamp" type="string">Unix timestamp of the block containing this log as a hex string. Base L2 extension to the standard Ethereum log schema.</ResponseField>
<ResponseField name="transactionHash" type="string">32-byte hash of the transaction that emitted this log.</ResponseField>
<ResponseField name="transactionIndex" type="string">Index of the transaction in the block (hex).</ResponseField>
<ResponseField name="blockHash" type="string">32-byte hash of the block.</ResponseField>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Returns information about a transaction given its hash. Returns `null` for unkno
</ResponseField>

<Note>
**Transaction types on Base:** Base supports Ethereum-standard types (`0x0` legacy, `0x1` EIP-2930, `0x2` EIP-1559) as well as OP Stack deposit transactions (`0x7e`). Deposit transactions are injected by the sequencer at the start of each block. Fields like `maxFeePerGas`, `accessList`, and `chainId` are not present on `0x7e` transactions; instead they carry `sourceHash`, `mint`, `depositReceiptVersion`, and `yParity`.
**Transaction types on Base:** Base supports Ethereum-standard types (`0x0` legacy, `0x1` EIP-2930, `0x2` EIP-1559) as well as Base deposit transactions (`0x7e`). Deposit transactions are injected by the sequencer at the start of each block. Fields like `maxFeePerGas`, `accessList`, and `chainId` are not present on `0x7e` transactions; instead they carry `sourceHash`, `mint`, `depositReceiptVersion`, and `yParity`.
</Note>

## Example
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ Receipts are only available for mined transactions. To monitor a transaction bef
<ResponseField name="type" type="string">Transaction type: `"0x0"` Legacy, `"0x1"` Access List, `"0x2"` EIP-1559, `"0x7e"` Deposit (L1→L2).</ResponseField>
<ResponseField name="status" type="string">`"0x1"` for success, `"0x0"` for failure (revert).</ResponseField>
<ResponseField name="blobGasUsed" type="string">Blob gas consumed by this transaction (EIP-4844). `null` for non-blob transactions.</ResponseField>
<ResponseField name="l1Fee" type="string">Total L1 data fee paid for this transaction (hex). OP Stack L2 field.</ResponseField>
<ResponseField name="l1GasUsed" type="string">Amount of L1 gas used for the L1 data portion of this transaction (hex). OP Stack L2 field.</ResponseField>
<ResponseField name="l1GasPrice" type="string">L1 gas price at the time of inclusion (hex). OP Stack L2 field.</ResponseField>
<ResponseField name="l1BlobBaseFee" type="string">Blob base fee on L1 at the time of inclusion (hex). OP Stack L2 field.</ResponseField>
<ResponseField name="l1BlobBaseFeeScalar" type="string">Scalar applied to the blob base fee for L1 fee calculation (hex). OP Stack L2 field.</ResponseField>
<ResponseField name="l1BaseFeeScalar" type="string">Scalar applied to the L1 base fee for L1 fee calculation (hex). OP Stack L2 field.</ResponseField>
<ResponseField name="l1Fee" type="string">Total L1 data fee paid for this transaction (hex). Base L2 field.</ResponseField>
<ResponseField name="l1GasUsed" type="string">Amount of L1 gas used for the L1 data portion of this transaction (hex). Base L2 field.</ResponseField>
<ResponseField name="l1GasPrice" type="string">L1 gas price at the time of inclusion (hex). Base L2 field.</ResponseField>
<ResponseField name="l1BlobBaseFee" type="string">Blob base fee on L1 at the time of inclusion (hex). Base L2 field.</ResponseField>
<ResponseField name="l1BlobBaseFeeScalar" type="string">Scalar applied to the blob base fee for L1 fee calculation (hex). Base L2 field.</ResponseField>
<ResponseField name="l1BaseFeeScalar" type="string">Scalar applied to the L1 base fee for L1 fee calculation (hex). Base L2 field.</ResponseField>
<ResponseField name="daFootprintGasScalar" type="string">Base-specific DA footprint scalar (hex).</ResponseField>
<ResponseField name="depositNonce" type="string">Nonce used for the deposit transaction (hex). Present on type `0x7e` transactions only.</ResponseField>
<ResponseField name="depositReceiptVersion" type="string">Deposit receipt version (hex). Present on type `0x7e` transactions only.</ResponseField>
Expand Down Expand Up @@ -73,7 +73,7 @@ Receipts are only available for mined transactions. To monitor a transaction bef
"jsonrpc": "2.0",
"id": 1,
"result": {
"blobGasUsed": "0x4154",
"blobGasUsed": null,
"blockHash": "0x491bca01d4bc076d60833dbd973fe031a74e7ae31866bf70d077619e09edb6ff",
"blockNumber": "0x2c31b0b",
"contractAddress": null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ Contains the incremental block state changes for this specific Flashblock. Prese
**The `metadata` object is not stable.** Fields may be added, modified, or removed without prior notice. Do not build production dependencies on it — use the [`diff`](#diff-object) object or query finalized block data via standard RPC instead.
</Warning>

As of v0.8.0, `new_account_balances` and `receipts` are no longer present in the `metadata` object. Only `block_number` remains.
As of v0.8.0, `new_account_balances` and `receipts` are no longer present in the `metadata` object. `block_number` remains. The `access_list` field is present but always empty.

<Card>
<ParamField path="block_number" type="number">Block number as a decimal integer.</ParamField>
Expand Down Expand Up @@ -133,7 +133,7 @@ As of v0.8.0, `new_account_balances` and `receipts` are no longer present in the
<ParamField path="data" type="string">ABI-encoded non-indexed event parameters.</ParamField>
<ParamField path="blockHash" type="string">Hash of the block containing this log.</ParamField>
<ParamField path="blockNumber" type="string">Block number in hex.</ParamField>
<ParamField path="blockTimestamp" type="string">Unix timestamp of the block as a hex string. OP Stack extension to the standard Ethereum log schema.</ParamField>
<ParamField path="blockTimestamp" type="string">Unix timestamp of the block as a hex string. Base L2 extension to the standard Ethereum log schema.</ParamField>
<ParamField path="transactionHash" type="string">Hash of the transaction that emitted this log.</ParamField>
<ParamField path="transactionIndex" type="string">Index of the transaction in the block (hex).</ParamField>
<ParamField path="logIndex" type="string">Log's index position within the block (hex).</ParamField>
Expand Down
4 changes: 2 additions & 2 deletions docs/base-chain/flashblocks/architecture.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ Base operates a high-availability sequencer system with five sequencer instances

| Component | Role |
|-----------|------|
| **op-node** | Standard OP Stack consensus layer (CL) |
| **op-geth** | Standard OP Stack execution layer (EL) |
| **base-consensus** | Consensus layer (CL) — replaced op-node after Azul |
| **base-reth-node** | Execution layer (EL) — replaced op-geth after Azul |
| **op-conductor** | High availability controller with Raft consensus for leader election |

One sequencer instance acts as the **leader**, responsible for building blocks and propagating them via P2P. The remaining four act as **followers** that sync the chain. Leadership transfers if the current leader stops producing blocks.
Expand Down
2 changes: 1 addition & 1 deletion docs/base-chain/flashblocks/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ User → DNS (mainnet.base.org) → Load Balancer → Proxyd → Mempool
The transaction reaches the private mempool and is inserted into the txpool as pending.

### 2. Distribution
The mempool maintains P2P connections with execution layers (op-reth, op-rbuilder), ensuring all pending transactions are synced for block building.
The mempool maintains P2P connections with execution layers (base-reth-node, op-rbuilder), ensuring all pending transactions are synced for block building.

### 3. Block Building
During each 200ms block building loop, op-rbuilder selects transactions based on:
Expand Down
3 changes: 1 addition & 2 deletions docs/base-chain/network-information/block-building.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,5 @@ Bundler operators for smart contract wallets must configure their systems to lim

### Vanilla

Blocks are built every 2s by [op-geth](https://github.com/ethereum-optimism/op-geth). Transactions within those blocks are ordered by
priority fee, see the ([code](https://github.com/ethereum-optimism/op-geth/blob/optimism/miner/worker.go#L627)).
Blocks are built every 2s by `base-reth-node`. Transactions within those blocks are ordered by priority fee.

14 changes: 7 additions & 7 deletions docs/base-chain/network-information/diffs-ethereum-base.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ title: "Differences between Ethereum and Base"
sidebarTitle: 'Differences: Ethereum & Base'
---

Base is built to be as compatible as possible to Etherum, and there are very few differences when it comes to building on Base versus Ethereum.
Base is built to be as compatible as possible to Ethereum, and there are very few differences when it comes to building on Base versus Ethereum.

However, there are still some minor discrepancies between the behavior of Base and Ethereum that you should be aware of when building apps on top of Base.

These minor differences include:

- [Flashblocks](https://docs.base.org/base-chain/flashblocks/app-integration)
- [Flashblocks](/base-chain/flashblocks/app-integration)
- [Minimum base fee](/base-chain/network-information/network-fees#minimum-base-fee)
- [Bridging](https://docs.optimism.io/stack/differences#bridging)
- [Opcodes](https://docs.optimism.io/stack/differences#opcodes)
- [Address aliasing](https://docs.optimism.io/stack/differences#address-aliasing)
- [Transaction costs](https://docs.optimism.io/stack/differences#transaction-fees)
- [Chain Finality](https://docs.optimism.io/stack/differences#chain-finality)
- [Bridging](/base-chain/specs/protocol/bridging/bridges)
- [Precompiles](/base-chain/specs/protocol/execution/evm/precompiles)
- [Address aliasing](/base-chain/specs/protocol/bridging/deposits#address-aliasing)
- [Transaction costs](/base-chain/network-information/network-fees)
- [Chain Finality](/base-chain/network-information/transaction-finality)
7 changes: 3 additions & 4 deletions docs/base-chain/network-information/network-fees.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ same implementation as the L1; you can read more about it
[here](https://help.coinbase.com/en/coinbase/getting-started/crypto-education/eip-1559).

For additional details about fee calculation on Base, please refer to the
[op-stack developer
documentation](https://docs.optimism.io/stack/transactions/fees).
[network fees specification](/base-chain/specs/protocol/execution/evm/predeploys#gaspriceoracle).

## Minimum Base Fee

Expand All @@ -49,7 +48,7 @@ See the [Configuration Changelog](/base-chain/network-information/configuration-

## EIP-1559 Fee Parameters

Base uses the OP Stack's implementation of EIP-1559, which controls how the L2 base fee adjusts in response to network demand. Two key parameters govern this behavior:
Base uses its own implementation of EIP-1559, which controls how the L2 base fee adjusts in response to network demand. Two key parameters govern this behavior:

### Elasticity Multiplier

Expand Down Expand Up @@ -93,4 +92,4 @@ The **GasPriceOracle** predeployment at `0x4200000000000000000000000000000000000

Use `getL1FeeUpperBound` when you need a quick estimate before the transaction is fully constructed. Use `getL1Fee` with the complete serialized transaction for an exact value before signing.

[Jovian upgrade]: https://docs.optimism.io/notices/upgrade-17
[Jovian upgrade]: /base-chain/specs/upgrades/jovian/overview
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ During periods of high demand, transactions compete for block space through prio
**Solution**: Most users simply wait for congestion to subside. For time-sensitive transactions, use `eth_maxPriorityFeePerGas` to get a priority fee estimate that can outbid enough recent transactions to be included.

<Note>
If [DA throttling](https://docs.optimism.io/chain-operators/guides/configuration/batcher#batcher-sequencer-throttling) is currently in effect, there's no RPC endpoint that calculates priority fee estimates with throttling in mind. During DA throttling, even transactions with high priority fees may be delayed as the sequencer limits L2 transactions to manage its L1 data availability throughput.
If DA throttling is currently in effect, there's no RPC endpoint that calculates priority fee estimates with throttling in mind. During DA throttling, even transactions with high priority fees may be delayed as the sequencer limits L2 transactions to manage its L1 data availability throughput.
</Note>

### Nonce Gap
Expand Down
20 changes: 10 additions & 10 deletions docs/base-chain/node-operators/run-a-base-node.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,11 @@ You'll need your own L1 RPC URL. This can be one that you run yourself, or via a
## Running a Node

1. Clone the [repo](https://github.com/base/node).
2. Ensure you have an Ethereum L1 full node RPC available (not Base), and set `OP_NODE_L1_ETH_RPC` & `OP_NODE_L1_BEACON` (in the `.env.*` file if using `docker-compose`). If running your own L1 node, it needs to be synced before Base will be able to fully sync.
3. Uncomment the line relevant to your network (`.env.sepolia`, or `.env.mainnet`) under the 2 `env_file` keys in `docker-compose.yml`.
4. Run `docker compose up`. Confirm you get a response from:
2. Ensure you have an Ethereum L1 full node RPC available (not Base), and set `BASE_NODE_L1_ETH_RPC` & `BASE_NODE_L1_BEACON` in the appropriate `.env` file (`.env.mainnet` or `.env.sepolia`). If running your own L1 node, it needs to be synced before Base will be able to fully sync.
3. Start the node:
- **Mainnet**: `docker compose up --build`
- **Testnet**: `NETWORK_ENV=.env.sepolia docker compose up --build`
4. Confirm you get a response from:

```bash Terminal
curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
Expand Down Expand Up @@ -105,17 +107,15 @@ Once your node is synced, you can enable Flashblocks to serve 200ms preconfirmat

### Configuration

To enable Flashblocks, start your node with the following environment variables:
To enable Flashblocks, set `RETH_FB_WEBSOCKET_URL` when starting your node:

```sh
NODE_TYPE=base CLIENT=reth RETH_FB_WEBSOCKET_URL="wss://mainnet.flashblocks.base.org/ws" docker-compose up
RETH_FB_WEBSOCKET_URL="wss://mainnet.flashblocks.base.org/ws" docker compose up --build
```

| Variable | Description | Values |
|----------|-------------|--------|
| `NODE_TYPE` | Enables base reth node with Flashblocks | `base` |
| `CLIENT` | Execution client | `reth` |
| `RETH_FB_WEBSOCKET_URL` | Flashblocks WebSocket endpoint | See below |
| Variable | Description |
|----------|-------------|
| `RETH_FB_WEBSOCKET_URL` | Flashblocks WebSocket endpoint (see below) |

### WebSocket Endpoints

Expand Down
20 changes: 9 additions & 11 deletions docs/base-chain/node-operators/troubleshooting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -31,35 +31,33 @@ Before diving into specific issues, here are some general steps that often help:
- **Issue**: Docker command fails (`docker compose up ...`)
- **Check**: Is Docker and Docker Compose installed and the Docker daemon running?
- **Check**: Are you in the correct directory (the cloned `node` directory containing `docker-compose.yml`)?
- **Check**: Syntax errors in the command (e.g., misspelled `NETWORK_ENV` or `CLIENT`).
- **Check**: Syntax errors in the command (e.g., misspelled `NETWORK_ENV`).

- **Issue**: Container fails to start, logs show errors related to `.env` files or environment variables.
- **Check**: Did you correctly configure the L1 endpoints (`OP_NODE_L1_ETH_RPC`, `OP_NODE_L1_BEACON`) in the correct `.env` file (`.env.mainnet` or `.env.sepolia`)?
- **Check**: Is the `OP_NODE_L1_BEACON_ARCHIVER` endpoint set if required by your configuration or L1 node?
- **Check**: Is `OP_NODE_L1_RPC_KIND` set correctly for your L1 provider?
- **Check**: (Reth) Are `RETH_CHAIN` and `RETH_SEQUENCER_HTTP` correctly set in the `.env` file?
- **Check**: Did you correctly configure the L1 endpoints (`BASE_NODE_L1_ETH_RPC`, `BASE_NODE_L1_BEACON`) in the correct `.env` file (`.env.mainnet` or `.env.sepolia`)?
- **Check**: Are `RETH_CHAIN` and `RETH_SEQUENCER_HTTP` correctly set in the `.env` file?

- **Issue**: Errors related to JWT secret or authentication between `op-node` and L2 client.
- **Check**: Ensure you haven't manually modified the `OP_NODE_L2_ENGINE_AUTH` variable or the JWT file path (`$OP_NODE_L2_ENGINE_AUTH`) unless you know what you're doing. The `docker-compose` setup usually handles this automatically.
- **Issue**: Errors related to JWT secret or authentication between `base-consensus` and the execution client.
- **Check**: Ensure you haven't manually modified the `BASE_NODE_L2_ENGINE_AUTH` variable or the JWT file path (`$BASE_NODE_L2_ENGINE_AUTH`) unless you know what you're doing. The `docker-compose` setup usually handles this automatically.

- **Issue**: Permission errors related to data volumes (`./reth-data`).
- **Check**: Ensure the user running `docker compose` has write permissions to the directory where the `node` repository was cloned. Docker needs to be able to write to `./reth-data`. Sometimes running Docker commands with `sudo` can cause permission issues later; try running as a non-root user added to the `docker` group.

### Syncing Problems

- **Issue**: Node doesn't start syncing or appears stuck (block height not increasing).
- **Check**: `op-node` logs. Look for errors connecting to L1 endpoints or the L2 client.
- **Check**: Look at logs for the execution client. Look for errors connecting to `op-node` via the Engine API (port `8551`) or P2P issues.
- **Check**: `base-consensus` logs. Look for errors connecting to L1 endpoints or the execution client.
- **Check**: Look at logs for the execution client. Look for errors connecting to `base-consensus` via the Engine API (port `8551`) or P2P issues.
- **Check**: L1 node health and sync status. Is the L1 node accessible and fully synced?
- **Check**: System time. Ensure the server’s clock is accurately synchronized (use `ntp` or `chrony`). Significant time drift can cause P2P issues.

- **Issue**: Syncing is extremely slow.
- **Check**: Hardware specifications. Are you meeting the recommended specs (especially RAM and **NVMe SSD**) outlined in the [Node Performance](/base-chain/node-operators/performance-tuning) guide? Disk I/O is often the bottleneck.
- **Check**: L1 node performance. Is your L1 RPC endpoint responsive? A slow L1 node will slow down L2 sync.
- **Check**: Network connection quality and bandwidth.
- **Check**: `op-node` and L2 client logs for any performance warnings or errors.
- **Check**: `base-consensus` and execution client logs for any performance warnings or errors.

- **Issue**: `optimism_syncStatus` (port `7545` on `op-node`) shows a large time difference or errors.
- **Issue**: `optimism_syncStatus` (port `7545` on `base-consensus`) shows a large time difference or errors.
- **Action**: Check the logs for both the rollup node and the L2 execution client around the time the status was checked to identify the root cause (e.g., L1 connection issues, L2 client issues).

- **Issue**: `Error: nonce has already been used` when trying to send transactions.
Expand Down
2 changes: 1 addition & 1 deletion docs/base-chain/specs/protocol/bridging/withdrawals.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ recognize that having the same address does not imply that a contract on L2 will
## The Optimism Portal Contract
The Optimism Portal serves as both the entry and exit point to the Optimism L2. It is a contract which inherits from
The Optimism Portal serves as both the entry and exit point to the Base L2. It is a contract which inherits from
the [OptimismPortal](deposits#deposit-contract) contract, and in addition provides the following interface for
withdrawals:
Expand Down
Loading
Loading