Angle cho phép người dùng đúc và đốt agTokens (stablecoin) để đổi lấy các token khác. Nhà giao dịch cũng có thể mở các vị thế mua trên các cặp tài sản thế chấp/stablecoin có sẵn. Đây không phải là hợp đồng vĩnh cửu truyền thống, vì trạng thái cân bằng không phụ thuộc vào tỷ lệ tài trợ và giá thực hiện đến trực tiếp từ nhà tiên tri. Với những trường hợp sử dụng này, giao thức yêu cầu một phương pháp đáng tin cậy để định giá tài sản có sẵn để cung cấp cho người dùng báo giá công bằng trong khi tự bảo vệ mình khỏi các giao dịch chạy trước. Trong Câu hỏi thường gặ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 như sử dụng giá giao ngay.
Front-running đã là một vấn đề lâu nay trong thị trường. Điều quan trọng là một số bên tham gia được tiếp cận thông tin sớm hơn người khác, cho phép họ tận dụng ưu thế này để rút ra lợi nhuận không rủi ro tại sự thiệt hại của bên đối tác. Lịch sử cho thấy việc ngăn chặn hiện tượng này trên chuỗi đã vô cùng thách thức. Chi phí cao và tốc độ thấp của các giao dịch Ethereum làm cho việc cập nhật giá của oracles nhanh chóng và thường xuyên trở nên khó khăn. Điều này tạo ra sự chậm trễ giữa giá ngoại chuỗi và giá trên chuỗi, tạo cơ hội cho người front-runners khai thác.
Không phải tất cả các giao thức stablecoin đều quan tâm đến rủi ro front-running phát sinh từ sự trễ của oracle. Trong trường hợp của DAI của Maker, sự trễ của oracle thường mang lại lợi ích cho giao thức. Ví dụ, nếu một người dùng nhận thấy rằng vị thế của mình sẽ bị thanh lý trong cập nhật oracle tiếp theo do giảm giá, cô ấy sẽ được khuyến khích gửi thêm vốn vào kho, cải thiện sức khỏe của giao thức và tỷ lệ tài sản thế chấp.
Synthetix, cho phép trao đổi giá trị dựa trên oracle giữa tài sản tổng hợp và tài sản đảm bảo, là một ví dụ hoàn hảo về giao thức stablecoin đối mặt với các thách thức front-running. Bài đăng trên blog của họ chỉ ra lịch sử dài của giao thức với front-running, bao gồm một số cuộc tấn công trong quá khứ mà họ đã phải đối mặt.
Tương tự như Synthetix, Angle cho phép trao đổi tài sản tại giá trị của bảng điều khiển với sự trượt giá bằng không. Kết quả là, Angle đối mặt với vấn đề chạy trước tương tự. Nhóm cốt lõi của Angle đã nỗ lực đáng kể để giảm thiểu việc chạy trước. Hai cải tiến chính đã được thực hiện: một thiết kế bảng điều khiển cụ thể và một 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ế bảng điều khiển của Angle và lý do đằng sau nó.
Trước khi đào sâu vào giải pháp của Angle, hãy cố gắng hiểu làm thế nào việc chèn lẻn có thể làm hại cho giao thức. Chúng tôi sẽ xem xét một ví dụ khi ETH được chấp nhận làm tài sản thế chấp để hỗ trợ stablecoin của Angle.
Giả sử một kẻ tấn công đang theo dõi giá ETH ngoại chuỗi và thấy rằng trí tuệ Chainlink sắp cập nhật dữ liệu trên chuỗi lên giá cao hơn (từ p0 lên p1, trong đó p0 < p1). Kẻ tấn công này có thể gửi một giao dịch để đốt x stablecoins với giá p0 để đổi lấy x/p0 đồng ETH. Sau đó, khi giá cập nhật lên p1, kẻ tấn công có thể bán nó trở lại cho giao thức, tạo ra lợi nhuận:
Do vụ giao dịch chạy trước này trên cập nhật của nguồn thông tin, phần lợi nhuận này được lấy từ nguồn dự trữ của giao thức. Nếu chúng ta đặt x = 100 ETH và p1 = 1.01 * p0 (tăng giá 1%), điều này có nghĩa là kẻ tấn công đã lấy 1 ETH từ nguồn dự trữ của giao thức.
May mắn thay, việc tăng phí giao dịch có thể giảm thiểu vấn đề này, vì nó làm giảm lợi nhuận của những người chạy trước và giảm cơ hội.
Ví dụ, nếu phí giao dịch đúc và đốt là cố định và bằng f, một kẻ tấn công đốt x stablecoin tại p0 và sau đó bán lại cho giao thức với giá ETH tại p1 sẽ có lợi nhuận cuối cùng sau đây:
So với tình huống trước, phí giảm lợi nhuận:
Khi phí giao dịch là f = 0.3% và theo ví dụ ở trên, lợi nhuận của kẻ tấn công giờ chỉ còn 0.39 ETH.
Để giảm cơ hội này thêm nữa, chúng ta có thể dựa vào một nguồn tin thứ cung cấp hai nguồn giá tiềm năng: pC (giá Chainlink) và pU (giá Uniswap). Giao thức có thể sử dụng giá thuận lợi nhất (giá thấp hơn khi tạo mới, khi mua token của người dùng và giá cao hơn khi đốt cháy, khi bán ETH cho người dùng), làm cho cơ hội chạy trước ít hấp dẫn hơn.
Hãy tưởng tượng một nhà giao dịch cố gắng tìm lợi nhuận từ cơ hội giống như trên, giả sử pC0 < pC1.
Tuy nhiên, chúng ta có thể xem xét rằng pU là hằng số và gần với pC0. Do đó, như chúng ta sẽ thấy sau này, do thiết kế của giá trung bình theo thời gian của Uniswap (TWAP), pU có xu hướng chậm hơn pC.
Trong trường hợp này, kẻ tấn công cố gắng tìm cách tạo lợi nhuận từ cơ hội tiềm năng sẽ mua token từ giao thức tại pC0 (đốt stablecoins) và nhận được x(1-f)/pC0 ETH. Sau đó, họ sẽ bán lại ở pU1 với giá cao hơn. Điều này sẽ dẫn đến thiệt hại cho kẻ tấn công:
Nếu chúng ta giữ nguyên các con số từ ví dụ, kẻ tấn công cuối cùng sẽ mất 0.6 ETH trong giao dịch này.
Thiết kế của Angle nhắm đến việc loại bỏ nguy cơ front-running giao dịch. Do đó, giao thức sẽ triển khai một cơ chế rất giống với ví dụ đã thảo luận ở trên. Trong phần này, chúng tôi sẽ khám phá những lựa chọn hiện có tiềm năng chi tiết hơn, tập trung vào cụ thể về thiết kế mà chúng tôi dự định triển khai và phân tích lựa chọn của chúng tôi về cửa sổ thời gian TWAP.
Các giải pháp trung gian chính mà có thể phù hợp với trường hợp sử dụng của Angle là:
Chainlink là lựa chọn đầu tiên rõ ràng: đâ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 bao gồm các tài sản khác nhau. Giá đến từ nhiều nguồn và được chuyển tiếp thông qua một mạng phi tập trung, đảm bảo rằng dữ liệu đáng tin cậy, có thể truy cập và khó thao túng. Tuy nhiên, một số nguồn dữ liệu thường chỉ cập nhật sau khi thay đổi giá "đáng kể" (chẳng hạn như thay đổi 0,5% trong ETH / USD) hoặc sau một khoảng thời gian, có nghĩa là giá của Chainlink luôn bị trì hoãn so với giá thị trường thực tế. Do đó, cập nhật giá của Chainlink có thể được chạy trước bằng cách kiểm tra giá ngoài chuỗi hoặc mempool.
Giá trung bình được trọng số theo thời gian (TWAP) của Uniswap V3 là một giải pháp mạng lưới khá rõ ràng và phổ biến. TWAP có thể được truy vấn từ hợp đồng của Uniswap để lấy giá trung bình được trọng số theo thời gian của các token trong một pool trong một khoảng thời gian cụ thể, từ vài giây đến 9 ngày. Giá được tính dựa trên giá trung bình của hai token trong pool trong khoảng thời gian cụ thể. Điều này khiến việc làm thay đổi TWAP cần một lượng vốn lớn và một khoảng thời gian dài, điều này không hiệu quả trong hầu hết các trường hợp.
Tuy nhiên, vì TWAP là giá trung bình qua các khối trước đó, chúng thường bị trễ so với giá ngoại chuỗi thời gian thực hoặc nguồn giá của Chainlink. Nếu sử dụng một mình, chúng sẽ không đủ để bảo vệ giao thức khỏi các giao dịch front-running.
Ngoài ra, vì TWAP chỉ báo cáo giá của các cặp token trên chuỗi, họ không thể đáp ứng mục tiêu của giao thức là cung cấp quyền truy cập vào tài sản không được đại diện trên chuỗi (và do đó không có trong các hồ bơi Uniswap), chẳng hạn như stablecoins được hỗ trợ bởi ngoại tệ.
Sử dụng Maker Oracles có thể đã là một lựa chọn khác cho Angle, nhưng điều này có nghĩa là phải tin tưởng vào MakerDAO và trải qua quy trình quản trị để truy cập vào dữ liệu giá. Nguồn giá cả cũng sẽ bị hạn chế chỉ đến những nguồn mà Maker sử dụng, điều này không đủ cho chúng tôi vì chúng tôi muốn truy cập vào tỷ giá hối đoái.
Với điều này trong tâm trí, quyết định được đưa ra để kết hợp truyền thống Angle Protocol's Chainlink với một 10 phút Uni V3 TWAP. Điều này cho phép giá công bằng nhất có thể vào bất kỳ thời điểm nào trong khi bảo vệ giao thức khỏi các cuộc tấn công front-running.
Nói chung, hợp đồng của Angle sẽ so sánh giá từ cả hai kênh và sử dụng giá có lợi nhất cho giao thức. Với thiết kế này, việc front-running giao thức trở nên phức tạp hơn vì để khai thác tỷ lệ trao đổi của giao thức, kẻ tấn công phải thao tác hoặc front-run cả hai oracles.
Cụ thể, hợp đồng của chúng tôi sẽ lấy giá tốt nhất cho tất cả các cặp tài sản dao động/stablecoin giữa Chainlink và Uniswap và sử dụng oracle ngoại hối của Chainlink để chuyển đổi giá thành tiền tệ fiat cần thiết. Mỗi cặp thế chấp/stablecoin sẽ có một hợp đồng oracle riêng với nguồn giá độc lập của riêng nó.
Làm thế nào nó hoạt động?
Ví dụ, giả sử một người dùng muốn giao dịch cặp ETH/agEUR. Hợp đồng của chúng tôi cần lấy giá cho cặp ETH/USD và USD/EUR. Nó sẽ giữ giá tốt nhất cho ETH/USD từ Chainlink và 10 phút TWAP từ hồ bơi ETH/USDC UniV3. Sau đó, nó sẽ lấy giá ngoại tệ USD/EUR từ Chainlink.
Ví dụ: Uniswap ETH/USDC TWAP: 1900 USD (giao thức giả định rằng USDC thường duy trì đồng bảo, tức 1 USDC bằng 1 USD) Giá ETH Chainlink: 1850 USD Giá USD Chainlink: 1.16 EUR
Nếu người dùng muốn đúc agEUR trong trường hợp này, giao protocal sẽ sử dụng giá ETH/USD thấp hơn, tức là giá 1850 USD mỗi ETH của Chainlink. Ngược lại, nếu người dùng muốn đốt agEUR để đổi lấy wETH trong tình huống tương tự, giao protocal sẽ sử dụng giá cao hơn, tức là Uni’s ETH/USDC TWAP của 1900. Trong cả hai trường hợp, giao protocal sẽ sử dụng tỷ lệ USD/EUR của Chainlink là 1.16 để chuyển đổi ETH/USD sang ETH/EUR.
Tương tự, giao thức sẽ sử dụng giá cao nhất cho người dùng muốn mở hợp đồng vĩnh viễn, và giá thấp nhất cho những người muốn đóng nó.
Nói chung hơn:
Hợp đồng của Angle sẽ sử dụng cửa sổ thời gian 10 phút cho TWAP. Lựa chọn này được thực hiện sau khi cân nhắc kỹ lưỡng, vì các cửa sổ thời gian khác nhau có thể dẫn đến cấu trúc giá khác biệt đáng kể.
Trong trường hợp của Angle, một mặt, cửa sổ thời gian nên đủ dài để tạo đủ độ trễ giữa giá của giao thức và giá thực tế. Điều này cho phép mức chênh lệch lớn hơn giữa giá tạo mới và giá đốt trong khi giá dao động, đặc biệt khi rủi ro của việc chạy trước trên Chainlink tăng gấp đôi. Ngoài ra, càng dài cửa sổ thời gian, càng khó để thao tác giá TWAP, vì quan sát gần đây có ít tác động hơn đến giá.
Tuy nhiên, giao thức vẫn phải cung cấp người dùng bảng giá công bằng và cập nhật: sử dụng một khung thời gian quá rộng sẽ tạo ra khoảng giá quá lớn giữa giao thức và giá thị trường hiện tại, trong khi sử dụng một khung thời gian quá hẹp sẽ không cung cấp sự khác biệt giá mong muốn.
So sánh 10 phút và 60 phút TWAP với nguồn cung cấp giá Chainlink
Để hiểu tại sao chúng tôi cuối cùng chọn một khoảng thời gian 10 phút, đây là một so sánh giữa các TWAP ETH/USDC trong 10 phút và 60 phút và giá ETH/USD của Chainlink cũng như giá đóng cửa của Coinbase.
Bạn có thể thấy cách mức giá cao và thấp được sử dụng bởi giao protocole khi người dùng tạo/thu hồi và đốt/mở di chuyển giữa các mức giá thuận lợi nhất từ Chainlink và TWAP của Uniswap trong quá trình chuyển đổi giá.
Mặc dù khối TWAP 60 phút thường cho giá cả xa thị trường, nhưng TWAP 10 phút cung cấp một lớp đệm hữu ích cho nguồn giá Chainlink, giữ cho giá đủ gần với thị trường.
Đáng chú ý rằng, như đã thấy trong biểu đồ đầu tiên, càng lớn biến động, khoảng chênh lệch giá giữa Chainlink và giá Uniswap càng lớn. Ngược lại, khi giá cả ổn định tương đối qua thời gian, nguồn giá từ Uniswap và Chainlink sẽ gần nhau hơn. Sử dụng TWAP như một bảo vệ bổ sung chống front-running là cách cơ bản để động viên tính năng phí hơn trong các giai đoạn biến động cao, khi rủi ro front-running lớn hơn do trễ trong các oracles trên chuỗi. Chi phí của các loại phí hiệu quả cao này là nó giảm khả năng của những người thương lượng cơ hội để trực tiếp định giá lại stablecoins từ giao thức. Trong hầu hết các trường hợp, giá Uniswap và Chainlink sẽ rất tương tự, và người dùng sẽ hiếm khi nhận ra việc sử dụng hai giải pháp oracle. Tuy nhiên, trong các giai đoạn biến động cao, khi giao thức đang đối mặt với rủi ro front-running do sự khác biệt giá đáng kể giữa giá hiện tại và giá Chainlink tương lai, giá của giao thức sẽ khác nhau, bảo vệ nó khỏi front-running.
Nghiên cứu của Oracle của Angle được mạnh mẽ lấy cảm hứng từ các cuộc thảo luận về quản trị của Synthetix và các bài đăng trên blog liên quan đến việc đầu cơ trước thông tin. Trong nghiên cứu của chúng tôi, chúng tôi cũng gặp phải một lựa chọn khác mà họ thực hiện vào tháng 2 năm 2020, đó là việc khôi phục / hoàn trả phí, cuối cùng đã trở thành một giải pháp tạm thời.
Những gì họ làm là thêm một khoảng thời gian chờ đợi vào các giao dịch, trong đó người dùng không thể thao tác với Synth mà họ muốn sử dụng. Trong thời gian này, các oracles có thể kiểm tra xem giao dịch có bị ảnh hưởng bởi sự không nhất quán, cụ thể là có sự khác biệt về giá cả giữa thời điểm thực hiện và cuối khoảng thời gian chờ đợi. Nếu có sự khác biệt về giá cả, sự khác biệt đó phải được thanh toán bởi người dùng hoặc giao thức cho bên kia (giao thức hoặc người dùng), hoặc nó sẽ được giải quyết 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 hiện tượng front-running, nhưng họ đã phải gia hạn thời gian chờ đợi và tăng phí, điều này đã tạo ra trải nghiệm người dùng rất tệ cho tất cả các nhà giao dịch. Nó cũng đã ngăn chặn Synth khỏi việc tích hợp 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 một kế hoạch thêm việc sử dụng các oracles TWAP cho các giao dịch lớn.
Thiết kế oracle cụ thể của Angle có hai tác động chính đối với giao thức:
Kẻ tấn công cần can thiệp vào hai thị trường để lừa đảo giao thức, giảm thiểu đáng kể nguy cơ thực hiện giao dịch front-running thành công.
Trong những thời kỳ căng thẳng của thị trường, giao thức có khả năng không cung cấp cho người dùng giá tốt nhất có thể.
Tác động sau đã được thảo luận trong diễn đàn quản trị Fei. Vì việc cung cấp việc thực hiện giao dịch tốt nhất không phải là mục tiêu chính của giao thức, chúng tôi tin rằng sự chống chạy trước là quan trọng hơn để đảm bảo an ninh của giao thức. Trong các thị trường phụ trong các giai đoạn biến động cao, việc thực hiện giao dịch tốt hơn sẽ được cung cấp.
Mục tiêu của chúng tôi trong dự án Angle là thiết kế một giao thức stablecoin hiệu quả được hỗ trợ đầy đủ. Để đạt được điều này, cần xem xét nhiều khía cạnh của giao thức để đảm bảo rằng nó không thể bị lừa dối vào một vị trí bất lợi, trong đó có kháng front-running. Điều này đặc biệt quan trọng vì sự ổn định của stablecoin phi tập trung trên chuỗi mở phụ thuộc vào chất lượng của các oracles của họ.
Việc thêm các mã nguồn giá phụ trong dạng TWAP có thể giúp giao thức giảm thiểu các tác động tiêu cực tiềm ẩn của biến động thị trường cao và cơ hội front-running nảy sinh trong những thời điểm đó.
Cuối cùng, điều quan trọng cần lưu ý là giải pháp truy vấn này duy trì tính linh hoạt và khả năng mở rộng. Một mặt, quản trị của Angle có thể bỏ phiếu và cập nhật hợp đồng truy vấn của mình bất cứ lúc nào. Mặt khác, các truy vấn có thể được tạo ra cho bất kỳ nguồn cung giá nào được hỗ trợ bởi Chainlink. Đây là mức độ hỗ trợ tối thiểu cần thiết để đạt được tầm nhìn của Angle về việc đưa tài sản tài chính lên chuỗi một cách hiệu quả về vốn!
Angle cho phép người dùng đúc và đốt agTokens (stablecoin) để đổi lấy các token khác. Nhà giao dịch cũng có thể mở các vị thế mua trên các cặp tài sản thế chấp/stablecoin có sẵn. Đây không phải là hợp đồng vĩnh cửu truyền thống, vì trạng thái cân bằng không phụ thuộc vào tỷ lệ tài trợ và giá thực hiện đến trực tiếp từ nhà tiên tri. Với những trường hợp sử dụng này, giao thức yêu cầu một phương pháp đáng tin cậy để định giá tài sản có sẵn để cung cấp cho người dùng báo giá công bằng trong khi tự bảo vệ mình khỏi các giao dịch chạy trước. Trong Câu hỏi thường gặ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 như sử dụng giá giao ngay.
Front-running đã là một vấn đề lâu nay trong thị trường. Điều quan trọng là một số bên tham gia được tiếp cận thông tin sớm hơn người khác, cho phép họ tận dụng ưu thế này để rút ra lợi nhuận không rủi ro tại sự thiệt hại của bên đối tác. Lịch sử cho thấy việc ngăn chặn hiện tượng này trên chuỗi đã vô cùng thách thức. Chi phí cao và tốc độ thấp của các giao dịch Ethereum làm cho việc cập nhật giá của oracles nhanh chóng và thường xuyên trở nên khó khăn. Điều này tạo ra sự chậm trễ giữa giá ngoại chuỗi và giá trên chuỗi, tạo cơ hội cho người front-runners khai thác.
Không phải tất cả các giao thức stablecoin đều quan tâm đến rủi ro front-running phát sinh từ sự trễ của oracle. Trong trường hợp của DAI của Maker, sự trễ của oracle thường mang lại lợi ích cho giao thức. Ví dụ, nếu một người dùng nhận thấy rằng vị thế của mình sẽ bị thanh lý trong cập nhật oracle tiếp theo do giảm giá, cô ấy sẽ được khuyến khích gửi thêm vốn vào kho, cải thiện sức khỏe của giao thức và tỷ lệ tài sản thế chấp.
Synthetix, cho phép trao đổi giá trị dựa trên oracle giữa tài sản tổng hợp và tài sản đảm bảo, là một ví dụ hoàn hảo về giao thức stablecoin đối mặt với các thách thức front-running. Bài đăng trên blog của họ chỉ ra lịch sử dài của giao thức với front-running, bao gồm một số cuộc tấn công trong quá khứ mà họ đã phải đối mặt.
Tương tự như Synthetix, Angle cho phép trao đổi tài sản tại giá trị của bảng điều khiển với sự trượt giá bằng không. Kết quả là, Angle đối mặt với vấn đề chạy trước tương tự. Nhóm cốt lõi của Angle đã nỗ lực đáng kể để giảm thiểu việc chạy trước. Hai cải tiến chính đã được thực hiện: một thiết kế bảng điều khiển cụ thể và một 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ế bảng điều khiển của Angle và lý do đằng sau nó.
Trước khi đào sâu vào giải pháp của Angle, hãy cố gắng hiểu làm thế nào việc chèn lẻn có thể làm hại cho giao thức. Chúng tôi sẽ xem xét một ví dụ khi ETH được chấp nhận làm tài sản thế chấp để hỗ trợ stablecoin của Angle.
Giả sử một kẻ tấn công đang theo dõi giá ETH ngoại chuỗi và thấy rằng trí tuệ Chainlink sắp cập nhật dữ liệu trên chuỗi lên giá cao hơn (từ p0 lên p1, trong đó p0 < p1). Kẻ tấn công này có thể gửi một giao dịch để đốt x stablecoins với giá p0 để đổi lấy x/p0 đồng ETH. Sau đó, khi giá cập nhật lên p1, kẻ tấn công có thể bán nó trở lại cho giao thức, tạo ra lợi nhuận:
Do vụ giao dịch chạy trước này trên cập nhật của nguồn thông tin, phần lợi nhuận này được lấy từ nguồn dự trữ của giao thức. Nếu chúng ta đặt x = 100 ETH và p1 = 1.01 * p0 (tăng giá 1%), điều này có nghĩa là kẻ tấn công đã lấy 1 ETH từ nguồn dự trữ của giao thức.
May mắn thay, việc tăng phí giao dịch có thể giảm thiểu vấn đề này, vì nó làm giảm lợi nhuận của những người chạy trước và giảm cơ hội.
Ví dụ, nếu phí giao dịch đúc và đốt là cố định và bằng f, một kẻ tấn công đốt x stablecoin tại p0 và sau đó bán lại cho giao thức với giá ETH tại p1 sẽ có lợi nhuận cuối cùng sau đây:
So với tình huống trước, phí giảm lợi nhuận:
Khi phí giao dịch là f = 0.3% và theo ví dụ ở trên, lợi nhuận của kẻ tấn công giờ chỉ còn 0.39 ETH.
Để giảm cơ hội này thêm nữa, chúng ta có thể dựa vào một nguồn tin thứ cung cấp hai nguồn giá tiềm năng: pC (giá Chainlink) và pU (giá Uniswap). Giao thức có thể sử dụng giá thuận lợi nhất (giá thấp hơn khi tạo mới, khi mua token của người dùng và giá cao hơn khi đốt cháy, khi bán ETH cho người dùng), làm cho cơ hội chạy trước ít hấp dẫn hơn.
Hãy tưởng tượng một nhà giao dịch cố gắng tìm lợi nhuận từ cơ hội giống như trên, giả sử pC0 < pC1.
Tuy nhiên, chúng ta có thể xem xét rằng pU là hằng số và gần với pC0. Do đó, như chúng ta sẽ thấy sau này, do thiết kế của giá trung bình theo thời gian của Uniswap (TWAP), pU có xu hướng chậm hơn pC.
Trong trường hợp này, kẻ tấn công cố gắng tìm cách tạo lợi nhuận từ cơ hội tiềm năng sẽ mua token từ giao thức tại pC0 (đốt stablecoins) và nhận được x(1-f)/pC0 ETH. Sau đó, họ sẽ bán lại ở pU1 với giá cao hơn. Điều này sẽ dẫn đến thiệt hại cho kẻ tấn công:
Nếu chúng ta giữ nguyên các con số từ ví dụ, kẻ tấn công cuối cùng sẽ mất 0.6 ETH trong giao dịch này.
Thiết kế của Angle nhắm đến việc loại bỏ nguy cơ front-running giao dịch. Do đó, giao thức sẽ triển khai một cơ chế rất giống với ví dụ đã thảo luận ở trên. Trong phần này, chúng tôi sẽ khám phá những lựa chọn hiện có tiềm năng chi tiết hơn, tập trung vào cụ thể về thiết kế mà chúng tôi dự định triển khai và phân tích lựa chọn của chúng tôi về cửa sổ thời gian TWAP.
Các giải pháp trung gian chính mà có thể phù hợp với trường hợp sử dụng của Angle là:
Chainlink là lựa chọn đầu tiên rõ ràng: đâ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 bao gồm các tài sản khác nhau. Giá đến từ nhiều nguồn và được chuyển tiếp thông qua một mạng phi tập trung, đảm bảo rằng dữ liệu đáng tin cậy, có thể truy cập và khó thao túng. Tuy nhiên, một số nguồn dữ liệu thường chỉ cập nhật sau khi thay đổi giá "đáng kể" (chẳng hạn như thay đổi 0,5% trong ETH / USD) hoặc sau một khoảng thời gian, có nghĩa là giá của Chainlink luôn bị trì hoãn so với giá thị trường thực tế. Do đó, cập nhật giá của Chainlink có thể được chạy trước bằng cách kiểm tra giá ngoài chuỗi hoặc mempool.
Giá trung bình được trọng số theo thời gian (TWAP) của Uniswap V3 là một giải pháp mạng lưới khá rõ ràng và phổ biến. TWAP có thể được truy vấn từ hợp đồng của Uniswap để lấy giá trung bình được trọng số theo thời gian của các token trong một pool trong một khoảng thời gian cụ thể, từ vài giây đến 9 ngày. Giá được tính dựa trên giá trung bình của hai token trong pool trong khoảng thời gian cụ thể. Điều này khiến việc làm thay đổi TWAP cần một lượng vốn lớn và một khoảng thời gian dài, điều này không hiệu quả trong hầu hết các trường hợp.
Tuy nhiên, vì TWAP là giá trung bình qua các khối trước đó, chúng thường bị trễ so với giá ngoại chuỗi thời gian thực hoặc nguồn giá của Chainlink. Nếu sử dụng một mình, chúng sẽ không đủ để bảo vệ giao thức khỏi các giao dịch front-running.
Ngoài ra, vì TWAP chỉ báo cáo giá của các cặp token trên chuỗi, họ không thể đáp ứng mục tiêu của giao thức là cung cấp quyền truy cập vào tài sản không được đại diện trên chuỗi (và do đó không có trong các hồ bơi Uniswap), chẳng hạn như stablecoins được hỗ trợ bởi ngoại tệ.
Sử dụng Maker Oracles có thể đã là một lựa chọn khác cho Angle, nhưng điều này có nghĩa là phải tin tưởng vào MakerDAO và trải qua quy trình quản trị để truy cập vào dữ liệu giá. Nguồn giá cả cũng sẽ bị hạn chế chỉ đến những nguồn mà Maker sử dụng, điều này không đủ cho chúng tôi vì chúng tôi muốn truy cập vào tỷ giá hối đoái.
Với điều này trong tâm trí, quyết định được đưa ra để kết hợp truyền thống Angle Protocol's Chainlink với một 10 phút Uni V3 TWAP. Điều này cho phép giá công bằng nhất có thể vào bất kỳ thời điểm nào trong khi bảo vệ giao thức khỏi các cuộc tấn công front-running.
Nói chung, hợp đồng của Angle sẽ so sánh giá từ cả hai kênh và sử dụng giá có lợi nhất cho giao thức. Với thiết kế này, việc front-running giao thức trở nên phức tạp hơn vì để khai thác tỷ lệ trao đổi của giao thức, kẻ tấn công phải thao tác hoặc front-run cả hai oracles.
Cụ thể, hợp đồng của chúng tôi sẽ lấy giá tốt nhất cho tất cả các cặp tài sản dao động/stablecoin giữa Chainlink và Uniswap và sử dụng oracle ngoại hối của Chainlink để chuyển đổi giá thành tiền tệ fiat cần thiết. Mỗi cặp thế chấp/stablecoin sẽ có một hợp đồng oracle riêng với nguồn giá độc lập của riêng nó.
Làm thế nào nó hoạt động?
Ví dụ, giả sử một người dùng muốn giao dịch cặp ETH/agEUR. Hợp đồng của chúng tôi cần lấy giá cho cặp ETH/USD và USD/EUR. Nó sẽ giữ giá tốt nhất cho ETH/USD từ Chainlink và 10 phút TWAP từ hồ bơi ETH/USDC UniV3. Sau đó, nó sẽ lấy giá ngoại tệ USD/EUR từ Chainlink.
Ví dụ: Uniswap ETH/USDC TWAP: 1900 USD (giao thức giả định rằng USDC thường duy trì đồng bảo, tức 1 USDC bằng 1 USD) Giá ETH Chainlink: 1850 USD Giá USD Chainlink: 1.16 EUR
Nếu người dùng muốn đúc agEUR trong trường hợp này, giao protocal sẽ sử dụng giá ETH/USD thấp hơn, tức là giá 1850 USD mỗi ETH của Chainlink. Ngược lại, nếu người dùng muốn đốt agEUR để đổi lấy wETH trong tình huống tương tự, giao protocal sẽ sử dụng giá cao hơn, tức là Uni’s ETH/USDC TWAP của 1900. Trong cả hai trường hợp, giao protocal sẽ sử dụng tỷ lệ USD/EUR của Chainlink là 1.16 để chuyển đổi ETH/USD sang ETH/EUR.
Tương tự, giao thức sẽ sử dụng giá cao nhất cho người dùng muốn mở hợp đồng vĩnh viễn, và giá thấp nhất cho những người muốn đóng nó.
Nói chung hơn:
Hợp đồng của Angle sẽ sử dụng cửa sổ thời gian 10 phút cho TWAP. Lựa chọn này được thực hiện sau khi cân nhắc kỹ lưỡng, vì các cửa sổ thời gian khác nhau có thể dẫn đến cấu trúc giá khác biệt đáng kể.
Trong trường hợp của Angle, một mặt, cửa sổ thời gian nên đủ dài để tạo đủ độ trễ giữa giá của giao thức và giá thực tế. Điều này cho phép mức chênh lệch lớn hơn giữa giá tạo mới và giá đốt trong khi giá dao động, đặc biệt khi rủi ro của việc chạy trước trên Chainlink tăng gấp đôi. Ngoài ra, càng dài cửa sổ thời gian, càng khó để thao tác giá TWAP, vì quan sát gần đây có ít tác động hơn đến giá.
Tuy nhiên, giao thức vẫn phải cung cấp người dùng bảng giá công bằng và cập nhật: sử dụng một khung thời gian quá rộng sẽ tạo ra khoảng giá quá lớn giữa giao thức và giá thị trường hiện tại, trong khi sử dụng một khung thời gian quá hẹp sẽ không cung cấp sự khác biệt giá mong muốn.
So sánh 10 phút và 60 phút TWAP với nguồn cung cấp giá Chainlink
Để hiểu tại sao chúng tôi cuối cùng chọn một khoảng thời gian 10 phút, đây là một so sánh giữa các TWAP ETH/USDC trong 10 phút và 60 phút và giá ETH/USD của Chainlink cũng như giá đóng cửa của Coinbase.
Bạn có thể thấy cách mức giá cao và thấp được sử dụng bởi giao protocole khi người dùng tạo/thu hồi và đốt/mở di chuyển giữa các mức giá thuận lợi nhất từ Chainlink và TWAP của Uniswap trong quá trình chuyển đổi giá.
Mặc dù khối TWAP 60 phút thường cho giá cả xa thị trường, nhưng TWAP 10 phút cung cấp một lớp đệm hữu ích cho nguồn giá Chainlink, giữ cho giá đủ gần với thị trường.
Đáng chú ý rằng, như đã thấy trong biểu đồ đầu tiên, càng lớn biến động, khoảng chênh lệch giá giữa Chainlink và giá Uniswap càng lớn. Ngược lại, khi giá cả ổn định tương đối qua thời gian, nguồn giá từ Uniswap và Chainlink sẽ gần nhau hơn. Sử dụng TWAP như một bảo vệ bổ sung chống front-running là cách cơ bản để động viên tính năng phí hơn trong các giai đoạn biến động cao, khi rủi ro front-running lớn hơn do trễ trong các oracles trên chuỗi. Chi phí của các loại phí hiệu quả cao này là nó giảm khả năng của những người thương lượng cơ hội để trực tiếp định giá lại stablecoins từ giao thức. Trong hầu hết các trường hợp, giá Uniswap và Chainlink sẽ rất tương tự, và người dùng sẽ hiếm khi nhận ra việc sử dụng hai giải pháp oracle. Tuy nhiên, trong các giai đoạn biến động cao, khi giao thức đang đối mặt với rủi ro front-running do sự khác biệt giá đáng kể giữa giá hiện tại và giá Chainlink tương lai, giá của giao thức sẽ khác nhau, bảo vệ nó khỏi front-running.
Nghiên cứu của Oracle của Angle được mạnh mẽ lấy cảm hứng từ các cuộc thảo luận về quản trị của Synthetix và các bài đăng trên blog liên quan đến việc đầu cơ trước thông tin. Trong nghiên cứu của chúng tôi, chúng tôi cũng gặp phải một lựa chọn khác mà họ thực hiện vào tháng 2 năm 2020, đó là việc khôi phục / hoàn trả phí, cuối cùng đã trở thành một giải pháp tạm thời.
Những gì họ làm là thêm một khoảng thời gian chờ đợi vào các giao dịch, trong đó người dùng không thể thao tác với Synth mà họ muốn sử dụng. Trong thời gian này, các oracles có thể kiểm tra xem giao dịch có bị ảnh hưởng bởi sự không nhất quán, cụ thể là có sự khác biệt về giá cả giữa thời điểm thực hiện và cuối khoảng thời gian chờ đợi. Nếu có sự khác biệt về giá cả, sự khác biệt đó phải được thanh toán bởi người dùng hoặc giao thức cho bên kia (giao thức hoặc người dùng), hoặc nó sẽ được giải quyết 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 hiện tượng front-running, nhưng họ đã phải gia hạn thời gian chờ đợi và tăng phí, điều này đã tạo ra trải nghiệm người dùng rất tệ cho tất cả các nhà giao dịch. Nó cũng đã ngăn chặn Synth khỏi việc tích hợp 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 một kế hoạch thêm việc sử dụng các oracles TWAP cho các giao dịch lớn.
Thiết kế oracle cụ thể của Angle có hai tác động chính đối với giao thức:
Kẻ tấn công cần can thiệp vào hai thị trường để lừa đảo giao thức, giảm thiểu đáng kể nguy cơ thực hiện giao dịch front-running thành công.
Trong những thời kỳ căng thẳng của thị trường, giao thức có khả năng không cung cấp cho người dùng giá tốt nhất có thể.
Tác động sau đã được thảo luận trong diễn đàn quản trị Fei. Vì việc cung cấp việc thực hiện giao dịch tốt nhất không phải là mục tiêu chính của giao thức, chúng tôi tin rằng sự chống chạy trước là quan trọng hơn để đảm bảo an ninh của giao thức. Trong các thị trường phụ trong các giai đoạn biến động cao, việc thực hiện giao dịch tốt hơn sẽ được cung cấp.
Mục tiêu của chúng tôi trong dự án Angle là thiết kế một giao thức stablecoin hiệu quả được hỗ trợ đầy đủ. Để đạt được điều này, cần xem xét nhiều khía cạnh của giao thức để đảm bảo rằng nó không thể bị lừa dối vào một vị trí bất lợi, trong đó có kháng front-running. Điều này đặc biệt quan trọng vì sự ổn định của stablecoin phi tập trung trên chuỗi mở phụ thuộc vào chất lượng của các oracles của họ.
Việc thêm các mã nguồn giá phụ trong dạng TWAP có thể giúp giao thức giảm thiểu các tác động tiêu cực tiềm ẩn của biến động thị trường cao và cơ hội front-running nảy sinh trong những thời điểm đó.
Cuối cùng, điều quan trọng cần lưu ý là giải pháp truy vấn này duy trì tính linh hoạt và khả năng mở rộng. Một mặt, quản trị của Angle có thể bỏ phiếu và cập nhật hợp đồng truy vấn của mình bất cứ lúc nào. Mặt khác, các truy vấn có thể được tạo ra cho bất kỳ nguồn cung giá nào được hỗ trợ bởi Chainlink. Đây là mức độ hỗ trợ tối thiểu cần thiết để đạt được tầm nhìn của Angle về việc đưa tài sản tài chính lên chuỗi một cách hiệu quả về vốn!