Giải phẫu MEV: sandwich, frontrunning, và khu rừng tối của mempool
Khi bạn ký một lệnh swap trên một sàn giao dịch phi tập trung và phát nó tới một endpoint RPC công khai, bạn không hề gửi một chỉ thị riêng tư đến một cỗ máy khớp lệnh. Bạn đã công bố một tuyên bố ý định đã ký, có thể thực thi, lên một bảng thông báo toàn cầu, và bạn đã đính kèm một khoản thưởng — giá gas — cho bất kỳ ai đồng ý thực thi nó. Mọi người đều có thể đọc tuyên bố đó. Không ai có nghĩa vụ phải thực thi nó một cách công bằng, đúng thứ tự, hay thậm chí là thực thi nó. Thứ tự mà nó được đưa vào so với các giao dịch khác không phải là một thuộc tính của việc bạn gửi lệnh; đó là quyết định của một bên thứ ba, và bên đó thu lợi từ việc đưa ra quyết định chống lại bạn.
Đây là cốt lõi khó chịu của việc giao dịch on-chain. Trong bài Chênh lệch giá thống kê và giao dịch cặp trên thị trường crypto, chúng tôi có đề cập thoáng qua rằng việc chuyển một vị thế giữa CEX và DEX mang "rủi ro MEV" và để thuật ngữ đó lơ lửng chưa giải thích. Bài viết này trả món nợ đó. Đây là cánh cửa mở đầu cho một chuỗi bài về kinh tế học của việc thực thi giao dịch on-chain, và nhiệm vụ của nó là định nghĩa từ vựng — mempool, bundle, backrun, sandwich, PBS — đủ chính xác để các bài viết sau về chênh lệch giá atomic với flash loan và thanh khoản tập trung Uniswap v3 cho dân quant có thể mặc định rằng bạn đã hiểu cỗ máy này.
MEV — Maximal (hay Maximum) Extractable Value, Giá trị Tối đa Có thể Trích xuất — là lợi nhuận mà một bên có thể trích xuất bằng cách lựa chọn việc đưa vào, loại trừ, và sắp xếp thứ tự các giao dịch trong một block, vượt ra ngoài phần thưởng block tiêu chuẩn và phí ưu tiên. Đây không phải là một lỗi; đó là hệ quả cấu trúc của cách các blockchain không cần cấp phép sắp xếp thứ tự giao dịch. Kể từ khi cơ chế này được mô tả chính thức vào năm 2019, tổng giá trị đã trích xuất lên tới hàng tỷ đô la, và cả một ngành công nghiệp — searcher, builder, relay, block proposer — đã hình thành để nắm bắt và phân phối lại nó. Nếu bạn giao dịch on-chain, bạn hoặc đang trả loại thuế này, hoặc đã thực hiện những bước đi có chủ đích để không phải trả nó.
1. Vòng đời giao dịch: tại sao ý định của bạn lại công khai
Để thấy giá trị bị rò rỉ ở đâu, hãy theo dõi một giao dịch từ ví của bạn đến khi được đưa vào một block đã hoàn tất.
Mempool công khai
Khi ví của bạn ký một giao dịch và gửi nó đến endpoint RPC của một node tiêu chuẩn, node đó xác thực giao dịch (chữ ký, nonce, số dư đủ) và, nếu hợp lệ, lan truyền nó qua mạng ngang hàng đến các node khác. Mỗi node giữ những giao dịch chưa được đưa vào block này trong một bộ đệm cục bộ gọi là mempool (memory pool, bể bộ nhớ). Trong vòng một hoặc hai giây, gần như mọi node trên mạng — bao gồm cả những node do các bên có toàn bộ hoạt động kinh doanh là trích xuất giá trị từ các giao dịch đang chờ xử lý vận hành — đều giữ một bản sao giao dịch đã ký, đã giải mã đầy đủ của bạn.
"Đã giải mã đầy đủ" là cụm từ mang tính then chốt. Giao dịch của bạn không phải là một khối dữ liệu mờ đục. Đó là một lệnh gọi được mã hóa ABI tới một hợp đồng đã biết. Bất kỳ ai theo dõi mempool đều có thể giải mã nó và đọc, bằng ngôn ngữ đơn giản: địa chỉ này sắp swap 40 ETH lấy USDC trên pool Uniswap v2 WETH/USDC, và nó sẽ chấp nhận nhận về tối thiểu 96.000 USDC. Điều khoản cuối cùng đó — đầu ra tối thiểu chấp nhận được — chính là dung sai trượt giá (slippage tolerance) của bạn, và đó không phải là một gợi ý. Đó là một tham số cứng được biên dịch vào calldata. Chúng ta sẽ sớm thấy rằng đó cũng chính là ngân sách của kẻ tấn công.
Mempool đôi khi được gọi là khu rừng tối (dark forest), theo tên một bài luận năm 2020 của Dan Robinson và Georgios Konstantopoulos mượn ẩn dụ của Lưu Từ Hân: một không gian nơi bất kỳ thực thể nào hiển thị đều lập tức bị săn đuổi bởi những kẻ săn mồi mà bạn không thể nhìn thấy. Phát một giao dịch có lợi nhuận một cách ngây thơ vào mempool công khai và nó có thể không bao giờ đến được một block dưới hình dạng bạn đã ký — một bot sẽ tiêu thụ cơ hội đó và định hình lại block xung quanh nó để chống lại bạn.
Giá gas như một hàng đợi ưu tiên
Thị trường phí của Ethereum (sau EIP-1559) chia giá gas thành phí cơ sở (base fee) của giao thức, phí này bị đốt, và phí ưu tiên (priority fee, hay "tip"), phí này đi tới block proposer. Khi một block được xây dựng, builder có động lực kinh tế để đưa vào những giao dịch trả cho nó nhiều nhất. Ở mức xấp xỉ đầu tiên, mempool là một hàng đợi ưu tiên dựa trên tip: tip càng cao, được đưa vào càng sớm.
Đây chính là cơ chế khiến việc sắp xếp thứ tự trở thành thứ có thể mua được. Nếu tôi thấy lệnh swap đang chờ xử lý của bạn và tôi muốn giao dịch của mình được thực thi ngay trước giao dịch của bạn, tôi không cần hack bất cứ thứ gì. Tôi chỉ đơn giản gửi một giao dịch trả tip cao hơn. Builder, theo động lực của nó, sẽ đặt giao dịch của tôi lên trước. Thứ tự không phải là một sự đảm bảo công bằng mà giao thức cung cấp; đó là một cuộc đấu giá mà giao thức vận hành, và lô hàng được đấu giá chính là quyền hành động dựa trên thông tin trong giao dịch đang chờ xử lý của bạn.
Hai sự thật kết hợp lại tạo thành toàn bộ vấn đề MEV:
- Các giao dịch đang chờ xử lý là hiển thị (mempool công khai).
- Thứ tự của chúng có thể mua được (đấu giá ưu tiên theo tip).
Mọi thứ dưới đây đều là hệ quả của hai sự thật này.

