← กลับไปยังบทความ
July 17, 2026
อ่าน 5 นาที

กายวิภาคของ MEV: sandwich, frontrunning และป่ามืดแห่ง mempool

กายวิภาคของ MEV: sandwich, frontrunning และป่ามืดแห่ง mempool
#mev
#การโจมตีแบบ sandwich
#frontrunning
#mempool
#flashbots
#defi
#ethereum

เมื่อคุณเซ็น swap บน decentralized exchange แล้ว broadcast มันไปยัง public RPC endpoint คุณไม่ได้ส่งคำสั่งส่วนตัวไปยัง matching engine คุณได้เผยแพร่ statement of intent ที่เซ็นชื่อแล้วและสามารถ execute ได้ ไปยังกระดานประกาศสาธารณะระดับโลก และคุณได้แนบค่าตอบแทน — gas price — ให้กับใครก็ตามที่ยอมรับจะ execute มัน ทุกคนสามารถอ่าน statement นั้นได้ ไม่มีใครมีหน้าที่ต้อง execute มันอย่างยุติธรรม ตามลำดับ หรือแม้แต่ execute เลยด้วยซ้ำ ลำดับที่มันจะถูกบรรจุเทียบกับ transaction อื่นไม่ใช่คุณสมบัติของสิ่งที่คุณส่งไป แต่เป็นการตัดสินใจของบุคคลที่สามที่ทำกำไรจากการตัดสินใจนั้นโดยเสียประโยชน์ของคุณ

นี่คือแก่นแท้ที่ไม่สบายใจของการเทรดบนเชน ใน Statistical Arbitrage and Pairs Trading in Crypto Markets เราเคยกล่าวถึงผ่านๆ ว่าการย้ายโพซิชันระหว่าง CEX กับ DEX มี "ความเสี่ยง MEV" และปล่อยคำนั้นค้างไว้โดยไม่อธิบาย บทความนี้จะชำระหนี้นั้น มันเป็นประตูหน้าของซีรีส์ว่าด้วยเศรษฐศาสตร์ของการ execution บนเชน และหน้าที่ของมันคือนิยามคำศัพท์ — mempool, bundle, backrun, sandwich, PBS — ให้แม่นยำพอที่บทความถัดไปเรื่อง atomic arbitrage with flash loans และ Uniswap v3 concentrated liquidity for quants จะสามารถสมมติได้ว่าคุณเข้าใจกลไกนี้อยู่แล้ว

MEV — Maximal (หรือ Maximum) Extractable Value — คือกำไรที่ฝ่ายหนึ่งสามารถสกัดได้จากการเลือกว่าจะรวม ตัดออก และจัดลำดับ transaction ภายในบล็อกอย่างไร นอกเหนือจาก block reward และ priority fee มาตรฐาน มันไม่ใช่บั๊ก แต่เป็นผลลัพธ์เชิงโครงสร้างของวิธีที่ permissionless blockchain จัดลำดับ transaction นับตั้งแต่กลไกนี้ถูกอธิบายอย่างเป็นทางการในปี 2019 มูลค่าสะสมที่ถูกสกัดออกไปมีมูลค่าหลายพันล้านดอลลาร์ และทั้งอุตสาหกรรม — searcher, builder, relay, block proposer — ได้เติบโตขึ้นมาเพื่อดักจับและกระจายมันใหม่ หากคุณเทรดบนเชน คุณกำลังจ่ายภาษีนี้อยู่ หรือไม่ก็คุณได้ดำเนินมาตรการอย่างจงใจเพื่อหลีกเลี่ยงมัน

1. วงจรชีวิตของ transaction: ทำไม intent ของคุณถึงเป็นสาธารณะ

เพื่อดูว่ามูลค่ารั่วไหลออกไปที่ไหน ลองตาม transaction จาก wallet ของคุณไปจนถึงบล็อกที่ finalize แล้ว

Public mempool

เมื่อ wallet ของคุณเซ็น transaction และส่งไปยัง RPC endpoint ของ node มาตรฐาน node จะตรวจสอบมัน (signature, nonce, ยอดคงเหลือเพียงพอ) และหากผ่าน ก็จะ gossip มันข้ามเครือข่าย peer-to-peer ไปยัง node อื่นๆ แต่ละ node จะเก็บ transaction ที่ยังไม่ถูกรวมเหล่านี้ไว้ใน buffer ท้องถิ่นที่เรียกว่า mempool (memory pool) ภายในหนึ่งหรือสองวินาที แทบทุก node บนเครือข่าย — รวมถึง node ที่ดำเนินการโดยฝ่ายที่ธุรกิจทั้งหมดคือการสกัดมูลค่าจาก transaction ที่รอดำเนินการ — จะมีสำเนา transaction ที่เซ็นแล้วและถอดรหัสครบถ้วนของคุณ

"ถอดรหัสครบถ้วน" คือวลีที่สำคัญที่สุด transaction ของคุณไม่ใช่ blob ที่ทึบแสง มันคือการเรียก contract ที่รู้จักผ่าน ABI-encoded call ใครก็ตามที่เฝ้าดู mempool สามารถถอดรหัสมันและอ่านได้อย่างชัดเจนว่า address นี้กำลังจะ swap 40 ETH เป็น USDC บน Uniswap v2 WETH/USDC pool และมันจะยอมรับ output ต่ำสุดเพียง 96,000 USDC ประโยคสุดท้ายนั้น — output ขั้นต่ำที่ยอมรับได้ — คือค่า slippage tolerance ของคุณ และมันไม่ใช่แค่คำใบ้ มันคือ parameter ที่ตายตัวซึ่งถูก compile ลงใน calldata เราจะเห็นในไม่ช้าว่ามันคืองบประมาณของผู้โจมตีด้วยเช่นกัน

