Báo cáo nghiên cứu kỹ thuật này được viết bởi Polaris từ nhóm nghiên cứu ScaleBit, đồng thời gửi lời cảm ơn đặc biệt đến Norman và Henry từ SnapFingers vì những nhận xét sửa đổi của họ.

TL;DR

Bài viết này tiến hành nghiên cứu chuyên sâu về tính đa dạng và các kịch bản ứng dụng của đòn bẩy DeFi, phân tích chi tiết các lỗ hổng ở cấp độ mã và đề xuất các điểm bảo mật chính của giao thức đòn bẩy.

Giới thiệu về đòn bẩy DeFi

Sự ra mắt gần đây của dYdX V4 đã thu hút rất nhiều sự chú ý và tham gia vào các sàn giao dịch hợp đồng vĩnh viễn. dYdX đã áp dụng thành công các trường hợp giao dịch đòn bẩy và chúng ta không chỉ mong đợi tiềm năng to lớn của dYdX V4 mà còn chú ý đến tính bảo mật của giao thức đòn bẩy. Tiếp theo, chúng tôi sẽ sử dụng các ví dụ và phân tích mã cụ thể để giúp bạn làm quen với các chiến lược đòn bẩy khác nhau và những cân nhắc về bảo mật.

đòn bẩy là gì

Trong tài chính, đòn bẩy là một chiến lược dựa vào việc vay vốn để tăng lợi tức đầu tư tiềm năng. Nói một cách đơn giản, một nhà đầu tư hoặc nhà giao dịch vay vốn để tăng khả năng tiếp cận với một loại tài sản, dự án hoặc công cụ cụ thể vượt xa những gì có thể đạt được chỉ dựa vào vốn tự có của họ. Thông thường, thông qua việc sử dụng đòn bẩy, các nhà đầu tư có thể khuếch đại sức mua của mình trên thị trường.

Đòn bẩy trong giao dịch DeFi

Việc sử dụng đòn bẩy là một trong những tính năng quan trọng và phổ biến nhất trong giao dịch tài sản tiền điện tử. Ngay sau khi thành lập các sàn giao dịch phi tập trung, giao dịch bằng đòn bẩy ngày càng trở nên phổ biến, mặc dù thị trường tiền điện tử đã có mức độ biến động cao.

Giống như tài chính truyền thống, các nhà giao dịch sử dụng đòn bẩy chỉ đơn giản là vay vốn để tăng sức mua hoặc để tận dụng các công cụ tài chính phái sinh khác nhau như hợp đồng tương lai và quyền chọn.

Đòn bẩy cũng tăng từ 3x, 5x lên hơn 100x. Đòn bẩy cao hơn có nghĩa là rủi ro cao hơn, nhưng như đã thấy với hầu hết các sàn giao dịch tập trung, khi khối lượng giao dịch đòn bẩy tăng lên, đây là rủi ro mà các nhà giao dịch tích cực tìm kiếm lợi nhuận cao hơn sẵn sàng chấp nhận.

Giải thích chi tiết về phân loại đòn bẩy

Theo quan điểm của DeFi, các sản phẩm có đòn bẩy chủ yếu được chia thành bốn loại, với các cơ chế tạo đòn bẩy khác nhau: cho vay có đòn bẩy, đòn bẩy giao dịch ký quỹ, đòn bẩy hợp đồng vĩnh viễn và mã thông báo đòn bẩy.

Cho vay có đòn bẩy

Vay và cho vay DeFi là một trong những ứng dụng DeFi sớm nhất và lớn nhất, và những gã khổng lồ như MakerDao, Composite, AAVE, Venus, v.v. đã hoạt động trên thị trường. Logic của việc đạt được đòn bẩy bằng cách cho vay tài sản tiền điện tử rất đơn giản.

Ví dụ: nếu bạn nắm giữ 10.000 đô la bằng Ethereum (ETH) và đang có xu hướng tăng giá, bạn có thể gửi ETH của mình vào Hợp chất làm tài sản thế chấp, cho vay 5.000 đô la bằng USDC và sau đó giao dịch 5.000 đô la đó bằng USDC lấy thêm 5.000 đô la ETH. Điều này sẽ mang lại cho bạn mức đòn bẩy gấp 1,5 lần trên ETH, mang lại cho bạn mức tiếp cận ETH là 15.000 USD so với số vốn 10.000 USD ban đầu của bạn.

