Trending News

BTC
$23,470.62
-2.46
ETH
$1,657.48
-2.6
LTC
$99.40
-2.14
DASH
$63.28
+0.93
XMR
$171.97
-3.96
NXT
$0.00
-2.46
ETC
$23.37
-0.3

सॉलिडिटी ऑप्टिमाइज़र बग | एथेरियम फाउंडेशन ब्लॉग

0


के माध्यम से सॉलिडिटी ऑप्टिमाइज़र में एक बग की सूचना दी गई थी एथेरियम फाउंडेशन बाउंटी प्रोग्राम, क्रिस्टोफ जेंट्ज़स्च द्वारा। इस बग को 2017-05-03 तक सॉलिडिटी 0.4.11 के रिलीज के साथ पैच किया गया है।

पृष्ठभूमि

प्रश्न में बग संबंधित है कि ऑप्टिमाइज़र बाइट कोड में स्थिरांक पर कैसे अनुकूलित करता है। “बाइट कोड स्थिरांक” से हमारा मतलब कुछ भी है जो है धक्का देनाएड स्टैक पर (सॉलिडिटी स्थिरांक के साथ भ्रमित नहीं होना चाहिए)। उदाहरण के लिए, यदि मान 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff है धक्का देनाएड, तो अनुकूलक या तो कर सकता है PUSH32या इसे इस रूप में एन्कोड करना चुनें पुश 1 1; नहीं;.

ऑप्टिमाइज़र में एक त्रुटि ने बाइट कोड स्थिरांक के अनुकूलन को कुछ मामलों के लिए विफल कर दिया, जो मूल स्थिरांक को ठीक से नहीं बनाने वाले रूटीन का निर्माण करता है।

रिपोर्ट किए गए बग में वर्णित व्यवहार एक अनुबंध में पाया गया था जिसमें एक विधि कार्य करना बंद कर दिया था जब एक अन्य – पूरी तरह से असंबंधित – विधि को अनुबंध में जोड़ा गया था। विश्लेषण के बाद, यह निर्धारित किया गया था कि बग को ट्रिगर करने के लिए कई स्थितियां एक साथ मौजूद होनी चाहिए। बग को ट्रिगर करने वाली स्थितियों के किसी भी संयोजन में लगातार निम्नलिखित दो शर्तें होंगी:

  1. निरंतर के साथ शुरू करने की जरूरत है 0xFF… और शून्य (या इसके विपरीत) की एक लंबी श्रृंखला के साथ समाप्त होता है।
  2. ऑप्टिमाइज़र के लिए इस विशेष स्थिरांक को अनुकूलित करने के लिए एक ही स्थिरांक को कई स्थानों पर उपयोग करने की आवश्यकता होती है। वैकल्पिक रूप से, इसे कंस्ट्रक्टर में उपयोग करने की आवश्यकता होती है, जो गैस के बजाय आकार के लिए अनुकूलित होता है।

उपरोक्त दो स्थितियों के अलावा, और भी जटिल स्थितियाँ हैं जिनकी आवश्यकता है।

विश्लेषण

यह बग कम से कम 2015 की गर्मियों से लेकर अब तक सॉलिडिटी के सभी जारी किए गए संस्करणों में मौजूद है। हालांकि बग 2015 से मौजूद है, लेकिन “यादृच्छिक” कोड द्वारा ट्रिगर करना बहुत कठिन लगता है:

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

सुधार

सॉलिडिटी में बग के बारे में बेहतर पारदर्शिता और जागरूकता बढ़ाने के लिए, हमने सॉलिडिटी से संबंधित कमजोरियों के बारे में जानकारी को JSON-फाइल्स के रूप में सॉलिडिटी कोड रिपॉजिटरी में निर्यात करना शुरू कर दिया है (1,2). हमें उम्मीद है कि ब्लॉक एक्स्प्लोरर्स इस जानकारी को अन्य अनुबंध संबंधी जानकारी के साथ एकीकृत करेंगे।

इथरस्कैन ने इसे पहले ही लागू कर दिया है, जिसे देखा जा सकता है यहाँ और यहाँ.

बग के संबंध में, हमने ऑप्टिमाइज़र में एक मिनी-ईवीएम जोड़ा है जो संकलन समय पर प्रत्येक उत्पन्न रूटीन की शुद्धता की पुष्टि करता है।

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



Source link

Leave A Reply

Your email address will not be published.

Shares