mempool บางครั้งถูกเรียกว่า ป่ามืด (dark forest) ตามชื่อบทความปี 2020 ของ Dan Robinson และ Georgios Konstantopoulos ที่ยืมคำอุปมาของ Liu Cixin มาใช้: พื้นที่ที่ทุกสิ่งที่มองเห็นได้จะถูกล่าทันทีโดยนักล่าที่คุณมองไม่เห็น หาก broadcast transaction ที่ทำกำไรได้แบบไร้เดียงสาลงใน public mempool มันอาจไม่มีวันไปถึงบล็อกในรูปแบบที่คุณเซ็นไว้เลย — bot จะกินโอกาสนั้นไปและปรับรูปบล็อกโดยรอบให้เสียเปรียบคุณ

Gas price ในฐานะ priority queue

fee market ของ Ethereum (หลัง EIP-1559) แบ่ง gas price ออกเป็น base fee ของ protocol ซึ่งถูกเผาทิ้ง และ priority fee ("ทิป") ซึ่งไปยัง block proposer เมื่อสร้างบล็อก builder มีแรงจูงใจทางเศรษฐกิจที่จะรวม transaction ที่จ่ายให้มันมากที่สุด ในการประมาณขั้นแรก mempool คือ priority queue ที่เรียงตามทิป: ทิปสูงกว่า ได้รวมก่อน

นี่คือกลไกที่ทำให้ลำดับสามารถซื้อได้ หากผมเห็น swap ที่รอดำเนินการของคุณและผมต้องการให้ transaction ของผม execute ก่อนหน้า ของคุณทันที ผมไม่จำเป็นต้อง hack อะไรเลย ผมเพียงแค่ส่ง transaction ที่จ่ายทิปสูงกว่า builder ซึ่งทำตามแรงจูงใจของตน จะวาง transaction ของผมไว้ก่อน ลำดับไม่ใช่การรับประกันความยุติธรรมที่ protocol มอบให้ แต่มันคือการประมูลที่ protocol ดำเนินการ และของที่ถูกประมูลคือ สิทธิ์ในการกระทำโดยอาศัยข้อมูลจาก transaction ที่รอดำเนินการของคุณ

ข้อเท็จจริงสองอย่างรวมกันกลายเป็นปัญหา MEV ทั้งหมด:

  1. Transaction ที่รอดำเนินการนั้น มองเห็นได้ (public mempool)
  2. ลำดับของมันมีขายได้ (การประมูลด้วยทิปตามลำดับความสำคัญ)

ทุกอย่างด้านล่างนี้คือผลพวงของสองข้อนี้

วงจรชีวิตของ transaction จาก wallet สู่บล็อก: signed tx broadcast ไปยัง public mempool มองเห็นได้โดย searcher ถูกจัดลำดับตาม priority fee เข้าสู่บล็อกโดย builder

2. กลไกของ sandwich พร้อมคณิตศาสตร์จริง

Sandwich คือกลยุทธ์ MEV ที่เป็นพิษแบบดั้งเดิมต่อผู้ swap และคุ้มค่าที่จะไล่ตามเลขคณิตให้ครบถ้วน เพราะตัวเลขจะอธิบายว่า ทำไม การตั้งค่า slippage ของคุณถึงเป็น parameter ป้องกันตัวเดียวที่สำคัญที่สุดที่คุณควบคุมได้

Invariant ของ constant-product

Uniswap v2 pool ถือ reserve xx ของ token X และ yy ของ token Y และบังคับใช้ invariant

xy=kx \cdot y = k

หลังจากทุกการเทรด (ไม่นับ fee ไปก่อน) หากเทรดเดอร์ขาย Δx\Delta x ของ token X เข้าไปใน pool reserve X ใหม่จะเป็น x+Δxx + \Delta x และเพื่อรักษา kk pool ต้องจ่ายออกมา

Δy=ykx+Δx=yΔxx+Δx.\Delta y = y - \frac{k}{x + \Delta x} = \frac{y \, \Delta x}{x + \Delta x}.

ด้วย fee 0.3% ของ Uniswap v2 input จะถูกปรับด้วย γ=0.997\gamma = 0.997:

Δy=yγΔxx+γΔx.\Delta y = \frac{y \, \gamma \, \Delta x}{x + \gamma \, \Delta x}.

คุณสมบัติสำคัญ: ยิ่งคุณซื้อในทิศทางเดียวมากเท่าไหร่ ราคา marginal ของคุณก็ยิ่งแย่ลงเท่านั้น price impact เป็น convex ความ convex นี้เองคือสิ่งที่ผู้โจมตีนำไปทำเงิน

การตั้งฉาก

ลองพิจารณา WETH/USDC pool เพื่อให้ตัวเลขเรียบง่าย สมมติ reserve ที่ทำให้ ETH อยู่ที่ประมาณ 2,500 USDC:

  • x=10,000x = 10{,}000 WETH
  • y=25,000,000y = 25{,}000{,}000 USDC
  • k=2.5×1011k = 2.5 \times 10^{11}

คุณต้องการซื้อ USDC ด้วย 40 WETH (ขาย WETH เข้า pool) ไม่นับ fee เพื่อความง่าย การ fill อย่างซื่อสัตย์ในบล็อกที่ว่างเปล่าจะให้คุณ

Δy=25,000,0004010,000+40=1,000,000,00010,04099,601 USDC.\Delta y = \frac{25{,}000{,}000 \cdot 40}{10{,}000 + 40} = \frac{1{,}000{,}000{,}000}{10{,}040} \approx 99{,}601 \text{ USDC}.

