मेटामॉर्फिक स्मार्ट कॉन्ट्रैक्ट्स प्लेटोब्लॉकचैन डेटा इंटेलिजेंस का पता लगाने के लिए एक उपकरण। लंबवत खोज। ऐ.

मेटामॉर्फिक स्मार्ट अनुबंधों का पता लगाने के लिए एक उपकरण

एक महत्वपूर्ण एथेरियम सुरक्षा धारणा यह है कि स्मार्ट अनुबंध कोड अपरिवर्तनीय है और इसलिए इसे ब्लॉकचेन पर तैनात करने के बाद बदला नहीं जा सकता है। व्यवहार में, कुछ स्मार्ट अनुबंध कर सकते हैं परिवर्तन - तैनात किए जाने के बाद भी। कुछ चतुर तरकीबों के साथ, आप कायापलट स्मार्ट अनुबंध बना सकते हैं जो "कायापलट"किसी और चीज़ में - और यह समझकर कि उन्हें क्या संभव बनाता है, आप उनका पता लगा सकते हैं।

मेटामॉर्फिक स्मार्ट कॉन्ट्रैक्ट्स म्यूटेबल हैं, जिसका अर्थ है कि डेवलपर्स उनके अंदर कोड बदल सकते हैं। ये स्मार्ट अनुबंध वेब3 उपयोगकर्ताओं के लिए एक गंभीर जोखिम पैदा करते हैं, जो कोड में अपना विश्वास रखते हैं, जिसे वे पूर्ण स्थिरता के साथ चलाने की उम्मीद करते हैं, विशेष रूप से खराब अभिनेता इस आकार बदलने की क्षमता का फायदा उठा सकते हैं। एक हमलावर की कल्पना करें जो तकनीक का उपयोग उन लोगों को "गलीचा" करने के लिए करता है जो एक स्मार्ट अनुबंध में टोकन लगा रहे हैं जो उन्हें एहसास नहीं है कि वे मेटामॉर्फिक हैं। इस और इसी तरह के परिसरों पर आधारित हमले स्कैमर्स को लोगों का शिकार करने के लिए तैयार कर सकते हैं और आम तौर पर विकेंद्रीकृत प्रणालियों के पूर्ण वादे में विश्वास को कमजोर कर सकते हैं।

यह विश्लेषण करने के लिए कि क्या स्मार्ट अनुबंध में कायांतरण गुण हैं, मैंने एक सरल बनाया मेटामॉर्फिक कॉन्ट्रैक्ट डिटेक्टर (के मूल कार्य से प्रेरित और निर्माण जेसन कार्वर, 0 रु, तथा दूसरों). कोई भी इस टूल का उपयोग यह जांचने के लिए कर सकता है कि क्या दिया गया अनुबंध लाल झंडे प्रदर्शित करता है जो कायापलट की संभावना का संकेत दे सकता है। विधि पूर्ण-प्रमाण नहीं है: सिर्फ इसलिए कि एक स्मार्ट अनुबंध एक ध्वज दिखाता है, इसका मतलब यह नहीं है कि यह आवश्यक रूप से कायापलट है; और सिर्फ इसलिए कि ऐसा नहीं है, इसका मतलब यह नहीं है कि यह सुरक्षित है। चेकर केवल एक त्वरित प्रारंभिक मूल्यांकन प्रदान करता है कि एक अनुबंध हो सकता है संभावित संकेतकों के आधार पर कायापलट हो। 

Web3 उपयोगकर्ताओं को मेटामॉर्फिक अनुबंधों द्वारा उत्पन्न खतरों से खुद को परिचित करना चाहिए ताकि वे संभावित हमलों की तलाश कर सकें और उनसे बच सकें। वॉलेट और ब्लॉकचैन इंडेक्सर्स एक स्मार्ट अनुबंध के साथ बातचीत करने से पहले उपयोगकर्ताओं को चेतावनी देकर मदद कर सकते हैं जिसमें मेटामॉर्फिक गुण हो सकते हैं। इस टूल का उद्देश्य लोगों को इस संभावित खतरे के बारे में शिक्षित करना... और इससे बचाव करना दोनों में मदद करना है।

मेटामॉर्फिक स्मार्ट कॉन्ट्रैक्ट्स का पता लगाना

