{"id":3856,"date":"2026-10-08T11:17:53","date_gmt":"2026-10-08T11:17:53","guid":{"rendered":"https:\/\/nownodes.io\/blog\/?p=3856"},"modified":"2026-10-08T11:22:48","modified_gmt":"2026-10-08T11:22:48","slug":"how-to-send-an-eip-1559-transaction-on-ethereum-with-python","status":"publish","type":"post","link":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/","title":{"rendered":"How to Send an EIP-1559 Transaction on Ethereum With Python"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">To send an EIP-1559 transaction in Python, you build a Type 2 transaction with two fee fields \u2014 <code>maxFeePerGas<\/code> and <code>maxPriorityFeePerGas<\/code> \u2014 sign it with your private key, and broadcast it using web3.py&#8217;s <code>send_raw_transaction<\/code>. That&#8217;s the whole flow. What trips people up is how those two fee fields relate to each other, and where the older single-price <code>gasPrice<\/code> style still fits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers both. You&#8217;ll get a working web3.py script for a Type 2 transfer, the legacy Type 0 version of the same transfer, and a short comparison of when to reach for each. Everything uses the current web3.py release (v8), whose method and attribute names differ from a lot of the tutorials you&#8217;ll find online.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"what-is-a-type-2-transaction\">What Is a Type 2 Transaction?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">A Type 2 transaction is Ethereum&#8217;s dynamic-fee transaction format, introduced by <a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-1559\" rel=\"nofollow noopener noreferrer\">EIP-1559<\/a> in the August 2021 London upgrade. It replaced the single <code>gasPrice<\/code> field with two numbers that split the fee into the part the network sets and the part you choose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Both of those numbers sit on top of a value called the base fee. Understanding the three pieces is most of the work.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"base-fee-priority-fee-and-max-fee-what-each-one-means\">Base fee, priority fee, and max fee \u2014 what each one means<\/h3>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"972\" height=\"1024\" src=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-46-972x1024.png\" alt=\"\" class=\"wp-image-3859\" srcset=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-46-972x1024.png 972w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-46-285x300.png 285w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-46-767x808.png 767w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-46.png 1222w\" sizes=\"auto, (max-width: 972px) 100vw, 972px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Base fee<\/strong> \u2014 a per-gas price the protocol sets for every block and then burns (removes from circulation). It moves up or down by at most 12.5% from one block to the next, depending on how full the previous block was relative to the roughly 15 million gas target. You never set it; the network does. See ethereum.org&#8217;s gas documentation for the full mechanism.<\/li>\n\n\n\n<li><strong>Priority fee (tip)<\/strong> \u2014 <code>maxPriorityFeePerGas<\/code>, the amount per gas you offer validators on top of the base fee to get your transaction picked up faster. This is the only part that actually goes to the validator.<\/li>\n\n\n\n<li><strong>Max fee<\/strong> \u2014 <code>maxFeePerGas<\/code>, the absolute ceiling per gas you&#8217;re willing to pay, covering both the base fee and your tip. If the base fee lands below that ceiling, you&#8217;re charged only what&#8217;s needed and the rest is refunded.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The &#8220;type&#8221; label itself comes from <a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-2718\" rel=\"nofollow noopener noreferrer\">EIP-2718<\/a>, a typed-envelope scheme: Type 0 is legacy, Type 1 adds an access list (EIP-2930), and Type 2 is the dynamic-fee format this guide focuses on.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"why-did-ethereum-replace-the-old-gas-auction\">Why Did Ethereum Replace the Old Gas Auction?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">The legacy model was a blind first-price auction. You set one <code>gasPrice<\/code>, guessed what the rest of the market was bidding, and hoped it was enough. Bid too low and your transaction stalled for hours; bid too high and you overpaid with no money back.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">EIP-1559 took the guessing out of the floor. The base fee gives everyone a published, protocol-set rate that moves in small, predictable steps, and the refund on <code>maxFeePerGas<\/code> means a generous ceiling no longer means a generous bill. You still compete on the tip when blocks are congested, but you&#8217;re no longer bidding in the dark on the base cost.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"when-should-you-use-legacy-gas-pricing\">When Should You Use Legacy Gas Pricing?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">On Ethereum mainnet, use Type 2 by default \u2014 it&#8217;s the modern format, and nearly every wallet, library, and tool supports it. Legacy (Type 0) is worth keeping for two cases: a chain or tool that never adopted EIP-1559, and a fallback when a network temporarily returns incomplete fee data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The audiences are the same either way. Wallet backends, trading bots, dApp servers, and payment systems all broadcast transactions in code. What changes between the two formats is only the fee fields you fill in.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th>Legacy (Type 0)<\/th><th>EIP-1559 (Type 2)<\/th><\/tr><\/thead><tbody><tr><td>Fee fields<\/td><td><code>gasPrice<\/code> (one value)<\/td><td><code>maxFeePerGas<\/code> + <code>maxPriorityFeePerGas<\/code><\/td><\/tr><tr><td>Pricing model<\/td><td>First-price auction \u2014 you guess the rate<\/td><td>Protocol base fee + your tip<\/td><\/tr><tr><td>Base fee<\/td><td>None<\/td><td>Set per block, then burned<\/td><\/tr><tr><td>Overpayment<\/td><td>You pay the full <code>gasPrice<\/code><\/td><td>Room above base fee + tip is refunded<\/td><\/tr><tr><td>Predictability<\/td><td>Low \u2014 volatile, easy to mis-bid<\/td><td>Higher \u2014 base fee moves in small steps<\/td><\/tr><tr><td>Typical use today<\/td><td>Non-1559 chains; fallback<\/td><td>Ethereum mainnet and most EVM chains<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<h2 class=\"wp-block-heading\" id=\"how-to-send-a-type-2-transaction-with-web3py\">How to Send a Type 2 Transaction With web3.py<\/h2>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-47-1024x683.png\" alt=\"\" class=\"wp-image-3861\" srcset=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-47-1024x683.png 1024w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-47-300x200.png 300w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-47-768x512.png 768w, https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/image-47.png 1536w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The flow is five steps: install the library, connect to an Ethereum endpoint, read the current fee data, build and sign the transaction, then broadcast it and wait for the receipt.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"prerequisites-and-setup\">Prerequisites and setup<\/h3>\n\n\n<p class=\"wp-block-paragraph\">You&#8217;ll need Python 3.8 or newer and the web3 package:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install web3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You also need an Ethereum endpoint for web3.py to talk to, plus a funded wallet to send from. web3.py doesn&#8217;t keep its own copy of the chain \u2014 it sends requests to an endpoint that does. <a href=\"https:\/\/nownodes.io\">NOWNodes<\/a> provides Ethereum endpoints for exactly this: a <a href=\"https:\/\/nownodes.io\/public-endpoints\">free public Ethereum endpoint<\/a> capped at 5 requests per second for quick tests, or an API key on the free Start plan (100,000 requests) when you want a private endpoint.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One rule before any code: never hardcode or commit a private key. Load it from an environment variable or a secrets manager, and run everything against a testnet first so mistakes cost nothing.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"connect-to-ethereum-and-check-the-connection\">Connect to Ethereum and check the connection<\/h3>\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\nfrom web3 import Web3\n\n# Ethereum endpoint from your NOWNodes dashboard\nw3 = Web3(Web3.HTTPProvider(\n    \"https:\/\/eth.nownodes.io\",\n    request_kwargs={\"headers\": {\"api-key\": \"YOUR_API_KEY\"}},\n))\n\nprint(w3.is_connected())  # True when the endpoint responds<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>is_connected()<\/code> returns <code>True<\/code> once your <a href=\"https:\/\/nownodes.io\/nodes\/ethereum-eth\">Ethereum endpoint<\/a> answers. If it comes back <code>False<\/code>, fix the URL and key before going any further.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"build-and-broadcast-the-type-2-transaction\">Build and broadcast the Type 2 transaction<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s the full Type 2 transfer. The comments mark the parts specific to the dynamic-fee format:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>account = w3.eth.account.from_key(os.environ&#91;\"PRIVATE_KEY\"])\nsender = account.address\nrecipient = Web3.to_checksum_address(\"0xRecipientAddressHere\")\n\n# Current fee data from the network\nbase_fee = w3.eth.get_block(\"latest\")&#91;\"baseFeePerGas\"]\npriority_fee = w3.eth.max_priority_fee            # suggested tip, in wei\nmax_fee = (2 * base_fee) + priority_fee           # headroom for a rising base fee\n\ntx = {\n    \"type\": 2,                                    # EIP-1559 transaction\n    \"chainId\": 1,                                 # 1 = Ethereum mainnet\n    \"from\": sender,\n    \"to\": recipient,\n    \"value\": w3.to_wei(0.01, \"ether\"),\n    \"nonce\": w3.eth.get_transaction_count(sender),\n    \"gas\": 21000,                                 # plain ETH transfer\n    \"maxFeePerGas\": max_fee,\n    \"maxPriorityFeePerGas\": priority_fee,\n}\n\nsigned = w3.eth.account.sign_transaction(tx, account.key)\ntx_hash = w3.eth.send_raw_transaction(signed.raw_transaction)\nprint(\"Sent:\", tx_hash.hex())\n\nreceipt = w3.eth.wait_for_transaction_receipt(tx_hash)\nprint(\"Mined in block\", receipt&#91;\"blockNumber\"], \"- status\", receipt&#91;\"status\"])<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Two lines do the real work on fees. <code>max_priority_fee<\/code> asks the network for a reasonable tip. The <code>max_fee<\/code> formula \u2014 twice the current base fee plus the tip \u2014 leaves room for the base fee to climb over the next few blocks while your transaction waits. Because the unused portion is refunded, that headroom costs you nothing if the base fee stays flat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>send_raw_transaction<\/code> relays the signed payload through your endpoint into the network&#8217;s mempool. From there, the base fee and validators decide when it&#8217;s included \u2014 an endpoint broadcasts your transaction, but it doesn&#8217;t set the gas or guarantee it lands.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One detail saves a lot of debugging: the signed object exposes its bytes as <code>raw_transaction<\/code>. Up to web3.py v6 this was <code>rawTransaction<\/code>, and it changed to <code>raw_transaction<\/code> in v7. Code copied from older guides breaks here with an <code>AttributeError<\/code>.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"send-the-same-transfer-the-legacy-way\">Send the same transfer the legacy way<\/h3>\n\n\n<p class=\"wp-block-paragraph\">The Type 0 version swaps the two fee fields for a single <code>gasPrice<\/code>:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">python<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tx = {\n    \"type\": 0,                                    # legacy transaction\n    \"chainId\": 1,\n    \"from\": sender,\n    \"to\": recipient,\n    \"value\": w3.to_wei(0.01, \"ether\"),\n    \"nonce\": w3.eth.get_transaction_count(sender),\n    \"gas\": 21000,\n    \"gasPrice\": w3.eth.gas_price,                 # one number, legacy style\n}\n\nsigned = w3.eth.account.sign_transaction(tx, account.key)\ntx_hash = w3.eth.send_raw_transaction(signed.raw_transaction)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Signing and broadcasting are identical to the Type 2 version. Only the fee section differs, which is why moving existing code from one format to the other is usually a small change.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"common-mistakes-when-setting-gas-fees\">Common Mistakes When Setting Gas Fees<\/h2>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Outdated attribute names.<\/strong> Guides for web3.py 5 or 6 use <code>signed.rawTransaction<\/code>. On v7 and v8 that raises an <code>AttributeError<\/code> \u2014 use <code>signed.raw_transaction<\/code>.<\/li>\n\n\n\n<li><strong>A hardcoded private key.<\/strong> Keep it in an environment variable, never in a file you commit to a repository.<\/li>\n\n\n\n<li><strong>A missing <code>chainId<\/code>.<\/strong> Without it, signing can fail, and the transaction loses its protection against replay on other networks. Set it to the chain you&#8217;re actually on.<\/li>\n\n\n\n<li><strong>Nonce collisions.<\/strong> When you send several transactions quickly, read the nonce once and increment it yourself instead of calling <code>get_transaction_count<\/code> each time \u2014 otherwise two transactions can claim the same nonce.<\/li>\n\n\n\n<li><strong>Proof-of-authority chains.<\/strong> Some networks (not Ethereum mainnet) need the <code>ExtraDataToPOAMiddleware<\/code> injected before requests work. Add it only on the chains that require it.<\/li>\n<\/ul>\n\n\n<h2 class=\"wp-block-heading\" id=\"key-takeaways\">Key Takeaways<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Use Type 2 transactions by default on Ethereum. Pull <code>maxPriorityFeePerGas<\/code> from the network&#8217;s suggestion, give <code>maxFeePerGas<\/code> enough headroom above the current base fee, and rely on the refund for anything you don&#8217;t use. Keep the legacy <code>gasPrice<\/code> path for chains that don&#8217;t support EIP-1559 or as a fallback. And if you&#8217;re adapting an older script, check the fee fields and the <code>raw_transaction<\/code> attribute first \u2014 that&#8217;s where most broken examples go wrong.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n<h3 class=\"wp-block-heading\" id=\"do-i-need-to-set-the-transaction-type-manually\">Do I need to set the transaction type manually?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">No. web3.py infers a Type 2 transaction whenever <code>maxFeePerGas<\/code> and <code>maxPriorityFeePerGas<\/code> are present, and a legacy one when only <code>gasPrice<\/code> is. Setting <code>\"type\": 2<\/code> or <code>\"type\": 0<\/code> is optional, but it makes your intent explicit and avoids surprises if you later mix fields.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"can-a-transaction-still-get-stuck-and-how-do-i-replace-it\">Can a transaction still get stuck, and how do I replace it?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Yes. If the base fee rises above your <code>maxFeePerGas<\/code>, the transaction waits in the mempool until the base fee drops. To push it through sooner, resubmit a transaction with the same nonce and a higher <code>maxFeePerGas<\/code> and <code>maxPriorityFeePerGas<\/code> \u2014 that replaces the pending one.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"is-this-fee-model-available-on-every-evm-chain\">Is this fee model available on every EVM chain?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">No. Many EVM networks support the two-field format, but some don&#8217;t, and a few handle fees differently. If a chain rejects it, fall back to <code>gasPrice<\/code>. Check the specific network before assuming Type 2 will work.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"does-the-gas-limit-differ-between-the-two-transaction-types\">Does the gas limit differ between the two transaction types?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">No. A plain ETH transfer costs 21,000 gas whether you send it as Type 0 or Type 2 \u2014 the gas limit reflects the work performed, not the fee format. Only the fee fields change between them.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>To send an EIP-1559 transaction in Python, you build a Type 2 transaction with two fee fields \u2014 maxFeePerGas and maxPriorityFeePerGas \u2014 sign it with your private key, and broadcast it using web3.py&#8217;s send_raw_transaction. That&#8217;s the whole flow. What trips people up is how those two fee fields relate to each other, and where the [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":3857,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","_lmt_disableupdate":"","_lmt_disable":"","_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[102],"tags":[],"class_list":["post-3856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev-report"],"blocksy_meta":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Send EIP-1559 Transactions in Python (vs Legacy Gas)<\/title>\n<meta name=\"description\" content=\"Build, sign, and broadcast an EIP-1559 (Type 2) transaction in Python with web3.py \u2014 plus how it compares to legacy gasPrice and when each one still makes sense.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Send EIP-1559 Transactions in Python (vs Legacy Gas)\" \/>\n<meta property=\"og:description\" content=\"Build, sign, and broadcast an EIP-1559 (Type 2) transaction in Python with web3.py \u2014 plus how it compares to legacy gasPrice and when each one still makes sense.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/\" \/>\n<meta property=\"og:site_name\" content=\"NOWNodes Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-08T11:17:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-08T11:22:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/text_1-26-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1280\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"\u0410nastasia\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nownodes\" \/>\n<meta name=\"twitter:site\" content=\"@nownodes\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u0410nastasia\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/\"},\"author\":{\"name\":\"\u0410nastasia\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8\"},\"headline\":\"How to Send an EIP-1559 Transaction on Ethereum With Python\",\"datePublished\":\"2026-10-08T11:17:53+00:00\",\"dateModified\":\"2026-10-08T11:22:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/\"},\"wordCount\":1412,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#organization\"},\"articleSection\":[\"Dev Report\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/\",\"url\":\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/\",\"name\":\"Send EIP-1559 Transactions in Python (vs Legacy Gas)\",\"isPartOf\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#website\"},\"datePublished\":\"2026-10-08T11:17:53+00:00\",\"dateModified\":\"2026-10-08T11:22:48+00:00\",\"description\":\"Build, sign, and broadcast an EIP-1559 (Type 2) transaction in Python with web3.py \u2014 plus how it compares to legacy gasPrice and when each one still makes sense.\",\"breadcrumb\":{\"@id\":\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Blog\",\"item\":\"https:\/\/nownodes.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dev Report\",\"item\":\"https:\/\/nownodes.io\/blog\/category\/dev-report\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Send an EIP-1559 Transaction on Ethereum With Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/nownodes.io\/blog\/#website\",\"url\":\"https:\/\/nownodes.io\/blog\/\",\"name\":\"NOWNodes Blog\",\"description\":\"Your first-to-go source of development guides, web3 analytics and most recent news about NOWNodes\",\"publisher\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/nownodes.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/nownodes.io\/blog\/#organization\",\"name\":\"NOWNodes Blog\",\"url\":\"https:\/\/nownodes.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png\",\"contentUrl\":\"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png\",\"width\":1164,\"height\":1164,\"caption\":\"NOWNodes Blog\"},\"image\":{\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/twitter.com\/nownodes\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8\",\"name\":\"\u0410nastasia\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/nownodes.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g\",\"caption\":\"\u0410nastasia\"},\"url\":\"https:\/\/nownodes.io\/blog\/author\/nasty-nownodes\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Send EIP-1559 Transactions in Python (vs Legacy Gas)","description":"Build, sign, and broadcast an EIP-1559 (Type 2) transaction in Python with web3.py \u2014 plus how it compares to legacy gasPrice and when each one still makes sense.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/","og_locale":"en_US","og_type":"article","og_title":"Send EIP-1559 Transactions in Python (vs Legacy Gas)","og_description":"Build, sign, and broadcast an EIP-1559 (Type 2) transaction in Python with web3.py \u2014 plus how it compares to legacy gasPrice and when each one still makes sense.","og_url":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/","og_site_name":"NOWNodes Blog","article_published_time":"2026-10-08T11:17:53+00:00","article_modified_time":"2026-10-08T11:22:48+00:00","og_image":[{"width":2560,"height":1280,"url":"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2026\/10\/text_1-26-scaled.jpg","type":"image\/jpeg"}],"author":"\u0410nastasia","twitter_card":"summary_large_image","twitter_creator":"@nownodes","twitter_site":"@nownodes","twitter_misc":{"Written by":"\u0410nastasia","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#article","isPartOf":{"@id":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/"},"author":{"name":"\u0410nastasia","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8"},"headline":"How to Send an EIP-1559 Transaction on Ethereum With Python","datePublished":"2026-10-08T11:17:53+00:00","dateModified":"2026-10-08T11:22:48+00:00","mainEntityOfPage":{"@id":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/"},"wordCount":1412,"commentCount":0,"publisher":{"@id":"https:\/\/nownodes.io\/blog\/#organization"},"articleSection":["Dev Report"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/","url":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/","name":"Send EIP-1559 Transactions in Python (vs Legacy Gas)","isPartOf":{"@id":"https:\/\/nownodes.io\/blog\/#website"},"datePublished":"2026-10-08T11:17:53+00:00","dateModified":"2026-10-08T11:22:48+00:00","description":"Build, sign, and broadcast an EIP-1559 (Type 2) transaction in Python with web3.py \u2014 plus how it compares to legacy gasPrice and when each one still makes sense.","breadcrumb":{"@id":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/nownodes.io\/blog\/how-to-send-an-eip-1559-transaction-on-ethereum-with-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog","item":"https:\/\/nownodes.io\/blog"},{"@type":"ListItem","position":2,"name":"Dev Report","item":"https:\/\/nownodes.io\/blog\/category\/dev-report"},{"@type":"ListItem","position":3,"name":"How to Send an EIP-1559 Transaction on Ethereum With Python"}]},{"@type":"WebSite","@id":"https:\/\/nownodes.io\/blog\/#website","url":"https:\/\/nownodes.io\/blog\/","name":"NOWNodes Blog","description":"Your first-to-go source of development guides, web3 analytics and most recent news about NOWNodes","publisher":{"@id":"https:\/\/nownodes.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/nownodes.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/nownodes.io\/blog\/#organization","name":"NOWNodes Blog","url":"https:\/\/nownodes.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png","contentUrl":"https:\/\/nownodes.io\/blog\/wp-content\/uploads\/2024\/02\/cropped-New-Logo-NN.png","width":1164,"height":1164,"caption":"NOWNodes Blog"},"image":{"@id":"https:\/\/nownodes.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/twitter.com\/nownodes"]},{"@type":"Person","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/person\/0890ec68e813adecb93c18ee00e1e7a8","name":"\u0410nastasia","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/nownodes.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1de24ab8dcdd7ec30f6adaf78b56bc1eda421f87575b7e103c8fc3fc4420e833?s=96&d=mm&r=g","caption":"\u0410nastasia"},"url":"https:\/\/nownodes.io\/blog\/author\/nasty-nownodes"}]}},"modified_by":"\u0410nastasia","_links":{"self":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts\/3856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/comments?post=3856"}],"version-history":[{"count":2,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts\/3856\/revisions"}],"predecessor-version":[{"id":3862,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/posts\/3856\/revisions\/3862"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/media\/3857"}],"wp:attachment":[{"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/media?parent=3856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/categories?post=3856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nownodes.io\/blog\/wp-json\/wp\/v2\/tags?post=3856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}