ราคา spot ก่อนการเทรดของคุณคือ 25,000,000/10,000=2,50025{,}000{,}000 / 10{,}000 = 2{,}500 USDC/WETH ดังนั้น 40 WETH จึง "มีค่า" 100,000 USDC ที่ mid ก่อนเทรด คุณได้รับ 99,601 — ส่วนต่างประมาณ 399 USDC คือ price impact ของคุณเองบวก fee ทีนี้สมมติว่าคุณตั้ง slippage tolerance 1% amountOutMin ใน transaction ของคุณคือ

99,601×0.9998,605 USDC.99{,}601 \times 0.99 \approx 98{,}605 \text{ USDC}.

ตัวเลขนั้นตอนนี้เป็นสาธารณะใน mempool มันบอกผู้สังเกตการณ์ทุกคนว่า คนนี้จะยอมรับ USDC ต่ำสุดเพียง 98,605 สำหรับ 40 WETH ของพวกเขา ส่วนต่างระหว่างสิ่งที่คุณจะได้ในบล็อกที่สะอาด (99,601) กับพื้นของคุณ (98,605) — ประมาณ 996 USDC — คือพื้นที่ที่คุณได้มอบให้กับใครก็ตามที่ frontrun คุณโดยสมัครใจ นี่คืองบประมาณของผู้โจมตี

การโจมตี ทีละขั้นตอน

Searcher สร้าง transaction สามรายการและบังคับให้เข้าลำดับนี้ภายในบล็อกเดียว:

1. Front-run (ผู้โจมตีซื้อก่อน) ผู้โจมตีขาย WETH ของตัวเองเข้า pool ก่อนหน้าคุณ ดันราคา USDC ให้สูงขึ้น (WETH ลดลง) เพื่อให้เมื่อ transaction ของคุณเข้ามา คุณจะได้ USDC น้อยลงต่อ WETH ผู้โจมตีจะกำหนดขนาดของมันเพื่อให้ transaction ของคุณยังคงผ่าน amountOutMin ของคุณ — หากไม่ผ่าน swap ของคุณจะ revert และไม่มีเหยื่อให้ sandwich ขนาด front-run ที่เหมาะสมที่สุดคือขนาดที่ใหญ่ที่สุดที่ยังทำให้คุณอยู่ที่พื้นพอดี

สมมติผู้โจมตี front-run ด้วย 40 WETH ของตัวเอง pool เปลี่ยนเป็น x=10,040x = 10{,}040 และตาม invariant ผู้โจมตีได้รับ

25,000,0004010,04099,601 USDC out,\frac{25{,}000{,}000 \cdot 40}{10{,}040} \approx 99{,}601 \text{ USDC out},

ทำให้ reserve เหลือ x=10,040x = 10{,}040 WETH, y24,900,399y \approx 24{,}900{,}399 USDC

2. เหยื่อ (swap ของคุณ execute เข้าสู่ pool ที่แย่ลง) 40 WETH ของคุณตอนนี้เข้ามาปะทะกับ reserve เหล่านี้:

Δy=24,900,3994010,040+40=996,015,96010,08098,811 USDC.\Delta y = \frac{24{,}900{,}399 \cdot 40}{10{,}040 + 40} = \frac{996{,}015{,}960}{10{,}080} \approx 98{,}811 \text{ USDC}.

ตรวจสอบเงื่อนไข: 98,811 > 98,605 ดังนั้น transaction ของคุณ ไม่ revert — คุณได้รับการ fill แค่แย่กว่าเดิม คุณได้รับ 98,811 แทนที่จะเป็น 99,601 ที่คุณควรจะได้ในบล็อกที่สะอาด คุณเสียไปประมาณ 790 USDC และคุณไม่รู้เลยว่ามันเกิดขึ้น swap ของคุณ "สำเร็จ" pool ตอนนี้คือ x=10,080x = 10{,}080 WETH, y24,801,588y \approx 24{,}801{,}588 USDC

3. Back-run (ผู้โจมตีขายกลับ) ผู้โจมตีตอนนี้ขาย USDC ที่ซื้อไว้ในขั้นตอนที่ 1 กลับเข้า pool — หรือเทียบเท่าคือซื้อ WETH ของตัวเองกลับคืน — เพื่อยึดราคาที่สูงขึ้นซึ่ง trade ของคุณสร้างขึ้น การซื้อ WETH กลับด้วย USDC ประมาณ 99,601 ที่ตนถืออยู่:

Δx=10,08099,60124,801,588+99,6011,004,010,08024,901,18940.32 WETH.\Delta x = \frac{10{,}080 \cdot 99{,}601}{24{,}801{,}588 + 99{,}601} \approx \frac{1{,}004{,}010{,}080}{24{,}901{,}189} \approx 40.32 \text{ WETH}.

ผู้โจมตีใช้ 40 WETH ในขั้นตอนที่ 1 และได้ 40.32 WETH กลับมาในขั้นตอนที่ 3 — กำไรประมาณ 0.32 WETH (~800 USDC) ก่อนหัก gas ซึ่งสกัดมาเกือบทั้งหมดจากงบประมาณ slippage ของคุณ หากคุณ tighten slippage งบประมาณนั้นก็จะเล็กลง ขนาด front-run ที่เหมาะสมที่สุดของผู้โจมตีจะลดลง และต่ำกว่าเกณฑ์บางระดับ sandwich จะเลิกทำกำไรหลังหัก gas และ searcher จะข้ามคุณไป