RSI मेटामॉर्फिक कॉन्ट्रैक्ट डिटेक्टर मैंने छह गुणों का विश्लेषण किया है जो यह संकेत दे सकते हैं कि क्या एक स्मार्ट अनुबंध कायापलट है।

    1. क्या ज्ञात मेटामॉर्फिक कोड अनुबंध को लागू करने के लिए इस्तेमाल किया गया था? यदि ज्ञात मेटामॉर्फिक बाइटकोड - निचला स्तर, वर्चुअल मशीन-पठनीय कोड जो एथेरियम स्मार्ट कॉन्ट्रैक्ट्स, आमतौर पर सॉलिडिटी में लिखा जाता है, संकलित होने के बाद बदल जाता है - किसी दिए गए स्मार्ट कॉन्ट्रैक्ट की तैनाती के लिए लेनदेन में दिखाई देता है, यह एक प्रमुख लाल झंडा है। आने वाले अनुभागों में, हम 0age द्वारा विकसित मेटामॉर्फिक बाइटकोड के ऐसे ही एक उदाहरण पर चर्चा करेंगे। एक महत्वपूर्ण चेतावनी: मेटामॉर्फिक बाइटकोड की संभावित असंख्य विविधताएं हैं, जो सभी किस्मों का पता लगाना मुश्किल बनाती हैं। हालांकि प्रसिद्ध उदाहरणों के लिए स्कैन करके, डिटेक्टर उन हमलावरों के लिए कम लटकने वाले फल को समाप्त कर देता है जो केवल मौजूदा उदाहरणों को कॉपी और पेस्ट कर रहे हैं।
    2. क्या स्मार्ट अनुबंध कोड स्वयं को नष्ट कर सकता है? एक अनुबंध में कोड को बदलने के लिए - एक मेटामॉर्फिक अनुबंध बनाने में एक महत्वपूर्ण कदम - एक डेवलपर को पहले पहले से मौजूद कोड को हटाना होगा। ऐसा करने का एकमात्र तरीका का उपयोग करना है सेल्फडेस्ट्रक्ट ऑपकोड, एक आदेश जो ठीक वैसा ही करता है जैसा वह लगता है - यह किसी दिए गए अनुबंध पते पर सभी कोड और भंडारण को मिटा देता है। एक अनुबंध में स्व-विनाशकारी कोड की उपस्थिति यह साबित नहीं करती है कि यह कायापलट है; हालाँकि, यह एक सुराग प्रदान करता है कि अनुबंध हो सकता है कायापलट हो और यह जानने लायक है, वैसे भी, क्या आप जिन अनुबंधों पर भरोसा कर रहे हैं, वे खुद को परमाणु बना सकते हैं।
    3. क्या स्मार्ट कॉन्ट्रैक्ट कहीं और से कोड में कॉल करता है? यदि विचाराधीन स्मार्ट अनुबंध सीधे आत्म-विनाश नहीं कर सकता है, तो यह अभी भी का उपयोग करके स्वयं को मिटाने में सक्षम हो सकता है प्रतिनिधिकॉल ऑपकोड. यह ओपकोड एक स्मार्ट अनुबंध को गतिशील रूप से कोड को लोड और निष्पादित करने की अनुमति देता है जो दूसरे स्मार्ट अनुबंध के अंदर रहता है। भले ही स्मार्ट कॉन्ट्रैक्ट में SELFDESTRUCT ऑपकोड न हो, यह कहीं और से सेल्फ-डिस्ट्रक्टिंग कोड लोड करने के लिए DELEGATECALL का उपयोग कर सकता है। जबकि DELEGATECALL कार्यक्षमता सीधे संकेत नहीं देती है कि क्या स्मार्ट अनुबंध कायापलट है, यह एक संभावित सुराग है - और संभावित सुरक्षा समस्या - यह ध्यान देने योग्य है। सावधान रहें कि इस सूचक में कई झूठी सकारात्मक वृद्धि करने की क्षमता है। 
    4. क्या किसी अन्य अनुबंध ने इस अनुबंध को लागू किया? मेटामॉर्फिक अनुबंधों को तैनात किया जा सकता है केवल अन्य स्मार्ट अनुबंधों द्वारा। इसका कारण यह है कि मेटामॉर्फिक अनुबंध किसी अन्य ओपकोड द्वारा सक्षम होते हैं, जो केवल अन्य स्मार्ट अनुबंधों द्वारा प्रयोग योग्य होते हैं, जिन्हें CREATE2 कहा जाता है। (हम CREATE2 पर चर्चा करेंगे - यह कैसे काम करता है और यह क्यों मायने रखता है - बाद के अनुभाग में।) यह विशेषता संभावित रूपांतर के कम से कम विशिष्ट संकेतकों में से एक है; यह एक आवश्यक लेकिन अपर्याप्त पूर्व शर्त है। इस विशेषता के लिए स्कैन करने से कई झूठी सकारात्मकताएँ उठने की संभावना है - लेकिन यह जानना मूल्यवान जानकारी है क्योंकि यह संदेह पैदा कर सकता है और अनुबंध की आगे जांच करने का एक कारण प्रदान कर सकता है, खासकर अगर स्मार्ट अनुबंध में आगे वर्णित ओपकोड शामिल है।
    5. क्या नियोक्ता अनुबंध में CREATE2 ओपकोड होता है? जैसा कि ऊपर उल्लेख किया गया है, CREATE2 के माध्यम से परिनियोजन कायापलट के लिए एक आवश्यक पूर्व शर्त है। यदि किसी नियोक्ता अनुबंध में CREATE2 ऑपकोड है, तो यह संकेत दे सकता है कि उसने अनुबंध को लागू करने के लिए CREATE2 का उपयोग किया है। यदि नियोक्ता ने वास्तव में कथित अनुबंध को तैनात करने के लिए CREATE2 का उपयोग किया है, जबकि इसका मतलब यह नहीं है कि अनुबंध आवश्यक रूप से रूपांतरित है, इसका मतलब यह है कि यह हो सकता है कायापलट हो सकता है और सावधानी से आगे बढ़ना और आगे की जांच करना बुद्धिमानी हो सकती है। फिर से, झूठी सकारात्मकता से सावधान रहें: क्रिएट2 बहुत है वैध उपयोग, बोलस्टरिंग सहित "परत 2" स्केलिंग समाधान और स्मार्ट कॉन्ट्रैक्ट वॉलेट बनाना आसान बनाता है जो web3 को बेहतर बना सकता है उपयोगकर्ता-ऑनबोर्डिंग और प्रमुख पुनर्प्राप्ति विकल्प।
    6. क्या कोड बदल गया? यह सबसे स्पष्ट कथन है, लेकिन यह केवल तब दिखाई देगा जब एक कायापलट अनुबंध पहले ही रूपांतरित हो चुका हो। यदि स्मार्ट अनुबंध का कोड हैश - एक अद्वितीय, क्रिप्टोग्राफ़िक पहचानकर्ता - उस समय से अलग है जब अनुबंध को शुरू में तैनात किया गया था, तो यह संभव है कि कोड को हटा दिया गया, बदल दिया गया या बदल दिया गया। यदि हैश अब मेल नहीं खाता है, तो कोड के बारे में कुछ बदल गया है और अनुबंध कायापलट हो सकता है। यह ध्वज कायापलट का सबसे पक्का संकेतक है, लेकिन यह मॉर्फिंग की भविष्यवाणी करने या पूर्व निर्धारित करने में मदद नहीं करेगा क्योंकि यह केवल यह जांचता है कि यह पहले ही हो चुका है।