Tương tự như vậy, nếu bạn bi quan, bạn có thể chọn gửi stablecoin và cho vay ETH. Nếu giá ETH giảm, bạn có thể mua ETH trên thị trường với giá thấp hơn và trả hết nợ.

Điều quan trọng cần lưu ý là vì bạn sẽ vay từ một giao thức phi tập trung nên bạn có thể bị thanh lý nếu giá trị của tài sản thế chấp giảm xuống hoặc giá trị của tài sản bạn đang vay vượt quá một ngưỡng nhất định.

Đòn bẩy giao dịch ký quỹ

Với DeFi Lending, bạn có thể làm bất cứ điều gì bạn muốn với những tài sản kỹ thuật số này. Giao dịch ký quỹ DeFi tập trung nhiều hơn vào việc tăng quy mô vị thế (tăng sức mua) và được coi là một “vị trí đòn bẩy” thực sự. Tuy nhiên, có một sự khác biệt quan trọng – trong khi vị thế ký quỹ vẫn mở, tài sản của nhà giao dịch đóng vai trò là tài sản thế chấp cho số tiền vay.

dYdX là một nền tảng giao dịch ký quỹ phi tập trung nổi tiếng cho phép đòn bẩy tối đa là 5x. Trong giao dịch ký quỹ trên dYdX, các nhà giao dịch sử dụng tiền của chính họ làm tài sản thế chấp để nhân lên số tiền gốc ban đầu của họ nhiều lần và sử dụng số tiền được khuếch đại này để thực hiện các khoản đầu tư lớn hơn.

Thương nhân phải trả lãi suất và phí liên quan đến giao dịch. Vị thế này không được xây dựng ảo mà liên quan đến việc vay và mua/bán thực tế.

Nếu thị trường diễn biến theo chiều hướng bất lợi, tài sản của nhà giao dịch có thể không có khả năng hoàn trả đầy đủ số tiền đã vay. Để ngăn điều này xảy ra, giao thức sẽ thanh lý vị thế của bạn trước khi đạt đến tỷ lệ thanh lý nhất định.

Đòn bẩy thay đổi như thế nào trong giao dịch ký quỹ——

Giả sử bạn ký quỹ gấp 3 lần ETH nhưng không muốn điều chỉnh mức độ tiếp xúc của mình theo thời gian.

Bạn giữ 100 USD bằng USDC, vay thêm 200 USD bằng USDC và giao dịch 300 USD bằng ETH để thiết lập vị thế mua mong muốn bằng ETH. Mức đòn bẩy là $300 / $100 = 3x.

Nếu giá ETH tăng 20%, lợi nhuận của bạn sẽ là 300 (1+20%) - 300 = 60 USD. Rủi ro thanh lý của bạn thấp hơn và mức đòn bẩy thực tế giảm xuống 360/(360-200) = 2,25x. Nói cách khác, bạn sẽ tự động giảm đòn bẩy khi giá ETH tăng.

Nếu giá ETH giảm 20%, khoản lỗ của bạn sẽ là 300 (1-20%) -300 = -$60. Bạn đang ở vị thế rủi ro hơn khi thanh lý và mức đòn bẩy thực tế sẽ tự động tăng lên 240/(240-200) = 6x. Nói cách khác, bạn cân bằng lại đòn bẩy của mình khi giá ETH giảm, cho thấy bạn đang ở vị thế rủi ro cao hơn trước.

Vì vậy, mặc dù bạn có thể nghĩ rằng bằng cách giao dịch ở mức ký quỹ gấp 3 lần cố định, bạn đang duy trì đòn bẩy không đổi, nhưng đòn bẩy thời gian thực lại liên tục thay đổi. Hãy xem biểu đồ bên dưới để biết đòn bẩy sẽ thay đổi như thế nào khi giá thay đổi[1].

Đòn bẩy hợp đồng vĩnh viễn

Hợp đồng vĩnh viễn tương tự như hợp đồng tương lai truyền thống nhưng không có ngày hết hạn. Hợp đồng vĩnh viễn bắt chước thị trường giao ngay dựa trên ký quỹ và do đó giao dịch gần với giá chỉ số tham chiếu cơ bản.

Có nhiều dự án DeFi cung cấp hợp đồng vĩnh viễn cho các nhà giao dịch, chẳng hạn như dYdX, MCDEX, Perpetual Protocol, Injective, v.v. Nhiều nhà giao dịch có thể gặp khó khăn trong việc phân biệt sự khác biệt giữa giao dịch ký quỹ và hợp đồng vĩnh viễn – trên thực tế, cả hai đều liên quan đến đòn bẩy của người dùng.

