From bbec8dfd9db2ba9a303ec652ab1b0939e4580514 Mon Sep 17 00:00:00 2001
From: jlwllmr <95916148+jlwllmr@users.noreply.github.com>
Date: Fri, 6 Sep 2024 17:13:19 +0100
Subject: [PATCH] Overhaul
---
docs/developers/guides/gas/gas-fees.mdx | 111 +++++++++++++++++-------
1 file changed, 82 insertions(+), 29 deletions(-)
diff --git a/docs/developers/guides/gas/gas-fees.mdx b/docs/developers/guides/gas/gas-fees.mdx
index 67af7c7e6..fedf73d29 100644
--- a/docs/developers/guides/gas/gas-fees.mdx
+++ b/docs/developers/guides/gas/gas-fees.mdx
@@ -10,46 +10,35 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';
## How gas works on Linea
-Linea supports the [Ethereum EIP-1559 gas price model](https://ethereum.org/developers/docs/gas).
-However, as a layer 2 blockchain, Linea provides a more stable and cost-effective solution
-for transaction fees. The EIP-1559 model formula is:
+Linea supports the [Ethereum EIP-1559 gas price model](https://ethereum.org/developers/docs/gas):
```
-units of gas used * (base fee + priority fee)
+total fee = units of gas used * (base fee + priority fee)
```
Using parameters in the [Linea source code](https://github.com/Consensys/linea-monorepo/blob/a001342170768a22988a29b2dca8601199c6e205/sdk/src/clients/blockchain/gas/LineaGasProvider.ts),
the formula can be rendered as:
```
-gasLimit * (maxBaseFeePerGas + maxPriorityFeePerGas)
+total fee = gasLimit * (maxBaseFeePerGas + maxPriorityFeePerGas)
```
-However, there are minor differences in the way Linea handles gas calculations when compared with
-Ethereum:
-
-- **The base fee uses a set price of 7 wei.** Blocks created by Linea use up to 24 million gas
- (less than 50% of the maximum Linea block size of 61 million gas), and the fee decreases by
- 12.5% per block, effectively keeping it at a stable 7 wei.
-- **Transactions won't be sequenced if the `gasPrice` or `maxPriorityFeePerGas` falls below a
- certain threshold.** This threshold is not static; it adjusts over time and varies depending
- on the specifics of each transaction. Instead, transactions are added to the pending queue
- until the gas price on the network drops sufficiently for the transactions to be included.
+Linea fundamentally works exactly the same as Ethereum. The one difference is that **the base fee
+is constant at 7 wei.** Blocks created by Linea use up to 24 million gas (less than 50% of the
+maximum Linea block size of 61 million gas), and the fee decreases by 12.5% per block, effectively
+keeping it at a stable 7 wei.
The gas cost to submit your transaction and include it on Ethereum involves the following fee
components:
-- **Layer 2 fee** - The L2 fee (execution fee) is the cost to include your transaction on the Linea
- sequencer and is calculated using a similar formula to Ethereum.
-- **Layer 1 fee** - The L1 fee is the cost to publish your L2 transaction onto Ethereum and can
- vary based on the blob fee market.
-
-To read more about how gas works on Linea, see [_Gas on Linea_](./gas-on-linea.mdx).
+- **Layer 2 cost**: The execution fee; the cost of including your transaction on the Linea
+ sequencer, and calculated using a similar formula to Ethereum (as described above).
+- **Layer 1 cost**: The cost of publishing your L2 transaction on Ethereum, which varies
+ based on the blob fee market, and is covered by the gas you pay on Linea.
-## Estimating transaction costs
+Learn more about [gas on Linea](./gas-on-linea.mdx).
:::info
-The best method for estimating gas on Linea, `linea_estimateGas`, is currently unavailable, and will
-be activated soon. See our [reference page](../../reference/api/linea-estimategas.mdx) for more
-information.
+A new API for estimating gas on Linea, `linea_estimateGas`, will be activated soon. See our
+[reference page](../../reference/api/linea-estimategas.mdx) for more information.
Please get in touch via the [Linea Discord](https://discord.gg/linea) if you intend to use
`linea_estimateGas` once it is available.
@@ -59,14 +48,16 @@ Linea supports [`eth_estimateGas`](https://docs.infura.io/api/networks/linea/jso
[`eth_gasPrice`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_gasprice), and
[`eth_feeHistory`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_feehistory).
-We suggest you first use `eth_gasPrice` to get the gas price, in wei, and then use this value in
-`eth_estimateGas`.
+You can use `eth_gasPrice` or `eth_feeHistory` to get the gas price, in wei, and you can use
+`eth_estimateGas` to find out how many units of gas a specific transaction will need.
+:::note
`eth_estimateGas` returns a total quantity of gas estimated for the transaction, contrasting with
`linea_estimateGas`, which also will return `baseFeePerGas` and `priorityFeePerGas` once available.
`eth_estimateGas` is therefore less precise and generally provides a higher estimate.
+:::
-## Step 1: `eth_gasPrice`
+## Use `eth_gasPrice`
### Parameters
@@ -105,7 +96,69 @@ A hexadecimal equivalent of an integer representing the current gas price in wei
-## Step 2: `eth_estimateGas`
+## Use `eth_feeHistory`
+
+### Parameters
+
+- `blockCount`: (integer) Number of blocks in the requested range. Between 1 and 1024 blocks can be
+ requested in a single query. If blocks in the specified block range are not available, then only the
+ fee history for available blocks is returned.
+- `newestBlock`: (string) Integer representing the highest number block of the requested range, or
+ one of the string tags `latest`, `earliest`, or `pending`.
+- `array` of `integers`: (optional) A monotonically increasing list of percentile values to sample
+ from each block's effective priority fees per gas in ascending order, weighted by gas used.
+
+### Returns
+
+- `oldestBlock`: Lowest number block of the returned range expressed as a hexadecimal number.
+- `baseFeePerGas`: An array of block base fees per gas, including an extra block value. The extra
+ value is the next block after the newest block in the returned range. Returns zeroes for blocks
+ created before EIP-1559.
+- `gasUsedRatio`: An array of block gas used ratios. These are calculated as the ratio of `gasUsed`
+ and `gasLimit`.
+- `reward`: An array of effective priority fee per gas data points from a single block. All zeroes
+ are returned if the block is empty.
+
+### Example
+
+#### Request
+
+
+
+ ```bash
+ curl https://rpc.sepolia.linea.build \
+ -X POST \
+ -H "Content-Type: application/json" \
+ -d '{"id": 1, "jsonrpc": "2.0", "method": "eth_feeHistory", "params": ["0x1", "latest", [20]]}'
+ ```
+
+
+
+#### Response
+
+
+
+ ```json
+ {
+ "jsonrpc":"2.0",
+ "id":1,
+ "result":{
+ "baseFeePerGas":[
+ "0x7",
+ "0x7"
+ ],
+ "gasUsedRatio":[0.0030745737704918033],
+ "oldestBlock":"0x396334",
+ "reward":[
+ ["0x1427509c5"]
+ ]
+ }
+ }
+ ```
+
+
+
+## Use `eth_estimateGas`
### Parameters