Swap DEX: tác động giá, trượt giá và MEV
Tìm hiểu độ sâu pool ảnh hưởng đến tác động giá dự kiến ra sao, mức nhận tối thiểu giới hạn một swap đang chờ như thế nào và vì sao biên độ trượt giá rộng có thể chấp nhận mức khớp lệnh kém hơn.
Trong hướng dẫn nàyTác động giá, trượt giá và biên độ trả lời những câu hỏi khác nhau
Tóm tắt ngắn
Báo giá trên DEX có thể thay đổi vì hai lý do: chính swap làm dịch chuyển giá pool, hoặc giao dịch khác thay đổi giá trước khi giao dịch của bạn được thực hiện. Tác động giá mô tả trường hợp thứ nhất; trượt giá là thay đổi giữa báo giá và kết quả khớp cuối cùng. Biên độ trượt giá đặt ra giới hạn cho kết quả, chứ không hứa hẹn mức giá tốt hơn.
Tác động giá, trượt giá và biên độ trả lời những câu hỏi khác nhau
Tác động giá xảy ra khi lệnh của bạn lớn so với thanh khoản hiện có và chính lệnh đó làm dịch chuyển giá pool. Báo giá sát thực tế thường đã tính đến ảnh hưởng này: trong pool nông, lệnh lớn nhận được giá khớp trung bình kém hơn lệnh nhỏ. Trượt giá là chênh lệch giữa lượng dự kiến lúc tạo báo giá và kết quả khi giao dịch được thực hiện. Swap khác, biến động thị trường, độ trễ hoặc tuyến đường khác có thể làm thay đổi kết quả trong lúc chờ.
Biên độ trượt giá là điều kiện mà swap phải đáp ứng. Với swap cố định lượng đầu vào, biên độ này thường được thể hiện thành mức nhận tối thiểu; nếu kết quả khớp thấp hơn, hợp đồng có thể hoàn tác giao dịch. Biên độ không loại bỏ tác động giá đã nằm trong báo giá và cũng không cho biết trượt giá sẽ lớn đến đâu. Hướng dẫn của Uniswap về tác động giá và trượt giá giá cũng phân biệt hai khái niệm. Mỗi giao diện có thể dùng cách tính hoặc nhãn khác nhau.
Vì sao báo giá AMM kém hơn khi quy mô lệnh tăng
Sàn dùng sổ lệnh ghép các lệnh mua và bán đang chờ ở nhiều mức giá. AMM tích số không đổi thì tính swap dựa trên lượng dự trữ token trong pool. Trong mô hình đơn giản với hai token, x × y = k. Mua thêm một token sẽ rút thêm token đó khỏi pool và đưa token còn lại vào, nên tỷ lệ trao đổi thay đổi trong quá trình giao dịch. Lệnh càng lớn so với độ sâu có thể sử dụng thì giá khớp trung bình càng kém.
Đây là mô hình, không phải quy tắc chung cho mọi DEX. Tài liệu nhà phát triển của Uniswap mô tả cấu trúc tích số không đổi của v2 và phân biệt với thanh khoản tập trung theo các khoảng giá ở v3 và v4, nơi hooks và quy tắc phí khác cũng có thể ảnh hưởng. Báo giá có thể gộp nhiều pool hoặc nền tảng. Hãy so sánh lượng dự kiến cho đúng quy mô lệnh và tuyến đường này, thay vì giá gần nhất trên biểu đồ hoặc tổng giá trị bị khóa trong pool. Tài liệu swap Uniswap v2 giải thích cơ chế đó.