मेटामॉर्फिक कॉन्ट्रैक्ट डिटेक्टर के लिए एक साधारण कमांड लाइन टूल बनाने के अलावा, मैंने कुछ उदाहरण स्मार्ट कॉन्ट्रैक्ट्स बनाए जो एक स्कैम मेटामॉर्फिक कॉन्ट्रैक्ट स्टेकिंग परिदृश्य को प्रदर्शित करता है, जिसका मैं अगले भाग में वर्णन करता हूं। इसमें सभी कोड उपलब्ध हैं गिटहब भंडार

कैसे एक दुर्भावनापूर्ण अभिनेता लोगों के धन की चोरी करने के लिए मेटामॉर्फिक अनुबंधों का उपयोग कर सकता है

यहां बताया गया है कि कोई व्यक्ति किसी घोटाले के हिस्से के रूप में कायापलट वाले स्मार्ट अनुबंध का उपयोग कैसे कर सकता है। 

पहला सेटअप चरण है। हमलावर दो उपकरणों का उपयोग करके ब्लॉकचेन पर एक विशिष्ट पते पर एक स्मार्ट अनुबंध को तैनात करता है: मेटामॉर्फिक बाइटकोड और CREATE2 ओपकोड। (हम इन दोनों अवधारणाओं पर बाद में विस्तार करेंगे।) मेटामॉर्फिक बाइटकोड तब वही करता है जो उसका नाम बताता है और "मॉर्फ्स"। यहाँ, यह a . में बदल जाता है ठेका लेना जहां उपयोगकर्ता ERC-20 टोकन को दांव पर लगा सकते हैं। (फिर से, हम इस मॉर्फिंग ट्रिक के विवरण पर बाद में चर्चा करेंगे। वादा करें!)

