Di balik ledakan dYdX V4, analisis mendalam tentang klasifikasi leverage DeFi, aplikasi, dan praktik keamanan

Menengah12/13/2023, 2:12:46 PM
Makalah ini mengeksplorasi keragaman dan skenario aplikasi dari DeFi leverage melalui dYdX V4, menganalisis kerentanan tingkat kode, dan menyusun titik-titik keamanan kunci dari protokol leverage.

Sebuah pengantar tentang leverage DeFi

Peluncuran terbaru dYdX V4 telah menarik banyak perhatian dan partisipasi dalam pertukaran kontrak perpetual. dYdX telah berhasil menerapkan contoh perdagangan ber-leverage, dan kita tidak hanya harus menantikan potensi besar dYdX V4, tetapi juga harus lebih memperhatikan keamanan perjanjian leverage. Selanjutnya, kami akan menggunakan analisis kode dan contoh spesifik untuk memandu Anda melalui berbagai strategi leverage dan pertimbangan keamanan yang berbeda.

Apa itu leverage

Dalam bidang keuangan, leverage adalah strategi yang bergantung pada pinjaman uang untuk meningkatkan potensi pengembalian investasi. Singkatnya, investor atau trader meminjam uang untuk memperbesar paparan mereka terhadap jenis aset, proyek, atau instrumen tertentu jauh lebih dari yang dapat mereka capai hanya dengan mengandalkan modal sendiri. Seringkali, melalui penggunaan leverage, investor dapat memperbesar daya beli mereka di pasar.

Leverage dalam perdagangan DeFi

Penggunaan leverage adalah salah satu fitur paling penting dan umum dalam perdagangan aset kripto. Tak lama setelah didirikannya pertukaran terdesentralisasi, perdagangan dengan menggunakan leverage menjadi semakin populer meskipun pasar kripto sudah menunjukkan volatilitas yang tinggi.

Seperti halnya keuangan tradisional, para trader menggunakan leverage baik hanya untuk meminjam modal guna meningkatkan daya beli mereka, atau untuk memanfaatkan berbagai derivatif keuangan, seperti futures dan options.

Rasio leverage juga telah meningkat dari 3x dan 5x menjadi lebih dari 100x. Leverage yang lebih tinggi berarti risiko yang lebih tinggi, tetapi seperti yang terlihat di sebagian besar bursa terpusat, ini adalah risiko yang para trader agresif yang mencari hasil tinggi bersedia ambil seiring dengan pertumbuhan volume perdagangan berleverage.

Penjelasan rinci tentang klasifikasi leverage

Sejauh ini, dalam hal DeFi, produk leverage terutama dibagi menjadi empat jenis, dan mekanisme untuk menghasilkan leverage berbeda: pinjaman ber-leverage, leverage perdagangan margin, leverage kontrak perpetual, dan token ber-leverage.

Peminjaman berleverage

Peminjaman dan peminjaman DeFi adalah salah satu aplikasi DeFi tertua dan terbesar. Raksasa seperti MakerDAO, Compound, AAVE, dan Venus sudah beroperasi di pasar. Logika untuk mendapatkan leverage dengan meminjam aset kripto adalah sederhana.

Sebagai contoh, jika Anda memiliki $10.000 di Ether (ETH) dan bullish, Anda dapat mendepositokan ETH Anda sebagai jaminan ke Compound, meminjam $5.000 di USDC, dan kemudian menggunakan transaksi USDC $5.000 itu sebagai pertukaran untuk $5.000 lainnya di ETH. Dengan cara ini, Anda akan mendapatkan leverage 1,5 kali lipat pada ETH, dan dibandingkan dengan modal awal Anda sebesar $10.000, Anda akan mendapatkan paparan $1,5 juta di ETH.

Demikian pula, jika Anda berpandangan negatif, Anda dapat memilih untuk mendepositokan stablecoin dan meminjamkan ETH. Jika harga ETH turun, Anda dapat membeli ETH di pasar dengan harga lebih rendah dan melunasi utang Anda.

Perhatikan bahwa karena Anda akan meminjam dari protokol terdesentralisasi, Anda mungkin di likuidasi jika nilai jaminan turun atau jika nilai aset yang Anda pinjam melebihi ambang batas tertentu.

Perdagangan marjin leverage

Dengan pinjaman DeFi, Anda dapat melakukan apa pun yang Anda inginkan dengan aset digital ini. Perdagangan margin DeFi lebih berfokus pada peningkatan ukuran posisi (meningkatkan daya beli) dan dianggap sebagai "posisi leverage" yang sebenarnya. Namun, ada satu perbedaan penting — sementara posisi margin masih terbuka, aset trader bertindak sebagai jaminan untuk dana pinjaman.

dYdX adalah platform perdagangan margin terdesentralisasi yang terkenal yang memungkinkan leverage hingga 5x. Dalam perdagangan margin dYdX, para trader menggunakan dana mereka sendiri sebagai jaminan, memperbesar modal asli mereka beberapa kali, dan menggunakan dana yang diperbesar tersebut untuk berinvestasi dalam skala yang lebih besar.

Para pedagang harus membayar biaya bunga dan biaya yang terkait dengan transaksi. Posisi ini bukanlah fiktif; melibatkan pinjaman dan pembelian/penjualan yang sebenarnya.

Jika pasar bergerak ke arah yang tidak menguntungkan, aset trader mungkin tidak dapat sepenuhnya melunasi pinjaman. Untuk mencegah hal ini terjadi, perjanjian akan likuidasi posisi Anda sebelum rasio likuidasi tertentu tercapai.

Bagaimana leverage berubah dalam perdagangan marjin——

Misalkan Anda bullish pada ETH 3 kali dalam perdagangan marjin, tetapi Anda tidak ingin terus-menerus menyesuaikan paparan Anda.

Anda memiliki $100 di USDC dan meminjam $200 lagi di USDC untuk melakukan perdagangan $300 di ETH guna membentuk posisi long ETH yang Anda butuhkan. Tingkat leverage adalah $300/$100 = 3x.

Jika harga ETH naik 20%, keuntungan Anda akan menjadi 300 (1 +20%) -300 = $60. Risiko likuidasi Anda lebih rendah, sementara tingkat leverage aktual berkurang menjadi 360/ (360-200) = 2.25x. Dengan kata lain, Anda akan secara otomatis mengurangi leverage saat harga ETH naik.

Jika harga ETH turun 20%, kerugian Anda akan menjadi 300 (1-20%) -300 = -60 dolar. Ketika sampai pada likuidasi, Anda berada dalam posisi yang lebih berbahaya, dan tingkat leverage aktual secara otomatis ditingkatkan menjadi 240/ (240-200) = 6x. Dengan kata lain, Anda menyeimbangkan leverage Anda ketika harga ETH turun, yang mengindikasikan bahwa Anda berada dalam posisi risiko yang lebih tinggi daripada sebelumnya.

Oleh karena itu, meskipun Anda mungkin berpikir bahwa Anda dapat mempertahankan leverage konstan dengan trading pada margin tetap 3x, leverage real-time terus berubah.Silakan periksa grafik di bawah ini untuk melihat bagaimana leverage akan berubah tergantung pada perubahan harga [1].

Leverage kontrak perpetual

Kontrak perpetual mirip dengan kontrak berjangka tradisional, tetapi mereka tidak memiliki tanggal jatuh tempo. Kontrak perpetual meniru pasar spot berbasis margin, sehingga perdagangan mendekati harga indeks referensi yang mendasari.

Ada banyak proyek DeFi yang menyediakan kontrak perpetual bagi para trader, seperti dYdX, MCDEX, Perpetual Protocol, Incomplete, dll. Banyak trader mungkin merasa sulit untuk membedakan antara perdagangan margin dan kontrak perpetual — sebenarnya, semuanya melibatkan leverage pengguna.

Namun, ada beberapa perbedaan dalam mekanisme leverage, biaya, dan tingkat leverage.

Kontrak perpetual adalah produk turunan yang diperdagangkan aset sintetis dan memiliki karakteristik perdagangan dengan margin. Harga aset yang mendasari dilacak secara sintetis, tanpa perlu melakukan perdagangan aset yang mendasarinya sebenarnya. Namun, perdagangan marjin melibatkan pinjaman sebenarnya dan perdagangan aset kripto sebenarnya.

