eth_maxPriorityFeePerGas: The Node's Suggested Tip

eth_maxPriorityFeePerGasRead methodEthereum JSON-RPC

eth_maxPriorityFeePerGas returns the priority fee the node suggests you offer a block proposer, in wei per gas. It is the 1559-native half of the old eth_gasPrice: a tip only, with no base fee folded in, which means you still have to add the base fee yourself before you have a maxFeePerGas.

1 credit
per call on BLAZED.sh
Read
call type
0
parameters
All clients
client support

Try eth_maxPriorityFeePerGas

Request as curl
curl -s https://ethereum-rpc.publicnode.com \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_maxPriorityFeePerGas",
  "params": []
}'

Runs the example straight from your browser against the endpoint above. The prefilled URL is a third-party public endpoint, not run by BLAZED.sh.

What eth_maxPriorityFeePerGas does

The value comes from the client's oracle rather than from consensus. Geth samples the tips paid in recent blocks (twenty blocks at the 60th percentile by default), ignores transactions below a floor, and clamps the result against a configured ceiling. Other clients implement the same idea with their own defaults, so this is a well-informed guess about a market, not a protocol quantity.

A transaction's tip is what the proposer actually keeps; the base fee is burned. Blocks are filled in descending order of effective tip, so the suggestion answers "what were recent inclusions paying" rather than "what will get me into the next block". When blocks are not full, a tip of zero is perfectly minable; when they are, the suggestion is a floor rather than a target.

To build a fee you combine this with the base fee: maxFeePerGas has to cover the next block's base fee plus the tip, and most tooling doubles the base fee to absorb several consecutive 12.5% increases. The node charges you base fee plus tip and refunds the difference up to your cap, so a generous cap costs nothing extra when the market is calm.

Parameters

eth_maxPriorityFeePerGas takes no parameters; send an empty params array. There is no block parameter because the answer is the oracle's current opinion rather than a value stored in a block.

What it returns

A hex quantity: the suggested priority fee in wei per gas. It is not part of the block and no two clients are obliged to agree on it.

The number is often much smaller than people expect on a quiet chain, sometimes a tiny fraction of a gwei, because it reflects what the marginal recent transaction actually paid rather than what wallets habitually offer.

Example response

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0xfec8"
}

0xfec8 is 65,224 wei, roughly 0.000065 gwei, on a quiet block. Suggested tips collapse toward zero when blocks are not full and climb sharply when they are, which is exactly why a hardcoded tip is a bad idea in both directions.

eth_maxPriorityFeePerGas with ethers.js

import { JsonRpcProvider, formatUnits } from "ethers";

const provider = new JsonRpcProvider("https://ethereum-rpc.publicnode.com");

const tipHex = await provider.send("eth_maxPriorityFeePerGas", []);
const tip = BigInt(tipHex);

const block = await provider.getBlock("latest");
const baseFee = block.baseFeePerGas;

// cap = room for a few 12.5% base fee climbs, plus the tip
const maxFeePerGas = baseFee * 2n + tip;

console.log("tip:", formatUnits(tip, "gwei"), "gwei");
console.log("cap:", formatUnits(maxFeePerGas, "gwei"), "gwei");
// ethers' getFeeData() performs both calls and returns the same pair

Gotchas and common errors

A tip alone will not send a transaction

maxPriorityFeePerGas without maxFeePerGas is half a fee. The cap has to cover the next block's base fee plus the tip, and if it does not, the transaction is rejected with "max fee per gas less than block base fee" or sits unminable until the base fee falls. Read the base fee from the latest block, or take the projected next base fee from the tail of eth_feeHistory's array, then add the tip.

The suggestion describes the past

The oracle samples blocks that are already built. In a calm market that is fine; during a contested block it is behind, and following it exactly means being outbid by everyone reacting faster. Searchers and liquidation bots derive their own number from eth_feeHistory's upper percentiles and treat the node's suggestion as a floor.

The public tip market is not the whole market

A large share of competitive flow reaches builders privately and pays through direct builder payments rather than through the transaction's tip. Those payments never show up in the tips this oracle samples, so on a busy block the observable tip distribution understates what inclusion actually costs.

Clients disagree, by configuration

Sampling window, percentile, floor and ceiling are all client settings. Comparing this value across two providers compares two configurations. If you need a number that is reproducible across nodes, compute it yourself from eth_feeHistory, whose inputs are consensus data.

Zero is a legitimate answer

When blocks are not full, transactions with no tip are still included, so an oracle can legitimately suggest something indistinguishable from zero. Code that treats a very small suggestion as a bug and substitutes a hardcoded gwei is quietly overpaying on every calm block; code that offers exactly zero will stall the first time the chain gets busy. Keep a floor and a ceiling of your own.

What eth_maxPriorityFeePerGas costs on BLAZED.sh

eth_maxPriorityFeePerGas costs 1 credit per call on BLAZED.sh and its response is a few bytes, so the surcharge for responses over 100KB is irrelevant here. Because the answer only changes meaningfully once per block, one call per block is the right cadence; pairing it with a block header read, or replacing both with a single eth_feeHistory request, keeps the request count proportional to the information. Co-located code gets that reading in a sub-10ms local round-trip, which is the difference between pricing against the current block and pricing against a stale one.

See the full credit price list

eth_maxPriorityFeePerGas: frequently asked questions

What is the difference between eth_maxPriorityFeePerGas and eth_gasPrice?

This method returns the tip alone; eth_gasPrice returns the base fee plus a tip as a single legacy number. For an EIP-1559 transaction you want the tip separately so you can set your own cap.

How do I turn the tip into maxFeePerGas?

Add the next block's base fee. A common approach is doubling the latest base fee and adding the tip, which absorbs several consecutive 12.5% increases; you are only charged base fee plus tip, so the extra headroom is not spent.

Why is the suggested tip so low?

Because blocks are not full. The oracle reports what recent inclusions actually paid, and when there is spare block space that is close to nothing. Keep a sensible floor of your own if you care about inclusion in the very next block.

Is this value the same on every node?

No. It comes from each client's oracle, with its own sampling window, percentile and caps. Base fees are consensus data and identical everywhere; suggested tips are opinions.

Does a higher tip guarantee inclusion?

It improves your position in a block that is built by tip, but competitive flow often pays builders directly instead, and those payments are invisible in the public tip distribution. A high tip helps; it is not a guarantee against private order flow.

Call eth_maxPriorityFeePerGas from the node itself

Deploy your container or script next to a synced Ethereum node. No rate limits, no compute units, sub-10ms local RPC.