अगला चारा और स्विच आता है। अप्रत्याशित उपयोगकर्ता इस अनुबंध में अपने टोकन को दांव पर लगाते हैं, जो कि उपज या कुछ अन्य लाभ अर्जित करने की संभावना से आकर्षित होते हैं। फिर हमलावर इस स्मार्ट अनुबंध पते पर सभी स्टेकिंग कोड और "स्टेट" - ब्लॉकचैन स्टोरेज या मेमोरी - को हटा देता है सेल्फडेस्ट्रक्ट ऑपकोड पिछले अनुभाग में चर्चा की गई. (यह ध्यान दिया जाना चाहिए कि टोकन - जो एक अलग ईआरसी -20 अनुबंध के हिस्से के रूप में मौजूद हैं - स्व-विनाशकारी अनुबंध से अप्रभावित बने रहते हैं।)

अंत में, गलीचा खींचो। हमलावर एक नए अनुबंध को "पुनः नियोजित" करने के लिए सेटअप चरण में उपयोग किए गए उसी मेटामॉर्फिक बाइटकोड का पुन: उपयोग करता है। यह नया अनुबंध उसी पते पर तैनात है जिसे हाल ही में स्व-विनाशकारी अनुबंध द्वारा खाली किया गया है। हालांकि, इस बार, बायटेकोड "मॉर्फ्स" (फिर से, हम बताएंगे कि कैसे बाद में) एक दुर्भावनापूर्ण अनुबंध में बदल जाता है जो अनुबंध पते पर रखे गए सभी टोकन को चुरा सकता है। घोटाला पूरा। 

कायापलट वाले स्मार्ट अनुबंधों के जोखिम अब स्पष्ट रूप से स्पष्ट हैं। लेकिन आप अभी भी सोच रहे होंगे कि यह कायापलट की चाल वास्तव में कैसे काम करती है? इसे समझने के लिए, आपको बाइटकोड-स्तर तक गहराई से जांच करनी होगी। 

कैसे CREATE2 कायापलट की संभावना को खोलता है 

क्रिएट2 एक ऑपोड अपग्रेड है, एथेरियम से परिचय फरवरी 2019 में, जो स्मार्ट अनुबंधों को परिनियोजित करने का एक नया तरीका प्रदान करता है। 

CREATE2 डेवलपर्स को उनके स्मार्ट अनुबंधों की तैनाती पर पहले की तुलना में अधिक नियंत्रण देता है। मूल क्रिएट ऑपकोड डेवलपर्स के लिए एक नियोजित स्मार्ट अनुबंध के लिए गंतव्य पते को नियंत्रित करना मुश्किल बनाता है। CREATE2 के साथ, लोग किसी विशेष स्मार्ट अनुबंध के पते को पहले से नियंत्रित और जान सकते हैं, वास्तव में इसे ब्लॉकचेन पर तैनात करने से पहले। यह पूर्वज्ञान - साथ ही कुछ चतुर तरकीबें - लोगों को मेटामॉर्फिक स्मार्ट अनुबंध बनाने में सक्षम बनाती हैं। 

CREATE2 भविष्य की भविष्यवाणी कैसे कर सकता है? ओपकोड की गणना नियतात्मक है: जब तक इनपुट नहीं बदलते हैं, CREATE2 द्वारा निर्धारित पता नहीं बदलेगा। (यहां तक ​​​​कि सबसे छोटा परिवर्तन भी कहीं और तैनाती का कारण बनता है।)

अधिक बारीक रूप से, CREATE2 एक ऐसा फ़ंक्शन है जो कुछ तत्वों को एक साथ जोड़ता है और हैश करता है। सबसे पहले, इसमें नियोक्ता (या प्रेषक) का पता शामिल होता है: आरंभ करने वाला स्मार्ट अनुबंध जो एक माता-पिता के रूप में कार्य करता है जिसे बनाया जाना है। इसके बाद, यह प्रेषक (या "नमक") द्वारा प्रदान की गई एक मनमानी संख्या जोड़ता है, जो डेवलपर को एक ही कोड को अलग-अलग पते (नमक बदलकर) पर तैनात करने की अनुमति देता है और मौजूदा, समान अनुबंधों को ओवरराइट करने से रोकता है। अंत में, यह कुछ स्मार्ट कॉन्ट्रैक्ट इनिशियलाइज़ेशन ("init") बाइटकोड के keccak256 हैश का उपयोग करता है, जो कि एक नया स्मार्ट कॉन्ट्रैक्ट में बदलने वाला बीज है। यह हैश-टुगेदर संयोजन एक एथेरियम पता निर्धारित करता है और फिर उस पते पर दिए गए बायटेकोड को तैनात करता है। जब तक कि बाइटकोड बिल्कुल वैसा ही रहता है, CREATE2 हमेशा दिए गए बाइटकोड को ब्लॉकचेन पर उसी पते पर तैनात करेगा।

यहाँ CREATE2 फ़ॉर्मूला कैसा दिखता है। (नोट: आप नीचे दिए गए उदाहरण में एक अन्य तत्व, "0xFF" देखेंगे। यह केवल एक निरंतर CREATE2 का उपयोग करता है टकराव को रोकें पूर्ववर्ती क्रिएट ऑपोड के साथ।)