Tuy nhiên, có một số khác biệt về cơ chế đòn bẩy, phí và mức đòn bẩy.

Hợp đồng vĩnh viễn là các công cụ phái sinh giao dịch tài sản tổng hợp và có đặc điểm là giao dịch ký quỹ. Giá tài sản cơ bản được theo dõi một cách tổng hợp mà không cần phải giao dịch tài sản cơ bản thực tế. Tuy nhiên, giao dịch ký quỹ liên quan đến việc vay và giao dịch thực tế các tài sản tiền điện tử thực tế.

Với sự xuất hiện của hợp đồng vĩnh viễn, khái niệm về tỷ lệ tài trợ đã xuất hiện, mục đích của nó là giữ giá giao dịch của hợp đồng vĩnh viễn phù hợp với giá tham chiếu cơ bản. **Nếu giá hợp đồng cao hơn giá giao ngay, người mua sẽ trả tiền cho người bán. **Nói cách khác, nhà giao dịch cần phải trả phí liên tục khi vay tiền.

Đòn bẩy trong hợp đồng vĩnh viễn thường cao hơn trong giao dịch ký quỹ và có thể cao tới 100 lần. Cơ chế thanh lý và đòn bẩy thực cũng giống như giao dịch ký quỹ.

Token đòn bẩy

Token đòn bẩy là các công cụ phái sinh cung cấp cho chủ sở hữu khả năng tiếp cận có đòn bẩy với thị trường tiền điện tử mà không phải lo lắng về việc chủ động quản lý vị thế có đòn bẩy. Mặc dù họ cung cấp cho chủ sở hữu khả năng tiếp xúc có đòn bẩy nhưng họ không yêu cầu họ phải xử lý tỷ lệ ký quỹ, thanh lý, tài sản thế chấp hoặc tài trợ.

Sự khác biệt lớn nhất giữa token đòn bẩy và giao dịch ký quỹ/hợp đồng vĩnh viễn là token đòn bẩy sẽ được cân bằng lại định kỳ hoặc khi đạt đến một ngưỡng nhất định để duy trì mức đòn bẩy cụ thể.

Điều này rõ ràng khác với giao dịch ký quỹ và hợp đồng vĩnh viễn - đòn bẩy thực tế của các sản phẩm này liên tục thay đổi dựa trên biến động giá, mặc dù ban đầu nhà giao dịch có thể đã chỉ định mức đòn bẩy.

Hãy xem cách tái cân bằng hoạt động trong ví dụ 3x ETH ở trên:

Bạn nắm giữ 100 USDC và mua mã thông báo đòn bẩy ETHBULL (3x). Giao thức sẽ tự động vay 200 USDC và giao dịch 200 USD ETH.

Giả sử giá ETH tăng 20% ​​và giá mã thông báo ETHBULL (3x) tăng lên 300*(1+20%)-200 = $160 trước khi tái cân bằng. Bây giờ, đòn bẩy thực tế của bạn trở thành 2,25 (360/160), thấp hơn đòn bẩy mục tiêu.

Là một phần của quá trình tái cân bằng, giao thức sẽ vay thêm USD từ nhóm stablecoin và mua thêm mã thông báo ETH để chuyển đòn bẩy trở lại 3x. Trong ví dụ của chúng tôi, giao thức sẽ vay thêm 120 đô la và đổi lấy ETH. Do đó, tổng đòn bẩy lại trở thành (360+120)/160 = 3 lần.

Giả sử giá ETH giảm 20% và giá mã thông báo ETHBULL (3x) giảm xuống 300*(1-20%)-200 = 40 USD trước khi tái cân bằng. Bây giờ, đòn bẩy thực tế của bạn sẽ trở thành 6 (240/40), cao hơn đòn bẩy mục tiêu.

Trong trường hợp này, giao thức sẽ bán token ETH và trả nợ tồn đọng để giảm đòn bẩy. Trong ví dụ này, giao thức sẽ bán 120 đô la ETH để thanh toán cho nhóm. Khoản nợ sẽ trở thành 80 USD và tổng đòn bẩy lại là (240-120)/40 = 3x.

Nói cách khác, token đòn bẩy sẽ tự động tái tận dụng lợi nhuận và giảm đòn bẩy khi thua lỗ để khôi phục mức đòn bẩy mục tiêu của chúng. Nếu cơ chế này hoạt động tốt, ngay cả trong xu hướng thị trường bất lợi, chủ sở hữu token đòn bẩy sẽ không bị thanh lý vì cơ chế hủy đòn bẩy sẽ liên tục giảm mức đòn bẩy hiệu quả của người dùng.