บทเรียนไม่ใช่ "slippage tolerance เป็นสิ่งไม่ดี" คุณต้องมี tolerance บางระดับ ไม่เช่นนั้น transaction ของคุณจะ revert จากการเคลื่อนไหวของราคาปกติ บทเรียนคือ slippage tolerance เป็นปริมาณที่สามารถสกัดได้โดยตรง และการตั้งมันไว้ที่ค่า default แบบขี้เกียจอย่าง 1% หรือแย่กว่านั้นคือ "auto" บน pool ที่บาง เท่ากับปล่อยเงินจำนวนนั้นทิ้งไว้บนโต๊ะให้ใครก็ตามที่เฝ้าดูอยู่ บน pool ที่มี liquidity ต่ำซึ่ง trade ของคุณเองขยับราคาไปหลายเปอร์เซ็นต์ ค่า default slippage อาจมอบสัดส่วนที่น่าตกใจของ notional ของคุณให้คนอื่นไป

โครงร่างขั้นต่ำของเงื่อนไขกำไรของ searcher:

def sandwich_profit(x, y, gamma, victim_dx, victim_min_out, attack_dx, gas_cost):
    out1 = (y * gamma * attack_dx) / (x + gamma * attack_dx)
    x1, y1 = x + attack_dx, y - out1
    vout = (y1 * gamma * victim_dx) / (x1 + gamma * victim_dx)
    if vout < victim_min_out:
        return None  # victim would revert; no sandwich
    x2, y2 = x1 + victim_dx, y1 - vout
    got_back = (x2 * gamma * out1) / (y2 + gamma * out1)
    return got_back - attack_dx - gas_cost  # profit in WETH

Searcher รันการหาค่าเหมาะสมเล็กๆ บน attack_dx เพื่อหา front-run ที่ใหญ่ที่สุดที่ยังรักษา vout >= victim_min_out ค่าที่เหมาะสมที่สุดนั้นคือจุดที่พื้น slippage ของคุณ bind ไว้ — ซึ่งเป็นอีกวิธีหนึ่งในการบอกว่าส่วนแบ่งของผู้โจมตีถูกจำกัดอย่างแม่นยำด้วยพื้นที่ที่คุณเหลือไว้

3. อนุกรมวิธานของ MEV: เป็นพิษเทียบกับไม่เป็นพิษ

"MEV" มักถูกใช้เป็นคำด่า แต่ไม่ใช่ทั้งหมดที่เป็นการสกัดจากเหยื่อ มันช่วยได้หากเราจัดหมวดหมู่กลยุทธ์ตาม ว่ามีใครเสียเปรียบจากการจัดลำดับหรือไม่

Frontrunning สังเกต transaction ที่รอดำเนินการและทำกำไรได้ คัดลอกหรือแซงหน้ามัน และจ่ายทิปสูงกว่าเพื่อ execute ก่อน ต้นแบบคือการเห็น buy ขนาดใหญ่ที่จะขยับราคาแล้วซื้อล่วงหน้ามัน เป็นพิษล้วนๆ: เหยื่อได้ราคาแย่กว่า หรือโอกาสของพวกเขาถูกขโมยไปตรงๆ

Backrunning วาง transaction ของคุณ ทันทีหลังจาก transaction เป้าหมาย เพื่อกระทำการบน state ที่มันสร้างขึ้น สิ่งสำคัญคือ backrun แท้ ไม่ทำให้การ execution ของเป้าหมายแย่ลง — มันรันหลังจากนั้น ดังนั้นราคาของเหยื่อจึงถูก lock ไว้แล้ว หาก swap ขนาดใหญ่ของคุณทำให้ WETH/USDC pool หลุดจาก alignment กับ Binance นักเก็งกำไรจะ backrun คุณเพื่อปรับให้ตรงกันอีกครั้งและเก็บส่วนต่างเข้ากระเป๋า คุณไม่ได้รับความเสียหาย ในความเป็นจริง arbitrage นี้เองที่ทำให้ราคาบนเชนติดตามตลาดวงกว้างได้ Backrunning คือปลายด้านไม่เป็นพิษของสเปกตรัม และ — ดังที่เราจะเห็น — ระบบป้องกัน MEV สมัยใหม่ถูกสร้างขึ้นมาโดยเฉพาะเพื่อ คืน กำไรจาก backrun ให้กับผู้ใช้ที่สร้างมันขึ้นมา

Sandwiching frontrun และ backrun ที่ห่อหุ้มรอบเหยื่อเดียวกัน ตามที่ได้ผ่าให้ดูข้างต้น เป็นพิษโดยโครงสร้าง: frontrun มีอยู่เพียงเพื่อทำให้การ fill ของเหยื่อแย่ลง เพื่อให้ backrun สามารถเก็บเกี่ยวมันได้

Atomic arbitrage transaction เดียวที่ซื้อสินทรัพย์ในราคาถูกที่ venue หนึ่งและขายในราคาแพงที่อีก venue หนึ่ง — เช่น WETH ถูกกว่าบน Uniswap เมื่อเทียบกับ Sushiswap — ทำกำไรแบบไร้ความเสี่ยง แบบ all-or-nothing ภายใน transaction เดียว (มัน revert หากไม่ทำกำไร) ไม่มีเหยื่อเฉพาะเจาะจง มันเป็นการปิดช่องว่างราคาที่ตลาดปล่อยทิ้งไว้ โดยทั่วไปถือว่าไม่เป็นพิษ — มันช่วยเพิ่มความสอดคล้องของราคาข้าม venue — และมันคือหัวข้อของบทความ atomic arbitrage and flash loans ในซีรีส์นี้ ที่ซึ่งคุณสมบัติ "ไม่ต้องใช้ทุน" ของ flash loan ทำให้มันคมชัดเป็นพิเศษ

