Skip to content
Merged
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
12 changes: 2 additions & 10 deletions docs/base-chain/network-information/block-building.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ The Base networks are currently configured in the following ways:
| Base Mainnet | [Flashblocks](#flashblocks) + [Per-Transaction Gas Max](#per-transaction-gas-maximum) | |
| Base Sepolia | [Flashblocks](#flashblocks) + [Per-Transaction Gas Max](#per-transaction-gas-maximum) | |

See the [Configuration Changelog](/base-chain/network-information/configuration-changelog) for a history of changes to block building and other network parameters.

## Configurations

### Flashblocks
Expand Down Expand Up @@ -51,13 +53,3 @@ Bundler operators for smart contract wallets must configure their systems to lim
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)).

## Changelog

* 17th Sep: Enabled Per-Transaction Gas Maximum on Base Mainnet
* 11th Sep: Ended testing Per-Transaction Gas Maximum on Base Mainnet
* 10th Sep: Started testing Per-Transaction Gas Maximum on Base Mainnet
* 3rd Sep: Enabled Per-Transaction Gas Maximum on Base Sepolia
* 7th July: Enabled Flashblocks on Base Mainnet
* 15th May: Ended testing Flashblocks on Base Mainnet
* 15th May: Started testing Flashblocks on Base Mainnet
* 25th Feb: Enabled Flashblocks on Base Sepolia
27 changes: 27 additions & 0 deletions docs/base-chain/network-information/configuration-changelog.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
title: Configuration Changelog
slug: /configuration-changelog
description: A log of configuration changes to the Base networks.
---

This page tracks configuration changes to the Base networks, including updates to block building, network fees, and other network parameters.

## Base Mainnet