अब जब हमारे पास एक नियतात्मक पते पर कोड परिनियोजित करने का एक तरीका है, तो यह कैसे संभव है? परिवर्तन उसी पते पर कोड? सबसे पहले, यह असंभव लग सकता है। यदि आप CREATE2 का उपयोग करके नया कोड परिनियोजित करना चाहते हैं, तो बाइटकोड बदलना होगा, और इसलिए, CREATE2 किसी भिन्न पते पर परिनियोजित करेगा। लेकिन क्या होगा अगर एक डेवलपर ने बाइटकोड का निर्माण इस तरह से किया है कि जब CREATE2 एक स्मार्ट अनुबंध को लागू करता है तो वह अलग-अलग कोड में "मॉर्फ" कर सकता है?

कायापलट अनुबंध वास्तव में कैसे काम करता है

एक स्मार्ट अनुबंध को एक कायापलट अनुबंध में बदलने का नुस्खा कुल तीन स्मार्ट अनुबंधों की मांग करता है, प्रत्येक एक अद्वितीय भूमिका निभा रहा है।

इन आवश्यक घटकों में से एक है मेटामॉर्फिक कॉन्ट्रैक्ट फैक्ट्री, ऑपरेशन का दिमाग। यह "फ़ैक्टरी" मेटामॉर्फिक अनुबंध के साथ-साथ कार्यान्वयन अनुबंध नामक एक अन्य स्मार्ट अनुबंध को तैनात करने के लिए ज़िम्मेदार है, इसलिए इसका नाम मेटामॉर्फिक अनुबंध के अंदर लागू हो जाता है। इन तीन अनुबंधों के बीच एक सूक्ष्म नृत्यकला के परिणामस्वरूप कायापलट होता है, जैसा कि नीचे दिए गए चित्र में दिखाया गया है।

मेटामॉर्फिक स्मार्ट कॉन्ट्रैक्ट्स प्लेटोब्लॉकचैन डेटा इंटेलिजेंस का पता लगाने के लिए एक उपकरण। लंबवत खोज। ऐ.

आइए प्रत्येक चरण, 1-7 पर विस्तार से चर्चा करें ताकि काम पर होने वाले कार्यों पर प्रकाश डाला जा सके।

चरण 1: एक डेवलपर सब कुछ गति में सेट करता है

एक कोडर कुछ स्मार्ट कॉन्ट्रैक्ट कोड - इम्प्लीमेंटेशन कॉन्ट्रैक्ट बायटेकोड - डिज़ाइन करता है जो अंततः मेटामॉर्फिक कॉन्ट्रैक्ट में समाप्त हो जाएगा। डेवलपर इस कोड को मेटामॉर्फिक कॉन्ट्रैक्ट फैक्ट्री को भेजता है, एक स्मार्ट कॉन्ट्रैक्ट जिसका मुख्य उद्देश्य अन्य स्मार्ट कॉन्ट्रैक्ट्स को तैनात करना है। यह क्रिया संपूर्ण मेटामॉर्फिक अनुबंध निर्माण प्रक्रिया को गति में सेट करती है।

आगे जो कुछ भी है वह इस प्रारंभिक चरण का परिणाम है। वास्तव में, चरण 1 से 6 ब्लॉकचेन पर एक परमाणु लेनदेन में होते हैं, जिसका अर्थ है लगभग सभी एक साथ। मेटामॉर्फिक कॉन्ट्रैक्ट के अंदर कोड को बदलने और इसे लगातार मॉर्फ करने के लिए इन चरणों को बार-बार दोहराया जा सकता है, एड इनफिनिटम।

चरण 2: कारखाना कार्यान्वयन अनुबंध तैनात करता है

फैक्ट्री द्वारा तैनात पहला अनुबंध कार्यान्वयन अनुबंध है, जिसमें कार्यान्वयन कोड होता है। (रचनात्मक, हम जानते हैं।) कार्यान्वयन अनुबंध को एक लोडिंग डॉक, या वेपॉइंट के रूप में सोचें, जो अपने अंतिम गंतव्य के लिए जहाज से पहले कुछ कोड रखता है, जो इस मामले में, मेटामॉर्फिक अनुबंध के अंदर होगा। 

चरण 3: फ़ैक्टरी स्टोर कार्यान्वयन अनुबंध का पता

ब्लॉकचैन में इसकी तैनाती के बाद, कार्यान्वयन अनुबंध अनिवार्य रूप से कुछ ब्लॉकचेन पते पर मौजूद होगा। फ़ैक्टरी इस अनुबंध पते को अपनी स्मृति में संग्रहीत करता है (बाद में उपयोग करने के लिए, चरण 5 में)। 

