ब्लॉकचैन स्केलेबिलिटी ट्राइलेममा के समाधान के रूप में प्लाज्मा कैश चेन

शुभ दोपहर, प्रिय पाठकों!

यह लेख प्लाज्मा कैश चेन के बारे में है और निम्नलिखित विषयों पर प्रकाश डालता है:

  • मापनीयता त्रिलम्मा और इसके समाधान के लिए तरीके;
  • बाल श्रृंखला डेटा संरचना और जड़ श्रृंखला में उनका प्रदर्शन;
  • रूट चेन में इनपुट का कार्यान्वयन;
  • रूट चेन से निकासी का कार्यान्वयन।

ऑप्टी ने चाइल्ड चेन को लागू करने के लिए जावास्क्रिप्ट प्रोग्रामिंग भाषा का इस्तेमाल किया, साथ ही रूट चेन के लिए सॉलिडिटी भी की। इन भाषाओं में कोड उदाहरण दिए गए हैं।



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

स्मार्ट कॉन्ट्रैक्ट विकेंद्रीकृत नेटवर्क में व्यावसायिक तर्क लाते हैं। यह आपको नए डीएपीपी अनुप्रयोगों का निर्माण करने की अनुमति देता है।

स्मार्ट अनुबंधों का निष्पादन और वितरित डेटाबेस के साथ अनुप्रयोगों का तेज संचालन केवल तभी संभव हो सकता है जब स्केलेबिलिटी की स्थिति पूरी हो।

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

परिमार्जन त्रिलम्मा


एक ब्लॉकचेन स्केलेबिलिटी त्रिलम्मा है जिसमें तीन घटक शामिल हैं:

  • विकेन्द्रीकरण;
  • सुरक्षा;
  • scalability।

त्रिलम्मा में विकेंद्रीकरण


विकेंद्रीकरण, जैसा कि शब्द का तात्पर्य है, ब्लॉकचैन में गतिविधि के स्वामित्व के विविधीकरण की डिग्री को दर्शाता है, साथ ही ब्लॉक बनाने और नई खाता बही प्रविष्टियों को बनाने के विविधीकरण की डिग्री।

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

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

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

त्रिलम्मा में सुरक्षा


यह बाहरी स्रोतों से हमलों का सामना करने और सिस्टम को अपरिवर्तित स्थिति में रखने के लिए ब्लॉकचेन की क्षमता के बारे में है। अधिकांश ब्लॉकचेन कई संभावित सुरक्षा खतरों के अधीन हैं। सबसे आम अटैक वैक्टर और रक्षा विकल्पों के बारे में जानना अनिवार्य है।

इस मामले में, विकेंद्रीकरण और सुरक्षा हाथ से जाती है। अधिक नोड्स, कम नेटवर्क केंद्रीयकृत पक्ष पर निर्भर करता है और इसलिए, विफलता का केंद्रीय बिंदु होने का जोखिम है। हालांकि, कई अन्य हमले वैक्टर हैं जो विकेंद्रीकृत नेटवर्क के लिए खतरा पैदा करते हैं, जिनमें शामिल हैं:
> 50% हमला - एक वस्तु जो कुल अवैतनिक टोकन का 50% से अधिक का मालिक है वास्तव में नेटवर्क का मालिक है;
> साइबिल अटैक - उपयोगकर्ता नेटवर्क पर स्वामित्व और / या निर्णय लेने में महत्वपूर्ण हिस्सेदारी को प्रभावी ढंग से नियंत्रित करने के लिए सिस्टम में कई पहचानकर्ता उत्पन्न कर सकता है;
> DDoS - एक वितरित इनकार सेवा (DDoS) हमला तब होता है जब नेटवर्क पर यातायात को बाधित करने का इरादा होता है, नेटवर्क को दुर्भावनापूर्ण लेनदेन से भरता है;
> Collusion attack - एक या कई ऑब्जेक्ट्स (या नोड्स) नेटवर्क पर किसी भी दुर्भावनापूर्ण ऑपरेशन को करने के लिए एकजुट होने का निर्णय लेते हैं।

