﻿---
title: "การแทนที่ธุรกรรมใน mempool ของ Ethereum"
description: "คู่มือขอบเขตระดับไคลเอนต์สำหรับการแทนที่ธุรกรรม Ethereum จากผู้ส่งเดียวกันและใช้ nonce เดียวกัน การเพิ่มเพดานค่าธรรมเนียม การแข่งขันเพื่อยกเลิก ธุรกรรม blob ช่องทางส่วนตัว ใบรับธุรกรรม และภาวะสิ้นสุด"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# การแทนที่ธุรกรรมใน mempool ของ Ethereum

> จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้

<a id="answer"></a>

## คำตอบโดยตรง

การแทนที่ธุรกรรม Ethereum เป็นนโยบายภายในของพูลธุรกรรม ซึ่งโหนดอาจเลือกธุรกรรมที่ลงนามใหม่เหนือธุรกรรมตัวเลือกอื่นจากผู้ส่งเดียวกันและมี `nonce` เดียวกัน กลไกนี้ไม่ใช่สวิตช์ Replace-by-Fee ระดับฉันทามติที่ใช้ร่วมกันทั้งเครือข่าย การที่โหนดหนึ่งยอมรับแฮชใหม่ไม่ได้ลบธุรกรรมเดิมที่ลงนามแล้วออกจากโหนดอื่น รีเลย์ส่วนตัว หรือข้อมูลขาเข้าของผู้สร้างบล็อก การบรรจุในเชนมาตรฐานเท่านั้นที่ตัดสินว่าธุรกรรมตัวเลือกใดใช้ nonce ของบัญชี

คำสั่งเร่งธุรกรรมของกระเป๋าสินทรัพย์ดิจิทัลมักคงปลายทาง มูลค่า และ calldata เดิมไว้พร้อมเพิ่มช่องค่าธรรมเนียม ส่วนคำสั่งยกเลิกผ่านพูลสาธารณะมักสร้างธุรกรรมมูลค่าศูนย์ที่ส่งกลับหาตนเอง โดยใช้ผู้ส่งและ nonce เดียวกัน นี่คือธุรกรรมคู่แข่ง ไม่ใช่คำสั่งย้อนกลับ หากธุรกรรมเดิมถูกบรรจุก่อน การโอนหรือการเรียกสัญญาจะไม่ถูกย้อนคืน ช่องทางส่วนตัวของแต่ละผลิตภัณฑ์อาจมี API ยกเลิกต่างกัน เช่น Flashbots Protect ระบุการยกเลิกเพื่อยืนยันตัวตนซึ่งไม่ถูกบันทึกบนเชน จึงห้ามนำไปเหมารวมกับการแทนที่ธุรกรรม Ethereum ผ่านพูลสาธารณะ

<a id="mechanism"></a>

## กลไกการทำงาน