Liquidations เมื่อโพซิชันการกู้ยืม (Aave, Compound, Maker) ตกต่ำกว่า collateral threshold protocol จะเสนอโบนัสให้กับใครก็ตามที่ชำระหนี้เสียและยึด collateral Searcher แข่งขันกันเพื่อเป็น liquidator นั้น มี "เหยื่อ" อยู่ — ผู้กู้ที่ถูก liquidate — แต่พวกเขาจะถูก liquidate ตามกฎของ protocol อยู่ดีไม่ว่าจะอย่างไร การแข่งขัน MEV ส่วนใหญ่เป็นตัวกำหนดว่า ใคร จะได้โบนัส และผ่านการแข่งขันนั้นสามารถทำให้มันเล็กลงได้ เรียกได้ว่าเป็นกลางถึงไม่เป็นพิษต่อสุขภาพของตลาด แต่ไม่น่าพอใจสำหรับผู้กู้

แผนที่คร่าวๆ:

กลยุทธ์ เหยื่อเสียหายหรือไม่? คำตัดสิน
Frontrun ใช่ เป็นพิษ
Sandwich ใช่ เป็นพิษ
Backrun (แท้) ไม่ ไม่เป็นพิษ
Atomic arbitrage ไม่ ไม่เป็นพิษ (ช่วยเพิ่มความสอดคล้องของราคา)
Liquidation ผู้กู้ (ตามกฎ protocol) เป็นกลาง

เส้นแบ่งเป็นพิษ/ไม่เป็นพิษนี้สำคัญ เพราะ stack การบรรเทา MEV สมัยใหม่ทั้งหมดคือความพยายามที่จะ ระงับกลยุทธ์ที่เป็นพิษ ในขณะที่รักษา — และกระจาย — กลยุทธ์ที่ไม่เป็นพิษ คุณไม่สามารถแบนเกมการจัดลำดับได้โดยไม่ทำลาย arbitrage ที่ทำให้ราคา DEX ซื่อสัตย์ไปด้วย เคล็ดลับคือการส่งมูลค่าที่เป็นพิษกลับไปยังคนที่มันถูกเอาไปจาก

4. ประวัติศาสตร์โดยย่อ: จาก gas auction สู่ Flashbots

Flash Boys 2.0 และ priority gas auction

ปรากฏการณ์นี้ถูกตั้งชื่อและวัดผลในบทความปี 2019 เรื่อง "Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges" โดย Philip Daian, Steven Goldfeder, Tyler Kell, Yunqi Li, Xueyuan Zhao, Iddo Bentov, Lorenz Breidenbach และ Ari Juels บทความนี้แนะนำคำว่า "miner extractable value" (ภายหลังถูกขยายความเป็น maximal extractable value เมื่ออุตสาหกรรมย้ายจาก proof-of-work miner ไปสู่ proof-of-stake proposer) และบันทึก priority gas auction (PGA): bot ที่ประมูล gas price แข่งกันแบบ real-time เพื่อชนะการจัดลำดับของโอกาสที่ทำกำไรได้

PGA เป็นพิษเห็นได้ชัด เพราะ lever เดียวที่ bot มีคือ gas price สาธารณะ พวกมันจึงต่อสู้สงครามประมูลแบบเปิด — ส่งซ้ำด้วยทิปที่สูงขึ้นเรื่อยๆ ภายในไม่กี่วินาทีเดียวกัน — เพื่อแย่งชิง arbitrage หรือ liquidation เดียว ผลที่ตามมาสองอย่างที่น่าเกลียด ประการแรก มันทำให้เครือข่ายแออัดและดัน gas price ให้สูงขึ้นสำหรับทุกคน ไม่ว่าจะเกี่ยวข้องกับ MEV หรือไม่ ประการที่สอง และน่าตกใจกว่านั้น บทความนี้ให้เหตุผลว่าหาก MEV ที่มีอยู่ในบล็อกเกินกว่า block reward miner ที่มีเหตุผลจะมีแรงจูงใจที่จะ จัดระเบียบเชนใหม่ เพื่อขโมยมัน คุกคามความมั่นคงของ consensus เอง MEV ไม่ใช่แค่ปัญหาความยุติธรรมสำหรับผู้ใช้ มันคือภัยคุกคามต่อเชนเอง

Flashbots ในฐานะการตอบสนอง

Flashbots เปิดตัวในปี 2020 เพื่อคลี่คลาย PGA ข้อคิดของมันคือ: ย้ายการประมูลจัดลำดับ ออกจาก public mempool ไปยัง ช่องทาง off-chain แบบ sealed-bid แทนที่จะ broadcast transaction และต่อสู้ในสงคราม gas สาธารณะ searcher จะประกอบ bundle — รายการ transaction ที่เรียงลำดับไว้เพื่อรวมแบบ atomic แบบ all-or-nothing ในลำดับสัมพัทธ์ที่กำหนด — และส่งมันแบบส่วนตัวไปยัง block builder พร้อมกับการเสนอราคา (มักจ่ายเป็นการโอนตรงไปยัง proposer แทนที่จะผ่าน gas price) Builder ประกอบบล็อกที่มีมูลค่ามากที่สุดเท่าที่จะทำได้จาก bundle และ transaction ทั้งหมดที่ได้รับ และเสนอมันให้กับ proposer