चरण 4: फ़ैक्टरी मेटामॉर्फिक अनुबंध को तैनात करता है

फैक्ट्री CREATE2 और मेटामॉर्फिक बाइटकोड का उपयोग करके मेटामॉर्फिक अनुबंध को तैनात करती है। आप मेटामॉर्फिक बाइटकोड कैसे काम करते हैं, इसका एक तकनीकी, गहन पूर्वाभ्यास पा सकते हैं यहाँ उत्पन्न करें, लेकिन यह कहने के लिए पर्याप्त है कि जब मेटामॉर्फिक बाइटकोड निष्पादित होता है, तो यह किसी अन्य ऑन-चेन स्थान से कोड की प्रतिलिपि बनाता है - इस मामले में, कार्यान्वयन अनुबंध से - मेटामॉर्फिक अनुबंध में। जैसा कि हमने पिछले खंड में बात की थी, चूंकि CREATE2 नियतात्मक है - जब तक एक ही प्रेषक, नमक और बायटेकोड का उपयोग किया जाता है - तब मेटामॉर्फिक अनुबंध का पता वही रहता है चाहे कितनी बार इन चरणों को दोहराया जाए।

नीचे एक उदाहरण दिया गया है कि मेटामॉर्फिक बाइटकोड कैसा दिखता है कायापलट रेपो 0 आयु से। यह मेटामॉर्फिक बाइटकोड का सिर्फ एक उदाहरण है - संभावित रूप से असंख्य विविधताएं मौजूद हैं, जो मेटामॉर्फिक अनुबंधों का पता लगाने में काफी जटिल हैं।

मेटामॉर्फिक स्मार्ट कॉन्ट्रैक्ट्स प्लेटोब्लॉकचैन डेटा इंटेलिजेंस का पता लगाने के लिए एक उपकरण। लंबवत खोज। ऐ.

चरण 5: मेटामॉर्फिक बाइटकोड क्वेरीज़ फ़ैक्टरी फॉर इम्प्लीमेंटेशन कॉन्ट्रैक्ट एड्रेस

मेटामॉर्फिक बाइटकोड फैक्ट्री से कार्यान्वयन अनुबंध पते के लिए पूछता है (जैसा कि चरण 3 में संग्रहीत है)। इससे कोई फर्क नहीं पड़ता कि कार्यान्वयन अनुबंध का पता तब तक बदल जाता है जब तक पता मांगने वाला मेटामॉर्फिक बाइटकोड वही रहता है। वास्तव में, यदि डेवलपर बाद में एक नया कार्यान्वयन अनुबंध तैनात करता है - जैसे कि एक दुर्भावनापूर्ण जिसे टोकन चोरी करने के लिए डिज़ाइन किया गया है - यह आवश्यक रूप से एक अलग ब्लॉकचेन पते पर, प्रति चरण 2 पर तैनात होगा। इसका मेटामॉर्फिक अनुबंध के निर्माण पर कोई प्रभाव नहीं पड़ता है।

चरण १: कार्यान्वयन अनुबंध कोड मेटामॉर्फिक अनुबंध में कॉपी हो जाता है

चरण 5 में सीखे गए ब्लॉकचेन पते का उपयोग करते हुए, मेटामॉर्फिक बाइटकोड कार्यान्वयन अनुबंध में कोड का पता लगाता है और उस कोड को मेटामॉर्फिक अनुबंध के स्थानीय भंडारण में कॉपी करता है। इस प्रकार कायापलट अनुबंध आकार-परिवर्तन करता है: कार्यान्वयन अनुबंध से कोड की प्रतिलिपि बनाकर। 

चरण 7: कुल्ला और दोहराएं

एक डेवलपर चरण 1 से 6 को बार-बार दोहरा सकता है और एक नए कार्यान्वयन अनुबंध के माध्यम से मेटामॉर्फिक अनुबंध में कोड को जो कुछ भी पसंद करता है उसे बदल सकता है। मेटामॉर्फिक अनुबंध में पूर्व-मौजूदा कोड को हटाने के लिए केवल SELFDESTRUCT opcode का उपयोग करने की आवश्यकता है - या, अधिक कुटिलता से, DELEGATECALL ऑपकोड जो अंततः SELFDESTRUCT में परिणत होते हैं। नए कार्यान्वयन अनुबंध बाइटकोड के साथ चक्र को दोहराकर, मेटामॉर्फिक अनुबंध जादू की तरह होगा, रूप!

