Tất cả bài viết
Hướng dẫn

Tấn công sandwich trên Solana: cách bảo vệ khỏi MEV

Lệnh swap báo thành công nhưng tiền vẫn rò ra. Tấn công sandwich làm gì trong một block, và cách siết trượt giá, chia nhỏ lệnh để bot hết lãi.

14 phút đọc J Tools Editorial
Minh họa biên tập cho bài hướng dẫn về tấn công sandwich và cách bảo vệ khỏi MEV trên Solana

Màn hình báo swap thành công, biểu đồ vẫn phẳng như cũ. Nhưng số token về ví ít hơn con số bạn nhìn thấy lúc bấm xác nhận một chút. Phần chênh vài đô đó có tên riêng của nó: tấn công sandwich.

Các con số được báo cáo ước tính bot sandwich đã rút khỏi tay trader thường trên Solana khoảng 500 triệu đô, mỗi lần vài đô, trong lúc biểu đồ trông rất yên. Bài này đi qua việc một tấn công sandwich làm gì gọn trong một block, vì sao MEV vẫn chạy được trên Solana, và lớp phòng thủ nào bạn bật được ngay hôm nay.

Tấn công sandwich là gì

Swap là đổi token này lấy token kia, giống đổi đô sang euro ở quầy sân bay. Khác ở chỗ chính lệnh mua của bạn đẩy giá nhích lên một chút, vì pool vốn hoạt động như vậy.

Tấn công sandwich là khi một con bot kẹp lệnh của nó vào cả trước lẫn sau lệnh của bạn để ăn phần chênh ở giữa. Nó thấy lệnh đang bay tới rồi làm ba việc, tất cả gọn trong một block. Block là gói giao dịch mà mạng xác nhận cùng lúc, và Solana đóng một block trong chưa tới một giây.

  1. Nó mua đúng token đó ngay trước bạn, đẩy giá lên.
  2. Lệnh của bạn vào ngay sau, nên khớp ở mức giá đã bị đẩy.
  3. Con bot bán ngay lập tức tại mức giá mà chính lệnh của bạn vừa nâng lên, rồi bỏ túi phần chênh.

Bạn là phần nhân ở giữa, con bot là hai lát bánh mì. Lệnh của bạn vẫn hiện thành công nên bạn đi tiếp. Biểu đồ trông không đổi vì cả chiều đi lẫn chiều về kết thúc trong cùng một khoảnh khắc.

MEV là gì và vì sao chuyện này xảy ra trên Solana

Cỗ máy phía sau có tên là MEV, viết tắt của Maximum Extractable Value. Nói thẳng ra, đó là khoản tiền bot vắt ra được bằng cách đảo thứ tự hoặc chèn giao dịch quanh lệnh của bạn. Ai quyết định thứ tự giao dịch trong một block, người đó có cơ hội kiếm lời từ chính thứ tự ấy.

Trên Ethereum, các giao dịch chờ xác nhận ngồi chung trong một phòng chờ công khai gọi là mempool. Solana không có phòng chờ kiểu đó.

Lệnh của bạn chạy qua nhà cung cấp kết nối, tức dịch vụ đẩy giao dịch của bạn vào mạng, rồi tới thẳng validator đang dựng block kế tiếp. Vậy bot nhìn thấy lệnh của bạn bằng đường nào? Có hai chỗ rò.

  • Một số nhà cung cấp kết nối lặng lẽ chuyền lệnh đang chờ của bạn cho các mạng bot mà họ có thoả thuận sẵn.
  • Hàng đợi của chính validator đang dựng block có thể bị đọc bởi những con bot làm việc cùng nó.

Nên vấn đề trên Solana không phải một phòng chờ bằng kính, mà là hai cánh cửa hông bỏ ngỏ. Phần lớn các cú đánh này được nhét vào qua Jito, thứ cho phép gửi một gói giao dịch đã niêm phong, gọi là bundle, kèm thứ tự cố định và một khoản tip, để validator nhận trọn gói hoặc không nhận gì cả.

Chính cơ chế bundle mà bot lợi dụng lại thành áo giáp khi bạn là người dùng nó. Nó bảo đảm gì và không bảo đảm gì nằm trong bài Jito bundle bảo đảm những gì, còn luật nhận trọn gói hoặc không nhận gì được ghi thẳng trong tài liệu chính thức của Jito.

Một cú sandwich diễn ra trong chưa tới một giây