สองสิ่งดีขึ้นพร้อมกัน Searcher หยุด spam public mempool ด้วยการเสนอราคาที่ล้มเหลว ดังนั้น externality ของ gas price ต่อผู้ใช้ทั่วไปจึงลดลง และ bundle ที่ชนะจะเข้าไปทั้งหมดหรือไม่เข้าเลย กำจัด transaction "frontrun ที่ล้มเหลว" ซึ่งเคยอุดตันบล็อกไป สงครามการเสนอราคายังคงเกิดขึ้น — เพียงแต่มันเกิดขึ้นในรูปแบบการประมูลส่วนตัวภายใน builder แทนที่จะเป็นการตะโกนแข่งกันสาธารณะบนเชน

PBS: proposer-builder separation

สถาปัตยกรรมของ Flashbots ถูกขยายกลายเป็น proposer-builder separation (PBS) ซึ่งเป็นโมเดลหลักบน Ethereum ในปัจจุบัน บทบาทถูกแบ่งออกเป็น:

  • Searcher ค้นหาโอกาส MEV และบรรจุมันลงใน bundle
  • Builder แข่งขันกันประกอบบล็อกเต็มที่มีมูลค่ามากที่สุดจาก bundle และ transaction สาธารณะ
  • Relay อยู่ระหว่าง builder กับ proposer รับบล็อกเต็มจาก builder และส่งต่อเฉพาะ header ของบล็อกพร้อมการเสนอมูลค่าไปยัง proposer เพื่อให้ proposer ผูกมัดตัวเองกับบล็อกก่อนเห็นเนื้อหาของมัน (ป้องกันไม่ให้ proposer ขโมย MEV ไปเฉยๆ)
  • Proposer (validator) เลือก header ที่มีการเสนอราคาสูงที่สุด เซ็นมัน และรับการจ่ายเงิน

สิ่งนี้ถูก implement นอก protocol ผ่าน MEV-Boost ซึ่งเป็น middleware ที่ validator ส่วนใหญ่ของ Ethereum รันอยู่ — ประมาณ 80–90% ของบล็อกถูกสร้างผ่าน builder ภายนอกผ่าน MEV-Boost มันได้ผล แต่มันพึ่งพา relay ที่เชื่อถือได้ ขั้นตอนถัดไป enshrined PBS (ePBS, EIP-7732) มีเป้าหมายที่จะฝัง proposer-builder separation เข้าไปใน Ethereum protocol โดยตรงและกำจัดการพึ่งพา trusted relay ณ กลางปี 2026 มันถูกกำหนดไว้สำหรับการอัปเกรด Glamsterdam โดยเล็งเป้าไปที่การเปิดใช้งานบน mainnet ในช่วงหลังของปี 2026 โดยผู้สนับสนุนอ้างว่ามันสามารถลดความสูญเสีย MEV ต่อผู้ใช้ได้อย่างมีนัยสำคัญ โดยการปรับปรุงวิธีที่บล็อกถูกผูกมัดและการลดช่องว่างสำหรับการจัดลำดับใหม่ที่เป็นพิษ ควรมองตัวเลขที่แน่นอนเป็นเพียงความหวังจนกว่ามันจะถูกส่งมอบจริง แต่ทิศทางนั้นชัดเจน: protocol กำลังดูดซับ MEV supply chain ที่มันใช้เวลาหลายปีในการแสร้งทำเป็นว่าไม่มีอยู่จริง

MEV-Share: คืนมูลค่ากลับ

พัฒนาการที่สำคัญที่สุดสำหรับเทรดเดอร์ทั่วไปคือ MEV-Share ซึ่งเป็น order-flow auction ของ Flashbots แนวคิดนี้พลิกกลับป่ามืด แทนที่จะให้ transaction ของคุณมองเห็นได้โดยนักล่าทุกตัว คุณส่งมันเป็นการส่วนตัวไปยัง MEV-Share node ซึ่งเปิดเผยเพียง คำใบ้บางส่วน เกี่ยวกับมัน (คุณเลือกได้ว่ามากแค่ไหน) ให้กับ searcher Searcher เสนอราคาเพื่อ backrun transaction ของคุณ — จำไว้ว่า backrun ไม่ทำร้ายคุณ — และส่วนแบ่งขนาดใหญ่ของกำไรที่ได้จะถูก คืนให้คุณ โดยส่วนที่เหลือแบ่งกันระหว่าง searcher กับ proposer เพื่อให้ bundle ถูกรวมเข้าไป

การปรับกรอบทางเศรษฐกิจนี้สง่างาม swap ขนาดใหญ่ สร้าง โอกาส backrun คำถามคือใครจะดักจับมัน ในโลกป่ามืด searcher และ builder เอาไปทั้งหมด ภายใต้ MEV-Share มูลค่าที่ transaction ของคุณเองสร้างขึ้นจะถูกคืนให้คุณเป็นส่วนใหญ่ RPC ที่เป็นหน้าตาสำหรับผู้บริโภคของ Flashbots คือ Flashbots Protect จะส่ง transaction ของลูกค้ารายย่อยผ่านระบบนี้ และในปี 2025 มันได้เพิ่มการคืน gas fee เข้าไปด้วย เพิ่มสิ่งที่ผู้ใช้ได้รับกลับคืนอย่างมีนัยสำคัญ นี่คือหลักการ "กระจายสิ่งที่ไม่เป็นพิษ ระงับสิ่งที่เป็นพิษ" ที่เป็นรูปธรรม

5. แนวทางป้องกันในทางปฏิบัติสำหรับเทรดเดอร์

คุณไม่จำเป็นต้องรัน searcher เพื่อหยุดเป็นเหยื่อ เรียงตามลำดับผลกระทบคร่าวๆ:

ตั้งค่า slippage อย่างจงใจ ต่อ pool

ส่วนที่ 2 ได้พิสูจน์แล้วว่า slippage tolerance ของคุณ คือ งบประมาณของผู้โจมตี มีกฎสองข้อตามมา ข้อแรก ปรับขนาด slippage ให้เข้ากับ liquidity จริงของ pool และ price impact ของ trade ของคุณ ไม่ใช่ค่านิยม 1% ที่เคยชิน บน pool ลึก tolerance 0.1–0.3% อาจเพียงพอ บน pool บาง คุณต้องยอมรับว่าไม่สามารถเทรดขนาดใหญ่ได้อย่างปลอดภัย หรือแบ่งเป็นชิ้นเล็กลง ข้อสอง อย่าใช้ slippage "auto"/"unlimited" บนคู่เทรดที่มี liquidity ต่ำ — มันคือเช็คเปล่าที่เซ็นชื่อไว้แล้ว หาก swap revert ซ้ำๆ ที่ tolerance แคบ นั่นคือตลาดกำลังบอกคุณว่า trade ของคุณใหญ่เกินไปสำหรับ pool นั้น ไม่ใช่สัญญาณให้คลายพื้นลง

เดินทางผ่าน private RPC

การแก้ไขเชิงโครงสร้างที่สะอาดที่สุดคือการเก็บ transaction ของคุณให้พ้นจาก public mempool โดยสิ้นเชิง ชี้ wallet ของคุณไปที่ private RPC ที่ส่งต่อ transaction โดยตรงไปยัง builder แทนที่จะ gossip มัน:

  • Flashbots Protect — ส่ง transaction ของคุณเข้าสู่ระบบ MEV-Share ดังนั้นมันจะไม่มีวันมองเห็นได้สาธารณะสำหรับ frontrunner และคืนส่วนแบ่งของมูลค่า backrun ใดๆ พร้อมการคืน gas
  • MEV Blocker (โดย CoW Protocol และอื่นๆ) — บริการ private-RPC ที่คล้ายกันซึ่งป้องกัน frontrunning และ sandwiching และคืนกำไรจาก backrun ให้ผู้ใช้ ด้วยโมเดล fee ที่ใช้งานฟรี

เนื่องจาก sandwich ต้องการให้ผู้โจมตี เห็น transaction ที่รอดำเนินการของคุณและ แทรก frontrun ก่อนหน้ามัน การนำ transaction ของคุณออกจาก public mempool จะกำจัดโอกาส frontrun ไปโดยตรง โอกาส backrun ยังคงอยู่ แต่ตอนนี้มันถูกประมูลกลับคืนให้คุณแทนที่จะถูกขโมยไป การแลกเปลี่ยนคือความไว้วางใจเล็กน้อยต่อผู้ดำเนินการ RPC และบางครั้งการรวมเข้าบล็อกที่ช้าลงเล็กน้อย — โดยปกติแล้วเล็กน้อยมากเมื่อเทียบกับการกำจัดความเสี่ยง sandwich (การศึกษาเปรียบเทียบ private-protection RPC ในปี 2025 พบว่าการชำระบัญชีในโลกจริงของพวกมัน ไม่ได้ ดีกว่าการส่งแบบสาธารณะเสมอไป ดังนั้นผลกระทบจึงแรงแต่ไม่ครอบคลุมทุกกรณี สำหรับ swap DEX ขนาดรายย่อยส่วนใหญ่ private routing ยังคงเป็นค่า default ที่ถูกต้อง)

เลือก venue แบบ batch-auction และ intent-based

DEX บางแบบกำจัดข้อได้เปรียบด้านลำดับโดยการออกแบบ CoW Protocol ชำระ trade ใน batch auction ด้วย uniform clearing price — ทุก trade ใน batch หนึ่งจะ clear ที่ราคาเดียวกัน ดังนั้นจึงไม่มีตำแหน่ง "แรก" และ "สุดท้าย" ให้ใช้ประโยชน์ และ solver แข่งขันกันเพื่อให้ execution ที่ดีที่สุดแก่คุณ แทนที่จะจัดลำดับรอบคุณ ระบบ intent-based ที่คุณเซ็น สิ่งที่คุณต้องการ แล้วปล่อยให้ solver หา execution แทนที่จะเซ็น path ที่เจาะจง ก็ปฏิเสธจุดยืนของ sandwich ในลักษณะเดียวกัน หากคุณกำลังเทรดขนาดใหญ่ venue เหล่านี้มีค่ามากกว่าการปรับ slippage ใดๆ

เข้าใจว่าทำไม L2 ถึงแตกต่าง

บน Ethereum rollup ส่วนใหญ่ในปัจจุบัน (Arbitrum, Optimism, Base) บล็อกถูกสร้างโดย sequencer เดี่ยว ที่ดำเนินการโดยทีม rollup ไม่มี public mempool ของ transaction ที่รอดำเนินการให้ searcher เฝ้าดู และมีบุคคลที่เชื่อถือได้เพียงคนเดียวที่ตัดสินใจลำดับ ในทางปฏิบัติ sequencer ส่วนใหญ่จัดลำดับ transaction แบบ มาก่อนได้ก่อน และไม่รัน sandwich attack ต่อผู้ใช้ของตน ดังนั้น sandwiching จึงแทบไม่มีอยู่บนเชนเหล่านี้ ในระดับ protocol layer