Do đó, các nhóm cho vay trong mô hình mã thông báo có đòn bẩy sẽ không gặp rủi ro thanh lý và an toàn hơn so với các nhóm cho vay trong giao dịch ký quỹ.

Tận dụng các trường hợp ứng dụng

Chúng tôi đã tìm hiểu về một số loại đòn bẩy phổ biến của giao thức DeFi Tiếp theo, chúng tôi sẽ giải thích chi tiết việc áp dụng đòn bẩy dựa trên các giao thức DeFi cụ thể.

GMX

GMX [2] là một sàn giao dịch giao ngay và vĩnh viễn phi tập trung cung cấp cho các nhà giao dịch khả năng giao dịch tài sản với đòn bẩy lên tới 50 lần. Giao thức hiện đang chạy trên Arbitrum và Avalanche. Trên GMX, nhà giao dịch có kiến ​​thức đầy đủ về đối tác của mình, điều này hoàn toàn khác với giao dịch trên CEX. GMX khác với các giao thức hợp đồng vĩnh viễn khác như dYdX ở chỗ nó hoạt động hoàn toàn trên chuỗi và sử dụng chức năng AMM để cho phép giao dịch có đòn bẩy.

Điều khiến GMX khác biệt so với các dịch vụ khác là nó là một sàn giao dịch phi tập trung cung cấp các dịch vụ giao dịch có đòn bẩy. Về vấn đề này, nó kết hợp trải nghiệm tương tự như các sàn giao dịch DeFi khác như Uniswap với các dịch vụ giao dịch có đòn bẩy do Binance cung cấp.

GMX có nhóm thanh khoản, GLP, là nhóm đa tài sản cung cấp tính thanh khoản cho giao dịch ký quỹ: người dùng có thể mua/bán và thực hiện giao dịch bằng cách đúc và đốt mã thông báo GLP. Nhóm kiếm được phí LP từ giao dịch và giao dịch có đòn bẩy, được phân phối cho chủ sở hữu GMX và GLP.

Để giao dịch bằng đòn bẩy, nhà giao dịch gửi tài sản thế chấp vào giao thức. Nhà giao dịch có thể chọn đòn bẩy lên tới 50x Đòn bẩy càng cao thì giá thanh lý càng cao, giá này sẽ tăng dần khi phí vay tăng.

Ví dụ: khi mua ETH, nhà giao dịch đang "thuê" lợi thế của ETH từ nhóm GLP; khi bán ETH, nhà giao dịch đang "thuê" lợi thế của stablecoin so với ETH từ nhóm GLP. Nhưng tài sản trong nhóm GLP không thực sự được cho thuê.

Khi đóng một vị thế, nếu nhà giao dịch đặt cược chính xác, lợi nhuận sẽ được thanh toán từ nhóm GLP dưới dạng mã thông báo mua; nếu không, khoản lỗ sẽ được khấu trừ khỏi tài sản thế chấp và được trả vào nhóm. GLP thu lợi nhuận từ thua lỗ của nhà giao dịch và lợi nhuận từ lợi nhuận của nhà giao dịch.

Trong quá trình này, các nhà giao dịch phải trả phí giao dịch, phí mở/đóng và phí vay để đổi lấy lợi thế của việc mua/bán so với đồng đô la Mỹ trên các token được chỉ định (BTC, ETH, AVAX, UNI và LINK).

Giao dịch Merkle

Merkle Trade[3] là một nền tảng giao dịch phi tập trung cung cấp giao dịch tiền điện tử, ngoại hối và hàng hóa với đòn bẩy lên tới 1.000 lần và các tính năng giao dịch nâng cao lấy người dùng làm trung tâm. Merkle Trade được hỗ trợ bởi chuỗi khối Aptos, mang lại hiệu suất và khả năng mở rộng tốt nhất. So với Gains Network, nó có độ trễ giao dịch và phí xử lý thấp hơn trong khi vẫn cung cấp mức đòn bẩy cao tương tự.

Không giống như hầu hết các sàn giao dịch, Merkle Trade không có sổ đặt hàng. Thay vào đó, Merkle LP hoạt động như một đối tác trong mọi giao dịch, thu thập tài sản thế chấp khi nhà giao dịch thua lỗ và trả lợi nhuận cho các giao dịch đã đóng với lợi nhuận dương.

  • Giao dịch tiền điện tử, ngoại hối và hàng hóa với đòn bẩy lên tới 1.000 lần

