จัดทำขึ้นเพื่อการศึกษาเท่านั้น ไม่ใช่คำแนะนำการลงทุน การลงทุนอาจทำให้สูญเสียเงินลงทุนได้
คำตอบโดยตรง
Mempool หรือพูลธุรกรรมคือชุดธุรกรรมที่ลงนามแล้วซึ่งโหนดเก็บไว้ชั่วคราวในหน่วยความจำและบางครั้งบันทึกลงดิสก์ ธุรกรรมเหล่านี้ผ่านกฎตรวจสอบและนโยบายปัจจุบันของโหนด แต่ยังไม่อยู่ใน chain ที่โหนดยอมรับว่าเป็น canonical Mempool ไม่ใช่ออบเจ็กต์ฉันทามติ ไม่ใช่คิวส่วนกลาง และไม่ใช่คำรับประกันว่าจะถูกบรรจุ โหนดสุจริตสองโหนดอาจเก็บธุรกรรมต่างกันเพราะได้รับ gossip ต่างกัน ใช้ไคลเอนต์หรือการตั้งค่าต่างกัน รีสตาร์ต คัดรายการออก หรือใช้เส้นทางส่งแบบสาธารณะและส่วนตัวต่างกัน
ใน execution client ของ Ethereum ธุรกรรมที่ดำเนินการได้และมี nonce ถัดไปของบัญชีมักถูกเรียกว่า pending ส่วน nonce ที่สูงกว่าและติด gap มักถูกเรียกว่า queued ป้ายเหล่านี้เป็นคำของส่วนติดต่อไคลเอนต์ ไม่ใช่สถานะสุดท้ายของโปรโตคอล ธุรกรรมอาจถูกปฏิเสธก่อนรับเข้า เผยแพร่ ถูกแทนที่ด้วยธุรกรรมที่ลงนามโดยผู้ส่งและ nonce เดิม ถูกคัดออก ถูกทิ้ง บรรจุและสำเร็จ บรรจุแต่ execution ย้อนกลับ หรือถูกพิจารณาใหม่หลัง reorganization
กระเป๋าเงินสร้างธุรกรรมด้วยปลายทาง มูลค่า พารามิเตอร์ค่าธรรมเนียม และข้อมูลการป้องกันการเล่นซ้ำ เช่น อินพุตที่ใช้ไปหรือ nonce
วิธีการทำงาน
- กำหนดสภาพแวดล้อมให้แน่นอน ได้แก่ chain ID, execution client และเวอร์ชัน, head และ base fee ปัจจุบัน, ประเภทธุรกรรม, ผู้ส่ง, nonce, value, calldata, gas limit, fee cap และเส้นทางส่ง แยก public gossip, relay หรือ builder ส่วนตัว และเส้นทาง ERC-4337
UserOperationเพราะไม่ได้ใช้พูลส่วนกลางเดียวกัน - ถอดรหัส byte ที่ลงนามและตรวจสอบก่อนรับเข้า ตรวจลายเซ็นและผู้ส่ง, chain ID, ประเภทและ encoding, intrinsic gas, ความสัมพันธ์ของ nonce, ยอดเงินสำหรับ value บวกภาระค่าธรรมเนียมสูงสุด, field ค่าธรรมเนียม และ blob sidecar ที่ต้องมี การปฏิเสธขั้นนี้ไม่ใช่ EVM
REVERTและโดยทั่วไปไม่สร้าง receipt หรือค่าธรรมเนียมบน chain - ระบุนโยบายพูลภายใน บันทึกว่าไคลเอนต์จัดธุรกรรมเป็น pending หรือ queued, ความจุต่อบัญชีและรวม, ตัวกรองค่าธรรมเนียมขั้นต่ำ, อายุรายการ, ข้อยกเว้นบัญชีในเครื่อง, replacement bump และการเก็บข้อมูลถาวร Flag และค่า default ของ Geth อธิบาย Geth ไม่ใช่ฉันทามติ Ethereum หรือผู้ให้บริการทุกราย
- สังเกตการเผยแพร่โดยไม่สมมติว่ามีมุมมองส่วนกลาง เปรียบเทียบ hash ธุรกรรมดิบและ byte ที่ลงนามผ่านโหนดอิสระ แต่การไม่พบยังตีความได้หลายอย่าง: โหนดอาจยังไม่ได้รับ ปฏิเสธตามนโยบาย คัดออก หรือไม่เปิดเผยพูล เส้นทางส่วนตัวอาจข้าม public gossip แต่ยังเปิดเผยธุรกรรมแก่ผู้ดำเนินการและ builder ของเส้นทางนั้น
- จำลองคุณสมบัติและลำดับใน candidate block สำหรับธุรกรรมประเภท 2 ราคา gas ฝั่ง execution คือ
min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas)หาก base fee สูงกว่า maximum fee ธุรกรรมจะไม่มีคุณสมบัติภายใต้ cap นั้น การพึ่งพา nonce, ขีดจำกัด gas และ blob, ความถูกต้องของ state, bundle ของ builder และ MEV อาจสำคัญกว่าเวลาที่พบครั้งแรก - จัดการ lifecycle อย่างตั้งใจ รอ หรือส่ง replacement ที่มี nonce เดิมตามวิธีที่บันทึกไว้หลังตรวจ chain ที่ใช้งาน ผู้ส่ง และนโยบาย replacement แล้วเท่านั้น การโอนให้ตนเองด้วย nonce เดิมเป็นเพียง replacement candidate อีกรายการ ไม่ใช่กลไกยกเลิกของโปรโตคอล ห้ามส่ง value ซ้ำเพียงเพราะ explorer แห่งหนึ่งหยุดแสดงธุรกรรมเดิม
- กระทบยอดกับ state ฉันทามติ เก็บ hash ที่ลงนามและลำดับการแทนที่ทั้งหมด แล้วตรวจ receipt ที่เป็น canonical, block hash, status, gas ที่ใช้, log, nonce ที่ถูกใช้ และ state ของบัญชีหรือสัญญาที่ระดับ confirmation หรือ finality ตามต้องการ หาก reorganization นำบล็อกออก ธุรกรรมที่ยังใช้ได้อาจกลับเข้าสู่พูลบางโหนด แต่พฤติกรรมนี้ขึ้นกับไคลเอนต์และ state
ตัวอย่างคำนวณ
- คุณสมบัติตาม fee cap ธุรกรรมโอนประเภท 2 มี
gasUsed = 21,000,baseFeePerGas = 32 gwei,maxPriorityFeePerGas = 3 gweiและmaxFeePerGas = 34 gweiราคาที่ใช้จริงคือmin(34, 32 + 3) = 34 gweiดังนั้น tip จริงคือ2 gweiค่าธรรมเนียมคือ21,000 * 34 = 714,000 gwei = 0.000714 ETHแบ่งเป็น base fee ที่ถูกเผา0.000672 ETHและ tip0.000042 ETHหาก base fee ของ candidate block เพิ่มเป็น35 gweicap34 gweiจะไม่พอสำหรับบล็อกนั้น - Nonce gap Nonce ของบัญชีตาม canonical state คือ
10พูลหนึ่งได้รับธุรกรรม nonce10และ12แต่ไม่มี11จึงอาจจัด10เป็น pending และ12เป็น queued หลัง nonce10ถูกบรรจุ nonce ตาม canonical state จะเป็น11และ12ยังถูกกั้นจนกว่าธุรกรรม nonce11ที่ถูกต้องจะถูกบรรจุ การเห็น nonce12ในพูลไม่ได้ทำให้ดำเนินการแยกเดี่ยวได้ - Replacement ตามนโยบายเฉพาะ ภายใต้การตั้งค่า Geth เพื่อการสอนที่
txpool.pricebump = 10ธุรกรรมเก่ามีmaxFeePerGas = 40 gweiและmaxPriorityFeePerGas = 2 gweiเกณฑ์ replacement ที่คำนวณจากการเพิ่ม 10% คือ44 gweiและ2.2 gweiข้อเสนอ43 gweiและ3 gweiอาจยังถูกปฏิเสธเพราะ cap หนึ่งไม่ถึงเกณฑ์ ส่วน44 gweiและ2.2 gweiถึงเกณฑ์การสอนทั้งสอง การปัดเศษจำนวนเต็ม ประเภทธุรกรรม และตรรกะรับเข้าจริงขึ้นกับเวอร์ชัน และโหนดอื่นอาจเก็บ candidate ต่างกัน - ไม่มีพูลส่วนกลาง โหนด A รายงาน hash ธุรกรรมต่างกัน
120,000รายการ โหนด B รายงาน100,000รายการ และส่วนร่วมคือ80,000รายการ ส่วนรวมคือ120,000 + 100,000 - 80,000 = 140,000; Jaccard overlap คือ80,000 / 140,000 = 57.1428571429%มี hash40,000รายการที่ A เห็นเพียงรายเดียว และ20,000รายการที่ B เห็นเพียงรายเดียว จำนวนเหล่านี้ไม่พิสูจน์ว่า builder, relay ส่วนตัว หรือเครือข่ายที่เหลือมองเห็นอะไร
ความเสี่ยง
- ลงนามหรือเผยแพร่บน chain ID หรือเครือข่ายผิด
- เชื่อถือ RPC endpoint ที่เป็นอันตราย เก่า หรือกำหนดค่าผิด
- ลายเซ็น ประเภทธุรกรรม encoding หรือ blob sidecar ไม่ถูกต้อง
- ยอดเงินไม่พอสำหรับ value บวกภาระค่าธรรมเนียมสูงสุด
- กฎ intrinsic gas หรือ calldata ทำให้ถูกปฏิเสธก่อนรับเข้า
- Nonce ถูกใช้แล้วหรือต่ำเกินไป
- Nonce gap ทำให้ธุรกรรมที่ตามมาคงสถานะ queued
- Replacement nonce เดิมถูกนโยบายภายในปฏิเสธว่า underpriced
- Maximum fee ต่ำกว่า base fee ของ candidate block
- Priority ที่ใช้จริงต่ำหรือข้อจำกัดทรัพยากรทำให้ inclusion ล่าช้า
- นโยบายของไคลเอนต์ ผู้ให้บริการ เวอร์ชัน หรือการตั้งค่าไม่ตรงกัน
- ความจุ อายุรายการ การรีสตาร์ต หรือ eviction นำธุรกรรมออก
- การเผยแพร่สู่ peer ไม่ดี การถูก eclipse หรือ relay เลือกปฏิบัติ
- Relay ส่วนตัวรั่วไหล ปิดกั้น หยุดให้บริการ หรือ builder ไม่เข้าร่วม
- Frontrunning, sandwiching หรือ MEV อื่นจาก public order flow
- การเรียงของ builder, bundle หรือธุรกรรมส่วนตัวเปลี่ยน execution state
- ผล simulation เก่าก่อน inclusion
- ส่งซ้ำโดยไม่ตรวจสอบหรือสูญเสียลำดับ replacement
REVERTที่ถูกบรรจุ out-of-gas หรือ subcall ล้มเหลวแต่ถูกจับไว้ แม้พูลเคยรับธุรกรรม- Reorganization, ความสับสนเรื่อง finality หรือถือ alternate mempool ของ ERC-4337 เป็น txpool ปกติ
ความเข้าใจผิดที่พบบ่อย
- Mempool เป็นคิว FIFO ส่วนกลางหนึ่งเดียวที่ทั้งเครือข่ายซิงค์ตรงกัน
- Hash ธุรกรรมพิสูจน์ว่าเครือข่ายรับหรือเผยแพร่ธุรกรรมแล้ว
- Pending หมายถึงถูกบรรจุ สำเร็จ ย้อนกลับไม่ได้ หรือผู้รับได้เงินแล้ว
- ค่าธรรมเนียมที่สูงพอรับประกัน inclusion และ execution สำเร็จ
- เส้นทางส่วนตัวเป็นความลับ ต้าน censorship และรับประกันว่าจะถูกบรรจุโดยอัตโนมัติ
หัวข้อที่เกี่ยวข้อง
แหล่งที่มา
- Transactions - Ethereum.org (เข้าถึงเมื่อ: 2026-08-13)
- EIP-1559: Fee market change for ETH 1.0 chain - Ethereum Improvement Proposals (เข้าถึงเมื่อ: 2026-08-13)
- txpool Namespace - go-ethereum (เข้าถึงเมื่อ: 2026-08-13)
- Command-line Options - go-ethereum (เข้าถึงเมื่อ: 2026-08-13)
- JSON-RPC API - Ethereum.org (เข้าถึงเมื่อ: 2026-08-13)
- EIP-4844: Shard Blob Transactions - Ethereum Improvement Proposals (เข้าถึงเมื่อ: 2026-08-13)
- ERC-4337: Account Abstraction Using Alt Mempool - Ethereum Improvement Proposals (เข้าถึงเมื่อ: 2026-08-13)
- MEV Protection Overview - Flashbots Documentation (เข้าถึงเมื่อ: 2026-08-13)