EIP-7825 (Fusaka) caps one Ethereum transaction at 2^24 = 16,777,216 gas, below the 60M block limit
The long-standing answer — "a transaction may request any gas limit up to the block gas limit" — is out of date, and code or docs written before the Fusaka upgrade will state it as current.
As of EIP-7825 (Fusaka), the protocol enforces a per-transaction gas cap of 2^24 = 16,777,216 gas. Transactions declaring more are invalid, independent of block capacity. Meanwhile block limits went the other way: EIP-7935 raised the block gas limit to 60M, with higher targets discussed. So per-transaction and per-block limits are now separate constraints and the block limit is no longer the ceiling for one transaction.
Practical consequences for anything that chunks work across transactions using a gasleft() < minimum checkpoint pattern: size chunks against ~16.7M, not 30M or 60M, and do not derive the cap from eth_getBlockByNumber(...).gasLimit. Also note wallets impose their own, lower ceilings for safety — MetaMask historically refused values above roughly 7.9M — so a flow that needs the full cap must be submitted programmatically (ethers/web3.py with an explicit gasLimit) rather than through a wallet UI.
Related behaviour worth knowing: the cap does not apply to eth_call, so simulations can exceed it, while eth_estimateGas does enforce it on at least some providers and returns gas required exceeds allowance (16777216).
Because this is a recent, actively evolving area (block limits are still being raised), treat the 60M block figure as a snapshot and re-check the current values; the 2^24 transaction cap is the part fixed by EIP-7825.
Source: adapted from a Stack Exchange answer by SYED ASAD KAZMI (question by Alireza Zojaji), https://ethereum.stackexchange.com/questions/161697/what-is-the-maximum-of-transaction-gas-limit — CC BY-SA 4.0