Merkle Trade đặt mục tiêu cung cấp nhiều cặp giao dịch ngay từ ngày đầu tiên, bao gồm tiền điện tử, ngoại hối và hàng hóa, đồng thời cung cấp một số mức đòn bẩy cao nhất trên thị trường lên tới 150 lần đối với tiền điện tử và 1.000 lần đối với FX;

  • Khớp lệnh ở mức giá hợp lý, độ trễ tính bằng mili giây, độ trượt giá tối thiểu

Được hỗ trợ bởi chuỗi khối do Aptos tạo ra có độ trễ thấp nhất cho đến nay, trải nghiệm giao dịch trên chuỗi nhanh nhất có thể. Đối với các nhà giao dịch, điều này có nghĩa là trải nghiệm giao dịch nhanh hơn với mức độ trượt giá ít hơn do độ trễ thực hiện.

  • Giao dịch phi tập trung, không giám sát và không có rủi ro đối tác

Nhà giao dịch giao dịch với nhóm thanh khoản (Merkle LP) đóng vai trò là đối tác cho mọi giao dịch trên giao thức. Tất cả các giao dịch và thanh toán được thực hiện bằng hợp đồng thông minh và không có quyền giám sát tiền của người dùng bất cứ lúc nào.

  • Phí xử lý tối thiểu

Merkle Trade tuyên bố có một trong những mức phí thấp nhất trên thị trường cho đến nay. Khi ra mắt, phí thấp tới 0,05% đối với các cặp giao dịch tiền điện tử và thấp tới 0,0075% đối với các cặp giao dịch FX.

dYdX

dYdX[4] là một sàn giao dịch phi tập trung (DEX) cung cấp cho người dùng khả năng giao dịch hợp đồng vĩnh viễn một cách hiệu quả đồng thời kiểm soát hoàn toàn tài sản của họ. Kể từ khi ra mắt vào năm 2021, dYdX V3 đã áp dụng giải pháp mở rộng quy mô lớp 2 không giám sát độc đáo để triển khai sàn giao dịch của mình, nhưng sổ đặt hàng và công cụ khớp lệnh vẫn được quản lý tập trung.

Và giờ đây, với dYdX V4, giao thức đang phát triển thành chuỗi riêng và tái cấu trúc hoàn toàn toàn bộ giao thức để đạt được sự phân quyền hoàn toàn đồng thời tăng thông lượng. dYdX cũng bao gồm ba chức năng: cho vay, giao dịch ký quỹ và hợp đồng vĩnh viễn. Giao dịch ký quỹ đi kèm với chức năng vay. Số tiền mà người dùng gửi sẽ tự động hình thành quỹ quỹ. Nếu không có đủ tiền trong quá trình giao dịch, họ sẽ tự động vay và trả lãi.

Tận dụng phân tích bảo mật

Chúng tôi đã giới thiệu các loại và ứng dụng phổ biến của đòn bẩy trong DeFi. Tương tự, vẫn còn nhiều vấn đề bảo mật trong thiết kế đòn bẩy đáng được chúng tôi quan tâm.

Phân biệt lệnh giới hạn và lệnh thị trường

Trong hầu hết các ứng dụng trao đổi có đòn bẩy, có lệnh giới hạn và lệnh thị trường. Cần phải phân biệt và xác minh chặt chẽ các lệnh giới hạn và lệnh thị trường. Tiếp theo, chúng tôi sẽ tiến hành phân tích chi tiết các vấn đề mà chúng tôi tìm thấy trong cuộc kiểm toán Merkle Trade [5].

hãy để bây giờ = dấu thời gian::now_seconds(); if (bây giờ - order.created_timestamp > 30) { cancel_order_internal<PairType, ColternalType>( orderid, order, T_CANCEL_ORDER_EXPIRED ); trở lại };

Phần mã này dùng để thực hiện xác minh trong hàm đặt hàng. Trong hàm này, nó kiểm tra xem đã hơn 30 giây trôi qua kể từ khi đơn hàng được tạo hay chưa. Nếu các điều kiện được đáp ứng, cancel_order_internal() được gọi để hủy đơn hàng. Tuy nhiên, nếu lệnh là lệnh giới hạn, điều đó có nghĩa là lệnh đó có một mức giá cụ thể do nhà giao dịch đặt ra mà tại đó họ sẵn sàng mua hoặc bán tài sản. Phán quyết này không nên được sử dụng khi thực hiện các lệnh giới hạn, điều này có thể dẫn đến hầu hết các lệnh giới hạn không được thực thi. Vì vậy, điều quan trọng là phải phân biệt rõ ràng logic giao dịch của lệnh giới hạn và lệnh thị trường.

