
Hệ thống oracles và giao dịch frontrunning
Tuyển chọn TechFlowTuyển chọn TechFlow

Hệ thống oracles và giao dịch frontrunning
Tìm hiểu sâu về giải pháp oracle của Angle và cách nó được xây dựng để giảm thiểu giao dịch front-running.
Biên dịch: Cộng đồng Đăng Sách
Đã có rất nhiều nghiên cứu được đầu tư vào thiết kế của Giao thức Angle. Mặc dù về hình thức cấu trúc có vẻ đơn giản, nhưng đằng sau đó là hàng loạt các khái niệm phức tạp cần hiểu rõ. Trong loạt bài viết này, chúng tôi sẽ đi sâu vào một số yếu tố của giao thức và giải thích lý do tại sao chúng lại được thiết kế như vậy.
Bài viết đầu tiên thảo luận về giải pháp oracles của Angle và cách nó được xây dựng nhằm giảm thiểu hiện tượng giao dịch trước (front-running).

Giới thiệu
Angle cho phép người dùng đúc và hủy agTokens (tiền ổn định) để đổi lấy các token khác. Các nhà giao dịch cũng có thể mở vị thế mua dài hạn trên các cặp tài sản thế chấp/tiền ổn định sẵn có. Đây không phải là các hợp đồng vĩnh viễn truyền thống, vì cân bằng không phụ thuộc vào tỷ lệ tài trợ, mà giá thực thi trực tiếp đến từ oracle.
Xét đến những trường hợp sử dụng này, giao thức cần một cách đáng tin cậy để định giá các tài sản có sẵn, nhằm đưa ra mức giá công bằng cho người dùng và tự bảo vệ khỏi việc bị giao dịch trước. Trong phần Hỏi đáp của bài viết này, Samcszun giải thích lý do tại sao điều này không đơn giản chỉ là sử dụng giá thị trường giao ngay.
Giao dịch trước là một vấn đề tồn tại lâu dài trong thị trường. Vấn đề nằm ở chỗ một số đối tượng tham gia có thể tiếp cận thông tin sớm hơn những người khác, từ đó tận dụng thông tin này để thu lợi nhuận phi rủi ro trong khi bên đối tác phải chịu rủi ro. Trước đây, việc ngăn chặn hiện tượng này trên chuỗi luôn rất khó khăn. Chi phí cao và tốc độ chậm của giao dịch Ethereum khiến các oracle khó cập nhật giá nhanh và thường xuyên. Điều này tạo ra độ trễ giữa giá ngoài chuỗi và trong chuỗi, giúp những kẻ giao dịch trước có thể khai thác kiếm lời.
Không phải tất cả các giao thức tiền ổn định đều quan tâm đến rủi ro giao dịch trước do độ trễ oracle gây ra. Trong trường hợp DAI của Maker, độ trễ oracle thường có lợi cho giao thức. Khi một người thấy vị thế của cô ấy sẽ bị thanh lý ở lần cập nhật oracle tiếp theo do giá giảm, cô ấy có động lực nạp thêm vốn vào kho, từ đó cải thiện sức khỏe và tỷ lệ thế chấp của giao thức.
Synthetix cho phép trao đổi giá trị oracle giữa tài sản tổng hợp và tài sản thế chấp, là một ví dụ điển hình cho thấy các giao thức tiền ổn định gặp khó khăn với giao dịch trước. Bài blog của họ tóm tắt lịch sử dài chống lại giao dịch trước, bao gồm một số cuộc tấn công mà họ từng trải qua.
Tương tự Synthetix, Angle cho phép trao đổi tài sản khi giá oracle ở trạng thái không trượt giá. Do đó, Angle cũng đối mặt với cùng vấn đề giao dịch trước. Đội ngũ lõi của Angle đã nỗ lực rất nhiều để ngăn chặn tình trạng này. Hai cải tiến chính được triển khai trong lĩnh vực này là: thiết kế oracle đặc thù và cấu trúc phí động. Trong bài viết này, chúng tôi sẽ giải thích thiết kế oracle của Angle và lý do đằng sau nó.
Giao dịch trước một lần cập nhật oracle: một ví dụ
Trước khi đi sâu vào giải pháp của Angle, hãy cùng cố gắng hiểu cách giao dịch trước có thể gây hại cho giao thức. Chúng ta sẽ xét một ví dụ trong đó ETH được chấp nhận làm tài sản thế chấp hỗ trợ tiền ổn định Angle.
Không có phí giao dịch
Giả sử một kẻ tấn công đang theo dõi giá ETH ngoài chuỗi và thấy rằng oracle Chainlink sắp cập nhật dữ liệu trên chuỗi với mức giá cao hơn (từ p0 lên p1, với p0 < p1). Kẻ tấn công này có thể gửi một giao dịch để hủy x tiền ổn định với giá p0, nhận về x/p0 ETH, sau đó bán lại ETH này cho giao thức khi giá đã cập nhật thành p1, từ đó thu lợi nhuận:

Do giao dịch trước lần cập nhật oracle này, phần lợi nhuận nói trên đã bị rút khỏi quỹ dự trữ của giao thức. Nếu đặt x = 100 ETH và p1 = 1.01 * p0 (giá tăng 1%), điều này đồng nghĩa kẻ tấn công đã lấy đi 1 ETH từ quỹ dự trữ của giao thức.
Có phí giao dịch
May mắn thay, việc thêm phí giao dịch có thể làm giảm vấn đề này, vì phí sẽ ăn mòn lợi nhuận của kẻ giao dịch trước, làm giảm cơ hội.
Ví dụ, nếu phí giao dịch khi đúc và hủy là hằng số và bằng nhau là f, thì một kẻ tấn công hủy x tiền ổn định với giá p0 và sau đó bán lại ETH cho giao thức với giá p1 sẽ đạt được lợi nhuận như sau:

So với trường hợp trước, phí đã làm giảm lợi nhuận:

Khi phí giao dịch là f=0.3% và theo ví dụ nêu trên, lợi nhuận của kẻ tấn công giờ chỉ còn 0.39 ETH.
Có phí giao dịch và hai nguồn oracle
Để giảm cơ hội này thêm nữa, chúng ta có thể dựa vào một oracle phụ trợ để có được hai nguồn giá khả dĩ: pC (giá Chainlink) và pU (giá Uniswap). Giao thức có thể tận dụng mức giá có lợi nhất (mức giá thấp hơn khi đúc, tức là mua token của người dùng, và mức giá cao hơn khi hủy, tức là bán ETH cho người dùng), từ đó khiến cơ hội giao dịch trước trở nên kém hấp dẫn hơn.
-
Hãy tưởng tượng một nhà giao dịch đang cố thu lợi từ cơ hội tương tự như trên, giả sử pC0 < pC1.
-
Mặt khác, ta có thể cho rằng pU là hằng số và gần với pC0 hơn, do đó:

Chúng ta sẽ thấy sau rằng do thiết kế thời gian trung bình giá trị trọng số (TWAP) của Uniswap, pU thường trễ so với pC.
-
Trong trường hợp này, kẻ tấn công cố thu lợi từ cơ hội tiềm năng sẽ mua token từ giao thức với giá pC0 (hủy tiền ổn định), nhận về x(1-f)/pC0 ETH, rồi bán lại với giá cao hơn là pU1, dẫn đến kết quả lãi/lỗ như sau:

Nếu giữ nguyên các con số trong ví dụ trên, kẻ tấn công sẽ chịu tổn thất 0.6 ETH trong thao tác này.
Giải pháp của Angle
Thiết kế của Angle được tạo ra nhằm loại bỏ hoàn toàn rủi ro giao dịch trước này. Do đó, giao thức sẽ triển khai cơ chế rất giống với ví dụ nêu trên. Trong phần này, chúng tôi sẽ tìm hiểu chi tiết hơn về các lựa chọn hiện có, tập trung vào tính cụ thể của thiết kế mà chúng tôi sẽ triển khai, và phân tích về lựa chọn khoảng thời gian TWAP của chúng tôi.
Lựa chọn
Các giải pháp oracle chính phù hợp với trường hợp sử dụng của Angle bao gồm:
-
Chainlink
-
Uniswap V3 TWAP
-
Maker Feeds
Chainlink là lựa chọn hiển nhiên: đây là một giải pháp oracle phi tập trung được sử dụng rộng rãi, cung cấp nhiều nguồn dữ liệu cho nhiều loại tài sản. Giá của họ đến từ nhiều nguồn khác nhau và được truyền qua mạng lưới relay phi tập trung, đảm bảo dữ liệu đáng tin cậy, dễ truy cập và khó bị thao túng. Tuy nhiên, một số nguồn dữ liệu thường chỉ được cập nhật sau khi có sự thay đổi giá "đáng kể" (ví dụ 0.5% đối với ETH/USD) hoặc sau một khoảng thời gian, nghĩa là giá Chainlink luôn trễ so với giá thị trường thực tế. Do đó, việc cập nhật giá Chainlink có thể bị giao dịch trước bằng cách xem giá ngoài chuỗi hoặc trong mempool.
Giá trung bình trọng số theo thời gian Uniswap V3 (TWAP) là một giải pháp oracle phổ biến và rõ ràng khác. Có thể truy vấn TWAP từ hợp đồng Uniswap để lấy giá trung bình theo thời gian của các token trong bể trong một khoảng thời gian cụ thể, từ vài giây đến 9 ngày. Giá được tính trung bình theo giá giữa hai token trong thời gian chỉ định. Với đặc điểm này, việc thao túng TWAP đòi hỏi lượng vốn lớn và thời gian dài, điều này thường không hiệu quả trong hầu hết các trường hợp.
Dù vậy, do TWAP là giá trung bình quan sát được từ các khối trước đó, chúng thường trễ so với giá thị trường thời gian thực hoặc thậm chí so với nguồn giá Chainlink. Nếu sử dụng riêng lẻ, chúng không đủ để bảo vệ giao thức khỏi giao dịch trước.
Hơn nữa, do TWAP chỉ báo cáo giá cặp token trên chuỗi, chúng không thể đáp ứng mục tiêu của giao thức trong việc cung cấp quyền truy cập vào các tài sản không được biểu diễn trên chuỗi (và do đó không có trong bể Uniswap), ví dụ như tiền ổn định ngoại hối.
Việc sử dụng Maker Oracles có thể là một lựa chọn khác cho Angle. Nhưng điều đó đồng nghĩa với việc phải tin tưởng MakerDAO và trải qua quy trình quản trị để xin truy cập dữ liệu giá. Các nguồn giá cũng bị giới hạn bởi những gì Maker sử dụng, điều này là chưa đủ đối với chúng tôi vì chúng tôi muốn truy cập tỷ giá ngoại hối.
Thiết kế của Angle: Chainlink + UniV3 TWAP
Xem xét những điều trên, quyết định được đưa ra là kết hợp oracle Chainlink của Giao thức Angle với TWAP Uni V3 10 phút. Điều này cho phép đạt được mức giá công bằng nhất có thể mọi lúc, đồng thời bảo vệ giao thức khỏi các cuộc tấn công giao dịch trước.
Nói chung, hợp đồng Angle sẽ so sánh giá từ hai kênh và sử dụng mức giá có lợi nhất cho giao thức. Với thiết kế này, việc giao dịch trước giao thức trở nên phức tạp hơn, vì để khai thác tỷ giá của giao thức, kẻ tấn công phải thao túng hoặc giao dịch trước cả hai oracle.
Cụ thể, hợp đồng của chúng tôi sẽ lấy mức giá tốt nhất cho mọi cặp tài sản biến động/tiền ổn định từ cả Chainlink và Uniswap, sau đó dùng oracle ngoại hối của Chainlink để chuyển đổi giá sang tiền pháp định cần thiết. Mỗi cặp tài sản thế chấp/tiền ổn định sẽ có một hợp đồng oracle chuyên dụng và nguồn giá độc lập.
Nó hoạt động như thế nào?
Ví dụ, giả sử người dùng muốn giao dịch trên cặp ETH/agEUR. Hợp đồng của chúng tôi cần lấy giá ETH/USD và USD/EUR. Nó sẽ giữ mức giá tốt nhất ETH/USD từ Chainlink và TWAP 10 phút từ bể ETH/USDC UniV3. Sau đó, nó sẽ lấy giá USD/EUR từ oracle ngoại hối của Chainlink.
Ví dụ: TWAP Uniswap ETH/USDC: 1900 USD (giao thức giả định USDC thường duy trì neo, tức là 1 USDC có giá trị 1 USD); Giá ETH Chainlink: 1850 USD; Giá USD Chainlink: 1.16 EUR.Nếu người dùng muốnđúcagEUR trong trường hợp này, giao thức sẽ sử dụng mức giá ETH/USD thấp hơn mà nó tìm thấy, tức là 1850 USD mỗi ETH từ Chainlink. Ngược lại, nếu trong cùng điều kiện, người dùng muốnhủyagEUR lấy wETH, giao thức sẽ sử dụng mức giá cao hơn, tức là TWAP Uni ETH/USDC là 1900. Trong cả hai trường hợp, giao thức sẽ sử dụng tỷ giá USD/EUR 1.16 từ Chainlink để chuyển đổi ETH/USD sang ETH/EUR.Tương tự, giao thức sẽ sử dụng mức giá cao nhất cho người dùng muốn mở hợp đồng vĩnh viễn, và mức giá thấp nhất cho người dùng muốn đóng hợp đồng.
Nói chung hơn:
-
Hợp đồng người dùng cần giá sẽ gọi tới hợp đồng oracle liên quan.
-
Tùy theo loại cặp, hợp đồng oracle có thể đọc báo giá từ UniV3 TWAP và Chainlink, hoặc chỉ từ Chainlink (ví dụ cho việc trao đổi stablecoin-stablecoin), rồi trả lại cho hợp đồng chính.
-
Tùy theo thao tác thực hiện (đúc, hủy, mở hay đóng), hợp đồng liên quan sẽ giữ mức báo giá tốt nhất cho giao thức và thực hiện giao dịch.
Lựa chọn khoảng thời gian TWAP Uni V3
Hợp đồng Angle sẽ sử dụng khoảng thời gian 10 phút cho TWAP. Lựa chọn này được cân nhắc kỹ lưỡng, vì các khoảng thời gian khác nhau có thể dẫn đến cấu trúc giá rất khác biệt.
Sự khác biệt giữa các khoảng thời gian
Trong trường hợp của Angle, về một mặt, khoảng thời gian nên đủ dài để tạo ra độ trễ đáng kể giữa giao thức và giá thị trường. Điều này thực sự cho phép có chênh lệch giá lớn hơn giữa giá đúc và hủy khi có biến động giá, đặc biệt khi rủi ro bị giao dịch trước trên Chainlink tăng gấp đôi. Ngoài ra, khoảng thời gian càng dài thì việc thao túng giá TWAP càng khó khăn, vì các quan sát gần đây ảnh hưởng ít hơn đến giá.
Mặt khác, giao thức vẫn cần đưa ra mức giá công bằng và cập nhật nhất cho người dùng: sử dụng khoảng thời gian quá rộng sẽ tạo ra khoảng cách giá quá lớn so với giá thị trường hiện tại, trong khi khoảng quá hẹp thì không mang lại chênh lệch giá mong muốn.
So sánh TWAP 10 phút và 60 phút với nguồn giá Chainlink
Để bạn hiểu lý do tại sao cuối cùng chúng tôi chọn khoảng thời gian 10 phút, dưới đây là biểu đồ so sánh TWAP ETH/USDC 10 phút và 60 phút với giá ETH/USD của Chainlink và giá đóng cửa của Coinbase.
Bạn có thể thấy khi chuyển đổi giữa các mức giá, tỷ lệ giới hạn trên và dưới mà giao thức sử dụng khi người dùng đúc/đóng và hủy/mở sẽ di chuyển giữa mức giá có lợi nhất từ Chainlink và TWAP Uniswap.