| Date | Change | Documentation |
|------|--------|---------------|
| December 4, 2025 | Enabled Minimum Base Fee (200,000 wei) | [Minimum Base Fee](/base-chain/network-information/network-fees#minimum-base-fee) |
| September 17, 2025 | Enabled Per-Transaction Gas Maximum | [Per-Transaction Gas Maximum](/base-chain/network-information/block-building#per-transaction-gas-maximum) |
| September 11, 2025 | Ended testing Per-Transaction Gas Maximum | [Per-Transaction Gas Maximum](/base-chain/network-information/block-building#per-transaction-gas-maximum) |
| September 10, 2025 | Started testing Per-Transaction Gas Maximum | [Per-Transaction Gas Maximum](/base-chain/network-information/block-building#per-transaction-gas-maximum) |
| July 7, 2025 | Enabled Flashblocks | [Flashblocks](/base-chain/network-information/block-building#flashblocks) |
| May 15, 2025 | Ended testing Flashblocks | [Flashblocks](/base-chain/network-information/block-building#flashblocks) |
| May 15, 2025 | Started testing Flashblocks | [Flashblocks](/base-chain/network-information/block-building#flashblocks) |

## Base Sepolia

| Date | Change | Documentation |
|------|--------|---------------|
| November 20, 2025 | Enabled Minimum Base Fee (200,000 wei) | [Minimum Base Fee](/base-chain/network-information/network-fees#minimum-base-fee) |
| September 3, 2025 | Enabled Per-Transaction Gas Maximum | [Per-Transaction Gas Maximum](/base-chain/network-information/block-building#per-transaction-gas-maximum) |
| February 25, 2025 | Enabled Flashblocks | [Flashblocks](/base-chain/network-information/block-building#flashblocks) |
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ However, there are still some minor discrepancies between the behavior of Base a
These minor differences include:

- [Flashblocks](https://docs.base.org/base-chain/flashblocks/apps)
- [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)
Expand Down
22 changes: 22 additions & 0 deletions docs/base-chain/network-information/network-fees.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,25 @@ For additional details about fee calculation on Base, please refer to the
[op-stack developer
documentation](https://docs.optimism.io/stack/transactions/fees).

## Minimum Base Fee

As part of the [Jovian upgrade], Base introduced a minimum base fee. This feature sets a floor for the L2 base fee, preventing it from dropping to extremely low levels during periods of low network activity.

The minimum base fee for Base Mainnet was initially set to 200,000 wei (0.0002 gwei) on December 4th, 2025. This value may be periodically adjusted as we gather data on how it affects the chain. For reference, a minimum base fee of 0.0002 gwei results in a cost of approximately 0.006 cents for a typical transaction at an ETH price of $3000.

### Benefits

- **Faster Transaction Inclusion**: Previously, when low activity caused the base fee to drop very low, spikes in demand could lead to extended periods of congestion before fees rose enough to clear the backlog. With a minimum base fee, transactions are typically included more quickly without users needing to manually adjust priority fees.
- **More Predictable Fees**: During normal operation, the base fee will remain at or near the minimum. During congestion, the base fee rises above the minimum. This creates a more predictable fee structure similar to surge pricing.
- **Spam Prevention**: Extremely low fees can incentivize spam transactions that don't provide value to the network. The minimum base fee helps price out such activity while keeping fees affordable for legitimate use.

### Current Configuration

| Network | Minimum Base Fee |
|--------------|------------------|
| Base Mainnet | 200,000 wei (0.0002 gwei) |
| Base Sepolia | 200,000 wei (0.0002 gwei) |

See the [Configuration Changelog](/base-chain/network-information/configuration-changelog) for a history of changes to the minimum base fee and other network parameters.

[Jovian upgrade]: https://docs.optimism.io/notices/upgrade-17
110 changes: 110 additions & 0 deletions docs/base-chain/network-information/troubleshooting-transactions.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
---
title: Troubleshooting Transactions
slug: /troubleshooting-transactions
description: Guide to diagnosing and resolving transaction issues on Base.
---

## Transaction Not Being Included

If your transaction is pending for longer than expected, check the following:

### Max Fee Too Low

If your `maxFeePerGas` is lower than the current base fee, your transaction will remain pending until the base fee drops to your specified level.

**Solution**: The `maxFeePerGas` must cover both the base fee and your priority fee. Since the base fee can change with each block, set `maxFeePerGas` high enough to remain valid even if the base fee rises while your transaction is pending. A common approach is:

```
maxFeePerGas = baseFee * 2 + maxPriorityFeePerGas

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can probably base this on minimum doubling speed and a reasonable delay (including time to sign the tx), but this is subject to change alongside any modifications to EIP1559 parameters, including increasing elasticity.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's technically the right way to think about it, but it feels like maybe too much information for the average reader. ethers.js multiplies by 2 and viem multiplies by 1.2. I don't think anyone is doing anything more sophisticated than that.

```

This formula (used by [ethers.js](https://github.com/ethers-io/ethers.js/blob/98c49d091eb84a9146dfba8476f18e4c3e3d1d31/src.ts/providers/abstract-provider.ts#L945-L950)) provides headroom for the base fee to double before your transaction becomes unexecutable. You only pay the actual base fee at inclusion time, not the maximum.

<Note>
Base has a [minimum base fee](/base-chain/network-information/network-fees#minimum-base-fee). Transactions with `maxFeePerGas` below this value will never be included, since the base fee cannot drop below the minimum.
</Note>
Comment on lines +23 to +25

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These sections seem misformatted in the GH diff preview. Will these render correctly in the actual docs site?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Edit: confirmed that this looks good on the staging docs site


### Priority Fee Too Low

During periods of high demand, transactions compete for block space through priority fees. If your priority fee is too low relative to other transactions, yours may be delayed.

**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.
</Note>

### Nonce Gap

If you have a pending transaction with nonce N, all transactions with nonce N+1 or higher will queue behind it, regardless of their fees.

**Solution**: Either wait for the pending transaction to be included, or replace it by submitting a new transaction with the same nonce and a higher fee (at least 10% higher `maxPriorityFeePerGas` and `maxFeePerGas`).

### Nonce Too Low

If you submit a transaction with a nonce that has already been used, it will be rejected.

**Solution**: Query your current nonce using `eth_getTransactionCount` with the `pending` tag to get the next available nonce.

## Transaction Rejected

### Gas Limit Exceeds Maximum

Ethereum enforces a [transaction gas limit cap](https://eips.ethereum.org/EIPS/eip-7825) of **16,777,216 gas**. Base plans to match this limit in a future upgrade, but currently enforces a [per-transaction gas maximum](/base-chain/network-information/block-building#per-transaction-gas-maximum) of **25,000,000 gas**. Transactions specifying a higher gas limit are rejected by the mempool before inclusion.

**Error**: `exceeds maximum per-transaction gas limit`

**Solution**: Reduce the gas limit to 16,777,216 or below. If your transaction genuinely requires more gas, you'll need to break it into multiple transactions.

## Transaction Included But Failed

If your transaction was included in a block but shows a failed status:

### Out of Gas

The transaction ran out of gas during execution.

**Solution**: Increase the gas limit. Use `eth_estimateGas` to get a gas estimate, then add a buffer (e.g., 20%) to account for variability.

### Reverted by Contract

The contract execution encountered a revert condition.

**Solution**: Check the transaction on [Basescan](https://basescan.org) to see the revert reason. Common causes include failed require statements, arithmetic errors, or invalid state transitions.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we explicitly identify Basescan or use the more generic explorer.base.org, which can be rerouted in the case of a service disruption.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docs mention Basescan all over the place, so I don't think that's an avoidable problem. Changing how we refer to the block explorer makes sense, but I think we'll be better off if it's a consistent change that we make everywhere.


## Slow Confirmation

### Understanding Confirmation Times

Base produces blocks every 2 seconds, but [Flashblocks](/base-chain/flashblocks/apps) provide preconfirmations every 200ms.

| Confirmation Level | Time | Description |
|-------------------|------|-------------|
| Flashblock preconfirmation | ~200ms | Transaction included in a preconfirmation |

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This shows the cadence of each periodic event. Should we show average confirmation time instead, which would be ~100ms for flashblocks, and ~1s for L2 blocks?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part is cribbed from the Transaction Finality page. I think using average times would be confusing. Most people need the upper bounds, and the people who need the average times will be able to figure it out.

| L2 block inclusion | ~2s | Transaction included in a sealed L2 block |
| L1 batch inclusion | ~2m | Transaction posted to Ethereum |
| L1 finality | ~20m | Ethereum batch is finalized |

See [Transaction Finality](/base-chain/network-information/transaction-finality) for more details.

### Using Flashblocks for Faster Confirmations

To get the fastest possible confirmation, use a Flashblocks-aware RPC endpoint:

| Network | Flashblocks RPC |
|---------|-----------------|
| Mainnet | `https://mainnet-preconf.base.org` |
| Sepolia | `https://sepolia-preconf.base.org` |

These endpoints return transaction receipts as soon as a transaction is included in a Flashblock, rather than waiting for the full L2 block.

## Debugging Tools

- **[Basescan](https://basescan.org)**: View transaction status, logs, and revert reasons

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above, although here we can maybe enumerate different explorers

- **[Tenderly](https://tenderly.co)**: Simulate and debug transactions
- **`eth_call`**: Test contract calls without submitting a transaction
- **`eth_estimateGas`**: Estimate gas usage before submitting

## Getting Help

If you're still experiencing issues, reach out in the `#developer-chat` channel in the [Base Discord](https://base.org/discord).
8 changes: 5 additions & 3 deletions docs/docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,13 @@
"group": "Network Information",
"pages": [
"base-chain/network-information/base-contracts",
"base-chain/network-information/network-fees",
"base-chain/network-information/transaction-finality",
"base-chain/network-information/ecosystem-contracts",
"base-chain/network-information/network-fees",
"base-chain/network-information/block-building",
"base-chain/network-information/diffs-ethereum-base"
"base-chain/network-information/transaction-finality",
"base-chain/network-information/diffs-ethereum-base",
"base-chain/network-information/troubleshooting-transactions",
"base-chain/network-information/configuration-changelog"
]
},
{
Expand Down