Lỗi tính toán đòn bẩy

Lỗi tính toán luôn là một vấn đề rất phổ biến trong DeFi và chúng đặc biệt phổ biến trong đòn bẩy. Chúng tôi sẽ sử dụng các vấn đề được tìm thấy trong quá trình kiểm tra của bên thứ ba đối với giao thức Unstoppable[6] để tiến hành nghiên cứu chuyên sâu về tính toán đòn bẩy. .

Hãy xem mã trong Unstoppable tính toán đòn bẩy:

def tính toán đòn bẩy( giá trị vị trí: uint256, giá trị nợ: uint256, giá trị ký quỹ: uint256 ) -> uint256: if giá trị vị trí <= giá trị nợ: # trả lại nợ xấu max_value(uint256) trả về ( CHÍNH XÁC * (_debt_value + giá trị ký quỹ) / (_position_value - giá trị nợ) / CHÍNH XÁC ) Hàm tính toán đòn bẩy làm cho đòn bẩy được tính toán không chính xác bằng cách sử dụng giá trị nợ + giá trị ký quỹ làm tử số thay vì giá trị vị trí. Ba tham số đầu vào của hàm này, giá trị vị trí, _debt_value và giá trị ký quỹ, đều được xác định bởi thông tin về giá do nhà tiên tri cung cấp trên chuỗi Chainlink. trong đó _debt_value biểu thị giá trị chuyển đổi cổ phần nợ của vị thế thành số tiền nợ USD. _margin_value thể hiện giá trị hiện tại (tính bằng USD) của số tiền ký quỹ ban đầu của vị thế. _position_value biểu thị giá trị hiện tại (tính bằng USD) của số tiền vị thế ban đầu của vị thế.

Vấn đề với phép tính trên là giá trị nợ + giá trị ký quỹ không đại diện cho giá trị của vị thế. Đòn bẩy là tỷ lệ giữa giá trị vị thế hiện tại và giá trị ký quỹ hiện tại. _position_value - giá trị nợ là chính xác, nó đại diện cho giá trị ký quỹ hiện tại, nhưng giá trị nợ + giá trị ký quỹ không đại diện cho giá trị hiện tại của vị thế, vì không có gì đảm bảo rằng mã thông báo trách nhiệm pháp lý và mã thông báo vị trí sẽ có biến động giá liên quan.

Ví dụ:

Mã thông báo trách nhiệm là ETH và mã thông báo vị trí là BTC.

Sử dụng 1 ETH làm tiền ký quỹ, Alice vay 14 ETH ($2.000 mỗi ETH) và nhận 1 BTC ($30.000 mỗi BTC) dưới dạng mã thông báo vị thế. Đòn bẩy là 14.

Ngày hôm sau, giá ETH vẫn là 2.000 USD/ETH nhưng giá BTC đã giảm từ 30.000 USD/BTC xuống còn 29.000 USD/BTC.

Tại thời điểm này, đòn bẩy phải là (_position_value == 29.000)/(_position_value == 29.000 - Debvalue == 28.000) = 29

Thay vì giá trị được tính trong hợp đồng: (_debt_value == 28.000 + Marginvalue == 2.000) / (_position_value == 29.000 - Debvalue == 28.000) = 30.

Vì vậy, để khắc phục vấn đề này, nên sử dụng công thức đúng nêu trên để tính đòn bẩy trong hợp đồng thông minh. Lỗi tính toán đòn bẩy có thể dẫn đến thanh lý không công bằng hoặc vị thế đòn bẩy quá mức trong trường hợp biến động giá.

Trong hợp đồng thông minh, việc đảm bảo tính toán đòn bẩy chính xác là rất quan trọng để duy trì sự mạnh mẽ của hệ thống và lợi ích của người dùng. Tính toán đòn bẩy chính xác phải dựa trên tỷ lệ giữa giá trị hiện tại của vị thế và giá trị ký quỹ hiện tại. Nếu sử dụng công thức tính toán không chính xác, nó có thể khiến hệ thống phản ứng không phù hợp với những thay đổi về giá, thanh lý các vị thế không nên thanh lý hoặc cho phép các vị thế có đòn bẩy quá cao tiếp tục tồn tại, do đó làm tăng rủi ro cho hệ thống và người dùng.