त्रिलम्मा में स्केलेबिलिटी


स्केलेबिलिटी की डिग्री महत्वपूर्ण है क्योंकि यह अंतिम थ्रूपुट निर्धारित करता है, दूसरे शब्दों में, नेटवर्क आकार की ऊपरी सीमा। नेटवर्क का मूल्यांकन करते समय सबसे महत्वपूर्ण प्रश्न यह है: "यह सिस्टम कितने उपयोगकर्ताओं को झेल सकता है?" वर्तमान में बिटकॉइन में 2.9 से 5.8 मिलियन वॉलेट धारक हैं। ईओएस में कई हजार सदस्य हैं।

स्केलेबिलिटी और विकेंद्रीकरण सह-अस्तित्व में हो सकता है, लेकिन सुरक्षा कम हो जाती है। डेवलपर्स उन प्लेटफार्मों का चयन करते हैं जो अपनी आवश्यकताओं के अनुसार सबसे अच्छा सूट करते हैं। यूजर्स ऐसा ही करते हैं। दोनों पक्षों के विचार कभी-कभी भिन्न होते हैं। कुछ उपयोगकर्ता स्केलेबिलिटी के लिए सुरक्षा का त्याग करने के लिए तैयार हैं, अन्य सुरक्षा के लिए स्केलेबिलिटी का त्याग करने के लिए तैयार हैं, लेकिन संतुलन अधिक कठिन है।

ब्लॉकचेन प्रौद्योगिकी में "पवित्र कंघी बनानेवाले की रेती"


परिभाषा के अनुसार, एक ब्लॉकचेन में निम्नलिखित तीन गुणों में से केवल दो हैं:

  • विकेंद्रीकरण (प्रत्येक प्रतिभागी को केवल ओ © संसाधनों तक पहुंच है, अर्थात, एक नियमित लैपटॉप या एक छोटे वीपीएस तक);
  • स्केलेबिलिटी (लेनदेन की प्रक्रिया करने की क्षमता ओ (एन)> ओ ©);
  • सुरक्षा (हे (एन) संसाधनों का उपयोग करके घुसपैठियों के खिलाफ सुरक्षा)।


ग्रीन: तीन स्थितियों की एक संतुलित स्थिति।
लाल: मजबूत सुरक्षा लेकिन सीमित विकेंद्रीकरण और मापनीयता।
नीला: दक्षता अधिक है, लेकिन सुरक्षा और विकेंद्रीकरण सीमित हैं।
काला: विकेंद्रीकरण अधिक है, लेकिन स्केलेबिलिटी और सुरक्षा के कोई पहलू नहीं हैं।
ग्रे: पूर्ण विकेंद्रीकरण, सुरक्षा और मापनीयता के न्यूनतम या लापता गुणों के साथ।
वायलेट: सुरक्षा और मापनीयता के बीच एक समान संतुलन, विकेंद्रीकरण की अस्वीकृति।

ब्लॉकचेन तकनीक में "पवित्र कब्र" का अर्थ है तीनों पहलुओं को मिलाना।
क्रिप्टोकरेंसी के साथ काम करने वाले अधिकांश वर्तमान प्रोजेक्ट्स में, दो बुनियादी गुण प्राप्त होते हैं: विकेंद्रीकरण और सुरक्षा। स्केलेबिलिटी ग्रस्त है।

त्रिलम्मा के समाधान का वादा किया


प्रूफ ऑफ़ स्टेक (PoS)