कायापलट अनुबंध बनाने के लिए इस तकनीक का उपयोग करते हुए, एक चतुर डेवलपर लगातार वेब3 उपयोगकर्ताओं के पैरों के नीचे जमीन को स्थानांतरित कर सकता है। उदाहरण के लिए, घोटाले के परिदृश्य पर फिर से विचार करें। एक डेवलपर पहले टोकन-स्टेकिंग कोड के साथ कार्यान्वयन अनुबंध को तैनात कर सकता है, जो ग्राफिक में दर्शाए गए घुमावदार पथ के माध्यम से और ऊपर दिए गए चरणों में विस्तृत है, मेटामॉर्फिक अनुबंध में समाप्त होता है। स्कैमर बाद में इस कोड को स्वयं नष्ट कर सकता है और टोकन युक्त एक नया कार्यान्वयन अनुबंध तैनात करके इसे बदल सकता है-चोरी कोड। 

कार्यान्वयन अनुबंध में जो कुछ भी तैनात किया जाता है वह अंततः मेटामॉर्फिक अनुबंध में समाप्त हो जाएगा। यही चाल का सार है। 

***

मेटामॉर्फिक स्मार्ट कॉन्ट्रैक्ट्स निहित वेब 3 सोशल कॉन्ट्रैक्ट को तोड़ते हैं जो आप देखते हैं कि आपको क्या मिलता है। जिस तरह से शेल गेम एक गेंद को छिपाने के लिए तीन मूविंग कप का उपयोग करता है, उसी तरह एक कायापलट अनुबंध के निर्माण में तीन अनुबंधों के परस्पर क्रिया से अनुबंध के वास्तविक कार्य का पालन करना मुश्किल हो जाता है। शेल गेम एक विशेष रूप से उपयुक्त तुलना है क्योंकि आत्मविश्वासी चालबाज अक्सर जीत सुनिश्चित करने के लिए हाथ की सफाई और गलत दिशा का उपयोग करेंगे। वेब 3 संस्करण में, मेटामॉर्फिक अनुबंध लेखक इसी तरह "बॉल" बना सकते हैं - कार्यान्वयन कोड, यानी - गायब हो जाना (पढ़ें: आत्म-विनाश), और वे इसे अपनी पसंद के अनुसार बदल सकते हैं।

मेटामॉर्फिक अनुबंधों के अस्तित्व का मतलब है कि वेब 3 उपयोगकर्ताओं के लिए अनुबंधों में प्रवेश करना संभव है जो इच्छानुसार बदल सकते हैं - यही कारण है कि इस खतरे को समझना और बचाव करना इतना महत्वपूर्ण है। माई मेटामॉर्फिक कॉन्ट्रैक्ट डिटेक्टर कायापलट अनुबंधों की पहचान करने की दिशा में उनके द्वारा उपयोग किए जाने वाले हाथों की सफाई से केवल एक पहला कदम प्रदान करता है। भविष्य में डिटेक्टर को बेहतर बनाने के कई तरीके हैं। उदाहरण के लिए, मेटामॉर्फिक अनुबंध बनाने वाले फ़ैक्टरी (या डिप्लॉयर कॉन्ट्रैक्ट) की बार-बार जाँच करके, कोई यह देख सकता है कि फ़ैक्टरी स्वयं कायापलट है या नहीं। यह सुविधा डिटेक्टर के उन्नत संस्करण 2 के लिए एक उपयोगी अतिरिक्त होगी।

यह एक बार फिर दोहराने लायक है: यह डिटेक्टर टूल फुलप्रूफ नहीं है। यह जो झंडे पकड़ता है, वे मेटामॉर्फिक क्षमता के सभी गप्पी संकेत नहीं हैं, लेकिन वे सुराग प्रदान करते हैं। इन झंडों की पहचान करना अधिक गहन जांच की शुरुआत है। यही कारण है कि हमने डिटेक्टर का विस्तार उन झंडों की खोज के लिए किया है जो आसानी से झूठी सकारात्मक उत्पन्न कर सकते हैं, जैसे कि CREATE2 या DELEGATECALL ऑपकोड की उपस्थिति। यदि आपके पास उपकरण में सुधार के लिए सुझाव हैं या आप इस प्रारंभिक कार्य को बनाना या जोड़ना चाहते हैं, तो मुझसे यहां संपर्क करें .

कायापलट लक्षणों के लिए स्मार्ट अनुबंधों का विश्लेषण करें डिटेक्टर टूल का उपयोग करना और यात्रा गीथहब रेपो और अधिक के लिए

संपादक: रॉबर्ट हैकेट @rhhackett

***