lỗi logic

Các lỗi logic đòi hỏi sự chú ý đặc biệt trong quá trình kiểm tra hợp đồng thông minh, đặc biệt là trong logic phức tạp như giao dịch đòn bẩy DeFi.

Chúng ta hãy sử dụng các vấn đề được phát hiện trong quá trình kiểm tra bên thứ ba của Tigris[7] (Tigris là một nền tảng giao dịch đòn bẩy tổng hợp phi tập trung dựa trên Arbitrum và Polygon) để thảo luận về các vấn đề logic cần được chú ý trong đòn bẩy DeFi.

Hãy xem logic của hàm đóng giới hạn trong Tigris:

giới hạn hàmClose( uint id, bool tp, PriceData calldata priceData, byte chữ ký calldata ) bên ngoài { checkDelay(id, false); (uint limitPrice, địa chỉ tigAsset) = TradingExtension._limitClose(_id, tp, priceData, signature); closePosition(_id, DIVISION_CONSTANT, limitPrice, address(0), tigAsset, true); } function limitClose( uint id, bool tp, PriceData calldata priceData, bytes calldata signature ) view bên ngoài trả về(uint limitPrice, address tigAsset) { checkGas(); Giao dịch bộ nhớ IPosition.Trade = location.trades(id); tigAsset = Trade.tigAsset; get VerifyPrice(_trade.asset, priceData, signature, 0); giá uint256 = priceData.price; if (_trade.orderType != 0) hoàn nguyên("4"); //IsLimit if (_tp) { if (_trade.tpprice == 0) hoàn nguyên("7"); //LimitNotSet if (_trade.direction) { if (_trade.tpprice > price) hoàn nguyên("6"); //LimitNotMet } else { if (trade.tpprice < price) hoàn nguyên("6"); //LimitNotMet } limitPrice = Trade.tpPrice; } else { if (trade.slprice == 0) hoàn nguyên("7"); //LimitNotSet if (_trade.direction) { if (_trade.slprice < price) hoàn nguyên("6"); //LimitNotMet } else { if (trade.slprice > price) hoàn nguyên("6"); //LimitNotMet } //@@kiểm toán dừng lỗ được đóng ở mức giá do người dùng chỉ định KHÔNG giới hạn giá thị trườngPrice = _trade.slPrice; } }

Khi sử dụng mức dừng lỗ để đóng một vị thế, giá đóng của người dùng là giá dừng lỗ do người dùng đặt, không phải giá hiện tại của tài sản. Trong các thị trường định hướng và đòn bẩy cao, người dùng có thể lạm dụng điều này để đạt được giao dịch hầu như không có rủi ro. Người dùng có thể mở một vị thế mua và đặt mức dừng lỗ thấp hơn 0,01 USD so với giá hiện tại.

Nếu giá giảm ngay lập tức trong lần cập nhật tiếp theo, họ sẽ đóng vị thế ở mức giá vào lệnh và chỉ phải trả phí mở và đóng. Nếu giá tăng, họ sẽ thu được lợi nhuận đáng kể. Do đó, người dùng có thể lạm dụng phương pháp đặt giá dừng lỗ để mở các giao dịch có đòn bẩy cao, tiềm năng tăng giá cao và rủi ro giảm giá thấp.

Biến động giá cả

Tác động của biến động giá đối với đòn bẩy DeFi là rất quan trọng. Chỉ bằng cách luôn xem xét biến động giá, bạn mới có thể đảm bảo an toàn cho thỏa thuận đòn bẩy. Chúng ta hãy lấy các vấn đề được tìm thấy trong quá trình kiểm tra giao thức DeFiner[8] của bên thứ ba làm ví dụ cho phân tích chuyên sâu:

Giao thức DeFiner thực hiện hai lần kiểm tra trước khi xử lý việc rút tiền.

Đầu tiên, phương thức này kiểm tra xem số tiền người dùng yêu cầu rút có vượt quá số dư của tài sản hay không:

chức năng rút tiền (địa chỉ accountAddr, mã thông báo địa chỉ, số tiền uint256) chỉ bên ngoài Trả về được ủy quyền (uint256) { // Kiểm tra xem số tiền rút có nhỏ hơn số dư của người dùng yêu cầu hay không (amount <= getDepositBalanceCurrent(_token, accountAddr), "Số dư không đủ."); uint256 loanLTV = GlobalConfig.tokenInfoRegistry().getBorrowLTV(token);

Thứ hai, phương pháp này kiểm tra xem việc rút tiền có khiến người dùng sử dụng quá nhiều đòn bẩy hay không. Số tiền rút được trừ vào "khả năng vay" của người dùng theo giá hiện tại. Nếu tổng giá trị khoản vay của người dùng vượt quá khả năng vay mới, phương pháp này sẽ thất bại vì người dùng không còn đủ tài sản thế chấp để đảm bảo vị thế vay của mình. Tuy nhiên, yêu cầu này sẽ chỉ được kiểm tra nếu người dùng chưa sử dụng đòn bẩy quá mức:

if (getBorrowETH(_accountAddr) <= getBorrowPower(_accountAddr)) require( getBorrowETH(_accountAddr) <= getBorrowPower(_accountAddr).sub( money.mul(globalConfig.tokenInfoRegistry().priceFromAddress(token)) .mul(borrowLTV).div (Utils.getDivisor(address(globalConfig), _token)).div(100) ), "Không đủ tài sản thế chấp khi rút tiền.");

Nếu người dùng đã vay nhiều hơn "khả năng vay" của họ cho phép thì việc rút tiền vẫn có thể được thực hiện bất kể. Tình huống này có thể xảy ra trong nhiều tình huống khác nhau, phổ biến nhất là biến động giá cả. Giao thức đã không tính đến tác động của biến động giá đối với giao thức, điều này đã gây ra sự cố này.

khác

Ngoài việc không phân biệt được lệnh giới hạn và lệnh thị trường, lỗi tính toán, lỗi logic và tác động của biến động giá nêu trên, còn có nhiều điểm an toàn liên quan đến thỏa thuận đòn bẩy mà chúng ta cần chú ý. Điều này bao gồm nhưng không giới hạn ở các vấn đề như tấn công cho vay nhanh, thao túng giá, bảo mật oracle, kiểm soát truy cập, không đủ hoặc thiếu kiểm tra đòn bẩy nghiêm ngặt và các vấn đề khác. Khi thiết kế và triển khai giao thức đòn bẩy, các yếu tố này phải được xem xét cẩn thận và cẩn thận để đảm bảo tính mạnh mẽ của giao thức và tính bảo mật cho tài sản của người dùng. Các biện pháp phòng ngừa, giám sát theo thời gian thực và kế hoạch ứng phó khẩn cấp cũng là chìa khóa để giảm thiểu rủi ro tiềm ẩn và bảo vệ lợi ích của người dùng.

Tóm tắt

Việc giới thiệu giao dịch đòn bẩy trong các giao thức DeFi không mang lại cho thị trường khả năng hoạt động cao hơn nhưng cũng mang lại các cơ chế giao dịch phức tạp hơn. Mặc dù giao dịch đòn bẩy mang lại cho người dùng nhiều cơ hội đầu tư hơn nhưng những rủi ro và thách thức tiềm ẩn đối với bảo mật giao thức cũng trở nên đáng kể hơn.

Khi đòn bẩy tăng lên, hoạt động của giao thức trở nên linh hoạt hơn, nhưng nó cũng trở nên mỏng manh hơn và dễ bị ảnh hưởng bởi các mối đe dọa bảo mật khác nhau. Điều này bao gồm khả năng không phân biệt rõ ràng giữa lệnh giới hạn và lệnh thị trường, lỗi tính toán, lỗi logic và cực kỳ nhạy cảm với các yếu tố như biến động giá cả. Trong trường hợp này, chúng ta phải chú ý hơn đến tính bảo mật của giao thức để đảm bảo tài sản của người dùng được bảo vệ một cách hiệu quả.

ScalBit là nhóm bảo mật blockchain hàng đầu trong lĩnh vực Web3, có trụ sở tại Thung lũng Silicon, Singapore, Hồng Kông, Đài Loan và các nơi khác. Chúng tôi đã cung cấp các giải pháp bảo mật blockchain cho hơn 200 tổ chức và dự án trong lĩnh vực Web3 toàn cầu, đã kiểm toán tổng cộng hơn 180.000 dòng mã và bảo vệ tài sản của người dùng trị giá hơn 8 tỷ đô la Mỹ. Đảm bảo an ninh có thể truy cập được cho tất cả mọi người! Nếu bạn có bất kỳ nhu cầu kiểm tra bảo mật nào, vui lòng liên hệ với chúng tôi. Chúng tôi sẽ tùy chỉnh các giải pháp bảo mật chi tiết, toàn diện và chuyên nghiệp để bảo vệ bạn và lĩnh vực Web3!