Dengan munculnya kontrak perpetual, konsep tingkat pendanaan muncul. Tujuannya adalah untuk menjaga harga transaksi kontrak perpetual konsisten dengan harga referensi yang mendasarinya. Jika harga kontrak lebih tinggi dari harga spot, maka pembeli akan membayar penjual. Dengan kata lain, para trader perlu terus-menerus membayar biaya untuk meminjam.

Leverage dalam kontrak perpetual umumnya lebih tinggi daripada dalam perdagangan marjin, dan bisa mencapai hingga 100x. Mekanisme likuidasi dan leverage aktual sama dengan perdagangan marjin.

Token Berdaya Guna

Token berleverage adalah derivatif yang memberikan pemegangnya paparan leverage ke pasar kripto tanpa harus khawatir tentang mengelola posisi leverage secara aktif. Meskipun memberikan paparan leverage kepada pemegangnya, mereka tidak memerlukan penanganan margin, likuidasi, kolateral, atau tingkat pendanaan.

Perbedaan terbesar antara token ber-leverage dan perdagangan marjin/kontrak perpetual adalah bahwa token ber-leverage akan disetel ulang secara berkala atau ketika ambang batas tertentu tercapai untuk mempertahankan tingkat leverage tertentu.

Ini jelas berbeda dari perdagangan margin dan kontrak abadi — leverage aktual dari produk-produk ini terus berubah sesuai dengan fluktuasi harga, bahkan jika pedagang mungkin awalnya menentukan tingkat leverage.

Mari kita lihat bagaimana rebalancing bekerja dalam contoh 3x ETH di atas:

Anda memiliki $100 USDC dan membeli token leverage ETHBULL (3x). Protokol akan secara otomatis meminjam $200 dalam USDC dan melakukan perdagangan $200 dalam ETH.

Anggaplah harga ETH telah naik 20%, sementara harga token ETHBULL (3x) naik menjadi 300* (1 +20%) -200 = $160 sebelum rebalancing. Leverage aktual Anda sekarang adalah 2.25 (360/160), di bawah leverage target Anda.

Sebagai bagian dari proses rebalancing, protokol akan meminjam lebih banyak dolar dari kolam stablecoin dan membeli token ETH tambahan untuk membawa leverage kembali ke 3x. Dalam contoh kami, protokol akan meminjam tambahan $120 dan menukarnya dengan ETH. Dengan demikian, total leverage kembali menjadi (360+120) /160 = 3 kali.

Anggaplah harga ETH telah turun 20%, sementara harga token ETHBULL (3x) turun menjadi 300* (1-20%) -200 = $40 sebelum rebalancing. Leverage sebenarnya Anda sekarang akan menjadi 6 (240/40), di atas leverage target Anda.

Dalam kasus ini, perjanjian akan menjual token ETH dan membayar utang yang masih belum lunas untuk mengurangi leverage. Dalam contoh ini, protokol akan menjual $120 dalam ETH untuk membayar kolam. Utang akan menjadi $80, dan leverage total akan sekali lagi menjadi (240-120) /40 = 3x.

Dengan kata lain, token berleveraged akan secara otomatis direleveraged dalam keuntungan dan deleveraged dalam kerugian untuk mengembalikan tingkat leverage target mereka. Jika mekanisme ini berfungsi dengan baik, bahkan dalam tren pasar yang tidak menguntungkan, pemegang token berleveraged tidak akan dilikuidasi karena mekanisme deleveraging akan terus mengurangi tingkat leverage efektif pengguna.

Akibatnya, kolam pinjaman dalam model token berleverage akan terbebas dari risiko likuidasi dan lebih aman daripada kolam pinjaman dalam perdagangan marjin.

Contoh aplikasi leverage

Sekarang setelah kita belajar tentang beberapa jenis protokol DeFi umum dari leverage, mari kita bahas penerapan leverage secara detail terkait dengan protokol DeFi spesifik.

GMX

GMX [2]adalah pertukaran spot dan perpetual terdesentralisasi yang menawarkan para pedagang kemampuan untuk melakukan perdagangan aset dengan leverage hingga 50 kali. Perjanjian saat ini berjalan di Arbitrum dan Avalanche. Di GMX, para pedagang sepenuhnya sadar akan situasi pihak lawan mereka, yang benar-benar berbeda dari perdagangan di CEX. Berbeda dengan perjanjian kontrak perpetual lainnya seperti dYdX, GMX beroperasi sepenuhnya on-chain dan menggunakan fungsionalitas AMM untuk memungkinkan perdagangan dengan leverage.

Apa yang membedakan GMX dari layanan lain adalah bahwa ini adalah pertukaran terdesentralisasi yang menyediakan layanan perdagangan berleverage. Dalam hal ini, ini menggabungkan pengalaman yang mirip dengan pertukaran DeFi lainnya seperti Uniswap dengan layanan perdagangan berleverage yang ditawarkan oleh Binance dan lainnya.

GMX memiliki kolam likuiditas GLP, yang merupakan kolam aset ganda yang menyediakan likuiditas untuk perdagangan marjin: pengguna dapat melakukan long/short dan mengeksekusi perdagangan dengan mencetak dan menghancurkan token GLP. Kolam ini menghasilkan biaya LP dari perdagangan dan perdagangan berleverage, yang didistribusikan kepada pemegang GMX dan GLP.

Untuk melakukan perdagangan dengan leverage, para trader menyetor jaminan ke dalam sebuah perjanjian. Para trader dapat memilih leverage hingga 50x. Semakin tinggi leverage, semakin tinggi harga likuidasi, yang akan meningkat secara bertahap seiring dengan meningkatnya biaya pinjaman.

Sebagai contoh, ketika melakukan long pada ETH, para trader sedang "menyewa" ruang naik ETH dari kolam GLP; ketika melakukan short pada ETH, para trader sedang "mengontrak" ruang naik stablecoin terhadap ETH dari kolam GLP. Namun, aset-aset dalam kolam GLP sebenarnya tidak disewakan.

Saat menutup posisi, jika trader bertaruh dengan benar, keuntungan akan dibayarkan dalam bentuk peningkatan token dari kolam GLP; sebaliknya, kerugian akan dikurangkan dari agunan dan dibayarkan ke dalam kolam. GLP memperoleh keuntungan dari kerugian dan keuntungan trader.

Dalam proses tersebut, para trader membayar biaya transaksi, biaya pembukaan/penutupan, dan biaya pinjaman sebagai imbalan atas ruang ke atas untuk membeli/menjual token-tokens tertentu (BTC, ETH, AVAX, UNI, dan LINK) terhadap dolar Amerika Serikat.

Perdagangan Merkle

Perdagangan Merkle[3]adalah platform perdagangan terdesentralisasi yang menawarkan perdagangan cryptocurrency, forex, dan komoditas dengan leverage hingga 1.000x dan fitur perdagangan yang berpusat pada pengguna. Merkle Trade didukung oleh blockchain Aptos dan memiliki kinerja dan skalabilitas kelas satu. Dibandingkan dengan Jaringan Gains, yang menawarkan leverage tinggi yang sama, platform ini memiliki keterlambatan transaksi dan biaya yang lebih rendah.

Tidak seperti kebanyakan bursa, tidak ada order book di Merkle Trade. Sebagai gantinya, Merkle LP bertindak sebagai pihak lawan untuk setiap perdagangan, dan ketika para pedagang kehilangan uang, itu mengambil jaminan dan membayar keuntungan pada perdagangan yang telah ditutup dengan hasil positif.

  • Perdagangkan kriptokurensi, forex, dan komoditas dengan leverage hingga 1,000x

Merkle Trade dirancang dari awal untuk menawarkan berbagai pasangan perdagangan, termasuk kriptokurensi, forex, dan komoditas, serta beberapa leverage tertinggi di pasar; hingga 150x pada kriptokurensi dan hingga 1.000x pada forex.

  • Eksekusi pesanan harga yang adil, latensi milidetik, slippage minimal