2. Cơ chế sandwich, với toán học thực tế
Sandwich là chiến lược MEV độc hại kinh điển nhắm vào người swap, và đáng để đi sâu vào phép tính vì các con số sẽ giải thích tại sao thiết lập trượt giá của bạn là tham số phòng thủ quan trọng nhất mà bạn kiểm soát.
Bất biến tích không đổi
Một pool Uniswap v2 giữ dự trữ của token X và của token Y, và thực thi bất biến
sau mỗi giao dịch (tạm thời bỏ qua phí). Nếu một trader bán token X vào pool, dự trữ X mới là , và để duy trì , pool phải trả ra
Với phí 0,3% của Uniswap v2, đầu vào được điều chỉnh theo hệ số :
Thuộc tính then chốt: bạn mua càng nhiều theo một hướng, giá biên của bạn càng tệ. Tác động giá là lồi. Tính lồi này chính xác là thứ mà kẻ tấn công kiếm tiền từ đó.
Bối cảnh
Lấy một pool WETH/USDC. Để giữ các con số gọn gàng, giả sử dự trữ đặt ETH ở mức khoảng 2.500 USDC:
- WETH
- USDC
Bạn muốn mua USDC bằng 40 WETH (bán WETH vào pool). Bỏ qua phí để minh họa, một lệnh khớp trung thực trong một block trống sẽ cho bạn
Giá spot trước giao dịch của bạn là USDC/WETH, vì vậy 40 WETH "đáng giá" 100.000 USDC theo mức giá trung bình trước giao dịch. Bạn nhận được 99.601 — khoảng cách ~399 USDC là tác động giá của chính bạn cộng với phí. Bây giờ giả sử bạn đặt dung sai trượt giá 1%. amountOutMin của giao dịch bạn là
Con số đó giờ đây công khai trong mempool. Nó cho bất kỳ ai quan sát biết: người này sẽ chấp nhận tối thiểu 98.605 USDC cho 40 WETH của họ. Sự chênh lệch giữa những gì bạn sẽ nhận được trong một block sạch (99.601) và mức sàn của bạn (98.605) — khoảng 996 USDC — là khoảng trống mà bạn đã tự nguyện giao cho bất kỳ ai frontrun bạn. Đây chính là ngân sách của kẻ tấn công.
Cuộc tấn công, từng bước
Một searcher xây dựng ba giao dịch và buộc chúng vào thứ tự này trong một block:
1. Frontrun (kẻ tấn công mua trước). Kẻ tấn công bán WETH của chính nó vào pool trước bạn, đẩy giá USDC lên (WETH xuống) để khi giao dịch của bạn được thực thi, bạn nhận được ít USDC hơn cho mỗi WETH. Kẻ tấn công định cỡ việc này sao cho giao dịch của bạn vẫn vượt qua amountOutMin — nếu không, lệnh swap của bạn sẽ revert và không có nạn nhân nào để sandwich. Kích thước frontrun tối ưu là kích thước lớn nhất khiến bạn nhận đúng ở mức sàn của mình.
Giả sử kẻ tấn công frontrun với 40 WETH của chính nó. Pool chuyển sang , và theo bất biến, kẻ tấn công nhận được
để lại dự trữ WETH, USDC.
2. Nạn nhân (lệnh swap của bạn thực thi vào pool đã bị làm xấu đi). 40 WETH của bạn giờ đây thực thi trên dự trữ này:
Kiểm tra ràng buộc: 98.811 > 98.605, vì vậy giao dịch của bạn không revert — bạn vẫn được khớp lệnh, chỉ là tệ hơn. Bạn nhận được 98.811 thay vì 99.601 mà bạn lẽ ra nhận được trong một block sạch. Bạn mất khoảng 790 USDC, và bạn hoàn toàn không biết điều đó đã xảy ra; lệnh swap của bạn "thành công". Pool giờ đây là WETH, USDC.
3. Backrun (kẻ tấn công bán lại). Kẻ tấn công giờ đây bán USDC mà nó đã mua ở bước 1 trở lại vào pool — hay tương đương, mua lại WETH của nó — nắm bắt mức giá đã bị đẩy lên mà giao dịch của bạn tạo ra. Mua lại WETH với ~99.601 USDC mà nó nắm giữ:
Kẻ tấn công đã chi 40 WETH ở bước 1 và nhận lại 40,32 WETH ở bước 3 — một khoản lợi nhuận khoảng 0,32 WETH (~800 USDC) trước gas, được trích xuất gần như hoàn toàn từ ngân sách trượt giá của bạn. Siết chặt dung sai trượt giá của bạn và ngân sách đó sẽ thu hẹp lại; kích thước frontrun tối ưu của kẻ tấn công giảm xuống, và dưới một ngưỡng nào đó, sandwich không còn sinh lời sau gas nữa và searcher sẽ bỏ qua bạn.
Bài học không phải là "dung sai trượt giá là xấu". Bạn cần một mức dung sai nào đó nếu không giao dịch của bạn sẽ revert khi giá biến động bình thường. Bài học là dung sai trượt giá là một đại lượng có thể trích xuất trực tiếp, và việc đặt nó ở một mức mặc định lười biếng như 1%, hoặc tệ hơn, "tự động" trên một pool mỏng, tương đương với việc để lại chính khoản tiền đó trên bàn cho bất kỳ ai đang theo dõi. Trên một pool thanh khoản thấp mà chính giao dịch của bạn di chuyển giá nhiều phần trăm, một mức trượt giá mặc định có thể trao đi một phần đáng kinh ngạc của giá trị danh nghĩa của bạn.
Một bản phác thảo tối giản về điều kiện lợi nhuận của 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 chạy một tối ưu hóa nhỏ trên attack_dx để tìm mức frontrun lớn nhất vẫn giữ vout >= victim_min_out. Điểm tối ưu đó là nơi mức sàn trượt giá của bạn trở thành ràng buộc chặt — đó là một cách khác để nói rằng phần thu được của kẻ tấn công bị giới hạn chính xác bởi khoảng trống bạn đã để lại.
3. Một phân loại về MEV: độc hại so với vô hại
"MEV" bị dùng như một lời sỉ nhục, nhưng không phải tất cả đều là trích xuất từ một nạn nhân. Sẽ hữu ích nếu ta phân loại các chiến lược theo liệu có ai đó bị thiệt hại vì việc sắp xếp thứ tự hay không.
Frontrunning. Quan sát một giao dịch đang chờ xử lý có lợi nhuận, sao chép hoặc đi trước nó, và trả tip cao hơn để thực thi trước. Nguyên mẫu điển hình là thấy một lệnh mua lớn sẽ di chuyển giá và mua trước nó. Hoàn toàn độc hại: nạn nhân nhận được giá tệ hơn, hoặc cơ hội của họ bị đánh cắp hoàn toàn.
Backrunning. Đặt giao dịch của bạn ngay sau một giao dịch mục tiêu để hành động dựa trên trạng thái mà nó tạo ra. Điều quan trọng là, một backrun thuần túy không làm suy giảm việc thực thi của mục tiêu — nó chạy sau, vì vậy giá của nạn nhân đã được chốt rồi. Nếu lệnh swap lớn của bạn làm pool WETH/USDC lệch khỏi Binance, một arbitrageur sẽ backrun bạn để đưa nó trở lại đúng vị trí và bỏ túi khoản chênh lệch. Bạn không bị hại; thực tế, khoản chênh lệch giá này chính là thứ giữ cho giá on-chain bám sát thị trường rộng hơn. Backrunning là đầu vô hại của quang phổ, và — như chúng ta sẽ thấy — các hệ thống bảo vệ MEV hiện đại được xây dựng chính xác để trả lại lợi nhuận backrun cho người dùng đã tạo ra nó.
Sandwiching. Một frontrun và một backrun bao quanh cùng một nạn nhân, như đã mổ xẻ ở trên. Độc hại theo cấu trúc: frontrun tồn tại chỉ để làm xấu đi việc khớp lệnh của nạn nhân để backrun có thể thu hoạch nó.
Chênh lệch giá atomic (Atomic arbitrage). Một giao dịch duy nhất mua một tài sản rẻ trên một sàn và bán nó đắt trên sàn khác — chẳng hạn WETH rẻ hơn trên Uniswap so với trên Sushiswap — thu về lợi nhuận không rủi ro, tất cả-hoặc-không-gì trong một giao dịch (nó revert nếu không sinh lời). Không có nạn nhân cụ thể; nó đang đóng lại một sự chênh lệch giá mà thị trường để hở. Nhìn chung được coi là vô hại — nó cải thiện tính nhất quán giá giữa các sàn — và đây là chủ đề của bài viết chênh lệch giá atomic và flash loan trong chuỗi này, nơi thuộc tính "không cần vốn" của flash loan làm cho nó đặc biệt sắc bén.
Thanh lý (Liquidations). Khi một vị thế cho vay (Aave, Compound, Maker) rơi xuống dưới ngưỡng thế chấp của nó, giao thức đưa ra một khoản thưởng cho bất kỳ ai trả nợ xấu và tịch thu tài sản thế chấp. Các searcher cạnh tranh để trở thành người thanh lý đó. Có một "nạn nhân" — người vay bị thanh lý — nhưng họ đang bị thanh lý theo quy tắc của giao thức dù sao đi nữa; cạnh tranh MEV chủ yếu quyết định ai nhận được khoản thưởng và, thông qua cạnh tranh, có thể thu hẹp nó. Có thể gọi đây là trung tính-đến-vô hại đối với sức khỏe thị trường, khó chịu đối với người vay.
Một bản đồ sơ lược:
| Chiến lược | Nạn nhân bị hại? | Kết luận |
|---|---|---|
| Frontrun | Có | Độc hại |
| Sandwich | Có | Độc hại |
| Backrun (thuần túy) | Không | Vô hại |
| Chênh lệch giá atomic | Không | Vô hại (cải thiện tính nhất quán giá) |
| Thanh lý | Người vay (theo quy tắc giao thức) | Trung tính |
Ranh giới độc hại/vô hại quan trọng vì toàn bộ ngăn xếp giảm thiểu MEV hiện đại là một nỗ lực nhằm triệt tiêu các chiến lược độc hại trong khi bảo tồn — và phân phối lại — các chiến lược vô hại. Bạn không thể cấm các trò chơi sắp xếp thứ tự mà không đồng thời phá vỡ khoản chênh lệch giá vốn giữ cho giá DEX trung thực. Bí quyết là định tuyến giá trị độc hại trở lại người mà nó đã bị lấy đi.
4. Một lịch sử ngắn gọn: từ đấu giá gas đến Flashbots
Flash Boys 2.0 và các cuộc đấu giá gas ưu tiên
Hiện tượng này được đặt tên và đo lường trong bài báo năm 2019 "Flash Boys 2.0: Frontrunning, Transaction Reordering, and Consensus Instability in Decentralized Exchanges" của Philip Daian, Steven Goldfeder, Tyler Kell, Yunqi Li, Xueyuan Zhao, Iddo Bentov, Lorenz Breidenbach, và Ari Juels. Bài báo giới thiệu thuật ngữ "miner extractable value" (giá trị có thể trích xuất bởi miner, sau này được tổng quát hóa thành maximal extractable value khi ngành công nghiệp chuyển từ các miner proof-of-work sang các proposer proof-of-stake) và ghi lại các cuộc đấu giá gas ưu tiên (priority gas auctions, PGA): các bot đấu giá lẫn nhau về giá gas, trong thời gian thực, để giành quyền sắp xếp thứ tự cho một cơ hội sinh lời.
Các PGA có tính bệnh lý rõ ràng. Vì đòn bẩy duy nhất mà các bot có là giá gas công khai, chúng chiến đấu trong các cuộc chiến đấu giá mở — liên tục gửi lại với các mức tip ngày càng cao trong cùng vài giây — để giành lấy một cơ hội chênh lệch giá hoặc thanh lý duy nhất. Hai hệ quả xấu xí theo sau. Thứ nhất, điều này làm tắc nghẽn mạng lưới và đẩy giá gas lên cao cho tất cả mọi người, dù có liên quan đến MEV hay không. Thứ hai, và đáng lo ngại hơn, bài báo lập luận rằng nếu MEV có sẵn trong một block vượt quá phần thưởng block, các miner duy lý sẽ có động lực để tổ chức lại chuỗi nhằm đánh cắp nó, đe dọa chính sự ổn định của đồng thuận. MEV không chỉ là vấn đề công bằng cho người dùng; đó là một mối đe dọa đối với chuỗi.
Flashbots như một phản ứng
Flashbots ra mắt năm 2020 để hóa giải PGA. Nhận thức của họ: chuyển cuộc đấu giá sắp xếp thứ tự ra khỏi mempool công khai và vào một kênh niêm phong giá thầu, ngoài chuỗi. Thay vì phát một giao dịch và chiến đấu trong một cuộc chiến gas công khai, một searcher lắp ráp một bundle — một danh sách có thứ tự các giao dịch cần được đưa vào một cách nguyên tử, tất cả-hoặc-không-gì, theo một thứ tự tương đối cụ thể — và gửi nó riêng tư tới một block builder, cùng với một giá thầu (thường được trả dưới dạng chuyển khoản trực tiếp cho proposer thay vì thông qua giá gas). Builder lắp ráp block giá trị nhất mà nó có thể từ tất cả các bundle và giao dịch nó nhận được và đưa ra cho proposer.
Hai điều được cải thiện cùng một lúc. Các searcher ngừng spam mempool công khai với các giá thầu thất bại, vì vậy ngoại tác giá gas lên người dùng thông thường giảm xuống. Và bundle chiến thắng hoặc được đưa vào nguyên vẹn hoặc không được đưa vào chút nào, loại bỏ các giao dịch "frontrun thất bại" từng làm tắc nghẽn các block. Cuộc chiến đấu giá vẫn diễn ra — nó chỉ diễn ra như một cuộc đấu giá riêng tư bên trong builder thay vì một cuộc la hét công khai trên chuỗi.
PBS: tách biệt proposer-builder
Kiến trúc của Flashbots tổng quát hóa thành tách biệt proposer-builder (proposer-builder separation, PBS), mô hình thống trị trên Ethereum ngày nay. Các vai trò được tách ra:
- Searcher tìm các cơ hội MEV và đóng gói chúng thành các bundle.
- Builder cạnh tranh để lắp ráp một block đầy đủ giá trị nhất từ các bundle và giao dịch công khai.
- Relay đứng giữa builder và proposer, nhận các block đầy đủ từ builder và chỉ chuyển tiếp header của block cùng với một giá thầu giá trị cho proposer, để proposer cam kết với một block trước khi thấy nội dung của nó (ngăn proposer đơn giản là đánh cắp MEV).
- Proposer (validator) chọn header có giá thầu cao nhất, ký nó, và thu khoản thanh toán.
Điều này được triển khai ngoài giao thức thông qua MEV-Boost, phần mềm trung gian mà đại đa số các validator Ethereum vận hành — khoảng 80–90% các block được xây dựng thông qua các builder bên ngoài qua MEV-Boost. Nó hoạt động, nhưng phụ thuộc vào các relay đáng tin cậy. Bước tiếp theo, PBS được ghim vào giao thức (enshrined PBS, ePBS, EIP-7732), nhằm mục đích đưa việc tách biệt proposer-builder trực tiếp vào giao thức Ethereum và loại bỏ sự phụ thuộc vào relay đáng tin cậy. Tính đến giữa năm 2026, nó dự kiến sẽ nằm trong bản nâng cấp Glamsterdam, nhắm tới việc kích hoạt trên mainnet vào cuối năm 2026, với những người ủng hộ tuyên bố rằng nó có thể cắt giảm đáng kể tổn thất MEV cho người dùng bằng cách cải thiện cách các block được cam kết và thu hẹp khoảng thời gian cho việc sắp xếp lại thứ tự độc hại. Hãy coi các con số chính xác là mang tính khát vọng cho đến khi nó được triển khai, nhưng hướng đi thì rõ ràng: giao thức đang hấp thụ chuỗi cung ứng MEV mà nó đã giả vờ không tồn tại trong nhiều năm.
MEV-Share: trả lại giá trị
Sự phát triển có hệ quả nhất đối với các trader thông thường là MEV-Share, cuộc đấu giá luồng lệnh (order-flow auction) của Flashbots. Ý tưởng này đảo ngược khu rừng tối. Thay vì giao dịch của bạn hiển thị với mọi kẻ săn mồi, bạn gửi nó riêng tư tới một node MEV-Share, node này chỉ tiết lộ các gợi ý một phần về nó (bạn chọn tiết lộ bao nhiêu) cho các searcher. Các searcher đấu giá để backrun giao dịch của bạn — hãy nhớ, một backrun không gây hại cho bạn — và một phần lớn lợi nhuận kết quả được hoàn trả cho bạn, phần còn lại được chia giữa searcher và proposer để đưa bundle vào.
Việc định khung lại kinh tế này rất tinh tế. Một lệnh swap lớn tạo ra một cơ hội backrun; câu hỏi là ai nắm bắt nó. Trong thế giới khu rừng tối, các searcher và builder lấy tất cả. Dưới MEV-Share, giá trị mà chính giao dịch của bạn tạo ra phần lớn được trả lại cho bạn. RPC hướng tới người tiêu dùng của Flashbots, Flashbots Protect, định tuyến các giao dịch bán lẻ thông qua hệ thống này, và vào năm 2025 nó đã bổ sung thêm hoàn phí gas, tăng đáng kể những gì người dùng nhận lại. Đây là nguyên tắc "phân phối lại cái vô hại, triệt tiêu cái độc hại" được cụ thể hóa.
5. Các biện pháp phòng thủ thực tiễn cho trader
Bạn không cần phải vận hành một searcher để ngừng là con mồi. Theo thứ tự tác động tương đối:
Đặt trượt giá một cách có chủ đích, theo từng pool
Phần 2 đã thiết lập rằng dung sai trượt giá của bạn chính là ngân sách của kẻ tấn công. Hai quy tắc theo sau. Thứ nhất, định cỡ trượt giá theo thanh khoản thực tế của pool và tác động giá của giao dịch của bạn, không phải theo một mức 1% theo thói quen. Trên một pool sâu, dung sai 0,1–0,3% có thể là đủ; trên một pool mỏng, hoặc chấp nhận rằng bạn không thể giao dịch khối lượng lớn một cách an toàn, hoặc chia nhỏ thành các đợt nhỏ hơn. Thứ hai, không bao giờ dùng trượt giá "tự động"/"không giới hạn" trên một cặp thanh khoản thấp — đó là một tấm séc khống đã ký. Nếu một lệnh swap liên tục revert ở một dung sai chặt, đó là thị trường đang nói với bạn rằng giao dịch của bạn quá lớn so với pool, không phải là một lời nhắc để nới lỏng mức sàn.
Định tuyến qua một RPC riêng tư
Cách khắc phục cấu trúc sạch nhất là giữ giao dịch của bạn hoàn toàn ngoài mempool công khai. Trỏ ví của bạn tới một RPC riêng tư chuyển tiếp giao dịch trực tiếp tới các builder thay vì lan truyền chúng:
- Flashbots Protect — gửi giao dịch của bạn vào hệ thống MEV-Share, vì vậy nó không bao giờ hiển thị công khai với những kẻ frontrunner, và trả lại một phần bất kỳ giá trị backrun nào cộng với hoàn phí gas.
- MEV Blocker (bởi CoW Protocol và những bên khác) — một dịch vụ RPC riêng tư tương tự bảo vệ chống lại frontrunning và sandwiching và hoàn lại lợi nhuận backrun cho người dùng, với mô hình phí miễn phí sử dụng.
Vì một sandwich yêu cầu kẻ tấn công phải nhìn thấy giao dịch đang chờ xử lý của bạn và chèn một frontrun trước nó, việc loại bỏ giao dịch của bạn khỏi mempool công khai loại bỏ hoàn toàn cơ hội frontrun. Cơ hội backrun vẫn còn, nhưng giờ đây nó được đấu giá trả lại cho bạn thay vì bị đánh cắp. Sự đánh đổi là một chút niềm tin vào nhà vận hành RPC và, đôi khi, việc đưa vào chậm hơn một chút — thường không đáng kể so với việc loại bỏ rủi ro sandwich. (Một nghiên cứu chuẩn năm 2025 về các RPC bảo vệ riêng tư phát hiện rằng việc thanh toán trong thực tế của chúng không phải lúc nào cũng tốt hơn hẳn so với gửi công khai, vì vậy hiệu ứng này mạnh nhưng không phổ quát; đối với hầu hết các lệnh swap DEX kích thước bán lẻ, định tuyến riêng tư vẫn là lựa chọn mặc định đúng đắn.)
Ưu tiên các sàn giao dịch đấu giá theo lô và dựa trên ý định
Một số thiết kế DEX loại bỏ lợi thế sắp xếp thứ tự ngay từ cấu trúc. CoW Protocol thanh toán các giao dịch trong các cuộc đấu giá theo lô với một giá khớp lệnh đồng nhất — mọi giao dịch trong một lô đều được khớp ở cùng một mức giá, vì vậy không có vị trí "đầu tiên" và "cuối cùng" để khai thác, và các solver cạnh tranh để mang lại cho bạn việc thực thi tốt nhất thay vì sắp xếp lại thứ tự xung quanh bạn. Các hệ thống dựa trên ý định, nơi bạn ký cái bạn muốn và để các solver tìm cách thực thi, thay vì ký một đường đi cụ thể, tương tự phủ nhận chỗ bám của sandwich. Nếu bạn đang giao dịch khối lượng lớn, các sàn này đáng giá hơn bất kỳ điều chỉnh trượt giá nào.
Hiểu tại sao các L2 lại khác biệt
Trên hầu hết các rollup Ethereum hiện nay (Arbitrum, Optimism, Base), các block được sản xuất bởi một sequencer duy nhất do đội ngũ rollup vận hành. Không có mempool công khai của các giao dịch đang chờ xử lý để các searcher theo dõi, và có một bên đáng tin cậy duy nhất quyết định thứ tự. Trong thực tế, hầu hết các sequencer sắp xếp giao dịch theo nguyên tắc đến trước phục vụ trước và không chạy các cuộc tấn công sandwich chống lại người dùng của họ, vì vậy sandwiching phần lớn vắng mặt trên các chuỗi này ở tầng giao thức.
Nhưng hãy đọc kỹ sự đánh đổi này: lý do bạn an toàn khỏi việc trích xuất MEV phi tập trung là vì bạn đang tin tưởng một bên sắp xếp thứ tự tập trung sẽ không trích xuất nó. Sequencer có thể frontrun bạn; nó đơn giản là chọn (và bị ràng buộc về mặt danh tiếng) không làm vậy. Đây là một trạng thái cân bằng tạm thời. Khi các rollup phi tập trung hóa các sequencer của họ — shared sequencer, based sequencing, các cuộc đấu giá kiểu PBS trên L2 — cùng động lực về khả năng hiển thị mempool và thứ tự có thể mua được có thể tái xuất hiện, và câu hỏi MEV trên L2 trở thành một bài toán thiết kế mở thay vì một vấn đề đã được giải quyết. Đừng cho rằng "tôi đang ở trên một L2" có nghĩa là "MEV không thể chạm tới tôi" mãi mãi; nó có nghĩa là "một bên đáng tin cậy đã hứa sẽ không làm vậy, tạm thời."
Những gì cần mang theo cho phần còn lại của chuỗi bài
Rút gọn chủ đề xuống các sự thật mang tính nền tảng của nó:
- Một lệnh swap trên mempool công khai là ý định công khai cộng với một khe cắm sắp xếp thứ tự có thể mua được. Sự kết hợp đó, chứ không phải bất kỳ lỗi đơn lẻ nào, là toàn bộ vấn đề.
- Trên một AMM tích không đổi, dung sai trượt giá của bạn là một đại lượng mà kẻ tấn công có thể trích xuất, và phần thu được của một sandwich bị giới hạn chính xác bởi khoảng trống bạn đã để lại. Đặt trượt giá là một quyết định bảo mật, không phải một công tắc tiện lợi.
- MEV không phải là một khối thống nhất: frontrun và sandwich là độc hại; backrun và chênh lệch giá atomic là vô hại và thậm chí hữu ích, vì chúng giữ cho giá on-chain nhất quán. Việc giảm thiểu tốt sẽ triệt tiêu loại đầu và phân phối lại loại sau.
- Phản ứng của ngành công nghiệp chuyển từ PGA (các cuộc chiến gas công khai, Flash Boys 2.0, năm 2019) sang Flashbots / bundle / PBS (các cuộc đấu giá riêng tư niêm phong) sang MEV-Share (trả lại giá trị backrun cho người dùng) và, tiếp theo, PBS được ghim vào giao thức.
- Với tư cách là một trader, các biện pháp phòng thủ của bạn là trượt giá chặt chẽ theo từng pool, các RPC riêng tư (Flashbots Protect, MEV Blocker), và các sàn đấu giá theo lô — và nhận thức rằng sự an toàn trên L2 hiện tại là một giả định về niềm tin vào sequencer, không phải một định luật vật lý.
Bài viết chênh lệch giá atomic và flash loan đảm nhận phía của searcher trong bảng này — cách trích xuất vô hại được xây dựng, với vốn vay và các khoản revert nguyên tử làm mạng lưới an toàn. Bài viết thanh khoản tập trung Uniswap v3 xem lại toán học tích không đổi ở trên và cho thấy cách thanh khoản tập trung định hình lại đường cong tác động giá — và do đó là ngân sách sandwich — mà chúng ta đã suy ra ở đây. Mempool là một khu rừng tối. Giờ đây bạn đã biết điều gì đang săn mồi trong đó.
Tài liệu tham khảo
- 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.
- Tài liệu Flashbots: MEV-Boost, MEV-Share, Flashbots Protect, hoàn tiền MEV (docs.flashbots.net).
- Ethereum PBS / EIP-7732 (tách biệt proposer-builder được ghim vào giao thức), tài liệu về bản nâng cấp Glamsterdam.
- MEV Blocker (mevblocker.io); thiết kế đấu giá theo lô của CoW Protocol.
- Private MEV Protection RPCs: A Benchmark Study (arXiv:2505.19708, 2025).
Tác Giả
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.