แต่จงอ่านการแลกเปลี่ยนนี้อย่างแม่นยำ: เหตุผลที่คุณปลอดภัยจากการสกัด MEV แบบ decentralized คือคุณกำลังไว้วางใจ orderer แบบ centralized ว่าจะไม่สกัดมัน Sequencer สามารถ frontrun คุณได้ มันเพียงแค่เลือก (และถูกผูกมัดด้วยชื่อเสียง) ที่จะไม่ทำ นี่คือสมดุลชั่วคราว เมื่อ rollup กระจายอำนาจ sequencer ของตน — shared sequencer, based sequencing, การประมูลแบบ PBS บน L2 — พลวัตของการมองเห็น mempool และการขายลำดับแบบเดียวกันสามารถกลับมาปรากฏอีกครั้ง และคำถาม MEV ของ L2 กลายเป็นปัญหาการออกแบบที่เปิดกว้างแทนที่จะเป็นปัญหาที่แก้แล้ว อย่าสมมติว่า "ฉันอยู่บน L2" หมายถึง "MEV แตะต้องฉันไม่ได้" ตลอดไป มันหมายถึง "มีฝ่ายที่เชื่อถือได้หนึ่งฝ่ายสัญญาว่าจะไม่ทำ ในตอนนี้"

สิ่งที่ควรพกติดตัวไปสู่ส่วนที่เหลือของซีรีส์

ตัดหัวข้อนี้ให้เหลือเพียงข้อเท็จจริงที่สำคัญ:

  1. Swap บน public-mempool คือ intent สาธารณะบวกกับช่องลำดับที่ซื้อได้ การผสมผสานนั้น ไม่ใช่บั๊กใดบั๊กหนึ่ง คือปัญหาทั้งหมด
  2. บน constant-product AMM slippage tolerance ของคุณคือปริมาณที่ผู้โจมตีสามารถสกัดได้ และส่วนแบ่งของ sandwich ถูกจำกัดอย่างแม่นยำโดยพื้นที่ที่คุณเหลือไว้ การตั้งค่า slippage คือการตัดสินใจด้านความปลอดภัย ไม่ใช่ toggle เพื่อความสะดวก
  3. MEV ไม่ได้เป็นก้อนเดียว: frontrun และ sandwich เป็นพิษ backrun และ atomic arbitrage ไม่เป็นพิษ และมีประโยชน์ด้วยซ้ำ เพราะพวกมันรักษาความสอดคล้องของราคาบนเชน การบรรเทาที่ดีจะระงับอย่างแรก และ กระจาย อย่างหลัง
  4. การตอบสนองของอุตสาหกรรมดำเนินจาก PGA (สงคราม gas สาธารณะ Flash Boys 2.0, 2019) ไปสู่ Flashbots / bundle / PBS (การประมูลส่วนตัวแบบ sealed) ไปสู่ MEV-Share (คืนมูลค่า backrun ให้ผู้ใช้) และขั้นถัดไปคือ enshrined PBS ใน protocol
  5. ในฐานะเทรดเดอร์ แนวทางป้องกันของคุณคือ slippage ที่แน่นหนาต่อ pool private RPC (Flashbots Protect, MEV Blocker) และ venue แบบ batch-auction — และความตระหนักว่า ความปลอดภัยบน L2 ในปัจจุบันเป็นสมมติฐานความไว้วางใจใน sequencer ไม่ใช่กฎของฟิสิกส์

บทความ atomic arbitrage and flash loans จะเข้าข้างฝั่ง searcher ของตารางนี้ — วิธีที่การสกัดแบบไม่เป็นพิษถูกสร้างขึ้น ด้วยทุนที่ยืมมาและ atomic revert เป็นตาข่ายนิรภัย บทความ Uniswap v3 concentrated liquidity จะย้อนกลับไปทบทวนคณิตศาสตร์ constant-product ข้างต้นและแสดงให้เห็นว่า concentrated liquidity ปรับรูปเส้นโค้ง price-impact อย่างไร — และดังนั้นจึงปรับงบประมาณ sandwich — ที่เราได้อนุมานไว้ที่นี่ mempool คือป่ามืด ตอนนี้คุณรู้แล้วว่าอะไรกำลังล่าอยู่ในนั้น

เอกสารอ้างอิง

  • Daian, Goldfeder, Kell, Li, Zhao, Bentov, Breidenbach, Juels (2019), Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges. arXiv:1904.05234.
  • Robinson & Konstantopoulos (2020), Ethereum is a Dark Forest.
  • เอกสารประกอบของ Flashbots: MEV-Boost, MEV-Share, Flashbots Protect, MEV refunds (docs.flashbots.net)
  • Ethereum PBS / EIP-7732 (enshrined proposer-builder separation), เอกสารการอัปเกรด Glamsterdam
  • MEV Blocker (mevblocker.io); การออกแบบ batch-auction ของ CoW Protocol
  • Private MEV Protection RPCs: A Benchmark Study (arXiv:2505.19708, 2025)
ข้อจำกัดความรับผิดชอบ: ข้อมูลที่ให้ไว้ในบทความนี้มีไว้เพื่อการศึกษาและให้ข้อมูลเท่านั้น และไม่ถือเป็นคำแนะนำทางการเงิน การลงทุน หรือการเทรด การเทรดสกุลเงินดิจิทัลมีความเสี่ยงสูงที่จะขาดทุน

ผู้เขียน

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

ก้าวนำหน้าตลาด

สมัครรับจดหมายข่าวของเราเพื่อรับข้อมูลเชิงลึกการเทรดด้วย AI เฉพาะ การวิเคราะห์ตลาด และการอัปเดตแพลตฟอร์ม

เราเคารพความเป็นส่วนตัวของคุณ ยกเลิกการสมัครได้ทุกเมื่อ