Menghasilkan blockchain dengan Aptos, yang memiliki latensi terendah hingga saat ini, dapat memberikan pengalaman transaksi on-chain tercepat. Bagi para trader, ini berarti pengalaman trading yang lebih cepat dan kurangnya pergeseran harga akibat keterlambatan eksekusi.

  • Transaksi terdesentralisasi, non-custodial tanpa risiko pihak lawan

Pedagang melakukan perdagangan dengan kolam likuiditas (Merkle LP), yang bertindak sebagai pihak lawan untuk setiap transaksi dalam perjanjian. Semua transaksi dan penyelesaian dilakukan oleh kontrak pintar, dan tidak ada hosting dana pengguna kapan pun.

  • Biaya pemrosesan terendah

Merkle Trade mengklaim memiliki salah satu biaya terendah di pasar hingga saat ini. Saat diluncurkan, biaya untuk pasangan perdagangan kripto serendah 0,05%, dan biaya untuk pasangan perdagangan forex serendah 0,0075%.

DYDX

DYDX

dYdX[4]adalah pertukaran terdesentralisasi (DEX) yang memberdayakan pengguna untuk melakukan perdagangan kontrak perpetual secara efisien sambil memiliki kontrol penuh atas aset. Sejak diluncurkan pada tahun 2021, dYdX V3 telah mengadopsi solusi penskalaan non-kustodial tingkat kedua yang unik untuk mengimplementasikan pertukarannya, namun buku pesan dan mesin pencocokannya masih dikelola secara terpusat.

Sekarang, dengan dYdX V4, protokol ini tumbuh menjadi rantai sendiri, dan seluruh protokol sepenuhnya diubah untuk mencapai desentralisasi lengkap sambil meningkatkan throughput. dYdX juga mencakup tiga fungsi: peminjaman, perdagangan berleverage, dan kontrak perpetual. Perdagangan berleverage dilengkapi dengan fungsi pinjaman. Dana yang didepositokan oleh pengguna secara otomatis membentuk kolam dana. Jika ada modal yang kurang selama perdagangan, bunga secara otomatis dipinjam dan dibayarkan.

Analisis keamanan leverage

Kami telah memperkenalkan jenis-jenis umum dan aplikasi dari leverage dalam DeFi. Selain itu, masih ada banyak isu keamanan dalam desain leverage yang layak mendapat perhatian kita. Kami akan menganalisis isu-isu keamanan dan titik audit leverage DeFi berdasarkan kasus audit spesifik.

Membedakan antara pesanan batas dan pesanan pasar

Dalam kebanyakan aplikasi pertukaran berleverage, terdapat pesanan limit dan pesanan pasar. Diferensiasi dan verifikasi yang ketat terhadap pesanan limit dan pesanan pasar sangatlah penting.Selanjutnya, kami akan melakukan analisis mendetail terhadap isu-isu yang kami temukan dalam audit Merkle Trade [5].

biarkan sekarang = timestamp: :now_seconds (); jika (sekarang - order.created_timestamp > 30) {         cancel_order_internal(             _order_id,             order,             T_CANCEL_ORDER_EXPIRED         );         kembali     };

Bagian kode ini melakukan pemeriksaan dalam fungsi order, di mana ia memeriksa apakah sudah lebih dari 30 detik sejak pesanan dibuat. Jika kondisinya terpenuhi, panggil cancel_order_internal() untuk membatalkan pesanan. Namun, jika pesanan adalah pesanan limit, itu berarti pesanan memiliki harga tertentu yang ditetapkan oleh pedagang dan mereka bersedia membeli atau menjual aset dengan harga tersebut. Tidak boleh ada penilaian seperti itu saat mengeksekusi pesanan limit; ini dapat menyebabkan sebagian besar pesanan limit tidak dieksekusi. Oleh karena itu, penting untuk secara ketat membedakan logika perdagangan antara pesanan limit dan pesanan pasar.

Kesalahan perhitungan leverage

Kesalahan perhitungan selalu menjadi masalah yang sangat umum dalam DeFi, dan juga sangat umum dalam leverage. Kami akan menggunakan isu yang ditemukan oleh protokol Unstoppable [6] dalam audit pihak ketiga untuk secara menyeluruh memeriksa masalah perhitungan leverage.

Mari kita lihat kode untuk menghitung leverage di Unstoppable:

def _calculate_calculation ( _position_value: uint256, _debt_value: uint256, _margin_value: uint256) - > uint256: jika _position_value < = _debt_value: #bad debt Kembalikan max_value (uint256) Kembalikan ( precision * (_debt_value + _margin_value) /(_position_value - _debt_value) /PRECISION )

Fungsi _calculate_margin menyebabkan leverage dihitung secara tidak benar dengan menggunakan _debt_value + _margin_value sebagai pembilang daripada _position_value. Tiga parameter masukan fungsi _position_value, _debt_value, dan _margin_value semuanya ditentukan oleh informasi harga yang diberikan oleh orakel on-chain Chainlink. Di sini, _debt_value mengindikasikan nilai dari mengonversi bagian utang posisi menjadi jumlah utang dolar. _margin_value mengindikasikan nilai saat ini dari jumlah margin awal posisi (dalam dolar AS). _position_value mengindikasikan nilai saat ini (dalam dolar AS) dari jumlah posisi awal posisi.

Masalah dengan perhitungan di atas adalah bahwa _nilai_hutang + _nilai_margin tidak mewakili nilai posisi. Leverage adalah rasio antara nilai posisi saat ini dan nilai margin saat ini. _nilai_posisi - _nilai_hutang adalah benar. Itu menunjukkan nilai margin saat ini, tetapi _nilai_hutang + _nilai_margin tidak mewakili nilai posisi saat ini, karena tidak ada jaminan bahwa token hutang dan token posisi memiliki fluktuasi harga terkait.

Sebagai contoh, token utangnya adalah ETH, dan token posisinya adalah BTC.

Alice menggunakan 1 ETH sebagai margin, meminjam 14 ETH ($2,000 masing-masing), dan mendapatkan 1 BTC ($30,000 masing-masing) dalam token posisi. Leverage adalah 14.

Keesokan harinya, harga ETH tetap berada di $2,000/ETH, namun harga BTC turun dari $30,000/BTC menjadi $29,000/BTC. Pada titik ini, leverage harusnya (_nilai_posisi == 29,000)/(_nilai_posisi == 29,000 - _nilai_hutang == 28,000) = 29, bukan nilai yang dihitung dalam kontrak: (_nilai_hutang == 28,000 + _nilai_margin == 2,000)/(_nilai_posisi == 29,000 - _nilai_hutang == 28,000) = 30.

Oleh karena itu, untuk memperbaiki hal ini, rumus yang benar seperti yang disebutkan di atas harus digunakan untuk menghitung leverage dalam kontrak pintar. Kesalahan perhitungan leverage dapat menyebabkan likuidasi yang tidak adil atau posisi yang terlalu banyak terkena leverage di hadapan fluktuasi harga.

Dalam kontrak pintar, memastikan perhitungan leverage yang tepat sangat penting untuk menjaga kekokohan sistem dan kepentingan pengguna. Perhitungan leverage yang benar harus didasarkan pada rasio antara nilai posisi saat ini dan nilai margin saat ini. Jika rumus perhitungan yang salah digunakan, hal itu dapat menyebabkan sistem bereaksi tidak tepat terhadap perubahan harga, dapat melikuidasi posisi yang seharusnya tidak dilikuidasi, atau memungkinkan posisi yang terlalu berleverage untuk terus ada, sehingga meningkatkan risiko sistem dan pengguna.

Kesalahan logis

kesalahan logika

Kesalahan logika memerlukan perhatian khusus dalam audit kontrak pintar, terutama dalam logika kompleks seperti perdagangan leverage DeFi.

Mari kita bahas masalah logis yang perlu diperhatikan dalam leverage DeFi menggunakan isu yang ditemukan oleh Tigris[7](Tigris, platform perdagangan leverage sintetis terdesentralisasi berbasis Arbitrum dan Polygon) dalam audit pihak ketiga.

Mari kita lihat logika fungsi penutupan batas harga di Tigris:

Fungsi limitClose ( uint _id, bool _tp, priceData calldata _priceData, Bytes calldata _signature) eksternal{   _checkDelay(_id, false);   (uint _limitPrice, address _tigAsset) = tradingExtension._limitClose(_id, _tp, _priceData, _signature);   _closePosition(_id, DIVISION_CONSTANT, _limitPrice, address(0), _tigAsset, true);}fungsi _limitClose ( uint _id, bool _tp, priceData calldata _priceData, Bytes calldata _signature) eksternal view mengembalikan (uint _limitPrice, address _TIGAsset) { _checkGas (); iPosition.trade memory _trade = position.trades (_id);   _tigAsset = _trade.tigAsset;   getVerifiedPrice (_trade.asset, _priceData, _signature, 0); uint256 _price = _priceData.price;   if (_trade.orderType! = 0) revert (" 4 "); //isLimit if (_tp) { if (_trade.tpPrice == 0) revert (" 7 "); //limitNotSet if (_trade.direction) {           if (_trade.tpPrice > _price) revert("6"); //LimitNotMet       } else {           if (_trade.tpPrice < _price) revert("6"); //LimitNotMet       } _limitPrice = _trade.tpPrice;   } else { if (_trade.slprice == 0) revert (" 7 "); //limitNotSet if (_trade.direction) {           if (_trade.slPrice < _price) revert("6"); //LimitNotMet       } else {           if (_trade.slPrice > _price) revert("6"); //LimitNotMet       } //@audit stop loss is closed at user specified price NOT market price _limitPrice = _trade.slprice;   }}

Ketika menggunakan stop-loss untuk menutup posisi, harga penutupan pengguna adalah harga stop-loss yang ditetapkan oleh pengguna, bukan harga saat ini dari aset. Dalam kasus pasar yang bergerak ke arah tertentu dan leverage tinggi, pengguna mungkin menyalahgunakan hal ini untuk mencapai perdagangan yang hampir bebas risiko. Pengguna dapat membuka posisi panjang dan menetapkan harga stop-loss yang $0.01 lebih rendah dari harga saat ini.

Jika harga turun segera dalam pembaruan berikutnya, mereka akan menutup posisi mereka pada harga masuk mereka dan hanya membayar biaya pembukaan dan penutupan. Jika harga naik, mereka kemungkinan besar akan menghasilkan banyak uang. Sebagai hasilnya, pengguna dapat menyalahgunakan metode penetapan harga stop-loss untuk membuka perdagangan dengan leverage tinggi, potensi keuntungan tinggi, dan risiko downside rendah.

Fluktuasi harga

Harga Bak Mandi

Dampak fluktuasi harga terhadap leverage DeFi sangat penting. Hanya dengan selalu mempertimbangkan fluktuasi harga kita dapat memastikan keamanan perjanjian leverage. Mari kita gunakan DeFiner [8]protokol sebagai contoh untuk analisis mendalam atas masalah yang ditemukan dalam audit pihak ketiga:

Protokol DeFiner menjalani dua pemeriksaan sebelum melakukan penarikan.

Pertama, metode memeriksa apakah jumlah yang diminta oleh pengguna untuk ditarik melebihi saldo aset tersebut:

fungsi otorisasi (alamat _accountAddr, alamat _token, uint256 _jumlah) eksternal hanyaDiuji kembali (kembalikan (uint256)) { //Periksa apakah jumlah yang cukup kurang dari saldo pengguna memerlukan (_jumlah < = getDepositBalanceCurrent (_token, _accountAddr), " Saldo yang diperoleh. ");   uint256 borrowLtv = globalConfig.tokenInfoLogistry () .getBorrowLtv (_token);

Kedua, metode ini memeriksa apakah penarikan akan membuat rasio leverage pengguna terlalu tinggi. Jumlah yang ditarik akan dikurangkan dari 'daya pinjam' harga saat ini pengguna. Jika nilai pinjaman total pengguna melebihi daya pinjam baru, metode tersebut gagal karena pengguna tidak lagi memiliki cukup jaminan untuk mendukung posisi pinjamannya. Namun, persyaratan ini hanya akan diperiksa jika pengguna tidak terlalu terleverage:

jika (getBorrowEth (_accountAddr) < = getBorrowPower (_accountAddr)) memerlukan ( getBorrowEth (_accountAddr) < = getBorrowPower (_accountAddr) .sub ( _amount.mul (globalConfig.tokenInfoRegistry () .priceFromAddress (_token)) .mul (borrowLtv) .div (utils.getDivisor (alamat (globalConfig), _token)) .div (100) ), " Colloquium Collège ketika ");

Jika pengguna telah meminjam lebih dari yang diizinkan oleh “ daya pinjam “ mereka, mereka dapat menarik uang tanpa batasan. Ini bisa terjadi dalam berbagai situasi, yang paling umum adalah fluktuasi harga. Perjanjian tidak mempertimbangkan dampak fluktuasi harga pada perjanjian, yang menyebabkan masalah ini.

Lainnya

Selain dari efek tidak membedakan antara pesanan batas dan pesanan pasar, kesalahan perhitungan, kesalahan logika, dan fluktuasi harga yang disebutkan di atas, ada banyak poin keamanan terkait dengan perjanjian leverage yang memerlukan perhatian kami. Ini termasuk, namun tidak terbatas pada, isu-isu seperti serangan pinjaman kilat, manipulasi harga, keamanan nabi, kontrol otoritas, pemeriksaan leverage yang tidak memadai, atau kurangnya pemeriksaan. Faktor-faktor ini harus dipertimbangkan dengan cermat saat merancang dan melaksanakan perjanjian leverage untuk memastikan kekokohan perjanjian dan keamanan aset pengguna. Langkah-langkah pencegahan, pemantauan real-time, dan rencana tanggap darurat juga kunci untuk mengurangi risiko potensial dan melindungi kepentingan pengguna.

dijumlahkan

Kesimpulan

Pengenalan perdagangan ber-leverage dalam protokol DeFi memang memberikan pasar dengan manuverabilitas yang lebih besar, sambil juga membawa mekanisme perdagangan yang lebih kompleks. Meskipun perdagangan ber-leverage memberikan pengguna dengan lebih banyak peluang investasi, risiko potensial dan tantangan terhadap keamanan protokol juga menjadi lebih signifikan.

Saat leverage meningkat, operasi perjanjian menjadi lebih fleksibel, namun sebagai hasilnya, mereka menjadi lebih rentan dan lebih rentan terhadap berbagai ancaman keamanan. Ini termasuk potensi kegagalan untuk membuat perbedaan yang ketat antara pesanan batas dan pesanan pasar, kesalahan perhitungan, kesalahan logika, dan sensitivitas ekstrim terhadap faktor-faktor seperti fluktuasi harga. Dalam kasus ini, kita harus lebih memperhatikan keamanan protokol untuk memastikan bahwa aset pengguna dilindungi secara efektif.

Sebagai tim keamanan blockchain terkemuka di bidang Web3, ScaleBit didistribusikan di Silicon Valley, Singapura, Hong Kong, Taiwan, dll. Kami telah menyediakan solusi keamanan blockchain untuk 200+ lembaga dan proyek di sektor Web3 global, mengumpulkan 180.000+ baris kode audit, dan melindungi lebih dari $8 miliar aset pengguna. Jadikan Keamanan Aksesible untuk Semua! Jika Anda memiliki kebutuhan audit keamanan, jangan ragu untuk menghubungi kami. Kami akan menyediakan solusi keamanan yang rinci, komprehensif, dan profesional untuk melindungi Anda dan bidang Web3 dengan aman!

Penyangkalan:

  1. Artikel ini telah dicetak ulang dari [ScaleBit]dan hak cipta dimiliki oleh penulis asli [PolarisJika Anda memiliki keberatan terhadap pencetakan ulang, silakan hubungi tim Gate Learn, dan tim akan menanganinya sesegera mungkin sesuai dengan prosedur yang relevan.

  2. Penyangkalan: Pandangan dan opini yang diungkapkan dalam artikel ini hanya mewakili opini pribadi penulis dan tidak merupakan saran investasi apa pun.

  3. Terjemahan artikel ke dalam bahasa lain dilakukan oleh tim Gate Learn. Kecuali disebutkan, menyalin, mendistribusikan, atau menjiplak artikel yang diterjemahkan dilarang.

Di balik ledakan dYdX V4, analisis mendalam tentang klasifikasi leverage DeFi, aplikasi, dan praktik keamanan

Menengah12/13/2023, 2:12:46 PM
Makalah ini mengeksplorasi keragaman dan skenario aplikasi dari DeFi leverage melalui dYdX V4, menganalisis kerentanan tingkat kode, dan menyusun titik-titik keamanan kunci dari protokol leverage.

Sebuah pengantar tentang leverage DeFi

Peluncuran terbaru dYdX V4 telah menarik banyak perhatian dan partisipasi dalam pertukaran kontrak perpetual. dYdX telah berhasil menerapkan contoh perdagangan ber-leverage, dan kita tidak hanya harus menantikan potensi besar dYdX V4, tetapi juga harus lebih memperhatikan keamanan perjanjian leverage. Selanjutnya, kami akan menggunakan analisis kode dan contoh spesifik untuk memandu Anda melalui berbagai strategi leverage dan pertimbangan keamanan yang berbeda.

Apa itu leverage

Dalam bidang keuangan, leverage adalah strategi yang bergantung pada pinjaman uang untuk meningkatkan potensi pengembalian investasi. Singkatnya, investor atau trader meminjam uang untuk memperbesar paparan mereka terhadap jenis aset, proyek, atau instrumen tertentu jauh lebih dari yang dapat mereka capai hanya dengan mengandalkan modal sendiri. Seringkali, melalui penggunaan leverage, investor dapat memperbesar daya beli mereka di pasar.

Leverage dalam perdagangan DeFi

Penggunaan leverage adalah salah satu fitur paling penting dan umum dalam perdagangan aset kripto. Tak lama setelah didirikannya pertukaran terdesentralisasi, perdagangan dengan menggunakan leverage menjadi semakin populer meskipun pasar kripto sudah menunjukkan volatilitas yang tinggi.

Seperti halnya keuangan tradisional, para trader menggunakan leverage baik hanya untuk meminjam modal guna meningkatkan daya beli mereka, atau untuk memanfaatkan berbagai derivatif keuangan, seperti futures dan options.

Rasio leverage juga telah meningkat dari 3x dan 5x menjadi lebih dari 100x. Leverage yang lebih tinggi berarti risiko yang lebih tinggi, tetapi seperti yang terlihat di sebagian besar bursa terpusat, ini adalah risiko yang para trader agresif yang mencari hasil tinggi bersedia ambil seiring dengan pertumbuhan volume perdagangan berleverage.

Penjelasan rinci tentang klasifikasi leverage

Sejauh ini, dalam hal DeFi, produk leverage terutama dibagi menjadi empat jenis, dan mekanisme untuk menghasilkan leverage berbeda: pinjaman ber-leverage, leverage perdagangan margin, leverage kontrak perpetual, dan token ber-leverage.

Peminjaman berleverage

Peminjaman dan peminjaman DeFi adalah salah satu aplikasi DeFi tertua dan terbesar. Raksasa seperti MakerDAO, Compound, AAVE, dan Venus sudah beroperasi di pasar. Logika untuk mendapatkan leverage dengan meminjam aset kripto adalah sederhana.

Sebagai contoh, jika Anda memiliki $10.000 di Ether (ETH) dan bullish, Anda dapat mendepositokan ETH Anda sebagai jaminan ke Compound, meminjam $5.000 di USDC, dan kemudian menggunakan transaksi USDC $5.000 itu sebagai pertukaran untuk $5.000 lainnya di ETH. Dengan cara ini, Anda akan mendapatkan leverage 1,5 kali lipat pada ETH, dan dibandingkan dengan modal awal Anda sebesar $10.000, Anda akan mendapatkan paparan $1,5 juta di ETH.

Demikian pula, jika Anda berpandangan negatif, Anda dapat memilih untuk mendepositokan stablecoin dan meminjamkan ETH. Jika harga ETH turun, Anda dapat membeli ETH di pasar dengan harga lebih rendah dan melunasi utang Anda.

Perhatikan bahwa karena Anda akan meminjam dari protokol terdesentralisasi, Anda mungkin di likuidasi jika nilai jaminan turun atau jika nilai aset yang Anda pinjam melebihi ambang batas tertentu.

Perdagangan marjin leverage

Dengan pinjaman DeFi, Anda dapat melakukan apa pun yang Anda inginkan dengan aset digital ini. Perdagangan margin DeFi lebih berfokus pada peningkatan ukuran posisi (meningkatkan daya beli) dan dianggap sebagai "posisi leverage" yang sebenarnya. Namun, ada satu perbedaan penting — sementara posisi margin masih terbuka, aset trader bertindak sebagai jaminan untuk dana pinjaman.

dYdX adalah platform perdagangan margin terdesentralisasi yang terkenal yang memungkinkan leverage hingga 5x. Dalam perdagangan margin dYdX, para trader menggunakan dana mereka sendiri sebagai jaminan, memperbesar modal asli mereka beberapa kali, dan menggunakan dana yang diperbesar tersebut untuk berinvestasi dalam skala yang lebih besar.

Para pedagang harus membayar biaya bunga dan biaya yang terkait dengan transaksi. Posisi ini bukanlah fiktif; melibatkan pinjaman dan pembelian/penjualan yang sebenarnya.

Jika pasar bergerak ke arah yang tidak menguntungkan, aset trader mungkin tidak dapat sepenuhnya melunasi pinjaman. Untuk mencegah hal ini terjadi, perjanjian akan likuidasi posisi Anda sebelum rasio likuidasi tertentu tercapai.

Bagaimana leverage berubah dalam perdagangan marjin——

Misalkan Anda bullish pada ETH 3 kali dalam perdagangan marjin, tetapi Anda tidak ingin terus-menerus menyesuaikan paparan Anda.

Anda memiliki $100 di USDC dan meminjam $200 lagi di USDC untuk melakukan perdagangan $300 di ETH guna membentuk posisi long ETH yang Anda butuhkan. Tingkat leverage adalah $300/$100 = 3x.

Jika harga ETH naik 20%, keuntungan Anda akan menjadi 300 (1 +20%) -300 = $60. Risiko likuidasi Anda lebih rendah, sementara tingkat leverage aktual berkurang menjadi 360/ (360-200) = 2.25x. Dengan kata lain, Anda akan secara otomatis mengurangi leverage saat harga ETH naik.

Jika harga ETH turun 20%, kerugian Anda akan menjadi 300 (1-20%) -300 = -60 dolar. Ketika sampai pada likuidasi, Anda berada dalam posisi yang lebih berbahaya, dan tingkat leverage aktual secara otomatis ditingkatkan menjadi 240/ (240-200) = 6x. Dengan kata lain, Anda menyeimbangkan leverage Anda ketika harga ETH turun, yang mengindikasikan bahwa Anda berada dalam posisi risiko yang lebih tinggi daripada sebelumnya.

Oleh karena itu, meskipun Anda mungkin berpikir bahwa Anda dapat mempertahankan leverage konstan dengan trading pada margin tetap 3x, leverage real-time terus berubah.Silakan periksa grafik di bawah ini untuk melihat bagaimana leverage akan berubah tergantung pada perubahan harga [1].

Leverage kontrak perpetual

Kontrak perpetual mirip dengan kontrak berjangka tradisional, tetapi mereka tidak memiliki tanggal jatuh tempo. Kontrak perpetual meniru pasar spot berbasis margin, sehingga perdagangan mendekati harga indeks referensi yang mendasari.

Ada banyak proyek DeFi yang menyediakan kontrak perpetual bagi para trader, seperti dYdX, MCDEX, Perpetual Protocol, Incomplete, dll. Banyak trader mungkin merasa sulit untuk membedakan antara perdagangan margin dan kontrak perpetual — sebenarnya, semuanya melibatkan leverage pengguna.

Namun, ada beberapa perbedaan dalam mekanisme leverage, biaya, dan tingkat leverage.

Kontrak perpetual adalah produk turunan yang diperdagangkan aset sintetis dan memiliki karakteristik perdagangan dengan margin. Harga aset yang mendasari dilacak secara sintetis, tanpa perlu melakukan perdagangan aset yang mendasarinya sebenarnya. Namun, perdagangan marjin melibatkan pinjaman sebenarnya dan perdagangan aset kripto sebenarnya.

Dengan munculnya kontrak perpetual, konsep tingkat pendanaan muncul. Tujuannya adalah untuk menjaga harga transaksi kontrak perpetual konsisten dengan harga referensi yang mendasarinya. Jika harga kontrak lebih tinggi dari harga spot, maka pembeli akan membayar penjual. Dengan kata lain, para trader perlu terus-menerus membayar biaya untuk meminjam.

Leverage dalam kontrak perpetual umumnya lebih tinggi daripada dalam perdagangan marjin, dan bisa mencapai hingga 100x. Mekanisme likuidasi dan leverage aktual sama dengan perdagangan marjin.

Token Berdaya Guna

Token berleverage adalah derivatif yang memberikan pemegangnya paparan leverage ke pasar kripto tanpa harus khawatir tentang mengelola posisi leverage secara aktif. Meskipun memberikan paparan leverage kepada pemegangnya, mereka tidak memerlukan penanganan margin, likuidasi, kolateral, atau tingkat pendanaan.

Perbedaan terbesar antara token ber-leverage dan perdagangan marjin/kontrak perpetual adalah bahwa token ber-leverage akan disetel ulang secara berkala atau ketika ambang batas tertentu tercapai untuk mempertahankan tingkat leverage tertentu.

Ini jelas berbeda dari perdagangan margin dan kontrak abadi — leverage aktual dari produk-produk ini terus berubah sesuai dengan fluktuasi harga, bahkan jika pedagang mungkin awalnya menentukan tingkat leverage.

Mari kita lihat bagaimana rebalancing bekerja dalam contoh 3x ETH di atas:

Anda memiliki $100 USDC dan membeli token leverage ETHBULL (3x). Protokol akan secara otomatis meminjam $200 dalam USDC dan melakukan perdagangan $200 dalam ETH.

Anggaplah harga ETH telah naik 20%, sementara harga token ETHBULL (3x) naik menjadi 300* (1 +20%) -200 = $160 sebelum rebalancing. Leverage aktual Anda sekarang adalah 2.25 (360/160), di bawah leverage target Anda.

Sebagai bagian dari proses rebalancing, protokol akan meminjam lebih banyak dolar dari kolam stablecoin dan membeli token ETH tambahan untuk membawa leverage kembali ke 3x. Dalam contoh kami, protokol akan meminjam tambahan $120 dan menukarnya dengan ETH. Dengan demikian, total leverage kembali menjadi (360+120) /160 = 3 kali.

Anggaplah harga ETH telah turun 20%, sementara harga token ETHBULL (3x) turun menjadi 300* (1-20%) -200 = $40 sebelum rebalancing. Leverage sebenarnya Anda sekarang akan menjadi 6 (240/40), di atas leverage target Anda.

Dalam kasus ini, perjanjian akan menjual token ETH dan membayar utang yang masih belum lunas untuk mengurangi leverage. Dalam contoh ini, protokol akan menjual $120 dalam ETH untuk membayar kolam. Utang akan menjadi $80, dan leverage total akan sekali lagi menjadi (240-120) /40 = 3x.

Dengan kata lain, token berleveraged akan secara otomatis direleveraged dalam keuntungan dan deleveraged dalam kerugian untuk mengembalikan tingkat leverage target mereka. Jika mekanisme ini berfungsi dengan baik, bahkan dalam tren pasar yang tidak menguntungkan, pemegang token berleveraged tidak akan dilikuidasi karena mekanisme deleveraging akan terus mengurangi tingkat leverage efektif pengguna.

Akibatnya, kolam pinjaman dalam model token berleverage akan terbebas dari risiko likuidasi dan lebih aman daripada kolam pinjaman dalam perdagangan marjin.

Contoh aplikasi leverage

Sekarang setelah kita belajar tentang beberapa jenis protokol DeFi umum dari leverage, mari kita bahas penerapan leverage secara detail terkait dengan protokol DeFi spesifik.

GMX

GMX [2]adalah pertukaran spot dan perpetual terdesentralisasi yang menawarkan para pedagang kemampuan untuk melakukan perdagangan aset dengan leverage hingga 50 kali. Perjanjian saat ini berjalan di Arbitrum dan Avalanche. Di GMX, para pedagang sepenuhnya sadar akan situasi pihak lawan mereka, yang benar-benar berbeda dari perdagangan di CEX. Berbeda dengan perjanjian kontrak perpetual lainnya seperti dYdX, GMX beroperasi sepenuhnya on-chain dan menggunakan fungsionalitas AMM untuk memungkinkan perdagangan dengan leverage.

Apa yang membedakan GMX dari layanan lain adalah bahwa ini adalah pertukaran terdesentralisasi yang menyediakan layanan perdagangan berleverage. Dalam hal ini, ini menggabungkan pengalaman yang mirip dengan pertukaran DeFi lainnya seperti Uniswap dengan layanan perdagangan berleverage yang ditawarkan oleh Binance dan lainnya.

GMX memiliki kolam likuiditas GLP, yang merupakan kolam aset ganda yang menyediakan likuiditas untuk perdagangan marjin: pengguna dapat melakukan long/short dan mengeksekusi perdagangan dengan mencetak dan menghancurkan token GLP. Kolam ini menghasilkan biaya LP dari perdagangan dan perdagangan berleverage, yang didistribusikan kepada pemegang GMX dan GLP.

Untuk melakukan perdagangan dengan leverage, para trader menyetor jaminan ke dalam sebuah perjanjian. Para trader dapat memilih leverage hingga 50x. Semakin tinggi leverage, semakin tinggi harga likuidasi, yang akan meningkat secara bertahap seiring dengan meningkatnya biaya pinjaman.

Sebagai contoh, ketika melakukan long pada ETH, para trader sedang "menyewa" ruang naik ETH dari kolam GLP; ketika melakukan short pada ETH, para trader sedang "mengontrak" ruang naik stablecoin terhadap ETH dari kolam GLP. Namun, aset-aset dalam kolam GLP sebenarnya tidak disewakan.

Saat menutup posisi, jika trader bertaruh dengan benar, keuntungan akan dibayarkan dalam bentuk peningkatan token dari kolam GLP; sebaliknya, kerugian akan dikurangkan dari agunan dan dibayarkan ke dalam kolam. GLP memperoleh keuntungan dari kerugian dan keuntungan trader.

Dalam proses tersebut, para trader membayar biaya transaksi, biaya pembukaan/penutupan, dan biaya pinjaman sebagai imbalan atas ruang ke atas untuk membeli/menjual token-tokens tertentu (BTC, ETH, AVAX, UNI, dan LINK) terhadap dolar Amerika Serikat.

Perdagangan Merkle

Perdagangan Merkle[3]adalah platform perdagangan terdesentralisasi yang menawarkan perdagangan cryptocurrency, forex, dan komoditas dengan leverage hingga 1.000x dan fitur perdagangan yang berpusat pada pengguna. Merkle Trade didukung oleh blockchain Aptos dan memiliki kinerja dan skalabilitas kelas satu. Dibandingkan dengan Jaringan Gains, yang menawarkan leverage tinggi yang sama, platform ini memiliki keterlambatan transaksi dan biaya yang lebih rendah.

Tidak seperti kebanyakan bursa, tidak ada order book di Merkle Trade. Sebagai gantinya, Merkle LP bertindak sebagai pihak lawan untuk setiap perdagangan, dan ketika para pedagang kehilangan uang, itu mengambil jaminan dan membayar keuntungan pada perdagangan yang telah ditutup dengan hasil positif.

  • Perdagangkan kriptokurensi, forex, dan komoditas dengan leverage hingga 1,000x

Merkle Trade dirancang dari awal untuk menawarkan berbagai pasangan perdagangan, termasuk kriptokurensi, forex, dan komoditas, serta beberapa leverage tertinggi di pasar; hingga 150x pada kriptokurensi dan hingga 1.000x pada forex.

  • Eksekusi pesanan harga yang adil, latensi milidetik, slippage minimal

Menghasilkan blockchain dengan Aptos, yang memiliki latensi terendah hingga saat ini, dapat memberikan pengalaman transaksi on-chain tercepat. Bagi para trader, ini berarti pengalaman trading yang lebih cepat dan kurangnya pergeseran harga akibat keterlambatan eksekusi.

  • Transaksi terdesentralisasi, non-custodial tanpa risiko pihak lawan

Pedagang melakukan perdagangan dengan kolam likuiditas (Merkle LP), yang bertindak sebagai pihak lawan untuk setiap transaksi dalam perjanjian. Semua transaksi dan penyelesaian dilakukan oleh kontrak pintar, dan tidak ada hosting dana pengguna kapan pun.

  • Biaya pemrosesan terendah

Merkle Trade mengklaim memiliki salah satu biaya terendah di pasar hingga saat ini. Saat diluncurkan, biaya untuk pasangan perdagangan kripto serendah 0,05%, dan biaya untuk pasangan perdagangan forex serendah 0,0075%.

DYDX

DYDX

dYdX[4]adalah pertukaran terdesentralisasi (DEX) yang memberdayakan pengguna untuk melakukan perdagangan kontrak perpetual secara efisien sambil memiliki kontrol penuh atas aset. Sejak diluncurkan pada tahun 2021, dYdX V3 telah mengadopsi solusi penskalaan non-kustodial tingkat kedua yang unik untuk mengimplementasikan pertukarannya, namun buku pesan dan mesin pencocokannya masih dikelola secara terpusat.

Sekarang, dengan dYdX V4, protokol ini tumbuh menjadi rantai sendiri, dan seluruh protokol sepenuhnya diubah untuk mencapai desentralisasi lengkap sambil meningkatkan throughput. dYdX juga mencakup tiga fungsi: peminjaman, perdagangan berleverage, dan kontrak perpetual. Perdagangan berleverage dilengkapi dengan fungsi pinjaman. Dana yang didepositokan oleh pengguna secara otomatis membentuk kolam dana. Jika ada modal yang kurang selama perdagangan, bunga secara otomatis dipinjam dan dibayarkan.

Analisis keamanan leverage

Kami telah memperkenalkan jenis-jenis umum dan aplikasi dari leverage dalam DeFi. Selain itu, masih ada banyak isu keamanan dalam desain leverage yang layak mendapat perhatian kita. Kami akan menganalisis isu-isu keamanan dan titik audit leverage DeFi berdasarkan kasus audit spesifik.

Membedakan antara pesanan batas dan pesanan pasar

Dalam kebanyakan aplikasi pertukaran berleverage, terdapat pesanan limit dan pesanan pasar. Diferensiasi dan verifikasi yang ketat terhadap pesanan limit dan pesanan pasar sangatlah penting.Selanjutnya, kami akan melakukan analisis mendetail terhadap isu-isu yang kami temukan dalam audit Merkle Trade [5].

biarkan sekarang = timestamp: :now_seconds (); jika (sekarang - order.created_timestamp > 30) {         cancel_order_internal(             _order_id,             order,             T_CANCEL_ORDER_EXPIRED         );         kembali     };

Bagian kode ini melakukan pemeriksaan dalam fungsi order, di mana ia memeriksa apakah sudah lebih dari 30 detik sejak pesanan dibuat. Jika kondisinya terpenuhi, panggil cancel_order_internal() untuk membatalkan pesanan. Namun, jika pesanan adalah pesanan limit, itu berarti pesanan memiliki harga tertentu yang ditetapkan oleh pedagang dan mereka bersedia membeli atau menjual aset dengan harga tersebut. Tidak boleh ada penilaian seperti itu saat mengeksekusi pesanan limit; ini dapat menyebabkan sebagian besar pesanan limit tidak dieksekusi. Oleh karena itu, penting untuk secara ketat membedakan logika perdagangan antara pesanan limit dan pesanan pasar.

Kesalahan perhitungan leverage

Kesalahan perhitungan selalu menjadi masalah yang sangat umum dalam DeFi, dan juga sangat umum dalam leverage. Kami akan menggunakan isu yang ditemukan oleh protokol Unstoppable [6] dalam audit pihak ketiga untuk secara menyeluruh memeriksa masalah perhitungan leverage.

Mari kita lihat kode untuk menghitung leverage di Unstoppable:

def _calculate_calculation ( _position_value: uint256, _debt_value: uint256, _margin_value: uint256) - > uint256: jika _position_value < = _debt_value: #bad debt Kembalikan max_value (uint256) Kembalikan ( precision * (_debt_value + _margin_value) /(_position_value - _debt_value) /PRECISION )

Fungsi _calculate_margin menyebabkan leverage dihitung secara tidak benar dengan menggunakan _debt_value + _margin_value sebagai pembilang daripada _position_value. Tiga parameter masukan fungsi _position_value, _debt_value, dan _margin_value semuanya ditentukan oleh informasi harga yang diberikan oleh orakel on-chain Chainlink. Di sini, _debt_value mengindikasikan nilai dari mengonversi bagian utang posisi menjadi jumlah utang dolar. _margin_value mengindikasikan nilai saat ini dari jumlah margin awal posisi (dalam dolar AS). _position_value mengindikasikan nilai saat ini (dalam dolar AS) dari jumlah posisi awal posisi.

Masalah dengan perhitungan di atas adalah bahwa _nilai_hutang + _nilai_margin tidak mewakili nilai posisi. Leverage adalah rasio antara nilai posisi saat ini dan nilai margin saat ini. _nilai_posisi - _nilai_hutang adalah benar. Itu menunjukkan nilai margin saat ini, tetapi _nilai_hutang + _nilai_margin tidak mewakili nilai posisi saat ini, karena tidak ada jaminan bahwa token hutang dan token posisi memiliki fluktuasi harga terkait.

Sebagai contoh, token utangnya adalah ETH, dan token posisinya adalah BTC.

Alice menggunakan 1 ETH sebagai margin, meminjam 14 ETH ($2,000 masing-masing), dan mendapatkan 1 BTC ($30,000 masing-masing) dalam token posisi. Leverage adalah 14.

Keesokan harinya, harga ETH tetap berada di $2,000/ETH, namun harga BTC turun dari $30,000/BTC menjadi $29,000/BTC. Pada titik ini, leverage harusnya (_nilai_posisi == 29,000)/(_nilai_posisi == 29,000 - _nilai_hutang == 28,000) = 29, bukan nilai yang dihitung dalam kontrak: (_nilai_hutang == 28,000 + _nilai_margin == 2,000)/(_nilai_posisi == 29,000 - _nilai_hutang == 28,000) = 30.

Oleh karena itu, untuk memperbaiki hal ini, rumus yang benar seperti yang disebutkan di atas harus digunakan untuk menghitung leverage dalam kontrak pintar. Kesalahan perhitungan leverage dapat menyebabkan likuidasi yang tidak adil atau posisi yang terlalu banyak terkena leverage di hadapan fluktuasi harga.

Dalam kontrak pintar, memastikan perhitungan leverage yang tepat sangat penting untuk menjaga kekokohan sistem dan kepentingan pengguna. Perhitungan leverage yang benar harus didasarkan pada rasio antara nilai posisi saat ini dan nilai margin saat ini. Jika rumus perhitungan yang salah digunakan, hal itu dapat menyebabkan sistem bereaksi tidak tepat terhadap perubahan harga, dapat melikuidasi posisi yang seharusnya tidak dilikuidasi, atau memungkinkan posisi yang terlalu berleverage untuk terus ada, sehingga meningkatkan risiko sistem dan pengguna.

Kesalahan logis

kesalahan logika

Kesalahan logika memerlukan perhatian khusus dalam audit kontrak pintar, terutama dalam logika kompleks seperti perdagangan leverage DeFi.

Mari kita bahas masalah logis yang perlu diperhatikan dalam leverage DeFi menggunakan isu yang ditemukan oleh Tigris[7](Tigris, platform perdagangan leverage sintetis terdesentralisasi berbasis Arbitrum dan Polygon) dalam audit pihak ketiga.

Mari kita lihat logika fungsi penutupan batas harga di Tigris:

Fungsi limitClose ( uint _id, bool _tp, priceData calldata _priceData, Bytes calldata _signature) eksternal{   _checkDelay(_id, false);   (uint _limitPrice, address _tigAsset) = tradingExtension._limitClose(_id, _tp, _priceData, _signature);   _closePosition(_id, DIVISION_CONSTANT, _limitPrice, address(0), _tigAsset, true);}fungsi _limitClose ( uint _id, bool _tp, priceData calldata _priceData, Bytes calldata _signature) eksternal view mengembalikan (uint _limitPrice, address _TIGAsset) { _checkGas (); iPosition.trade memory _trade = position.trades (_id);   _tigAsset = _trade.tigAsset;   getVerifiedPrice (_trade.asset, _priceData, _signature, 0); uint256 _price = _priceData.price;   if (_trade.orderType! = 0) revert (" 4 "); //isLimit if (_tp) { if (_trade.tpPrice == 0) revert (" 7 "); //limitNotSet if (_trade.direction) {           if (_trade.tpPrice > _price) revert("6"); //LimitNotMet       } else {           if (_trade.tpPrice < _price) revert("6"); //LimitNotMet       } _limitPrice = _trade.tpPrice;   } else { if (_trade.slprice == 0) revert (" 7 "); //limitNotSet if (_trade.direction) {           if (_trade.slPrice < _price) revert("6"); //LimitNotMet       } else {           if (_trade.slPrice > _price) revert("6"); //LimitNotMet       } //@audit stop loss is closed at user specified price NOT market price _limitPrice = _trade.slprice;   }}

Ketika menggunakan stop-loss untuk menutup posisi, harga penutupan pengguna adalah harga stop-loss yang ditetapkan oleh pengguna, bukan harga saat ini dari aset. Dalam kasus pasar yang bergerak ke arah tertentu dan leverage tinggi, pengguna mungkin menyalahgunakan hal ini untuk mencapai perdagangan yang hampir bebas risiko. Pengguna dapat membuka posisi panjang dan menetapkan harga stop-loss yang $0.01 lebih rendah dari harga saat ini.

Jika harga turun segera dalam pembaruan berikutnya, mereka akan menutup posisi mereka pada harga masuk mereka dan hanya membayar biaya pembukaan dan penutupan. Jika harga naik, mereka kemungkinan besar akan menghasilkan banyak uang. Sebagai hasilnya, pengguna dapat menyalahgunakan metode penetapan harga stop-loss untuk membuka perdagangan dengan leverage tinggi, potensi keuntungan tinggi, dan risiko downside rendah.

Fluktuasi harga

Harga Bak Mandi

Dampak fluktuasi harga terhadap leverage DeFi sangat penting. Hanya dengan selalu mempertimbangkan fluktuasi harga kita dapat memastikan keamanan perjanjian leverage. Mari kita gunakan DeFiner [8]protokol sebagai contoh untuk analisis mendalam atas masalah yang ditemukan dalam audit pihak ketiga:

Protokol DeFiner menjalani dua pemeriksaan sebelum melakukan penarikan.

Pertama, metode memeriksa apakah jumlah yang diminta oleh pengguna untuk ditarik melebihi saldo aset tersebut:

fungsi otorisasi (alamat _accountAddr, alamat _token, uint256 _jumlah) eksternal hanyaDiuji kembali (kembalikan (uint256)) { //Periksa apakah jumlah yang cukup kurang dari saldo pengguna memerlukan (_jumlah < = getDepositBalanceCurrent (_token, _accountAddr), " Saldo yang diperoleh. ");   uint256 borrowLtv = globalConfig.tokenInfoLogistry () .getBorrowLtv (_token);

Kedua, metode ini memeriksa apakah penarikan akan membuat rasio leverage pengguna terlalu tinggi. Jumlah yang ditarik akan dikurangkan dari 'daya pinjam' harga saat ini pengguna. Jika nilai pinjaman total pengguna melebihi daya pinjam baru, metode tersebut gagal karena pengguna tidak lagi memiliki cukup jaminan untuk mendukung posisi pinjamannya. Namun, persyaratan ini hanya akan diperiksa jika pengguna tidak terlalu terleverage:

jika (getBorrowEth (_accountAddr) < = getBorrowPower (_accountAddr)) memerlukan ( getBorrowEth (_accountAddr) < = getBorrowPower (_accountAddr) .sub ( _amount.mul (globalConfig.tokenInfoRegistry () .priceFromAddress (_token)) .mul (borrowLtv) .div (utils.getDivisor (alamat (globalConfig), _token)) .div (100) ), " Colloquium Collège ketika ");

Jika pengguna telah meminjam lebih dari yang diizinkan oleh “ daya pinjam “ mereka, mereka dapat menarik uang tanpa batasan. Ini bisa terjadi dalam berbagai situasi, yang paling umum adalah fluktuasi harga. Perjanjian tidak mempertimbangkan dampak fluktuasi harga pada perjanjian, yang menyebabkan masalah ini.

Lainnya

Selain dari efek tidak membedakan antara pesanan batas dan pesanan pasar, kesalahan perhitungan, kesalahan logika, dan fluktuasi harga yang disebutkan di atas, ada banyak poin keamanan terkait dengan perjanjian leverage yang memerlukan perhatian kami. Ini termasuk, namun tidak terbatas pada, isu-isu seperti serangan pinjaman kilat, manipulasi harga, keamanan nabi, kontrol otoritas, pemeriksaan leverage yang tidak memadai, atau kurangnya pemeriksaan. Faktor-faktor ini harus dipertimbangkan dengan cermat saat merancang dan melaksanakan perjanjian leverage untuk memastikan kekokohan perjanjian dan keamanan aset pengguna. Langkah-langkah pencegahan, pemantauan real-time, dan rencana tanggap darurat juga kunci untuk mengurangi risiko potensial dan melindungi kepentingan pengguna.

dijumlahkan

Kesimpulan

Pengenalan perdagangan ber-leverage dalam protokol DeFi memang memberikan pasar dengan manuverabilitas yang lebih besar, sambil juga membawa mekanisme perdagangan yang lebih kompleks. Meskipun perdagangan ber-leverage memberikan pengguna dengan lebih banyak peluang investasi, risiko potensial dan tantangan terhadap keamanan protokol juga menjadi lebih signifikan.

Saat leverage meningkat, operasi perjanjian menjadi lebih fleksibel, namun sebagai hasilnya, mereka menjadi lebih rentan dan lebih rentan terhadap berbagai ancaman keamanan. Ini termasuk potensi kegagalan untuk membuat perbedaan yang ketat antara pesanan batas dan pesanan pasar, kesalahan perhitungan, kesalahan logika, dan sensitivitas ekstrim terhadap faktor-faktor seperti fluktuasi harga. Dalam kasus ini, kita harus lebih memperhatikan keamanan protokol untuk memastikan bahwa aset pengguna dilindungi secara efektif.

Sebagai tim keamanan blockchain terkemuka di bidang Web3, ScaleBit didistribusikan di Silicon Valley, Singapura, Hong Kong, Taiwan, dll. Kami telah menyediakan solusi keamanan blockchain untuk 200+ lembaga dan proyek di sektor Web3 global, mengumpulkan 180.000+ baris kode audit, dan melindungi lebih dari $8 miliar aset pengguna. Jadikan Keamanan Aksesible untuk Semua! Jika Anda memiliki kebutuhan audit keamanan, jangan ragu untuk menghubungi kami. Kami akan menyediakan solusi keamanan yang rinci, komprehensif, dan profesional untuk melindungi Anda dan bidang Web3 dengan aman!

Penyangkalan:

  1. Artikel ini telah dicetak ulang dari [ScaleBit]dan hak cipta dimiliki oleh penulis asli [PolarisJika Anda memiliki keberatan terhadap pencetakan ulang, silakan hubungi tim Gate Learn, dan tim akan menanganinya sesegera mungkin sesuai dengan prosedur yang relevan.

  2. Penyangkalan: Pandangan dan opini yang diungkapkan dalam artikel ini hanya mewakili opini pribadi penulis dan tidak merupakan saran investasi apa pun.

  3. Terjemahan artikel ke dalam bahasa lain dilakukan oleh tim Gate Learn. Kecuali disebutkan, menyalin, mendistribusikan, atau menjiplak artikel yang diterjemahkan dilarang.

Comece agora
Inscreva-se e ganhe um cupom de
$100
!