Ví dụ tính toán: swap 10.000 USDC với pool nông
Giả sử pool giả định có 100 ETH và 200.000 USDC, không thu phí swap, không có biến động giá bên ngoài và tuân theo đường cong tích số không đổi. Tỷ lệ ban đầu là 200.000 ÷ 100 = 2.000 USDC cho mỗi ETH. Khi đưa vào 10.000 USDC, dự trữ USDC của pool tăng lên 210.000. Để giữ tích số không đổi, dự trữ ETH giảm còn 20.000.000 ÷ 210.000 = khoảng 95,238095 ETH. Người giao dịch nhận khoảng 4,761905 ETH.
Theo tỷ lệ ban đầu, 10.000 USDC mua được 5 ETH. Phần thiếu 0,238095 ETH bằng khoảng 4,76% lượng nhận được nếu không có tác động giá. Giá khớp trung bình là 10.000 ÷ 4,761905 = 2.100 USDC mỗi ETH, cao hơn 5% so với tỷ lệ trước swap. Giá biên của pool sau giao dịch là 210.000 ÷ 95,238095 = 2.205 USDC mỗi ETH. Mức thiếu so với lượng không chịu tác động, giá khớp trung bình và giá biên mới là các cách so sánh khác nhau. Báo giá thực tế còn tính phí và hình dạng thanh khoản trên tuyến đường. Đây là phép tính giả định, không phải dự báo thị trường.
Tách phí pool khỏi tác động của đường cong
Giữ nguyên lượng dự trữ giả định nhưng giả sử có phí 0,30% trên đầu vào theo một cách tính phí cụ thể. Lượng đầu vào dùng trong báo giá tích không đổi là 10.000 × (1 − 0,003) = 9.970 USDC. Vì vậy, lượng đầu ra là 100 × 9.970 ÷ (200.000 + 9.970), khoảng 4,748297 ETH. Con số này thấp hơn khoảng 0,013607 ETH so với 4,761905 ETH khi không tính phí trên cùng đường cong. So với 5 ETH theo tỷ lệ ban đầu, mức thiếu hụt tổng cộng khoảng 0,251703 ETH. Nếu lấy kết quả không phí làm bước trung gian, khoảng 0,238095 ETH được quy cho tác động của đường cong và thêm 0,013607 ETH cho phần điều chỉnh phí. Cách chia này phụ thuộc vào mốc so sánh.
Mức 0,30% là giả định, không phải phí chung cho mọi DEX. Cách điều chỉnh đầu vào này theo phép tính phí của thư viện getAmountOut trong Uniswap v2. Tuy vậy, hợp đồng vẫn ghi nhận toàn bộ đầu vào trong dự trữ; việc dùng 9.970 USDC làm đầu vào hiệu dụng trong công thức không có nghĩa chỉ từng đó đi vào pool. Pool khác có thể dùng mức phí, cơ sở tính phí khác hoặc cộng nhiều khoản phí. Tuyến nhiều bước có thể phát sinh phí ở từng pool, ngoài phí giao diện và chi phí mạng. Hãy kiểm tra tuyến thực tế và bảng phí thay vì áp dụng tỷ lệ ví dụ này cho mọi swap.
Mức nhận tối thiểu là giới hạn, không phải kết quả báo giá
Giả sử tuyến đường báo giá 4,7619 ETH cho cùng lượng đầu vào và giao diện áp dụng biên độ 1%. Mức nhận tối thiểu sẽ khoảng 4,7143 ETH: 4,7619 × (1 − 0,01). Kết quả 4,72 ETH đáp ứng giới hạn; 4,70 ETH thấp hơn ngưỡng nên swap có thể bị hoàn tác theo điều kiện bảo vệ của tuyến đó. Báo giá vẫn là 4,7619 ETH. Mức tối thiểu chỉ là kết quả kém nhất mà giao dịch đã gửi còn chấp nhận.
Giới hạn chặt hơn có thể khiến một giao dịch hợp lệ thất bại nếu giá biến động lúc mạng tắc nghẽn hoặc báo giá đã cũ. Giới hạn rộng hơn cho phép kết quả kém hơn trước khi giao dịch bị từ chối. Tài liệu nhà phát triển Uniswap mô tả đầu ra tối thiểu là điều kiện bảo vệ, nhưng tham số và cách thất bại tùy thuộc router hoặc sản phẩm. Giao dịch đã được đưa vào block rồi hoàn tác vẫn có thể phát sinh chi phí mạng tùy chain và quy trình. Đừng tăng biên độ chỉ để xóa thông báo lỗi; trước tiên hãy kiểm tra xem báo giá, token, tuyến đường, phí hay điều kiện mạng có thay đổi không.
Thời gian chờ tạo ra biến động không có trong báo giá
Giữa lúc ký và lúc được đưa vào block, swap khác có thể làm thay đổi dự trữ. Giao dịch arbitrage có thể kéo giá pool gần với giá ở thị trường khác; biến động nhanh cũng có thể khiến báo giá cũ không còn thực tế. Lệnh của bạn giữ nguyên nhưng lượng cuối cùng vẫn có thể thay đổi. Trên một số chain, mức phí gas cao hơn có thể ảnh hưởng thứ tự đưa vào block nhưng không đảm bảo thời điểm hoặc giá khớp. Thời hạn có thể từ chối giao dịch chờ quá lâu; nó không giữ nguyên báo giá trước đó.
Hãy tách ước tính lúc báo giá khỏi biên nhận cuối cùng. Tác động giá là ảnh hưởng dự kiến của lệnh lên thanh khoản của tuyến đường. Thay đổi bổ sung sau khi tạo báo giá là trượt giá thực hiện theo mốc tham chiếu mà giao diện sử dụng. Một số giao diện gộp cả hai vào một cảnh báo hoặc dùng cách so sánh khác. Nếu cần đối chiếu sau này, hãy lưu báo giá, thời điểm, tuyến đường và mức nhận tối thiểu trước khi ký.
Biên độ rộng có thể bị khai thác qua sandwich MEV
Sandwich là một dạng giá trị có thể trích xuất tối đa (MEV). Searcher theo dõi một swap đang chờ, đặt giao dịch trước để làm dịch chuyển giá pool theo hướng bất lợi cho người dùng, để swap của người dùng được thực hiện rồi giao dịch theo hướng ngược lại để đóng vị thế. Người dùng có thể nhận nhiều hơn mức tối thiểu đã gửi nhưng vẫn chịu giá kém hơn báo giá ban đầu. Giới hạn đầu ra chặt có thể khiến một số kết quả bất lợi bị hoàn tác, nhưng không ngăn mọi chiến lược sắp xếp giao dịch hoặc biến động thị trường thông thường.
Hướng dẫn MEV của Ethereum.org giải thích thứ tự của giao dịch sandwich và vì sao người dùng bị ảnh hưởng có mức khớp kém hơn. Không phải MEV nào cũng là tấn công: arbitrage có thể đưa giá pool gần với thị trường khác, trong khi sandwich có thể làm xấu mức khớp của người dùng. Các tuyến giao dịch riêng tư như Flashbots Protect mô tả biện pháp và điều kiện bảo vệ của riêng họ. Phạm vi phụ thuộc chain và nhà cung cấp, không đảm bảo một mức giá cụ thể và khiến bạn phụ thuộc vào một tuyến giao dịch khác. Hãy kiểm tra mạng và điều kiện hiện được hỗ trợ.
Phí, hành vi token và tuyến đường làm thay đổi tổng kết quả
Lượng token nhận được không phải toàn bộ chi phí của swap. Hãy tách phí pool, phí giao diện nếu có, chi phí mạng, tác động giá đã nằm trong báo giá, trượt giá khi thực hiện và phí chuyển hoặc mua/bán riêng của token. Một số token có hành vi chuyển không tiêu chuẩn; swap có thể thất bại hoặc chuyển lượng khác với giả định ERC-20 thông thường. Việc cấp quyền cho token có thể là giao dịch riêng với chi phí mạng riêng.
Bộ tổng hợp tuyến đường có thể chia swap qua nhiều pool hoặc dùng token trung gian để cải thiện lượng báo giá. Cách này có thể giảm tác động giá trên một tuyến nhưng thêm lệnh gọi hợp đồng, phí hoặc rủi ro riêng của token. Báo giá không đảm bảo khớp tốt nhất trên mọi nền tảng. Hãy so sánh lượng đầu vào chính xác, lượng đầu ra dự kiến, mức nhận tối thiểu, đường đi qua pool, chi tiết phí, mạng và thời hạn. Đọc thêm các hướng dẫn về phê duyệt token, phí gas Ethereum và bridge cùng token wrapped.
Kiểm tra báo giá trước khi ký, sau đó đối chiếu biên nhận
Trước khi ký, hãy xác minh mạng và địa chỉ hợp đồng token; lượng đầu vào; tuyến đường và độ sâu pool; tác động giá được hiển thị; lượng đầu ra dự kiến và mức nhận tối thiểu; thiết lập trượt giá; thời hạn; phí pool, giao diện và mạng; cùng cảnh báo về token. Nếu đầu ra thấp bất thường, hãy so sánh với lượng đầu vào giả định nhỏ hơn hoặc tuyến đường khác. Nếu giao dịch thất bại, hãy tìm hiểu nguyên nhân trước khi gửi lại. Một lần thử thất bại vẫn có thể phát sinh chi phí mạng tùy chain và quy trình.
Sau khi thực hiện, hãy so sánh lượng token thực tế trong biên nhận với báo giá và mức nhận tối thiểu; ghi lại tuyến đường, phí, chi phí mạng và thời điểm. Đừng coi mức tối thiểu là đầu ra dự kiến hoặc cho rằng swap thành công đồng nghĩa đã tránh được mọi mức khớp bất lợi. Phép tính trong bài dùng pool tích số không đổi, không tính phí. Thanh khoản tập trung, tuyến nhiều bước, thuế token, giá oracle và thứ tự giao dịch riêng của từng chain có thể tạo kết quả khác.
Phân biệt bảo vệ cho đầu vào cố định và đầu ra cố định
Trong ví dụ trên, đầu vào được cố định ở mức 10.000 USDC và đặt mức ETH tối thiểu cần nhận. Đầu vào không đổi; nếu kết quả thấp hơn giới hạn thì việc thực hiện có thể bị từ chối. Với swap đầu ra cố định, trước tiên bạn chọn lượng ETH mong muốn. Khi đó lượng USDC cần dùng có thể vượt ước tính, nên thường đặt giới hạn đầu vào tối đa. Tài liệu nhà phát triển của Uniswap phân biệt đầu ra tối thiểu trong trường hợp đầu vào cố định với đầu vào tối đa trong trường hợp đầu ra cố định.
Vì vậy, con số 1% trên màn hình không bảo vệ cùng một lượng trong mọi swap. Hãy kiểm tra bạn cố định đầu vào hay đầu ra, token nào làm căn cứ cho giới hạn dưới hoặc trên, và bộ tổng hợp đã tính tuyến đường cùng phí vào báo giá chưa. Mức nhận tối thiểu là điều kiện theo đơn vị token, không phải bảo đảm giá trị bằng đô la. Nếu giá thị trường của token nhận được đồng thời giảm, giá trị quy đổi sang đô la vẫn thay đổi dù swap đạt mức tối thiểu. Giao dịch hoàn tất không có nghĩa báo giá ban đầu được bảo đảm.
Câu hỏi thường gặp
Q1Tác động giá và trượt giá có giống nhau không?
Không. Tác động giá đến từ lệnh của bạn so với thanh khoản pool. Trượt giá là chênh lệch giữa báo giá và kết quả cuối theo mốc tham chiếu của giao diện.
Q2Đặt slippage 1% có nghĩa tôi sẽ mất 1% không?
Không. Thường thì thiết lập này đặt giới hạn thực hiện so với báo giá. Kết quả có thể tốt hơn, swap có thể bị hoàn tác hoặc khớp gần giới hạn được phép.
Q3Biên độ hẹp hơn có ngăn được tấn công sandwich không?
Nó có thể thu hẹp các kết quả mà giao dịch chấp nhận, nhưng không loại bỏ MEV hoặc biến động thị trường thông thường. Tuyến riêng tư cũng có phạm vi và điều kiện riêng.
Nguồn và tài liệu đọc thêm
Báo lỗi
Chúng tôi sẽ soạn email kèm liên kết bài viết này. Mark chỉ nhận được báo cáo sau khi bạn gửi email
Kiểm tra nhanh
Đọc xong hướng dẫn? Hãy kiểm tra với 3 câu hỏi
Câu hỏi 01
Tác động giá trong một swap AMM đo lường điều gì?
Chọn một đáp án để xem giải thích