From e55b992249e2fb4ceae1f0fe4799f781b236d11f Mon Sep 17 00:00:00 2001 From: Joel Willmore <95916148+jlwllmr@users.noreply.github.com> Date: Mon, 9 Sep 2024 17:30:28 +0100 Subject: [PATCH] Update gas estimation pages (#718) * Update gas estimation page * Overhaul * lowercase wei * Adjust subheadings * Improve wording * Adjustment --------- Co-authored-by: m4sterbunny --- docs/developers/guides/gas/gas-fees.mdx | 226 +++++++++++++----- .../reference/api/linea-estimategas.mdx | 30 ++- 2 files changed, 185 insertions(+), 71 deletions(-) diff --git a/docs/developers/guides/gas/gas-fees.mdx b/docs/developers/guides/gas/gas-fees.mdx index 5b2184f0c..3e7c6d434 100644 --- a/docs/developers/guides/gas/gas-fees.mdx +++ b/docs/developers/guides/gas/gas-fees.mdx @@ -10,97 +10,195 @@ 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. - -There are minor differences in the way Linea handles gas calculations when compared with Ethereum: +Linea supports the [Ethereum EIP-1559 gas price model](https://ethereum.org/developers/docs/gas): +``` +total fee = units of gas used * (base fee + priority fee) +``` -- **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. +- **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. -## Estimating transaction costs +These two resource costs are abstracted by the rollup and covered by the recommended L2 gas price +and gas used. -Use the [`linea_estimateGas`](../../reference/api/linea-estimategas.mdx) API method to estimate the -gas cost for sending a transaction. The method returns the recommended gas limit, the base fee per -gas, and the priority fee per gas. +Learn more about [gas on Linea](./gas-on-linea.mdx). -The `linea_estimateGas` endpoint is currently unavailable. For more information, see -our [reference page](../../reference/api/linea-estimategas.mdx). +:::info +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. -:::info important +If you intend to use `linea_estimateGas` once it is available, you want to find out more, or you +have further questions, please get in touch on [Discord](https://discord.gg/linea). +::: -Linea also supports [`eth_estimateGas`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_estimategas), +Linea supports [`eth_estimateGas`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_estimategas), [`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), but -they usually return a higher (and less accurate) estimate than `linea_estimateGas`. +[`eth_feeHistory`](https://docs.infura.io/api/networks/linea/json-rpc-methods/eth_feehistory). -We recommend you use `linea_estimateGas` where possible to maximize the accuracy of the gas -estimate. +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, whereas +`linea_estimateGas` will return `gasLimit`, `baseFeePerGas`, and `priorityFeePerGas` once available, +providing a more precise estimate. ::: -The following example executes `linea_estimateGas` on the Linea testnet using the public RPC URL. +## `eth_gasPrice` -:::tip +### Parameters -You can also call the API using [Infura's supported Linea endpoints](https://docs.infura.io/api/networks/linea/choose-a-network). -::: +None. + +### Returns + +A hexadecimal equivalent of an integer representing the current gas price in wei. - - +### Example -```bash -curl https://rpc.sepolia.linea.build \ +#### Request + + + + ```bash + curl https://rpc.sepolia.linea.build \ -X POST \ -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0","method": "linea_estimateGas","params": [{"from": "0xFE3B557E8Fb62b89F4916B721be55cEb828dBd73","gasPrice":"0x100000000","gas":"0x21000"}],"id": 53}' -``` + -d '{"jsonrpc": "2.0","method": "eth_gasPrice","params": [],"id": 1}' + ``` + + - - - -```json -{ - "jsonrpc": "2.0", - "id": 53, - "result": { - "baseFeePerGas": "0x7", - "gasLimit": "0xcf08", - "priorityFeePerGas": "0x43a82a4" - } -} -``` +#### Response + + + + ```json + { + "jsonrpc":"2.0", + "id":1, + "result":"0x12eb10e0c" + } + ``` + + +## `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]]}' + ``` -The `linea_estimateGas` API calculates gas fees as follows: +#### Response + + + + ```json + { + "jsonrpc":"2.0", + "id":1, + "result":{ + "baseFeePerGas":[ + "0x7", + "0x7" + ], + "gasUsedRatio":[0.0030745737704918033], + "oldestBlock":"0x396334", + "reward":[ + ["0x1427509c5"] + ] + } + } + ``` + + -- `baseFeePerGas` - Uses the Linea base fee which is set at 7 wei. -- `gasLimit` - Uses the standard `eth_estimateGas` API calculation. -- `priorityFeePerGas` - Calculates the fee required to prioritize a transaction by considering factors such as the - compressed transaction size, layer 1 verification costs and capacity, gas price ratio between layer 1 and - layer 2, the transaction's gas usage, the minimum gas price on layer 2, and a minimum - margin (for error) for gas price estimation. +## `eth_estimateGas` -:::note +### Parameters -The result of the request returns hexadecimal equivalent integers of gas prices in wei. Convert the hexadecimal value into -decimals to get the wei value. You can use any hexadecimal to decimal converter such as -[RapidTables](https://www.rapidtables.com/convert/number/hex-to-decimal.html). +- `TRANSACTION CALL OBJECT` [required] + - `from`: [optional] 20 Bytes - The address the transaction is sent from. + - `to`: 20 Bytes - The address the transaction is directed to. + - `gas`: [optional] Hexadecimal value of the gas provided for the transaction execution. `eth_estimateGas` consumes zero gas, but this parameter may be needed by some executions. + - `gasPrice`: [optional] Hexadecimal value of the gas price used for each paid gas. + - `maxPriorityFeePerGas`: [optional] Maximum fee, in wei, the sender is willing to pay per gas above the base fee. + - `maxFeePerGas`: [optional] Maximum total fee (base fee + priority fee), in wei, the sender is willing to pay per gas. + - `value`: [optional] Hexadecimal value of the value sent with this transaction. + - `data`: [optional] Hash of the method signature and encoded parameters. See the [Ethereum contract ABI specification](https://docs.soliditylang.org/en/latest/abi-spec.html). + - `block number`: [required] A string representing a block number, or one of the string tags `latest`, `earliest`, `pending`, `safe`, or `finalized`. See the [default block parameter](https://ethereum.org/en/developers/docs/apis/json-rpc/#default-block). -::: +### Returns + +A hexadecimal of the estimate of the gas required for the given transaction. + +### Example + +#### Request + + + + ```bash + curl https://rpc.sepolia.linea.build \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc":"2.0","method":"eth_estimateGas","params": [{"to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","gasPrice": "0x12eb10e0c","value": "0x9184e72a"}],"id":1}' + ``` + + + +#### Response + + + + ```json + { + "jsonrpc":"2.0", + "id":1, + "result":"0x5208" + } + ``` + + diff --git a/docs/developers/reference/api/linea-estimategas.mdx b/docs/developers/reference/api/linea-estimategas.mdx index eba7ddd2b..e5de7920b 100644 --- a/docs/developers/reference/api/linea-estimategas.mdx +++ b/docs/developers/reference/api/linea-estimategas.mdx @@ -83,12 +83,12 @@ You can also call the API using [Infura's supported Linea endpoints](https://doc - ```bash - curl https://rpc.linea.build \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"jsonrpc": "2.0","method": "linea_estimateGas","params": [{"from": "0x971e727e956690b9957be6d51Ec16E73AcAC83A7","gas":"0x21000"}],"id": 53}' - ``` + ```bash + curl https://rpc.linea.build \ + -X POST \ + -H "Content-Type: application/json" \ + -d '{"jsonrpc": "2.0","method": "linea_estimateGas","params": [{"from": "0x971e727e956690b9957be6d51Ec16E73AcAC83A7","gas":"0x21000"}],"id": 53}' + ``` @@ -126,4 +126,20 @@ You can also call the API using [Infura's supported Linea endpoints](https://doc "priorityFeePerGas": "0x43a82a4" } } - ``` +``` + +Where: +- `baseFeePerGas` - Uses the Linea base fee which is set at 7 wei. +- `gasLimit` - Uses the standard `eth_estimateGas` API calculation. +- `priorityFeePerGas` - Calculates the fee required to prioritize a transaction by considering factors such as the + compressed transaction size, layer 1 verification costs and capacity, gas price ratio between layer 1 and + layer 2, the transaction's gas usage, the minimum gas price on layer 2, and a minimum + margin (for error) for gas price estimation. + +:::note + +The result of the request returns hexadecimal equivalent integers of gas prices in wei. Convert the hexadecimal value into +decimals to get the wei value. You can use any hexadecimal to decimal converter such as +[RapidTables](https://www.rapidtables.com/convert/number/hex-to-decimal.html). + +:::