1. ระบุลำดับธุรกรรมทั้งหมดให้แน่นอน ได้แก่ chain ID ไคลเอนต์และเวอร์ชัน บล็อกส่วนหัวและค่าธรรมเนียมฐาน ช่องทางส่ง ผู้ส่ง nonce ของบัญชีในเชนมาตรฐาน ไบต์ดิบที่ลงนามของธุรกรรมเดิม แฮช และประเภทธุรกรรม ตรวจสอบมุมมองสาธารณะหรือส่วนตัวที่เกี่ยวข้องหลายแห่ง เพราะป้ายสถานะในกระเป๋าสินทรัพย์ดิจิทัลหรือคำตอบ RPC แห่งเดียวไม่ใช่สถานะของทั้งเครือข่าย
2. จำแนกธุรกรรมเดิมให้ถูกต้องว่า ถูกปฏิเสธ รออยู่ภายในโหนด อยู่ในคิวเพราะมีช่องว่างของ nonce ถูกทิ้งหรือขับออก ส่งผ่านช่องทางส่วนตัว บรรจุและสำเร็จ บรรจุพร้อม `status = 0` ถูกนำออกจากการจัดระเบียบเชนใหม่ หรือเข้าสู่ภาวะสิ้นสุดแล้ว เมื่อ nonce ถูกใช้ในเชนมาตรฐานต้องหยุดถือว่ายังแทนที่ได้ แม้การจัดระเบียบเชนใหม่อาจเปิดการแข่งขันอีกครั้ง
3. กำหนดเจตนาใหม่ การเร่งธุรกรรมต้องทำซ้ำช่องข้อมูลที่กำหนดความหมายทั้งหมด ส่วนการพยายามยกเลิกผ่านพูลสาธารณะมักใช้ผู้ส่งและ nonce เดิม พร้อม `to = sender`, `value = 0` และ calldata ว่าง ก่อนลงนามให้เปรียบเทียบ chain ID ประเภท ปลายทาง มูลค่า calldata รายการเข้าถึง เพดาน gas แฮช blob และการมอบอำนาจ
4. อ่านนโยบายแทนที่จริงของโหนดเป้าหมาย ธุรกรรมแบบดั้งเดิมและประเภท 1 ใช้ `gasPrice`; ประเภท 2 มี `maxFeePerGas` และ `maxPriorityFeePerGas`; ประเภท 3 ยังมี `maxFeePerBlobGas` และต้องมี sidecar ค่าตั้งต้นปัจจุบันของ Geth คือ `txpool.pricebump = 10` สำหรับพูลทั่วไปและ `blobpool.pricebump = 100` สำหรับพูล blob ซึ่งเป็นเพียงตัวอย่างการตั้งค่า Geth ไม่ใช่ค่าคงที่ของ Ethereum ทั้งเครือข่าย
5. คำนวณคุณสมบัติในการบรรจุและเงินทุนแยกจากอัตราเพิ่ม สำหรับประเภท 2 ราคาจริงคือ `min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas)` ธุรกรรมตัวเลือกยังต้องมีการเข้ารหัสที่ถูกต้อง มี gas ขั้นต่ำตามธุรกรรมเพียงพอ และมียอดคงเหลือครอบคลุมมูลค่ารวมถึงภาระค่าธรรมเนียมสูงสุด เพดานที่สูงขึ้นไม่แก้ calldata ที่ไม่ถูกต้องและไม่รับประกันว่า EVM จะทำงานสำเร็จ
6. ส่งอย่างรอบคอบและเก็บคำตอบทั้งหมด การเผยแพร่ซ้ำต่อสาธารณะอาจเปิดเผยเจตนาและสร้างความเสี่ยง MEV ส่วนรีเลย์ส่วนตัวมีขอบเขตการมองเห็น วิธีการยกเลิก การครอบคลุมผู้สร้างบล็อก และความพร้อมใช้งานของตนเอง ติดตามแฮชเดิมและแฮชใหม่ในทุกช่องทางโดยไม่สรุปว่าการยอมรับภายในโหนดได้ลบคู่แข่ง และอย่าส่งธุรกรรมตัวเลือกที่สามซึ่งมีการโอนมูลค่าโดยไม่ตรวจสอบ
7. กระทบยอดธุรกรรมที่ชนะกับเชนมาตรฐาน ตรวจสอบบล็อกและแฮชของใบรับธุรกรรม ดัชนีธุรกรรม `status` gas ที่ใช้ ราคาค่า gas จริง บันทึกเหตุการณ์ nonce ของผู้ส่ง ยอดคงเหลือ และสถานะสัญญาที่ระดับภาวะสิ้นสุดตามต้องการ บันทึกแฮชที่แพ้ว่าแทนที่ ถูกทิ้ง หรือยังตรวจพบตามหลักฐาน และเริ่มวิเคราะห์ใหม่หลังการจัดระเบียบเชนใหม่

<a id="example"></a>

## ตัวอย่างคำนวณ