प्रूफ ऑफ स्टेक (PoS) संभावित स्केलेबिलिटी एन्हांसमेंट प्रदान करता है। POS, कार्य का प्रमाण (PoW) प्रणाली के आधार पर क्रिप्टोक्यूरेंसी खनन को प्रतिस्थापित करता है। सत्यापनकर्ता की पसंद बहुत तेज है - एक नियतकालिक तरीके से। इसी समय, कोई ऊर्जा लागत नहीं है और यह पर्यावरण के अनुकूल है।

पक्ष श्रृंखला


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

Sharding


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

ब्लॉक आकार बढ़ाएं


बिटकॉइन ब्लॉकचेन के लिए Litecoin और Bitcoin Cash (BCH) "कांटे" हैं। फोर्किंग मूल रूप से एक ब्लॉकचेन की नकल करता है। ब्रांचिंग के बाद, आप बदलाव कर सकते हैं। एलटीसी और बीसीएच दोनों ने प्रत्येक ब्लॉक के आकार में वृद्धि की, जिससे प्रति ब्लॉक अधिक लेनदेन को स्टोर करने की अनुमति मिली, जिससे लेनदेन की प्रसंस्करण गति बढ़ गई।

बिजली का नेटवर्क


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

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

रैडेन नेटवर्क


एथेरियम के लिए, लाइटनिंग का सबसे प्रसिद्ध समकक्ष रेडन नेटवर्क है।
यह मुख्य ब्लॉकचैन के बाहर स्केलिंग के लिए एक समाधान है। यह ईडीसी -20 टोकन को द्विदिश भुगतान चैनलों में स्थानांतरित करने के साथ संगत है।

इसकी मूल वास्तुकला जटिल है, लेकिन रैडेन के साथ बातचीत के लिए डेवलपर्स को केवल रैडेन पर स्केलेबल एप्लिकेशन बनाने के लिए एपीआई के साथ बातचीत करने की आवश्यकता होती है।

रैडेन को तत्काल भुगतान और कम कमीशन प्रदान करने के लिए डिज़ाइन किया गया है, लेन-देन की गोपनीयता और micropayments बढ़ाएं। अधिकांश भुगतान चैनल नेटवर्क के बाहर मौजूद हैं और केवल कभी-कभी रूट चेन के भीतर लेनदेन करते हैं, जो चाइल्ड चेन के थ्रूपुट को काफी कम कर देता है।

इष्टतम समाधान


बिजली विचारकों ने एक नई चाइल्डचैन अवधारणा बनाई है जो ब्लॉकचेन गति की समस्याओं को हल करती है।

स्पष्ट रूप से व्यावहारिक रूप से प्लाज्मा और प्लाज्मा कैश की अवधारणा को लागू करता है।

प्लाज्मा स्मार्ट कॉन्ट्रैक्ट्स का एक सेट है जो एथेरियम रूट चेन के शीर्ष पर चलता है और एक पदानुक्रमित पेड़ संरचना में रूट चेन से जुड़े चाइल्ड चेन के नेटवर्क से मिलकर बनता है।

यही है, स्केलेबिलिटी को अनुकूलित करने के लिए एथेरियम रूटचैन की सुरक्षा का उपयोग किया जाता है।

प्लाज्मा नकद: स्पष्ट विकल्प


प्रथम संस्करण में प्लाज़्मा कैश के क्रियान्वयन का विकल्प चुना जाता है।

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

प्लाज्मा नकद की विशेषताएं:

  • ग्राहक पक्ष पर साझा सत्यापन - ग्राहकों को केवल अपने टोकन प्राप्त करने के लिए अपनी प्लाज्मा श्रृंखला की निगरानी करने की आवश्यकता है। इसका मतलब है कि व्यक्तिगत उपयोगकर्ताओं पर भार बढ़ाए बिना लेनदेन थ्रूपुट बढ़ सकता है।
  • द्रव्यमान निकास का सरलीकरण - द्रव्यमान निकास नेटवर्क के लिए खतरा कम हो जाता है, क्योंकि चोर को प्रत्येक टोकन के लिए एक निकास लेनदेन प्रस्तुत करना होगा जिसे वह चोरी करना चाहता है।
  • कोई दो-तरफ़ा पुष्टि नहीं - लेन-देन के लिए अब दो-चरण भेजने और पुष्टि की आवश्यकता नहीं है। इसके बजाय, मुख्य श्रृंखला में शामिल होते ही एक लेनदेन खर्च किया जा सकता है।

