इस पृष्ठ से यह समझा जा सकता है कि Rand में किसी ट्रांसफ़र के आगे बढ़ने पर कौन क्या करता है। प्रूफ़ बनाना महँगा है और उसका सत्यापन सस्ता, इसलिए काम इसी रेखा पर बाँटा गया है। प्रूफ़ प्रेषक की ओर बनते हैं। वैलिडेटर केवल उनकी जाँच करते हैं, उन्हें क्रम देते हैं और वोट करते हैं। एग्रीगेटर, चालू होने के बाद, कई प्रूफ़ को एक में समेट देगा। नीचे का चित्र एक ट्रांसफ़र को वॉलेट से अंतिम ब्लॉक तक ले जाता है; उसके बाद के खंड एक-एक करके हर भूमिका को लेते हैं।
एक ट्रांसफ़र का मार्ग
- वॉलेट ट्रांसफ़र बनाता है। वह अपने इनपुट नोट चुनता है, उनके Merkle विटनेस प्राप्त करता है, चार आउटपुट बनाता है और हर एक को ML-KEM-768 लिफ़ाफ़े में सील करता है। फिर वह लेनदेन की बाइंडिंग की गणना करता है, जो प्रूफ़ को छोड़कर बाकी सब पर एक हैश है (लेनदेन)।
- वॉलेट प्राधिकरण का प्रूफ़ स्वयं बनाता है। यह स्पेंड की और एक नए सॉल्ट पर टियर-10 प्रूफ़ है, जिसमें कुछ सेकंड लगते हैं। यही एकमात्र प्रूफ़ है जो स्पेंड की को छूता है, और यह हमेशा वॉलेट की अपनी मशीन पर बनता है।
- बंडल प्रूफ़ वहाँ बनता है जहाँ उसके लिए मेमोरी हो। यह टियर-14 प्रूफ़ स्वामित्व, सदस्यता, नलिफ़ायर और बैलेंस सिद्ध करता है, और इसकी अधिकतम मेमोरी लगभग 6 GB तक पहुँचती है। डेस्कटॉप ऐप और लगभग 8 GB वाला फ़ोन इसे स्वयं बनाते हैं। इससे छोटा कोई भी उपकरण यह काम अपने साथ जुड़े प्रूवर को सौंप देता है: आपका अपना चलाया हुआ, या
prover.randprotocol.orgपर वैलिडेटरों का पूल। दोनों में से किसी को भी व्यूइंग की और सॉल्ट भेजे जाते हैं, स्पेंड की कभी नहीं (प्रूफ़)। - एक RPC नोड इसकी जाँच करता है। वॉलेट जिस भी नोड को लेनदेन सौंपता है, वह बंडल डाइजेस्ट की पुनर्गणना करता है, दोनों प्रूफ़ को बाइंडिंग के विरुद्ध सत्यापित करता है, शुल्क जाँचता है, और उसके बाद ही लेनदेन को अपने पीयर्स तक गॉसिप करता है (प्रूफ़, मेमपूल)।
- वैलिडेटर इसे क्रम देते हैं और अंतिम रूप देते हैं। व्यू का लीडर वे लेनदेन लेता है जो अब भी लागू होते हैं, प्रति KiB सबसे अच्छे शुल्क वाले पहले, और एक ब्लॉक प्रस्तावित करता है। हर वैलिडेटर उसमें मौजूद हर प्रूफ़ को फिर से सत्यापित करता है और वोट करता है। ब्लॉक तब कमिट होता है जब लगातार व्यू में तीन कोरम प्रमाणपत्र उस पर शृंखलाबद्ध हो जाते हैं, जिसके लिए चेन 20 के 26 में से 18 वैलिडेटरों का ऑनलाइन होना आवश्यक है (सहमति)।
- ब्लॉक अंतिम है, और कोई भी इसकी जाँच कर सकता है। कोई लेनदेन तब अंतिम होता है जब
rand_getTransactionएक ब्लॉक लौटाता है। जो नोड बाद में सिंक करता है, वह हस्ताक्षरों पर भरोसा करने के बजाय हर प्रमाणपत्र और हर प्रूफ़ को फिर से सत्यापित करता है।
भूमिकाएँ
| भूमिका | क्या करती है | प्रूफ़ बनाती है? | क्या देखती है | क्या चलाती है |
|---|---|---|---|---|
| वॉलेट | ट्रांसफ़र और कॉल बनाता, प्राधिकृत करता और सौंपता है; अपनी कुंजियों से चेन को स्कैन करता है | प्राधिकरण प्रूफ़ हमेशा; बंडल प्रूफ़ तब, जब उपकरण में पर्याप्त मेमोरी हो | अपने नोटों के बारे में सब कुछ | क्लाइंट पृष्ठ पर दिए ऐप, या rand; चेन 20 पर Rand Wallet या rand v0.6.8 या उसके बाद का संस्करण |
| प्रत्यायोजित प्रूवर | अपने साथ जुड़े वॉलेट के लिए बंडल प्रूफ़ बनाता है; कुछ भी सौंपे जाने से पहले वॉलेट हर उत्तर की जाँच करता है | केवल बंडल प्रूफ़ | जुड़े वॉलेट की व्यूइंग की: उसका पूरा इतिहास, अतीत और भविष्य; वह खर्च नहीं कर सकता | rand-prover run, या rand-node run --prover |
| वैलिडेटरों का प्रूवर पूल | चार होस्ट द्वारा चलाया जाने वाला प्रत्यायोजित प्रूवर, जिनमें दो वैलिडेटर और दो केवल प्रूफ़ बनाने वाली मशीनें हैं, एक नाम और एक कुंजी के पीछे, उन वॉलेटों के लिए जिनके पास अपना प्रूवर नहीं है; कोई शुल्क नहीं | केवल बंडल प्रूफ़ | किसी भी प्रत्यायोजित प्रूवर जितना ही, हर उस वॉलेट के लिए जो इससे जुड़ता है | prover.randprotocol.org, फ़िंगरप्रिंट RGTF-7HKJ-XZFV-GQ1J |
| RPC नोड (पर्यवेक्षक) | सिंक करता है, हर प्रूफ़ को फिर से सत्यापित करता है, JSON-RPC प्रदान करता है, सत्यापित लेनदेन गॉसिप करता है; कोई वोट नहीं | नहीं | केवल सार्वजनिक फ़ील्ड: कमिटमेंट, नलिफ़ायर, सील किए गए लिफ़ाफ़े, प्रूफ़ | rand-node run |
| वैलिडेटर | वह सब जो पर्यवेक्षक करता है, साथ ही अपने व्यू में प्रस्ताव रखना और HotStuff में वोट करना | नहीं | केवल सार्वजनिक फ़ील्ड | rand-node run --validator |
| एग्रीगेटर | अंतिम रूप पा चुके बंडल प्रूफ़ की एक विंडो पर एक पुनरावर्ती प्रूफ़ बनाता है और उसे एक सीलिंग ब्लॉक के लिए सौंपता है | हाँ, नेटवर्क के सबसे बड़े प्रूफ़ | केवल सार्वजनिक फ़ील्ड और प्रूफ़ | rand-node aggregate --watch, ऐसी चेन पर जिसमें aggregation खंड हो |
प्रूफ़ बनाना और सत्यापन करना अलग-अलग काम हैं, और वैलिडेटर को प्रूवर हार्डवेयर की आवश्यकता नहीं होती। पूल के चार सदस्यों में से दो ऐसे वैलिडेटर हैं जो सेवा के रूप में प्रूवर भी चलाते हैं; बाकी दो समर्पित प्रूवर मशीनें हैं जिनके पास कोई वैलिडेटर कुंजी नहीं है। पूल चलाना सत्यापन का हिस्सा नहीं है। हर भूमिका के लिए आवश्यक क्षमता, और हर टियर के लिए प्रूफ़ बनाने की मापी गई मेमोरी, वैलिडेटर और एग्रीगेटर हार्डवेयर पर दी गई है।
हर भूमिका क्या जान सकती है
किसी ट्रांसफ़र की गोपनीयता इस पर निर्भर करती है कि किसके पास कौन-सी कुंजी है, न कि नेटवर्क पर भरोसा करने पर:
- वैलिडेटर, RPC नोड और एक्सप्लोरर वही देखते हैं जो हर नोड देखता है: कमिटमेंट, नलिफ़ायर, सील किए गए लिफ़ाफ़े, शुल्क और प्रूफ़। राशि, एसेट, प्रेषक या प्राप्तकर्ता नहीं।
- प्रत्यायोजित प्रूवर, पूल सहित, को व्यूइंग की भेजी जाती है। इससे वह जुड़े वॉलेट का पूरा इतिहास पढ़ सकता है। वह कभी खर्च नहीं कर सकता, क्योंकि स्पेंड की पर प्राधिकरण प्रूफ़ वॉलेट की मशीन पर बनता है। पूल से जुड़ने का अर्थ है उसके संचालकों को वह इतिहास दिखाने का चुनाव करना। यदि आप इसे निजी रखना चाहते हैं, तो अपने उपकरण पर प्रूफ़ बनाएँ या अपना प्रूवर चलाएँ।
- प्रत्यायोजित प्रूवर वॉलेट को धोखा नहीं दे सकता। वॉलेट उसे दिए गए हर प्रूफ़ से डाइजेस्ट पढ़ता है, आकार जाँचता है और उसे स्थानीय रूप से सत्यापित करता है, इसलिए गलत प्रूफ़ कभी किसी नोड तक नहीं पहुँचता।
एग्रीगेशन: बना हुआ, पर चालू नहीं
आज हर ब्लॉक में हर मूल प्रूफ़ रहता है, एक ट्रांसफ़र के लिए लगभग 2.85 MB, इसलिए 20 MiB के ब्लॉक में लगभग सात ट्रांसफ़र आते हैं। ब्लॉक एग्रीगेशन इसका फ़ुलनोड वाला समाधान है। एग्रीगेटर अंतिम रूप पा चुके ब्लॉकों की एक विंडो के बंडल प्रूफ़ लेता है (rand_getUnsealed), एक पुनरावर्ती प्रूफ़ बनाता है जो उन सभी को सत्यापित करता है, और उसे सौंप देता है। जिस ब्लॉक में वह शामिल होता है, वह उस विंडो को सील कर देता है। तब वैलिडेटर N प्रूफ़ के बजाय एक एग्रीगेट सत्यापित करते हैं, और नोड उसमें शामिल मूल प्रूफ़ हटा सकते हैं। एग्रीगेटर बॉन्डेड और अनुमति-रहित होते हैं, GPU-श्रेणी की मशीनों पर चलते हैं, और उन्हें शामिल बंडलों का प्रूफ़ हिस्सा तथा नए RAND में एक ब्लॉक सब्सिडी मिलती है।
यह बनकर मर्ज हो चुका है, पर सक्रिय नहीं है। इसके लिए जेनेसिस में aggregation खंड चाहिए, और चेन 20 में ऐसा कोई खंड नहीं है, इसलिए rand_status एग्रीगेशन के हर काउंटर को शून्य बताता है। इसे चालू करने से पहले वर्तमान बाधा-समुच्चय के अंतर्गत इसके बंडल आकार को फिर से मापना होगा, और रिकर्शन सत्यापनकर्ता के विरुद्ध जाली एग्रीगेट का परीक्षण करना होगा। स्प्लिट-प्राधिकरण वाली चेन पर यह केवल बंडल प्रूफ़ को सील करेगा, प्राधिकरण प्रूफ़ को नहीं (प्रूफ़)।