Mặc dù các khối TWAP 60 phút thường đưa ra giá xa thị trường, thì TWAP 10 phút lại tạo ra lớp đệm hữu ích cho nguồn giá Chainlink, đồng thời giữ giá đủ gần với thị trường.

Đáng chú ý là, từ biểu đồ đầu tiên có thể thấy, biến động càng cao thì chênh lệch giá giữa Chainlink và Uniswap càng lớn. Ngược lại, khi giá duy trì tương đối ổn định trong một thời gian, các nguồn giá Uniswap và Chainlink sẽ gần nhau.
Việc sử dụng TWAP như một lớp bảo vệ bổ sung chống giao dịch trước thực chất tương đương với việc tính phí quan trọng cao hơn một cách động trong thời kỳ biến động giá cao, vì lúc này rủi ro giao dịch trước lớn hơn do độ trễ oracle trên chuỗi. Đổi lại, phí hiệu dụng cao hơn này làm giảm khả năng của các nhà arbitrage tái định giá tiền ổn định trực tiếp từ giao thức.
Trong hầu hết các trường hợp, giá Uniswap và Chainlink sẽ rất giống nhau, khiến người dùng hầu như không cảm nhận được việc sử dụng hai giải pháp oracle. Trong thời kỳ biến động cao, khi giao thức có thể bị giao dịch trước do sự khác biệt lớn về giá giữa Chainlink hiện tại và tương lai trên chuỗi, giá giao thức sẽ khác biệt và giao thức sẽ được bảo vệ khỏi giao dịch trước.
Chú ý đến việc thu hồi/phí hoàn trả của Synthetix
Nghiên cứu oracle của Angle chịu ảnh hưởng sâu sắc từ các thảo luận quản trị của Synthetix về giao dịch trước và các bài blog liên quan. Trong nghiên cứu của chúng tôi, chúng tôi cũng gặp một lựa chọn khác là việc thu hồi/phí hoàn trả mà họ triển khai vào tháng 2 năm 2020, mặc dù cuối cùng là tạm thời.
Những gì họ làm là thêm một thời gian chờ đợi cho giao dịch, trong thời gian đó người dùng không thể thao túng Synth mà họ muốn sử dụng. Trong thời gian này, oracle có thể kiểm tra xem giao dịch có bị ảnh hưởng bởi sự không nhất quán hay không, tức là có sự khác biệt giá giữa thời điểm thực thi và cuối thời gian chờ hay không. Nếu có, sự khác biệt giá này phải do người dùng hoặc giao thức thanh toán cho bên kia (giao thức hoặc người dùng), hoặc được thanh toán trong giao dịch tiếp theo với Synthetix.
Giải pháp này rất hiệu quả trong việc giảm giao dịch trước, nhưng họ buộc phải kéo dài thời gian chờ và tăng phí, điều này gây ra trải nghiệm người dùng rất tệ cho mọi nhà giao dịch. Nó cũng ngăn cản việc tích hợp Synth với các giao thức khác trong nhiều trường hợp sử dụng. Trong SIP-120, họ đã thay thế giải pháp này bằng cách thêm việc sử dụng oracle TWAP cho các giao dịch lớn.
Kết luận
Thiết kế oracle đặc thù của Angle có hai tác động chính đến giao thức:
-
Kẻ tấn công cần thao túng hai thị trường mới có thể lừa được giao thức, từ đó giảm mạnh rủi ro giao dịch trước thành công.
-
Trong thời kỳ căng thẳng thị trường, giao thức có thể sẽ không đưa ra mức giá tốt nhất cho người dùng.
Tác động cuối cùng là một chủ đề đã được thảo luận trong diễn đàn quản trị của Fei. Vì việc cung cấp thực thi giao dịch tốt nhất không phải là mục tiêu cốt lõi của giao thức, chúng tôi cho rằng khả năng chống giao dịch trước quan trọng hơn để đảm bảo giao thức an toàn hơn. Các thị trường thứ cấp sẽ cung cấp thực thi giao dịch tốt hơn trong thời kỳ biến động cao.
Mục tiêu của chúng tôi trong dự án Angle là thiết kế một giao thức tiền ổn định hiệu quả và được hỗ trợ đầy đủ. Để làm được điều này, cần xem xét nhiều khía cạnh của giao thức nhằm đảm bảo nó không thể bị lừa vào vị trí bất lợi, một trong số đó là khả năng chống giao dịch trước. Điều này đặc biệt quan trọng vì sự ổn định của tiền ổn định phi tập trung trên chuỗi phụ thuộc vào oracle của nó.
Việc thêm nguồn giá thứ cấp dưới dạng TWAP có thể giúp giao thức giảm thiểu tác động xấu tiềm tàng từ biến động thị trường cao và các cơ hội giao dịch trước xuất hiện trong những thời điểm đó.
Cuối cùng cần lưu ý rằng giải pháp oracle này giữ được tính linh hoạt và khả năng mở rộng. Một mặt, quản trị Angle có thể bỏ phiếu và cập nhật hợp đồng oracle bất cứ lúc nào. Mặt khác, có thể tạo oracle cho bất kỳ nguồn giá nào được hỗ trợ bởi Chainlink. Đây là mức hỗ trợ tối thiểu để hiện thực hóa tầm nhìn của Angle: đưa tài sản tài chính lên chuỗi theo cách hiệu quả về vốn.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