- **ตัวอย่างการเพิ่มค่าธรรมเนียมสำหรับประเภท 2 ทั่วไป.** ธุรกรรมตัวเลือกเดิมมี `maxFeePerGas = 40 gwei` และ `maxPriorityFeePerGas = 2 gwei` ภายใต้การตั้งค่า Geth เพื่อการเรียนรู้ที่เพิ่ม `10%` เกณฑ์คำนวณคือ `44 gwei` และ `2.2 gwei` ธุรกรรมที่ `44/2.1 gwei` ไม่ถึงเกณฑ์ทิป ส่วน `44/2.2 gwei` ถึงเกณฑ์ทั้งสอง เมื่อค่าธรรมเนียมฐานเป็น `32 gwei` และใช้ gas `21,000` ราคาจริงคือ `34.2 gwei` ค่าธรรมเนียมรวมคือ `718,200 gwei = 0.0007182 ETH` ส่วนที่เผาคือ `0.000672 ETH` และทิปคือ `0.0000462 ETH` การยอมรับจริงขึ้นอยู่กับการติดตั้ง เวอร์ชัน และการปัดเศษจำนวนเต็มหน่วย wei
- **ความไวต่อค่าธรรมเนียมฐาน.** ธุรกรรมแทนที่มีเพดาน `66/4.4 gwei` เมื่อค่าธรรมเนียมฐานเป็น `60 gwei` ราคาจริงคือ `min(66, 60 + 4.4) = 64.4 gwei` เมื่อค่าธรรมเนียมฐานเป็น `65 gwei` ราคาจริงเป็น `66 gwei` และทิปจริงเหลือเพียง `1 gwei` เมื่อค่าธรรมเนียมฐานเป็น `67 gwei` จะได้ `66 < 67` ธุรกรรมจึงไม่มีคุณสมบัติภายใต้เพดานนี้ แม้จะผ่านเกณฑ์เพิ่มค่าธรรมเนียมภายในโหนด
- **การแข่งขันเพื่อยกเลิก.** ธุรกรรมเดิมที่มี nonce `20` ส่ง `5 ETH` ให้ร้านค้า หากธุรกรรมเดิมชนะด้วยค่าธรรมเนียม `21,000 * 42 gwei = 0.000882 ETH` ร้านค้าจะได้รับ `5 ETH` และธุรกรรมยกเลิกจะมี nonce ต่ำเกินไป หากธุรกรรมมูลค่าศูนย์ที่ส่งหาตนเองชนะด้วยค่าธรรมเนียม `21,000 * 45 gwei = 0.000945 ETH` ธุรกรรมนั้นจะใช้ nonce `20` และกันไม่ให้ธุรกรรมเดิมเข้าสู่ประวัติเชนมาตรฐานเดียวกันในภายหลัง การคลิกปุ่มยกเลิกเพียงอย่างเดียวไม่อาจบอกผลลัพธ์ได้
- **ขอบเขตของพูล blob.** ธุรกรรมตัวเลือกเดิมประเภท 3 มีเพดานค่าธรรมเนียมดำเนินการ `100 gwei` เพดานทิป `3 gwei` และเพดานค่าธรรมเนียม blob `20 gwei` ภายใต้การตั้งค่าพูล blob ของ Geth เพื่อการเรียนรู้ที่เพิ่ม `100%` เกณฑ์คำนวณคือ `200/6/40 gwei` ธุรกรรมที่ `200/6/39 gwei` ไม่ถึงเพดาน blob ส่วน `200/6/40 gwei` ถึงเกณฑ์ทั้งสาม แต่ยังต้องมี sidecar, nonce, ยอดคงเหลือ และการยอมรับเข้าพูลที่ถูกต้อง ตัวเลขเหล่านี้ไม่ใช่กฎสำหรับธุรกรรมทั่วไปหรือไคลเอนต์อื่น

<a id="risks"></a>

## ความเสี่ยง