Đặt số thật vào cho dễ hình dung. Giả sử bạn swap 1.000 đô tiền SOL sang một memecoin nhỏ và để mức bảo vệ giá mở toang. Toàn bộ trình tự dưới đây nằm gọn trong một block.

  • Con bot thấy lệnh mua 1.000 đô đang tới, mua cắt trước bạn trong tích tắc và đẩy giá lên khoảng 5%.
  • Lệnh của bạn khớp ở mức tệ hơn, nên số coin nhận về ít hơn con số màn hình báo lúc đầu.
  • Con bot bán ngay sau đó, tại mức giá lệnh của bạn vừa nâng lên, và đi ra với khoảng 40 đô.

Ví của bạn hiện một lệnh swap thành công và memecoin nằm trong tay. Khoản 40 đô rò ra thì vô hình, trừ khi bạn quay lại đối chiếu tỷ giá đã kỳ vọng với tỷ giá thật sự nhận được. Nhân con số đó với hàng nghìn lệnh mỗi ngày là ra những tổng số mà người ta báo cáo.

Trượt giá là lớp phòng thủ miễn phí mạnh nhất

Nếu chỉ nhớ một thứ từ bài này, hãy nhớ trượt giá. Đó là mức giá xấu đi tối đa mà bạn chấp nhận trước khi lệnh tự hủy. Giống như dặn bạn mình: mua ổ bánh mì giá 3 đô, nhưng nếu vượt 3 đô 30 xu thì thôi.

Một mức trần chặt là cái nắp đậy lên phần bot có thể lấy của bạn. Nếu nó đẩy giá vượt ngưỡng bạn đặt, lệnh của bạn hủy ngay, và cả chiếc sandwich sụp tại chỗ. Con bot ôm lại đống token nó vừa mua để bẫy một lệnh chưa từng xảy ra.

Lệnh bị hủy chỉ tốn đúng một khoản phí mạng nhỏ xíu. Tài liệu về giao dịch của Solana ghi rõ cả hai vế: một giao dịch thành công hoặc revert nguyên khối, và phí bị trừ trong cả hai trường hợp. So với một cú sandwich trót lọt ăn theo phần trăm cả lệnh, đây là phía rẻ hơn hẳn.

Siết tới đâu thì tuỳ độ sâu của pool. Pool là đống chung gồm hai token mà lệnh swap đổi vào đó. Pool sâu như cặp SOL với USDC có rất nhiều tiền bên trong, lệnh gần như không đẩy nổi giá, nên trần giữ thật chặt được.

Pool mỏng thì ngược lại: nhỏ và hay giật, kiểu một memecoin vừa ra lò, nên phải chừa thêm một chút không thì lệnh cứ hủy hoài.

Loại poolVí dụTrượt giá gợi ý
Pool sâu và lớnSOL ghép cặp với USDC0,5% đến 1%
Pool cỡ vừaMột token cỡ trung đã đứng được1% đến 2%
Pool mỏng và mớiMột memecoin vừa ra lò2% đến 3%

Đặt trượt giá lên mức khổng lồ như 50% tương đương hét lên rằng khớp lệnh cho tôi ở bất kỳ giá nào. Nó mời đúng mọi con bot sandwich đang canh vào ăn. Đi hướng ngược lại, để mỏng dính như 0,1% trên một memecoin hay giật thì lệnh của bạn cứ hủy vì những nhịp nhún bình thường, mà chẳng nhận lại chút bảo vệ nào. Hãy khớp vùng với pool.

Hình minh họa một rãnh dẫn mở đặt cạnh một van một chiều đang đóng lại sau giọt nước, cho thấy trượt giá chặt giới hạn phần có thể bị rút ra

Con số chi tiết hơn theo từng loại token và từng route nằm trong bài chọn mức trượt giá cho đúng pool.

Bốn bước tránh tấn công sandwich

Đây là bốn bước cho một người bình thường vào một lệnh bình thường, làm theo thứ tự.

  1. Siết trượt giá theo các vùng ở bảng trên. Riêng bước này đã đánh bật phần lớn các cú đánh nhắm vào lệnh nhỏ.
  2. Dùng một công cụ swap một chạm có route tử tế. Công cụ swap token một chạm đi qua Jupiter, hiện báo giá trực tiếp trước khi bạn ký, và chạy các bước kiểm tra thực thi trên chuỗi thay vì phát lệnh của bạn ra bừa bãi.
  3. Giữ lệnh nhỏ, hoặc chia một lệnh lớn thành nhiều phần. Phần lớn bot sandwich bỏ qua những lệnh dưới khoảng 500 đến 1.000 đô, vì phí mạng cộng tip ăn hết lời của chúng. Nếu cần chuyển một khoản lớn mà không muốn thành mục tiêu, công cụ chia swap nhiều ví chạy cùng một lệnh swap qua vài ví theo thứ tự chặt chẽ, biến một lệnh to thành nhiều lát nhỏ nằm dưới ngưỡng của bot. Phí hiện tại hiển thị trên trang công cụ.
  4. Soi pool trước khi chạm vào. Một token mà quyền sở hữu dồn vào vài ví là pool dễ bị thao túng hơn. Công cụ snapshot holder token cho thấy ai đang giữ và mức độ tập trung tới đâu.