नुकसान:

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

ऑप्टिक प्लाज्मा कैश में लेनदेन संरचना


चाइल्डचैन को लागू करने के लिए नक्सली ने जावास्क्रिप्ट का इस्तेमाल किया। नोकदार प्लाज्मा कैश में प्रत्येक लेनदेन एक समान संरचना है:

const transactionFields = [ {name: 'prevHash'}, {name: 'prevBlock', int: true, default: 0}, {name: 'tokenId', isDecimal: true}, {name: 'newOwner'}, {name: 'type'}, {name: 'signature'}, ] 

यहां के मुख्य तत्व पिछले प्रीलॉक ब्लॉक (लिंक श्रृंखला के चारों ओर घूमने के लिए आवश्यक है), टोकन टोकन पहचानकर्ता (यह अद्वितीय होना चाहिए) के साथ-साथ नए मालिक को टोकन के अंतिम मालिक के लिए एक लिंक है।

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

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

एक टोकन खर्च करने के लिए, आपको श्रृंखला को मान्य करने की आवश्यकता है, लापता ब्लॉकों की जांच करें और उसके बाद ही पूरे इतिहास के साथ लेनदेन पर फिर से हस्ताक्षर करें।

ब्लॉक निम्नानुसार है:

 const blockFields = [ {name: 'prevHash'}, {name: 'blockNum', isDecimal: true}, {name: 'transactions'}, {name: 'merkleRoot'}, {name: 'time'} ] 