- เลือก chain ID หรือเครือข่ายผิด
- เลือกผู้ส่งหรือ nonce ของบัญชีผิด
- ใช้บล็อกส่วนหัว ค่าธรรมเนียมฐาน หรือ nonce มาตรฐานที่ล้าสมัย
- พยายามแทนที่หลังธุรกรรมเดิมถูกบรรจุหรือเข้าสู่ภาวะสิ้นสุด
- นำกฎ txpool ทั่วไปไปใช้กับ `UserOperation` ของ ERC-4337
- สมมติว่าไคลเอนต์ ผู้ให้บริการ เวอร์ชัน หรือการตั้งค่าอื่นใช้นโยบายเดียวกัน
- เพิ่มไม่ถึงเกณฑ์เพราะการปัดเศษจำนวนเต็มหน่วย wei
- เพิ่มช่องค่าธรรมเนียม EIP-1559 ที่จำเป็นเพียงช่องเดียว
- ตั้ง `maxFeePerGas` ต่ำกว่าค่าธรรมเนียมฐานของบล็อกตัวเลือก
- ละเลยเพดานค่าธรรมเนียม blob, sidecar หรือกฎเฉพาะของพูล blob
- ยอดคงเหลือไม่พอสำหรับมูลค่าและค่าธรรมเนียมสูงสุดที่อนุญาต
- ลายเซ็น ประเภท การเข้ารหัส gas ขั้นต่ำ หรือโดเมนเชนไม่ถูกต้อง
- เปลี่ยนปลายทาง มูลค่า calldata รายการเข้าถึง หรือแฮช blob โดยไม่ตั้งใจ
- ธุรกรรมยกเลิกสาธารณะแพ้การแข่งขันเพื่อบรรจุ
- ธุรกรรมเดิมยังอยู่ในโหนดอื่นหรือข้อมูลขาเข้าของผู้สร้างบล็อก
- รีเลย์ส่วนตัวเปิดเผย ตรวจพิจารณา ทิ้ง หรือยกเลิกการส่งไม่สำเร็จ
- การเผยแพร่ซ้ำต่อสาธารณะเปิดเผยเจตนาแก่การแซงหน้า การโจมตีแบบประกบ หรือ MEV รูปแบบอื่น
- ช่องว่างของ nonce กีดขวางธุรกรรมถัดไปหรือทำให้เกิดการโอนซ้ำ
- ธุรกรรมแทนที่ถูกบรรจุแต่ย้อนกลับหรือ gas หมด พร้อมทั้งใช้ nonce และค่าธรรมเนียม
- ข้อผิดพลาดด้านการจัดระเบียบเชนใหม่ ภาวะสิ้นสุด หรือลำดับใบรับธุรกรรม ทำให้ธุรกรรมตัวเลือกกลับมาหรือถูกจำแนกผิด

<a id="misconceptions"></a>

## ความเข้าใจผิดที่พบบ่อย

- ธุรกรรมตัวเลือกที่มีค่าธรรมเนียมสูงกว่าจะลบธุรกรรมเดิมทั่วทั้งเครือข่าย
- ธุรกรรมใดๆ ที่มีเลข nonce เท่ากันจะแทนที่กัน แม้มาจากคนละผู้ส่ง
- ปุ่มยกเลิกในกระเป๋าสินทรัพย์ดิจิทัลย้อนคืนธุรกรรมที่ถูกบรรจุแล้ว
- โหนดหนึ่งยอมรับธุรกรรมแทนที่หมายความว่าผู้สร้างบล็อกจะบรรจุธุรกรรมนั้น
- กฎเพิ่ม 10% แบบสากลครอบคลุมทุกไคลเอนต์ ธุรกรรม blob รีเลย์ส่วนตัว และ `UserOperation`

<a id="related"></a>

## หัวข้อที่เกี่ยวข้อง

- [Mempool และพูลธุรกรรม](/th/crypto/mempool/)
- [ค่าธรรมเนียม gas](/th/crypto/gas-fee/)
- [Nonce ของบัญชี](/th/crypto/nonce-crypto/)

<a id="sources"></a>

## แหล่งข้อมูล

- [Transactions](https://ethereum.org/developers/docs/transactions/) - Ethereum.org (เข้าถึงเมื่อ: 2026-08-13)
- [EIP-1559: Fee market change for ETH 1.0 chain](https://eips.ethereum.org/EIPS/eip-1559) - Ethereum Improvement Proposals (เข้าถึงเมื่อ: 2026-08-13)
- [txpool Namespace](https://geth.ethereum.org/docs/interacting-with-geth/rpc/ns-txpool) - go-ethereum (เข้าถึงเมื่อ: 2026-08-13)
- [Command-line Options](https://geth.ethereum.org/docs/fundamentals/command-line-options) - go-ethereum (เข้าถึงเมื่อ: 2026-08-13)
- [eth_sendRawTransaction](https://ethereum.github.io/execution-apis/api/methods/eth_sendRawTransaction/) - Ethereum Execution APIs (เข้าถึงเมื่อ: 2026-08-13)
- [EIP-4844: Shard Blob Transactions](https://eips.ethereum.org/EIPS/eip-4844) - Ethereum Improvement Proposals (เข้าถึงเมื่อ: 2026-08-13)
- [ERC-4337: Account Abstraction Using Alt Mempool](https://eips.ethereum.org/EIPS/eip-4337) - Ethereum Improvement Proposals (เข้าถึงเมื่อ: 2026-08-13)
- [Cancellations](https://docs.flashbots.net/flashbots-protect/cancellations) - Flashbots Documentation (เข้าถึงเมื่อ: 2026-08-13)

Source: https://wiki.fcontext.com/th/crypto/mempool-replacement/index.mdx