Sự thật khiến người mới yên tâm nhất: bot thường bỏ qua lệnh nhỏ. Nếu bạn swap 50 hay 100 đô với mức trượt giá hợp lý, gần như chắc chắn bạn nằm dưới radar. Vùng nguy hiểm bắt đầu khi lệnh đủ lớn để bõ công một con bot.

Năm 2026 có gì đổi khác

Năm nay phía phòng thủ cũng bận rộn, và ba thay đổi đang vẽ lại thế trận của bot sandwich trên Solana.

  • Jito DontFront: ép lệnh của bạn nằm ở vị trí đầu tiên của bundle, chặn đứng cú mua cắt ngay trước bạn. Nó giúp được nhiều, nhưng không chặn mọi biến thể rộng hơn.
  • JitoBAM, mempool mã hoá: lệnh của bạn được giữ kín bằng phần cứng bảo mật cho tới đúng khoảnh khắc nó thực thi. Bot không lên kế hoạch quanh thứ nó không đọc được. Cái này đang triển khai dần.
  • Bản nâng cấp Alpenglow: đang làm dở, kéo mốc finality, tức thời điểm một giao dịch trở thành vĩnh viễn, xuống dưới khoảng 150 mili giây, nhanh hơn trước chừng 100 lần. Khe thời gian mà bot sống nhờ bị bóp lại.

Không thứ nào là một nút bấm thần kỳ. Phòng thủ đi theo lớp, và lớp nào hợp với bạn thì tuỳ quy mô lệnh và độ sâu pool.

Tình huống của bạnLớp phòng thủ hợp lý
Lệnh nhỏ, dưới khoảng 500 đôTrượt giá chặt thường là đủ, bot hay bỏ qua bạn
Một lệnh lớn từ 1.000 đô trở lênTrượt giá chặt, cộng chia nhỏ lệnh ra nhiều ví
Giao dịch một memecoin mới, pool mỏngSoi pool trước, rồi đặt 2% đến 3%
Vào lệnh đồng loạt lúc mở bán, dành cho người thạoBundle niêm phong của chính bạn để sniper không chen vào được

Nâng cao: cho người mở bán token và chạy nhiều ví

Phần này dành cho người đang chạy một đợt mở bán token hoặc điều phối nhiều ví cùng lúc. Nếu bạn là trader bình thường, bỏ qua cũng không sao.

Khi mở bán một token và muốn vài ví của chính mình vào cho gọn, con đường mở để lại khe hở cho sniper, tức những con bot chạy đua mua ngay khoảnh khắc token sống dậy.

Gửi bundle niêm phong của chính bạn, một gói thứ tự cố định mà validator nhận trọn hoặc không nhận gì, tức là khoá cứng thứ tự các lệnh của bạn. Không con bot bên ngoài nào chèn được một giao dịch vào giữa. Ngày mở bán, các ví của bạn đáp xuống cùng nhau. Cách những con bot đó vận hành nằm trong bài sniper bot hoạt động ra sao.

Hình minh họa một hàng ví dồn vào chung một bundle niêm phong, với bóng một con bot mờ dần bị chặn lại bên ngoài dấu ngoặc

Công cụ gộp lệnh thành bundle mua từ nhiều ví trong cùng một block qua một Jito bundle, hỗ trợ Raydium, Pump.fun và Moonshot. Ý tưởng thứ tự niêm phong đó áp dụng y hệt cho lượt thoát, và phí hiện tại hiển thị trên trang công cụ.

Những thứ trông như phòng thủ nhưng không phải

Vài mẹo phổ biến chỉ tạo cảm giác an toàn giả. Đừng dựa vào chúng.

  • Tắt bước kiểm tra preflight. Tắt lớp kiểm tra trước khi gửi không giấu được lệnh của bạn khỏi bot, nó chỉ gỡ mất một thanh chắn và thả cho một lệnh chắc chắn hỏng đi qua.
  • Giao dịch lúc ba giờ sáng. Bot không ngủ. Chúng là phần mềm chạy trên máy chủ hai mươi tư giờ một ngày, và giờ yên ắng với người là giờ bình thường với chúng.
  • Cái huy hiệu ghi sàn không có sandwich. Ngôn ngữ marketing không phải một lời bảo đảm. Hãy hỏi nó hoạt động thế nào, nếu câu trả lời mơ hồ thì coi đó là đồ trang trí.
  • Để trượt giá 0,1% cho mọi thứ. Trên pool sâu thì ổn, nhưng trên một memecoin mỏng nó chỉ làm lệnh hỏng liên tục trong khi bạn tưởng mình được bảo vệ.

