Giới thiệu
Các sàn giao dịch phi tập trung (DEX) dựa vào dự trữ Token để xác định giá hoán đổi, cho phép giao dịch Không cần cho phép , nhưng cũng vô tình tạo ra cơ hội MEV. Vì kẻ tấn công có thể sắp xếp lại, chèn hoặc xóa các giao dịch xung quanh các giao dịch Sàn phi tập trung (DEX) , chúng có thể khai thác sự chênh lệch giá tạm thời để kiếm lời thông qua các cuộc tấn công chênh lệch giá hoặc tấn công xen kẽ.
Tại sao tìm kiếm MEV lại chậm như vậy hiện nay?
Tìm kiếm MEV là một vấn đề tối ưu hóa: với một mempool và một môi trường Sàn phi tập trung (DEX) , chúng ta muốn đánh giá hàng nghìn, đôi khi là hàng triệu gói giao dịch có thể có và chọn gói có lợi nhuận cao nhất.
Để chẩn đoán các điểm nghẽn, chúng tôi đã xem lại bảy ví dụ MEV về chênh lệch giá trong lịch sử (xem Phụ lục) bằng hai công cụ hiện đại:
- Foundry, Máy ảo Ethereum (EVM) phía CPU nhanh nhất trong Rust
- Lanturn, một công cụ tìm kiếm MEV trong TypeScrip
Môi trường:
- Intel i7
- RTX3090Ti 24G
- Ổ cứng thể rắn 1T
- Ubuntu 22.04
Chúng tôi đã chạy lại 1.000 lần cho mỗi công cụ và đo lường cách thời gian được phân chia thành ba giai đoạn chính:
- Phân nhánh từ trạng thái mạng chính
- Tạo các gói đầu vào
- Thực hiện hợp đồng thông minh
Phát hiện của chúng tôi phù hợp với nghiên cứu trước đây: việc tạo đầu vào khá đơn giản (<1%), nhưng việc thực thi Máy ảo Ethereum (EVM) và phân nhánh lại chiếm ưu thế về độ trễ đầu cuối. Foundry chi tiêu:
- 80,89% thời gian phân nhánh (27,87 ms)
- 18,82% khi thực hiện hoán đổi (6,49 ms)
Lanturn thậm chí còn hoạt động kém hơn: tốc độ thực thi Máy ảo Ethereum (EVM) chậm hơn 17,8 lần và tốc độ phân nhánh chậm hơn 1,98 lần so với Foundry, mặc dù có đa luồng.
Tóm Short: Tìm kiếm MEV bị giới hạn bởi tốc độ thực thi của CPU và CPU không thể khám phá không gian tìm kiếm đủ nhanh.
Biên dịch MEV Bot thành mã GPU
Để thoát khỏi tình trạng tắc nghẽn CPU này, chúng tôi sử dụng GPU:
- Viết bot MEV trong Solidity (ví dụ: bộ định tuyến thực hiện phân xử đa bước nhảy)
- Biên dịch hợp đồng thông minh sang LLVM IR bằng mau
- Tạo mã PTX (lắp ráp CUDA) bằng cách sử dụng phần phụ trợ LLVM
- Thực thi nó một cách tự nhiên trên Threads GPU
Đây là bot Solidity mà chúng tôi sử dụng làm ví dụ chạy thử. Trình xử lý dự phòng của nó sẽ phân tích cú pháp một định dạng byte nén mô tả các lần hoán đổi, xác định loại Sàn phi tập trung (DEX) và gọi hàm swap() chính xác:
// SPDX-License-Identifier: UNLICENSEDpragma solidity 0.7.6;import "./libraries/uniswapv2/UniswapV2Pair.sol";import "./libraries/uniswapv3/UniswapV3Pair.sol";import "./libraries/sushiswap/SushiswapPair.sol";import "./libraries/pancakeswap/PancakeswapPair.sol";contract MEV {fallback(bytes calldata data) external payable returns (bytes memory) {uint256 amount = abi.decode(data[:32], (uint256));uint32 swap_len = uint32(abi.decode(data[32:], (bytes4)));uint32[] memory swap_vec = new uint32[](swap_len);uint32[] memory token_vec = new uint32[](swap_len);uint32 calldata_size = uint32(data.length);uint32 swaps_buf_size = (calldata_size - 32 - 4) / 2;for (uint32 i = 0; i < swap_len; i++) {swap_vec[i] = uint32(abi.decode(data[36 + i * 4:], (bytes4)));uint256 token_word = abi.decode(data[36 + swaps_buf_size + 32 * (i / 8):], (uint256));token_vec[i] = uint32(token_word >> (256 - 32 * (i % 8 + 1)));}for (uint32 i = 0; i < swap_len; i++) {bool reversed = token_vec[i] > token_vec[(i + 1) % swap_len];uint32 swap_u32 = swap_vec[i];uint8 dex_type = uint8(swap_u32 >> 24);address dex = address(swap_u32 & 0xFFFFFF);if (dex_type == 1) {amount = UniswapV2Pair(dex).swap(reversed, amount);} else if (dex_type == 2) {amount = UniswapV3Pair(dex).swap(reversed, amount)} else if (dex_type == 3) {amount = SushiswapPair(dex).swap(reversed, amount);} else if (dex_type == 4) {amount = PancakeswapPair(dex).swap(reversed, amount);} else if (dex_type == 5) {continue;}}return abi.encodePacked(amount);}}Sau khi biên dịch sang PTX, bot này sẽ trở thành mã GPU thực thi. Thay vì đánh giá từng gói một như CPU, chúng tôi khởi chạy hàng chục nghìn Threads, mỗi luồng kiểm tra một gói ứng viên khác nhau.
Thuật toán di truyền song song: Tìm kiếm hàng nghìn bó cùng một lúc
Thuật toán di truyền song song (GA) được sử dụng để tìm kiếm các bó trên GPU. Mỗi luồng GPU đại diện cho một cá thể (tức là một bó) trong quần thể. Ở mỗi thế hệ, thuật toán thực hiện:
- Lựa chọn – chọn các gói lợi nhuận cao nhất
- Sự giao thoa – kết hợp chúng lại thành các bó mới như con cái
- Đột biến – điều chỉnh DEX, mã thông báo hoặc thứ tự để có được các gói mới dưới dạng bất biến
- Đánh giá – chạy bot MEV với các gói bất biến trên GPU
Quy trình làm việc này cho phép chúng tôi khám phá không gian tìm kiếm rộng lớn cực kỳ nhanh chóng. Nhiều quần thể có thể được đánh giá đồng thời, cho phép phạm vi tìm kiếm rộng và sâu.
Kết quả hiệu suất
Bảng: Các cơ hội MEV mới được xác định trong các khối quý 1 năm 2025
| Lợi nhuận ETH | Doanh thu ETH | Gas ETH | Lợi nhuận USD | Doanh thu USD | USD Gas | |
|---|---|---|---|---|---|---|
| Trọng tài | 347,75 | 348,30 | 0,54 | 916.334,25 | 917.760,85 | 1.426,60 |
| Sandwich | 102,97 | 111.04 | 8.07 | 271.316,03 | 292.586,67 | 21.270,63 |
| Tổng cộng | 450,72 | 459,34 | 8.61 | 1.187.650,28 | 1.210.347,52 | 22.697,23 |
Qua các thử nghiệm, chúng tôi đạt được 3,3 triệu–5,1 triệu Số lượng giao dịch trên mỗi giây, vượt trội hơn Lanturn khoảng 100.000 lần. Dựa trên dữ liệu thực tế từ quý 1 năm 2025, hệ thống đã phát hiện ra các cơ hội MEV trải dài từ 2 đến 14 giao dịch, mang lại lợi nhuận khai thác 1,1 triệu đô la.
Chi phí thời gian chạy: Nhẹ và ổn định
MEVISOR giới thiệu hai loại chi phí chung: chi phí khởi động nguội và chi phí chung cho mỗi lần tìm kiếm.
Tăng cường lạnh (một lần)
Trước khi tìm kiếm, GPU phải tải bot PTX và khởi tạo bộ nhớ.
Quá trình này mất 7,03 giây nhưng chỉ diễn ra một lần và được phân bổ cho tất cả các lần tìm kiếm trong tương lai.
Chi phí thời gian chạy
Chi phí thời gian chạy chính là tải ảnh chụp nhanh trạng thái Sàn phi tập trung (DEX) vào bộ nhớ GPU.
Khi chúng tôi mở rộng quy mô từ 64 lên 540 nhóm Sàn phi tập trung (DEX) :
- Độ trễ tải vẫn ổn định ở mức ~0,30 giây
- Sử dụng bộ nhớ GPU tăng tuyến tính (774 MB → 1,58 GB)
Ngay cả với hàng trăm DEX, MEVISOR vẫn nằm trong giới hạn VRAM của GPU thông thường và duy trì chi phí thấp, có thể dự đoán được.
Phụ lục
Ví dụ về động lực
| Chiều dài | Block | Vốn (ETH) | Doanh thu (ETH ) | Chuỗi Sàn phi tập trung (DEX) | Chuỗi tài sản |
|---|---|---|---|---|---|
| 2 | 21536202 | 0,05 | 0,0002 | 0x1DC698b3d2995aFB66F96e1B19941f990A6b2662, 0x9081B50BaD8bEefaC48CC616694C26B027c559bb | 0x4c11249814f11b9346808179Cf06e71ac328c1b5, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 |
| 3 | 14079213 | 0,12 | 0,0009 | c926990039045611eb1de520c1e249fd0d20a8ea, 62ccb80f72cc5c975c5bc7fb4433d3c336ce5ceb, 77bd0e7ec0de000eea4ec88d51f57f1780e0dfb2 | 0x557B933a7C2c45672B610F8954A3deB39a51A8Ca, 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2, 0xe53EC727dbDEB9E2d5456c3be40cFF031AB40A55 |
| 4 | 12195667 | 0,64 | 0,0196 | 0x1f44e67eb4b8438efe62847affb5b8e528e3f465, 0x41ca2d9cf874af557b0d75fa9c78f0131c7f345c, 0x088ee5007c98a9677165d78dd2109ae4a3d04d0c, 0xa478c2975ab1ea89e8196811f51a7b7ade33eb11 | 0x6b175474e89094c44da98b954eedeac495271d0f, 0xbcda9e0658f4eecf56a0bd099e6dbc0c91f6a8c2, 0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e, 0x6b175474e89094c44da98b954eedeac495271d0f |
| 5 | 13734406 | 2.04 | 0,0452 | 0x60594a405d53811d3bc4766596efd80fd545a270, 0x1d42064fc4beb5f8aaf85f4617ae8b3b5b8bd801, 0x9f178e86e42ddf2379cb3d2acf9ed67a1ed2550a, 0xfad57d2039c21811c8f2b5d5b65308aa99d31559, 0x5777d92f208679db4b9778590fa3cab3ac9e2168 | 0x6b175474e89094c44da98b954eedeac495271d0f, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984, 0x514910771af9ca656af840dff83e8264ecf986ca, 0x6b175474e89094c44da98b954eedeac495271d0f |
| 6 | 14530401 | 0,41 | 0,0182 | 0xa478c2975ab1ea89e8196811f51a7b7ade33eb11, 0x5ab53ee1d50eef2c1dd3d5402789cd27bb52c1bb, 0x59c38b6775ded821f010dbd30ecabdcf84e04756, 0x9f178e86e42ddf2379cb3d2acf9ed67a1ed2550a, 0x153b4c29e692faf10255fe435e290e9cfb2351b5, 0x1f44e67eb4b8438efe62847affb5b8e528e3f465 | 0x6b175474e89094c44da98b954eedeac495271d0f, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9, 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984, 0x514910771af9ca656af840dff83e8264ecf986ca, 0x6b175474e89094c44da98b954eedeac495271d0f |
| 7 | 13731798 | 0,24 | 0,0202 | 0x1f44e67eb4b8438efe62847affb5b8e528e3f465, 0x153b4c29e692faf10255fe435e290e9cfb2351b5, 0x14243ea6bb3d64c8d54a1f47b077e23394d6528a, 0xd75ea151a61d06868e31f8988d28dfe5e9df57b4, 0x088ee5007c98a9677165d78dd2109ae4a3d04d0c, 0x41ca2d9cf874af557b0d75fa9c78f0131c7f345c, 0x1f44e67eb4b8438efe62847affb5b8e528e3f465 | 0x6b175474e89094c44da98b954eedeac495271d0f, 0xbcda9e0658f4eecf56a0bd099e6dbc0c91f6a8c2, 0x514910771af9ca656af840dff83e8264ecf986ca, 0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e, 0x6b175474e89094c44da98b954eedeac495271d0f |
| 8 | 13754757 | 2,48 | 0,0680 | 0xa478c2975ab1ea89e8196811f51a7b7ade33eb11, 0x5ab53ee1d50eef2c1dd3d5402789cd27bb52c1bb, 0x59c38b6775ded821f010dbd30ecabdcf84e04756, 0x1d42064fc4beb5f8aaf85f4617ae8b3b5b8bd801, 0x11b815efb8f581194ae79006d24e0d814b7697f6, 0xfcd13ea0b906f2f87229650b8d93a51b2e839ebd, 0xc0067d751fb1172dbab1fa003efe214ee8f419b6, 0x60594a405d53811d3bc4766596efd80fd545a270 | 0x6b175474e89094c44da98b954eedeac495271d0f, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9, 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984, 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2, 0xdac17f958d2ee523a2206206994597c13d831ec7, 0x4206931337dc273a630d328da6441786bfad668f, 0x6b175474e89094c44da98b954eedeac495271d0f |