आभार: मैं इस पोस्ट और टूल को जीवंत बनाने में बहुमूल्य प्रतिक्रिया और सलाह के लिए रॉबर्ट हैकेट, एडी लेज़रीन, सैम रैग्सडेल, रियाज़ फैज़ुलभॉय, नूह सिट्रोन, मेसन हॉल और डेजुन पार्क को धन्यवाद देना चाहता हूं। 

***

यहां व्यक्त किए गए विचार व्यक्तिगत एएच कैपिटल मैनेजमेंट, एलएलसी ("a16z") कर्मियों के हैं जिन्हें उद्धृत किया गया है और यह a16z या इसके सहयोगियों के विचार नहीं हैं। यहां निहित कुछ जानकारी तृतीय-पक्ष स्रोतों से प्राप्त की गई है, जिसमें a16z द्वारा प्रबंधित निधियों की पोर्टफोलियो कंपनियों से भी शामिल है। जबकि विश्वसनीय माने जाने वाले स्रोतों से लिया गया, a16z ने स्वतंत्र रूप से ऐसी जानकारी को सत्यापित नहीं किया है और किसी भी स्थिति के लिए सूचना की स्थायी सटीकता या इसकी उपयुक्तता के बारे में कोई प्रतिनिधित्व नहीं करता है। इसके अतिरिक्त, इस सामग्री में तृतीय-पक्ष विज्ञापन शामिल हो सकते हैं; a16z ने ऐसे विज्ञापनों की समीक्षा नहीं की है और उनमें निहित किसी भी विज्ञापन सामग्री का समर्थन नहीं करता है।

यह सामग्री केवल सूचना के उद्देश्यों के लिए प्रदान की जाती है, और कानूनी, व्यापार, निवेश या कर सलाह के रूप में इस पर भरोसा नहीं किया जाना चाहिए। आपको उन मामलों में अपने स्वयं के सलाहकारों से परामर्श लेना चाहिए। किसी भी प्रतिभूति या डिजिटल संपत्ति के संदर्भ केवल दृष्टांत उद्देश्यों के लिए हैं, और निवेश सलाहकार सेवाएं प्रदान करने के लिए एक निवेश अनुशंसा या प्रस्ताव का गठन नहीं करते हैं। इसके अलावा, यह सामग्री किसी भी निवेशक या संभावित निवेशकों द्वारा उपयोग के लिए निर्देशित नहीं है और न ही इसका इरादा है, और किसी भी परिस्थिति में a16z द्वारा प्रबंधित किसी भी फंड में निवेश करने का निर्णय लेते समय इस पर भरोसा नहीं किया जा सकता है। (a16z फंड में निवेश करने की पेशकश केवल निजी प्लेसमेंट मेमोरेंडम, सब्सक्रिप्शन एग्रीमेंट, और ऐसे किसी भी फंड के अन्य प्रासंगिक दस्तावेज द्वारा की जाएगी और इसे पूरी तरह से पढ़ा जाना चाहिए।) किसी भी निवेश या पोर्टफोलियो कंपनियों का उल्लेख, संदर्भित, या वर्णित a16z द्वारा प्रबंधित वाहनों में सभी निवेशों के प्रतिनिधि नहीं हैं, और इस बात का कोई आश्वासन नहीं दिया जा सकता है कि निवेश लाभदायक होगा या भविष्य में किए गए अन्य निवेशों में समान विशेषताएं या परिणाम होंगे। आंद्रेसेन होरोविट्ज़ द्वारा प्रबंधित निधियों द्वारा किए गए निवेशों की सूची (उन निवेशों को छोड़कर जिनके लिए जारीकर्ता ने सार्वजनिक रूप से कारोबार की गई डिजिटल संपत्ति में सार्वजनिक रूप से और साथ ही अघोषित निवेशों का खुलासा करने के लिए a16z की अनुमति नहीं दी है) https://a16z.com/investments पर उपलब्ध है। /.

इसमें दिए गए चार्ट और ग्राफ़ केवल सूचना के उद्देश्यों के लिए हैं और निवेश का कोई भी निर्णय लेते समय उन पर भरोसा नहीं किया जाना चाहिए। पूर्व प्रदर्शन भविष्य के परिणाम का संकेत नहीं है। सामग्री केवल इंगित तिथि के अनुसार बोलती है। इन सामग्रियों में व्यक्त किए गए किसी भी अनुमान, अनुमान, पूर्वानुमान, लक्ष्य, संभावनाएं और/या राय बिना किसी सूचना के परिवर्तन के अधीन हैं और दूसरों द्वारा व्यक्त की गई राय के विपरीत या भिन्न हो सकते हैं। अतिरिक्त महत्वपूर्ण जानकारी के लिए कृपया https://a16z.com/disclosures देखें।

समय टिकट:

से अधिक आंद्रेसेन होरोविट्ज़