सुरक्षा
किसमें मूल्य है
- पूलों का ETH और टोकन, ऐसी पोज़िशन में जिन्हें कोई नहीं निकाल सकता। किसी पक्ष का ETH उसके पूल से तभी निकलता है जब वह पक्ष उसमें बेचा जाता है: किसी ट्रेडर के ज़रिए, या किसी ट्रेड के तीनों क़ीमतों को अलग कर देने के बाद hook के पुनर्संतुलन के ज़रिए।
- पॉट, क्रिएटर फ़ीस और प्रोटोकॉल फ़ीस, जिन्हें hook, Uniswap V4 के PoolManager में ETH दावों के रूप में रखता है, और हर मुक़ाबले का हिसाब अलग रखा जाता है।
इन्हें क्या सुरक्षित रखता है
- लॉक की गई लिक्विडिटी। सिर्फ़ फ़ैक्टरी रजिस्टर्ड पूल खोल सकती है या उनकी लॉन्च लिक्विडिटी जोड़ सकती है; निकासी और डोनेशन रिवर्ट होते हैं।
- सीमित पाने वाले। पॉट सिर्फ़ अपने मुक़ाबले के विजेता को ख़रीदता है; क्रिएटर फ़ीस सिर्फ़ मुक़ाबले के क्रिएटर को जाती है: लॉन्च करने वाले वॉलेट को, या उस पते को जिसे भूमिका सौंपी गई और जिसने उसे स्वीकार किया। प्रोटोकॉल फ़ीस मौजूदा ट्रेज़री को जाती है, जिसे फ़ैक्टरी का मालिक 48 घंटे बाद बदल सकता है, पहले से जमा प्रोटोकॉल फ़ीस के लिए भी।
- फ़ैक्टरी की सीमित शक्तियाँ। टोकन का कोई मालिक या मिंट फ़ंक्शन नहीं है, और hook को न अपग्रेड किया जा सकता है न रोका जा सकता है। फ़ैक्टरी का मालिक नए लॉन्च रोक सकता है, आगे के मुक़ाबलों के लिए सीमित शर्तें प्रस्तावित कर सकता है, या इंतज़ार की अवधि के बाद ट्रेज़री बदल सकता है। वह सभी मुक़ाबलों की स्वैप फ़ीस में प्रोटोकॉल का हिस्सा तुरंत शून्य तक घटा भी सकता है, या फिर बढ़ा सकता है, पर कभी भी मुक़ाबले की शर्तों से ज़्यादा नहीं: प्रोटोकॉल जो नहीं लेता, वह पॉट में जाता है। मालिक यह भूमिका हमेशा के लिए छोड़ सकता है (
renounceOwnership): तब शर्तें, ट्रेज़री, प्रोटोकॉल की दर और कोई रोक जैसी हैं वैसी ही रहती हैं, सिवाय पहले से प्रस्तावित बदलाव के, जिसे इंतज़ार की अवधि के बाद कोई भी लागू कर सकता है। - स्वैप से पहले सेटलमेंट। क्लोज़ के बाद का पहला स्वैप, ट्रेडिंग से पहले, ख़त्म हुए औसत को सेटल करता है। बायबैक की सीमा tick के अंशों तक की सटीकता से रखे गए एक संदर्भ से लगभग 10% ऊपर है: ETH पूल के tick का 30 मिनट का एक्सपोनेंशियल औसत, जिसे मौजूदा tick से ऊपर नहीं रखा जाता, ताकि वह क़ीमत के साथ तुरंत नीचे आए।
- सिर्फ़ ETH वाले राउंड। अनुपात और राउंड का औसत दोनों ETH पूलों का इस्तेमाल करते हैं। कोई ETH क़ीमत न हिलाने वाला A/B बदलाव न सिग्नल बदलता है, न किसी वरना शांत राउंड की गतिविधि।
- फ़ीस सिर्फ़ पूरे भराव पर। पहले से फ़ीस लिए गए स्वैप रिवर्ट हो जाते हैं अगर वे माँगी गई रक़म पूरी तरह नहीं भर पाते। नेटवर्क गैस अलग है।
- अलग-थलग पुनर्संतुलन। सिर्फ़ मुनाफ़े वाले लूप रखे जाते हैं, जो बेचने वाले पूल के ETH से सीमित होते हैं। नाकाम कोशिश वापस होकर छोड़ दी जाती है; गैस की कमी में स्वैप ही रिवर्ट होता है (
ArbitrageStarved), ताकि कॉल करने वाला गैस रोककर पुनर्संतुलन को छोड़ न सके। यह क़ीमतों के मेल खाने या ट्रेडिंग के हर नुक़सान से सुरक्षा की गारंटी नहीं देता। - हर रूट पर एक जैसे नियम। राउटर चाहे Duel का हो या कोई दूसरा V4 राउटर, hook फ़ीस, टैक्स और बर्न लेता है।
फ़ैक्टरी लॉन्च रुके हुए होने की स्थिति में शुरू होती है। जब तक paused() true है, सिर्फ़ owner() मुक़ाबला लॉन्च कर सकता है; बाक़ी कॉल CreationPaused के साथ रिवर्ट होती हैं। मालिक setPaused(false) से लॉन्च खोलता है। मौजूदा मुक़ाबलों में ट्रेड जारी रहता है।
साइट क्या दिखाती है
- सिर्फ़ साइट से आई इमेज। पेज किसी मुक़ाबले की इमेज सिर्फ़ Duel के अपने पते से दिखाते हैं, और सिर्फ़ वही इमेज जिन्हें साइट ने प्रोसेस किया हो: एक JPEG, PNG या WebP, जिसे पहले उसके हेडर से पढ़ा जाता है (अधिकतम 1536 × 1536 पिक्सेल और 5 MB), WebAssembly में डिकोड किया जाता है, 1024 पिक्सेल के भीतर फ़िट किया जाता है और उसके मेटाडेटा के बिना फिर से WebP के रूप में एनकोड किया जाता है। पेजों की सुरक्षा नीति उन्हें कहीं और से इमेज लोड करने नहीं देती।
- अलग रखे गए कोडेक। इमेज एक अलग Worker में डिकोड होती हैं, जिस तक सिर्फ़ साइट पहुँचती है और जिसमें कुछ नहीं रहता: न कोई की, न कोई स्टोर। किसी कोडेक में ख़ामी सिर्फ़ उसी इमेज तक पहुँचेगी जिसे वह पढ़ रहा है। साइट उस Worker के जवाब (अपेक्षित साइज़ की एक स्थिर WebP) को रखने से पहले जाँचती है, और C डिकोडर हर इमेज के लिए नए सिरे से शुरू होते हैं।
- सीधे कॉन्ट्रैक्ट से लॉन्च हुए मुक़ाबले। उनके ब्योरे में कोई भी पता हो सकता है। साइट कोई https इमेज नहीं दिखाती; IPFS इमेज को एक सार्वजनिक गेटवे से एक बार लाती है (अधिकतम 5 MB और 10 सेकंड), उसे अपलोड की तरह प्रोसेस करती है और अपनी कॉपी दिखाती है, या पक्ष के शुरुआती अक्षर।
- सीमाओं के भीतर अपलोड। साइट सिर्फ़ अपने पेजों से इमेज लेती है: एक पते से प्रति मिनट दस, और रोज़ एक सीमित संख्या। जिस इमेज को कोई मुक़ाबला इस्तेमाल नहीं करता, उसे एक दिन बाद हटा दिया जाता है।
इसकी जाँच कैसे हुई
- ऑटोमेटेड टेस्ट कॉन्ट्रैक्ट के व्यवहार, वेब ऐप और अलर्ट बॉट को कवर करते हैं। कवरेज टेस्ट का एक मानक है, इस बात का सबूत नहीं कि हर संभव व्यवहार सुरक्षित है।
- फ़ोर्क टेस्ट Robinhood Chain पर डिप्लॉय हुए Uniswap V4 कॉन्ट्रैक्ट के साथ इंटीग्रेशन को परखते हैं, जिनमें Universal Router, Permit2 और V4 Quoter शामिल हैं।
- रिग्रेशन टेस्ट आंतरिक समीक्षा में मिले मामलों को बनाए रखते हैं, जिनमें फ़ीस का हिसाब, लॉन्च के किनारे वाले मामले, सेटलमेंट और ख़ाली हो चुके पूल शामिल हैं।
- इनवेरिएंट टेस्ट ट्रेड, सेटलमेंट और क्लेम के रैंडम क्रमों में हिसाब जाँचते हैं: ETH दावे बकाया रक़म से मेल खाने चाहिए, और बीच के टोकन hook, फ़ैक्टरी या राउटर में नहीं बचने चाहिए। तय संख्या के रन पास करना हर संभव क्रम के लिए सुरक्षा साबित नहीं करता।
आंतरिक समीक्षा में ये बातें मिलीं और ठीक की गईं: तय आउटपुट वाला एक रूट जो एंटी-स्नाइप टैक्स से बच निकलता था, एक अनुपात जो अकेले ख़रीदे गए पक्ष के साथ नहीं चलता था, ख़ाली हो चुके पूल जिन्हें बायबैक का संदर्भ मूल्य ग़लत पढ़ता था, और मुक़ाबले के मेटाडेटा में असुरक्षित लिंक।
कमज़ोरी की रिपोर्ट करना
अगर आपको लगता है कि आपने कोई कमज़ोरी ढूँढी है, तो उसकी रिपोर्ट करने के लिए समय निकालने का धन्यवाद। हमें Telegram पर @chatwithdivine पर निजी तौर पर लिखें कि आपको क्या मिला और, हो सके तो, उसे दोबारा कैसे किया जाए, और कुछ भी सार्वजनिक करने से पहले हमें उसकी जाँच का समय दें। हम जल्दी जवाब देंगे और आपको जानकारी देते रहेंगे।
हम कभी पहले संदेश नहीं भेजते: सिर्फ़ @chatwithdivine पर भरोसा करें।