Sandwich, front-running và back-running khác nhau ra sao

Ba từ này hay bị dùng lẫn, nhưng chúng mô tả những nước đi khác nhau của bot quanh giao dịch của bạn.

  • Front-running là một lệnh mua đơn lẻ đặt ngay trước lệnh của bạn. Con bot thấy lệnh đang tới, vào trước, rồi cưỡi lên nhịp giá mà lệnh của bạn tạo ra.
  • Back-running là một lệnh đơn lẻ đặt ngay sau lệnh của bạn, thường để hớt khoảng chênh giá mà lệnh của bạn vừa mở, và thường không lấy trực tiếp của bạn đồng nào.
  • Tấn công sandwich là cả hai cùng lúc. Bot chặn đầu bằng một lệnh mua, để lệnh của bạn đẩy giá lên, rồi bán ngược vào đúng khoảng trượt giá bạn để hở.

Vậy nên mọi cú sandwich đều chứa một cú front-run, nhưng không phải cú front-run nào cũng là sandwich. Đó là lý do trượt giá chặt quan trọng đến thế: vế bán phía sau chỉ có lãi nếu mức trần của bạn còn chừa đủ chỗ cho nó.

Câu hỏi thường gặp về tấn công sandwich

Bị sandwich rồi có lấy lại tiền được không?

Không. Lệnh đã tất toán trên chuỗi và phần lời của bot cũng rời đi trong cùng block đó, nên chẳng còn ai để đòi. Thứ bạn đổi được là lệnh kế tiếp: trần chặt hơn cộng một route cẩn thận hơn làm cú đánh ấy hết lãi.

Lệnh nhỏ có bị sandwich không?

Hiếm. Phần lớn bot sandwich bỏ qua những lệnh dưới khoảng 500 đến 1.000 đô, vì phí mạng và tiền tip ăn hết lời. Một lệnh swap 100 đô với mức trượt giá hợp lý thường không bõ công một con bot.

Dùng RPC riêng có chặn được sandwich không?

Chỉ một phần. Solana không có mempool công khai, nên chỗ rò nằm ở những nhà cung cấp chia sẻ luồng lệnh và ở hàng đợi của validator dựng block. Một nhà cung cấp giữ kín lệnh của bạn làm giảm mức phơi ra, nhưng phần việc nặng vẫn thuộc về trượt giá chặt.

Jito có chặn tấn công sandwich không?

Một phần. Luật vị trí đầu, tức DontFront, đẩy lệnh của bạn lên đầu bundle nên chặn được cú sandwich đơn giản nhất. Nó không xoá hết mọi biến thể, và cũng không thay được việc đặt trượt giá tỉnh táo. Với một lệnh swap đơn lẻ bình thường, bạn không cần bundle.

Nên siết trượt giá tới mức nào?

Pool trả lời câu này. Trên cặp sâu như SOL với USDC, 0,5% đến 1% vừa khớp vừa chặn được giá xấu. Token cỡ trung đã đứng được thì 1% đến 2%, còn memecoin vừa ra lò cần 2% đến 3%. Nếu một lệnh chỉ đi được khi nới rộng hơn nhiều, hãy thu nhỏ lệnh thay vì mở trần.

Lệnh tiếp theo nên bắt đầu từ đâu?

Ba việc là đủ. Khớp trần với độ sâu pool, chia khoản lớn thành nhiều lát, và nếu là token lần đầu gặp thì xem phân bổ holder trước. Bundle niêm phong để dành cho lúc bạn tự mở bán token.

Điều này để lại gì cho một trader bình thường

Bot sandwich là có thật, chúng đã lấy đi số tiền không nhỏ, và nhiều năm liền phần lớn mọi người không biết mình đang bị gọt. Phần dễ thở là cách chữa cho trader thường gần như miễn phí.

Với đại đa số lệnh lẻ cỡ nhỏ, riêng trượt giá chặt đã đủ biến bạn thành mục tiêu không hấp dẫn. Cách đọc độ sâu nằm trong bài đọc độ sâu pool thanh khoản Solana, còn chọn nơi để swap thì xem so sánh Jupiter, Raydium và Orca.

Bài viết này mang tính giáo dục, không phải lời khuyên tài chính. Giao dịch token có rủi ro thật, gồm cả rủi ro mất tiền, và không lớp phòng thủ nào xoá được rủi ro đó. Hãy tự tìm hiểu, tự quyết định, và chỉ giao dịch phần bạn chịu mất được.

J
Tác giả
J Tools Editorial

Bài viết từ đội ngũ J tools.

Xem tất cả bài viết của J Tools Editorial →

Bài viết liên quan