एक बुनियादी स्तर पर, एक ब्लॉकचेन पिछले ब्लॉक के लिंक के साथ ब्लॉक की एक श्रृंखला है। इस तरह की संरचना से अपरिवर्तनीयता की संपत्ति प्राप्त करना संभव हो जाता है, अर्थात् इतिहास को फिर से लिखना नहीं। merkleRoot मूल श्रृंखला के लिए चौकियों को लिखना संभव बनाता है।

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

 /* * Block structure (represents one block in a chain) */ struct Block { uint block_num; bytes32 merkle_root; uint time; /* * Transaction structure (decoded from RLP form) */ struct Transaction { bytes32 prevhash; uint prev_block; uint token_id; address new_owner; } 

एन्कोडिंग एन्कोडिंग / डिकोडिंग का उपयोग करके किया जाता है - आरएलपी क्रमांकन / डीसिरिलेशन फ़ंक्शन।

प्लाज्मा कैश में प्रवेश करने के तरीके


कोई भी व्यक्ति एक स्मार्ट कॉन्ट्रैक्ट में ईथर को स्थानांतरित करके प्लाज्मा कैश में धन जमा कर सकता है। नतीजतन, एक ओपीपी टोकन एक विशिष्ट टोकन स्थिति पर प्राप्त किया जाएगा।

यहाँ सॉलिडिटी में कार्यान्वयन है:

 function deposit() public payable { uint token_id = uint(keccak256(msg.sender, msg.value, deposit_blk)); // token.index = deposit_blk; tokens[token_id] = msg.value; deposit_blk += 1; emit DepositAdded(msg.sender, msg.value, token_id, current_blk); } 

यही है, टोकनआईएनडी एक यादृच्छिक संख्या (हैश) के रूप में उत्पन्न होता है। इसके बाद, एक घटना उत्पन्न होती है जिसे बाल श्रृंखला में स्कैन किया जाता है।

प्लाज़्मा कैश को वापस लेने के तरीके


प्रत्येक व्यक्ति टोकन के स्वामित्व इतिहास में अंतिम दो लेनदेन प्रदान करके अपना टोकन वापस ले सकता है।

मूल श्रृंखला से बाहर निकलने का कार्यान्वयन:

 function startExit(uint block_num, bytes tx1, bytes tx0, bytes proof1, bytes proof0) public returns (uint exit_id) { require(checkPatriciaProof(keccak256(tx1), childChain[block_num].merkle_root, proof1)); bytes32 prev_hash; uint prev_blk; uint token_id; address new_owner; (prev_hash, prev_blk, token_id, new_owner,) = getTransactionFromRLP(tx1); require(msg.sender == new_owner); require(tokens[token_id] > 0); bytes32 hashPrevTx = keccak256(tx0); require(checkPatriciaProof(hashPrevTx, childChain[prev_blk].merkle_root, proof0)); require(prev_hash == hashPrevTx); Exit storage record = exitRecords[token_id]; require(record.block_num == 0); record.block_num = block_num; record.new_owner = msg.sender; record.prev_block = prev_blk; if (childChain[block_num].time > block.timestamp - week) record.priority = childChain[block_num].time; else record.priority = block.timestamp - week; exits.add(record.priority); exit_ids[record.priority].push(token_id); emit ExitAdded(msg.sender, record.priority, token_id); return token_id; } 

सबसे पहले, दो लेनदेन की जाँच की जाती है। यदि वर्तमान उपयोगकर्ता लेनदेन का मालिक है, तो हम बस इसके आउटपुट को संरचना में जोड़ते हैं और आउटपुट को चुनौती देने के अवसर के लिए दो सप्ताह छोड़ देते हैं।

निष्कर्ष को तीन तरीकों से चुनौती दी जा सकती है:

  • लेनदेन पर खर्च की पुष्टि प्रदान करना:

 function challengeSpent(uint exit_id, uint blk_num, bytes tx1, bytes proof) public { require(checkPatriciaProof(keccak256(tx1), childChain[blk_num].merkle_root, proof)); Exit memory record = exitRecords[exit_id]; require(record.block_num > 0); uint prev_block; uint token_id; (, prev_block , token_id, ) = getTransactionFromRLP(tx1); require(tokens[token_id] > 0); require(prev_block == record.block_num && record.block_num < blk_num); require(token_id == exit_id); exit_ids[record.priority].remove(exit_id); delete exitRecords[exit_id]; emit ExitChallengedEvent(exit_id); } 

यदि कोई लेनदेन है जो पहले से ही प्रदर्शित टोकन खर्च कर रहा है, तो ऐसी निकासी रद्द कर दी जाएगी!

  • पिछले लेनदेन के लिए खर्च का सबूत:

 /* * Challenge exit by providing * a proof of a transaction spending P(C) that appears before C */ function challengeDoubleSpend(uint exit_id, uint blk_num, bytes tx1, bytes proof) public { require(checkPatriciaProof(keccak256(tx1), childChain[blk_num].merkle_root, proof)); Exit memory record = exitRecords[exit_id]; require(record.block_num > 0); // bytes32 prev_hash; uint prev_block; uint token_id; (, prev_block , token_id, ) = getTransactionFromRLP(tx1); require(tokens[token_id] > 0); // check if token double spent require(prev_block == record.prev_block && blk_num < record.block_num); // require(token_id == exit_id); exit_ids[record.priority].remove(exit_id); delete exitRecords[exit_id]; emit ExitChallengedEvent(exit_id); } 

यह वही जांच है जैसे कि निकासी से पहले टोकन खर्च किया गया था। सबसे पहले, रूट हैश में लेनदेन के लिए जाँच करें। अगला, हम आउटपुट को हटा देते हैं यदि यह पहले ही खर्च हो चुका है।

  • इससे पहले टोकन के लेनदेन के इतिहास में एक लेनदेन प्रदान करना।

यह एक गलत कहानी हो सकती है, इसलिए आपको बाल लेनदेन के साथ इसकी पुष्टि करने की आवश्यकता है:

 // */ function challengeInvalidHistory(uint exit_id, uint blk_num, bytes tx0, bytes proof) public { // check if proof is valid require(checkPatriciaProof(keccak256(tx0), childChain[blk_num].merkle_root, proof)); Exit memory record = exitRecords[exit_id]; require(record.block_num > 0); bytes32 prev_hash; uint token_id; (prev_hash, , token_id, ) = getTransactionFromRLP(tx0); //require(exit_id == token_id); require(tokens[token_id] > 0); // transaction should be before exit tx in history require(blk_num < record.block_num - 1); challenged[exit_id] = blk_num; emit ChallengedInvalidHistory(exit_id, token_id); } 

पहली और दूसरी स्क्रिप्ट को कॉल करने से आउटपुट तुरंत ब्लॉक हो जाता है।

तीसरे परिदृश्य पर कॉल का जवाब एक प्रत्यक्ष वंशज प्रदान करके दिया जा सकता है। यह मूल लेनदेन के बराबर या उससे आगे होना चाहिए।

 /* * Respond to invalid history challenge by providing * the direct child of C*, which must be either equal to or before P( C ) */ function respondChallenge(uint exit_id, uint blk_num, bytes childtx, bytes proof) public { require(challenged[exit_id] > 0); Exit memory record = exitRecords[exit_id]; require(record.block_num > 0); require(checkPatriciaProof(keccak256(childtx), childChain[blk_num].merkle_root, proof)); // get transaction from rlpencoded form bytes32 prev_hash; uint prev_block; uint token_id; (prev_hash, prev_block, token_id, ) = getTransactionFromRLP(childtx); // if direct child if (prev_block == challenged[exit_id] ) { if (blk_num <= record.prev_block && token_id == exit_id ) { delete challenged[exit_id]; emit ExitRespondedEvent(exit_id); } else { exit_ids[record.priority].remove(exit_id); delete exitRecords[exit_id]; emit ExitChallengedEvent(exit_id); } } } 

यही है, अगर सही बाल लेनदेन प्राप्त होता है, तो आउटपुट विवादित है और कतार में रहता है!
स्पष्ट प्लाज्मा कैश प्रोटोकॉल का हिस्सा बनाने के बाद, निम्नलिखित निष्कर्ष किया गया था:
यह प्रोटोकॉल इथेरियम रूट चेन के माध्यम से सुरक्षा प्रदान करता है।

रूट चेन और स्टेट कम्प्रेशन (लेन-देन ब्लॉक) से इनपुट और आउटपुट प्रक्रियाओं को जटिल करके, आउटपुट और इनपुट से रूट चेन के सभी तरीकों पर विचार किया गया था, और बुनियादी डेटा संरचनाओं: लेनदेन और ब्लॉक की जांच की गई थी।

Ethereum नेटवर्क के आधार पर साइडकेन का उपयोग करके, आप लेन-देन में तेजी ला सकते हैं। एकल ऑपरेटर पर प्रति सेकंड 300,000 तक लेनदेन प्राप्त होता है। यह वर्तमान भुगतान प्रणालियों की तुलना में बहुत अधिक है।

डेटा उपलब्धता की कुछ समस्याओं के बावजूद, ऑपरेटर ब्लॉकचेन की उच्च स्तर की स्थिरता प्रदान करता है और प्रभावी अंतर्राष्ट्रीय व्यापार लेनदेन को अंजाम देना संभव बनाता है।

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

उपयोगी लिंक


  1. श्वेत पत्र प्लाज्मा
  2. गिट हब
  3. मामलों और वास्तुकला विवरण का उपयोग करें
  4. लाइटनिंग नेटवर्क पेपर

Source: https://habr.com/ru/post/hi457518/


All Articles