diff --git a/public/content/translations/mr/about/index.md b/public/content/translations/mr/about/index.md new file mode 100644 index 00000000000..5b18f3bc28f --- /dev/null +++ b/public/content/translations/mr/about/index.md @@ -0,0 +1,134 @@ +--- +title: "आमच्याबद्दल" +description: "ethereum.org च्या टीम, समुदाय आणि ध्येयाबद्दल" +lang: mr +--- + +# ethereum.org बद्दल {#about-ethereumorg} + +ethereum.org हे Ethereum समुदायासाठी एक सार्वजनिक, मुक्त-स्रोत संसाधन आहे ज्यामध्ये कोणीही योगदान देऊ शकते. जगभरातील हजारो समुदाय सदस्यांच्या योगदानाने साइटची देखभाल आणि विकास करण्यासाठी आमची एक छोटी कोअर टीम समर्पित आहे. + +**ethereum.org कडून कोणीही तुमच्याशी कधीही संपर्क साधणार नाही. प्रतिसाद देऊ नका.** + +## नावांवर एक टीप {#a-note-on-names} + +Ethereum लँडस्केपमधील नावांमध्ये लोकांचा गोंधळ होणे सामान्य आहे, ज्यामुळे Ethereum कसे कार्य करते याबद्दल चुकीचे मानसिक मॉडेल तयार होऊ शकतात. गोष्टी स्पष्ट करण्यासाठी येथे एक द्रुत स्पष्टीकरण आहे: + +### Ethereum {#ethereum} + +Ethereum हे एक सार्वजनिक नेटवर्क, एक ब्लॉकचेन आणि एक मुक्त-स्रोत प्रोटोकॉल आहे -- जे जगभरातील हजारो डेव्हलपर, नोड ऑपरेटर, ETH धारक आणि वापरकर्त्यांच्या जागतिक समुदायाद्वारे संचालित, शासित, व्यवस्थापित आणि मालकीचे आहे. + +[Ethereum बद्दल अधिक](/what-is-ethereum/) + +[Ethereum गव्हर्नन्सबद्दल अधिक](/governance/) + +### इथर (ETH) {#ether-or-eth} + +इथर (जे त्याच्या टिकर चिन्हाने, ETH ने देखील ओळखले जाते) हे Ethereum वर व्यवहार केलेले मूळ चलन आहे. Ethereum नेटवर्कच्या वापरासाठी (व्यवहार शुल्काच्या स्वरूपात) पैसे देण्यासाठी ETH आवश्यक आहे. नेटवर्कला स्टेकिंगद्वारे सुरक्षित करण्यासाठी देखील ETH वापरले जाते. जेव्हा लोक Ethereum च्या किमतीबद्दल बोलतात, तेव्हा ते ETH या मालमत्तेचा संदर्भ देत असतात. + +[ETH बद्दल अधिक](/what-is-ether/) + +[ETH स्टेकिंगबद्दल अधिक](/staking/) + +### Ethereum फाउंडेशन {#ethereum-foundation} + +एक ना-नफा संस्था, जी सुरुवातीला ETH च्या क्राउडसेलद्वारे निधीबद्ध झाली होती, जी Ethereum नेटवर्क आणि इकोसिस्टमला समर्थन देण्यासाठी समर्पित आहे. + +[Ethereum फाउंडेशनबद्दल अधिक](/foundation/) + +### ethereum.org {#ethereum-org} + +Ethereum समुदायासाठी एक सार्वजनिक, मुक्त-स्रोत वेबसाइट आणि शैक्षणिक संसाधन. ethereum.org एका लहान कोअर टीमद्वारे चालवले जाते, ज्याला Ethereum फाउंडेशनकडून निधी दिला जातो, आणि जगभरातील हजारो समुदाय सदस्यांचे योगदान लाभते. + +हे पान ethereum.org बद्दल अधिक माहिती देते. + +## आमचे ध्येय {#our-mission} + +**ethereum.org चे ध्येय Ethereum च्या वाढत्या समुदायासाठी सर्वोत्तम पोर्टल बनणे हे आहे** + +आम्ही Ethereum शी संबंधित सर्व विषयांसाठी समजण्यास सोपे शैक्षणिक संसाधन तयार करण्याचा प्रयत्न करतो, जे नवीन वापरकर्त्यांना Ethereum आणि त्याच्या मुख्य संकल्पनांशी परिचित होण्यास मदत करण्यासाठी डिझाइन केलेले आहे. आम्ही हे करू इच्छितो: + +- तंत्रज्ञानासाठी नवीन असलेल्या कोणालाही Ethereum समजावून सांगा +- नवीन वापरकर्त्यांना ETH आणि Ethereum सह प्रारंभ करण्यास मदत करा +- नवीन डेव्हलपर्सना बिल्डिंग सुरू करण्यास मदत करा +- Ethereum जगातील अपडेट्स कव्हर करा +- समुदायाने तयार केलेली संसाधने प्रदर्शित करा +- शक्य तितक्या भाषांमध्ये Ethereum शिक्षण आणा + +हे ध्येय साध्य करण्यासाठी, आमची टीम ethereum.org वर दोन प्राथमिक ध्येयांवर लक्ष केंद्रित करते: + +### १. ethereum.org अभ्यागतांसाठी वापरकर्ता अनुभव सुधारा {#visitors} + +- कंटेंटचा विस्तार करा, त्यात सुधारणा करा आणि तो अद्ययावत ठेवा +- स्थानिकीकरण आणि वेब डेव्हलपमेंटच्या सर्वोत्तम पद्धतींद्वारे उपयोगिता आणि सुलभता सुधारा +- सर्वेक्षण, क्विझ आणि web3 इंटिग्रेशन यांसारख्या वैशिष्ट्यांद्वारे वापरकर्त्याचा सहभाग वाढवा +- वेबसाइट हलकी आणि कार्यक्षम ठेवा + +### २. योगदानकर्त्यांच्या आमच्या समुदायाला वाढवा, मजबूत करा आणि सक्षम करा {#community} + +- वेबसाइटवरील एकूण योगदानकर्त्यांची संख्या वाढवा +- सहभाग, स्वीकृती आणि पुरस्कारांद्वारे योगदानकर्त्यांना टिकवून ठेवण्यात सुधारणा करा +- समुदाय सदस्यांना अधिकाधिक महत्त्वपूर्ण योगदान देण्यासाठी सक्षम करा +- योगदानाच्या अधिक विविधतेला चालना द्या: कोड, कंटेंट, डिझाइन, भाषांतर, मॉडरेशन +- कोडबेस आधुनिक, स्वच्छ आणि चांगला-दस्तऐवजीकरण केलेला ठेवा + +## मुख्य तत्त्वे {#core-principles} + +आमची काही मुख्य तत्त्वे आहेत जी आम्हाला आमचे ध्येय पूर्ण करण्यासाठी मार्गदर्शन करण्यास मदत करतात. + +### १. ethereum.org हे Ethereum चे प्रवेशद्वार आहे 🌏 {#core-principles-1} + +आमच्या वापरकर्त्यांची आवड वाढावी आणि त्यांच्या प्रश्नांची उत्तरे मिळावीत अशी आमची इच्छा आहे. म्हणून आमच्या पोर्टलला माहिती, "जादुई क्षण" आणि तेथे अस्तित्वात असलेल्या उत्कृष्ट समुदाय संसाधनांच्या लिंक्स एकत्र करणे आवश्यक आहे. आमच्या कंटेंटचा उद्देश एक "ऑनबोर्डिंग पोर्टल" बनणे आहे आणि आधीच अस्तित्वात असलेल्या विस्तृत संसाधनांचा पर्याय नाही. आम्ही समुदायाने तयार केलेल्या संसाधनांना समर्थन देण्यासाठी आणि त्यांच्याशी एकरूप होण्यासाठी उत्सुक आहोत, त्यांना अधिक दृश्यमानता देऊन आणि त्यांना अधिक शोधण्यायोग्य बनवून. +[Ethereum चा समुदाय](/community/) याच्या केंद्रस्थानी आहे: आम्हाला केवळ समुदायाची सेवा करण्याची गरज नाही, तर त्यांच्यासोबत काम करून त्यांचा अभिप्राय समाविष्ट करणे आवश्यक आहे. ही वेबसाइट केवळ आता असलेल्या समुदायासाठी नाही, तर ज्या समुदायात वाढण्याची आम्हाला आशा आहे त्यांच्यासाठीही आहे. आपण हे लक्षात ठेवले पाहिजे की आपला समुदाय जागतिक आहे, ज्यात अनेक भाषा, प्रदेश आणि संस्कृतींमधील लोक आहेत. + +### २. ethereum.org नेहमी विकसित होत असते 🛠 {#core-principles-2} + +Ethereum आणि समुदाय नेहमी विकसित होत आहेत, त्यामुळे ethereum.org देखील विकसित होईल. म्हणूनच साइटमध्ये एक सोपी डिझाइन प्रणाली आणि मॉड्यूलर रचना आहे. लोक साइटचा वापर कसा करतात आणि समुदायाला त्यातून काय हवे आहे याबद्दल अधिक शिकत असताना आम्ही पुनरावृत्ती बदल करतो. +आम्ही मुक्त-स्रोत आहोत, आमच्याकडे योगदानकर्त्यांचा समुदाय आहे, त्यामुळे तुम्ही बदल सुचवू शकता किंवा आम्हाला मदतही करू शकता. +[योगदानाबद्दल जाणून घ्या](/contributing/) + +### ३. ethereum.org ही एक सामान्य उत्पादन वेबसाइट नाही 🦄 {#core-principles-3} + +Ethereum एक मोठी गोष्ट आहे: त्यात एक समुदाय, एक तंत्रज्ञान, कल्पना आणि विचारसरणींचा एक संच आणि बरेच काही समाविष्ट आहे. +याचा अर्थ वेबसाइटला अनेक विविध वापरकर्ता प्रवासांना हाताळण्याची आवश्यकता आहे, "एका विशिष्ट टूलची इच्छा असलेल्या डेव्हलपरपासून" ते "ज्याने नुकतेच काही ETH खरेदी केले आहे आणि वॉलेट काय आहे हे माहीत नाही अशा नवशिक्यापर्यंत". +"ब्लॉकचेन प्लॅटफॉर्मसाठी सर्वोत्तम वेबसाइट कोणती आहे?" हा एक खुला प्रश्न आहे - आम्ही अग्रणी आहोत. हे तयार करण्यासाठी प्रयोगांची आवश्यकता आहे. + +## उत्पादन रोडमॅप {#roadmap} + +आमचे कार्य अधिक सुलभ करण्यासाठी आणि अधिक समुदाय सहकार्याला प्रोत्साहन देण्यासाठी, ethereum.org कोअर टीम आमच्या [शेप अप सायकल](https://www.productplan.com/glossary/shape-up-method/) रोडमॅप ध्येयांचा आढावा प्रकाशित करते. + +[आमचा २०२५ सायकल १ उत्पादन रोडमॅप पहा](https://github.com/ethereum/ethereum-org-website/issues/14726) + +**कसे वाटले?** आम्ही आमच्या रोडमॅपवरील अभिप्रायाची नेहमीच प्रशंसा करतो - जर तुम्हाला वाटत असेल की आम्ही कशावर तरी काम केले पाहिजे, तर कृपया आम्हाला कळवा! आम्ही समुदायातील कोणाकडूनही कल्पना आणि PRs चे स्वागत करतो. + +**सहभागी होऊ इच्छिता?** [योगदानाबद्दल अधिक जाणून घ्या](/contributing/), [Twitter वर आम्हाला संपर्क साधा](https://x.com/ethdotorg), किंवा [आमच्या Discord सर्व्हरवर](https://discord.gg/ethereum-org) समुदाय चर्चेत सामील व्हा. + +## डिझाइन तत्त्वे {#design-principles} + +आम्ही साइटवरील आमच्या कंटेंट आणि डिझाइन निर्णयांना मार्गदर्शन करण्यासाठी [डिझाइन तत्त्वांचा](/contributing/design-principles/) एक संच वापरतो. + +## डिझाइन प्रणाली {#design-system} + +आम्ही एक [डिझाइन प्रणाली](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System?node-id=0%3A1&t=QBt9RkhpPqzE3Aa6-1) तयार केली आणि प्रसिद्ध केली आहे जेणेकरून वैशिष्ट्ये अधिक लवकर पाठवता येतील आणि समुदाय सदस्यांना ethereum.org च्या मुक्त डिझाइनमध्ये सहभागी होता येईल. + +सहभागी होऊ इच्छिता?[Figma मध्ये फॉलो करा](https://www.figma.com/file/NrNxGjBL0Yl1PrNrOT8G2B/ethereum.org-Design-System), [GitHub इश्यू](https://github.com/ethereum/ethereum-org-website/issues/6284) फॉलो करा आणि आमच्या [#design Discord चॅनेलवर](https://discord.gg/ethereum-org) संभाषणात सामील व्हा. + +## शैली मार्गदर्शक {#style-guide} + +योगदान प्रक्रिया अधिक सुरळीत करण्यासाठी कंटेंट लिहिण्याच्या काही विशिष्ट पैलूंना प्रमाणित करण्यासाठी आमच्याकडे एक [शैली मार्गदर्शक](/contributing/style-guide/) आहे. + +जर तुम्हाला [साइटवर योगदान](/contributing/) द्यायचे असेल तर तुम्ही [आमची तत्त्वे](/contributing/design-principles/) आणि [आमचे शैली मार्गदर्शक](/contributing/style-guide/) वाचल्याची खात्री करा. + +आम्ही आमच्या डिझाइन तत्त्वे, डिझाइन प्रणाली आणि शैली मार्गदर्शकावरील अभिप्रायाचे स्वागत करतो. लक्षात ठेवा, ethereum.org हे समुदायासाठी, समुदायाद्वारे आहे. + +## परवाना {#license} + +ethereum.org वेबसाइट मुक्त-स्रोत आहे आणि अन्यथा निर्दिष्ट केल्याशिवाय [MIT परवान्याअंतर्गत](https://github.com/ethereum/ethereum-org-website/blob/dev/LICENSE) तयार केली आहे. ethereum.org च्या [वापराच्या अटींविषयी](/terms-of-use/) अधिक. + +## नोकरीच्या संधी {#open-jobs} + +जरी ही वेबसाइट मुक्त-स्रोत असली आणि कोणीही त्यावर काम करू शकत असले तरी, आमच्याकडे ethereum.org आणि इतर Ethereum फाउंडेशन वेब प्रकल्पांसाठी एक समर्पित टीम आहे. + +आम्ही नोकरीच्या कोणत्याही संधी येथे पोस्ट करू. जर तुम्हाला येथे तुमच्यासाठी कोणतीही भूमिका दिसत नसेल, तर [आमच्या Discord सर्व्हरवर](https://discord.gg/ethereum-org) जा आणि तुम्ही आमच्यासोबत कसे काम करू इच्छिता हे आम्हाला कळवा! + +ethereum.org टीमच्या पलीकडे पाहत आहात? [इतर Ethereum संबंधित नोकऱ्या पहा](/community/get-involved/#ethereum-jobs/). diff --git a/public/content/translations/mr/ai-agents/index.md b/public/content/translations/mr/ai-agents/index.md new file mode 100644 index 00000000000..37afecaac0e --- /dev/null +++ b/public/content/translations/mr/ai-agents/index.md @@ -0,0 +1,144 @@ +--- +title: "एआय एजंट" +metaTitle: "एआय एजंट | Ethereum वर एआय एजंट" +description: "Ethereum वरील एआय एजंट्सचे एक विहंगावलोकन" +lang: mr +template: use-cases +emoji: ":robot:" +sidebarDepth: 2 +image: /images/ai-agents/hero-image.png +alt: "टर्मिनल टेबलवर जमलेले लोक" +summaryPoint1: "ब्लॉकचेनशी संवाद साधणारे आणि स्वतंत्रपणे व्यवहार करणारे एआय" +summaryPoint2: "ऑनचेन वॉलेट्स आणि निधी नियंत्रित करते" +summaryPoint3: "कामासाठी मानव किंवा इतर एजंट्सना कामावर ठेवते" +buttons: + - content: एआय एजंट म्हणजे काय? + toId: what-are-ai-agents + - content: एजंट्स एक्सप्लोर करा + toId: ai-agents-on-ethereum + isSecondary: false +--- + +अशा एका एआय असिस्टंटसोबत Ethereum नेव्हिगेट करण्याची कल्पना करा जो 24/7 ऑनचेन मार्केट ट्रेंडचा अभ्यास करतो, प्रश्नांची उत्तरे देतो आणि तुमच्या वतीने व्यवहार देखील करतो. एआय एजंट्सच्या जगात आपले स्वागत आहे—तुमचे डिजिटल आयुष्य सोपे करण्यासाठी डिझाइन केलेल्या इंटेलिजेंट सिस्टीम. + +Ethereum वर, आम्हाला व्हर्च्युअल इन्फ्लुएन्सर्स आणि ऑटोनॉमस कंटेंट क्रिएटर्सपासून ते रिअल-टाइम मार्केट अॅनालिसिस प्लॅटफॉर्मपर्यंत एआय एजंट्सचे नवनवीन शोध दिसत आहेत, जे युझर्सना इनसाइट्स, मनोरंजन आणि ऑपरेशनल एफिशिएन्सी देऊन सक्षम करतात. + +## एआय एजंट म्हणजे काय? {#what-are-ai-agents} + +एआय एजंट्स हे सॉफ्टवेअर प्रोग्राम आहेत जे कामे करण्यासाठी किंवा स्वतःचे निर्णय घेण्यासाठी आर्टिफिशियल इंटेलिजन्सचा वापर करतात. ते डेटामधून शिकतात, बदलांशी जुळवून घेतात आणि गुंतागुंतीची कामे हाताळतात. ते नॉन-स्टॉप काम करतात आणि संधी त्वरित शोधू शकतात. + +### एआय एजंट ब्लॉकचेनसोबत कसे काम करतात {#how-ai-agents-work-with-blockchains} + +पारंपारिक फायनान्समध्ये, एआय एजंट्स बहुतेकदा मर्यादित डेटा इनपुटसह केंद्रीकृत वातावरणात काम करतात. यामुळे स्वायत्तपणे मालमत्ता शिकण्याची किंवा व्यवस्थापित करण्याची त्यांची क्षमता बाधित होते. + +याउलट, Ethereum ची विकेंद्रित इकोसिस्टीम अनेक महत्त्वाचे फायदे देते: + +- पारदर्शक डेटा: रिअल-टाइम ब्लॉकचेन माहितीमध्ये प्रवेश. +- खऱ्या मालमत्तेची मालकी: डिजिटल मालमत्ता पूर्णपणे एआय एजंट्सच्या मालकीच्या आहेत. +- मजबूत ऑनचेन कार्यक्षमता: एआय एजंट्सना व्यवहार कार्यान्वित करण्यास, स्मार्ट कॉन्ट्रॅक्ट्सशी संवाद साधण्यास, लिक्विडिटी प्रदान करण्यास आणि प्रोटोकॉल्सवर सहयोग करण्यास सक्षम करते. + +हे घटक एआय एजंट्सना साध्या बॉट्सपासून डायनॅमिक, स्वयं-सुधारित सिस्टीममध्ये रूपांतरित करतात जे अनेक क्षेत्रांमध्ये महत्त्वपूर्ण मूल्य देतात: + + + + + + + +## पडताळणीयोग्य एआय {#verifiable-ai} + +ऑफचेन चालणारे एआय एजंट्स अनेकदा "ब्लॅक बॉक्सेस" सारखे वागतात—त्यांचे तर्क, इनपुट आणि आउटपुट स्वतंत्रपणे पडताळले जाऊ शकत नाहीत. Ethereum ते बदलते. ऑनचेन एजंट वर्तनाला अँकर करून, डेव्हलपर्स असे एजंट तयार करू शकतात जे _विश्वासहीन_, _पारदर्शक_ आणि _आर्थिकदृष्ट्या स्वायत्त_ असतील. अशा एजंट्सच्या कृतींचे ऑडिट केले जाऊ शकते, त्यांना मर्यादित ठेवले जाऊ शकते आणि सिद्ध केले जाऊ शकते. + +### पडताळणीयोग्य अनुमान {#verifiable-inference} + +एआय अनुमान पारंपरिकरित्या ऑफचेन होते, जिथे एक्झिक्यूशन स्वस्त असते पण मॉडेल एक्झिक्यूशन अपारदर्शक असते. Ethereum वर, डेव्हलपर्स अनेक तंत्रांचा वापर करून एजंट्सना पडताळणीयोग्य गणनेसोबत जोडू शकतात: + +- [**zkML (शून्य-ज्ञान मशीन लर्निंग)**](https://opengradient.medium.com/a-gentle-introduction-to-zkml-8049a0e10a04) एजंट्सना मॉडेल किंवा इनपुट उघड न करता मॉडेल योग्यरित्या कार्यान्वित केले गेले हे सिद्ध करू देते +- [**TEE (विश्वसनीय एक्झिक्यूशन एन्व्हायर्नमेंट) अटेस्टेशन्स**](https://en.wikipedia.org/wiki/Trusted_execution_environment) हार्डवेअर-बॅक्ड पुरावे देतात की एजंटने एक विशिष्ट मॉडेल किंवा कोड पाथ चालवला आहे +- **ऑनचेन अपरिवर्तनीयता** हे सुनिश्चित करते की हे पुरावे आणि अटेस्टेशन्स कोणत्याही कॉन्ट्रॅक्ट किंवा एजंटद्वारे संदर्भित, पुन्हा प्ले केले जाऊ शकतात आणि त्यावर विश्वास ठेवला जाऊ शकतो + +## पेमेंट्स, आणि x402 सह कॉमर्स {#x402} + +[x402 प्रोटोकॉल](https://www.x402.org/), जो Ethereum आणि L2s वर तैनात आहे, एजंट्सना मानवी हस्तक्षेपाशिवाय संसाधनांसाठी पैसे देण्याचा आणि आर्थिकदृष्ट्या संवाद साधण्याचा एक मूळ मार्ग देतो. एजंट्स हे करू शकतात: + +- स्टेबलकॉइन्स वापरून संगणन, डेटा आणि API कॉल्ससाठी पैसे द्या +- इतर एजंट्स किंवा सेवांकडून अटेस्टेशन्सची विनंती करा किंवा पडताळणी करा +- एजंट-टू-एजंट कॉमर्समध्ये सहभागी व्हा, संगणन, डेटा किंवा मॉडेल आउटपुट खरेदी आणि विक्री करा + +x402 Ethereum ला ऑटोनॉमस एजंट्ससाठी प्रोग्राम करण्यायोग्य आर्थिक लेयरमध्ये बदलते, जे अकाउंट्स, सबस्क्रिप्शन किंवा केंद्रीकृत बिलिंगऐवजी पे-पर-यूज इंटरॅक्शन सक्षम करते. + +### एजेंटिक फायनान्स सुरक्षा {#agentic-finance-security} + +स्वायत्त एजंट्सना गार्डरेल्सची आवश्यकता असते. Ethereum त्यांना वॉलेट आणि कॉन्ट्रॅक्ट स्तरावर प्रदान करते: + +- [स्मार्ट अकाउंट्स (EIP-4337)](https://eips.ethereum.org/EIPS/eip-4337) डेव्हलपर्सना खर्चाच्या मर्यादा, व्हाइटलिस्ट, सेशन की आणि ग्रॅन्युलर परवानग्या लागू करू देतात +- स्मार्ट कॉन्ट्रॅक्ट्समधील प्रोग्राम केलेले निर्बंध एजंटला काय करण्याची परवानगी आहे हे मर्यादित करू शकतात +- अनुमानावर आधारित मर्यादा (उदा., उच्च-जोखमीची क्रिया करण्यापूर्वी zkML पुरावा आवश्यक असणे) सुरक्षिततेचा आणखी एक लेयर जोडतात + +हे नियंत्रणे अमर्याद नसलेल्या स्वायत्त एजंट्सच्या तैनातीला सक्षम करतात. + +### ऑनचेन रजिस्ट्रीज: ERC-8004 {#erc-8004} + +[ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) एक उदयोन्मुख मानक आहे (सध्या पीअर रिव्ह्यूमध्ये आहे) जे एजंट ओळख, क्षमता आणि अटेस्टेशन्ससाठी ऑनचेन रजिस्ट्रीज प्रस्तावित करते. + +स्वीकारल्यास, ते प्रदान करू शकते: + +- एजंट्सची एक सामायिक, विश्वासहीन डिरेक्टरी +- मानकीकृत अटेस्टेशन स्वरूप +- थेट Ethereum मेननेटवर "विश्वासहीन एजंट इन्फ्रास्ट्रक्चर" साठी एक पाया + +यामुळे एजंट्सना पूर्णपणे विकेंद्रित वातावरणात एकमेकांना शोधणे, पडताळणे आणि व्यवहार करणे सोपे होईल. + +## Ethereum वरील एआय एजंट्स {#ai-agents-on-ethereum} + +आम्ही एआय एजंट्सची संपूर्ण क्षमता शोधायला सुरुवात केली आहे, आणि प्रकल्प आधीच एआय आणि ब्लॉकचेन यांच्यातील समन्वयाचा फायदा घेत आहेत - विशेषतः पारदर्शकता आणि कमाईमध्ये. + + + +पॉडकास्ट गेस्ट म्हणून लुनाची पहिली उपस्थिती + + + +## एजंट-नियंत्रित वॉलेट्स {#agent-controlled-wallets} + +Luna किंवा AIXBT सारखे एजंट्स त्यांचे स्वतःचे ऑनचेन वॉलेट नियंत्रित करतात ([AIXBT चे वॉलेट](https://clusters.xyz/aixbt), [Luna चे वॉलेट](https://zapper.xyz/account/0x0d177181e3763b20d47dc3a72dd584368bd8bf43)) ज्यामुळे त्यांना चाहत्यांना टिप देता येते आणि आर्थिक उपक्रमांमध्ये भाग घेता येतो. + +Luna च्या X सोशल कॅम्पेन #LunaMuralChallenge दरम्यान, Luna ने तिच्या Base वॉलेटद्वारे विजेत्यांची निवड केली आणि त्यांना बक्षीस दिले — क्रिप्टो रिवॉर्डसाठी एआयने मानवांना कामावर ठेवण्याचे हे पहिले उदाहरण आहे. + + + + +

हे जाणून घेणे महत्त्वाचे आहे

+

एआय एजंट्स आणि संबंधित टूल्स अजूनही सुरुवातीच्या विकासात आहेत आणि खूप प्रायोगिक आहेत—सावधगिरीने वापरा.

+
+ +
+ +## चॅट कमांड वापरून तुमचे वॉलेट नियंत्रित करा {#control-your-wallet-using-chat-commands} + +तुम्ही DeFi चे गुंतागुंतीचे इंटरफेस वगळू शकता आणि साध्या चॅट कमांड्सद्वारे तुमची क्रिप्टो व्यवस्थापित करू शकता. + +या सहज दृष्टिकोनामुळे व्यवहार जलद, सोपे होतात आणि चुकीच्या ॲड्रेसवर निधी पाठवणे किंवा शुल्कासाठी जास्त पैसे देणे यासारख्या चुका होण्याची शक्यता कमी होते. + + + +## एआय एजंट्स विरुद्ध एआय बॉट्स {#ai-agents-vs-ai-bots} + +एआय एजंट्स आणि एआय बॉट्समधील फरक कधीकधी गोंधळात टाकणारा असू शकतो, कारण दोन्ही इनपुटवर आधारित स्वयंचलित क्रिया करतात. + +- एआय बॉट्स स्वयंचलित सहाय्यकांसारखे आहेत — ते नियमित कार्ये करण्यासाठी विशिष्ट, पूर्व-प्रोग्राम केलेल्या सूचनांचे पालन करतात. +- एआय एजंट्स बुद्धिमान साथीदारांसारखे अधिक आहेत — ते अनुभवातून शिकतात, नवीन माहितीशी जुळवून घेतात आणि स्वतःचे निर्णय घेतात. + +| | एआय एजंट | एआय बॉट्स | +| -------------------- | ---------------------------------------------------------------------------- | ------------------------------------------------------- | +| **संवाद** | गुंतागुंतीचे, जुळवून घेणारे, स्वायत्त | साधे, पूर्व-परिभाषित व्याप्ती, हार्डकोड केलेले | +| **शिकणे** | सतत शिकते, प्रयोग करू शकते आणि रिअल-टाइममध्ये नवीन डेटामध्ये जुळवून घेऊ शकते | पूर्व-प्रशिक्षित डेटा किंवा निश्चित नियमांवर कार्य करते | +| **कार्य पूर्ण करणे** | व्यापक उद्दिष्ट्ये साध्य करण्याचे उद्दिष्ट आहे | केवळ विशिष्ट कार्यांवर लक्ष केंद्रित करते | + +## अधिक सखोलपणे माहिती घ्या {#dive-deeper} + + + +## तुम्ही तुमचा स्वतःचा एआय एजंट तयार करू शकता {#you-can-build-your-own-ai-agent} + + diff --git a/public/content/translations/mr/bridges/index.md b/public/content/translations/mr/bridges/index.md new file mode 100644 index 00000000000..36c4b75e165 --- /dev/null +++ b/public/content/translations/mr/bridges/index.md @@ -0,0 +1,145 @@ +--- +title: "ब्लॉकचेन ब्रिजचा परिचय" +description: "ब्रिज वापरकर्त्यांना त्यांचे फंड वेगवेगळ्या ब्लॉकचेनवर हलवण्याची परवानगी देतात" +lang: mr +--- + +# ब्लॉकचेन पूल {#prerequisites} + +_Web3 हे L1 ब्लॉकचेन आणि L2 स्केलिंग सोल्यूशन्सच्या इकोसिस्टममध्ये विकसित झाले आहे, प्रत्येक अद्वितीय क्षमता आणि ट्रेड-ऑफसह डिझाइन केलेले आहे. Web3 L1 ब्लॉकचेन आणि L2 स्केलिंग सलुशन्सच्या इकोसिस्टममध्ये विकसित आहे, प्रत्येक अद्वितीय क्षमता आणि ट्रेड-ऑफसह डिझाइन केलेले आहे.ही मागणी पूर्ण करण्यासाठी, आम्हाला पुलांची गरज आहे._ + + + +## पूल म्हणजे काय? {#what-are-bridges} + +ब्लॉकचेन ब्रिज हे भौतिक जगात आपल्याला माहीत असलेल्या पुलांप्रमाणेच काम करतात. ज्याप्रमाणे एक भौतिक पूल दोन भौतिक स्थानांना जोडतो, त्याचप्रमाणे ब्लॉकचेन पूल दोन ब्लॉकचेन इकोसिस्टमला जोडतो. **पुल माहिती आणि मालमत्तेच्या हस्तांतरणाद्वारे ब्लॉकचेन दरम्यान संवाद सुलभ करतात**. + +चला एक उदाहरण विचारात घेऊया: + +तुम्ही यूएसए मधील आहात आणि युरोपला जाण्याची योजना आखत आहात. तुमच्याकडे USD आहे, पण तुम्हाला खर्च करण्यासाठी EUR आवश्यक आहे. तुमचा USD ची EUR साठी देवाणघेवाण करण्यासाठी तुम्ही अल्प शुल्कासाठी चलन विनिमय वापरू शकता. + +पण, जर तुम्हाला वेगळा [ब्लॉकचेन](/glossary/#blockchain) वापरण्यासाठी तसाच एक्सचेंज करायचा असेल तर तुम्ही काय कराल? समजा तुम्हाला Ethereum Mainnet वरील [ETH](/glossary/#ether) हे [Arbitrum](https://arbitrum.io/) वरील ETH साठी एक्सचेंज करायचे आहे. आम्ही EUR साठी केलेल्या चलन विनिमयाप्रमाणे, आम्हाला आमची ETH इथरियमवरून आर्बिट्रममध्ये हलवण्याची यंत्रणा हवी आहे. पुलांमुळे असा व्यवहार शक्य होतो. या प्रकरणात, [Arbitrum चा एक नेटिव्ह पूल आहे](https://portal.arbitrum.io/bridge) जो Mainnet वरून Arbitrum वर ETH हस्तांतरित करू शकतो. + +## आम्हाला पुलांची गरज का आहे? {#why-do-we-need-bridges} + +सर्व ब्लॉकचेनला त्यांच्या मर्यादा आहेत. Ethereum ला स्केल करण्यासाठी आणि मागणी पूर्ण करण्यासाठी, त्याला [रोलअप्सची](/glossary/#rollups) आवश्यकता आहे. वैकल्पिकरित्या, सोलाना आणि हिमस्खलन सारखे L1 उच्च थ्रूपुट सक्षम करण्यासाठी परंतु विकेंद्रीकरणाच्या खर्चावर वेगळ्या पद्धतीने डिझाइन केले आहेत. + +तथापि, सर्व ब्लॉकचेन वेगळ्या वातावरणात विकसित केले जातात आणि त्यांचे नियम आणि [एकमत](/glossary/#consensus) यंत्रणा भिन्न असतात. याचा अर्थ ते मूळ संवाद साधू शकत नाहीत आणि टोकन ब्लॉकचेन दरम्यान मुक्तपणे फिरू शकत नाहीत. + +ब्लॉकचेनला जोडण्यासाठी ब्रिज अस्तित्वात आहेत, ज्यामुळे माहिती आणि टोकन्सचे हस्तांतरण होऊ शकते. + +**पुल सक्षम करतात**: + +- मालमत्ता आणि माहितीचे क्रॉस-चेन हस्तांतरण. +- [dapps](/glossary/#dapp) विविध ब्लॉकचेनच्या बलस्थानांचा फायदा घेऊ शकतात – त्यामुळे त्यांच्या क्षमता वाढतात (कारण प्रोटोकॉल्सकडे आता नावीन्यपूर्णतेसाठी अधिक डिझाइन स्पेस आहे). +- वापरकर्ते नवीन प्लॅटफॉर्मवर प्रवेश करण्यासाठी आणि विविध साखळींच्या फायद्यांचा लाभ घेण्यासाठी. +- विविध ब्लॉकचेन इकोसिस्टममधील विकासक सहकार्य करण्यासाठी आणि वापरकर्त्यांसाठी नवीन प्लॅटफॉर्म तयार करण्यासाठी. + +[टोकन्स लेयर 2 वर कसे ब्रिज करावे](/guides/how-to-use-a-bridge/) + + + +## पूलाचे उपयोग {#bridge-use-cases} + +खालील काही परिस्थिती आहेत जेथे तुम्ही पूल वापरू शकता: + +### कमी व्यवहार शुल्क {#transaction-fees} + +समजा तुमच्याकडे Ethereum Mainnet वर ETH आहे परंतु भिन्न डॅप एक्सप्लोर करण्यासाठी स्वस्त व्यवहार शुल्क हवे आहे. तुमच्या ETH ला Mainnet वरून Ethereum L2 रोलअपवर आणून, तुम्ही कमी व्यवहार शुल्काचा आनंद घेऊ शकता. + +### इतर ब्लॉकचेनवरील Dapps {#dapps-other-chains} + +जर तुम्ही USDT पुरवण्यासाठी Ethereum Mainnet वर Aave वापरत असाल, परंतु Polygon वर Aave वापरून USDT पुरवण्यासाठी मिळणारा व्याजदर जास्त असेल. + +### ब्लॉकचेन इकोसिस्टम एक्सप्लोर करा {#explore-ecosystems} + +तुमच्याकडे Ethereum Mainnet वर ETH असल्यास आणि तुम्ही त्यांचे मूळ डॅप वापरून पाहण्यासाठी Alt L1 एक्सप्लोर करू इच्छित असल्यास. तुमचा ETH Ethereum Mainnet वरून Alt L1 वर हस्तांतरित करण्यासाठी तुम्ही ब्रिज वापरू शकता. + +### स्वतःची मूळ क्रिप्टो मालमत्ता {#own-native} + +समजा तुम्हाला मूळ बिटकॉइन (BTC) ची मालकी हवी आहे, परंतु तुमच्याकडे फक्त इथरियम मेननेटवर निधी आहे. इथरियमवर बीटीसीच्या संपर्कात येण्यासाठी, तुम्ही रॅप्ड बिटकॉइन (डब्ल्यूबीटीसी) खरेदी करू शकता. तथापि, WBTC हे Ethereum नेटवर्कचे मूळ [ERC-20](/glossary/#erc-20) टोकन आहे, याचा अर्थ ते Bitcoin चे Ethereum व्हर्जन आहे आणि Bitcoin ब्लॉकचेनवरील मूळ मालमत्ता नाही. मूळ BTC चे मालक होण्यासाठी, तुम्हाला तुमची मालमत्ता इथरियम ते बिटकॉइन पर्यंत ब्रिज वापरून जोडावी लागेल. हे तुमचे WBTC ब्रिज करेल आणि ते मूळ BTC मध्ये रूपांतरित करेल. किंवा, तुमच्याकडे BTC असेल आणि तुम्हाला ते Ethereum [DeFi](/glossary/#defi) प्रोटोकॉलमध्ये वापरायचे असेल. यासाठी BTC ते WBTC पर्यंत ब्रिजिंग करणे आवश्यक आहे जे नंतर Ethereum वर मालमत्ता म्हणून वापरले जाऊ शकते. + + + + + + तुम्ही [केंद्रीकृत एक्सचेंज](/get-eth) वापरून देखील वरील सर्व करू शकता. तथापि, जोपर्यंत तुमचे फंड आधीच एक्सचेंजमध्ये नसतील, तोपर्यंत त्यात अनेक पायऱ्यांचा समावेश असेल आणि तुम्ही ब्रिज वापरणे अधिक चांगले होईल. + + + + + + +## पुलांचे प्रकार {#types-of-bridge} + +पुलांमध्ये अनेक प्रकारचे डिझाइन आणि गुंतागुंत आहेत. साधारणपणे, पूल दोन श्रेणींमध्ये मोडतात: विश्वासार्ह आणि विश्वासहीन पूल. + +| विश्वसनीय पुल | विश्वासहीन पूल | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| विश्वसनीय पूल त्यांच्या कार्यासाठी केंद्रीय संस्था किंवा प्रणालीवर अवलंबून असतात. | विश्वासार्ह पूल स्मार्ट करार आणि अल्गोरिदम वापरून कार्य करतात. | +| निधीचा ताबा आणि पुलाच्या सुरक्षेच्या संदर्भात त्यांच्याकडे विश्वासाचे गृहितक आहेत. वापरकर्ते मुख्यतः ब्रिज ऑपरेटरच्या प्रतिष्ठेवर अवलंबून असतात. | ते विश्वासहीन आहेत, म्हणजे, ब्रिजची सुरक्षा अंतर्निहित ब्लॉकचेन सारखीच आहे. | +| वापरकर्त्यांनी त्यांच्या क्रिप्टो मालमत्तेचे नियंत्रण सोडणे आवश्यक आहे. | [स्मार्ट कॉन्ट्रॅक्ट्सद्वारे](/glossary/#smart-contract), विश्वासहीन पूल वापरकर्त्यांना त्यांच्या निधीवर नियंत्रण ठेवण्यास सक्षम करतात. | + +थोडक्यात, आम्ही असे म्हणू शकतो की विश्वासार्ह पुलांमध्ये विश्वासार्ह गृहीतके असतात, तर विश्वासहीन पूल विश्वास-कमी केले जातात आणि अंतर्निहित डोमेनच्या पलीकडे नवीन विश्वास गृहित धरत नाहीत. या अटींचे वर्णन कसे केले जाऊ शकते ते येथे आहे: + +- **विश्वासहीन**: अंतर्निहित डोमेनच्या समतुल्य सुरक्षा. [या लेखात अर्जुन भुप्तानी यांनी वर्णन केल्याप्रमाणे.](https://medium.com/connext/the-interoperability-trilemma-657c2cf69f17) +- **विश्वासाची गृहीतके:** सिस्टीममध्ये बाह्य पडताळणीकर्ते जोडून अंतर्निहित डोमेनच्या सुरक्षिततेपासून दूर जाणे, ज्यामुळे ते क्रिप्टो-आर्थिकदृष्ट्या कमी सुरक्षित बनते. + +दोन पध्दतींमधील मुख्य फरक अधिक चांगल्या प्रकारे समजून घेण्यासाठी, एक उदाहरण घेऊ: + +कल्पना करा की तुम्ही विमानतळ सुरक्षा चेकपॉईंटवर आहात. चेकपॉईंटचे दोन प्रकार आहेत: + +1. मॅन्युअल चेकपॉइंट्स — बोर्डिंग पास देण्यापूर्वी तुमच्या तिकीटाचे आणि ओळखीचे सर्व तपशील मॅन्युअली तपासणारे अधिकारी चालवतात. +2. सेल्फ चेक-इन - एका मशीनद्वारे ऑपरेट केले जाते जेथे तुम्ही तुमचे फ्लाइट तपशील टाकता आणि सर्वकाही तपासले असल्यास बोर्डिंग पास प्राप्त करा. + +मॅन्युअल चेकपॉईंट विश्वासार्ह मॉडेलसारखेच असते कारण ते तिसऱ्या पक्षावर, म्हणजे अधिकाऱ्यांवर अवलंबून असते. एक वापरकर्ता म्हणून, तुम्ही अधिकाऱ्यांवर योग्य निर्णय घेण्यासाठी आणि तुमची खाजगी माहिती योग्यरित्या वापरण्यासाठी विश्वास ठेवता. + +सेल्फ चेक-इन हे ट्रस्टलेस मॉडेलसारखेच आहे कारण ते ऑपरेटरची भूमिका काढून टाकते आणि त्याच्या ऑपरेशन्ससाठी तंत्रज्ञान वापरते. वापरकर्ते नेहमी त्यांच्या डेटावर नियंत्रण ठेवतात आणि त्यांच्या खाजगी माहितीसह तृतीय पक्षावर विश्वास ठेवण्याची गरज नाही. + +अनेक ब्रिजिंग सोल्यूशन्स या दोन टोकांमधील मॉडेल्सचा अवलंब करतात ज्यात वेगवेगळ्या प्रमाणात विश्वासहीनता असते. + + + +## पूल वापरा {#use-bridge} + +पूल वापरल्याने तुम्हाला तुमची मालमत्ता वेगवेगळ्या ब्लॉकचेनवर हलवता येते. येथे काही संसाधने आहेत जी तुम्हाला पूल शोधण्यात आणि वापरण्यात मदत करू शकतात: + +- **[L2BEAT Bridges Summary](https://l2beat.com/bridges/summary) आणि [L2BEAT Bridges Risk Analysis](https://l2beat.com/bridges/summary)**: विविध पूलांचा एक सर्वसमावेशक सारांश, ज्यामध्ये मार्केट शेअर, पूलाचा प्रकार आणि डेस्टिनेशन चेन्सवरील तपशील समाविष्ट आहेत. L2BEAT कडे पूलांसाठी एक जोखीम विश्लेषण देखील आहे, जे वापरकर्त्यांना पूल निवडताना माहितीपूर्ण निर्णय घेण्यास मदत करते. +- **[DefiLlama Bridge Summary](https://defillama.com/bridges/Ethereum)**: Ethereum नेटवर्कवरील पूल व्हॉल्यूमचा सारांश. + + + +## पूल वापरण्यातील जोखीम {#bridge-risk} + +पूल विकासाच्या सुरुवातीच्या टप्प्यात आहेत. अशी शक्यता आहे की इष्टतम पुलाची रचना अद्याप शोधली गेली नाही. कोणत्याही प्रकारच्या पुलाशी संवाद साधताना धोका असतो: + +- **स्मार्ट कॉन्ट्रॅक्ट जोखीम —** कोडमधील बगचा धोका ज्यामुळे वापरकर्त्याचा निधी गमावला जाऊ शकतो +- **तंत्रज्ञान जोखीम —** सॉफ्टवेअरमधील बिघाड, सदोष कोड, मानवी चूक, स्पॅम आणि दुर्भावनापूर्ण हल्ले वापरकर्त्याच्या कार्यांमध्ये व्यत्यय आणू शकतात + +शिवाय, विश्वासार्ह पूल विश्वासार्ह गृहीतके जोडत असल्याने, त्यांना अतिरिक्त जोखीम असतात जसे की: + +- **सेन्सॉरशिप जोखीम —** पूल ऑपरेटर सैद्धांतिकदृष्ट्या वापरकर्त्यांना पूल वापरून त्यांची मालमत्ता हस्तांतरित करण्यापासून रोखू शकतात +- **कस्टोडियल जोखीम —** पूल ऑपरेटर वापरकर्त्यांचा निधी चोरण्यासाठी संगनमत करू शकतात + +वापरकर्त्याच्या निधीला धोका आहे जर: + +- स्मार्ट कॉन्ट्रॅक्टमध्ये एक बग आहे +- वापरकर्ता चूक करतो +- अंतर्निहित ब्लॉकचेन हॅक केले आहे +- ब्रिज ऑपरेटर्सचा विश्वासार्ह पुलामध्ये दुर्भावनापूर्ण हेतू आहे +- पूल हॅक होतो + +अलीकडील एक हॅक म्हणजे सोलानाचा वर्महोल पूल, [जिथे हॅक दरम्यान 120k wETH ($325 दशलक्ष USD) चोरले गेले](https://rekt.news/wormhole-rekt/). ब्लॉकचेनमधील अनेक [मोठ्या हॅक्समध्ये पूलांचा समावेश होता](https://rekt.news/leaderboard/). + +Ethereum L2s वर वापरकर्त्यांना ऑनबोर्डिंग करण्यासाठी आणि अगदी भिन्न परिसंस्था एक्सप्लोर करू इच्छिणाऱ्या वापरकर्त्यांसाठी देखील ब्रिज महत्त्वाचे आहेत. तथापि, पुलांशी संवाद साधण्यात गुंतलेली जोखीम लक्षात घेता, वापरकर्त्यांनी पूल करत असलेल्या ट्रेड-ऑफ समजून घेणे आवश्यक आहे. या [क्रॉस-चेन सुरक्षेसाठी काही रणनीती](https://debridge.com/learn/blog/10-strategies-for-cross-chain-security/) आहेत. + + + +## पुढील वाचन {#further-reading} + +- [EIP-5164: Cross-Chain Execution](https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658) - _जून १८, २०२२ - Brendan Asselstine_ +- [L2Bridge Risk Framework](https://gov.l2beat.com/t/l2bridge-risk-framework/31) - _जुलै ५, २०२२ - Bartek Kiepuszewski_ +- ["भविष्य मल्टी-चेन का असेल, पण ते क्रॉस-चेन नसेल."](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) - _जानेवारी ८, २०२२ - विटालिक बुटेरिन_ +- [सुरक्षित क्रॉस-चेन इंटरऑपरेबिलिटीसाठी शेअर्ड सिक्युरिटीचा वापर करणे: लाग्रेंज स्थिती समित्या आणि त्यापलीकडे](https://web.archive.org/web/20250125035123/https://research.2077.xyz/harnessing-shared-security-for-secure-blockchain-interoperability) - _जून १२, २०२४ - Emmanuel Awosika_ +- [रोलअप इंटरऑपरेबिलिटी सोल्यूशन्सची सद्यस्थिती](https://web.archive.org/web/20250428015516/https://research.2077.xyz/the-state-of-rollup-interoperability) - _जून २०, २०२४ - Alex Hook_ + diff --git a/public/content/translations/mr/community/code-of-conduct/index.md b/public/content/translations/mr/community/code-of-conduct/index.md new file mode 100644 index 00000000000..d12dae7a04c --- /dev/null +++ b/public/content/translations/mr/community/code-of-conduct/index.md @@ -0,0 +1,77 @@ +--- +title: "आचारसंहिता" +description: "मूलभूत मानके ज्यासाठी आम्ही ethereum.org च्या सर्व जागांवर प्रयत्न करतो." +lang: mr +--- + +# आचारसंहिता {#code-of-conduct} + +## ध्येय {#mission} + +Ethereum साठी सर्वात व्यापक आणि प्रवेशयोग्य ज्ञान केंद्र विकसित करणे आणि सांभाळणे. + +## मूल्ये {#values} + +ethereum.org समुदाय पुढीलप्रमाणे असण्याचा प्रयत्न करतो: + +- शैक्षणिक, प्रत्येकाला Ethereum समजून घेण्यासाठी मदत करण्याच्या उद्देशाने +- सर्वसमावेशक +- प्रवेशयोग्य +- समुदाय-चालित +- Ethereum च्या मूळ तंत्रज्ञानावर आणि वापराच्या प्रकरणांवर लक्ष केंद्रित +- Ethereum संकल्पना आणि डिझाइन तत्त्वांवर लक्ष केंद्रित + +## आम्ही काय नाही {#what-we-are-not} + +- Ethereum फाउंडेशनची वेबसाइट +- गुंतवणुकीला प्रोत्साहन देण्यासाठी किंवा कोणत्याही प्रकारच्या नफेखोरीसाठी असलेले व्यासपीठ +- वैयक्तिक प्रकल्प किंवा संस्थांना प्रोत्साहन देण्यासाठी किंवा समर्थन करण्यासाठी असलेले व्यासपीठ +- एक DEX, CEX किंवा इतर कोणत्याही प्रकारचे आर्थिक व्यासपीठ +- कोणत्याही प्रकारचा आर्थिक किंवा कायदेशीर सल्ला देणारे व्यासपीठ + +## आचारसंहिता {#code-of-conduct} + +### प्रतिज्ञा {#pledge} + +खुला सहभाग हा ethereum.org च्या तत्त्वज्ञानाचा गाभा आहे. आम्ही एक वेबसाइट आणि समुदाय आहोत जे हजारो योगदानकर्त्यांद्वारे सांभाळले जाते, आणि हे तेव्हाच शक्य आहे जेव्हा आपण एक स्वागतार्ह, सहभागी वातावरण राखतो. या उद्देशाने, या साइटचे योगदानकर्ते सर्व ethereum.org प्लॅटफॉर्म आणि सामुदायिक जागांवर सर्व सहभागींसाठी छळ-मुक्त वातावरण राखण्याची प्रतिज्ञा करतात. ethereum.org समुदाय वय, अपंगत्व, वंश, लैंगिक वैशिष्ट्ये, लिंग ओळख, अनुभवाची पातळी, कौशल्याचे क्षेत्र, शिक्षण, सामाजिक-आर्थिक स्थिती, राष्ट्रीयत्व, वैयक्तिक स्वरूप, वंश, धर्म किंवा विविधतेचे इतर कोणतेही परिमाण विचारात न घेता, जो कोणी रचनात्मक आणि मैत्रीपूर्ण मार्गाने सहभागी होऊ इच्छितो, त्या प्रत्येकाचे स्वागत करतो आणि त्यांना महत्त्व देतो. + +### व्याप्ती {#scope} + +ही आचारसंहिता सर्व ethereum.org जागांना (जसे की GitHub, Discord, Figma, Crowdin, X (पूर्वीचे Twitter) आणि इतर ऑनलाइन प्लॅटफॉर्म) लागू होते, आणि जेव्हा समुदाय मीटअप, परिषदा आणि कार्यक्रमांसारख्या वास्तविक-जगातील सार्वजनिक ठिकाणी प्रतिनिधित्व करतो तेव्हा देखील ती लागू होते. + +### आमची मानके {#our-standards} + +सकारात्मक वातावरण निर्माण करण्यास हातभार लावणाऱ्या वर्तणुकीच्या उदाहरणांमध्ये यांचा समावेश आहे: + +- स्वागतार्ह आणि सर्वसमावेशक भाषेचा वापर करणे +- भिन्न दृष्टिकोन आणि अनुभवांचा आदर करणे +- रचनात्मक टीका नम्रपणे स्वीकारणे आणि/किंवा सहानुभूतीने देणे +- संघर्ष किंवा मतभेद सोडवताना शांतपणे आणि व्यावसायिकपणे वागणे +- इतर समुदाय सदस्यांप्रति सहानुभूती आणि सहिष्णुता दर्शवणे +- समुदायातील नवीन आवाजांना प्रोत्साहन देणे आणि मोठे करणे + +सहभागींच्या अस्वीकार्य वर्तणुकीच्या उदाहरणांमध्ये यांचा समावेश आहे: + +- शारीरिक हिंसा, शारीरिक हिंसेची धमकी देणे किंवा कोणत्याही प्रकारच्या शारीरिक हिंसेला प्रोत्साहन देणे +- लैंगिक भाषा किंवा प्रतिमांचा वापर करणे किंवा अवांछित लैंगिक लक्ष वेधणे +- दुसऱ्या व्यक्तीचे सोंग घेणे किंवा अन्यथा कोणत्यातरी व्यक्ती किंवा संस्थेशी संलग्न असल्याचा अप्रामाणिकपणे दावा करणे +- ट्रोलिंग, अपमानकारक/निंदाजनक टिप्पण्या आणि वैयक्तिक किंवा राजकीय हल्ले +- सार्वजनिक किंवा खाजगी चॅनेलमध्ये इतर समुदाय सदस्यांना त्रास देणे +- स्पष्ट परवानगीशिवाय इतरांची खाजगी माहिती, जसे की भौतिक किंवा इलेक्ट्रॉनिक पत्ता, प्रकाशित करणे +- सोशल इंजिनिअरिंग, घोटाळा करणे किंवा अन्यथा इतर समुदाय सदस्यांना हाताळणे +- वैयक्तिक आर्थिक किंवा गैर-आर्थिक लाभासाठी गुंतवणूक, टोकन, प्रकल्प किंवा इतर काहीही प्रोत्साहन देणे +- विषयांतरित सामग्रीसह सर्व्हरवर स्पॅम करणे +- समुदाय नियंत्रकांच्या विनंत्या किंवा इशाऱ्यांकडे दुर्लक्ष करणे +- व्यावसायिक वातावरणात वाजवीपणे अयोग्य मानल्या जाणाऱ्या इतर वर्तनात गुंतणे + +### तक्रार करणे {#reporting} + +आचारसंहितेचे उल्लंघन साधारणपणे समुदायाला दिसेल कारण आम्ही सर्व काही खुल्या, सार्वजनिक चॅनेलमध्ये करण्याचा प्रयत्न करतो, ज्यामुळे समुदाय सदस्य स्वतःच देखरेख करू शकतात. + +तथापि, जर असे काही घडले ज्याकडे लक्ष देण्याची गरज आहे असे तुम्हाला वाटत असेल, तर तुम्ही ते नियंत्रकाची भूमिका असलेल्या एखाद्या व्यक्तीकडे (उदा. discord मार्गदर्शक) मांडू शकता, जेणेकरून ते तपासणी करण्यास आणि योग्य प्रतिसाद कार्यवाही करण्यास मदत करू शकतील. + +तक्रार करताना, कृपया विशिष्ट उदाहरणे आणि टाइमस्टॅम्पसह शक्य तितका तपशील समाविष्ट करा. यामुळे न्याय्य परिणाम सुनिश्चित करण्यास मदत होईल. + +### अंमलबजावणी {#enforcement} + +गंभीरतेनुसार, आचारसंहितेचे उल्लंघन करणाऱ्या लोकांना ethereum.org समुदायांमधून सूचना, तात्पुरती बंदी किंवा कायमची बंदी मिळू शकते. diff --git a/public/content/translations/mr/community/events/organizing/index.md b/public/content/translations/mr/community/events/organizing/index.md new file mode 100644 index 00000000000..b4e87d4e6d0 --- /dev/null +++ b/public/content/translations/mr/community/events/organizing/index.md @@ -0,0 +1,221 @@ +--- +title: "Ethereum कार्यक्रमाचे आयोजन" +description: "Ethereum कार्यक्रमाचे आयोजन कसे करावे" +lang: mr +hideEditButton: true +--- + +# Ethereum कार्यक्रमाचे आयोजन कसे करावे {#how-to-organize-an-ethereum-event} + +एक मजबूत आणि उत्साही समुदाय तयार करणे हे Ethereum इकोसिस्टमच्या वाढीच्या केंद्रस्थानी आहे. तुम्ही बैठका, कार्यशाळा किंवा पूर्ण-प्रमाणातील परिषदेचे आयोजन करण्याची योजना करत असाल तरीही, तुमच्या कार्यक्रमाचे यश तुमच्या स्थानिक नेटवर्कमधील संबंध आणि सहभागावर अवलंबून असते. हे मार्गदर्शक तुम्हाला एका सक्रिय Ethereum समुदायासाठी पाया घालण्यास मदत करेल आणि एक अविस्मरणीय व प्रभावी परिषदेच्या आयोजनाच्या प्रक्रियेतून टप्प्याटप्प्याने घेऊन जाईल. + +## स्वतःला विचारा, Ethereum समुदाय आहे का? {#ask-yourself-is-there-an-ethereum-community} + +एक यशस्वी Ethereum परिषद एका सक्रिय आणि सहभागी समुदायावर आधारित असते. तुमच्याकडे आधीच एक समुदाय असल्यास, तुम्ही इतरांपेक्षा पुढे आहात — पण जर नसेल, तर तो पाया तयार करणे ही एक आवश्यक पूर्व-पायरी आहे. एक 'सीन' आणि एक 'समुदाय' यांमधील फरक ओळखणे महत्त्वाचे आहे: एका सीनमध्ये एखाद्या विशिष्ट क्षेत्रातील कंपन्या आणि व्यक्तींचा समावेश असू शकतो, परंतु ते अनेकदा स्वतंत्रपणे काम करतात आणि क्वचितच संयुक्त उपक्रम राबवतात — जसे अनेक ठिकाणी पारंपरिक web2 इकोसिस्टममध्ये दिसते. दुसरीकडे, समुदाय म्हणजे एकमेकांशी जोडलेल्या लोकांचे आणि संस्थांचे एक जाळे, जे एकमेकांना सहकार्य करतात आणि पाठिंबा देतात, जे web3 इकोसिस्टममध्ये अनेकदा दिसून येते. + +**तुमच्या पहिल्या पायऱ्या खालीलप्रमाणे असाव्यात:** + +- स्थानिक स्टार्टअप्स आणि कंपन्यांचा शोध घ्या — तुमच्या शहरात किंवा देशात मजबूत, सक्रिय कंपन्या असणे हे अनेकदा समुदाय तयार करण्यासाठी सर्वात महत्त्वाचे पूर्व-आवश्यकता असते. +- आधीच काही भेटीगाठी (meetups) आहेत का ते तपासा — ethereum.org [कार्यक्रमांचे पृष्ठ](https://ethereum.org/community/events/) +- [ethereum.org वेबसाइट](https://ethereum.org/community/events/) आणि ethereum.org Discord — स्थानिक Ethereum कार्यक्रम, डेव्हलपर आणि योगदानकर्ते आहेत का हे तपासण्यासाठी. +- Luma आणि Meetup.com — तुमच्या परिसरात Ethereum-संबंधित कार्यक्रम किंवा व्यापक web3 कार्यक्रम होत आहेत का हे पाहण्यासाठी. +- X — या क्षेत्रातील स्थानिक समर्थक किंवा प्रभावक शोधण्याचा प्रयत्न करा. + +जर तुम्हाला यापैकी बहुतेक घटक आढळले, तर हे एक मजबूत चिन्ह आहे की समुदाय तयार करण्यासाठी परिस्थिती अस्तित्वात आहे — परंतु याचा अर्थ असा नाही की समुदाय आधीच स्थापित आहे. पुढील पायरी म्हणजे या घटकांना संघटित करणे, गुंतवणे आणि त्यांचे संगोपन करणे, सहकार्यासाठी आणि दीर्घकालीन वाढीसाठी संधी निर्माण करणे. + +### जर नसेल, तर तो कसा तयार करायचा {#if-not-how-to-build-it} + +जर तुमच्या लक्षात आले की यापैकी अनेक घटक गहाळ आहेत, तर काळजी करू नका — अगदी सुरुवातीपासून समुदाय तयार करणे ही एक आव्हानात्मक पण अत्यंत समाधानकारक प्रक्रिया आहे. एक मजबूत Ethereum समुदाय रातोरात तयार होत नाही; त्यासाठी संयम, सातत्य आणि एक स्पष्ट दृष्टीकोन आवश्यक आहे. तुम्ही खालीलप्रमाणे सुरुवात करू शकता: + +- **एक संवाद माध्यम सेट करा** — हे Telegram, Signal, WhatsApp, WeChat किंवा Discord सर्व्हर असू शकते, तुमच्या ठिकाणी जे अधिक लोकप्रिय असेल ते, जेणेकरून लोक एकमेकांशी संपर्क साधू शकतील, प्रश्न विचारू शकतील आणि संसाधने शेअर करू शकतील. +- **तुमचे सुरुवातीचे समर्थक शोधा.** Ethereum आणि Web3 बद्दल उत्साही असलेल्या काही लोकांना ओळखा. ते तुमचे मुख्य समर्थक आणि सहकारी बनतील. +- **छोटे, सातत्यपूर्ण कार्यक्रम आयोजित करा.** अनौपचारिक भेटीगाठी, अभ्यास गट किंवा कार्यशाळांनी सुरुवात करा. सातत्य महत्त्वाचे आहे — जरी सुरुवातीला गट लहान असला तरी, नियमित कार्यक्रमांमुळे विश्वास आणि गती निर्माण होते. +- **स्थानिक कंपन्या**, शैक्षणिक संस्था किंवा सह-कार्यस्थळांशी संपर्क साधण्याचा प्रयत्न करा, जे तुम्हाला विनामूल्य जागा उपलब्ध करून देऊ शकतील. जर तुम्हाला तुमच्या देशातून वक्ते सापडले नाहीत, तर ऑनलाइन वक्त्यांना आमंत्रित करा, पण लोकांना प्रत्यक्ष एकत्र आणा. तुमच्या श्रोत्यांना एकाच ठिकाणी प्रत्यक्ष उपस्थित ठेवणे महत्त्वाचे आहे. +- **अस्तित्वात असलेल्या तंत्रज्ञान समुदायांसोबत सहयोग करा.** जर आधीच डेव्हलपर गट, स्टार्टअप इकोसिस्टम किंवा ब्लॉकचेन भेटीगाठी स्थापित असतील, तर त्यांच्यासोबत भागीदारी करून Ethereum विषय सादर करा आणि तुमची पोहोच वाढवा. +- Ethereum च्या संभाव्यतेबद्दल **शैक्षणिक सामग्री शेअर करा**. +- **जागतिक समुदायांशी संपर्क साधा.** जगभरातील स्थापित Ethereum गट आणि प्रकल्पांशी पाठिंबा, मार्गदर्शन आणि संभाव्य सहकार्यासाठी संपर्क साधा. जगभरातील Ethereum समुदायांमध्ये किमान एक गोष्ट समान आहे: ते सर्व मदत करण्यास उत्सुक आहेत. +- **निधी मिळवण्याचा प्रयत्न करा** — मग तो स्थानिक web3 कंपन्यांकडून असो किंवा [ESP](https://esp.ethereum.foundation/) सारख्या काही अनुदान कार्यक्रमांद्वारे असो. + +### जर होय, तर ते कसे टिकवायचे आणि वाढवायचे {#if-yes-how-to-maintain-and-grow-it} + +एकदा तुमचा समुदाय स्थापित झाला की, काम थांबत नाही — खरं तर, ते नुकतेच सुरू होते. समुदायाला सक्रिय, गुंतलेले आणि वाढते ठेवण्यासाठी सतत प्रयत्न आणि सर्जनशीलता आवश्यक आहे. समुदायाला गुंतवून ठेवण्यासाठी महत्त्वाच्या घटकांपैकी एक म्हणजे तुम्ही सतत नवीन स्वरूप आणि कल्पनांसह प्रयोग केले पाहिजेत. + +एका उत्साही Ethereum समुदायाला टिकवून ठेवण्यासाठी काही धोरणे येथे आहेत: + +- **तुमच्या कार्यक्रमाच्या स्वरूपात विविधता आणा:** फक्त एकाच प्रकारच्या मेळाव्याला चिकटून राहू नका. भेटीगाठी, छोटे हॅकॅथॉन, पॅनेल चर्चा आणि नेटवर्किंग कार्यक्रमांद्वारे कार्यक्रमांमध्ये विविधता आणा. तुम्ही सह-कार्य दिवस किंवा शैक्षणिक अभ्यासक्रम आयोजित करण्याचा प्रयत्न करू शकता. +- **विषयांमध्ये विविधता आणा:** Ethereum केवळ एक तंत्रज्ञान नाही; ते मूल्यांचा एक संच आहे ज्यात कायदेशीर, विपणन आणि व्यवसाय यांचा समावेश आहे. +- तुमच्या समुदायाकडून **प्रतिक्रिया आणि कल्पना विचारा**. +- **वेगवेगळ्या प्रेक्षक** विभागांशी संवाद साधा. वेगवेगळ्या अनुभव स्तरांनुसार सामग्री आणि कार्यक्रम तयार करा — पहिल्यांदा Ethereum चा शोध घेणाऱ्या नवशिक्यांपासून ते अनुभवी डेव्हलपर आणि उद्योजकांपर्यंत. + +शिकण्यासाठी, सहकार्यासाठी आणि वाढीसाठी विविध संधी उपलब्ध करून दिल्याने, तुम्ही हे सुनिश्चित करता की तुमचा समुदाय सक्रिय राहील आणि परिषद आयोजित करण्यासारख्या मोठ्या उपक्रमांसाठी तयार राहील. + +## कार्यक्रम {#event} + +### कार्यक्रम आयोजित करण्याची योग्य वेळ कोणती? {#when-is-the-right-time-to-organize-an-event} + +एक यशस्वी Ethereum परिषद किंवा सामुदायिक कार्यक्रम आयोजित करण्यासाठी काळजीपूर्वक वेळ आणि विचार करणे आवश्यक आहे. योग्य क्षण विविध घटकांवर अवलंबून असतो जे कार्यक्रमाच्या एकूण यशात योगदान देतात. + +तुम्ही समुदायाची परिपक्वता, बाजाराची स्थिती, तुमच्याकडे एक संघ आहे की नाही, आणि स्थानिक 'सीन' (उदा. संभाव्य प्रायोजक) आहे की नाही, याचा विचार केला पाहिजे. + +### KYC — तुमचा समुदाय ओळखा {#kyc-know-your-community} + +कार्यक्रम आयोजित करण्यामधील सर्वात महत्त्वाच्या पायऱ्यांपैकी एक म्हणजे तुमचा समुदाय समजून घेणे. वित्तीय सेवांमधील 'नो युअर कस्टमर' (KYC) प्रमाणेच, 'नो युअर कम्युनिटी' (KYC) म्हणजे तुमच्या स्थानिक प्रेक्षकांच्या विशिष्ट गरजा, प्राधान्ये आणि वैशिष्ट्ये समजून घेण्यासाठी वेळ काढणे. ही समज तुम्हाला परिषदेला अनुकूल बनवून तिचे यश आणि प्रासंगिकता सुनिश्चित करण्यास मदत करेल. + +लगेचच मोठ्या प्रमाणावर कार्यक्रम आयोजित करण्याचे ध्येय ठेवणे मोहक आहे, परंतु लहान सुरुवात करणे हा अनेकदा सर्वोत्तम दृष्टीकोन असतो. तुम्ही तुमच्या समुदायाच्या स्थितीकडे आणि तुम्हाला अप्रासंगिक वाटणाऱ्या काही इतर बाबींकडे वस्तुनिष्ठपणे पाहिल्यास तुमच्यासाठी सर्वोत्तम उपाय कोणता आहे हे तुम्हाला कळेल, जसे की: तुमचा देश एक लोकप्रिय पर्यटन स्थळ आहे का किंवा निवासस्थानाचा खर्च किती आहे. + +पहिल्या वर्षी, तुमच्या प्रेक्षकांचा सर्वात मोठा भाग स्थानिक समुदाय असेल, म्हणून मोठ्या कार्यक्रमाचे आयोजन करण्याच्या पहिल्या वर्षी तुम्ही जे काही कराल ते त्या समुदायाच्या गरजा आणि आकाराला अनुरूप असले पाहिजे. + +### कुठून सुरुवात करावी {#where-to-start} + +जेव्हा परिषद आयोजित करण्याची वेळ येते, तेव्हा पहिल्या पायऱ्या जबरदस्त वाटू शकतात. परंतु स्पष्ट योजना आणि संरचनेसह, तुम्ही प्रक्रिया व्यवस्थापकीय कार्यांमध्ये विभागू शकता. आम्ही त्या प्रत्येकाचे विश्लेषण करू. + +संरचित दृष्टीकोनाने सुरुवात केल्याने तुम्हाला तुमचा कार्यक्रम आयोजित करण्याच्या विविध टप्प्यांमधून जाताना संघटित राहण्यास आणि तणाव कमी करण्यास मदत होईल. तुम्ही घेतलेला प्रत्येक निर्णय तुम्हाला तुमच्या समुदायाच्या गरजा पूर्ण करणारा अनुभव देण्याच्या जवळ घेऊन गेला पाहिजे. + +**पहिली गोष्ट म्हणजे स्पष्ट भूमिका आणि जबाबदाऱ्यांसह एक संघटक संघ तयार करणे.** + +कार्यक्रम तयार करण्यास सुरुवात करण्यापूर्वी किंवा प्रायोजकांशी संपर्क साधण्यापूर्वी दुसरी महत्त्वाची पायरी म्हणजे तारीख निवडणे. जरी ही एक सोपी पायरी वाटत असली तरी, काही महत्त्वाचे घटक आहेत ज्यांचा तुम्ही आधी विचार केला पाहिजे. त्यापैकी काही आहेत: + +- **प्रमुख परिषदा** किंवा कार्यक्रमांशी संघर्ष करणाऱ्या तारखा टाळा +- **स्थानिक परिस्थिती आणि प्रसंग** (जसे की वर्षाचा ऋतू, प्रमुख सुट्ट्या, इ.) विचारात घ्या +- **बाजाराची स्थिती विचारात घ्या** +- **सर्व काही आयोजित करण्यासाठी स्वतःला पुरेसा वेळ द्या** — किमान नऊ महिने + +### संघ कसा तयार करावा {#how-to-assemble-a-team} + +असे लोक निवडा जे तुमची दृष्टी शेअर करतात आणि तुमच्या कौशल्यांना पूरक ठरतात. काही संघ सामूहिकरित्या काम करतात, तर इतरांच्या भूमिका निश्चित असतात — तुमच्यासाठी काय सर्वोत्तम काम करते ते शोधा. नियमित संवाद आणि स्पष्ट अपेक्षा आवश्यक आहेत. कार्यक्रमाच्या नियोजनासाठी संवाद प्लॅटफॉर्मवर अवलंबून राहणे मोहक असले तरी, आम्ही काय करायचे आहे याचे आयोजन आणि मागोवा घेण्यासाठी एक कार्य व्यवस्थापन प्लॅटफॉर्म (जसे की Notion, Basecamp, Trello, Asana, किंवा अगदी जुने चांगले Google Sheets) निवडण्याची शिफारस करतो. एक चांगला कार्यरत आणि सुसंघटित संघ असणे महत्त्वाचे आहे. + +वेगवेगळ्या Ethereum संघटक संघांमध्ये त्यांच्या संघात वेगवेगळ्या भूमिका असतात, परंतु त्या सर्वांमध्ये लॉजिस्टिक्स, बजेटिंग, मार्केटिंग, कार्यक्रम, डिझाइन आणि भागीदारीवर काम करणारे लोक समान असतात. + +### कार्यक्रम: यशस्वी कार्यक्रमाचा एक महत्त्वाचा घटक {#the-program-a-key-element-of-a-successful-event} + +जेव्हा खरोखरच मौल्यवान आणि अविस्मरणीय परिषद आयोजित करण्याची वेळ येते, तेव्हा **कार्यक्रमच सर्वकाही असतो**. हे असे क्षेत्र नाही जिथे तुम्ही तडजोड करू शकता. जरी प्रायोजक महत्त्वाचे असले आणि अनेकदा कार्यक्रमाच्या वित्तपुरवठ्यासाठी महत्त्वपूर्ण असले तरी, प्रेक्षकांचा अनुभव आणि त्यांना मिळणारे मूल्य यांना नेहमीच प्राधान्य दिले पाहिजे. प्रचारात्मक सामग्री आणि अंतहीन प्रायोजक पिचेसने भरलेला कार्यक्रम तुमच्या उपस्थितांना दुरावेल आणि तुमच्या कार्यक्रमाची विश्वासार्हता कमी करेल. + +प्रत्येक सत्र, पॅनेल आणि कार्यशाळेने समुदायाला माहिती द्यावी, प्रेरित करावे आणि गुंतवून ठेवावे. तुमच्या प्रेक्षकांचे ऐका — त्यांच्या आवडी, गरजा आणि आव्हाने समजून घ्या. कोणते विषय त्यांच्याशी जुळतात? त्याच वेळी, कार्यक्रम गतिमान ठेवण्यासाठी नवीन दृष्टीकोन आणि नाविन्यपूर्ण स्वरूप सादर करा. परिचित आणि प्रचलित विषयांना अत्याधुनिक कल्पनांसह संतुलित करा, ज्यामुळे Ethereum इकोसिस्टमच्या विविध पैलूंना समाविष्ट करणारी एक सर्वसमावेशक अजेंडा सुनिश्चित होईल — तांत्रिक सखोल माहिती आणि समुदाय-निर्माण सत्रांपासून ते धोरण चर्चा आणि प्रत्यक्ष कार्यशाळांपर्यंत. याव्यतिरिक्त, परिषदेच्या भाषेचा विचार करा — जरी बहुतेक Ethereum कार्यक्रमांमध्ये इंग्रजी ही डीफॉल्ट भाषा असली तरी, स्थानिक भाषेत सत्रे आयोजित केल्याने कार्यक्रम प्रादेशिक डेव्हलपर आणि उत्साहींसाठी अधिक सुलभ होऊ शकतो. + +**वक्ते निवडताना, उच्च-गुणवत्तेच्या सबमिशनला आकर्षित करण्यासाठी आणि अजेंडा क्युरेशनसाठी पुरेसा वेळ मिळवण्यासाठी परिषदेच्या किमान सहा महिने आधी कॉल उघडा.** वक्ता निवडीसाठी जबाबदार असलेल्या व्यक्तीला उद्योगात महत्त्वपूर्ण अनुभव आणि इकोसिस्टमची सखोल माहिती असावी. यामुळे ते मौल्यवान, अंतर्दृष्टीपूर्ण योगदान ओळखू शकतील आणि सामग्रीचा उच्च दर्जा राखू शकतील हे सुनिश्चित होते. + +### आर्थिक सहाय्य कोठे मिळवावे {#where-to-find-financial-support} + +उच्च-गुणवत्तेची परिषद आयोजित करण्यासाठी महत्त्वपूर्ण खर्च येतो — स्थळ भाडे, प्रचारात्मक साहित्य, अन्न आणि पेये, उत्पादन आणि इतर असंख्य खर्च. तुमचा कार्यक्रम व्यावसायिक मानकांची पूर्तता करतो आणि तुमच्या उपस्थितांसाठी एक उत्तम अनुभव देतो हे सुनिश्चित करण्यासाठी सुरुवातीलाच आर्थिक सहाय्य मिळवणे आवश्यक आहे. + +#### प्रायोजकत्व डेक कसा तयार करावा? {#how-to-create-a-sponsorship-deck} + +प्रथम, तुम्हाला एका डेकची आवश्यकता असेल. **इतर परिषद आयोजकांकडून सल्ला घ्या**, अगदी त्यांचे डेक शेअर करण्यास सांगा जेणेकरून तुम्ही त्यावर आधारित तुमची पॅकेजेस तयार करू शकाल. पॅकेजेसची किंमत ठरवताना तुम्ही वास्तववादी असले पाहिजे आणि खर्च भागवण्याचे ध्येय ठेवले पाहिजे, पैसे कमावण्याचे नाही, विशेषतः सुरुवातीला. + +**प्रत्येक प्रायोजकत्व डेकने कार्यक्रमाचे स्पष्ट आणि आकर्षक विहंगावलोकन प्रदान केले पाहिजे**, ज्यामुळे संभाव्य प्रायोजकांना त्याची व्याप्ती, लक्ष आणि मूल्य समजेल याची खात्री होईल. विश्वासार्हता स्थापित करण्यासाठी मूलभूत गोष्टींपासून सुरुवात करा — स्थळ, तारीख आणि संघटक संघाबद्दल तपशील. त्यानंतर, कार्यक्रमाचे प्राथमिक लक्ष हायलाइट करा, कारण वेगवेगळ्या Ethereum परिषदा वेगवेगळ्या प्रेक्षकांसाठी असतात. काही बिल्डर-केंद्रित असतात, ज्यात सखोल तांत्रिक चर्चा असतात, तर काही DeFi, DAOs किंवा धोरण विषयांवर अधिक लक्ष केंद्रित करू शकतात. + +केवळ कार्यक्रमाचे वर्णन करण्यापलीकडे, स्पष्ट अपेक्षा सेट करा. **अपेक्षित उपस्थितांची संख्या आणि आधीच निश्चित झालेल्या कोणत्याही प्रमुख वक्त्यांची रूपरेषा तयार करा**, कारण यामुळे प्रायोजकांना त्यांची संभाव्य पोहोच मोजण्यास मदत होते. सर्वात महत्त्वाचे म्हणजे, त्यांच्या प्रायोजकत्वाच्या बदल्यात त्यांना काय मिळेल हे स्पष्टपणे परिभाषित करा — बूथची जागा, बोलण्याची संधी, सोशल मीडिया प्रमोशन, ब्रँडिंगची दृश्यमानता किंवा विशेष नेटवर्किंग प्रवेश. एक सुसंरचित डेक केवळ माहितीच देत नाही तर संभाव्य प्रायोजकांना तुमच्या कार्यक्रमाचा भाग होण्याची संधीबद्दल उत्साहित करतो. + +#### तुमच्या कार्यक्रमाला कोण पाठिंबा देऊ शकेल? {#who-might-support-your-event} + +तुमच्या शहरातील किंवा देशातील Ethereum आणि व्यापक तंत्रज्ञान इकोसिस्टममधील कंपन्यांशी संपर्क साधून सुरुवात करा. या **संस्थांना अनेकदा स्थानिक कार्यक्रमांना पाठिंबा देण्यात स्वारस्य असते** जे समुदाय वाढ आणि नाविन्याला चालना देतात. ते स्थानिक इकोसिस्टममध्ये गुंतवणूक करण्याचे मूल्य ओळखण्याची आणि तुमची परिषद प्रतिभा, भागीदार आणि वापरकर्त्यांशी जोडण्याची संधी म्हणून पाहण्याची अधिक शक्यता असते. + +एकदा तुम्ही स्थानिक समर्थनाचा लाभ घेतला की, तुमची पोहोच web3 क्षेत्रातील जागतिक खेळाडूंपर्यंत वाढवा. **स्थापित प्रोटोकॉल, DAOs आणि इकोसिस्टम फंड अनेकदा समुदाय-चालित कार्यक्रमांसाठी बजेट वाटप करतात**. पहिल्यांदाच आयोजन करणाऱ्यांसाठी हे थोडे आव्हानात्मक असू शकते, कारण त्यांनी अद्याप दाखवण्यासाठी ट्रॅक रेकॉर्ड तयार केलेला नसतो, परंतु एक आकर्षक प्रायोजकत्व पॅकेज तयार करण्याचा प्रयत्न करा जे तुमच्या कार्यक्रमाला समर्थन देण्याचे फायदे स्पष्टपणे दर्शवते — ब्रँडची दृश्यमानता, बोलण्याची संधी आणि लक्ष्यित प्रेक्षकांसोबत अर्थपूर्ण संवाद. तुमचे अद्वितीय मूल्य शोधण्याचा प्रयत्न करा जे इतरांकडे नसेल. + +#### तुमच्या कार्यक्रमासाठी निधीचे पर्यायी स्वरूप {#alternative-forms-of-funding-your-event} + +अनुदान हे निधीचे आणखी एक संभाव्य स्त्रोत आहे ज्याकडे अनेक आयोजक दुर्लक्ष करतात. Ethereum फाउंडेशनचे [इकोसिस्टम सपोर्ट प्रोग्राम](https://esp.ethereum.foundation/) (ESP) आणि [इतर अनुदान उपक्रम](https://ethereum.org/community/grants/#ethereum-grants) यांसारखे कार्यक्रम समुदाय-चालित कार्यक्रमांना समर्थन देण्यासाठी अस्तित्वात आहेत. + +आर्थिक प्रायोजकत्वापलीकडे, वस्तू-स्वरूपातील भागीदारीचा विचार करा, विशेषतः अन्न आणि पेयांसाठी. स्थानिक संस्कृती किंवा तंत्रज्ञान समुदायाशी जुळणारे ब्रँड तुमच्या कार्यक्रमासाठी उत्तम भागीदार असू शकतात. कॉफी ब्रँड, पेय कंपन्या किंवा अगदी स्थानिक पिझ्झारिया देखील कार्यक्रमात प्रसिद्धीच्या बदल्यात उत्पादने देण्यास तयार असू शकतात. हे सहकार्य खर्च कमी करण्यास मदत करू शकतात आणि त्याच वेळी उपस्थितांचा अनुभव वाढवू शकतात. + +आम्ही वित्ताबद्दल बोलत असल्यामुळे, हे लक्षात ठेवा: एक अपवादात्मक उपस्थितीचा अनुभव तयार करण्यासाठी तुम्ही गुंतवलेला प्रत्येक डॉलर तुम्हाला प्रचंड परतावा देईल. उच्च-गुणवत्तेचे उत्पादन, आरामदायक स्थळे, विचारपूर्वक दिलेली भेटवस्तू (swag), आणि सुसंघटित बाजूचे कार्यक्रम एका अविस्मरणीय अनुभवात योगदान देतात ज्याबद्दल सहभागी परिषद संपल्यानंतरही बराच काळ बोलतील. आनंदी उपस्थित तुमचे सर्वात मोठे समर्थक बनतात आणि तुमच्या कार्यक्रमाच्या दीर्घकालीन यशाची खात्री करतात. + +### लॉजिस्टिक्स {#logistics} + +निधी मिळवण्यासोबतच, तुमचे मुख्य लक्ष लॉजिस्टिक्सवर असले पाहिजे. एक सुसंघटित परिषदेसाठी स्थळाच्या सेटअपपासून ते उपस्थितांच्या अनुभवापर्यंत अनेक क्षेत्रांमध्ये सूक्ष्म नियोजन आवश्यक असते. कार्यक्रम आयोजनात ठोस अनुभव असलेली व्यक्ती असणे — केवळ web3 कार्यक्रमच नव्हे, तर सर्वसाधारणपणे कार्यक्रम — खूप मोठा फरक घडवू शकते. एक अनुभवी लॉजिस्टिक्स प्रमुख संभाव्य समस्यांचा अंदाज घेऊ शकतो आणि त्या समस्या बनण्यापूर्वीच सोडवू शकतो, ज्यामुळे वेळ, पैसा आणि तणाव वाचतो. + +लॉजिस्टिक्ससाठी जबाबदार असलेल्या व्यक्तीने एक स्थळ, उत्पादन कंपनी आणि अन्न, पेये आणि मर्चसाठी वेगवेगळे विक्रेते निवडले पाहिजेत, तसेच एक वापरण्यास-सोपी ऑनलाइन तिकीट प्रणाली जी उपस्थितांना नोंदणी करण्यास आणि क्रिप्टोमध्ये पैसे देण्यास देखील परवानगी देते. + +### स्थान पायाभूत सुविधा {#location-infrastructure} + +तुमच्या परिषदेसाठी स्थान निवडताना, केवळ स्थळाच्या पलीकडे जाऊन शहराच्या आणि देशाच्या व्यापक पायाभूत सुविधांचा विचार करणे महत्त्वाचे आहे. हवामान, गतिशीलता, सुरक्षितता आणि राजकीय वातावरण यांसारखे घटक उपस्थितांचा अनुभव घडवण्यात मोठी भूमिका बजावतात. + +कमी ज्ञात असलेल्या स्थानांसाठी, हे विशेषतः महत्त्वाचे ठरते. जगभरातील उपस्थित आणि प्रायोजकांना आत्मविश्वास वाटला पाहिजे की ते सहज आणि सुरक्षितपणे प्रवास करू शकतात. विमानतळ कनेक्टिव्हिटी, सार्वजनिक वाहतूक आणि निवासाचे पर्याय यांसारख्या बाबींचा विचार करा. आंतरराष्ट्रीय सहभागींना परावृत्त करू शकणाऱ्या कोणत्याही गुंतागुंती टाळण्यासाठी, जसे की व्हिसा धोरण, प्रदेशातील सांस्कृतिक आणि राजकीय वातावरणाचा विचार करणे देखील शहाणपणाचे आहे. + +### कार्यक्रमाचा प्रचार कसा करावा {#how-to-promote-the-event} + +तुमच्या कार्यक्रमाचा प्रभावीपणे प्रचार करणे हे योग्य प्रेक्षकांना आकर्षित करण्यासाठी आणि उत्साह निर्माण करण्यासाठी महत्त्वाचे आहे. एक विचारपूर्वक तयार केलेली प्रचार रणनीती तुमच्या परिषदेला ती पात्र असलेली दृश्यमानता आणि सहभाग मिळवते हे सुनिश्चित करते. डिझाइन तुमच्या ब्रँडमध्येही महत्त्वाची भूमिका बजावते, त्यामुळे तुम्ही त्यासाठी निश्चितपणे बजेट ठेवले पाहिजे. + +#### सोशल मीडिया {#social-media} + +X.com तुमच्या सोशल मीडिया प्रचाराचा कणा असेल. तिथे पोस्ट करण्यामध्ये सक्रिय आणि सातत्यपूर्ण राहण्याचा प्रयत्न करा, पण तुमच्या वैयक्तिक खात्यातून आणि तुमच्या संस्थेच्या खात्यातून वेगवेगळ्या संभाषणांमध्येही सहभागी व्हा. + +जरी LinkedIn प्रचारासाठी सर्वात स्पष्ट पर्याय वाटत नसला तरी, तुम्ही तिथे पूर्णपणे वेगळ्या प्रेक्षकांपर्यंत पोहोचू शकता, किंवा अगदी काही प्रायोजकांपर्यंतही. + +#### इतर Ethereum समुदायांसोबत भागीदारी {#partnerships-with-other-ethereum-communities} + +वेगवेगळ्या Ethereum आयोजकांसोबत भागीदारी केल्याने विद्यमान नेटवर्कचा वापर करून तुमची पोहोच वाढविण्यात मदत होऊ शकते, विशेषतः जेव्हा तुम्ही सुरुवातीपासून सुरुवात करत असाल. समुदायाला सवलती द्या, इतर कार्यक्रमांसोबत क्रॉस-प्रमोट करा आणि भागीदारांना बाजूचे कार्यक्रम किंवा कार्यशाळा सह-आयोजित करण्यासाठी आमंत्रित करा. + +#### विद्यापीठ संपर्क {#university-outreach} + +कार्यक्रमाचा प्रचार करण्यासाठी शहरातील तांत्रिक आणि अर्थशास्त्र विद्याशाखांशी विद्यार्थी क्लब किंवा प्राध्यापकांमार्फत संपर्क साधा. विद्यापीठांशी संवाद साधल्याने तरुण प्रतिभा, संशोधक आणि भविष्यातील उद्योग व्यावसायिक आकर्षित होण्यास मदत होऊ शकते, ज्यामुळे शिक्षण आणि Ethereum इकोसिस्टम यांच्यात एक मजबूत संबंध निर्माण होतो. जर तुम्ही हॅकॅथॉन आयोजित करत असाल तर हे विशेषतः उत्तम आहे, कारण विद्यार्थी अनेकदा नवीन कल्पना, उत्साह आणि एक मजबूत तांत्रिक पाया घेऊन येतात. + +#### मीडिया {#media} + +कार्यक्रमाच्या कव्हरेजसाठी web3-केंद्रित मीडिया आउटलेट्स आणि वृत्तपत्रांशी संपर्क साधा. जरी Web3 मीडियाला त्यांच्या PR लेखांसाठी पैसे दिले जाण्याची अपेक्षा असली तरी, तुमच्याकडे सशुल्क प्रचारासाठी बजेट नसल्यास तुम्ही त्यांना मोफत तिकिटे किंवा काही उच्च-प्रोफाइल वक्ते आणि प्रायोजकांसोबत मुलाखती देऊ शकता. सोशल मीडिया किंवा वेबसाइटवर वेगवेगळ्या फॉरमॅटमध्ये प्रमोशनसाठी तयार असलेल्या प्रेस रिलीज आणि काही व्हिज्युअलसह एक PR पॅकेज तयार करा. तसेच, स्थानिक पत्रकार किंवा अगदी सामग्री निर्मात्यांपर्यंत (जोपर्यंत त्यांची चांगली प्रतिष्ठा आहे) व्याप्ती वाढवा जे तंत्रज्ञान कव्हर करू शकतात, कारण ते मोठ्या प्रेक्षकांपर्यंत कार्यक्रम पोहोचवण्यासाठी महत्त्वाचे ठरू शकते. हे क्रिप्टो उद्योग आणि व्यापक लोकांमध्ये असलेली दरी कमी करण्यास मदत करते, ज्यामुळे मुख्य प्रवाहातील तंत्रज्ञान आणि व्यावसायिक समुदायांकडून स्वारस्य आकर्षित होते. + +### तुम्ही हॅकॅथॉनचे आयोजनही करावे का? {#should-you-organize-a-hackathon-as-well} + +हॅकॅथॉन आयोजित करणे फायदेशीर ठरू शकते कारण हॅकॅथॉन डेव्हलपर समुदायाला गुंतवून ठेवण्याचा आणि नवनिर्मितीला चालना देण्याचा एक उत्तम मार्ग असू शकतो. हे प्रकल्प तयार करण्यासाठी आणि सहकार्य करण्यासाठी प्रत्यक्ष संधी देखील प्रदान करते, ज्यामुळे इकोसिस्टमसाठी ठोस परिणाम मिळू शकतात. हॅकॅथॉन अशा डेव्हलपर्सना आकर्षित करतात जे सहसा परिषदांना उपस्थित राहत नाहीत परंतु नवीन कल्पना तयार करणे आणि तपासणे या आव्हानासाठी उत्सुक असतात. जर तुमची परिषद डेव्हलपर्स, नवनिर्मिती आणि प्रत्यक्ष प्रकल्पांसाठी असेल, तर हॅकॅथॉन आयोजित करणे एक नैसर्गिक निवड आहे. + +परंतु, एक आयोजित करण्यापूर्वी, तुमच्याकडे पुरेशी संसाधने आणि वेळ आहे का याचा विचार करा. **हॅकॅथॉनसाठी वेळ, मनुष्यबळ आणि आर्थिक गुंतवणुकीच्या दृष्टीने महत्त्वपूर्ण संसाधने आवश्यक असतात**. तुमच्याकडे ते हाताळण्यासाठी एक समर्पित संघ असल्याची खात्री करा, विशेषतः जर तुम्ही एकाच वेळी परिषद देखील व्यवस्थापित करत असाल. तसेच, तुमच्या समुदायामध्ये रस आहे का ते तपासा. जर तुमचा समुदाय अधिक बिल्डर-केंद्रित असेल, तर कदाचित ते आयोजित करणे अर्थपूर्ण आहे. + +जरी ते आयोजित करण्याचे बरेच फायदे असले तरी, हे लक्षात घ्या की, परिषदेच्या प्रमाणावर अवलंबून, हॅकॅथॉन जोडणे जबरदस्त असू शकते. दोन्ही व्यवस्थापित केल्याने त्यापैकी कोणत्याही एकाची गुणवत्ता कमी होईल का याचे तुम्ही मूल्यांकन केले पाहिजे. तुम्ही एक लहान, केंद्रित हॅकॅथॉन निवडू शकता किंवा कार्यक्रम वेगवेगळ्या महिन्यांमध्ये विभागू शकता. + +### (जवळजवळ अपरिहार्य) आव्हाने ज्यांचा तुम्हाला सामना करावा लागेल {#almost-inevitable-challenges-that-you-will-face} + +परिषद आयोजित करताना, विशेषतः Ethereum क्षेत्रात, सर्वात मोठ्या आव्हानांपैकी एक म्हणजे पुरेसा निधी मिळवणे. **अनेक कार्यक्रम आयोजक स्थळाचा खर्च**, केटरिंग आणि इतर लॉजिस्टिकल खर्च भागवण्यासाठी आवश्यक भांडवल उभारण्यासाठी संघर्ष करतात. प्रायोजकत्व अनेकदा आवश्यक असते, परंतु संबंध निर्माण करणे आणि कंपन्यांना तुमच्या कार्यक्रमात गुंतवणूक करण्यास पटवणे यासाठी वेळ लागू शकतो. शिवाय, बाजारातील मंदीच्या काळात प्रायोजकांना आकर्षित करण्याची अडचण वाढू शकते, कारण कंपन्या गैर-मुख्य क्रियाकलापांमध्ये गुंतवणूक करण्यास कमी इच्छुक असू शकतात. + +बजेटचे प्रभावीपणे व्यवस्थापन करणे महत्त्वाचे आहे. **अनपेक्षित खर्च**, जसे की शेवटच्या क्षणी स्थळातील बदल आणि अतिरिक्त इव्हेंट टेक आवश्यकता, तुमचे बजेट लवकर उडवू शकतात. + +नवीन कार्यक्रमांसाठी, **उच्च-गुणवत्तेचे वक्ते मिळवणे विशेषतः कठीण असू शकते**. Ethereum क्षेत्रातील स्थापित विचारवंत किंवा प्रभावकांकडे आधीच पूर्ण वेळापत्रक असू शकते आणि सिद्ध ट्रॅक रेकॉर्डशिवाय नवीन कार्यक्रमासाठी वचनबद्ध होण्यास ते संकोच करू शकतात. कार्यक्रमाच्या खूप आधी नेटवर्किंग करण्यासाठी आणि संभाव्य वक्त्यांपर्यंत पोहोचण्यासाठी वेळ घालवण्यास तयार रहा. + +तसेच, जेव्हा वक्त्यांचा प्रश्न येतो, तेव्हा त्यांच्याशी स्पष्ट आणि सतत संवाद साधा — सादरीकरणे पाठवण्यासाठी अंतिम मुदत निश्चित करा आणि शेवटच्या क्षणी होणारे कोणतेही बदल टाळा. + +एक यशस्वी परिषदेसाठी एक समर्पित संघ आवश्यक आहे जो लॉजिस्टिक्स, मार्केटिंग, प्रायोजकत्व, तांत्रिक सहाय्य आणि उपस्थित व्यवस्थापन हाताळू शकेल. तंत्रज्ञान कार्यक्रम आयोजित करण्याचा अनुभव असलेल्या व्यक्तींना शोधणे आव्हानात्मक असू शकते, विशेषतः जर तुम्ही लहान बजेटवर काम करत असाल किंवा, बहुतेक प्रकरणांमध्ये, कोणत्याही बजेटशिवाय, परंतु स्वयंसेवक तत्त्वावर. + +### तुम्ही हे एकटे करू नये. तुम्हाला स्वयंसेवकांची गरज आहे. {#you-shouldnt-do-it-alone-you-need-volunteers} + +Ethereum कार्यक्रम आयोजित करण्यासाठी लॉजिस्टिक्स, नोंदणी, वक्ता समन्वय, उपस्थित समर्थन आणि बरेच काही हाताळण्यासाठी एक वैविध्यपूर्ण आणि समर्पित संघ आवश्यक आहे. फक्त 3 ते 15 लोकांच्या संघाच्या आकारात, हे स्पष्ट होते की कार्यक्रमाच्या सुरळीत चालण्यासाठी स्वयंसेवक आवश्यक आहेत. + +स्वयंसेवक अनेकदा अनेक परिषदांचा कणा असतात, ते महत्त्वपूर्ण समर्थन प्रदान करतात, विशेषतः जेव्हा तुम्ही मर्यादित बजेटवर काम करत असाल. ते नोंदणी डेस्क सांभाळण्यापासून ते कार्यक्रमाच्या सेटअपमध्ये मदत करण्यापर्यंत सर्व काही हाताळू शकतात, ज्यामुळे कार्यक्रम शक्य तितका सुरळीतपणे चालतो. + +स्वयंसेवकांना आर्थिक मोबदला देणे आव्हानात्मक असले तरी, त्यांना असे काहीतरी मौल्यवान प्रदान करणे आवश्यक आहे ज्यामुळे त्यांचा अनुभव सार्थक होईल. त्यांना नेटवर्किंग संधी, कौशल्य विकास, काही विशेष फायदे, प्रमाणपत्रे किंवा शिफारसपत्रे देण्याचा विचार करा. + +### कार्यक्रम आयोजकांसाठी अनुपालन आवश्यक गोष्टी {#compliance-essentials-for-event-organizers} + +कार्यक्रम आयोजित करताना, लक्षात ठेवण्यासाठी अनेक आवश्यक कायदेशीर आणि लॉजिस्टिकल बाबी आहेत: + +- **प्रायोजकत्व करार** – प्रायोजकांसाठी तुमच्याकडे एक स्पष्ट करार असल्याची खात्री करा, ज्यात एक सु-परिभाषित रद्द करण्याची धोरण समाविष्ट आहे. +- **आचारसंहिता** – विशिष्ट कार्यक्रमाच्या प्रकारानुसार (परिषद/हॅकॅथॉन, हॅकर हाऊसेस इत्यादी) तयार केलेली आचारसंहिता तयार करा. +- **गोपनीयता धोरण** – डेटा संरक्षण नियम आणि प्रतिमेचे पालन करण्यासाठी तुमच्या वेबसाइटसाठी गोपनीयता धोरणाचा मसुदा तयार करा +- **स्थानिक अधिकाऱ्यांना सूचना** – जरी तुमचा कार्यक्रम एक बंद मेळावा असला तरी, स्थानिक पोलीस स्टेशनला त्याची तक्रार करणे उचित आहे. +- **तिकिटिंग करार** – अटी आणि जबाबदाऱ्या स्पष्ट करण्यासाठी तुमच्या तिकीट सेवा प्रदात्यासोबत एक औपचारिक करार स्थापित करा. +- **नियामक अनुपालन** – तुम्ही ज्या देशात परिषद आयोजित करत आहात त्या देशात क्रिप्टो उद्योगासाठी विशिष्ट नियम किंवा निर्बंध आहेत का हे आधीच तपासा +- **व्यापारी मालासाठी सीमाशुल्क मंजुरी** – जर तुम्ही प्रायोजक व्यापारी माल आयात करत असाल, तर प्रक्रिया कार्यक्षमतेने हाताळण्यासाठी सीमाशुल्क एजंटला नियुक्त करण्याची शिफारस केली जाते. +- **फोटोग्राफी आणि मीडिया धोरण** – फोटोग्राफी आणि मीडिया कव्हरेजवरील मार्गदर्शक तत्त्वे स्पष्टपणे परिभाषित करा, सहभागींना संमती आणि निवड रद्द करण्याच्या पर्यायांबद्दल माहिती दिली जाईल याची खात्री करा. + +## कार्यक्रमानंतर: पुढे काय? {#after-the-event-whats-next} + +कार्यक्रम संपल्यानंतर, उपस्थित, वक्ते आणि प्रायोजकांकडून अभिप्राय गोळा करणे आणि एक अंतर्गत अहवाल तयार करणे महत्त्वाचे आहे जेणेकरून तुम्ही भविष्यातील कार्यक्रमांसाठी अधिक चांगले तयार असाल. यामुळे काय चांगले झाले आणि कुठे सुधारणा केली जाऊ शकते हे ओळखण्यास मदत होते. भविष्यातील पुनरावृत्तींना मार्गदर्शन करतील अशा मौल्यवान अंतर्दृष्टी गोळा करण्यासाठी सर्वेक्षण किंवा एक-एक मुलाखती वापरा. कोणत्याही चुका किंवा अकार्यक्षमतेच्या क्षेत्रांचे पुनरावलोकन करण्यासाठी वेळ काढा, कारण त्या पुढील परिषदेत टाळता येतात, ज्यामुळे प्रक्रिया अधिक सुरळीत होते. + +गती जिवंत ठेवणे महत्त्वाचे आहे. तुमच्या समुदायाशी संवाद साधत रहा, त्यांच्या अभिप्रायावर आधारित तुम्ही करत असलेल्या प्रगतीबद्दल अपडेट्स शेअर करा आणि पुढील कार्यक्रमासाठी उत्साह निर्माण करा. हा संबंध टिकवून ठेवल्याने, तुम्ही परिषदेचा प्रभाव कार्यक्रमाच्या पलीकडे पोहोचेल याची खात्री करता, संबंध मजबूत करता आणि भविष्यातील यशासाठी मंच तयार करता. + +## स्वीकृती {#acknowledgement} + +या लेखात आपली अंतर्दृष्टी शेअर करून योगदान देणाऱ्या सर्वांचे खूप खूप आभार: ETHBratislava चे Slavo Fabisik; ETH Kipu आणि ETH Latam च्या Lola; ETH Belgrade च्या Tanja Mladenovic, Ethereum Bogota चे Juan David; ETHWarsaw च्या Monika Zając; NapulETH चे Raffaele Orefice; ETH Riyadh चे Xiao Wu(Ling); urbe.eth चे Marco; ETH Dublin चे Caolán Walsh; ETHCluj चे Alex Males; आणि ETH Slovenia चे Stanko Devic. + +## संसाधने {#resources} + +पॉडकास्ट: A-Z पर्यंत ETH कार्यक्रमाचे आयोजन आणि प्रचार कसा करावा: + +- [ETHWarsaw केस स्टडी, Out of Ordinary द्वारे](https://www.youtube.com/watch?v=io2Dx1ouz8o) + +ट्विटर स्पेस: + +- [ETH समुदाय AMA](https://x.com/NapulETH/status/1905732699094151623) + +लेख: + +- [Building ETHKL, डॅनी एच. द्वारे](https://sekto.tech/ethkl24) +- [POKT इव्हेंट्स प्लेबुक](https://docs.pokt.network/community/pokt-events-playbook) diff --git a/public/content/translations/mr/community/get-involved/index.md b/public/content/translations/mr/community/get-involved/index.md new file mode 100644 index 00000000000..e92eade692d --- /dev/null +++ b/public/content/translations/mr/community/get-involved/index.md @@ -0,0 +1,132 @@ +--- +title: "मी कसे सहभागी होऊ शकतो?" +description: "इथेरियम समुदायात कसे सामील व्हावे." +lang: mr +--- + +# मी कसे सहभागी होऊ शकतो? सहभागी व्हा {#get-involved} + +इथेरियम समुदायात विविध पार्श्वभूमी आणि कौशल्य असलेल्या लोकांचा समावेश आहे. तुम्ही डेव्हलपर, कलाकार किंवा अकाऊंटंट असाल तरी, सहभागी होण्याचे अनेक मार्ग आहेत. येथे काही सूचनांची सूची दिली आहे जी तुम्हाला सुरुवात करण्यास मदत करू शकेल. + +आमच्या [आचारसंहितेमध्ये](/community/code-of-conduct) ethereum.org चे ध्येय आणि मूल्यांबद्दल वाचून सुरुवात करा. + +## डेव्हलपर ‍ {#developers} + +- [ethereum.org/developers/](/developers/) येथे इथेरियमबद्दल जाणून घ्या आणि प्रयत्न करा +- तुमच्या जवळच्या [ETHGlobal](http://ethglobal.co/) हॅकेथॉनमध्ये सहभागी व्हा! +- [तुमच्या कौशल्य क्षेत्राशी किंवा आवडीच्या प्रोग्रामिंग भाषेशी संबंधित प्रकल्प पहा](/developers/docs/programming-languages/) +- [कन्सेन्सस आणि एक्झिक्युशन लेयर कॉल्स](https://www.youtube.com/@EthereumProtocol/streams) पहा किंवा त्यात सहभागी व्हा +- [इकोसिस्टम सपोर्ट प्रोग्रामची विशलिस्ट](https://esp.ethereum.foundation/wishlist/) - टूलिंग, डॉक्युमेंटेशन आणि इन्फ्रास्ट्रक्चरची क्षेत्रे जिथे इथेरियम इकोसिस्टम सपोर्ट प्रोग्राम अनुदानाच्या अर्जांसाठी सक्रियपणे शोध घेत आहे +- [Web3Bridge](https://www.web3bridgeafrica.com) - आफ्रिकेतील शेकडो डेव्हलपर आणि समुदाय सदस्यांना ओळखण्यासाठी, प्रशिक्षित करण्यासाठी आणि समर्थन देण्यासाठी त्यांच्या उपक्रमात महत्त्वाकांक्षी वेब3 समुदायात सामील व्हा +- [Eth R&D Discord](https://discord.com/invite/VmG7Uxc) मध्ये सामील व्हा +- [इथेरियम कॅट हर्डर्स डिस्कॉर्ड](https://discord.com/invite/Nz6rtfJ8Cu) मध्ये सामील व्हा + +## संशोधक आणि शिक्षणतज्ज्ञ ‍ {#researchers-and-academics} + +तुमची गणित, क्रिप्टोग्राफी किंवा अर्थशास्त्रामध्ये पार्श्वभूमी आहे का? इथेरियम इकोसिस्टममध्ये होत असलेल्या काही अत्याधुनिक कामांमध्ये तुम्हाला रस असू शकतो: + +- [Eth R&D Discord](https://discord.com/invite/VmG7Uxc) मध्ये सामील व्हा +- एक इथेरियम इम्प्रूव्हमेंट प्रपोजल लिहा किंवा त्याचे पुनरावलोकन करा + - एक EIP लिहा + 1. तुमची कल्पना [इथेरियम मॅजिशियन्स](https://ethereum-magicians.org) वर सबमिट करा + 2. [EIP-1](https://eips.ethereum.org/EIPS/eip-1) वाचा - **होय, हा _संपूर्ण_ दस्तऐवज आहे.** + 3. EIP-1 मधील निर्देशांचे पालन करा. तुम्ही तुमचा मसुदा लिहित असताना त्याचा संदर्भ घ्या. + - [EIP संपादक](https://eips.ethereum.org/EIPS/eip-5069) कसे बनायचे ते शिका + - तुम्ही आत्ताच EIPs चे पिअर-रिव्ह्यू करू शकता! [`e-review` टॅगसह खुले PR पहा](https://github.com/ethereum/EIPs/pulls?q=is%3Apr+is%3Aopen+label%3Ae-review). `discussion-to` लिंकवर तांत्रिक अभिप्राय द्या. + - [EIP गव्हर्नन्स](https://github.com/ethereum-cat-herders/EIPIP) मध्ये सहभागी व्हा + - [इथेरियम कॅट हर्डर्स डिस्कॉर्ड](https://discord.com/invite/Nz6rtfJ8Cu) मध्ये सामील व्हा + - [EIPs वर अधिक माहिती](/eips/) +- [Challenges.ethereum.org](https://challenges.ethereum.org/) - उच्च-मूल्याच्या संशोधन बाउंटींची एक मालिका, जिथे तुम्ही >$100,000 USD कमवू शकता +- [Ethresear.ch](https://ethresear.ch) - संशोधनासाठी इथेरियमचा प्राथमिक मंच, आणि क्रिप्टोइकॉनॉमिक्ससाठी जगातील सर्वात प्रभावी मंच +- [EF रिसर्च AMA](https://old.reddit.com/r/ethereum/comments/vrx9xe/ama_we_are_ef_research_pt_8_07_july_2022) - संशोधकांसोबत एक चालू असलेली प्रश्नोत्तर मालिका. प्रत्येक पुढचा भाग सुरू झाल्यावर, कोणीही प्रश्न पोस्ट करू शकतो. +- [इकोसिस्टम सपोर्ट प्रोग्रामची विशलिस्ट](https://esp.ethereum.foundation/wishlist/) - संशोधन क्षेत्रे जिथे इथेरियम इकोसिस्टम सपोर्ट प्रोग्राम अनुदानाच्या अर्जांसाठी सक्रियपणे शोध घेत आहे +- [AllWalletDevs](https://allwallet.dev) - इथेरियम डेव्हलपर, डिझाइनर आणि इच्छुक वापरकर्त्यांसाठी नियमितपणे एकत्र येऊन वॉलेट्सवर चर्चा करण्यासाठी एक मंच + +[संशोधनाची अधिक सक्रिय क्षेत्रे एक्सप्लोर करा](/community/research/). + +## गैर-तांत्रिक कौशल्ये ‍ {#non-technical} + +जर तुम्ही डेव्हलपर नसाल, तर इथेरियममध्ये कुठून सुरुवात करावी हे जाणून घेणे कठीण असू शकते. येथे काही सूचना आहेत, विशिष्ट व्यावसायिक पार्श्वभूमीसाठी संसाधनांसह. + +### तुमच्या शहरात एक मीटअप आयोजित करा {#meetups} + +- कशी सुरुवात करावी याची खात्री नाही? [BUIDL नेटवर्क](https://consensys.net/developers/buidlnetwork/) मदत करू शकते. + +### इथेरियमबद्दल मजकूर लिहा {#write-content} + +- इथेरियमला चांगल्या लेखकांची गरज आहे जे त्याचे मूल्य सोप्या भाषेत समजावून सांगू शकतील +- तुमचे स्वतःचे लेख प्रकाशित करण्यास तयार नाही? समुदाय संसाधनांवरील विद्यमान सामग्रीमध्ये योगदान देण्याचा विचार करा, किंवा [ethereum.org साठी नवीन सामग्री प्रस्तावित करा](/contributing/)! + +### समुदाय कॉल्ससाठी नोट्स घेण्याची ऑफर द्या {#take-notes} + +- अनेक ओपन-सोर्स समुदाय कॉल्स आहेत, आणि नोट्स घेणारे असणे ही एक मोठी मदत आहे. तुम्हाला स्वारस्य असल्यास, [इथेरियम कॅट हर्डर्स डिस्कॉर्ड](https://discord.com/invite/Nz6rtfJ8Cu) मध्ये सामील व्हा, आणि स्वतःची ओळख करून द्या! + +### इथेरियम सामग्रीचे तुमच्या मूळ भाषेत भाषांतर करा {#translate-ethereum} + +- ethereum.org एक भाषांतर कार्यक्रम चालवते जो वेबसाइट आणि इतर संसाधनांचे अनेक वेगवेगळ्या भाषांमध्ये भाषांतर करतो +- [येथे](/contributing/translation-program) कसे सामील व्हावे ते शोधा + +### एक नोड चालवा {#run-a-node} + +इथेरियमला अधिक विकेंद्रित करण्यात मदत करण्यासाठी हजारो नोड ऑपरेटर्समध्ये सामील व्हा. + +- [नोड कसा चालवायचा यावर अधिक माहिती](/developers/docs/nodes-and-clients/run-a-node/) + +### तुमचे ETH स्टेक करा {#staking} + +तुमचे ETH स्टेक करून तुम्ही रिवॉर्ड्स मिळवू शकता आणि त्याचवेळी इथेरियम नेटवर्क सुरक्षित करण्यास मदत करू शकता. + +- [स्टेकिंगवर अधिक माहिती](/staking/) + +### प्रकल्पांना समर्थन द्या {#support-projects} + +इथेरियम इकोसिस्टम सार्वजनिक वस्तू आणि प्रभावी प्रकल्पांना निधी देण्याच्या ध्येयावर आहे. अगदी लहान देणग्या देऊन तुम्ही तुमचे समर्थन दर्शवू शकता आणि महत्त्वपूर्ण काम साकार होण्यास मदत करू शकता. + +- [Gitcoin](https://gitcoin.co/fund) +- [clr.fund](https://clr.fund/#/about) + +## आर्थिक व्यावसायिक आणि अकाऊंटंट ‍ {#financial-professionals} + +- इथेरियम हे “विकेंद्रित वित्त” (Decentralized Finance) इकोसिस्टमचे घर आहे - प्रोटोकॉल आणि ऍप्लिकेशन्सचे एक नेटवर्क जे एक पर्यायी आर्थिक प्रणाली प्रदान करते. जर तुम्ही आर्थिक व्यावसायिक असाल, तर [DeFi Llama](https://defillama.com/) किंवा [DeFiPrime](https://defiprime.com) येथे काही DeFi ॲप्स पहा +- अकाऊंटंट? इथेरियमवरील मालमत्ता - ETH, टोकन, DeFi, इत्यादी - अनेक नवीन लेखांकन समस्या निर्माण करतात. तुम्ही काही प्रकल्प पाहून सुरुवात करू शकता ज्यांचा उद्देश क्रिप्टोकरन्सी वापरकर्त्यांना त्यांची बुककीपिंग आणि लेखांकन आव्हाने सोडविण्यात मदत करणे आहे, जसे की [Rotki](https://rotki.com/) + +## प्रोडक्ट मॅनेजर ‍ {#product-managers} + +- इथेरियम इकोसिस्टमला तुमच्या कौशल्याची गरज आहे! अनेक कंपन्या प्रोडक्ट मॅनेजरच्या भूमिकांसाठी भरती करत आहेत. तुम्हाला ओपन सोर्स प्रोजेक्टमध्ये योगदान देऊन सुरुवात करायची असेल, तर [इथेरियम कॅट हर्डर्स](https://discord.com/invite/Nz6rtfJ8Cu) किंवा [RaidGuild](https://www.raidguild.org/) शी संपर्क साधा + +## मार्केटिंग ‍ {#marketing} + +- इथेरियम इकोसिस्टममध्ये अनेक मार्केटिंग आणि कम्युनिकेशनची पदे आहेत! + +## इथेरियम नोकऱ्या {#ethereum-jobs} + +**इथेरियममध्ये काम करण्यासाठी नोकरी शोधू इच्छिता?** + +- [ethereum.org नोकऱ्या](/about/#open-jobs) +- [इथेरियम फाउंडेशन जॉब बोर्ड](https://jobs.ashbyhq.com/ethereum-foundation) +- [JobStash](https://jobstash.xyz) +- [इथेरियम जॉब बोर्ड](https://www.ethereumjobboard.com/) +- [क्रिप्टोकरन्सी नोकऱ्या](https://cryptocurrencyjobs.co/ethereum/) +- [ConsenSys मधील करिअर](https://consensys.net/careers/) +- [क्रिप्टो जॉब्स लिस्ट](https://cryptojobslist.com/ethereum-jobs) +- [बँकलेस जॉब्स बोर्ड](https://pallet.xyz/list/bankless/jobs) +- [वेब3 नोकऱ्या](https://web3.career) +- [वेब3 आर्मी](https://web3army.xyz/) +- [क्रिप्टो व्हॅली जॉब्स](https://cryptovalley.jobs/) +- [इथेरियम नोकऱ्या](https://startup.jobs/ethereum-jobs) + +## एका DAO मध्ये सामील व्हा {#decentralized-autonomous-organizations-daos} + +"DAOs" म्हणजे विकेंद्रित स्वायत्त संस्था. हे गट संघटना आणि सहकार्य सुलभ करण्यासाठी इथेरियम तंत्रज्ञानाचा फायदा घेतात. उदाहरणार्थ, सदस्यत्व नियंत्रित करण्यासाठी, प्रस्तावांवर मतदान करण्यासाठी, किंवा एकत्रित मालमत्ता व्यवस्थापित करण्यासाठी. जरी DAOs अजूनही प्रायोगिक असले तरी, ते तुम्हाला तुमच्या विचारांशी जुळणारे गट शोधण्याची, सहकारी शोधण्याची आणि इथेरियम समुदायावर तुमचा प्रभाव वाढवण्याची संधी देतात. [DAOs वर अधिक माहिती](/dao/) + +- [DAOSquare](https://daosquare.io/) [@DAOSquare](https://twitter.com/DAOSquare) - _गैर-तांत्रिक क्षेत्रात DAO संकल्पनेचा प्रचार करणे आणि लोकांना DAO द्वारे मूल्य निर्माण करण्यास मदत करणे_ +- [डेव्हलपर DAO](https://www.developerdao.com/) [@developer_dao](https://twitter.com/developer_dao) - _इंटरनेटच्या सामूहिक मालकीवर विश्वास ठेवणाऱ्या बिल्डर्सचा समुदाय_ +- [dOrg](https://dOrg.tech) [@dOrg_tech](https://twitter.com/dOrg_tech) - _DAO म्हणून काम करणारा फ्रीलान्सर वेब3 डेव्हलपमेंटचा समूह_ +- [HausDAO](https://daohaus.club) [@nowdaoit](https://twitter.com/nowdaoit) - _DAOhaus चे सामुदायिक शासन_ +- [LexDAO](https://lexdao.org) [@lex_DAO](https://twitter.com/lex_DAO) - _कायदेशीर अभियांत्रिकी_ +- [MetaCartel Ventures](https://metacartel.xyz) [@VENTURE_DAO](https://twitter.com/VENTURE_DAO) - _प्री-सीड क्रिप्टो प्रकल्पांसाठी व्हेंचर_ +- [MetaFactory](https://metafactory.ai) [@TheMetaFactory](https://twitter.com/TheMetaFactory) - _डिजिफिजिकल परिधान ब्रँड्स_ +- [MolochDAO](https://molochdao.com) [@MolochDAO](https://twitter.com/MolochDAO) - _इथेरियम विकासासाठी निधी देण्यावर केंद्रित असलेला समुदाय_ +- [Raid Guild](https://raidguild.org) [@RaidGuild](https://twitter.com/RaidGuild) - _वेब3 बिल्डर्सचा समूह_ + +कृपया ethereum.org मध्ये तुम्ही जेव्हा आणि जसे योगदान द्याल तेव्हा ethereum.org च्या [आचारसंहितेचे](/community/code-of-conduct) पालन करण्याचे लक्षात ठेवा! diff --git a/public/content/translations/mr/community/grants/index.md b/public/content/translations/mr/community/grants/index.md new file mode 100644 index 00000000000..734e323df9a --- /dev/null +++ b/public/content/translations/mr/community/grants/index.md @@ -0,0 +1,68 @@ +--- +title: "Ethereum फाउंडेशन आणि समुदाय अनुदान कार्यक्रम" +description: "संपूर्ण Ethereum परिसंस्थेतील अनुदान कार्यक्रमांची सूची." +lang: mr +--- + +# Ethereum अनुदान {#ethereum-grants} + +खाली सूचीबद्ध केलेले कार्यक्रम Ethereum परिसंस्थेचे यश आणि वाढीस प्रोत्साहन देण्यासाठी काम करणाऱ्या प्रकल्पांसाठी विविध प्रकारचे निधी अनुदान देतात. तुमचा पुढील Ethereum प्रकल्प यशस्वी करण्यात मदत करण्यासाठी निधी शोधण्याकरिता आणि अर्ज करण्याकरिता याचा मार्गदर्शक म्हणून वापर करा. + +ही सूची आमच्या समुदायाद्वारे तयार केली आहे. काही गहाळ किंवा चुकीचे असल्यास, कृपया हे पृष्ठ संपादित करा! + + + +
संस्थापकांनो, तुमचा व्यवसाय गतिमान करण्यासाठी मदतीची गरज आहे का? [संस्थापक समर्थनाकडे जा](/founders/)
+
+ +## विस्तृत Ethereum परिसंस्था {#broad-ethereum-ecosystem} + +हे कार्यक्रम मोठ्या व्याप्तीच्या प्रकल्पांना अनुदान देऊन विस्तृत Ethereum परिसंस्थेला समर्थन देतात. यामध्ये स्केलेबिलिटी, समुदाय निर्मिती, सुरक्षितता, गोपनीयता आणि बरेच काही यासाठी उपायांचा समावेश आहे. हे अनुदान कोणत्याही एका Ethereum प्लॅटफॉर्मसाठी विशिष्ट नाहीत आणि तुम्हाला खात्री नसल्यास सुरुवात करण्यासाठी हे एक चांगले ठिकाण आहे. + +- [EF इकोसिस्टम सपोर्ट प्रोग्राम](https://esp.ethereum.foundation) - _Ethereum ला फायदा होणाऱ्या ओपन सोर्स प्रकल्पांना निधी देणे, विशेषतः सार्वत्रिक साधने, पायाभूत सुविधा, संशोधन आणि सार्वजनिक वस्तूंवर लक्ष केंद्रित करून_ +- [ॲकॅडमिक ग्रांट्स](https://esp.ethereum.foundation/academic-grants) - _Ethereum-संबंधित शैक्षणिक कार्याला समर्थन देण्यासाठी अनुदान_ + +## अनुदान सूची ॲग्रीगेटर्स आणि प्लॅटफॉर्म {#grant-list-aggregators} + +हे स्रोत संपूर्ण Ethereum परिसंस्थेतील विविध अनुदान संधी संकलित आणि आयोजित करतात, ज्यामुळे तुमच्या प्रकल्पाच्या गरजांशी जुळणाऱ्या निधी संधी शोधणे सोपे होते. तुमच्या विशिष्ट निधी गरजांवर आधारित सर्वात संबंधित स्रोत शोधण्यात तुम्हाला सुरुवात करण्यासाठी मदत करण्याकरिता आम्ही त्यांना व्यक्तिमत्त्वानुसार आयोजित केले आहे. + +### सर्व अनुदान शोधणाऱ्यांसाठी: सर्वसमावेशक डिरेक्टरीज {#comprehensive-directories} + +हे सामान्य प्लॅटफॉर्म संपूर्ण Web3 स्पेसमध्ये अनुदानांचे विस्तृत कव्हरेज देतात आणि निधी शोधणाऱ्या कोणासाठीही उपयुक्त प्रारंभ बिंदू आहेत: + +- [Blockworks Grantfarm](https://blockworks.co/grants/programs) - _Blockworks ने सर्व अनुदान, RFPs आणि बग बाऊंटीजची एक सर्वसमावेशक डिरेक्टरी संकलित केली आहे._ +- [Blockchain Grants](https://www.blockchaingrants.org/) - _ब्लॉकचेन आणि क्रिप्टो अनुदानांची डिरेक्टरी_ +- [Karma Funding Map](https://gap.karmahq.xyz/funding-map) - सर्व web3 अनुदान कार्यक्रमांची डिरेक्टरी, साप्ताहिक आधारावर अद्यतनित + +### डेव्हलपर्स आणि बिल्डर्ससाठी {#for-developers-and-builders} + +- [Grant Programs Viewer](https://airtable.com/shr86elKgWTSCP4AY) - _अनुदान कार्यक्रमांचा सार्वजनिक Airtable डेटाबेस_ +- [Web3 Grants Spreadsheet](https://docs.google.com/spreadsheets/d/1c8koZCI-GLnD8MG-eFcXPOBCNu1v8-aXIfwAAvc7AMc/edit#gid=0) - _Web3 अनुदान संधींची Google स्प्रेडशीट_ +- [Arbitrum Grants](https://arbitrum.foundation/grants) — Arbitrum DAO आणि [The Arbitrum Foundation](https://arbitrum.foundation/) + +### DeFi प्रकल्प आणि आर्थिक ॲप्लिकेशन्ससाठी {#for-defi-projects} + +- [LlamaoGrants](https://wiki.defillama.com/wiki/LlamaoGrants) - _DeFi Llama ची अनुदान कार्यक्रम डिरेक्टरी_ +- [AlphaGrowth Grants](https://alphagrowth.io/crypto-web3-grants-list) - _क्रिप्टो आणि Web3 अनुदानांची सर्वसमावेशक सूची_ +- [Uniswap Foundation Grants](https://www.uniswapfoundation.org/build) - _DeFi बिल्डर्ससाठी युनिचेन आणि युनिस्वॅप v4 अनुदान आणि समर्थन_ + +### DAO योगदानकर्ते आणि गव्हर्नन्स इनोव्हेटर्ससाठी {#for-dao-contributors} + +समुदाय-चालित प्रकल्प आणि गव्हर्नन्स प्रयोगांसाठी संसाधने: + +- [DAO Grants](https://docs.google.com/spreadsheets/d/1XHc-p_MHNRdjacc8uOEjtPoWL86olP4GyxAJOFO0zxY/edit#gid=0) - _अनुदान देणाऱ्या संस्थांची Google स्प्रेडशीट_ +- [MetaGov Database](https://docs.google.com/spreadsheets/d/1e5g-dlWWsK2DZoZGBgfxyfGNSddLk-V7sLEgfPjEhbA/edit#gid=780420708) - _सर्वसमावेशक Web3 अनुदान नकाशा_ + +### सार्वजनिक वस्तू आणि प्रभाव {#public-goods-and-impact} + +हे कार्यक्रम व्यापक समुदाय, सार्वजनिक वस्तू आणि प्रभाव उपक्रमांना फायदा देणाऱ्या प्रकल्पांना निधी देण्यावर लक्ष केंद्रित करतात. यामध्ये अनुदान प्रदाते, तसेच [क्वाड्रॅटिक फंडिंग](/defi/#quadratic-funding) सह ऑनचेन निधी वाटप यंत्रणा वापरणाऱ्या देणगी प्लॅटफॉर्मचा समावेश आहे: + +- [Gitcoin](https://www.gitcoin.co/program) - _Gitcoin Grants Ethereum परिसंस्थेतील ओपन सोर्स प्रकल्प आणि सार्वजनिक वस्तूंना निधी देण्यासाठी अनेक भांडवल वाटप यंत्रणा वापरते_ +- [Octant](https://octant.app/home) - _सार्वजनिक वस्तू निधी परिसंस्था जी सार्वजनिक हित आणि वैयक्तिक आर्थिक सक्षमीकरणामध्ये संतुलन साधते_ +- [Giveth](https://giveth.io/) - _क्रिप्टो देणगी प्लॅटफॉर्म जो चांगल्या कामांसाठी असलेल्या प्रकल्पांकडून शून्य अतिरिक्त शुल्कासह थेट देणग्या सक्षम करतो_ +- [Artizen](https://artizen.fund/) - _कला, विज्ञान, तंत्रज्ञान आणि संस्कृतीच्या आघाडीवर असलेल्या नवीन प्रकल्पांसाठी निधी जुळवण्यास निर्मात्यांना मदत करणे_ +- [Quadratic Accelerator](https://qacc.giveth.io/) - _स्टार्ट-अप ॲक्सिलरेटर कार्यक्रम जो सार्वजनिक हितासाठी फायदेशीर असलेल्या प्रकल्पांना समर्थन देण्यासाठी क्वाड्रॅटिक फंडिंग वापरतो_ + +## Ethereum मध्ये काम {#work-in-ethereum} + +स्वतःचा प्रकल्प सुरू करण्यास तयार नाही का? शेकडो कंपन्या आहेत ज्या Ethereum परिसंस्थेत काम करण्यासाठी आणि योगदान देण्यासाठी उत्साही व्यक्तींना सक्रियपणे शोधत आहेत. अधिक माहिती शोधत आहात का? [Ethereum संबंधित नोकर्‍या पहा](/community/get-involved/#ethereum-jobs) diff --git a/public/content/translations/mr/community/language-resources/index.md b/public/content/translations/mr/community/language-resources/index.md new file mode 100644 index 00000000000..03d1da9b743 --- /dev/null +++ b/public/content/translations/mr/community/language-resources/index.md @@ -0,0 +1,153 @@ +--- +title: "भाषा संसाधने" +description: "Ethereum बद्दल शिकण्यासाठी बिगर-इंग्रजी संसाधने" +lang: mr +--- + +# भाषा संसाधने {#language-resources} + +Ethereum समुदाय जागतिक आहे आणि त्यात लाखो बिगर-इंग्रजी भाषिक आहेत. + +आमचे उद्दिष्ट सर्व भाषांमध्ये शैक्षणिक सामग्री प्रदान करणे आणि जगभरातील लोकांना Ethereum वर आणण्यात येणारे भाषिक अडथळे दूर करण्यास मदत करणे हे आहे. + +तुम्ही तुमच्या मूळ भाषेत वाचण्यास प्राधान्य देत असाल किंवा इंग्रजी न बोलणाऱ्या कोणाला ओळखत असाल, तर तुम्ही खाली उपयुक्त बिगर-इंग्रजी संसाधनांची यादी शोधू शकता. लाखो Ethereum उत्साही या ऑनलाइन मंचांवर बातम्या शेअर करण्यासाठी, अलीकडील घडामोडींवर चर्चा करण्यासाठी, तांत्रिक समस्यांवर वादविवाद करण्यासाठी आणि भविष्याची कल्पना करण्यासाठी एकत्र येतात. + +तुमच्या भाषेत एखादे शैक्षणिक संसाधन माहित आहे का? यादीमध्ये जोडण्यासाठी [एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues/new/choose)! + +## Ethereum.org संसाधने {#ethereum-org} + +Ethereum.org चे ४० हून अधिक भाषांमध्ये मूळ भाषांतर केले आहे जे तुम्ही प्रत्येक पृष्ठाच्या शीर्षस्थानी असलेल्या आमच्या भाषा निवडक मेनूचा वापर करून शोधू शकता. + +![भाषा निवडक मेनू](./language-selector-menu.png) + +तुम्ही द्विभाषिक असाल आणि अधिक लोकांपर्यंत पोहोचण्यास आम्हाला मदत करू इच्छित असाल, तर तुम्ही [ethereum.org भाषांतर कार्यक्रमात](/contributing/translation-program/#translation-program) देखील सहभागी होऊ शकता आणि वेबसाइटचे भाषांतर करण्यास आम्हाला मदत करू शकता. + +## समुदाय संसाधने {#community} + +### ब्राझिलियन पोर्तुगीज {#br-pt} + +**बातम्या** + +- [BeInCrypto](http://www.beincrypto.com.br) - ब्राझीलमध्ये उपलब्ध असलेल्या एक्सचेंजेसच्या यादीसह क्रिप्टोकरन्सी बातम्या आणि लेख +- [Cointelegraph](http://cointelegraph.com.br/category/analysis) - Cointelegraph ची ब्राझिलियन आवृत्ती, एक प्रमुख क्रिप्टोकरन्सी न्यूज आउटलेट +- [Livecoins](http://www.livecoins.com.br/ethereum) - क्रिप्टोकरन्सी बातम्या आणि साधने +- [Seudinheiro](http://www.seudinheiro.com/criptomoedas/) - क्रिप्टोकरन्सी बातम्या आणि अहवाल +- [Modular Crypto](https://modularcrypto.xyz/) - क्रिप्टोकरन्सी बातम्या आणि शैक्षणिक लेख + +**शिक्षण** + +- [web3dev](https://www.web3dev.com.br/) - वेब 3 विकसकांसाठी सामग्री केंद्र आणि डिस्कॉर्ड समुदाय. +- [Web3Brasil](https://github.com/web3brasil/web3brasil) - Web3 आणि DeFi शिकण्यासाठी संसाधने +- [CriptoFacil](http://www.criptofacil.com/ultimas-noticias/) - क्रिप्टोकरन्सी बातम्या आणि शिक्षण, ज्यामध्ये 'नवशिक्यांसाठी Ethereum' आणि 'नवशिक्यांसाठी DeFi' समाविष्ट आहे +- [CriptoAtivos](http://www.criptoativos.wiki.br/) - क्रिप्टोकरन्सी क्षेत्रातील माहिती, शिक्षण आणि ब्लॉग +- [Cointimes](http://www.cointimes.com.br/) - क्रिप्टोकरन्सी बातम्या आणि शिक्षण +- [Web3 starter pack](https://docs.google.com/document/d/1X8PSTFH7FTw9J-gbKWM6Y430SWCBT8d4t4pJgFQHJ8E/) - वारंवार विचारल्या जाणाऱ्या आणि मूलभूत क्रिप्टो प्रश्नांची उत्तरे देणारे मार्गदर्शक + +### चीनी {#zh} + +**सर्वसाधारण संसाधने** + +- [Ethereum.cn](https://www.ethereum.cn/) - समुदायाद्वारे सांभाळलेली सामग्री, ज्यामध्ये कन्सेन्सस लेअर अपग्रेड, सर्व कोअर डेव्ह मीटिंग नोट्स, लेअर 2 इत्यादींचा समावेश आहे. +- [EthFans](https://github.com/editor-Ajian/EthFans.org-annual-collected-works/) - Ethereum च्या मूलभूत गोष्टींपासून प्रगत विषयांपर्यंत सर्व काही शिका +- [Unitimes](https://mp.weixin.qq.com/s/tvloZSDBSOQN9zDQj_91kA) - समुदायाद्वारे सांभाळलेली सामग्री, ज्यामध्ये Ethereum, DeFi, NFT, Web3-संबंधित ज्ञानाचा समावेश आहे +- [123ETH](https://123eth.org/) - Ethereum इकोसिस्टमचे एक पोर्टल +- [Zhen Xiao](http://zhenxiao.com/blockchain/) - क्रिप्टोकरन्सी आणि तिच्या अनुप्रयोगांबद्दल विनामूल्य ऑनलाइन अभ्यासक्रम +- [Ethereum श्वेतपत्रिका](/zh/whitepaper/) - Ethereum श्वेतपत्रिकेची चीनी आवृत्ती + +**Ethereum इकोसिस्टम** + +- [ETHPlanet](https://www.ethplanet.org/) - ऑनलाइन आणि प्रत्यक्ष हॅकेथॉन, विद्यापीठातील विद्यार्थ्यांना प्रशिक्षण देतात +- [PrimitivesLane](https://www.primitiveslane.org/) - एक ना-नफा संशोधन गट, जो ब्लॉकचेन तंत्रज्ञानावर लक्ष केंद्रित करतो +- [Ethereum Translation Community CN](https://www.notion.so/Ethereum-Translation-Community-CN-05375fe0a94c4214acaf90f42ba40171) - शैक्षणिक Ethereum सामग्रीचे भाषांतर करण्यासाठी समर्पित एक समुदाय + +**विकसकांसाठी** + +- [DappLearning](https://github.com/Dapp-Learning-DAO/Dapp-Learning) - मुख्य प्रवाहातील डॅप प्रकल्पांचा अभ्यास करण्यासाठी आणि दर आठवड्याला विचार आणि टिप्पण्या शेअर करण्यासाठी एक शिक्षण गट +- [LearnBlockchain](https://learnblockchain.cn/) - डेव्हलपर्ससाठी एक समुदाय, ब्लॉकचेन तंत्रज्ञानाबद्दल माहिती शेअर करतो + +**क्रिप्टोग्राफी संशोधकांसाठी** + +- [SecbitLabs](https://mp.weixin.qq.com/s/69_tqBJpr_sbaKtR1sBRMw) - एक WeChat खाते, जे क्रिप्टोग्राफी, सुरक्षा, इत्यादी स्पष्ट करते. +- [Sparkbyte](https://mp.weixin.qq.com/s/9KgKTc_jtJ7bWKdbNPoqvQ) - एक WeChat खाते, जे zk तंत्रज्ञान स्पष्ट करते + +### झेक {#cs} + +- [Gwei.cz](https://gwei.cz) - Web3 भोवतीचा स्थानिक समुदाय, शैक्षणिक सामग्री तयार करतो, ऑनलाइन आणि प्रत्यक्ष कार्यक्रमांचे आयोजन करतो +- [Gwei.cz Příručka](https://prirucka.gwei.cz/) - नवशिक्यांसाठी Ethereum मार्गदर्शक +- [DAO Příručka](https://dao.gwei.cz/) - DAO साठी नवशिक्यांचे मार्गदर्शक +- [Mastering Ethereum](https://ipfs.io/ipfs/bafybeidvuxhnsgfx3tncpfxheqglkjwmdxclknlgd7s7qggd2a6bzgb27m) - झेकमध्ये Mastering Ethereum + +### फ्रेंच {#fr} + +- [Ethereum France](https://www.ethereum-france.com/) - Ethereum France कार्यक्रमांचे आयोजन करते, सामग्री तयार करते आणि Ethereum भोवती चर्चा करण्यास प्रोत्साहित करते +- [Ethereum.fr](https://ethereum.fr/) - Ethereum बातम्या आणि शिक्षण +- [BanklessFR](https://banklessfr.substack.com/) - फ्रेंचमध्ये Bankless वृत्तपत्र +- [CryptoFR](https://cryptofr.com/category/44/ethereum-general) - Ethereum सबपेजसह क्रिप्टोकरन्सी फोरम + +### जर्मन {#de} + +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/de-de/learn/modules/blockchain-learning-solidity/) - Solidity वापरणे +- [Microsoft Learn (स्मार्ट कॉन्ट्रॅक्ट्स)](https://docs.microsoft.com/de-de/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - Solidity सह Ethereum स्मार्ट कॉन्ट्रॅक्ट लिहिणे +- [Microsoft Learn (Ethereum नेटवर्क्स)](https://docs.microsoft.com/de-de/learn/modules/blockchain-ethereum-networks/) - Ethereum नेटवर्क्सना कनेक्ट करणे आणि तैनात करणे +- [Microsoft Learn (ब्लॉकचेन्स)](https://docs.microsoft.com/de-de/learn/paths/ethereum-blockchain-development/) - ब्लॉकचेन डेव्हलपमेंटमध्ये प्रवेश + +### हिब्रू {#he} + +- [उडी वर्थेमर - बिटकॉइनर्स Ethereum कडून काय शिकू शकतात](https://www.cryptojungle.co.il/udi-wertheimer-what-bitcoiners-can-learn-from-ethereum/) +- [ओमेर ग्रेइसमेन (OpenZeppelin) - आम्ही 15 अब्ज डॉलर्सचा स्मार्ट कॉन्ट्रॅक्ट हॅक कसा टाळला](https://www.cryptojungle.co.il/omer-greisman-openzeppelin/) +- [शाय दातिका (INX) - टोकनायझेशन आणि सिक्युरिटीजचे भविष्य, Ethereum एक सिक्युरिटी आहे का यासह](https://www.cryptojungle.co.il/shy-datika-tokenization/) +- [रॉय कॉन्फिनो (Lemonade) - विमा @ Ethereum](https://www.cryptojungle.co.il/roy-confino-insurance/) +- [इदान ऑफरात (Fireblocks) - संस्थात्मक अवलंब](https://www.cryptojungle.co.il/idan-ofrat-fireblocks/) +- [गाल वेझमन (MetaMask) - MetaMask काय आहे](https://www.cryptojungle.co.il/gal-weizman-metamask/) +- [ड्रॉर एव्हिएली (Consensys) - Ethereum चे केंद्र](https://www.cryptojungle.co.il/dror-aviely-ethereum-center/) +- [नीर रोझिन - एक क्रिप्टो-पंक असणे](https://www.cryptojungle.co.il/nir-rozin-cryptopunk/) +- [अदान केदेम - गेमिंग आणि मेटाव्हर्स](https://www.cryptojungle.co.il/adan-kedem-web3-gaming/) +- [उरी कोलोडनी (Starkware) - Ethereum आणि ब्लॉकचेन लेअर्स](https://www.cryptojungle.co.il/uri-kolodny-starkware/) +- [उडी वर्थेमर - Ethereum 2.0 विरुद्ध स्पर्धा](https://www.cryptojungle.co.il/udi-on-eth2/) +- [बेन समोचा (मी स्वतः) - Ethereum 2.0 - एक संधी?](https://www.cryptojungle.co.il/etherurm2-week-summary/) +- [अलोन मुरोच (Bloxstaking) - Ethereum 2.0 काय आहे?](https://www.cryptojungle.co.il/alon-moroch-eth2/) +- [इलोन अवीव (Collider Ventures) - Ethereum 2.0 मध्ये काय चूक होऊ शकते](https://www.cryptojungle.co.il/eilon-aviv-eth2-0/) +- [इलोन अवीव (Collider Ventures) - आपल्याला Ethereum 2.0 ची गरज का आहे](https://www.cryptojungle.co.il/eilon-aviv-ethereum-2-0/) + +### इटालियन {#it} + +- [Ethereum Italia](https://www.ethereum-italia.it/) - Ethereum शिक्षण, कार्यक्रम आणि बातम्या, स्मार्ट कॉन्ट्रॅक्ट्स आणि ब्लॉकचेन तंत्रज्ञानावर लक्ष केंद्रित +- [Ethereum Italia Podcast](https://www.ethereum-italia.it/podcast/) - इटालियनमध्ये Ethereum पॉडकास्ट +- [Microsoft Learn (Solidity)](https://docs.microsoft.com/it-it/learn/modules/blockchain-learning-solidity/) - Solidity कसे वापरावे ते शिका +- [Microsoft Learn (स्मार्ट कॉन्ट्रॅक्ट्स)](https://docs.microsoft.com/it-it/learn/modules/blockchain-solidity-ethereum-smart-contracts/) - Solidity वापरून स्मार्ट कॉन्ट्रॅक्ट लिहिण्याबद्दल शिका +- [Microsoft Learn (dapps)](https://docs.microsoft.com/it-it/learn/modules/blockchain-create-ui-decentralized-apps/) - विकेंद्रीकृत अनुप्रयोगांसह एक वापरकर्ता इंटरफेस तयार करा + +### जपानी {#ja} + +- [जपान व्हर्च्युअल आणि क्रिप्टो मालमत्ता एक्सचेंज असोसिएशन](https://jvcea.or.jp/) +- [जपान क्रिप्टोऍसेट बिझनेस असोसिएशन](https://cryptocurrency-association.org/) +- [ब्लॉकचेन डेव्हलपमेंटसह प्रारंभ करा - शिका | Microsoft Docs](https://docs.microsoft.com/ja-jp/learn/paths/ethereum-blockchain-development/) - हा शिक्षण मार्ग तुम्हाला ब्लॉकचेन आणि Ethereum प्लॅटफॉर्मवरील विकासाची ओळख करून देतो +- [Mastering Ethereum](https://www.oreilly.co.jp/books/9784873118963/) - जपानी भाषेत Mastering Ethereum +- [Hands-On Smart Contract Development with Solidity and Ethereum](https://www.oreilly.co.jp/books/9784873119342/) - जपानी भाषेत Hands-On Smart Contract Development with Solidity and Ethereum + +### रशियन {#ru} + +- [Cyber Academy](https://cyberacademy.dev) - वेब3 बिल्डर्ससाठी शैक्षणिक जागा +- [Forklog](https://forklog.com) - सर्वसाधारणपणे क्रिप्टो, विद्यमान तंत्रज्ञान आणि विविध ब्लॉकचेन्सच्या भविष्यातील अपग्रेडबद्दल बातम्या आणि शैक्षणिक लेख +- [BeInCrypto](https://ru.beincrypto.com) - बातम्या, क्रिप्टो किंमत विश्लेषण आणि क्रिप्टोकडे असलेल्या प्रत्येक गोष्टीबद्दल सोप्या स्पष्टीकरणासह गैर-तांत्रिक लेख + +### स्पॅनिश {#es} + +- [Ethereum Madrid](https://ethereummadrid.com/) - ब्लॉकचेन, DeFi आणि प्रशासन अभ्यासक्रम, कार्यक्रम आणि ब्लॉग +- [Cointelegraph](https://es.cointelegraph.com/ethereum-for-beginners) - स्पॅनिशमध्ये नवशिक्यांसाठी Ethereum मार्गदर्शक +- [Tutoriales online](https://tutoriales.online/curso/solidity) - Solidity आणि Ethereum वर प्रोग्रामिंग शिका +- [Curso Introducción a Ethereum Development](https://youtube.com/playlist?list=PLTqiwJDd_R8y9pfUBjhkVa1IDMwyQz-fU) - Solidity मूलभूत गोष्टी, तुमच्या पहिल्या स्मार्ट कॉन्ट्रॅक्टची चाचणी आणि उपयोजन +- [Curso Introducción a Seguridad y Hacking en Ethereum](https://youtube.com/playlist?list=PLTqiwJDd_R8yHOvteko_DmUxUTMHnlfci) - वास्तविक स्मार्ट कॉन्ट्रॅक्टमधील सामान्य असुरक्षितता आणि सुरक्षा समस्या समजून घ्या +- [Curso Introducción a DeFi Development](https://youtube.com/playlist?list=PLTqiwJDd_R8zZiP9_jNdaPqA3HqoW2lrS) - Solidity मध्ये DeFi स्मार्ट कॉन्ट्रॅक्ट कसे कार्य करतात ते शिका आणि तुमचा स्वतःचा ऑटोमेटेड मार्केट मेकर तयार करा +- [Cryptoversidad](https://www.youtube.com/c/Cryptoversidad) - नवशिक्यांपासून प्रगत स्तरापर्यंत गैर-तांत्रिक ब्लॉकचेन शिक्षण. क्रिप्टो आणि Ethereum बद्दल सर्वकाही शिका. + +### तुर्की {#tr} + +- [BTK Akademi](https://www.btkakademi.gov.tr/portal/course/blokzincir-ve-kripto-paralar-10569#!/about) - ब्लॉकचेन आणि क्रिप्टोकरन्सी-केंद्रित अभ्यासक्रम +- [मोठे पुनर्नामकरण: Eth2 चे काय झाले?](https://miningturkiye.org/konu/ethereum-madenciligi-bitiyor-mu-onemli-gelisme.655/) - 'Eth2' शब्दावलीपासून दूर जाण्याच्या हालचालीचे स्पष्टीकरण देणाऱ्या 'ग्रेट रिनेमिंग' ब्लॉग पोस्टचे तुर्की भाषांतर + +### व्हिएतनामी {#vi} + +- [Tino Group](https://wiki.tino.org/ethereum-la-gi/) - Ethereum, dapps, वॉलेट्स आणि FAQs चे विहंगावलोकन +- [Tap Chi Bitcoin](https://tapchibitcoin.io/tap-chi/tin-tuc-ethereum-eth) - Ethereum बातम्या आणि शिक्षणासाठी उपपृष्ठांसह वेब प्लॅटफॉर्म +- [Coin68](https://coin68.com/ethereum-tieu-diem/) - Ethereum बातम्या आणि शैक्षणिक सामग्रीसह क्रिप्टोकरन्सी पोर्टल diff --git a/public/content/translations/mr/community/online/index.md b/public/content/translations/mr/community/online/index.md new file mode 100644 index 00000000000..8544e56af1a --- /dev/null +++ b/public/content/translations/mr/community/online/index.md @@ -0,0 +1,74 @@ +--- +title: "ऑनलाइन समुदाय" +description: "ऑनलाइन मंच, चॅट रूम्स आणि सोशल मीडिया समुदाय शोधा जिथे Ethereum चे उत्साही चर्चा आणि सहयोग करण्यासाठी एकत्र येतात." +lang: mr +--- + +# ऑनलाइन समुदाय {#online-communities} + +लाखो Ethereum उत्साही या ऑनलाइन मंचांवर बातम्या शेअर करण्यासाठी, अलीकडील घडामोडींवर चर्चा करण्यासाठी, तांत्रिक समस्यांवर वादविवाद करण्यासाठी आणि भविष्याची कल्पना करण्यासाठी एकत्र येतात. + +## सूचीकरण धोरण {#listing-policy} + +सूचीबद्ध समुदायांची अखंडता आणि मूल्य टिकवून ठेवण्यासाठी, ethereum.org पात्रता निश्चित करण्यासाठी कठोर धोरणाचे पालन करते: + +### पात्रतेचे निकष {#eligibility-criteria} + +- **संबंध**: समुदाय थेट Ethereum आणि त्याच्या परिसंस्थेशी संबंधित असणे आवश्यक आहे. +- **क्रियाकलाप पातळी**: समुदाय नियमित संवाद, पोस्ट्स किंवा चर्चांसह सक्रिय असावा. निष्क्रिय किंवा अक्रियाशील समुदाय काढले जाऊ शकतात. +- **सर्वसमावेशकता**: समुदायाने अशा स्वागतार्ह वातावरणाला प्रोत्साहन दिले पाहिजे जे विविधतेचा आदर करते आणि सर्व पार्श्वभूमीच्या लोकांना सहभागी होण्यासाठी प्रोत्साहित करते. +- **गैर-व्यावसायिक लक्ष**: सूची व्यावसायिक किंवा प्रचारात्मक प्लॅटफॉर्मऐवजी समुदाय-चालित जागांसाठी आहेत. + +### सामग्री मार्गदर्शक तत्त्वे {#content-guidelines} + +- **योग्य सामग्री**: समुदायांची स्वतःची नियंत्रण मार्गदर्शक तत्त्वे असणे आवश्यक आहेत, स्पॅम, द्वेषपूर्ण भाषण, छळवणूक किंवा बेकायदेशीर क्रियाकलापांना प्रोत्साहन देणारी कोणतीही सामग्री टाळली पाहिजे. +- **भाषा**: इंग्रजी ही प्राथमिक भाषा असली तरी, इतर भाषांमधील समुदायांना सादर करण्यासाठी प्रोत्साहित केले जाते, जोपर्यंत ते सर्वसमावेशक आणि आदरपूर्ण वातावरण राखतात. +- **पारदर्शकता**: समुदायाचा उद्देश, नियम आणि नियंत्रकांविषयी स्पष्ट माहिती सदस्यांसाठी उपलब्ध असावी. + +### इतर शिफारसी {#other-recommendations} + +- **प्रवेशयोग्यता**: सामुदायिक मंच साइन-अप किंवा नोंदणीची आवश्यकता न ठेवता प्रत्येकाला वाचण्यासाठी प्रवेशयोग्य असावेत. +- **Discord सर्व्हर आमंत्रणे**: अशी शिफारस केली जाते की केवळ विश्वसनीय Discord सर्व्हर आमंत्रणे ethereum.org मध्ये जोडली जावीत. आदर्शपणे, ही आमंत्रणे वेबसाइटवरील समुदाय पृष्ठाशी जोडलेली असावीत (उदा., [ethglobal.com/discord](https://ethglobal.com/discord)) किंवा अधिकृत URL वरून असावीत (उदा., [discord.gg/ethstaker](https://discord.gg/ethstaker) किंवा [discord.com/invite/ethstaker](https://discord.com/invite/ethstaker)). + +या मार्गदर्शक तत्त्वांच्या आधारे एखादा समुदाय जोडला किंवा काढला पाहिजे असे तुम्हाला वाटत असल्यास, कृपया [आमच्या GitHub रेपॉजिटरीवर एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues). + +## मंच {#forums} + +r/ethereum - Ethereum शी संबंधित सर्व गोष्टी +r/ethfinance - Ethereum ची आर्थिक बाजू, DeFi सह +r/ethdev - Ethereum विकासावर केंद्रित +r/ethtrader - ट्रेंड आणि बाजार विश्लेषण +r/ethstaker - Ethereum वर स्टेकिंगमध्ये स्वारस्य असलेल्या सर्वांचे स्वागत आहे +Fellowship of Ethereum Magicians - Ethereum मधील तांत्रिक मानकांभोवती केंद्रित असलेला समुदाय +Ethereum Stackexchange - Ethereum विकसकांसाठी चर्चा आणि मदत +Ethereum Research - क्रिप्टॉइकॉनॉमिक संशोधनासाठी सर्वात प्रभावी मेसेजबोर्ड + +## चॅट रूम्स {#chat-rooms} + +Ethereum Cat Herders - Ethereum विकासाला प्रकल्प व्यवस्थापन सहाय्य प्रदान करण्याभोवती केंद्रित समुदाय +Ethereum Hackers - ETHGlobal द्वारे चालवलेला Discord चॅट: जगभरातील Ethereum हॅकर्ससाठी एक ऑनलाइन समुदाय +CryptoDevs - Ethereum विकासावर केंद्रित Discord समुदाय +EthStaker Discord - विद्यमान आणि संभाव्य स्टेकर्ससाठी समुदाय-चालित मार्गदर्शन, शिक्षण, समर्थन आणि संसाधने +Ethereum.org website team - थांबा आणि टीम व समुदायातील लोकांसोबत ethereum.org वेब डेव्हलपमेंट आणि डिझाइनबद्दल गप्पा मारा +Matos Discord - web3 निर्मात्यांचा समुदाय जिथे बिल्डर्स, औद्योगिक क्षेत्रातील प्रमुख व्यक्ती आणि Ethereum उत्साही एकत्र येतात. आम्ही web3 विकास, डिझाइन आणि संस्कृतीबद्दल उत्साही आहोत. आमच्यासोबत तयार करण्यासाठी या. +Solidity Gitter - solidity विकासासाठी चॅट (Gitter) +Solidity Matrix - solidity विकासासाठी चॅट (Matrix) +Ethereum Stack Exchange - प्रश्न आणि उत्तर मंच +Peera Community Forum - विकेंद्रीकृत प्रश्न आणि उत्तर मंच + +## YouTube आणि X (पूर्वीचे Twitter) {#youtube-and-twitter} + +Ethereum Foundation - Ethereum फाउंडेशनकडून नवीनतम माहितीसह अद्ययावत रहा +@ethereum - समुदायासाठी मुख्य Ethereum खाते +@ethereumfndn - Ethereum फाउंडेशनचे अधिकृत खाते +@ethdotorg - Ethereum चे पोर्टल, आमच्या वाढत्या जागतिक समुदायासाठी तयार केलेले + + + + +
+ + DAOs बद्दल अधिक जाणून घ्या + +
+
diff --git a/public/content/translations/mr/community/research/index.md b/public/content/translations/mr/community/research/index.md new file mode 100644 index 00000000000..876d23dc214 --- /dev/null +++ b/public/content/translations/mr/community/research/index.md @@ -0,0 +1,399 @@ +--- +title: "Ethereum संशोधनाची सक्रिय क्षेत्रे" +description: "मुक्त संशोधनाच्या विविध क्षेत्रांचा शोध घ्या आणि त्यात कसे सामील व्हावे हे जाणून घ्या." +lang: mr +--- + +# Ethereum संशोधनाची सक्रिय क्षेत्रे {#active-areas-of-ethereum-research} + +Ethereum ची एक प्राथमिक ताकद म्हणजे एक सक्रिय संशोधन आणि अभियांत्रिकी समुदाय सतत त्यात सुधारणा करत आहे. जगभरातील अनेक उत्साही, कुशल लोक Ethereum मधील उत्कृष्ट समस्यांवर काम करू इच्छितात, परंतु त्या समस्या काय आहेत हे शोधणे नेहमीच सोपे नसते. हे पृष्ठ Ethereum च्या अत्याधुनिक तंत्रज्ञानासाठी एक ढोबळ मार्गदर्शक म्हणून प्रमुख सक्रिय संशोधन क्षेत्रांची रूपरेषा देते. + +## Ethereum संशोधन कसे कार्य करते {#how-ethereum-research-works} + +Ethereum संशोधन खुले आणि पारदर्शक आहे, जे [विकेंद्रित विज्ञान (DeSci)](https://hackernoon.com/desci-decentralized-science-as-our-chance-to-recover-the-real-science) च्या तत्त्वांना मूर्त रूप देते. संस्कृती ही संशोधन साधने आणि आउटपुट शक्य तितके खुले आणि परस्परसंवादी बनवण्याची आहे, उदाहरणार्थ, कार्यान्वित करण्यायोग्य नोटबुकद्वारे. Ethereum संशोधन वेगाने पुढे जाते, नवीन निष्कर्ष पीअर रिव्ह्यूच्या फेऱ्यांनंतर पारंपरिक प्रकाशनांद्वारे समुदायापर्यंत पोहोचण्याऐवजी [ethresear.ch](https://ethresear.ch/) सारख्या मंचांवर उघडपणे पोस्ट आणि चर्चा केली जाते. + +## सामान्य संशोधन संसाधने {#general-research-resources} + +विशिष्ट विषय कोणताही असो, [ethresear.ch](https://ethresear.ch) आणि [Eth R&D Discord चॅनेल](https://discord.gg/qGpsxSA) वर Ethereum संशोधनावर भरपूर माहिती उपलब्ध आहे. ही प्राथमिक ठिकाणे आहेत जिथे Ethereum संशोधक नवीनतम कल्पना आणि विकासाच्या संधींवर चर्चा करतात. + +[DelphiDigital](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) द्वारे मे 2022 मध्ये प्रकाशित केलेला हा अहवाल Ethereum roadmap चा चांगला आढावा देतो. + +## निधीचे स्त्रोत {#sources-of-funding} + +आपण Ethereum संशोधनात सामील होऊ शकता आणि त्यासाठी पैसे मिळवू शकता! उदाहरणार्थ, [the Ethereum Foundation](/foundation/) ने अलीकडेच [Academic Grants फंडिंग राउंड](https://esp.ethereum.foundation/academic-grants) चालवला. आपण [the Ethereum grants page](/community/grants/) वर सक्रिय आणि आगामी निधी संधींविषयी माहिती मिळवू शकता. + +## प्रोटोकॉल संशोधन {#protocol-research} + +प्रोटोकॉल संशोधन Ethereum च्या बेस लेअरशी संबंधित आहे - नोड्स कसे कनेक्ट होतात, संवाद साधतात, Ethereum डेटाची देवाणघेवाण करतात आणि संग्रहित करतात आणि ब्लॉकचेनच्या स्थितीबद्दल एकमतावर येतात हे परिभाषित करणाऱ्या नियमांचा संच. प्रोटोकॉल संशोधनाला दोन उच्च-स्तरीय श्रेणींमध्ये विभागले आहे: consensus आणि execution. + +### Consensus {#consensus} + +Consensus संशोधन [Ethereum's proof-of-stake यंत्रणा](/developers/docs/consensus-mechanisms/pos/) शी संबंधित आहे. काही उदाहरण consensus संशोधन विषय आहेत: + +- भेद्यता ओळखणे आणि पॅच करणे; +- क्रिप्टोइकॉनॉमिक सुरक्षेचे प्रमाण ठरवणे; +- क्लायंट अंमलबजावणीची सुरक्षा किंवा कार्यप्रदर्शन वाढवणे; +- आणि लाईट क्लायंट विकसित करणे. + +भविष्यातील संशोधनाबरोबरच, प्रोटोकॉलचे काही मूलभूत पुनर्रचना, जसे की single slot finality, Ethereum मध्ये महत्त्वपूर्ण सुधारणांना अनुमती देण्यासाठी संशोधन केले जात आहे. शिवाय, consensus clients दरम्यान पीअर-टू-पीअर नेटवर्किंगची कार्यक्षमता, सुरक्षा आणि देखरेख हे देखील महत्त्वाचे संशोधन विषय आहेत. + +#### पार्श्वभूमी वाचन {#background-reading} + +- [Proof-of-stake चा परिचय](/developers/docs/consensus-mechanisms/pos/) +- [Casper-FFG पेपर](https://arxiv.org/abs/1710.09437) +- [Casper-FFG स्पष्टीकरण](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- [Gasper पेपर](https://arxiv.org/abs/2003.03052) + +#### अलीकडील संशोधन {#recent-research} + +- [Ethresear.ch Consensus](https://ethresear.ch/c/consensus/29) +- [उपलब्धता/Finality दुविधा](https://arxiv.org/abs/2009.04987) +- [Single slot finality](https://ethresear.ch/t/a-model-for-cumulative-committee-based-finality/10259) +- [Proposer-builder separation](https://notes.ethereum.org/@vbuterin/pbs_censorship_resistance) + +### Execution {#execution} + +Execution layer व्यवहारांची अंमलबजावणी करणे, [Ethereum virtual machine (EVM)](/developers/docs/evm/) चालवणे आणि consensus layer कडे पाठवण्यासाठी execution payloads तयार करणे याच्याशी संबंधित आहे. संशोधनाची अनेक सक्रिय क्षेत्रे आहेत, ज्यात खालील गोष्टींचा समावेश आहे: + +- लाइट क्लायंट सपोर्ट तयार करणे; +- gas limits वर संशोधन करणे; +- आणि नवीन डेटा स्ट्रक्चर्स (उदा., Verkle Tries) समाविष्ट करणे. + +#### पार्श्वभूमी वाचन {#background-reading-1} + +- [EVM चा परिचय](/developers/docs/evm) +- [Ethresear.ch execution layer](https://ethresear.ch/c/execution-layer-research/37) + +#### अलीकडील संशोधन {#recent-research-1} + +- [डेटाबेस ऑप्टिमायझेशन](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/db_faq.md) +- [State expiry](https://notes.ethereum.org/@vbuterin/state_expiry_eip) +- [State expiry चे मार्ग](https://hackmd.io/@vbuterin/state_expiry_paths) +- [Verkle and state expiry प्रस्ताव](https://notes.ethereum.org/@vbuterin/verkle_and_state_expiry_proposal) +- [इतिहास व्यवस्थापन](https://eips.ethereum.org/EIPS/eip-4444) +- [Verkle Trees](https://vitalik.eth.limo/general/2021/06/18/verkle.html) +- [डेटा उपलब्धता सॅम्पलिंग](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding) + +## क्लायंट विकास {#client-development} + +Ethereum क्लायंट हे Ethereum प्रोटोकॉलची अंमलबजावणी आहेत. क्लायंट डेव्हलपमेंट प्रोटोकॉल संशोधनातील परिणाम या क्लायंटमध्ये तयार करून प्रत्यक्षात आणते. क्लायंट डेव्हलपमेंटमध्ये क्लायंट स्पेसिफिकेशन्स अपडेट करणे तसेच विशिष्ट अंमलबजावणी तयार करणे समाविष्ट आहे. + +एक Ethereum नोड चालवण्यासाठी दोन सॉफ्टवेअरची आवश्यकता असते: + +1. ब्लॉकचेनच्या हेडचा मागोवा ठेवण्यासाठी, ब्लॉक्सची देवाणघेवाण करण्यासाठी आणि consensus लॉजिक हाताळण्यासाठी consensus क्लायंट +2. Ethereum Virtual Machine ला सपोर्ट करण्यासाठी आणि व्यवहार आणि स्मार्ट कॉन्ट्रॅक्ट्स कार्यान्वित करण्यासाठी एक execution client + +नोड्स आणि क्लायंट्सबद्दल अधिक तपशिलांसाठी आणि सर्व वर्तमान क्लायंट अंमलबजावणीच्या सूचीसाठी [नोड्स आणि क्लायंट पृष्ठ](/developers/docs/nodes-and-clients/) पहा. आपण [इतिहास पृष्ठावर](/ethereum-forks/) सर्व Ethereum अपग्रेडचा इतिहास देखील शोधू शकता. + +### Execution Clients {#execution-clients} + +- [Execution client specification](https://github.com/ethereum/execution-specs) +- [Execution API spec](https://github.com/ethereum/execution-apis) + +### Consensus Clients {#consensus-clients} + +- [Consensus client specification](https://github.com/ethereum/consensus-specs) +- [Beacon API specification](https://ethereum.github.io/beacon-APIs/#/Beacon/getStateRoot) + +## स्केलिंग आणि कार्यप्रदर्शन {#scaling-and-performance} + +Ethereum चे स्केलिंग करणे हे Ethereum संशोधकांसाठी एक मोठे लक्ष केंद्रित क्षेत्र आहे. सध्याच्या दृष्टिकोनांमध्ये व्यवहारांना rollups वर ऑफलोड करणे आणि डेटा ब्लॉब्स वापरून त्यांना शक्य तितके स्वस्त बनवणे समाविष्ट आहे. Ethereum स्केलिंगबद्दलची प्रास्ताविक माहिती आमच्या [स्केलिंग पृष्ठावर](/developers/docs/scaling) उपलब्ध आहे. + +### Layer 2 {#layer-2} + +आता असे अनेक Layer 2 प्रोटोकॉल आहेत जे व्यवहारांचे बॅचिंग करण्यासाठी आणि त्यांना Ethereum layer 1 वर सुरक्षित करण्यासाठी विविध तंत्रांचा वापर करून Ethereum चे स्केलिंग करतात. हा एक वेगाने वाढणारा विषय आहे ज्यामध्ये भरपूर संशोधन आणि विकासाची क्षमता आहे. + +#### पार्श्वभूमी वाचन {#background-reading-2} + +- [Layer 2 चा परिचय](/layer-2/) +- [Polynya: Rollups, DA आणि modular chains](https://polynya.medium.com/rollups-data-availability-layers-modular-blockchains-introductory-meta-post-5a1e7a60119d) + +#### अलीकडील संशोधन {#recent-research-2} + +- [sequencers साठी Arbitrum चे fair-ordering](https://eprint.iacr.org/2021/1465) +- [Ethresear.ch Layer 2](https://ethresear.ch/c/layer-2/32) +- [Rollup-centric roadmap](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) +- [L2Beat](https://l2beat.com/) + +### Bridges {#bridges} + +Layer 2 चे एक विशिष्ट क्षेत्र ज्याला अधिक संशोधन आणि विकासाची आवश्यकता आहे ते म्हणजे सुरक्षित आणि कार्यक्षम bridges. यात विविध Layer 2 मधील bridges आणि Layer 1 आणि Layer 2 मधील bridges चा समावेश आहे. हे संशोधनाचे एक विशेष महत्त्वाचे क्षेत्र आहे कारण हॅकर्सद्वारे सामान्यतः bridges लक्ष्य केले जातात. + +#### पार्श्वभूमी वाचन {#background-reading-3} + +- [Blockchain bridges चा परिचय](/bridges/) +- [Vitalik bridges वर](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/) +- [Blockchain bridges लेख](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) +- [bridges मध्ये लॉक केलेले मूल्य](https://dune.com/eliasimos/Bridge-Away-\(from-Ethereum\)) + +#### अलीकडील संशोधन {#recent-research-3} + +- [Bridges सत्यापित करणे](https://stonecoldpat.github.io/images/validatingbridges.pdf) + +### Sharding {#sharding} + +Ethereum च्या ब्लॉकचेनचे sharding करणे हे बऱ्याच काळापासून विकासाच्या roadmap चा एक भाग आहे. तथापि, "Danksharding" सारखे नवीन स्केलिंग सोल्यूशन्स सध्या केंद्रस्थानी आहेत. + +पूर्ण Danksharding चा अग्रदूत, जो Proto-Danksharding म्हणून ओळखला जातो, तो Cancun-Deneb ("Dencun") नेटवर्क अपग्रेडसह थेट झाला. + +[Dencun अपग्रेडबद्दल अधिक](/roadmap/dencun/) + +#### पार्श्वभूमी वाचन {#background-reading-4} + +- [Proto-Danksharding नोट्स](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) +- [Bankless Danksharding व्हिडिओ](https://www.youtube.com/watch?v=N5p0TB77flM) +- [Ethereum Sharding संशोधन सारांश](https://notes.ethereum.org/@serenity/H1PGqDhpm?type=view) +- [Danksharding (Polynya)](https://polynya.medium.com/danksharding-36dc0c8067fe) + +#### अलीकडील संशोधन {#recent-research-4} + +- [EIP-4844: Proto-Danksharding](https://eips.ethereum.org/EIPS/eip-4844) +- [sharding आणि डेटा उपलब्धता सॅम्पलिंगवर विटालिक](https://hackmd.io/@vbuterin/sharding_proposal) + +### हार्डवेअर {#hardware} + +Ethereum विकेंद्रित ठेवण्यासाठी माफक हार्डवेअरवर [नोड्स चालवणे](/developers/docs/nodes-and-clients/run-a-node/) मूलभूत आहे. म्हणून, नोड्स चालवण्यासाठी हार्डवेअर आवश्यकता कमी करण्यासाठी सक्रिय संशोधन हे संशोधनाचे एक महत्त्वाचे क्षेत्र आहे. + +#### पार्श्वभूमी वाचन {#background-reading-5} + +- [ARM वर Ethereum](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) + +#### अलीकडील संशोधन {#recent-research-5} + +- [FPGAs वर ecdsa](https://ethresear.ch/t/does-ecdsa-on-fpga-solve-the-scaling-problem/6738) + +## सुरक्षा {#security} + +सुरक्षा हा एक व्यापक विषय आहे ज्यात स्पॅम/स्कॅम प्रतिबंध, वॉलेट सुरक्षा, हार्डवेअर सुरक्षा, क्रिप्टो-इकॉनॉमिक सुरक्षा, बग हंटिंग आणि ऍप्लिकेशन्स आणि क्लायंट सॉफ्टवेअरची चाचणी आणि की-मॅनेजमेंट यांचा समावेश असू शकतो. या क्षेत्रातील ज्ञानात योगदान दिल्यास मुख्य प्रवाहातील स्वीकाराला चालना मिळण्यास मदत होईल. + +### Cryptography & ZKP {#cryptography--zkp} + +Zero-knowledge proofs (ZKP) आणि cryptography हे Ethereum आणि त्याच्या ऍप्लिकेशन्समध्ये गोपनीयता आणि सुरक्षा तयार करण्यासाठी महत्त्वपूर्ण आहेत. झिरो-नॉलेज हे तुलनेने तरुण परंतु वेगाने पुढे जाणारे क्षेत्र आहे जिथे अनेक मुक्त संशोधन आणि विकासाच्या संधी आहेत. [Keccak hashing algorithm](https://hackmd.io/sK7v0lr8Txi1bgION1rRpw?view#Overview) ची अधिक कार्यक्षम अंमलबजावणी विकसित करणे, सध्या अस्तित्वात असलेल्या पॉलीनोमियल कमिटमेंट्सपेक्षा चांगले शोधणे किंवा ecdsa public key निर्मिती आणि स्वाक्षरी पडताळणी सर्किट्सची किंमत कमी करणे यासारख्या काही शक्यता आहेत. + +#### पार्श्वभूमी वाचन {#background-reading-6} + +- [0xparc ब्लॉग](https://0xparc.org/blog) +- [zkp.science](https://zkp.science/) +- [झिरो नॉलेज पॉडकास्ट](https://zeroknowledge.fm/) + +#### अलीकडील संशोधन {#recent-research-6} + +- [इललिप्टिक कर्व्ह क्रिप्टोग्राफीमधील अलीकडील प्रगती](https://ethresear.ch/t/the-ec-fft-algorithm-without-elliptic-curve-and-isogenies/11346) +- [Ethresear.ch ZK](https://ethresear.ch/c/zk-s-nt-arks/13) + +### Wallets {#wallets} + +Ethereum वॉलेट्स ब्राउझर विस्तार, डेस्कटॉप आणि मोबाईल ॲप्स किंवा Ethereum वरील स्मार्ट कॉन्ट्रॅक्ट असू शकतात. सामाजिक पुनर्प्राप्ती वॉलेट्सवर सक्रिय संशोधन चालू आहे जे वैयक्तिक-वापरकर्ता की व्यवस्थापनाशी संबंधित काही जोखीम कमी करतात. वॉलेटच्या विकासाशी संबंधित खाते ॲब्स्ट्रक्शनच्या पर्यायी प्रकारांवर संशोधन आहे, जे नवजात संशोधनाचे एक महत्त्वाचे क्षेत्र आहे. + +#### पार्श्वभूमी वाचन {#background-reading-7} + +- [वॉलेट्सचा परिचय](/wallets/) +- [वॉलेट सुरक्षेचा परिचय](/security/) +- [Ethresear.ch सुरक्षा](https://ethresear.ch/tag/security) +- [EIP-2938 Account Abstraction](https://eips.ethereum.org/EIPS/eip-2938) +- [EIP-4337 Account Abstraction](https://eips.ethereum.org/EIPS/eip-4337) + +#### अलीकडील संशोधन {#recent-research-7} + +- [Validation focused smart contract wallets](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [खात्यांचे भविष्य](https://ethereum-magicians.org/t/validation-focused-smart-contract-wallets/6603) +- [EIP-3074 AUTH आणि AUTHCALL Opcodes](https://eips.ethereum.org/EIPS/eip-3074) +- [EOA पत्त्यावर कोड प्रकाशित करणे](https://eips.ethereum.org/EIPS/eip-5003) + +## समुदाय, शिक्षण आणि पोहोच {#community-education-and-outreach} + +Ethereum वर नवीन वापरकर्त्यांना आणण्यासाठी नवीन शैक्षणिक संसाधने आणि पोहोचण्यासाठी नवीन दृष्टिकोनांची आवश्यकता आहे. यामध्ये ब्लॉग पोस्ट आणि लेख, पुस्तके, पॉडकास्ट, मीम्स, शिकवण्याची संसाधने, कार्यक्रम आणि इतर काहीही असू शकते जे समुदाय तयार करते, नवीन सुरुवाती करणाऱ्यांचे स्वागत करते आणि लोकांना Ethereum बद्दल शिक्षित करते. + +### UX/UI {#uxui} + +Ethereum वर अधिक लोकांना आणण्यासाठी, इकोसिस्टमने UX/UI सुधारले पाहिजे. यासाठी डिझाइनर आणि उत्पादन तज्ञांना वॉलेट्स आणि ॲप्सच्या डिझाइनची पुन्हा तपासणी करावी लागेल. + +#### पार्श्वभूमी वाचन {#background-reading-8} + +- [Ethresear.ch UX/UI](https://ethresear.ch/c/ui-ux/24) + +#### अलीकडील संशोधन {#recent-research-8} + +- [Web3 डिझाइन डिस्कॉर्ड](https://discord.gg/FsCFPMTSm9) +- [Web3 डिझाइनची तत्त्वे](https://www.web3designprinciples.com/) +- [Ethereum Magicians UX चर्चा](https://ethereum-magicians.org/t/og-council-ux-follow-up/9032/3) + +### अर्थशास्त्र {#economics} + +Ethereum मधील अर्थशास्त्र संशोधन मुख्यत्वे दोन दृष्टिकोनांचे अनुसरण करते: आर्थिक प्रोत्साहनांवर अवलंबून असलेल्या यंत्रणेची सुरक्षा सत्यापित करणे ("सूक्ष्मअर्थशास्त्र") आणि प्रोटोकॉल, ॲप्लिकेशन्स आणि वापरकर्त्यांमधील मूल्याचा प्रवाह विश्लेषण करणे ("स्थूलअर्थशास्त्र"). Ethereum च्या नेटिव्ह मालमत्तेशी (ether) आणि त्यावर तयार केलेल्या टोकन्सशी संबंधित (उदाहरणार्थ NFTs आणि ERC20 टोकन्स) जटिल क्रिप्टो-इकॉनॉमिक घटक आहेत. + +#### पार्श्वभूमी वाचन {#background-reading-9} + +- [Robust Incentives Group](https://rig.ethereum.org/) +- [Devconnect मध्ये ETHconomics कार्यशाळा](https://www.youtube.com/playlist?list=PLTLjFJ0OQOj5PHRvA2snoOKt2udVsyXEm) + +#### अलीकडील संशोधन {#recent-research-9} + +- [EIP1559 चे अनुभवजन्य विश्लेषण](https://arxiv.org/abs/2201.05574) +- [फिरता पुरवठा संतुलन](https://ethresear.ch/t/circulating-supply-equilibrium-for-ethereum-and-minimum-viable-issuance-during-the-proof-of-stake-era/10954) +- [MEV चे प्रमाण: जंगल किती अंधारमय आहे?](https://arxiv.org/abs/2101.05511) + +### ब्लॉकस्पेस आणि शुल्क बाजार {#blockspace-fee-markets} + +ब्लॉकस्पेस बाजार अंतिम-वापरकर्त्याच्या व्यवहारांचा समावेश नियंत्रित करतात, एकतर थेट Ethereum (Layer 1) वर किंवा bridged networks वर, उदा. rollups (Layer 2). Ethereum वर, व्यवहार EIP-1559 म्हणून प्रोटोकॉलमध्ये तैनात केलेल्या शुल्क बाजारात सादर केले जातात, जे साखळीला स्पॅम आणि किंमत गर्दीपासून संरक्षण करतात. दोन्ही लेयर्सवर, व्यवहार बाह्यता निर्माण करू शकतात, ज्यांना Maximal Extractable Value (MEV) म्हणून ओळखले जाते, जे या बाह्यता कॅप्चर करण्यासाठी किंवा व्यवस्थापित करण्यासाठी नवीन बाजार रचना प्रेरित करतात. + +#### पार्श्वभूमी वाचन {#background-reading-10} + +- [Ethereum Blockchain साठी व्यवहार शुल्क यंत्रणा डिझाइन: EIP-1559 चे आर्थिक विश्लेषण (टिम रफगार्डन, 2020)](https://timroughgarden.org/papers/eip1559.pdf) +- [EIP-1559 चे सिम्युलेशन्स (Robust Incentives Group)](https://ethereum.github.io/abm1559) +- [Rollup अर्थशास्त्र पहिल्या तत्त्वांपासून](https://barnabe.substack.com/p/understanding-rollup-economics-from?utm_source=url) +- [फ्लॅश बॉईज 2.0: विकेंद्रित एक्सचेंजमध्ये फ्रंटरनिंग, व्यवहार पुनर्क्रम आणि एकमत अस्थिरता](https://arxiv.org/abs/1904.05234) + +#### अलीकडील संशोधन {#recent-research-10} + +- [बहुआयामी EIP-1559 व्हिडिओ सादरीकरण](https://youtu.be/QbR4MTgnCko) +- [क्रॉस डोमेन MEV](http://arxiv.org/abs/2112.01472) +- [MEV लिलाव](https://ethresear.ch/t/mev-auction-auctioning-transaction-ordering-rights-as-a-solution-to-miner-extractable-value/6788) + +### Proof-of-stake प्रोत्साहन {#proof-of-stake-incentives} + +Validators Ethereum ची मूळ मालमत्ता (ether) अप्रामाणिक वर्तनाविरुद्ध संपार्श्विक म्हणून वापरतात. याचे क्रिप्टोइकॉनॉमिक्स नेटवर्कची सुरक्षा ठरवते. प्रगत validators स्पष्ट हल्ले सुरू करण्यासाठी प्रोत्साहन लेयरच्या बारकाव्यांचा फायदा घेऊ शकतात. + +#### पार्श्वभूमी वाचन {#background-reading-11} + +- [Ethereum अर्थशास्त्र मास्टरक्लास आणि आर्थिक मॉडेल](https://github.com/CADLabs/ethereum-economic-model) +- [PoS प्रोत्साहनांचे सिम्युलेशन (Robust Incentives Group)](https://ethereum.github.io/beaconrunner/) + +#### अलीकडील संशोधन {#recent-research-11} + +- [प्रस्तावक/बिल्डर सेपरेशन (PBS) अंतर्गत व्यवहारांची सेन्सॉरशिप प्रतिरोधक क्षमता वाढवणे](https://notes.ethereum.org/s3JToeApTx6CKLJt8AbhFQ) +- [PoS Ethereum वर तीन हल्ले](https://arxiv.org/abs/2110.10086) + +### लिक्विड स्टेकिंग आणि डेरिव्हेटिव्ह्ज {#liquid-staking-and-derivatives} + +लिक्विड स्टेकिंग 32 ETH पेक्षा कमी असलेल्या वापरकर्त्यांना DeFi मध्ये वापरता येणाऱ्या स्टेक केलेल्या इथरचे प्रतिनिधित्व करणाऱ्या टोकनसाठी इथर स्वॅप करून स्टेकिंग यील्ड्स प्राप्त करण्याची परवानगी देते. तथापि, लिक्विड स्टेकिंगशी संबंधित प्रोत्साहन आणि बाजाराची गतिशीलता अजूनही शोधली जात आहे, तसेच त्याचा Ethereum च्या सुरक्षेवरील परिणाम (उदा. केंद्रीकरणाचा धोका). + +#### पार्श्वभूमी वाचन {#background-reading-12} + +- [Ethresear.ch लिक्विड स्टेकिंग](https://ethresear.ch/search?q=liquid%20staking) +- [Lido: विश्वासहीन Ethereum स्टेकिंगचा मार्ग](https://blog.lido.fi/the-road-to-trustless-ethereum-staking/) +- [रॉकेट पूल: स्टेकिंग प्रोटोकॉलचा परिचय](https://medium.com/rocket-pool/rocket-pool-staking-protocol-part-1-8be4859e5fbd) + +#### अलीकडील संशोधन {#recent-research-12} + +- [Lido मधून पैसे काढणे हाताळणे](https://ethresear.ch/t/handling-withdrawals-in-lidos-eth-liquid-staking-protocol/8873) +- [पैसे काढण्याची क्रेडेन्शियल्स](https://ethresear.ch/t/withdrawal-credential-rotation-from-bls-to-eth1/8722) +- [लिक्विड स्टेकिंग डेरिव्हेटिव्ह्जचे धोके](https://notes.ethereum.org/@djrtwo/risks-of-lsd) + +## चाचणी {#testing} + +### औपचारिक पडताळणी {#formal-verification} + +औपचारिक पडताळणी म्हणजे Ethereum च्या consensus specifications योग्य आणि बग-मुक्त आहेत हे सत्यापित करण्यासाठी कोड लिहिणे. Python मध्ये लिहिलेल्या स्पेसिफिकेशनची एक कार्यान्वित करण्यायोग्य आवृत्ती आहे ज्याला देखभाल आणि विकासाची आवश्यकता आहे. पुढील संशोधन स्पेसिफिकेशनच्या Python अंमलबजावणीमध्ये सुधारणा करण्यास मदत करू शकते आणि अशी साधने जोडू शकते जी अधिक मजबूतपणे अचूकता सत्यापित करू शकतात आणि समस्या ओळखू शकतात. + +#### पार्श्वभूमी वाचन {#background-reading-13} + +- [औपचारिक पडताळणीचा परिचय](https://ptolemy.berkeley.edu/projects/embedded/research/vis/doc/VisUser/vis_user/node4.html) +- [औपचारिक पडताळणी (Intel)](https://www.cl.cam.ac.uk/~jrh13/papers/mark10.pdf) + +#### अलीकडील संशोधन {#recent-research-13} + +- [deposit contract ची औपचारिक पडताळणी](https://github.com/runtimeverification/deposit-contract-verification) +- [Beacon Chain specification ची औपचारिक पडताळणी](https://github.com/runtimeverification/deposit-contract-verification) + +## डेटा सायन्स आणि विश्लेषण {#data-science-and-analytics} + +अधिक डेटा विश्लेषण साधने आणि डॅशबोर्डची आवश्यकता आहे जे Ethereum वरील क्रियाकलाप आणि नेटवर्कच्या आरोग्याबद्दल तपशीलवार माहिती देतात. + +### पार्श्वभूमी वाचन {#background-reading-14} + +- [Dune Analytics](https://dune.com/browse/dashboards) +- [क्लायंट विविधता डॅशबोर्ड](https://clientdiversity.org/) + +#### अलीकडील संशोधन {#recent-research-14} + +- [Robust Incentives Group डेटा विश्लेषण](https://rig.ethereum.org/) + +## ॲप्स आणि टूलींग {#apps-and-tooling} + +ऍप्लिकेशन लेयर Ethereum च्या बेस लेयरवर व्यवहार सेटल करणार्‍या प्रोग्राम्सच्या विविध इकोसिस्टमला सपोर्ट करतो. विकास संघ सतत Ethereum चा लाभ घेण्यासाठी नवीन मार्ग शोधत आहेत जेणेकरून महत्त्वाच्या Web2 ॲप्सच्या कंपोझेबल, परमिशनलेस आणि सेन्सॉरशिप-प्रतिरोधक आवृत्त्या तयार करता येतील किंवा पूर्णपणे नवीन Web3-नेटिव्ह संकल्पना तयार करता येतील. त्याच वेळी, नवीन टूलिंग विकसित केले जात आहे जे Ethereum वर dapps तयार करणे कमी गुंतागुंतीचे करते. + +### DeFi {#defi} + +विकेंद्रित वित्त (DeFi) हे Ethereum वर तयार केलेल्या ऍप्लिकेशन्सच्या प्राथमिक वर्गांपैकी एक आहे. DeFi चा उद्देश कंपोझेबल "मनी लेगोस" तयार करणे आहे जे वापरकर्त्यांना स्मार्ट कॉन्ट्रॅक्ट्स वापरून क्रिप्टो-मालमत्ता साठवण्याची, हस्तांतरित करण्याची, कर्ज देण्याची, कर्ज घेण्याची आणि गुंतवणूक करण्याची परवानगी देतात. DeFi हे वेगाने पुढे जाणारे क्षेत्र आहे जे सतत अद्यतनित होत आहे. सुरक्षित, कार्यक्षम आणि सुलभ प्रोटोकॉलवर सतत संशोधनाची आवश्यकता आहे. + +#### पार्श्वभूमी वाचन {#background-reading-15} + +- [DeFi](/defi/) +- [Coinbase: DeFi म्हणजे काय?](https://www.coinbase.com/learn/crypto-basics/what-is-defi) + +#### अलीकडील संशोधन {#recent-research-15} + +- [विकेंद्रित वित्त, केंद्रीकृत मालकी?](https://arxiv.org/pdf/2012.09306.pdf) +- [Optimism: उप-डॉलर व्यवहारांचा मार्ग](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) + +### DAOs {#daos} + +Ethereum साठी एक प्रभावी वापर प्रकरण म्हणजे DAOs च्या वापराद्वारे विकेंद्रित पद्धतीने संघटित होण्याची क्षमता. Ethereum वरील DAOs कसे विकसित आणि वापरले जाऊ शकतात यावर बरेच सक्रिय संशोधन चालू आहे, जे शासनाचे सुधारित प्रकार कार्यान्वित करण्यासाठी, विश्वास-कमी समन्वय साधन म्हणून, लोकांच्या पर्यायांना पारंपरिक कॉर्पोरेशन्स आणि संस्थांच्या पलीकडे मोठ्या प्रमाणात विस्तारित करतात. + +#### पार्श्वभूमी वाचन {#background-reading-16} + +- [DAOs चा परिचय](/dao/) +- [Dao Collective](https://daocollective.xyz/) + +#### अलीकडील संशोधन {#recent-research-16} + +- [DAO इकोसिस्टम मॅप करणे](https://www.researchgate.net/publication/358694594_Mapping_out_the_DAO_Ecosystem_and_Assessing_DAO_Autonomy) + +### डेव्हलपर साधने {#developer-tools} + +Ethereum डेव्हलपर्ससाठी साधने वेगाने सुधारत आहेत. या सामान्य क्षेत्रात बरेच सक्रिय संशोधन आणि विकास करायचा आहे. + +#### पार्श्वभूमी वाचन {#background-reading-17} + +- [प्रोग्रामिंग भाषेनुसार टूलींग](/developers/docs/programming-languages/) +- [डेव्हलपर फ्रेमवर्क्स](/developers/docs/frameworks/) +- [Consensus डेव्हलपर साधनांची सूची](https://github.com/ConsenSys/ethereum-developer-tools-list) +- [टोकन मानके](/developers/docs/standards/tokens/) +- [CryptoDevHub: EVM साधने](https://cryptodevhub.io/wiki/ethereum-virtual-machine-tools) + +#### अलीकडील संशोधन {#recent-research-17} + +- [Eth R&D Discord Consensus Tooling चॅनेल](https://discordapp.com/channels/595666850260713488/746343380900118528) + +### Oracles {#oracles} + +Oracles परवानगीशिवाय आणि विकेंद्रित मार्गाने ऑफचेन डेटा ब्लॉकचेनवर आयात करतात. हा डेटा ऑनचेन मिळवल्याने dapps वास्तविक-जगातील घटना जसे की वास्तविक-जगातील मालमत्तेतील किंमतीतील चढउतार, ऑफचेन ॲप्समधील घटना किंवा हवामानातील बदल यावर प्रतिक्रियाशील बनतात. + +#### पार्श्वभूमी वाचन {#background-reading-18} + +- [Oracles चा परिचय](/developers/docs/oracles/) + +#### अलीकडील संशोधन {#recent-research-18} + +- [ब्लॉकचेन oracles चे सर्वेक्षण](https://arxiv.org/pdf/2004.07140.pdf) +- [Chainlink श्वेतपत्र](https://chain.link/whitepaper) + +### ॲप सुरक्षा {#app-security} + +Ethereum वरील हॅक्स सामान्यतः प्रोटोकॉलमध्येच नव्हे तर वैयक्तिक ऍप्लिकेशन्समधील भेद्यतांचा फायदा घेतात. हॅकर्स आणि ॲप डेव्हलपर्स नवीन हल्ले आणि संरक्षण विकसित करण्यासाठी शस्त्रास्त्रांच्या शर्यतीत अडकले आहेत. याचा अर्थ ॲप्सना हॅक्सपासून सुरक्षित ठेवण्यासाठी नेहमीच महत्त्वपूर्ण संशोधन आणि विकासाची आवश्यकता असते. + +#### पार्श्वभूमी वाचन {#background-reading-19} + +- [Wormhole शोषण अहवाल](https://blog.chainalysis.com/reports/wormhole-hack-february-2022/) +- [Ethereum कॉन्ट्रॅक्ट हॅक पोस्ट-मॉर्टमची यादी](https://forum.openzeppelin.com/t/list-of-ethereum-smart-contracts-post-mortems/1191) +- [Rekt News](https://x.com/RektHQ?s=20&t=3otjYQdM9Bqk8k3n1a1Adg) + +#### अलीकडील संशोधन {#recent-research-19} + +- [Ethresear.ch ऍप्लिकेशन्स](https://ethresear.ch/c/applications/18) + +### तंत्रज्ञान स्टॅक {#technology-stack} + +संपूर्ण Ethereum टेक स्टॅकचे विकेंद्रीकरण करणे हे एक महत्त्वाचे संशोधन क्षेत्र आहे. सध्या, Ethereum वरील dapps मध्ये सामान्यतः केंद्रीकरणाचे काही बिंदू असतात कारण ते केंद्रीकृत टूलिंग किंवा पायाभूत सुविधांवर अवलंबून असतात. + +#### पार्श्वभूमी वाचन {#background-reading-20} + +- [Ethereum स्टॅक](/developers/docs/ethereum-stack/) +- [Coinbase: Web3 स्टॅकचा परिचय](https://blog.coinbase.com/a-simple-guide-to-the-web3-stack-785240e557f0) +- [स्मार्ट कॉन्ट्रॅक्ट्सचा परिचय](/developers/docs/smart-contracts/) +- [विकेंद्रित स्टोरेजचा परिचय](/developers/docs/storage/) + +#### अलीकडील संशोधन {#recent-research-20} + +- [स्मार्ट कॉन्ट्रॅक्ट कंपोझिबिलिटी](/developers/docs/smart-contracts/composability/) diff --git a/public/content/translations/mr/community/support/index.md b/public/content/translations/mr/community/support/index.md new file mode 100644 index 00000000000..111d65ea53e --- /dev/null +++ b/public/content/translations/mr/community/support/index.md @@ -0,0 +1,104 @@ +--- +title: "Ethereum सपोर्ट" +description: "Ethereum इकोसिस्टममध्ये साहाय्य मिळवा." +lang: mr +--- + +# Ethereum साहाय्य {#support} + +## अधिकृत Ethereum साहाय्य {#official-support} + +तुम्ही अधिकृत Ethereum साहाय्य शोधत आहात का? तुम्ही पहिली गोष्ट जी जाणून घेतली पाहिजे ती म्हणजे Ethereum विकेंद्रित आहे. याचा अर्थ असा की कोणतीही केंद्रीय संस्था, घटक किंवा व्यक्ती Ethereum ची मालक नाही आणि त्यामुळे कोणतेही अधिकृत साहाय्य चॅनेल अस्तित्वात नाहीत. + +Ethereum चे विकेंद्रित स्वरूप समजून घेणे महत्त्वाचे आहे कारण **Ethereum साठी अधिकृत साहाय्य असल्याचा दावा करणारी कोणतीही व्यक्ती कदाचित तुमची फसवणूक करण्याचा प्रयत्न करत आहे!** घोटाळेबाजांपासून सर्वोत्तम संरक्षण म्हणजे स्वतःला शिक्षित करणे आणि सुरक्षिततेला गांभीर्याने घेणे. + + + Ethereum सुरक्षा आणि घोटाळा प्रतिबंध + + + + Ethereum ची मूलतत्त्वे जाणून घ्या + + +अधिकृत साहाय्याच्या अभावा সত্ত্বেও, Ethereum इकोसिस्टममधील अनेक गट, समुदाय आणि प्रकल्प मदत करण्यास उत्सुक आहेत आणि तुम्हाला या पृष्ठावर बरीच उपयुक्त माहिती आणि संसाधने मिळू शकतात. अजूनही प्रश्न आहेत का? [ethereum.org Discord](https://discord.gg/ethereum-org) मध्ये सामील व्हा आणि आम्ही मदत करण्याचा प्रयत्न करू. + +## वारंवार विचारले जाणारे प्रश्न {#faq} + +### मी चुकीच्या वॉलेटमध्ये ETH पाठवले आहेत {#wrong-wallet} + +Ethereum वर पाठवलेला व्यवहार अपरिवर्तनीय आहे. दुर्दैवाने, जर तुम्ही चुकीच्या वॉलेटमध्ये ETH पाठवले असतील, तर हे फंड परत मिळवण्याचा कोणताही मार्ग नाही. कोणतीही केंद्रीय संस्था, घटक किंवा व्यक्ती Ethereum ची मालक नाही, याचा अर्थ कोणीही व्यवहार उलटवू शकत नाही. त्यामुळे, व्यवहार पाठवण्यापूर्वी ते नेहमी दोनदा तपासणे महत्त्वाचे आहे. + +### मी माझे Ethereum गिव्हअवे कसे क्लेम करू शकेन? {#giveaway-scam} + +Ethereum गिव्हअवेज हे तुमचे ETH चोरण्यासाठी डिझाइन केलेले घोटाळे आहेत. खूप चांगल्या वाटणाऱ्या ऑफर्सच्या मोहात पडू नका — जर तुम्ही गिव्हअवे ॲड्रेसवर ETH पाठवले, तर तुम्हाला कोणतेही गिव्हअवे मिळणार नाही आणि तुम्ही तुमचे फंड परत मिळवू शकणार नाही. + +[घोटाळा प्रतिबंधावर अधिक](/security/#common-scams) + +### माझा व्यवहार अडकला आहे {#stuck-transaction} + +नेटवर्कच्या मागणीमुळे आवश्यक असलेल्या शुल्कापेक्षा कमी व्यवहार शुल्क सबमिट केल्यास Ethereum वरील व्यवहार कधीकधी अडकू शकतात. अनेक वॉलेट्स व्यवहार प्रक्रिया करण्यासाठी उच्च व्यवहार शुल्कासह तोच व्यवहार पुन्हा सबमिट करण्याचा पर्याय देतात. याव्यतिरिक्त, तुम्ही तुमच्या स्वतःच्या ॲड्रेसवर व्यवहार पाठवून आणि प्रलंबित व्यवहाराप्रमाणेच नॉन्स (nonce) वापरून प्रलंबित व्यवहार रद्द करू शकता. + +[MetaMask वर प्रलंबित व्यवहाराचा वेग कसा वाढवायचा किंवा तो रद्द कसा करायचा](https://metamask.zendesk.com/hc/en-us/articles/360015489251-How-to-speed-up-or-cancel-a-pending-transaction) + +[प्रलंबित Ethereum व्यवहार कसे रद्द करायचे](https://info.etherscan.com/how-to-cancel-ethereum-pending-transactions/) + +### मी Ethereum चे मायनिंग कसे करू? {#mining-ethereum} + +Ethereum मायनिंग आता शक्य नाही. जेव्हा Ethereum [प्रूफ-ऑफ-वर्क (proof-of-work)](/glossary/#pow) वरून [प्रूफ-ऑफ-स्टेक (proof-of-stake)](/glossary/#pos) वर स्थलांतरित झाले, तेव्हा मायनिंग बंद करण्यात आले. आता, मायनर्सऐवजी, Ethereum कडे व्हॅलिडेटर्स आहेत. नेटवर्क सुरक्षित करण्यासाठी व्हॅलिडेटर सॉफ्टवेअर चालवून कोणीही ETH [स्टेक](/glossary/#staking) करू शकतो आणि स्टेक करण्याचे रिवॉर्ड्स मिळवू शकतो. + +### मी स्टेकर कसा बनू / व्हॅलिडेटर कसे चालवू? {#how-to-stake} + +व्हॅलिडेटर बनण्यासाठी, तुम्ही Ethereum डिपॉझिट कॉन्ट्रॅक्टमध्ये 32 ETH स्टेक करणे आणि एक व्हॅलिडेटर नोड सेट करणे आवश्यक आहे. अधिक माहिती आमच्या [स्टेकिंग पृष्ठांवर](/staking) आणि [स्टेकिंग लॉन्चपॅडवर](https://launchpad.ethereum.org/) उपलब्ध आहे. + +## dapps तयार करणे {#building-support} + +तयार करणे कठीण असू शकते. येथे काही विकास-केंद्रित जागा आहेत जिथे अनुभवी Ethereum डेव्हलपर्स मदत करण्यास उत्सुक आहेत. + +- [Alchemy University](https://university.alchemy.com/#starter_code) +- [CryptoDevs discord](https://discord.com/invite/5W5tVb3) +- [Ethereum StackExchange](https://ethereum.stackexchange.com/) +- [Web3 University](https://www.web3.university/) +- [LearnWeb3](https://discord.com/invite/learnweb3) + +तुम्हाला आमच्या [Ethereum डेव्हलपर रिसोर्सेस](/developers/) विभागात माहिती आणि विकास मार्गदर्शक तत्त्वे देखील मिळतील. + +### टूल्स {#dapp-tooling} + +तुमचा प्रश्न विशिष्ट टूल, प्रोजेक्ट किंवा लायब्ररीशी संबंधित आहे का? बहुतेक प्रकल्पांमध्ये तुम्हाला साहाय्य करण्यासाठी समर्पित चॅट सर्व्हर किंवा फोरम असतात. + +येथे काही लोकप्रिय उदाहरणे आहेत: + +- [Solidity](https://gitter.im/ethereum/solidity) +- [ethers.js](https://discord.gg/6jyGVDK6Jx) +- [web3.js](https://discord.gg/GsABYQu4sC) +- [Hardhat](https://discord.gg/xtrMGhmbfZ) +- [Alchemy](http://alchemy.com/discord) +- [Tenderly](https://discord.gg/fBvDJYR) + +## नोड चालवणे {#node-support} + +जर तुम्ही नोड किंवा व्हॅलिडेटर चालवत असाल, तर तुम्हाला सुरुवात करण्यात मदत करण्यासाठी समर्पित काही समुदाय येथे आहेत. + +- [EthStaker discord](https://discord.gg/ethstaker) +- [EthStaker reddit](https://www.reddit.com/r/ethstaker) + +Ethereum क्लायंट तयार करणाऱ्या बहुतेक टीम्सकडे समर्पित, सार्वजनिक जागा आहेत, जिथे तुम्ही साहाय्य मिळवू शकता आणि प्रश्न विचारू शकता. + +### एक्झिक्युशन क्लायंट {#execution-clients} + +- [Geth](https://discord.gg/FqDzupGyYf) +- [Nethermind](https://discord.gg/YJx3pm8z5C) +- [Besu](https://discord.gg/p8djYngzKN) +- [Erigon](https://github.com/ledgerwatch/erigon/issues) +- [Reth](https://github.com/paradigmxyz/reth/discussions) + +### कन्सेंसस क्लायंट {#consensus-clients} + +- [Prysm](https://discord.gg/prysmaticlabs) +- [Nimbus](https://discord.gg/nSmEH3qgFv) +- [Lighthouse](https://discord.gg/cyAszAh) +- [Teku](https://discord.gg/7hPv2T6) +- [Lodestar](https://discord.gg/aMxzVcr) +- [Grandine](https://discord.gg/H9XCdUSyZd) + +तुम्ही [येथे नोड कसा चालवायचा हे देखील शिकू शकता](/developers/docs/nodes-and-clients/run-a-node/). diff --git a/public/content/translations/mr/contributing/adding-desci-projects/index.md b/public/content/translations/mr/contributing/adding-desci-projects/index.md new file mode 100644 index 00000000000..6c9a0c89762 --- /dev/null +++ b/public/content/translations/mr/contributing/adding-desci-projects/index.md @@ -0,0 +1,44 @@ +--- +title: "DeSci प्रकल्प जोडणे" +description: "ethereum.org वरील DeSci पृष्ठावर प्रकल्पांसाठी लिंक जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# प्रकल्प जोडणे {#adding-projects} + +आम्ही विविध प्रकारचे प्रकल्प दाखवतो आणि DeSci लँडस्केपचा एक चांगला स्नॅपशॉट देतो याची खात्री करू इच्छितो. + +ethereum.org वरील DeSci पृष्ठावर सूचीबद्ध करण्यासाठी कोणीही प्रकल्प सुचविण्यास स्वतंत्र आहे. त्याचप्रमाणे, जो प्रकल्प आता संबंधित नाही किंवा आमच्या पात्रतेचे निकष पूर्ण करत नाही, असे कोणाच्या लक्षात आल्यास ते तो काढून टाकण्याची सूचना करण्यास स्वतंत्र आहेत. + +## निर्णय आराखडा {#the-decision-framework} + +### समावेशासाठी निकष: आवश्यक गोष्टी {#the-must-haves} + +- **ओपन सोर्स कोड/डेटा** - कोड आणि डेटाची मोकळेपणा हे एक मुख्य DeSci तत्व आहे, त्यामुळे DeSci प्रकल्प क्लोज्ड सोर्स नसावेत. कोडबेस प्रवेशयोग्य असावा आणि आदर्शपणे PRs साठी खुला असावा. +- **DeSci प्रकल्प प्रात्यक्षिकरित्या विकेंद्रीकृत असावेत** - यामध्ये DAO द्वारे शासित असणे, किंवा नॉन-कस्टोडियल वॉलेट्ससह विकेंद्रीकृत टेक स्टॅकसह तयार करणे समाविष्ट असू शकते. यात कदाचित Ethereum वरील तपासण्यायोग्य स्मार्ट कॉन्ट्रॅक्ट्सचा समावेश आहे. +- **प्रामाणिक आणि अचूक सूची माहिती** - प्रकल्पांकडून सुचवलेल्या कोणत्याही सूची प्रामाणिक आणि अचूक माहितीसह येतील अशी अपेक्षा आहे. तुमचे उत्पादन "ओपन सोर्स" नसताना तसे घोषित करण्यासारखी, सूची माहिती चुकीची देणारी उत्पादने काढून टाकली जातील. +- **विज्ञानात प्रवेश वाढविण्यासाठी प्रात्यक्षिक वचनबद्धता** - DeSci प्रकल्पाला ते केवळ टोकन/NFT धारकांसाठीच नव्हे, तर सामान्य लोकांसाठी विज्ञानातील सहभाग कसा वाढवतात हे स्पष्ट करता आले पाहिजे. +- **जागतिक स्तरावर प्रवेशयोग्य** - तुमच्या प्रकल्पामध्ये भौगोलिक मर्यादा किंवा KYC आवश्यकता नाहीत ज्यामुळे काही लोक तुमच्या सेवेचा लाभ घेण्यापासून वगळले जातात. +- **माहितीपूर्ण वेबसाइट आणि दस्तऐवजीकरण** - प्रकल्प वेबसाइटला भेट देणाऱ्यांना प्रकल्प नेमके काय करतो, ते विज्ञान पायाभूत सुविधांच्या विकेंद्रीकरणात कसे योगदान देते आणि कसे सहभागी व्हावे हे समजणे महत्त्वाचे आहे. +- **प्रकल्प Ethereum इकोसिस्टमचा भाग असावा** - ethereum.org येथे आमचा विश्वास आहे की Ethereum (आणि त्याचे लेयर 2) DeSci चळवळीसाठी योग्य बेस लेयर आहे. +- **प्रकल्प बर्‍यापैकी सुस्थापित आहे** - प्रकल्पाचे खरे वापरकर्ते आहेत जे अनेक महिन्यांपासून प्रकल्पाच्या सेवांमध्ये प्रवेश करू शकले आहेत. + +### असल्यास अधिक चांगले + +- **एकाधिक भाषांमध्ये उपलब्ध** - तुमचा प्रकल्प एकाधिक भाषांमध्ये अनुवादित केलेला आहे ज्यामुळे जगभरातील वापरकर्ते त्यात प्रवेश करू शकतात. +- **शैक्षणिक संसाधने** - वापरकर्त्यांना मदत करण्यासाठी आणि शिक्षित करण्यासाठी तुमच्या उत्पादनामध्ये चांगल्या प्रकारे डिझाइन केलेला ऑनबोर्डिंग अनुभव असावा. किंवा लेख किंवा व्हिडिओंसारख्या कसे-करावे या सामग्रीचा पुरावा. +- **तृतीय-पक्षाचे ऑडिट** - तुमच्या उत्पादनाची विश्वस्त तृतीय-पक्षाद्वारे असुरक्षिततेसाठी व्यावसायिकरित्या ऑडिट केली गेली आहे. +- **संपर्क व्यक्ती** - प्रकल्पासाठी एक संपर्क व्यक्ती (हे DAO किंवा समुदायातील प्रतिनिधी असू शकतात) बदल केल्यावर आम्हाला अचूक माहिती मिळविण्यात खूप मदत करेल. यामुळे भविष्यातील माहिती गोळा करताना ethereum.org अद्यतनित करणे व्यवस्थापित करण्यायोग्य राहील. + +## देखभाल {#maintenance} + +Ethereum चे स्वरूप प्रवाही असल्यामुळे, टीम आणि उत्पादने येतात आणि जातात आणि दररोज नवनवीन शोध लागतात, त्यामुळे आम्ही आमच्या सामग्रीची नियमित तपासणी खालील कारणांसाठी करू: + +- सर्व सूचीबद्ध प्रकल्प अजूनही आमचे निकष पूर्ण करतात याची खात्री करा +- सध्या सूचीबद्ध केलेल्यांपेक्षा आमचे अधिक निकष पूर्ण करणारे सुचवलेले कोणतेही उत्पादन नाही याची पडताळणी करा + +Ethereum.org ओपन सोर्स समुदायाद्वारे देखरेख केली जाते आणि आम्ही हे अद्ययावत ठेवण्यासाठी समुदायावर अवलंबून आहोत. सूचीबद्ध प्रकल्पांबद्दल कोणतीही माहिती अद्यतनित करणे आवश्यक असल्याचे तुमच्या लक्षात आल्यास, कृपया आमच्या GitHub रेपॉजिटरीवर एक इश्यू किंवा पुल रिक्वेस्ट उघडा. + +## वापराच्या अटी {#terms-of-use} + +कृपया आमच्या [वापराच्या अटी](/terms-of-use/) देखील पहा. ethereum.org वरील माहिती केवळ सामान्य माहितीच्या उद्देशाने प्रदान केली आहे. diff --git a/public/content/translations/mr/contributing/adding-developer-tools/index.md b/public/content/translations/mr/contributing/adding-developer-tools/index.md new file mode 100644 index 00000000000..30cb45dc1ad --- /dev/null +++ b/public/content/translations/mr/contributing/adding-developer-tools/index.md @@ -0,0 +1,61 @@ +--- +title: "डेव्हलपर साधने जोडणे" +lang: mr +description: "ethereum.org वर डेव्हलपर साधने सूचीबद्ध करण्यासाठी आमचे निकष" +--- + +# डेव्हलपर साधने जोडणे {#contributing-to-ethereumorg-} + +आम्ही शक्य तितकी सर्वोत्तम डेव्हलपर संसाधने सूचीबद्ध करू इच्छितो जेणेकरून लोक आत्मविश्वासाने तयार करू शकतील आणि त्यांना आवश्यक असलेला आधार मिळू शकेल. + +जर आमच्याकडून एखादे उपयुक्त डेव्हलपर साधन सुटले असेल, तर ते योग्य ठिकाणी सुचवायला हरकत नाही. + +आम्ही सध्या आमच्या [डेव्हलपर पोर्टल](/developers/) वर डेव्हलपर साधने सूचीबद्ध करतो. + +**योग्य पानांवर नवीन भर घालण्यासाठी सूचना द्यायला हरकत नाही.** + +## आम्ही कसे ठरवतो {#ways-to-contribute} + +डेव्हलपर साधनांच्या सबमिशनचे मूल्यांकन खालील निकषांनुसार केले जाईल: + +**ते आधीपासून सूचीबद्ध केलेल्या साधनांपेक्षा अर्थपूर्णपणे वेगळे आहे का?** + +- नवीन श्रेणी किंवा साधनांचे प्रकार +- विद्यमान समान साधनांच्या तुलनेत नवीन वैशिष्ट्ये +- विद्यमान समान साधनांमध्ये समाविष्ट नसलेल्या वेगळ्या उपयोग-केससाठी लक्ष्यित + +**साधन व्यवस्थित दस्तऐवजीकरण केलेले आहे का?** + +- दस्तऐवजीकरण अस्तित्वात आहे का? +- साधन वापरण्यासाठी ते पुरेसे आहे का? +- ते अलीकडेच अद्यतनित केले गेले आहे का? + +**हे साधन मोठ्या प्रमाणावर वापरले जाते का?** + +- आम्ही GitHub स्टार्स, डाउनलोड आकडेवारी आणि ते ज्ञात कंपन्या किंवा प्रकल्पांद्वारे वापरले जाते की नाही यासारख्या मेट्रिक्सचा विचार करू. + +**साधनाचा दर्जा पुरेसा आहे का?** + +- वारंवार बग्स येतात का? +- हे साधन विश्वसनीय आहे का? +- साधनाची देखभाल सक्रियपणे केली जाते का? + +**हे साधन ओपन सोर्स आहे का?** + +इथेरियम स्पेसमधील अनेक प्रकल्प ओपन सोर्स आहेत. आम्ही अशा ओपन-सोर्स प्रकल्पांना सूचीबद्ध करण्याची अधिक शक्यता आहे जे समुदाय डेव्हलपरना कोडची तपासणी करण्यास आणि त्यात योगदान देण्यास अनुमती देतात. + +--- + +## उत्पादन क्रमवारी {#product-ordering} + +जोपर्यंत उत्पादने विशिष्ट क्रमाने, जसे की वर्णानुक्रमे, सूचीबद्ध केली जात नाहीत, तोपर्यंत उत्पादने पानात सर्वात कमी ते सर्वात अलीकडे जोडलेल्या क्रमाने प्रदर्शित केली जातील. दुसऱ्या शब्दांत, सर्वात नवीन उत्पादने सूचीच्या तळाशी जोडली जातात. + +--- + +## तुमचे डेव्हलपर साधन जोडा {#how-decisions-about-the-site-are-made} + +तुम्हाला ethereum.org वर डेव्हलपर साधन जोडायचे असेल आणि ते निकषांची पूर्तता करत असेल, तर GitHub वर एक इश्यू तयार करा. + + + इश्यू तयार करा + diff --git a/public/content/translations/mr/contributing/adding-exchanges/index.md b/public/content/translations/mr/contributing/adding-exchanges/index.md new file mode 100644 index 00000000000..c84afacdbea --- /dev/null +++ b/public/content/translations/mr/contributing/adding-exchanges/index.md @@ -0,0 +1,40 @@ +--- +title: "एक्सचेंज जोडणे" +description: "ethereum.org वर एक्सचेंज जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# इथेरियम एक्सचेंज जोडणे {#adding-ethereum-exchanges} + +कोणीही ethereum.org वर नवीन एक्सचेंज सुचवू शकतो. + +आम्ही सध्या त्यांना येथे सूचीबद्ध करतो: + +- [ethereum.org/get-eth](/get-eth/) + +या पानावर, वापरकर्ते ते कुठे राहतात हे नमूद करू शकतात आणि ते कोणते एक्सचेंज वापरू शकतात हे पाहू शकतात. यामुळे कोणतेही भौगोलिक निर्बंध लवकर समोर आणण्यास मदत होते. + +या संदर्भामुळे, जेव्हा तुम्ही एक्सचेंज सुचवता तेव्हा आम्हाला काही विशिष्ट माहितीची आवश्यकता असते. + +**टीप:** जर तुम्हाला विकेंद्रित एक्सचेंज सूचीबद्ध करायचे असेल, तर आमच्या [वॉलेट्स आणि डॅप्स सूचीबद्ध करण्याच्या धोरणावर](/contributing/adding-products/) एक नजर टाका. + +## आम्हाला काय आवश्यक आहे {#what-we-need} + +- एक्सचेंजला लागू होणारे भौगोलिक निर्बंध. एक्सचेंजशी संबंधित भौगोलिक निर्बंध एक्सचेंजच्या वेबसाइटवरील एका समर्पित पृष्ठावर किंवा विभागात तपशीलवार दिलेले असावेत. +- ETH खरेदी करण्यासाठी वापरकर्ते वापरू शकणारी चलने +- एक्सचेंज एक वैध ट्रेडिंग कंपनी असल्याचा पुरावा +- तुमच्याकडे असलेली कोणतीही अतिरिक्त माहिती – ही कंपनीबद्दलची माहिती असू शकते जसे की ती किती वर्षे कार्यरत आहे, आर्थिक पाठबळ इत्यादी. + +आम्हाला या माहितीची आवश्यकता आहे जेणेकरून आम्ही [वापरकर्त्यांना ते वापरू शकणारे एक्सचेंज शोधण्यात अचूकपणे मदत](/get-eth/#country-picker) करू शकू. + +आणि जेणेकरून ethereum.org ला अधिक खात्री पटेल की एक्सचेंज एक वैध आणि सुरक्षित सेवा आहे. + +--- + +## तुमचे एक्सचेंज जोडा {#add-exchange} + +जर तुम्हाला ethereum.org वर एक्सचेंज जोडायचे असेल, तर GitHub वर एक इश्यू तयार करा. + + + इश्यू तयार करा + diff --git a/public/content/translations/mr/contributing/adding-glossary-terms/index.md b/public/content/translations/mr/contributing/adding-glossary-terms/index.md new file mode 100644 index 00000000000..97a3af9bce4 --- /dev/null +++ b/public/content/translations/mr/contributing/adding-glossary-terms/index.md @@ -0,0 +1,26 @@ +--- +title: "शब्दकोश संज्ञा जोडणे" +lang: mr +description: "ethereum.org शब्दकोशामध्ये नवीन संज्ञा जोडण्यासाठी आमचे निकष" +--- + +# शब्दकोश संज्ञा जोडणे {#contributing-to-ethereumorg-} + +हे क्षेत्र दररोज बदलत आहे. Ethereum वापरकर्त्यांच्या शब्दसंग्रहात सतत नवीन संज्ञा येत आहेत आणि Ethereum शी संबंधित सर्व गोष्टींसाठी अचूक, अद्ययावत संदर्भ देण्यासाठी आम्हाला तुमच्या मदतीची आवश्यकता आहे. सध्याचा [शब्दकोश](/glossary/) तपासा आणि तुम्हाला मदत करायची असल्यास खाली पहा! + +## निकष {#criteria} + +नवीन शब्दकोश संज्ञांचे मूल्यांकन खालील निकषांनुसार केले जाईल: + +- संज्ञा/व्याख्या अद्ययावत आणि सध्या संबंधित आहे का? +- शब्दकोशामध्ये आधीपासूनच समान संज्ञा आहे का? (तसे असल्यास, विद्यमान संज्ञा अद्यतनित करण्याऐवजी नवीन संज्ञेच्या फायद्यांचा विचार करा) +- संज्ञा/व्याख्या उत्पादन जाहिरात किंवा इतर प्रचारात्मक सामग्रीपासून मुक्त आहे का? +- संज्ञा/व्याख्या थेट Ethereum शी संबंधित आहे का? +- व्याख्या वस्तुनिष्ठ, अचूक आणि व्यक्तिनिष्ठ निर्णय किंवा मतांपासून मुक्त आहे का? +- स्रोत विश्वासार्ह आहे का? ते त्यांच्या स्रोतांचा संदर्भ देतात का? + +--- + +## तुमची संज्ञा जोडा {#how-decisions-about-the-site-are-made} + +तुम्हाला ethereum.org वर एखादी शब्दकोश संज्ञा जोडायची असेल आणि ती निकष पूर्ण करत असेल, तर [GitHub वर एक समस्या तयार करा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_glossary_term.yaml). diff --git a/public/content/translations/mr/contributing/adding-layer-2s/index.md b/public/content/translations/mr/contributing/adding-layer-2s/index.md new file mode 100644 index 00000000000..d1a3d17c964 --- /dev/null +++ b/public/content/translations/mr/contributing/adding-layer-2s/index.md @@ -0,0 +1,97 @@ +--- +title: "स्तर 2s जोडत आहे" +description: "ethereum.org वर लेयर 2 जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# लेयर 2 जोडणे {#adding-layer-2} + +आम्ही हे सुनिश्चित करू इच्छितो की आम्ही शक्य तितकी सर्वोत्तम संसाधने सूचीबद्ध करतो जेणेकरून वापरकर्ते लेयर 2 स्पेसमध्ये सुरक्षित आणि आत्मविश्वासाने नेव्हिगेट करू शकतील. + +ethereum.org वर लेयर 2 जोडण्याचे सुचवण्यासाठी कोणीही स्वतंत्र आहे. जर आमच्याकडून एखादे लेयर 2 सुटले असेल, तर **[कृपया ते सुचवा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_layer2.yaml)!** + +आम्ही सध्या खालील पृष्ठांवर L2s सूचीबद्ध करतो: + +- [ऑप्टिमिस्टिक रोलअप](/developers/docs/scaling/optimistic-rollups/) +- [झिरो-नॉलेज रोलअप](/developers/docs/scaling/zk-rollups/) +- [लेयर 2](/layer-2/) + +लेयर 2 हे इथेरियमसाठी एक तुलनेने नवीन आणि रोमांचक पॅराडाइम आहे. आम्ही ethereum.org वर विचारात घेण्यासाठी एक योग्य फ्रेमवर्क तयार करण्याचा प्रयत्न केला आहे परंतु सूचीकरणाचे निकष कालांतराने बदलतील आणि विकसित होतील. + +## निर्णय-चौकट {#decision-framework} + +### समावेशासाठी निकष: आवश्यक गोष्टी {#criteria-for-inclusion-the-must-haves} + +**L2BEAT वर सूचीबद्ध होणे** + +- विचारात घेण्यासाठी, हा प्रकल्प [L2BEAT](https://l2beat.com) वर सूचीबद्ध असणे आवश्यक आहे. L2BEAT लेयर 2 प्रकल्पांचे एक मजबूत जोखीम मूल्यांकन प्रदान करते, ज्यावर आम्ही L2 प्रकल्पांचे मूल्यांकन करण्यासाठी अवलंबून असतो. **जर प्रकल्प L2BEAT वर वैशिष्ट्यीकृत नसेल, तर आम्ही त्यांना ethereum.org वर L2 म्हणून सूचीबद्ध करणार नाही.** +- [तुमचा L2 प्रकल्प L2BEAT मध्ये कसा जोडायचा ते शिका](https://github.com/l2beat/l2beat/blob/master/CONTRIBUTING.md). + +**ओपन सोर्स** + +- तुमचा कोड प्रवेश करण्यायोग्य असणे आवश्यक आहे आणि तुम्ही व्यापक समुदायाकडून पुल रिक्वेस्ट्स (PRs) स्वीकारले पाहिजेत. + +**लेयर 2 श्रेणी** + +आम्ही सध्या खालील बाबींना लेयर 2 सोल्यूशन्स मानतो: + +- ऑप्टिमिस्टिक रोलअप +- झिरो-नॉलेज रोलअप + +_आम्ही डेटा उपलब्धतेसाठी किंवा सुरक्षिततेसाठी इथेरियमचा वापर न करणाऱ्या इतर स्केलिंग सोल्यूशन्सना लेयर 2 मानत नाही._ + +**डेटा उपलब्धतेसाठी इथेरियम** + +- डेटा उपलब्धता हे इतर स्केलिंग सोल्यूशन्स आणि लेयर 2 मधील एक महत्त्वाचा फरक करणारा घटक आहे. सूचीसाठी विचारात घेण्यासाठी प्रकल्पाने डेटा उपलब्धतेसाठी इथेरियम मेननेटचा वापर **करणे आवश्यक आहे**. + +**ब्रिज** + +- वापरकर्ते लेयर 2 वर ऑनबोर्ड कसे होऊ शकतात? + +**प्रकल्प लाइव्ह झाल्याची तारीख** + +- एक लेयर 2 जो 6 महिन्यांहून अधिक काळ मेननेटवर "लाइव्ह" आहे + +- ज्या नवीन प्रकल्पांची वापरकर्त्यांद्वारे बॅटल-टेस्ट केलेली नाही, ते सूचीबद्ध होण्याची शक्यता कमी आहे. + +**बाह्य सुरक्षा ऑडिट** + +- ऑडिट, अंतर्गत सुरक्षा टीम किंवा इतर कोणत्याही पद्धतीद्वारे, तुमच्या उत्पादनाची सुरक्षा विश्वसनीयरित्या तपासलेली असणे आवश्यक आहे. यामुळे आमच्या वापरकर्त्यांसाठी धोका कमी होतो आणि तुम्ही सुरक्षेला गांभीर्याने घेता हे आम्हाला कळते. + +**सातत्यपूर्ण वापरकर्ता आधार** + +- आम्ही TVL इतिहास, व्यवहार आकडेवारी, आणि ते ज्ञात कंपन्या किंवा प्रकल्पांद्वारे वापरले जाते की नाही यासारख्या मेट्रिक्सचा विचार करू. + +**सक्रिय विकास कार्यसंघ** + +- ज्या लेयर 2 प्रकल्पावर काम करण्यासाठी सक्रिय कार्यसंघ नाही, त्याला आम्ही सूचीबद्ध करणार नाही. + +**ब्लॉक एक्सप्लोरर** + +- सूचीबद्ध प्रकल्पांना एक कार्यरत ब्लॉक एक्सप्लोरर आवश्यक आहे जेणेकरून वापरकर्ते सहजपणे चेन नेव्हिगेट करू शकतील. + +### इतर निकष: असल्यास-चांगले {#nice-to-haves} + +**प्रकल्पासाठी एक्सचेंज समर्थन** + +- वापरकर्ते थेट एक्सचेंजमधून जमा आणि/किंवा काढू शकतात का? + +**लेयर 2 इकोसिस्टममधील dapps च्या लिंक्स** + +- या लेयर 2 वर वापरकर्ते काय करू शकतील याची माहिती आम्ही देऊ इच्छितो. (उदा., https://portal.arbitrum.io/, https://www.optimism.io/apps) + +**टोकन कॉन्ट्रॅक्ट सूची** + +- लेयर 2 वर मालमत्तेचा नवीन पत्ता असेल, म्हणून जर टोकन सूचीचे संसाधन उपलब्ध असेल तर कृपया शेअर करा. + +**नेटिव्ह वॉलेट समर्थन** + +- कोणतेही वॉलेट L2 ला नेटिव्हपणे समर्थन देतात का? + +## तुमचे लेयर 2 जोडा {#add-exchange} + +जर तुम्हाला ethereum.org वर लेयर 2 जोडायचे असेल, तर GitHub वर एक इश्यू तयार करा. + + + इश्यू तयार करा + diff --git a/public/content/translations/mr/contributing/adding-products/index.md b/public/content/translations/mr/contributing/adding-products/index.md new file mode 100644 index 00000000000..78b87afdf4b --- /dev/null +++ b/public/content/translations/mr/contributing/adding-products/index.md @@ -0,0 +1,100 @@ +--- +title: "उत्पादने जोडत आहे" +description: "ethereum.org वर dapps जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# Ethereum उत्पादने जोडणे {#adding-products} + +ethereum.org वरील मजकुरासाठी नवीन dapps सुचवण्यास कोणीही मोकळे आहे, जिथे असे करणे योग्य आहे. **नाही, आम्ही तुमची dapp आमच्या होमपेजवर सूचीबद्ध करणार नाही** 😜 + +Dapps सध्या येथे सूचीबद्ध आहेत: + +- ethereum.org/dapps +- ethereum.org/get-eth + +**कृपया फक्त या पानांवर नवीन भर घालण्याचे सुचवा.** + +आम्ही नवीन भर घालण्याचे स्वागत करतो, तरीही आम्ही आमच्या वापरकर्त्यांसाठी तयार करू इच्छित असलेल्या अनुभवाच्या आधारावर सध्याच्या dapps ची निवड केली आहे. हे आमच्या काही डिझाइन तत्त्वांवर आधारित आहेत: + +- _प्रेरणादायी_: ethereum.org वरील कोणतीही गोष्ट वापरकर्त्यांना काहीतरी नवीन देऊ शकणारी असावी +- _एक चांगली गोष्ट_: जे सूचीबद्ध आहे ते एक "अरे व्वा" क्षण प्रदान करणारे असावे +- _विश्वसनीय_: वापरकर्त्यांसाठी धोका कमी करण्यासाठी सर्व काही कायदेशीर व्यवसाय/प्रकल्प असावेत + +एकूणच **ethereum.org ला नवीन वापरकर्त्यांसाठी "अखंड ऑनबोर्डिंग अनुभव" प्रदान करायचा आहे**. त्या कारणास्तव, आम्ही dapps त्यांच्या खालील गोष्टींच्या आधारावर जोडतो: + +- वापराची सुलभता +- इतर उत्पादनांसह आंतरकार्यक्षमता +- सुरक्षा +- दीर्घायुष्य + +येथे आमची निर्णय-चौकट अधिक तपशीलवार दिली आहे. अभिप्राय देण्यास किंवा बदल सुचवण्यास मोकळ्या मनाने सांगा. + +## निर्णय-चौकट {#decision-framework} + +### समावेशासाठी निकष: आवश्यक गोष्टी {#criteria-for-inclusion-the-must-haves} + +- **सुरक्षेसाठी-चाचणी केलेले उत्पादन** – ऑडिट, अंतर्गत सुरक्षा टीम किंवा इतर कोणत्याही पद्धतीद्वारे असो, तुमच्या उत्पादनाची सुरक्षा विश्वसनीयपणे तपासलेली असणे आवश्यक आहे. यामुळे आमच्या वापरकर्त्यांसाठी धोका कमी होतो आणि तुम्ही सुरक्षेला गांभीर्याने घेता हे आम्हाला कळते. +- **६ महिन्यांहून अधिक काळ "लाइव्ह" असलेले उत्पादन** – हे सुरक्षेचे आणखी एक द्योतक आहे. गंभीर बग्स आणि शोषणे शोधण्यासाठी ६ महिन्यांचा कालावधी चांगला आहे. +- **एका सक्रिय टीमद्वारे काम केलेले** – यामुळे गुणवत्ता सुनिश्चित करण्यास मदत होते आणि वापरकर्त्याला त्यांच्या प्रश्नांसाठी समर्थन मिळेल. +- **प्रामाणिक आणि अचूक सूची माहिती** - प्रकल्पांकडून सुचवलेल्या कोणत्याही सूचीमध्ये प्रामाणिक आणि अचूक माहिती असणे अपेक्षित आहे. तुमचे उत्पादन "ओपन-सोर्स" नसतानाही तसे घोषित करण्यासारखी सूची माहिती खोटी देणारी उत्पादने काढून टाकली जातील. + +### क्रमवारीसाठी निकष: असल्यास चांगल्या गोष्टी {#criteria-for-ranking-the-nice-to-haves} + +खालील निकषांमुळे तुमची dapp इतरांप्रमाणे ठळकपणे ethereum.org वर सूचीबद्ध केली जाऊ शकत नाही. + +**Dapps** + +- **तुम्ही सूचीबद्ध केलेल्या बहुतांश वॉलेट्सद्वारे ते ॲक्सेस करू शकता** – dapps ने ethereum.org वर सूचीबद्ध असलेल्या बहुतांश वॉलेट्ससोबत काम केले पाहिजे. +- **वापरकर्ते ते स्वतः वापरून पाहू शकतात –** एक वैयक्तिक वापरकर्ता तुमची dapp वापरण्यास आणि काहीतरी ठोस साध्य करण्यास सक्षम असावा. +- **ऑनबोर्डिंग** – वापरकर्त्यांना मदत करण्यासाठी आणि शिक्षित करण्यासाठी तुमच्या उत्पादनात एक चांगला डिझाइन केलेला ऑनबोर्डिंग अनुभव असावा. किंवा लेख किंवा व्हिडिओंसारख्या कसे-करावे या सामग्रीचा पुरावा. +- **गैर-अभिरक्षक (नॉन-कस्टोडियल)** – वापरकर्ते त्यांच्या निधीवर नियंत्रण ठेवतात. तुमचे उत्पादन नाहीसे झाल्यास, वापरकर्ते तरीही त्यांच्या निधीत प्रवेश करू शकतात आणि तो हलवू शकतात. +- **जागतिक स्तरावर प्रवेशयोग्य** – तुमच्या उत्पादनावर भौगोलिक मर्यादा किंवा KYC आवश्यकता नाहीत, ज्या काही लोकांना तुमच्या सेवेचा वापर करण्यापासून वगळतात. +- **ओपन सोर्स** – तुमचा कोड प्रवेशयोग्य असावा आणि तुम्ही व्यापक समुदायाकडून PRs स्वीकारले पाहिजेत. +- **समुदाय** – तुमचा एक समर्पित समुदाय, कदाचित एक Discord, असावा, जिथे वापरकर्ते मदत मिळवण्यासाठी किंवा नवीन वैशिष्ट्ये सुचवण्यासाठी तुमच्या टीमशी संवाद साधू शकतात. + +## व्यवहारात निकष {#criteria-in-practice} + +तुम्ही जितके अधिक निकष पूर्ण कराल, तितकी तुमच्या उत्पादनाची ethereum.org वर येण्याची शक्यता जास्त असेल. + +केवळ आवश्यक गोष्टी पूर्ण करणारे सूचीबद्ध उत्पादन काढले जाऊ शकते, जर एखादे नवीन उत्पादन सुचवले गेले जे आवश्यक गोष्टी आणि अनेक 'असल्यास-चांगल्या' गोष्टी पूर्ण करते. + +या निर्णयात विचारात घेतल्या जाणाऱ्या इतर गोष्टी: + +- बदलण्याऐवजी जोडल्याने पानाच्या UX मध्ये अडथळा येईल का? + - आमची साइट प्रामुख्याने शैक्षणिक आहे आणि मुख्य उद्देश Ethereum आणि त्याच्या संबंधित संकल्पना स्पष्ट करणे आहे. वापरकर्त्यांसाठी खूप जास्त पर्याय जोडल्याने, पाने कमी वाचनीय आणि त्यामुळे कमी उपयुक्त होऊ शकतात. +- हे पान आता वापरकर्त्याला निवडीच्या पर्यायांमुळे गोंधळात टाकत आहे का? + - जसे की तुम्ही काय पाहावे हे ठरवू शकत नसल्यामुळे तासन्तास Netflix ब्राउझ करत बसता. नवीन वापरकर्त्यांना खूप जास्त निवडी देऊन गोंधळात टाकणे हा एक धोका आहे. + +हा एक डिझाइन निर्णय आहे ज्यासाठी ethereum.org जबाबदार आहे. + +पण निश्चिंत रहा, **अधिक dapps ची क्रमवारी लावणाऱ्या इतर वेबसाइट्सच्या लिंक्स असतील** + +### उत्पादन क्रमवारी {#product-ordering} + +उत्पादनांना विशेषतः वेगळ्या क्रमाने, जसे की वर्णानुक्रमे, मांडले नसल्यास, उत्पादने पानात सर्वात अलीकडे जोडलेल्यापासून ते सर्वात आधी जोडलेल्यापर्यंत प्रदर्शित केली जातील. दुसऱ्या शब्दांत, सर्वात नवीन उत्पादने सूचीच्या तळाशी जोडली जातात. + +### वापराच्या अटी {#terms-of-use} + +कृपया आमच्या [वापराच्या अटी](/terms-of-use/) देखील पहा. ethereum.org वरील माहिती केवळ सामान्य माहितीच्या उद्देशाने प्रदान केली आहे. + +## देखभाल {#maintenance} + +Ethereum चे स्वरूप प्रवाही असल्यामुळे, टीम आणि उत्पादने येतात आणि जातात आणि दररोज नवनवीन शोध लागतात, त्यामुळे आम्ही आमच्या सामग्रीची नियमित तपासणी खालील कारणांसाठी करू: + +- सूचीबद्ध केलेले सर्व dapps अजूनही आमचे निकष पूर्ण करतात याची खात्री करणे +- सध्या सूचीबद्ध असलेल्या उत्पादनांपेक्षा आमचे अधिक निकष पूर्ण करणारी सुचवलेली उत्पादने नाहीत, याची पडताळणी करणे + +तुम्ही तपासून आणि आम्हाला कळवून यात मदत करू शकता. [एक इश्यू तयार करा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) किंवा [website@ethereum.org](mailto:website@ethereum.org) वर ईमेल पाठवा + +_आम्ही मतदानाच्या पर्यायांचाही शोध घेत आहोत जेणेकरून समुदाय त्यांच्या पसंती दर्शवू शकेल आणि आम्हाला शिफारस करण्यासाठी सर्वोत्तम उत्पादने कोणती आहेत हे दाखवू शकेल._ + +--- + +## तुमचे उत्पादन जोडा {#add-your-product} + +तुम्हाला ethereum.org वर एखादे dapp जोडायचे असल्यास आणि ते निकष पूर्ण करत असल्यास, कृपया आम्हाला कळवा. + + + एक ॲप सुचवा + diff --git a/public/content/translations/mr/contributing/adding-resources/index.md b/public/content/translations/mr/contributing/adding-resources/index.md new file mode 100644 index 00000000000..015cd185caf --- /dev/null +++ b/public/content/translations/mr/contributing/adding-resources/index.md @@ -0,0 +1,53 @@ +--- +title: "संसाधने जोडणे" +description: "ethereum.org वर संसाधने जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# संसाधने जोडणे {#adding-resources} + +आम्हाला वापरकर्त्यांना सुरक्षित आणि निश्चिंत ठेवून सर्वोत्तम संभाव्य संसाधनांची यादी करायची आहे. + +सध्या [ethereum.org/resources](/resources/) येथे असलेल्या ethereum.org वरील संसाधन डॅशबोर्डवर नवीन संसाधने जोडण्यासाठी कोणीही सूचना करण्यास मोकळे आहे. + +आम्ही नवीन जोडण्यांचे स्वागत करत असलो तरी, सध्याची संसाधने आमच्या वापरकर्त्यांसाठी आम्ही तयार करत असलेल्या अनुभवावर आधारित निवडली गेली आहेत. हे आमच्या काही डिझाइन तत्त्वांवर आधारित आहेत: + +- _प्रेरणादायी_: ethereum.org वरील कोणतीही गोष्ट वापरकर्त्यांना काहीतरी नवीन देऊ शकणारी असावी +- _एक चांगली गोष्ट_: जे सूचीबद्ध आहे ते एक "अरे व्वा" क्षण प्रदान करणारे असावे +- _विश्वसनीय_: वापरकर्त्यांसाठी धोका कमी करण्यासाठी सर्व काही कायदेशीर व्यवसाय/प्रकल्प असावेत + +एकंदरीत **नवीन वापरकर्त्यांसाठी अखंड ऑनबोर्डिंग अनुभव प्रदान करणे हे ethereum.org चे उद्दिष्ट आहे**. त्या कारणास्तव, आम्ही संसाधने त्यांच्या खालील गोष्टींवर आधारित जोडतो: + +- वापराची सुलभता +- अचूकता +- देखभाल + +## निर्णय-चौकट {#decision-framework} + +### निकष {#criteria} + +- **प्रामाणिक आणि अचूक सूची माहिती** - सुचवलेल्या कोणत्याही सूचीमध्ये प्रामाणिक आणि अचूक माहिती असणे आवश्यक आहे. चुकीची माहिती देणारी उत्पादने काढून टाकली जातील. +- **सक्रिय प्रकल्प** – वापरकर्त्यांसाठी गुणवत्ता आणि समर्थन सुनिश्चित करण्यासाठी संसाधनाची देखभाल एका सक्रिय टीमद्वारे केली पाहिजे. कालबाह्य संसाधने काढून टाकली जाऊ शकतात. + +### उत्पादन क्रमवारी {#product-ordering} + +आम्ही उत्पादनांना त्यांच्या प्रभावावर आधारित क्रमवारी लावण्याचा हक्क राखून ठेवतो. अन्यथा निर्दिष्ट केल्याशिवाय नवीन उत्पादने साधारणपणे सूचीच्या तळाशी जोडली जातील. + +## देखभाल {#maintenance} + +जसजशी Ethereum इकोसिस्टम विकसित होत आहे, तसतसे आम्ही खालील गोष्टींसाठी आमची सामग्री नियमितपणे तपासू: + +- सूचीबद्ध सर्व संसाधने अजूनही आमचे निकष पूर्ण करतात याची खात्री करणे +- सध्या सूचीबद्ध केलेल्यांपेक्षा आमचे अधिक निकष पूर्ण करणारे सुचवलेले कोणतेही उत्पादन नाही याची पडताळणी करा + +तुम्ही तपासून आणि आम्हाला कळवून यात मदत करू शकता. [एक इश्यू तयार करा](https://github.com/ethereum/ethereum-org-website/issues/new?template=bug_report.yaml) किंवा [website@ethereum.org](mailto:website@ethereum.org) वर ईमेल पाठवा. + +--- + +## तुमचे संसाधन जोडा {#add-your-resource} + +तुम्हाला ethereum.org वर एखादे संसाधन जोडायचे असल्यास आणि ते निकष पूर्ण करत असल्यास, GitHub वर एक इश्यू तयार करा. + + + इश्यू तयार करा + diff --git a/public/content/translations/mr/contributing/adding-staking-products/index.md b/public/content/translations/mr/contributing/adding-staking-products/index.md new file mode 100644 index 00000000000..4a49125a238 --- /dev/null +++ b/public/content/translations/mr/contributing/adding-staking-products/index.md @@ -0,0 +1,176 @@ +--- +title: "स्टिकिंग उत्पादने किंवा सेवा जोडणे" +description: "ethereum.org वर स्टिकिंग उत्पादने किंवा सेवा जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# स्टिकिंग उत्पादने किंवा सेवा जोडणे {#adding-staking-products-or-services} + +आम्हाला वापरकर्त्यांना सुरक्षित आणि निश्चिंत ठेवून सर्वोत्तम संभाव्य संसाधनांची यादी करायची आहे. + +ethereum.org वर स्टिकिंग उत्पादने किंवा सेवा जोडण्याचे सुचवण्यासाठी कोणीही स्वतंत्र आहे. आम्ही एखादे चुकवले असल्यास, **[कृपया ते सुचवा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A%2Ccontent+%3Afountain_pen%3A&template=suggest_staking_product.yaml)!** + +आम्ही सध्या खालील पानांवर स्टिकिंग उत्पादने आणि सेवांची सूची देतो: + +- [सोलो स्टिकिंग](/staking/solo/) +- [सेवा म्हणून स्टिकिंग](/staking/saas/) +- [स्टिकिंग पूल्स](/staking/pools/) + +बीकन चेनवर प्रूफ-ऑफ-स्टेक 1 डिसेंबर 2020 पासून लाईव्ह आहे. स्टिकिंग अजूनही तुलनेने नवीन असले तरी, आम्ही ethereum.org वर विचारात घेण्यासाठी एक निष्पक्ष आणि पारदर्शक फ्रेमवर्क तयार करण्याचा प्रयत्न केला आहे, परंतु सूचीबद्धतेचे निकष कालांतराने बदलतील आणि विकसित होतील, आणि ते शेवटी ethereum.org वेबसाइट टीमच्या विवेकाधीन आहेत. + +## निर्णय आराखडा {#the-decision-framework} + +ethereum.org वर उत्पादन सूचीबद्ध करण्याचा निर्णय कोणत्याही एका घटकावर अवलंबून नाही. उत्पादन किंवा सेवा सूचीबद्ध करण्याचा निर्णय घेताना अनेक निकष एकत्रितपणे विचारात घेतले जातात. यापैकी जितके अधिक निकष पूर्ण होतील, तितकी त्याची सूचीबद्ध होण्याची शक्यता जास्त असेल. + +**प्रथम, ते उत्पादन किंवा सेवेच्या कोणत्या श्रेणीतील आहे?** + +- नोड किंवा क्लायंट टूलिंग +- की व्यवस्थापन +- सेवा म्हणून स्टेकिंग (SaaS) +- स्टेकिंग पूल + +सध्या, आम्ही फक्त या श्रेणींमधील उत्पादने किंवा सेवा सूचीबद्ध करत आहोत. + +### समावेशासाठी निकष {#criteria-for-inclusion} + +स्टिकिंग उत्पादने किंवा सेवा सबमिशनचे खालील निकषांनुसार मूल्यांकन केले जाईल: + +**प्रकल्प किंवा सेवा कधी सुरू झाली?** + +- उत्पादन किंवा सेवा लोकांसाठी कधी उपलब्ध झाली याचा पुरावा आहे का? +- हे उत्पादनांचा "बॅटल टेस्टेड" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**प्रकल्प सक्रियपणे सांभाळला जात आहे का?** + +- प्रकल्प विकसित करणारी सक्रिय टीम आहे का? यात कोणाचा सहभाग आहे? +- केवळ सक्रियपणे सांभाळल्या जाणाऱ्या उत्पादनांचाच विचार केला जाईल. + +**उत्पादन किंवा सेवा विश्वसनीय/मानवी मध्यस्थांपासून मुक्त आहे का?** + +- वापरकर्त्यांच्या प्रवासातील कोणत्या टप्प्यांवर त्यांच्या निधीच्या की ठेवण्यासाठी किंवा रिवॉर्ड्स योग्यरित्या वितरित करण्यासाठी मानवांवर विश्वास ठेवण्याची आवश्यकता आहे? +- हे उत्पादन किंवा सेवांचा "ट्रस्टलेस" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**प्रकल्प अचूक आणि विश्वसनीय माहिती देतो का?** + +- उत्पादनाच्या वेबसाइटवर अद्ययावत, अचूक आणि दिशाभूल न करणारी माहिती असणे महत्त्वाचे आहे, विशेषतः जर ती Ethereum प्रोटोकॉल किंवा इतर संबंधित तंत्रज्ञानाशी संबंधित असेल. +- Ethereum किंवा इतर संबंधित विषयांबद्दल चुकीची माहिती, कालबाह्य तपशील किंवा संभाव्य दिशाभूल करणारी विधाने असलेली सबमिशन सूचीबद्ध केली जाणार नाहीत किंवा आधीच सूचीबद्ध असल्यास काढून टाकली जातील. + +**कोणते प्लॅटफॉर्म समर्थित आहेत?** + +- उदा., Linux, macOS, Windows, iOS, Android + +#### सॉफ्टवेअर आणि स्मार्ट कॉन्ट्रॅक्ट्स {#software-and-smart-contracts} + +कोणत्याही समाविष्ट कस्टम सॉफ्टवेअर किंवा स्मार्ट कॉन्ट्रॅक्ट्ससाठी: + +**सर्व काही ओपन सोर्स आहे का?** + +- ओपन सोर्स प्रकल्पांमध्ये सार्वजनिकरित्या उपलब्ध सोर्स कोड रिपॉझिटरी असावी +- हे उत्पादनांचा "ओपन सोर्स" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**उत्पादन _बीटा_ विकासाच्या बाहेर आहे का?** + +- उत्पादन त्याच्या विकास चक्रात कुठे आहे? +- बीटा टप्प्यातील उत्पादनांचा ethereum.org वर समावेश करण्यासाठी विचार केला जात नाही + +**सॉफ्टवेअरचे बाह्य सुरक्षा ऑडिट झाले आहे का?** + +- नसल्यास, बाह्य ऑडिट करण्याची योजना आहे का? +- हे उत्पादनांचा "ऑडिटेड" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**प्रकल्पामध्ये बग बाऊंटी प्रोग्राम आहे का?** + +- नसल्यास, सुरक्षा बग बाऊंटी तयार करण्याची योजना आहे का? +- हे उत्पादनांचा "बग बाऊंटी" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +#### नोड किंवा क्लायंट टूलिंग {#node-or-client-tooling} + +नोड किंवा क्लायंट सेटअप, व्यवस्थापन किंवा मायग्रेशनशी संबंधित सॉफ्टवेअर उत्पादनांसाठी: + +**कोणते कन्सेंसस लेयर क्लायंट (उदा., Lighthouse, Teku, Nimbus, Prysm, Grandine) समर्थित आहेत?** + +- कोणते क्लायंट समर्थित आहेत? वापरकर्ता निवडू शकतो का? +- हे उत्पादनांचा "मल्टी-क्लायंट" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +#### सेवा म्हणून स्टिकिंग {#staking-as-a-service} + +[सेवा म्हणून स्टिकिंग सूचींसाठी](/staking/saas/) (उदा., डेलीगेटेड नोड ऑपरेशन): + +**सेवा वापरण्याशी संबंधित शुल्क काय आहेत?** + +- शुल्क रचना काय आहे, उदा., सेवेसाठी मासिक शुल्क आहे का? +- काही अतिरिक्त स्टिकिंग आवश्यकता आहेत का? + +**वापरकर्त्यांना अकाउंटसाठी साइन-अप करणे आवश्यक आहे का?** + +- कोणी परवानगी किंवा KYC शिवाय सेवा वापरू शकतो का? +- हे उत्पादनांचा "परमिशनलेस" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**साईनिंग की आणि विड्रॉव्हल की कोणाकडे असतात?** + +- वापरकर्त्याला कोणत्या कीजचा ऍक्सेस मिळतो? सेवेला कोणत्या कीजचा ऍक्सेस मिळतो? +- हे उत्पादनांचा "ट्रस्टलेस" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**चालवल्या जाणाऱ्या नोड्सची क्लायंट विविधता काय आहे?** + +- बहुसंख्य कन्सेंसस लेयर (CL) क्लायंटद्वारे किती टक्के व्हॅलिडेटर की चालवल्या जात आहेत? +- मागील संपादनानुसार, Prysm हा कन्सेंसस लेयर क्लायंट आहे जो बहुसंख्य नोड ऑपरेटर्सद्वारे चालवला जातो, जे नेटवर्कसाठी धोकादायक आहे. जर कोणताही CL क्लायंट सध्या नेटवर्कच्या 33% पेक्षा जास्त वापरत असेल, तर आम्ही त्याच्या वापराशी संबंधित डेटाची विनंती करतो. +- हे उत्पादनांचा "डायव्हर्स क्लायंट्स" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +#### स्टिकिंग पूल {#staking-pool} + +[पूल्ड स्टिकिंग सेवांसाठी](/staking/pools/): + +**स्टेक करण्यासाठी किमान किती ETH आवश्यक आहे?** + +- उदा., 0.01 ETH + +**यात कोणते शुल्क किंवा स्टिकिंग आवश्यकता आहेत?** + +- रिवॉर्ड्सपैकी किती टक्के शुल्क म्हणून काढले जातात? +- काही अतिरिक्त स्टिकिंग आवश्यकता आहेत का? + +**लिक्विडिटी टोकन आहे का?** + +- यात कोणते टोकन्स समाविष्ट आहेत? ते कसे काम करतात? कॉन्ट्रॅक्ट ॲड्रेसेस काय आहेत? +- हे उत्पादनांचा "लिक्विडिटी टोकन" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**वापरकर्ते नोड ऑपरेटर म्हणून सहभागी होऊ शकतात का?** + +- पूल्ड फंड वापरून व्हॅलिडेटर क्लायंट चालवण्यासाठी काय आवश्यक आहे? +- यासाठी एखाद्या व्यक्ती, कंपनी किंवा DAO कडून परवानगी आवश्यक आहे का? +- हे उत्पादनांचा "परमिशनलेस नोड्स" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +**पूल नोड ऑपरेटर्सची क्लायंट विविधता काय आहे?** + +- किती टक्के नोड ऑपरेटर्स बहुसंख्य कन्सेंसस लेयर (CL) क्लायंट चालवत आहेत? +- मागील संपादनानुसार, Prysm हा कन्सेंसस लेयर क्लायंट आहे जो बहुसंख्य नोड ऑपरेटर्सद्वारे चालवला जातो, जे नेटवर्कसाठी धोकादायक आहे. जर कोणताही CL क्लायंट सध्या नेटवर्कच्या 33% पेक्षा जास्त वापरत असेल, तर आम्ही त्याच्या वापराशी संबंधित डेटाची विनंती करतो. +- हे उत्पादनांचा "डायव्हर्स क्लायंट्स" स्कोअर निश्चित करण्यासाठी वापरले जाते. + +### इतर निकष: जे असल्यास उत्तम {#other-criteria} + +**कोणते युजर इंटरफेस समर्थित आहेत?** + +- उदा., ब्राउझर ॲप, डेस्कटॉप ॲप, मोबाइल ॲप, CLI + +**नोड टूलिंगसाठी, सॉफ्टवेअर क्लायंटमध्ये स्विच करण्याचा सोपा मार्ग प्रदान करते का?** + +- वापरकर्ता टूल वापरून सहज आणि सुरक्षितपणे क्लायंट बदलू शकतो का? + +**SaaS साठी, सेवेद्वारे सध्या किती व्हॅलिडेटर्स चालवले जात आहेत?** + +- यामुळे आम्हाला आतापर्यंतच्या तुमच्या सेवेच्या पोहोचची कल्पना येते. + +## आम्ही परिणाम कसे प्रदर्शित करतो {#product-ordering} + +वरील [समावेशासाठी निकष](#criteria-for-inclusion) प्रत्येक उत्पादन किंवा सेवेसाठी एकत्रित स्कोअर मोजण्यासाठी वापरले जातात. हे विशिष्ट वस्तुनिष्ठ निकष पूर्ण करणारी उत्पादने क्रमवारी लावण्याचे आणि प्रदर्शित करण्याचे एक साधन म्हणून वापरले जाते. जितक्या अधिक निकषांसाठी पुरावा दिला जाईल, तितके उत्पादन उच्च क्रमाने लावले जाईल, आणि टाय झाल्यास लोड झाल्यावर रँडमाइझ केले जाईल. + +या निकषांसाठी कोड लॉजिक आणि वेट्स सध्या आमच्या रेपोमधील [या JavaScript घटकामध्ये](https://github.com/ethereum/ethereum-org-website/blob/dev/src/components/Staking/StakingProductsCardGrid.js#L350) आहेत. + +## तुमचे उत्पादन किंवा सेवा जोडा {#add-product} + +तुम्हाला ethereum.org वर स्टिकिंग उत्पादन किंवा सेवा जोडायची असल्यास, GitHub वर एक इश्यू तयार करा. + + + इश्यू तयार करा + diff --git a/public/content/translations/mr/contributing/adding-wallets/index.md b/public/content/translations/mr/contributing/adding-wallets/index.md new file mode 100644 index 00000000000..58abd7730d5 --- /dev/null +++ b/public/content/translations/mr/contributing/adding-wallets/index.md @@ -0,0 +1,80 @@ +--- +title: "वॉलेट्स जोडणे" +description: "ethereum.org वर वॉलेट जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# वॉलेट्स जोडणे {#adding-wallets} + +आम्ही खात्री करू इच्छितो की आम्ही विविध वैशिष्ट्यांनी युक्त अशा अनेक प्रकारच्या वॉलेट्सची माहिती देऊ, जेणेकरून वापरकर्ते आत्मविश्वासाने Ethereum वापरू शकतील. + +ethereum.org वर वॉलेट जोडण्याचा सल्ला कोणीही देऊ शकतो. जर आमच्याकडून एखादे वॉलेट सुटले असेल, तर कृपया ते सुचवा! + +वॉलेट्स सध्या येथे सूचीबद्ध आहेत: + +- [ethereum.org/wallets/find-wallet/](/wallets/find-wallet/) + +Ethereum मध्ये वॉलेट्स वेगाने बदलत आहेत. आम्ही ethereum.org वर विचारात घेण्यासाठी एक योग्य फ्रेमवर्क तयार करण्याचा प्रयत्न केला आहे परंतु सूचीकरणाचे निकष कालांतराने बदलतील आणि विकसित होतील. + +## निर्णय आराखडा {#the-decision-framework} + +### समावेशासाठी निकष: आवश्यक गोष्टी {#the-must-haves} + +- **सुरक्षिततेची चाचणी केलेले उत्पादन** - ऑडिट, अंतर्गत सुरक्षा टीम, ओपन-सोर्स कोड किंवा इतर कोणत्याही पद्धतीद्वारे असो, तुमच्या वॉलेटची सुरक्षा विश्वसनीय असणे आवश्यक आहे. यामुळे आमच्या वापरकर्त्यांसाठी धोका कमी होतो आणि तुम्ही सुरक्षेला गांभीर्याने घेता हे आम्हाला कळते. +- **सहा महिन्यांहून अधिक काळ “लाइव्ह” असलेले वॉलेट किंवा प्रतिष्ठित ट्रॅक रेकॉर्ड असलेल्या गटाने प्रसिद्ध केलेले वॉलेट** - हे सुरक्षिततेचे आणखी एक लक्षण आहे. गंभीर बग्स आणि एक्सप्लॉइटेशन्स शोधण्यासाठी सहा महिन्यांचा कालावधी योग्य आहे. जे प्रकल्प लवकरच सोडून दिले जातात, असे फोर्क काढून टाकण्यास मदत व्हावी, यासाठी आम्ही सहा महिन्यांचा कालावधी मागतो. +- **एका सक्रिय टीमद्वारे विकसित** - हे गुणवत्ता सुनिश्चित करण्यास मदत करते आणि वापरकर्त्याला त्यांच्या प्रश्नांसाठी समर्थन मिळेल याची खात्री करते. +- **प्रामाणिक आणि अचूक सूची माहिती** - प्रकल्पांकडून सुचवलेल्या कोणत्याही सूचीमध्ये प्रामाणिक आणि अचूक माहिती असणे अपेक्षित आहे. तुमचे उत्पादन "ओपन सोर्स" नसताना तसे घोषित करण्यासारखी, सूची माहिती चुकीची देणारी उत्पादने काढून टाकली जातील. +- **संपर्क व्यक्ती** - बदल झाल्यावर अचूक माहिती मिळविण्यासाठी वॉलेटसाठी संपर्क व्यक्ती असणे आम्हाला खूप मदत करेल. यामुळे भविष्यातील माहिती गोळा करताना ethereum.org अद्यतनित करणे व्यवस्थापित करण्यायोग्य राहील. +- **EIP-1559 (टाइप 2) व्यवहार** - तुमच्या वॉलेटने मेननेट Ethereum वरील व्यवहारांसाठी EIP-1559 (टाइप 2) व्यवहारांना समर्थन दिले पाहिजे. +- **चांगला वापरकर्ता अनुभव** - UX व्यक्तिनिष्ठ असला तरी, जर अनेक मुख्य टीम सदस्यांनी उत्पादनाची चाचणी केली आणि ते वापरण्यास अवघड वाटले, तर आम्ही वॉलेट नाकारण्याचा अधिकार राखून ठेवतो आणि त्याऐवजी सुधारण्यासाठी उपयुक्त सूचना देऊ. हे आमच्या वापरकर्ता बेसचे संरक्षण करण्यासाठी केले जाते, ज्यात बहुतेक नवशिक्यांचा समावेश असतो. +- **Ethereum केंद्रित** - वॉलेटने प्राथमिक Ethereum-केंद्रित अनुभव प्रदान केला पाहिजे. याचा अर्थ Ethereum (किंवा कोणतेही L2) डीफॉल्ट नेटवर्क म्हणून सेट केलेले आहे, ERC मालमत्ता योग्यरित्या समर्थित आहेत, आणि वैशिष्ट्ये Ethereum इकोसिस्टमशी जुळणारी आहेत. UI मध्ये पर्यायी लेयर 1 ला प्राधान्य देणाऱ्या वॉलेट्सची सूची केली जाणार नाही. + +### उत्पादन काढून टाकणे {#product-removals} + +- **अद्ययावत माहिती** - प्रदान केलेल्या माहितीची वैधता आणि प्रासंगिकता सुनिश्चित करण्यासाठी वॉलेट प्रदाते दर 6 महिन्यांनी त्यांच्या वॉलेटची माहिती पुन्हा सादर करण्यास जबाबदार आहेत (जरी त्यांच्या उत्पादनात कोणतेही बदल झाले नसले तरीही). जर उत्पादन टीम असे करण्यात अयशस्वी ठरली, तर ethereum.org त्या प्रकल्पाला पृष्ठावरून काढून टाकू शकते. + +### इतर निकष: असल्यास अधिक चांगले {#the-nice-to-haves} + +- **जागतिक स्तरावर प्रवेशयोग्य** - तुमच्या वॉलेटमध्ये भौगोलिक मर्यादा किंवा KYC आवश्यकता नाहीत ज्या काही लोकांना तुमच्या सेवेत प्रवेश करण्यापासून वगळतात. +- **एकाधिक भाषांमध्ये उपलब्ध** - तुमचे वॉलेट एकाधिक भाषांमध्ये अनुवादित केलेले आहे ज्यामुळे जगभरातील वापरकर्ते ते ॲक्सेस करू शकतात. +- **ओपन सोर्स** - तुमच्या संपूर्ण प्रोजेक्टचा कोडबेस (केवळ मॉड्यूल्स नाही) प्रवेशयोग्य असावा आणि तुम्ही व्यापक समुदायाकडून PR स्वीकारले पाहिजेत. +- **नॉन-कस्टोडियल** - वापरकर्ते त्यांच्या निधीवर नियंत्रण ठेवतात. तुमचे उत्पादन नाहीसे झाल्यास, वापरकर्ते तरीही त्यांच्या निधीत प्रवेश करू शकतात आणि तो हलवू शकतात. +- **हार्डवेअर वॉलेट सपोर्ट** - वापरकर्ते व्यवहार साइन करण्यासाठी त्यांचे हार्डवेअर वॉलेट कनेक्ट करू शकतात. +- **WalletConnect** - वापरकर्ते WalletConnect वापरून dapps शी कनेक्ट होऊ शकतात. +- **Ethereum RPC एंडपॉइंट्स आयात करणे** - वापरकर्ते नोड RPC डेटा आयात करू शकतात, ज्यामुळे त्यांना त्यांच्या आवडीच्या नोडशी किंवा इतर EVM सुसंगत नेटवर्कशी कनेक्ट होता येते. +- **NFTs** - वापरकर्ते वॉलेटमध्ये त्यांचे NFTs पाहू आणि त्यांच्याशी संवाद साधू शकतात. +- **Ethereum ॲप्लिकेशन्सशी कनेक्ट करा** - वापरकर्ते Ethereum ॲप्लिकेशन्सशी कनेक्ट होऊ शकतात आणि वापरू शकतात. +- **स्टेकिंग** - वापरकर्ते थेट वॉलेटद्वारे स्टेक करू शकतात. +- **स्वॅप्स** - वापरकर्ते वॉलेटद्वारे टोकन स्वॅप करू शकतात. +- **मल्टीचेन नेटवर्क्स** - तुमचे वॉलेट वापरकर्त्यांना डीफॉल्टनुसार एकाधिक ब्लॉकचेन नेटवर्क्समध्ये प्रवेश करण्यास समर्थन देते. +- **लेयर 2 नेटवर्क्स** - तुमचे वॉलेट वापरकर्त्यांना डीफॉल्टनुसार लेयर 2 नेटवर्क्समध्ये प्रवेश करण्यास समर्थन देते. +- **गॅस फी सानुकूलित करा** - तुमचे वॉलेट वापरकर्त्यांना त्यांच्या व्यवहाराची गॅस फी (बेस फी, प्रायॉरिटी फी, मॅक्स फी) सानुकूलित करण्याची परवानगी देते. +- **ENS सपोर्ट** - तुमचे वॉलेट वापरकर्त्यांना ENS नावांवर व्यवहार पाठवण्याची परवानगी देते. +- **ERC-20 सपोर्ट** - तुमचे वॉलेट वापरकर्त्यांना ERC-20 टोकन कॉन्ट्रॅक्ट्स आयात करण्याची किंवा आपोआप क्वेरी करून ERC-20 टोकन प्रदर्शित करण्याची परवानगी देते. +- **क्रिप्टो खरेदी करा** - तुमचे वॉलेट वापरकर्त्यांना थेट क्रिप्टो खरेदी आणि ऑनबोर्डिंगसाठी समर्थन देते. +- **फिएटसाठी विक्री करा** - तुमचे वॉलेट वापरकर्त्यांना थेट कार्ड किंवा बँक खात्यात फिएटसाठी विक्री आणि पैसे काढण्यास समर्थन देते. +- **मल्टीसिग** - तुमचे वॉलेट व्यवहार साइन करण्यासाठी एकाधिक स्वाक्षऱ्यांचे समर्थन करते. +- **सामाजिक रिकव्हरी** - तुमचे वॉलेट गार्डियन्सना समर्थन देते आणि वापरकर्ता आपली सीड फ्रेज गमावल्यास या गार्डियन्सचा वापर करून आपले वॉलेट रिकव्हर करू शकतो. +- **समर्पित सपोर्ट टीम** - तुमच्या वॉलेटमध्ये एक समर्पित सपोर्ट टीम आहे जिथे वापरकर्ते समस्या येत असल्यास संपर्क साधू शकतात. +- **शैक्षणिक संसाधने/डॉक्युमेंटेशन** - वापरकर्त्यांना मदत करण्यासाठी आणि शिक्षित करण्यासाठी तुमच्या उत्पादनात एक चांगला ऑनबोर्डिंग अनुभव असावा. किंवा लेख किंवा व्हिडिओंसारख्या कसे-करावे या सामग्रीचा पुरावा. + +## वॉलेट जोडणे {#adding-a-wallet} + +तुम्हाला ethereum.org वर वॉलेट जोडायचे असल्यास, GitHub वर एक इश्यू तयार करा. + + + इश्यू तयार करा + + +## देखभाल {#maintenance} + +Ethereum चे स्वरूप प्रवाही असल्यामुळे, टीम आणि उत्पादने येतात आणि जातात आणि दररोज नवनवीन शोध लागतात, त्यामुळे आम्ही आमच्या सामग्रीची नियमित तपासणी खालील कारणांसाठी करू: + +- सर्व सूचीबद्ध वॉलेट्स आणि dapps अजूनही आमचे निकष पूर्ण करतात याची खात्री करा +- सध्या सूचीबद्ध असलेल्या उत्पादनांपेक्षा आमचे अधिक निकष पूर्ण करणारी सुचवलेली उत्पादने नाहीत, याची पडताळणी करणे + +ethereum.org ओपन-सोर्स समुदायाद्वारे सांभाळले जाते आणि आम्ही हे अद्ययावत ठेवण्यासाठी समुदायावर अवलंबून असतो. सूचीबद्ध वॉलेट्सबद्दल कोणतीही माहिती अद्ययावत करण्याची आवश्यकता असल्याचे तुमच्या लक्षात आल्यास, कृपया [एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=wallet+%3Apurse%3A&template=suggest_wallet.yaml) किंवा [पुल रिक्वेस्ट करा](https://github.com/ethereum/ethereum-org-website/pulls)! + +## वापराच्या अटी {#terms-of-use} + +कृपया आमच्या [वापराच्या अटी](/terms-of-use/) देखील पहा. ethereum.org वरील माहिती केवळ सामान्य माहितीच्या उद्देशाने प्रदान केली आहे. diff --git a/public/content/translations/mr/contributing/content-resources/index.md b/public/content/translations/mr/contributing/content-resources/index.md new file mode 100644 index 00000000000..e2df8589a10 --- /dev/null +++ b/public/content/translations/mr/contributing/content-resources/index.md @@ -0,0 +1,32 @@ +--- +title: "सामग्री संसाधने जोडणे" +lang: mr +description: "ethereum.org वर सामग्री संसाधने सूचीबद्ध करण्यासाठी आमचे निकष" +--- + +# सामग्री संसाधने जोडणे {#adding-content-resources} + +आम्ही Ethereum मधील सर्व गोष्टी समाविष्ट करू शकत नाही म्हणून आम्ही समुदायाने तयार केलेले काही उत्कृष्ट लेख, ट्यूटोरियल, वृत्तपत्रे, जॉब बोर्ड आणि विविध सामग्री संसाधने प्रदर्शित करण्याचा प्रयत्न करतो. हे अनेकदा वापरकर्त्यांना स्वारस्य असलेल्या विषयांवर अधिक सखोल माहिती प्रदान करतात. + +एखाद्या पानावर एखादे सामग्री संसाधन जोडले पाहिजे असे तुम्हाला वाटत असल्यास, ते योग्य ठिकाणी सुचवा. + +## आम्ही कसे ठरवतो {#how-we-decide} + +शिकण्याच्या संसाधनांचे मूल्यांकन खालील निकषांनुसार केले जाईल: + +- सामग्री अद्ययावत आहे का? +- सामग्री पेवॉलच्या मागे आहे का? +- माहिती अचूक आहे का? ती तथ्यावर आधारित आहे की मतावर आधारित आहे? +- लेखक विश्वसनीय आहे का? ते त्यांच्या स्रोतांचा संदर्भ देतात का? +- ही सामग्री असे काही वेगळे मूल्य देते का जे विद्यमान संसाधने/लिंक्स कव्हर करत नाहीत? +- ही सामग्री आमच्या [वापरकर्ता व्यक्तिरेखा](https://www.notion.so/efdn/Ethereum-org-User-Persona-Memo-b44dc1e89152457a87ba872b0dfa366c) पैकी एकाची सेवा करते का? + +--- + +## तुमचे सामग्री संसाधन जोडा {#add-your-content-resource} + +तुम्हाला ethereum.org वर एखादे सामग्री संसाधन जोडायचे असल्यास आणि ते निकष पूर्ण करत असल्यास, GitHub वर एक इश्यू तयार करा. + + + इश्यू तयार करा + diff --git a/public/content/translations/mr/contributing/design-principles/index.md b/public/content/translations/mr/contributing/design-principles/index.md new file mode 100644 index 00000000000..df240df3b7c --- /dev/null +++ b/public/content/translations/mr/contributing/design-principles/index.md @@ -0,0 +1,93 @@ +--- +title: "डिझाइनची तत्त्वे" +lang: mr +description: "ethereum.org च्या डिझाइन आणि सामग्रीच्या निर्णयामागील तत्त्वे" +--- + +# आमची डिझाइनची तत्त्वे {#contributing-to-ethereumorg-} + + नमस्कार, ethereum.org च्या डिझाइन तत्त्वांमध्ये तुमचे स्वागत आहे. ethereum.org ला विकसित आणि सुधारित करण्याच्या चालू प्रक्रियेचा हा एक भाग आहे. + +आमची तत्त्वे साइटचा लुक आणि फील आणि त्यावरील सामग्रीची माहिती देतात. + +तुम्ही [ethereum.org मध्ये योगदान देण्यापूर्वी](/contributing/) हे वाचले पाहिजे. + +## डिझाइनची तत्त्वे म्हणजे काय? {#ways-to-contribute} + +काळजी करू नका, ते खूप सोपे आहेत! **डिझाइनची तत्त्वे** म्हणजे मार्गदर्शक तत्त्वांचा एक संच आहे ज्याचा आम्ही काहीतरी डिझाइन करताना (उदा., तयार करणे, देखरेख करणे किंवा अद्यतनित करणे) संदर्भ घेतो. + +ethereum.org च्या संदर्भात, ही डिझाइन तत्त्वे वेबसाइटने जगासमोर काय प्रतिनिधित्व करावे आणि काय प्रोजेक्ट करावे याचा पाया आहेत. ते महत्त्वाकांक्षी **आणि** कार्यात्मक दोन्ही आहेत. वेबसाइट कशी _दिसते_ एवढेच नाही, तर ती कशी _कार्य करते_ आणि ती एखाद्याला कसे _वाटते_ हे देखील महत्त्वाचे आहे. रंगांपासून ते पेज लेआउटपर्यंत, वेबसाइटवर आम्ही Ethereum बद्दल कसे बोलतो, या सर्व गोष्टी या तत्त्वांद्वारे सूचित केल्या पाहिजेत. + +## प्रत्यक्षातील तत्त्वे {#how-decisions-about-the-site-are-made} + +चला एक उदाहरण पाहूया. तत्त्वांपैकी एक म्हणजे “विश्वसनीय”, याचा अर्थ असा की साइटवर येणाऱ्या अभ्यागतांना असे _वाटले_ पाहिजे आणि _माहित_ असले पाहिजे की ही साइट विश्वासार्ह आहे - अगदी व्यापक Ethereum इकोसिस्टमप्रमाणेच. त्या तत्त्वांतर्गत, आमच्याकडे 3 कार्यात्मक “उप-तत्त्वे” आहेत, ज्या आम्हाला विश्वास आहे की साइटला विश्वसनीय बनवण्यासाठी आम्ही घेऊ शकणारी कृतीशील पावले आहेत: + +- _“फ्रेश”_ म्हणजे, सामग्री अद्ययावत ठेवा. +- _“सामाजिक पुरावा”_ म्हणजे, इकोसिस्टमचा आकार, विविधता आणि क्रियाकलाप दर्शवा (तुम्हाला माहित आहे: Ethereum अपग्रेड प्रगती, DeFi, गेमिंग, सर्व हॅकेथॉन इ.) +- _“सुसंगत”_ म्हणजे, साइटच्या डिझाइनमध्ये आणि लेखनाच्या टोनमध्ये आणि अचूकतेमध्ये सुसंगतता. + +म्हणून जेव्हा आम्ही डिझाइनचे निर्णय किंवा कॉपीरायटिंगचे निर्णय घेत असतो, तेव्हा आम्ही “विश्वसनीय” तत्त्वाचा संदर्भ घेऊ शकतो आणि विचारू शकतो: + +- _“साइट सध्याची माहिती दर्शवते का?”_ +- _“आम्ही इकोसिस्टमचा आकार आणि क्रियाकलाप कसे आणि कुठे दाखवत आहोत?”_ +- _“मी पुनरावलोकन करत असलेल्या समुदाय सदस्याने प्रस्तावित केलेले नवीन योगदान साइटवरील सध्याच्या डिझाइन आणि लेखनाशी सुसंगत आहे का?”_ + +## ethereum.org डिझाइनची तत्त्वे {#contributors} + +### १. प्रेरणादायी {#1-inspirational} + +Ethereum जगाला कसे बदलू शकते याची स्वप्ने पाहण्यासाठी या साइटने वापरकर्त्यांना प्रेरित केले पाहिजे. याने लोकांना Ethereum इकोसिस्टमची साधने आणि ॲप्स एक्सप्लोर करण्यास, खेळण्यास आणि त्यात बदल करण्यास प्रवृत्त केले पाहिजे. + +- **मूलगामी:** या साइटने जगाला अर्थपूर्णपणे बदलण्यासाठी Ethereum चे महत्त्वाकांक्षी ध्येय कळवले पाहिजे. हे स्पष्ट असले पाहिजे की Ethereum केवळ एक नवीन टेक स्टॅक नाही - ते एक परिवर्तनात्मक तंत्रज्ञान आहे. +- **शिक्षणाद्वारे सशक्तीकरण:** साइटने लोकांना शिक्षित केले पाहिजे जेणेकरून ते Ethereum ची क्षमता समजू शकतील, इकोसिस्टममध्ये त्यांचे स्थान शोधू शकतील आणि त्यात सहभागी होण्यासाठी सक्षम वाटतील. + +दृष्य दिशा • सामग्री + +### २. सार्वत्रिक {#2-universal} + +Ethereum हा एक जागतिक, विकेंद्रित प्रकल्प आहे आणि आमचे प्रेक्षक हेच दर्शवतात. ही साइट प्रत्येकासाठी सुलभ असण्याची आणि जगातील अनेक संस्कृतींप्रति संवेदनशील असण्याची आकांक्षा बाळगली पाहिजे. + +- **सुलभ:** साइटने प्रवेशयोग्यता मार्गदर्शक तत्त्वांचे पालन केले पाहिजे - कमी-बँडविड्थ कनेक्शन असलेल्या लोकांसाठी देखील. +- **सरळ:** साइट सोपी आणि सुस्पष्ट असावी. कॉपीमध्ये अशी भाषा वापरू नये ज्याचा चुकीचा अर्थ लावला जाऊ शकतो किंवा भाषांतरात ती हरवून जाऊ शकते. +- **Ethereum बहुआयामी आहे:** Ethereum एक प्रकल्प, एक कोडबेस, एक समुदाय आणि एक दृष्टी आहे. Ethereum वेगवेगळ्या लोकांसाठी वेगवेगळ्या कारणांसाठी मौल्यवान आहे, आणि त्यात सामील होण्याचे अनेक मार्ग आहेत. + +लेखन प्रणाली • रंगाचा वापर • दृष्य दिशा • सामग्री + +### ३. एक चांगली गोष्ट {#3-a-good-story} + +वेबसाइटने एका चांगल्या कथेप्रमाणे कार्य केले पाहिजे. अभ्यागत एका प्रवासावर आहेत आणि तुम्ही योगदान दिलेली सामग्री त्याचाच एक भाग आहे. तुमचे योगदान एका स्पष्ट कथानकात बसले पाहिजे: एक सुरुवात (परिचय/प्रवेश बिंदू), मध्य (शिकलेल्या गोष्टी आणि अंतर्दृष्टींचा संच), आणि शेवट (संबंधित संसाधनांची लिंक किंवा पुढील पायऱ्या). + +- **पदानुक्रमित**: एक स्पष्ट, पदानुक्रमानुसार संरचित माहिती आर्किटेक्चर ethereum.org च्या अभ्यागतांना त्यांची उद्दिष्ट्ये साध्य करण्याच्या प्रयत्नात साइटवर "एक कथा म्हणून" नेव्हिगेट करण्यास मदत करते. +- **एक पायरी:** आम्ही उत्तरे शोधणाऱ्या प्रत्येकासाठी एक पायरी आहोत. आम्ही आधीच अस्तित्वात असलेल्या अनेक स्रोतांना बदलू किंवा त्यांचा पर्याय बनू इच्छित नाही. आम्ही उत्तर देतो आणि विश्वसनीय पुढील पायऱ्या प्रदान करतो. + +वापरकर्ता प्रवास • सामग्री + +### ४. विश्वसनीय {#4-credible} + +लोक Ethereum इकोसिस्टममध्ये त्यांचा परिचय शोधत असतील किंवा ते संशयवादी असू शकतात. तुम्ही संवाद साधताना त्या जबाबदारीची कबुली द्या. हे सुनिश्चित करा की ते दोघेही Ethereum इकोसिस्टममध्ये अधिक आत्मविश्वासाने बाहेर पडतील. + +- **अद्ययावत:** नेहमीच अद्ययावत. +- **सामाजिक पुरावा:** इकोसिस्टमचा आकार, विविधता आणि क्रियाकलाप दर्शवा. +- **सुसंगत:** डिझाइन आणि सामग्रीमधील सुसंगतता विश्वासार्हता दर्शवते. + +दृष्य दिशा • सामग्री + +### ५. सहयोगी सुधारणा {#5-collaborative-improvement} + +ही वेबसाइट अनेक योगदानकर्त्यांचे उत्पादन आहे, जसे की संपूर्ण इकोसिस्टम आहे. + +- **खुले:** संपूर्ण इकोसिस्टममधील सोर्स कोड, प्रक्रिया आणि प्रकल्पांच्या पारदर्शकतेचा उत्सव साजरा करा. +- **विस्तारणीय:** आम्ही जे काही करतो त्यामागे मॉड्युलॅरिटी हे एक मुख्य लक्ष आहे आणि म्हणूनच योगदान देखील मॉड्युलर असले पाहिजे. साइटचे मूळ डिझाइन, घटक कोड आणि अंमलबजावणी भविष्यात ते सहजपणे विस्तारित करण्यास सक्षम असावे. +- **प्रायोगिक:** आम्ही सतत प्रयोग करत आहोत, चाचणी घेत आहोत आणि पुनरावृत्ती करत आहोत. +- **सहयोगी:** हा प्रकल्प आम्हा सर्वांना एकत्र आणतो. +- **शाश्वत:** समुदायाद्वारे दीर्घकालीन देखभालीसाठी तयारी करणे + +तुम्ही आमची डिझाइनची तत्त्वे [आमच्या साइटवर](/) कृतीत पाहू शकता. + +## अभिप्राय द्या {#give-feedback} + +**या दस्तऐवजावर तुमचा अभिप्राय सामायिक करा!** आमच्या प्रस्तावित तत्त्वांपैकी एक म्हणजे “**सहयोगी सुधारणा**”, याचा अर्थ असा की ही वेबसाइट अनेक योगदानकर्त्यांचे उत्पादन असावी असे आम्हाला वाटते. म्हणून त्या तत्त्वाच्या भावनेने, आम्ही ही डिझाइन तत्त्वे Ethereum समुदायासोबत शेअर करू इच्छितो. + +जरी ही तत्त्वे ethereum.org वेबसाइटवर केंद्रित असली तरी, आम्हाला आशा आहे की त्यापैकी बरीच तत्त्वे एकूणच Ethereum इकोसिस्टमच्या मूल्यांचे प्रतिनिधित्व करतात. कदाचित तुम्हाला त्यापैकी काही तुमच्या स्वतःच्या प्रोजेक्टमध्ये समाविष्ट करायचे असतील! + +[Discord server](https://discord.gg/ethereum-org) वर किंवा [एक समस्या तयार करून](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) आम्हाला तुमचे विचार कळवा. diff --git a/public/content/translations/mr/contributing/design/adding-design-resources/index.md b/public/content/translations/mr/contributing/design/adding-design-resources/index.md new file mode 100644 index 00000000000..c7aaa5ad500 --- /dev/null +++ b/public/content/translations/mr/contributing/design/adding-design-resources/index.md @@ -0,0 +1,69 @@ +--- +title: "डिझाइन संसाधने जोडणे" +description: "ethereum.org वर डिझाइन सामग्रीची गुणवत्ता सुनिश्चित करण्यासाठी मार्गदर्शक तत्त्वे आणि आवश्यकता" +lang: mr +--- + +# डिझाइन संसाधने जोडणे {#adding-design-resources} + +कोणीही [web3 पृष्ठातील डिझाइन आणि UX](/developers/docs/design-and-ux/) मध्ये नवीन डिझाइन सामग्री सुचवू शकतो. + +लक्षात ठेवा की या पृष्ठाचे लक्ष महत्वाकांक्षी web3 डिझाइनर्सना वापरकर्ता मूल्य प्रदान करण्यावर आहे. डिझाइन विभाग तुमच्या सेवा, उत्पादने किंवा प्लॅटफॉर्मची जाहिरात करण्यासाठी नाही. + +माहितीचा उच्च दर्जा राखला जाईल आणि मौल्यवान माहितीचा प्रचार केला जाईल हे सुनिश्चित करण्यासाठी, आम्ही एक सूची धोरण स्थापित केले आहे: + +## संशोधन अभ्यास आणि डॅशबोर्ड {#Research-studies} + +1. उत्तम कार्यपद्धती + +अ. कार्यपद्धतीने डेटा कसा गोळा केला हे स्पष्टपणे परिभाषित केले पाहिजे. + +ब. संशोधनात सहभागी झालेल्यांची संख्या नमूद करावी. + +क. वापरलेल्या संशोधन पद्धतींचे वर्णन केले पाहिजे. + +2. Web3 डिझाइनर्स आणि सामान्य डिझाइन वापर प्रकरणांशी सुसंगतता + +अ. संशोधनाचा विषय web3 डिझाइनर्ससाठी संबंधित असावा आणि सामान्य डिझाइन वापर प्रकरणांना संबोधित करणारा असावा. + +3. अंतर्दृष्टी देण्यावर लक्ष केंद्रित करा + +अ. मजकूराचा प्राथमिक उद्देश एखाद्या विशिष्ट प्रकल्प किंवा कंपनीचा प्रचार करण्याऐवजी अंतर्दृष्टी सामायिक करणे हा असावा. + +## लेख {#Articles} + +1. Web3 डिझाइनर्स/संशोधक आणि सामान्य Web3 डिझाइन वापर प्रकरणांशी सुसंगतता + +अ. लेखाचा विषय web3 डिझाइनर्स आणि संशोधकांसाठी समर्पक असावा, जो सामान्य web3 डिझाइन वापर प्रकरणांवर लक्ष केंद्रित करतो. + +2. मूलभूत लेखन गुणवत्ता + +अ. लेख व्याकरण आणि स्पेलिंगच्या चुकांपासून मुक्त असावा. + +ब. मुख्य अंतर्दृष्टी आणि शिकवण देण्यावर भर दिला पाहिजे. + +क. लेखन संक्षिप्त आणि मुद्द्याला धरून असावे. + +3. मजकूराचा उद्देश + +अ. लेखाचा प्राथमिक उद्देश एखाद्या विशिष्ट प्रकल्प किंवा कंपनीचा प्रचार करण्याऐवजी अंतर्दृष्टी सामायिक करणे हा असावा. + +## समुदाय / DAOs {#Communities-and-DAOs} + +1. वेबसाइटवर DAO/समुदायात कसे सामील व्हावे हे स्पष्टपणे सूचित केले पाहिजे + +2. सदस्यत्वाचे स्पष्ट फायदे + +अ. सदस्य बनण्याचे फायदे प्रामुख्याने प्रदर्शित केले पाहिजेत. + +**उदाहरणे**: कामावर अभिप्राय मिळवणे, नोकरीच्या संधी किंवा बाउंटी मिळवणे, डिझाइन आणि संशोधनातील अंतर्दृष्टी सामायिक करणे. + +3. Discord वर सक्रिय आणि उत्साही संवाद + +अ. Discord समुदायाने उत्साही आणि व्यस्त संवाद दर्शविला पाहिजे. + +ब. समुदाय टिकवून ठेवण्यासाठी आणि चर्चा सुलभ करण्यासाठी नियंत्रकांनी सक्रियपणे सहभागी असले पाहिजे. + +क. समुदायाने गेल्या दोन आठवड्यांत मौल्यवान आणि उत्पादक संभाषणांचा ट्रॅक रेकॉर्ड दर्शविला पाहिजे. + +या निकषांचे पालन करून, आम्ही आमच्या समुदायामध्ये एक समृद्ध आणि ज्ञान-सामायिक करणारे वातावरण तयार करण्याचे ध्येय ठेवतो. आम्हाला विश्वास आहे की हे व्हाइट लिस्टिंग धोरण आमच्या वापरकर्त्यांना विश्वसनीय, संबंधित आणि अंतर्दृष्टीपूर्ण संसाधनांमध्ये प्रवेश मिळेल याची खात्री करेल. आमच्या प्लॅटफॉर्ममधील सामग्रीची गुणवत्ता राखण्यासाठी तुमच्या समजूतदारपणाबद्दल आणि सहकार्याबद्दल धन्यवाद. diff --git a/public/content/translations/mr/contributing/design/index.md b/public/content/translations/mr/contributing/design/index.md new file mode 100644 index 00000000000..30ee73096cc --- /dev/null +++ b/public/content/translations/mr/contributing/design/index.md @@ -0,0 +1,77 @@ +--- +title: "डिझाइन योगदान" +description: "ethereum.org मध्ये डिझाइन योगदान" +lang: mr +--- + +# ethereum.org मध्ये डिझाइन योगदान {#design-contributions} + +डिझाइन हा कोणत्याही प्रकल्पाचा एक महत्त्वाचा घटक आहे, आणि तुमचा वेळ आणि डिझाइन कौशल्ये ethereum.org ला समर्पित करून, तुम्ही आमच्या अभ्यागतांसाठी वापरकर्ता अनुभव सुधारण्यास मदत करू शकता. ओपन-सोर्स प्रोजेक्टमध्ये योगदान दिल्याने तुम्हाला संबंधित अनुभव मिळवण्याची आणि सहयोगी वातावरणात तुमची कौशल्ये विकसित करण्याची संधी मिळते. तुम्हाला इतर डिझाइनर, डेव्हलपर आणि समुदाय सदस्यांसोबत काम करण्याची संधी मिळेल, ज्यांच्यापैकी प्रत्येकाचे स्वतःचे अद्वितीय दृष्टीकोन आणि अंतर्दृष्टी असतील. + +शेवटी, तुमच्या डिझाइन कौशल्यांचे प्रदर्शन करणारा एक वैविध्यपूर्ण आणि प्रभावी पोर्टफोलिओ तयार करण्याचा हा एक उत्तम मार्ग आहे. + +## योगदान कसे करावे? + +###  सुरुवातीच्या डिझाइन प्रोटोटाइपवर अभिप्राय द्या {#design-critique} + +आम्हाला कधीकधी आमच्या कच्च्या कल्पनांची चाचणी घेण्यासाठी मदतीची आवश्यकता असते. कोणत्याही तांत्रिक ज्ञानाशिवाय योगदान देण्याचा हा एक उत्तम मार्ग आहे. + +1. डिझाइन टीम [Discord](https://discord.com/invite/ethereum-org) आणि [GitHub](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) वर मॉकअप डिझाइन शेअर करेल. +2. टिप्पण्यांच्या फंक्शनद्वारे अभिप्राय देण्यासाठी तुम्हाला डिझाइनमधून मार्गदर्शन केले जाईल. +3. परिणाम GitHub इश्यूमध्ये शेअर केला जाईल आणि नंतर टीमद्वारे बंद केला जाईल. + +###  सर्वेक्षण संशोधनात सहभागी व्हा {#answer-surveys} + +आमच्या वेबसाइटवर खालीलप्रकारे अभिप्राय द्या: + +1. ethereum.org ला भेट देणे आणि पृष्ठांमधून वाचणे. +2. उजव्या कोपऱ्यातील फीडबॅक विजेटवर क्लिक करणे आणि डिझाइन व सामग्री-संबंधित प्रश्नांची उत्तरे देणे. +3. मुक्त स्वरूपाच्या प्रश्नांवर लक्ष केंद्रित करा. + +###  वेबसाइटवर डिझाइन संबंधित समस्या शोधा आणि त्यांची तक्रार करा {#report-design-issues} + +ethereum.org ही अनेक वैशिष्ट्ये आणि सामग्रीसह वेगाने वाढणारी वेबसाइट आहे. काही UI सहजपणे कालबाह्य होऊ शकतात किंवा त्यात सुधारणा केली जाऊ शकते. तुम्हाला असे कोणतेही उदाहरण आढळल्यास, कृपया त्याची तक्रार करा जेणेकरून ते आमच्या लक्षात येईल. + +1. वेबसाइटमधून जा आणि तिच्या डिझाइनकडे लक्ष द्या. +2. तुम्हाला कोणतीही व्हिज्युअल किंवा UX समस्या दिसल्यास स्क्रीनशॉट घ्या आणि नोट्स घ्या. +3. [बग रिपोर्ट](https://github.com/ethereum/ethereum-org-website/issues/new/choose) वापरून आढळलेल्या समस्यांची तक्रार करा. + +###  डिझाइन बदलांचा प्रस्ताव द्या {#propose-design-changes} + +तुम्ही डिझाइन आव्हाने स्वीकारण्यास सोयीस्कर असाल, तर तुम्ही आमच्या GitHub इश्यूज बोर्डला भेट देऊ शकता आणि [डिझाइन-संबंधित समस्यांसाठी](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) फिल्टर करू शकता. + +1. आमच्या वेबसाइटमधून जा आणि तिच्या डिझाइनकडे लक्ष द्या किंवा आमच्या GitHub रेपॉजिटरीवर जा आणि [“Design required” टॅग](https://github.com/ethereum/ethereum-org-website/labels/design%20required%20%F0%9F%8E%A8) ने ध्वजांकित केलेल्या समस्यांचे पुनरावलोकन करा. +2. सोल्यूशनवर विचार करा आणि ते डिझाइन करा. (शक्यतो आमची [डिझाइन सिस्टीम](https://www.figma.com/community/file/1134414495420383395) वापरून). +3. संबंधित GitHub इश्यूमध्ये सोल्यूशनचा प्रस्ताव द्या किंवा [एक नवीन तयार करा.](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=feature+%3Asparkles%3A&template=feature_request.yaml&title=Feature+request) +4. डिझाइन टीमच्या पुनरावलोकनाची प्रतीक्षा करा. + +###  एकत्र मिळून डिझाइन सिस्टम तयार करा {#Contribute-to-design-system} + +आमची डिझाइन प्रणाली ethereum.org चे डिझाइन करणे मजेदार आणि सोपे करते. तुम्ही अनुभवी डिझाइनर असल्यास, वेबसाइटसाठी अनेक घटक तयार करण्यात तुम्ही आम्हाला मदत करू शकता. + +1. GitHub वर [डिझाइन सिस्टम बोर्ड](https://github.com/ethereum/ethereum-org-website/labels/design%20system) मधून काम करण्यासाठी एक इश्यू निवडा किंवा नवीन तयार करा. +2. निवडलेला इश्यू तुम्हाला नियुक्त करण्याची विनंती करा. +3. Figma मध्ये विनंती केलेल्या घटकाचे डिझाइन करण्यास प्रारंभ करा. +4. एकदा तुम्हाला पुनरावलोकन किंवा मार्गदर्शनाची आवश्यकता असेल तेव्हा ते GitHub वर डिझाइन टीमसोबत शेअर करा. +5. डिझाइन टीम पुनरावलोकन करेल. +6. डिझाइन टीम मुख्य फाइलमध्ये बदल समाविष्ट करेल आणि फाइल समुदायासाठी प्रकाशित करेल. + +###  वेबसाइटवर डिझाइन-संबंधित सामग्री लिहा {#write-design-articles} + +इथेरियम डेव्हलपर समुदाय मजबूत आहे, परंतु डिझाइन समुदाय थोडा मागे पडत आहे. तुम्ही web3 चे ज्ञान असलेले डिझायनर असाल, तर कृपया तुमची शिकवण मोठ्या समुदायासोबत शेअर करण्याचा विचार करा जेणेकरून आपण सर्व एकत्र वाढू आणि सुधारू शकू; आमच्याकडे [इथेरियमसाठी डिझाइन करण्यावर एक पृष्ठ आहे](/developers/docs/design-and-ux/) ज्यात तुम्ही योगदान देऊ शकता. तुम्ही आमची [सूची धोरणे](/contributing/design/adding-design-resources) देखील तपासू शकता. + +1. ethereum.org वर कव्हर केले पाहिजेत आणि या क्षेत्रातील डिझाइनर्ससाठी फायदेशीर ठरतील अशा डिझाइन विषयांवर विचार करा. +2. आमच्या GitHub रेपॉजिटरीवर जा आणि विषय प्रस्तावित करणारा [एक इश्यू तयार करा](https://github.com/ethereum/ethereum-org-website/issues/new) (अजून सामग्री लिहू नका). +3. डिझाइन टीमच्या मंजुरीची प्रतीक्षा करा. +4. एकदा मंजूर झाल्यावर, सामग्री लिहा. +5. ते संबंधित GitHub इश्यूमध्ये सबमिट करा. + +###  नवीन चित्रे काढा {#prepare-illustrations} + +अमूर्त विषय स्पष्ट करण्यासाठी व्हिज्युअलायझेशन हे सर्वात शक्तिशाली साधनांपैकी एक आहे. आकृत्या आणि इन्फोग्राफिक्स जोडून प्रचंड क्षमता आहे. शेवटी, एक चित्र हजार शब्द बोलू शकते. + +1. आमच्या वेबसाइटवर जा आणि अशी पृष्ठे पहा जिथे काही नवीन इन्फोग्राफिक्स जोडले जाऊ शकतात. +2. चित्रण शैली आमच्या [मालमत्तेशी](/assets/) जुळते याची खात्री करा. +3. आमच्या GitHub रेपॉजिटरीवर जा आणि चित्र प्रस्तावित करणारा [एक इश्यू तयार करा](https://github.com/ethereum/ethereum-org-website/issues/new). +4. डिझाइन टीम त्याचे पुनरावलोकन करेल. +5. आम्ही नवीन प्रतिमा लागू करण्यासाठी डेव्हलपरला विचारण्यासाठी एक नवीन इश्यू तयार करतो. diff --git a/public/content/translations/mr/contributing/index.md b/public/content/translations/mr/contributing/index.md new file mode 100644 index 00000000000..5c60d520c2c --- /dev/null +++ b/public/content/translations/mr/contributing/index.md @@ -0,0 +1,120 @@ +--- +title: "योगदान करा" +description: "ethereum.org मध्ये योगदान देण्याच्या विविध मार्गांबद्दल जाणून घ्या" +lang: mr +--- + +# ethereum.org मध्ये योगदान देणे 🦄 {#contributing-to-ethereumorg} + +Ethereum.org हा एक ओपन-सोर्स चालवला जाणारा प्रकल्प आहे ज्यात **12,000+** योगदानकर्ते आहेत जे वेबसाइटचे भाषांतर, लेखन, डिझाइन आणि देखरेख करण्यास मदत करतात. + +आम्ही एक स्वागतशील समुदाय आहोत जो तुम्हाला Ethereum इकोसिस्टममध्ये वाढण्यास आणि शिक्षित होण्यास मदत करेल, तसेच अर्थपूर्ण योगदान देण्यास आणि संबंधित व्यावहारिक अनुभव मिळविण्यात मदत करेल! + +## योगदान देण्याचे मार्ग {#ways-to-contribute} + +**भाषांतरे** + +- [भाषांतर कार्यक्रमात सामील व्हा](/contributing/translation-program/) – आम्हाला ethereum.org नवीन भाषांमध्ये आणण्यास मदत करा + +**डेव्हलपमेंट** + +- [एखाद्या खुल्या इश्यूवर काम करा](https://github.com/ethereum/ethereum-org-website/issues) – आम्ही ओळखलेले काम जे करणे आवश्यक आहे + +**डिझाइन** + +- [वेबसाइट डिझाइन करण्यास मदत करा](/contributing/design/) – सर्व स्तरांचे डिझाइनर वेबसाइट सुधारण्यासाठी योगदान देऊ शकतात + +**कंटेंट** + +- [कंटेंट तयार/संपादित करा](/contributing/#how-to-update-content) – नवीन पानांची सूचना द्या किंवा जे आधीपासून आहे त्यात बदल करा +- [समुदाय संसाधने जोडा](/contributing/content-resources/) – एखाद्या संबंधित पानावर उपयुक्त लेख किंवा संसाधन जोडा +- [एका डिझाइन संसाधनाची सूचना द्या](/contributing/design/adding-design-resources/) – उपयुक्त डिझाइन संसाधने जोडा, अपडेट करा आणि हटवा +- [क्विझ](/contributing/quizzes/) – संबंधित पानासाठी क्विझ प्रश्न बँक जोडा, अपडेट करा आणि हटवा + +**फीचर कल्पना** + +- [फीचरची विनंती करा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=Type%3A+Feature&template=feature_request.yaml&title=) – नवीन फीचर किंवा डिझाइनसाठी तुमच्याकडे असलेल्या कोणत्याही कल्पनांबद्दल आम्हाला कळवा + +**उत्पादन सूची** + +- [एक्स्चेंज जोडा](/contributing/adding-exchanges/) – आमच्या [एक्स्चेंज फाइंडर](/get-eth/#country-picker) मध्ये एक्सचेंज जोडा +- [उत्पादन जोडा](/contributing/adding-products/) – संबंधित पानावर एक dApp किंवा वॉलेट जोडा +- [डेव्हलपर टूल्स जोडा](/contributing/adding-developer-tools/) – संबंधित पानावर एक डेव्हलपर टूल जोडा +- [एक लेयर 2 जोडा](/contributing/adding-layer-2s/) – संबंधित पानावर एक लेयर 2 जोडा +- [स्टेकिंग उत्पादन किंवा सेवा जोडा](/contributing/adding-staking-products/) – सोलो स्टेकिंग, पूल्ड स्टेकिंग किंवा स्टेकिंग ॲज अ सर्व्हिस सुलभ करण्यास मदत करणारा प्रकल्प जोडा +- [वॉलेट जोडा](/contributing/adding-wallets/) – [वॉलेट शोधा पानासाठी](/wallets/find-wallet/) एक वॉलेट जोडा +- [आमच्या DeSci पानासाठी एका प्रकल्पाची सूचना द्या](/contributing/adding-desci-projects/) – Ethereum वर तयार केलेला एक प्रकल्प जोडा जो विकेंद्रित विज्ञानात योगदान देतो + +काही प्रश्न आहेत? 🤔 आमच्या [Discord सर्व्हर](https://discord.gg/ethereum-org) मध्ये सामील व्हा + +## योगदान सुरू करण्यासाठी चांगली पहिली कामे + +ही काही सध्याची कामे आहेत जी तुम्ही आम्हाला सोडविण्यात मदत करू शकता आणि त्यांची जबाबदारी घेऊ शकता. बहुतेक कामांसाठी तुम्हाला GitHub खात्याची आवश्यकता असेल कारण वेबसाइटमधील बहुतेक बदल GitHub द्वारे केले जातात. + + + +सर्व कामे पहा + +## ethereum.org वर कसे काम करावे {#how-to-update-content} + +तुम्ही [भाषांतर कार्यक्रमात](/contributing/translation-program/) योगदान देऊ इच्छित असल्यास, आम्ही तुम्हाला [Crowdin](https://crowdin.com/project/ethereum-org) वर खाते तयार करण्यास सांगतो. इतर सर्व गोष्टींसाठी – वेबसाइटवर कंटेंट किंवा व्हिज्युअल जोडणे किंवा संपादित करणे, बग्स दुरुस्त करणे, खुल्या कामांवर काम करणे – यासाठी तुम्हाला [GitHub](https://github.com/) खात्याची आवश्यकता असेल. + +सर्व अपडेट्स GitHub पीआर प्रक्रियेद्वारे केले जातात. याचा अर्थ तुम्ही वेबसाइटची स्थानिक प्रत तयार करता, तुमचे बदल करता आणि तुमचे बदल विलीन करण्याची विनंती करता. तुम्ही हे यापूर्वी कधीही केले नसेल, तर आमच्या [GitHub रिपॉझिटरी](https://github.com/ethereum/ethereum-org-website)च्या तळाशी असलेल्या सूचनांचे पालन करा. + +तुम्हाला कोणत्याही गोष्टीवर काम करण्यासाठी परवानगीची आवश्यकता नाही, परंतु तुम्ही काय करण्याची योजना आखत आहात हे आम्हाला कळवणे नेहमीच उत्तम असते. तुम्ही हे खालीलप्रमाणे करू शकता: + +- [GitHub](https://github.com/ethereum/ethereum-org-website) मधील एखाद्या इश्यू किंवा पीआरवर टिप्पणी करून +- आमच्या [Discord सर्व्हर](https://discord.gg/ethereum-org) वर मेसेज करून + +योगदान देण्यापूर्वी, तुम्ही खालील गोष्टींशी परिचित आहात याची खात्री करा: + +- [ethereum.org ची विकसित होणारी दृष्टी](/about/) +- आमची [डिझाइन तत्त्वे](/contributing/design-principles/) +- आमची [शैली मार्गदर्शक](/contributing/style-guide/) +- आमची [आचारसंहिता](/community/code-of-conduct) + +## साइटबद्दलचे निर्णय कसे घेतले जातात {#how-decisions-about-the-site-are-made} + +वैयक्तिक पीआर, डिझाइनचा विकास आणि मोठे अपग्रेड याबद्दलचे निर्णय Ethereum इकोसिस्टममधील एका टीमद्वारे घेतले जातात. या टीममध्ये प्रकल्प व्यवस्थापक, डेव्हलपर, डिझाइनर, मार्केटिंग आणि कम्युनिकेशन आणि विषय तज्ञांचा समावेश आहे. प्रत्येक निर्णयाला समुदायाच्या इनपुटद्वारे माहिती दिली जाते: त्यामुळे कृपया इश्यूजमध्ये प्रश्न विचारा, पीआर सबमिट करा किंवा टीमशी संपर्क साधा: + +- [website@ethereum.org](mailto:website@ethereum.org) +- [@ethdotorg](https://twitter.com/ethdotorg) +- [Discord सर्व्हर](https://discord.gg/ethereum-org) + +### वाङ्मयचौर्यावर एक टीप {#plagiarism} + +ethereum.org मध्ये कोणतीही कंटेंट किंवा साहित्य योगदान देताना फक्त तुमचे मूळ काम किंवा वापरण्याची परवानगी असलेली कंटेंट वापरा. Ethereum इकोसिस्टममधील अनेक प्रकल्प ओपन-सोर्स परवाना वापरतात जे माहितीचे विनामूल्य शेअरिंग करण्याची परवानगी देतात. तथापि, तुम्हाला ही माहिती सापडत नसल्यास, ती ethereum.org मध्ये जोडण्याचा प्रयत्न करू नका. वाङ्मयचौर्य मानल्या गेलेल्या कोणत्याही पुल रिक्वेस्ट नाकारल्या जातील. + +## ओपन-सोर्ससाठी नवीन आहात? {#new-to-open-source} + +आमच्या GitHub रिपॉझिटरीवर कमी अडथळे असलेले इश्यूज आहेत, जे विशेषतः ओपन-सोर्समध्ये नवीन असलेल्या डेव्हलपर्ससाठी डिझाइन केलेले आहेत आणि त्यांना [गुड फर्स्ट इश्यू](https://github.com/ethereum/ethereum-org-website/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) असे लेबल केलेले आहे. + +## तुमचा ऑनचेन अचिव्हमेंट टोकन (OAT) क्लेम करा {#oat} + +तुमचे योगदान ethereum.org मध्ये विलीन झाल्यास, तुम्हाला [Galxe](https://app.galxe.com/quest/ethereumorg) वर एक विशेष बॅज क्लेम करण्याची संधी मिळेल. ऑनचेन अचिव्हमेंट टोकन (OAT) हा एक पुरावा आहे की तुम्ही इकोसिस्टमला थोडे अधिक अद्भुत बनवण्यासाठी मदत केली आहे. + +[OATs बद्दल अधिक](https://help.galxe.com/en/articles/9645630-create-quest-rewards#h_1c5d63ba03) + +### कसे क्लेम करावे + +1. आमच्या [Discord सर्व्हर](https://discord.gg/ethereum-org) मध्ये सामील व्हा. +2. `#🥇 | proof-of-contribution` चॅनलमध्ये तुमच्या योगदानाची लिंक पेस्ट करा. +3. आमच्या टीममधील सदस्य तुम्हाला तुमच्या OAT ची लिंक पाठवेपर्यंत प्रतीक्षा करा. +4. तुमचा OAT क्लेम करा! + +OATs क्लेम करण्यासाठी तुम्ही फक्त सेल्फ-कस्टडी वॉलेट्स वापरावे. एक्स्चेंज खाती किंवा इतर खाती ज्यांच्या प्रायव्हेट की तुमच्याकडे नाहीत ती वापरू नका, कारण ती तुम्हाला तुमचे OATs ऍक्सेस आणि व्यवस्थापित करण्याची परवानगी देणार नाहीत. + +## तुमचा GitPOAP क्लेम करा {#claim-gitpoap} + +GitPOAP तुमच्या विलीन झालेल्या योगदानाला आपोआप ओळखेल आणि तुम्हाला त्यांच्या प्लॅटफॉर्मवरच एक वेगळा अद्वितीय योगदानकर्त्यांचा POAP मिंट करू देईल! + +### कसे क्लेम करावे {#how-to-claim} + +1. [GitPOAP](https://www.gitpoap.io) ला भेट द्या. +2. तुमच्या वॉलेटने किंवा साइन-इन पर्यायाद्वारे तुमच्या ईमेलने कनेक्ट करा. +3. तुम्ही पात्र आहात की नाही हे तपासण्यासाठी तुमचे GitHub वापरकर्तानाव, ETH ॲड्रेस, ENS नावे किंवा कोणताही GitPOAP शोधा. +4. तुमचे GitHub खाते पात्र असेल, तर तुम्ही GitPOAP मिंट करू शकाल! + +## योगदानकर्ते {#contributors} + + diff --git a/public/content/translations/mr/contributing/quizzes/index.md b/public/content/translations/mr/contributing/quizzes/index.md new file mode 100644 index 00000000000..55a0f9cc442 --- /dev/null +++ b/public/content/translations/mr/contributing/quizzes/index.md @@ -0,0 +1,62 @@ +--- +title: "क्विझ जोडणे" +description: "ethereum.org वर क्विझ जोडताना आम्ही वापरत असलेले धोरण" +lang: mr +--- + +# क्विझ {#quizzes} + +क्विझ ही वापरकर्त्यांसाठी त्यांनी नुकत्याच वाचलेल्या पानावरील मजकूर समजला आहे की नाही हे पाहण्यासाठी स्वतःची चाचणी घेण्याची एक संधी आहे. प्रश्न केवळ पानावरील प्रदान केलेल्या मजकूरावर आधारित असावेत आणि पानावरील उल्लेख नसलेल्या माहितीबद्दल विचारू नयेत. + +प्रश्नांची रचना खालीलप्रमाणे आहे. प्रश्नाची सूचना, 1 बरोबर उत्तर आणि ते बरोबर का आहे याचे स्पष्टीकरण, 3 चुकीची उत्तरे आणि ती चुकीची का आहेत याचे स्पष्टीकरण. + +सध्याच्या क्विझची काही उदाहरणे येथे आढळू शकतात: + +- [लेयर 2](/layer-2) +- [NFT](/nft/) +- [इथेरियम म्हणजे काय?](/what-is-ethereum/) +- [ETH म्हणजे काय?](/what-is-ether/) + +## एक शिकण्याची क्विझ जोडणे + +जर एखादे पान असेल ज्यासाठी शिकण्याची क्विझ तयार केली गेली नसेल, तर कृपया त्यासाठी [एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml). + +कृपया खालील माहिती द्या: + +- ज्या पानावर तुम्हाला क्विझ जोडायची आहे ते पान +- खालील माहितीसह ५ प्रश्न: + - पानाचा तो विभाग ज्यावर प्रश्न आधारित आहे + - प्रश्नाची सूचना + - १ बरोबर उत्तर आणि ते बरोबर का आहे याचे स्पष्टीकरण + - ३ चुकीची उत्तरे, प्रत्येकासह ते चुकीचे का आहेत याचे स्पष्टीकरण + +## एक क्विझ प्रश्न जोडणे + +जर तुम्हाला क्विझसाठी प्रश्न बँकेत एखादा प्रश्न जोडायचा असेल, तर कृपया [एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) आणि खालील माहिती द्या: + +- ज्या पानावर तुम्हाला क्विझ प्रश्न जोडायचा आहे ते पान +- प्रत्येक प्रश्नासाठी खालील माहिती द्या: + - पानाचा तो विभाग ज्यावर प्रश्न आधारित आहे + - प्रश्नाची सूचना + - १ बरोबर उत्तर आणि ते बरोबर का आहे याचे स्पष्टीकरण + - ३ चुकीची उत्तरे, प्रत्येकासह ते चुकीचे का आहेत याचे स्पष्टीकरण + +## एक क्विझ प्रश्न अद्यतनित करणे + +जर तुम्हाला क्विझसाठी प्रश्न बँकेतील एखादा प्रश्न अद्यतनित करायचा असेल, तर कृपया [एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) आणि खालील माहिती द्या: + +- ज्या पानावर तुम्हाला क्विझ प्रश्न अद्यतनित करायचा आहे ते पान +- अद्यतनित केल्या जाणाऱ्या प्रत्येक प्रश्नासाठी, खालील माहिती द्या: + - पानाचा तो विभाग ज्यावर प्रश्न आधारित आहे + - तुम्हाला अद्यतनित करायच्या असलेल्या प्रश्नाची सूचना + - अद्यतनित प्रश्नाची सूचना + - १ बरोबर उत्तर आणि ते बरोबर का आहे याचे स्पष्टीकरण + - ३ चुकीची उत्तरे, प्रत्येकासह ते चुकीचे का आहेत याचे स्पष्टीकरण + +## एक क्विझ प्रश्न काढून टाकणे + +जर एखाद्या प्रश्नासाठीचा मजकूर पानावर अस्तित्वात नसेल आणि तो काढून टाकण्याची आवश्यकता असेल, तर कृपया प्रश्न काढून टाकण्यासाठी [एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues/new?assignees=&labels=&template=suggest_quiz.yaml) आणि खालील माहिती द्या: + +- ज्या पानावरून तुम्हाला क्विझ प्रश्न हटवायचा आहे ते पान +- तुम्हाला हटवायचा असलेला प्रश्न +- प्रश्न का काढून टाकावा याचे आवश्यक असल्यास स्पष्टीकरण diff --git a/public/content/translations/mr/contributing/translation-program/faq/index.md b/public/content/translations/mr/contributing/translation-program/faq/index.md new file mode 100644 index 00000000000..9879b844cc2 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/faq/index.md @@ -0,0 +1,119 @@ +--- +title: "भाषांतर कार्यक्रम नेहमी विचारले जाणारे प्रश्न (FAQ)" +lang: mr +description: "ethereum.org भाषांतर कार्यक्रमाबद्दल नेहमी विचारले जाणारे प्रश्न" +--- + +# ethereum.org भाषांतर मार्गदर्शक {#translating-ethereum-guide} + +तुम्ही भाषांतर कार्यक्रमासाठी नवीन असाल आणि सहभागी होण्यास संकोच करत असाल, तर येथे काही नेहमी विचारले जाणारे प्रश्न (FAQs) आहेत जे तुम्हाला सुरुवात करण्यास मदत करू शकतात. सर्वात सामान्य प्रश्नांची उत्तरे शोधण्यासाठी हे मार्गदर्शक वापरा. + +## ethereum.org चे भाषांतर करण्यासाठी मला मोबदला मिळू शकतो का? {#compensation} + +Ethereum.org ही एक मुक्त-स्रोत वेबसाइट आहे, याचा अर्थ असा की कोणीही त्यात सहभागी होऊन योगदान देऊ शकते. + +ethereum.org भाषांतर कार्यक्रम हा त्याचाच एक विस्तार आहे आणि तो समान तत्त्वज्ञान लक्षात घेऊन आयोजित केला आहे. + +भाषांतर कार्यक्रमाचे उद्दिष्ट Ethereum सामग्री प्रत्येकासाठी उपलब्ध करून देणे आहे, मग ते कोणतीही भाषा बोलत असोत. हे कोणत्याही द्विभाषिक व्यक्तीला Ethereum परिसंस्थेत सामील होण्याची आणि सुलभ मार्गाने योगदान देण्याची संधी देते. + +या कारणास्तव, भाषांतर कार्यक्रम खुला आणि ऐच्छिक आहे, आणि सहभागासाठी कोणताही मोबदला दिला जात नाही. जर आम्ही भाषांतरकारांना त्यांच्या भाषांतरित शब्दांच्या संख्येनुसार मोबदला देणार असतो, तर आम्ही केवळ पुरेसा भाषांतर अनुभव असलेल्यांना (व्यावसायिक भाषांतरकार) भाषांतर कार्यक्रमात सामील होण्यासाठी आमंत्रित करू शकलो असतो. यामुळे भाषांतर कार्यक्रम वगळणारा ठरेल आणि आम्ही निर्धारित ध्येय गाठण्यापासून रोखले जाऊ, विशेषतः: प्रत्येकाला सहभागी होण्याची आणि परिसंस्थेत सामील होण्याची परवानगी देणे. + +आमचे योगदानकर्ते Ethereum परिसंस्थेत यशस्वी व्हावेत यासाठी आम्ही सर्वतोपरी प्रयत्न करतो; अनेक गैर-आर्थिक प्रोत्साहन योजना आहेत जसे की: [POAPs देणे](/contributing/translation-program/acknowledgements/#poap) आणि [भाषांतरकार प्रमाणपत्र](/contributing/translation-program/acknowledgements/#certificate), तसेच [भाषांतर लीडरबोर्ड](/contributing/translation-program/acknowledgements/) आयोजित करणे आणि [आमच्या सर्व भाषांतरकारांची साइटवर यादी करणे](/contributing/translation-program/contributors/). + +## मी `` असलेल्या स्ट्रिंगचे भाषांतर कसे करू? {#tags} + +प्रत्येक स्ट्रिंग शुद्ध मजकूर स्वरूपात लिहिलेली नसते. काही स्ट्रिंगमध्ये HTML टॅग्ज (`<0>`, ``) सारख्या मिश्रित स्क्रिप्ट्स असतात. हे सहसा वाक्याच्या मध्यभागी हायपरलिंक्स किंवा पर्यायी शैलीसाठी असते. + +- टॅग्जच्या आतील मजकुराचे भाषांतर करा, पण स्वतः टॅग्जचे करू नका. `<` आणि `>` मध्ये असलेले काहीही भाषांतरित किंवा काढले जाऊ नये. +- स्ट्रिंग सुरक्षित ठेवण्यासाठी, आम्ही शिफारस करतो की तुम्ही डावीकडील तळाशी असलेल्या "स्रोत कॉपी करा" बटणावर क्लिक करा. हे मूळ स्ट्रिंग कॉपी करेल आणि टेक्स्ट बॉक्समध्ये पेस्ट करेल. यामुळे तुम्हाला टॅग्ज कुठे आहेत हे स्पष्ट करण्यास आणि चुका टाळण्यास मदत होते. + +![स्रोत कॉपी करा बटण हायलाइट केलेले क्राउडइन इंटरफेस](./html-tag-strings.png) + +तुमच्या भाषेत अधिक नैसर्गिक वाटावे यासाठी तुम्ही स्ट्रिंगमधील टॅग्जची जागा बदलू शकता – फक्त संपूर्ण टॅग हलवण्याची खात्री करा. + +टॅग्ज आणि कोड स्निपेट्स हाताळण्याबद्दल अधिक सखोल माहितीसाठी, कृपया [ethereum.org भाषांतर शैली मार्गदर्शक](/contributing/translation-program/translators-guide/#dealing-with-tags) पहा. + +## स्ट्रिंग कुठे असतात? {#strings} + +अनेकदा केवळ मूळ स्ट्रिंग अचूक भाषांतर देण्यासाठी पुरेशा नसतात. + +- अधिक माहितीसाठी "स्क्रीनशॉट" आणि "संदर्भ" पहा. मूळ स्ट्रिंग विभागात, तुम्हाला संलग्न स्क्रीनशॉट प्रतिमा दिसेल जी आम्ही संदर्भात स्ट्रिंग कशी वापरत आहोत हे दर्शवेल. +- तरीही तुम्हाला खात्री नसल्यास, "टिप्पणी विभाग" मध्ये फ्लॅग करा. [टिप्पणी कशी करायची याची खात्री नाही?](#comment) + +![स्क्रीनशॉटसह स्ट्रिंगसाठी संदर्भ कसा प्रदान केला जाऊ शकतो हे दर्शविते](./source-string.png) + +![संदर्भासाठी जोडलेला एक उदाहरण स्क्रीनशॉट](./source-string-2.png) + +## मी टिप्पण्या कशा करू शकेन किंवा प्रश्न कसे विचारू शकेन? मला एखादी समस्या किंवा टायपिंगच्या चुका फ्लॅग करायच्या आहेत... {#comment} + +तुम्हाला एखाद्या विशिष्ट स्ट्रिंगवर लक्ष देण्याची गरज असल्याचे फ्लॅग करायचे असल्यास, तुम्ही टिप्पणी सबमिट करू शकता. + +- वरच्या-उजव्या बारमधील दुसऱ्या बटणावर क्लिक करा. लपलेला टॅब तुमच्या उजवीकडे दिसेल. एक नवीन टिप्पणी द्या आणि तळाशी असलेल्या "समस्या" चेकबॉक्सवर क्लिक करा. तुम्ही ड्रॉप-डाउन मेनूमधील पर्यायांपैकी एक निवडून समस्येचा प्रकार निर्दिष्ट करू शकता. +- एकदा सबमिट केल्यावर, आमच्या टीमला त्याची तक्रार केली जाईल. आम्ही समस्या दुरुस्त करू आणि तुमच्या टिप्पणीला उत्तर देऊन आणि समस्या बंद करून तुम्हाला कळवू. +- तुम्ही चुकीच्या भाषांतराची तक्रार केल्यास, पुढील पुनरावलोकनादरम्यान मूळ भाषिकाद्वारे भाषांतर आणि तुमच्या सुचवलेल्या पर्यायाचे पुनरावलोकन केले जाईल. + +![टिप्पण्या आणि समस्या कशा तयार करायच्या हे दर्शविते](./comment-issue.png) + +## भाषांतर मेमरी (TM) म्हणजे काय? {#translation-memory} + +भाषांतर मेमरी (TM) हे Crowdin चे एक वैशिष्ट्य आहे जे ethereum.org वर पूर्वी भाषांतरित केलेल्या सर्व स्ट्रिंग संग्रहित करते. जेव्हा एखाद्या स्ट्रिंगचे भाषांतर केले जाते, तेव्हा ते आपोआप आमच्या प्रोजेक्ट TM मध्ये सेव्ह होते. तुमचा वेळ वाचवण्यासाठी हे एक उपयुक्त साधन असू शकते! + +- "TM आणि MT सूचना" विभाग पहा आणि तुम्हाला दिसेल की इतर भाषांतरकारांनी समान किंवा तत्सम स्ट्रिंगचे भाषांतर कसे केले आहे. जर तुम्हाला उच्च जुळणारे दर असलेली सूचना आढळल्यास, त्यावर क्लिक करून भाषांतराचा संदर्भ घ्या. +- यादीमध्ये काहीही नसल्यास, तुम्ही पूर्वी केलेल्या भाषांतरांसाठी TM मध्ये शोध घेऊ शकता आणि सुसंगततेसाठी त्यांचा पुन्हा वापर करू शकता. + +![भाषांतर मेमरीचा स्क्रीनशॉट](./translation-memory.png) + +## मी Crowdin शब्दकोष कसा वापरू? {#glossary} + +Ethereum शब्दावली आमच्या भाषांतर कार्याचा आणखी एक महत्त्वाचा भाग आहे कारण अनेकदा नवीन तांत्रिक संज्ञा अद्याप बऱ्याच भाषांमध्ये स्थानिकृत केलेल्या नसतात. तसेच, असे काही शब्द आहेत ज्यांचे वेगवेगळ्या संदर्भात वेगवेगळे अर्थ आहेत. [Ethereum शब्दावलीच्या भाषांतरावर अधिक](#terminology) + +Crowdin शब्दकोष हे संज्ञा आणि व्याख्यांच्या स्पष्टीकरणासाठी सर्वोत्तम ठिकाण आहे. शब्दकोषाचा संदर्भ देण्याचे दोन मार्ग आहेत. + +- प्रथम, जेव्हा तुम्हाला मूळ स्ट्रिंगवर अधोरेखित संज्ञा आढळते, तेव्हा तुम्ही त्यावर माउस फिरवून त्याची संक्षिप्त व्याख्या पाहू शकता. + +![एक उदाहरण शब्दकोष व्याख्या](./glossary-definition.png) + +- दुसरे, जर तुम्हाला एखादी संज्ञा दिसली जी तुम्हाला परिचित नाही परंतु अधोरेखित नाही, तर तुम्ही शब्दकोष टॅबमध्ये (उजव्या स्तंभाचे तिसरे बटण) शोधू शकता. तुम्हाला विशिष्ट संज्ञा आणि प्रोजेक्टमध्ये वारंवार वापरल्या जाणाऱ्या संज्ञांची स्पष्टीकरणे मिळतील. + +![Crowdin मध्ये शब्दकोष टॅब कुठे मिळेल हे दर्शविणारा स्क्रीनशॉट](./glossary-tab.png) + +- तरीही तुम्हाला ते सापडत नसेल, तर नवीन संज्ञा जोडण्याची ही तुमची संधी आहे! आम्ही तुम्हाला ते शोध इंजिनवर शोधण्यासाठी आणि शब्दकोशात वर्णन जोडण्यासाठी प्रोत्साहित करतो. इतर भाषांतरकारांना ती संज्ञा अधिक चांगल्या प्रकारे समजून घेण्यासाठी याची मोठी मदत होईल. + +![Crowdin मध्ये शब्दकोष संज्ञा कशी जोडायची हे दर्शविणारा स्क्रीनशॉट](./add-glossary-term.png) + +### शब्दावली भाषांतर धोरण {#terminology} + +_नावांसाठी (ब्रँड, कंपन्या, लोक) आणि नवीन तांत्रिक संज्ञा (बीकन चेन, शार्ड चेन, इ.)_ + +Ethereum मध्ये अलीकडेच तयार केलेल्या अनेक नवीन संज्ञा आहेत. काही संज्ञा भाषांतरकारानुसार बदलतील कारण त्यांच्या संबंधित भाषेत कोणतेही अधिकृत भाषांतर नाही. अशा विसंगतींमुळे गैरसमज होऊ शकतो आणि वाचनीयता कमी होऊ शकते. + +भाषिक विविधता आणि प्रत्येक भाषेतील भिन्न मानकीकरणामुळे, सर्व समर्थित भाषांमध्ये स्वीकारले जाऊ शकणारे एकसंध शब्दावली भाषांतर धोरण तयार करणे जवळजवळ अशक्य झाले आहे. + +काळजीपूर्वक विचार केल्यानंतर, आम्ही सर्वाधिक वापरल्या जाणाऱ्या संज्ञा तुमच्यावर, म्हणजेच भाषांतरकारांवर सोपवण्याचा निर्णय घेतला आहे. + +जेव्हा तुम्हाला एखादी अपरिचित संज्ञा आढळते, तेव्हा आम्ही हे सुचवतो: + +- [संज्ञांचा शब्दकोष](#glossary) पहा, तुम्हाला इतर भाषांतरकारांनी पूर्वी त्याचे भाषांतर कसे केले आहे ते कदाचित सापडेल. जर तुम्हाला वाटत असेल की पूर्वी भाषांतरित केलेली संज्ञा योग्य नाही, तर Crowdin शब्दकोशात नवीन संज्ञा जोडून तुमचे भाषांतर पुनर्संचयित करण्यास मोकळे व्हा. +- जर असे पूर्वीचे भाषांतर शब्दकोशात अस्तित्वात नसेल, तर आम्ही तुम्हाला ते शोध इंजिन किंवा मीडिया लेखावर शोधण्यास प्रोत्साहित करतो जे दर्शवते की तुमच्या समुदायात ही संज्ञा प्रत्यक्षात कशी वापरली जाते. +- जर तुम्हाला कोणतेही संदर्भ सापडले नाहीत, तर तुमच्या अंतर्ज्ञानावर विश्वास ठेवा आणि तुमच्या भाषेसाठी नवीन भाषांतराचा सल्ला द्या! +- जर तुम्हाला असे करण्यास कमी आत्मविश्वास वाटत असेल, तर संज्ञा भाषांतरित न करता सोडा. कधीकधी, अचूक व्याख्या देण्यासाठी इंग्रजी संज्ञा पुरेश्या असतात. + +आम्ही शिफारस करतो की तुम्ही ब्रँड, कंपन्या आणि कर्मचाऱ्यांची नावे भाषांतरित न करता सोडा कारण भाषांतरामुळे अनावश्यक गोंधळ आणि SEO अडचणी निर्माण होऊ शकतात. + +## पुनरावलोकन प्रक्रिया कशी कार्य करते? {#review-process} + +आमच्या भाषांतरांमध्ये विशिष्ट स्तराची गुणवत्ता आणि सुसंगतता सुनिश्चित करण्यासाठी, आम्ही जागतिक स्तरावरील सर्वात मोठ्या भाषा सेवा प्रदात्यांपैकी एक असलेल्या [Acolad](https://www.acolad.com/) सोबत काम करतो. Acolad कडे 20,000 व्यावसायिक भाषातज्ञ आहेत, याचा अर्थ ते आम्हाला आवश्यक असलेल्या प्रत्येक भाषेसाठी आणि सामग्रीच्या प्रकारासाठी व्यावसायिक पुनरावलोकनकर्ते प्रदान करू शकतात. + +पुनरावलोकन प्रक्रिया सरळ आहे; एकदा सामग्रीचा एक संच 100% भाषांतरित झाला की, आम्ही त्या सामग्री बकेटसाठी पुनरावलोकनाची ऑर्डर देतो. पुनरावलोकन प्रक्रिया थेट Crowdin मध्ये होते. पुनरावलोकन पूर्ण झाल्यावर, आम्ही भाषांतरित सामग्रीसह वेबसाइट अद्यतनित करतो. + +## मी माझ्या भाषेत सामग्री कशी जोडू? {#adding-foreign-language-content} + +सध्या, सर्व गैर-इंग्रजी सामग्री थेट इंग्रजी मूळ सामग्रीवरून भाषांतरित केली जाते, आणि जी सामग्री इंग्रजीमध्ये अस्तित्वात नाही ती इतर भाषांमध्ये जोडली जाऊ शकत नाही. + +ethereum.org साठी नवीन सामग्री सुचवण्यासाठी, तुम्ही GitHub वर [एक समस्या तयार करू शकता](https://github.com/ethereum/ethereum-org-website/issues). जोडल्यास, सामग्री इंग्रजीमध्ये लिहिली जाईल आणि Crowdin वापरून इतर भाषांमध्ये भाषांतरित केली जाईल. + +आम्ही नजीकच्या भविष्यात गैर-इंग्रजी सामग्री जोडण्यासाठी समर्थन जोडण्याची योजना आखत आहोत. + +## संपर्कात रहा {#contact} + +हे सर्व वाचल्याबद्दल धन्यवाद. आम्हाला आशा आहे की हे तुम्हाला आमच्या कार्यक्रमात सामील होण्यास मदत करेल. प्रश्न विचारण्यासाठी आणि इतर भाषांतरकारांसोबत सहयोग करण्यासाठी आमच्या [Discord भाषांतर चॅनेल](https://discord.gg/ethereum-org) मध्ये सामील व्हा, किंवा translations@ethereum.org वर आमच्याशी संपर्क साधा! diff --git a/public/content/translations/mr/contributing/translation-program/how-to-translate/index.md b/public/content/translations/mr/contributing/translation-program/how-to-translate/index.md new file mode 100644 index 00000000000..f1806bd8024 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/how-to-translate/index.md @@ -0,0 +1,92 @@ +--- +title: "भाषांतर कसे करावे" +lang: mr +description: "ethereum.org चा अनुवाद करण्यासाठी Crowdin वापरण्याबद्दलच्या सूचना" +--- + +# अनुवाद कसा करावा {#how-to-translate} + +## व्हिज्युअल मार्गदर्शक {#visual-guide} + +अधिक व्हिज्युअल शिकणाऱ्यांसाठी, Crowdin सह सेट अप करण्याच्या प्रक्रियेबद्दल लुकाचा व्हिडिओ पहा. किंवा, तुम्ही याच पायऱ्या पुढील विभागात लिखित स्वरूपात पाहू शकता. + + + +## लिखित मार्गदर्शक {#written-guide} + +### Crowdin मधील आमच्या प्रोजेक्टमध्ये सामील व्हा {#join-project} + +तुमच्या Crowdin खात्यात लॉग इन करणे आवश्यक आहे किंवा तुमच्याकडे खाते नसल्यास साइन अप करा. साइन अप करण्यासाठी फक्त एक ई-मेल खाते आणि पासवर्ड आवश्यक आहे. + + + प्रोजेक्टमध्ये सामील व्हा + + +### तुमची भाषा उघडा {#open-language} + +Crowdin मध्ये लॉग इन केल्यानंतर, तुम्हाला प्रोजेक्टचे वर्णन आणि सर्व उपलब्ध भाषांची सूची दिसेल. +प्रत्येक भाषेत अनुवाद करण्यायोग्य एकूण शब्दांची संख्या आणि त्या भाषेत किती मजकूर अनुवादित व मंजूर झाला आहे, याचा आढावा देणारी माहिती देखील असते. + +अनुवादासाठी उपलब्ध असलेल्या फाइल्सची सूची पाहण्यासाठी, ज्या भाषेत तुम्ही अनुवाद करू इच्छिता ती भाषा उघडा. + +![Crowdin मधील भाषांची सूची](./list-of-languages.png) + +### काम करण्यासाठी एक दस्तऐवज शोधा {#find-document} + +वेबसाइटचा मजकूर अनेक दस्तऐवज आणि मजकूर बकेट्समध्ये विभागलेला आहे. तुम्ही उजवीकडे प्रत्येक दस्तऐवजाची प्रगती तपासू शकता – जर अनुवादाची प्रगती 100% पेक्षा कमी असेल, तर कृपया योगदान द्या! + +तुमची भाषा सूचीबद्ध दिसत नाहीये का? [एक इश्यू उघडा](https://github.com/ethereum/ethereum-org-website/issues/new/choose) किंवा आमच्या [Discord](https://discord.gg/ethereum-org) मध्ये विचारा + +![Crowdin मधील अनुवादित आणि अ-अनुवादित फाइल्स](./crowdin-files.png) + +मजकूर बकेट्सबद्दल एक टीप: सर्वोच्च प्राधान्याचा मजकूर प्रथम प्रकाशित करण्यासाठी आम्ही Crowdin मध्ये 'मजकूर बकेट्स' वापरतो. जेव्हा तुम्ही एखादी भाषा तपासता, उदाहरणार्थ, [फिलिपिनो](https://crowdin.com/project/ethereum-org/fil#) तुम्हाला मजकूर बकेटसाठी फोल्डर्स दिसतील ("1. मुखपृष्ठ", "2. आवश्यक गोष्टी", "3. एक्सप्लोर करणे", इत्यादी). + +सर्वाधिक परिणामकारक पानांचा अनुवाद प्रथम होईल हे सुनिश्चित करण्यासाठी, आम्ही तुम्हाला या अंकीय क्रमाने (1 → 2 → 3 → ⋯) अनुवाद करण्यास प्रोत्साहित करतो. + +### अनुवाद करा {#translate} + +तुम्ही अनुवाद करू इच्छित असलेली फाइल निवडल्यानंतर, ती ऑनलाइन एडिटरमध्ये उघडेल. जर तुम्ही यापूर्वी कधीही Crowdin वापरले नसेल, तर मूलभूत गोष्टी समजून घेण्यासाठी तुम्ही हे जलद मार्गदर्शक वापरू शकता. + +![Crowdin ऑनलाइन एडिटर](./online-editor.png) + +**_1 – डावी साइडबार_** + +- अ-अनुवादित (लाल) – मजकूर ज्यावर अद्याप काम केलेले नाही. ह्या त्या स्ट्रिंग्स आहेत ज्यांचा तुम्ही अनुवाद करायला हवा. +- अनुवादित (हिरवा) – मजकूर ज्याचा आधीच अनुवाद झाला आहे, पण अद्याप त्याचे पुनरावलोकन झाले नाही. तुम्ही पर्यायी अनुवाद सुचवू शकता किंवा एडिटरमधील ‘+’ आणि ‘-’ बटणे वापरून अस्तित्वात असलेल्या अनुवादांवर मत देऊ शकता. +- मंजूर (चेक मार्क) – मजकूर ज्याचे आधीच पुनरावलोकन झाले आहे आणि सध्या वेबसाइटवर लाइव्ह आहे. + +विशिष्ट स्ट्रिंग्स शोधण्यासाठी, त्यांना स्टेटसनुसार फिल्टर करण्यासाठी किंवा व्ह्यू बदलण्यासाठी तुम्ही वरची बटणे देखील वापरू शकता. + +**_2 – एडिटर क्षेत्र_** + +मुख्य अनुवाद क्षेत्र – मूळ मजकूर वर प्रदर्शित केला जातो, उपलब्ध असल्यास अतिरिक्त संदर्भ आणि स्क्रीनशॉटसह. +नवीन अनुवाद सुचवण्यासाठी, ‘Enter translation here’ फील्डमध्ये तुमचा अनुवाद एंटर करा आणि सेव्ह वर क्लिक करा. + +तुम्ही या विभागात स्ट्रिंगचे विद्यमान अनुवाद आणि इतर भाषांमधील अनुवाद, तसेच ट्रान्सलेशन मेमरी मॅचेस आणि मशीन ट्रान्सलेशन सूचना देखील शोधू शकता. + +**_3 – उजवी साइडबार_** + +येथे तुम्ही कमेंट्स, ट्रान्सलेशन मेमरी नोंदी आणि शब्दकोश नोंदी शोधू शकता. डीफॉल्ट व्ह्यू कमेंट्स दाखवतो आणि अनुवादकांना संवाद साधण्याची, समस्या मांडण्याची किंवा चुकीच्या अनुवादांची तक्रार करण्याची परवानगी देतो. + +वरची बटणे वापरून, तुम्ही ट्रान्सलेशन मेमरीवर देखील स्विच करू शकता, जिथे तुम्ही विद्यमान अनुवाद शोधू शकता, किंवा शब्दकोशावर, ज्यात मुख्य संज्ञांची वर्णने आणि प्रमाणित अनुवाद आहेत. + +अधिक जाणून घेऊ इच्छिता? [Crowdin ऑनलाइन एडिटर वापरण्यावरील डॉक्युमेंटेशन](https://support.crowdin.com/online-editor/) नि:संकोचपणे तपासा. + +### पुनरावलोकन प्रक्रिया {#review-process} + +एकदा तुम्ही अनुवाद पूर्ण केल्यावर (म्हणजे, मजकूर बकेटमधील सर्व फाइल्स 100% दाखवतात), आमची व्यावसायिक अनुवाद सेवा मजकूराचे पुनरावलोकन करेल (आणि शक्यतो संपादन करेल). एकदा पुनरावलोकन पूर्ण झाल्यावर (म्हणजे, पुनरावलोकनाची प्रगती 100% झाल्यावर), आम्ही ते वेबसाइटवर जोडू. + + + + + प्रोजेक्टचा अनुवाद करण्यासाठी कृपया मशीन ट्रान्सलेशन वापरू नका. वेबसाइटवर जोडण्यापूर्वी सर्व अनुवादांचे पुनरावलोकन केले जाईल. जर तुमचे सुचवलेले अनुवाद मशीन-अनुवादित असल्याचे आढळले, तर ते नाकारले जातील आणि जे योगदानकर्ते अनेकदा मशीन ट्रान्सलेशन वापरतात त्यांना प्रोजेक्टमधून काढून टाकले जाईल. + + + +### संपर्क साधा {#get-in-touch} + +तुमचे काही प्रश्न आहेत का? किंवा आमच्या टीम आणि इतर अनुवादकांसह सहयोग करू इच्छिता? कृपया आमच्या [ethereum.org Discord server](https://discord.gg/ethereum-org) च्या #translations चॅनेलमध्ये पोस्ट करा + +तुम्ही translations@ethereum.org येथे आमच्याशी संपर्क साधू शकता + +ethereum.org भाषांतर कार्यक्रमात तुमच्या सहभागाबद्दल धन्यवाद! diff --git a/public/content/translations/mr/contributing/translation-program/index.md b/public/content/translations/mr/contributing/translation-program/index.md new file mode 100644 index 00000000000..5177b75d1cb --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/index.md @@ -0,0 +1,91 @@ +--- +title: "भाषांतर कार्यक्रम" +lang: mr +description: "ethereum.org अनुवाद कार्यक्रमाबद्दल माहिती" +--- + +# अनुवाद कार्यक्रम {#translation-program} + +जगभरातील अब्जावधी गैर-इंग्रजी भाषकांसाठी वेबसाइट अधिक सुलभ करण्यासाठी ethereum.org चे विविध भाषांमध्ये भाषांतर करण्याचा अनुवाद कार्यक्रम हा एक सहयोगी प्रयत्न आहे. + +![](./enterprise-eth.png) + +## आम्हाला भाषांतर करण्यास मदत करा {#help-us-translate} + +ethereum.org अनुवाद कार्यक्रम खुला आहे आणि कोणीही योगदान देऊ शकते! + +1. तुम्हाला तुमच्या Crowdin खात्यात लॉग इन करावे लागेल किंवा साइन अप करावे लागेल. +2. तुम्ही ज्या भाषेत योगदान देऊ इच्छिता ती भाषा निवडा. +3. सुरू करण्यापूर्वी, Crowdin कसे वापरावे हे जाणून घेण्यासाठी कृपया [भाषांतर कसे करावे](/contributing/translation-program/how-to-translate/) मार्गदर्शक आणि टिपा व सर्वोत्तम पद्धतींसाठी [अनुवाद शैली मार्गदर्शक](/contributing/translation-program/translators-guide/) तपासा. +4. मशीन भाषांतरांना मान्यता दिली जाणार नाही. +5. सर्व भाषांतरे साइटवर जोडण्यापूर्वी त्यांचे पुनरावलोकन केले जाते, त्यामुळे तुमची भाषांतरे लाइव्ह होण्यापूर्वी थोडा विलंब होईल. + +_भाषांतरांवर सहयोग करण्यासाठी, प्रश्न विचारण्यासाठी, अभिप्राय आणि कल्पना सामायिक करण्यासाठी किंवा अनुवाद गटात सामील होण्यासाठी [ethereum.org Discord](https://discord.gg/ethereum-org) मध्ये सामील व्हा._ + + + भाषांतर सुरू करा + + +## अनुवाद कार्यक्रमाबद्दल {#about-us} + +Ethereum समुदायाचे जागतिक आणि सर्वसमावेशक असण्याचे उद्दिष्ट आहे, तरीही त्यातील बहुतेक मजकूर केवळ इंग्रजी भाषकांसाठी आहे, ज्यामुळे जगातील 6 अब्ज गैर-इंग्रजी भाषक वगळले जातात. जगभरातील समुदायासाठी ethereum.org ने Ethereum मध्ये प्रवेशद्वार म्हणून काम करण्यासाठी, गैर-इंग्रजी भाषकांना त्यांच्या मूळ भाषांमध्ये Ethereum मजकूर प्रदान करणे आवश्यक आहे असे आम्हाला वाटते. + +ethereum.org अनुवाद कार्यक्रमाचे उद्दिष्ट ethereum.org आणि इतर Ethereum मजकुराचे शक्य तितक्या भाषांमध्ये भाषांतर करून Ethereum सर्वांसाठी सुलभ करणे हे आहे. + +ethereum.org अनुवाद कार्यक्रमाच्या [ध्येय आणि दृष्टी](/contributing/translation-program/mission-and-vision) बद्दल अधिक वाचा. + +### आतापर्यंतची आमची प्रगती {#our-progress} + +- [**6,900+** अनुवादक](/contributing/translation-program/contributors/) +- **68** भाषा साइटवर लाइव्ह +- [**2.89 दशलक्ष** शब्द 2024 मध्ये अनुवादित](/contributing/translation-program/acknowledgements/) + + + +### पोचपावती {#acknowledgements} + +Ethereum.org चे भाषांतर हजारो समुदाय सदस्यांद्वारे केले जाते आणि ते अनुवाद कार्यक्रमाचा महत्त्वाचा भाग आहेत. +आम्ही आमच्या अनुवादकांना त्यांच्या कारकिर्दीच्या मार्गावर पोचपावती देऊ इच्छितो आणि त्यांना समर्थन देऊ इच्छितो. येथे आमच्या अनुवादकांच्या काही पोचपावत्या आहेत: + +#### प्रमाणपत्र {#certificate} + +जर तुम्ही अनुवाद कार्यक्रमात योगदान दिले असेल आणि तुमच्या अनुवादित शब्दांपैकी किमान 5,000 शब्दांना मान्यता मिळाली असेल, तर तुम्ही ethereum.org अनुवादक प्रमाणपत्रासाठी पात्र आहात. [प्रमाणपत्रांवर अधिक](/contributing/translation-program/acknowledgements/#certificate) + +#### OATs {#oats} + +अनुवाद कार्यक्रमातील योगदानकर्ते 2024 मधील त्यांच्या अनुवादित शब्दांच्या संख्येवर आधारित विविध OATs (ऑनचेन अचिव्हमेंट टोकन्स) साठी पात्र आहेत. OATs हे NFTs आहेत जे ethereum.org अनुवाद कार्यक्रमात तुमचे योगदान सिद्ध करतात. [OATs वर अधिक](/contributing/translation-program/acknowledgements/#oats) + +#### अनुवादक पोचपावती {#translator-acknowledgements} + +[लीडरबोर्ड](/contributing/translation-program/acknowledgements/) आणि [अनुवाद कार्यक्रमातील सर्व योगदानकर्त्यांची यादी](/contributing/translation-program/contributors/) वापरून आमच्या शीर्ष अनुवादकांची सार्वजनिक पोचपावती. + +#### पुरस्कार {#rewards} + +भूतकाळात, आम्ही आमच्या सर्वात सक्रिय योगदानकर्त्यांना [Devcon](https://devcon.org/en/) आणि [Devconnect](https://devconnect.org/) सारख्या Ethereum परिषदांची तिकिटे, तसेच विशेष ethereum.org मर्च देऊन पूर्वलक्षी प्रभावाने पुरस्कृत केले आहे. + +आम्ही आमच्या योगदानकर्त्यांना पुरस्कृत करण्यासाठी सतत नवीन आणि नाविन्यपूर्ण मार्गांचा विचार करत आहोत, म्हणून संपर्कात रहा! + +### मार्गदर्शक आणि संसाधने {#guides-and-resources} + +जर तुम्ही अनुवाद कार्यक्रमात योगदान देत असाल किंवा त्यात सामील होण्याचा विचार करत असाल, तर तुम्ही खालील अनुवाद मार्गदर्शक तपासावेत: + +- [अनुवाद शैली मार्गदर्शक](/contributing/translation-program/translators-guide/) _– ethereum.org अनुवादकांसाठी सूचना आणि टिपा_ +- [अनुवाद FAQs](/contributing/translation-program/faq/) _– ethereum.org अनुवाद कार्यक्रमाबद्दल वारंवार विचारले जाणारे प्रश्न आणि उत्तरे_ +- [Crowdin ऑनलाइन संपादक मार्गदर्शक](https://support.crowdin.com/online-editor/) _– Crowdin ऑनलाइन संपादक वापरण्यासाठी आणि Crowdin च्या काही प्रगत वैशिष्ट्यांसाठी एक सखोल मार्गदर्शक_ + +इतर उपयुक्त अनुवाद साधने, अनुवादक समुदाय आणि अनुवाद कार्यक्रमाच्या ब्लॉग पोस्टसाठी, कृपया [संसाधने पृष्ठ](/contributing/translation-program/resources/) ला भेट द्या. + +## संपर्क साधा {#get-in-touch} + +तुमचे काही प्रश्न आहेत का? किंवा आमच्या टीम आणि इतर अनुवादकांसह सहयोग करू इच्छिता? कृपया आमच्या [ethereum.org Discord server](https://discord.gg/ethereum-org) च्या #translations चॅनेलमध्ये पोस्ट करा + +तुम्ही translations@ethereum.org येथे आमच्याशी संपर्क साधू शकता + +## तुमचा स्वतःचा अनुवाद कार्यक्रम सुरू करणे {#starting-a-translation-program} + +आम्ही Ethereum मजकुराचे शक्य तितक्या भाषांमध्ये भाषांतर करण्यासाठी आणि शैक्षणिक सामग्री सर्वांसाठी उपलब्ध करून देण्यासाठी समर्पित आहोत. +भाषांतरांवरील आमच्या केंद्रबिंदूनुसार, आम्ही इतर Ethereum प्रकल्पांना त्यांचे स्वतःचे भाषांतर प्रयत्न आयोजित करण्यास, व्यवस्थापित करण्यास आणि सुधारण्यास मदत करू इच्छितो. + +या कारणास्तव, आम्ही एक [अनुवाद कार्यक्रम प्लेबुक](/contributing/translation-program/playbook/) तयार केले आहे ज्यात ethereum.org चे भाषांतर करण्याच्या प्रक्रियेत आम्ही निवडलेल्या काही टिपा आणि सर्वोत्तम पद्धती आहेत. + +पुढे सहयोग करू इच्छिता किंवा आमची काही अनुवाद संसाधने वापरू इच्छिता? प्लेबुकवर काही अभिप्राय आहे का? आम्हाला तुमच्याकडून translations@ethereum.org येथे ऐकायला आवडेल. diff --git a/public/content/translations/mr/contributing/translation-program/mission-and-vision/index.md b/public/content/translations/mr/contributing/translation-program/mission-and-vision/index.md new file mode 100644 index 00000000000..f1108c08c71 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/mission-and-vision/index.md @@ -0,0 +1,25 @@ +--- +title: "मिशन आणि व्हिजन" +lang: mr +description: "ethereum.org भाषांतर कार्यक्रमाचे ध्येय आणि दृष्टी" +--- + +# ध्येय आणि दृष्टी {#mission-and-vision} + +Ethereum समुदायाचे जागतिक आणि सर्वसमावेशक असण्याचे उद्दिष्ट आहे, तरीही त्यातील बहुतेक मजकूर केवळ इंग्रजी भाषकांसाठी आहे, ज्यामुळे जगातील 6 अब्ज गैर-इंग्रजी भाषक वगळले जातात. जगभरातील समुदायासाठी ethereum.org ने Ethereum मध्ये प्रवेशद्वार म्हणून काम करण्यासाठी, गैर-इंग्रजी भाषकांना त्यांच्या मूळ भाषांमध्ये Ethereum मजकूर प्रदान करणे आवश्यक आहे असे आम्हाला वाटते. + +ethereum.org अनुवाद कार्यक्रमाचे उद्दिष्ट ethereum.org आणि इतर Ethereum मजकुराचे शक्य तितक्या भाषांमध्ये भाषांतर करून Ethereum सर्वांसाठी सुलभ करणे हे आहे. + +## आमचे ध्येय {#our-mission} + +- जगभरातील अभ्यागतांना त्यांच्या मूळ भाषेत Ethereum बद्दल शिकण्यासाठी सक्षम करण्याकरिता वेबसाइटच्या भाषांतरित आवृत्त्या प्रदान करणे +- जागतिक Ethereum समुदायामध्ये अधिक सदस्यांच्या ऑनबोर्डिंगची सोय करणे +- Ethereum माहिती आणि ज्ञानाची अधिक सुलभ आणि अधिक समावेशक देवाणघेवाण करण्यास अनुमती देणे +- समुदाय सदस्यांना Ethereum मध्ये भाषांतरांचे योगदान देण्यासाठी आणि इकोसिस्टमवर आपली छाप पाडण्यासाठी सक्षम करणे +- इकोसिस्टममध्ये सामील होऊ इच्छिणाऱ्या उत्साही योगदानकर्त्यांना ओळखणे, त्यांच्याशी संपर्क साधणे आणि त्यांना मार्गदर्शन करणे + +## आमची दृष्टी {#our-vision} + +- शक्य तितक्या देशांतील आणि जगाच्या भागांतील Ethereum समुदायाच्या सदस्यांसाठी आवश्यक सामग्रीचे भाषांतर करणे +- एक अधिक सुजाण आणि सुशिक्षित Ethereum समुदाय तयार करण्यासाठी भाषांमध्ये ज्ञान वाटपाला समर्थन देणे +- इंग्रजी न बोलणाऱ्यांना इकोसिस्टममध्ये सामील होण्यापासून रोखणारे भाषेचे अडथळे दूर करून Ethereumची समावेशकता आणि सुलभता वाढवणे diff --git a/public/content/translations/mr/contributing/translation-program/playbook/index.md b/public/content/translations/mr/contributing/translation-program/playbook/index.md new file mode 100644 index 00000000000..7c5d5b07675 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/playbook/index.md @@ -0,0 +1,317 @@ +--- +title: "भाषांतर कार्यक्रम प्लेबुक" +lang: mr +description: "भाषांतर कार्यक्रम सेट करण्यासाठी टिप्स आणि महत्त्वाच्या विचारांचा संग्रह" +--- + +# भाषांतर कार्यक्रम प्लेबुक {#translation-program-playbook} + +इंग्रजी ही जगातील सर्वाधिक बोलल्या जाणार्‍या भाषांपैकी एक आहे आणि जगातील सर्वाधिक अभ्यासली जाणारी भाषा आहे. इंटरनेटवर - विशेषतः सोशल मीडियावर - इंग्रजी ही सर्वात सामान्यपणे वापरली जाणारी भाषा असल्याने आणि बहुभाषिक प्रोग्रामिंग भाषा दुर्मिळ असल्याने, ब्लॉकचेन क्षेत्रातील बहुतेक सामग्री मूळतः इंग्रजीमध्ये लिहिलेली आहे. + +तथापि, जगातील ६ अब्जाहून अधिक लोक (लोकसंख्येच्या ७५% पेक्षा जास्त) अजिबात इंग्रजी बोलत नाहीत, त्यामुळे जगातील बहुसंख्य लोकांसाठी Ethereum मध्ये प्रवेश करण्यासाठी हा एक मोठा अडथळा आहे. + +या कारणास्तव, या क्षेत्रातील वाढत्या संख्येने प्रकल्प त्यांची सामग्री विविध भाषांमध्ये अनुवादित करण्यासाठी आणि जागतिक समुदायांसाठी स्थानिकीकृत करण्यासाठी प्रयत्नशील आहेत. + +बहुभाषिक सामग्री प्रदान करणे हा आपला जागतिक समुदाय वाढवण्याचा, इंग्रजी न बोलणार्‍यांना शिक्षण देण्याचा, आपली सामग्री आणि संवाद व्यापक प्रेक्षकांपर्यंत पोहोचवण्याची खात्री करण्याचा आणि या क्षेत्रात अधिक लोकांना ऑनबोर्ड करण्याचा एक सोपा आणि प्रभावी मार्ग आहे. + +या मार्गदर्शकाचा उद्देश सामग्रीच्या स्थानिकीकरणाबद्दलच्या सामान्य आव्हानांना आणि गैरसमजांना संबोधित करणे आहे. हे सामग्री व्यवस्थापन, भाषांतर आणि पुनरावलोकन प्रक्रिया, गुणवत्ता हमी, अनुवादक आउटरीच आणि स्थानिकीकरण प्रक्रियेच्या इतर महत्त्वाच्या पैलूंसाठी एक चरण-दर-चरण मार्गदर्शक प्रदान करते. + +## सामग्री व्यवस्थापन {#content-management} + +भाषांतर सामग्री व्यवस्थापन म्हणजे भाषांतर कार्यप्रवाहाचे स्वयंचलित करण्याची प्रक्रिया, ज्यामुळे पुनरावृत्ती होणारे मॅन्युअल कामाची गरज दूर होते, कार्यक्षमता आणि गुणवत्ता सुधारते, अधिक चांगले नियंत्रण ठेवता येते आणि सहकार्याला सक्षम करते. + +सामग्री आणि आपल्या गरजेनुसार, स्थानिकीकरण प्रक्रियेत सामग्री व्यवस्थापनासाठी अनेक विविध दृष्टिकोन आहेत. + +सामग्री व्यवस्थापित करण्याचा मूलभूत मार्ग म्हणजे स्त्रोत आणि लक्ष्य मजकूर असलेल्या द्विभाषिक फाइल्स तयार करणे. हे भाषांतरात क्वचितच वापरले जाते, कारण ते साधेपणा वगळता कोणतेही महत्त्वपूर्ण फायदे देत नाही. + +भाषांतर एजन्सी सामान्यतः भाषांतर व्यवस्थापन सॉफ्टवेअर किंवा स्थानिकीकरण साधनांचा वापर करून भाषांतर व्यवस्थापनाकडे पाहतात, जे प्रकल्प व्यवस्थापन क्षमता प्रदान करतात आणि फाइल्स, सामग्री आणि भाषातज्ञांवर अधिक नियंत्रण ठेवण्याची परवानगी देतात. + +सामग्री व्यवस्थापनाबद्दल अधिक वाचा: + +[भाषांतर व्यवस्थापन म्हणजे काय यावर Trados](https://www.trados.com/solutions/translation-management/) + +[बहुभाषिक सामग्री व्यवस्थापनावरील Phrase](https://phrase.com/blog/posts/multilingual-content-management/) + +### भाषांतर व्यवस्थापन सॉफ्टवेअर {#translation-management-software} + +अनेक भाषांतर व्यवस्थापन प्रणाली आणि स्थानिकीकरण साधने आहेत आणि सॉफ्टवेअरची निवड मुख्यत्वे आपल्या गरजांवर अवलंबून असते. + +काही प्रकल्प भाषांतर व्यवस्थापन प्रणाली वापरण्याच्या विरोधात निर्णय घेतात आणि भाषांतर मॅन्युअली हाताळण्यास प्राधान्य देतात - एकतर थेट द्विभाषिक फाइल्समध्ये किंवा GitHub सारख्या होस्टिंग सेवांवर - हे नियंत्रण, उत्पादकता, गुणवत्ता, स्केलेबिलिटी आणि सहयोग क्षमतांमध्ये लक्षणीय घट करते. असा दृष्टिकोन लहान-प्रमाणात किंवा एक-वेळच्या भाषांतर प्रकल्पांसाठी सर्वात फायदेशीर असू शकतो. + +काही सर्वात शक्तिशाली आणि मोठ्या प्रमाणावर वापरल्या जाणार्‍या भाषांतर व्यवस्थापन साधनांवर एक द्रुत नजर: + +**क्राउडसोर्सिंग आणि सहयोगासाठी सर्वोत्तम** + +[Crowdin](https://crowdin.com/) + +- ओपन-सोर्स प्रकल्पांसाठी विनामूल्य (स्ट्रिंग्स आणि प्रकल्पांची अमर्याद संख्या) +- सर्व प्लॅनसह TM आणि शब्दकोश उपलब्ध +- ६०+ समर्थित फाइल स्वरूप, ७०+ API एकत्रीकरण + +[Lokalise](https://lokalise.com/) + +- २ टीम सदस्यांसाठी विनामूल्य, अधिक योगदानकर्त्यांसाठी सशुल्क प्लॅन (बहुतेक प्लॅनसाठी मर्यादित स्ट्रिंग्स) +- काही सशुल्क प्लॅनसह TM आणि शब्दकोश उपलब्ध +- ३०+ समर्थित फाइल स्वरूप, ४०+ API एकत्रीकरण + +[Transifex](https://www.transifex.com/) + +- केवळ सशुल्क प्लॅन (बहुतेक प्लॅनसाठी मर्यादित स्ट्रिंग्स) +- सर्व सशुल्क प्लॅनसह TM आणि शब्दकोश उपलब्ध +- ३०+ समर्थित फाइल स्वरूप, २०+ API एकत्रीकरण + +[Phrase](https://phrase.com/) + +- केवळ सशुल्क प्लॅन (सर्व प्लॅनसाठी अमर्याद स्ट्रिंग्स, प्रकल्प आणि टीम सदस्यांची मर्यादित संख्या) +- काही सशुल्क प्लॅनसह TM आणि शब्दकोश उपलब्ध +- ४०+ समर्थित फाइल स्वरूप, २०+ API एकत्रीकरण + +[Smartcat](https://www.smartcat.com/) + +- देय प्रगत वैशिष्ट्यांसह मूलभूत विनामूल्य प्लॅन (सर्व प्लॅनसाठी अमर्याद स्ट्रिंग्स आणि प्रकल्प) +- सर्व प्लॅनसह TM आणि शब्दकोश उपलब्ध +- ६०+ समर्थित फाइल स्वरूप, २०+ API एकत्रीकरण + +[POEditor](https://poeditor.com/) + +- ओपन-सोर्स प्रकल्पांसाठी विनामूल्य (सर्व प्रकल्पांसाठी मर्यादित स्ट्रिंग्स, ओपन-सोर्स प्रकल्पांसाठी अमर्याद) +- सशुल्क प्लॅनसाठी TM आणि शब्दकोश उपलब्ध +- २०+ समर्थित फाइल स्वरूप, १०+ API एकत्रीकरण + +आणि इतर अनेक... + +**व्यावसायिक भाषांतर साधने** + +[SDL Trados Studio](https://www.trados.com/products/trados-studio/) + +- फ्रीलान्स अनुवादक आणि टीमसाठी सशुल्क प्लॅन +- अत्यंत शक्तिशाली संगणक-सहाय्यित भाषांतर (CAT) साधन आणि अनुवादक उत्पादकता सॉफ्टवेअर + +[MemoQ](https://www.memoq.com/) + +- प्रगत वैशिष्ट्यांसाठी अनेक सशुल्क प्लॅनसह मर्यादित विनामूल्य आवृत्ती उपलब्ध +- कंपन्या, भाषा सेवा प्रदाते आणि अनुवादकांसाठी भाषांतर व्यवस्थापन सॉफ्टवेअर + +[Memsource](https://www.memsource.com/) + +- वैयक्तिक अनुवादकांसाठी विनामूल्य, टीमसाठी अनेक सशुल्क प्लॅनसह +- क्लाउड-आधारित संगणक-सहाय्यित भाषांतर आणि भाषांतर व्यवस्थापन प्रणाली + +आणि इतर अनेक... + +भाषांतर व्यवस्थापन सॉफ्टवेअरबद्दल अधिक वाचा: + +[भाषांतर व्यवस्थापन प्रणालीची विकिपीडिया व्याख्या](https://en.wikipedia.org/wiki/Translation_management_system) + +[प्रत्येक भाषांतर व्यवस्थापन सॉफ्टवेअरमध्ये असाव्यात अशा ७ गोष्टींवर Phrase](https://phrase.com/blog/posts/7-things-every-translation-management-software-should-have/) + +[भाषांतर व्यवस्थापन प्रणाली म्हणजे काय यावर MemoQ](https://www.memoq.com/tools/what-is-a-translation-management-system) + +[Gengo ची १६ सर्वोत्तम भाषांतर व्यवस्थापन प्रणालींची यादी](https://gengo.com/translator-product-updates/16-best-translation-management-systems/) + +## कार्यप्रवाह {#workflow} + +भाषांतर क्षेत्रात, भाषांतर कार्यप्रवाहाचे काही वेगवेगळे अर्थ असू शकतात, दोन्ही काहीसे एकमेकांशी संबंधित आहेत आणि आपल्या प्रकल्पासाठी महत्त्वाचे विचार आहेत. + +आपण खाली त्या दोघांचाही शोध घेऊ. + +**अर्थ १** + +भाषांतर कार्यप्रवाहाबद्दल विचार करण्याचा हा कदाचित सर्वात सामान्य मार्ग आहे आणि कार्यप्रवाह हा शब्द ऐकल्यावर सहसा मनात येणारी गोष्ट आहे. + +त्याच्या सारांशात, हा भाषांतरांबद्दल विचार करण्यापासून ते आपल्या उत्पादनात अनुवादित सामग्री वापरण्यापर्यंतचा 'कामाचा प्रवाह' आहे. + +या प्रकरणात एक उदाहरण कार्यप्रवाह असेल: + +1. **भाषांतरासाठी फाइल्स तयार करणे** – हे सोपे वाटते; तथापि, आपल्याला काही महत्त्वाच्या गोष्टींचा विचार करणे आवश्यक आहे. या टप्प्यावर, संपूर्ण प्रक्रिया कशी कार्य करावी याची आपल्याकडे स्पष्ट योजना असावी. + +- _तुम्ही कोणते फाइल प्रकार वापरणार आहात? तुम्हाला तुमच्या अनुवादित फाइल्स कोणत्या फॉरमॅटमध्ये हव्या आहेत?_ + - जर तुमची सामग्री DOCX किंवा MD फॉरमॅटमध्ये उपलब्ध असेल, तर तुमच्या व्हाईटपेपरच्या किंवा इतर दस्तऐवजांच्या PDF आवृत्तीचे भाषांतर करण्यापेक्षा हा दृष्टिकोन अधिक सरळ असेल. +- _कोणती स्थानिकीकरण साधने या फाइल प्रकाराला समर्थन देतात? मूळ स्वरूपन टिकवून ठेवून फाइलचे भाषांतर केले जाऊ शकते का?_ + - सर्व फाइल प्रकार थेट स्थानिकीकरणास समर्थन देत नाहीत (उदा. PDF फाइल्स, इमेज फाइल्स), आणि सर्व स्थानिकीकरण साधने सर्व फाइल प्रकारांना समर्थन देत नाहीत. +- _सामग्रीचे भाषांतर कोण करणार आहे? तुम्ही व्यावसायिक भाषांतरांची मागणी करणार आहात की स्वयंसेवकांवर अवलंबून राहणार आहात?_ + - याचा परिणाम तुम्हाला घ्याव्या लागणाऱ्या अनेक निर्णयांवर होतो. उदाहरणार्थ, व्यावसायिक अनुवादक स्वयंसेवकांपेक्षा प्रगत स्थानिकीकरण साधनांसह काम करण्यास अधिक सोयीस्कर असतात. +- _भाषातज्ञांकडून तुमच्या काय अपेक्षा आहेत? जर तुम्ही भाषा सेवा प्रदाता वापरत असाल, तर ते तुमच्याकडून काय अपेक्षा करतात?_ + - तुमची ध्येये, अपेक्षा आणि टाइमलाइन संरेखित असल्याची खात्री करण्याची ही पायरी आहे. +- _भाषांतरासाठी सर्व सामग्री तितकीच महत्त्वाची आहे का? काही सामग्रीचे आधी भाषांतर केले पाहिजे का?_ + - काही सामग्रीला प्राधान्य देण्याचे काही मार्ग आहेत, ज्याचे भाषांतर आणि अंमलबजावणी प्रथम केली पाहिजे. उदाहरणार्थ, जर तुमच्याकडे भाषांतरासाठी खूप सामग्री असेल, तर तुम्ही आवृत्ती नियंत्रणाचा वापर करून अनुवादकांना कशाला प्राधान्य द्यावे याची जाणीव करून देऊ शकता. + +2. **भाषांतरासाठी फाइल्स सामायिक करणे** – या पायरीसाठी देखील काही दीर्घकालीन विचारांची आवश्यकता आहे आणि स्त्रोत फाइल्स भाषा सेवा प्रदात्याला पाठवण्याइतके सरळ नाही. + +- _सामग्रीचे भाषांतर कोण करणार आहे? या प्रक्रियेत किती लोक सहभागी असतील?_ + - जर तुम्ही स्थानिकीकरण साधन वापरण्याची योजना आखत असाल, तर हे पाऊल सोपे होते कारण तुम्ही स्त्रोत फाइल्स थेट साधनावर अपलोड करू शकता. हे देखील खरे आहे जर भाषांतर प्रक्रिया होस्टिंग सेवेवर होत असेल, कारण स्त्रोत फाइल्स कोठेही निर्यात करण्याची गरज नाही. +- _स्त्रोत फाइल्स मॅन्युअली हाताळल्या जातील की ही प्रक्रिया स्वयंचलित केली जाऊ शकते?_ + - बहुतेक स्थानिकीकरण साधने फाइल व्यवस्थापन प्रक्रियेसाठी काही प्रकारचे एकत्रीकरण किंवा ऑटोमेशनला परवानगी देतात. दुसरीकडे, जर तुम्ही वैयक्तिक अनुवादकांसह काम करत असाल आणि स्थानिकीकरण साधन वापरत नसाल, तर शेकडो किंवा हजारो अनुवादकांना मॅन्युअली स्त्रोत फाइल्स पाठवणे ही एक स्केलेबल प्रक्रिया नाही. +- _स्थानिकीकरणासाठी कोणती साधने वापरली जातील?_ + - या प्रश्नाचे उत्तर ठरवेल की तुम्ही बाकी सर्व गोष्टी कशा हाताळता. योग्य साधन निवडल्याने तुम्हाला सामग्री व्यवस्थापन, भाषांतर मेमरी आणि शब्दकोष व्यवस्थापित करणे, अनुवादक व्यवस्थापित करणे, भाषांतर/पुनरावलोकन प्रगतीचा मागोवा ठेवणे इत्यादी स्वयंचलित करण्यात मदत होऊ शकते, म्हणून काही वेळ घ्या आणि तुम्हाला कोणते साधन वापरायचे आहे यावर काही संशोधन करा. जर तुम्ही स्थानिकीकरण साधन वापरण्याची योजना आखत नसाल, तर वरील सर्व गोष्टी मॅन्युअली कराव्या लागतील. +- _भाषांतर प्रक्रियेला किती वेळ लागेल? त्याला किती खर्च येईल?_ + - या टप्प्यावर, आपण भाषा सेवा प्रदाता किंवा अनुवादकांच्या गटासह स्त्रोत फाइल्स सामायिक करण्यास तयार असले पाहिजे. भाषा सेवा प्रदाता आपल्याला शब्द संख्या विश्लेषित करण्यात आणि दर आणि भाषांतर प्रक्रियेसाठी टाइमलाइनसह कोट प्रदान करण्यात मदत करू शकतो. +- _या प्रक्रियेदरम्यान तुम्ही स्त्रोत सामग्रीमध्ये बदल/अपडेट करण्याची योजना आखत आहात का?_ + - जर तुमची सामग्री डायनॅमिक असेल आणि वारंवार बदलत असेल, तर कोणतेही बदल किंवा अपडेट भाषांतर प्रगतीमध्ये व्यत्यय आणू शकतात. भाषांतर मेमरी वापरल्याने हे लक्षणीयरीत्या कमी करण्यास मदत होऊ शकते, तरीही प्रक्रिया कशी कार्य करेल आणि अनुवादक करत असलेल्या प्रगतीला मागे पडण्यापासून कसे रोखता येईल याचा विचार करणे महत्त्वाचे आहे. + +3. **भाषांतर प्रक्रियेचे व्यवस्थापन** – तुमचे काम स्त्रोत सामग्री भाषा सेवा प्रदाता किंवा अनुवादकांना सोपवल्यावर पूर्ण होत नाही. भाषांतरांची इष्टतम गुणवत्ता सुनिश्चित करण्यासाठी, सामग्री निर्मात्यांनी भाषांतर प्रक्रियेत शक्य तितके सहभागी व्हावे. + +- _तुम्ही अनुवादकांशी संवाद साधण्याची योजना कशी आखत आहात?_ + - जर तुम्ही स्थानिकीकरण साधन वापरण्याची योजना आखत असाल, तर संवाद थेट साधनात होऊ शकतो. अनुवादकांसह एक पर्यायी संवाद चॅनेल सेट करण्याची देखील शिफारस केली जाते कारण ते संपर्क साधण्यास कमी संकोच करू शकतात आणि मेसेजिंग साधने अधिक मुक्त प्रवाही संवादाला परवानगी देतात. +- _अनुवादकांकडून आलेल्या प्रश्नांना कसे हाताळावे? या प्रश्नांची उत्तरे कोणी द्यावीत?_ + - अनुवादक (व्यावसायिक आणि गैर-व्यावसायिक दोन्ही) अनेकदा प्रश्न आणि स्पष्टीकरणासाठी किंवा अतिरिक्त संदर्भासाठी, तसेच अभिप्राय आणि सुधारणांसाठी कल्पनांसह संपर्क साधतील. या चौकशींना प्रतिसाद दिल्याने अनेकदा अधिक चांगला सहभाग आणि अनुवादित सामग्रीची गुणवत्ता मिळू शकते. त्यांना शक्य तितकी संसाधने प्रदान करणे देखील मौल्यवान आहे (उदा. मार्गदर्शक, टिप्स, परिभाषा मार्गदर्शक तत्त्वे, FAQs, इ.). +- _पुनरावलोकन प्रक्रिया कशी हाताळावी? तुम्ही ते आउटसोर्स करू इच्छिता की तुमच्याकडे अंतर्गत पुनरावलोकने करण्याची क्षमता आहे?_ + - जरी नेहमी आवश्यक नसले तरी, पुनरावलोकने एका इष्टतम भाषांतर प्रक्रियेचा अविभाज्य भाग आहेत. सहसा, व्यावसायिक पुनरावलोकनकर्त्यांना पुनरावलोकन प्रक्रिया आउटसोर्स करणे सोपे असते. तथापि, जर तुमच्याकडे मोठी आंतरराष्ट्रीय टीम असेल, तर पुनरावलोकने किंवा QA अंतर्गत देखील हाताळले जाऊ शकते. + +4. **अनुवादित सामग्रीची अंमलबजावणी करणे** - कार्यप्रवाहाचा शेवटचा भाग, तरीही वेळेपूर्वी विचार करणे महत्त्वाचे आहे. + +- _सर्व भाषांतरे एकाच वेळी पूर्ण होतील का?_ + - नसल्यास, कोणत्या भाषांतरांना प्राधान्य दिले पाहिजे, प्रगतीपथावर असलेल्या भाषांतरांचा मागोवा कसा ठेवावा आणि भाषांतरे पूर्ण होत असताना अंमलबजावणी कशी हाताळली जाते याचा विचार केला पाहिजे. +- _अनुवादित सामग्री तुम्हाला कशी वितरित केली जाईल? ती कोणत्या स्वरूपात असेल?_ + - आपण कोणताही दृष्टिकोन वापरला तरीही हा एक महत्त्वाचा विचार आहे. स्थानिकीकरण साधने आपल्याला लक्ष्य फाइल स्वरूप आणि निर्यात प्रक्रियेवर नियंत्रण ठेवण्याची परवानगी देतात आणि सहसा ऑटोमेशनला समर्थन देतात, उदा. होस्टिंग सेवेसह एकत्रीकरण सक्षम करून. +- _तुम्ही तुमच्या प्रकल्पात भाषांतरांची अंमलबजावणी कशी करणार आहात?_ + - काही प्रकरणांमध्ये, हे अनुवादित फाइल अपलोड करणे किंवा आपल्या डॉक्समध्ये जोडण्याइतके सोपे असू शकते. तथापि, वेबसाइट किंवा ॲप्लिकेशन भाषांतरांसारख्या अधिक जटिल प्रकल्पांसह, आपण कोड आंतरराष्ट्रीयीकरणाला समर्थन देत असल्याची खात्री केली पाहिजे आणि अंमलबजावणी प्रक्रिया आगाऊ कशी हाताळली जाईल हे स्थापित केले पाहिजे. +- _जर स्वरूपण स्त्रोतापेक्षा वेगळे असेल तर काय होईल?_ + - वरीलप्रमाणेच, जर तुम्ही साध्या मजकूर फाइल्सचे भाषांतर करत असाल, तर स्वरूपण कदाचित अत्यंत महत्त्वाचे नाही. तथापि, वेबसाइट किंवा ॲप्लिकेशनसाठी सामग्रीसारख्या अधिक जटिल फाइल्ससह, आपल्या प्रकल्पात अंमलात आणण्यासाठी स्वरूपण आणि कोड स्त्रोताशी एकसारखे असणे आवश्यक आहे. नसल्यास, लक्ष्य फाइल्स अनुवादक किंवा आपल्या डेव्हलपर्सद्वारे संपादित करणे आवश्यक असेल. + +**अर्थ २** + +एक पर्यायी भाषांतर कार्यप्रवाह, जो अंतर्गत निर्णय आणि दृष्टिकोनांचा विचार करत नाही. येथे मुख्य विचार सामग्रीचा स्वतःचा प्रवाह आहे. + +या प्रकरणात एक उदाहरण कार्यप्रवाह असेल: + +1. _भाषांतर → अंमलबजावणी_ + +- सर्वात सोपा कार्यप्रवाह, जिथे भाषांतर बहुधा मानवी भाषांतर असेल, कारण अंमलबजावणीपूर्वी भाषांतरांच्या गुणवत्तेचे मूल्यांकन आणि संपादन करण्यासाठी कोणतीही पुनरावलोकन किंवा QA प्रक्रिया नाही. +- या कार्यप्रवाहासह, हे महत्त्वाचे आहे की अनुवादक गुणवत्तेची विशिष्ट पातळी राखू शकतील, ज्यासाठी प्रकल्प व्यवस्थापक आणि अनुवादकांमध्ये योग्य संसाधने आणि संवाद आवश्यक असेल. + +2. _भाषांतर → पुनरावलोकन → अंमलबजावणी_ + +- एक अधिक प्रगत कार्यप्रवाह, ज्यामध्ये भाषांतरांची गुणवत्ता स्वीकारार्ह आणि सुसंगत आहे याची खात्री करण्यासाठी पुनरावलोकन आणि संपादन प्रक्रिया समाविष्ट आहे. +- या कार्यप्रवाहासाठी अनेक दृष्टिकोन आहेत, जिथे भाषांतर व्यावसायिक अनुवादक किंवा स्वयंसेवकांद्वारे केले जाऊ शकते, तर पुनरावलोकन प्रक्रिया बहुधा व्यावसायिक पुनरावलोकनकर्त्यांद्वारे हाताळली जाईल, जे लक्ष्य भाषेत पाळल्या जाणाऱ्या सर्व व्याकरण आणि शुद्धलेखन नियमांशी परिचित आहेत. + +3. _भाषांतर → पुनरावलोकन → QA → अंमलबजावणी_ + +- सर्वोत्तम गुणवत्ता सुनिश्चित करण्यासाठी इष्टतम कार्यप्रवाह. जरी QA नेहमीच आवश्यक नसले तरी, भाषांतर आणि पुनरावलोकनानंतर अनुवादित मजकुराच्या गुणवत्तेची अधिक चांगली जाणीव होण्यासाठी ते उपयुक्त ठरू शकते. +- या कार्यप्रवाहासह, भाषांतरे केवळ स्वयंसेवकांद्वारे किंवा अगदी मशीन भाषांतराद्वारे केली जाऊ शकतात. पुनरावलोकन प्रक्रिया व्यावसायिक अनुवादकांद्वारे केली पाहिजे, तर QA भाषा सेवा प्रदात्याद्वारे किंवा अंतर्गतपणे केले जाऊ शकते, जर तुमच्याकडे लक्ष्य भाषांचे मूळ भाषिक कर्मचारी असतील. + +भाषांतर कार्यप्रवाहांबद्दल अधिक वाचा: + +[भाषांतर कार्यप्रवाहाच्या पाच टप्प्यांवरील सामग्री नियम](https://contentrules.com/creating-translation-workflow/) + +[भाषांतर कार्यप्रवाह व्यवस्थापन म्हणजे काय यावर Smartling](https://www.smartling.com/resources/101/what-is-translation-workflow-management/) + +[भाषांतर कार्यप्रवाहावर RixTrans](https://www.rixtrans.com/translation-workflow) + +## परिभाषा व्यवस्थापन {#terminology-management} + +परिभाषा कशी हाताळायची याबद्दल स्पष्ट योजना स्थापित करणे हे आपल्या भाषांतरांची गुणवत्ता आणि सुसंगतता सुनिश्चित करण्यासाठी आणि आपल्या अनुवादकांचा वेळ वाचवण्यासाठी सर्वात महत्त्वाच्या चरणांपैकी एक आहे. + +भाषांतर क्षेत्रात, याला परिभाषा व्यवस्थापन म्हणून ओळखले जाते आणि ही एक प्रमुख सेवा आहे जी भाषा सेवा प्रदाते त्यांच्या ग्राहकांना त्यांच्या भाषातज्ञांच्या गटात प्रवेश आणि सामग्री व्यवस्थापनाव्यतिरिक्त देतात. + +परिभाषा व्यवस्थापन म्हणजे आपल्या प्रकल्पासाठी महत्त्वाच्या आणि नेहमीच योग्य आणि सुसंगतपणे अनुवादित केल्या पाहिजेत अशा परिभाषा ओळखणे, गोळा करणे आणि व्यवस्थापित करण्याची प्रक्रिया. + +परिभाषा व्यवस्थापनाबद्दल विचार करण्यास सुरुवात करताना काही चरणांचे अनुसरण करणे आवश्यक आहे: + +- टर्मबेसमध्ये समाविष्ट केल्या पाहिजेत अशा प्रमुख संज्ञा ओळखा. +- संज्ञा आणि त्यांच्या व्याख्यांचा एक शब्दकोश तयार करा. +- संज्ञांचे भाषांतर करा आणि त्यांना शब्दकोशात जोडा. +- भाषांतरे तपासा आणि मंजूर करा. +- शब्दकोश सांभाळा आणि नवीन संज्ञा महत्त्वाच्या झाल्यावर त्यासह अद्यतनित करा. + +परिभाषा व्यवस्थापनाबद्दल अधिक वाचा: + +[परिभाषा व्यवस्थापन म्हणजे काय यावर Trados](https://www.trados.com/solutions/terminology-management/translation-101-what-is-terminology-management.html) + +[परिभाषा व्यवस्थापन का महत्त्वाचे आहे यावर Language Scientific](https://www.languagescientific.com/terminology-management-why-it-matters/#:~:text=Terminology%20management%20is%20the%20process,are%20related%20to%20each%20other.) + +[परिभाषा व्यवस्थापन म्हणजे काय आणि ते का महत्त्वाचे आहे यावर Clear Words Translation](http://clearwordstranslations.com/language/en/what-is-terminology-management/) + +### भाषांतर मेमरी आणि शब्दकोश {#tm-and-glossary} + +भाषांतर मेमरी आणि शब्दकोश हे भाषांतर उद्योगातील महत्त्वाची साधने आहेत आणि बहुतेक भाषा सेवा प्रदाते यावर अवलंबून असतात. + +चला पाहूया की या संज्ञांचा अर्थ काय आहे आणि त्या एकमेकांपेक्षा कशा वेगळ्या आहेत: + +**भाषांतर मेमरी (TM)** – एक डेटाबेस जो आपोआप सेगमेंट्स किंवा स्ट्रिंग्स, ज्यात मजकुराचे मोठे ब्लॉक, पूर्ण वाक्ये, परिच्छेद आणि वैयक्तिक संज्ञा तसेच प्रत्येक भाषेतील त्यांचे वर्तमान आणि पूर्वीचे भाषांतर संग्रहित करतो. + +बहुतेक स्थानिकीकरण साधने, भाषांतर व्यवस्थापन प्रणाली आणि संगणक-सहाय्यित भाषांतर साधनांमध्ये अंगभूत भाषांतर मेमरी असतात, ज्या सहसा निर्यात केल्या जाऊ शकतात आणि इतर तत्सम साधनांमध्ये देखील वापरल्या जाऊ शकतात. + +भाषांतर मेमरी वापरण्याचे फायदे म्हणजे जलद भाषांतर, चांगली भाषांतर गुणवत्ता, स्त्रोत सामग्री अद्यतनित करताना किंवा बदलताना काही भाषांतर टिकवून ठेवण्याची क्षमता आणि पुनरावृत्ती सामग्रीसाठी कमी भाषांतर खर्च. + +भाषांतर मेमरी विविध सेगमेंट्समधील टक्केवारी जुळण्यावर आधारित कार्य करतात आणि सहसा जेव्हा दोन सेगमेंट्समध्ये ५०% पेक्षा जास्त समान सामग्री असते तेव्हा सर्वात उपयुक्त असतात. त्यांचा वापर १००% जुळणाऱ्या पुनरावृत्ती सेगमेंट्सचे आपोआप भाषांतर करण्यासाठी देखील केला जातो, ज्यामुळे पुनरावृत्ती सामग्रीचे एकापेक्षा जास्त वेळा भाषांतर करण्याची गरज नाहीशी होते. + +भाषांतर मेमरीबद्दल अधिक वाचा: + +[भाषांतर मेमरीवर Memsource](https://www.memsource.com/translation-memory/) + +[भाषांतर मेमरी म्हणजे काय यावर Smartling](https://www.smartling.com/resources/101/what-is-translation-memory/) + +**शब्दकोश –** महत्त्वाच्या किंवा संवेदनशील संज्ञा, त्यांच्या व्याख्या, कार्ये आणि स्थापित भाषांतरांची सूची. शब्दकोश आणि भाषांतर मेमरीमधील मुख्य फरक म्हणजे शब्दकोश आपोआप तयार होत नाही आणि त्यात पूर्ण वाक्यांचे भाषांतर नसते. + +बहुतेक स्थानिकीकरण साधने, भाषांतर व्यवस्थापन प्रणाली आणि संगणक-सहाय्यित भाषांतर साधनांमध्ये अंगभूत शब्दकोश असतात जे तुम्ही तुमच्या प्रकल्पासाठी महत्त्वाचे परिभाषा समाविष्ट असल्याची खात्री करण्यासाठी सांभाळू शकता. TM प्रमाणेच, शब्दकोश सहसा निर्यात केला जाऊ शकतो आणि इतर स्थानिकीकरण साधनांमध्ये वापरला जाऊ शकतो. + +तुमचा भाषांतर प्रकल्प सुरू करण्यापूर्वी, थोडा वेळ घेऊन तुमच्या अनुवादक आणि पुनरावलोकनकर्त्यांसाठी एक शब्दकोश तयार करण्याची अत्यंत शिफारस केली जाते. शब्दकोश वापरल्याने महत्त्वाच्या संज्ञांचे योग्य भाषांतर होते, अनुवादकांना अत्यंत आवश्यक संदर्भ मिळतो आणि भाषांतरांमध्ये सुसंगततेची हमी मिळते. + +जरी शब्दकोशांमध्ये बहुतेकदा लक्ष्य भाषांमध्ये स्थापित भाषांतरे असतात, तरीही त्याशिवायही ते उपयुक्त असतात. स्थापित भाषांतरांशिवायही, शब्दकोशामध्ये तांत्रिक संज्ञांच्या व्याख्या असू शकतात, ज्या संज्ञांचे भाषांतर केले जाऊ नये त्या हायलाइट करू शकतात आणि अनुवादकांना माहिती देऊ शकतात की एखादी विशिष्ट संज्ञा नाम, क्रियापद, विशेष नाम किंवा भाषणाचा कोणताही अन्य भाग म्हणून वापरली जाते. + +शब्दकोशांबद्दल अधिक वाचा: + +[भाषांतर शब्दकोश म्हणजे काय यावर Lionbridge](http://info.lionbridge.com/rs/lionbridge/images/Lionbridge%20FAQ_Glossary_2013.pdf) + +[शब्दकोशांवर Transifex](https://docs.transifex.com/glossary/glossary) + +जर तुम्ही तुमच्या प्रकल्पासाठी स्थानिकीकरण साधन वापरण्याची योजना आखत नसाल, तर तुम्ही भाषांतर मेमरी आणि शब्दकोश वापरू शकणार नाही (तुम्ही एक्सेल फाइलमध्ये शब्दकोश किंवा टर्मबेस तयार करू शकता, तथापि, स्वयंचलित शब्दकोश अनुवादकांना मॅन्युअली संज्ञा आणि त्यांच्या व्याख्या शोधण्याची गरज दूर करतात). + +याचा अर्थ असा की सर्व पुनरावृत्ती आणि तत्सम सामग्री प्रत्येक वेळी मॅन्युअली भाषांतरित करावी लागेल. याव्यतिरिक्त, अनुवादकांना एखादी संज्ञा भाषांतरित करण्याची गरज आहे की नाही, ती मजकुरात कशी वापरली जाते आणि एखाद्या संज्ञेचे आधीच स्थापित भाषांतर आहे की नाही याबद्दल प्रश्नांसह संपर्क साधावा लागेल. + +_तुम्हाला तुमच्या प्रकल्पात ethereum.org भाषांतर मेमरी आणि शब्दकोश वापरायचे आहे का? आमच्याशी translations@ethereum.org येथे संपर्क साधा._ + +## अनुवादक आउटरीच {#translator-outreach} + +**भाषा सेवा प्रदात्यासोबत काम करणे** + +जर तुम्ही भाषा सेवा प्रदाता आणि त्यांच्या व्यावसायिक अनुवादकांसोबत काम करत असाल, तर हा विभाग तुमच्यासाठी फारसा संबंधित नसेल. + +या प्रकरणात, तुम्हाला आवश्यक असलेल्या सर्व सेवा (उदा. भाषांतर, पुनरावलोकन, QA) अनेक भाषांमध्ये प्रदान करण्याची क्षमता असलेल्या भाषा सेवा प्रदात्याची निवड करणे महत्त्वाचे आहे. + +जरी केवळ त्यांच्या ऑफर केलेल्या दरांवर आधारित भाषा सेवा प्रदात्याची निवड करणे मोहक असले तरी, हे लक्षात घेणे महत्त्वाचे आहे की सर्वात मोठ्या भाषा सेवा प्रदात्यांचे दर एका कारणामुळे जास्त असतात. + +- त्यांच्या डेटाबेसमध्ये हजारो भाषातज्ञ आहेत, याचा अर्थ ते तुमच्या विशिष्ट क्षेत्रातील पुरेसा अनुभव आणि ज्ञान असलेल्या अनुवादकांना तुमच्या प्रकल्पासाठी नियुक्त करू शकतील (म्हणजे, तांत्रिक अनुवादक). +- त्यांना विविध प्रकल्पांवर काम करण्याचा आणि त्यांच्या ग्राहकांच्या विविध गरजा पूर्ण करण्याचा महत्त्वपूर्ण अनुभव आहे. याचा अर्थ असा की ते तुमच्या विशिष्ट कार्यप्रवाहात अधिक जुळवून घेण्याची, तुमच्या भाषांतर प्रक्रियेसाठी मौल्यवान सूचना आणि संभाव्य सुधारणा देऊ करण्याची आणि तुमच्या गरजा, आवश्यकता आणि मुदती पूर्ण करण्याची अधिक शक्यता आहे. +- सर्वात मोठ्या भाषा सेवा प्रदात्यांपैकी बहुतेकांकडे स्वतःची स्थानिकीकरण साधने, भाषांतर मेमरी आणि शब्दकोश असतात जे तुम्ही वापरू शकता. नसल्यास, त्यांच्या गटात किमान पुरेसे भाषातज्ञ आहेत याची खात्री करण्यासाठी की त्यांचे अनुवादक तुम्ही वापरू इच्छित असलेल्या कोणत्याही स्थानिकीकरण साधनाने परिचित असतील आणि काम करू शकतील. + +तुम्ही जगातील सर्वात मोठ्या भाषा सेवा प्रदात्यांची सखोल तुलना, त्या प्रत्येकाबद्दल काही तपशील आणि ते पुरवत असलेल्या सेवांनुसार, भौगोलिक डेटानुसार, इत्यादी ब्रेकडाउन [2021 Nimdzi 100 अहवाल](https://www.nimdzi.com/nimdzi-100-top-lsp/) मध्ये शोधू शकता. + +**गैर-व्यावसायिक अनुवादकांसोबत काम करणे** + +तुम्ही गैर-व्यावसायिक अनुवादकांसोबत काम करत असाल आणि तुम्हाला भाषांतर करण्यास मदत करण्यासाठी स्वयंसेवक शोधत असाल. + +लोकांपर्यंत पोहोचण्याचे आणि त्यांना तुमच्या प्रकल्पात सामील होण्यासाठी आमंत्रित करण्याचे अनेक मार्ग आहेत. हे मोठ्या प्रमाणावर तुमच्या उत्पादनावर आणि तुमच्याकडे आधीच किती मोठा समुदाय आहे यावर अवलंबून असेल. + +स्वयंसेवकांना ऑनबोर्ड करण्याचे काही मार्ग खाली दिले आहेत: + +**आउटरीच –** जरी हे खालील मुद्द्यांमध्ये काही प्रमाणात समाविष्ट असले तरी, संभाव्य स्वयंसेवकांपर्यंत पोहोचणे आणि त्यांना तुमच्या भाषांतर उपक्रमाबद्दल जागरूक करणे हे स्वतःच प्रभावी ठरू शकते. + +बर्‍याच लोकांना त्यांच्या आवडत्या प्रकल्पांमध्ये सामील व्हायचे असते आणि योगदान द्यायचे असते, परंतु डेव्हलपर असल्याशिवाय किंवा विशेष तांत्रिक कौशल्ये असल्याशिवाय ते करण्याचा स्पष्ट मार्ग त्यांना अनेकदा दिसत नाही. जर तुम्ही तुमच्या प्रकल्पाबद्दल जागरूकता पसरवू शकलात, तर अनेक द्विभाषिक सहभागी होण्यास उत्सुक असतील. + +**तुमच्या समुदायामध्ये शोधणे –** या क्षेत्रातील बहुतेक प्रकल्पांमध्ये आधीच मोठे आणि सक्रिय समुदाय आहेत. तुमच्या समुदायातील अनेक सदस्य कदाचित सोप्या मार्गाने प्रकल्पात योगदान देण्याच्या संधीचे कौतुक करतील. + +ओपन-सोर्स प्रकल्पांमध्ये योगदान देणे अनेकदा आंतरिक प्रेरणेवर आधारित असले तरी, हा एक विलक्षण शिकण्याचा अनुभव देखील आहे. तुमच्या प्रकल्पाबद्दल अधिक जाणून घेण्यास इच्छुक असलेले कोणीही स्वयंसेवक म्हणून भाषांतर कार्यक्रमात सामील होण्यास आनंदी असेल, कारण यामुळे त्यांना त्यांच्या आवडीच्या गोष्टीत योगदान दिल्याची भावना एका गहन प्रत्यक्ष शिकण्याच्या अनुभवासह जोडता येईल. + +**तुमच्या उत्पादनात उपक्रमाचा उल्लेख करणे –** जर तुमचे उत्पादन लोकप्रिय असेल आणि मोठ्या संख्येने लोक वापरत असतील, तर तुमच्या भाषांतर कार्यक्रमाला हायलाइट करणे आणि उत्पादन वापरताना वापरकर्त्यांना कृतीसाठी आवाहन करणे अत्यंत प्रभावी ठरू शकते. + +हे ॲप्लिकेशन्स आणि वेबसाइट्ससाठी तुमच्या उत्पादनात CTA सह बॅनर किंवा पॉप-अप जोडण्याइतके सोपे असू शकते. हे प्रभावी आहे कारण तुमचे लक्ष्य प्रेक्षक तुमचा समुदाय आहे - जे लोक मुळातच सहभागी होण्याची अधिक शक्यता असते. + +**सोशल मीडिया –** सोशल मीडिया तुमच्या भाषांतर कार्यक्रमाबद्दल जागरूकता पसरवण्यासाठी आणि तुमच्या समुदाय सदस्यांपर्यंत पोहोचण्यासाठी, तसेच तुमच्या समुदायाचे सदस्य नसलेल्या इतर लोकांपर्यंत पोहोचण्यासाठी एक प्रभावी मार्ग असू शकतो. + +जर तुमचा Discord सर्व्हर किंवा Telegram चॅनेल असेल, तर ते आउटरीच, तुमच्या अनुवादकांशी संवाद आणि तुमच्या योगदानकर्त्यांना स्वीकारण्यासाठी वापरणे सोपे आहे. + +X (पूर्वीचे Twitter) सारखे प्लॅटफॉर्म नवीन समुदाय सदस्यांना ऑनबोर्ड करण्यासाठी आणि आपल्या योगदानकर्त्यांना सार्वजनिकपणे स्वीकारण्यासाठी देखील उपयुक्त ठरू शकतात. + +Linux Foundation ने [२०२० FOSS योगदानकर्ता सर्वेक्षणावरील अहवाल](https://www.linuxfoundation.org/wp-content/uploads/2020FOSSContributorSurveyReport_121020.pdf) तयार केला आहे, ज्यात ओपन-सोर्स योगदानकर्ते आणि त्यांच्या प्रेरणांचे विश्लेषण केले आहे. + +## निष्कर्ष {#conclusion} + +या दस्तऐवजात प्रत्येक भाषांतर कार्यक्रमाला माहिती असावी अशा काही प्रमुख विचारांचा समावेश आहे. हे कोणत्याही प्रकारे एक संपूर्ण मार्गदर्शक नाही, तरीही भाषांतर उद्योगात कोणताही अनुभव नसलेल्या कोणालाही त्यांच्या प्रकल्पासाठी भाषांतर कार्यक्रम आयोजित करण्यास मदत करू शकते. + +जर तुम्ही विविध साधने, प्रक्रिया आणि भाषांतर कार्यक्रम व्यवस्थापित करण्याच्या गंभीर पैलूंबद्दल अधिक तपशीलवार सूचना आणि ब्रेकडाउन शोधत असाल, तर काही सर्वात मोठे भाषा सेवा प्रदाते ब्लॉग राखतात आणि अनेकदा स्थानिकीकरण प्रक्रियेच्या विविध पैलूंवर लेख प्रकाशित करतात. जर तुम्हाला वरील कोणत्याही विषयात खोलवर जायचे असेल आणि स्थानिकीकरण प्रक्रिया व्यावसायिकरित्या कशी कार्य करते हे समजून घ्यायचे असेल तर ही सर्वोत्तम संसाधने आहेत. + +प्रत्येक विभागाच्या शेवटी काही संबंधित लिंक्स समाविष्ट केल्या आहेत; तथापि, तुम्ही ऑनलाइन अनेक अन्य संसाधने शोधू शकता. + +सहकार्याच्या प्रस्तावांसाठी किंवा अतिरिक्त माहिती, शिकवण आणि ethereum.org भाषांतर कार्यक्रम सांभाळून आम्ही मिळवलेल्या सर्वोत्तम पद्धतींसाठी, आम्हाला translations@ethereum.org येथे संपर्क साधण्यास मोकळ्या मनाने. diff --git a/public/content/translations/mr/contributing/translation-program/resources/index.md b/public/content/translations/mr/contributing/translation-program/resources/index.md new file mode 100644 index 00000000000..f886d74faa8 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/resources/index.md @@ -0,0 +1,49 @@ +--- +title: "अनुवादकांसाठी संसाधने" +lang: mr +description: "ethereum.org अनुवादकांसाठी उपयुक्त संसाधने" +--- + +# संसाधने {#resources} + +तुम्ही ethereum.org अनुवादकांसाठी काही उपयुक्त मार्गदर्शक आणि साधने, तसेच अनुवाद समुदाय आणि अद्यतने खाली मिळवू शकता. + +## मार्गदर्शक {#guides} + +- [अनुवाद शैली मार्गदर्शक](/contributing/translation-program/translators-guide/) _– ethereum.org अनुवादकांसाठी सूचना आणि टिपा_ +- [अनुवाद FAQs](/contributing/translation-program/faq/) _– ethereum.org अनुवाद कार्यक्रमाबद्दल वारंवार विचारले जाणारे प्रश्न आणि उत्तरे_ +- [Crowdin ऑनलाइन संपादक मार्गदर्शक](https://support.crowdin.com/online-editor/) _– Crowdin ऑनलाइन संपादक वापरण्यासाठी आणि Crowdin च्या काही प्रगत वैशिष्ट्यांसाठी एक सखोल मार्गदर्शक_ + +## साधने {#tools} + +- [Linguee](https://www.linguee.com/) + _– अनुवादांसाठी शोध इंजिन आणि शब्दकोश जे शब्द किंवा वाक्प्रचाराद्वारे शोधणे सक्षम करते_ +- [Proz term search](https://www.proz.com/search/) + _– विशेष संज्ञांसाठी अनुवाद शब्दकोश आणि पारिभाषिक शब्दावलींचा डेटाबेस_ +- [Eurotermbank](https://www.eurotermbank.com/) + _– ४२ भाषांमधील युरोपियन पारिभाषिक शब्दांचा संग्रह_ + +## समुदाय {#communities} + +- [भाषा-विशिष्ट Discord अनुवाद गट](https://discord.gg/ethereum-org) + _– ethereum.org अनुवादकांना अनुवाद गटांशी जोडण्यासाठी एक उपक्रम_ +- [चीनी अनुवादक गट](https://www.notion.so/Ethereum-org-05375fe0a94c4214acaf90f42ba40171) + _– चीनी अनुवादकांमध्ये सुलभ समन्वयासाठी Notion पेज_ + +## नवीनतम अद्यतने {#latest-updates} + +अनुवाद कार्यक्रमाच्या नवीनतम प्रगतीसह अद्ययावत राहण्यासाठी, तुम्ही [Ethereum Foundation ब्लॉग](https://blog.ethereum.org/) फॉलो करू शकता: + +- [ऑक्टोबर २०२१ टप्पे अद्यतन](https://blog.ethereum.org/2021/10/04/translation-program-update/) +- [डिसेंबर २०२० टप्पे अद्यतन](https://blog.ethereum.org/2020/12/21/translation-program-milestones-updates-20/) +- [जुलै २०२० टप्पे अद्यतन](https://blog.ethereum.org/2020/07/29/ethdotorg-translation-milestone/) +- [ऑगस्ट २०१९ अनुवाद कार्यक्रम शुभारंभ](https://blog.ethereum.org/2019/08/20/translating-ethereum-for-our-global-community/) + +## अनुवादकांसाठी कार्यालयीन वेळ {#office-hours} + +प्रत्येक महिन्याच्या दुसऱ्या बुधवारी अनुवादकांसाठी आमची कार्यालयीन वेळ असते. हे [ethereum.org Discord](https://discord.gg/ethereum-org) वरील #office-hours व्हॉइस चॅनेलमध्ये आयोजित केले जातात, जिथे तुम्ही अचूक वेळ आणि अतिरिक्त तपशील देखील शोधू शकता. + +कार्यालयीन वेळ आमच्या अनुवादकांना अनुवाद प्रक्रियेबद्दल प्रश्न विचारण्यास, कार्यक्रमावर अभिप्राय देण्यास, त्यांच्या कल्पना सामायिक करण्यास किंवा फक्त ethereum.org च्या मुख्य टीमशी गप्पा मारण्यास परवानगी देते. +अखेरीस, आम्हाला या कॉल्सचा उपयोग अनुवाद कार्यक्रमातील अलीकडील घडामोडी कळवण्यासाठी आणि आमच्या योगदानकर्त्यांसह महत्त्वाच्या टिपा आणि सूचना सामायिक करण्यासाठी करायचा आहे. + +जर तुम्ही ethereum.org अनुवादक असाल किंवा बनू इच्छित असाल, तर यापैकी एका सत्रादरम्यान आमच्यात मोकळेपणाने सामील व्हा. diff --git a/public/content/translations/mr/contributing/translation-program/translatathon/details/index.md b/public/content/translations/mr/contributing/translation-program/translatathon/details/index.md new file mode 100644 index 00000000000..08994c41a07 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/translatathon/details/index.md @@ -0,0 +1,90 @@ +--- +title: "तपशील आणि नियम" +lang: mr +template: translatathon +--- + +![](./participate.png) + +ट्रान्सलेटेथॉन सर्वांसाठी खुले आहे आणि अर्ज भरून आणि क्राउडइनमधील प्रकल्पात सामील होऊन कोणीही त्यात सहभागी होऊ शकते. + +अनुवाद कालावधी दरम्यान अनुवादक त्यांच्या भाषेत क्राउडइन एडिटरमध्ये अनुवाद न केलेल्या स्ट्रिंग्ससाठी भाषांतराचे सल्ले देऊन पॉइंट्स गोळा करतात. + +प्रत्येक सहभागीचा अंतिम स्कोअर हा अनुवाद कालावधी दरम्यान त्यांनी अनुवादित केलेल्या शब्दांच्या संख्येवर आधारित लीडरबोर्डवरील त्यांच्या स्थानावरून आणि त्यांनी गोळा केलेल्या कोणत्याही संभाव्य बोनस पॉइंट्सवरून निर्धारित केला जातो. + +## सुरुवात करणे {#getting-started} + +अनुवाद प्रक्रिया क्राउडइनमधील ethereum.org प्रकल्पामध्ये होते आणि अनुवादक ethereum.org वेबसाइटवरील जवळजवळ सर्व सामग्रीने बनलेल्या, अनुवाद न झालेल्या स्ट्रिंग्जसाठी त्यांचे भाषांतर सुचवतात. + +भाषांतरे थेट ऑनलाइन एडिटरमध्ये सुचवली जातात त्यामुळे कोणतीही फाइल किंवा डिलिव्हरेबल्स डाउनलोड किंवा अपलोड करण्याची गरज नाही. प्रत्येक अनुवादित शब्दाचा मागोवा घेतला जातो आणि त्याची गणना केली जाते. + +**१) प्रकल्पात सामील व्हा** + +- योगदान सुरू करण्यासाठी, [क्राउडइनमधील ethereum.org प्रकल्पात](https://crowdin.com/project/ethereum-org) सामील व्हा +- तुम्हाला साइन इन करावे लागेल किंवा एक खाते तयार करावे लागेल - यासाठी फक्त एक ईमेल ॲड्रेस आणि पासवर्ड आवश्यक आहे + +**२) तुमची भाषा निवडा** + +- लक्ष्य भाषांच्या यादीत तुमची भाषा शोधा आणि तिच्या नावावर किंवा ध्वजावर क्लिक करून ती उघडा +- तुम्हाला उपलब्ध नसलेल्या भाषेत अनुवाद करायचा असेल, तर Crowdin वर [Ethereum.org टीमशी](https://crowdin.com/profile/ethdotorg) संपर्क साधा किंवा आम्हाला translations@ethereum.org वर ईमेल पाठवा आणि आम्ही विनंतीनुसार अतिरिक्त लक्ष्य भाषा जोडू + +**३) अनुवाद न केलेली फाइल उघडा** + +- अनुवाद सुरू करण्यासाठी पहिली अनुवाद न केलेली फाइल शोधा. स्रोत फाइल्स असलेले फोल्डर्स प्राधान्यावर आधारित आहेत, म्हणून तुम्ही पहिल्या फोल्डरचे भाषांतर सुरू केले पाहिजे ज्यात अनुवाद न केलेल्या फाइल्स आहेत +- प्रत्येक फाइलमध्ये एक प्रगती सूचक असतो जो फाइलमधील अनुवाद करण्यायोग्य सामग्रीपैकी किती अनुवादित आणि मंजूर झाली आहे हे दर्शवतो... जर कोणत्याही फाइलची भाषांतर प्रगती १००% पेक्षा कमी असेल, तर कृपया त्याचे भाषांतर करा + +**४) अनुवाद न केलेल्या स्ट्रिंग्सचे भाषांतर करा** + +- जेव्हा तुम्ही भाषांतर करण्यासाठी फाइल उघडता, तेव्हा तुम्ही फक्त अनुवाद न केलेल्या स्ट्रिंग्सचे भाषांतर करत आहात याची खात्री करा! +- प्रत्येक स्ट्रिंगमध्ये एक स्टेटस इंडिकेटर असतो जो दर्शवतो की ती _अनुवादित_, _अनुवाद न झालेली_, किंवा _मंजूर_ आहे. जर स्त्रोत स्ट्रिंगचे तुमच्या भाषेत आधीच सुचवलेले भाषांतर असेल, तर त्याचे भाषांतर करण्याची गरज नाही +- तुम्ही एडिटरमधील स्ट्रिंग्सना _प्रथम अनुवाद न झालेले_ किंवा _फक्त अनुवाद न झालेले_ दर्शविण्यासाठी फिल्टर देखील करू शकता + +क्राउडइन एडिटर नेव्हिगेट करण्यासाठी आणि वापरण्यासाठी तपशीलवार मार्गदर्शकासाठी, आम्ही सर्व ट्रान्सलेटेथॉन सहभागींना आमचे [अनुवाद कसे करावे](/contributing/translation-program/how-to-translate/) मार्गदर्शक वाचण्याची शिफारस करतो. + +तुम्ही आमचे [भाषांतर शैली मार्गदर्शक](/contributing/translation-program/translators-guide/) तपासून काही टिपा आणि सर्वोत्तम पद्धती देखील शोधू शकता. + +**पॉइंट्स कसे काम करतात** + +प्रत्येक ट्रान्सलेटेथॉन सहभागी ethereum.org क्राउडइन प्रकल्प आणि इतर पात्र प्रकल्पांमध्ये (पात्र प्रकल्पांची संपूर्ण यादी खाली उपलब्ध आहे) सामग्रीचे भाषांतर करून त्यांच्या अंतिम स्कोअरसाठी गुण मिळवेल. + +स्कोअरिंग सोपे आहे: **१ अनुवादित शब्द = १ पॉइंट** + +तुमची अंतिम पॉइंट्सची विभागणी प्राप्त करण्यासाठी, तुमच्या सुचवलेल्या भाषांतरांना मूल्यांकन प्रक्रियेतून जावे लागेल, जिथे व्यावसायिक समीक्षक प्रत्येक सहभागीच्या भाषांतरांची तपासणी करून ते किमान गुणवत्तेची मर्यादा पूर्ण करतात आणि प्रक्रियेत कोणतेही मशीन किंवा AI भाषांतर वापरले गेले नाही याची खात्री करतील. + +## इकोसिस्टम सामग्री {#ecosystem-content} + +ethereum.org भाषांतर कार्यक्रम नेहमीच सक्रिय असल्याने, वेबसाइटवरील काही लक्ष्य भाषांमधील भाषांतर प्रगती इतरांपेक्षा लक्षणीयरीत्या जास्त आहे. + +सर्व ट्रान्सलेटेथॉन सहभागींना शक्य तितक्या सामग्रीचे भाषांतर करण्याची आणि सर्वोच्च बक्षिसांसाठी स्पर्धा करण्याची समान संधी मिळावी यासाठी, ट्रान्सलेटेथॉनचा भाग असलेली स्रोत सामग्री केवळ ethereum.org वेबसाइट सामग्रीपुरती मर्यादित नाही. + +कोणत्याही पात्र प्रकल्पांचे भाषांतर करणाऱ्या सहभागींना समान गुण मिळतील, कोणत्याही प्रकल्पातील १ अनुवादित शब्द = १ पॉइंट. + +२०२५ ट्रान्सलेटेथॉनचा भाग असलेल्या सर्व पात्र प्रकल्पांची यादी येथे आहे: + +- [Ethereum.org](https://crowdin.com/project/ethereum-org) + +- [Ethereum.org डेव्हलपर ट्युटोरियल्स](https://crowdin.com/project/33388446abbe9d7aa21e42e49bba7f97) + +- [EthStaker डिपॉझिट CLI](https://crowdin.com/project/ethstaker-deposit-cli) + +- [Eth डॉकर डॉक्स](https://crowdin.com/project/eth-docker-docs) + +- [रीमिक्स IDE डॉक्युमेंटेशन](https://crowdin.com/project/remix-translation) + +- [Remix LearnEth](https://crowdin.com/project/remix-learneth) + +- [web3.py](https://crowdin.com/project/web3py) + +## मूल्यांकन प्रक्रिया {#evaluation-process} + +सर्व भाषांतरे QA आणि अभिप्रायाच्या अधीन असतील, जिथे व्यावसायिक भाषाशास्त्रज्ञ गुणवत्ता आणि अचूकतेवर आधारित सबमिशनचे मूल्यांकन करतील. + +आम्ही काही टूल्स वापरून **मशीन भाषांतर विरोधी उपाय** देखील चालवू जे मशीन किंवा AI भाषांतरे स्वयंचलितपणे शोधतात. + +भाषांतराची गुणवत्ता स्कोअरिंगमध्ये महत्त्वपूर्ण भूमिका बजावणार नसली तरी, **मशीन किंवा AI भाषांतरे वापरणारे कोणतेही सहभागी** किंवा कमी-गुणवत्तेची आणि चुकीची भाषांतरे सुचवणारे बक्षिसांसाठी पात्र नसतील! + +मूल्यांकन कालावधी संपूर्ण सप्टेंबरमध्ये असेल आणि २५ सप्टेंबर रोजी होणाऱ्या ethereum.org कम्युनिटी कॉलवर निकाल जाहीर केले जातील. + +वेबसाइटवर जोडण्यापूर्वी सर्व भाषांतरांचे पूर्णपणे पुनरावलोकन केले जाईल. + + diff --git a/public/content/translations/mr/contributing/translation-program/translatathon/index.md b/public/content/translations/mr/contributing/translation-program/translatathon/index.md new file mode 100644 index 00000000000..fc60d94cbd3 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/translatathon/index.md @@ -0,0 +1,100 @@ +--- +title: "२०२५ ethereum.org ट्रान्सलॅथॉन" +lang: mr +template: translatathon +--- + + + + + + + +## प्रस्तावना {#introduction} + +आमचा विश्वास आहे की Ethereum मजकूर आणि ऑनबोर्डिंग संसाधने, ते कोणतीही भाषा बोलत असले तरी, प्रत्येकासाठी उपलब्ध असावीत. +या ध्येयाच्या जवळ जाण्यासाठी, ethereum.org अनुवाद कार्यक्रम हा वेबसाइटचे शक्य तितक्या भाषांमध्ये भाषांतर करण्याचा एक उपक्रम आहे. + +अनुवाद कार्यक्रमाचा एक भाग म्हणून, आम्ही ट्रान्सलॅथॉनची तिसरी आवृत्ती आयोजित करत आहोत. ही आमची अनुवाद स्पर्धा आहे, ज्याचा उद्देश कमी-सक्रिय भाषांमधील अनुवाद योगदानाला प्रोत्साहन देणे, साइटवर उपलब्ध भाषांची संख्या आणि मजकूराचे प्रमाण वाढवणे, नवीन योगदानकर्त्यांना ऑनबोर्ड करणे आणि आमच्या विद्यमान योगदानकर्त्यांना पुरस्कृत करणे आहे. + +जर तुम्ही इंग्रजी व्यतिरिक्त इतर भाषेचे मूळ भाषिक असाल आणि बक्षिसांसाठी स्पर्धा करत असताना Ethereum मजकूर अधिक सुलभ करण्यासाठी मदत करू इच्छित असाल, तर अधिक जाणून घेण्यासाठी पुढे वाचा! + +[ethereum.org अनुवाद कार्यक्रमाबद्दल अधिक जाणून घ्या](/contributing/translation-program/) + +## वेळापत्रक {#timeline} + +२०२५ ट्रान्सलॅथॉनसाठी महत्त्वाच्या तारखा येथे आहेत: + + + + + +## सहभाग घ्या {#participate} + +![समुदाय आणि पृथ्वीगोलाची प्रतिमा](./participate.png) + + + +

कोण सहभागी होऊ शकते?

+ १८ वर्षांपेक्षा जास्त वयाची, किमान एका गैर-इंग्रजी भाषेची मूळ भाषिक आणि इंग्रजीमध्ये पारंगत असलेली कोणतीही व्यक्ती. +
+ +

मी अनुवादक असणे आवश्यक आहे का?

+ नाही. तुम्ही फक्त द्विभाषिक असणे आणि मानवी भाषांतरे सुचवणे आवश्यक आहे (मशीन भाषांतराचा वापर निषिद्ध आहे!) तुमच्या क्षमतेनुसार, कोणत्याही व्यावसायिक अनुभवाची आवश्यकता नाही. +
+
+ + + +

मला किती वेळ द्यावा लागेल?

+ तुम्हाला पाहिजे तितका. बक्षिसांसाठी पात्र होण्यासाठी किमान मर्यादा १,००० अनुवादित शब्द आहे, जे पूर्ण करण्यासाठी सुमारे २ तास लागतील, तर सर्वोच्च बक्षिसांसाठी स्पर्धा करण्यासाठी अधिक वेळ देण्याची आवश्यकता असेल. +
+ +

मला Ethereum शी परिचित असणे आवश्यक आहे का?

+ नाही. Ethereum शी परिचित असणे तुमची उत्पादकता आणि गुणवत्ता वाढविण्यात मदत करू शकते, पण ट्रान्सलॅथॉन हा एक शिकण्याचा अनुभव देखील आहे, आणि सहभागी होताना Ethereum बद्दल अधिक जाणून घेण्यासाठी आणि सामील होण्यासाठी प्रत्येकास आमंत्रित केले आहे. +
+
+ +अधिक तपशिलांसाठी, [संपूर्ण नियम आणि अटी पहा](/contributing/translation-program/translatathon/terms-and-conditions) + +### पायरी-पायरीने सूचना {#step-by-step-instructions} + + + +## बक्षिसे {#prizes} + +| स्थान | बक्षिसाची रक्कम | +| --------------------- | --------------- | +| पहिले स्थान | $४००० | +| दुसरे स्थान | $२५०० | +| तिसरे स्थान | $१५०० | +| चौथे स्थान | $११०० | +| पाचवे स्थान | $१००० | +| सहावे स्थान | $६०० | +| सातवे स्थान | $५५० | +| आठवे स्थान | $५०० | +| नववे स्थान | $४५० | +| दहावे स्थान | $४०० | +| ११ वे - २० वे स्थान | $२४० | +| २१ वे - ५० वे स्थान | $१२० | +| ५१ वे - १०० वे स्थान | $६० | +| १०१ वे - १५० वे स्थान | $४० | +| उर्वरित | $२० | + +सर्व बक्षिसे ETH मध्ये दिली जातील. + + + + diff --git a/public/content/translations/mr/contributing/translation-program/translators-guide/index.md b/public/content/translations/mr/contributing/translation-program/translators-guide/index.md new file mode 100644 index 00000000000..d1d05f40e78 --- /dev/null +++ b/public/content/translations/mr/contributing/translation-program/translators-guide/index.md @@ -0,0 +1,299 @@ +--- +title: "अनुवादक मार्गदर्शक" +lang: mr +description: "ethereum.org अनुवादकांसाठी सूचना आणि टिपा" +--- + +# Ethereum.org भाषांतर शैली मार्गदर्शक {#style-guide} + +ethereum.org भाषांतर शैली मार्गदर्शकामध्ये अनुवादकांसाठी काही सर्वात महत्त्वाची मार्गदर्शक तत्त्वे, सूचना आणि टिपा आहेत, ज्यामुळे आम्हाला वेबसाइट स्थानिक करण्यास मदत होते. + +हा दस्तऐवज एक सामान्य मार्गदर्शक म्हणून काम करतो आणि तो कोणत्याही एका विशिष्ट भाषेसाठी नाही. + +तुम्हाला काही प्रश्न, सूचना किंवा अभिप्राय असल्यास, translations@ethereum.org वर आमच्याशी संपर्क साधा, Crowdin वर @ethdotorg ला संदेश पाठवा, किंवा [आमच्या Discord मध्ये सामील व्हा](https://discord.gg/ethereum-org), जिथे तुम्ही आम्हाला #translations चॅनेलमध्ये संदेश पाठवू शकता किंवा टीममधील कोणत्याही सदस्याशी संपर्क साधू शकता. + +## Crowdin चा वापर {#using-crowdin} + +Crowdin मधील प्रोजेक्टमध्ये कसे सामील व्हावे आणि Crowdin ऑनलाइन एडिटरचा वापर कसा करावा याबद्दलच्या मूलभूत सूचना तुम्हाला [भाषांतर कार्यक्रम पृष्ठावर](/contributing/translation-program/#how-to-translate) मिळतील. + +तुम्हाला Crowdin आणि त्याच्या काही प्रगत वैशिष्ट्यांबद्दल अधिक जाणून घ्यायचे असल्यास, [Crowdin नॉलेज बेस](https://support.crowdin.com/online-editor/) मध्ये सर्व Crowdin कार्यक्षमतेबद्दल सविस्तर मार्गदर्शक आणि आढावा आहे. + +## संदेशाचे सार टिपणे {#capturing-the-essence} + +ethereum.org सामग्रीचे भाषांतर करताना, शब्दशः भाषांतर टाळा. + +भाषांतरामध्ये संदेशाचे सार टिपले जाणे महत्त्वाचे आहे. याचा अर्थ काही वाक्यांची पुनर्रचना करणे, किंवा सामग्रीचे शब्दशः भाषांतर करण्याऐवजी वर्णनात्मक भाषांतर वापरणे असू शकते. + +वेगवेगळ्या भाषांमध्ये वेगवेगळे व्याकरणाचे नियम, परंपरा आणि शब्दक्रम असतात. भाषांतर करताना, लक्ष्यित भाषेत वाक्ये कशी तयार केली जातात याची कृपया नोंद घ्या, आणि इंग्रजी स्रोताचे शब्दशः भाषांतर करणे टाळा, कारण यामुळे वाक्याची रचना आणि वाचनीयता खराब होऊ शकते. + +स्रोतामधील मजकुराचे शब्दशः भाषांतर करण्याऐवजी, तुम्ही संपूर्ण वाक्य वाचावे आणि ते लक्ष्यित भाषेच्या परंपरांनुसार जुळवून घ्यावे अशी शिफारस केली जाते. + +## औपचारिक विरुद्ध अनौपचारिक {#formal-vs-informal} + +आम्ही संबोधनाची औपचारिक पद्धत वापरतो, जी नेहमीच विनम्र आणि सर्व अभ्यागतांसाठी योग्य असते. + +औपचारिक संबोधनाचा वापर केल्याने आम्ही अनधिकृत किंवा आक्षेपार्ह वाटणे टाळू शकतो, आणि हे अभ्यागताचे वय आणि लिंग विचारात न घेता कार्य करते. + +बहुतेक इंडो-युरोपीय आणि आफ्रो-आशियाई भाषांमध्ये लिंग-विशिष्ट द्वितीय-पुरुषी सर्वनामे वापरली जातात, जी पुरुष आणि स्त्री यांच्यात फरक करतात. वापरकर्त्याला संबोधित करताना किंवा मालकीवाचक सर्वनामे वापरताना, आम्ही अभ्यागताच्या लिंगाचा अंदाज लावणे टाळू शकतो, कारण संबोधनाची औपचारिक पद्धत सामान्यतः लागू होते आणि ते स्वतःला कसे ओळखतात याची पर्वा न करता सुसंगत असते. + +## साधा आणि स्पष्ट शब्दसंग्रह आणि अर्थ {#simple-vocabulary} + +आमचे ध्येय वेबसाइटवरील सामग्री शक्य तितक्या जास्त लोकांना समजेल अशी बनवणे आहे. + +बहुतेक प्रकरणांमध्ये, सहज समजणारे छोटे आणि सोपे शब्द वापरून हे सहज साध्य करता येते. तुमच्या भाषेत एकाच अर्थाच्या विशिष्ट शब्दासाठी अनेक संभाव्य भाषांतरे असल्यास, सर्वात चांगला पर्याय बहुतेकदा तो सर्वात छोटा शब्द असतो जो अर्थ स्पष्टपणे दर्शवतो. + +## लेखन प्रणाली {#writing-system} + +Ethereum.org अनेक भाषांमध्ये उपलब्ध आहे, ज्यात लॅटिनला पर्यायी लेखन प्रणाली (किंवा लेखन लिपी) वापरल्या जातात. + +सर्व सामग्रीचे भाषांतर तुमच्या भाषेसाठी योग्य लेखन प्रणाली वापरून केले पाहिजे, आणि त्यात लॅटिन अक्षरे वापरून लिहिलेले कोणतेही शब्द समाविष्ट नसावेत. + +सामग्रीचे भाषांतर करताना, तुम्ही हे सुनिश्चित केले पाहिजे की भाषांतरे सुसंगत आहेत आणि त्यात कोणतीही लॅटिन अक्षरे नाहीत. + +एक सामान्य गैरसमज असा आहे की Ethereum नेहमी लॅटिनमध्ये लिहिले पाहिजे. हे बहुतेक चुकीचे आहे, कृपया तुमच्या भाषेतील Ethereum चे स्पेलिंग वापरा (उदा. चीनी भाषेत 以太坊, अरबीमध्ये إيثيريوم, इ.). + +**वरील नियम अशा भाषांना लागू होत नाही, जिथे नियमानुसार विशेष नावांचे भाषांतर केले जाऊ नये.** + +## पृष्ठ मेटाडेटाचे भाषांतर {#translating-metadata} + +काही पृष्ठांवर 'title', 'lang', 'description', 'sidebar', इत्यादींसारखा मेटाडेटा असतो. + +Crowdin वर नवीन पृष्ठे अपलोड करताना आम्ही अनुवादकांनी कधीही भाषांतर करू नये अशी सामग्री लपवतो, याचा अर्थ Crowdin मध्ये अनुवादकांना दिसणारा सर्व मेटाडेटा भाषांतरित केला पाहिजे. + +ज्या स्ट्रिंगमध्ये मूळ मजकूर 'en' आहे त्यांचे भाषांतर करताना कृपया विशेष काळजी घ्या. हे पृष्ठ कोणत्या भाषेत उपलब्ध आहे हे दर्शवते आणि त्याचे भाषांतर [तुमच्या भाषेसाठीच्या ISO भाषा कोडमध्ये](https://www.andiamo.co.uk/resources/iso-language-codes/) केले पाहिजे. या स्ट्रिंगचे भाषांतर नेहमी लॅटिन अक्षरे वापरून केले पाहिजे, लक्ष्यित भाषेच्या मूळ लेखन लिपीमध्ये नाही. + +कोणता भाषा कोड वापरायचा याबद्दल तुम्हाला खात्री नसल्यास, तुम्ही Crowdin मधील भाषांतर मेमरी तपासू शकता किंवा Crowdin ऑनलाइन एडिटरमधील पृष्ठाच्या URL मध्ये तुमच्या भाषेचा भाषा कोड शोधू शकता. + +सर्वात जास्त बोलल्या जाणाऱ्या भाषांसाठी भाषा कोडची काही उदाहरणे: + +- अरबी - ar +- चीनी सरलीकृत - zh +- फ्रेंच - fr +- हिंदी - hi +- स्पॅनिश - es + +## बाह्य लेखांची शीर्षके {#external-articles} + +काही स्ट्रिंगमध्ये बाह्य लेखांची शीर्षके असतात. आमच्या बहुतेक विकसक दस्तऐवजीकरण पृष्ठांमध्ये पुढील वाचनासाठी बाह्य लेखांच्या लिंक असतात. लेखाची भाषा कोणतीही असली तरी, लेखांची शीर्षके असलेल्या स्ट्रिंगचे भाषांतर करणे आवश्यक आहे, जेणेकरून त्यांच्या भाषेत पृष्ठ पाहणाऱ्या अभ्यागतांना अधिक सुसंगत वापरकर्ता अनुभव सुनिश्चित करता येईल. + +अनुवादकांसाठी या स्ट्रिंग कशा दिसतात आणि त्या कशा ओळखाव्यात याची काही उदाहरणे तुम्ही खाली शोधू शकता (लेखांच्या लिंक बहुतेक या पृष्ठांच्या तळाशी, 'पुढील वाचन' विभागात आढळतात): + +![साइडबारमधील लेखांची शीर्षके.png](./article-titles-in-sidebar.png) +![एडिटरमधील लेखांची शीर्षके.png](./article-titles-in-editor.png) + +## Crowdin चे इशारे {#crowdin-warnings} + +Crowdin मध्ये एक अंगभूत वैशिष्ट्य आहे जे अनुवादकांना चूक करणार असताना इशारा देते. तुम्ही स्रोतामधील टॅग समाविष्ट करायला विसरल्यास, भाषांतरित न करायचे घटक भाषांतरित केल्यास, अनेक सलग स्पेस जोडल्यास, शेवटचे विरामचिन्ह विसरल्यास, इत्यादी परिस्थितीत तुमचे भाषांतर सेव्ह करण्यापूर्वी Crowdin तुम्हाला आपोआप इशारा देईल. +तुम्हाला असा इशारा दिसल्यास, कृपया मागे जाऊन सुचवलेल्या भाषांतराची पुन्हा तपासणी करा. + +**या इशाऱ्यांकडे कधीही दुर्लक्ष करू नका, कारण त्यांचा अर्थ सहसा काहीतरी चुकीचे आहे, किंवा भाषांतरामध्ये मूळ मजकुराचा एक महत्त्वाचा भाग गहाळ आहे असा होतो.** + +तुम्ही तुमच्या भाषांतरात टॅग जोडायला विसरल्यास Crowdin च्या इशाऱ्याचे उदाहरण: +![Crowdin च्या इशाऱ्याचे उदाहरण](./crowdin-warning-example.png) + +## टॅग आणि कोड स्निपेट्स हाताळणे {#dealing-with-tags} + +बऱ्याच मूळ सामग्रीमध्ये टॅग आणि व्हेरिएबल्स असतात, जे Crowdin एडिटरमध्ये पिवळ्या रंगात हायलाइट केलेले असतात. हे वेगवेगळी कार्ये करतात आणि त्यांना योग्यरित्या हाताळले पाहिजे. + +**Crowdin सेटिंग्ज** + +टॅग व्यवस्थापित करणे आणि ते थेट स्रोतामधून कॉपी करणे सोपे करण्यासाठी, आम्ही तुम्हाला Crowdin एडिटरमध्ये तुमच्या सेटिंग्ज बदलण्याची शिफारस करतो. + +1. सेटिंग्ज उघडा + ![एडिटरमध्ये सेटिंग्ज कशा उघडायच्या](./editor-settings.png) + +2. 'HTML टॅग प्रदर्शन' विभागापर्यंत खाली स्क्रोल करा + +3. 'लपवा' निवडा + ![कृपया 'लपवा' निवडा](./hide-tags.png) + +4. 'सेव्ह करा' वर क्लिक करा + +हा पर्याय निवडल्याने, संपूर्ण टॅग मजकूर यापुढे दिसणार नाही आणि त्याऐवजी एक संख्या दिसेल. +भाषांतर करताना, या टॅगवर क्लिक केल्याने तोच टॅग भाषांतर फील्डमध्ये आपोआप कॉपी होईल. + +**लिंक्स** + +तुम्हाला ethereum.org किंवा इतर वेबसाइटवरील पृष्ठांच्या पूर्ण लिंक दिसू शकतात. + +या मूळ स्रोताप्रमाणेच असाव्यात आणि बदलल्या किंवा भाषांतरित केल्या जाऊ नयेत. तुम्ही लिंकचे भाषांतर केल्यास किंवा ती कोणत्याही प्रकारे बदलल्यास, अगदी स्लॅश (/) सारखा एखादा भाग काढून टाकल्यास देखील, यामुळे तुटलेल्या आणि निरुपयोगी लिंक तयार होतील. + +लिंक हाताळण्याचा सर्वोत्तम मार्ग म्हणजे त्या थेट स्रोतामधून कॉपी करणे, एकतर त्यांच्यावर क्लिक करून किंवा ‘स्रोत कॉपी करा’ बटण (Alt+C) वापरून. + +![लिंकचे उदाहरण.png](./example-of-link.png) + +लिंक मूळ मजकुरात टॅगच्या स्वरूपात देखील दिसतात (उदा., `<0>` ``). तुम्ही टॅगवर होव्हर केल्यास, एडिटर त्याची संपूर्ण सामग्री दर्शवेल - कधीकधी हे टॅग लिंक दर्शवतात. + +स्रोतामधून लिंक कॉपी करणे आणि त्यांचा क्रम न बदलणे खूप महत्त्वाचे आहे. + +टॅगचा क्रम बदलल्यास, ते दर्शवत असलेली लिंक तुटलेली असेल. + +![टॅगच्या आत असलेल्या लिंकचे उदाहरण.png](./example-of-links-inside-tags.png) + +**टॅग आणि व्हेरिएबल्स** + +मूळ मजकुरात अनेक विविध प्रकारचे टॅग आहेत, जे नेहमी स्रोतामधून कॉपी केले पाहिजेत आणि कधीही बदलले जाऊ नयेत. वरीलप्रमाणेच, भाषांतरातील या टॅगचा क्रम देखील मूळ स्रोताप्रमाणेच राहिला पाहिजे. + +टॅगमध्ये नेहमी एक ओपनिंग आणि एक क्लोजिंग टॅग असतो. बहुतेक प्रकरणांमध्ये, ओपनिंग आणि क्लोजिंग टॅगमधील मजकुराचे भाषांतर केले पाहिजे. + +उदाहरण: ``विकेंद्रित`` + +`` - _ओपनिंग टॅग जो मजकूर ठळक करतो_ + +विकेंद्रित - _भाषांतर करण्यायोग्य मजकूर_ + +`` - _क्लोजिंग टॅग_ + +![‘strong’ टॅगचे उदाहरण.png](./example-of-strong-tags.png) + +कोड स्निपेट्स इतर टॅगपेक्षा थोडे वेगळ्या पद्धतीने हाताळले पाहिजेत, कारण त्यात असा कोड असतो ज्याचे भाषांतर करू नये. + +उदाहरण: ``nonce`` + +`` - _ओपनिंग टॅग, ज्यामध्ये एक कोड स्निपेट आहे_ + +nonce - _भाषांतर न करण्यायोग्य मजकूर_ + +`` - _क्लोजिंग टॅग_ + +![कोड स्निपेट्सचे उदाहरण.png](./example-of-code-snippets.png) + +मूळ मजकुरात लहान केलेले टॅग देखील असतात, ज्यात फक्त संख्या असतात, याचा अर्थ त्यांचे कार्य लगेच स्पष्ट होत नाही. हे टॅग नेमके कोणते कार्य करतात हे पाहण्यासाठी तुम्ही त्यांच्यावर होव्हर करू शकता. + +खालील उदाहरणात, तुम्ही पाहू शकता की `<0>` टॅगवर होव्हर केल्यावर ते `` दर्शवते आणि त्यात एक कोड स्निपेट आहे, त्यामुळे या टॅगमधील सामग्रीचे भाषांतर करू नये. + +![संदिग्ध टॅगचे उदाहरण.png](./example-of-ambiguous-tags.png) + +## लहान विरुद्ध पूर्ण रूपे/संक्षेप {#short-vs-full-forms} + +वेबसाइटवर अनेक संक्षेप वापरले जातात, उदा., dapps, NFT, DAO, DeFi, इ. हे संक्षेप इंग्रजीमध्ये सामान्यतः वापरले जातात आणि वेबसाइटला भेट देणारे बहुतेकजण त्यांच्याशी परिचित आहेत. + +कारण त्यांचे सामान्यतः इतर भाषांमध्ये स्थापित भाषांतर नसते, त्यामुळे या आणि अशाच शब्दांना हाताळण्याचा सर्वोत्तम मार्ग म्हणजे पूर्ण रूपाचे वर्णनात्मक भाषांतर प्रदान करणे, आणि कंसात इंग्रजी संक्षेप जोडणे. + +या संक्षेपांचे भाषांतर करू नका, कारण बहुतेक लोक त्यांच्याशी परिचित नसतील, आणि स्थानिक आवृत्त्या बहुतेक अभ्यागतांना जास्त अर्थपूर्ण वाटणार नाहीत. + +dapps चे भाषांतर कसे करावे याचे उदाहरण: + +- विकेंद्रित ॲप्लिकेशन्स (dapps) → _भाषांतरित पूर्ण रूप (कंसात इंग्रजी संक्षेप)_ + +## स्थापित भाषांतर नसलेले शब्द {#terms-without-established-translations} + +काही शब्दांचे इतर भाषांमध्ये स्थापित भाषांतर नसण्याची शक्यता आहे, आणि ते मूळ इंग्रजी शब्दाने मोठ्या प्रमाणावर ओळखले जातात. अशा शब्दांमध्ये बहुतेक करून प्रूफ-ऑफ-वर्क, प्रूफ-ऑफ-स्टेक, बीकन चेन, स्टेकिंग, इत्यादींसारख्या नवीन संकल्पनांचा समावेश होतो. + +या शब्दांचे भाषांतर करणे अनैसर्गिक वाटू शकते, कारण इंग्रजी आवृत्ती इतर भाषांमध्ये देखील सामान्यतः वापरली जाते, तरीही त्यांचे भाषांतर करण्याची अत्यंत शिफारस केली जाते. + +त्यांचे भाषांतर करताना, सर्जनशील होण्यास, वर्णनात्मक भाषांतरे वापरण्यास, किंवा फक्त शब्दशः भाषांतर करण्यास मोकळेपणाने वागा. + +**बहुतेक शब्दांचे भाषांतर का केले पाहिजे, काही इंग्रजीमध्ये सोडण्याऐवजी, याचे कारण हे आहे की ही नवीन परिभाषा भविष्यात अधिक व्यापक होईल, कारण अधिक लोक Ethereum आणि संबंधित तंत्रज्ञानाचा वापर सुरू करतील.** जर आपल्याला जगभरातील अधिक लोकांना या क्षेत्रात आणायचे असेल, तर आपल्याला शक्य तितक्या जास्त भाषांमध्ये समजण्यायोग्य परिभाषा प्रदान करणे आवश्यक आहे, जरी ती आपल्याला स्वतः तयार करावी लागली तरी.\*\* + +## बटणे आणि CTAs {#buttons-and-ctas} + +वेबसाइटवर असंख्य बटणे आहेत, ज्यांचे भाषांतर इतर सामग्रीपेक्षा वेगळ्या पद्धतीने केले पाहिजे. + +बटण मजकूर ओळखण्यासाठी, बहुतेक स्ट्रिंगशी जोडलेले संदर्भ स्क्रीनशॉट पाहता येतात, किंवा एडिटरमधील संदर्भ तपासता येतो, ज्यात ‘’बटण’’ हा वाक्यांश समाविष्ट असतो. + +बटणांसाठी भाषांतर शक्य तितके लहान असावे, जेणेकरून फॉरमॅटिंगमधील विसंगती टाळता येईल. याव्यतिरिक्त, बटणाचे भाषांतर आज्ञार्थी असावे, म्हणजेच, आज्ञा किंवा विनंती सादर करणारे असावे. + +![बटण कसे शोधावे.png](./how-to-find-a-button.png) + +## सर्वसमावेशकतेसाठी भाषांतर {#translating-for-inclusivity} + +Ethereum.org चे अभ्यागत जगभरातून आणि वेगवेगळ्या पार्श्वभूमीतून येतात. त्यामुळे वेबसाइटवरील भाषा तटस्थ, सर्वांचे स्वागत करणारी आणि विशिष्ट गटापुरती मर्यादित नसलेली असावी. + +याचा एक महत्त्वाचा पैलू म्हणजे लिंग तटस्थता. हे संबोधनाची औपचारिक पद्धत वापरून, आणि भाषांतरामध्ये कोणतेही लिंग-विशिष्ट शब्द टाळून सहज साध्य करता येते. + +सर्वसमावेशकतेचा आणखी एक प्रकार म्हणजे कोणत्याही विशिष्ट देश, वंश किंवा प्रदेशापुरते मर्यादित न राहता, जागतिक प्रेक्षकांसाठी भाषांतर करण्याचा प्रयत्न करणे. + +शेवटी, भाषा सर्व प्रेक्षक आणि वयोगटांसाठी योग्य असावी. + +## भाषा-विशिष्ट भाषांतरे {#language-specific-translations} + +भाषांतर करताना, मूळ स्रोतामधून कॉपी करण्याऐवजी, तुमच्या भाषेत वापरलेले व्याकरण नियम, परंपरा आणि फॉरमॅटिंगचे पालन करणे महत्त्वाचे आहे. मूळ मजकूर इंग्रजी व्याकरण नियम आणि परंपरांचे पालन करतो, जे इतर अनेक भाषांना लागू होत नाही. + +तुम्हाला तुमच्या भाषेच्या नियमांची जाणीव असावी आणि त्यानुसार भाषांतर करावे. तुम्हाला मदतीची आवश्यकता असल्यास, आमच्याशी संपर्क साधा आणि आम्ही तुम्हाला तुमच्या भाषेत हे घटक कसे वापरावेत यावर काही संसाधने शोधण्यात मदत करू. + +विशेषतः कशाबद्दल काळजी घ्यावी याची काही उदाहरणे: + +### विरामचिन्हे, फॉरमॅटिंग {#punctuation-and-formatting} + +**मोठी लिपी (कॅपिटलायझेशन)** + +- वेगवेगळ्या भाषांमध्ये कॅपिटलायझेशनमध्ये मोठे फरक आहेत. +- इंग्रजीमध्ये, शीर्षके आणि नावे, महिने आणि दिवस, भाषांची नावे, सुट्ट्या, इत्यादींमधील सर्व शब्द मोठे करणे सामान्य आहे. इतर अनेक भाषांमध्ये, हे व्याकरणाच्या दृष्टीने चुकीचे आहे, कारण त्यांचे कॅपिटलायझेशनचे नियम वेगळे आहेत. +- काही भाषांमध्ये पुरुषवाचक सर्वनामे, नामे आणि काही विशेषणे मोठी करण्याबद्दलचे नियम देखील आहेत, जे इंग्रजीमध्ये मोठे केले जात नाहीत. + +**स्पेसिंग** + +- ऑर्थोग्राफीचे नियम प्रत्येक भाषेसाठी स्पेसच्या वापराची व्याख्या करतात. कारण स्पेस सर्वत्र वापरले जातात, हे नियम काही सर्वात वेगळे आहेत, आणि स्पेस हे सर्वात जास्त चुकीच्या पद्धतीने भाषांतरित होणाऱ्या घटकांपैकी एक आहेत. +- इंग्रजी आणि इतर भाषांमधील स्पेसिंगमधील काही सामान्य फरक: + - मापनाची एकके आणि चलनांच्या आधी स्पेस (उदा., USD, EUR, kB, MB) + - डिग्री चिन्हांच्या आधी स्पेस (उदा., °C, ℉) + - काही विरामचिन्हांपूर्वी स्पेस, विशेषतः एलिप्सिस (...) + - स्लॅश (/) च्या आधी आणि नंतर स्पेस + +**याद्या** + +- प्रत्येक भाषेत याद्या लिहिण्यासाठी नियमांचा एक विविध आणि गुंतागुंतीचा संच असतो. हे इंग्रजीपेक्षा लक्षणीयरीत्या वेगळे असू शकतात. +- काही भाषांमध्ये, प्रत्येक नवीन ओळीचा पहिला शब्द मोठा करणे आवश्यक असते, तर इतरांमध्ये, नवीन ओळी लहान अक्षरांनी सुरू झाल्या पाहिजेत. अनेक भाषांमध्ये प्रत्येक ओळीच्या लांबीनुसार याद्यांमधील कॅपिटलायझेशनबद्दल वेगवेगळे नियम देखील आहेत. +- हेच ओळ आयटमच्या विरामचिन्हांना लागू होते. याद्यांमधील शेवटचे विरामचिन्ह भाषेनुसार पूर्णविराम (.), स्वल्पविराम (,), किंवा अर्धविराम (;) असू शकते. + +**अवतरण चिन्हे** + +- भाषा अनेक भिन्न अवतरण चिन्हे वापरतात. स्रोतामधून इंग्रजी अवतरण चिन्हे फक्त कॉपी करणे बहुतेकदा चुकीचे असते. +- सर्वात सामान्य प्रकारच्या अवतरण चिन्हांमध्ये यांचा समावेश आहे: + - „उदाहरण मजकूर“ + - ‚उदाहरण मजकूर’ + - »उदाहरण मजकूर« + - “उदाहरण मजकूर” + - ‘उदाहरण मजकूर’ + - «उदाहरण मजकूर» + +**हायफन आणि डॅश** + +- इंग्रजीमध्ये, हायफन (-) शब्द किंवा शब्दाचे वेगवेगळे भाग जोडण्यासाठी वापरला जातो, तर डॅश (–) एक श्रेणी किंवा विराम दर्शवण्यासाठी वापरला जातो. +- अनेक भाषांमध्ये हायफन आणि डॅश वापरण्याचे वेगवेगळे नियम आहेत ज्यांचे पालन केले पाहिजे. + +### स्वरूप {#formats} + +**संख्या** + +- वेगवेगळ्या भाषांमध्ये संख्या लिहिण्यामधील मुख्य फरक म्हणजे दशांश आणि हजारांसाठी वापरलेले विभाजक. हजारांसाठी, हे पूर्णविराम, स्वल्पविराम किंवा स्पेस असू शकते. त्याचप्रमाणे, काही भाषा दशांश चिन्ह वापरतात, तर काही दशांश स्वल्पविराम वापरतात. + - मोठ्या संख्यांची काही उदाहरणे: + - इंग्रजी – **1,000.50** + - स्पॅनिश – **1.000,50** + - फ्रेंच – **1 000,50** +- संख्यांचे भाषांतर करताना आणखी एक महत्त्वाचा विचार म्हणजे टक्केवारीचे चिन्ह. हे वेगवेगळ्या प्रकारे लिहिले जाऊ शकते: **100%**, **100 %** किंवा **%100**. +- शेवटी, ऋण संख्या भाषेनुसार वेगवेगळ्या प्रकारे प्रदर्शित केल्या जाऊ शकतात: -100, 100-, (100) किंवा [100]. + +**तारखा** + +- तारखांचे भाषांतर करताना, भाषेनुसार अनेक विचार आणि फरक आहेत. यामध्ये तारीख स्वरूप, विभाजक, कॅपिटलायझेशन आणि अग्रगण्य शून्य यांचा समावेश आहे. पूर्ण-लांबीच्या आणि अंकीय तारखांमध्ये देखील फरक आहेत. + - वेगवेगळ्या तारीख स्वरूपांची काही उदाहरणे: + - इंग्रजी यूके (dd/mm/yyyy) – 1 जानेवारी, 2022 + - इंग्रजी यूएस (mm/dd/yyyy) – जानेवारी 1, 2022 + - चीनी (yyyy-mm-dd) – 2022 年 1 月 1 日 + - फ्रेंच (dd/mm/yyyy) – 1er janvier 2022 + - इटालियन (dd/mm/yyyy) – 1º gennaio 2022 + - जर्मन (dd/mm/yyyy) – 1. Januar 2022 + +**चलने** + +- वेगवेगळे स्वरूप, परंपरा आणि रूपांतरणांमुळे चलनांचे भाषांतर करणे आव्हानात्मक असू शकते. एक सामान्य नियम म्हणून, कृपया चलने मूळ स्रोताप्रमाणेच ठेवा. वाचकाच्या फायद्यासाठी तुम्ही तुमचे स्थानिक चलन आणि रूपांतरण कंसात जोडू शकता. +- वेगवेगळ्या भाषांमध्ये चलने लिहिण्यामधील मुख्य फरकांमध्ये चिन्ह स्थान, दशांश स्वल्पविराम विरुद्ध दशांश चिन्ह, स्पेसिंग आणि संक्षेप विरुद्ध चिन्हे यांचा समावेश आहे. + - चिन्ह स्थान: $100 किंवा 100$ + - दशांश स्वल्पविराम विरुद्ध दशांश चिन्ह: 100,50$ किंवा 100.50$ + - स्पेसिंग: 100$ किंवा 100 $ + - संक्षेप विरुद्ध चिन्हे: 100 $ किंवा 100 USD + +**मापनाची एकके** + +- एक सामान्य नियम म्हणून, कृपया मापनाची एकके मूळ स्रोताप्रमाणेच ठेवा. जर तुमचा देश वेगळी प्रणाली वापरत असेल, तर तुम्ही कंसात रूपांतरण समाविष्ट करू शकता. +- मापनाच्या एककांच्या स्थानिकीकरणाव्यतिरिक्त, भाषा या एककांना कशा प्रकारे हाताळतात यामधील फरक लक्षात घेणे देखील महत्त्वाचे आहे. मुख्य फरक संख्या आणि एकक यांच्यातील स्पेसिंगचा आहे, जो भाषेनुसार वेगळा असू शकतो. याची उदाहरणे म्हणजे 100kB विरुद्ध 100 kB किंवा 50ºF विरुद्ध 50 ºF. + +## निष्कर्ष {#conclusion} + +ethereum.org चे भाषांतर करणे हा Ethereum च्या विविध पैलूंबद्दल शिकण्याची एक उत्तम संधी आहे. + +भाषांतर करताना घाई न करण्याचा प्रयत्न करा. आरामात करा आणि मजा घ्या! + +भाषांतर कार्यक्रमात सहभागी झाल्याबद्दल आणि वेबसाइट व्यापक प्रेक्षकांसाठी प्रवेशयोग्य बनविण्यात आम्हाला मदत केल्याबद्दल धन्यवाद. Ethereum समुदाय जागतिक आहे, आणि तुम्ही त्याचा एक भाग आहात याचा आम्हाला आनंद आहे! diff --git a/public/content/translations/mr/dao/index.md b/public/content/translations/mr/dao/index.md index f367a037108..1a0306ed2a5 100644 --- a/public/content/translations/mr/dao/index.md +++ b/public/content/translations/mr/dao/index.md @@ -1,24 +1,25 @@ --- -title: विकेंद्रीकृत स्वायत्त संगठन (DAO) -description: Ethereum वर DAO चे विहंगावलोकन +title: "DAO म्हणजे काय?" +metaTitle: "DAO म्हणजे काय? | विकेंद्रित स्वायत्त संस्था" +description: "Ethereum वर DAO चे विहंगावलोकन" lang: mr template: use-cases emoji: ":handshake:" sidebarDepth: 2 image: /images/use-cases/dao-2.png -alt: प्रस्तावावर मतदान करणाऱ्या DAO चे प्रतिनिधित्व. -summaryPoint1: केंद्रीकृत नेतृत्वाशिवाय सदस्यांच्या मालकीचे समुदाय. -summaryPoint2: इंटरनेट अनोळखी लोकांसह सहयोग करण्याचा एक सुरक्षित मार्ग. -summaryPoint3: विशिष्ट कारणासाठी निधी कमिट करण्यासाठी सुरक्षित ठिकाण. +alt: "प्रस्तावावर मतदान करणाऱ्या DAO चे प्रतिनिधित्व." +summaryPoint1: "केंद्रीकृत नेतृत्वाशिवाय सदस्यांच्या मालकीचे समुदाय." +summaryPoint2: "इंटरनेट अनोळखी लोकांसह सहयोग करण्याचा एक सुरक्षित मार्ग." +summaryPoint3: "विशिष्ट कारणासाठी निधी कमिट करण्यासाठी सुरक्षित ठिकाण." --- ## DAO म्हणजे काय? {#what-are-daos} -DAO ही एक सामूहिक मालकीची, ब्लॉकचेन-शासित संस्था आहे जी सामायिक मिशनसाठी काम करते. +DAO ही एक सामूहिक-मालकीची संस्था आहे जी एका सामायिक ध्येयासाठी काम करते. DAO आम्हाला निधी किंवा ऑपरेशन्स व्यवस्थापित करण्यासाठी परोपकारी नेत्यावर विश्वास न ठेवता जगभरातील समविचारी लोकांसोबत काम करण्याची परवानगी देतात. एकही CEO नाही जो फुशारकीवर निधी खर्च करू शकेल किंवा पुस्तकांमध्ये फेरफार करू शकेल असा CFO नाही. त्याऐवजी, कोडमध्ये बेक केलेले ब्लॉकचेन-आधारित नियम संस्था कशी कार्य करते आणि निधी कसा खर्च केला जातो हे परिभाषित करतात. -त्यांच्याकडे अंगभूत कोषागार आहेत ज्यात गटाच्या मान्यतेशिवाय प्रवेश करण्याचा अधिकार कोणालाही नाही. संस्थेतील प्रत्येकाचा आवाज आहे आणि सर्व काही पारदर्शकपणे ऑन-चेन होते हे सुनिश्चित करण्यासाठी प्रस्ताव आणि मतदानाद्वारे निर्णय नियंत्रित केले जातात. +त्यांच्याकडे अंगभूत कोषागार आहेत ज्यात गटाच्या मान्यतेशिवाय प्रवेश करण्याचा अधिकार कोणालाही नाही. संस्थेतील प्रत्येकाला आवाज मिळावा हे सुनिश्चित करण्यासाठी निर्णय प्रस्ताव आणि मतदानाद्वारे नियंत्रित केले जातात आणि सर्वकाही पारदर्शकपणे [ऑनचेन](/glossary/#onchain) घडते. ## आम्हाला DAO ची गरज का आहे? {#why-dao} @@ -28,37 +29,35 @@ DAO आम्हाला निधी किंवा ऑपरेशन्स ### एक तुलना {#dao-comparison} -| DAO | पारंपारिक संघटना | -| ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- | -| सहसा सपाट, आणि पूर्णपणे लोकशाही. | सहसा श्रेणीबद्ध. | -| कोणतेही बदल अंमलात आणण्यासाठी सदस्यांना मतदान करणे आवश्यक आहे. | संरचनेनुसार, बदलांची मागणी एकमेव पक्षाकडून केली जाऊ शकते किंवा मतदानाची ऑफर दिली जाऊ शकते. | -| मते मोजली जातात आणि विश्वसनीय मध्यस्थाशिवाय निकाल आपोआप लागू होतो. | मतदानास परवानगी असल्यास, मतांची गणना अंतर्गत केली जाते आणि मतदानाचा निकाल स्वतः हाताळला जाणे आवश्यक आहे. | +| DAO | पारंपारिक संघटना | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| सहसा सपाट, आणि पूर्णपणे लोकशाही. | सहसा श्रेणीबद्ध. | +| कोणतेही बदल अंमलात आणण्यासाठी सदस्यांना मतदान करणे आवश्यक आहे. | संरचनेनुसार, बदलांची मागणी एकमेव पक्षाकडून केली जाऊ शकते किंवा मतदानाची ऑफर दिली जाऊ शकते. | +| मते मोजली जातात आणि विश्वसनीय मध्यस्थाशिवाय निकाल आपोआप लागू होतो. | मतदानास परवानगी असल्यास, मतांची गणना अंतर्गत केली जाते आणि मतदानाचा निकाल स्वतः हाताळला जाणे आवश्यक आहे. | | ऑफर केलेल्या सेवा विकेंद्रित पद्धतीने स्वयंचलितपणे हाताळल्या जातात (उदाहरणार्थ परोपकारी निधीचे वितरण). | मानवी हाताळणी, किंवा केंद्रीय नियंत्रित ऑटोमेशन आवश्यक आहे, हाताळणीसाठी प्रवण. | -| सर्व क्रियाकलाप पारदर्शक आणि पूर्णपणे सार्वजनिक आहेत. | अ‍ॅक्टिव्हिटी सामान्यत: खाजगी असते आणि लोकांपर्यंत मर्यादित असते. | +| सर्व क्रियाकलाप पारदर्शक आणि पूर्णपणे सार्वजनिक आहेत. | अ‍ॅक्टिव्हिटी सामान्यत: खाजगी असते आणि लोकांपर्यंत मर्यादित असते. | ### DAO उदाहरणे {#dao-examples} हे अधिक अर्थपूर्ण होण्यासाठी, तुम्ही DAO कसे वापरू शकता याची काही उदाहरणे येथे आहेत: -- एक धर्मादाय - तुम्ही जगातील कोणाकडूनही देणगी स्वीकारू शकता आणि कोणत्या कारणासाठी निधी देऊ शकता यावर मत देऊ शकता. -- सामूहिक मालकी - तुम्ही भौतिक किंवा डिजिटल मालमत्ता खरेदी करू शकता आणि सदस्य त्यांचा वापर कसा करायचा यावर मत देऊ शकतात. -- उपक्रम आणि अनुदान - तुम्ही एक उपक्रम फंड तयार करू शकता जो गुंतवणूक भांडवल जमा करतो आणि उपक्रमांना परत मत देतो. परत केलेले पैसे नंतर DAO-सदस्यांमध्ये पुन्हा वितरित केले जाऊ शकतात. +- **एक धर्मादाय संस्था** – तुम्ही जगातील कोणाकडूनही देणगी स्वीकारू शकता आणि कोणत्या कार्यासाठी निधी द्यायचा यावर मतदान करू शकता. +- **सामूहिक मालकी** – तुम्ही भौतिक किंवा डिजिटल मालमत्ता खरेदी करू शकता आणि सदस्य त्यांचा वापर कसा करायचा यावर मतदान करू शकतात. +- **उपक्रम आणि अनुदान** – तुम्ही एक व्हेंचर फंड तयार करू शकता जो गुंतवणुकीचे भांडवल एकत्र करतो आणि कोणत्या उपक्रमांना पाठिंबा द्यायचा यावर मतदान करतो. परत केलेले पैसे नंतर DAO-सदस्यांमध्ये पुन्हा वितरित केले जाऊ शकतात. + + ## DAO कसे काम करतात? {#how-daos-work} -DAO चा कणा हा त्याचा स्मार्ट करार असतो, जो संस्थेचे नियम परिभाषित करतो आणि समूहाचा खजिना धारण करतो. एकदा करार Ethereum वर लाइव्ह झाल्यानंतर, मतदानाशिवाय कोणीही नियम बदलू शकत नाही. जर कोणी असे काहीतरी करण्याचा प्रयत्न केला ज्यामध्ये नियम आणि तर्कशास्त्राचा समावेश नाही, तो अयशस्वी होईल. आणि तिजोरीची व्याख्या स्मार्ट कॉन्ट्रॅक्टद्वारे देखील केली जाते याचा अर्थ असा आहे की गटाच्या मंजुरीशिवाय कोणीही पैसे खर्च करू शकत नाही. याचा अर्थ DAO ला केंद्रीय प्राधिकरणाची गरज नाही. त्याऐवजी, गट एकत्रितपणे निर्णय घेतो आणि जेव्हा मते पास होतात तेव्हा देयके आपोआप अधिकृत होतात. +DAO चा कणा त्याचा [स्मार्ट करार](/glossary/#smart-contract) आहे, जो संस्थेचे नियम परिभाषित करतो आणि गटाची तिजोरी सांभाळतो. एकदा करार Ethereum वर लाइव्ह झाल्यानंतर, मतदानाशिवाय कोणीही नियम बदलू शकत नाही. जर कोणी असे काहीतरी करण्याचा प्रयत्न केला ज्यामध्ये नियम आणि तर्कशास्त्राचा समावेश नाही, तो अयशस्वी होईल. आणि तिजोरीची व्याख्या स्मार्ट कॉन्ट्रॅक्टद्वारे देखील केली जाते याचा अर्थ असा आहे की गटाच्या मंजुरीशिवाय कोणीही पैसे खर्च करू शकत नाही. याचा अर्थ DAO ला केंद्रीय प्राधिकरणाची गरज नाही. त्याऐवजी, गट एकत्रितपणे निर्णय घेतो आणि जेव्हा मते पास होतात तेव्हा देयके आपोआप अधिकृत होतात. हे शक्य आहे कारण स्मार्ट कॉन्ट्रॅक्ट एकदा Ethereum वर लाइव्ह झाल्यावर ते छेडछाड-प्रूफ असतात. तुम्ही फक्त कोड (DAO नियम) संपादित करू शकत नाही कारण सर्व काही सार्वजनिक आहे. - - हुशार करारांवर अधिक - - -## Ethereum आणि DAO {#ethereum-and-daos} +## Ethereum आणि DAOs {#ethereum-and-daos} अनेक कारणांमुळे DAO साठी Ethereum हा परिपूर्ण पाया आहे: -- Ethereum चे स्वतःचे एकमत वितरित केले जाते आणि संस्थांना नेटवर्कवर विश्वास ठेवण्यासाठी पुरेसे स्थापित केले जाते. +- Ethereum चे स्वतःचे कन्सेंसस (एकमत) विकेंद्रित आणि पुरेसे स्थापित आहे की संस्था नेटवर्कवर विश्वास ठेवू शकतात. - स्मार्ट कॉन्ट्रॅक्ट कोड लाइव्ह एकदा बदलला जाऊ शकत नाही, अगदी त्याच्या मालकांद्वारे. हे DAO ला प्रोग्राम केलेल्या नियमांनुसार चालवण्यास अनुमती देते. - स्मार्ट कॉन्ट्रॅक्ट निधी पाठवू/प्राप्त करू शकतात. याशिवाय ग्रुप फंड व्यवस्थापित करण्यासाठी तुम्हाला एका विश्वासू मध्यस्थीची आवश्यकता असेल. - Ethereum समुदायाने स्पर्धात्मकतेपेक्षा अधिक सहयोगी असल्याचे सिद्ध केले आहे, ज्यामुळे सर्वोत्तम पद्धती आणि समर्थन प्रणाली लवकर उदयास येऊ शकतात. @@ -67,13 +66,11 @@ DAO चा कणा हा त्याचा स्मार्ट करा DAO ला चालवताना अनेक बाबी विचारात घेतल्या जातात, जसे की मतदान आणि प्रस्ताव कसे कार्य करतात. -### शिष्टमंडळ {#governance-delegation} +### प्रतिनिधित्व {#governance-delegation} प्रतिनिधी मंडळ हे प्रातिनिधिक लोकशाहीच्या DAO आवृत्तीसारखे आहे. टोकन धारक स्वतःला नामनिर्देशित करणार्‍या वापरकर्त्यांना मते देतात आणि प्रोटोकॉलचे स्टीवर्डिंग आणि माहिती ठेवण्यासाठी वचनबद्ध असतात. -#### एक प्रसिद्ध उदाहरण {#governance-example} - -[ENS](https://claim.ens.domains/delegate-ranking) – ENS धारक त्यांचे प्रतिनिधित्व करण्यासाठी गुंतलेल्या समुदाय सदस्यांना त्यांची मते देऊ शकतात. +#### एक प्रसिद्ध उदाहरण {#governance-example}[ENS](https://claim.ens.domains/delegate-ranking) – ENS धारक त्यांचे प्रतिनिधित्व करण्यासाठी सक्रिय समुदाय सदस्यांना आपली मते देऊ शकतात. ### स्वयंचलित व्यवहार शासन {#governance-example} @@ -81,19 +78,19 @@ DAO ला चालवताना अनेक बाबी विचारा #### एक प्रसिद्ध उदाहरण {#governance-example} -[नावा](https://nouns.wtf) – नाव DAO मध्ये, मतांचा कोरम पूर्ण झाल्यास आणि बहुसंख्य मते होकारार्थी असल्यास व्यवहार आपोआप अंमलात आणला जातो, जोपर्यंत त्यावर व्हेटो केला जात नाही. संस्थापक. +[Nouns](https://nouns.wtf) – Nouns DAO मध्ये, मतांची गणपूर्ती झाल्यास आणि बहुमताने होकारार्थी मतदान केल्यास व्यवहार आपोआप कार्यान्वित होतो, जोपर्यंत संस्थापकांकडून त्याला व्हेटो (नकार) दिला जात नाही. -### मल्टीसिग गव्हर्नन्स {#governance-example} +### मल्टीसिग शासन {#governance-example} -DAO मध्ये हजारो मतदान सदस्य असू शकतात, तरीही निधी 5-20 सक्रिय समुदाय सदस्यांद्वारे सामायिक केलेल्या वॉलेटमध्ये राहू शकतो जे विश्वासू आणि सहसा डॉक्स केलेले असतात (समुदायाला ज्ञात सार्वजनिक ओळख). मतदानानंतर, मल्टीसिग स्वाक्षरी करणारे समुदायाच्या इच्छेची अंमलबजावणी करतात. +DAO मध्ये हजारो मतदान सदस्य असू शकतात, परंतु निधी 5-20 सक्रिय समुदाय सदस्यांद्वारे सामायिक केलेल्या [वॉलेटमध्ये](/glossary/#wallet) राहू शकतो, जे विश्वासार्ह असतात आणि सहसा डॉक्स्ड (ज्यांची सार्वजनिक ओळख समुदायाला ज्ञात असते) असतात. मतदानानंतर, [मल्टीसिग](/glossary/#multisig) स्वाक्षरीकर्ते समुदायाच्या इच्छेची अंमलबजावणी करतात. -## DAO नियम {#dao-laws} +## DAO कायदे {#dao-laws} 1977 मध्ये, वायोमिंगने LLC चा शोध लावला, जे उद्योजकांचे संरक्षण करते आणि त्यांचे दायित्व मर्यादित करते. अगदी अलीकडे, त्यांनी DAO कायद्याचा पुढाकार घेतला जो DAO साठी कायदेशीर स्थिती स्थापित करतो. सध्या वायोमिंग, व्हरमाँट आणि व्हर्जिन बेटांवर काही स्वरूपात DAO कायदे आहेत. ### एक प्रसिद्ध उदाहरण {#law-example} -[CityDAO](https://citizen.citydao.io/) – CityDAO ने यलोस्टोन नॅशनल पार्कजवळ 40 एकर जमीन खरेदी करण्यासाठी वायोमिंगच्या DAO कायद्याचा वापर केला. +[CityDAO](https://citizen.citydao.io/) – CityDAO ने येलोस्टोन नॅशनल पार्कजवळ 40 एकर जमीन खरेदी करण्यासाठी वायोमिंगच्या DAO कायद्याचा वापर केला. ## DAO सदस्यत्व {#dao-membership} @@ -101,65 +98,70 @@ DAO सदस्यत्वासाठी विविध मॉडेल् ### टोकन-आधारित सदस्यत्व {#token-based-membership} -वापरलेल्या टोकनवर अवलंबून, सहसा पूर्णपणे परवानगी नसलेले. बहुतेक या गव्हर्नन्स टोकन्सचा विकेंद्रीकृत एक्सचेंजवर परवानगीशिवाय व्यापार केला जाऊ शकतो. इतरांना तरलता किंवा इतर काही ‘प्रूफ-ऑफ-वर्क’ प्रदान करून कमावले पाहिजे. कोणत्याही प्रकारे, फक्त टोकन धारण केल्याने मतदानासाठी प्रवेश मिळतो. +वापरलेल्या टोकनवर अवलंबून, सहसा पूर्णपणे [परवानगी-रहित](/glossary/#permissionless) असते. बहुतेक हे गव्हर्नन्स टोकन [विकेंद्रित एक्सचेंजवर](/glossary/#dex) परवानगीशिवाय ट्रेड (व्यापार) केले जाऊ शकतात. इतरांना तरलता किंवा इतर काही ‘प्रूफ-ऑफ-वर्क’ प्रदान करून कमावले पाहिजे. कोणत्याही प्रकारे, फक्त टोकन धारण केल्याने मतदानासाठी प्रवेश मिळतो. -_सामान्यत: व्यापक विकेंद्रित प्रोटोकॉल आणि/किंवा टोकन स्वतः नियंत्रित करण्यासाठी वापरले जाते._ +_सामान्यतः व्यापक विकेंद्रित प्रोटोकॉल आणि/किंवा स्वतः टोकन्सवर शासन करण्यासाठी वापरले जाते._ #### एक प्रसिद्ध उदाहरण {#token-example} -[MakerDAO](https://makerdao.com) – MakerDAO चे टोकन MKR विकेंद्रित एक्सचेंजेसवर मोठ्या प्रमाणावर उपलब्ध आहे आणि कोणीही मेकर प्रोटोकॉलच्या भविष्यावर मतदानाचा अधिकार विकत घेऊ शकतो. +[MakerDAO](https://makerdao.com) – MakerDAO चे MKR टोकन विकेंद्रित एक्सचेंजेसवर मोठ्या प्रमाणावर उपलब्ध आहे आणि मेकर प्रोटोकॉलच्या भविष्यावर मतदानाचा अधिकार कोणीही खरेदी करू शकतो. ### शेअर-आधारित सदस्यत्व {#share-based-membership} शेअर-आधारित DAO ला अधिक परवानगी आहे, परंतु तरीही ते खुले आहेत. कोणतेही संभाव्य सदस्य DAO मध्ये सामील होण्यासाठी प्रस्ताव सादर करू शकतात, सामान्यतः टोकन किंवा कामाच्या स्वरूपात काही मूल्याची श्रद्धांजली देतात. शेअर्स थेट मतदानाची शक्ती आणि मालकी दर्शवतात. सभासद खजिन्यातील त्यांच्या प्रमाणानुसार वाटा घेऊन कधीही बाहेर पडू शकतात. -_सामान्यतः धर्मादाय संस्था, कामगार समूह आणि गुंतवणूक क्लब यासारख्या अधिक जवळच्या, मानव-केंद्रित संस्थांसाठी वापरले जाते. प्रोटोकॉल आणि टोकन्स देखील नियंत्रित करू शकतात._ +_सामान्यतः धर्मादाय संस्था, कामगार समूह आणि गुंतवणूक क्लब यांसारख्या अधिक जवळच्या, मानव-केंद्रित संस्थांसाठी वापरले जाते._ प्रोटोकॉल आणि टोकन्स देखील नियंत्रित करू शकतात._ #### एक प्रसिद्ध उदाहरण {#share-example} -[MolochDAO](http://molochdao.com/) – MolochDAO Ethereum प्रकल्पांना निधी देण्यावर लक्ष केंद्रित करते. त्यांना सदस्यत्वासाठी प्रस्तावाची आवश्यकता आहे जेणेकरुन संभाव्य अनुदान देणाऱ्यांबद्दल माहितीपूर्ण निर्णय घेण्यासाठी तुमच्याकडे आवश्यक कौशल्य आणि भांडवल आहे की नाही हे गट मूल्यांकन करू शकेल. तुम्ही फक्त खुल्या बाजारात DAO मध्ये प्रवेश खरेदी करू शकत नाही. +[MolochDAO](http://molochdao.com/) – MolochDAO हे Ethereum प्रकल्पांना निधी देण्यावर केंद्रित आहे. त्यांना सदस्यत्वासाठी प्रस्तावाची आवश्यकता आहे जेणेकरुन संभाव्य अनुदान देणाऱ्यांबद्दल माहितीपूर्ण निर्णय घेण्यासाठी तुमच्याकडे आवश्यक कौशल्य आणि भांडवल आहे की नाही हे गट मूल्यांकन करू शकेल. तुम्ही फक्त खुल्या बाजारात DAO मध्ये प्रवेश खरेदी करू शकत नाही. ### प्रतिष्ठा-आधारित सदस्यत्व {#reputation-based-membership} -प्रतिष्ठा सहभागाचा पुरावा दर्शवते आणि DAO मध्ये मतदानाची शक्ती देते. प्रतिक किंवा शेअर-आधारित सदस्यत्वाच्या विपरीत, प्रतिष्ठा-आधारित DAO योगदानकर्त्यांना मालकी हस्तांतरित करत नाहीत. प्रतिष्ठा विकत घेतली जाऊ शकत नाही, हस्तांतरित केली जाऊ शकत नाही किंवा नियुक्त केली जाऊ शकत नाही; DAO सदस्यांनी सहभागातून प्रतिष्ठा मिळवली पाहिजे. ऑन-चेन मतदान अनुज्ञेय आहे आणि संभाव्य सदस्य मुक्तपणे DAO मध्ये सामील होण्यासाठी प्रस्ताव सबमिट करू शकतात आणि त्यांच्या योगदानाच्या बदल्यात प्रतिष्ठा आणि टोकन प्राप्त करण्याची विनंती करू शकतात. +प्रतिष्ठा सहभागाचा पुरावा दर्शवते आणि DAO मध्ये मतदानाची शक्ती देते. प्रतिक किंवा शेअर-आधारित सदस्यत्वाच्या विपरीत, प्रतिष्ठा-आधारित DAO योगदानकर्त्यांना मालकी हस्तांतरित करत नाहीत. प्रतिष्ठा विकत घेतली जाऊ शकत नाही, हस्तांतरित केली जाऊ शकत नाही किंवा नियुक्त केली जाऊ शकत नाही; DAO सदस्यांनी सहभागातून प्रतिष्ठा मिळवली पाहिजे. ऑनचेन मतदान परवानगी-रहित आहे आणि संभाव्य सदस्य DAO मध्ये सामील होण्यासाठी मुक्तपणे प्रस्ताव सादर करू शकतात आणि त्यांच्या योगदानाच्या बदल्यात बक्षीस म्हणून प्रतिष्ठा आणि टोकन मिळवण्याची विनंती करू शकतात. -_सामान्यत: प्रोटोकॉल आणि dapps च्या विकेंद्रित विकासासाठी आणि प्रशासनासाठी वापरला जातो, परंतु धर्मादाय संस्था, कामगार समूह, गुंतवणूक क्लब इ. सारख्या विविध संस्थांसाठी देखील योग्य आहे._ +_सामान्यतः प्रोटोकॉल आणि [dapps](/glossary/#dapp) च्या विकेंद्रित विकासासाठी आणि शासनासाठी वापरले जाते, परंतु धर्मादाय संस्था, कामगार समूह, गुंतवणूक क्लब, इत्यादी विविध संस्थांसाठी देखील हे योग्य आहे._ #### एक प्रसिद्ध उदाहरण {#reputation-example} -[DXdao](https://DXdao.eth.link) – DXdao ही एक जागतिक सार्वभौम सामूहिक इमारत आहे आणि 2019 पासून विकेंद्रित प्रोटोकॉल आणि अनुप्रयोग नियंत्रित करते. हे निधीचे समन्वय आणि व्यवस्थापन करण्यासाठी प्रतिष्ठा-आधारित प्रशासन आणि होलोग्राफिक सहमतीचा लाभ घेते, याचा अर्थ कोणीही त्याच्या भविष्यावर प्रभाव टाकण्याचा मार्ग विकत घेऊ शकत नाही. +[DXdao](https://DXdao.eth.limo) – DXdao हे 2019 पासून विकेंद्रित प्रोटोकॉल आणि ॲप्लिकेशन्स तयार करणारा आणि त्यांचे शासन करणारा एक जागतिक सार्वभौम समूह होता. याने निधीचे समन्वय आणि व्यवस्थापन करण्यासाठी प्रतिष्ठा-आधारित शासन आणि [होलोग्राफिक कन्सेंससचा](/glossary/#holographic-consensus) वापर केला, याचा अर्थ असा की कोणीही त्याच्या भविष्यावर किंवा शासनावर प्रभाव टाकण्यासाठी मतांची खरेदी करू शकत नव्हते. ## DAO मध्ये सामील व्हा / सुरू करा {#join-start-a-dao} -### Join a DAO {#join-a-dao} +### DAO मध्ये सामील व्हा {#join-a-dao} -- [Ethereum समुदाय DAO](/community/get-involved/#decentralized-autonomous-organizations-daos) -- [DAOHaus ची DAO ची यादी](https://app.daohaus.club/explore) -- [DAO ची Tally.xyz यादी](https://www.tally.xyz) +- [Ethereum समुदाय DAOs](/community/get-involved/#decentralized-autonomous-organizations-daos) +- [DAOHaus ची DAOs ची यादी](https://app.daohaus.club/explore) +- [Tally.xyz ची DAOs ची यादी](https://www.tally.xyz/explore) +- [DeGov.AI ची DAOs ची यादी](https://apps.degov.ai/) -### DAO सुरू करा {#start-a-dao} +### एक DAO सुरू करा {#start-a-dao} -- [DAOHaus सह DAO ला बोलावा](https://app.daohaus.club/summon) -- [Tally सह गव्हर्नर DAO सुरू करा](https://www.tally.xyz/add-a-dao) -- [Aragon-सक्षम DAO तयार करा](https://aragon.org/product) -- [वसाहत सुरू करा](https://colony.io/) -- [DAOstack च्या होलोग्राफिक एकमताने DAO तयार करा](https://alchemy.daostack.io/daos/create) +- [DAOHaus सह एक DAO सुरू करा](https://app.daohaus.club/summon) +- [Tally सह एक गव्हर्नर DAO सुरू करा](https://www.tally.xyz/get-started) +- [Aragon-चालित DAO तयार करा](https://aragon.org/product) +- [एक Colony सुरू करा](https://colony.io/) +- [DAOstack च्या होलोग्राफिक कन्सेंसससह एक DAO तयार करा](https://alchemy.daostack.io/daos/create) +- [DeGov Launcher सह एक DAO लाँच करा](https://docs.degov.ai/integration/deploy) -## Further reading {#further-reading} +## पुढील वाचन {#further-reading} ### DAO लेख {#dao-articles} - [DAO म्हणजे काय?](https://aragon.org/dao) – [Aragon](https://aragon.org/) -- [DAO पुस्तिका](https://daohandbook.xyz) -- [हाउस ऑफ DAO](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [मेटागेम](https://wiki.metagame.wtf/) +- [House of DAOs](https://wiki.metagame.wtf/docs/great-houses/house-of-daos) – [Metagame](https://wiki.metagame.wtf/) - [DAO म्हणजे काय आणि ते कशासाठी आहे?](https://daohaus.substack.com/p/-what-is-a-dao-and-what-is-it-for) – [DAOhaus](https://daohaus.club/) -- [DAO-सक्षम डिजिटल समुदाय कसा सुरू करावा](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) +- [DAO-चालित डिजिटल समुदाय कसा सुरू करावा](https://daohaus.substack.com/p/four-and-a-half-steps-to-start-a) – [DAOhaus](https://daohaus.club/) - [DAO म्हणजे काय?](https://coinmarketcap.com/alexandria/article/what-is-a-dao) – [Coinmarketcap](https://coinmarketcap.com) -- [होलोग्राफिक कॉन्सेन्सस म्हणजे काय?](https://medium.com/daostack/holographic-consensus-part-1-116a73ba1e1c) - [DAOstack](https://daostack.io/) -- [DAO कॉर्पोरेशन नाहीत: जेथे विटालिकद्वारे स्वायत्त संस्थांमध्ये विकेंद्रीकरण महत्त्वाचे आहे](https://vitalik.eth.limo/general/2022/09/20/daos.html) -- [DAO, DAC, DA आणि बरेच काही: एक अपूर्ण शब्दावली मार्गदर्शक](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [Ethereum ब्लॉग](https://blog.ethereum.org) +- [होलोग्राफिक कन्सेंसस म्हणजे काय?](https://medium.com/daostack/holographic-consensus-part-1-116a73ba1e1c) - [DAOstack](https://daostack.io/) +- [DAOs कॉर्पोरेशन्स नाहीत: विटालिकच्या मते स्वायत्त संस्थांमध्ये विकेंद्रीकरण कुठे महत्त्वाचे आहे](https://vitalik.eth.limo/general/2022/09/20/daos.html) +- [DAOs, DACs, DAs आणि बरेच काही: एक अपूर्ण पारिभाषिक मार्गदर्शक](https://blog.ethereum.org/2014/05/06/daos-dacs-das-and-more-an-incomplete-terminology-guide) - [Ethereum ब्लॉग](https://blog.ethereum.org) -### Videos {#videos} +### व्हिडिओ {#videos} - [क्रिप्टोमध्ये DAO म्हणजे काय?](https://youtu.be/KHm0uUPqmVE) -- [DAO शहर तयार करू शकतो का?](https://www.ted.com/talks/scott_fitsimones_could_a_dao_build_the_next_great_city) – [TED](https://www.ted.com/) +- [एक DAO शहर बनवू शकतो का?](https://www.ted.com/talks/scott_fitsimones_could_a_dao_build_the_next_great_city) – [TED](https://www.ted.com/) + + + + diff --git a/public/content/translations/mr/decentralized-identity/index.md b/public/content/translations/mr/decentralized-identity/index.md index 27b31447679..e04288e09bb 100644 --- a/public/content/translations/mr/decentralized-identity/index.md +++ b/public/content/translations/mr/decentralized-identity/index.md @@ -1,25 +1,27 @@ --- -title: विकेंद्रित ओळख -description: विकेंद्रित ओळख म्हणजे काय आणि ते का महत्त्वाचे आहे? +title: "विकेंद्रित ओळख" +description: "विकेंद्रित ओळख म्हणजे काय आणि ते का महत्त्वाचे आहे?" lang: mr template: use-cases emoji: ":id:" sidebarDepth: 2 image: /images/eth-gif-cat.png -summaryPoint1: पारंपारिक ओळख प्रणालींनी आपल्या अभिज्ञापकांचे जारी करणे, देखभाल आणि नियंत्रण केंद्रीकृत केले आहे. -summaryPoint2: विकेंद्रित ओळख केंद्रीकृत तृतीय पक्षावरील अवलंबित्व काढून टाकते. -summaryPoint3: क्रिप्टोचे आभार, वापरकर्त्यांकडे आता पुन्हा एकदा त्यांचे स्वतःचे अभिज्ञापक आणि साक्ष्यीकरण जारी करण्यासाठी, धरून ठेवण्यासाठी आणि नियंत्रित करण्यासाठी साधने आहेत. +summaryPoint1: "पारंपारिक ओळख प्रणालींनी आपल्या अभिज्ञापकांचे जारी करणे, देखभाल आणि नियंत्रण केंद्रीकृत केले आहे." +summaryPoint2: "विकेंद्रित ओळख केंद्रीकृत तृतीय पक्षावरील अवलंबित्व काढून टाकते." +summaryPoint3: "क्रिप्टोचे आभार, वापरकर्त्यांकडे आता पुन्हा एकदा त्यांचे स्वतःचे अभिज्ञापक आणि साक्ष्यीकरण जारी करण्यासाठी, धरून ठेवण्यासाठी आणि नियंत्रित करण्यासाठी साधने आहेत." --- ओळख आज तुमच्या जीवनातील अक्षरशः प्रत्येक पैलूवर आधारित आहे. ऑनलाइन सेवा वापरणे, बँक खाते उघडणे, निवडणुकीत मतदान करणे, मालमत्ता खरेदी करणे, रोजगार सुरक्षित करणे—या सर्व गोष्टींसाठी तुमची ओळख सिद्ध करणे आवश्यक आहे. -तथापि, पारंपारिक ओळख व्यवस्थापन प्रणाली दीर्घकाळापासून केंद्रीकृत मध्यस्थांवर अवलंबून आहेत जे तुमचे अभिज्ञापक आणि [प्रमाणीकरण](#what-are-attestations) जारी करतात, ठेवतात आणि नियंत्रित करतात. याचा अर्थ तुम्ही तुमची ओळख-संबंधित माहिती नियंत्रित करू शकत नाही किंवा वैयक्तिकरित्या ओळखण्यायोग्य माहिती (PII) मध्ये कोणाचा प्रवेश आहे आणि या पक्षांना किती प्रवेश आहे हे तुम्ही ठरवू शकत नाही. +तथापि, पारंपारिक ओळख व्यवस्थापन प्रणाली दीर्घकाळापासून केंद्रीकृत मध्यस्थांवर अवलंबून आहेत जे तुमचे अभिज्ञापक आणि [साक्षांकने](/glossary/#attestation) जारी करतात, ठेवतात आणि नियंत्रित करतात. याचा अर्थ तुम्ही तुमची ओळख-संबंधित माहिती नियंत्रित करू शकत नाही किंवा वैयक्तिकरित्या ओळखण्यायोग्य माहिती (PII) मध्ये कोणाचा प्रवेश आहे आणि या पक्षांना किती प्रवेश आहे हे तुम्ही ठरवू शकत नाही. -या समस्यांचे निराकरण करण्यासाठी, आम्ही Ethereum सारख्या सार्वजनिक ब्लॉकचेनवर विकेंद्रित ओळख प्रणाली तयार केली आहे. विकेंद्रित ओळख व्यक्तींना त्यांची ओळख-संबंधित माहिती व्यवस्थापित करण्यास अनुमती देते. विकेंद्रित ओळख समाधानांसह, _आपण_ आयडेंटिफायर तयार करू शकता आणि सेवा प्रदाते किंवा सरकार यांसारख्या केंद्रीय प्राधिकरणांवर विसंबून न राहता तुमच्या साक्ष्यांवर दावा करू शकता. +या समस्यांचे निराकरण करण्यासाठी, आम्ही Ethereum सारख्या सार्वजनिक ब्लॉकचेनवर विकेंद्रित ओळख प्रणाली तयार केली आहे. विकेंद्रित ओळख व्यक्तींना त्यांची ओळख-संबंधित माहिती व्यवस्थापित करण्यास अनुमती देते. विकेंद्रित ओळख सोल्यूशन्ससह, _तुम्ही_ अभिज्ञापक तयार करू शकता आणि सेवा प्रदाते किंवा सरकार यांसारख्या केंद्रीय प्राधिकरणांवर अवलंबून न राहता तुमच्या साक्षांकनांवर दावा करू शकता आणि ते धारण करू शकता. ## ओळख म्हणजे काय? {#what-is-identity} -ओळख म्हणजे एखाद्या व्यक्तीची स्वतःची भावना, अद्वितीय वैशिष्ट्यांद्वारे परिभाषित. ओळख म्हणजे एक _व्यक्ती_, म्हणजे, एक विशिष्ट मानवी अस्तित्व होय. ओळख इतर गैर-मानवी घटकांना देखील संदर्भित करू शकते, जसे की संस्था किंवा प्राधिकरण. +ओळख म्हणजे एखाद्या व्यक्तीची स्वतःची भावना, अद्वितीय वैशिष्ट्यांद्वारे परिभाषित. ओळख म्हणजे एक _व्यक्ती_ असणे, म्हणजेच, एक वेगळे मानवी अस्तित्व. ओळख इतर गैर-मानवी घटकांना देखील संदर्भित करू शकते, जसे की संस्था किंवा प्राधिकरण. + + ## अभिज्ञापक काय आहेत? {#what-are-identifiers} @@ -33,153 +35,184 @@ summaryPoint3: क्रिप्टोचे आभार, वापरकर आयडेंटिफायरची ही पारंपारिक उदाहरणे केंद्रीय संस्थांद्वारे जारी केली जातात, ठेवली जातात आणि नियंत्रित केली जातात. तुमचे नाव बदलण्यासाठी तुम्हाला तुमच्या सरकारकडून किंवा तुमचे हँडल बदलण्यासाठी सोशल मीडिया प्लॅटफॉर्मची परवानगी आवश्यक आहे. -## प्रमाणीकरणे म्हणजे काय? {#what-are-attestations} +## विकेंद्रित ओळखीचे फायदे {#benefits-of-decentralized-identity} -प्रमाणीकरण म्हणजे एका घटकाने दुसर्‍या संस्थेबद्दल केलेला दावा. तुम्ही युनायटेड स्टेट्समध्ये रहात असल्यास, मोटार वाहन विभाग (एक संस्था) द्वारे तुम्हाला जारी केलेला चालक परवाना तुम्हाला (दुसऱ्या संस्थेला) कायदेशीररित्या कार चालवण्याची परवानगी आहे याची साक्ष देतो. +1. विकेंद्रित ओळख माहिती ओळखण्याचे वैयक्तिक नियंत्रण वाढवते. विकेंद्रित अभिज्ञापक आणि प्रमाणीकरण केंद्रीकृत प्राधिकरणे आणि तृतीय-पक्ष सेवांवर अवलंबून न राहता सत्यापित केले जाऊ शकतात. -साक्षांकन ओळखकर्त्यांपेक्षा भिन्न आहेत. एखाद्या प्रमाणिकरणामध्ये विशिष्ट ओळखीचा संदर्भ देण्यासाठी अभिज्ञापक _असतात_ आणि या ओळखीशी संबंधित विशेषताबद्दल दावा करते. त्यामुळे, तुमच्या ड्रायव्हिंग लायसन्समध्ये आयडेंटिफायर आहेत (नाव, जन्मतारीख, पत्ता) पण ते तुमच्या वाहन चालवण्याच्या कायदेशीर अधिकाराचे प्रमाणीकरण देखील आहे. +2. विकेंद्रित ओळख सोल्यूशन्स वापरकर्त्याची ओळख सत्यापित आणि व्यवस्थापित करण्यासाठी एक ट्रस्टलेस, अखंड आणि गोपनीयतेचे संरक्षण करणारी पद्धत सुलभ करतात. -### विकेंद्रीकृत अभिज्ञापक काय आहेत? {#what-are-decentralized-identifiers} +3. विकेंद्रित ओळख ब्लॉकचेन तंत्रज्ञानाचा उपयोग करते, जे विविध पक्षांमध्ये विश्वास निर्माण करते आणि साक्ष्यीकरणांची वैधता सिद्ध करण्यासाठी क्रिप्टोग्राफिक हमी प्रदान करते. -तुमचे कायदेशीर नाव किंवा ईमेल पत्ता यांसारखे पारंपारिक अभिज्ञापक तृतीय पक्षांवर-सरकार आणि ईमेल प्रदात्यांवर अवलंबून असतात. विकेंद्रित अभिज्ञापक (DID) भिन्न आहेत - ते कोणत्याही केंद्रीय घटकाद्वारे जारी, व्यवस्थापित किंवा नियंत्रित केले जात नाहीत. +4. विकेंद्रित ओळख ओळख डेटा पोर्टेबल बनवते. वापरकर्ते मोबाईल वॉलेटमध्ये साक्षांकने आणि अभिज्ञापक साठवतात आणि ते त्यांच्या आवडीच्या कोणत्याही पक्षासोबत सामायिक करू शकतात. विकेंद्रीकृत अभिज्ञापक आणि प्रमाणीकरण जारी करणार्‍या संस्थेच्या डेटाबेसमध्ये लॉक केलेले नाहीत. -विकेंद्रित अभिज्ञापक जारी केले जातात, आयोजित केले जातात आणि व्यक्तीद्वारे नियंत्रित केले जातात. [Ethereum खाते](/developers/docs/accounts/) हे विकेंद्रित अभिज्ञापकाचे उदाहरण आहे. तुम्ही कोणाच्याही परवानगीशिवाय आणि केंद्रीय नोंदणीमध्ये संग्रहित न करता तुम्हाला हवी तितकी खाती तयार करू शकता. +5. विकेंद्रित ओळख उदयोन्मुख [शून्य-ज्ञान](/glossary/#zk-proof) तंत्रज्ञानासह चांगले कार्य करायला पाहिजे, जे व्यक्तींना ती गोष्ट काय आहे हे उघड न करता स्वतःची मालकी सिद्ध करण्यास किंवा काहीतरी केले आहे हे सिद्ध करण्यास सक्षम करेल. मतदानासारख्या अनुप्रयोगांसाठी विश्वास आणि गोपनीयता एकत्र करण्याचा हा एक शक्तिशाली मार्ग बनू शकतो. -विकेंद्रित अभिज्ञापक वितरित लेजर (ब्लॉकचेन) किंवा पीअर-टू-पीअर नेटवर्कवर संग्रहित केले जातात. हे DID [जागतिकदृष्ट्या अद्वितीय, उच्च उपलब्धतेसह निराकरण करण्यायोग्य आणि क्रिप्टोग्राफिकली पडताळण्यायोग्य](https://w3c-ccg.github.io/did-primer/) बनवते. विकेंद्रीकृत अभिज्ञापक लोक, संस्था किंवा सरकारी संस्थांसह विविध घटकांशी संबंधित असू शकतो. +6. विकेंद्रित ओळख [अँटी-सिबिल](/glossary/#anti-sybil) यंत्रणांना हे ओळखण्यास सक्षम करते की, जेव्हा एखादी व्यक्ती प्रणालीला फसविण्यासाठी (game) किंवा स्पॅम करण्यासाठी अनेक व्यक्ती असल्याचे भासवते. -## विकेंद्रित अभिज्ञापक कशामुळे शक्य होते? {#what-makes-decentralized-identifiers-possible} +## विकेंद्रित ओळखीचे उपयोग {#decentralized-identity-use-cases} -### 1. सार्वजनिक की पायाभूत सुविधा (PKI) {#public-key-cryptography} +विकेंद्रित ओळख अनेक संभाव्य वापर-केस आहेत: -पब्लिक-की इन्फ्रास्ट्रक्चर (PKI) ही माहिती सुरक्षा उपाय आहे जी एखाद्या घटकासाठी [सार्वजनिक की](/glossary/#public-key) आणि [खाजगी की](/glossary/#private-key) व्युत्पन्न करते. वापरकर्ता ओळख प्रमाणित करण्यासाठी आणि डिजिटल मालमत्तेची मालकी सिद्ध करण्यासाठी ब्लॉकचेन नेटवर्कमध्ये सार्वजनिक-की क्रिप्टोग्राफी वापरली जाते. +### १. सार्वत्रिक लॉगिन {#universal-dapp-logins} -काही विकेंद्रीकृत अभिज्ञापक, जसे की Ethereum खाते, सार्वजनिक आणि खाजगी की असतात. सार्वजनिक की खात्याच्या नियंत्रकाला ओळखते, तर खाजगी की या खात्यासाठी संदेश साइन आणि डिक्रिप्ट करू शकतात. PKI सर्व दाव्यांची पडताळणी करण्यासाठी [क्रिप्टोग्राफिक स्वाक्षरी](https://andersbrownworth.com/blockchain/public-private-keys/) वापरून संस्था प्रमाणित करण्यासाठी आणि तोतयागिरी आणि बनावट ओळखींचा वापर रोखण्यासाठी आवश्यक पुरावे प्रदान करते. +विकेंद्रीकृत ओळख पासवर्ड-आधारित लॉगिन विकेंद्रित प्रमाणीकरण सह बदलण्यात मदत करू शकते. सेवा प्रदाते वापरकर्त्यांना साक्ष्यीकरण देऊ शकतात, जे Ethereum वॉलेटमध्ये संग्रहित केले जाऊ शकतात. एका साक्षांकनाचे उदाहरण म्हणजे एक [NFT](/glossary/#nft) जे धारकाला ऑनलाइन समुदायात प्रवेश देते. -### 2. विकेंद्रित डेटास्टोअर {#decentralized-datastores} +[Ethereum सह साइन-इन करा](https://siwe.xyz/) फंक्शन सर्व्हरला वापरकर्त्याच्या Ethereum खात्याची पुष्टी करण्यास आणि त्यांच्या खात्याच्या पत्त्यावरून आवश्यक साक्षांकन मिळविण्यास सक्षम करेल. याचा अर्थ वापरकर्ते लांब पासवर्ड लक्षात ठेवल्याशिवाय प्लॅटफॉर्म आणि वेबसाइट्समध्ये प्रवेश करू शकतात आणि वापरकर्त्यांसाठी ऑनलाइन अनुभव सुधारतात. -ब्लॉकचेन एक पडताळणीयोग्य डेटा रेजिस्ट्री म्हणून काम करते: माहितीचा खुला, विश्वासहीन आणि विकेंद्रित भांडार. सार्वजनिक ब्लॉकचेनचे अस्तित्व केंद्रीकृत रजिस्ट्रीमध्ये अभिज्ञापक संचयित करण्याची आवश्यकता दूर करते. +### २. केवायसी प्रमाणीकरण {#kyc-authentication} -विकेंद्रित अभिज्ञापकाच्या वैधतेची पुष्टी करणे आवश्यक असल्यास, ते ब्लॉकचेनवर संबंधित सार्वजनिक की पाहू शकतात. हे पारंपारिक अभिज्ञापकांपेक्षा वेगळे आहे ज्यांना तृतीय पक्षांना प्रमाणीकरण आवश्यक आहे. +अनेक ऑनलाइन सेवा वापरण्यासाठी व्यक्तींना ड्रायव्हिंग लायसन्स किंवा राष्ट्रीय पासपोर्ट यांसारखी साक्षांकन आणि क्रेडेन्शियल प्रदान करणे आवश्यक आहे. परंतु हा दृष्टीकोन समस्याप्रधान आहे कारण खाजगी वापरकर्ता माहितीशी तडजोड केली जाऊ शकते आणि सेवा प्रदाते प्रमाणीकरणाची सत्यता सत्यापित करू शकत नाहीत. -## विकेंद्रित अभिज्ञापक आणि साक्ष्यीकरणे विकेंद्रित ओळख कशी सक्षम करतात? {#how-decentralized-identifiers-and-attestations-enable-decentralized-identity} +विकेंद्रित ओळख कंपन्यांना पारंपारिक [तुमचा-ग्राहक-जाणा (KYC)](https://en.wikipedia.org/wiki/Know_your_customer) प्रक्रिया वगळण्याची आणि व्हेरिफायेबल क्रेडेन्शियल्सद्वारे वापरकर्ता ओळख प्रमाणित करण्याची अनुमती देते. हे ओळख व्यवस्थापनाची किंमत कमी करते आणि बनावट कागदपत्रांचा वापर प्रतिबंधित करते. -विकेंद्रित ओळख ही कल्पना आहे की ओळख-संबंधित माहिती स्वयं-नियंत्रित, खाजगी आणि पोर्टेबल असावी, विकेंद्रीकृत अभिज्ञापक आणि साक्ष्यीकरणे हे प्राथमिक बिल्डिंग ब्लॉक्स आहेत. +### ३. मतदान आणि ऑनलाइन समुदाय {#voting-and-online-communities} -विकेंद्रित ओळखीच्या संदर्भात, साक्ष्यीकरणे ([पडताळणी करण्यायोग्य क्रेडेन्शियल्स](https://www.w3.org/TR/vc-data-model/) म्हणूनही ओळखली जाते) हे छेडछाड-प्रूफ, क्रिप्टोग्राफिकली आहेत जारीकर्त्याने केलेले सत्यापित दावे. प्रत्येक प्रमाणीकरण किंवा पडताळणीयोग्य क्रेडेन्शियल एखाद्या घटकाच्या (उदा. संस्था) समस्या त्यांच्या DID शी संबंधित असतात. +ऑनलाइन मतदान आणि सोशल मीडिया विकेंद्रित ओळखीसाठी दोन नवीन अनुप्रयोग आहेत. ऑनलाइन मतदान योजना हेराफेरीसाठी संवेदनाक्षम असतात, विशेषतः जर दुर्भावनापूर्ण अभिनेते मतदान करण्यासाठी खोटी ओळख निर्माण करतात. व्यक्तींना ऑनचेन साक्षांकने सादर करण्यास सांगण्याने ऑनलाइन मतदान प्रक्रियेची अखंडता सुधारू शकते. -ब्लॉकचेनवर DID संग्रहित केल्यामुळे, कोणीही Ethereum वर जारीकर्त्याच्या DID ची क्रॉस-तपासणी करून अॅटेस्टेशनची वैधता सत्यापित करू शकतो. मूलत:, Ethereum ब्लॉकचेन जागतिक निर्देशिकेप्रमाणे कार्य करते जे विशिष्ट घटकांशी संबंधित DID चे सत्यापन सक्षम करते. +विकेंद्रित ओळख ऑनलाइन समुदाय तयार करण्यात मदत करू शकते जे बनावट खात्यांपासून मुक्त आहेत. उदाहरणार्थ, प्रत्येक वापरकर्त्याला बॉट्सची शक्यता कमी करण्यासाठी, Ethereum नेम सर्व्हिससारख्या ऑनचेन ओळख प्रणालीचा वापर करून आपली ओळख प्रमाणित करावी लागेल. -विकेंद्रीकृत अभिज्ञापक हे प्रमाणीकरण स्वयं-नियंत्रित आणि सत्यापित करण्यायोग्य असण्याचे कारण आहेत. जरी जारीकर्ता यापुढे अस्तित्वात नसला तरीही, धारकाकडे नेहमी प्रमाणीकरणाच्या मूळ आणि वैधतेचा पुरावा असतो. +### ४. अँटी-सिबिल संरक्षण {#sybil-protection} -विकेंद्रित ओळखीद्वारे वैयक्तिक माहितीच्या गोपनीयतेचे संरक्षण करण्यासाठी विकेंद्रीकृत अभिज्ञापक देखील महत्त्वपूर्ण आहेत. उदाहरणार्थ, एखाद्या व्यक्तीने साक्षांकनाचा पुरावा (ड्रायव्हिंग लायसन्स) सबमिट केल्यास, पडताळणी करणाऱ्या पक्षाला पुराव्यातील माहितीची वैधता तपासण्याची आवश्यकता नाही. त्याऐवजी, पडताळकाला पुरावा वैध आहे की नाही हे निर्धारित करण्यासाठी प्रमाणीकरणाची सत्यता आणि जारी करणाऱ्या संस्थेच्या ओळखीची क्रिप्टोग्राफिक हमी आवश्यक असते. +[क्वाड्रॅटिक व्होटिंग](/glossary/#quadratic-voting) वापरणारे अनुदान देणारे ऍप्लिकेशन्स [सिबिल हल्ल्यांसाठी](/glossary/#sybil-attack) असुरक्षित आहेत कारण जेव्हा अधिक व्यक्ती त्यासाठी मतदान करतात तेव्हा अनुदानाचे मूल्य वाढते, ज्यामुळे वापरकर्त्यांना त्यांचे योगदान अनेक ओळखींमध्ये विभागण्यास प्रोत्साहन मिळते. विकेंद्रीकृत ओळख प्रत्येक सहभागीवर भार वाढवून ते खरोखरच मानव आहेत हे सिद्ध करण्यासाठी हे रोखण्यात मदत करतात, जरी अनेकदा विशिष्ट खाजगी माहिती उघड न करता. -## विकेंद्रित ओळख मध्ये प्रमाणीकरणाचे प्रकार {#types-of-attestations-in-decentralized-identity} +### ५. राष्ट्रीय आणि सरकारी ओळखपत्र {#national-and-government-id} -Ethereum-आधारित ओळख इकोसिस्टममध्ये प्रमाणीकरण माहिती कशी संग्रहित आणि पुनर्प्राप्त केली जाते हे पारंपारिक ओळख व्यवस्थापनापेक्षा वेगळे आहे. विकेंद्रित ओळख प्रणालींमध्ये साक्ष्यीकरण जारी करणे, संचयित करणे आणि सत्यापित करणे यासाठी विविध दृष्टिकोनांचे विहंगावलोकन येथे आहे: +सरकार विकेंद्रित ओळखीची तत्त्वे वापरून राष्ट्रीय ओळखपत्रे, पासपोर्ट किंवा ड्रायव्हिंग लायसन्स यांसारखी मूलभूत ओळखपत्रे Ethereum वर व्हेरिफायेबल क्रेडेन्शियल्स म्हणून जारी करू शकतात, ज्यामुळे ऑनलाइन ओळख पडताळणीमधील फसवणूक आणि बनावटगिरी कमी करण्यासाठी सत्यतेची मजबूत क्रिप्टोग्राफिक हमी मिळते. नागरिक ही साक्षांकने त्यांच्या वैयक्तिक [वॉलेटमध्ये](/wallets/) साठवू शकतात आणि त्यांचा वापर आपली ओळख, वय किंवा मतदानाचा हक्क सिद्ध करण्यासाठी करू शकतात. -### ऑफ-चेन प्रमाणपत्रे {#off-chain-attestations} +हे मॉडेल निवडक खुलाशास परवानगी देते, विशेषतः जेव्हा [शून्य-ज्ञान पुरावा (ZKP)](/zero-knowledge-proofs/) गोपनीयता तंत्रज्ञानासह एकत्रित केले जाते. उदाहरणार्थ, एखादा नागरिक पारंपारिक ओळखपत्रापेक्षा अधिक गोपनीयता मिळवत, आपली अचूक जन्मतारीख उघड न करता वय-प्रतिबंधित सेवेमध्ये प्रवेश करण्यासाठी आपण 18 वर्षांपेक्षा जास्त वयाचे असल्याचे क्रिप्टोग्राफिकदृष्ट्या सिद्ध करू शकतो. -ऑन-चेन साक्ष्यीकरण संचयित करण्याबाबत एक चिंतेची बाब म्हणजे त्यामध्ये व्यक्ती खाजगी ठेवू इच्छित असलेली माहिती असू शकते. Ethereum ब्लॉकचेनच्या सार्वजनिक स्वरूपामुळे अशी साक्ष्यीकरणे संग्रहित करणे अनाकर्षक बनते. +#### 💡केस स्टडी: Ethereum वरील भूतान नॅशनल डिजिटल आयडी (NDI) {#case-study-bhutan-ndi} -डिजिटल वॉलेटमध्ये ऑफ-चेन वापरकर्त्यांद्वारे साक्षांकन जारी करणे हा उपाय आहे, परंतु जारीकर्त्याच्या DID ऑन-चेनमध्ये संग्रहित आहे. ही साक्षांकने [JSON वेब टोकन](https://en.wikipedia.org/wiki/JSON_Web_Token) म्हणून एन्कोड केलेली आहेत आणि त्यात जारीकर्त्याची डिजिटल स्वाक्षरी असते—ज्यामुळे ऑफ-चेन दाव्यांची सहज पडताळणी करता येते. +- भूतानच्या जवळपास ८००,००० नागरिकांसाठी व्हेरिफायेबल ओळखपत्रांचा ऍक्सेस प्रदान करते +- ऑक्टोबर २०२५ मध्ये Polygon नेटवर्कवरून [Ethereum मेननेटवर](https://www.bhutanndi.com/article/bhutan-adopts-ethereum-for-national-identity-a-new-chapter-in-digital-sovereignty_2d0c7ec2-5605-4c42-b258-bd9361ae8878) स्थलांतरित +- मार्च २०२५ पर्यंत [२३४,००० हून अधिक डिजिटल आयडी](https://www.blockchain-council.org/blockchain/bhutan-uses-blockchain-in-digital-id-project/) जारी -ऑफ-चेन साक्ष्यीकरण स्पष्ट करण्यासाठी येथे एक काल्पनिक परिस्थिती आहे: +भूतान राज्याने ऑक्टोबर २०२५ मध्ये आपली [नॅशनल डिजिटल आयडेंटिटी (NDI) प्रणाली](https://www.bhutanndi.com/article/bhutan-adopts-ethereum-for-national-identity-a-new-chapter-in-digital-sovereignty_2d0c7ec2-5605-4c42-b258-bd9361ae8878) Ethereum वर स्थलांतरित केली. विकेंद्रित ओळख आणि सेल्फ-सॉव्हरिन आयडेंटिटीच्या तत्त्वांवर आधारित, भूतानची NDI प्रणाली नागरिकाच्या वैयक्तिक वॉलेटमध्ये थेट डिजिटल स्वाक्षरी असलेले क्रेडेन्शियल्स जारी करण्यासाठी विकेंद्रित अभिज्ञापक आणि व्हेरिफायेबल क्रेडेन्शियल्स वापरते. या क्रेडेन्शियल्सचे क्रिप्टोग्राफिक पुरावे Ethereum वर अँकर करून, ही प्रणाली सुनिश्चित करते की ते अस्सल, टॅम्पर-प्रूफ आहेत आणि कोणत्याही केंद्रीय प्राधिकरणाची विचारपूस न करता कोणत्याही पक्षाद्वारे सत्यापित केले जाऊ शकतात. -1. विद्यापीठ (जारीकर्ता) एक प्रमाणीकरण (डिजिटल शैक्षणिक प्रमाणपत्र) व्युत्पन्न करते, त्याच्या की सह स्वाक्षरी करते आणि बॉब (ओळख मालक) यांना जारी करते. +या प्रणालीची रचना [शून्य-ज्ञान पुरावा (ZKP)](/zero-knowledge-proofs/) तंत्रज्ञानाच्या वापराद्वारे गोपनीयतेवर जोर देते. "निवडक खुलासा" ची ही अंमलबजावणी नागरिकांना सेवांमध्ये प्रवेश करण्यासाठी त्यांची पूर्ण ओळखपत्र क्रमांक किंवा अचूक जन्मतारीख यासारखा मूळ वैयक्तिक डेटा उघड न करता विशिष्ट तथ्ये (उदा. "मी १८ वर्षांवरील आहे" किंवा "मी एक नागरिक आहे") सिद्ध करण्यास अनुमती देते. हे एका सुरक्षित, वापरकर्ता-केंद्रित आणि गोपनीयतेचे संरक्षण करणाऱ्या राष्ट्रीय ओळखपत्र प्रणालीसाठी Ethereum चा एक शक्तिशाली, वास्तविक-जगातील वापर दर्शवते. -2. बॉब नोकरीसाठी अर्ज करतो आणि त्याला त्याची शैक्षणिक पात्रता नियोक्त्याला सिद्ध करायची आहे, म्हणून तो त्याच्या मोबाइल वॉलेटमधून साक्षांकन शेअर करतो. कंपनी (पडताळणीकर्ता) नंतर जारीकर्त्याचा DID (म्हणजे, Ethereum वरील सार्वजनिक की) तपासून साक्षांकनाच्या वैधतेची पुष्टी करू शकते. +#### 💡केस स्टडी: Ethereum [लेयर 2](/layer-2/) ZKSync Era वरील ब्युनोस आयर्स शहराचा QuarkID {#case-study-buenos-aires-quarkid} -### सतत प्रवेशासह ऑफ-चेन साक्ष्यीकरण {#offchain-attestations-with-persistent-access} +- लाँचच्या वेळी [३.६ दशलक्षाहून अधिक वापरकर्त्यांना](https://buenosaires.gob.ar/innovacionytransformaciondigital/miba-con-tecnologia-quarkid-la-ciudad-de-buenos-aires-incorporo) विकेंद्रित ओळखपत्रे जारी केली +- QuarkID हा एक ओपन-सोर्स प्रोटोकॉल आहे जो UN सस्टेनेबल डेव्हलपमेंट गोल्स अंतर्गत [डिजिटल पब्लिक गुड](https://www.digitalpublicgoods.net/r/quarkid) म्हणून ओळखला जातो +- "[सरकार-एक-वापरकर्ता](https://buenosaires.gob.ar/innovacionytransformaciondigital/miba-con-tecnologia-quarkid-la-ciudad-de-buenos-aires-incorporo)" मॉडेलवर जोर देते, जिथे शहराची प्रोटोकॉलवर मालकी नसते, ज्यामुळे नागरिकांना पूर्ण डेटा मालकी आणि गोपनीयता मिळते -या व्यवस्थेअंतर्गत साक्ष्यीकरणे JSON फायलींमध्ये रूपांतरित केली जातात आणि ऑफ-चेन संग्रहित केली जातात (आदर्शपणे [विकेंद्रित क्लाउड स्टोरेज](/developers/docs/storage/) प्लॅटफॉर्मवर, जसे की IPFS किंवा Swarm). तथापि, JSON फाइलचा [हॅश](/glossary/#hash) ऑन-चेन संग्रहित केला जातो आणि ऑन-चेन रेजिस्ट्रीद्वारे DID शी लिंक केला जातो. संबंधित DID एकतर प्रमाणीकरण जारीकर्ता किंवा प्राप्तकर्त्याचा असू शकतो. +२०२४ मध्ये, ब्युनोस आयर्स शहर सरकारने (GCBA) QuarkID, जे GCBA च्या इनोव्हेशन आणि डिजिटल ट्रान्सफॉर्मेशन सचिवालयाने तयार केलेले एक ओपन-सोर्स “डिजिटल ट्रस्ट फ्रेमवर्क” आहे, ते miBA मध्ये एकत्रित केले, जे रहिवाशांना सरकारी सेवा आणि अधिकृत कागदपत्रांमध्ये प्रवेश करण्यासाठी शहराचे अधिकृत ॲप आहे. लाँचच्या वेळी, miBA च्या सर्व ३.६ दशलक्ष+ वापरकर्त्यांना विकेंद्रित डिजिटल ओळखपत्रे जारी करण्यात आली, जी त्यांना नागरिकत्व प्रमाणपत्रे, जन्म, विवाह आणि मृत्यू प्रमाणपत्रे, कर रेकॉर्ड, लसीकरण रेकॉर्ड आणि बरेच काही यासह व्हेरिफायेबल डिजिटल दस्तऐवज आणि प्रमाणपत्रे ऑनचेन व्यवस्थापित आणि सामायिक करण्याची परवानगी देतात. -हा दृष्टिकोन दाव्यांची माहिती एनक्रिप्टेड आणि सत्यापित करण्यायोग्य ठेवताना, ब्लॉकचेन-आधारित चिकाटी मिळविण्यासाठी साक्ष्यीकरणांना सक्षम करतो. हे निवडक प्रकटीकरणास देखील अनुमती देते कारण खाजगी की धारक माहिती डिक्रिप्ट करू शकतो. +Ethereum [लेयर 2](/layer-2/) नेटवर्क ZKSync Era वर तयार केलेली, QuarkID प्रणाली ZKP तंत्रज्ञान वापरते जे नागरिकांना अनावश्यक वैयक्तिक डेटा उघड न करता—त्यांच्या मोबाईल डिव्हाइसेसद्वारे पीअर-टू-पीअर वैयक्तिक क्रेडेन्शियल्स सत्यापित करण्याची परवानगी देते. हा कार्यक्रम “सरकार-एक-वापरकर्ता” मॉडेलवर प्रकाश टाकतो ज्यामध्ये GCBA केंद्रीकृत मालक म्हणून काम करण्याऐवजी, ओपन-सोर्स, इंटरऑपरेबल QuarkID प्रोटोकॉलचा एक वापरकर्ता म्हणून काम करते. ही ZKP-सक्षम रचना एक महत्त्वाची गोपनीयता सुविधा प्रदान करते: कोणतीही तृतीय-पक्ष, अगदी GCBA सुद्धा, एखादा नागरिक आपले क्रेडेन्शियल्स कसे, केव्हा, किंवा का वापरतो याचा मागोवा घेऊ शकत नाही. हा यशस्वी कार्यक्रम नागरिकांना संपूर्ण सेल्फ-सॉव्हरिन आयडेंटिटी आणि त्यांच्या संवेदनशील डेटावर नियंत्रण प्रदान करतो, जे सर्व Ethereum च्या जागतिक-वितरित नेटवर्कद्वारे सुरक्षित आहे. -### ऑन-चेन प्रमाणपत्रे {#onchain-attestations} +## प्रमाणीकरणे म्हणजे काय? {#what-are-attestations} -Ethereum ब्लॉकचेनवरील [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/) मध्ये ऑन-चेन साक्ष्यीकरणे आयोजित केली जातात. स्मार्ट कॉन्ट्रॅक्ट (रेजिस्ट्री म्हणून काम करणे) संबंधित ऑन-चेन विकेंद्रीकृत अभिज्ञापक (सार्वजनिक की) चे प्रमाणीकरण मॅप करेल. +प्रमाणीकरण म्हणजे एका घटकाने दुसर्‍या संस्थेबद्दल केलेला दावा. तुम्ही युनायटेड स्टेट्समध्ये रहात असल्यास, मोटार वाहन विभाग (एक संस्था) द्वारे तुम्हाला जारी केलेला चालक परवाना तुम्हाला (दुसऱ्या संस्थेला) कायदेशीररित्या कार चालवण्याची परवानगी आहे याची साक्ष देतो. -ऑन-चेन साक्ष्यीकरण व्यवहारात कसे कार्य करू शकते हे दर्शवण्यासाठी येथे एक उदाहरण आहे: +साक्षांकन ओळखकर्त्यांपेक्षा भिन्न आहेत. एका साक्षांकनामध्ये विशिष्ट ओळखीचा संदर्भ देण्यासाठी अभिज्ञापक _असतात_, आणि ते या ओळखीशी संबंधित गुणधर्माबद्दल दावा करते. त्यामुळे, तुमच्या ड्रायव्हिंग लायसन्समध्ये आयडेंटिफायर आहेत (नाव, जन्मतारीख, पत्ता) पण ते तुमच्या वाहन चालवण्याच्या कायदेशीर अधिकाराचे प्रमाणीकरण देखील आहे. -1. एक कंपनी (XYZ कॉर्प) स्मार्ट कराराचा वापर करून मालकीचे शेअर्स विकण्याची योजना आखत आहे परंतु केवळ पार्श्वभूमी तपासणी पूर्ण केलेल्या खरेदीदारांनाच हवे आहे. +### विकेंद्रीकृत अभिज्ञापक काय आहेत? {#what-are-decentralized-identifiers} -2. XYZ Corp कडे Ethereum वर ऑन-चेन अटेस्टेशन जारी करण्यासाठी पार्श्वभूमी तपासणी करणारी कंपनी असू शकते. हे प्रमाणीकरण प्रमाणित करते की एखाद्या व्यक्तीने कोणतीही वैयक्तिक माहिती उघड न करता पार्श्वभूमी तपासणी उत्तीर्ण केली आहे. +तुमचे कायदेशीर नाव किंवा ईमेल पत्ता यांसारखे पारंपारिक अभिज्ञापक तृतीय पक्षांवर-सरकार आणि ईमेल प्रदात्यांवर अवलंबून असतात. विकेंद्रित अभिज्ञापक (DID) भिन्न आहेत - ते कोणत्याही केंद्रीय घटकाद्वारे जारी, व्यवस्थापित किंवा नियंत्रित केले जात नाहीत. -3. समभाग विक्री करणारे स्मार्ट कॉन्ट्रॅक्ट स्क्रीन केलेल्या खरेदीदारांच्या ओळखीसाठी रेजिस्ट्री करार तपासू शकतात, ज्यामुळे कोणाला शेअर्स खरेदी करण्याची परवानगी आहे किंवा नाही हे स्मार्ट कॉन्ट्रॅक्टला निर्धारित करणे शक्य होते. +विकेंद्रित अभिज्ञापक जारी केले जातात, आयोजित केले जातात आणि व्यक्तीद्वारे नियंत्रित केले जातात. [Ethereum खाते](/glossary/#account) हे विकेंद्रित अभिज्ञापकाचे उदाहरण आहे. तुम्ही कोणाच्याही परवानगीशिवाय आणि केंद्रीय नोंदणीमध्ये संग्रहित न करता तुम्हाला हवी तितकी खाती तयार करू शकता. + +विकेंद्रित अभिज्ञापक वितरित लेजर ([ब्लॉकचेन्स](/glossary/#blockchain)) किंवा [पीअर-टू-पीअर नेटवर्क्सवर](/glossary/#peer-to-peer-network) साठवले जातात. हे DIDs ला [जागतिक स्तरावर अद्वितीय, उच्च उपलब्धतेसह निराकरण करण्यायोग्य आणि क्रिप्टोग्राफिकदृष्ट्या पडताळण्यायोग्य](https://w3c-ccg.github.io/did-primer/) बनवते. विकेंद्रीकृत अभिज्ञापक लोक, संस्था किंवा सरकारी संस्थांसह विविध घटकांशी संबंधित असू शकतो. -### सोलबाउंड टोकन आणि ओळख {#soulbound} +## विकेंद्रित अभिज्ञापक कशामुळे शक्य होते? {#what-makes-decentralized-identifiers-possible} -[सोलबाउंड टोकन](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) (नॉन-हस्तांतरणीय NFT) विशिष्ट वॉलेटसाठी अद्वितीय माहिती गोळा करण्यासाठी वापरली जाऊ शकतात. हे प्रभावीपणे विशिष्ट Ethereum पत्त्याशी बांधील एक अनन्य ऑन-चेन ओळख तयार करते ज्यामध्ये उपलब्धी दर्शविणारे टोकन समाविष्ट असू शकतात (उदा. काही विशिष्ट ऑनलाइन कोर्स पूर्ण करणे किंवा गेममध्ये थ्रेशोल्ड स्कोअर उत्तीर्ण करणे) किंवा समुदाय सहभाग. +### १. सार्वजनिक की क्रिप्टोग्राफी {#public-key-cryptography} -## विकेंद्रित ओळखीचे फायदे {#benefits-of-decentralized-identity} +पब्लिक-की क्रिप्टोग्राफी हा एक माहिती सुरक्षा उपाय आहे जो एका संस्थेसाठी [सार्वजनिक की](/glossary/#public-key) आणि [खाजगी की](/glossary/#private-key) तयार करतो. वापरकर्ता ओळख प्रमाणित करण्यासाठी आणि डिजिटल मालमत्तेची मालकी सिद्ध करण्यासाठी ब्लॉकचेन नेटवर्क्समध्ये पब्लिक-की [क्रिप्टोग्राफी](/glossary/#cryptography) वापरली जाते. -1. विकेंद्रित ओळख माहिती ओळखण्याचे वैयक्तिक नियंत्रण वाढवते. विकेंद्रित अभिज्ञापक आणि प्रमाणीकरण केंद्रीकृत प्राधिकरणे आणि तृतीय-पक्ष सेवांवर अवलंबून न राहता सत्यापित केले जाऊ शकतात. +काही विकेंद्रीकृत अभिज्ञापक, जसे की Ethereum खाते, सार्वजनिक आणि खाजगी की असतात. सार्वजनिक की खात्याच्या नियंत्रकाला ओळखते, तर खाजगी की या खात्यासाठी संदेश साइन आणि डिक्रिप्ट करू शकतात. पब्लिक की क्रिप्टोग्राफी सर्व दाव्यांची पडताळणी करण्यासाठी [क्रिप्टोग्राफिक स्वाक्षऱ्या](https://andersbrownworth.com/blockchain/public-private-keys/) वापरून, संस्था प्रमाणित करण्यासाठी आणि तोतयागिरी व बनावट ओळखींचा वापर रोखण्यासाठी आवश्यक पुरावे प्रदान करते. -2. विकेंद्रित ओळख समाधाने वापरकर्ता ओळख सत्यापित आणि व्यवस्थापित करण्यासाठी विश्वासहीन, अखंड आणि गोपनीयता-संरक्षण पद्धती सुलभ करतात. +### २. विकेंद्रित डेटास्टोअर्स {#decentralized-datastores} -3. विकेंद्रित ओळख ब्लॉकचेन तंत्रज्ञानाचा उपयोग करते, जे विविध पक्षांमध्ये विश्वास निर्माण करते आणि साक्ष्यीकरणांची वैधता सिद्ध करण्यासाठी क्रिप्टोग्राफिक हमी प्रदान करते. +ब्लॉकचेन एक पडताळणीयोग्य डेटा रेजिस्ट्री म्हणून काम करते: माहितीचा खुला, विश्वासहीन आणि विकेंद्रित भांडार. सार्वजनिक ब्लॉकचेनचे अस्तित्व केंद्रीकृत रजिस्ट्रीमध्ये अभिज्ञापक संचयित करण्याची आवश्यकता दूर करते. -4. विकेंद्रित ओळख ओळख डेटा पोर्टेबल बनवते. वापरकर्ते मोबाइल वॉलेटमध्ये साक्ष्यीकरणे आणि अभिज्ञापक संग्रहित करतात आणि त्यांच्या आवडीच्या कोणत्याही पक्षासह सामायिक करू शकतात. विकेंद्रीकृत अभिज्ञापक आणि प्रमाणीकरण जारी करणार्‍या संस्थेच्या डेटाबेसमध्ये लॉक केलेले नाहीत. +विकेंद्रित अभिज्ञापकाच्या वैधतेची पुष्टी करणे आवश्यक असल्यास, ते ब्लॉकचेनवर संबंधित सार्वजनिक की पाहू शकतात. हे पारंपारिक अभिज्ञापकांपेक्षा वेगळे आहे ज्यांना तृतीय पक्षांना प्रमाणीकरण आवश्यक आहे. -5. विकेंद्रित ओळख उदयोन्मुख शून्य-ज्ञान तंत्रज्ञानासह चांगले कार्य करते जे व्यक्तींना ती गोष्ट काय आहे हे उघड न करता स्वतःची मालकी किंवा काहीतरी केले आहे हे सिद्ध करण्यास सक्षम करेल. मतदानासारख्या अनुप्रयोगांसाठी विश्वास आणि गोपनीयता एकत्र करण्याचा हा एक शक्तिशाली मार्ग बनू शकतो. +## विकेंद्रित अभिज्ञापक आणि साक्ष्यीकरणे विकेंद्रित ओळख कशी सक्षम करतात? {#how-decentralized-identifiers-and-attestations-enable-decentralized-identity} -6. विकेंद्रीकृत ओळख सिबिल-विरोधी यंत्रणांना ओळखण्यासाठी सक्षम करते जेव्हा एक व्यक्ती अनेक मानव असल्याचे भासवत असते तेव्हा एखाद्या प्रणालीशी गेम किंवा स्पॅम करतात. +विकेंद्रित ओळख ही कल्पना आहे की ओळख-संबंधित माहिती स्वयं-नियंत्रित, खाजगी आणि पोर्टेबल असावी, विकेंद्रीकृत अभिज्ञापक आणि साक्ष्यीकरणे हे प्राथमिक बिल्डिंग ब्लॉक्स आहेत. -## विकेंद्रित ओळख वापर प्रकरणे {#decentralized-identity-use-cases} +विकेंद्रित ओळखीच्या संदर्भात, साक्षांकने ([व्हेरिफायेबल क्रेडेन्शियल्स](https://www.w3.org/TR/vc-data-model/) म्हणूनही ओळखली जातात) जारीकर्त्याने केलेले छेडछाड-रोधक, क्रिप्टोग्राफिकदृष्ट्या पडताळणीयोग्य दावे आहेत. प्रत्येक प्रमाणीकरण किंवा पडताळणीयोग्य क्रेडेन्शियल एखाद्या घटकाच्या (उदा. संस्था) समस्या त्यांच्या DID शी संबंधित असतात. -विकेंद्रित ओळख अनेक संभाव्य वापर-केस आहेत: +ब्लॉकचेनवर DID संग्रहित केल्यामुळे, कोणीही Ethereum वर जारीकर्त्याच्या DID ची क्रॉस-तपासणी करून अॅटेस्टेशनची वैधता सत्यापित करू शकतो. मूलत:, Ethereum ब्लॉकचेन जागतिक निर्देशिकेप्रमाणे कार्य करते जे विशिष्ट घटकांशी संबंधित DID चे सत्यापन सक्षम करते. -### 1. युनिव्हर्सल लॉगिन {#universal-dapp-logins} +विकेंद्रीकृत अभिज्ञापक हे प्रमाणीकरण स्वयं-नियंत्रित आणि सत्यापित करण्यायोग्य असण्याचे कारण आहेत. जरी जारीकर्ता यापुढे अस्तित्वात नसला तरीही, धारकाकडे नेहमी प्रमाणीकरणाच्या मूळ आणि वैधतेचा पुरावा असतो. -विकेंद्रीकृत ओळख पासवर्ड-आधारित लॉगिन [विकेंद्रित प्रमाणीकरण](https://www.ibm.com/blogs/blockchain/2018/10/decentralized-identity-an-alternative-to-password-based-authentication/) सह बदलण्यात मदत करू शकते. सेवा प्रदाते वापरकर्त्यांना साक्ष्यीकरण देऊ शकतात, जे Ethereum वॉलेटमध्ये संग्रहित केले जाऊ शकतात. धारकास ऑनलाइन समुदायामध्ये प्रवेश प्रदान करणारे एक उदाहरण प्रमाणीकरण हे [NFT](/nft/) असेल. +विकेंद्रित ओळखीद्वारे वैयक्तिक माहितीच्या गोपनीयतेचे संरक्षण करण्यासाठी विकेंद्रीकृत अभिज्ञापक देखील महत्त्वपूर्ण आहेत. उदाहरणार्थ, एखाद्या व्यक्तीने साक्षांकनाचा पुरावा (ड्रायव्हिंग लायसन्स) सबमिट केल्यास, पडताळणी करणाऱ्या पक्षाला पुराव्यातील माहितीची वैधता तपासण्याची आवश्यकता नाही. त्याऐवजी, पडताळकाला पुरावा वैध आहे की नाही हे निर्धारित करण्यासाठी प्रमाणीकरणाची सत्यता आणि जारी करणाऱ्या संस्थेच्या ओळखीची क्रिप्टोग्राफिक हमी आवश्यक असते. -[Ethereum सह साइन-इन](https://siwe.xyz/) फंक्शन नंतर सर्व्हरला वापरकर्त्याच्या Ethereum खात्याची पुष्टी करण्यास आणि त्यांच्या खात्याच्या पत्त्यावरून आवश्यक प्रमाणीकरण आणण्यास सक्षम करेल. याचा अर्थ वापरकर्ते लांब पासवर्ड लक्षात ठेवल्याशिवाय प्लॅटफॉर्म आणि वेबसाइट्समध्ये प्रवेश करू शकतात आणि वापरकर्त्यांसाठी ऑनलाइन अनुभव सुधारतात. +## विकेंद्रित ओळखीमधील साक्षांकनांचे प्रकार {#types-of-attestations-in-decentralized-identity} -### 2. KYC प्रमाणीकरण {#kyc-authentication} +Ethereum-आधारित ओळख इकोसिस्टममध्ये प्रमाणीकरण माहिती कशी संग्रहित आणि पुनर्प्राप्त केली जाते हे पारंपारिक ओळख व्यवस्थापनापेक्षा वेगळे आहे. विकेंद्रित ओळख प्रणालींमध्ये साक्ष्यीकरण जारी करणे, संचयित करणे आणि सत्यापित करणे यासाठी विविध दृष्टिकोनांचे विहंगावलोकन येथे आहे: -अनेक ऑनलाइन सेवा वापरण्यासाठी व्यक्तींना ड्रायव्हिंग लायसन्स किंवा राष्ट्रीय पासपोर्ट यांसारखी साक्षांकन आणि क्रेडेन्शियल प्रदान करणे आवश्यक आहे. परंतु हा दृष्टीकोन समस्याप्रधान आहे कारण खाजगी वापरकर्ता माहितीशी तडजोड केली जाऊ शकते आणि सेवा प्रदाते प्रमाणीकरणाची सत्यता सत्यापित करू शकत नाहीत. +### ऑफचेन साक्षांकने {#offchain-attestations} -विकेंद्रित ओळख कंपन्यांना पारंपारिक [तुमचा-ग्राहक जाणून घ्या (KYC)](https://en.wikipedia.org/wiki/Know_your_customer) प्रक्रिया वगळण्याची आणि पडताळणीयोग्य क्रेडेन्शियल्सद्वारे वापरकर्ता ओळख प्रमाणित करण्यास अनुमती देते. हे ओळख व्यवस्थापनाची किंमत कमी करते आणि बनावट कागदपत्रांचा वापर प्रतिबंधित करते. +ऑनचेन साक्षांकने साठवण्यामधील एक चिंता ही आहे की त्यामध्ये अशी माहिती असू शकते जी व्यक्तींना खाजगी ठेवायची आहे. Ethereum ब्लॉकचेनच्या सार्वजनिक स्वरूपामुळे अशी साक्ष्यीकरणे संग्रहित करणे अनाकर्षक बनते. -### 3. मतदान आणि ऑनलाइन समुदाय {#voting-and-online-communities} +यावर उपाय म्हणजे साक्षांकने जारी करणे, जे वापरकर्त्यांद्वारे डिजिटल वॉलेटमध्ये ऑफचेन ठेवले जातात, परंतु जारीकर्त्याच्या ऑनचेन साठवलेल्या DID ने स्वाक्षरी केलेले असतात. ही साक्षांकने [JSON वेब टोकन्स](https://en.wikipedia.org/wiki/JSON_Web_Token) म्हणून एन्कोड केलेली आहेत आणि त्यात जारीकर्त्याची डिजिटल स्वाक्षरी असते—ज्यामुळे ऑफचेन दाव्यांची सहज पडताळणी करता येते. -ऑनलाइन मतदान आणि सोशल मीडिया विकेंद्रित ओळखीसाठी दोन नवीन अनुप्रयोग आहेत. ऑनलाइन मतदान योजना हेराफेरीसाठी संवेदनाक्षम असतात, विशेषतः जर दुर्भावनापूर्ण अभिनेते मतदान करण्यासाठी खोटी ओळख निर्माण करतात. व्यक्तींना ऑन-चेन साक्षांकन सादर करण्यास सांगणे ऑनलाइन मतदान प्रक्रियेची अखंडता सुधारू शकते. +ऑफचेन साक्षांकने स्पष्ट करण्यासाठी येथे एक काल्पनिक परिस्थिती आहे: -विकेंद्रित ओळख ऑनलाइन समुदाय तयार करण्यात मदत करू शकते जे बनावट खात्यांपासून मुक्त आहेत. उदाहरणार्थ, प्रत्येक वापरकर्त्याला ऑन-चेन ओळख प्रणाली वापरून त्यांची ओळख प्रमाणित करावी लागेल, जसे की Ethereum नेम सेवा, बॉट्सची शक्यता कमी करते. +1. विद्यापीठ (जारीकर्ता) एक प्रमाणीकरण (डिजिटल शैक्षणिक प्रमाणपत्र) व्युत्पन्न करते, त्याच्या की सह स्वाक्षरी करते आणि बॉब (ओळख मालक) यांना जारी करते. + +2. बॉब नोकरीसाठी अर्ज करतो आणि त्याला त्याची शैक्षणिक पात्रता नियोक्त्याला सिद्ध करायची आहे, म्हणून तो त्याच्या मोबाइल वॉलेटमधून साक्षांकन शेअर करतो. कंपनी (पडताळणीकर्ता) नंतर जारीकर्त्याचा DID (म्हणजे, Ethereum वरील सार्वजनिक की) तपासून साक्षांकनाच्या वैधतेची पुष्टी करू शकते. + +### पर्सिस्टंट ऍक्सेससह ऑफचेन साक्षांकने {#offchain-attestations-with-persistent-access} + +या व्यवस्थेअंतर्गत साक्षांकने JSON फायलींमध्ये रूपांतरित केली जातात आणि ऑफचेन साठवली जातात (आदर्शपणे IPFS किंवा Swarm सारख्या [विकेंद्रित क्लाउड स्टोरेज](/developers/docs/storage/) प्लॅटफॉर्मवर). तथापि, JSON फाइलचा [हॅश](/glossary/#hash) ऑनचेन साठवला जातो आणि ऑनचेन रेजिस्ट्रीद्वारे DID शी लिंक केला जातो. संबंधित DID एकतर प्रमाणीकरण जारीकर्ता किंवा प्राप्तकर्त्याचा असू शकतो. + +हा दृष्टिकोन दाव्यांची माहिती एनक्रिप्टेड आणि सत्यापित करण्यायोग्य ठेवताना, ब्लॉकचेन-आधारित चिकाटी मिळविण्यासाठी साक्ष्यीकरणांना सक्षम करतो. हे निवडक प्रकटीकरणास देखील अनुमती देते कारण खाजगी की धारक माहिती डिक्रिप्ट करू शकतो. + +### ऑनचेन साक्षांकने {#onchain-attestations} + +ऑनचेन साक्षांकने Ethereum ब्लॉकचेनवरील [स्मार्ट कॉन्ट्रॅक्ट्समध्ये](/glossary/#smart-contract) ठेवली जातात. स्मार्ट कॉन्ट्रॅक्ट (रेजिस्ट्री म्हणून काम करणारा) एका साक्षांकनाला संबंधित ऑनचेन विकेंद्रित अभिज्ञापकाशी (एक पब्लिक की) मॅप करेल. + +ऑनचेन साक्षांकने व्यवहारात कशी कार्य करू शकतात हे दाखवण्यासाठी येथे एक उदाहरण आहे: + +1. एक कंपनी (XYZ Corp) स्मार्ट कराराचा वापर करून मालकीचे शेअर्स विकण्याची योजना आखत आहे परंतु केवळ पार्श्वभूमी तपासणी पूर्ण केलेल्या खरेदीदारांनाच हवे आहे. + +2. XYZ कॉर्प पार्श्वभूमी तपासणी करणार्‍या कंपनीकडून Ethereum वर ऑनचेन साक्षांकने जारी करून घेऊ शकते. हे प्रमाणीकरण प्रमाणित करते की एखाद्या व्यक्तीने कोणतीही वैयक्तिक माहिती उघड न करता पार्श्वभूमी तपासणी उत्तीर्ण केली आहे. + +3. समभाग विक्री करणारे स्मार्ट कॉन्ट्रॅक्ट स्क्रीन केलेल्या खरेदीदारांच्या ओळखीसाठी रेजिस्ट्री करार तपासू शकतात, ज्यामुळे कोणाला शेअर्स खरेदी करण्याची परवानगी आहे किंवा नाही हे स्मार्ट कॉन्ट्रॅक्टला निर्धारित करणे शक्य होते. -### 4. अँटी-सिबिल संरक्षण {#sybil-protection} +### सोलबाउंड टोकन्स आणि ओळख {#soulbound} -सिबिल हल्ल्यांचा संदर्भ आहे की वैयक्तिक मानव आपला प्रभाव वाढवण्यासाठी एकापेक्षा जास्त लोक आहेत असा विचार करून प्रणालीला फसवतात. [अनुदान देणारे अनुप्रयोग](https://gitcoin.co/grants/) जे [वापरतात चतुर्भुज मतदान](https://www.radicalxchange.org/concepts/plural-voting/) या सिबिल हल्ल्यांसाठी असुरक्षित आहेत कारण जेव्हा अधिक लोक त्यास मतदान करतात तेव्हा अनुदानाचे मूल्य वाढते, वापरकर्त्यांना त्यांचे योगदान अनेक ओळखींमध्ये विभाजित करण्यास प्रोत्साहन देते. विकेंद्रीकृत ओळख प्रत्येक सहभागीवर भार वाढवून ते खरोखरच मानव आहेत हे सिद्ध करण्यासाठी हे रोखण्यात मदत करतात, जरी अनेकदा विशिष्ट खाजगी माहिती उघड न करता. +[सोलबाउंड टोकन्स](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) ([नॉन-ट्रान्सफरेबल NFTs](/glossary/#nft)) विशिष्ट वॉलेटसाठी अद्वितीय माहिती गोळा करण्यासाठी वापरले जाऊ शकतात. हे प्रभावीपणे एका विशिष्ट Ethereum पत्त्याशी बांधील एक अद्वितीय ऑनचेन ओळख तयार करते ज्यामध्ये उपलब्धी दर्शविणारे टोकन (उदा. एखादा विशिष्ट ऑनलाइन कोर्स पूर्ण करणे किंवा गेममध्ये थ्रेशोल्ड स्कोअर पास करणे) किंवा समुदाय सहभाग समाविष्ट असू शकतो. ## विकेंद्रित ओळख वापरा {#use-decentralized-identity} विकेंद्रित ओळख सोल्यूशन्सचा पाया म्हणून Ethereum वापरणारे अनेक महत्त्वाकांक्षी प्रकल्प आहेत: -- **[Ethereum नेम सेवा (ENS)](https://ens.domains/)** - _ऑन-चेन, मशीन-वाचनीय अभिज्ञापकांसाठी विकेंद्रित नामकरण प्रणाली, जसे की, Ethereum वॉलेट पत्ते, सामग्री हॅश आणि मेटाडेटा._ -- **[SpruceID](https://www.spruceid.com/)** - _एक विकेंद्रित ओळख प्रकल्प जे वापरकर्त्यांना तृतीय-पक्ष सेवांवर अवलंबून न राहता Ethereum खाती आणि ENS प्रोफाइलसह डिजिटल ओळख नियंत्रित करण्यास अनुमती देते._ -- **[Ethereum प्रमाणीकरण सेवा (EAS)](https://attest.sh/)** - _कोणत्याही गोष्टीबद्दल ऑन-चेन किंवा ऑफ-चेन साक्ष्यीकरण करण्यासाठी विकेंद्रीकृत लेजर/प्रोटोकॉल._ -- **[मानवतेचा पुरावा](https://www.proofofhumanity.id)** - _पुरावा मानवता (किंवा PoH) ही Ethereum वर तयार केलेली सामाजिक ओळख पडताळणी प्रणाली आहे._ -- **[BrightID](https://www.brightid.org/)** - _एक विकेंद्रित, ओपन-सोर्स सोशल आयडेंटिटी नेटवर्क सामाजिक आलेख निर्मिती आणि विश्लेषणाद्वारे ओळख पडताळणीमध्ये सुधारणा करू इच्छित आहे._ -- **[प्रुफ-ऑफ-पर्सनहुड पासपोर्ट](https://passport.human.tech/)** - _विकेंद्रित डिजिटल ओळख एकत्रित करणारा._ +- **[Ethereum नेम सर्व्हिस (ENS)](https://ens.domains/)** - _ऑनचेन, मशीन-वाचनीय अभिज्ञापकांसाठी एक विकेंद्रित नामकरण प्रणाली, जसे की, Ethereum वॉलेट पत्ते, सामग्री हॅश आणि मेटाडेटा._ +- **[Ethereum सह साइन इन करा (SIWE)](https://siwe.xyz/)** - _Ethereum खात्यांसह प्रमाणीकरणासाठी खुले मानक._ +- **[SpruceID](https://www.spruceid.com/)** - _एक विकेंद्रित ओळख प्रकल्प जो वापरकर्त्यांना तृतीय-पक्ष सेवांवर अवलंबून न राहता Ethereum खाती आणि ENS प्रोफाइलसह डिजिटल ओळख नियंत्रित करण्याची अनुमती देतो._ +- **[Ethereum साक्षांकन सेवा (EAS)](https://attest.org/)** - _कोणत्याही गोष्टीबद्दल ऑनचेन किंवा ऑफचेन साक्षांकने करण्यासाठी एक विकेंद्रित लेजर/प्रोटोकॉल._ +- **[प्रूफ ऑफ ह्युमॅनिटी](https://www.proofofhumanity.id)** - _प्रूफ ऑफ ह्युमॅनिटी (किंवा PoH) ही Ethereum वर तयार केलेली एक सामाजिक ओळख पडताळणी प्रणाली आहे._ +- **[BrightID](https://www.brightid.org/)** - _एक विकेंद्रित, ओपन-सोर्स सामाजिक ओळख नेटवर्क जे सामाजिक आलेखाच्या निर्मिती आणि विश्लेषणाद्वारे ओळख पडताळणीमध्ये सुधारणा करू पाहते._ +- **[walt.id](https://walt.id)** — _ओपन सोर्स विकेंद्रित ओळख आणि वॉलेट इन्फ्रास्ट्रक्चर जे डेव्हलपर आणि संस्थांना सेल्फ-सॉव्हरिन आयडेंटिटी आणि NFTs/SBTs चा वापर करण्यास सक्षम करते._ +- **[Veramo](https://veramo.io/)** - _एक जावास्क्रिप्ट फ्रेमवर्क जे कोणालाही त्यांच्या ऍप्लिकेशन्समध्ये क्रिप्टोग्राफिकदृष्ट्या पडताळणीयोग्य डेटा वापरणे सोपे करते._ -## Further reading {#further-reading} +## पुढील वाचन {#further-reading} ### लेख {#articles} -- [ब्लॉकचेन वापर प्रकरणे: डिजिटल आयडेंटिटीमध्ये ब्लॉकचेन](https://consensys.net/blockchain-use-cases/digital-identity/) — _ConsenSys_ -- [Ethereum ERC725 म्हणजे काय? ब्लॉकचेनवर स्व-सार्वभौम ओळख व्यवस्थापन](https://cryptoslate.com/what-is-erc725-self-sovereign-identity-management-on-the-blockchain/) — _सॅम टाउन_ -- [ब्लॉकचेन डिजिटल आयडेंटिटीची समस्या कशी सोडवू शकते](https://time.com/6142810/proof-of-humanity/) — _अँड्र्यू आर. चाऊ_ -- [विकेंद्रित ओळख म्हणजे काय आणि आपण काळजी का घ्यावी?](https://web3.hashnode.com/what-is-decentralized-identity) — _इमॅन्युएल अवोसिका_ +- [ब्लॉकचेन उपयोग प्रकरणे: डिजिटल ओळखीमध्ये ब्लॉकचेन](https://consensys.net/blockchain-use-cases/digital-identity/) — _ConsenSys_ +- [Ethereum ERC725 म्हणजे काय? ब्लॉकचेनवर सेल्फ-सॉव्हरिन ओळख व्यवस्थापन](https://cryptoslate.com/what-is-erc725-self-sovereign-identity-management-on-the-blockchain/) — _सॅम टाउन_ +- [ब्लॉकचेन डिजिटल ओळखीची समस्या कशी सोडवू शकते](https://time.com/6142810/proof-of-humanity/) — _अँड्र्यू आर. चाऊ_ +- [विकेंद्रित ओळख म्हणजे काय आणि तुम्ही का काळजी घ्यावी?](https://web3.hashnode.com/what-is-decentralized-identity) — _इमॅन्युएल अवोसिका_ +- [विकेंद्रित ओळखीचा परिचय](https://walt.id/white-paper/digital-identity) — _डॉमिनिक बेरॉन_ -### Videos {#videos} +### व्हिडिओ {#videos} -- [विकेंद्रित ओळख (बोनस लाइव्हस्ट्रीम सत्र)](https://www.youtube.com/watch?v=ySHNB1za_SE&t=539s) — _एक उत्तम एंड्रियास अँटोनोपोलस द्वारे विकेंद्रित ओळखीवरील स्पष्टीकरण व्हिडिओ_ -- [सिरेमिक, IDX, प्रतिक्रिया आणि 3ID कनेक्टसह Ethereum आणि विकेंद्रीकृत ओळख सह साइन इन करा](https://www.youtube.com/watch?v=t9gWZYJxk7c) — _Nader Dabit द्वारे Ethereum वॉलेट वापरून वापरकर्त्याचे प्रोफाइल तयार करण्यासाठी, वाचण्यासाठी आणि अपडेट करण्यासाठी ओळख व्यवस्थापन प्रणाली तयार करण्यावर YouTube ट्यूटोरियल_ -- [BrightID - Ethereum वर विकेंद्रित ओळख](https://www.youtube.com/watch?v=D3DbMFYGRoM) — _बँकलेस पॉडकास्ट भाग BrightID वर चर्चा करतो, a Ethereum साठी विकेंद्रित ओळख समाधान_ -- [द ऑफ चेन इंटरनेट: विकेंद्रीकृत ओळख आणि पडताळणीयोग्य क्रेडेन्शियल्स](https://www.youtube.com/watch?v=EZ_Bb6j87mg) — एव्हिन मॅकमुलेन द्वारे EthDenver 2022 सादरीकरण +- [विकेंद्रित ओळख (बोनस लाइव्हस्ट्रीम सत्र)](https://www.youtube.com/watch?v=ySHNB1za_SE&t=539s) — _एंड्रियास अँटोनोपोलस यांचा विकेंद्रित ओळखीवरील एक उत्तम स्पष्टीकरणात्मक व्हिडिओ_ +- [Ceramic, IDX, React, आणि 3ID Connect सह Ethereum आणि विकेंद्रित ओळखीसह साइन इन करा](https://www.youtube.com/watch?v=t9gWZYJxk7c) — _नादेर दाबिट यांच्याद्वारे Ethereum वॉलेट वापरून वापरकर्त्याचे प्रोफाइल तयार करण्यासाठी, वाचण्यासाठी आणि अद्यतनित करण्यासाठी ओळख व्यवस्थापन प्रणाली तयार करण्यावर YouTube ट्यूटोरियल_ +- [BrightID - Ethereum वरील विकेंद्रित ओळख](https://www.youtube.com/watch?v=D3DbMFYGRoM) — _बँकलेस पॉडकास्ट भाग BrightID वर चर्चा करतो, जो Ethereum साठी एक विकेंद्रित ओळख सोल्यूशन आहे_ +- [ऑफचेन इंटरनेट: विकेंद्रित ओळख आणि व्हेरिफायेबल क्रेडेन्शियल्स](https://www.youtube.com/watch?v=EZ_Bb6j87mg) — इव्हिन मॅकमुलेन यांचे EthDenver 2022 सादरीकरण +- [व्हेरिफायेबल क्रेडेन्शियल्सचे स्पष्टीकरण](https://www.youtube.com/watch?v=ce1IdSr-Kig) - टॅमिनो बॉमन यांच्या डेमोसह YouTube स्पष्टीकरणात्मक व्हिडिओ ### समुदाय {#communities} -- [ERC-725 GitHub वर अलायन्स](https://github.com/erc725alliance) — _Ethereum ब्लॉकचेन वर ओळख व्यवस्थापित करण्यासाठी ERC725 मानकांचे समर्थक_ -- [EthID Discord सर्व्हर](https://discord.com/invite/ZUyG3mSXFD) — _Ethereum सह साइन-इनवर काम करणाऱ्या उत्साही आणि विकासकांसाठी समुदाय_ -- [Veramo Labs](https://discord.gg/sYBUXpACh4) — _अनुप्रयोगांसाठी पडताळणी करण्यायोग्य डेटासाठी फ्रेमवर्क तयार करण्यात योगदान देणारा विकासकांचा समुदाय_ +- [GitHub वरील ERC-725 अलायन्स](https://github.com/erc725alliance) — _Ethereum ब्लॉकचेनवर ओळख व्यवस्थापित करण्यासाठी ERC725 मानकाचे समर्थक_ +- [EthID डिस्कॉर्ड सर्व्हर](https://discord.com/invite/ZUyG3mSXFD) — _Ethereum सह साइन-इन आणि Ethereum फॉलो प्रोटोकॉलवर काम करणाऱ्या उत्साही आणि डेव्हलपरसाठी समुदाय_ +- [Veramo लॅब्स](https://discord.gg/sYBUXpACh4) — _ऍप्लिकेशन्ससाठी व्हेरिफायेबल डेटासाठी एक फ्रेमवर्क तयार करण्यात योगदान देणाऱ्या डेव्हलपरचा समुदाय_ +- [walt.id](https://discord.com/invite/AW8AgqJthZ) — _विविध उद्योगांमध्ये विकेंद्रित ओळखीच्या वापराच्या प्रकरणांवर काम करणाऱ्या डेव्हलपर आणि बिल्डर्सचा समुदाय_ diff --git a/public/content/translations/mr/defi/index.md b/public/content/translations/mr/defi/index.md index 7aa55254a30..0fafd7870c6 100644 --- a/public/content/translations/mr/defi/index.md +++ b/public/content/translations/mr/defi/index.md @@ -1,18 +1,19 @@ --- -title: विकेंद्रीत अर्थव्यवस्था (DeFi) -description: Ethereum वर DeFi चे विहंगावलोकन +title: "विकेंद्रीत अर्थव्यवस्था (DeFi)" +metaTitle: "DeFi म्हणजे काय? | विकेंद्रित वित्ताचे फायदे आणि उपयोग" +description: "Ethereum वर DeFi चे विहंगावलोकन" lang: mr template: use-cases emoji: ":money_with_wings:" image: /images/use-cases/defi.png -alt: लेगो विटांनी बनवलेला Eth लोगो. +alt: "lego विटांनी बनवलेला Eth लोगो." sidebarDepth: 2 -summaryPoint1: सध्याच्या आर्थिक व्यवस्थेसाठी जागतिक, खुला पर्याय. -summaryPoint2: अशी उत्पादने जी तुम्हाला कर्ज घेऊ देतात, बचत करू देतात, गुंतवणूक करू शकतात, व्यापार करू शकतात आणि बरेच काही करू शकतात. -summaryPoint3: मुक्त-स्रोत तंत्रज्ञानावर आधारित ज्यासह कोणीही प्रोग्राम करू शकतो. +summaryPoint1: "सध्याच्या आर्थिक व्यवस्थेसाठी जागतिक, खुला पर्याय." +summaryPoint2: "अशी उत्पादने जी तुम्हाला कर्ज घेऊ देतात, बचत करू देतात, गुंतवणूक करू शकतात, व्यापार करू शकतात आणि बरेच काही करू शकतात." +summaryPoint3: "मुक्त-स्रोत तंत्रज्ञानावर आधारित ज्यासह कोणीही प्रोग्राम करू शकतो." --- -DeFi ही इंटरनेट युगासाठी तयार केलेली एक खुली आणि जागतिक आर्थिक प्रणाली आहे – अपारदर्शक, घट्टपणे नियंत्रित आणि दशकानुशतके जुन्या पायाभूत सुविधा आणि प्रक्रियांनी एकत्र ठेवलेल्या प्रणालीचा पर्याय. हे तुम्हाला तुमच्या पैशांवर नियंत्रण आणि दृश्यमानता देते. हे तुम्हाला जागतिक बाजारपेठा आणि तुमच्या स्थानिक चलन किंवा बँकिंग पर्यायांना एक्सपोजर देते. DeFi उत्पादने इंटरनेट कनेक्शन असलेल्या प्रत्येकासाठी आर्थिक सेवा उघडतात आणि त्या मोठ्या प्रमाणात त्यांच्या वापरकर्त्यांच्या मालकीच्या आणि देखरेखीच्या असतात. आतापर्यंत कोट्यवधी डॉलर्स किमतीचे क्रिप्टो DeFi ऍप्लिकेशन्समधून आले आहे आणि ते दररोज वाढत आहे. +DeFi ही इंटरनेट युगासाठी तयार केलेली एक खुली आणि जागतिक आर्थिक प्रणाली आहे – अपारदर्शक, घट्टपणे नियंत्रित आणि दशकानुशतके जुन्या पायाभूत सुविधा आणि प्रक्रियांनी एकत्र ठेवलेल्या प्रणालीचा पर्याय. हे तुम्हाला तुमच्या पैशांवर नियंत्रण आणि दृश्यमानता देते. हे तुम्हाला जागतिक बाजारपेठा आणि तुमच्या स्थानिक चलन किंवा बँकिंग पर्यायांना एक्सपोजर देते. DeFi उत्पादने इंटरनेट कनेक्शन असलेल्या प्रत्येकासाठी आर्थिक सेवा उघडतात आणि त्या मोठ्या प्रमाणात त्यांच्या वापरकर्त्यांच्या मालकीच्या आणि देखरेखीच्या असतात. आतापर्यंत, अब्जावधी डॉलर्स किमतीचा क्रिप्टो DeFi ॲप्लिकेशन्समधून प्रवाहित झाला आहे आणि तो दररोज वाढत आहे. ## DeFi म्हणजे काय? {#what-is-defi} @@ -22,7 +23,7 @@ DeFi ही आर्थिक उत्पादने आणि सेवा -## DeFi वि पारंपारिक वित्त {#defi-vs-tradfi} +## DeFi विरुद्ध पारंपरिक वित्त {#defi-vs-tradfi} DeFi ची क्षमता पाहण्याचा एक उत्तम मार्ग म्हणजे आज अस्तित्वात असलेल्या समस्या समजून घेणे. @@ -31,44 +32,44 @@ DeFi ची क्षमता पाहण्याचा एक उत्त - आर्थिक सेवा तुम्हाला पैसे मिळण्यापासून रोखू शकतात. - आर्थिक सेवांचे छुपे शुल्क म्हणजे तुमचा वैयक्तिक डेटा. - सरकार आणि केंद्रीकृत संस्था इच्छेनुसार बाजार बंद करू शकतात. -- व्यापाराचे तास अनेकदा विशिष्ट टाइम झोनच्या व्यावसायिक तासांपुरते मर्यादित असतात. +- ट्रेडिंगचे तास अनेकदा विशिष्ट टाइम झोनच्या व्यावसायिक तासांपुरते मर्यादित असतात. - मानवी अंतर्गत प्रक्रियेमुळे पैसे हस्तांतरित होण्यास काही दिवस लागू शकतात. - आर्थिक सेवांसाठी प्रीमियम आहे कारण मध्यस्थ संस्थांना त्यांच्या कपातीची आवश्यकता आहे. ### एक तुलना {#defi-comparison} -| DeFi | पारंपारिक वित्त | -| ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -| तुम्ही तुमचे पैसे धरा. | तुमचे पैसे कंपन्यांकडे आहेत. | -| तुमचा पैसा कुठे जातो आणि तो कसा खर्च होतो हे तुम्ही नियंत्रित करता. | जोखमीच्या कर्जदारांना कर्ज देण्यासारख्या तुमच्या पैशांचे गैरव्यवस्थापन न करण्यासाठी तुम्हाला कंपन्यांवर विश्वास ठेवावा लागेल. | -| निधीचे हस्तांतरण काही मिनिटांत होते. | मॅन्युअल प्रक्रियांमुळे पेमेंटला दिवस लागू शकतात. | -| व्यवहार क्रियाकलाप छद्मनाम आहे. | आर्थिक क्रियाकलाप आपल्या ओळखीशी घट्ट जोडलेले आहेत. | -| DeFi कोणासाठीही खुले आहे. | तुम्ही आर्थिक सेवा वापरण्यासाठी अर्ज करणे आवश्यक आहे. | -| बाजारपेठा नेहमी खुल्या असतात. | कर्मचार्‍यांना विश्रांतीची गरज असल्याने बाजारपेठा बंद होतात. | +| DeFi | पारंपारिक वित्त | +| ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| तुम्ही तुमचे पैसे धरा. | तुमचे पैसे कंपन्यांकडे आहेत. | +| तुमचा पैसा कुठे जातो आणि तो कसा खर्च होतो हे तुम्ही नियंत्रित करता. | जोखमीच्या कर्जदारांना कर्ज देण्यासारख्या तुमच्या पैशांचे गैरव्यवस्थापन न करण्यासाठी तुम्हाला कंपन्यांवर विश्वास ठेवावा लागेल. | +| निधीचे हस्तांतरण काही मिनिटांत होते. | मॅन्युअल प्रक्रियांमुळे पेमेंटला दिवस लागू शकतात. | +| व्यवहार क्रियाकलाप छद्मनाम आहे. | आर्थिक क्रियाकलाप आपल्या ओळखीशी घट्ट जोडलेले आहेत. | +| DeFi कोणासाठीही खुले आहे. | तुम्ही आर्थिक सेवा वापरण्यासाठी अर्ज करणे आवश्यक आहे. | +| बाजारपेठा नेहमी खुल्या असतात. | कर्मचार्‍यांना विश्रांतीची गरज असल्याने बाजारपेठा बंद होतात. | | हे पारदर्शकतेवर आधारित आहे – कोणीही उत्पादनाचा डेटा पाहू शकतो आणि सिस्टम कसे कार्य करते याची तपासणी करू शकतो. | वित्तीय संस्था ही बंद पुस्तके आहेत: तुम्ही त्यांचा कर्जाचा इतिहास, त्यांच्या व्यवस्थापित मालमत्तेचा रेकॉर्ड इत्यादी पाहण्यास सांगू शकत नाही. | - DeFi अॅप्स एक्सप्लोर करा + DeFi ॲप्स एक्सप्लोर करा ## याची सुरुवात Bitcoin पासून झाली... {#bitcoin} Bitcoin हे अनेक प्रकारे पहिले DeFi ऍप्लिकेशन होते. Bitcoin तुम्हाला खरच स्वतःचे आणि मूल्य नियंत्रित करू देते आणि जगभरात कुठेही पाठवू देते. विश्वासू मध्यस्थाच्या गरजेशिवाय, मोठ्या संख्येने लोकांना, जे एकमेकांवर विश्वास ठेवत नाहीत, खात्यांच्या लेजरवर सहमत होण्यासाठी एक मार्ग प्रदान करून हे करते. Bitcoin कोणासाठीही खुले आहे आणि त्याचे नियम बदलण्याचा अधिकार कोणालाही नाही. Bitcoin चे नियम, जसे की त्याची कमतरता आणि त्याचे मोकळेपणा, तंत्रज्ञानामध्ये लिहिलेले आहेत. हे पारंपारिक फायनान्ससारखे नाही जिथे सरकार पैसे छापू शकतात जे तुमच्या बचतीचे अवमूल्यन करतात आणि कंपन्या बाजार बंद करू शकतात. -यावर Ethereum तयार होतो. Bitcoin प्रमाणे, नियम तुमच्यावर बदलू शकत नाहीत आणि प्रत्येकाला प्रवेश आहे. परंतु ते [स्मार्ट कॉन्ट्रॅक्ट](/glossary#smart-contract) वापरून हे डिजिटल मनी प्रोग्राम करण्यायोग्य देखील बनवते, जेणेकरून तुम्ही मूल्य संचयित आणि पाठवण्यापलीकडे जाऊ शकता. +यावर Ethereum तयार होतो. Bitcoin प्रमाणे, नियम तुमच्यावर बदलू शकत नाहीत आणि प्रत्येकाला प्रवेश आहे. परंतु यामुळे हे डिजिटल पैसे [स्मार्ट कॉन्ट्रॅक्ट्स](/glossary/#smart-contract) वापरून प्रोग्राम करण्यायोग्य बनतात, ज्यामुळे तुम्ही मूल्य संग्रहित करणे आणि पाठवण्यापलीकडे जाऊ शकता. -## प्रोग्राम करण्यायोग्य पैसा {#programmable-money} +## प्रोग्राम करण्यायोग्य पैसे {#programmable-money} -हे विचित्र वाटते... "मला माझे पैसे का प्रोग्राम करायचे आहेत"? तथापि, Ethereum वरील टोकनचे हे फक्त एक डीफॉल्ट वैशिष्ट्य आहे. कोणीही पेमेंटमध्ये लॉजिक प्रोग्राम करू शकतो. त्यामुळे तुम्हाला Bitcoin चे नियंत्रण आणि सुरक्षा वित्तीय संस्थांद्वारे पुरवल्या जाणाऱ्या सेवांमध्ये मिसळून मिळू शकते. हे तुम्हाला क्रिप्टोकरन्सीसह अशा गोष्टी करू देते जे तुम्ही Bitcoin सह करू शकत नाही जसे की कर्ज देणे आणि कर्ज घेणे, पेमेंट शेड्यूल करणे, इंडेक्स फंडांमध्ये गुंतवणूक करणे आणि बरेच काही. +हे विचित्र वाटते... "मला माझे पैसे का प्रोग्राम करायचे आहेत"? तथापि, हे Ethereum वरील टोकनच्या डीफॉल्ट वैशिष्ट्यापेक्षा अधिक आहे. कोणीही पेमेंटमध्ये लॉजिक प्रोग्राम करू शकतो. त्यामुळे तुम्हाला Bitcoin चे नियंत्रण आणि सुरक्षा वित्तीय संस्थांद्वारे पुरवल्या जाणाऱ्या सेवांमध्ये मिसळून मिळू शकते. हे तुम्हाला क्रिप्टोकरन्सीसह अशा गोष्टी करू देते जे तुम्ही Bitcoin सह करू शकत नाही जसे की कर्ज देणे आणि कर्ज घेणे, पेमेंट शेड्यूल करणे, इंडेक्स फंडांमध्ये गुंतवणूक करणे आणि बरेच काही. - +
तुम्ही Ethereum वर नवीन असाल तर वापरून पाहण्यासाठी DeFi ऍप्लिकेशन्ससाठी आमच्या सूचना एक्सप्लोर करा.
- DeFi अॅप्स एक्सप्लोर करा + DeFi ॲप्स एक्सप्लोर करा
@@ -77,13 +78,13 @@ Bitcoin हे अनेक प्रकारे पहिले DeFi ऍप् बहुतांश वित्तीय सेवांसाठी विकेंद्रित पर्याय आहे. परंतु Ethereum पूर्णपणे नवीन आर्थिक उत्पादने तयार करण्यासाठी संधी देखील निर्माण करते. ही एक सतत वाढत जाणारी यादी आहे. -- [जगभर पैसे पाठवा](#send-money) -- [जगभरात पैसा प्रवाहित करा](#stream-money) +- [जगभरात पैसे पाठवा](#send-money) +- [जगभरात पैसे प्रवाहित करा](#stream-money) - [स्थिर चलनांमध्ये प्रवेश करा](#stablecoins) -- [संपार्श्विक सह निधी उधार घ्या](#lending) -- [तारण न घेता कर्ज घ्या](#flash-loans) +- [तारणासह निधी कर्ज घ्या](#lending) +- [तारणाशिवाय कर्ज घ्या](#flash-loans) - [क्रिप्टो बचत सुरू करा](#saving) -- [व्यापार टोकन](#swaps) +- [टोकन्स ट्रेड करा](#swaps) - [तुमचा पोर्टफोलिओ वाढवा](#investing) - [तुमच्या कल्पनांना निधी द्या](#crowdfunding) - [विमा खरेदी करा](#insurance) @@ -93,7 +94,7 @@ Bitcoin हे अनेक प्रकारे पहिले DeFi ऍप् ### जगभरात त्वरीत पैसे पाठवा {#send-money} -ब्लॉकचेन म्हणून, Ethereum सुरक्षित आणि जागतिक मार्गाने व्यवहार पाठवण्यासाठी डिझाइन केलेले आहे. Bitcoin प्रमाणे, Ethereum जगभरात पैसे पाठवणे ईमेल पाठवण्याइतके सोपे करते. तुमच्या वॉलेटमधून फक्त तुमच्या प्राप्तकर्त्याचे [ENS नाव](/nft/#nft-domains) (जसे bob.eth) किंवा त्यांचा खाते पत्ता प्रविष्ट करा आणि तुमचे पेमेंट थेट त्यांच्याकडे काही मिनिटांत जाईल (सामान्यतः). पेमेंट पाठवण्यासाठी किंवा प्राप्त करण्यासाठी, तुम्हाला [वॉलेट](/wallets/) आवश्यक असेल. +ब्लॉकचेन म्हणून, Ethereum सुरक्षित आणि जागतिक मार्गाने व्यवहार पाठवण्यासाठी डिझाइन केलेले आहे. Bitcoin प्रमाणे, Ethereum जगभरात पैसे पाठवणे ईमेल पाठवण्याइतके सोपे करते. फक्त तुमच्या प्राप्तकर्त्याचे [ENS नाव](/glossary/#ens) (जसे की bob.eth) किंवा तुमच्या वॉलेटमधून त्यांच्या खात्याचा पत्ता प्रविष्ट करा आणि तुमचे पेमेंट थेट काही मिनिटांत (सहसा) त्यांच्यापर्यंत पोहोचेल. पेमेंट पाठवण्यासाठी किंवा प्राप्त करण्यासाठी, तुम्हाला एका [वॉलेटची](/wallets/) आवश्यकता असेल. पेमेंट dapps पहा @@ -103,7 +104,7 @@ Bitcoin हे अनेक प्रकारे पहिले DeFi ऍप् तुम्ही Ethereum वर पैसे देखील प्रवाहित करू शकता. हे तुम्हाला एखाद्याला त्यांचा पगार दुसऱ्याने अदा करू देते, त्यांना जेव्हा गरज असेल तेव्हा त्यांच्या पैशात प्रवेश मिळवून देते. किंवा स्टोरेज लॉकर किंवा इलेक्ट्रिक स्कूटरसारखे दुसरे काहीतरी भाड्याने घ्या. -आणि जर तुम्ही [ETH](/what-is-ether/) पाठवू इच्छित नसाल किंवा प्रवाहित करू इच्छित नसाल कारण त्याचे मूल्य किती बदलू शकते, Ethereum वर पर्यायी चलने आहेत: स्टेबलकॉइन्स. +आणि जर तुम्हाला [ETH](/glossary/#ether) पाठवायचा किंवा प्रवाहित करायचा नसेल कारण त्याचे मूल्य खूप बदलू शकते, तर Ethereum वर पर्यायी चलने आहेत: [स्टेबलकॉइन्स](/glossary/#stablecoin). @@ -114,7 +115,7 @@ Bitcoin हे अनेक प्रकारे पहिले DeFi ऍप् Dai किंवा USDC सारख्या नाण्यांचे मूल्य डॉलरच्या काही सेंट्समध्ये असते. हे त्यांना कमाई किंवा किरकोळ विक्रीसाठी योग्य बनवते. लॅटिन अमेरिकेतील बर्‍याच लोकांनी त्यांच्या सरकारने जारी केलेल्या चलनांसह मोठ्या अनिश्चिततेच्या काळात त्यांच्या बचतीचे संरक्षण करण्याचा एक मार्ग म्हणून स्टेबलकॉइन्सचा वापर केला आहे. - स्टेबलकॉइन्स वर अधिक + स्टेबलकॉइन्सवर अधिक @@ -127,7 +128,7 @@ Dai किंवा USDC सारख्या नाण्यांचे म - पूल-आधारित जेथे कर्जदार कर्ज घेऊ शकतात अशा पूलला निधी (तरलता) प्रदान करतात. - उधारी dapps पहा + कर्ज घेण्याचे dapps पहा विकेंद्रित कर्जदार वापरण्याचे अनेक फायदे आहेत... @@ -136,19 +137,19 @@ Dai किंवा USDC सारख्या नाण्यांचे म आज, पैसे देणे आणि कर्ज घेणे हे सर्व गुंतलेल्या व्यक्तींभोवती फिरते. कर्ज देण्यापूर्वी तुम्ही कर्जाची परतफेड करण्याची शक्यता आहे की नाही हे बँकांना माहित असणे आवश्यक आहे. -विकेंद्रित कर्ज देणे कोणत्याही पक्षाला स्वतःची ओळख न करता कार्य करते. त्याऐवजी, कर्जदाराने त्याच्या कर्जाची परतफेड न केल्यास कर्जदाराला आपोआप प्राप्त होणारी संपार्श्विकता ठेवली पाहिजे. काही सावकार संपार्श्विक म्हणून NFT देखील स्वीकारतात. NFT हे चित्रकलेप्रमाणे एका अनन्य मालमत्तेसाठी एक डीड आहे. [NFT वर अधिक](/nft/) +विकेंद्रित कर्ज देणे कोणत्याही पक्षाला स्वतःची ओळख न करता कार्य करते. त्याऐवजी, कर्जदाराने त्याच्या कर्जाची परतफेड न केल्यास कर्जदाराला आपोआप प्राप्त होणारी संपार्श्विकता ठेवली पाहिजे. काही कर्जदाते [NFTs](/glossary/#nft) सुद्धा तारण म्हणून स्वीकारतात. NFT हे चित्रकलेप्रमाणे एका अनन्य मालमत्तेसाठी एक डीड आहे. [NFTs वर अधिक](/nft/) हे तुम्हाला क्रेडिट चेकशिवाय किंवा खाजगी माहिती न देता पैसे उधार घेण्यास अनुमती देते. #### जागतिक निधीमध्ये प्रवेश {#access-global-funds} -जेव्हा तुम्ही विकेंद्रित सावकार वापरता तेव्हा तुम्हाला तुमच्या निवडलेल्या बँकेच्या किंवा संस्थेच्या ताब्यातील निधीच नव्हे तर जगभरातून जमा केलेल्या निधीमध्ये प्रवेश असतो. यामुळे कर्जे अधिक सुलभ होतात आणि व्याजदर सुधारतात. +जेव्हा तुम्ही विकेंद्रित सावकार वापरता तेव्हा तुम्हाला तुमच्या निवडलेल्या बँकेच्या किंवा संस्थेच्या ताब्यातील निधीच नव्हे तर जगभरातून जमा केलेल्या निधीमध्ये प्रवेश असतो. यामुळे कर्ज अधिक सुलभ होते आणि व्याजदर सुधारतात. #### कर-कार्यक्षमता {#tax-efficiencies} -कर्ज घेतल्याने तुमचा ETH (करपात्र कार्यक्रम) विकल्याशिवाय तुम्हाला आवश्यक असलेल्या निधीमध्ये प्रवेश मिळू शकतो. त्याऐवजी, तुम्ही स्टेबलकॉइन कर्जासाठी संपार्श्विक म्हणून ETH वापरू शकता. हे तुम्हाला आवश्यक असलेला रोख प्रवाह देते आणि तुम्हाला तुमचा ETH ठेवू देते. स्टेबलकॉइन्स हे टोकन आहेत जे तुम्हाला जेव्हा रोखीची गरज असते तेव्हा ते जास्त चांगले असतात कारण ते ETH सारख्या मूल्यात चढ-उतार होत नाहीत. [स्टेबलकॉइन्स वर अधिक](#stablecoins) +कर्ज घेतल्याने तुमचा ETH (करपात्र कार्यक्रम) विकल्याशिवाय तुम्हाला आवश्यक असलेल्या निधीमध्ये प्रवेश मिळू शकतो. त्याऐवजी, तुम्ही स्टेबलकॉइन कर्जासाठी संपार्श्विक म्हणून ETH वापरू शकता. हे तुम्हाला आवश्यक असलेला रोख प्रवाह देते आणि तुम्हाला तुमचा ETH ठेवू देते. स्टेबलकॉइन्स हे टोकन आहेत जे तुम्हाला जेव्हा रोखीची गरज असते तेव्हा ते जास्त चांगले असतात कारण ते ETH सारख्या मूल्यात चढ-उतार होत नाहीत. [स्टेबलकॉइन्सवर अधिक](#stablecoins) -#### फ्लॅश कर्ज {#flash-loans} +#### फ्लॅश लोन्स {#flash-loans} फ्लॅश कर्ज हे विकेंद्रित कर्जाचे अधिक प्रायोगिक स्वरूप आहे जे तुम्हाला संपार्श्विक किंवा कोणतीही वैयक्तिक माहिती प्रदान न करता कर्ज घेऊ देते. @@ -171,33 +172,35 @@ Dai किंवा USDC सारख्या नाण्यांचे म पारंपारिक वित्त जगात वरील उदाहरण करण्यास सक्षम होण्यासाठी, तुम्हाला खूप मोठ्या रकमेची आवश्यकता असेल. पैसे कमावण्याच्या या रणनीती केवळ विद्यमान संपत्ती असलेल्यांनाच उपलब्ध आहेत. फ्लॅश लोन हे भविष्याचे एक उदाहरण आहे जिथे पैसे कमावण्‍यासाठी पैसे असणे ही एक पूर्व शर्त नाही. -[फ्लॅश कर्जावर अधिक](https://aave.com/docs/aave-v3/guides/flash-loans) + + फ्लॅश लोन्सवर अधिक + -### क्रिप्टोसह बचत सुरू करा {#saving} +### क्रिप्टोद्वारे बचत सुरू करा {#saving} #### कर्ज देणे {#lending} तुम्ही तुमच्या क्रिप्टोला कर्ज देऊन त्यावर व्याज मिळवू शकता आणि तुमचे फंड रिअल टाइममध्ये वाढताना पाहू शकता. सध्या तुम्हाला तुमच्या स्थानिक बँकेत मिळू शकणार्‍या व्याजदरापेक्षा कितीतरी जास्त व्याजदर आहेत (जर तुम्‍ही नशीबवान असल्‍यास ते अ‍ॅक्सेस करण्‍यास सक्षम असाल). येथे एक उदाहरण आहे: -- तुम्ही Aave सारख्या उत्पादनाला तुमचे 100 Dai, [स्टेबलकॉइन](/stablecoins/) उधार देता. +- तुम्ही तुमचे 100 Dai, एक [स्टेबलकॉइन](/stablecoins/), Aave सारख्या उत्पादनाला कर्ज देता. - तुम्हाला 100 Aave Dai (aDai) मिळतात जे तुमच्या कर्ज घेतलेल्या दैचे प्रतिनिधित्व करणारे टोकन आहे. -- तुमची aDai व्याजदरांच्या आधारे वाढेल आणि तुम्ही तुमच्या वॉलेटमध्ये तुमची शिल्लक वाढताना पाहू शकता. APR वर अवलंबून, तुमचे वॉलेट शिल्लक काही दिवसांनी किंवा काही तासांनंतर 100.1234 सारखे वाचेल! +- तुमची aDai व्याजदरांच्या आधारे वाढेल आणि तुम्ही तुमच्या वॉलेटमध्ये तुमची शिल्लक वाढताना पाहू शकता. [APR](/glossary/#apr) वर अवलंबून, काही दिवसांनी किंवा काही तासांनंतर तुमच्या वॉलेटमधील शिल्लक 100.1234 सारखी दिसेल! - तुम्ही कधीही नियमित Dai ची रक्कम काढू शकता जी तुमच्या aDai शिल्लक असेल. - कर्ज देणे dapps पहा + कर्ज देणारे dapps पहा -#### नो-तोटा लॉटरी {#no-loss-lotteries} +#### नुकसान-विरहित लॉटरी {#no-loss-lotteries} PoolTogether सारख्या नो-लॉस लॉटरी पैसे वाचवण्याचा एक मजेदार आणि नाविन्यपूर्ण मार्ग आहे. - तुम्ही 100 Dai टोकन वापरून 100 तिकिटे खरेदी करता. - तुम्हाला तुमच्या 100 तिकिटांचे प्रतिनिधित्व करणारे 100 plDai मिळतात. - तुमच्या तिकिटांपैकी एक विजेते म्हणून निवडले गेल्यास, तुमची plDai शिल्लक बक्षीस पूलच्या रकमेने वाढेल. -- तुम्ही जिंकले नाही तर, तुमचे 100 जुने पुढील आठवड्याच्या ड्रॉवर रोल ओव्हर होतील. +- तुम्ही जिंकले नाही तर, तुमचे 100 plDai पुढील आठवड्याच्या ड्रॉवर रोल ओव्हर केले जाईल. - तुम्ही कधीही नियमित Dai ची रक्कम काढू शकता जी तुमच्या plDai शिल्लक असेल. बक्षीस पूल वरील कर्ज उदाहरणाप्रमाणे तिकीट ठेवींवर कर्ज देऊन व्युत्पन्न केलेल्या सर्व व्याजाने व्युत्पन्न केला जातो. @@ -208,19 +211,19 @@ PoolTogether सारख्या नो-लॉस लॉटरी पैसे -### टोकन एक्सचेंज करा {#swaps} +### टोकन्सची देवाणघेवाण करा {#swaps} Ethereum वर हजारो टोकन आहेत. विकेंद्रित एक्सचेंज (DEXs) तुम्हाला हवे तेव्हा भिन्न टोकन्सचा व्यापार करू देतात. तुम्ही तुमच्या मालमत्तेचे नियंत्रण कधीही सोडत नाही. हे वेगळ्या देशाला भेट देताना चलन विनिमय वापरण्यासारखे आहे. परंतु DeFi आवृत्ती कधीही बंद होत नाही. बाजार वर्षातील 24/7, 365 दिवस असतात आणि तंत्रज्ञान हमी देते की व्यापार स्वीकारण्यासाठी नेहमीच कोणीतरी असेल. उदाहरणार्थ, तुम्हाला नो-लॉस लॉटरी PoolTogether (वर वर्णन केलेले) वापरायचे असल्यास, तुम्हाला Dai किंवा USDC सारखे टोकन आवश्यक असेल. हे DEX तुम्हाला त्या टोकन्ससाठी तुमचा ETH स्वॅप करू देतात आणि तुमचे काम पूर्ण झाल्यावर पुन्हा परत येतात. - प्रतिक एक्सचेंज पहा + टोकन एक्सचेंज पहा -### प्रगत व्यापार {#trading} +### प्रगत ट्रेडिंग {#trading} ज्या व्यापाऱ्यांना थोडे अधिक नियंत्रण आवडते त्यांच्यासाठी अधिक प्रगत पर्याय आहेत. मर्यादा ऑर्डर, शाश्वत, मार्जिन ट्रेडिंग आणि बरेच काही शक्य आहे. विकेंद्रित व्यापारामुळे तुम्हाला जागतिक तरलतेमध्ये प्रवेश मिळतो, बाजार कधीही बंद होत नाही आणि तुम्ही तुमच्या मालमत्तेवर नेहमी नियंत्रण ठेवता. @@ -236,7 +239,7 @@ Ethereum वर हजारो टोकन आहेत. विकेंद् Ethereum वर फंड मॅनेजमेंट उत्पादने आहेत जी तुमच्या पसंतीच्या धोरणावर आधारित तुमचा पोर्टफोलिओ वाढवण्याचा प्रयत्न करतील. हे आपोआप आहे, प्रत्येकासाठी खुले आहे आणि तुमच्या नफ्यातील एक मानवी व्यवस्थापकाची गरज नाही. -याचे उत्तम उदाहरण म्हणजे [DeFi Pulse इंडेक्स फंड (DPI)](https://defipulse.com/blog/defi-pulse-index/). हा असा फंड आहे जो तुमच्या पोर्टफोलिओमध्ये नेहमी [मार्केट कॅपिटलायझेशननुसार शीर्ष DeFi टोकन्स](https://www.coingecko.com/en/defi) समाविष्ट असल्याची खात्री करण्यासाठी आपोआप पुनर्संतुलित होतो. तुम्हाला कधीही कोणताही तपशील व्यवस्थापित करण्याची गरज नाही आणि तुम्हाला पाहिजे तेव्हा तुम्ही फंडातून पैसे काढू शकता. +याचे एक चांगले उदाहरण म्हणजे [DeFi Pulse Index fund (DPI)](https://defipulse.com/blog/defi-pulse-index/). हा असा फंड आहे जो तुमच्या पोर्टफोलिओमध्ये नेहमी मार्केट कॅपिटलायझेशननुसार शीर्ष DeFi टोकन्स समाविष्ट असल्याची खात्री करण्यासाठी आपोआप पुनर्संतुलित होतो. तुम्हाला कधीही कोणताही तपशील व्यवस्थापित करण्याची गरज नाही आणि तुम्हाला पाहिजे तेव्हा तुम्ही फंडातून पैसे काढू शकता. गुंतवणूक dapps पहा @@ -256,11 +259,11 @@ Ethereum हे क्राउडफंडिंगसाठी एक आद क्राउडफंडिंग dapps पहा -#### चतुर्भुज निधी {#quadratic-funding} +#### क्वाड्रॅटिक निधी {#quadratic-funding} -Ethereum हे ओपन सोर्स सॉफ्टवेअर आहे आणि आत्तापर्यंतच्या बर्‍याच कामांना समुदायाने निधी दिला आहे. यामुळे एक मनोरंजक नवीन निधी उभारणी मॉडेलची वाढ झाली आहे: चतुर्भुज निधी. This has the potential to improve the way we fund all types of public goods in the future. +Ethereum हे ओपन सोर्स सॉफ्टवेअर आहे आणि आत्तापर्यंतच्या बर्‍याच कामांना समुदायाने निधी दिला आहे. यामुळे एक मनोरंजक नवीन निधी उभारणी मॉडेलची वाढ झाली आहे: चतुर्भुज निधी. भविष्यात सर्व प्रकारच्या सार्वजनिक वस्तूंना निधी देण्याच्या पद्धतीत सुधारणा करण्याची यात क्षमता आहे. -Quadratic funding makes sure that the projects that receive the most funding are those with the most unique demand. In other words, projects that stand to improve the lives of the most people. ते कसे कार्य करते ते येथे आहे: +क्वाड्रॅटिक निधी हे सुनिश्चित करते की ज्या प्रकल्पांना सर्वाधिक निधी मिळतो, तेच प्रकल्प आहेत ज्यांना सर्वात जास्त अद्वितीय मागणी आहे. दुसऱ्या शब्दांत, असे प्रकल्प जे जास्तीत जास्त लोकांचे जीवन सुधारू शकतात. ते कसे कार्य करते ते येथे आहे: 1. दान केलेल्या निधीचा एक जुळणारा पूल आहे. 2. सार्वजनिक निधीची फेरी सुरू होते. @@ -269,7 +272,9 @@ Quadratic funding makes sure that the projects that receive the most funding are याचा अर्थ 1 डॉलरच्या 100 देणग्यांसह प्रोजेक्ट A ला 10,000 डॉलर्स (जुळणार्‍या पूलच्या आकारावर अवलंबून) एका देणगीसह प्रोजेक्ट B पेक्षा जास्त निधी मिळू शकतो. -[चतुर्भुज निधीवर अधिक](https://wtfisqf.com) + + क्वाड्रॅटिक निधीवर अधिक + @@ -277,7 +282,7 @@ Quadratic funding makes sure that the projects that receive the most funding are विकेंद्रित विम्याचे उद्दिष्ट विमा स्वस्त करणे, भरणे जलद करणे आणि अधिक पारदर्शक करणे आहे. अधिक ऑटोमेशनसह, अधिक कव्हरेज हे परवडणारे आहे आणि पे-आउट खूप जलद आहेत. तुमच्या दाव्यावर निर्णय घेण्यासाठी वापरलेला डेटा पूर्णपणे पारदर्शक आहे. -Ethereum उत्पादने, कोणत्याही सॉफ्टवेअरप्रमाणे, दोष आणि शोषणांमुळे ग्रस्त होऊ शकतात. त्यामुळे सध्या अवकाशातील बरीच विमा उत्पादने त्यांच्या वापरकर्त्यांना निधीच्या नुकसानापासून संरक्षण देण्यावर लक्ष केंद्रित करतात. तथापि, जीवन आपल्यावर टाकू शकेल अशा प्रत्येक गोष्टीसाठी कव्हरेज तयार करण्यासाठी प्रकल्प सुरू होत आहेत. याचे उत्तम उदाहरण म्हणजे Etherisc चे क्रॉप कव्हर ज्याचा उद्देश [केनियामधील अल्पभूधारक शेतकऱ्यांना दुष्काळ आणि पुरापासून संरक्षण करणे](https://blog.etherisc.com/etherisc-teams-up-with-chainlink-to-deliver-crop-insurance-in-kenya-137e433c29dc) आहे. विकेंद्रित विमा शेतकर्‍यांना स्वस्त कवच देऊ शकतो ज्यांची किंमत पारंपारिक विम्यापेक्षा जास्त आहे. +Ethereum उत्पादने, कोणत्याही सॉफ्टवेअरप्रमाणे, दोष आणि शोषणांमुळे ग्रस्त होऊ शकतात. त्यामुळे सध्या अवकाशातील बरीच विमा उत्पादने त्यांच्या वापरकर्त्यांना निधीच्या नुकसानापासून संरक्षण देण्यावर लक्ष केंद्रित करतात. तथापि, जीवन आपल्यावर टाकू शकेल अशा प्रत्येक गोष्टीसाठी कव्हरेज तयार करण्यासाठी प्रकल्प सुरू होत आहेत. याचे एक उत्तम उदाहरण म्हणजे Etherisc's Crop cover, ज्याचा उद्देश [केनियातील अल्पभूधारक शेतकऱ्यांना दुष्काळ आणि पुरापासून संरक्षण देणे](https://blog.etherisc.com/etherisc-teams-up-with-chainlink-to-deliver-crop-insurance-in-kenya-137e433c29dc) हा आहे. विकेंद्रित विमा शेतकर्‍यांना स्वस्त कवच देऊ शकतो ज्यांची किंमत पारंपारिक विम्यापेक्षा जास्त आहे. विमा dapps पहा @@ -297,7 +302,7 @@ Ethereum उत्पादने, कोणत्याही सॉफ्ट ## DeFi कसे कार्य करते? {#how-defi-works} -मध्यस्थांची गरज नसलेल्या सेवा प्रदान करण्यासाठी DeFi क्रिप्टोकरन्सी आणि स्मार्ट करार वापरते. आजच्या आर्थिक जगात, वित्तीय संस्था व्यवहारांचे हमीदार म्हणून काम करतात. यामुळे या संस्थांना प्रचंड शक्ती मिळते कारण तुमचा पैसा त्यांच्यामार्फत वाहतो. शिवाय जगभरातील अब्जावधी लोकांकडे बँक खाते देखील नाही. +मध्यस्थांची गरज नसलेल्या सेवा प्रदान करण्यासाठी DeFi क्रिप्टोकरन्सी आणि स्मार्ट करार वापरते. आजच्या आर्थिक जगात, वित्तीय संस्था व्यवहारांचे हमीदार म्हणून काम करतात. यामुळे या संस्थांना प्रचंड शक्ती मिळते कारण तुमचा पैसा त्यांच्यामार्फत वाहतो. शिवाय, जगभरातील अब्जावधी लोक बँक खात्यात प्रवेश देखील करू शकत नाहीत. DeFi मध्ये, एक स्मार्ट करार व्यवहारात वित्तीय संस्थेची जागा घेते. स्मार्ट कॉन्ट्रॅक्ट हा Ethereum खात्याचा एक प्रकार आहे ज्यामध्ये फंड्स ठेवता येतात आणि काही अटींवर आधारित ते पाठवू/परतावा देऊ शकतो. लाइव्ह असताना ते स्मार्ट कॉन्ट्रॅक्ट कोणीही बदलू शकत नाही – ते नेहमी प्रोग्राम केलेले असते. @@ -321,35 +326,41 @@ Ethereum अनेक कारणांमुळे DeFi साठी परि 1. ब्लॉकचेन – Ethereumमध्ये व्यवहाराचा इतिहास आणि खात्यांची स्थिती असते. 2. मालमत्ता – [ETH](/what-is-ether/) आणि इतर टोकन (चलने). 3. प्रोटोकॉल – [स्मार्ट कॉन्ट्रॅक्ट्स](/glossary/#smart-contract) जे कार्यक्षमता प्रदान करतात, उदाहरणार्थ, एक सेवा जी मालमत्तेचे विकेंद्रित कर्ज देण्यास परवानगी देते. -4. [अनुप्रयोग](/apps/) – आम्ही प्रोटोकॉल व्यवस्थापित करण्यासाठी आणि प्रवेश करण्यासाठी वापरतो ती उत्पादने. +4. [ॲप्लिकेशन्स](/apps/) – आम्ही प्रोटोकॉल व्यवस्थापित करण्यासाठी आणि त्यात प्रवेश करण्यासाठी वापरत असलेली उत्पादने. + +टीप: बहुतेक DeFi [ERC-20 स्टँडर्डचा](/glossary/#erc-20) वापर करते. DeFi मधील ॲप्लिकेशन्स ETH साठी एका रॅपरचा वापर करतात ज्याला रॅप्ड ईथर (WETH) म्हणतात. [रॅप्ड ईथरबद्दल अधिक जाणून घ्या](/wrapped-eth). -## DeFi तयार करणे {#build-defi} +## DeFi तयार करा {#build-defi} DeFi एक मुक्त-स्रोत चळवळ आहे. DeFi प्रोटोकॉल आणि ऍप्लिकेशन्स तुमच्यासाठी तपासणी, काटा आणि नवीन शोध घेण्यासाठी खुले आहेत. या स्तरित स्टॅकमुळे (ते सर्व समान बेस ब्लॉकचेन आणि मालमत्ता सामायिक करतात), अद्वितीय कॉम्बो संधी अनलॉक करण्यासाठी प्रोटोकॉल मिश्रित आणि जुळवले जाऊ शकतात. - Dapps तयार करण्याबद्दल अधिक + dapps तयार करण्याबद्दल अधिक -## Further reading {#futher-reading} +## पुढील वाचन {#further-reading} ### DeFi डेटा {#defi-data} -- [DeFi प्राइम](https://defiprime.com/) +- [DeFi Prime](https://defiprime.com/) - [DeFi Llama](https://defillama.com/) -- [DeFi रेट](https://defirate.com/) -### DeFi आर्टिकल्स {#defi-articles} +### DeFi लेख {#defi-articles} -- [DeFi साठी नवशिक्यांसाठी मार्गदर्शक](https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4) – _सिड कोएल्हो-प्रभू, 6 जानेवारी 2020_ +- [DeFi साठी नवशिक्यांची मार्गदर्शिका](https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4) – _सिड कोएल्हो-प्रभू, 6 जानेवारी, 2020_ +- [EEA DeFi जोखीम मूल्यांकन मार्गदर्शक तत्त्वे](https://entethalliance.org/specs/defi-risks/) – DeFi प्रोटोकॉलमधील मुख्य धोके कसे ओळखावे आणि त्यांचे मूल्यांकन कसे करावे याचा उद्योग-समर्थित आढावा. -### Videos {#videos} +### व्हिडिओ {#videos} -- [फाइनेमॅटिक्स - विकेंद्रित वित्त शिक्षण](https://finematics.com/) – _DeFi वर व्हिडिओ_ -- [The Defiant](https://www.youtube.com/playlist?list=PLaDcID4s1KronHMKojfjwiHL0DdQEPDcq) - _DeFi मूलभूत गोष्टी: या अधूनमधून गोंधळात टाकणाऱ्या जागेत प्रारंभ करण्यासाठी तुम्हाला जे काही माहित असणे आवश्यक आहे._ -- [व्हाइटबोर्ड क्रिप्टो](https://youtu.be/17QRFlml4pA) _DeFi म्हणजे काय?_ +- [Finematics - विकेंद्रित वित्त शिक्षण](https://finematics.com/) – _DeFi वरील व्हिडिओ_ +- [The Defiant](https://www.youtube.com/playlist?list=PLaDcID4s1KronHMKojfjwiHL0DdQEPDcq) - _DeFi मूलतत्त्वे: या कधीकधी गोंधळात टाकणाऱ्या क्षेत्रात सुरुवात करण्यासाठी तुम्हाला आवश्यक असलेली प्रत्येक गोष्ट._ +- [Whiteboard Crypto](https://youtu.be/17QRFlml4pA) _DeFi म्हणजे काय?_ ### समुदाय {#communities} -- [DeFi Llama Discord सर्व्हर](https://discord.gg/buPFYXzDDd) -- [DeFi Pulse Discord सर्व्हर](https://discord.gg/Gx4TCTk) +- [DeFi Llama डिस्कॉर्ड सर्व्हर](https://discord.defillama.com/) +- [DeFi Pulse डिस्कॉर्ड सर्व्हर](https://discord.gg/Gx4TCTk) + + + + diff --git a/public/content/translations/mr/desci/index.md b/public/content/translations/mr/desci/index.md index ba61c00e943..b5edbaec21c 100644 --- a/public/content/translations/mr/desci/index.md +++ b/public/content/translations/mr/desci/index.md @@ -1,137 +1,139 @@ --- -title: विकेंद्रित विज्ञान (DeSci) -description: Ethereum वर विकेंद्रित विज्ञानाचे विहंगावलोकन +title: "विकेंद्रित विज्ञान (DeSci)" +description: "Ethereum वर विकेंद्रित विज्ञानाचे विहंगावलोकन" lang: mr template: use-cases emoji: ":microscope:" sidebarDepth: 2 image: /images/future_transparent.png alt: "" -summaryPoint1: सध्याच्या वैज्ञानिक प्रणालीसाठी जागतिक, खुला पर्याय. -summaryPoint2: तंत्रज्ञान जे शास्त्रज्ञांना निधी उभारण्यास, प्रयोग चालविण्यास, डेटा सामायिक करण्यास, अंतर्दृष्टी वितरित करण्यास आणि बरेच काही करण्यास सक्षम करते. -summaryPoint3: मुक्त विज्ञान चळवळीवर तयार होते. +summaryPoint1: "सध्याच्या वैज्ञानिक प्रणालीसाठी जागतिक, खुला पर्याय." +summaryPoint2: "तंत्रज्ञान जे शास्त्रज्ञांना निधी उभारण्यास, प्रयोग चालविण्यास, डेटा सामायिक करण्यास, अंतर्दृष्टी वितरित करण्यास आणि बरेच काही करण्यास सक्षम करते." +summaryPoint3: "मुक्त विज्ञान चळवळीवर तयार होते." --- ## विकेंद्रित विज्ञान (DeSci) म्हणजे काय? {#what-is-desci} -विकेंद्रित विज्ञान (DeSci) ही एक चळवळ आहे ज्याचा उद्देश Web3 स्टॅकचा वापर करून वैज्ञानिक ज्ञानाचा न्याय्य आणि समानतेने निधी, निर्मिती, पुनरावलोकन, क्रेडिट, संग्रहण आणि प्रसार करण्यासाठी सार्वजनिक पायाभूत सुविधा निर्माण करणे आहे. +विकेंद्रित विज्ञान (DeSci) ही एक चळवळ आहे ज्याचा उद्देश [Web3](/glossary/#web3) स्टॅकचा वापर करून वैज्ञानिक ज्ञानासाठी निधी उभारणे, ते तयार करणे, त्याचे पुनरावलोकन करणे, श्रेय देणे, संग्रहित करणे आणि न्याय्य व समान रीतीने प्रसारित करणे यासाठी सार्वजनिक पायाभूत सुविधा निर्माण करणे आहे. DeSci चे उद्दिष्ट एक अशी परिसंस्था निर्माण करणे आहे जिथे शास्त्रज्ञांना त्यांचे संशोधन उघडपणे सामायिक करण्यासाठी आणि त्यांच्या कार्याचे श्रेय प्राप्त करण्यासाठी प्रोत्साहन दिले जाते आणि कोणालाही संशोधनात सहज प्रवेश आणि योगदान देण्याची परवानगी दिली जाते. DeSci वैज्ञानिक ज्ञान प्रत्येकासाठी प्रवेशयोग्य असावे आणि वैज्ञानिक संशोधनाची प्रक्रिया पारदर्शक असावी या कल्पनेवर कार्य करते. DeSci अधिक विकेंद्रित आणि वितरित वैज्ञानिक संशोधन मॉडेल तयार करत आहे, जे सेन्सॉरशिप आणि केंद्रीय प्राधिकरणांच्या नियंत्रणास अधिक प्रतिरोधक बनवत आहे. DeSci ला असे वातावरण निर्माण करण्याची आशा आहे जिथे नवीन आणि अपारंपरिक कल्पना निधी, वैज्ञानिक साधने आणि संप्रेषण चॅनेलच्या प्रवेशाचे विकेंद्रीकरण करून भरभराट करू शकतात. -विकेंद्रित विज्ञान अधिक वैविध्यपूर्ण निधी स्रोतांना अनुमती देते ([DAO](/dao/) कडून, [चतुर्भुज देणग्या](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531) क्राउडफंडिंग आणि अधिक), अधिक प्रवेशयोग्य प्रवेश डेटा आणि पद्धती आणि पुनरुत्पादनासाठी प्रोत्साहन प्रदान करून. +विकेंद्रित विज्ञान अधिक वैविध्यपूर्ण निधी स्त्रोतांना अनुमती देते ([DAOs](/glossary/#dao) पासून, [चतुर्भुज देणग्या](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531) ते क्राउडफंडिंग आणि बरेच काही), अधिक प्रवेशयोग्य डेटा आणि पद्धती, आणि पुनरुत्पादकतेसाठी प्रोत्साहन प्रदान करून. ### जुआन बेनेट - DeSci चळवळ -## DeSci विज्ञान कसे सुधारते {#desci-improves-science} +## DeSci विज्ञानात कशी सुधारणा करते {#desci-improves-science} विज्ञानातील प्रमुख समस्यांची अपूर्ण यादी आणि विकेंद्रित विज्ञान या समस्यांचे निराकरण करण्यात कशी मदत करू शकते -| **विकेंद्रित विज्ञान** | **पारंपारिक विज्ञान** | -| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------- | -| चतुर्भुज देणग्या किंवा DAO सारख्या यंत्रणेचा वापर करून निधीचे वितरण जनतेद्वारे निश्चित केले जाते. | लहान, बंद, केंद्रीकृत गट निधीचे वितरण नियंत्रित करतात. | -| तुम्ही डायनॅमिक संघांमध्ये जगभरातील समवयस्कांसह सहयोग करता. | निधी देणार्‍या संस्था आणि गृहसंस्था तुमचे सहकार्य मर्यादित करतात. | -| निधीचे निर्णय ऑनलाइन आणि पारदर्शकपणे घेतले जातात. नवीन निधीची यंत्रणा शोधली जाते. | निधीचे निर्णय दीर्घ टर्नअराउंड वेळ आणि मर्यादित पारदर्शकतेसह घेतले जातात. काही निधीची यंत्रणा अस्तित्वात आहे. | -| Web3 प्रिमिटिव्ह वापरून प्रयोगशाळा सेवा सामायिक करणे सोपे आणि अधिक पारदर्शक केले आहे. | प्रयोगशाळेतील संसाधने सामायिक करणे अनेकदा धीमे आणि अपारदर्शक असते. | -| प्रकाशनासाठी नवीन मॉडेल विकसित केले जाऊ शकतात जे विश्वास, पारदर्शकता आणि सार्वत्रिक प्रवेशासाठी Web3 आदिम वापरतात. | तुम्ही वारंवार अकार्यक्षम, पक्षपाती आणि शोषक म्हणून मान्य केलेल्या स्थापित मार्गांद्वारे प्रकाशित करता. | -| तुम्ही पीअर-पुनरावलोकन कार्यासाठी टोकन आणि प्रतिष्ठा मिळवू शकता. | तुमचे पीअर-पुनरावलोकन कार्य न भरलेले आहे, फायद्यासाठी प्रकाशकांना लाभदायक आहे. | -| तुम्ही व्युत्पन्न करत असलेल्या बौद्धिक संपत्तीचे (IP) मालक आहात आणि ते पारदर्शक अटींनुसार वितरित करता. | तुम्ही व्युत्पन्न केलेला IP तुमच्या गृहसंस्थेच्या मालकीचा आहे. IP वर एक्सेस पारदर्शक नाही. | -| अयशस्वी प्रयत्नांच्या डेटासह सर्व संशोधन सामायिक करणे, सर्व पायऱ्या ऑन-चेन करून. | प्रकाशन पूर्वाग्रह म्हणजे संशोधक यशस्वी परिणाम देणारे प्रयोग सामायिक करण्याची अधिक शक्यता असते. | +| **विकेंद्रित विज्ञान** | **पारंपारिक विज्ञान** | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| निधीचे वितरण चतुर्भुज देणग्या किंवा DAO सारख्या यंत्रणा वापरून **जनतेद्वारे निर्धारित केले जाते**. | लहान, बंद, **केंद्रीकृत गट** निधीचे वितरण नियंत्रित करतात. | +| तुम्ही डायनॅमिक टीम्समध्ये **जगभरातील** समवयस्कांसह सहयोग करता. | निधीपुरवठा करणाऱ्या संस्था आणि गृहसंस्था तुमच्या सहकार्याला **मर्यादित** करतात. | +| निधीपुरवठ्याचे निर्णय ऑनलाइन आणि **पारदर्शकपणे** घेतले जातात. नवीन निधीची यंत्रणा शोधली जाते. | निधीपुरवठ्याचे निर्णय दीर्घ कालावधीत आणि **मर्यादित पारदर्शकतेसह** घेतले जातात. काही निधीची यंत्रणा अस्तित्वात आहे. | +| [Web3](/glossary/#web3) तंत्रज्ञानाचा वापर करून प्रयोगशाळा सेवा सामायिक करणे सोपे आणि अधिक पारदर्शक बनवले आहे. | प्रयोगशाळेतील संसाधने सामायिक करणे अनेकदा **हळू आणि अपारदर्शक** असते. | +| विश्वास, पारदर्शकता आणि सार्वत्रिक प्रवेशासाठी Web3 प्रिमीटिव्हज वापरणारी **प्रकाशनासाठी नवीन मॉडेल्स** विकसित केली जाऊ शकतात. | तुम्ही अशा प्रस्थापित मार्गांद्वारे प्रकाशित करता जे अनेकदा **अकार्यक्षम, पक्षपाती आणि शोषक** म्हणून ओळखले जातात. | +| तुम्ही **पीअर-रिव्ह्यू कामासाठी टोकन आणि प्रतिष्ठा मिळवू शकता**. | तुमचे **पीअर-रिव्ह्यू काम विनामोबदला** असते, ज्याचा फायदा नफा-कमावणाऱ्या प्रकाशकांना होतो. | +| **तुम्ही तयार करत असलेल्या बौद्धिक मालमत्तेची (IP) मालकी तुमची असते** आणि तुम्ही ती पारदर्शक अटींनुसार वितरित करता. | **तुमची गृहसंस्था तुम्ही तयार केलेल्या IP ची मालक असते**. IP वर एक्सेस पारदर्शक नाही. | +| **सर्व पायऱ्या ऑनचेन ठेवून**, अयशस्वी प्रयत्नांच्या डेटासह **सर्व संशोधन सामायिक करणे**. | **प्रकाशन पूर्वाग्रह** म्हणजे संशोधक यशस्वी परिणाम असलेले प्रयोग सामायिक करण्याची अधिक शक्यता असते. | ## Ethereum आणि DeSci {#ethereum-and-desci} -विकेंद्रित विज्ञान प्रणालीसाठी मजबूत सुरक्षा, किमान आर्थिक आणि व्यवहार खर्च आणि अनुप्रयोग विकासासाठी समृद्ध परिसंस्था आवश्यक असेल. विकेंद्रित विज्ञान स्टॅक तयार करण्यासाठी आवश्यक असलेली प्रत्येक गोष्ट Ethereum पुरवते. +विकेंद्रित विज्ञान प्रणालीसाठी मजबूत सुरक्षा, किमान आर्थिक आणि व्यवहार खर्च आणि अनुप्रयोग विकासासाठी समृद्ध परिसंस्था आवश्यक असेल. विकेंद्रित विज्ञान तंत्रज्ञान तयार करण्यासाठी आवश्यक असलेली प्रत्येक गोष्ट Ethereum पुरवते. ## DeSci वापर प्रकरणे {#use-cases} -DeSci डिजिटल जगामध्ये Web2 अकादमीला ऑनबोर्ड करण्यासाठी वैज्ञानिक टूलसेट तयार करत आहे. खाली Web3 वैज्ञानिक समुदायाला ऑफर करू शकणार्‍या वापराच्या प्रकरणांचा नमुना आहे. +DeSci पारंपारिक शिक्षणविश्वाला डिजिटल जगात ऑनबोर्ड करण्यासाठी वैज्ञानिक टूलसेट तयार करत आहे. खाली Web3 वैज्ञानिक समुदायाला ऑफर करू शकणार्‍या वापराच्या प्रकरणांचा नमुना आहे. ### प्रकाशन {#publishing} -विज्ञान प्रकाशन हे प्रसिद्धपणे समस्याप्रधान आहे कारण ते प्रकाशन संस्थांद्वारे व्यवस्थापित केले जाते जे शोधनिबंध तयार करण्यासाठी वैज्ञानिक, समीक्षक आणि संपादक यांच्या मोफत श्रमांवर अवलंबून असतात परंतु नंतर अत्याधिक प्रकाशन शुल्क आकारतात. ज्या लोकांनी सहसा अप्रत्यक्षपणे कामासाठी आणि प्रकाशनाच्या खर्चासाठी कर आकारणीद्वारे पैसे दिले आहेत, ते प्रकाशकाला पुन्हा पैसे दिल्याशिवाय त्याच कामात प्रवेश करू शकत नाहीत. वैयक्तिक विज्ञान पेपर प्रकाशित करण्यासाठी एकूण फी बहुतेकदा पाच आकडे ($USD) असते, जी म्हणून वैज्ञानिक ज्ञानाची संपूर्ण संकल्पना [सार्वजनिक हित](https://www.econlib.org/library/Enc/PublicGoods.html) प्रकाशकांच्या छोट्या गटासाठी प्रचंड नफा कमावताना कमी करते. +विज्ञान प्रकाशन हे प्रसिद्धपणे समस्याप्रधान आहे कारण ते प्रकाशन संस्थांद्वारे व्यवस्थापित केले जाते जे शोधनिबंध तयार करण्यासाठी वैज्ञानिक, समीक्षक आणि संपादक यांच्या मोफत श्रमांवर अवलंबून असतात परंतु नंतर अत्याधिक प्रकाशन शुल्क आकारतात. ज्या लोकांनी सहसा अप्रत्यक्षपणे कामासाठी आणि प्रकाशनाच्या खर्चासाठी कर आकारणीद्वारे पैसे दिले आहेत, ते प्रकाशकाला पुन्हा पैसे दिल्याशिवाय त्याच कामात प्रवेश करू शकत नाहीत. वैयक्तिक विज्ञान पेपर्स प्रकाशित करण्यासाठी एकूण शुल्क अनेकदा पाच-अंकी ($USD) असते, जे प्रकाशकांच्या एका लहान गटासाठी प्रचंड नफा मिळवताना वैज्ञानिक ज्ञानाची [सार्वजनिक हित](/glossary/#public-goods) म्हणून असलेली संपूर्ण संकल्पना कमकुवत करते. -विनामूल्य आणि मुक्त-प्रवेश प्लॅटफॉर्म प्री-प्रिंट सर्व्हरच्या स्वरूपात अस्तित्वात आहेत, [जसे की ArXiv](https://arxiv.org/). तथापि, या प्लॅटफॉर्ममध्ये गुणवत्ता नियंत्रण, [अँटी-सिबिल मेकॅनिझम](https://csrc.nist.gov/glossary/term/sybil_attack) नसतात आणि सामान्यतः लेख-स्तरीय मेट्रिक्सचा मागोवा घेत नाहीत, म्हणजे ते सहसा पारंपारिक प्रकाशकाला सादर करण्यापूर्वी कामाची प्रसिद्धी करण्यासाठी वापरले जातात. SciHub प्रकाशित पेपर्स देखील प्रवेशासाठी विनामूल्य बनवते, परंतु कायदेशीररित्या नाही, आणि प्रकाशकांनी आधीच त्यांचे पेमेंट घेतल्यानंतर आणि कठोर कॉपीराइट कायद्यात काम गुंडाळल्यानंतरच. हे प्रवेशयोग्य विज्ञान पेपर्स आणि एम्बेडेड वैधता यंत्रणा आणि प्रोत्साहन मॉडेलसह डेटासाठी एक महत्त्वपूर्ण अंतर सोडते. अशी प्रणाली तयार करण्यासाठी साधने Web3 मध्ये अस्तित्वात आहेत. +विनामूल्य आणि मुक्त-प्रवेश प्लॅटफॉर्म प्री-प्रिंट सर्व्हरच्या स्वरूपात अस्तित्वात आहेत, [जसे की ArXiv](https://arxiv.org/). तथापि, या प्लॅटफॉर्ममध्ये गुणवत्ता नियंत्रण, [अँटी-सिबिल मेकॅनिझम](/glossary/#anti-sybil) नसतात, आणि सामान्यतः लेख-स्तरीय मेट्रिक्सचा मागोवा घेत नाहीत, याचा अर्थ ते सहसा केवळ पारंपरिक प्रकाशकाकडे सादर करण्यापूर्वी कामाची प्रसिद्धी करण्यासाठी वापरले जातात. SciHub प्रकाशित पेपर्स देखील प्रवेशासाठी विनामूल्य बनवते, परंतु कायदेशीररित्या नाही, आणि प्रकाशकांनी आधीच त्यांचे पेमेंट घेतल्यानंतर आणि कठोर कॉपीराइट कायद्यात काम गुंडाळल्यानंतरच. हे प्रवेशयोग्य विज्ञान पेपर्स आणि एम्बेडेड वैधता यंत्रणा आणि प्रोत्साहन मॉडेलसह डेटासाठी एक महत्त्वपूर्ण अंतर सोडते. अशी प्रणाली तयार करण्यासाठी साधने Web3 मध्ये अस्तित्वात आहेत. -### पुनरुत्पादनक्षमता आणि प्रतिकृती {#reproducibility-and-replicability} +### पुनरुत्पादकता आणि प्रतिकृतीक्षमता {#reproducibility-and-replicability} पुनरुत्पादनक्षमता आणि प्रतिकृती हे दर्जेदार वैज्ञानिक शोधाचा पाया आहेत. - समान कार्यपद्धती वापरून एकाच कार्यसंघाद्वारे पुनरुत्पादक परिणाम सलग अनेक वेळा प्राप्त केले जाऊ शकतात. - त्याच प्रायोगिक सेटअपचा वापर करून वेगळ्या गटाद्वारे प्रतिकृतियोग्य परिणाम प्राप्त केले जाऊ शकतात. -नवीन Web3-नेटिव्ह टूल्स हे सुनिश्चित करू शकतात की पुनरुत्पादकता आणि प्रतिकृती हे शोधाचा आधार आहेत. आम्ही शैक्षणिक क्षेत्रातील तांत्रिक फॅब्रिकमध्ये दर्जेदार विज्ञान विणू शकतो. Web3 प्रत्येक विश्लेषण घटकासाठी साक्ष्यीकरण तयार करण्याची क्षमता देते: कच्चा डेटा, संगणकीय इंजिन आणि अनुप्रयोग परिणाम. एकमत प्रणालीचे सौंदर्य हे आहे की जेव्हा हे घटक राखण्यासाठी विश्वसनीय नेटवर्क तयार केले जाते, तेव्हा प्रत्येक नेटवर्क सहभागी गणना पुनरुत्पादित करण्यासाठी आणि प्रत्येक परिणाम प्रमाणित करण्यासाठी जबाबदार असू शकतो. +नवीन Web3-नेटिव्ह टूल्स हे सुनिश्चित करू शकतात की पुनरुत्पादकता आणि प्रतिकृती हे शोधाचा आधार आहेत. आम्ही शैक्षणिक क्षेत्रातील तांत्रिक फॅब्रिकमध्ये दर्जेदार विज्ञान विणू शकतो. Web3 प्रत्येक विश्लेषण घटकासाठी [साक्षांकन](/glossary/#attestation) तयार करण्याची क्षमता देते: रॉ डेटा, संगणकीय इंजिन आणि ऍप्लिकेशनचा निकाल. एकमत प्रणालीचे सौंदर्य हे आहे की जेव्हा हे घटक राखण्यासाठी विश्वसनीय नेटवर्क तयार केले जाते, तेव्हा प्रत्येक नेटवर्क सहभागी गणना पुनरुत्पादित करण्यासाठी आणि प्रत्येक परिणाम प्रमाणित करण्यासाठी जबाबदार असू शकतो. -### निधी {#funding} +### निधीपुरवठा {#funding} -विज्ञान निधीसाठी सध्याचे मानक मॉडेल असे आहे की व्यक्ती किंवा शास्त्रज्ञांचे गट निधी एजन्सीला लेखी अर्ज करतात. विश्वासू व्यक्तींचे एक लहान पॅनेल अर्जांचे गुणांकन करतात आणि नंतर अर्जदारांच्या छोट्या भागाला निधी देण्याआधी उमेदवारांची मुलाखत घेतात. अनुदानासाठी अर्ज करणे आणि प्राप्त करणे यामध्ये काहीवेळा अनेक वर्षे प्रतीक्षा करावी लागतील अशा अडचणी निर्माण करण्याव्यतिरिक्त, हे मॉडेल पुनरावलोकन पॅनेलच्या पक्षपात, स्वार्थ आणि राजकारणासाठी अत्यंत असुरक्षित म्हणून ओळखले जाते. +विज्ञान निधीसाठी सध्याचे मानक मॉडेल असे आहे की व्यक्ती किंवा शास्त्रज्ञांचे गट निधी एजन्सीला लेखी अर्ज करतात. विश्वासू व्यक्तींचे एक लहान पॅनेल अर्जांचे गुणांकन करतात आणि नंतर अर्जदारांच्या छोट्या भागाला निधी देण्याआधी उमेदवारांची मुलाखत घेतात. अनुदानासाठी अर्ज करणे आणि ते मिळवणे यात कधीकधी **अनेक वर्षांची प्रतीक्षा** करावी लागते, ज्यामुळे अडथळे निर्माण होतात. याव्यतिरिक्त, हे मॉडेल पुनरावलोकन पॅनेलच्या **पूर्वग्रह, स्वार्थ आणि राजकारणासाठी** अत्यंत असुरक्षित असल्याचे ओळखले जाते. अभ्यासातून असे दिसून आले आहे की अनुदान पुनरावलोकन पॅनेल उच्च-गुणवत्तेचे प्रस्ताव निवडण्याचे खराब काम करतात कारण वेगवेगळ्या पॅनेलला दिलेल्या समान प्रस्तावांचे परिणाम खूप वेगळे असतात. निधी अधिक दुर्मिळ झाला असल्याने, ते अधिक बौद्धिकदृष्ट्या पुराणमतवादी प्रकल्पांसह अधिक ज्येष्ठ संशोधकांच्या लहान गटात केंद्रित झाले आहे. या परिणामामुळे अति-स्पर्धात्मक निधीची लँडस्केप तयार झाली आहे, विकृत प्रोत्साहने आणि नवकल्पना रोखून धरण्यात आली आहे. -Web3 मध्ये DAO आणि Web3 द्वारे विकसित केलेल्या विविध प्रोत्साहन मॉडेल्ससह प्रयोग करून या तुटलेल्या निधी मॉडेलमध्ये व्यत्यय आणण्याची क्षमता आहे. [रेट्रोएक्टिव्ह सार्वजनिक वस्तू निधी](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c), [चतुर्भुज निधी](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531), [DAO गव्हर्नन्स](https://www.antler.co/blog/daos-and-web3-governance-the-promise-implications-and-challenges-ahead) आणि [टोकनीकृत प्रोत्साहन संरचना](https://cdixon.org/2017/05/27/crypto-tokens-a-breakthrough-in-open-network-design) हे काही आहेत Web3 साधने जी विज्ञान निधीमध्ये क्रांती घडवू शकतात. +Web3 मध्ये DAO आणि Web3 द्वारे विकसित केलेल्या विविध प्रोत्साहन मॉडेल्ससह प्रयोग करून या तुटलेल्या निधी मॉडेलमध्ये व्यत्यय आणण्याची क्षमता आहे. [रेट्रोऍक्टिव्ह पब्लिक गुड्स फंडिंग](https://medium.com/ethereum-optimism/retroactive-public-goods-funding-33c9b7d00f0c), [क्वाड्रॅटिक फंडिंग](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2003531), [DAO गव्हर्नन्स](https://www.antler.co/blog/daos-and-web3-governance-the-promise-implications-and-challenges-ahead) आणि [टोकनाइज्ड इन्सेंटिव्ह स्ट्रक्चर्स](https://cdixon.org/2017/05/27/crypto-tokens-a-breakthrough-in-open-network-design) ही काही Web3 साधने आहेत जी विज्ञान निधीपुरवठ्यात क्रांती घडवू शकतात. ### IP मालकी आणि विकास {#ip-ownership} -बौद्धिक संपदा (IP) ही पारंपारिक विज्ञानातील एक मोठी समस्या आहे: विद्यापीठांमध्ये अडकून राहण्यापासून किंवा बायोटेकमध्ये न वापरल्या जाण्यापासून, कुप्रसिद्धपणे मूल्य देणे कठीण आहे. तथापि, डिजिटल मालमत्तेची मालकी (जसे की वैज्ञानिक डेटा किंवा लेख) ही Web3 [नॉन-फंगीबल टोकन्स (NFT)](/nft/) वापरून अपवादात्मकपणे चांगली कामगिरी करते. +बौद्धिक संपदा (IP) ही पारंपारिक विज्ञानातील एक मोठी समस्या आहे: विद्यापीठांमध्ये अडकून राहण्यापासून किंवा बायोटेकमध्ये न वापरल्या जाण्यापासून, कुप्रसिद्धपणे मूल्य देणे कठीण आहे. तथापि, डिजिटल मालमत्तेची मालकी (जसे की वैज्ञानिक डेटा किंवा लेख) ही अशी गोष्ट आहे जी Web3 [नॉन-फंजिबल टोकन्स (NFTs)](/glossary/#nft) वापरून अपवादात्मकरित्या चांगली करते. ज्या प्रकारे NFT भविष्यातील व्यवहारांसाठी महसूल मूळ निर्मात्याकडे पाठवू शकतात, त्याच प्रकारे तुम्ही संशोधक, प्रशासकीय संस्था (DAO सारख्या) किंवा ज्यांचा डेटा संकलित केला आहे अशा विषयांना पुरस्कृत करण्यासाठी पारदर्शक मूल्य विशेषता साखळी स्थापन करू शकता. -[IP-NFT](https://medium.com/molecule-blog/ip-nfts-for-researchers-a-new-biomedical-funding-paradigm-91312d8d92e6) देखील एक म्हणून कार्य करू शकतात हाती घेतलेल्या संशोधन प्रयोगांच्या विकेंद्रित डेटा भांडाराची गुरुकिल्ली, आणि NFT आणि [DeFi](/defi/) आर्थिककरण (फ्रॅक्शनलायझेशनपासून कर्ज पूल आणि मूल्य मूल्यांकनापर्यंत) प्लग इन करा. हे थेट ऑन-चेन संशोधन करण्यासाठी DAO सारख्या DAO जसे की [VitaDAO](https://www.vitadao.com/) ला देखील अनुमती देते. नॉन-हस्तांतरणीय ["सोलबाउंड" टोकन्स](https://vitalik.eth.limo/general/2022/01/26/soulbound.html)चे आगमन देखील DeSci मध्ये महत्त्वपूर्ण भूमिका बजावू शकते आणि व्यक्तींना त्यांचे अनुभव आणि त्यांच्या Ethereum पत्त्याशी जोडलेले क्रेडेन्शियल्स सिद्ध करू शकतात. +[IP-NFTs](https://medium.com/molecule-blog/ip-nfts-for-researchers-a-new-biomedical-funding-paradigm-91312d8d92e6) हाती घेतलेल्या संशोधन प्रयोगांच्या विकेंद्रित डेटा भांडाराची किल्ली म्हणूनही कार्य करू शकतात आणि NFT आणि [DeFi](/glossary/#defi) फायनान्शियलायझेशनमध्ये (फ्रॅक्शनलायझेशनपासून लेंडिंग पूल्स आणि मूल्य मूल्यांकनापर्यंत) प्लग इन करू शकतात. हे [VitaDAO](https://www.vitadao.com/) सारख्या DAOs सारख्या नेटिव्ह ऑनचेन घटकांना थेट ऑनचेन संशोधन करण्यास देखील अनुमती देते. +नॉन-ट्रान्सफरेबल ["सोलबाउंड" टोकन्स](https://vitalik.eth.limo/general/2022/01/26/soulbound.html) चे आगमन देखील व्यक्तींना त्यांच्या Ethereum ऍड्रेसशी जोडलेले त्यांचे अनुभव आणि क्रेडेन्शियल्स सिद्ध करण्यास अनुमती देऊन DeSci मध्ये एक महत्त्वाची भूमिका बजावू शकते. ### डेटा स्टोरेज, ऍक्सेस आणि आर्किटेक्चर {#data-storage} Web3 पॅटर्नचा वापर करून वैज्ञानिक डेटा मोठ्या प्रमाणात प्रवेशयोग्य बनविला जाऊ शकतो आणि वितरीत स्टोरेज संशोधनास आपत्तीजनक घटनांमध्ये टिकून राहण्यास सक्षम करते. -प्रारंभ बिंदू योग्य सत्यापित करण्यायोग्य क्रेडेन्शियल्स असलेल्या कोणत्याही विकेंद्रीकृत ओळखीद्वारे प्रवेशयोग्य प्रणाली असणे आवश्यक आहे. हे विश्वसनीय पक्षांद्वारे संवेदनशील डेटाची सुरक्षितपणे प्रतिकृती बनवण्याची अनुमती देते, रिडंडंसी आणि सेन्सॉरशिप प्रतिकार सक्षम करते, परिणामांचे पुनरुत्पादन आणि एकाधिक पक्षांना सहयोग करण्याची आणि डेटासेटमध्ये नवीन डेटा जोडण्याची क्षमता देखील सक्षम करते. सारख्या गोपनीय संगणकीय पद्धती [कम्प्युट-टू-डेटा](https://7wdata.be/predictive-analytics/compute-to-data-using-blockchain-to-decentralize-data-science-and-ai-with-the-ocean-protocol) कच्च्या डेटाच्या प्रतिकृतीसाठी पर्यायी प्रवेश यंत्रणा प्रदान करते, सर्वात संवेदनशील डेटासाठी विश्वसनीय संशोधन वातावरण तयार करते. विश्वसनीय संशोधन वातावरण [NHS द्वारे उद्धृत केले आहे](https://medium.com/weavechain/whats-in-store-for-the-future-of-healthcare-data-b6398745fbbb) डेटा गोपनीयतेसाठी आणि सहकार्यासाठी एक इकोसिस्टम तयार करून भविष्यातील समाधान ज्यामध्ये संशोधक कोड आणि पद्धती सामायिक करण्यासाठी प्रमाणित वातावरण वापरून साइटवर डेटासह सुरक्षितपणे कार्य करू शकतात. +प्रारंभ बिंदू योग्य सत्यापित करण्यायोग्य क्रेडेन्शियल्स असलेल्या कोणत्याही विकेंद्रीकृत ओळखीद्वारे प्रवेशयोग्य प्रणाली असणे आवश्यक आहे. हे विश्वसनीय पक्षांद्वारे संवेदनशील डेटाची सुरक्षितपणे प्रतिकृती बनवण्याची अनुमती देते, रिडंडंसी आणि सेन्सॉरशिप प्रतिकार सक्षम करते, परिणामांचे पुनरुत्पादन आणि एकाधिक पक्षांना सहयोग करण्याची आणि डेटासेटमध्ये नवीन डेटा जोडण्याची क्षमता देखील सक्षम करते. कॉन्फिडेन्शियल कंप्युटिंग पद्धती जसे की [कंप्युट-टू-डेटा](https://7wdata.be/predictive-analytics/compute-to-data-using-blockchain-to-decentralize-data-science-and-ai-with-the-ocean-protocol) रॉ डेटा रेप्लिकेशनसाठी पर्यायी ऍक्सेस यंत्रणा प्रदान करतात, ज्यामुळे सर्वात संवेदनशील डेटासाठी विश्वसनीय संशोधन वातावरण (Trusted Research Environments) तयार होते. कोड आणि पद्धती सामायिक करण्यासाठी प्रमाणित वातावरणाचा वापर करून संशोधक साइटवर डेटासह सुरक्षितपणे काम करू शकतील अशी इकोसिस्टम तयार करून, डेटा गोपनीयता आणि सहकार्यासाठी भविष्यातील उपाय म्हणून विश्वसनीय संशोधन वातावरणाचा (Trusted Research Environments) [NHS ने उल्लेख केला आहे](https://medium.com/weavechain/whats-in-store-for-the-future-of-healthcare-data-b6398745fbbb). लवचिक Web3 डेटा सोल्यूशन्स वरील परिस्थितींना समर्थन देतात आणि खरोखर मुक्त विज्ञानासाठी पाया प्रदान करतात, जेथे संशोधक प्रवेश परवानगी किंवा शुल्काशिवाय सार्वजनिक वस्तू तयार करू शकतात. Web3 सार्वजनिक डेटा सोल्यूशन्स जसे की IPFS, Arweave आणि Filecoin विकेंद्रीकरणासाठी ऑप्टिमाइझ केले आहेत. dClimate, उदाहरणार्थ, हवामान आणि हवामान डेटावर सार्वत्रिक प्रवेश प्रदान करते, ज्यामध्ये हवामान केंद्रे आणि हवामानाच्या अंदाज मॉडेल्सचा समावेश आहे. -## यात सामील व्हा {#get-involved} +## सहभागी व्हा {#get-involved} प्रकल्प एक्सप्लोर करा आणि DeSci समुदायात सामील व्हा. -- [DeSci.Global: जागतिक कार्यक्रम आणि भेटीचे कॅलेंडर](https://desci.global) -- [विज्ञान टेलिग्रामसाठी ब्लॉकचेन](https://t.me/BlockchainForScience) -- [रेणू: तुमच्या संशोधन प्रकल्पांसाठी निधी द्या आणि निधी मिळवा](https://discover.molecule.to/) -- [VitaDAO: दीर्घायुषी संशोधनासाठी प्रायोजित संशोधन कराराद्वारे निधी प्राप्त करा](https://www.vitadao.com/) -- [ResearchHub: वैज्ञानिक परिणाम पोस्ट करा आणि समवयस्कांशी संभाषण करा](https://www.researchhub.com/) -- [dClimate API: विकेंद्रित समुदायाद्वारे गोळा केलेला हवामान डेटा क्वेरी](https://www.dclimate.net/) -- [DeSci फाउंडेशन: DeSci प्रकाशन साधन बिल्डर](https://descifoundation.org/) -- [DeSci.World: वापरकर्त्यांना विकेंद्रित विज्ञान पाहण्यासाठी, व्यस्त ठेवण्यासाठी वन-स्टॉप शॉप](https://desci.world) -- [फ्लेमिंग प्रोटोकॉल: ओपन-सोर्स डेटा इकॉनॉमी जी सहयोगात्मक बायोमेडिकल शोधांना चालना देते](https://medium.com/@FlemingProtocol/a-data-economy-for-patient-driven-biomedical-innovation-9d56bf63d3dd) -- [OceanDAO: DAO डेटा-संबंधित विज्ञानासाठी निधी नियंत्रित करते](https://oceanprotocol.com/dao) -- [जाणीव: खुले विकेंद्रित विज्ञान कार्यप्रवाह](https://opsci.io/research/) -- [Bio.xyz: तुमच्या बायोटेक DAO किंवा desci प्रकल्पासाठी निधी मिळवा](https://www.molecule.to/) -- [ResearchHub: वैज्ञानिक परिणाम पोस्ट करा आणि समवयस्कांशी संभाषण करा](https://www.researchhub.com/) -- [VitaDAO: दीर्घायुषी संशोधनासाठी प्रायोजित संशोधन कराराद्वारे निधी प्राप्त करा](https://www.vitadao.com/) -- [फ्लेमिंग प्रोटोकॉल: ओपन-सोर्स डेटा इकॉनॉमी जी सहयोगात्मक बायोमेडिकल शोधांना चालना देते](https://medium.com/@FlemingProtocol/a-data-economy-for-patient-driven-biomedical-innovation-9d56bf63d3dd) -- [सक्रिय अनुमान प्रयोगशाळा](https://www.activeinference.org/) -- [CureDAO: समुदायाच्या मालकीचे प्रिसिजन हेल्थ प्लॅटफॉर्म](https://docs.curedao.org/) +- [DeSci.Global: जागतिक इव्हेंट्स आणि मीटअप कॅलेंडर](https://desci.global) +- [Blockchain for Science टेलिग्राम](https://t.me/BlockchainForScience) +- [Molecule: तुमच्या संशोधन प्रकल्पांसाठी निधी द्या आणि निधी मिळवा](https://www.molecule.xyz/) +- [VitaDAO: दीर्घायुष्य संशोधनासाठी प्रायोजित संशोधन करारांद्वारे निधी मिळवा](https://www.vitadao.com/) +- [ResearchHub: वैज्ञानिक परिणाम पोस्ट करा आणि समवयस्कांशी संभाषणात व्यस्त रहा](https://www.researchhub.com/) +- [dClimate API: विकेंद्रित समुदायाद्वारे गोळा केलेल्या हवामान डेटाची क्वेरी करा](https://www.dclimate.net/) +- [DeSci Foundation: DeSci प्रकाशन टूल बिल्डर](https://descifoundation.org/) +- [DeSci.World: वापरकर्त्यांना विकेंद्रित विज्ञान पाहण्यासाठी, त्यात सहभागी होण्यासाठी वन-स्टॉप शॉप](https://desci.world) +- [OceanDAO: डेटा-संबंधित विज्ञानासाठी DAO-शासित निधीपुरवठा](https://oceanprotocol.com/) +- [Opscientia: खुले विकेंद्रित विज्ञान वर्कफ्लो](https://opsci.io/research/) +- [Bio.xyz: तुमच्या बायोटेक DAO किंवा desci प्रोजेक्टसाठी निधी मिळवा](https://www.bio.xyz/) +- [Fleming Protocol: ओपन-सोर्स डेटा इकॉनॉमी जी सहयोगी बायोमेडिकल शोधाला चालना देते](http.flemingprotocol.io/) +- [Active Inference Institute](https://www.activeinference.org/) - [IdeaMarkets: विकेंद्रित वैज्ञानिक विश्वासार्हता सक्षम करणे](https://ideamarket.io/) -- [DeSci लॅब](https://www.desci.com/) +- [DeSci Labs](https://www.desci.com/) +- [ValleyDAO: सिंथेटिक बायोलॉजी संशोधनासाठी निधी आणि भाषांतरात्मक समर्थन देणारा एक खुला, जागतिक समुदाय](https://www.valleydao.bio) +- [Cerebrum DAO: मेंदूच्या आरोग्याला चालना देण्यासाठी आणि न्यूरोडिजनरेशन रोखण्यासाठी उपाय शोधणे आणि त्यांना प्रोत्साहन देणे](https://www.cerebrumdao.com/) +- [CryoDAO: क्रायोप्रिझर्वेशन क्षेत्रातील मूनशॉट संशोधनासाठी निधीपुरवठा](https://www.cryodao.org) +- [Elata: सायकियाट्रिक मेडिसिनच्या भविष्यात आपले मत मांडा](https://www.elata.bio/) -आम्ही नवीन प्रकल्पांच्या सूचीसाठी सूचनांचे स्वागत करतो - कृपया प्रारंभ करण्यासाठी आमचे [सूची धोरण](/contributing/adding-desci-projects/) पहा! +आम्ही सूचीत समाविष्ट करण्यासाठी नवीन प्रोजेक्ट्सच्या सूचनांचे स्वागत करतो - कृपया प्रारंभ करण्यासाठी आमचे [सूची धोरण](/contributing/adding-desci-projects/) पहा! -## Further reading {#further-reading} +## पुढील वाचन {#further-reading} -- [DeSci Wiki Jocelyn Pearl आणि Ultrarare द्वारे](https://docs.google.com/document/d/1aQC6zn-eXflSmpts0XGE7CawbUEHwnL6o-OFXO52PTc/edit#) -- [a16z भविष्यासाठी जोसेलिन पर्लद्वारे विकेंद्रित बायोटेकसाठी मार्गदर्शक](https://future.a16z.com/a-guide-to-decentralized-biotech/) -- [DeSci साठी केस](https://gitcoin.co/blog/desci-the-case-for-decentralised-science/) +- [DeSci Wiki by Jocelynn Pearl and Ultrarare](https://docs.google.com/document/d/1aQC6zn-eXflSmpts0XGE7CawbUEHwnL6o-OFXO52PTc/edit#) +- [a16z future साठी Jocelynn Pearl द्वारे विकेंद्रित बायोटेकसाठी एक मार्गदर्शक](https://future.a16z.com/a-guide-to-decentralized-biotech/) +- [DeSci चे समर्थन](https://gitcoin.co/blog/desci-the-case-for-decentralised-science/) - [DeSci साठी मार्गदर्शक](https://future.com/what-is-decentralized-science-aka-desci/) - [विकेंद्रित विज्ञान संसाधने](https://www.vincentweisser.com/desci) -- [रेणूचे बायोफार्मा IP-NFT - एक तांत्रिक वर्णन](https://molecule.to/blog/molecules-biopharma-ip-nfts-a-technical-description) -- [जॉन स्टारद्वारे विश्वासार्ह विज्ञान प्रणाली तयार करणे](https://medium.com/@jringo/building-systems-of-trustless-science-1cd2d072f673) -- [बायोटेक DAO चा उदय](https://molecule.to/blog/the-emergence-of-biotech-daos) -- [पॉल कोल्हास - DeSci: विकेंद्रित विज्ञानाचे भविष्य (पॉडकास्ट)](https://anchor.fm/andrew-steinwold/episodes/Paul-Kohlhaas---DeSci-The-Future-of-Decentralized-Science---Zima-Red-ep-117-e1h683a) -- [विकेंद्रीकृत विज्ञानासाठी एक सक्रिय अनुमान ऑन्टोलॉजी: स्थित सेन्समेकिंगपासून एपिस्टेमिक कॉमन्सपर्यंत](https://zenodo.org/record/6320575) -- [DeSci: सॅम्युअल अकिनोशो द्वारे संशोधनाचे भविष्य](https://lucidsamuel.medium.com/desci-the-future-of-research-b76cfc88c8ec) -- [नादिया द्वारे विज्ञान निधी (उपसंहार: DeSci आणि नवीन क्रिप्टो प्रिमिटिव्स)](https://nadia.xyz/science-funding) -- [विकेंद्रीकरण औषधांच्या विकासात व्यत्यय आणत आहे](https://medium.com/id-theory/decentralisation-is-disrupting-drug-development-28b5ba5d447f) +- [Molecule चे बायोफार्मा IP-NFTs - एक तांत्रिक वर्णन](https://www.molecule.xyz/blog/molecules-biopharma-ip-nfts-a-technical-description) +- [Jon Starr द्वारे विज्ञानाच्या ट्रस्टलेस सिस्टीम्सची उभारणी](https://medium.com/@jringo/building-systems-of-trustless-science-1cd2d072f673) +- [Paul Kohlhaas - DeSci: विकेंद्रित विज्ञानाचे भविष्य (पॉडकास्ट)](https://anchor.fm/andrew-steinwold/episodes/Paul-Kohlhaas---DeSci-The-Future-of-Decentralized-Science---Zima-Red-ep-117-e1h683a) +- [विकेंद्रित विज्ञानासाठी एक सक्रिय अनुमान ऑन्टोलॉजी: स्थित सेन्समेकिंगपासून एपिस्टेमिक कॉमन्सपर्यंत](https://zenodo.org/record/6320575) +- [Samuel Akinosho द्वारे DeSci: संशोधनाचे भविष्य](https://lucidsamuel.medium.com/desci-the-future-of-research-b76cfc88c8ec) +- [नादिया द्वारे सायन्स फंडिंग (उपसंहार: DeSci आणि नवीन क्रिप्टो प्रिमीटिव्हज)](https://nadia.xyz/science-funding) +- [विकेंद्रीकरण औषध विकासात व्यत्यय आणत आहे](https://medium.com/id-theory/decentralisation-is-disrupting-drug-development-28b5ba5d447f) +- [DeSci म्हणजे काय – विकेंद्रित विज्ञान?](https://usadailytimes.com/2022/09/12/what-is-desci-decentralized-science/) -### Videos {#videos} +### व्हिडिओ {#videos} - [विकेंद्रित विज्ञान म्हणजे काय?](https://www.youtube.com/watch?v=-DeMklVWNdA) - [दीर्घायुष्य संशोधन आणि क्रिप्टोच्या छेदनबिंदूबद्दल विटालिक बुटेरिन आणि वैज्ञानिक ऑब्रे डी ग्रे यांच्यातील संभाषण](https://www.youtube.com/watch?v=x9TSJK1widA) -- [वैज्ञानिक प्रकाशन तुटलेले आहे. Web3 याचे निराकरण करू शकते?](https://www.youtube.com/watch?v=WkvzYgCvWj8) -- [जॉन बेनेट - DeSci, स्वतंत्र प्रयोगशाळा आणि लार्ज स्केल डेटा सायन्स](https://www.youtube.com/watch?v=zkXM9H90g_E) -- [सेबॅस्टियन ब्रुनेमेयर - DeSci बायोमेडिकल संशोधन कसे बदलू शकते आणि व्हेंचर कॅपिटल](https://www.youtube.com/watch?v=qB4Tc3FcVbM) +- वैज्ञानिक प्रकाशन व्यवस्था कोलमडली आहे. Web3 ते दुरुस्त करू शकते का?](https://www.youtube.com/watch?v=WkvzYgCvWj8) +- [Juan Benet - DeSci, स्वतंत्र लॅब्स, आणि मोठ्या प्रमाणातील डेटा सायन्स](https://www.youtube.com/watch?v=zkXM9H90g_E) +- [Sebastian Brunemeier - DeSci बायोमेडिकल संशोधन आणि व्हेंचर कॅपिटलमध्ये कसे परिवर्तन घडवू शकते](https://www.youtube.com/watch?v=qB4Tc3FcVbM) +- [Paige Donner - Web3 आणि ब्लॉकचेनसह ओपन सायन्सची टूलिंग](https://www.youtube.com/watch?v=nC-2QWQ-lgw&t=17s) diff --git a/public/content/translations/mr/developers/docs/accounts/index.md b/public/content/translations/mr/developers/docs/accounts/index.md new file mode 100644 index 00000000000..46d57250bfb --- /dev/null +++ b/public/content/translations/mr/developers/docs/accounts/index.md @@ -0,0 +1,137 @@ +--- +title: "Ethereum खाती" +description: "Ethereum खात्यांचे स्पष्टीकरण – त्यांची डेटा संरचना आणि की पेअर क्रिप्टोग्राफीशी असलेला त्यांचा संबंध." +lang: mr +--- + +Ethereum खाते हे एक ईथर (ETH) शिल्लक असलेले एक घटक आहे जे Ethereum वर संदेश पाठवू शकते. खाती वापरकर्ता-नियंत्रित किंवा स्मार्ट कॉन्ट्रॅक्ट म्हणून डिप्लॉय केलेली असू शकतात. + +## पूर्वतयारी {#prerequisites} + +तुम्हाला हे पान अधिक चांगल्या प्रकारे समजण्यास मदत व्हावी यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम आमचे [Ethereum ची ओळख](/developers/docs/intro-to-ethereum/) वाचा. + +## खात्याचे प्रकार {#types-of-account} + +Ethereum मध्ये दोन प्रकारचे खाती आहेत: + +- बाह्यतः-मालकीचे खाते (EOA) – प्रायव्हेट की असलेल्या कोणाकडूनही नियंत्रित. +- कॉन्ट्रॅक्ट खाते – नेटवर्कवर डिप्लॉय केलेला, कोडद्वारे नियंत्रित एक स्मार्ट कॉन्ट्रॅक्ट. [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) बद्दल जाणून घ्या + +दोन्ही प्रकारच्या खात्यांमध्ये खालील गोष्टी करण्याची क्षमता आहे: + +- ETH आणि टोकन मिळवणे, ठेवणे आणि पाठवणे +- डिप्लॉय केलेल्या स्मार्ट कॉन्ट्रॅक्ट्ससोबत संवाद साधणे + +### मुख्य फरक {#key-differences} + +**बाह्यतः-मालकीचे** + +- खाते तयार करण्यासाठी कोणताही खर्च येत नाही +- व्यवहार सुरू करू शकतात +- बाह्यतः-मालकीच्या खात्यांमधील व्यवहार फक्त ETH/टोकन हस्तांतरण असू शकतात +- की च्या क्रिप्टोग्राफिक जोडीने बनलेले: पब्लिक आणि प्रायव्हेट की जे खात्याच्या क्रियाकलापांवर नियंत्रण ठेवतात + +**कॉन्ट्रॅक्ट** + +- कॉन्ट्रॅक्ट तयार करण्यासाठी खर्च येतो कारण तुम्ही नेटवर्क स्टोरेज वापरता +- व्यवहार प्राप्त करण्याच्या प्रतिसादातच संदेश पाठवू शकतात +- बाह्य खात्यातून कॉन्ट्रॅक्ट खात्यातील व्यवहार कोड ट्रिगर करू शकतात, जे टोकन हस्तांतरित करणे किंवा नवीन कॉन्ट्रॅक्ट तयार करणे यासारख्या अनेक विविध क्रिया कार्यान्वित करू शकतात +- कॉन्ट्रॅक्ट खात्यांना प्रायव्हेट की नसतात. त्याऐवजी, ते स्मार्ट कॉन्ट्रॅक्ट कोडच्या लॉजिकद्वारे नियंत्रित केले जातात + +## खात्याचे परीक्षण {#an-account-examined} + +Ethereum खात्यांमध्ये चार फील्ड्स असतात: + +- `nonce` – एक काउंटर जो बाह्यतः-मालकीच्या खात्यातून पाठवलेल्या व्यवहारांची संख्या किंवा कॉन्ट्रॅक्ट खात्याद्वारे तयार केलेल्या कॉन्ट्रॅक्ट्सची संख्या दर्शवतो. प्रत्येक खात्यासाठी दिलेल्या नॉन्ससह फक्त एकच व्यवहार कार्यान्वित केला जाऊ शकतो, ज्यामुळे रिप्ले हल्ल्यांपासून संरक्षण होते, ज्यात स्वाक्षरी केलेले व्यवहार वारंवार प्रसारित केले जातात आणि पुन्हा कार्यान्वित केले जातात. +- `balance` – या ॲड्रेसच्या मालकीची वेईची (wei) संख्या. वेई हे ETH चे एक मूल्यमापन आहे आणि प्रति ETH मध्ये 1e+18 वेई असतात. +- `codeHash` – हा हॅश Ethereum व्हर्च्युअल मशीन (EVM) वरील खात्याच्या _कोड_ला सूचित करतो. कॉन्ट्रॅक्ट खात्यांमध्ये प्रोग्राम केलेले कोड फ्रॅगमेंट्स असतात जे विविध ऑपरेशन्स करू शकतात. जर खात्याला मेसेज कॉल आला तर हा EVM कोड कार्यान्वित होतो. इतर खाते फील्ड्सच्या विपरीत, तो बदलला जाऊ शकत नाही. असे सर्व कोड फ्रॅगमेंट्स नंतर पुनर्प्राप्त करण्यासाठी त्यांच्या संबंधित हॅश अंतर्गत स्टेट डेटाबेसमध्ये समाविष्ट केलेले असतात. हे हॅश मूल्य codeHash म्हणून ओळखले जाते. बाह्यतः मालकीच्या खात्यांसाठी, codeHash फील्ड हे एका रिकाम्या स्ट्रिंगचा हॅश असते. +- `storageRoot` – कधीकधी स्टोरेज हॅश म्हणून ओळखले जाते. [Merkle Patricia Trie](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) च्या रूट नोडचा 256-बिट हॅश जो खात्याची स्टोरेज सामग्री एन्कोड करतो (256-बिट पूर्णांक मूल्यांमधील मॅपिंग), 256-बिट पूर्णांक कीच्या केccak 256-बिट हॅशपासून RLP-एनकोडेड 256-बिट पूर्णांक मूल्यांपर्यंतच्या मॅपिंगच्या रूपात ट्रायमध्ये एन्कोड केलेला आहे. ही ट्राय या खात्याच्या स्टोरेज सामग्रीचा हॅश एन्कोड करते आणि डीफॉल्टनुसार रिकामी असते. + +![खात्याची रचना दर्शवणारे रेखाचित्र](./accounts.png) +_[Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रुपांतरित केलेले रेखाचित्र_ + +## बाह्यतः-मालकीची खाती आणि की पेअर्स {#externally-owned-accounts-and-key-pairs} + +एक खाते क्रिप्टोग्राफिक कीच्या जोडीने बनलेले असते: पब्लिक आणि प्रायव्हेट. ते हे सिद्ध करण्यास मदत करतात की व्यवहारावर प्रत्यक्षात प्रेषकाने स्वाक्षरी केली होती आणि बनावटगिरी टाळतात. तुमची प्रायव्हेट की तुम्ही व्यवहारांवर स्वाक्षरी करण्यासाठी वापरता, त्यामुळे ती तुम्हाला तुमच्या खात्याशी संबंधित निधीवर ताबा देते. तुम्ही कधीही खऱ्या अर्थाने क्रिप्टोकरन्सी ठेवत नाही, तुम्ही प्रायव्हेट की ठेवता – निधी नेहमी Ethereum च्या लेजरवर असतो. + +हे दुर्भावनापूर्ण घटकांना बनावट व्यवहार प्रसारित करण्यापासून प्रतिबंधित करते, कारण तुम्ही नेहमी व्यवहाराच्या प्रेषकाची पडताळणी करू शकता. + +जर एलिसला तिच्या स्वतःच्या खात्यातून बॉबच्या खात्यात ईथर पाठवायचे असेल, तर एलिसला एक व्यवहार विनंती तयार करून ती पडताळणीसाठी नेटवर्कवर पाठवावी लागेल. Ethereum चा पब्लिक-की क्रिप्टोग्राफीचा वापर हे सुनिश्चित करतो की एलिस हे सिद्ध करू शकते की तिनेच मूळ व्यवहार विनंती सुरू केली होती. क्रिप्टोग्राफिक यंत्रणेशिवाय, एक दुर्भावनापूर्ण प्रतिस्पर्धी, ईव्ह, सहजपणे सार्वजनिकरित्या “एलिसच्या खात्यातून ईव्हच्या खात्यात 5 ETH पाठवा,” अशी दिसणारी विनंती प्रसारित करू शकेल आणि ती एलिसकडून आलेली नाही हे कोणीही पडताळू शकणार नाही. + +## खाते निर्मिती {#account-creation} + +जेव्हा तुम्हाला खाते तयार करायचे असते, तेव्हा बहुतेक लायब्ररी तुमच्यासाठी एक यादृच्छिक (random) प्रायव्हेट की तयार करतात. + +एक प्रायव्हेट की 64 हेक्स वर्णांनी बनलेली असते आणि ती पासवर्डने एनक्रिप्ट केली जाऊ शकते. + +उदाहरण: + +`fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415f` + +पब्लिक की [एलिप्टिक कर्व्ह डिजिटल सिग्नेचर अल्गोरिदम](https://wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) वापरून प्रायव्हेट की पासून तयार केली जाते. पब्लिक कीच्या केccak-256 हॅशचे शेवटचे 20 बाइट्स घेऊन आणि सुरुवातीला `0x` जोडून तुम्हाला तुमच्या खात्यासाठी एक पब्लिक ॲड्रेस मिळतो. + +याचा अर्थ बाह्यतः मालकीच्या खात्याला (EOA) 42-वर्णांचा ॲड्रेस असतो (20-बाइट सेगमेंट जो 40 हेक्साडेसिमल वर्ण अधिक `0x` उपसर्ग आहे). + +उदाहरण: + +`0x5e97870f263700f46aa00d967821199b9bc5a120` + +पुढील उदाहरण नवीन खाते तयार करण्यासाठी [Clef](https://geth.ethereum.org/docs/tools/clef/introduction) नावाचे साइनिंग टूल कसे वापरायचे हे दाखवते. Clef हे एक खाते व्यवस्थापन आणि साइनिंग टूल आहे जे Ethereum क्लायंट, [Geth](https://geth.ethereum.org) सोबत येते. `clef newaccount` कमांड एक नवीन की पेअर तयार करते आणि त्यांना एनक्रिप्टेड कीस्टोअरमध्ये सेव्ह करते. + +``` +> clef newaccount --keystore + +कृपया तयार करायच्या नवीन खात्यासाठी पासवर्ड टाका: +> + +------------ +INFO [10-28|16:19:09.156] तुमची नवीन की तयार झाली आहे address=0x5e97870f263700f46aa00d967821199b9bc5a120 +WARN [10-28|16:19:09.306] कृपया तुमच्या की फाईलचा बॅकअप घ्या path=/home/user/go-ethereum/data/keystore/UTC--2022-10-28T15-19-08.000825927Z--5e97870f263700f46aa00d967821199b9bc5a120 +WARN [10-28|16:19:09.306] कृपया तुमचा पासवर्ड लक्षात ठेवा! +तयार केलेले खाते 0x5e97870f263700f46aa00d967821199b9bc5a120 +``` + +[Geth डॉक्युमेंटेशन](https://geth.ethereum.org/docs) + +तुमच्या प्रायव्हेट की पासून नवीन पब्लिक की मिळवणे शक्य आहे, परंतु तुम्ही पब्लिक की पासून प्रायव्हेट की मिळवू शकत नाही. तुमच्या प्रायव्हेट की सुरक्षित ठेवणे आणि नावाप्रमाणेच, **खाजगी (PRIVATE)** ठेवणे अत्यावश्यक आहे. + +संदेश आणि व्यवहारांवर स्वाक्षरी करण्यासाठी तुम्हाला एका प्रायव्हेट कीची आवश्यकता आहे, जी एक स्वाक्षरी आउटपुट करते. इतर नंतर ती स्वाक्षरी घेऊन तुमची पब्लिक की मिळवू शकतात, ज्यामुळे संदेशाचा लेखक कोण आहे हे सिद्ध होते. तुमच्या ॲप्लिकेशनमध्ये, नेटवर्कवर व्यवहार पाठवण्यासाठी तुम्ही जावास्क्रिप्ट लायब्ररी वापरू शकता. + +## कॉन्ट्रॅक्ट खाती {#contract-accounts} + +कॉन्ट्रॅक्ट खात्यांना देखील 42 वर्णांचा हेक्साडेसिमल ॲड्रेस असतो: + +उदाहरण: + +`0x06012c8cf97bead5deae237070f9587f8e7a266d` + +जेव्हा एखादा कॉन्ट्रॅक्ट Ethereum ब्लॉकचेनवर डिप्लॉय केला जातो तेव्हा सहसा कॉन्ट्रॅक्ट ॲड्रेस दिला जातो. हा ॲड्रेस निर्मात्याच्या ॲड्रेसवरून आणि त्या ॲड्रेसवरून पाठवलेल्या व्यवहारांच्या संख्येवरून (”नॉन्स”) येतो. + +## व्हॅलिडेटर की {#validators-keys} + +Ethereum मध्ये आणखी एका प्रकारची की आहे, जी Ethereum प्रूफ-ऑफ-वर्क वरून प्रूफ-ऑफ-स्टेक आधारित कन्सेंससकडे वळले तेव्हा सादर केली गेली. या 'BLS' की आहेत आणि त्या व्हॅलिडेटर्सना ओळखण्यासाठी वापरल्या जातात. नेटवर्कला कन्सेंससवर येण्यासाठी आवश्यक असलेली बँडविड्थ कमी करण्यासाठी या की कार्यक्षमतेने एकत्रित केल्या जाऊ शकतात. या की एग्रीगेशनशिवाय, एका व्हॅलिडेटरसाठी किमान स्टेक खूप जास्त असेल. + +[व्हॅलिडेटर कीबद्दल अधिक माहिती](/developers/docs/consensus-mechanisms/pos/keys/). + +## वॉलेट्सवर एक टीप {#a-note-on-wallets} + +खाते म्हणजे वॉलेट नाही. वॉलेट हे एक इंटरफेस किंवा ॲप्लिकेशन आहे जे तुम्हाला तुमच्या Ethereum खात्याशी संवाद साधू देते, मग ते बाह्यतः-मालकीचे खाते असो किंवा कॉन्ट्रॅक्ट खाते. + +## एक दृश्यात्मक डेमो {#a-visual-demo} + +ऑस्टिन तुम्हाला हॅश फंक्शन्स आणि की पेअर्स समजावून सांगताना पहा. + + + + + +## पुढील वाचन {#further-reading} + +- [Ethereum खाती समजून घेणे](https://info.etherscan.com/understanding-ethereum-accounts/) - etherscan + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) +- [व्यवहार](/developers/docs/transactions/) diff --git a/public/content/translations/mr/developers/docs/apis/backend/index.md b/public/content/translations/mr/developers/docs/apis/backend/index.md new file mode 100644 index 00000000000..7a262f3d611 --- /dev/null +++ b/public/content/translations/mr/developers/docs/apis/backend/index.md @@ -0,0 +1,211 @@ +--- +title: "बॅकएंड API लायब्ररीज" +description: "इथेरियम क्लायंट APIs ची ओळख, जी तुम्हाला तुमच्या ॲप्लिकेशनमधून ब्लॉकचेनसोबत संवाद साधू देते." +lang: mr +--- + +एखाद्या सॉफ्टवेअर ॲप्लिकेशनला इथेरियम ब्लॉकचेनशी संवाद साधण्यासाठी (म्हणजे, ब्लॉकचेन डेटा वाचणे आणि/किंवा नेटवर्कवर व्यवहार पाठवणे), त्याला इथेरियम नोडशी कनेक्ट करणे आवश्यक आहे. + +या उद्देशासाठी, प्रत्येक इथेरियम क्लायंट [JSON-RPC](/developers/docs/apis/json-rpc/) तपशीलाची अंमलबजावणी करतो, त्यामुळे [पद्धतींचा](/developers/docs/apis/json-rpc/#json-rpc-methods) एकसमान संच उपलब्ध आहे ज्यावर ॲप्लिकेशन्स अवलंबून राहू शकतात. + +जर तुम्हाला इथेरियम नोडशी कनेक्ट करण्यासाठी विशिष्ट प्रोग्रामिंग भाषा वापरायची असेल, तर इकोसिस्टममध्ये अनेक सोयीस्कर लायब्ररीज आहेत ज्या हे खूप सोपे करतात. या लायब्ररीजच्या मदतीने, डेव्हलपर इथेरियमशी संवाद साधणाऱ्या JSON-RPC विनंत्या (पडद्याआड) सुरू करण्यासाठी सहज, एका ओळीच्या पद्धती लिहू शकतात. + +## पूर्वतयारी {#prerequisites} + +[इथेरियम स्टॅक](/developers/docs/ethereum-stack/) आणि [इथेरियम क्लायंट](/developers/docs/nodes-and-clients/) समजून घेणे उपयुक्त ठरू शकते. + +## लायब्ररी का वापरावी? {#why-use-a-library} + +या लायब्ररीज इथेरियम नोडशी थेट संवाद साधण्यातील बरीचशी गुंतागुंत दूर करतात. त्या उपयुक्तता कार्ये (utility functions) देखील प्रदान करतात (उदा. ETH चे Gwei मध्ये रूपांतर करणे), त्यामुळे एक डेव्हलपर म्हणून तुम्ही इथेरियम क्लायंटच्या गुंतागुंतीमध्ये कमी वेळ घालवून तुमच्या ॲप्लिकेशनच्या अद्वितीय कार्यक्षमतेवर अधिक लक्ष केंद्रित करू शकता. + +## उपलब्ध लायब्ररीज {#available-libraries} + +### पायाभूत सुविधा आणि नोड सेवा {#infrastructure-and-node-services} + +**Alchemy -** **_Ethereum डेव्हलपमेंट प्लॅटफॉर्म._** + +- [alchemy.com](https://www.alchemy.com/) +- [दस्तऐवजीकरण](https://www.alchemy.com/docs/) +- [GitHub](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**All That Node -** **_Node-as-a-Service._** + +- [All That Node.com](https://www.allthatnode.com/) +- [दस्तऐवजीकरण](https://docs.allthatnode.com) +- [Discord](https://discord.gg/GmcdVEUbJM) + +**Blast by Bware Labs -** **_इथेरियम मेननेट आणि टेस्टनेटसाठी विकेंद्रित APIs._** + +- [blastapi.io](https://blastapi.io/) +- [दस्तऐवजीकरण](https://docs.blastapi.io) +- [Discord](https://discord.gg/SaRqmRUjjQ) + +**BlockPi -** **_अधिक कार्यक्षम आणि जलद RPC सेवा प्रदान करते_** + +- [blockpi.io](https://blockpi.io/) +- [दस्तऐवजीकरण](https://docs.blockpi.io/) +- [GitHub](https://github.com/BlockPILabs) +- [Discord](https://discord.com/invite/xTvGVrGVZv) + +**Cloudflare इथेरियम गेटवे.** + +- [cloudflare-eth.com](https://www.cloudflare.com/application-services/products/web3/) + +**Etherscan - ब्लॉक एक्सप्लोरर आणि ट्रान्झॅक्शन APIs** + +- [दस्तऐवजीकरण](https://docs.etherscan.io/) + +**Blockscout - ओपन सोर्स ब्लॉक एक्सप्लोरर** + +- [दस्तऐवजीकरण](https://docs.blockscout.com/) + +**GetBlock-** **_Web3 विकासासाठी सेवा म्हणून ब्लॉकचेन_** + +- [GetBlock.io](https://getblock.io/) +- [दस्तऐवजीकरण](https://docs.getblock.io/) + +**Infura -** **_सेवा म्हणून इथेरियम API._** + +- [infura.io](https://infura.io) +- [दस्तऐवजीकरण](https://docs.infura.io/api) +- [GitHub](https://github.com/INFURA) + +**Node RPC - _किफायतशीर EVM JSON-RPC प्रदाता_** + +- [noderpc.xyz](https://www.noderpc.xyz/) +- [दस्तऐवजीकरण](https://docs.noderpc.xyz/node-rpc) + +**NOWNodes - _पूर्ण नोड्स आणि ब्लॉक एक्सप्लोरर्स._** + +- [NOWNodes.io](https://nownodes.io/) +- [दस्तऐवजीकरण](https://nownodes.gitbook.io/documentation) + +**QuickNode -** **_सेवा म्हणून ब्लॉकचेन पायाभूत सुविधा._** + +- [quicknode.com](https://quicknode.com) +- [दस्तऐवजीकरण](https://www.quicknode.com/docs/welcome) +- [Discord](https://discord.gg/quicknode) + +**Rivet -** **_ओपन-सोर्स सॉफ्टवेअरद्वारे समर्थित सेवा म्हणून इथेरियम आणि इथेरियम क्लासिक APIs._** + +- [rivet.cloud](https://rivet.cloud) +- [दस्तऐवजीकरण](https://rivet.cloud/docs/) +- [GitHub](https://github.com/openrelayxyz/ethercattle-deployment) + +**Zmok -** **_JSON-RPC/WebSockets API म्हणून वेग-केंद्रित इथेरियम नोड्स._** + +- [zmok.io](https://zmok.io/) +- [GitHub](https://github.com/zmok-io) +- [दस्तऐवजीकरण](https://docs.zmok.io/) +- [Discord](https://discord.gg/fAHeh3ka6s) + +### विकास साधने {#development-tools} + +**ethers-kt -** **_EVM-आधारित ब्लॉकचेनसाठी Async, उच्च-कार्यक्षमता असलेली Kotlin/Java/Android लायब्ररी._** + +- [GitHub](https://github.com/Kr1ptal/ethers-kt) +- [उदाहरणे](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Nethereum -** **_ब्लॉकचेनसाठी एक ओपन सोर्स .NET इंटिग्रेशन लायब्ररी._** + +- [GitHub](https://github.com/Nethereum/Nethereum) +- [दस्तऐवजीकरण](http://docs.nethereum.com/en/latest/) +- [Discord](https://discord.com/invite/jQPrR58FxX) + +**Python टूलिंग -** **_Python द्वारे इथेरियमशी संवाद साधण्यासाठी विविध लायब्ररीज._** + +- [py.ethereum.org](https://snakecharmers.ethereum.org/) +- [web3.py GitHub](https://github.com/ethereum/web3.py) +- [web3.py चॅट](https://gitter.im/ethereum/web3.py) + +**Tatum -** **_अंतिम ब्लॉकचेन विकास प्लॅटफॉर्म._** + +- [Tatum](https://tatum.io/) +- [GitHub](https://github.com/tatumio/) +- [दस्तऐवजीकरण](https://docs.tatum.io/) +- [Discord](https://discord.gg/EDmW3kjTC9) + +**web3j -** **_इथेरियमसाठी एक Java/Android/Kotlin/Scala इंटिग्रेशन लायब्ररी._** + +- [GitHub](https://github.com/web3j/web3j) +- [डॉक्स](https://docs.web3j.io/) +- [Gitter](https://gitter.im/web3j/web3j) + +### ब्लॉकचेन सेवा {#blockchain-services} + +**BlockCypher -** **_इथेरियम वेब APIs._** + +- [blockcypher.com](https://www.blockcypher.com/) +- [दस्तऐवजीकरण](https://www.blockcypher.com/dev/ethereum/) + +**Chainbase -** **_इथेरियमसाठी सर्व-समावेशक वेब3 डेटा पायाभूत सुविधा._** + +- [chainbase.com](https://chainbase.com/) +- [दस्तऐवजीकरण](https://docs.chainbase.com/) +- [Discord](https://discord.gg/Wx6qpqz4AF) + +**Chainstack -** **_सेवा म्हणून लवचिक आणि समर्पित इथेरियम नोड्स._** + +- [chainstack.com](https://chainstack.com) +- [दस्तऐवजीकरण](https://docs.chainstack.com/) +- [इथेरियम API संदर्भ](https://docs.chainstack.com/reference/ethereum-getting-started) + +**Coinbase Cloud Node -** **_ब्लॉकचेन पायाभूत सुविधा API._** + +- [Coinbase Cloud Node](https://www.coinbase.com/developer-platform) +- [दस्तऐवजीकरण](https://docs.cdp.coinbase.com/) + +**DataHub by Figment -** **_इथेरियम मेननेट आणि टेस्टनेटसह वेब3 API सेवा._** + +- [DataHub](https://www.figment.io/) +- [दस्तऐवजीकरण](https://docs.figment.io/) + +**Moralis -** **_एंटरप्राइझ-ग्रेड EVM API प्रदाता._** + +- [moralis.io](https://moralis.io) +- [दस्तऐवजीकरण](https://docs.moralis.io/) +- [GitHub](https://github.com/MoralisWeb3) +- [Discord](https://moralis.io/joindiscord/) +- [फोरम](https://forum.moralis.io/) + +**NFTPort -** **_इथेरियम डेटा आणि मिंट APIs._** + +- [nftport.xyz](https://www.nftport.xyz/) +- [दस्तऐवजीकरण](https://docs.nftport.xyz/) +- [GitHub](https://github.com/nftport/) +- [Discord](https://discord.com/invite/K8nNrEgqhE) + +**Tokenview -** **_सर्वसाधारण मल्टी-क्रिप्टो ब्लॉकचेन APIs प्लॅटफॉर्म._** + +- [services.tokenview.io](https://services.tokenview.io/) +- [दस्तऐवजीकरण](https://services.tokenview.io/docs?type=api) +- [GitHub](https://github.com/Tokenview) + +**Watchdata -** **_इथेरियम ब्लॉकचेनवर साधा आणि विश्वासार्ह API ॲक्सेस प्रदान करते._** + +- [Watchdata](https://watchdata.io/) +- [दस्तऐवजीकरण](https://docs.watchdata.io/) +- [Discord](https://discord.com/invite/TZRJbZ6bdn) + +**Covalent -** **_२००+ चेन्ससाठी समृद्ध ब्लॉकचेन APIs._** + +- [covalenthq.com](https://www.covalenthq.com/) +- [दस्तऐवजीकरण](https://www.covalenthq.com/docs/api/) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) +- [डेव्हलपमेंट फ्रेमवर्क्स](/developers/docs/frameworks/) + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [JavaScript मध्ये इथेरियम ब्लॉकचेन वापरण्यासाठी Web3js सेट अप करा](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– तुमच्या प्रोजेक्टमध्ये web3.js सेट अप करण्याच्या सूचना._ +- [JavaScript मधून स्मार्ट कराराला कॉल करणे](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– DAI टोकन वापरून, JavaScript वापरून कॉन्ट्रॅक्ट्स फंक्शन कसे कॉल करायचे ते पहा._ diff --git a/public/content/translations/mr/developers/docs/apis/javascript/index.md b/public/content/translations/mr/developers/docs/apis/javascript/index.md new file mode 100644 index 00000000000..f390cbca232 --- /dev/null +++ b/public/content/translations/mr/developers/docs/apis/javascript/index.md @@ -0,0 +1,289 @@ +--- +title: "JavaScript API लायब्ररी" +description: "JavaScript क्लायंट लायब्ररीचा परिचय जे तुम्हाला तुमच्या ॲप्लिकेशनमधून ब्लॉकचेनशी संवाद साधू देतात." +lang: mr +--- + +वेब ॲपला Ethereum ब्लॉकचेनशी संवाद साधण्यासाठी (म्हणजे, ब्लॉकचेन डेटा वाचणे आणि/किंवा नेटवर्कवर व्यवहार पाठवणे), ते Ethereum नोडशी कनेक्ट करणे आवश्यक आहे. + +या उद्देशासाठी, प्रत्येक Ethereum क्लायंट [JSON-RPC](/developers/docs/apis/json-rpc/) तपशील लागू करतो, त्यामुळे [पद्धतींचा](/developers/docs/apis/json-rpc/#json-rpc-methods) एकसमान संच आहे ज्यावर ॲप्लिकेशन्स अवलंबून राहू शकतात. + +तुम्हाला Ethereum नोडशी कनेक्ट करण्यासाठी JavaScript वापरायचे असल्यास, व्हॅनिला JavaScript वापरणे शक्य आहे परंतु इकोसिस्टममध्ये अनेक सोयीस्कर लायब्ररी अस्तित्वात आहेत ज्यामुळे हे बरेच सोपे होते. या लायब्ररीजच्या मदतीने, डेव्हलपर इथेरियमशी संवाद साधणाऱ्या JSON-RPC विनंत्या (पडद्याआड) सुरू करण्यासाठी सहज, एका ओळीच्या पद्धती लिहू शकतात. + +कृपया लक्षात घ्या की [द मर्ज](/roadmap/merge/) पासून, Ethereum सॉफ्टवेअरचे दोन जोडलेले भाग - एक एक्झिक्युशन क्लायंट आणि एक कन्सेंसस क्लायंट - नोड चालवण्यासाठी आवश्यक आहेत. कृपया खात्री करा की तुमच्या नोडमध्ये एक्झिक्युशन आणि कन्सेंसस क्लायंट दोन्ही समाविष्ट आहेत. जर तुमचा नोड तुमच्या स्थानिक मशीनवर नसेल (उदा. तुमचा नोड AWS इंस्टन्सवर चालत असेल) तर ट्यूटोरियलमधील IP पत्ते त्यानुसार अपडेट करा. [नोड चालवण्यावर](/developers/docs/nodes-and-clients/run-a-node/) अधिक माहितीसाठी कृपया आमचे पेज पहा. + +## पूर्वतयारी {#prerequisites} + +JavaScript समजून घेण्याबरोबरच, [Ethereum स्टॅक](/developers/docs/ethereum-stack/) आणि [Ethereum क्लायंट](/developers/docs/nodes-and-clients/) समजून घेणे उपयुक्त ठरू शकते. + +## लायब्ररी का वापरावी? {#why-use-a-library} + +या लायब्ररीज इथेरियम नोडशी थेट संवाद साधण्यातील बरीचशी गुंतागुंत दूर करतात. त्या उपयुक्तता कार्ये (utility functions) देखील प्रदान करतात (उदा. ETH चे Gwei मध्ये रूपांतर करणे), त्यामुळे एक डेव्हलपर म्हणून तुम्ही इथेरियम क्लायंटच्या गुंतागुंतीमध्ये कमी वेळ घालवून तुमच्या ॲप्लिकेशनच्या अद्वितीय कार्यक्षमतेवर अधिक लक्ष केंद्रित करू शकता. + +## लायब्ररी वैशिष्ट्ये {#library-features} + +### Ethereum नोड्सशी कनेक्ट करा {#connect-to-ethereum-nodes} + +प्रोव्हायडर वापरून, या लायब्ररी तुम्हाला JSON-RPC, INFURA, Etherscan, Alchemy किंवा MetaMask द्वारे Ethereum शी कनेक्ट करण्याची आणि त्याचा डेटा वाचण्याची परवानगी देतात. + +> **चेतावणी:** Web3.js 4 मार्च 2025 रोजी संग्रहित केले गेले. [घोषणा वाचा](https://blog.chainsafe.io/web3-js-sunset/). नवीन प्रकल्पांसाठी [ethers.js](https://ethers.org) किंवा [viem](https://viem.sh) सारख्या पर्यायी लायब्ररी वापरण्याचा विचार करा. + +**Ethers उदाहरण** + +```js +// ब्राउझरप्रोव्हायडर एक मानक Web3 प्रोव्हायडरला रॅप करतो, जो आहे +// जे MetaMask प्रत्येक पेजमध्ये window.ethereum म्हणून इंजेक्ट करते +const provider = new ethers.BrowserProvider(window.ethereum) + +// MetaMask प्लगइन देखील व्यवहार साइन करण्याची परवानगी देतो +// ब्लॉकचेनमध्ये इथर पाठवण्यासाठी आणि स्थिती बदलण्यासाठी पैसे देण्यासाठी. +// यासाठी, आम्हाला खाते साइनरची आवश्यकता आहे... +const signer = provider.getSigner() +``` + +**Web3js उदाहरण** + +```js +var web3 = new Web3("http://localhost:8545") +// किंवा +var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")) + +// प्रोव्हायडर बदला +web3.setProvider("ws://localhost:8546") +// किंवा +web3.setProvider(new Web3.providers.WebsocketProvider("ws://localhost:8546")) + +// node.js मध्ये IPC प्रोव्हायडर वापरणे +var net = require("net") +var web3 = new Web3("/Users/myuser/Library/Ethereum/geth.ipc", net) // mac os पाथ +// किंवा +var web3 = new Web3( + new Web3.providers.IpcProvider("/Users/myuser/Library/Ethereum/geth.ipc", net) +) // mac os पाथ +// विंडोजवर पाथ आहे: "\\\\.\\pipe\\geth.ipc" +// लिनक्सवर पाथ आहे: "/users/myuser/.ethereum/geth.ipc" +``` + +एकदा सेट झाल्यावर तुम्ही ब्लॉकचेनला यासाठी क्वेरी करू शकाल: + +- ब्लॉक क्रमांक +- गॅस अंदाज +- स्मार्ट कॉन्ट्रॅक्ट इव्हेंट्स +- नेटवर्क आयडी +- आणि बरेच काही... + +### वॉलेट कार्यक्षमता {#wallet-functionality} + +या लायब्ररी तुम्हाला वॉलेट तयार करण्यासाठी, की व्यवस्थापित करण्यासाठी आणि व्यवहार साइन करण्यासाठी कार्यक्षमता देतात. + +येथे Ethers मधील एक उदाहरण आहे + +```js +// मेमोनिकमधून वॉलेट इंस्टन्स तयार करा... +mnemonic = + "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol" +walletMnemonic = Wallet.fromPhrase(mnemonic) + +// ...किंवा खासगी की मधून +walletPrivateKey = new Wallet(walletMnemonic.privateKey) + +walletMnemonic.address === walletPrivateKey.address +// खरे + +// साइनर API नुसार पत्ता प्रॉमिस म्हणून +walletMnemonic.getAddress() +// { Promise: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' } + +// वॉलेटचा पत्ता समकालिकपणे देखील उपलब्ध आहे +walletMnemonic.address +// '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1' + +// अंतर्गत क्रिप्टोग्राफिक घटक +walletMnemonic.privateKey +// '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db' +walletMnemonic.publicKey +// '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64' + +// वॉलेट मेमोनिक +walletMnemonic.mnemonic +// { +// locale: 'en', +// path: 'm/44\'/60\'/0\'/0/0', +// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol' +// } + +// टीप: खासगी की सह तयार केलेल्या वॉलेटमध्ये +// मेमोनिक नसते (व्युत्पन्नता ते प्रतिबंधित करते) +walletPrivateKey.mnemonic +// null + +// संदेश साइन करणे +walletMnemonic.signMessage("Hello World") +// { Promise: '0x14280e5885a19f60e536de50097e96e3738c7acae4e9e62d67272d794b8127d31c03d9cd59781d4ee31fb4e1b893bd9b020ec67dfa65cfb51e2bdadbb1de26d91c' } + +tx = { + to: "0x8ba1f109551bD432803012645Ac136ddd64DBA72", + value: utils.parseEther("1.0"), +} + +// व्यवहार साइन करणे +walletMnemonic.signTransaction(tx) +// { Promise: '0xf865808080948ba1f109551bd432803012645ac136ddd64dba72880de0b6b3a7640000801ca0918e294306d177ab7bd664f5e141436563854ebe0a3e523b9690b4922bbb52b8a01181612cec9c431c4257a79b8c9f0c980a2c49bb5a0e6ac52949163eeb565dfc' } + +// कनेक्ट पद्धत नवीन इंस्टन्स परत करते +// प्रोव्हायडरशी कनेक्ट केलेले वॉलेट +wallet = walletMnemonic.connect(provider) + +// नेटवर्कला क्वेरी करणे +wallet.getBalance() +// { Promise: { BigNumber: "42" } } +wallet.getTransactionCount() +// { Promise: 0 } + +// इथर पाठवणे +wallet.sendTransaction(tx) +``` + +[संपूर्ण दस्तऐवज वाचा](https://docs.ethers.io/v5/api/signer/#Wallet) + +एकदा सेट झाल्यावर तुम्ही हे करू शकाल: + +- खाती तयार करा +- व्यवहार पाठवा +- व्यवहारांवर सही करा +- आणि बरेच काही... + +### स्मार्ट कॉन्ट्रॅक्ट फंक्शन्सशी संवाद साधा {#interact-with-smart-contract-functions} + +JavaScript क्लायंट लायब्ररी तुमच्या ॲप्लिकेशनला संकलित कॉन्ट्रॅक्टचा ॲप्लिकेशन बायनरी इंटरफेस (ABI) वाचून स्मार्ट कॉन्ट्रॅक्ट फंक्शन्स कॉल करण्याची परवानगी देतात. + +ABI मूलत: कॉन्ट्रॅक्टची फंक्शन्स JSON स्वरूपात स्पष्ट करते आणि तुम्हाला ते सामान्य JavaScript ऑब्जेक्टप्रमाणे वापरण्याची परवानगी देते. + +म्हणून खालील Solidity कॉन्ट्रॅक्ट: + +```solidity +contract Test { + uint a; + address d = 0x12345678901234567890123456789012; + + constructor(uint testInt) { a = testInt;} + + event Event(uint indexed b, bytes32 c); + + event Event2(uint indexed b, bytes32 c); + + function foo(uint b, bytes32 c) returns(address) { + Event(b, c); + return d; + } +} +``` + +याचा परिणाम खालील JSON मध्ये होईल: + +```json +[{ + "type":"constructor", + "payable":false, + "stateMutability":"nonpayable" + "inputs":[{"name":"testInt","type":"uint256"}], + },{ + "type":"function", + "name":"foo", + "constant":false, + "payable":false, + "stateMutability":"nonpayable", + "inputs":[{"name":"b","type":"uint256"}, {"name":"c","type":"bytes32"}], + "outputs":[{"name":"","type":"address"}] + },{ + "type":"event", + "name":"Event", + "inputs":[{"indexed":true,"name":"b","type":"uint256"}, {"indexed":false,"name":"c","type":"bytes32"}], + "anonymous":false + },{ + "type":"event", + "name":"Event2", + "inputs":[{"indexed":true,"name":"b","type":"uint256"},{"indexed":false,"name":"c","type":"bytes32"}], + "anonymous":false +}] +``` + +याचा अर्थ तुम्ही हे करू शकता: + +- स्मार्ट कॉन्ट्रॅक्टला व्यवहार पाठवा आणि त्याची पद्धत कार्यान्वित करा +- EVM मध्ये कार्यान्वित केल्यावर पद्धतीच्या अंमलबजावणीसाठी किती गॅस लागेल याचा अंदाज घेण्यासाठी कॉल करा +- कॉन्ट्रॅक्ट तैनात करा +- आणि बरेच काही... + +### उपयुक्तता फंक्शन्स {#utility-functions} + +युटिलिटी फंक्शन्स तुम्हाला सुलभ शॉर्टकट देतात ज्यामुळे Ethereum सह बिल्डिंग थोडे सोपे होते. + +ETH मूल्ये डीफॉल्टनुसार Wei मध्ये असतात. १ ETH = १,०००,०००,०००,०००,०००,००० WEI – याचा अर्थ तुम्ही खूप मोठ्या संख्यांशी व्यवहार करत आहात! `web3.utils.toWei` तुमच्यासाठी इथरला Wei मध्ये रूपांतरित करते. + +आणि ethers मध्ये ते असे दिसते: + +```js +// खात्याची शिल्लक मिळवा (पत्त्याद्वारे किंवा ENS नावाद्वारे) +balance = await provider.getBalance("ethers.eth") +// { BigNumber: "2337132817842795605" } + +// अनेकदा तुम्हाला वापरकर्त्यासाठी आउटपुट स्वरूपित करण्याची आवश्यकता असेल +// जे (wei ऐवजी) इथरमध्ये मूल्ये पाहणे पसंत करतात +ethers.utils.formatEther(balance) +// '2.337132817842795605' +``` + +- [Web3js उपयुक्तता फंक्शन्स](https://docs.web3js.org/api/web3-utils) +- [Ethers उपयुक्तता फंक्शन्स](https://docs.ethers.org/v6/api/utils/) + +## उपलब्ध लायब्ररीज {#available-libraries} + +**Web3.js -** **_Ethereum JavaScript API._** + +- [दस्तऐवजीकरण](https://docs.web3js.org) +- [GitHub](https://github.com/ethereum/web3.js) + +**Ethers.js -** **_JavaScript आणि TypeScript मध्ये संपूर्ण Ethereum वॉलेट अंमलबजावणी आणि उपयुक्तता._** + +- [Ethers.js होम](https://ethers.org/) +- [दस्तऐवजीकरण](https://docs.ethers.io) +- [GitHub](https://github.com/ethers-io/ethers.js) + +**द ग्राफ -** **_Ethereum आणि IPFS डेटा अनुक्रमित करण्यासाठी आणि GraphQL वापरून क्वेरी करण्यासाठी एक प्रोटोकॉल._** + +- [द ग्राफ](https://thegraph.com) +- [ग्राफ एक्सप्लोरर](https://thegraph.com/explorer) +- [दस्तऐवजीकरण](https://thegraph.com/docs) +- [GitHub](https://github.com/graphprotocol) +- [डिस्कॉर्ड](https://thegraph.com/discord) + +**Alchemy SDK -** **_वर्धित apis सह Ethers.js भोवती रॅपर._** + +- [दस्तऐवजीकरण](https://www.alchemy.com/docs) +- [GitHub](https://github.com/alchemyplatform/alchemy-sdk-js) + +**viem -** **_Ethereum साठी TypeScript इंटरफेस._** + +- [दस्तऐवजीकरण](https://viem.sh) +- [GitHub](https://github.com/wagmi-dev/viem) + +**Drift -** **_अंगभूत कॅशिंग, हुक आणि चाचणी मॉक्ससह TypeScript मेटा-लायब्ररी._** + +- [दस्तऐवजीकरण](https://ryangoree.github.io/drift/) +- [GitHub](https://github.com/ryangoree/drift/) + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) +- [डेव्हलपमेंट फ्रेमवर्क्स](/developers/docs/frameworks/) + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [JavaScript मध्ये इथेरियम ब्लॉकचेन वापरण्यासाठी Web3js सेट अप करा](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) _– तुमच्या प्रोजेक्टमध्ये web3.js सेट अप करण्याच्या सूचना._ +- [JavaScript मधून स्मार्ट कराराला कॉल करणे](/developers/tutorials/calling-a-smart-contract-from-javascript/) _– DAI टोकन वापरून, JavaScript वापरून कॉन्ट्रॅक्ट्स फंक्शन कसे कॉल करायचे ते पहा._ +- [web3 आणि Alchemy वापरून व्यवहार पाठवणे](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) _– बॅकएंडमधून व्यवहार पाठवण्यासाठी चरण-दर-चरण मार्गदर्शन._ diff --git a/public/content/translations/mr/developers/docs/apis/json-rpc/index.md b/public/content/translations/mr/developers/docs/apis/json-rpc/index.md new file mode 100644 index 00000000000..8cd7097ef83 --- /dev/null +++ b/public/content/translations/mr/developers/docs/apis/json-rpc/index.md @@ -0,0 +1,1897 @@ +--- +title: JSON-RPC API +description: "Ethereum क्लायंटसाठी एक स्टेटलेस, हलके रिमोट प्रोसिजर कॉल (RPC) प्रोटोकॉल." +lang: mr +--- + +सॉफ्टवेअर ॲप्लिकेशनला Ethereum ब्लॉकचेनशी संवाद साधण्यासाठी - एकतर ब्लॉकचेन डेटा वाचून किंवा नेटवर्कवर व्यवहार पाठवून - त्याला Ethereum नोडशी कनेक्ट करणे आवश्यक आहे. + +या उद्देशासाठी, प्रत्येक [Ethereum क्लायंट](/developers/docs/nodes-and-clients/#execution-clients) [JSON-RPC स्पेसिफिकेशन](https://github.com/ethereum/execution-apis) लागू करतो, त्यामुळे विशिष्ट नोड किंवा क्लायंट अंमलबजावणीची पर्वा न करता ॲप्लिकेशन्स अवलंबून राहू शकतील अशा पद्धतींचा एकसमान संच आहे. + +[JSON-RPC](https://www.jsonrpc.org/specification) हे एक स्टेटलेस, हलके रिमोट प्रोसिजर कॉल (RPC) प्रोटोकॉल आहे. हे अनेक डेटा स्ट्रक्चर्स आणि त्यांच्या प्रक्रियेसंबंधीचे नियम परिभाषित करते. हे ट्रान्सपोर्ट ॲग्नोस्टिक आहे, कारण या संकल्पना एकाच प्रक्रियेत, सॉकेट्सवर, HTTP वर किंवा अनेक विविध मेसेज पासिंग वातावरणात वापरल्या जाऊ शकतात. हे डेटा फॉरमॅट म्हणून JSON (RFC 4627) वापरते. + +## क्लायंटची अंमलबजावणी {#client-implementations} + +JSON-RPC स्पेसिफिकेशन लागू करताना प्रत्येक Ethereum क्लायंट वेगवेगळ्या प्रोग्रामिंग भाषांचा वापर करू शकतो. विशिष्ट प्रोग्रामिंग भाषांशी संबंधित अधिक तपशीलांसाठी वैयक्तिक [क्लायंट डॉक्युमेंटेशन](/developers/docs/nodes-and-clients/#execution-clients) पहा. नवीनतम API सपोर्ट माहितीसाठी प्रत्येक क्लायंटचे डॉक्युमेंटेशन तपासण्याची आम्ही शिफारस करतो. + +## सुविधेसाठी लायब्ररीज {#convenience-libraries} + +तुम्ही JSON-RPC API द्वारे थेट Ethereum क्लायंटशी संवाद साधणे निवडू शकता, परंतु dapp डेव्हलपर्ससाठी अनेकदा सोपे पर्याय उपलब्ध असतात. JSON-RPC API च्या वर रॅपर्स प्रदान करण्यासाठी अनेक [JavaScript](/developers/docs/apis/javascript/#available-libraries) आणि [बॅकएंड API](/developers/docs/apis/backend/#available-libraries) लायब्ररीज अस्तित्वात आहेत. या लायब्ररीजसह, डेव्हलपर्स Ethereum शी संवाद साधणाऱ्या JSON-RPC रिक्वेस्ट्स (अंतर्गत) सुरू करण्यासाठी त्यांच्या आवडीच्या प्रोग्रामिंग भाषेत सहज, एक-ओळीच्या पद्धती लिहू शकतात. + +## कन्सेन्सस क्लायंट APIs {#consensus-clients} + +हे पृष्ठ प्रामुख्याने Ethereum एक्झिक्युशन क्लायंटद्वारे वापरल्या जाणार्‍या JSON-RPC API शी संबंधित आहे. तथापि, कन्सेन्सस क्लायंटकडे एक RPC API देखील आहे जे वापरकर्त्यांना नोडबद्दल माहिती विचारण्याची, बीकन ब्लॉक्स, बीकन स्टेट आणि इतर कन्सेन्सस-संबंधित माहिती थेट नोडवरून विनंती करण्याची परवानगी देते. हे API [बीकन API वेबपेज](https://ethereum.github.io/beacon-APIs/#/) वर डॉक्युमेंट केलेले आहे. + +नोडमधील इंटर-क्लायंट कम्युनिकेशनसाठी अंतर्गत API चा देखील वापर केला जातो - म्हणजेच, ते कन्सेन्सस क्लायंट आणि एक्झिक्युशन क्लायंटला डेटा स्वॅप करण्यास सक्षम करते. याला 'इंजिन API' म्हणतात आणि त्याचे स्पेक्स [GitHub](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) वर उपलब्ध आहेत. + +## एक्झिक्युशन क्लायंट स्पेक {#spec} + +[GitHub वर संपूर्ण JSON-RPC API स्पेक वाचा](https://github.com/ethereum/execution-apis). हे API [एक्झिक्युशन API वेबपेज](https://ethereum.github.io/execution-apis/) वर डॉक्युमेंट केलेले आहे आणि त्यात सर्व उपलब्ध पद्धती वापरून पाहण्यासाठी एक इन्स्पेक्टर समाविष्ट आहे. + +## संकेत {#conventions} + +### हेक्स व्हॅल्यू एन्कोडिंग {#hex-encoding} + +JSON वर दोन प्रमुख डेटा प्रकार पाठवले जातात: अनफॉर्मेटेड बाइट ॲरे आणि क्वांटिटीज. दोन्ही हेक्स एन्कोडिंगसह पाठवले जातात परंतु फॉरमॅटिंगसाठी वेगवेगळ्या आवश्यकतांसह. + +#### क्वांटिटीज {#quantities-encoding} + +क्वांटिटीज (पूर्णांक, संख्या) एन्कोड करताना: हेक्स म्हणून एन्कोड करा, "0x" सह उपसर्ग लावा, सर्वात कॉम्पॅक्ट रिप्रेझेंटेशन (थोडा अपवाद: शून्य "0x0" म्हणून दर्शविले पाहिजे). + +येथे काही उदाहरणे आहेत: + +- 0x41 (दशमान पद्धतीत 65) +- 0x400 (दशमान पद्धतीत 1024) +- चुकीचे: 0x (नेहमी किमान एक अंक असावा - शून्य म्हणजे "0x0") +- चुकीचे: 0x0400 (सुरुवातीला शून्य अनुमत नाही) +- चुकीचे: ff (0x ने उपसर्ग लावलेला असणे आवश्यक आहे) + +### अनफॉर्मेटेड डेटा {#unformatted-data-encoding} + +अनफॉर्मेटेड डेटा (बाइट ॲरे, अकाउंट ॲड्रेस, हॅश, बायकोड ॲरे) एन्कोड करताना: हेक्स म्हणून एन्कोड करा, "0x" सह उपसर्ग लावा, प्रत्येक बाईटसाठी दोन हेक्स अंक. + +येथे काही उदाहरणे आहेत: + +- 0x41 (आकार 1, "A") +- 0x004200 (आकार 3, "0B0") +- 0x (आकार 0, "") +- चुकीचे: 0xf0f0f (सम संख्येचे अंक असणे आवश्यक आहे) +- चुकीचे: 004200 (0x ने उपसर्ग लावलेला असणे आवश्यक आहे) + +### ब्लॉक पॅरामीटर {#block-parameter} + +खालील पद्धतींमध्ये ब्लॉक पॅरामीटर आहे: + +- [eth_getBalance](#eth_getbalance) +- [eth_getCode](#eth_getcode) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_call](#eth_call) + +जेव्हा Ethereum च्या स्टेटची क्वेरी करणाऱ्या रिक्वेस्ट्स केल्या जातात, तेव्हा प्रदान केलेला ब्लॉक पॅरामीटर ब्लॉकची उंची ठरवतो. + +ब्लॉक पॅरामीटरसाठी खालील पर्याय शक्य आहेत: + +- `HEX स्ट्रिंग` - एक पूर्णांक ब्लॉक क्रमांक +- सर्वात आधीच्या/जेनेसिस ब्लॉकसाठी `स्ट्रिंग "earliest"` +- नवीनतम प्रस्तावित ब्लॉकसाठी `स्ट्रिंग "latest"` +- नवीनतम सुरक्षित हेड ब्लॉकसाठी `स्ट्रिंग "safe"` +- नवीनतम फायनलाइज्ड ब्लॉकसाठी `स्ट्रिंग "finalized"` +- प्रलंबित स्टेट/व्यवहारांसाठी `स्ट्रिंग "pending"` + +## उदाहरणे + +या पृष्ठावर आम्ही कमांड लाइन टूल, [curl](https://curl.se) वापरून वैयक्तिक JSON_RPC API एंडपॉइंट्स कसे वापरावे याची उदाहरणे देतो. हे वैयक्तिक एंडपॉइंट उदाहरणे खाली [Curl उदाहरणे](#curl-examples) विभागात आढळतील. पृष्ठावर पुढे, आम्ही Geth नोड, JSON_RPC API आणि curl वापरून स्मार्ट कॉन्ट्रॅक्ट कंपाईल आणि डिप्लॉय करण्यासाठी [एंड-टू-एंड उदाहरण](#usage-example) देखील प्रदान करतो. + +## Curl उदाहरणे {#curl-examples} + +Ethereum नोडवर [curl](https://curl.se) रिक्वेस्ट करून JSON_RPC API वापरण्याची उदाहरणे खाली दिली आहेत. प्रत्येक उदाहरणात विशिष्ट एंडपॉइंटचे वर्णन, त्याचे पॅरामीटर्स, रिटर्न प्रकार आणि ते कसे वापरावे याचे एक सविस्तर उदाहरण समाविष्ट आहे. + +curl रिक्वेस्ट्स कंटेंट प्रकाराशी संबंधित एरर मेसेज परत करू शकतात. हे असे आहे कारण `--data` पर्याय कंटेंट प्रकार `application/x-www-form-urlencoded` वर सेट करतो. जर तुमचा नोड याबद्दल तक्रार करत असेल, तर कॉलच्या सुरुवातीला `-H "Content-Type: application/json"` ठेवून हेडर मॅन्युअली सेट करा. उदाहरणांमध्ये URL/IP आणि पोर्ट यांचे संयोजन समाविष्ट नाही, जे curl ला दिलेले शेवटचे आर्ग्युमेंट असणे आवश्यक आहे (उदा., `127.0.0.1:8545`). या अतिरिक्त डेटासह एक संपूर्ण curl रिक्वेस्ट खालीलप्रमाणे असते: + +```shell +curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' 127.0.0.1:8545 +``` + +## गॉसिप, स्टेट, हिस्ट्री {#gossip-state-history} + +काही मूळ JSON-RPC पद्धतींना Ethereum नेटवर्कमधून डेटा आवश्यक असतो आणि त्या मुख्यत्वे तीन श्रेणींमध्ये येतात: _गॉसिप, स्टेट आणि हिस्ट्री_. प्रत्येक पद्धतीवर जाण्यासाठी या विभागांमधील लिंक वापरा, किंवा पद्धतींची संपूर्ण यादी पाहण्यासाठी अनुक्रमणिका वापरा. + +### गॉसिप पद्धती {#gossip-methods} + +> या पद्धती चेनच्या हेडचा मागोवा ठेवतात. याद्वारे व्यवहार नेटवर्कमध्ये फिरतात, ब्लॉक्समध्ये त्यांचा मार्ग शोधतात आणि क्लायंटला नवीन ब्लॉक्सबद्दल माहिती मिळते. + +- [eth_blockNumber](#eth_blocknumber) +- [eth_sendRawTransaction](#eth_sendrawtransaction) + +### स्टेट पद्धती {#state_methods} + +> सर्व संग्रहित डेटाची सद्यस्थिती नोंदवणाऱ्या पद्धती. "स्टेट" म्हणजे RAM चा एक मोठा सामायिक तुकडा, आणि त्यात अकाउंट बॅलन्स, कॉन्ट्रॅक्ट डेटा आणि गॅस अंदाज यांचा समावेश असतो. + +- [eth_getBalance](#eth_getbalance) +- [eth_getStorageAt](#eth_getstorageat) +- [eth_getTransactionCount](#eth_gettransactioncount) +- [eth_getCode](#eth_getcode) +- [eth_call](#eth_call) +- [eth_estimateGas](#eth_estimategas) + +### हिस्ट्री पद्धती {#history_methods} + +> जेनेसिसपर्यंत प्रत्येक ब्लॉकचे ऐतिहासिक रेकॉर्ड मिळवते. हे एका मोठ्या ॲपेंड-ओन्ली फाईलसारखे आहे, आणि त्यात सर्व ब्लॉक हेडर्स, ब्लॉक बॉडीज, अंकल ब्लॉक्स आणि व्यवहार पावती यांचा समावेश असतो. + +- [eth_getBlockTransactionCountByHash](#eth_getblocktransactioncountbyhash) +- [eth_getBlockTransactionCountByNumber](#eth_getblocktransactioncountbynumber) +- [eth_getUncleCountByBlockHash](#eth_getunclecountbyblockhash) +- [eth_getUncleCountByBlockNumber](#eth_getunclecountbyblocknumber) +- [eth_getBlockByHash](#eth_getblockbyhash) +- [eth_getBlockByNumber](#eth_getblockbynumber) +- [eth_getTransactionByHash](#eth_gettransactionbyhash) +- [eth_getTransactionByBlockHashAndIndex](#eth_gettransactionbyblockhashandindex) +- [eth_getTransactionByBlockNumberAndIndex](#eth_gettransactionbyblocknumberandindex) +- [eth_getTransactionReceipt](#eth_gettransactionreceipt) +- [eth_getUncleByBlockHashAndIndex](#eth_getunclebyblockhashandindex) +- [eth_getUncleByBlockNumberAndIndex](#eth_getunclebyblocknumberandindex) + +## JSON-RPC API प्लेग्राउंड + +API पद्धती शोधण्यासाठी आणि वापरून पाहण्यासाठी तुम्ही [प्लेग्राउंड टूल](https://ethereum-json-rpc.com) वापरू शकता. हे तुम्हाला हे देखील दर्शवते की विविध नोड प्रदात्यांद्वारे कोणत्या पद्धती आणि नेटवर्क समर्थित आहेत. + +## JSON-RPC API पद्धती {#json-rpc-methods} + +### web3_clientVersion {#web3_clientversion} + +सध्याची क्लायंट आवृत्ती परत करते. + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`स्ट्रिंग` - सध्याची क्लायंट आवृत्ती + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":67}' +// रिझल्ट +{ + "id":67, + "jsonrpc":"2.0", + "result": "Geth/v1.12.1-stable/linux-amd64/go1.19.1" +} +``` + +### web3_sha3 {#web3_sha3} + +दिलेल्या डेटाचे Keccak-256 (_प्रमाणित SHA3-256 नाही_) परत करते. + +**पॅरामीटर्स** + +1. `DATA` - SHA3 हॅशमध्ये रूपांतरित करण्यासाठी डेटा + +```js +params: ["0x68656c6c6f20776f726c64"] +``` + +**रिटर्न्स** + +`DATA` - दिलेल्या स्ट्रिंगचा SHA3 परिणाम. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"web3_sha3","params":["0x68656c6c6f20776f726c64"],"id":64}' +// परिणाम +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad" +} +``` + +### net_version {#net_version} + +सध्याचा नेटवर्क आयडी परत करतो. + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`स्ट्रिंग` - सध्याचा नेटवर्क आयडी. + +सध्याच्या नेटवर्क आयडींची संपूर्ण यादी [chainlist.org](https://chainlist.org) येथे उपलब्ध आहे. काही सामान्य आयडी खालीलप्रमाणे आहेत: + +- `1`: Ethereum Mainnet +- `11155111`: Sepolia testnet +- `560048` : Hoodi Testnet + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":67}' +// परिणाम +{ + "id":67, + "jsonrpc": "2.0", + "result": "3" +} +``` + +### net_listening {#net_listening} + +जर क्लायंट नेटवर्क कनेक्शनसाठी सक्रियपणे ऐकत असेल तर `true` परत करते. + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`बूलियन` - ऐकत असताना `true`, अन्यथा `false`. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"net_listening","params":[],"id":67}' +// परिणाम +{ + "id":67, + "jsonrpc":"2.0", + "result":true +} +``` + +### net_peerCount {#net_peercount} + +सध्या क्लायंटशी कनेक्टेड असलेल्या पीअर्सची संख्या परत करते. + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`QUANTITY` - कनेक्टेड पीअर्सच्या संख्येचा पूर्णांक. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"net_peerCount","params":[],"id":74}' +// परिणाम +{ + "id":74, + "jsonrpc": "2.0", + "result": "0x2" // 2 +} +``` + +### eth_protocolVersion {#eth_protocolversion} + +सध्याची Ethereum प्रोटोकॉल आवृत्ती परत करते. लक्षात घ्या की ही मेथड [Geth मध्ये उपलब्ध नाही](https://github.com/ethereum/go-ethereum/pull/22064#issuecomment-788682924). + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`स्ट्रिंग` - सध्याची Ethereum प्रोटोकॉल आवृत्ती + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_protocolVersion","params":[],"id":67}' +// परिणाम +{ + "id":67, + "jsonrpc": "2.0", + "result": "54" +} +``` + +### eth_syncing {#eth_syncing} + +सिंक स्थितीबद्दल डेटा असलेले ऑब्जेक्ट किंवा `false` परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +अचूक रिटर्न डेटा क्लायंट अंमलबजावणीनुसार बदलतो. जेव्हा नोड सिंक होत नाही तेव्हा सर्व क्लायंट `False` परत करतात आणि सर्व क्लायंट खालील फील्ड्स परत करतात. + +`ऑब्जेक्ट|बूलियन`, सिंक स्थिती डेटा असलेले ऑब्जेक्ट किंवा सिंक होत नसताना `FALSE`: + +- `startingBlock`: `QUANTITY` - ज्या ब्लॉकवर आयात सुरू झाली (सिंक त्याच्या हेडवर पोहोचल्यानंतरच रीसेट होईल) +- `currentBlock`: `QUANTITY` - सध्याचा ब्लॉक, eth_blockNumber प्रमाणेच +- `highestBlock`: `QUANTITY` - अंदाजे सर्वोच्च ब्लॉक + +तथापि, वैयक्तिक क्लायंट अतिरिक्त डेटा देखील प्रदान करू शकतात. उदाहरणार्थ, Geth खालीलप्रमाणे परत करते: + +```json +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "currentBlock": "0x3cf522", + "healedBytecodeBytes": "0x0", + "healedBytecodes": "0x0", + "healedTrienodes": "0x0", + "healingBytecode": "0x0", + "healingTrienodes": "0x0", + "highestBlock": "0x3e0e41", + "startingBlock": "0x3cbed5", + "syncedAccountBytes": "0x0", + "syncedAccounts": "0x0", + "syncedBytecodeBytes": "0x0", + "syncedBytecodes": "0x0", + "syncedStorage": "0x0", + "syncedStorageBytes": "0x0" + } +} +``` + +तर Besu परत करते: + +```json +{ + "jsonrpc": "2.0", + "id": 51, + "result": { + "startingBlock": "0x0", + "currentBlock": "0x1518", + "highestBlock": "0x9567a3", + "pulledStates": "0x203ca", + "knownStates": "0x200636" + } +} +``` + +अधिक तपशिलांसाठी तुमच्या विशिष्ट क्लायंटच्या डॉक्युमेंटेशनचा संदर्भ घ्या. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' +// परिणाम +{ + "id":1, + "jsonrpc": "2.0", + "result": { + startingBlock: '0x384', + currentBlock: '0x386', + highestBlock: '0x454' + } +} +// किंवा सिंक होत नसताना +{ + "id":1, + "jsonrpc": "2.0", + "result": false +} +``` + +### eth_coinbase {#eth_coinbase} + +क्लायंटचा कॉईनबेस ॲड्रेस परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +> **टीप:** ही मेथड **v1.14.0** पासून नापसंत केली आहे आणि आता समर्थित नाही. ही मेथड वापरण्याचा प्रयत्न केल्यास "Method not supported" अशी त्रुटी येईल. + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`DATA`, 20 बाईट्स - सध्याचा कॉईनबेस ॲड्रेस. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_coinbase","params":[],"id":64}' +// परिणाम +{ + "id":64, + "jsonrpc": "2.0", + "result": "0x407d73d8a49eeb85d32cf465507dd71d507100c1" +} +``` + +### eth_chainId {#eth_chainId} + +रिप्ले-प्रोटेक्टेड व्यवहारांवर स्वाक्षरी करण्यासाठी वापरलेला चेन आयडी परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`chainId`, सध्याच्या चेन आयडीचा पूर्णांक दर्शवणारी स्ट्रिंग म्हणून हेक्साडेसिमल मूल्य. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":67}' +// परिणाम +{ + "id":67, + "jsonrpc": "2.0", + "result": "0x1" +} +``` + +### eth_mining {#eth_mining} + +जर क्लायंट सक्रियपणे नवीन ब्लॉक्स माइन करत असेल तर `true` परत करते. हे फक्त प्रूफ-ऑफ-वर्क नेटवर्क्ससाठी `true` परत करू शकते आणि [The Merge](/roadmap/merge/) पासून काही क्लायंट्समध्ये उपलब्ध नसू शकते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`बूलियन` - जर क्लायंट माइनिंग करत असेल तर `true` परत करते, अन्यथा `false`. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_mining","params":[],"id":71}' +// +{ + "id":71, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_hashrate {#eth_hashrate} + +नोड ज्या दराने माइनिंग करत आहे, त्या दरातील हॅश प्रति सेकंद संख्या परत करते. हे फक्त प्रूफ-ऑफ-वर्क नेटवर्क्ससाठी `true` परत करू शकते आणि [The Merge](/roadmap/merge/) पासून काही क्लायंट्समध्ये उपलब्ध नसू शकते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`क्वांटिटी` - प्रति सेकंद हॅशची संख्या. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_hashrate","params":[],"id":71}' +// रिझल्ट +{ + "id":71, + "jsonrpc": "2.0", + "result": "0x38a" +} +``` + +### eth_gasPrice {#eth_gasprice} + +wei मध्ये प्रति गॅस सध्याच्या किंमतीचा अंदाज परत करते. उदाहरणार्थ, बेसू क्लायंट शेवटच्या 100 ब्लॉक्सची तपासणी करतो आणि डीफॉल्टनुसार गॅस युनिटची सरासरी किंमत परत करतो. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`क्वांटिटी` - wei मधील सध्याच्या गॅस किंमतीचा पूर्णांक. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +// रिझल्ट +{ + "id":73, + "jsonrpc": "2.0", + "result": "0x1dfd14000" // 8049999872 Wei +} +``` + +### eth_accounts {#eth_accounts} + +क्लायंटच्या मालकीच्या ॲड्रेसची यादी परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`डेटाची ॲरे`, 20 बाइट्स - क्लायंटच्या मालकीचे ॲड्रेस. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": ["0x407d73d8a49eeb85d32cf465507dd71d507100c1"] +} +``` + +### eth_blockNumber {#eth_blocknumber} + +सर्वात अलीकडील ब्लॉकचा क्रमांक परत करतो. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +काहीही नाही + +**रिटर्न्स** + +`क्वांटिटी` - क्लायंट ज्या वर्तमान ब्लॉक नंबरवर आहे त्याचा पूर्णांक. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":83}' +// रिझल्ट +{ + "id":83, + "jsonrpc": "2.0", + "result": "0x4b7" // 1207 +} +``` + +### eth_getBalance {#eth_getbalance} + +दिलेल्या ॲड्रेसवरील अकाउंटची बॅलन्स परत करतो. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 20 बाइट्स - बॅलन्स तपासण्यासाठीचा ॲड्रेस. +2. `क्वांटिटी|टॅग` - पूर्णांक ब्लॉक नंबर, किंवा स्ट्रिंग `"latest"`, `"earliest"`, `"pending"`, `"safe"`, किंवा `"finalized"`, [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) पहा. + +```js +params: ["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"] +``` + +**रिटर्न्स** + +`क्वांटिटी` - wei मध्ये वर्तमान बॅलन्सचा पूर्णांक. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1", "latest"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0234c8a3397aab58" // 158972490234375000 +} +``` + +### eth_getStorageAt {#eth_getstorageat} + +दिलेल्या ॲड्रेसवर स्टोरेज पोझिशनवरून व्हॅल्यू परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 20 बाइट्स - स्टोरेजचा ॲड्रेस. +2. `क्वांटिटी` - स्टोरेजमधील पोझिशनचा पूर्णांक. +3. `क्वांटिटी|टॅग` - पूर्णांक ब्लॉक नंबर, किंवा स्ट्रिंग `"latest"`, `"earliest"`, `"pending"`, `"safe"`, `"finalized"`, [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) पहा. + +**रिटर्न्स** + +`डेटा` - या स्टोरेज पोझिशनवरील व्हॅल्यू. + +**उदाहरण** +योग्य पोझिशनची गणना करणे मिळवल्या जाणाऱ्या स्टोरेजवर अवलंबून असते. `0x391694e7e0b0cce554cb130d723a9d27458f9298` या ॲड्रेसद्वारे `0x295a70b2de5e3953354a6a8344e616ed314d7251` येथे डिप्लॉय केलेला खालील कॉन्ट्रॅक्ट विचारात घ्या. + +``` +contract Storage { + uint pos0; + mapping(address => uint) pos1; + constructor() { + pos0 = 1234; + pos1[msg.sender] = 5678; + } +} +``` + +pos0 चे मूल्य मिळवणे सोपे आहे: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} +``` + +मॅपचा एक घटक मिळवणे अधिक कठीण आहे. मॅपमधील घटकाची स्थिती यासह मोजली जाते: + +```js +keccak(LeftPad32(key, 0), LeftPad32(map position, 0)) +``` + +याचा अर्थ pos1["0x391694e7e0b0cce554cb130d723a9d27458f9298"] वरील स्टोरेज मिळवण्यासाठी आपल्याला यासह पोझिशनची गणना करणे आवश्यक आहे: + +```js +keccak( + decodeHex( + "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + + "0000000000000000000000000000000000000000000000000000000000000001" + ) +) +``` + +Geth कन्सोल, जो web3 लायब्ररीसह येतो, गणना करण्यासाठी वापरला जाऊ शकतो: + +```js +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +आता स्टोरेज मिळवण्यासाठी: + +```js +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +### eth_getTransactionCount {#eth_gettransactioncount} + +एका ॲड्रेसवरून _पाठवलेल्या_ व्यवहारांची संख्या परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 20 बाइट्स - ॲड्रेस. +2. `क्वांटिटी|टॅग` - पूर्णांक ब्लॉक नंबर, किंवा स्ट्रिंग `"latest"`, `"earliest"`, `"pending"`, `"safe"` किंवा `"finalized"`, [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) पहा. + +```js +params: [ + "0x407d73d8a49eeb85d32cf465507dd71d507100c1", + "latest", // नवीनतम ब्लॉकवरील स्टेट +] +``` + +**रिटर्न्स** + +`QUANTITY` - या ॲड्रेसवरून पाठवलेल्या ट्रान्झॅक्शन्सची संख्या (पूर्णांक). + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionCount","params":["0x407d73d8a49eeb85d32cf465507dd71d507100c1","latest"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getBlockTransactionCountByHash {#eth_getblocktransactioncountbyhash} + +दिलेल्या ब्लॉक हॅशशी जुळणाऱ्या ब्लॉकमधील व्यवहारांची संख्या परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 32 बाइट्स - ब्लॉकचा हॅश + +```js +params: ["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"] +``` + +**रिटर्न्स** + +`क्वांटिटी` - या ब्लॉकमधील व्यवहारांच्या संख्येचा पूर्णांक. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByHash","params":["0xd03ededb7415d22ae8bac30f96b2d1de83119632693b963642318d87d1bece5b"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getBlockTransactionCountByNumber {#eth_getblocktransactioncountbynumber} + +दिलेल्या ब्लॉक नंबरशी जुळणाऱ्या ब्लॉकमधील व्यवहारांची संख्या परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `क्वांटिटी|टॅग` - ब्लॉक नंबरचा पूर्णांक, किंवा स्ट्रिंग `"earliest"`, `"latest"`, `"pending"`, `"safe"` किंवा `"finalized"`, जसे की [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) मध्ये. + +```js +params: [ + "0x13738ca", // 20396234 +] +``` + +**रिटर्न्स** + +`क्वांटिटी` - या ब्लॉकमधील व्यवहारांच्या संख्येचा पूर्णांक. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockTransactionCountByNumber","params":["0x13738ca"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x8b" // 139 +} +``` + +### eth_getUncleCountByBlockHash {#eth_getunclecountbyblockhash} + +दिलेल्या ब्लॉक हॅशशी जुळणाऱ्या ब्लॉकमधील अंकलची संख्या परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 32 बाइट्स - ब्लॉकचा हॅश + +```js +params: ["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"] +``` + +**रिटर्न्स** + +`क्वांटिटी` - या ब्लॉकमधील अंकलच्या संख्येचा पूर्णांक. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockHash","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_getUncleCountByBlockNumber {#eth_getunclecountbyblocknumber} + +दिलेल्या ब्लॉक नंबरशी जुळणाऱ्या ब्लॉकमधील अंकलची संख्या परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `क्वांटिटी|टॅग` - ब्लॉक नंबरचा पूर्णांक, किंवा स्ट्रिंग `"latest"`, `"earliest"`, `"pending"`, `"safe"` किंवा `"finalized"`, [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) पहा. + +```js +params: [ + "0xe8", // 232 +] +``` + +**रिटर्न्स** + +`क्वांटिटी` - या ब्लॉकमधील अंकलच्या संख्येचा पूर्णांक. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleCountByBlockNumber","params":["0xe8"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x0" // 0 +} +``` + +### eth_getCode {#eth_getcode} + +दिलेल्या ॲड्रेसवरील कोड परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 20 बाइट्स - ॲड्रेस +2. `क्वांटिटी|टॅग` - पूर्णांक ब्लॉक नंबर, किंवा स्ट्रिंग `"latest"`, `"earliest"`, `"pending"`, `"safe"` किंवा `"finalized"`, [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) पहा. + +```js +params: [ + "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + "0x5daf3b", // 6139707 +] +``` + +**रिटर्न्स** + +`डेटा` - दिलेल्या ॲड्रेसवरून कोड. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getCode","params":["0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", "0x5daf3b"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x6060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b9578063095ea7b31461014757806318160ddd146101a157806323b872dd146101ca5780632e1a7d4d14610243578063313ce5671461026657806370a082311461029557806395d89b41146102e2578063a9059cbb14610370578063d0e30db0146103ca578063dd62ed3e146103d4575b6100b7610440565b005b34156100c457600080fd5b6100cc6104dd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561010c5780820151818401526020810190506100f1565b50505050905090810190601f1680156101395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561015257600080fd5b610187600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061057b565b604051808215151515815260200191505060405180910390f35b34156101ac57600080fd5b6101b461066d565b6040518082815260200191505060405180910390f35b34156101d557600080fd5b610229600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061068c565b604051808215151515815260200191505060405180910390f35b341561024e57600080fd5b61026460048080359060200190919050506109d9565b005b341561027157600080fd5b610279610b05565b604051808260ff1660ff16815260200191505060405180910390f35b34156102a057600080fd5b6102cc600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b18565b6040518082815260200191505060405180910390f35b34156102ed57600080fd5b6102f5610b30565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561033557808201518184015260208101905061031a565b50505050905090810190601f1680156103625780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561037b57600080fd5b6103b0600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610bce565b604051808215151515815260200191505060405180910390f35b6103d2610440565b005b34156103df57600080fd5b61042a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610be3565b6040518082815260200191505060405180910390f35b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156105735780601f1061054857610100808354040283529160200191610573565b820191906000526020600020905b81548152906001019060200180831161055657829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60003073ffffffffffffffffffffffffffffffffffffffff1631905090565b600081600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156106dc57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156107b457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414155b156108cf5781600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015151561084457600080fd5b81600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a2757600080fd5b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515610ab457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a250565b600260009054906101000a900460ff1681565b60036020528060005260406000206000915090505481565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bc65780601f10610b9b57610100808354040283529160200191610bc6565b820191906000526020600020905b815481529060010190602001808311610ba957829003601f168201915b505050505081565b6000610bdb33848461068c565b905092915050565b60046020528160005260406000206020528060005260406000206000915091505054815600a165627a7a72305820deb4c2ccab3c2fdca32ab3f46728389c2fe2c165d5fafa07661e4e004f6c344a0029" +} +``` + +### eth_sign {#eth_sign} + +साइन पद्धत `sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)))` सह एक Ethereum विशिष्ट स्वाक्षरी मोजते. + +मेसेजमध्ये उपसर्ग जोडल्याने मोजलेली स्वाक्षरी Ethereum विशिष्ट स्वाक्षरी म्हणून ओळखण्यायोग्य बनते. हे गैरवापर टाळते, जिथे एक दुर्भावनायुक्त dapp कोणताही डेटा (उदा. ट्रान्झॅक्शन) साइन करू शकते आणि पीडिताचे सोंग घेण्यासाठी त्या सहीचा वापर करू शकते. + +टीप: स्वाक्षरी करण्यासाठी ॲड्रेस अनलॉक केलेला असणे आवश्यक आहे. + +**पॅरामीटर्स** + +1. `डेटा`, 20 बाइट्स - ॲड्रेस +2. `डेटा`, N बाइट्स - स्वाक्षरी करण्यासाठी मेसेज + +**रिटर्न्स** + +`डेटा`: स्वाक्षरी + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sign","params":["0x9b2055d370f73ec7d8a03e965129118dc8f5bf83", "0xdeadbeaf"],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_signTransaction {#eth_signtransaction} + +नेटवर्कवर नंतर [eth_sendRawTransaction](#eth_sendrawtransaction) सह सबमिट करता येईल अशा व्यवहारावर स्वाक्षरी करते. + +**पॅरामीटर्स** + +1. `ऑब्जेक्ट` - व्यवहार ऑब्जेक्ट + +- `प्रकार`: +- `from`: `डेटा`, 20 बाइट्स - ज्या ॲड्रेसवरून व्यवहार पाठवला आहे. +- `to`: `डेटा`, 20 बाइट्स - (नवीन कॉन्ट्रॅक्ट तयार करताना पर्यायी) ज्या ॲड्रेसवर व्यवहार पाठवला आहे. +- `gas`: `क्वांटिटी` - (पर्यायी, डीफॉल्ट: 90000) व्यवहार अंमलबजावणीसाठी प्रदान केलेल्या गॅसचा पूर्णांक. हे न वापरलेला गॅस परत करेल. +- `gasPrice`: `क्वांटिटी` - (पर्यायी, डीफॉल्ट: ठरवले जाईल) प्रत्येक भरलेल्या गॅससाठी वापरल्या जाणार्‍या gasPrice चा पूर्णांक, Wei मध्ये. +- `value`: `क्वांटिटी` - (पर्यायी) या व्यवहारासह पाठवलेल्या व्हॅल्यूचा पूर्णांक, Wei मध्ये. +- `data`: `डेटा` - कॉन्ट्रॅक्टचा कंपाईल केलेला कोड किंवा लागू केलेल्या पद्धतीच्या स्वाक्षरीचा हॅश आणि एन्कोड केलेले पॅरामीटर्स. +- `nonce`: `क्वांटिटी` - (पर्यायी) नॉन्सचा पूर्णांक. हे तुम्हाला समान नॉन्स वापरणाऱ्या तुमच्या स्वतःच्या प्रलंबित व्यवहारांना ओव्हरराईट करण्याची परवानगी देते. + +**रिटर्न्स** + +`डेटा`, निर्दिष्ट खात्याद्वारे स्वाक्षरी केलेला RLP-एन्कोडेड व्यवहार ऑब्जेक्ट. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"id": 1,"jsonrpc": "2.0","method": "eth_signTransaction","params": [{"data":"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675","from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155","gas": "0x76c0","gasPrice": "0x9184e72a000","to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567","value": "0x9184e72a"}]}' +// रिझल्ट +{ + "id": 1, + "jsonrpc": "2.0", + "result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b" +} +``` + +### eth_sendTransaction {#eth_sendtransaction} + +नवीन मेसेज कॉल व्यवहार किंवा कॉन्ट्रॅक्ट निर्मिती तयार करते, जर डेटा फील्डमध्ये कोड असेल आणि `from` मध्ये निर्दिष्ट केलेल्या अकाउंटचा वापर करून त्यावर स्वाक्षरी करते. + +**पॅरामीटर्स** + +1. `ऑब्जेक्ट` - व्यवहार ऑब्जेक्ट + +- `from`: `डेटा`, 20 बाइट्स - ज्या ॲड्रेसवरून व्यवहार पाठवला आहे. +- `to`: `डेटा`, 20 बाइट्स - (नवीन कॉन्ट्रॅक्ट तयार करताना पर्यायी) ज्या ॲड्रेसवर व्यवहार पाठवला आहे. +- `gas`: `क्वांटिटी` - (पर्यायी, डीफॉल्ट: 90000) व्यवहार अंमलबजावणीसाठी प्रदान केलेल्या गॅसचा पूर्णांक. हे न वापरलेला गॅस परत करेल. +- `gasPrice`: `क्वांटिटी` - (पर्यायी, डीफॉल्ट: ठरवले जाईल) प्रत्येक भरलेल्या गॅससाठी वापरल्या जाणार्‍या gasPrice चा पूर्णांक. +- `value`: `क्वांटिटी` - (पर्यायी) या व्यवहारासह पाठवलेल्या व्हॅल्यूचा पूर्णांक. +- `input`: `डेटा` - कॉन्ट्रॅक्टचा कंपाईल केलेला कोड किंवा लागू केलेल्या पद्धतीच्या स्वाक्षरीचा हॅश आणि एन्कोड केलेले पॅरामीटर्स. +- `nonce`: `क्वांटिटी` - (पर्यायी) नॉन्सचा पूर्णांक. हे तुम्हाला समान नॉन्स वापरणाऱ्या तुमच्या स्वतःच्या प्रलंबित व्यवहारांना ओव्हरराईट करण्याची परवानगी देते. + +```js +params: [ + { + from: "0xb60e8dd61c5d32be8058bb8eb970870f07233155", + to: "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + gas: "0x76c0", // 30400 + gasPrice: "0x9184e72a000", // 10000000000000 + value: "0x9184e72a", // 2441406250 + input: + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + }, +] +``` + +**रिटर्न्स** + +`डेटा`, 32 बाइट्स - व्यवहार हॅश, किंवा व्यवहार अद्याप उपलब्ध नसल्यास शून्य हॅश. + +तुम्ही कॉन्ट्रॅक्ट तयार केल्यावर, व्यवहार ब्लॉकमध्ये प्रस्तावित झाल्यानंतर, कॉन्ट्रॅक्ट ॲड्रेस मिळवण्यासाठी [eth_getTransactionReceipt](#eth_gettransactionreceipt) वापरा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":[{see above}],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_sendRawTransaction {#eth_sendrawtransaction} + +स्वाक्षरी केलेल्या व्यवहारांसाठी नवीन मेसेज कॉल व्यवहार किंवा कॉन्ट्रॅक्ट निर्मिती तयार करते. + +**पॅरामीटर्स** + +1. `डेटा`, स्वाक्षरी केलेला व्यवहार डेटा. + +```js +params: [ + "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", +] +``` + +**रिटर्न्स** + +`डेटा`, 32 बाइट्स - व्यवहार हॅश, किंवा व्यवहार अद्याप उपलब्ध नसल्यास शून्य हॅश. + +तुम्ही कॉन्ट्रॅक्ट तयार केल्यावर, व्यवहार ब्लॉकमध्ये प्रस्तावित झाल्यानंतर, कॉन्ट्रॅक्ट ॲड्रेस मिळवण्यासाठी [eth_getTransactionReceipt](#eth_gettransactionreceipt) वापरा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":[{see above}],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +} +``` + +### eth_call {#eth_call} + +ब्लॉकचेनवर व्यवहार तयार न करता त्वरित एक नवीन मेसेज कॉल कार्यान्वित करते. बर्‍याचदा केवळ-वाचनीय स्मार्ट कॉन्ट्रॅक्ट फंक्शन्स कार्यान्वित करण्यासाठी वापरले जाते, उदाहरणार्थ ERC-20 कॉन्ट्रॅक्टसाठी `balanceOf`. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `ऑब्जेक्ट` - व्यवहार कॉल ऑब्जेक्ट + +- `from`: `डेटा`, 20 बाइट्स - (पर्यायी) ज्या ॲड्रेसवरून व्यवहार पाठवला आहे. +- `to`: `डेटा`, 20 बाइट्स - ज्या ॲड्रेसवर व्यवहार पाठवला आहे. +- `gas`: `क्वांटिटी` - (पर्यायी) व्यवहार अंमलबजावणीसाठी प्रदान केलेल्या गॅसचा पूर्णांक. eth_call शून्य गॅस वापरतो, परंतु काही अंमलबजावणीसाठी या पॅरामीटरची आवश्यकता असू शकते. +- `gasPrice`: `क्वांटिटी` - (पर्यायी) प्रत्येक भरलेल्या गॅससाठी वापरल्या जाणार्‍या gasPrice चा पूर्णांक. +- `value`: `क्वांटिटी` - (पर्यायी) या व्यवहारासह पाठवलेल्या व्हॅल्यूचा पूर्णांक. +- `input`: `डेटा` - (पर्यायी) पद्धतीच्या स्वाक्षरीचा हॅश आणि एन्कोड केलेले पॅरामीटर्स. तपशीलांसाठी सॉलिडिटी डॉक्युमेंटेशनमधील [Ethereum Contract ABI](https://docs.soliditylang.org/en/latest/abi-spec.html) पहा. + +2. `क्वांटिटी|टॅग` - पूर्णांक ब्लॉक नंबर, किंवा स्ट्रिंग `"latest"`, `"earliest"`, `"pending"`, `"safe"` किंवा `"finalized"`, [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) पहा. + +**रिटर्न्स** + +`डेटा` - कार्यान्वित केलेल्या कॉन्ट्रॅक्टची रिटर्न व्हॅल्यू. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x" +} +``` + +### eth_estimateGas {#eth_estimategas} + +व्यवहार पूर्ण होण्यासाठी किती गॅस आवश्यक आहे याचा अंदाज तयार करते आणि परत करते. व्यवहार ब्लॉकचेनमध्ये जोडला जाणार नाही. लक्षात घ्या की EVM मेकॅनिक्स आणि नोड परफॉर्मन्ससह विविध कारणांमुळे अंदाज व्यवहाराद्वारे प्रत्यक्षात वापरल्या गेलेल्या गॅसच्या रकमेपेक्षा लक्षणीयरीत्या जास्त असू शकतो. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +[eth_call](#eth_call) पॅरामीटर्स पहा, वगळता सर्व प्रॉपर्टीज पर्यायी आहेत. जर कोणतीही गॅस मर्यादा निर्दिष्ट केली नसेल तर geth प्रलंबित ब्लॉकमधून ब्लॉक गॅस मर्यादा वरची मर्यादा म्हणून वापरते. परिणामी, जेव्हा गॅसची रक्कम प्रलंबित ब्लॉक गॅस मर्यादेपेक्षा जास्त असते, तेव्हा परत केलेला अंदाज कॉल/ट्रान्झॅक्शन कार्यान्वित करण्यासाठी पुरेसा नसू शकतो. + +**रिटर्न्स** + +`क्वांटिटी` - वापरलेल्या गॅसची रक्कम. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_estimateGas","params":[{see above}],"id":1}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x5208" // 21000 +} +``` + +### eth_getBlockByHash {#eth_getblockbyhash} + +हॅशद्वारे ब्लॉकबद्दल माहिती परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 32 बाइट्स - ब्लॉकचा हॅश. +2. `बुलियन` - `true` असल्यास ते संपूर्ण व्यवहार ऑब्जेक्ट परत करते, `false` असल्यास केवळ व्यवहारांचे हॅश. + +```js +params: [ + "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + false, +] +``` + +**रिटर्न्स** + +`ऑब्जेक्ट` - एक ब्लॉक ऑब्जेक्ट, किंवा कोणताही ब्लॉक न सापडल्यास `null`: + +- `number`: `क्वांटिटी` - ब्लॉक क्रमांक. प्रलंबित ब्लॉक असल्यास `null`. +- `hash`: `डेटा`, 32 बाइट्स - ब्लॉकचा हॅश. प्रलंबित ब्लॉक असल्यास `null`. +- `parentHash`: `डेटा`, 32 बाइट्स - पॅरेंट ब्लॉकचा हॅश. +- `nonce`: `डेटा`, 8 बाइट्स - व्युत्पन्न प्रूफ-ऑफ-वर्कचा हॅश. प्रलंबित ब्लॉक असल्यास `null`, प्रूफ-ऑफ-स्टेक ब्लॉक्ससाठी `0x0` (द मर्ज पासून) +- `sha3Uncles`: `डेटा`, 32 बाइट्स - ब्लॉकमधील अंकल डेटाचा SHA3. +- `logsBloom`: `डेटा`, 256 बाइट्स - ब्लॉकच्या लॉगसाठी ब्लूम फिल्टर. प्रलंबित ब्लॉक असल्यास `null`. +- `transactionsRoot`: `डेटा`, 32 बाइट्स - ब्लॉकच्या व्यवहार ट्रीचे रूट. +- `stateRoot`: `डेटा`, 32 बाइट्स - ब्लॉकच्या अंतिम स्टेट ट्रीचे रूट. +- `receiptsRoot`: `डेटा`, 32 बाइट्स - ब्लॉकच्या रिसीट्स ट्रीचे रूट. +- `miner`: `डेटा`, 20 बाइट्स - लाभार्थीचा ॲड्रेस ज्याला ब्लॉक रिवॉर्ड्स दिले गेले. +- `difficulty`: `क्वांटिटी` - या ब्लॉकसाठी डिफिकल्टीचा पूर्णांक. +- `totalDifficulty`: `क्वांटिटी` - या ब्लॉकपर्यंतच्या चेनच्या एकूण डिफिकल्टीचा पूर्णांक. +- `extraData`: `डेटा` - या ब्लॉकचे "अतिरिक्त डेटा" फील्ड. +- `size`: `क्वांटिटी` - या ब्लॉकचा बाइट्समधील आकाराचा पूर्णांक. +- `gasLimit`: `क्वांटिटी` - या ब्लॉकमध्ये अनुमत कमाल गॅस. +- `gasUsed`: `क्वांटिटी` - या ब्लॉकमधील सर्व व्यवहारांद्वारे वापरलेला एकूण गॅस. +- `timestamp`: `क्वांटिटी` - ब्लॉक कधी एकत्रित केला गेला याचा युनिक्स टाइमस्टॅम्प. +- `transactions`: `ॲरे` - व्यवहार ऑब्जेक्ट्सची ॲरे, किंवा शेवटच्या दिलेल्या पॅरामीटरवर अवलंबून 32 बाइट्स व्यवहार हॅश. +- `uncles`: `ॲरे` - अंकल हॅशची ॲरे. + +**उदाहरण** + +```js +// विनंती +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByHash","params":["0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", false],"id":1}' +// निकाल +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "difficulty": "0x4ea3f27bc", + "extraData": "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32", + "gasLimit": "0x1388", + "gasUsed": "0x0", + "hash": "0xdc0818cf78f21a8e70579cb46a43643f78291264dda342ae31049421c82d21ae", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xbb7b8287f3f0a933474a79eae42cbca977791171", + "mixHash": "0x4fffe9ae21f1c9e15207b1f472d5bbdd68c9595d461666602f2be20daf5e7843", + "nonce": "0x689056015818adbe", + "number": "0x1b4", + "parentHash": "0xe99e022112df268087ea7eafaf4790497fd21dbeeb6bd7a1721df161a6657a54", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x220", + "stateRoot": "0xddc8b0234c2e0cad087c8b389aa7ef01f7d79b2570bccb77ce48648aa61c904d", + "timestamp": "0x55ba467c", + "totalDifficulty": "0x78ed983323d", + "transactions": [ + ], + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "uncles": [ + ] + } +} +``` + +### eth_getBlockByNumber {#eth_getblockbynumber} + +ब्लॉक नंबरद्वारे ब्लॉकबद्दल माहिती परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `क्वांटिटी|टॅग` - ब्लॉक नंबरचा पूर्णांक, किंवा स्ट्रिंग `"earliest"`, `"latest"`, `"pending"`, `"safe"` किंवा `"finalized"`, जसे की [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) मध्ये. +2. `बुलियन` - `true` असल्यास ते संपूर्ण व्यवहार ऑब्जेक्ट परत करते, `false` असल्यास केवळ व्यवहारांचे हॅश. + +```js +params: [ + "0x1b4", // 436 + true, +] +``` + +**रिटर्न्स** +[eth_getBlockByHash](#eth_getblockbyhash) पहा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x1b4", true],"id":1}' +``` + +[eth_getBlockByHash](#eth_getblockbyhash) चा रिझल्ट पहा. + +### eth_getTransactionByHash {#eth_gettransactionbyhash} + +व्यवहार हॅशद्वारे विनंती केलेल्या व्यवहाराबद्दल माहिती परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 32 बाइट्स - व्यवहाराचा हॅश + +```js +params: ["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"] +``` + +**रिटर्न्स** + +`ऑब्जेक्ट` - एक व्यवहार ऑब्जेक्ट, किंवा कोणताही व्यवहार न सापडल्यास `null`: + +- `blockHash`: `डेटा`, 32 बाइट्स - ज्या ब्लॉकमध्ये हा व्यवहार होता त्याचा हॅश. प्रलंबित असल्यास `null`. +- `blockNumber`: `क्वांटिटी` - ज्या ब्लॉक नंबरमध्ये हा व्यवहार होता. प्रलंबित असल्यास `null`. +- `from`: `डेटा`, 20 बाइट्स - प्रेषकाचा ॲड्रेस. +- `gas`: `क्वांटिटी` - प्रेषकाने प्रदान केलेला गॅस. +- `gasPrice`: `क्वांटिटी` - प्रेषकाने Wei मध्ये प्रदान केलेली गॅस किंमत. +- `hash`: `डेटा`, 32 बाइट्स - व्यवहाराचा हॅश. +- `input`: `डेटा` - व्यवहारासह पाठवलेला डेटा. +- `nonce`: `क्वांटिटी` - यापूर्वी प्रेषकाने केलेल्या व्यवहारांची संख्या. +- `to`: `डेटा`, 20 बाइट्स - प्राप्तकर्त्याचा ॲड्रेस. कॉन्ट्रॅक्ट निर्मिती व्यवहार असल्यास `null`. +- `transactionIndex`: `क्वांटिटी` - ब्लॉकमधील व्यवहारांच्या निर्देशांक स्थितीचा पूर्णांक. प्रलंबित असल्यास `null`. +- `value`: `क्वांटिटी` - Wei मध्ये हस्तांतरित केलेली व्हॅल्यू. +- `v`: `क्वांटिटी` - ECDSA रिकव्हरी आयडी +- `r`: `क्वांटिटी` - ECDSA स्वाक्षरी r +- `s`: `क्वांटिटी` - ECDSA स्वाक्षरी s + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"],"id":1}' +// रिझल्ट +{ + "jsonrpc":"2.0", + "id":1, + "result":{ + "blockHash":"0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "blockNumber":"0x5daf3b", // 6139707 + "from":"0xa7d9ddbe1f17865597fbd27ec712455208b6b76d", + "gas":"0xc350", // 50000 + "gasPrice":"0x4a817c800", // 20000000000 + "hash":"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b", + "input":"0x68656c6c6f21", + "nonce":"0x15", // 21 + "to":"0xf02c1c8e6114b1dbe8937a39260b5b0a374432bb", + "transactionIndex":"0x41", // 65 + "value":"0xf3dbb76162000", // 4290000000000000 + "v":"0x25", // 37 + "r":"0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s":"0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c" + } +} +``` + +### eth_getTransactionByBlockHashAndIndex {#eth_gettransactionbyblockhashandindex} + +ब्लॉक हॅश आणि व्यवहार निर्देशांक स्थितीद्वारे व्यवहाराबद्दल माहिती परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 32 बाइट्स - ब्लॉकचा हॅश. +2. `क्वांटिटी` - व्यवहार निर्देशांक स्थितीचा पूर्णांक. + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**रिटर्न्स** +[eth_getTransactionByHash](#eth_gettransactionbyhash) पहा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +[eth_getTransactionByHash](#eth_gettransactionbyhash) चा रिझल्ट पहा. + +### eth_getTransactionByBlockNumberAndIndex {#eth_gettransactionbyblocknumberandindex} + +ब्लॉक नंबर आणि व्यवहार निर्देशांक स्थितीद्वारे व्यवहाराबद्दल माहिती परत करते. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `क्वांटिटी|टॅग` - एक ब्लॉक नंबर, किंवा स्ट्रिंग `"earliest"`, `"latest"`, `"pending"`, `"safe"` किंवा `"finalized"`, जसे की [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) मध्ये. +2. `क्वांटिटी` - व्यवहार निर्देशांक स्थिती. + +```js +params: [ + "0x9c47cf", // 10241999 + "0x24", // 36 +] +``` + +**रिटर्न्स** +[eth_getTransactionByHash](#eth_gettransactionbyhash) पहा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByBlockNumberAndIndex","params":["0x9c47cf", "0x24"],"id":1}' +``` + +[eth_getTransactionByHash](#eth_gettransactionbyhash) चा रिझल्ट पहा. + +### eth_getTransactionReceipt {#eth_gettransactionreceipt} + +व्यवहार हॅशद्वारे व्यवहाराची पावती परत करते. + +**टीप** ती पावती प्रलंबित व्यवहारांसाठी उपलब्ध नाही. + +**पॅरामीटर्स** + +1. `डेटा`, 32 बाइट्स - व्यवहाराचा हॅश + +```js +params: ["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"] +``` + +**रिटर्न्स** +`ऑब्जेक्ट` - एक व्यवहार पावती ऑब्जेक्ट, किंवा कोणतीही पावती न सापडल्यास `null`: + +- `transactionHash `: `डेटा`, 32 बाइट्स - व्यवहाराचा हॅश. +- `transactionIndex`: `क्वांटिटी` - ब्लॉकमधील व्यवहारांच्या निर्देशांक स्थितीचा पूर्णांक. +- `blockHash`: `डेटा`, 32 बाइट्स - ज्या ब्लॉकमध्ये हा व्यवहार होता त्याचा हॅश. +- `blockNumber`: `क्वांटिटी` - ज्या ब्लॉक नंबरमध्ये हा व्यवहार होता. +- `from`: `डेटा`, 20 बाइट्स - प्रेषकाचा ॲड्रेस. +- `to`: `डेटा`, 20 बाइट्स - प्राप्तकर्त्याचा ॲड्रेस. कॉन्ट्रॅक्ट निर्मिती व्यवहार असल्यास null. +- `cumulativeGasUsed` : `क्वांटिटी ` - ब्लॉकमध्ये हा व्यवहार कार्यान्वित झाल्यावर वापरलेल्या गॅसची एकूण रक्कम. +- `effectiveGasPrice` : `क्वांटिटी` - प्रति गॅस युनिट भरलेल्या बेस फी आणि टिपची बेरीज. +- `gasUsed `: `क्वांटिटी ` - केवळ या विशिष्ट व्यवहाराद्वारे वापरलेल्या गॅसची रक्कम. +- `contractAddress `: `डेटा`, 20 बाइट्स - तयार केलेला कॉन्ट्रॅक्ट ॲड्रेस, जर व्यवहार कॉन्ट्रॅक्ट निर्मितीचा असेल, अन्यथा `null`. +- `logs`: `ॲरे` - लॉग ऑब्जेक्ट्सची ॲरे, जी या व्यवहाराने तयार केली. +- `logsBloom`: `डेटा`, 256 बाइट्स - लाईट क्लायंटसाठी संबंधित लॉग्स त्वरीत पुनर्प्राप्त करण्यासाठी ब्लूम फिल्टर. +- `प्रकार`: `क्वांटिटी` - व्यवहार प्रकाराचा पूर्णांक, लेगसी व्यवहारांसाठी `0x0`, ॲक्सेस लिस्ट प्रकारांसाठी `0x1`, डायनॅमिक फीसाठी `0x2`. + +ते _एकतर_ परत करते: + +- `root` : `DATA` ट्रान्झॅक्शननंतरच्या स्टेट रूटचे 32 बाइट्स (बायझँटियमपूर्व) +- `status`: `क्वांटिटी` एकतर `1` (यशस्वी) किंवा `0` (अयशस्वी) + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionReceipt","params":["0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5"],"id":1}' +// रिझल्ट +{ + "jsonrpc": "2.0", + "id": 1, + "result": { + "blockHash": + "0xa957d47df264a31badc3ae823e10ac1d444b098d9b73d204c40426e57f47e8c3", + "blockNumber": "0xeff35f", + "contractAddress": null, // तयार झाल्यास ॲड्रेसची स्ट्रिंग + "cumulativeGasUsed": "0xa12515", + "effectiveGasPrice": "0x5a9c688d4", + "from": "0x6221a9c005f6e47eb398fd867784cacfdcfff4e7", + "gasUsed": "0xb4c8", + "logs": [{ + // getFilterLogs, इत्यादीद्वारे परत केलेले लॉग. + }], + "logsBloom": "0x00...0", // 256 बाइट ब्लूम फिल्टर + "status": "0x1", + "to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "transactionHash": + "0x85d995eba9763907fdf35cd2034144dd9d53ce32cbec21349d4b12823c6860c5", + "transactionIndex": "0x66", + "type": "0x2" + } +} +``` + +### eth_getUncleByBlockHashAndIndex {#eth_getunclebyblockhashandindex} + +हॅश आणि अंकल इंडेक्स पोझिशनद्वारे ब्लॉकच्या अंकलची माहिती परत करतो. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `डेटा`, 32 बाइट्स - ब्लॉकचा हॅश. +2. `क्वांटिटी` - अंकलची निर्देशांक स्थिती. + +```js +params: [ + "0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", + "0x0", // 0 +] +``` + +**रिटर्न्स** +[eth_getBlockByHash](#eth_getblockbyhash) पहा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockHashAndIndex","params":["0x1d59ff54b1eb26b013ce3cb5fc9dab3705b415a67127a003c3e61eb445bb8df2", "0x0"],"id":1}' +``` + +[eth_getBlockByHash](#eth_getblockbyhash) चा रिझल्ट पहा. + +**टीप**: अंकलमध्ये वैयक्तिक व्यवहार नसतात. + +### eth_getUncleByBlockNumberAndIndex {#eth_getunclebyblocknumberandindex} + +क्रमांक आणि अंकल इंडेक्स पोझिशनद्वारे ब्लॉकच्या अंकलची माहिती परत करतो. + + + प्लेग्राउंडमध्ये एंडपॉईंट वापरून पहा + + +**पॅरामीटर्स** + +1. `क्वांटिटी|टॅग` - एक ब्लॉक नंबर, किंवा स्ट्रिंग `"earliest"`, `"latest"`, `"pending"`, `"safe"`, `"finalized"`, जसे की [ब्लॉक पॅरामीटर](/developers/docs/apis/json-rpc/#block-parameter) मध्ये. +2. `क्वांटिटी` - अंकलची निर्देशांक स्थिती. + +```js +params: [ + "0x29c", // 668 + "0x0", // 0 +] +``` + +**रिटर्न्स** +[eth_getBlockByHash](#eth_getblockbyhash) पहा. + +**टीप**: अंकलमध्ये वैयक्तिक व्यवहार नसतात. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getUncleByBlockNumberAndIndex","params":["0x29c", "0x0"],"id":1}' +``` + +[eth_getBlockByHash](#eth_getblockbyhash) चा रिझल्ट पहा. + +### eth_newFilter {#eth_newfilter} + +स्टेट बदलल्यावर (लॉग) सूचित करण्यासाठी, फिल्टर पर्यायांवर आधारित फिल्टर ऑब्जेक्ट तयार करते. +स्टेट बदलले आहे की नाही हे तपासण्यासाठी, [eth_getFilterChanges](#eth_getfilterchanges) कॉल करा. + +**विषय फिल्टर निर्दिष्ट करण्यावर एक टीप:** +विषय क्रम-अवलंबून आहेत. [A, B] विषयांसह लॉग असलेल्या व्यवहारास खालील विषय फिल्टरद्वारे जुळवले जाईल: + +- `[]` "काहीही" +- `[A]` "पहिल्या स्थानावर A (आणि नंतर काहीही)" +- `[null, B]` "पहिल्या स्थानावर काहीही आणि दुसऱ्या स्थानावर B (आणि नंतर काहीही)" +- `[A, B]` "पहिल्या स्थानावर A आणि दुसऱ्या स्थानावर B (आणि नंतर काहीही)" +- `[[A, B], [A, B]]` "पहिल्या स्थानावर (A किंवा B) आणि दुसऱ्या स्थानावर (A किंवा B) (आणि नंतर काहीही)" +- **पॅरामीटर्स** + +1. `ऑब्जेक्ट` - फिल्टर पर्याय: + +- `fromBlock`: `क्वांटिटी|टॅग` - (पर्यायी, डीफॉल्ट: `"latest"`) पूर्णांक ब्लॉक नंबर, किंवा शेवटच्या प्रस्तावित ब्लॉकसाठी `"latest"`, नवीनतम सुरक्षित ब्लॉकसाठी `"safe"`, नवीनतम फायनलाइज्ड ब्लॉकसाठी `"finalized"`, किंवा अद्याप ब्लॉकमध्ये नसलेल्या व्यवहारांसाठी `"pending"`, `"earliest"`. +- `toBlock`: `क्वांटिटी|टॅग` - (पर्यायी, डीफॉल्ट: `"latest"`) पूर्णांक ब्लॉक नंबर, किंवा शेवटच्या प्रस्तावित ब्लॉकसाठी `"latest"`, नवीनतम सुरक्षित ब्लॉकसाठी `"safe"`, नवीनतम फायनलाइज्ड ब्लॉकसाठी `"finalized"`, किंवा अद्याप ब्लॉकमध्ये नसलेल्या व्यवहारांसाठी `"pending"`, `"earliest"`. +- `address`: `डेटा|ॲरे`, 20 बाइट्स - (पर्यायी) कॉन्ट्रॅक्ट ॲड्रेस किंवा ॲड्रेसची यादी ज्यातून लॉग्स उत्पन्न व्हावेत. +- `topics`: `डेटाची ॲरे`, - (पर्यायी) 32 बाइट्स `डेटा` विषयांची ॲरे. विषय क्रम-अवलंबून आहेत. प्रत्येक विषय "or" पर्यायांसह डेटाची एक ॲरे देखील असू शकतो. + +```js +params: [ + { + fromBlock: "0x1", + toBlock: "0x2", + address: "0x8888f1f195afa192cfee860698584c030f4c9db1", + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + null, + [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + "0x0000000000000000000000000aff3454fce5edbc8cca8697c15331677e6ebccc", + ], + ], + }, +] +``` + +**रिटर्न्स** +`क्वांटिटी` - एक फिल्टर आयडी. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newFilter","params":[{"topics":["0x12341234"]}],"id":73}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newBlockFilter {#eth_newblockfilter} + +नोडमध्ये एक फिल्टर तयार करते, जेव्हा नवीन ब्लॉक येतो तेव्हा सूचित करण्यासाठी. +स्टेट बदलले आहे की नाही हे तपासण्यासाठी, [eth_getFilterChanges](#eth_getfilterchanges) कॉल करा. + +**पॅरामीटर्स** +काहीही नाही + +**रिटर्न्स** +`क्वांटिटी` - एक फिल्टर आयडी. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newBlockFilter","params":[],"id":73}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_newPendingTransactionFilter {#eth_newpendingtransactionfilter} + +नोडमध्ये एक फिल्टर तयार करते, जेव्हा नवीन प्रलंबित व्यवहार येतात तेव्हा सूचित करण्यासाठी. +स्टेट बदलले आहे की नाही हे तपासण्यासाठी, [eth_getFilterChanges](#eth_getfilterchanges) कॉल करा. + +**पॅरामीटर्स** +काहीही नाही + +**रिटर्न्स** +`क्वांटिटी` - एक फिल्टर आयडी. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_newPendingTransactionFilter","params":[],"id":73}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": "0x1" // 1 +} +``` + +### eth_uninstallFilter {#eth_uninstallfilter} + +दिलेल्या आयडीसह एक फिल्टर अनइन्स्टॉल करते. जेव्हा पाहण्याची गरज नसते तेव्हा नेहमी कॉल केला पाहिजे. +याव्यतिरिक्त, जेव्हा काही काळासाठी [eth_getFilterChanges](#eth_getfilterchanges) सह विनंती केली जात नाही तेव्हा फिल्टर्स टाइमआउट होतात. + +**पॅरामीटर्स** + +1. `क्वांटिटी` - फिल्टर आयडी. + +```js +params: [ + "0xb", // 11 +] +``` + +**रिटर्न्स** +`बुलियन` - फिल्टर यशस्वीरित्या अनइन्स्टॉल झाला असल्यास `true`, अन्यथा `false`. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_uninstallFilter","params":["0xb"],"id":73}' +// रिझल्ट +{ + "id":1, + "jsonrpc": "2.0", + "result": true +} +``` + +### eth_getFilterChanges {#eth_getfilterchanges} + +फिल्टरसाठी पोलिंग पद्धत, जी शेवटच्या पोलपासून झालेल्या लॉगची एक ॲरे परत करते. + +**पॅरामीटर्स** + +1. `क्वांटिटी` - फिल्टर आयडी. + +```js +params: [ + "0x16", // 22 +] +``` + +**रिटर्न्स** +`ॲरे` - लॉग ऑब्जेक्ट्सची ॲरे, किंवा शेवटच्या पोलपासून काहीही बदलले नसल्यास रिकामी ॲरे. + +- `eth_newBlockFilter` सह तयार केलेल्या फिल्टरसाठी, परतावा ब्लॉक हॅशेस (`DATA`, 32 बाइट्स) असतो, उदा. `["0x3454645634534..."]`. + +- `eth_newPendingTransactionFilter` सह तयार केलेल्या फिल्टरसाठी, परतावा ट्रान्झॅक्शन हॅशेस (`DATA`, 32 बाइट्स) असतो, उदा. `["0x6345343454645..."]`. + +- `eth_newFilter` सह तयार केलेल्या फिल्टर्ससाठी लॉग्स खालील पॅरामीटर्ससह ऑब्जेक्ट्स असतात: + - `removed`: `टॅग` - चेन पुनर्रचनेमुळे लॉग काढला गेल्यास `true`. वैध लॉग असल्यास `false`. + - `logIndex`: `क्वांटिटी` - ब्लॉकमधील लॉग निर्देशांक स्थितीचा पूर्णांक. प्रलंबित लॉग असल्यास `null`. + - `transactionIndex`: `क्वांटिटी` - ज्या व्यवहारांच्या निर्देशांक स्थितीवरून लॉग तयार केला गेला त्याचा पूर्णांक. प्रलंबित लॉग असल्यास `null`. + - `transactionHash`: `डेटा`, 32 बाइट्स - ज्या व्यवहारांमधून हा लॉग तयार केला गेला त्यांचा हॅश. प्रलंबित लॉग असल्यास `null`. + - `blockHash`: `डेटा`, 32 बाइट्स - ज्या ब्लॉकमध्ये हा लॉग होता त्याचा हॅश. प्रलंबित असल्यास `null`. प्रलंबित लॉग असल्यास `null`. + - `blockNumber`: `क्वांटिटी` - ज्या ब्लॉक नंबरमध्ये हा लॉग होता. प्रलंबित असल्यास `null`. प्रलंबित लॉग असल्यास `null`. + - `address`: `डेटा`, 20 बाइट्स - ज्या ॲड्रेसवरून हा लॉग उत्पन्न झाला. + - `data`: `DATA` - व्हेरिएबल-लेंग्थ नॉन-इंडेक्स्ड लॉग डेटा. ( _solidity_ मध्ये: शून्य किंवा अधिक 32 बाइट्सचे नॉन-इंडेक्स्ड लॉग आर्ग्युमेंट्स.) + - `topics`: `डेटाची ॲरे` - 0 ते 4 32 बाइट्स `डेटा` च्या अनुक्रमित लॉग आर्ग्युमेंट्सची ॲरे. ( _solidity_ मध्ये: पहिला टॉपिक हा इव्हेंटच्या सहीचा _हॅश_ असतो (उदा., `Deposit(address,bytes32,uint256)`), जोपर्यंत तुम्ही `anonymous` स्पेसिफायरसह इव्हेंट घोषित केला नसेल.) + +- **उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterChanges","params":["0x16"],"id":73}' +// रिझल्ट +{ + "id":1, + "jsonrpc":"2.0", + "result": [{ + "logIndex": "0x1", // 1 + "blockNumber":"0x1b4", // 436 + "blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf", + "transactionIndex": "0x0", // 0 + "address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d", + "data":"0x0000000000000000000000000000000000000000000000000000000000000000", + "topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"] + },{ + ... + }] +} +``` + +### eth_getFilterLogs {#eth_getfilterlogs} + +दिलेल्या आयडीसह फिल्टरशी जुळणाऱ्या सर्व लॉगची एक ॲरे परत करते. + +**पॅरामीटर्स** + +1. `क्वांटिटी` - फिल्टर आयडी. + +```js +params: [ + "0x16", // 22 +] +``` + +**रिटर्न्स** +[eth_getFilterChanges](#eth_getfilterchanges) पहा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getFilterLogs","params":["0x16"],"id":74}' +``` + +[eth_getFilterChanges](#eth_getfilterchanges) चा रिझल्ट पहा. + +### eth_getLogs {#eth_getlogs} + +दिलेल्या फिल्टर ऑब्जेक्टशी जुळणाऱ्या सर्व लॉगची एक ॲरे परत करते. + +**पॅरामीटर्स** + +1. `ऑब्जेक्ट` - फिल्टर पर्याय: + +- `fromBlock`: `क्वांटिटी|टॅग` - (पर्यायी, डीफॉल्ट: `"latest"`) पूर्णांक ब्लॉक नंबर, किंवा शेवटच्या प्रस्तावित ब्लॉकसाठी `"latest"`, नवीनतम सुरक्षित ब्लॉकसाठी `"safe"`, नवीनतम फायनलाइज्ड ब्लॉकसाठी `"finalized"`, किंवा अद्याप ब्लॉकमध्ये नसलेल्या व्यवहारांसाठी `"pending"`, `"earliest"`. +- `toBlock`: `क्वांटिटी|टॅग` - (पर्यायी, डीफॉल्ट: `"latest"`) पूर्णांक ब्लॉक नंबर, किंवा शेवटच्या प्रस्तावित ब्लॉकसाठी `"latest"`, नवीनतम सुरक्षित ब्लॉकसाठी `"safe"`, नवीनतम फायनलाइज्ड ब्लॉकसाठी `"finalized"`, किंवा अद्याप ब्लॉकमध्ये नसलेल्या व्यवहारांसाठी `"pending"`, `"earliest"`. +- `address`: `डेटा|ॲरे`, 20 बाइट्स - (पर्यायी) कॉन्ट्रॅक्ट ॲड्रेस किंवा ॲड्रेसची यादी ज्यातून लॉग्स उत्पन्न व्हावेत. +- `topics`: `डेटाची ॲरे`, - (पर्यायी) 32 बाइट्स `डेटा` विषयांची ॲरे. विषय क्रम-अवलंबून आहेत. प्रत्येक विषय "or" पर्यायांसह डेटाची एक ॲरे देखील असू शकतो. +- `blockHash`: `डेटा`, 32 बाइट्स - (पर्यायी, **भविष्यात**) EIP-234 च्या जोडणीसह, `blockHash` एक नवीन फिल्टर पर्याय असेल जो परत केलेले लॉग 32-बाइट हॅश `blockHash` असलेल्या एकाच ब्लॉकपुरते मर्यादित करेल. `blockHash` वापरणे `fromBlock` = `toBlock` = हॅश `blockHash` असलेल्या ब्लॉक नंबरच्या बरोबरीचे आहे. जर फिल्टर निकषांमध्ये `blockHash` उपस्थित असेल, तर `fromBlock` किंवा `toBlock` दोन्ही अनुमत नाहीत. + +```js +params: [ + { + topics: [ + "0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b", + ], + }, +] +``` + +**रिटर्न्स** +[eth_getFilterChanges](#eth_getfilterchanges) पहा. + +**उदाहरण** + +```js +// रिक्वेस्ट +curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getLogs","params":[{"topics":["0x000000000000000000000000a94f5374fce5edbc8e2a8697c15331677e6ebf0b"]}],"id":74}' +``` + +[eth_getFilterChanges](#eth_getfilterchanges) चा रिझल्ट पहा. + +## वापराचे उदाहरण {#usage-example} + +### JSON_RPC वापरून कॉन्ट्रॅक्ट डिप्लॉय करणे {#deploying-contract} + +या विभागात फक्त RPC इंटरफेस वापरून कॉन्ट्रॅक्ट कसे डिप्लॉय करायचे याचे प्रात्यक्षिक समाविष्ट आहे. कॉन्ट्रॅक्ट डिप्लॉय करण्यासाठी पर्यायी मार्ग आहेत जिथे ही गुंतागुंत दूर केली जाते—उदाहरणार्थ, RPC इंटरफेसवर तयार केलेल्या लायब्ररीज वापरणे जसे की [web3.js](https://web3js.readthedocs.io/) आणि [web3.py](https://github.com/ethereum/web3.py). हे ॲबस्ट्रॅक्शन्स सामान्यतः समजण्यास सोपे आणि कमी त्रुटी-प्रवण असतात, परंतु पडद्यामागे काय घडत आहे हे समजून घेणे तरीही उपयुक्त आहे. + +खाली `Multiply7` नावाचा एक सरळ स्मार्ट कॉन्ट्रॅक्ट आहे जो Ethereum नोडवर JSON-RPC इंटरफेस वापरून डिप्लॉय केला जाईल. हा ट्यूटोरियल असे गृहीत धरतो की वाचक आधीच एक Geth नोड चालवत आहे. नोड्स आणि क्लायंटबद्दल अधिक माहिती [येथे](/developers/docs/nodes-and-clients/run-a-node) उपलब्ध आहे. नॉन-Geth क्लायंटसाठी HTTP JSON-RPC कसे सुरू करावे हे पाहण्यासाठी कृपया वैयक्तिक [क्लायंट](/developers/docs/nodes-and-clients/) डॉक्युमेंटेशनचा संदर्भ घ्या. बहुतेक क्लायंट `localhost:8545` वर सर्व्ह करण्यासाठी डीफॉल्ट असतात. + +```javascript +contract Multiply7 { + event Print(uint); + function multiply(uint input) returns (uint) { + Print(input * 7); + return input * 7; + } +} +``` + +पहिली गोष्ट म्हणजे HTTP RPC इंटरफेस सक्षम असल्याची खात्री करणे. याचा अर्थ आम्ही स्टार्टअपवेळी Geth ला `--http` फ्लॅग पुरवतो. या उदाहरणात आम्ही एका खाजगी डेव्हलपमेंट चेनवर Geth नोड वापरतो. हा दृष्टिकोन वापरल्याने आम्हाला वास्तविक नेटवर्कवर इथरची आवश्यकता नाही. + +```bash +geth --http --dev console 2>>geth.log +``` + +हे `http://localhost:8545` वर HTTP RPC इंटरफेस सुरू करेल. + +[curl](https://curl.se) वापरून कॉईनबेस ॲड्रेस (अकाउंट्सच्या ॲरेमधून पहिला ॲड्रेस मिळवून) आणि बॅलन्स मिळवून इंटरफेस चालू आहे की नाही हे आम्ही तपासू शकतो. कृपया लक्षात घ्या की या उदाहरणांमधील डेटा तुमच्या स्थानिक नोडवर भिन्न असेल. तुम्हाला हे कमांड्स वापरायचे असल्यास, दुसऱ्या curl रिक्वेस्टमधील रिक्वेस्ट पॅरामीटर्स पहिल्या रिक्वेस्टमधून परत आलेल्या परिणामाने बदला. + +```bash +curl --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[], "id":1}' -H "Content-Type: application/json" localhost:8545 +{"id":1,"jsonrpc":"2.0","result":["0x9b1d35635cc34752ca54713bb99d38614f63c955"]} + +curl --data '{"jsonrpc":"2.0","method":"eth_getBalance", "params": ["0x9b1d35635cc34752ca54713bb99d38614f63c955", "latest"], "id":2}' -H "Content-Type: application/json" localhost:8545 +{"id":2,"jsonrpc":"2.0","result":"0x1639e49bba16280000"} +``` + +संख्या हेक्स एन्कोडेड असल्यामुळे, बॅलन्स wei मध्ये हेक्स स्ट्रिंग म्हणून परत केला जातो. जर आपल्याला बॅलन्स इथरमध्ये संख्या म्हणून हवा असेल तर आपण Geth कन्सोलमधून web3 वापरू शकतो. + +```javascript +web3.fromWei("0x1639e49bba16280000", "ether") +// "410" +``` + +आता आमच्या खाजगी डेव्हलपमेंट चेनवर काही इथर आहे, तर आम्ही कॉन्ट्रॅक्ट डिप्लॉय करू शकतो. पहिली पायरी म्हणजे Multiply7 कॉन्ट्रॅक्टला बाईट कोडमध्ये कंपाईल करणे जो EVM ला पाठवला जाऊ शकतो. solc, सॉलिडिटी कंपायलर, इन्स्टॉल करण्यासाठी, [सॉलिडिटी डॉक्युमेंटेशन](https://docs.soliditylang.org/en/latest/installing-solidity.html) चे अनुसरण करा. ([आमच्या उदाहरणासाठी वापरलेल्या कंपायलरच्या आवृत्तीशी](https://github.com/ethereum/solidity/releases/tag/v0.4.20) जुळण्यासाठी तुम्ही जुनी `solc` रीलिझ वापरू शकता.) + +पुढची पायरी म्हणजे Multiply7 कॉन्ट्रॅक्टला बाइट कोडमध्ये कंपाईल करणे, जे EVM ला पाठवले जाऊ शकते. + +```bash +echo 'pragma solidity ^0.4.16; contract Multiply7 { event Print(uint); function multiply(uint input) public returns (uint) { Print(input * 7); return input * 7; } }' | solc --bin + +======= :Multiply7 ======= +Binary: +6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029 +``` + +आता आमच्याकडे कंपाईल केलेला कोड आहे, तर तो डिप्लॉय करण्यासाठी किती गॅस लागेल हे ठरवणे आवश्यक आहे. RPC इंटरफेसमध्ये एक `eth_estimateGas` पद्धत आहे जी आपल्याला एक अंदाज देईल. + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_estimateGas", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 5}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":5,"result":"0x1c31e"} +``` + +आणि शेवटी कॉन्ट्रॅक्ट डिप्लॉय करा. + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0x9b1d35635cc34752ca54713bb99d38614f63c955", "gas": "0x1c31e", "data": "0x6060604052341561000f57600080fd5b60eb8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60007f24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da600783026040518082815260200191505060405180910390a16007820290509190505600a165627a7a7230582040383f19d9f65246752244189b02f56e8d0980ed44e7a56c0b200458caad20bb0029"}], "id": 6}' -H "Content-Type: application/json" localhost:8545 +{"id":6,"jsonrpc":"2.0","result":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"} +``` + +व्यवहार नोडद्वारे स्वीकारला जातो आणि एक व्यवहार हॅश परत केला जातो. हा हॅश ट्रान्झॅक्शनचा माग काढण्यासाठी वापरला जाऊ शकतो. पुढची पायरी म्हणजे आपला कॉन्ट्रॅक्ट कुठे डिप्लॉय केला आहे, तो ॲड्रेस ठरवणे. प्रत्येक कार्यान्वित केलेला ट्रान्झॅक्शन एक पावती (receipt) तयार करेल. या पावतीमध्ये (receipt) ट्रान्झॅक्शनबद्दल विविध माहिती असते, जसे की ट्रान्झॅक्शन कोणत्या ब्लॉकमध्ये समाविष्ट होता आणि EVM ने किती गॅस वापरला. जर एखादा ट्रान्झॅक्शन +कॉन्ट्रॅक्ट तयार करत असेल तर त्यात कॉन्ट्रॅक्टचा ॲड्रेस देखील असेल. आपण `eth_getTransactionReceipt` RPC पद्धतीचा वापर करून पावती (receipt) मिळवू शकतो. + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_getTransactionReceipt", "params": ["0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf"], "id": 7}' -H "Content-Type: application/json" localhost:8545 +{"jsonrpc":"2.0","id":7,"result":{"blockHash":"0x77b1a4f6872b9066312de3744f60020cbd8102af68b1f6512a05b7619d527a4f","blockNumber":"0x1","contractAddress":"0x4d03d617d700cf81935d7f797f4e2ae719648262","cumulativeGasUsed":"0x1c31e","from":"0x9b1d35635cc34752ca54713bb99d38614f63c955","gasUsed":"0x1c31e","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xe1f3095770633ab2b18081658bad475439f6a08c902d0915903bafff06e6febf","transactionIndex":"0x0"}} +``` + +आपला कॉन्ट्रॅक्ट `0x4d03d617d700cf81935d7f797f4e2ae719648262` वर तयार झाला. पावतीऐवजी (receipt) null निकाल मिळाल्यास याचा अर्थ ट्रान्झॅक्शन अद्याप ब्लॉकमध्ये समाविष्ट केलेला नाही. क्षणभर थांबा आणि तुमचा कन्सेन्सस क्लायंट चालू आहे की नाही ते तपासा आणि पुन्हा प्रयत्न करा. + +#### स्मार्ट कॉन्ट्रॅक्ट्सशी संवाद साधणे {#interacting-with-smart-contract} + +या उदाहरणात, आपण कॉन्ट्रॅक्टच्या `multiply` पद्धतीला `eth_sendTransaction` वापरून एक ट्रान्झॅक्शन पाठवू. + +`eth_sendTransaction` ला अनेक आर्ग्युमेंट्सची आवश्यकता असते, विशेषतः `from`, `to` आणि `data`. `From` हा आपल्या अकाउंटचा सार्वजनिक ॲड्रेस आहे आणि `to` हा कॉन्ट्रॅक्टचा ॲड्रेस आहे. `data` आर्ग्युमेंटमध्ये एक पेलोड असतो जो कोणती पद्धत कॉल करायची आणि कोणत्या आर्ग्युमेंट्ससह कॉल करायची हे परिभाषित करतो. येथे [ABI (ॲप्लिकेशन बायनरी इंटरफेस)](https://docs.soliditylang.org/en/latest/abi-spec.html) वापरले जाते. ABI ही एक JSON फाईल आहे जी EVM साठी डेटा कसा परिभाषित आणि एन्कोड करायचा हे ठरवते. + +पेलोडमधील बाइट्स हे ठरवतात की कॉन्ट्रॅक्टमधील कोणती पद्धत कॉल केली जाईल. हे फंक्शनचे नाव आणि त्याच्या आर्ग्युमेंट प्रकारांवरून Keccak हॅशमधील पहिले 4 बाइट्स आहेत, जे हेक्स एन्कोड केलेले आहेत. मल्टिप्लाय फंक्शन एक uint स्वीकारते जे uint256 साठी एक उर्फ (alias) आहे. यामुळे आपल्याला मिळते: + +```javascript +web3.sha3("multiply(uint256)").substring(0, 10) +// "0xc6888fa1" +``` + +पुढची पायरी आर्ग्युमेंट्स एन्कोड करणे आहे. फक्त एक uint256 आहे, समजा, मूल्य 6. ABI मध्ये एक विभाग आहे जो uint256 प्रकार कसे एन्कोड करायचे हे निर्दिष्ट करतो. + +`int: enc(X)` हे X चे बिग-एंडियन टूज कॉम्प्लिमेंट एन्कोडिंग आहे, जे ऋण X साठी उच्च-ऑर्डर (डाव्या) बाजूला 0xff ने पॅड केलेले असते आणि धन X साठी शून्य बाइट्सने पॅड केलेले असते जेणेकरून लांबी 32 बाइट्सच्या पटीत असेल. + +हे `0000000000000000000000000000000000000000000000000000000000000006` मध्ये एन्कोड होते. + +फंक्शन सिलेक्टर आणि एन्कोड केलेले आर्ग्युमेंट एकत्र केल्यावर आपला डेटा `0xc6888fa10000000000000000000000000000000000000000000000000000000000000006` असेल. + +हे आता नोडला पाठवले जाऊ शकते: + +```bash +curl --data '{"jsonrpc":"2.0","method": "eth_sendTransaction", "params": [{"from": "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a", "to": "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", "data": "0xc6888fa10000000000000000000000000000000000000000000000000000000000000006"}], "id": 8}' -H "Content-Type: application/json" localhost:8545 +{"id":8,"jsonrpc":"2.0","result":"0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74"} +``` + +एक ट्रान्झॅक्शन पाठवला गेल्यामुळे, एक ट्रान्झॅक्शन हॅश परत आला. पावती (receipt) मिळवल्यावर हे मिळते: + +```javascript +{ + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + contractAddress: null, + cumulativeGasUsed: 22631, + gasUsed: 22631, + logs: [{ + address: "0x6ff93b4b46b41c0c3c9baee01c255d3b4675963d", + blockHash: "0xbf0a347307b8c63dd8c1d3d7cbdc0b463e6e7c9bf0a35be40393588242f01d55", + blockNumber: 268, + data: "0x000000000000000000000000000000000000000000000000000000000000002a", + logIndex: 0, + topics: ["0x24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da"], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 + }], + transactionHash: "0x759cf065cbc22e9d779748dc53763854e5376eea07409e590c990eafc0869d74", + transactionIndex: 0 +} +``` + +पावतीमध्ये (receipt) एक लॉग आहे. हा लॉग EVM द्वारे ट्रान्झॅक्शन एक्झिक्यूशनवर तयार केला गेला आणि पावतीमध्ये (receipt) समाविष्ट केला गेला. `multiply` फंक्शन दाखवते की इनपुटच्या 7 पट मूल्याने `Print` इव्हेंट तयार झाला. `Print` इव्हेंटसाठी आर्ग्युमेंट uint256 असल्याने आपण ते ABI नियमांनुसार डीकोड करू शकतो, ज्यामुळे आपल्याला अपेक्षित दशांश मूल्य 42 मिळेल. डेटा व्यतिरिक्त हे लक्षात घेण्यासारखे आहे की कोणता इव्हेंटने लॉग तयार केला हे निर्धारित करण्यासाठी टॉपिक्स वापरले जाऊ शकतात: + +```javascript +web3.sha3("Print(uint256)") +// "24abdb5865df5079dcc5ac590ff6f01d5c16edbc5fab4e195d9febd1114503da" +``` + +JSON-RPC चा थेट वापर दर्शविणाऱ्या काही सामान्य कामांची ही एक छोटी ओळख होती. + +## संबंधित विषय {#related-topics} + +- [JSON-RPC स्पेसिफिकेशन](http://www.jsonrpc.org/specification) +- [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) +- [JavaScript APIs](/developers/docs/apis/javascript/) +- [बॅकएंड APIs](/developers/docs/apis/backend/) +- [एक्झिक्यूशन क्लायंट्स](/developers/docs/nodes-and-clients/#execution-clients) diff --git a/public/content/translations/mr/developers/docs/blocks/index.md b/public/content/translations/mr/developers/docs/blocks/index.md new file mode 100644 index 00000000000..762549390f2 --- /dev/null +++ b/public/content/translations/mr/developers/docs/blocks/index.md @@ -0,0 +1,153 @@ +--- +title: "ब्लॉक" +description: "Ethereum ब्लॉकचेनमधील ब्लॉक्सचा आढावा – त्यांची डेटा संरचना, त्यांची गरज का आहे आणि ते कसे बनवले जातात." +lang: mr +--- + +ब्लॉक्स हे व्यवहारांचे बॅचेस आहेत, ज्यात चेनमधील मागील ब्लॉकचा हॅश असतो. हे ब्लॉक्सना (चेनमध्ये) एकत्र जोडते कारण हॅश हे ब्लॉक डेटामधून क्रिप्टोग्राफिकरित्या मिळवले जातात. हे फसवणूक टाळते, कारण इतिहासातील कोणत्याही ब्लॉकमधील एक बदल पुढील सर्व ब्लॉक्सना अवैध ठरवेल कारण त्यानंतरचे सर्व हॅश बदलतील आणि ब्लॉकचेन चालवणाऱ्या प्रत्येकाच्या ते लक्षात येईल. + +## पूर्वतयारी {#prerequisites} + +ब्लॉक्स हा नवशिक्यांसाठी एक अतिशय सोपा विषय आहे. परंतु हे पृष्ठ तुम्हाला अधिक चांगल्या प्रकारे समजण्यास मदत करण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [खाती](/developers/docs/accounts/), [व्यवहार](/developers/docs/transactions/), आणि आमची [Ethereum ची ओळख](/developers/docs/intro-to-ethereum/) वाचा. + +## ब्लॉक्स का? {#why-blocks} + +Ethereum नेटवर्कवरील सर्व सहभागी एक सिंक्रोनाइझ केलेली स्थिती राखतील आणि व्यवहारांच्या अचूक इतिहासावर सहमत होतील हे सुनिश्चित करण्यासाठी, आम्ही व्यवहारांना ब्लॉक्समध्ये गटबद्ध करतो. याचा अर्थ डझनभर (किंवा शेकडो) व्यवहार एकाच वेळी वचनबद्ध, सहमत आणि सिंक्रोनाइझ केले जातात. + +![एका ब्लॉकमध्ये व्यवहार दर्शवणारे एक आकृती ज्यामुळे स्थिती बदल होतो](./tx-block.png) +_[Ethereum EVM सचित्र](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रूपांतरित केलेला आकृती_ + +कमिट्समध्ये अंतर ठेवून, आम्ही सर्व नेटवर्क सहभागींना एकमतावर येण्यासाठी पुरेसा वेळ देतो: जरी प्रति सेकंद डझनभर व्यवहार विनंत्या येत असल्या तरी, Ethereum वर ब्लॉक्स दर बारा सेकंदांनी एकदाच तयार आणि वचनबद्ध केले जातात. + +## ब्लॉक्स कसे कार्य करतात {#how-blocks-work} + +व्यवहारांचा इतिहास जपण्यासाठी, ब्लॉक्स कठोरपणे क्रमाने लावलेले असतात (तयार केलेल्या प्रत्येक नवीन ब्लॉकमध्ये त्याच्या पॅरेंट ब्लॉकचा संदर्भ असतो), आणि ब्लॉक्समधील व्यवहार देखील कठोरपणे क्रमाने लावलेले असतात. दुर्मिळ प्रकरणे वगळता, कोणत्याही वेळी, नेटवर्कवरील सर्व सहभागी ब्लॉक्सच्या अचूक संख्येवर आणि इतिहासावर सहमत असतात, आणि सध्याच्या थेट व्यवहार विनंत्यांना पुढील ब्लॉकमध्ये गटबद्ध करण्यासाठी काम करत आहेत. + +एकदा नेटवर्कवरील यादृच्छिकपणे निवडलेल्या व्हॅलिडेटरद्वारे ब्लॉक एकत्र केल्यावर, तो उर्वरित नेटवर्कवर प्रसारित केला जातो; सर्व नोड्स हा ब्लॉक त्यांच्या ब्लॉकचेनच्या शेवटी जोडतात आणि पुढील ब्लॉक तयार करण्यासाठी नवीन व्हॅलिडेटर निवडला जातो. नेमकी ब्लॉक-असेम्ब्ली प्रक्रिया आणि वचनबद्धता/एकमत प्रक्रिया सध्या Ethereum च्या “प्रूफ-ऑफ-स्टेक” प्रोटोकॉलद्वारे निर्दिष्ट केली आहे. + +## प्रूफ-ऑफ-स्टेक प्रोटोकॉल {#proof-of-stake-protocol} + +प्रूफ-ऑफ-स्टेकचा अर्थ खालीलप्रमाणे आहे: + +- व्हॅलिडेटिंग नोड्सना वाईट वर्तनाविरुद्ध तारणासाठी एका डिपॉझिट करारामध्ये ३२ ETH स्टेक करावे लागतात. हे नेटवर्कचे संरक्षण करण्यास मदत करते कारण सिद्ध करण्यायोग्य अप्रामाणिक क्रियाकलापामुळे त्यापैकी काही किंवा सर्व स्टेक नष्ट होतात. +- प्रत्येक स्लॉटमध्ये (बारा सेकंदांच्या अंतरावर) एक व्हॅलिडेटर यादृच्छिकपणे ब्लॉक प्रस्तावक म्हणून निवडला जातो. ते व्यवहार एकत्र बांधतात, त्यांना कार्यान्वित करतात आणि एक नवीन 'स्थिती' निश्चित करतात. ते ही माहिती एका ब्लॉकमध्ये गुंडाळतात आणि इतर व्हॅलिडेटर्सना पाठवतात. +- नवीन ब्लॉकबद्दल ऐकणारे इतर व्हॅलिडेटर्स, जागतिक स्थितीतील प्रस्तावित बदलाशी ते सहमत आहेत याची खात्री करण्यासाठी व्यवहार पुन्हा कार्यान्वित करतात. ब्लॉक वैध आहे असे गृहीत धरून, ते तो त्यांच्या स्वतःच्या डेटाबेसमध्ये जोडतात. +- जर एखाद्या व्हॅलिडेटरला एकाच स्लॉटसाठी दोन परस्परविरोधी ब्लॉक्सबद्दल कळले, तर ते सर्वाधिक स्टेक केलेल्या ETH द्वारे समर्थित असलेला एक निवडण्यासाठी त्यांचा फोर्क-चॉइस अल्गोरिदम वापरतात. + +[प्रूफ-ऑफ-स्टेक बद्दल अधिक](/developers/docs/consensus-mechanisms/pos) + +## ब्लॉकमध्ये काय आहे? {#block-anatomy} + +एका ब्लॉकमध्ये बरीच माहिती असते. सर्वोच्च स्तरावर एका ब्लॉकमध्ये खालील फील्ड्स असतात: + +| फील्ड | वर्णन | +| :--------------- | :-------------------------------------------------------------- | +| `slot` | तो स्लॉट ज्यामध्ये ब्लॉक आहे | +| `proposer_index` | ब्लॉक प्रस्तावित करणाऱ्या व्हॅलिडेटरचा ID | +| `parent_root` | मागील ब्लॉकचा हॅश | +| `state_root` | स्टेट ऑब्जेक्टचा रूट हॅश | +| `body` | एक ऑब्जेक्ट ज्यात अनेक फील्ड्स आहेत, जसे खाली परिभाषित केले आहे | + +ब्लॉकच्या `body` मध्ये स्वतःचे अनेक फील्ड्स आहेत: + +| फील्ड | वर्णन | +| :------------------- | :------------------------------------------------------------- | +| `randao_reveal` | पुढील ब्लॉक प्रस्तावक निवडण्यासाठी वापरले जाणारे मूल्य | +| `eth1_data` | डिपॉझिट कराराबद्दल माहिती | +| `graffiti` | ब्लॉक्स टॅग करण्यासाठी वापरलेला अनियंत्रित डेटा | +| `proposer_slashings` | स्लॅश करायच्या व्हॅलिडेटर्सची यादी | +| `attester_slashings` | स्लॅश करायच्या अटेस्टर्सची यादी | +| `attestations` | मागील स्लॉट्सच्या विरोधात केलेल्या अटेस्टेशन्सची यादी | +| `deposits` | डिपॉझिट करारामधील नवीन डिपॉझिट्सची यादी | +| `voluntary_exits` | नेटवर्कमधून बाहेर पडणाऱ्या व्हॅलिडेटर्सची यादी | +| `sync_aggregate` | लाईट क्लायंट्सना सेवा देण्यासाठी वापरलेला व्हॅलिडेटर्सचा उपसंच | +| `execution_payload` | एक्झिक्यूशन क्लायंटकडून आलेले व्यवहार | + +`attestations` फील्डमध्ये ब्लॉकमधील सर्व अटेस्टेशन्सची यादी असते. अटेस्टेशन्सचा स्वतःचा डेटा प्रकार असतो ज्यात डेटाचे अनेक भाग असतात. प्रत्येक अटेस्टेशनमध्ये असते: + +| फील्ड | वर्णन | +| :----------------- | :-------------------------------------------------------------------- | +| `aggregation_bits` | या अटेस्टेशनमध्ये भाग घेतलेल्या व्हॅलिडेटर्सची यादी | +| `data` | अनेक सबफील्ड्स असलेला एक कंटेनर | +| `signature` | `data` भागाच्या विरोधात व्हॅलिडेटर्सच्या एका संचाची एकत्रित स्वाक्षरी | + +`attestation` मधील `data` फील्डमध्ये खालील गोष्टी असतात: + +| फील्ड | वर्णन | +| :------------------ | :------------------------------------------------------ | +| `slot` | तो स्लॉट ज्याच्याशी अटेस्टेशन संबंधित आहे | +| `index` | अटेस्टिंग व्हॅलिडेटर्ससाठी निर्देशांक | +| `beacon_block_root` | चेनचा हेड म्हणून पाहिल्या जाणाऱ्या बीकन ब्लॉकचा रूट हॅश | +| `स्रोत` | शेवटचा जस्टिफाइड चेकपॉइंट | +| `target` | नवीनतम इपॉक बाउंड्री ब्लॉक | + +`execution_payload` मधील व्यवहार कार्यान्वित केल्याने जागतिक स्थिती अद्यतनित होते. नवीन स्थिती नवीन ब्लॉकच्या `state_root` फील्डमधील स्थितीशी जुळते याची खात्री करण्यासाठी सर्व क्लायंट `execution_payload` मधील व्यवहार पुन्हा कार्यान्वित करतात. अशाप्रकारे क्लायंट्सना कळू शकते की नवीन ब्लॉक वैध आहे आणि त्यांच्या ब्लॉकचेनमध्ये जोडण्यासाठी सुरक्षित आहे. `execution payload` स्वतःच अनेक फील्ड्स असलेला एक ऑब्जेक्ट आहे. एक `execution_payload_header` सुद्धा आहे ज्यात एक्झिक्यूशन डेटाबद्दल महत्त्वाची सारांश माहिती असते. या डेटा संरचना खालीलप्रमाणे आयोजित केल्या आहेत: + +`execution_payload_header` मध्ये खालील फील्ड्स असतात: + +| फील्ड | वर्णन | +| :------------------ | :--------------------------------------------------------- | +| `parent_hash` | पॅरेंट ब्लॉकचा हॅश | +| `fee_recipient` | व्यवहार शुल्क भरण्यासाठी खाते पत्ता | +| `state_root` | या ब्लॉकमधील बदल लागू केल्यानंतर जागतिक स्थितीसाठी रूट हॅश | +| `receipts_root` | व्यवहार पावती ट्रायचा हॅश | +| `logs_bloom` | इव्हेंट लॉग्स असलेली डेटा संरचना | +| `prev_randao` | यादृच्छिक व्हॅलिडेटर निवडात वापरलेले मूल्य | +| `block_number` | सध्याच्या ब्लॉकचा क्रमांक | +| `gas_limit` | या ब्लॉकमध्ये परवानगी असलेली कमाल गॅस | +| `gas_used` | या ब्लॉकमध्ये वापरलेली गॅसची वास्तविक रक्कम | +| `timestamp` | ब्लॉकची वेळ | +| `extra_data` | रॉ बाइट्स म्हणून अनियंत्रित अतिरिक्त डेटा | +| `base_fee_per_gas` | बेस फी मूल्य | +| `block_hash` | एक्झिक्यूशन ब्लॉकचा हॅश | +| `transactions_root` | पेलोडमधील व्यवहारांचा रूट हॅश | +| `withdrawal_root` | पेलोडमधील काढलेल्या रकमांचा रूट हॅश | + +`execution_payload` मध्येच खालील गोष्टी असतात (लक्षात घ्या की हे हेडरसारखेच आहे, फक्त फरक एवढाच की व्यवहारांच्या रूट हॅशऐवजी यात व्यवहारांची प्रत्यक्ष यादी आणि काढलेल्या रकमेची माहिती समाविष्ट आहे): + +| फील्ड | वर्णन | +| :----------------- | :--------------------------------------------------------- | +| `parent_hash` | पॅरेंट ब्लॉकचा हॅश | +| `fee_recipient` | व्यवहार शुल्क भरण्यासाठी खाते पत्ता | +| `state_root` | या ब्लॉकमधील बदल लागू केल्यानंतर जागतिक स्थितीसाठी रूट हॅश | +| `receipts_root` | व्यवहार पावती ट्रायचा हॅश | +| `logs_bloom` | इव्हेंट लॉग्स असलेली डेटा संरचना | +| `prev_randao` | यादृच्छिक व्हॅलिडेटर निवडात वापरलेले मूल्य | +| `block_number` | सध्याच्या ब्लॉकचा क्रमांक | +| `gas_limit` | या ब्लॉकमध्ये परवानगी असलेली कमाल गॅस | +| `gas_used` | या ब्लॉकमध्ये वापरलेली गॅसची वास्तविक रक्कम | +| `timestamp` | ब्लॉकची वेळ | +| `extra_data` | रॉ बाइट्स म्हणून अनियंत्रित अतिरिक्त डेटा | +| `base_fee_per_gas` | बेस फी मूल्य | +| `block_hash` | एक्झिक्यूशन ब्लॉकचा हॅश | +| `व्यवहार` | कार्यान्वित करायच्या व्यवहारांची यादी | +| `withdrawals` | विथड्रॉवल ऑब्जेक्ट्सची यादी | + +`withdrawals` यादीत खालीलप्रमाणे संरचित `withdrawal` ऑब्जेक्ट्स असतात: + +| फील्ड | वर्णन | +| :--------------- | :---------------------------- | +| `address` | पैसे काढलेल्या खात्याचा पत्ता | +| `amount` | काढलेली रक्कम | +| `index` | विथड्रॉवल इंडेक्स मूल्य | +| `validatorIndex` | व्हॅलिडेटर इंडेक्स मूल्य | + +## ब्लॉकची वेळ {#block-time} + +ब्लॉकची वेळ म्हणजे ब्लॉक्सना वेगळे करणारी वेळ. Ethereum मध्ये, वेळेची विभागणी 'स्लॉट्स' नावाच्या बारा सेकंदांच्या युनिट्समध्ये केली जाते. प्रत्येक स्लॉटमध्ये ब्लॉक प्रस्तावित करण्यासाठी एकच व्हॅलिडेटर निवडला जातो. सर्व व्हॅलिडेटर्स ऑनलाइन आणि पूर्णपणे कार्यरत आहेत असे गृहीत धरल्यास, प्रत्येक स्लॉटमध्ये एक ब्लॉक असेल, म्हणजेच ब्लॉकची वेळ १२ सेकंद आहे. तथापि, कधीकधी व्हॅलिडेटर्स ब्लॉक प्रस्तावित करण्यासाठी बोलावल्यावर ऑफलाइन असू शकतात, म्हणजे स्लॉट्स कधीकधी रिकामे जाऊ शकतात. + +ही अंमलबजावणी प्रूफ-ऑफ-वर्क आधारित प्रणालींपेक्षा वेगळी आहे, जिथे ब्लॉकच्या वेळा संभाव्य असतात आणि प्रोटोकॉलच्या लक्ष्यित मायनिंग डिफिकल्टीद्वारे ट्यून केल्या जातात. Ethereum ची [सरासरी ब्लॉक वेळ](https://etherscan.io/chart/blocktime) हे याचे उत्तम उदाहरण आहे, ज्याद्वारे नवीन १२ सेकंदांच्या ब्लॉक वेळेच्या सुसंगततेच्या आधारावर प्रूफ-ऑफ-वर्ककडून प्रूफ-ऑफ-स्टेककडे संक्रमण स्पष्टपणे अनुमानित केले जाऊ शकते. + +## ब्लॉकचा आकार {#block-size} + +एक शेवटची महत्त्वाची गोष्ट म्हणजे ब्लॉक्स स्वतः आकारात मर्यादित असतात. प्रत्येक ब्लॉकचे लक्ष्यित आकार ३० दशलक्ष गॅस आहे, परंतु नेटवर्कच्या मागणीनुसार ब्लॉक्सचा आकार वाढेल किंवा कमी होईल, तो ६० दशलक्ष गॅसच्या ब्लॉक मर्यादेपर्यंत (लक्ष्यित ब्लॉक आकाराच्या २ पट) जाईल. ब्लॉक गॅस मर्यादा मागील ब्लॉकच्या गॅस मर्यादेवरून १/१०२४ च्या घटकाने वर किंवा खाली समायोजित केली जाऊ शकते. परिणामी, व्हॅलिडेटर्स एकमताने ब्लॉक गॅस मर्यादा बदलू शकतात. ब्लॉकमधील सर्व व्यवहारांद्वारे खर्च केलेल्या गॅसची एकूण रक्कम ब्लॉक गॅस मर्यादेपेक्षा कमी असणे आवश्यक आहे. हे महत्त्वाचे आहे कारण ते सुनिश्चित करते की ब्लॉक्स अनियंत्रितपणे मोठे असू शकत नाहीत. जर ब्लॉक्स अनियंत्रितपणे मोठे असू शकले असते, तर कमी कार्यक्षम फुल नोड्स जागेच्या आणि गतीच्या आवश्यकतांमुळे हळूहळू नेटवर्कसोबत राहू शकणार नाहीत. ब्लॉक जितका मोठा, तितकी जास्त संगणकीय शक्ती पुढील स्लॉटच्या वेळेत त्यांना प्रक्रिया करण्यासाठी आवश्यक असते. ही एक केंद्रीकरण करणारी शक्ती आहे, ज्याला ब्लॉकच्या आकारावर मर्यादा घालून विरोध केला जातो. + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [व्यवहार](/developers/docs/transactions/) +- [गॅस](/developers/docs/gas/) +- [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) diff --git a/public/content/translations/mr/developers/docs/bridges/index.md b/public/content/translations/mr/developers/docs/bridges/index.md new file mode 100644 index 00000000000..d049759b09f --- /dev/null +++ b/public/content/translations/mr/developers/docs/bridges/index.md @@ -0,0 +1,138 @@ +--- +title: "ब्रिज" +description: "डेव्हलपर्ससाठी ब्रिजिंगचे एक अवलोकन" +lang: mr +--- + +L1 ब्लॉकचेन आणि L2 [स्केलिंग](/developers/docs/scaling/) सोल्यूशन्सच्या प्रसारामुळे, तसेच क्रॉस-चेन जाणाऱ्या विकेंद्रित ऍप्लिकेशन्सच्या सतत वाढणाऱ्या संख्येमुळे, चेन्समध्ये संवाद आणि मालमत्तांच्या देवाणघेवाणीची गरज नेटवर्क इन्फ्रास्ट्रक्चरचा एक आवश्यक भाग बनली आहे. हे शक्य करण्यासाठी विविध प्रकारचे ब्रिज अस्तित्वात आहेत. + +## ब्रिजची गरज {#need-for-bridges} + +ब्लॉकचेन नेटवर्कला जोडण्यासाठी ब्रिज अस्तित्वात आहेत. ते ब्लॉकचेन दरम्यान कनेक्टिव्हिटी आणि इंटरऑपरेबिलिटी सक्षम करतात. + +ब्लॉकचेन वेगळ्या वातावरणात अस्तित्वात आहेत, याचा अर्थ ब्लॉकचेनसाठी नैसर्गिकरित्या इतर ब्लॉकचेनशी व्यापार आणि संवाद साधण्याचा कोणताही मार्ग नाही. परिणामी, इकोसिस्टममध्ये महत्त्वपूर्ण क्रियाकलाप आणि नवनवीन शोध असू शकतात, परंतु ते इतर इकोसिस्टमसह कनेक्टिव्हिटी आणि इंटरऑपरेबिलिटीच्या अभावामुळे मर्यादित आहे. + +ब्रिज वेगळ्या ब्लॉकचेन वातावरणाला एकमेकांशी जोडण्याचा मार्ग देतात. ते ब्लॉकचेन दरम्यान एक वाहतुकीचा मार्ग स्थापित करतात, जिथे टोकन, मेसेज, कोणतेही डेटा आणि अगदी [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/) कॉल्स एका चेनमधून दुसऱ्या चेनमध्ये हस्तांतरित केले जाऊ शकतात. + +## ब्रिजचे फायदे {#benefits-of-bridges} + +सोप्या भाषेत सांगायचे तर, ब्रिज ब्लॉकचेन नेटवर्क्सना डेटाची देवाणघेवाण करण्याची आणि त्यांच्यात मालमत्ता हस्तांतरित करण्याची परवानगी देऊन अनेक वापर प्रकरणे अनलॉक करतात. + +ब्लॉकचेनमध्ये अनन्य सामर्थ्ये, कमकुवतता आणि ॲप्लिकेशन्स तयार करण्याचे दृष्टिकोन असतात (जसे की वेग, थ्रुपुट, खर्च इ.). ब्रिज ब्लॉकचेनना एकमेकांच्या नवनवीन कल्पनांचा फायदा घेण्यास सक्षम करून संपूर्ण क्रिप्टो इकोसिस्टमच्या विकासास मदत करतात. + +डेव्हलपर्ससाठी, ब्रिज खालील गोष्टी सक्षम करतात: + +- चेनमध्ये कोणताही डेटा, माहिती आणि मालमत्तांचे हस्तांतरण. +- प्रोटोकॉलसाठी नवीन वैशिष्ट्ये आणि वापर प्रकरणे अनलॉक करणे, कारण ब्रिज प्रोटोकॉल काय देऊ शकतात यासाठी डिझाइनची जागा विस्तृत करतात. उदाहरणार्थ, इथरियम मेननेटवर मूळतः तैनात केलेला यिल्ड फार्मिंगसाठी एक प्रोटोकॉल सर्व EVM-सुसंगत चेनवर लिक्विडिटी पूल देऊ शकतो. +- वेगवेगळ्या ब्लॉकचेनच्या सामर्थ्यांचा फायदा घेण्याची संधी. उदाहरणार्थ, डेव्हलपर रोलअप आणि साइडचेनवर त्यांचे dapps तैनात करून विविध L2 सोल्यूशन्सद्वारे देऊ केलेल्या कमी शुल्काचा लाभ घेऊ शकतात आणि वापरकर्ते त्यांच्यामध्ये ब्रिज करू शकतात. +- नवीन उत्पादने तयार करण्यासाठी विविध ब्लॉकचेन इकोसिस्टममधील डेव्हलपर्समधील सहयोग. +- विविध इकोसिस्टममधील वापरकर्ते आणि समुदायांना त्यांच्या dapps कडे आकर्षित करणे. + +## ब्रिज कसे काम करतात? {#how-do-bridges-work} + +जरी अनेक [ब्रिज डिझाइनचे प्रकार](https://li.fi/knowledge-hub/blockchain-bridges-and-classification/) असले तरी, मालमत्तांचे क्रॉस-चेन हस्तांतरण सुलभ करण्यासाठी तीन मार्ग आहेत: + +- **लॉक आणि मिंट –** सोर्स चेनवर मालमत्ता लॉक करा आणि डेस्टिनेशन चेनवर मालमत्ता मिंट करा. +- **बर्न आणि मिंट –** सोर्स चेनवर मालमत्ता बर्न करा आणि डेस्टिनेशन चेनवर मालमत्ता मिंट करा. +- **ॲटॉमिक स्वॅप –** सोर्स चेनवरील मालमत्तेची डेस्टिनेशन चेनवरील मालमत्तेसाठी दुसऱ्या पक्षासोबत देवाणघेवाण करा. + +## ब्रिजचे प्रकार {#bridge-types} + +ब्रिजचे साधारणपणे खालीलपैकी एका गटात वर्गीकरण केले जाऊ शकते: + +- **नेटिव्ह ब्रिज –** हे ब्रिज सामान्यतः विशिष्ट ब्लॉकचेनवर लिक्विडिटी निर्माण करण्यासाठी तयार केले जातात, ज्यामुळे वापरकर्त्यांना इकोसिस्टममध्ये निधी हस्तांतरित करणे सोपे होते. उदाहरणार्थ, [आर्बिट्रम ब्रिज](https://bridge.arbitrum.io/) वापरकर्त्यांना इथरियम मेननेटवरून आर्बिट्रमवर ब्रिज करणे सोयीचे व्हावे यासाठी तयार केला आहे. इतर अशा ब्रिजमध्ये पॉलीगॉन PoS ब्रिज, [ऑप्टिमिझम गेटवे](https://app.optimism.io/bridge) इत्यादींचा समावेश आहे. +- **व्हॅलिडेटर किंवा ऑरेकल आधारित ब्रिज –** हे ब्रिज क्रॉस-चेन हस्तांतरण प्रमाणित करण्यासाठी बाह्य व्हॅलिडेटर सेट किंवा ऑरेकलवर अवलंबून असतात. उदाहरणे: मल्टीचेन आणि अक्रॉस. +- **जनरलाइज्ड मेसेज पासिंग ब्रिज –** हे ब्रिज मालमत्ता, तसेच मेसेज आणि कोणताही डेटा चेनमध्ये हस्तांतरित करू शकतात. उदाहरणे: एक्सेलार, लेयरझिरो, आणि नोमॅड. +- **लिक्विडिटी नेटवर्क्स –** हे ब्रिज प्रामुख्याने एका चेनमधून दुसऱ्या चेनमध्ये ॲटॉमिक स्वॅपद्वारे मालमत्ता हस्तांतरित करण्यावर लक्ष केंद्रित करतात. सामान्यतः, ते क्रॉस-चेन मेसेज पासिंगला समर्थन देत नाहीत. उदाहरणे: कनेक्स्ट आणि हॉप. + +## विचारात घेण्यासारखे ट्रेड-ऑफ {#trade-offs} + +ब्रिजच्या बाबतीत, कोणतेही परिपूर्ण उपाय नाहीत. त्याऐवजी, उद्देश पूर्ण करण्यासाठी केवळ तडजोड केली जाते. डेव्हलपर आणि वापरकर्ते खालील घटकांच्या आधारे ब्रिजचे मूल्यांकन करू शकतात: + +- **सुरक्षा –** सिस्टम कोण सत्यापित करते? बाह्य व्हॅलिडेटर्सद्वारे सुरक्षित केलेले ब्रिज सामान्यतः ब्लॉकचेनच्या व्हॅलिडेटर्सद्वारे स्थानिक किंवा मूळतः सुरक्षित केलेल्या ब्रिजपेक्षा कमी सुरक्षित असतात. +- **सोय –** एक व्यवहार पूर्ण होण्यासाठी किती वेळ लागतो आणि वापरकर्त्याला किती व्यवहार साइन करावे लागतात? एका डेव्हलपरसाठी, ब्रिज इंटिग्रेट करण्यासाठी किती वेळ लागतो आणि प्रक्रिया किती गुंतागुंतीची आहे? +- **कनेक्टिव्हिटी –** ब्रिज कोणत्या वेगवेगळ्या डेस्टिनेशन चेन्सला कनेक्ट करू शकतो (उदा., रोलअप्स, साइडचेन्स, इतर लेयर 1 ब्लॉकचेन्स, इत्यादी), आणि नवीन ब्लॉकचेन इंटिग्रेट करणे किती कठीण आहे? +- **अधिक गुंतागुंतीचा डेटा पास करण्याची क्षमता –** ब्रिज चेनमध्ये मेसेज आणि अधिक गुंतागुंतीचा डेटा हस्तांतरित करण्यास सक्षम करू शकतो, की तो फक्त क्रॉस-चेन मालमत्ता हस्तांतरणास समर्थन देतो? +- **खर्च-प्रभावीपणा –** ब्रिजद्वारे चेनमध्ये मालमत्ता हस्तांतरित करण्यासाठी किती खर्च येतो? सामान्यतः, ब्रिज गॅसच्या खर्चावर आणि विशिष्ट मार्गांच्या लिक्विडिटीवर अवलंबून निश्चित किंवा बदलणारे शुल्क आकारतात. ब्रिजची सुरक्षा सुनिश्चित करण्यासाठी आवश्यक असलेल्या भांडवलाच्या आधारे त्याच्या खर्च-प्रभावीपणाचे मूल्यांकन करणे देखील महत्त्वाचे आहे. + +उच्च स्तरावर, ब्रिजचे वर्गीकरण विश्वासार्ह आणि विश्वासहीन असे केले जाऊ शकते. + +- **विश्वासार्ह –** विश्वासार्ह ब्रिज बाह्यतः सत्यापित केले जातात. ते चेनमध्ये डेटा पाठवण्यासाठी बाह्य सत्यापनकर्त्यांचा (मल्टी-सिगसह फेडरेशन, मल्टी-पार्टी कंप्युटेशन सिस्टम, ऑरेकल नेटवर्क) वापर करतात. परिणामी, ते उत्तम कनेक्टिव्हिटी देऊ शकतात आणि चेनमध्ये पूर्णपणे सामान्यीकृत मेसेज पासिंग सक्षम करू शकतात. ते वेग आणि खर्च-प्रभावीपणामध्येही चांगले काम करतात. हे सुरक्षेच्या खर्चावर येते, कारण वापरकर्त्यांना ब्रिजच्या सुरक्षेवर अवलंबून राहावे लागते. +- **विश्वासहीन –** हे ब्रिज मेसेज आणि टोकन हस्तांतरित करण्यासाठी ते जोडत असलेल्या ब्लॉकचेन आणि त्यांच्या व्हॅलिडेटर्सवर अवलंबून असतात. ते 'विश्वासहीन' आहेत कारण ते (ब्लॉकचेन व्यतिरिक्त) नवीन विश्वासाच्या धारणा जोडत नाहीत. परिणामी, विश्वासहीन ब्रिज विश्वासार्ह ब्रिजपेक्षा अधिक सुरक्षित मानले जातात. + +इतर घटकांवर विश्वासहीन ब्रिजचे मूल्यांकन करण्यासाठी, आपल्याला त्यांना सामान्यीकृत मेसेज पासिंग ब्रिज आणि लिक्विडिटी नेटवर्क्समध्ये विभाजित करावे लागेल. + +- **जनरलाइज्ड मेसेज पासिंग ब्रिज –** हे ब्रिज सुरक्षा आणि चेनमध्ये अधिक गुंतागुंतीचा डेटा हस्तांतरित करण्याच्या क्षमतेत उत्कृष्ट आहेत. सामान्यतः, ते खर्च-प्रभावीपणामध्येही चांगले असतात. तथापि, ही सामर्थ्ये सामान्यतः लाइट क्लायंट ब्रिजसाठी कनेक्टिव्हिटीच्या खर्चावर येतात (उदा: IBC) आणि फ्रॉड प्रूफ वापरणाऱ्या ऑप्टिमिस्टिक ब्रिजसाठी (उदा: Nomad) वेगातील कमतरतांच्या स्वरूपात येतात. +- **लिक्विडिटी नेटवर्क्स –** हे ब्रिज मालमत्ता हस्तांतरित करण्यासाठी ॲटॉमिक स्वॅप वापरतात आणि स्थानिकरित्या सत्यापित प्रणाली आहेत (म्हणजे, ते व्यवहार सत्यापित करण्यासाठी अंतर्निहित ब्लॉकचेनच्या व्हॅलिडेटर्सचा वापर करतात). परिणामी, ते सुरक्षा आणि वेगात उत्कृष्ट आहेत. शिवाय, ते तुलनेने खर्च-प्रभावी मानले जातात आणि चांगली कनेक्टिव्हिटी देतात. तथापि, मोठी तडजोड म्हणजे त्यांची अधिक गुंतागुंतीचा डेटा पास करण्याची असमर्थता – कारण ते क्रॉस-चेन मेसेज पासिंगला समर्थन देत नाहीत. + +## ब्रिजमधील धोका {#risk-with-bridges} + +[DeFi मधील सर्वात मोठ्या हॅक](https://rekt.news/leaderboard/) मध्ये ब्रिजचा पहिल्या तीनमध्ये समावेश आहे आणि ते अजूनही विकासाच्या सुरुवातीच्या टप्प्यात आहेत. कोणताही ब्रिज वापरताना खालील धोके असतात: + +- **स्मार्ट कॉन्ट्रॅक्ट धोका –** अनेक ब्रिजेसनी यशस्वीरित्या ऑडिट पास केले असले तरी, मालमत्ता हॅक होण्यासाठी स्मार्ट कॉन्ट्रॅक्टमधील एक त्रुटी पुरेशी आहे (उदा: [सोलानाचा वर्महोल ब्रिज](https://rekt.news/wormhole-rekt/)). +- **प्रणालीगत आर्थिक धोके** – अनेक ब्रिज नवीन चेनवर मूळ मालमत्तेची कॅनोनिकल आवृत्ती मिंट करण्यासाठी रॅप्ड मालमत्ता वापरतात. हे इकोसिस्टमला प्रणालीगत धोक्यात आणते, जसे आपण टोकनच्या रॅप्ड आवृत्त्यांचे शोषण होताना पाहिले आहे. +- **काउंटरपार्टी धोका –** काही ब्रिज विश्वासार्ह डिझाइन वापरतात ज्यात वापरकर्त्यांना या गृहितकावर अवलंबून राहावे लागते की व्हॅलिडेटर्स वापरकर्त्यांचे निधी चोरण्यासाठी संगनमत करणार नाहीत. वापरकर्त्यांना या तृतीय-पक्ष कलाकारांवर विश्वास ठेवण्याची गरज त्यांना रग पुल्स, सेन्सॉरशिप आणि इतर दुर्भावनापूर्ण क्रियाकलापांसारख्या धोक्यात आणते. +- **खुल्या समस्या –** ब्रिज विकासाच्या सुरुवातीच्या टप्प्यात असल्याने, ब्रिज वेगवेगळ्या बाजाराच्या परिस्थितीत, जसे की नेटवर्क गर्दीच्या वेळी आणि नेटवर्क-स्तरीय हल्ले किंवा स्टेट रोलबॅकसारख्या अनपेक्षित घटनांमध्ये कसे कार्य करतील याबद्दल अनेक अनुत्तरित प्रश्न आहेत. ही अनिश्चितता काही धोके निर्माण करते, ज्याची डिग्री अजूनही अज्ञात आहे. + +## dapps ब्रिज कसे वापरू शकतात? {#how-can-dapps-use-bridges} + +येथे काही व्यावहारिक ऍप्लिकेशन्स आहेत ज्यांचा डेव्हलपर ब्रिज आणि त्यांचे dapp क्रॉस-चेन नेण्याबद्दल विचार करू शकतात: + +### ब्रिज इंटिग्रेट करणे {#integrating-bridges} + +डेव्हलपर्ससाठी, ब्रिजसाठी समर्थन जोडण्याचे अनेक मार्ग आहेत: + +1. **स्वतःचा ब्रिज तयार करणे –** एक सुरक्षित आणि विश्वासार्ह ब्रिज तयार करणे सोपे नाही, विशेषतः जर तुम्ही अधिक विश्वास-कमी केलेला मार्ग निवडला तर. शिवाय, यासाठी स्केलेबिलिटी आणि इंटरऑपरेबिलिटी अभ्यासाशी संबंधित अनेक वर्षांचा अनुभव आणि तांत्रिक कौशल्य आवश्यक आहे. याव्यतिरिक्त, ब्रिजची देखभाल करण्यासाठी आणि तो व्यवहार्य बनवण्यासाठी पुरेसे लिक्विडिटी आकर्षित करण्यासाठी एक प्रत्यक्ष टीमची आवश्यकता असेल. + +2. **वापरकर्त्यांना अनेक ब्रिज पर्याय दर्शवणे –** अनेक [dapps](/developers/docs/dapps/) वापरकर्त्यांना त्यांच्याशी संवाद साधण्यासाठी त्यांचे नेटिव्ह टोकन असणे आवश्यक असते. वापरकर्त्यांना त्यांचे टोकन मिळवता यावे यासाठी, ते त्यांच्या वेबसाइटवर वेगवेगळे ब्रिज पर्याय देतात. तथापि, ही पद्धत समस्येवर एक जलद उपाय आहे कारण ती वापरकर्त्याला dapp इंटरफेसपासून दूर नेते आणि तरीही त्यांना इतर dapps आणि ब्रिजशी संवाद साधावा लागतो. हा एक त्रासदायक ऑनबोर्डिंग अनुभव आहे ज्यात चुका करण्याची व्याप्ती वाढते. + +3. **ब्रिज इंटिग्रेट करणे –** या सोल्यूशनमध्ये dapp ला वापरकर्त्यांना बाह्य ब्रिज आणि DEX इंटरफेसवर पाठवण्याची गरज नाही. हे dapps ला वापरकर्ता ऑनबोर्डिंग अनुभव सुधारण्यास अनुमती देते. तथापि, या दृष्टिकोनाला त्याच्या मर्यादा आहेत: + + - ब्रिजचे मूल्यांकन आणि देखभाल करणे कठीण आणि वेळखाऊ आहे. + - एक ब्रिज निवडल्याने एकच अपयशाचा बिंदू आणि अवलंबित्व निर्माण होते. + - dapp ब्रिजच्या क्षमतांनी मर्यादित आहे. + - एकटे ब्रिज पुरेसे नसतील. dapps ला क्रॉस-चेन स्वॅपसारखी अधिक कार्यक्षमता देण्यासाठी DEX ची आवश्यकता असू शकते. + +4. **एकाधिक ब्रिज इंटिग्रेट करणे –** हे सोल्यूशन एकाच ब्रिजला इंटिग्रेट करण्याशी संबंधित अनेक समस्या सोडवते. तथापि, यालाही मर्यादा आहेत, कारण एकाधिक ब्रिज इंटिग्रेट करणे संसाधन-खर्चीक आहे आणि डेव्हलपर्ससाठी तांत्रिक आणि संवाद ओव्हरहेड्स तयार करते—जे क्रिप्टोमधील सर्वात दुर्मिळ संसाधन आहे. + +5. **ब्रिज ॲग्रीगेटर इंटिग्रेट करणे –** dapps साठी दुसरा पर्याय म्हणजे ब्रिज ॲग्रीगेशन सोल्यूशन इंटिग्रेट करणे जे त्यांना एकाधिक ब्रिजमध्ये प्रवेश देते. ब्रिज ॲग्रीगेटर सर्व ब्रिजची शक्ती वारसाहक्काने घेतात आणि त्यामुळे कोणत्याही एका ब्रिजच्या क्षमतेने मर्यादित नसतात. विशेषतः, ब्रिज ॲग्रीगेटर सामान्यतः ब्रिज इंटिग्रेशनची देखभाल करतात, ज्यामुळे dapp ला ब्रिज इंटिग्रेशनच्या तांत्रिक आणि कार्यान्वयन पैलूंवर लक्ष ठेवण्याच्या त्रासातून वाचवते. + +असे असले तरी, ब्रिज ॲग्रीगेटर्सनाही त्यांच्या मर्यादा आहेत. उदाहरणार्थ, ते अधिक ब्रिज पर्याय देऊ शकत असले तरी, बाजारात साधारणपणे ॲग्रीगेटरच्या प्लॅटफॉर्मवर दिलेल्या पर्यायांपेक्षा बरेच अधिक ब्रिज उपलब्ध असतात. शिवाय, ब्रिजप्रमाणेच, ब्रिज ॲग्रीगेटर देखील स्मार्ट कॉन्ट्रॅक्ट आणि तंत्रज्ञान धोक्यात असतात (अधिक स्मार्ट कॉन्ट्रॅक्ट्स = अधिक धोके). + +जर dapp ब्रिज किंवा ॲग्रीगेटर इंटिग्रेट करण्याच्या मार्गावर जात असेल, तर इंटिग्रेशन किती खोलवर करायचे आहे यावर आधारित वेगवेगळे पर्याय आहेत. उदाहरणार्थ, जर ते केवळ वापरकर्ता ऑनबोर्डिंग अनुभव सुधारण्यासाठी फ्रंट-एंड इंटिग्रेशन असेल, तर dapp विजेट इंटिग्रेट करेल. तथापि, जर इंटिग्रेशन स्टेकिंग, यिल्ड फार्मिंग इत्यादींसारख्या खोल क्रॉस-चेन धोरणांचा शोध घेण्यासाठी असेल, तर dapp SDK किंवा API इंटिग्रेट करेल. + +### एकाधिक चेनवर dapp तैनात करणे {#deploying-a-dapp-on-multiple-chains} + +एकाधिक चेनवर dapp तैनात करण्यासाठी, डेव्हलपर [अल्केमी](https://www.alchemy.com/), [हार्डहॅट](https://hardhat.org/), [मोरॅलिस](https://moralis.io/) इत्यादींसारख्या डेव्हलपमेंट प्लॅटफॉर्मचा वापर करू शकतात. सामान्यतः, हे प्लॅटफॉर्म कंपोजेबल प्लगइन्ससह येतात जे dapps ला क्रॉस-चेन जाण्यास सक्षम करू शकतात. उदाहरणार्थ, डेव्हलपर [हार्डहॅट-डिप्लॉय प्लगइन](https://github.com/wighawag/hardhat-deploy) द्वारे ऑफर केलेल्या डिटरमिनिस्टिक डिप्लॉयमेंट प्रॉक्सीचा वापर करू शकतात. + +#### उदाहरणे: + +- [क्रॉस-चेन dapps कसे तयार करावे](https://moralis.io/how-to-build-cross-chain-dapps/) +- [क्रॉस-चेन NFT मार्केटप्लेस तयार करणे](https://youtu.be/WZWCzsB1xUE) +- [मोरॅलिस: क्रॉस-चेन NFT dapps तयार करणे](https://www.youtube.com/watch?v=ehv70kE1QYo) + +### चेनवर कॉन्ट्रॅक्टच्या क्रियाकलापांचे निरीक्षण करणे {#monitoring-contract-activity-across-chains} + +चेनवर कॉन्ट्रॅक्टच्या क्रियाकलापांचे निरीक्षण करण्यासाठी, डेव्हलपर सबग्राफ आणि टेंडेरलीसारख्या डेव्हलपर प्लॅटफॉर्मचा वापर करून स्मार्ट कॉन्ट्रॅक्टचे रिअल-टाइममध्ये निरीक्षण करू शकतात. अशा प्लॅटफॉर्ममध्ये अशी साधने देखील असतात जी क्रॉस-चेन क्रियाकलापांसाठी अधिक डेटा मॉनिटरिंग कार्यक्षमता देतात, जसे की [कॉन्ट्रॅक्ट्सद्वारे उत्सर्जित केलेल्या इव्हेंट्स](https://docs.soliditylang.org/en/v0.8.14/contracts.html?highlight=events#events) तपासणे इत्यादी. + +#### साधने + +- [द ग्राफ](https://thegraph.com/en/) +- [टेंडरली](https://tenderly.co/) + +## पुढील वाचन {#further-reading} + +- [ब्लॉकचेन ब्रिज](/bridges/) – ethereum.org +- [L2Beat ब्रिज रिस्क फ्रेमवर्क](https://l2beat.com/bridges/summary) +- [ब्लॉकचेन ब्रिज: क्रिप्टोनिटवर्क्सचे नेटवर्क तयार करणे](https://medium.com/1kxnetwork/blockchain-bridges-5db6afac44f8) - ८ सप्टेंबर, २०२१ – दिमित्री बेरेन्झॉन +- [द इंटरऑपरेबिलिटी ट्रायलेमा](https://blog.connext.network/the-interoperability-trilemma-657c2cf69f17) - १ ऑक्टोबर, २०२१ – अर्जुन भुप्तानी +- [क्लस्टर्स: विश्वासार्ह आणि विश्वास-कमी केलेले ब्रिज मल्टी-चेन लँडस्केप कसे आकार देतात](https://blog.celestia.org/clusters/) - ४ ऑक्टोबर, २०२१ – मुस्तफा अल-बस्सम +- [LI.FI: ब्रिजसह, विश्वास एक स्पेक्ट्रम आहे](https://blog.li.fi/li-fi-with-bridges-trust-is-a-spectrum-354cd5a1a6d8) - २८ एप्रिल, २०२२ – अर्जुन चंद +- [रोलअप इंटरऑपरेबिलिटी सोल्यूशन्सची स्थिती](https://web.archive.org/web/20250428015516/https://research.2077.xyz/the-state-of-rollup-interoperability) - २० जून, २०२४ – ॲलेक्स हूक +- [सुरक्षित क्रॉस-चेन इंटरऑपरेबिलिटीसाठी शेअर केलेल्या सुरक्षेचा वापर करणे: लॅग्रेंज स्टेट कमिटी आणि त्यापलीकडे](https://web.archive.org/web/20250125035123/https://research.2077.xyz/harnessing-shared-security-for-secure-blockchain-interoperability) - १२ जून, २०२४ – इमॅन्युएल अवोसिका + +याव्यतिरिक्त, येथे [जेम्स प्रेस्टविच](https://twitter.com/_prestwich) द्वारे काही अंतर्दृष्टीपूर्ण सादरीकरणे आहेत जी ब्रिजची सखोल समज विकसित करण्यात मदत करू शकतात: + +- [भिंतींच्या बागा नव्हे, तर ब्रिज बांधणे](https://youtu.be/ZQJWMiX4hT0) +- [ब्रिजचे विश्लेषण](https://youtu.be/b0mC-ZqN8Oo) +- [ब्रिज का जळत आहेत](https://youtu.be/c7cm2kd20j8) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/index.md new file mode 100644 index 00000000000..217b68bbec0 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/index.md @@ -0,0 +1,92 @@ +--- +title: "सहमती यंत्रणा" +description: "वितरित प्रणालींमधील सहमती प्रोटोकॉल आणि इथेरियममध्ये त्यांची भूमिका याचे स्पष्टीकरण." +lang: mr +--- + +'सहमती यंत्रणा' हा शब्द 'प्रूफ-ऑफ-स्टेक', 'प्रूफ-ऑफ-वर्क' किंवा 'प्रूफ-ऑफ-अथॉरिटी' प्रोटोकॉलचा संदर्भ देण्यासाठी बोलचालीत वापरला जातो. तथापि, हे फक्त सहमती यंत्रणेतील घटक आहेत जे [सिबिल हल्ल्यांपासून](/glossary/#sybil-attack) संरक्षण करतात. सहमती यंत्रणा म्हणजे कल्पना, प्रोटोकॉल आणि प्रोत्साहनांचा संपूर्ण स्टॅक जो नोड्सच्या वितरित संचाला ब्लॉकचेनच्या स्थितीवर सहमत होण्यास सक्षम करतो. + +## पूर्वतयारी {#prerequisites} + +हे पान अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम आमचे [इथेरियमची ओळख](/developers/docs/intro-to-ethereum/) वाचा. + +## सहमती म्हणजे काय? {#what-is-consensus} + +सहमतीने, आमचा अर्थ असा आहे की एक सामान्य करार झाला आहे. सिनेमाला जाणाऱ्या लोकांच्या गटाचा विचार करा. जर चित्रपटाच्या प्रस्तावित निवडीवर कोणताही मतभेद नसेल, तर सहमती साधली जाते. जर मतभेद असतील, तर कोणता चित्रपट पाहायचा हे ठरवण्यासाठी गटाकडे साधन असणे आवश्यक आहे. टोकाच्या परिस्थितीत, गट अखेरीस विभाजित होईल. + +इथेरियम ब्लॉकचेनच्या संदर्भात, प्रक्रिया औपचारिक केली आहे आणि सहमती गाठणे म्हणजे नेटवर्कवरील किमान 66% नोड्स नेटवर्कच्या जागतिक स्थितीवर सहमत आहेत. + +## सहमती यंत्रणा म्हणजे काय? {#what-is-a-consensus-mechanism} + +सहमती यंत्रणा हा शब्द प्रोटोकॉल, प्रोत्साहन आणि कल्पनांच्या संपूर्ण स्टॅकचा संदर्भ देतो जे नोड्सच्या नेटवर्कला ब्लॉकचेनच्या स्थितीवर सहमत होऊ देतात. + +इथेरियम प्रूफ-ऑफ-स्टेक-आधारित सहमती यंत्रणा वापरते जी स्टेकर्सद्वारे लॉक केलेल्या भांडवलावर लागू केलेल्या बक्षिसे आणि दंडांच्या संचामधून तिची क्रिप्टो-आर्थिक सुरक्षा प्राप्त करते. ही प्रोत्साहन रचना वैयक्तिक स्टेकर्सना प्रामाणिक व्हॅलिडेटर चालवण्यासाठी प्रोत्साहित करते, जे करत नाहीत त्यांना शिक्षा देते आणि नेटवर्कवर हल्ला करण्यासाठी अत्यंत उच्च खर्च निर्माण करते. + +मग, एक प्रोटोकॉल आहे जो प्रामाणिक व्हॅलिडेटर्सना ब्लॉक प्रस्तावित किंवा प्रमाणित करण्यासाठी, व्यवहारांवर प्रक्रिया करण्यासाठी आणि चेनच्या हेडबद्दल त्यांच्या मतासाठी मतदान करण्यासाठी कसे निवडले जाते हे नियंत्रित करतो. क्वचित प्रसंगी, जेव्हा एकापेक्षा जास्त ब्लॉक्स चेनच्या हेडजवळ एकाच स्थितीत असतात, तेव्हा एक फोर्क-चॉइस यंत्रणा असते जी 'सर्वात जड' चेन बनवणारे ब्लॉक्स निवडते, जे त्यांच्या स्टेक केलेल्या इथर बॅलन्सनुसार भारित केलेल्या ब्लॉक्ससाठी मतदान करणाऱ्या व्हॅलिडेटर्सच्या संख्येनुसार मोजले जाते. + +सहमतीसाठी काही संकल्पना महत्त्वाच्या आहेत ज्या कोडमध्ये स्पष्टपणे परिभाषित केलेल्या नाहीत, जसे की नेटवर्कवरील हल्ल्यांविरुद्ध संरक्षणाची शेवटची ओळ म्हणून संभाव्य आउट-ऑफ-बँड सामाजिक समन्वयाद्वारे देऊ केलेली अतिरिक्त सुरक्षा. + +हे घटक मिळून सहमती यंत्रणा तयार करतात. + +## सहमती यंत्रणेचे प्रकार {#types-of-consensus-mechanisms} + +### प्रूफ-ऑफ-वर्क आधारित {#proof-of-work} + +बिटकॉइनप्रमाणे, इथेरियमने एकेकाळी **प्रूफ-ऑफ-वर्क (PoW)** आधारित सहमती प्रोटोकॉल वापरला. + +#### ब्लॉक निर्मिती {#pow-block-creation} + +मायनर्स प्रक्रिया केलेल्या व्यवहारांनी भरलेले नवीन ब्लॉक्स तयार करण्यासाठी स्पर्धा करतात. विजेता नवीन ब्लॉक नेटवर्कच्या उर्वरित भागासह शेअर करतो आणि काही नव्याने तयार केलेले ETH मिळवतो. ही शर्यत तो संगणक जिंकतो जो गणिताचे कोडे सर्वात वेगाने सोडवू शकतो. हे सध्याचा ब्लॉक आणि त्यापूर्वीच्या ब्लॉकमध्ये क्रिप्टोग्राफिक दुवा तयार करते. हे कोडे सोडवणे हेच "प्रूफ-ऑफ-वर्क" मधील काम आहे. कॅनॉनिकल चेन नंतर फोर्क-चॉइस नियमाद्वारे निर्धारित केली जाते जी ब्लॉक्सचा संच निवडते ज्यांना माइन करण्यासाठी सर्वात जास्त काम केले गेले आहे. + +#### सुरक्षा {#pow-security} + +चेनची फसवणूक करण्यासाठी तुम्हाला नेटवर्कच्या संगणकीय शक्तीपैकी 51% शक्तीची आवश्यकता असेल या वस्तुस्थितीमुळे नेटवर्क सुरक्षित ठेवले जाते. यासाठी उपकरणे आणि उर्जेमध्ये मोठ्या प्रमाणात गुंतवणूक करावी लागेल; तुम्हाला जेवढा फायदा होईल त्यापेक्षा जास्त खर्च होण्याची शक्यता आहे. + +[प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) वर अधिक + +### प्रूफ-ऑफ-स्टेक आधारित {#proof-of-stake} + +इथेरियम आता **प्रूफ-ऑफ-स्टेक (PoS)** आधारित सहमती प्रोटोकॉल वापरते. + +#### ब्लॉक निर्मिती {#pos-block-creation} + +व्हॅलिडेटर्स ब्लॉक्स तयार करतात. प्रत्येक स्लॉटमध्ये ब्लॉक प्रस्तावक होण्यासाठी एका व्हॅलिडेटरची यादृच्छिकपणे निवड केली जाते. त्यांचा सहमती क्लायंट त्यांच्या जोडलेल्या एक्झिक्युशन क्लायंटकडून 'एक्झिक्युशन पेलोड' म्हणून व्यवहारांचा एक बंडल विनंती करतो. ते हे सहमती डेटामध्ये लपेटून एक ब्लॉक तयार करतात, जो ते इथेरियम नेटवर्कवरील इतर नोड्सना पाठवतात. या ब्लॉक उत्पादनासाठी ETH मध्ये बक्षीस दिले जाते. क्वचित प्रसंगी जेव्हा एकाच स्लॉटसाठी एकाधिक संभाव्य ब्लॉक्स अस्तित्वात असतात, किंवा नोड्स वेगवेगळ्या वेळी ब्लॉक्सबद्दल ऐकतात, तेव्हा फोर्क चॉईस अल्गोरिदम तो ब्लॉक निवडतो जो अटेस्टेशन्सच्या सर्वाधिक वजनासह चेन तयार करतो (जेथे वजन हे त्यांच्या ETH बॅलन्सद्वारे मोजलेले अटेस्ट करणाऱ्या व्हॅलिडेटर्सची संख्या आहे). + +#### सुरक्षा {#pos-security} + +एक प्रूफ-ऑफ-स्टेक प्रणाली क्रिप्टो-इकॉनॉमिकली सुरक्षित आहे कारण चेनवर नियंत्रण मिळविण्याचा प्रयत्न करणाऱ्या हल्लेखोराला मोठ्या प्रमाणात ETH नष्ट करावे लागते. बक्षिसांची एक प्रणाली वैयक्तिक स्टेकर्सना प्रामाणिकपणे वागण्यासाठी प्रोत्साहित करते आणि दंड स्टेकर्सना दुर्भावनापूर्णपणे वागण्यापासून परावृत्त करतो. + +[प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) वर अधिक + +### एक व्हिज्युअल मार्गदर्शक {#types-of-consensus-video} + +इथेरियमवर वापरल्या जाणाऱ्या विविध प्रकारच्या सहमती यंत्रणांवर अधिक पहा: + + + +### सिबिल प्रतिकार आणि चेन निवड {#sybil-chain} + +प्रूफ-ऑफ-वर्क आणि प्रूफ-ऑफ-स्टेक हे एकटे सहमती प्रोटोकॉल नाहीत, परंतु साधेपणासाठी त्यांना अनेकदा असे संबोधले जाते. ते प्रत्यक्षात सिबिल प्रतिकार यंत्रणा आणि ब्लॉक लेखक निवडक आहेत; नवीनतम ब्लॉकचा लेखक कोण आहे हे ठरवण्याचा हा एक मार्ग आहे. आणखी एक महत्त्वाचा घटक म्हणजे चेन निवड (उर्फ फोर्क चॉईस) अल्गोरिदम जो नोड्सना चेनच्या हेडवर एकाच स्थितीत एकापेक्षा जास्त ब्लॉक्स अस्तित्वात असलेल्या परिस्थितीत एकच योग्य ब्लॉक निवडण्यास सक्षम करतो. + +**सिबिल प्रतिकार** हे मोजते की एखादा प्रोटोकॉल सिबिल हल्ल्याविरुद्ध कसा सामना करतो. या प्रकारच्या हल्ल्याला प्रतिकार करणे विकेंद्रित ब्लॉकचेनसाठी आवश्यक आहे आणि मायनर्स आणि व्हॅलिडेटर्सना गुंतवलेल्या संसाधनांवर आधारित समान बक्षीस मिळण्यास सक्षम करते. प्रूफ-ऑफ-वर्क आणि प्रूफ-ऑफ-स्टेक वापरकर्त्यांना भरपूर ऊर्जा खर्च करण्यास किंवा भरपूर कोलॅटरल ठेवण्यास लावून यापासून संरक्षण करतात. हे संरक्षण सिबिल हल्ल्यांना एक आर्थिक प्रतिबंधक आहेत. + +कोणती चेन "योग्य" चेन आहे हे ठरवण्यासाठी **चेन निवड नियम** वापरला जातो. बिटकॉइन "सर्वात लांब चेन" नियम वापरते, याचा अर्थ असा की जी ब्लॉकचेन सर्वात लांब असेल तीच बाकीचे नोड्स वैध म्हणून स्वीकारतील आणि तिच्यासोबत काम करतील. प्रूफ-ऑफ-वर्क चेन्ससाठी, सर्वात लांब चेन चेनच्या एकूण संचित प्रूफ-ऑफ-वर्क डिफिकल्टीद्वारे निर्धारित केली जाते. इथेरियम देखील सर्वात लांब चेन नियम वापरायचे; तथापि, आता इथेरियम प्रूफ-ऑफ-स्टेकवर चालत असल्याने, त्याने एक अद्ययावत फोर्क-चॉइस अल्गोरिदम स्वीकारला आहे जो चेनचे 'वजन' मोजतो. वजन हे व्हॅलिडेटर मतांची जमा झालेली बेरीज आहे, जी व्हॅलिडेटरच्या स्टेक केलेल्या इथर बॅलन्सद्वारे भारित केली जाते. + +इथेरियम [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) नावाची सहमती यंत्रणा वापरते जी [Casper FFG प्रूफ-ऑफ-स्टेक](https://arxiv.org/abs/1710.09437) ला [GHOST फोर्क-चॉइस नियमा](https://arxiv.org/abs/2003.03052) सह जोडते. + +## पुढील वाचन {#further-reading} + +- [ब्लॉकचेन सहमती अल्गोरिदम म्हणजे काय?](https://academy.binance.com/en/articles/what-is-a-blockchain-consensus-algorithm) +- [नाकामोतो सहमती म्हणजे काय? पूर्ण नवशिक्यांसाठी मार्गदर्शक](https://blockonomi.com/nakamoto-consensus/) +- [कॅस्पर कसे काम करते?](https://medium.com/unitychain/intro-to-casper-ffg-9ed944d98b2d) +- [प्रूफ ऑफ वर्क ब्लॉकचेनच्या सुरक्षा आणि कामगिरीवर](https://eprint.iacr.org/2016/555.pdf) +- [बायझेंटाईन फॉल्ट](https://en.wikipedia.org/wiki/Byzantine_fault) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) +- [मायनिंग](/developers/docs/consensus-mechanisms/pow/mining/) +- [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) +- [प्रूफ-ऑफ-अथॉरिटी](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/poa/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/poa/index.md new file mode 100644 index 00000000000..c923382e49b --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/poa/index.md @@ -0,0 +1,80 @@ +--- +title: "प्रूफ-ऑफ-अथॉरिटी (PoA)" +description: "प्रूफ-ऑफ-अथॉरिटी एकमत प्रोटोकॉल आणि ब्लॉकचेन इकोसिस्टममधील त्याच्या भूमिकेचे स्पष्टीकरण." +lang: mr +--- + +**प्रूफ-ऑफ-अथॉरिटी (PoA)** हा प्रतिष्ठेवर आधारित एकमत अल्गोरिदम आहे जो [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) ची सुधारित आवृत्ती आहे. हे मुख्यतः खाजगी चेन्स, टेस्टनेट्स आणि स्थानिक विकास नेटवर्क्सद्वारे वापरले जाते. PoA हा प्रतिष्ठेवर आधारित एकमत अल्गोरिदम आहे ज्यामध्ये PoS मधील स्टेक-आधारित यंत्रणेऐवजी ब्लॉक्स तयार करण्यासाठी अधिकृत स्वाक्षरीकर्त्यांच्या संचावर विश्वास ठेवण्याची आवश्यकता असते. + +## पूर्वतयारी {#prerequisites} + +हे पान अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/), आणि [consensus mechanisms](/developers/docs/consensus-mechanisms/) बद्दल वाचा. + +## प्रूफ-ऑफ-अथॉरिटी (PoA) म्हणजे काय? {#what-is-poa} + +प्रूफ-ऑफ-अथॉरिटी ही **[प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) (PoS)** ची एक सुधारित आवृत्ती आहे, जी PoS मधील स्टेक-आधारित यंत्रणेऐवजी प्रतिष्ठेवर आधारित एकमत अल्गोरिदम आहे. ही संज्ञा २०१७ मध्ये गॅविन वुड यांनी पहिल्यांदा मांडली होती आणि हा एकमत अल्गोरिदम मुख्यतः खाजगी चेन्स, टेस्टनेट्स आणि स्थानिक विकास नेटवर्क्सद्वारे वापरला गेला आहे, कारण तो PoW प्रमाणे उच्च दर्जाच्या संसाधनांची गरज दूर करतो आणि ब्लॉकचेन साठवणारे व ब्लॉक्स तयार करणाऱ्या नोड्सचा एक छोटा उपसंच ठेवून PoS मधील स्केलेबिलिटीच्या समस्यांवर मात करतो. + +प्रूफ-ऑफ-अथॉरिटीमध्ये अधिकृत स्वाक्षरीकर्त्यांच्या एका संचावर विश्वास ठेवण्याची आवश्यकता असते जे [जेनेसिस ब्लॉक](/glossary/#genesis-block) मध्ये सेट केलेले असतात. सध्याच्या बहुतेक अंमलबजावणीमध्ये, चेनच्या एकमताचा निर्धार करताना सर्व अधिकृत स्वाक्षरीकर्ते समान अधिकार आणि विशेषाधिकार राखून ठेवतात. प्रतिष्ठा स्टेक करण्यामागील कल्पना अशी आहे की, प्रत्येक अधिकृत व्हॅलिडेटर नो युअर कस्टमर (KYC) सारख्या गोष्टींद्वारे किंवा एखादी सुप्रसिद्ध संस्था एकमेव व्हॅलिडेटर असल्याने प्रत्येकाला चांगलाच ओळखला जातो—यामुळे जर एखाद्या व्हॅलिडेटरने काही चुकीचे केले, तर त्यांची ओळख ज्ञात असते. + +PoA च्या अनेक अंमलबजावणी आहेत, परंतु मानक Ethereum अंमलबजावणी **clique** आहे, जी [EIP-225](https://eips.ethereum.org/EIPS/eip-225) लागू करते. Clique हे डेव्हलपर-फ्रेंडली आणि अंमलबजावणी करण्यास सोपे मानक आहे, जे सर्व क्लायंट सिंकिंग प्रकारांना सपोर्ट करते. इतर अंमलबजावणीमध्ये [IBFT 2.0](https://besu.hyperledger.org/private-networks/concepts/poa) आणि [Aura](https://openethereum.github.io/Chain-specification) यांचा समावेश आहे. + +## हे कसे कार्य करते {#how-it-works} + +PoA मध्ये, नवीन ब्लॉक्स तयार करण्यासाठी अधिकृत स्वाक्षरीकर्त्यांचा एक संच निवडला जातो. स्वाक्षरीकर्ते त्यांच्या प्रतिष्ठेच्या आधारावर निवडले जातात, आणि त्यांनाच नवीन ब्लॉक्स तयार करण्याची परवानगी असते. स्वाक्षरीकर्ते राउंड-रॉबिन पद्धतीने निवडले जातात, आणि प्रत्येक स्वाक्षरीकर्त्याला एका विशिष्ट वेळेच्या चौकटीत एक ब्लॉक तयार करण्याची परवानगी असते. ब्लॉक निर्मितीची वेळ निश्चित असते, आणि स्वाक्षरीकर्त्यांना त्या वेळेच्या चौकटीत एक ब्लॉक तयार करणे आवश्यक असते. + +या संदर्भात प्रतिष्ठा ही मोजता येण्याजोगी गोष्ट नाही तर ती Microsoft आणि Google सारख्या सुप्रसिद्ध कॉर्पोरेशन्सची प्रतिष्ठा आहे, त्यामुळे विश्वासू स्वाक्षरीकर्त्यांना निवडण्याची पद्धत अल्गोरिथमिक नाही तर ती _विश्वासाची_ सामान्य मानवी कृती आहे जिथे एक संस्था, उदाहरणार्थ, Microsoft, शेकडो किंवा हजारो स्टार्टअप्समध्ये एक PoA खाजगी नेटवर्क तयार करते आणि स्वतः एकमेव विश्वासू स्वाक्षरीकर्त्याची भूमिका बजावते, भविष्यात Google सारख्या इतर सुप्रसिद्ध स्वाक्षरीकर्त्यांना जोडण्याच्या शक्यतेसह, स्टार्टअप्स, निःसंशयपणे, Microsoft वर नेहमी प्रामाणिकपणे वागण्याचा आणि नेटवर्क वापरण्याचा विश्वास ठेवतील. यामुळे वेगवेगळ्या उद्देशांसाठी बनवलेल्या विविध छोट्या/खाजगी नेटवर्क्सना विकेंद्रित आणि कार्यरत ठेवण्यासाठी त्यात स्टेक करण्याची गरज संपते, तसेच मायनर्सची गरजही संपते, जे खूप जास्त ऊर्जा आणि संसाधने वापरतात. काही खाजगी नेटवर्क्स जसे की VeChain, PoA मानक जसे आहे तसे वापरतात, आणि काही त्यात बदल करतात जसे की Binance जे [PoSA](https://academy.binance.com/en/glossary/proof-of-staked-authority-posa) वापरते, जे PoA आणि PoS ची एक कस्टम सुधारित आवृत्ती आहे. + +मतदान प्रक्रिया स्वतः स्वाक्षरीकर्त्यांद्वारे केली जाते. प्रत्येक स्वाक्षरीकर्ता जेव्हा नवीन ब्लॉक तयार करतो, तेव्हा तो आपल्या ब्लॉकमध्ये एखाद्या स्वाक्षरीकर्त्याला जोडण्यासाठी किंवा काढण्यासाठी मत देतो. नोड्सद्वारे मतांची मोजणी केली जाते, आणि मते `SIGNER_LIMIT` या विशिष्ट मर्यादेपर्यंत पोहोचल्यावर स्वाक्षरीकर्त्यांना जोडले किंवा काढले जाते. + +अशी परिस्थिती उद्भवू शकते जिथे छोटे फोर्क्स होतात, ब्लॉकची अडचण यावर अवलंबून असते की ब्लॉकवर क्रमाने सही केली होती की क्रमाबाहेर. “क्रमाने” असलेल्या ब्लॉक्सची अडचण २ असते आणि “क्रमाबाहेर” असलेल्या ब्लॉक्सची अडचण १ असते. छोट्या फोर्क्सच्या बाबतीत, ज्या चेनमध्ये बहुतेक स्वाक्षरीकर्ते “क्रमाने” ब्लॉक्स सील करतात, ती सर्वात जास्त अडचण जमा करेल आणि जिंकेल. + +## हल्ल्याचे मार्ग {#attack-vectors} + +### दुर्भावनापूर्ण स्वाक्षरीकर्ते {#malicious-signers} + +एखादा दुर्भावनापूर्ण वापरकर्ता स्वाक्षरीकर्त्यांच्या यादीत जोडला जाऊ शकतो, किंवा स्वाक्षरी की/मशीनशी तडजोड केली जाऊ शकते. अशा परिस्थितीत प्रोटोकॉलला पुनर्रचना आणि स्पॅमिंगपासून स्वतःचे संरक्षण करता आले पाहिजे. प्रस्तावित उपाय असा आहे की N अधिकृत स्वाक्षरीकर्त्यांच्या यादीत, कोणताही स्वाक्षरीकर्ता प्रत्येक K पैकी फक्त १ ब्लॉक मिंट करू शकतो. यामुळे नुकसान मर्यादित राहते याची खात्री होते आणि उर्वरित व्हॅलिडेटर्स दुर्भावनापूर्ण वापरकर्त्याला मतदानाने बाहेर काढू शकतात. + +### सेन्सॉरशिप {#censorship-attack} + +आणखी एक मनोरंजक हल्ल्याचा मार्ग म्हणजे जर एखादा स्वाक्षरीकर्ता (किंवा स्वाक्षरीकर्त्यांचा गट) त्यांना अधिकृततेच्या यादीतून काढून टाकण्यासाठी मतदान करणाऱ्या ब्लॉक्सना सेन्सॉर करण्याचा प्रयत्न करतो. यावर उपाय म्हणून, स्वाक्षरीकर्त्यांची परवानगी असलेली मिंटिंग वारंवारता N/2 पैकी १ पर्यंत मर्यादित आहे. यामुळे दुर्भावनापूर्ण स्वाक्षरीकर्त्यांना किमान ५१% स्वाक्षरी खात्यांवर नियंत्रण ठेवण्याची गरज भासते याची खात्री होते, त्यावेळी ते प्रभावीपणे चेनसाठी सत्याचा नवीन स्रोत बनतील. + +### स्पॅम {#spam-attack} + +आणखी एक छोटा हल्ल्याचा मार्ग म्हणजे दुर्भावनापूर्ण स्वाक्षरीकर्ते त्यांनी मिंट केलेल्या प्रत्येक ब्लॉकमध्ये नवीन मत प्रस्ताव टाकतात. अधिकृत स्वाक्षरीकर्त्यांची प्रत्यक्ष यादी तयार करण्यासाठी नोड्सना सर्व मतांची मोजणी करण्याची आवश्यकता असल्याने, त्यांना कालांतराने सर्व मते रेकॉर्ड करणे आवश्यक आहे. मतदान विंडोवर मर्यादा न ठेवता, हे हळूहळू, पण अमर्यादपणे वाढू शकते. यावर उपाय म्हणजे W ब्लॉक्सची एक _मूव्हिंग_ विंडो ठेवणे, ज्यानंतर मते शिळी मानली जातात. _एक वाजवी विंडो १-२ इपॉक्स असू शकते._ + +### समवर्ती ब्लॉक्स {#concurrent-blocks} + +एका PoA नेटवर्कमध्ये, जेव्हा N अधिकृत स्वाक्षरीकर्ते असतात, तेव्हा प्रत्येक स्वाक्षरीकर्त्याला K पैकी १ ब्लॉक मिंट करण्याची परवानगी असते, याचा अर्थ असा की N-K+1 व्हॅलिडेटर्सना कोणत्याही वेळी मिंट करण्याची परवानगी असते. या व्हॅलिडेटर्सना ब्लॉक्ससाठी स्पर्धा करण्यापासून रोखण्यासाठी, प्रत्येक स्वाक्षरीकर्त्याने नवीन ब्लॉक रिलीज करण्याच्या वेळेत एक छोटा यादृच्छिक "ऑफसेट" जोडला पाहिजे. जरी ही प्रक्रिया छोटे फोर्क्स दुर्मिळ असल्याची खात्री करत असली तरी, मेननेटप्रमाणेच कधीकधी फोर्क्स तरीही होऊ शकतात. जर एखादा स्वाक्षरीकर्ता आपल्या अधिकाराचा गैरवापर करून गोंधळ निर्माण करत असल्याचे आढळल्यास, इतर स्वाक्षरीकर्ते त्यांना मतदानाने बाहेर काढू शकतात. + +उदाहरणार्थ, जर १० अधिकृत स्वाक्षरीकर्ते असतील आणि प्रत्येक स्वाक्षरीकर्त्याला २० पैकी १ ब्लॉक तयार करण्याची परवानगी असेल, तर कोणत्याही वेळी, ११ व्हॅलिडेटर्स ब्लॉक्स तयार करू शकतात. त्यांना ब्लॉक्स तयार करण्यासाठी स्पर्धा करण्यापासून रोखण्यासाठी, प्रत्येक स्वाक्षरीकर्ता नवीन ब्लॉक रिलीज करण्याच्या वेळेत एक छोटा यादृच्छिक "ऑफसेट" जोडतो. यामुळे छोट्या फोर्क्सची घटना कमी होते परंतु तरीही कधीकधी फोर्क्सना परवानगी देते, जसे की Ethereum मेननेटवर पाहिले जाते. जर एखादा स्वाक्षरीकर्ता आपल्या अधिकाराचा गैरवापर करतो आणि व्यत्यय आणतो, तर त्यांना नेटवर्कमधून मतदानाने बाहेर काढले जाऊ शकते. + +## फायदे आणि तोटे {#pros-and-cons} + +| फायदे | बाधक | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| PoS आणि PoW सारख्या इतर लोकप्रिय यंत्रणांपेक्षा अधिक स्केलेबल, कारण ते मर्यादित संख्येच्या ब्लॉक स्वाक्षरीकर्त्यांवर आधारित आहे. | PoA नेटवर्क्समध्ये सामान्यतः तुलनेने कमी संख्येने व्हॅलिडेटिंग नोड्स असतात. यामुळे PoA नेटवर्क अधिक केंद्रीकृत बनते. | +| PoA ब्लॉकचेन्स चालवण्यासाठी आणि देखभालीसाठी अत्यंत स्वस्त आहेत. | अधिकृत स्वाक्षरीकर्ता बनणे सामान्यतः एका सामान्य व्यक्तीच्या आवाक्याबाहेरचे असते, कारण ब्लॉकचेनला प्रस्थापित प्रतिष्ठा असलेल्या संस्थांची आवश्यकता असते. | +| व्यवहार खूप लवकर कन्फर्म होतात, कारण ते १ सेकंदापेक्षा कमी वेळेत होऊ शकतात कारण नवीन ब्लॉक्स व्हॅलिडेट करण्यासाठी फक्त मर्यादित संख्येने स्वाक्षरीकर्त्यांची आवश्यकता असते. | दुर्भावनापूर्ण स्वाक्षरीकर्ते नेटवर्कमध्ये पुनर्रचना (reorg), दुहेरी खर्च (double spend), व्यवहार सेन्सॉर करू शकतात, हे हल्ले कमी केले जातात पण तरीही शक्य आहेत. | + +## पुढील वाचन {#further-reading} + +- [EIP-225](https://eips.ethereum.org/EIPS/eip-225) _क्लिक मानक_ +- [प्रूफ ऑफ अथॉरिटी अभ्यास](https://github.com/cryptoeconomics-study/website/blob/master/docs/sync/2.4-lecture.md) _क्रिप्टोइकॉनॉमिक्स_ +- [प्रूफ ऑफ अथॉरिटी म्हणजे काय](https://forum.openzeppelin.com/t/proof-of-authority/3577) _OpenZeppelin_ +- [प्रूफ ऑफ अथॉरिटीचे स्पष्टीकरण](https://academy.binance.com/en/articles/proof-of-authority-explained) _binance_ +- [ब्लॉकचेनमधील PoA](https://medium.com/techskill-brew/proof-of-authority-or-poa-in-blockchain-part-11-blockchain-series-be15b3321cba) +- [क्लिकचे स्पष्टीकरण](https://medium.com/@Destiner/clique-cross-client-proof-of-authority-algorithm-for-ethereum-8b2a135201d) +- [अस्वीकृत PoA, Aura तपशील](https://openethereum.github.io/Chain-specification) +- [IBFT 2.0, आणखी एक PoA अंमलबजावणी](https://besu.hyperledger.org/private-networks/concepts/poa) + +### तुम्ही पाहून शिकणारे आहात का? {#visual-learner} + +प्रूफ-ऑफ-अथॉरिटीचे दृष्य स्पष्टीकरण पहा: + + + +## संबंधित विषय {#related-topics} + +- [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) +- [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) + diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md new file mode 100644 index 00000000000..3938cae6180 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/attack-and-defense/index.md @@ -0,0 +1,166 @@ +--- +title: "Ethereum प्रुफ-ऑफ-स्टेक हल्ला आणि संरक्षण" +description: "प्रुफ-ऑफ-स्टेक Ethereum वरील ज्ञात हल्ला व्हेक्टरबद्दल आणि त्यांचे संरक्षण कसे केले जाते याबद्दल जाणून घ्या." +lang: mr +--- + +चोर आणि घातपात करणारे Ethereum च्या क्लायंट सॉफ्टवेअरवर हल्ला करण्यासाठी सतत संधी शोधत असतात. हे पृष्ठ Ethereum च्या सहमती लेयरवरील ज्ञात हल्ला व्हेक्टरची आणि त्या हल्ल्यांपासून संरक्षण कसे करता येईल याची रूपरेषा देते. या पृष्ठावरील माहिती एका [लांब स्वरूपाच्या आवृत्तीतून](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) रुपांतरित केली आहे. + +## पूर्वतयारी {#prerequisites} + +[प्रुफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) चे काही मूलभूत ज्ञान आवश्यक आहे. तसेच, Ethereum च्या [प्रोत्साहन लेयर](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) आणि फोर्क-चॉइस अल्गोरिदम, [LMD-GHOST](/developers/docs/consensus-mechanisms/pos/gasper) यांची मूलभूत समज असणे उपयुक्त ठरेल. + +## हल्लेखोरांना काय हवे आहे? {#what-do-attackers-want} + +एक सामान्य गैरसमज असा आहे की एक यशस्वी हल्लेखोर नवीन इथर तयार करू शकतो, किंवा अनियंत्रित खात्यांमधून इथर काढू शकतो. यापैकी काहीही शक्य नाही कारण नेटवर्कवरील सर्व एक्झिक्युशन क्लायंटद्वारे सर्व व्यवहार कार्यान्वित केले जातात. त्यांनी वैधतेच्या मूलभूत अटी पूर्ण केल्या पाहिजेत (उदा. व्यवहार प्रेषकाच्या खाजगी की द्वारे स्वाक्षरी केलेले आहेत, प्रेषकाकडे पुरेसा बॅलन्स आहे, इत्यादी) अन्यथा ते फक्त परत फिरतात. परिणामांचे तीन वर्ग आहेत ज्यांना हल्लेखोर वास्तववादीपणे लक्ष्य करू शकतो: रिओर्ग, दुहेरी अंतिमता किंवा अंतिमता विलंब. + +**“रिओर्ग”** म्हणजे कॅनॉनिकल चेनमध्ये काही ब्लॉक जोडून किंवा वजा करून, ब्लॉकची नवीन क्रमाने पुनर्रचना करणे. एक दुर्भावनापूर्ण रिओर्ग विशिष्ट ब्लॉक समाविष्ट किंवा वगळले जातील याची खात्री करू शकतो, ज्यामुळे फ्रंट-रनिंग आणि बॅक-रनिंग व्यवहारांद्वारे (MEV) दुहेरी-खर्च किंवा मूल्य काढण्यास परवानगी मिळते. विशिष्ट व्यवहारांना कॅनॉनिकल चेनमध्ये समाविष्ट होण्यापासून रोखण्यासाठी - एक प्रकारची सेन्सॉरशिप म्हणून - रि-ऑर्गचा वापर देखील केला जाऊ शकतो. रिओर्गचे सर्वात टोकाचे स्वरूप “अंतिमता रिव्हर्जन” आहे जे पूर्वी अंतिम केलेल्या ब्लॉकना काढून टाकते किंवा बदलते. हे तेव्हाच शक्य आहे जेव्हा एकूण स्टेक केलेल्या इथरपैकी ⅓ पेक्षा जास्त इथर हल्लेखोराद्वारे नष्ट केले जाते - ही हमी “आर्थिक अंतिमता” म्हणून ओळखली जाते - याबद्दल नंतर अधिक माहिती. + +**दुहेरी अंतिमता** ही एक संभाव्य नसलेली पण गंभीर स्थिती आहे जिथे दोन फोर्क एकाच वेळी अंतिम होऊ शकतात, ज्यामुळे चेनमध्ये कायमस्वरूपी फूट निर्माण होते. एकूण स्टेक केलेल्या इथरपैकी 34% धोका पत्करण्यास तयार असलेल्या हल्लेखोरासाठी हे सैद्धांतिकदृष्ट्या शक्य आहे. समुदायाला ऑफचेन समन्वय साधावा लागेल आणि कोणत्या चेनचे अनुसरण करावे यावर एकमत व्हावे लागेल, ज्यासाठी सामाजिक लेयरमध्ये ताकद आवश्यक असेल. + +**अंतिमता विलंब** हल्ला नेटवर्कला चेनच्या विभागांना अंतिम करण्यासाठी आवश्यक अटींपर्यंत पोहोचण्यापासून प्रतिबंधित करतो. अंतिमतेशिवाय, Ethereum वर तयार केलेल्या आर्थिक ऍप्लिकेशन्सवर विश्वास ठेवणे कठीण आहे. अंतिमता विलंब हल्ल्याचा उद्देश थेट नफा कमावण्याऐवजी बहुधा फक्त Ethereum मध्ये व्यत्यय आणणे हा असतो, जोपर्यंत हल्लेखोराकडे काही धोरणात्मक शॉर्ट पोझिशन नसतील. + +सामाजिक लेयरवरील हल्ल्याचा उद्देश Ethereum मधील सार्वजनिक विश्वासाला कमी लेखणे, इथरचे अवमूल्यन करणे, अवलंब कमी करणे किंवा Ethereum समुदायाला कमकुवत करणे असू शकतो जेणेकरून आउट-ऑफ-बँड समन्वय अधिक कठीण होईल. + +एखादा प्रतिस्पर्धी Ethereum वर हल्ला का करू शकतो हे स्थापित केल्यावर, पुढील विभाग ते _कसे_ करू शकतात याचे परीक्षण करतात. + +## हल्ल्याच्या पद्धती {#methods-of-attack} + +### लेयर 0 हल्ले {#layer-0} + +सर्वप्रथम, जे व्यक्ती Ethereum मध्ये सक्रियपणे सहभागी होत नाहीत (क्लायंट सॉफ्टवेअर चालवून) ते सामाजिक लेयर (लेयर 0) ला लक्ष्य करून हल्ला करू शकतात. लेयर 0 हा पाया आहे ज्यावर Ethereum तयार केले आहे, आणि त्यामुळे ते हल्ल्यांसाठी एक संभाव्य पृष्ठभाग दर्शवते ज्याचे परिणाम उर्वरित स्टॅकमध्ये पसरतात. काही उदाहरणांमध्ये हे समाविष्ट असू शकते: + +- एक चुकीच्या माहितीची मोहीम Ethereum च्या रोडमॅप, डेव्हलपर्सच्या टीम्स, ॲप्स इत्यादींवर समुदायाचा असलेला विश्वास कमी करू शकते. यामुळे नेटवर्क सुरक्षित करण्यात सहभागी होण्यास इच्छुक असलेल्या व्यक्तींची संख्या कमी होऊ शकते, ज्यामुळे विकेंद्रीकरण आणि क्रिप्टो-इकॉनॉमिक सुरक्षा दोन्ही कमी होतात. + +- डेव्हलपर समुदायावर लक्ष्यित हल्ले आणि/किंवा धमक्या. यामुळे डेव्हलपर्स स्वेच्छेने बाहेर पडू शकतात आणि Ethereum ची प्रगती मंद होऊ शकते. + +- अति-उत्साही नियमनांना देखील लेयर 0 वरील हल्ला मानले जाऊ शकते, कारण ते सहभाग आणि अवलंबनाला वेगाने निरुत्साहित करू शकते. + +- डेव्हलपर समुदायामध्ये जाणकार परंतु दुर्भावनापूर्ण कलाकारांची घुसखोरी ज्यांचा उद्देश बाईक-शेडिंग चर्चा, महत्त्वाचे निर्णय लांबवणे, स्पॅम तयार करणे इत्यादींद्वारे प्रगती मंद करणे आहे. + +- Ethereum इकोसिस्टममधील महत्त्वाच्या खेळाडूंना निर्णय प्रक्रियेवर प्रभाव टाकण्यासाठी दिलेली लाच. + +या हल्ल्यांना विशेषतः धोकादायक बनवणारी गोष्ट म्हणजे अनेक प्रकरणांमध्ये खूप कमी भांडवल किंवा तांत्रिक माहितीची आवश्यकता असते. लेयर 0 हल्ला क्रिप्टो-इकॉनॉमिक हल्ल्यावर गुणक असू शकतो. उदाहरणार्थ, जर एखाद्या दुर्भावनापूर्ण बहुसंख्य स्टेकहोल्डरद्वारे सेन्सॉरशिप किंवा अंतिमता रिव्हर्जन साध्य केले गेले, तर सामाजिक लेयरला कमजोर केल्याने आउट-ऑफ-बँड सामुदायिक प्रतिसाद समन्वय साधणे अधिक कठीण होऊ शकते. + +लेयर 0 हल्ल्यांपासून संरक्षण करणे कदाचित सोपे नाही, परंतु काही मूलभूत तत्त्वे स्थापित केली जाऊ शकतात. एक म्हणजे Ethereum बद्दलच्या सार्वजनिक माहितीसाठी एकंदरीत उच्च सिग्नल-टू-नॉइज गुणोत्तर राखणे, जे समुदायाच्या प्रामाणिक सदस्यांद्वारे ब्लॉग, डिस्कॉर्ड सर्व्हर, भाष्य केलेल्या वैशिष्ट्ये, पुस्तके, पॉडकास्ट आणि Youtube द्वारे तयार आणि प्रसारित केले जाते. येथे ethereum.org वर आम्ही अचूक माहिती राखण्याचा आणि शक्य तितक्या अनेक भाषांमध्ये त्याचे भाषांतर करण्याचा कठोर प्रयत्न करतो. एखाद्या जागेला उच्च दर्जाची माहिती आणि मीम्सने भरून टाकणे हे चुकीच्या माहितीविरुद्ध एक प्रभावी संरक्षण आहे. + +सामाजिक लेयर हल्ल्यांविरुद्ध आणखी एक महत्त्वाचे संरक्षण म्हणजे एक स्पष्ट मिशन स्टेटमेंट आणि शासन प्रोटोकॉल. Ethereum ने स्मार्ट-कॉन्ट्रॅक्ट लेयर 1's मध्ये विकेंद्रीकरण आणि सुरक्षेचा चॅम्पियन म्हणून स्वतःला स्थापित केले आहे, तसेच स्केलेबिलिटी आणि टिकाऊपणाला खूप महत्त्व दिले आहे. Ethereum समुदायात कोणतेही मतभेद उद्भवले तरी, या मूलभूत तत्त्वांशी कमीतकमी तडजोड केली जाते. या मूलभूत तत्त्वांनुसार एखाद्या कथनाचे मूल्यांकन करणे, आणि EIP (Ethereum Improvement Proposal) प्रक्रियेत पुनरावलोकनाच्या लागोपाठच्या फेऱ्यांमधून त्यांचे परीक्षण करणे, समुदायाला चांगल्या आणि वाईट कलाकारांमध्ये फरक करण्यास मदत करू शकते आणि दुर्भावनापूर्ण कलाकारांना Ethereum च्या भविष्यातील दिशेवर प्रभाव टाकण्याची व्याप्ती मर्यादित करते. + +शेवटी, हे महत्त्वाचे आहे की Ethereum समुदाय सर्व सहभागींसाठी खुला आणि स्वागतार्ह राहील. द्वारपाल आणि विशिष्टतेसह असलेला समुदाय सामाजिक हल्ल्यासाठी विशेषतः असुरक्षित असतो कारण "आम्ही आणि ते" असे कथन तयार करणे सोपे असते. आदिवासीवाद आणि विषारी मॅक्सिमलिझम समुदायाला दुखावतात आणि लेयर 0 सुरक्षा कमी करतात. नेटवर्कच्या सुरक्षेमध्ये निहित स्वारस्य असलेल्या Ethereans नी त्यांचे ऑनलाइन आणि मीटस्पेसमधील वर्तन Ethereum च्या लेयर 0 च्या सुरक्षेसाठी थेट योगदान देणारे म्हणून पाहिले पाहिजे. + +### प्रोटोकॉलवर हल्ला करणे {#attacking-the-protocol} + +कोणीही Ethereum चे क्लायंट सॉफ्टवेअर चालवू शकतो. क्लायंटमध्ये व्हॅलिडेटर जोडण्यासाठी, वापरकर्त्याला डिपॉझिट कॉन्ट्रॅक्टमध्ये 32 इथर स्टेक करणे आवश्यक आहे. एक व्हॅलिडेटर वापरकर्त्याला नवीन ब्लॉक प्रस्तावित करून आणि साक्षांकित करून Ethereum च्या नेटवर्क सुरक्षेमध्ये सक्रियपणे सहभागी होण्याची परवानगी देतो. आता व्हॅलिडेटरकडे एक आवाज आहे ज्याचा वापर ते ब्लॉकचेनच्या भविष्यातील सामग्रीवर प्रभाव टाकण्यासाठी करू शकतात - ते प्रामाणिकपणे असे करू शकतात आणि रिवॉर्डद्वारे त्यांच्या इथरचा साठा वाढवू शकतात किंवा ते प्रक्रियेला स्वतःच्या फायद्यासाठी हाताळण्याचा प्रयत्न करू शकतात, ज्यामुळे त्यांचा स्टेक धोक्यात येतो. हल्ला करण्याचा एक मार्ग म्हणजे एकूण स्टेकचा मोठा हिस्सा जमा करणे आणि नंतर त्याचा वापर प्रामाणिक व्हॅलिडेटर्सना हरवण्यासाठी करणे. हल्लेखोराने नियंत्रित केलेल्या स्टेकचा जितका जास्त हिस्सा असेल, तितकी त्यांची मतदानाची शक्ती जास्त असेल, विशेषतः काही आर्थिक टप्प्यांवर ज्यांचा आपण नंतर शोध घेऊ. तथापि, बहुतेक हल्लेखोर अशा प्रकारे हल्ला करण्यासाठी पुरेसा इथर जमा करू शकणार नाहीत, त्यामुळे त्याऐवजी त्यांना प्रामाणिक बहुमताला एका विशिष्ट पद्धतीने वागण्यास प्रवृत्त करण्यासाठी सूक्ष्म तंत्रांचा वापर करावा लागतो. + +मूलतः, सर्व लहान-स्टेक हल्ले हे दोन प्रकारच्या व्हॅलिडेटर गैरवर्तनांचे सूक्ष्म फरक आहेत: कमी-क्रियाशीलता (साक्षांकन/प्रस्ताव करण्यात अयशस्वी होणे किंवा उशिरा करणे) किंवा अति-क्रियाशीलता (एका स्लॉटमध्ये अनेक वेळा प्रस्ताव/साक्षांकन करणे). त्यांच्या सर्वात सामान्य स्वरूपात या क्रिया फोर्क-चॉइस अल्गोरिदम आणि प्रोत्साहन लेयरद्वारे सहजपणे हाताळल्या जातात, परंतु हल्लेखोराच्या फायद्यासाठी सिस्टमला गेम करण्याचे हुशार मार्ग आहेत. + +### ETH च्या लहान रकमेचा वापर करून हल्ले {#attacks-by-small-stakeholders} + +#### रिओर्ग {#reorgs} + +अनेक पेपर्सनी Ethereum वरील हल्ल्यांचे स्पष्टीकरण दिले आहे जे एकूण स्टेक केलेल्या इथरच्या फक्त लहानशा हिश्श्याने रिओर्ग किंवा अंतिमता विलंब साध्य करतात. हे हल्ले सामान्यतः हल्लेखोराने इतर व्हॅलिडेटर्सकडून काही माहिती रोखून ठेवण्यावर आणि नंतर ती काही सूक्ष्म मार्गाने आणि/किंवा काही योग्य क्षणी प्रसिद्ध करण्यावर अवलंबून असतात. त्यांचा उद्देश सहसा कॅनॉनिकल चेनमधील काही प्रामाणिक ब्लॉक काढून टाकणे असतो. [Neuder et al 2020](https://arxiv.org/pdf/2102.02247.pdf) ने दाखवले की एक हल्लेखोर व्हॅलिडेटर एका विशिष्ट स्लॉट `n+1` साठी ब्लॉक (`B`) तयार आणि साक्षांकित करू शकतो परंतु तो नेटवर्कवरील इतर नोड्सवर प्रसारित करण्यापासून परावृत्त होतो. त्याऐवजी, ते त्या साक्षांकित ब्लॉकला पुढील स्लॉट `n+2` पर्यंत धरून ठेवतात. एक प्रामाणिक व्हॅलिडेटर स्लॉट `n+2` साठी ब्लॉक (`C`) प्रस्तावित करतो. जवळजवळ त्याच वेळी, हल्लेखोर आपला रोखून ठेवलेला ब्लॉक (`B`) आणि त्यासाठीची रोखून ठेवलेली साक्षांकने प्रसिद्ध करू शकतो, आणि स्लॉट `n+2` साठीच्या मतांसह `B` ला चेनचा हेड म्हणून साक्षांकित करू शकतो, ज्यामुळे प्रामाणिक ब्लॉक `C` चे अस्तित्व प्रभावीपणे नाकारले जाते. जेव्हा प्रामाणिक ब्लॉक `D` प्रसिद्ध होतो, तेव्हा फोर्क चॉइस अल्गोरिदम `B` वर तयार होणाऱ्या `D` चे वजन `C` वर तयार होणाऱ्या `D` पेक्षा जास्त असल्याचे पाहतो. त्यामुळे हल्लेखोराने 1-ब्लॉक एक्स-अँटे रिओर्ग वापरून स्लॉट `n+2` मधील प्रामाणिक ब्लॉक `C` कॅनॉनिकल चेनमधुन काढण्यात यश मिळवले आहे. [34% स्टेक असलेल्या हल्लेखोराला](https://www.youtube.com/watch?v=6vzXwwk12ZE) या हल्ल्यात यशस्वी होण्याची खूप चांगली संधी आहे, जसे [या नोटमध्ये](https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair) स्पष्ट केले आहे. सैद्धांतिकदृष्ट्या, तथापि, हा हल्ला लहान स्टेकसह देखील प्रयत्न केला जाऊ शकतो. [Neuder et al 2020](https://arxiv.org/pdf/2102.02247.pdf) ने 30% स्टेकसह काम करणाऱ्या या हल्ल्याचे वर्णन केले, परंतु नंतर ते [एकूण स्टेकच्या 2%](https://arxiv.org/pdf/2009.04987.pdf) आणि नंतर [एका व्हॅलिडेटरसाठी](https://arxiv.org/abs/2110.10086#) देखील व्यवहार्य असल्याचे दर्शविले गेले, ज्यासाठी आपण पुढील विभागात तपासणार असलेल्या संतुलन तंत्रांचा वापर केला जातो. + +![एक्स-अँटे रि-ऑर्ग](reorg-schematic.png) + +वर वर्णन केलेल्या वन-ब्लॉक रिओर्ग हल्ल्याचे एक संकल्पनात्मक चित्र (https://notes.ethereum.org/plgVdz-ORe-fGjK06BZ_3A#Fork-choice-by-block-slot-pair मधून रुपांतरित) + +एक अधिक अत्याधुनिक हल्ला प्रामाणिक व्हॅलिडेटर सेटला वेगवेगळ्या गटांमध्ये विभागू शकतो ज्यांचे चेनच्या हेडबद्दल वेगवेगळे दृष्टिकोन आहेत. याला **संतुलन हल्ला** म्हणून ओळखले जाते. हल्लेखोर ब्लॉक प्रस्तावित करण्याची संधी येण्याची वाट पाहतो, आणि जेव्हा ती येते तेव्हा ते संदिग्धता निर्माण करतात आणि दोन ब्लॉक प्रस्तावित करतात. ते एक ब्लॉक अर्ध्या प्रामाणिक व्हॅलिडेटर सेटला पाठवतात आणि दुसरा ब्लॉक दुसऱ्या अर्ध्याला पाठवतात. फोर्क-चॉइस अल्गोरिदमद्वारे संदिग्धता शोधली जाईल आणि ब्लॉक प्रस्तावक स्लॅश केला जाईल आणि नेटवर्कमधून बाहेर काढला जाईल, परंतु दोन्ही ब्लॉक अस्तित्वात राहतील आणि प्रत्येक फोर्कला सुमारे अर्धा व्हॅलिडेटर सेट साक्षांकित करेल. दरम्यान, उर्वरित दुर्भावनापूर्ण व्हॅलिडेटर त्यांची साक्षांकने रोखून धरतात. मग, फोर्क-चॉइस अल्गोरिदम कार्यान्वित होताना, एका किंवा दुसऱ्या फोर्कच्या बाजूने साक्षांकने निवडकपणे फक्त पुरेशा व्हॅलिडेटर्सना प्रसिद्ध करून, ते एका किंवा दुसऱ्या फोर्कच्या बाजूने साक्षांकनांचे संचित वजन झुकवतात. हे अनिश्चित काळासाठी चालू राहू शकते, ज्यात हल्ला करणारे व्हॅलिडेटर दोन्ही फोर्कवर व्हॅलिडेटर्सचे समान विभाजन राखतात. कोणत्याही फोर्कला 2/3 सुपरमेजोरिटी आकर्षित करता येत नसल्यामुळे, नेटवर्क अंतिम होणार नाही. + +**बाउन्सिंग हल्ले** समान आहेत. हल्ला करणाऱ्या व्हॅलिडेटर्सकडून पुन्हा मते रोखली जातात. दोन फोर्कमध्ये समान विभाजन ठेवण्यासाठी मते प्रसिद्ध करण्याऐवजी, ते फोर्क A आणि फोर्क B दरम्यान पर्यायी चेकपॉईंट्सना न्याय देण्यासाठी योग्य क्षणी त्यांच्या मतांचा वापर करतात. दोन फोर्कमधील न्याय्यतेच्या या फ्लिप-फ्लॉपिंगमुळे कोणत्याही चेनवर अंतिम केले जाऊ शकणारे न्याय्य स्त्रोत आणि लक्ष्य चेकपॉईंट्सची जोडी तयार होण्यापासून प्रतिबंधित होते, ज्यामुळे अंतिमता थांबते. + + + +बाउन्सिंग आणि बॅलन्सिंग दोन्ही हल्ले हल्लेखोराचे नेटवर्कमधील संदेशांच्या वेळेवर अत्यंत सूक्ष्म नियंत्रण असण्यावर अवलंबून असतात, जे संभव नाही. तरीसुद्धा, प्रोटोकॉलमध्ये संरक्षण तयार केले आहे, ज्यामध्ये धीम्या संदेशांच्या तुलनेत जलद संदेशांना अतिरिक्त वजन दिले जाते. याला [प्रपोजर-वेट बूस्टिंग](https://github.com/ethereum/consensus-specs/pull/2730) म्हणून ओळखले जाते. बाउन्सिंग हल्ल्यांपासून बचाव करण्यासाठी फोर्क-चॉइस अल्गोरिदम अद्यतनित करण्यात आला जेणेकरून नवीनतम न्याय्य चेकपॉईंट [प्रत्येक इपॉकमधील स्लॉटच्या पहिल्या 1/3 दरम्यान](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) फक्त एका पर्यायी चेनच्या चेकपॉईंटवर स्विच करू शकेल. ही अट हल्लेखोराला नंतर तैनात करण्यासाठी मते वाचवण्यापासून प्रतिबंधित करते - फोर्क चॉईस अल्गोरिदम फक्त इपॉकच्या पहिल्या 1/3 मध्ये निवडलेल्या चेकपॉईंटलाच प्राधान्य देतो, ज्या काळात बहुतेक प्रामाणिक व्हॅलिडेटर्सनी मतदान केलेले असते. + +एकत्रितपणे, हे उपाय एक अशी परिस्थिती निर्माण करतात ज्यात एक प्रामाणिक ब्लॉक प्रस्तावक स्लॉटच्या सुरुवातीनंतर लगेच आपला ब्लॉक प्रसारित करतो, नंतर ~1/3 स्लॉट (4 सेकंद) कालावधी असतो ज्यात तो नवीन ब्लॉक फोर्क-चॉइस अल्गोरिदमला दुसऱ्या चेनवर स्विच करण्यास कारणीभूत ठरू शकतो. त्याच मुदतीनंतर, धीम्या व्हॅलिडेटर्सकडून येणाऱ्या साक्षांकनांचे वजन पूर्वी आलेल्यांच्या तुलनेत कमी केले जाते. हे चेनचा हेड निश्चित करण्यासाठी जलद प्रस्तावक आणि व्हॅलिडेटर्सना जोरदारपणे अनुकूल करते आणि यशस्वी संतुलन किंवा बाऊन्सिंग हल्ल्याची शक्यता लक्षणीयरीत्या कमी करते. + +हे लक्षात घेण्यासारखे आहे की, प्रपोजर बूस्टिंग एकटेच फक्त “स्वस्त रिओर्ग” पासून संरक्षण करते, म्हणजेच, कमी स्टेक असलेल्या हल्लेखोराने प्रयत्न केलेले हल्ले. खरं तर, प्रपोजर-बूस्टिंग स्वतःच मोठ्या स्टेकहोल्डर्सद्वारे गेम केले जाऊ शकते. [या पोस्टचे](https://ethresear.ch/t/change-fork-choice-rule-to-mitigate-balancing-and-reorging-attacks/11127) लेखक वर्णन करतात की 7% स्टेक असलेला हल्लेखोर प्रामाणिक व्हॅलिडेटर्सना त्यांच्या फोर्कवर तयार होण्यासाठी फसवण्यासाठी, एका प्रामाणिक ब्लॉकला रिओर्ग करण्यासाठी आपल्या मतांचा धोरणात्मकपणे कसा वापर करू शकतो. हा हल्ला आदर्श लेटेंसी परिस्थिती गृहीत धरून तयार करण्यात आला होता, जी खूपच असंभव आहे. हल्लेखोरासाठी शक्यता अजूनही खूप कमी आहेत, आणि जास्त स्टेक म्हणजे अधिक भांडवल धोक्यात आणि एक मजबूत आर्थिक निरुत्साह. + +[LMD नियमाला विशेषतः लक्ष्य करणारा संतुलन हल्ला](https://ethresear.ch/t/balancing-attack-lmd-edition/11853) देखील प्रस्तावित करण्यात आला होता, जो प्रस्तावक बूस्टिंग असूनही व्यवहार्य असल्याचे सुचवण्यात आले होते. एक हल्लेखोर आपल्या ब्लॉक प्रस्तावाला संदिग्ध करून आणि प्रत्येक ब्लॉक सुमारे अर्ध्या नेटवर्कवर प्रसारित करून दोन प्रतिस्पर्धी चेन सेट करतो, ज्यामुळे फोर्कमध्ये अंदाजे संतुलन साधले जाते. मग, संगनमत करणारे व्हॅलिडेटर त्यांच्या मतांमध्ये संदिग्धता निर्माण करतात, अशा वेळेस की अर्ध्या नेटवर्कला फोर्क `A` साठी त्यांची मते प्रथम मिळतात आणि दुसऱ्या अर्ध्याला फोर्क `B` साठी प्रथम मिळतात. LMD नियम प्रत्येक व्हॅलिडेटरसाठी दुसरे साक्षांकन टाकून देतो आणि फक्त पहिलेच ठेवतो, त्यामुळे अर्धे नेटवर्क `A` साठी मते पाहते आणि `B` साठी काहीच नाही, तर दुसरे अर्धे नेटवर्क `B` साठी मते पाहते आणि `A` साठी काहीच नाही. लेखक वर्णन करतात की LMD नियम प्रतिस्पर्ध्याला संतुलन हल्ला करण्यासाठी “उल्लेखनीय शक्ती” देतो. + +हा LMD हल्ला व्हेक्टर [फोर्क चॉईस अल्गोरिदम अद्यतनित करून](https://github.com/ethereum/consensus-specs/pull/2845) बंद करण्यात आला, जेणेकरून तो संदिग्ध व्हॅलिडेटर्सना फोर्क चॉईस विचारातून पूर्णपणे काढून टाकतो. संदिग्ध व्हॅलिडेटर्सच्या भविष्यातील प्रभावाला देखील फोर्क चॉईस अल्गोरिदमद्वारे कमी केले जाते. हे वरील संतुलन हल्ल्याला प्रतिबंधित करते आणि त्याच वेळी हिमस्खलन हल्ल्यांविरुद्ध लवचिकता राखते. + +[मार्च 2022 च्या पेपरमध्ये](https://arxiv.org/pdf/2203.01315.pdf) [**हिमस्खलन हल्ले**](https://ethresear.ch/t/avalanche-attack-on-proof-of-stake-ghost/11854/3) नावाच्या दुसऱ्या प्रकारच्या हल्ल्याचे वर्णन करण्यात आले होते. हिमस्खलन हल्ला करण्यासाठी, हल्लेखोराला अनेक सलग ब्लॉक प्रस्तावक नियंत्रित करणे आवश्यक आहे. प्रत्येक ब्लॉक प्रस्ताव स्लॉटमध्ये, हल्लेखोर आपला ब्लॉक रोखून धरतो, जोपर्यंत प्रामाणिक चेन रोखून धरलेल्या ब्लॉकसह समान सबट्री वजनापर्यंत पोहोचत नाही तोपर्यंत ते गोळा करत राहतो. नंतर, रोखून धरलेले ब्लॉक अशा प्रकारे प्रसिद्ध केले जातात की ते जास्तीत जास्त संदिग्धता निर्माण करतात. लेखक सुचवतात की प्रस्तावक बूस्टिंग - संतुलन आणि बाऊन्सिंग हल्ल्यांविरुद्धचे प्राथमिक संरक्षण - हिमस्खलन हल्ल्याच्या काही प्रकारांपासून संरक्षण देत नाही. तथापि, लेखकांनी हा हल्ला फक्त Ethereum च्या फोर्क-चॉइस अल्गोरिदमच्या अत्यंत आदर्श आवृत्तीवर (त्यांनी LMD शिवाय GHOST वापरला) प्रदर्शित केला. + +हिमस्खलन हल्ला LMD-GHOST फोर्क चॉईस अल्गोरिदमच्या LMD भागाद्वारे कमी केला जातो. LMD म्हणजे “लेटेस्ट-मेसेज-ड्रिव्हन” आणि ते प्रत्येक व्हॅलिडेटरद्वारे ठेवलेल्या एका टेबलचा संदर्भ देते ज्यामध्ये इतर व्हॅलिडेटर्सकडून प्राप्त झालेला नवीनतम संदेश असतो. ते फील्ड तेव्हाच अद्यतनित केले जाते जेव्हा नवीन संदेश एका विशिष्ट व्हॅलिडेटरसाठी टेबलमध्ये असलेल्या स्लॉटपेक्षा नंतरच्या स्लॉटमधून येतो. व्यवहारात, याचा अर्थ असा की प्रत्येक स्लॉटमध्ये, प्राप्त झालेला पहिला संदेश स्वीकारला जातो आणि कोणतेही अतिरिक्त संदेश दुर्लक्षित केले जाणारे संदिग्ध संदेश असतात. दुसऱ्या शब्दांत सांगायचे झाल्यास, सहमती क्लायंट संदिग्ध संदेशांची गणना करत नाहीत - ते प्रत्येक व्हॅलिडेटरकडून प्रथम येणारा संदेश वापरतात आणि संदिग्ध संदेश फक्त टाकून दिले जातात, ज्यामुळे हिमस्खलन हल्ले टाळले जातात. + +फोर्क चॉईस नियमात अनेक संभाव्य भविष्यातील अपग्रेड्स आहेत जे प्रपोजर-बूस्टद्वारे प्रदान केलेल्या सुरक्षेत भर घालू शकतात. एक म्हणजे [व्ह्यू-मर्ज](https://ethresear.ch/t/view-merge-as-a-replacement-for-proposer-boost/13739), जिथे साक्षांकनकर्ते स्लॉटच्या सुरुवातीच्या `n` सेकंद आधी फोर्क चॉईसचे त्यांचे दृश्य गोठवतात आणि प्रस्तावक नंतर नेटवर्कवर चेनचे दृश्य सिंक्रोनाइझ करण्यास मदत करतो. आणखी एक संभाव्य अपग्रेड म्हणजे [सिंगल-स्लॉट अंतिमता](https://notes.ethereum.org/@vbuterin/single_slot_finality), जे संदेशांच्या वेळेवर आधारित हल्ल्यांपासून फक्त एका स्लॉटनंतर चेनला अंतिम करून संरक्षण देते. + +#### अंतिमता विलंब {#finality-delay} + +[ज्या पेपरने](https://econcs.pku.edu.cn/wine2020/wine2020/Workshop/GTiB20_paper_8.pdf) प्रथम कमी खर्चाच्या सिंगल ब्लॉक रिओर्ग हल्ल्याचे वर्णन केले, त्याच पेपरने अंतिमता विलंब (उर्फ “लाइव्हनेस फेल्युअर”) हल्ल्याचे वर्णन केले जो हल्लेखोर इपॉक-बाउंडरी ब्लॉकचा ब्लॉक प्रस्तावक असण्यावर अवलंबून असतो. हे गंभीर आहे कारण हे इपॉक बाउंडरी ब्लॉक चेकपॉईंट बनतात जे कॅस्पर FFG चेनच्या भागांना अंतिम करण्यासाठी वापरतो. हल्लेखोर आपला ब्लॉक तोपर्यंत रोखून ठेवतो जोपर्यंत पुरेसे प्रामाणिक व्हॅलिडेटर त्यांचे FFG मते मागील इपॉक-बाउंडरी ब्लॉकच्या बाजूने सध्याच्या अंतिमता लक्ष्यासाठी वापरत नाहीत. नंतर ते आपला रोखून ठेवलेला ब्लॉक प्रसिद्ध करतात. ते त्यांच्या ब्लॉकला साक्षांकित करतात आणि उर्वरित प्रामाणिक व्हॅलिडेटर देखील करतात, ज्यामुळे वेगवेगळ्या लक्ष्य चेकपॉईंटसह फोर्क तयार होतात. जर त्यांनी योग्य वेळी हे केले, तर ते अंतिमता रोखतील कारण कोणत्याही फोर्कला 2/3 सुपरमेजोरिटी साक्षांकित करणार नाही. स्टेक जितका लहान असेल, तितकीच वेळ अचूक असणे आवश्यक आहे कारण हल्लेखोर थेट कमी साक्षांकने नियंत्रित करतो, आणि हल्लेखोराला दिलेल्या इपॉक-बाउंडरी ब्लॉकचा व्हॅलिडेटर प्रस्तावित करण्याची शक्यता कमी असते. + +#### लांब पल्ल्याचे हल्ले {#long-range-attacks} + +प्रुफ-ऑफ-स्टेक ब्लॉकचेनसाठी विशिष्ट प्रकारचा हल्ला देखील आहे, ज्यामध्ये जेनेसिस ब्लॉकमध्ये सहभागी झालेला व्हॅलिडेटर प्रामाणिक ब्लॉकचेनसोबतच ब्लॉकचेनचा एक वेगळा फोर्क राखतो, आणि अखेरीस प्रामाणिक व्हॅलिडेटर सेटला खूप नंतर एका योग्य वेळी त्यावर स्विच करण्यासाठी पटवून देतो. Ethereum वर या प्रकारचा हल्ला शक्य नाही कारण अंतिमता गॅझेटमुळे सर्व व्हॅलिडेटर नियमित अंतराने (“चेकपॉईंट”) प्रामाणिक चेनच्या स्थितीवर सहमत होतात. हे सोपे तंत्र लांब पल्ल्याच्या हल्लेखोरांना निष्प्रभ करते कारण Ethereum क्लायंट अंतिम केलेल्या ब्लॉकना रिओर्ग करणार नाहीत. नेटवर्कमध्ये सामील होणारे नवीन नोड एक विश्वसनीय अलीकडील स्थिती हॅश (“[कमकुवत व्यक्तिनिष्ठता](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) चेकपॉईंट”) शोधून आणि त्याचा वापर स्यूडो-जेनेसिस ब्लॉक म्हणून त्यावर तयार करण्यासाठी करतात. हे नेटवर्कमध्ये प्रवेश करणाऱ्या नवीन नोडसाठी स्वतःसाठी माहिती सत्यापित करणे सुरू करण्यापूर्वी एक 'विश्वास प्रवेशद्वार' तयार करते. + +#### सेवा नाकारणे {#denial-of-service} + +Ethereum ची PoS यंत्रणा प्रत्येक स्लॉटमध्ये ब्लॉक प्रस्तावक होण्यासाठी एकूण व्हॅलिडेटर सेटमधून एका व्हॅलिडेटरची निवड करते. हे सार्वजनिकरित्या ज्ञात फंक्शन वापरून मोजले जाऊ शकते आणि प्रतिस्पर्ध्याला त्यांच्या ब्लॉक प्रस्तावाच्या थोडे आधी पुढील ब्लॉक प्रस्तावक ओळखणे शक्य आहे. मग, हल्लेखोर ब्लॉक प्रस्तावकाला त्यांच्या सहकाऱ्यांसोबत माहितीची देवाणघेवाण करण्यापासून रोखण्यासाठी स्पॅम करू शकतो. उर्वरित नेटवर्कला असे वाटेल की ब्लॉक प्रस्तावक ऑफलाइन होता आणि स्लॉट रिकामाच जाईल. हे विशिष्ट व्हॅलिडेटर्सविरूद्ध सेन्सॉरशिपचे एक स्वरूप असू शकते, ज्यामुळे त्यांना ब्लॉकचेनमध्ये माहिती जोडण्यापासून प्रतिबंधित केले जाते. सिंगल सीक्रेट लीडर इलेक्शन (SSLE) किंवा नॉन-सिंगल सीक्रेट लीडर इलेक्शन लागू केल्याने DoS जोखीम कमी होतील कारण फक्त ब्लॉक प्रस्तावकालाच माहित असते की त्यांची निवड झाली आहे आणि ही निवड आगाऊ जाणून घेणे शक्य नाही. हे अद्याप लागू केलेले नाही, परंतु [संशोधन आणि विकासाचे](https://ethresear.ch/t/secret-non-single-leader-election/11789) एक सक्रिय क्षेत्र आहे. + +या सर्वांवरून हे दिसून येते की Ethereum वर लहान स्टेकसह यशस्वीरित्या हल्ला करणे खूप कठीण आहे. येथे वर्णन केलेले व्यवहार्य हल्ले एक आदर्श फोर्क-चॉइस अल्गोरिदम, असंभाव्य नेटवर्क परिस्थितींची आवश्यकता ठेवतात, किंवा हल्ला व्हेक्टर आधीच क्लायंट सॉफ्टवेअरमध्ये तुलनेने किरकोळ पॅचसह बंद केले गेले आहेत. हे, अर्थातच, वाइल्डमध्ये झिरो-डे अस्तित्वात असण्याची शक्यता नाकारत नाही, परंतु हे दर्शवते की अल्पसंख्याक-स्टेक हल्लेखोराला प्रभावी होण्यासाठी तांत्रिक योग्यता, सहमती लेयरचे ज्ञान आणि नशिबाची अत्यंत उच्च पातळी आवश्यक आहे. हल्लेखोराच्या दृष्टिकोनातून, शक्य तितका इथर जमा करणे आणि एकूण स्टेकच्या मोठ्या हिश्श्यासह सशस्त्र परत येणे हे त्यांचे सर्वोत्तम पैज असू शकते. + +### एकूण स्टेकच्या >= 33% वापरणारे हल्लेखोर {#attackers-with-33-stake} + +या लेखात पूर्वी नमूद केलेले सर्व हल्ले यशस्वी होण्याची शक्यता अधिक असते जेव्हा हल्लेखोराकडे मत देण्यासाठी अधिक स्टेक केलेला इथर असतो, आणि प्रत्येक स्लॉटमध्ये ब्लॉक प्रस्तावित करण्यासाठी निवडले जाणारे अधिक व्हॅलिडेटर असतात. एक दुर्भावनापूर्ण व्हॅलिडेटर म्हणून शक्य तितका जास्त स्टेक केलेला इथर नियंत्रित करण्याचे ध्येय ठेवू शकतो. + +स्टेक केलेल्या इथरपैकी 33% हे हल्लेखोरासाठी एक बेंचमार्क आहे कारण या रकमेपेक्षा जास्त काहीही असल्यास, त्यांच्याकडे इतर व्हॅलिडेटर्सच्या कृतींवर बारीक नियंत्रण न ठेवता चेनला अंतिम होण्यापासून रोखण्याची क्षमता असते. ते फक्त सर्व एकत्र गायब होऊ शकतात. जर स्टेक केलेल्या इथरपैकी 1/3 किंवा अधिक इथर दुर्भावनापूर्णपणे साक्षांकित करत असेल किंवा साक्षांकन करण्यात अयशस्वी होत असेल, तर 2/3 सुपरमेजोरिटी अस्तित्वात असू शकत नाही आणि चेन अंतिम होऊ शकत नाही. याविरूद्धचे संरक्षण म्हणजे निष्क्रियता गळती. निष्क्रियता गळती त्या व्हॅलिडेटर्सना ओळखते जे साक्षांकन करण्यात अयशस्वी होत आहेत किंवा बहुमताच्या विरुद्ध साक्षांकन करत आहेत. या साक्षांकन न करणाऱ्या व्हॅलिडेटर्सच्या मालकीचा स्टेक केलेला इथर हळूहळू कमी होत जातो जोपर्यंत ते एकत्रितपणे एकूणच्या 1/3 पेक्षा कमी प्रतिनिधित्व करत नाहीत, जेणेकरून चेन पुन्हा अंतिम होऊ शकेल. + +निष्क्रियता गळतीचा उद्देश चेनला पुन्हा अंतिम करणे हा आहे. तथापि, हल्लेखोर आपल्या स्टेक केलेल्या इथरचा एक भाग देखील गमावतो. एकूण स्टेक केलेल्या इथरपैकी 33% चे प्रतिनिधित्व करणाऱ्या व्हॅलिडेटर्समधील सततची निष्क्रियता खूप महागडी असते जरी व्हॅलिडेटर्स स्लॅश केले जात नसले तरी. + +Ethereum नेटवर्क असिंक्रोनस आहे (म्हणजे, संदेश पाठवणे आणि प्राप्त होणे यामध्ये विलंब होतो) असे गृहीत धरल्यास, एकूण स्टेकच्या 34% नियंत्रित करणारा हल्लेखोर दुहेरी अंतिमता घडवू शकतो. हे असे आहे कारण हल्लेखोर जेव्हा ब्लॉक उत्पादक म्हणून निवडला जातो तेव्हा तो संदिग्धता निर्माण करू शकतो, आणि नंतर आपल्या सर्व व्हॅलिडेटर्ससह दुहेरी मतदान करू शकतो. यामुळे अशी परिस्थिती निर्माण होते जिथे ब्लॉकचेनचा एक फोर्क अस्तित्वात येतो, ज्यातील प्रत्येकासाठी स्टेक केलेल्या इथरपैकी 34% मतदान करतात. प्रत्येक फोर्कला फक्त उर्वरित व्हॅलिडेटर्सपैकी 50% मते त्याच्या बाजूने मिळणे आवश्यक आहे जेणेकरून दोन्ही फोर्कला सुपरमेजोरिटीचा पाठिंबा मिळेल, अशा परिस्थितीत दोन्ही चेन अंतिम होऊ शकतात (कारण हल्लेखोरांच्या व्हॅलिडेटर्सपैकी 34% + उर्वरित 66% पैकी अर्धे = प्रत्येक फोर्कवर 67%). स्पर्धक ब्लॉक प्रत्येकी सुमारे 50% प्रामाणिक व्हॅलिडेटर्सना प्राप्त होणे आवश्यक आहे, त्यामुळे हा हल्ला तेव्हाच व्यवहार्य आहे जेव्हा हल्लेखोराचे नेटवर्कवर प्रसारित होणाऱ्या संदेशांच्या वेळेवर काही प्रमाणात नियंत्रण असते जेणेकरून ते अर्ध्या प्रामाणिक व्हॅलिडेटर्सना प्रत्येक चेनवर ढकलू शकतील. हल्लेखोर ही दुहेरी अंतिमता साध्य करण्यासाठी आपला संपूर्ण स्टेक (आजच्या व्हॅलिडेटर सेटसह ~10 दशलक्ष इथरपैकी 34%) नष्ट करेल कारण त्याचे 34% व्हॅलिडेटर एकाच वेळी दुहेरी-मतदान करतील - हा जास्तीत जास्त सहसंबंध दंडासह एक स्लॅश करण्यायोग्य गुन्हा आहे. या हल्ल्याविरूद्धचे संरक्षण म्हणजे एकूण स्टेक केलेल्या इथरपैकी 34% नष्ट करण्याची मोठी किंमत. या हल्ल्यातून सावरण्यासाठी Ethereum समुदायाला “आउट-ऑफ-बँड” समन्वय साधावा लागेल आणि एका किंवा दुसऱ्या फोर्कचे अनुसरण करण्यास आणि दुसऱ्याकडे दुर्लक्ष करण्यास सहमती द्यावी लागेल. + +### एकूण स्टेकच्या ~50% वापरणारे हल्लेखोर {#attackers-with-50-stake} + +स्टेक केलेल्या इथरच्या 50% वर, व्हॅलिडेटर्सचा एक खोडकर गट सैद्धांतिकदृष्ट्या चेनला दोन समान आकाराच्या फोर्कमध्ये विभाजित करू शकतो आणि नंतर प्रामाणिक व्हॅलिडेटर सेटच्या विरुद्ध मतदान करण्यासाठी आपला संपूर्ण 50% स्टेक वापरू शकतो, ज्यामुळे दोन फोर्क कायम राहतात आणि अंतिमता प्रतिबंधित होते. दोन्ही फोर्कवरील निष्क्रियता गळतीमुळे अखेरीस दोन्ही चेन अंतिम होतील. या टप्प्यावर, एकमेव पर्याय म्हणजे सामाजिक पुनर्प्राप्तीवर अवलंबून राहणे. + +हे खूपच असंभाव्य आहे की व्हॅलिडेटर्सचा एक प्रतिकूल गट प्रामाणिक व्हॅलिडेटर संख्या, नेटवर्क लेटन्सी इत्यादींमधील बदलांमुळे एकूण स्टेकच्या अचूक 50% नियंत्रित करू शकेल - असा हल्ला चढवण्याची प्रचंड किंमत आणि यशाची कमी शक्यता ही एका तर्कसंगत हल्लेखोरासाठी एक मजबूत निरुत्साह आहे, विशेषतः जेव्हा _50% पेक्षा जास्त_ मिळवण्यासाठी थोडी अतिरिक्त गुंतवणूक खूप अधिक शक्ती अनलॉक करते. + +एकूण स्टेकच्या >50% वर हल्लेखोर फोर्क चॉईस अल्गोरिदमवर वर्चस्व गाजवू शकतो. या प्रकरणात, हल्लेखोर बहुमताने साक्षांकन करण्यास सक्षम असेल, ज्यामुळे त्यांना प्रामाणिक क्लायंटला फसवण्याची गरज न भासता लहान रिओर्ग करण्याचे पुरेसे नियंत्रण मिळेल. प्रामाणिक व्हॅलिडेटर त्याचे अनुसरण करतील कारण त्यांच्या फोर्क चॉईस अल्गोरिदमला देखील हल्लेखोराची आवडती चेन सर्वात वजनदार म्हणून दिसेल, त्यामुळे चेन अंतिम होऊ शकेल. हे हल्लेखोराला काही व्यवहारांना सेन्सॉर करण्यास, लहान-श्रेणीचे रिओर्ग करण्यास आणि त्यांच्या बाजूने ब्लॉक पुन्हा क्रमित करून जास्तीत जास्त MEV काढण्यास सक्षम करते. याविरूद्धचे संरक्षण म्हणजे बहुसंख्य स्टेकची प्रचंड किंमत (सध्या फक्त $19 अब्ज USD पेक्षा कमी) जी हल्लेखोराद्वारे धोक्यात आणली जाते कारण सामाजिक लेयर हस्तक्षेप करण्याची आणि एक प्रामाणिक अल्पसंख्याक फोर्क स्वीकारण्याची शक्यता आहे, ज्यामुळे हल्लेखोराच्या स्टेकचे मूल्य नाटकीयरीत्या कमी होते. + +### एकूण स्टेकच्या >=66% वापरणारे हल्लेखोर {#attackers-with-66-stake} + +एकूण स्टेक केलेल्या इथरपैकी 66% किंवा अधिक असलेला हल्लेखोर कोणत्याही प्रामाणिक व्हॅलिडेटरला जबरदस्ती न करता आपली पसंतीची चेन अंतिम करू शकतो. हल्लेखोर फक्त आपल्या पसंतीच्या फोर्कसाठी मतदान करू शकतो आणि नंतर तो अंतिम करू शकतो, फक्त कारण ते एका अप्रामाणिक सुपरमेजोरिटीने मतदान करू शकतात. सुपरमेजोरिटी स्टेकहोल्डर म्हणून, हल्लेखोर नेहमीच अंतिम केलेल्या ब्लॉकच्या सामग्रीवर नियंत्रण ठेवेल, खर्च करण्याची, रिवाइंड करण्याची आणि पुन्हा खर्च करण्याची, काही व्यवहार सेन्सॉर करण्याची आणि इच्छेनुसार चेन रिओर्ग करण्याची शक्ती असेल. 51% ऐवजी 66% नियंत्रित करण्यासाठी अतिरिक्त इथर खरेदी करून, हल्लेखोर प्रभावीपणे एक्स पोस्ट रिओर्ग आणि अंतिमता रिव्हर्जन करण्याची क्षमता विकत घेत आहे (म्हणजे, भविष्य नियंत्रित करण्याबरोबरच भूतकाळ बदलणे). येथे एकमेव वास्तविक संरक्षण म्हणजे एकूण स्टेक केलेल्या इथरपैकी 66% ची प्रचंड किंमत, आणि पर्यायी फोर्कच्या अवलंबनावर समन्वय साधण्यासाठी सामाजिक लेयरवर अवलंबून राहण्याचा पर्याय. आपण याबद्दल पुढील विभागात अधिक तपशीलवार शोध घेऊ शकतो. + +## लोक: संरक्षणाची शेवटची ओळ {#people-the-last-line-of-defense} + +जर अप्रामाणिक व्हॅलिडेटर चेनची आपली पसंतीची आवृत्ती अंतिम करण्यात यशस्वी झाले, तर Ethereum समुदाय एका कठीण परिस्थितीत सापडतो. कॅनॉनिकल चेनमध्ये तिच्या इतिहासात एक अप्रामाणिक भाग समाविष्ट असतो, तर प्रामाणिक व्हॅलिडेटर पर्यायी (प्रामाणिक) चेनला साक्षांकित केल्याबद्दल शिक्षा भोगू शकतात. लक्षात घ्या की अंतिम परंतु चुकीची चेन बहुसंख्य क्लायंटमधील बगमुळे देखील उद्भवू शकते. शेवटी, अंतिम उपाय म्हणजे परिस्थितीचे निराकरण करण्यासाठी सामाजिक लेयर - लेयर 0 - वर अवलंबून राहणे. + +Ethereum च्या PoS सहमतीची एक ताकद म्हणजे [संरक्षणात्मक धोरणांची एक श्रेणी](https://youtu.be/1m12zgJ42dI?t=1712) आहे जी समुदाय हल्ल्याच्या वेळी वापरू शकतो. किमान प्रतिसाद म्हणजे हल्लेखोरांच्या व्हॅलिडेटर्सना कोणत्याही अतिरिक्त दंडाशिवाय नेटवर्कमधून जबरदस्तीने बाहेर काढणे. नेटवर्कमध्ये पुन्हा प्रवेश करण्यासाठी हल्लेखोराला एका सक्रियण रांगेत सामील व्हावे लागेल जे व्हॅलिडेटर सेट हळूहळू वाढेल याची खात्री करते. उदाहरणार्थ, स्टेक केलेल्या इथरची रक्कम दुप्पट करण्यासाठी पुरेसे व्हॅलिडेटर जोडण्यासाठी सुमारे 200 दिवस लागतात, ज्यामुळे हल्लेखोर दुसरा 51% हल्ला करण्याचा प्रयत्न करण्यापूर्वी प्रामाणिक व्हॅलिडेटर्सना 200 दिवस मिळतात. तथापि, समुदाय हल्लेखोराला अधिक कठोर शिक्षा देण्याचा निर्णय घेऊ शकतो, जसे की मागील रिवॉर्ड रद्द करणे किंवा त्यांच्या स्टेक केलेल्या भांडवलाचा काही भाग (100% पर्यंत) जाळणे. + +हल्लेखोरावर कोणताही दंड लावला तरी, समुदायाला एकत्र ठरवावे लागेल की अप्रामाणिक चेन, जरी Ethereum क्लायंटमध्ये कोड केलेल्या फोर्क चॉईस अल्गोरिदमद्वारे पसंत केली गेली असली तरी, प्रत्यक्षात अवैध आहे आणि समुदायाने त्याऐवजी प्रामाणिक चेनवर तयार केले पाहिजे. प्रामाणिक व्हॅलिडेटर Ethereum ब्लॉकचेनच्या समुदाय-स्वीकृत फोर्कवर तयार करण्यास एकत्रितपणे सहमत होऊ शकतात, जो उदाहरणार्थ, हल्ला सुरू होण्यापूर्वी कॅनॉनिकल चेनमधुन फोर्क झाला असेल किंवा हल्लेखोरांचे व्हॅलिडेटर जबरदस्तीने काढून टाकले गेले असतील. प्रामाणिक व्हॅलिडेटर्सना या चेनवर तयार करण्यासाठी प्रोत्साहन दिले जाईल कारण ते हल्लेखोराच्या चेनला (योग्यरित्या) साक्षांकित करण्यात अयशस्वी झाल्याबद्दल त्यांच्यावर लागू होणारे दंड टाळतील. Ethereum वर तयार केलेले एक्सचेंज, ऑन-रॅम्प आणि ॲप्लिकेशन्स बहुधा प्रामाणिक चेनवर असणे पसंत करतील आणि प्रामाणिक व्हॅलिडेटर्सचे अनुसरण करून प्रामाणिक ब्लॉकचेनवर जातील. + +तथापि, हे एक मोठे शासन आव्हान असेल. काही वापरकर्ते आणि व्हॅलिडेटर निःसंशयपणे प्रामाणिक चेनवर परत जाण्यामुळे तोट्यात येतील, हल्ल्यानंतर व्हॅलिडेट केलेल्या ब्लॉकमधील व्यवहार संभाव्यतः परत घेतले जाऊ शकतात, ज्यामुळे ॲप्लिकेशन लेयरमध्ये व्यत्यय येईल, आणि हे काही वापरकर्त्यांच्या नैतिकतेला कमी लेखते जे “कोड हाच कायदा आहे” असे मानतात. एक्सचेंज आणि ॲप्लिकेशन्सनी बहुधा ऑफचेन क्रिया ऑनचेन व्यवहारांशी जोडलेल्या असतील ज्या आता परत घेतल्या जाऊ शकतात, ज्यामुळे मागे घेणे आणि पुनरावृत्तीची एक मालिका सुरू होईल जी निष्पक्षपणे सोडवणे कठीण असेल, विशेषतः जर गैर-मिळवलेले नफे मिसळले गेले असतील, DeFi मध्ये किंवा इतर डेरिव्हेटिव्हमध्ये जमा केले गेले असतील ज्यांचे प्रामाणिक वापरकर्त्यांवर दुय्यम परिणाम होतील. निःसंशयपणे काही वापरकर्त्यांनी, कदाचित संस्थात्मक वापरकर्त्यांनी देखील, धूर्तपणामुळे किंवा योगायोगाने अप्रामाणिक चेनमधून आधीच फायदा मिळवला असेल, आणि आपले नफे संरक्षित करण्यासाठी फोर्कला विरोध करू शकतात. >51% हल्ल्यांना सामुदायिक प्रतिसादाची तालीम करण्याच्या मागण्या झाल्या आहेत जेणेकरून एक समंजस समन्वित निवारण त्वरीत कार्यान्वित करता येईल. ethresear.ch वर विटालिकची काही उपयुक्त चर्चा [येथे](https://ethresear.ch/t/timeliness-detectors-and-51-attack-recovery-in-blockchains/6925) आणि [येथे](https://ethresear.ch/t/responding-to-51-attacks-in-casper-ffg/6363) आणि ट्विटरवर [येथे](https://twitter.com/skylar_eth/status/1551798684727508992?s=20&t=oHZ1xv8QZdOgAXhxZKtHEw) आहे. समन्वित सामाजिक प्रतिसादाचा उद्देश हल्लेखोराला शिक्षा देण्यामध्ये आणि इतर वापरकर्त्यांवरील परिणाम कमी करण्यामध्ये अत्यंत लक्ष्यित आणि विशिष्ट असणे पाहिजे. + +शासन हा आधीच एक गुंतागुंतीचा विषय आहे. एका अप्रामाणिक अंतिम करणाऱ्या चेनला लेयर-0 आपत्कालीन प्रतिसाद व्यवस्थापित करणे Ethereum समुदायासाठी निःसंशयपणे आव्हानात्मक असेल, परंतु हे Ethereum च्या इतिहासात [घडले आहे](/ethereum-forks/#dao-fork-summary) - [दोनदा](/ethereum-forks/#tangerine-whistle)). + +तरीही, अंतिम उपाय मीटस्पेसमध्ये असण्यात काहीतरी समाधानकारक आहे. शेवटी, आपल्यावर या अभूतपूर्व तंत्रज्ञानाचा ढिगारा असूनही, जर सर्वात वाईट कधी घडले तर खऱ्या लोकांना त्यातून मार्ग काढण्यासाठी समन्वय साधावा लागेल. + +## सारांश {#summary} + +या पृष्ठाने हल्लेखोर Ethereum च्या प्रुफ-ऑफ-स्टेक सहमती प्रोटोकॉलचा गैरफायदा घेण्याचा प्रयत्न कसे करू शकतात याच्या काही मार्गांचा शोध घेतला. एकूण स्टेक केलेल्या इथरच्या वाढत्या प्रमाणासह हल्लेखोरांसाठी रिओर्ग आणि अंतिमता विलंब शोधण्यात आले. एकंदरीत, एका श्रीमंत हल्लेखोराला यशाची अधिक संधी असते कारण त्याचा स्टेक मतदानाच्या शक्तीत रूपांतरित होतो ज्याचा वापर तो भविष्यातील ब्लॉकच्या सामग्रीवर प्रभाव टाकण्यासाठी करू शकतो. स्टेक केलेल्या इथरच्या विशिष्ट मर्यादेच्या रकमेवर, हल्लेखोराची शक्ती वाढते: + +33%: अंतिमता विलंब + +34%: अंतिमता विलंब, दुहेरी अंतिमता + +51%: अंतिमता विलंब, दुहेरी अंतिमता, सेन्सॉरशिप, ब्लॉकचेनच्या भविष्यावर नियंत्रण + +66%: अंतिमता विलंब, दुहेरी अंतिमता, सेन्सॉरशिप, ब्लॉकचेनच्या भविष्य आणि भूतकाळावर नियंत्रण + +अनेक अधिक अत्याधुनिक हल्ले देखील आहेत ज्यांना कमी प्रमाणात स्टेक केलेला इथर आवश्यक असतो परंतु प्रामाणिक व्हॅलिडेटर सेटला त्यांच्या बाजूने वळवण्यासाठी संदेशांच्या वेळेवर अत्यंत अत्याधुनिक हल्लेखोराचे सूक्ष्म नियंत्रण असण्यावर अवलंबून असतात. + +एकंदरीत, या संभाव्य हल्ला व्हेक्टर असूनही यशस्वी हल्ल्याचा धोका कमी आहे, निश्चितपणे प्रुफ-ऑफ-वर्कच्या समकक्षांपेक्षा कमी. हे असे आहे कारण प्रामाणिक व्हॅलिडेटर्सना त्यांच्या मतदानाच्या शक्तीने दडपून टाकण्याचा प्रयत्न करणाऱ्या हल्लेखोराद्वारे धोक्यात आणलेल्या स्टेक केलेल्या इथरची प्रचंड किंमत आहे. अंगभूत “गाजर आणि काठी” प्रोत्साहन लेयर बहुतेक गैरवर्तनांपासून संरक्षण करते, विशेषतः कमी-स्टेक हल्लेखोरांसाठी. अधिक सूक्ष्म बाऊन्सिंग आणि बॅलन्सिंग हल्ले यशस्वी होण्याची शक्यता कमी आहे कारण वास्तविक नेटवर्क परिस्थितीमुळे व्हॅलिडेटर्सच्या विशिष्ट उपसमूहांना संदेश वितरणाचे सूक्ष्म नियंत्रण साधणे खूप कठीण होते, आणि क्लायंट टीम्सनी ज्ञात बाऊन्सिंग, बॅलन्सिंग आणि हिमस्खलन हल्ला व्हेक्टर सोप्या पॅचसह त्वरीत बंद केले आहेत. + +34%, 51% किंवा 66% हल्ल्यांना निराकरण करण्यासाठी बहुधा आउट-ऑफ-बँड सामाजिक समन्वयाची आवश्यकता असेल. हे समुदायासाठी वेदनादायक असेल, तरीही समुदायाची आउट-ऑफ-बँड प्रतिसाद देण्याची क्षमता हल्लेखोरासाठी एक मजबूत निरुत्साह आहे. Ethereum सामाजिक लेयर हा अंतिम आधारस्तंभ आहे - एक तांत्रिकदृष्ट्या यशस्वी हल्ला देखील समुदायाने एक प्रामाणिक फोर्क स्वीकारण्यास सहमती दिल्यास निष्प्रभ होऊ शकतो. हल्लेखोर आणि Ethereum समुदाय यांच्यात एक शर्यत असेल - 66% हल्ल्यावर खर्च केलेले अब्जावधी डॉलर्स बहुधा एका यशस्वी सामाजिक समन्वय हल्ल्याद्वारे नष्ट होतील जर तो पुरेसा त्वरीत दिला गेला, ज्यामुळे हल्लेखोराकडे Ethereum समुदायाने दुर्लक्षित केलेल्या ज्ञात अप्रामाणिक चेनवर इलिक्विड स्टेक केलेल्या इथरचे मोठे ओझे राहील. हल्लेखोरासाठी हे फायदेशीर ठरण्याची शक्यता इतकी कमी आहे की ती एक प्रभावी प्रतिबंधक आहे. म्हणूनच घट्ट संरेखित मूल्यांसह एकसंध सामाजिक लेयर राखण्यात गुंतवणूक करणे इतके महत्त्वाचे आहे. + +## अधिक वाचन {#further-reading} + +- [या पृष्ठाची अधिक तपशीलवार आवृत्ती](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [सेटलमेंट अंतिमता वर विटालिक](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) +- [LMD GHOST पेपर](https://arxiv.org/abs/2003.03052) +- [Casper-FFG पेपर](https://arxiv.org/abs/1710.09437) +- [Gasper पेपर](https://arxiv.org/pdf/2003.03052.pdf) +- [प्रस्तावक वजन बूस्टिंग सहमती वैशिष्ट्ये](https://github.com/ethereum/consensus-specs/pull/2730) +- [ethresear.ch वर बाऊन्सिंग हल्ले](https://ethresear.ch/t/prevention-of-bouncing-attack-on-ffg/6114) +- [SSLE संशोधन](https://ethresear.ch/t/secret-non-single-leader-election/11789) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/attestations/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/attestations/index.md new file mode 100644 index 00000000000..8936563f0b2 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/attestations/index.md @@ -0,0 +1,92 @@ +--- +title: "प्रमाणीकरणे" +description: "प्रूफ-ऑफ-स्टेक इथेरियमवरील प्रमाणीकरणांचे वर्णन." +lang: mr +--- + +प्रत्येक इपॉकमध्ये व्हॅलिडेटरने प्रमाणीकरण तयार करणे, त्यावर स्वाक्षरी करणे आणि ते प्रसारित करणे अपेक्षित आहे. हे पृष्ठ या प्रमाणीकरणांचे स्वरूप, त्यांच्यावर कशी प्रक्रिया केली जाते आणि एकमत क्लायंटमध्ये ते कसे संप्रेषित केले जातात याची रूपरेषा देते. + +## प्रमाणीकरण म्हणजे काय? {#what-is-an-attestation} + +प्रत्येक [इपॉक](/glossary/#epoch) (6.4 मिनिटे) एक व्हॅलिडेटर नेटवर्कवर प्रमाणीकरणाचा प्रस्ताव देतो. प्रमाणीकरण हे इपॉकमधील एका विशिष्ट स्लॉटसाठी असते. प्रमाणीकरणाचा उद्देश व्हॅलिडेटरच्या साखळीबद्दलच्या दृष्टिकोनाच्या बाजूने मतदान करणे हा आहे, विशेषतः सर्वात अलीकडील जस्टिफाईड ब्लॉक आणि सध्याच्या इपॉकमधील पहिला ब्लॉक (ज्यांना `source` आणि `target` चेकपॉइंट म्हणून ओळखले जाते). ही माहिती सर्व सहभागी व्हॅलिडेटरसाठी एकत्रित केली जाते, ज्यामुळे नेटवर्कला ब्लॉकचेनच्या स्थितीबद्दल एकमतापर्यंत पोहोचता येते. + +प्रमाणीकरणामध्ये खालील घटक असतात: + +- `aggregation_bits`: व्हॅलिडेटरची एक बिटलिस्ट जिथे स्थिती त्यांच्या समितीमधील व्हॅलिडेटर निर्देशांकाशी जुळते; मूल्य (0/1) हे दर्शवते की व्हॅलिडेटरने `data` वर स्वाक्षरी केली आहे की नाही (म्हणजे, ते सक्रिय आहेत आणि ब्लॉक प्रस्तावकशी सहमत आहेत की नाही). +- `data`: खाली परिभाषित केल्यानुसार प्रमाणीकरणाशी संबंधित तपशील +- `signature`: एक BLS स्वाक्षरी जी वैयक्तिक व्हॅलिडेटरच्या स्वाक्षऱ्या एकत्रित करते + +प्रमाणीकरण करणाऱ्या व्हॅलिडेटरसाठी `data` तयार करणे हे पहिले कार्य आहे. `data` मध्ये खालील माहिती असते: + +- `slot`: स्लॉट क्रमांक ज्याचा प्रमाणीकरण संदर्भ देते +- `index`: एक क्रमांक जो ओळखतो की व्हॅलिडेटर दिलेल्या स्लॉटमध्ये कोणत्या समितीचा सदस्य आहे +- `beacon_block_root`: साखळीच्या सुरुवातीला व्हॅलिडेटरला दिसणाऱ्या ब्लॉकचा रूट हॅश (फोर्क-चॉइस अल्गोरिदम लागू करण्याचा परिणाम) +- `source`: फायनॅलिटी मताचा भाग जो दर्शवितो की व्हॅलिडेटर सर्वात अलीकडील जस्टिफाईड ब्लॉक म्हणून काय पाहतात +- `target`: फायनॅलिटी मताचा भाग जो दर्शवितो की व्हॅलिडेटर सध्याच्या इपॉकमधील पहिला ब्लॉक म्हणून काय पाहतात + +`data` तयार झाल्यावर, व्हॅलिडेटर `aggregation_bits` मधील त्यांच्या स्वतःच्या व्हॅलिडेटर निर्देशांकाशी संबंधित बिट 0 वरून 1 वर फ्लिप करू शकतो, हे दर्शवण्यासाठी की त्यांनी सहभाग घेतला आहे. + +शेवटी, व्हॅलिडेटर प्रमाणीकरणावर स्वाक्षरी करतो आणि ते नेटवर्कवर प्रसारित करतो. + +### एकत्रित प्रमाणीकरण {#aggregated-attestation} + +प्रत्येक व्हॅलिडेटरसाठी नेटवर्कवर हा डेटा प्रसारित करण्याशी संबंधित एक मोठा ओव्हरहेड आहे. म्हणून, वैयक्तिक व्हॅलिडेटरकडून आलेली प्रमाणीकरणे अधिक व्यापकपणे प्रसारित करण्यापूर्वी सबनेटमध्ये एकत्रित केली जातात. यामध्ये स्वाक्षऱ्या एकत्र करणे समाविष्ट आहे जेणेकरून प्रसारित होणाऱ्या प्रमाणीकरणामध्ये एकमत `data` आणि त्या `data` शी सहमत असलेल्या सर्व व्हॅलिडेटरच्या स्वाक्षऱ्या एकत्र करून तयार केलेली एकच स्वाक्षरी समाविष्ट असेल. हे `aggregation_bits` वापरून तपासले जाऊ शकते कारण हे प्रत्येक व्हॅलिडेटरचा त्यांच्या समितीमधील निर्देशांक (ज्याचा आयडी `data` मध्ये दिलेला आहे) प्रदान करते, जो वैयक्तिक स्वाक्षऱ्यांची चौकशी करण्यासाठी वापरला जाऊ शकतो. + +प्रत्येक इपॉकमध्ये प्रत्येक सबनेटमधील 16 व्हॅलिडेटर `एग्रीगेटर` म्हणून निवडले जातात. एग्रीगेटर गॉसिप नेटवर्कवर ऐकलेली सर्व प्रमाणीकरणे गोळा करतात ज्यात त्यांच्या स्वतःच्या प्रमाणीकरणासारखाच `data` असतो. प्रत्येक जुळणाऱ्या प्रमाणीकरणाच्या प्रेषकाची नोंद `aggregation_bits` मध्ये केली जाते. त्यानंतर एग्रीगेटर प्रमाणीकरण एकत्रित करून व्यापक नेटवर्कवर प्रसारित करतात. + +जेव्हा एखाद्या व्हॅलिडेटरची ब्लॉक प्रस्तावक म्हणून निवड केली जाते, तेव्हा ते सबनेटमधून आलेली एकत्रित प्रमाणीकरणे नवीन ब्लॉकमधील नवीनतम स्लॉटपर्यंत पॅकेज करतात. + +### प्रमाणीकरण समावेशाचे जीवनचक्र {#attestation-inclusion-lifecycle} + +1. निर्मिती +2. प्रसार +3. एकत्रीकरण +4. प्रसार +5. समावेश + +प्रमाणीकरणाचे जीवनचक्र खालील आराखड्यात स्पष्ट केले आहे: + +![प्रमाणीकरण जीवनचक्र](./attestation_schematic.png) + +## पुरस्कार {#rewards} + +प्रमाणीकरणे सादर केल्याबद्दल व्हॅलिडेटरना रिवॉर्ड दिले जातात. प्रमाणीकरणाचा रिवॉर्ड सहभागाचे ध्वज (स्रोत, लक्ष्य आणि हेड), बेस रिवॉर्ड आणि सहभागाचा दर यावर अवलंबून असतो. + +सादर केलेल्या प्रमाणीकरणावर आणि त्याच्या समावेशातील विलंबावर अवलंबून, प्रत्येक सहभाग ध्वज सत्य किंवा असत्य असू शकतो. + +सर्वोत्तम परिस्थिती तेव्हा उद्भवते जेव्हा तिन्ही ध्वज सत्य असतात, अशा परिस्थितीत व्हॅलिडेटरला (प्रत्येक योग्य ध्वजासाठी) कमाई होईल: + +`रिवॉर्ड += बेस रिवॉर्ड * ध्वज वजन * ध्वज प्रमाणीकरण दर / 64` + +ध्वज प्रमाणीकरण दर, दिलेल्या ध्वजासाठी सर्व प्रमाणीकरण करणाऱ्या व्हॅलिडेटरच्या प्रभावी बॅलन्सच्या बेरजेचा वापर करून, एकूण सक्रिय प्रभावी बॅलन्सच्या तुलनेत मोजला जातो. + +### बेस रिवॉर्ड {#base-reward} + +बेस रिवॉर्डची गणना प्रमाणीकरण करणाऱ्या व्हॅलिडेटरच्या संख्येनुसार आणि त्यांच्या प्रभावी स्टेक केलेल्या इथर बॅलन्सनुसार केली जाते: + +`बेस रिवॉर्ड = व्हॅलिडेटर प्रभावी बॅलन्स x 2^6 / SQRT(सर्व सक्रिय व्हॅलिडेटरचा प्रभावी बॅलन्स)` + +#### समावेशातील विलंब {#inclusion-delay} + +ज्यावेळी व्हॅलिडेटरनी साखळीच्या हेडवर (`ब्लॉक n`) मतदान केले, त्यावेळी `ब्लॉक n+1` अजून प्रस्तावित झाला नव्हता. म्हणून प्रमाणीकरणे नैसर्गिकरित्या **एक ब्लॉक नंतर** समाविष्ट होतात, त्यामुळे `ब्लॉक n` ला साखळीचे हेड म्हणून मतदान करणारी सर्व प्रमाणीकरणे `ब्लॉक n+1` मध्ये समाविष्ट होतात आणि **समावेशातील विलंब** 1 असतो. जर समावेशातील विलंब दुप्पट होऊन दोन स्लॉट झाला, तर प्रमाणीकरणाचा रिवॉर्ड अर्धा होतो, कारण प्रमाणीकरणाचा रिवॉर्ड मोजण्यासाठी बेस रिवॉर्डला समावेशातील विलंबाच्या व्युत्क्रमाने गुणले जाते. + +### प्रमाणीकरणाच्या परिस्थिती {#attestation-scenarios} + +#### मतदान करणारा व्हॅलिडेटर गहाळ {#missing-voting-validator} + +व्हॅलिडेटरकडे त्यांचे प्रमाणीकरण सादर करण्यासाठी जास्तीत जास्त 1 इपॉक असतो. जर इपॉक 0 मध्ये प्रमाणीकरण चुकले, तर ते इपॉक 1 मध्ये समावेशातील विलंबासह सादर करू शकतात. + +#### एग्रीगेटर गहाळ {#missing-aggregator} + +एकूण प्रति इपॉक 16 एग्रीगेटर असतात. याव्यतिरिक्त, यादृच्छिक व्हॅलिडेटर **256 इपॉकसाठी दोन सबनेट** चे सदस्यत्व घेतात आणि एग्रीगेटर गहाळ झाल्यास बॅकअप म्हणून काम करतात. + +#### ब्लॉक प्रस्तावक गहाळ {#missing-block-proposer} + +लक्षात घ्या की काही प्रकरणांमध्ये एक भाग्यवान एग्रीगेटर ब्लॉक प्रस्तावक देखील बनू शकतो. जर ब्लॉक प्रस्तावक गहाळ झाल्यामुळे प्रमाणीकरण समाविष्ट झाले नाही, तर पुढील ब्लॉक प्रस्तावक ते एकत्रित प्रमाणीकरण उचलून पुढील ब्लॉकमध्ये समाविष्ट करेल. तथापि, **समावेशातील विलंब** एकाने वाढेल. + +## पुढील वाचन {#further-reading} + +- [विटालिकच्या एनोटेटेड एकमत स्पेकमधील प्रमाणीकरणे](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#attestationdata) +- [eth2book.info मधील प्रमाणीकरणे](https://eth2book.info/capella/part3/containers/dependencies/#attestationdata) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/block-proposal/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/block-proposal/index.md new file mode 100644 index 00000000000..c011932b876 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/block-proposal/index.md @@ -0,0 +1,69 @@ +--- +title: "ब्लॉक प्रस्ताव" +description: "प्रूफ-ऑफ-स्टेक Ethereum मध्ये ब्लॉक कसे प्रस्तावित केले जातात याचे स्पष्टीकरण." +lang: mr +--- + +ब्लॉक हे ब्लॉकचेनचे मूलभूत एकक आहेत. ब्लॉक हे माहितीचे स्वतंत्र एकक आहेत जे नोड्स दरम्यान दिले जातात, त्यावर सहमती दर्शवली जाते आणि प्रत्येक नोडच्या डेटाबेसमध्ये जोडले जातात. हे पृष्ठ ते कसे तयार केले जातात हे स्पष्ट करते. + +## पूर्वतयारी {#prerequisites} + +ब्लॉक प्रस्ताव हा प्रूफ-ऑफ-स्टेक प्रोटोकॉलचा भाग आहे. हे पृष्ठ समजण्यास मदत होण्यासाठी, आम्ही शिफारस करतो की तुम्ही [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) आणि [ब्लॉक आर्किटेक्चर](/developers/docs/blocks/) बद्दल वाचा. + +## ब्लॉक कोण तयार करते? {#who-produces-blocks} + +व्हॅलिडेटर खाती ब्लॉक प्रस्तावित करतात. व्हॅलिडेटर खाती नोड ऑपरेटरद्वारे व्यवस्थापित केली जातात जे त्यांच्या एक्झिक्यूशन आणि कन्सेन्सस क्लायंटचा भाग म्हणून व्हॅलिडेटर सॉफ्टवेअर चालवतात आणि डिपॉझिट कॉन्ट्रॅक्टमध्ये किमान 32 ETH जमा केले आहेत. तथापि, प्रत्येक व्हॅलिडेटर केवळ अधूनमधून ब्लॉक प्रस्तावित करण्यासाठी जबाबदार असतो. Ethereum वेळेचे मोजमाप स्लॉट्स आणि इपॉक्समध्ये करते. प्रत्येक स्लॉट बारा सेकंदांचा असतो, आणि 32 स्लॉट्स (6.4 मिनिटे) मिळून एक इपॉक बनतो. प्रत्येक स्लॉट ही Ethereum वर नवीन ब्लॉक जोडण्याची एक संधी आहे. + +### यादृच्छिक निवड {#random-selection} + +प्रत्येक स्लॉटमध्ये ब्लॉक प्रस्तावित करण्यासाठी एका व्हॅलिडेटरची स्यूडो-रँडम पद्धतीने निवड केली जाते. ब्लॉकचेनमध्ये खऱ्या अर्थाने यादृच्छिकता अशी कोणतीही गोष्ट नाही कारण जर प्रत्येक नोडने खरोखर यादृच्छिक संख्या तयार केल्या, तर ते कन्सेन्ससवर येऊ शकणार नाहीत. त्याऐवजी, व्हॅलिडेटर निवड प्रक्रिया अनपेक्षित बनवणे हा उद्देश आहे. Ethereum वर RANDAO नावाच्या अल्गोरिदमचा वापर करून यादृच्छिकता प्राप्त केली जाते, जो ब्लॉक प्रस्तावकाकडून एक हॅश एका सीडसोबत मिसळतो जो प्रत्येक ब्लॉकवर अपडेट होतो. हे मूल्य एकूण व्हॅलिडेटर सेटमधून विशिष्ट व्हॅलिडेटर निवडण्यासाठी वापरले जाते. विशिष्ट प्रकारच्या सीड मॅनिप्युलेशनपासून संरक्षण करण्याचा एक मार्ग म्हणून व्हॅलिडेटर निवड दोन इपॉक्स आधीच निश्चित केली जाते. + +जरी व्हॅलिडेटर्स प्रत्येक स्लॉटमध्ये RANDAO मध्ये भर घालत असले तरी, जागतिक RANDAO मूल्य प्रत्येक इपॉकला फक्त एकदाच अपडेट केले जाते. पुढील ब्लॉक प्रस्तावकाचा निर्देशांक मोजण्यासाठी, प्रत्येक स्लॉटमध्ये एक अद्वितीय मूल्य देण्यासाठी RANDAO मूल्य स्लॉट क्रमांकासोबत मिसळले जाते. एका वैयक्तिक व्हॅलिडेटरच्या निवडीची संभाव्यता फक्त `1/N` नसते (जिथे `N` = एकूण सक्रिय व्हॅलिडेटर). त्याऐवजी, ते प्रत्येक व्हॅलिडेटरच्या प्रभावी ETH बॅलन्सनुसार भारित केले जाते. जास्तीत जास्त प्रभावी बॅलन्स 32 ETH आहे (याचा अर्थ `बॅलन्स < 32 ETH` मुळे `बॅलन्स == 32 ETH` पेक्षा कमी वजन मिळते, परंतु `बॅलन्स > 32 ETH` मुळे `बॅलन्स == 32 ETH` पेक्षा जास्त वजन मिळत नाही). + +प्रत्येक स्लॉटमध्ये फक्त एक ब्लॉक प्रस्तावक निवडला जातो. सामान्य परिस्थितीत, एकच ब्लॉक निर्माता त्यांच्या समर्पित स्लॉटमध्ये एकच ब्लॉक तयार करतो आणि रिलीज करतो. एकाच स्लॉटसाठी दोन ब्लॉक तयार करणे हा एक स्लॅशेबल गुन्हा आहे, ज्याला अनेकदा "इक्विवोकेशन" म्हणून ओळखले जाते. + +## ब्लॉक कसा तयार केला जातो? {#how-is-a-block-created} + +ब्लॉक प्रस्तावकाने त्यांच्या स्वतःच्या स्थानिकरित्या चालवलेल्या फोर्क चॉईस अल्गोरिदमच्या दृष्टिकोनानुसार, चेनमधील सर्वात अलीकडील हेडच्या वर तयार होणारा एक स्वाक्षरी केलेला बीकन ब्लॉक ब्रॉडकास्ट करणे अपेक्षित आहे. फोर्क चॉईस अल्गोरिदम मागील स्लॉटमधून उरलेली कोणतीही रांगेतील ॲटेस्टेशन्स लागू करतो, नंतर त्याच्या इतिहासामध्ये ॲटेस्टेशन्सचे सर्वाधिक संचित वजन असलेला ब्लॉक शोधतो. तो ब्लॉक प्रस्तावकाने तयार केलेल्या नवीन ब्लॉकचा पॅरेंट आहे. + +ब्लॉक प्रस्तावक त्याच्या स्वतःच्या स्थानिक डेटाबेस आणि चेनच्या दृश्यातून डेटा गोळा करून एक ब्लॉक तयार करतो. ब्लॉकची सामग्री खालील स्निपेटमध्ये दर्शविली आहे: + +```rust +class BeaconBlockBody(Container): + randao_reveal: BLSSignature + eth1_data: Eth1Data + graffiti: Bytes32 + proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS] + attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS] + attestations: List[Attestation, MAX_ATTESTATIONS] + deposits: List[Deposit, MAX_DEPOSITS] + voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS] + sync_aggregate: SyncAggregate + execution_payload: ExecutionPayload +``` + +`randao_reveal` फील्ड एक सत्यापित करण्यायोग्य यादृच्छिक मूल्य घेते जे ब्लॉक प्रस्तावक सध्याच्या इपॉक क्रमांकावर स्वाक्षरी करून तयार करतो. `eth1_data` हे डिपॉझिट कॉन्ट्रॅक्टच्या ब्लॉक प्रस्तावकाच्या दृष्टिकोनासाठी एक मत आहे, ज्यामध्ये डिपॉझिट मर्केल ट्राईचे रूट आणि नवीन डिपॉझिट सत्यापित करण्यास सक्षम करणाऱ्या डिपॉझिटची एकूण संख्या समाविष्ट आहे. `graffiti` हे एक ऐच्छिक फील्ड आहे ज्याचा वापर ब्लॉकवर संदेश जोडण्यासाठी केला जाऊ शकतो. `proposer_slashings` आणि `attester_slashings` ही अशी फील्ड्स आहेत ज्यात प्रस्तावकाच्या चेनच्या दृष्टिकोनानुसार, विशिष्ट व्हॅलिडेटर्सनी स्लॅशेबल गुन्हे केल्याचा पुरावा असतो. `deposits` ही नवीन व्हॅलिडेटर डिपॉझिटची एक यादी आहे ज्याबद्दल ब्लॉक प्रस्तावकाला माहिती आहे, आणि `voluntary_exits` ही अशा व्हॅलिडेटर्सची यादी आहे जे बाहेर पडू इच्छितात आणि ज्यांच्याबद्दल ब्लॉक प्रस्तावकाने कन्सेन्सस लेयर गॉसिप नेटवर्कवर ऐकले आहे. `sync_aggregate` हा एक वेक्टर आहे जो दाखवतो की कोणते व्हॅलिडेटर पूर्वी सिंक कमिटीला (लाईट क्लायंट डेटा देणाऱ्या व्हॅलिडेटर्सचा एक उपसंच) नियुक्त केले होते आणि डेटा स्वाक्षरी करण्यात सहभागी झाले होते. + +`execution_payload` एक्झिक्यूशन आणि कन्सेन्सस क्लायंट्समध्ये व्यवहारांविषयी माहिती पास करण्यास सक्षम करते. `execution_payload` हा एक्झिक्यूशन डेटाचा एक ब्लॉक आहे जो बीकन ब्लॉकमध्ये नेस्ट केला जातो. `execution_payload` मधील फील्ड्स Ethereum यलो पेपरमध्ये वर्णन केलेल्या ब्लॉक रचनेला प्रतिबिंबित करतात, फक्त त्यात कोणतेही ओमर्स नाहीत आणि `difficulty` च्या जागी `prev_randao` अस्तित्वात आहे. एक्झिक्यूशन क्लायंटला व्यवहारांच्या स्थानिक पूलमध्ये प्रवेश असतो, ज्याबद्दल त्याने स्वतःच्या गॉसिप नेटवर्कवर ऐकले आहे. हे व्यवहार पोस्ट-स्टेट म्हणून ओळखले जाणारे अपडेटेड स्टेट ट्राई तयार करण्यासाठी स्थानिकरित्या कार्यान्वित केले जातात. हे व्यवहार `transactions` नावाच्या यादीच्या स्वरूपात `execution_payload` मध्ये समाविष्ट केले जातात आणि पोस्ट-स्टेट `state-root` फील्डमध्ये प्रदान केले जाते. + +हा सर्व डेटा एका बीकन ब्लॉकमध्ये गोळा केला जातो, त्यावर स्वाक्षरी केली जाते, आणि ब्लॉक प्रस्तावकाच्या पिअर्सना प्रसारित केला जातो, जे तो त्यांच्या पिअर्सना पुढे पाठवतात, इत्यादी. + +[ब्लॉक्सची रचना](/developers/docs/blocks) याबद्दल अधिक वाचा. + +## ब्लॉकचे काय होते? {#what-happens-to-blocks} + +ब्लॉक प्रस्तावकाच्या स्थानिक डेटाबेसमध्ये ब्लॉक जोडला जातो आणि कन्सेन्सस लेयर गॉसिप नेटवर्कद्वारे पिअर्सना प्रसारित केला जातो. जेव्हा एका व्हॅलिडेटरला ब्लॉक मिळतो, तेव्हा तो त्यातील डेटा सत्यापित करतो, ज्यामध्ये ब्लॉकला योग्य पॅरेंट आहे की नाही, तो योग्य स्लॉटशी संबंधित आहे की नाही, प्रस्तावकाचा निर्देशांक अपेक्षित आहे की नाही, RANDAO रिव्हील वैध आहे की नाही आणि प्रस्तावकाला स्लॅश केलेले नाही हे तपासणे समाविष्ट आहे. `execution_payload` अनबंडल केले जाते, आणि प्रस्तावित स्टेट बदल तपासण्यासाठी व्हॅलिडेटरचा एक्झिक्यूशन क्लायंट यादीतील व्यवहार पुन्हा कार्यान्वित करतो. ब्लॉक या सर्व तपासण्या पास करतो असे गृहीत धरून, प्रत्येक व्हॅलिडेटर तो ब्लॉक त्याच्या स्वतःच्या कॅनोनिकल चेनमध्ये जोडतो. पुढील स्लॉटमध्ये ही प्रक्रिया पुन्हा सुरू होते. + +## ब्लॉक रिवॉर्ड्स {#block-rewards} + +ब्लॉक प्रस्तावकाला त्यांच्या कामासाठी पेमेंट मिळते. एक `base_reward` आहे जो सक्रिय व्हॅलिडेटर्सची संख्या आणि त्यांच्या प्रभावी बॅलन्सचे कार्य म्हणून मोजला जातो. ब्लॉक प्रस्तावकाला नंतर ब्लॉकमध्ये समाविष्ट असलेल्या प्रत्येक वैध ॲटेस्टेशनसाठी `base_reward` चा एक अंश मिळतो; जितके जास्त व्हॅलिडेटर ब्लॉकला ॲटेस्ट करतात, तितके ब्लॉक प्रस्तावकाचे रिवॉर्ड जास्त असते. ज्या व्हॅलिडेटर्सना स्लॅश केले पाहिजे त्यांची तक्रार करण्यासाठी देखील एक रिवॉर्ड आहे, जे प्रत्येक स्लॅश केलेल्या व्हॅलिडेटरसाठी `1/512 * प्रभावी बॅलन्स` च्या बरोबरीचे आहे. + +[रिवॉर्ड्स आणि दंड यावर अधिक](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) + +## पुढील वाचन {#further-reading} + +- [ब्लॉक्सची ओळख](/developers/docs/blocks/) +- [Proof-of-stake चा परिचय](/developers/docs/consensus-mechanisms/pos/) +- [Ethereum कन्सेन्सस स्पेक्स](https://github.com/ethereum/consensus-specs) +- [Gasper ची ओळख](/developers/docs/consensus-mechanisms/pos/gasper/) +- [Ethereum अपग्रेड करणे](https://eth2book.info/) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/faqs/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/faqs/index.md new file mode 100644 index 00000000000..292c6f30b86 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/faqs/index.md @@ -0,0 +1,172 @@ +--- +title: "वारंवार विचारले जाणारे प्रश्न" +description: "प्रूफ-ऑफ-स्टेक Ethereum वर वारंवार विचारले जाणारे प्रश्न." +lang: mr +--- + +## प्रूफ-ऑफ-स्टेक म्हणजे काय? {#what-is-proof-of-stake} + +प्रूफ-ऑफ-स्टेक हा अल्गोरिदमचा एक वर्ग आहे जो ब्लॉकचेनला सुरक्षा प्रदान करू शकतो, हे सुनिश्चित करून की जे हल्लेखोर अप्रामाणिकपणे वागतात त्यांची मौल्यवान मालमत्ता गमावली जाते. प्रूफ-ऑफ-स्टेक सिस्टीममध्ये व्हॅलिडेटर्सच्या एका सेटची आवश्यकता असते जे काही मालमत्ता उपलब्ध करतात, जी व्हॅलिडेटरने काही सिद्ध करण्यायोग्य अप्रामाणिक वर्तनात गुंतल्यास नष्ट केली जाऊ शकते. Ethereum ब्लॉकचेन सुरक्षित करण्यासाठी प्रूफ-ऑफ-स्टेक यंत्रणा वापरते. + +## प्रूफ-ऑफ-स्टेकची प्रूफ-ऑफ-वर्कशी तुलना कशी होते? {#comparison-to-proof-of-work} + +प्रूफ-ऑफ-वर्क आणि प्रूफ-ऑफ-स्टेक या दोन्ही यंत्रणा आहेत ज्या दुर्भावनापूर्ण कलाकारांना नेटवर्कवर स्पॅमिंग किंवा फसवणूक करण्यापासून आर्थिकदृष्ट्या परावृत्त करतात. दोन्ही प्रकरणांमध्ये, जे नोड्स सहमतीमध्ये सक्रियपणे भाग घेतात ते काही मालमत्ता "नेटवर्कमध्ये" ठेवतात, जी ते गैरवर्तन केल्यास गमावतील. + +प्रूफ-ऑफ-वर्कमध्ये, ही मालमत्ता ऊर्जा आहे. नोड, ज्याला मायनर म्हणून ओळखले जाते, एक अल्गोरिदम चालवतो ज्याचा उद्देश इतर कोणत्याही नोडपेक्षा वेगाने मूल्य मोजणे आहे. सर्वात वेगवान नोडला चेनमध्ये ब्लॉक प्रस्तावित करण्याचा अधिकार आहे. चेनचा इतिहास बदलण्यासाठी किंवा ब्लॉक प्रस्तावावर वर्चस्व गाजवण्यासाठी, मायनरकडे इतकी संगणकीय शक्ती असणे आवश्यक आहे की ते नेहमीच शर्यत जिंकतील. हे अत्यंत महाग आणि अंमलात आणण्यास कठीण आहे, ज्यामुळे चेनचे हल्ल्यांपासून संरक्षण होते. प्रूफ-ऑफ-वर्क वापरून "माइन" करण्यासाठी लागणारी ऊर्जा ही एक वास्तविक-जगातील मालमत्ता आहे ज्यासाठी मायनर्स पैसे देतात. + +प्रूफ-ऑफ-स्टेकसाठी नोड्स, ज्यांना व्हॅलिडेटर्स म्हणून ओळखले जाते, यांनी स्पष्टपणे एक क्रिप्टो मालमत्ता स्मार्ट कॉन्ट्रॅक्टमध्ये सबमिट करणे आवश्यक आहे. जर व्हॅलिडेटरने गैरवर्तन केले, तर ही क्रिप्टो नष्ट केली जाऊ शकते कारण ते ऊर्जा खर्चाद्वारे अप्रत्यक्षपणे न करता थेट चेनमध्ये आपली मालमत्ता "स्टिकिंग" करत आहेत. + +प्रूफ-ऑफ-वर्कमध्ये जास्त ऊर्जा लागते कारण मायनिंग प्रक्रियेत वीज वापरली जाते. दुसरीकडे, प्रूफ-ऑफ-स्टेकला खूप कमी ऊर्जेची आवश्यकता असते - Ethereum व्हॅलिडेटर्स अगदी Raspberry Pi सारख्या कमी-शक्तीच्या डिव्हाइसवर देखील चालू शकतात. Ethereumची प्रूफ-ऑफ-स्टेक यंत्रणा प्रूफ-ऑफ-वर्कपेक्षा अधिक सुरक्षित मानली जाते कारण हल्ला करण्याची किंमत जास्त आहे आणि हल्लेखोरासाठी त्याचे परिणाम अधिक गंभीर आहेत. + +प्रूफ-ऑफ-वर्क विरुद्ध प्रूफ-ऑफ-स्टेक हा एक वादग्रस्त विषय आहे. [विटालिक ब्युटेरिनचा ब्लॉग](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-are-the-benefits-of-proof-of-stake-as-opposed-to-proof-of-work) आणि जस्टिन ड्रेक आणि लिन आल्डन यांच्यातील वादविवाद युक्तिवादांचा चांगला सारांश देतात. + + + +## प्रूफ-ऑफ-स्टेक ऊर्जा-कार्यक्षम आहे का? {#is-pos-energy-efficient} + +होय. प्रूफ-ऑफ-स्टेक नेटवर्कवरील नोड्स खूप कमी प्रमाणात ऊर्जा वापरतात. एका तृतीय-पक्ष अभ्यासाने निष्कर्ष काढला आहे की संपूर्ण प्रूफ-ऑफ-स्टेक Ethereum नेटवर्क अंदाजे 0.0026 TWh/yr ऊर्जा वापरते - जे केवळ यूएसमधील गेमिंगपेक्षा सुमारे 13,000 पट कमी आहे. + +[Ethereum च्या ऊर्जा वापराविषयी अधिक](/energy-consumption/). + +## प्रूफ-ऑफ-स्टेक सुरक्षित आहे का? {#is-pos-secure} + +Ethereumचे प्रूफ-ऑफ-स्टेक खूप सुरक्षित आहे. ही यंत्रणा लाइव्ह होण्यापूर्वी आठ वर्षांहून अधिक काळ त्यावर कठोरपणे संशोधन, विकास आणि चाचणी केली गेली. सुरक्षेची हमी प्रूफ-ऑफ-वर्क ब्लॉकचेनपेक्षा वेगळी आहे. प्रूफ-ऑफ-स्टेकमध्ये, दुर्भावनापूर्ण व्हॅलिडेटर्सना सक्रियपणे शिक्षा दिली जाऊ शकते ("स्लॅश" केले जाऊ शकते) आणि व्हॅलिडेटर सेटमधून बाहेर काढले जाऊ शकते, ज्यामुळे मोठ्या प्रमाणात ETH चे नुकसान होते. प्रूफ-ऑफ-वर्क अंतर्गत, हल्लेखोर त्यांच्याकडे पुरेशी हॅश पॉवर असेपर्यंत त्यांचा हल्ला पुन्हा पुन्हा करत राहू शकतो. प्रूफ-ऑफ-वर्कपेक्षा प्रूफ-ऑफ-स्टेक Ethereum वर समकक्ष हल्ले करणे देखील अधिक महाग आहे. चेनच्या लाइव्हनेसवर परिणाम करण्यासाठी, नेटवर्कवरील एकूण स्टेक केलेल्या इथरपैकी किमान 33% आवश्यक आहे (अत्यंत कमी यशस्वीतेच्या शक्यतेसह खूप अत्याधुनिक हल्ल्यांची प्रकरणे वगळता). भविष्यातील ब्लॉक्सच्या सामग्रीवर नियंत्रण ठेवण्यासाठी, एकूण स्टेक केलेल्या ETH पैकी किमान 51% आवश्यक आहे आणि इतिहास पुन्हा लिहिण्यासाठी, एकूण स्टेकच्या 66% पेक्षा जास्त आवश्यक आहे. Ethereum प्रोटोकॉल 33% किंवा 51% हल्ल्याच्या परिस्थितीत या मालमत्ता नष्ट करेल आणि 66% हल्ल्याच्या परिस्थितीत सामाजिक सहमतीने नष्ट करेल. + +- [हल्लेखोरांपासून Ethereum प्रूफ-ऑफ-स्टेकचे संरक्षण करण्यावर अधिक](/developers/docs/consensus-mechanisms/pos/attack-and-defense) +- [प्रूफ-ऑफ-स्टेक डिझाइनवर अधिक](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) + +## प्रूफ-ऑफ-स्टेकमुळे Ethereum स्वस्त होते का? {#does-pos-make-ethereum-cheaper} + +नाही. व्यवहार पाठवण्याची किंमत (गॅस फी) डायनॅमिक फी मार्केटद्वारे निर्धारित केली जाते जी नेटवर्कची मागणी वाढल्यास वाढते. एकमत यंत्रणा यावर थेट प्रभाव टाकत नाही. + +[गॅसवर अधिक](/developers/docs/gas). + +## नोड्स, क्लायंट आणि व्हॅलिडेटर्स म्हणजे काय? {#what-are-nodes-clients-and-validators} + +नोड्स हे Ethereum नेटवर्कशी जोडलेले संगणक आहेत. क्लायंट हे सॉफ्टवेअर आहेत जे ते चालवतात जे संगणकाला नोडमध्ये रूपांतरित करते. दोन प्रकारचे क्लायंट आहेत: एक्झिक्युशन क्लायंट आणि कन्सेन्सस क्लायंट. नोड तयार करण्यासाठी दोन्ही आवश्यक आहेत. व्हॅलिडेटर हा कन्सेन्सस क्लायंटसाठी एक ऐच्छिक ॲड-ऑन आहे जो नोडला प्रूफ-ऑफ-स्टेक कन्सेन्ससमध्ये सहभागी होण्यास सक्षम करतो. याचा अर्थ निवडल्यावर ब्लॉक तयार करणे आणि प्रस्तावित करणे आणि नेटवर्कवर ऐकलेल्या ब्लॉक्सना प्रमाणित करणे. व्हॅलिडेटर चालवण्यासाठी, नोड ऑपरेटरला डिपॉझिट कॉन्ट्रॅक्टमध्ये 32 ETH जमा करणे आवश्यक आहे. + +- [नोड्स आणि क्लायंटवर अधिक](/developers/docs/nodes-and-clients) +- [स्टिकिंगवर अधिक](/staking) + +## प्रूफ-ऑफ-स्टेक ही एक नवीन कल्पना आहे का? {#is-pos-new} + +नाही. BitcoinTalk वरील एका वापरकर्त्याने 2011 मध्ये Bitcoin मध्ये अपग्रेड म्हणून [प्रूफ-ऑफ-स्टेकची मूळ कल्पना प्रस्तावित केली](https://bitcointalk.org/index.php?topic=27787.0). Ethereum मेननेटवर लागू करण्यासाठी तयार होण्यापूर्वी अकरा वर्षे लागली. काही इतर चेन्सनी Ethereum पेक्षा आधी प्रूफ-ऑफ-स्टेक लागू केले, परंतु Ethereumची विशिष्ट यंत्रणा (Gasper म्हणून ओळखली जाणारी) नाही. + +## Ethereum च्या प्रूफ-ऑफ-स्टेकमध्ये काय विशेष आहे? {#why-is-ethereum-pos-special} + +Ethereum ची प्रूफ-ऑफ-स्टेक यंत्रणा तिच्या डिझाइनमध्ये अद्वितीय आहे. ही डिझाइन आणि अंमलात आणलेली पहिली प्रूफ-ऑफ-स्टेक यंत्रणा नव्हती, परंतु ती सर्वात मजबूत आहे. प्रूफ-ऑफ-स्टेक यंत्रणा "Casper" म्हणून ओळखली जाते. Casper हे परिभाषित करते की ब्लॉक प्रस्तावित करण्यासाठी व्हॅलिडेटर्स कसे निवडले जातात, साक्षांकन कसे आणि केव्हा केले जाते, साक्षांकने कशी मोजली जातात, व्हॅलिडेटर्सना दिलेली बक्षिसे आणि दंड, स्लॅशिंग अटी, निष्क्रियता गळतीसारख्या फेलसेफ यंत्रणा आणि "अंतिमता" साठीच्या अटी. अंतिमता ही अशी अट आहे की एखाद्या ब्लॉकला कॅनोनिकल चेनचा कायमस्वरूपी भाग मानण्यासाठी, नेटवर्कवरील एकूण स्टेक केलेल्या ETH पैकी किमान 66% लोकांनी त्यासाठी मतदान केलेले असावे. संशोधकांनी विशेषतः Ethereum साठी Casper विकसित केले, आणि Ethereum ही पहिली आणि एकमेव ब्लॉकचेन आहे जिने ते लागू केले आहे. + +Casper व्यतिरिक्त, Ethereum चे प्रूफ-ऑफ-स्टेक LMD-GHOST नावाचा फोर्क चॉईस अल्गोरिदम वापरते. एकाच स्लॉटसाठी दोन ब्लॉक अस्तित्वात असल्याची स्थिती उद्भवल्यास हे आवश्यक आहे. यामुळे ब्लॉकचेनचे दोन फोर्क तयार होतात. LMD-GHOST सर्वात जास्त साक्षांकनाचे "वजन" असलेले एक निवडते. वजन हे व्हॅलिडेटर्सच्या प्रभावी शिल्लकेनुसार भारित केलेल्या साक्षांकनांची संख्या आहे. LMD-GHOST हे Ethereum साठी अद्वितीय आहे. + +Casper आणि LMD_GHOST यांचे संयोजन Gasper म्हणून ओळखले जाते. + +[Gasper वर अधिक](/developers/docs/consensus-mechanisms/pos/gasper/) + +## स्लॅशिंग म्हणजे काय? {#what-is-slashing} + +स्लॅशिंग ही व्हॅलिडेटरच्या काही स्टेकच्या विनाशास आणि नेटवर्कमधून व्हॅलिडेटरला बाहेर काढण्यास दिलेली संज्ञा आहे. स्लॅशिंगमध्ये गमावलेल्या ETH ची रक्कम स्लॅश केल्या जाणाऱ्या व्हॅलिडेटर्सच्या संख्येनुसार वाढते - याचा अर्थ संगनमत करणाऱ्या व्हॅलिडेटर्सना व्यक्तींपेक्षा अधिक कठोर शिक्षा मिळते. + +[स्लॅशिंगवर अधिक](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties#slashing) + +## व्हॅलिडेटर्सना 32 ETH ची गरज का आहे? {#why-32-eth} + +व्हॅलिडेटर्सना ETH स्टेक करावे लागते जेणेकरून त्यांनी गैरवर्तन केल्यास त्यांच्याकडे गमावण्यासाठी काहीतरी असेल. त्यांना विशेषतः 32 ETH स्टेक का करावे लागते याचे कारण म्हणजे नोड्सना सामान्य हार्डवेअरवर चालण्यास सक्षम करणे. जर प्रति व्हॅलिडेटर किमान ETH कमी असते, तर व्हॅलिडेटर्सची संख्या आणि त्यामुळे प्रत्येक स्लॉटमध्ये प्रक्रिया कराव्या लागणाऱ्या संदेशांची संख्या वाढली असती, याचा अर्थ नोड चालवण्यासाठी अधिक शक्तिशाली हार्डवेअरची आवश्यकता भासली असती. + +## व्हॅलिडेटर्स कसे निवडले जातात? {#how-are-validators-selected} + +RANDAO नावाच्या अल्गोरिदमचा वापर करून प्रत्येक स्लॉटमध्ये ब्लॉक प्रस्तावित करण्यासाठी एका व्हॅलिडेटरची अर्ध-यादृच्छिकपणे निवड केली जाते, जो ब्लॉक प्रस्तावक कडून एक हॅश प्रत्येक ब्लॉकवर अपडेट होणाऱ्या सीडसह मिसळतो. हे मूल्य एकूण व्हॅलिडेटर सेटमधून विशिष्ट व्हॅलिडेटर निवडण्यासाठी वापरले जाते. व्हॅलिडेटरची निवड दोन इपॉक्स आधी निश्चित केली जाते. + +[व्हॅलिडेटर निवडीवर अधिक](/developers/docs/consensus-mechanisms/pos/block-proposal) + +## स्टेक ग्राइंडिंग म्हणजे काय? {#what-is-stake-grinding} + +स्टेक ग्राइंडिंग हा प्रूफ-ऑफ-स्टेक नेटवर्कवरील हल्ल्याचा एक प्रकार आहे जिथे हल्लेखोर व्हॅलिडेटर निवड अल्गोरिदमला स्वतःच्या व्हॅलिडेटर्सच्या बाजूने झुकवण्याचा प्रयत्न करतो. RANDAO वरील स्टेक ग्राइंडिंग हल्ल्यांसाठी एकूण स्टेक केलेल्या ETH च्या सुमारे अर्ध्या भागाची आवश्यकता असते. + +[स्टेक ग्राइंडिंगवर अधिक](https://eth2book.info/altair/part2/building_blocks/randomness/#randao-biasability) + +## सोशल स्लॅशिंग म्हणजे काय? {#what-is-social-slashing} + +सोशल स्लॅशिंग ही हल्ल्याला प्रतिसाद म्हणून ब्लॉकचेनचा फोर्क समन्वयित करण्याची समुदायाची क्षमता आहे. हे समुदायाला अप्रामाणिक चेन अंतिम करणाऱ्या हल्लेखोरापासून सावरण्यास सक्षम करते. सोशल स्लॅशिंग सेन्सॉरशिप हल्ल्यांविरूद्ध देखील वापरले जाऊ शकते. + +- [सोशल स्लॅशिंगवर अधिक](https://ercwl.medium.com/the-case-for-social-slashing-59277ff4d9c7) +- [विटालिक ब्युटेरिन सोशल स्लॅशिंगवर](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) + +## मला स्लॅश केले जाईल का? {#will-i-get-slashed} + +एक व्हॅलिडेटर म्हणून, जोपर्यंत तुम्ही जाणूनबुजून दुर्भावनापूर्ण वर्तनात गुंतत नाही तोपर्यंत स्लॅश होणे खूप कठीण आहे. स्लॅशिंग फक्त अशा विशिष्ट परिस्थितीत लागू केले जाते जेथे व्हॅलिडेटर्स एकाच स्लॉटसाठी अनेक ब्लॉक प्रस्तावित करतात किंवा त्यांच्या साक्षांकनांनी स्वतःचाच विरोधाभास करतात - हे अपघाताने घडण्याची शक्यता फारच कमी आहे. + +[स्लॅशिंग अटींवर अधिक](https://eth2book.info/altair/part2/incentives/slashing) + +## नथिंग-ॲट-स्टेक समस्या काय आहे? {#what-is-nothing-at-stake-problem} + +नथिंग-ॲट-स्टेक समस्या ही काही प्रूफ-ऑफ-स्टेक यंत्रणांसह एक संकल्पनात्मक समस्या आहे जिथे फक्त बक्षिसे आहेत आणि दंड नाहीत. जर काहीही स्टेकवर नसेल, तर एक व्यावहारिक व्हॅलिडेटर ब्लॉकचेनच्या कोणत्याही, किंवा अगदी एकाधिक, फोर्कला प्रमाणित करण्यास तितकाच आनंदी असतो, कारण यामुळे त्यांची बक्षिसे वाढतात. एक कॅनोनिकल चेन सुनिश्चित करण्यासाठी Ethereum अंतिमता अटी आणि स्लॅशिंगचा वापर करून यावर मात करते. + +[नथिंग-ॲट-स्टेक समस्येवर अधिक](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed) + +## फोर्क चॉइस अल्गोरिदम म्हणजे काय? {#what-is-a-fork-choice-algorithm} + +फोर्क चॉइस अल्गोरिदम कोणती चेन कॅनोनिकल आहे हे ठरवणारे नियम लागू करते. इष्टतम परिस्थितीत, फोर्क चॉइस नियमाची आवश्यकता नाही कारण प्रति स्लॉट फक्त एक ब्लॉक प्रस्तावक असतो आणि निवडण्यासाठी एकच ब्लॉक असतो. तथापि, कधीकधी, एकाच स्लॉटसाठी अनेक ब्लॉक किंवा उशीरा येणारी माहिती यामुळे चेनच्या सुरुवातीच्या जवळचे ब्लॉक कसे आयोजित केले जातात यासाठी अनेक पर्याय निर्माण होतात. या प्रकरणांमध्ये, सर्व क्लायंटनी काही नियम समान रीतीने लागू केले पाहिजेत याची खात्री करण्यासाठी की ते सर्व ब्लॉक्सचा योग्य क्रम निवडतील. फोर्क-चॉइस अल्गोरिदम हे नियम एन्कोड करतो. + +Ethereum चा फोर्क-चॉइस अल्गोरिदम LMD-GHOST म्हटला जातो. हे सर्वाधिक साक्षांकनांचे वजन असलेले फोर्क निवडते, म्हणजे ज्यासाठी सर्वाधिक स्टेक केलेल्या ETH ने मतदान केले आहे. + +[LMD-GHOST वर अधिक](/developers/docs/consensus-mechanisms/pos/gasper/#fork-choice) + +## प्रूफ-ऑफ-स्टेकमध्ये अंतिमता म्हणजे काय? {#what-is-finality} + +प्रूफ-ऑफ-स्टेकमधील अंतिमता ही हमी आहे की दिलेला ब्लॉक कॅनोनिकल चेनचा कायमस्वरूपी भाग आहे आणि तो परत फिरवला जाऊ शकत नाही जोपर्यंत एकमत अयशस्वी होत नाही ज्यामध्ये हल्लेखोर एकूण स्टेक केलेल्या इथरपैकी 33% जाळतो. ही "क्रिप्टो-इकॉनॉमिक" अंतिमता आहे, "प्रोबॅबिलिस्टिक अंतिमता" च्या विरुद्ध जी प्रूफ-ऑफ-वर्क ब्लॉकचेनशी संबंधित आहे. संभाव्य अंतिमतमध्ये, ब्लॉक्ससाठी कोणतीही स्पष्ट अंतिम/अंतिम नसलेली स्थिती नसते - ब्लॉक जसजसा जुना होत जातो तसतसे त्याला चेनमधून काढून टाकण्याची शक्यता कमी होत जाते, आणि वापरकर्ते स्वतः ठरवतात की त्यांना ब्लॉक "सुरक्षित" असल्याची पुरेशी खात्री केव्हा आहे. क्रिप्टो-इकॉनॉमिक अंतिमतासह, चेकपॉईंट ब्लॉक्सच्या जोड्यांसाठी 66% स्टेक केलेल्या इथरद्वारे मतदान करणे आवश्यक आहे. जर ही अट पूर्ण झाली, तर त्या चेकपॉईंट्समधील ब्लॉक स्पष्टपणे "अंतिम" केले जातात. + +[अंतिमतावर अधिक](/developers/docs/consensus-mechanisms/pos/#finality) + +## "वीक सब्जेक्टिव्हिटी" म्हणजे काय? {#what-is-weak-subjectivity} + +वीक सब्जेक्टिव्हिटी हे प्रूफ-ऑफ-स्टेक नेटवर्कचे एक वैशिष्ट्य आहे जिथे ब्लॉकचेनच्या वर्तमान स्थितीची पुष्टी करण्यासाठी सामाजिक माहिती वापरली जाते. नवीन नोड्स किंवा बऱ्याच काळापासून ऑफलाइन राहिल्यानंतर नेटवर्कमध्ये पुन्हा सामील होणाऱ्या नोड्सना अलीकडील स्थिती दिली जाऊ शकते जेणेकरून नोड ताबडतोब पाहू शकेल की ते योग्य चेनवर आहेत की नाही. या स्थितींना "वीक सब्जेक्टिव्हिटी चेकपॉईंट्स" म्हणून ओळखले जाते आणि ते इतर नोड ऑपरेटर्सकडून आउट-ऑफ-बँड, किंवा ब्लॉक एक्सप्लोरर्सकडून, किंवा अनेक सार्वजनिक एंडपॉईंट्सवरून मिळवता येतात. + +[वीक सब्जेक्टिव्हिटीवर अधिक](/developers/docs/consensus-mechanisms/pos/weak-subjectivity) + +## प्रूफ-ऑफ-स्टेक सेन्सॉरशिप-प्रतिरोधक आहे का? {#is-pos-censorship-resistant} + +सेन्सॉरशिप प्रतिकार सध्या सिद्ध करणे कठीण आहे. तथापि, प्रूफ-ऑफ-वर्कच्या विपरीत, प्रूफ-ऑफ-स्टेक सेन्सॉरिंग व्हॅलिडेटर्सना शिक्षा देण्यासाठी स्लॅशिंग समन्वयित करण्याचा पर्याय देते. प्रोटोकॉलमध्ये आगामी बदल आहेत जे ब्लॉक बिल्डर्सना ब्लॉक प्रस्तावक पासून वेगळे करतात आणि बिल्डर्सनी प्रत्येक ब्लॉकमध्ये समाविष्ट कराव्या लागणाऱ्या व्यवहारांच्या सूची लागू करतात. हा प्रस्ताव प्रॉपर-बिल्डर सेपरेशन म्हणून ओळखला जातो आणि व्हॅलिडेटर्सना व्यवहार सेन्सॉर करण्यापासून रोखण्यास मदत करतो. + +[प्रस्तावक-बिल्डर सेपरेशनवर अधिक](https://notes.ethereum.org/@fradamt/H1TsYRfJc#Original-basic-scheme) + +## Ethereum च्या प्रूफ-ऑफ-स्टेक प्रणालीवर 51% हल्ला होऊ शकतो का? {#pos-51-attack} + +होय. प्रूफ-ऑफ-वर्कप्रमाणेच प्रूफ-ऑफ-स्टेक 51% हल्ल्यांसाठी असुरक्षित आहे. हल्लेखोराला नेटवर्कच्या हॅश पॉवरच्या 51% ची आवश्यकता असण्याऐवजी, हल्लेखोराला एकूण स्टेक केलेल्या ETH च्या 51% ची आवश्यकता असते. एकूण स्टेकच्या 51% जमा करणारा हल्लेखोर फोर्क-चॉइस अल्गोरिदमवर नियंत्रण मिळवतो. हे हल्लेखोराला विशिष्ट व्यवहार सेन्सॉर करण्यास, शॉर्ट-रेंज रीऑर्ग करण्यास आणि त्यांच्या बाजूने ब्लॉक्सची पुनर्रचना करून MEV काढण्यास सक्षम करते. + +[प्रूफ-ऑफ-स्टेकवरील हल्ल्यांवर अधिक](/developers/docs/consensus-mechanisms/pos/attack-and-defense) + +## सामाजिक समन्वय म्हणजे काय, आणि त्याची गरज का आहे? {#what-is-social-coordination} + +सामाजिक समन्वय हे Ethereum साठी संरक्षणाची शेवटची ओळ आहे जी अप्रामाणिक ब्लॉक्सना अंतिम करणाऱ्या हल्ल्यातून एक प्रामाणिक चेन पुनर्प्राप्त करण्यास अनुमती देईल. या प्रकरणात, Ethereum समुदायाला "आउट-ऑफ-बँड" समन्वय साधावा लागेल आणि एक प्रामाणिक अल्पसंख्याक फोर्क वापरण्यास सहमती द्यावी लागेल, या प्रक्रियेत हल्लेखोराच्या व्हॅलिडेटर्सना स्लॅश करावे लागेल. यासाठी ॲप्स आणि एक्सचेंजेसना देखील प्रामाणिक फोर्क ओळखणे आवश्यक असेल. + +[सामाजिक समन्वयावर अधिक वाचा](/developers/docs/consensus-mechanisms/pos/attack-and-defense#people-the-last-line-of-defense) + +## प्रूफ-ऑफ-स्टेकमध्ये श्रीमंत अधिक श्रीमंत होतात का? {#do-rich-get-richer} + +एखाद्या व्यक्तीकडे जितके जास्त ETH स्टेक करण्यासाठी असतील, तितके जास्त व्हॅलिडेटर्स ते चालवू शकतात आणि तितके जास्त बक्षिसे ते मिळवू शकतात. बक्षिसे स्टेक केलेल्या ETH च्या रकमेसह रेषीयपणे मोजली जातात आणि प्रत्येकाला समान टक्केवारीचा परतावा मिळतो. प्रूफ-ऑफ-वर्क प्रूफ-ऑफ-स्टेकपेक्षा श्रीमंतांना अधिक समृद्ध करते कारण मोठ्या प्रमाणावर हार्डवेअर खरेदी करणारे श्रीमंत मायनर्स मोठ्या प्रमाणावरील अर्थव्यवस्थेचा फायदा घेतात, याचा अर्थ संपत्ती आणि बक्षीस यांच्यातील संबंध अ-रेखीय आहे. + +## प्रूफ-ऑफ-स्टेक प्रूफ-ऑफ-वर्कपेक्षा अधिक केंद्रीकृत आहे का? {#is-pos-decentralized} + +नाही, प्रूफ-ऑफ-वर्क केंद्रीकरणाकडे झुकते कारण मायनिंगचा खर्च वाढतो आणि व्यक्तींना, नंतर लहान कंपन्यांना आणि इत्यादींना बाहेर काढतो. प्रूफ-ऑफ-स्टेकमधील सध्याची समस्या लिक्विड स्टिकिंग डेरिव्हेटिव्ह्ज (LSDs) चा प्रभाव आहे. हे काही प्रदात्याद्वारे स्टेक केलेल्या ETH चे प्रतिनिधित्व करणारे टोकन आहेत जे कोणीही दुय्यम बाजारांवर स्वॅप करू शकतो, वास्तविक ETH अनस्टेक न करता. LSDs वापरकर्त्यांना 32 ETH पेक्षा कमी रकमेसह स्टेक करण्याची परवानगी देतात, परंतु ते केंद्रीकरणाचा धोका देखील निर्माण करतात जिथे काही मोठ्या संस्था स्टेकच्या मोठ्या भागावर नियंत्रण ठेवू शकतात. म्हणूनच Ethereum साठी [सोलो स्टिकिंग](/staking/solo) हा सर्वोत्तम पर्याय आहे. + +[LSDs मध्ये स्टेक केंद्रीकरणावर अधिक](https://notes.ethereum.org/@djrtwo/risks-of-lsd) + +## मी फक्त ETH का स्टेक करू शकेन? {#why-can-i-only-stake-eth} + +ETH हे Ethereumचे मूळ चलन आहे. मतांचे वजन आणि सुरक्षिततेसाठी प्रभावी शिल्लक मोजण्यासाठी, सर्व स्टेक एकाच चलनात असणे आवश्यक आहे. ETH स्वतःच स्मार्ट कॉन्ट्रॅक्टऐवजी Ethereum चा एक मूलभूत घटक आहे. इतर चलने समाविष्ट केल्याने स्टिकिंगची गुंतागुंत लक्षणीयरीत्या वाढेल आणि सुरक्षा कमी होईल. + +## Ethereum ही एकमेव प्रूफ-ऑफ-स्टेक ब्लॉकचेन आहे का? {#is-ethereum-the-only-pos-blockchain} + +नाही, अनेक प्रूफ-ऑफ-स्टेक ब्लॉकचेन आहेत. एकही Ethereum सारखी नाही; Ethereum ची प्रूफ-ऑफ-स्टेक यंत्रणा अद्वितीय आहे. + +## द मर्ज म्हणजे काय? {#what-is-the-merge} + +द मर्ज हा तो क्षण होता जेव्हा Ethereum ने आपली प्रूफ-ऑफ-वर्क-आधारित एकमत यंत्रणा बंद केली आणि आपली प्रूफ-ऑफ-स्टेक-आधारित एकमत यंत्रणा चालू केली. द मर्ज 15 सप्टेंबर 2022 रोजी झाला. + +[द मर्जवर अधिक](/roadmap/merge) + +## लाइव्हनेस आणि सेफ्टी म्हणजे काय? {#what-are-liveness-and-safety} + +लाइव्हनेस आणि सेफ्टी या ब्लॉकचेनसाठी दोन मूलभूत सुरक्षा चिंता आहेत. लाइव्हनेस म्हणजे अंतिम होणाऱ्या चेनची उपलब्धता. जर चेन अंतिम होणे थांबवते किंवा वापरकर्ते सहजपणे त्यात प्रवेश करू शकत नाहीत, तर ते लाइव्हनेस अयशस्वी आहेत. प्रवेशाची अत्यंत उच्च किंमत देखील लाइव्हनेस अयशस्वी मानली जाऊ शकते. सेफ्टी म्हणजे चेनवर हल्ला करणे किती कठीण आहे - म्हणजेच, परस्परविरोधी चेकपॉईंट्स अंतिम करणे. + +[Casper पेपरमध्ये अधिक वाचा](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/gasper/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/gasper/index.md new file mode 100644 index 00000000000..b8666de1ebe --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/gasper/index.md @@ -0,0 +1,52 @@ +--- +title: Gasper +description: "Gasper प्रूफ-ऑफ-स्टेक यंत्रणेचे स्पष्टीकरण." +lang: mr +--- + +Gasper हे कॅस्पर द फ्रेंडली फायनॅलिटी गॅझेट (Casper-FFG) आणि LMD-GHOST फोर्क निवड अल्गोरिदम यांचे संयोजन आहे. हे घटक एकत्रितपणे प्रूफ-ऑफ-स्टेक इथेरियमला ​​सुरक्षित करणारी एकमत यंत्रणा तयार करतात. कॅस्पर ही एक यंत्रणा आहे जी विशिष्ट ब्लॉक्सना "फायनलाइज्ड" करण्यासाठी अपग्रेड करते जेणेकरून नेटवर्कमधील नवीन प्रवेशकर्ते कॅनॉनिकल चेन सिंक करत असल्याची खात्री बाळगू शकतील. जेव्हा ब्लॉकचेनमध्ये फोर्क तयार होतात तेव्हा नोड्स सहजपणे योग्य फोर्क निवडू शकतील याची खात्री करण्यासाठी फोर्क निवड अल्गोरिदम एकत्रित मतांचा वापर करतो. + +**टीप** Gasper मध्ये समाविष्ट करण्यासाठी Casper-FFG ची मूळ व्याख्या किंचित अद्यतनित केली गेली आहे. या पेजवर आम्ही अद्यतनित आवृत्तीचा विचार करत आहोत. + +## पूर्व आवश्यकता + +ही सामग्री समजून घेण्यासाठी [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) वरील प्रास्ताविक पेज वाचणे आवश्यक आहे. + +## Gasper ची भूमिका {#role-of-gasper} + +Gasper प्रूफ-ऑफ-स्टेक ब्लॉकचेनवर काम करतो जिथे नोड्स सुरक्षा ठेव म्हणून इथर प्रदान करतात, जे ब्लॉक्स प्रस्तावित किंवा प्रमाणित करण्यात आळशी किंवा अप्रामाणिक असल्यास नष्ट केले जाऊ शकते. Gasper ही एक यंत्रणा आहे जी व्हॅलिडेटर्सना कसे पुरस्कृत आणि दंडित केले जाते, कोणते ब्लॉक्स स्वीकारायचे आणि कोणते नाकारायचे आणि ब्लॉकचेनच्या कोणत्या फोर्कवर बिल्ड करायचे हे ठरवते. + +## फायनॅलिटी म्हणजे काय? {#what-is-finality} + +फायनॅलिटी हा विशिष्ट ब्लॉक्सचा एक गुणधर्म आहे, ज्याचा अर्थ असा आहे की जोपर्यंत गंभीर एकमत अयशस्वी होत नाही आणि आक्रमणकर्त्याने एकूण स्टेक केलेल्या इथरपैकी किमान 1/3 नष्ट केला नाही तोपर्यंत ते परत केले जाऊ शकत नाहीत. फायनलाइज्ड ब्लॉक्स ही अशी माहिती मानली जाऊ शकते ज्याबद्दल ब्लॉकचेनला खात्री असते. एका ब्लॉकला फायनलाइज्ड होण्यासाठी दोन-चरणांच्या अपग्रेड प्रक्रियेतून जावे लागते: + +1. एकूण स्टेक केलेल्या इथरपैकी दोन-तृतीयांशने त्या ब्लॉकच्या कॅनॉनिकल चेनमध्ये समावेशाच्या बाजूने मतदान केलेले असावे. ही अट ब्लॉकला "जस्टिफाइड" करण्यासाठी अपग्रेड करते. जस्टिफाइड ब्लॉक्स परत होण्याची शक्यता कमी असते, परंतु काही विशिष्ट परिस्थितीत ते परत केले जाऊ शकतात. +2. जेव्हा एका जस्टिफाइड ब्लॉकवर दुसरा ब्लॉक जस्टिफाइड केला जातो, तेव्हा तो "फायनलाइज्ड" करण्यासाठी अपग्रेड केला जातो. एखादा ब्लॉक फायनलाइज्ड करणे म्हणजे त्या ब्लॉकला कॅनॉनिकल चेनमध्ये समाविष्ट करण्याची वचनबद्धता होय. जोपर्यंत एखादा आक्रमणकर्ता लाखो इथर (अब्जावधी $USD) नष्ट करत नाही तोपर्यंत ते परत केले जाऊ शकत नाही. + +हे ब्लॉक अपग्रेड प्रत्येक स्लॉटमध्ये होत नाहीत. त्याऐवजी, केवळ इपॉक-बाउंडरी ब्लॉक्स जस्टिफाइड आणि फायनलाइज्ड केले जाऊ शकतात. हे ब्लॉक्स "चेकपॉइंट्स" म्हणून ओळखले जातात. अपग्रेड करताना चेकपॉइंट्सच्या जोड्यांचा विचार केला जातो. कमी अलीकडील चेकपॉइंटला फायनलाइज्ड आणि अधिक अलीकडील ब्लॉकला जस्टिफाइड करण्यासाठी दोन सलग चेकपॉइंट्समध्ये एक "सुपरमेजोरिटी लिंक" अस्तित्वात असणे आवश्यक आहे (म्हणजे, एकूण स्टेक केलेल्या इथरपैकी दोन-तृतीयांशने मतदान केले आहे की चेकपॉइंट B हा चेकपॉइंट A चा योग्य वंशज आहे). + +कारण फायनॅलिटीसाठी एखादा ब्लॉक कॅनॉनिकल असल्याची दोन-तृतीयांश सहमती आवश्यक असते, त्यामुळे आक्रमणकर्ता खालील गोष्टींशिवाय पर्यायी फायनलाइज्ड चेन तयार करू शकत नाही: + +1. एकूण स्टेक केलेल्या इथरपैकी दोन-तृतीयांशची मालकी असणे किंवा हाताळणी करणे. +2. एकूण स्टेक केलेल्या इथरपैकी किमान एक-तृतीयांश नष्ट करणे. + +पहिली अट उद्भवते कारण एखादी चेन फायनलाइज्ड करण्यासाठी दोन-तृतीयांश स्टेक केलेला इथर आवश्यक असतो. दुसरी अट उद्भवते कारण जर एकूण स्टेकपैकी दोन-तृतीयांशने दोन्ही फोर्कच्या बाजूने मतदान केले असेल, तर एक-तृतीयांशने दोन्हीवर मतदान केले असले पाहिजे. दुहेरी-मतदान ही एक स्लॅशिंग अट आहे ज्यासाठी कमाल शिक्षा दिली जाईल, आणि एकूण स्टेकपैकी एक-तृतीयांश नष्ट केला जाईल. मे २०२२ पर्यंत, यासाठी आक्रमणकर्त्याला सुमारे $10 अब्ज किमतीचे इथर जाळावे लागतील. Gasper मध्ये ब्लॉक्सना जस्टिफाइड आणि फायनलाइज्ड करणारा अल्गोरिदम हा [कॅस्पर द फ्रेंडली फायनॅलिटी गॅझेट (Casper-FFG)](https://arxiv.org/pdf/1710.09437.pdf) चे थोडे सुधारित स्वरूप आहे. + +### प्रोत्साहन आणि स्लॅशिंग {#incentives-and-slashing} + +व्हॅलिडेटर्सना प्रामाणिकपणे ब्लॉक्स प्रस्तावित आणि प्रमाणित करण्यासाठी पुरस्कृत केले जाते. इथर पुरस्कृत केले जाते आणि त्यांच्या स्टेकमध्ये जोडले जाते. दुसरीकडे, जे व्हॅलिडेटर्स अनुपस्थित असतात आणि बोलावल्यावर कार्य करण्यास अयशस्वी ठरतात, त्यांना हे पुरस्कार मिळत नाहीत आणि कधीकधी त्यांच्या विद्यमान स्टेकचा एक छोटा भाग गमावतात. तथापि, ऑफलाइन असण्याचे दंड लहान आहेत आणि, बहुतेक प्रकरणांमध्ये, ते पुरस्कार गमावण्याच्या संधीच्या खर्चाएवढे असतात. तथापि, काही व्हॅलिडेटर क्रिया अपघाताने करणे खूप कठीण आहे आणि काही दुर्भावनापूर्ण हेतू दर्शवतात, जसे की एकाच स्लॉटसाठी अनेक ब्लॉक्स प्रस्तावित करणे, एकाच स्लॉटसाठी अनेक ब्लॉक्सची साक्ष देणे किंवा मागील चेकपॉइंट मतांशी विरोधाभास करणे. हे "स्लॅश करण्यायोग्य" वर्तन आहेत ज्यांना अधिक कठोर शिक्षा दिली जाते—स्लॅशिंगमुळे व्हॅलिडेटरच्या स्टेकचा काही भाग नष्ट होतो आणि व्हॅलिडेटरला व्हॅलिडेटर्सच्या नेटवर्कमधून काढून टाकले जाते. या प्रक्रियेला ३६ दिवस लागतात. पहिल्या दिवशी, १ ETH पर्यंतचा प्रारंभिक दंड आकारला जातो. नंतर एक्झिट कालावधीत स्लॅश झालेल्या व्हॅलिडेटरचा इथर हळूहळू कमी होत जातो, परंतु १८ व्या दिवशी, त्यांना "सहसंबंध दंड" मिळतो, जो एकाच वेळी अधिक व्हॅलिडेटर्सना स्लॅश केले जाते तेव्हा मोठा असतो. कमाल दंड म्हणजे संपूर्ण स्टेक. हे पुरस्कार आणि दंड प्रामाणिक व्हॅलिडेटर्सना प्रोत्साहन देण्यासाठी आणि नेटवर्कवरील हल्ल्यांना परावृत्त करण्यासाठी डिझाइन केलेले आहेत. + +### निष्क्रियता गळती {#inactivity-leak} + +सुरक्षेसोबतच, Gasper "संभाव्य लाइव्हनेस" देखील प्रदान करतो. ही अशी अट आहे की जोपर्यंत एकूण स्टेक केलेल्या इथरपैकी दोन-तृतीयांश प्रामाणिकपणे मतदान करत आहे आणि प्रोटोकॉलचे पालन करत आहे, तोपर्यंत इतर कोणत्याही हालचालीची (जसे की हल्ले, लेटन्सी समस्या किंवा स्लॅशिंग) पर्वा न करता चेन फायनलाइज्ड होऊ शकेल. दुसऱ्या शब्दांत, चेनला फायनलाइज्ड होण्यापासून रोखण्यासाठी एकूण स्टेक केलेल्या इथरपैकी एक-तृतीयांशाशी कोणत्यातरी प्रकारे तडजोड केली पाहिजे. Gasper मध्ये, लाइव्हनेस अयशस्वी होण्याच्या विरोधात संरक्षणाची एक अतिरिक्त रेषा आहे, जी "निष्क्रियता गळती" म्हणून ओळखली जाते. जेव्हा चेन चारपेक्षा जास्त इपॉक्ससाठी फायनलाइज्ड होण्यास अयशस्वी ठरते तेव्हा ही यंत्रणा सक्रिय होते. जे व्हॅलिडेटर्स बहुसंख्य चेनला सक्रियपणे साक्ष देत नाहीत, त्यांचा स्टेक हळूहळू कमी होत जातो जोपर्यंत बहुसंख्यांना एकूण स्टेकपैकी दोन-तृतीयांश परत मिळत नाही, ज्यामुळे हे सुनिश्चित होते की लाइव्हनेस अपयश केवळ तात्पुरते आहेत. + +### फोर्क निवड {#fork-choice} + +Casper-FFG च्या मूळ व्याख्येत एक फोर्क निवड अल्गोरिदम समाविष्ट होता ज्याने हा नियम लागू केला: `सर्वात जास्त उंची असलेल्या जस्टिफाइड चेकपॉइंटचा समावेश असलेल्या चेनचे अनुसरण करा` जिथे उंचीची व्याख्या जेनेसिस ब्लॉकपासूनचे सर्वात मोठे अंतर अशी केली आहे. Gasper मध्ये, LMD-GHOST नावाच्या अधिक अत्याधुनिक अल्गोरिदमच्या बाजूने मूळ फोर्क निवड नियम नापसंत केला आहे. हे लक्षात घेणे महत्त्वाचे आहे की सामान्य परिस्थितीत, फोर्क निवड नियमाची आवश्यकता नसते - प्रत्येक स्लॉटसाठी एकच ब्लॉक प्रस्तावक असतो, आणि प्रामाणिक व्हॅलिडेटर्स त्याला साक्ष देतात. केवळ मोठ्या नेटवर्क असिंक्रोनिसिटीच्या प्रकरणांमध्ये किंवा जेव्हा एखादा अप्रामाणिक ब्लॉक प्रस्तावक संदिग्ध विधान करतो तेव्हाच फोर्क निवड अल्गोरिदम आवश्यक असतो. तथापि, जेव्हा अशी प्रकरणे उद्भवतात, तेव्हा फोर्क निवड अल्गोरिदम एक महत्त्वपूर्ण संरक्षण आहे जे योग्य चेन सुरक्षित करते. + +LMD-GHOST चा अर्थ आहे "लेटेस्ट मेसेज-ड्रिव्हन ग्रीडी हेवीएस्ट ऑब्झर्व्हड सब-ट्री". एखाद्या अल्गोरिदमची व्याख्या करण्याचा हा एक तांत्रिक शब्दबंबाळ मार्ग आहे, जो साक्ष्यांच्या सर्वात मोठ्या एकत्रित वजनासह असलेला फोर्क कॅनॉनिकल म्हणून निवडतो (ग्रीडी हेवीएस्ट सबट्री) आणि जर एखाद्या व्हॅलिडेटरकडून अनेक संदेश प्राप्त झाले, तर केवळ नवीनतम संदेश विचारात घेतला जातो (लेटेस्ट-मेसेज ड्रिव्हन). सर्वात वजनदार ब्लॉकला आपल्या कॅनॉनिकल चेनमध्ये जोडण्यापूर्वी, प्रत्येक व्हॅलिडेटर या नियमाचा वापर करून प्रत्येक ब्लॉकचे मूल्यांकन करतो. + +## अधिक वाचन {#further-reading} + +- [Gasper: GHOST आणि Casper एकत्र करणे](https://arxiv.org/pdf/2003.03052.pdf) +- [कॅस्पर द फ्रेंडली फायनॅलिटी गॅझेट](https://arxiv.org/pdf/1710.09437.pdf) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/index.md new file mode 100644 index 00000000000..86cb2cdb6cf --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/index.md @@ -0,0 +1,99 @@ +--- +title: "प्रूफ-ऑफ-स्टेक (PoS)" +description: "प्रूफ-ऑफ-स्टेक सहमती प्रोटोकॉल आणि इथेरियममधील त्याच्या भूमिकेचे स्पष्टीकरण." +lang: mr +--- + +प्रूफ-ऑफ-स्टेक (PoS) हे इथेरियमच्या [सहमती यंत्रणेचा](/developers/docs/consensus-mechanisms/) आधार आहे. इथेरियमने 2022 मध्ये त्याच्या प्रूफ-ऑफ-स्टेक यंत्रणेवर स्विच केले कारण ते पूर्वीच्या [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow) आर्किटेक्चरच्या तुलनेत अधिक सुरक्षित, कमी ऊर्जा-केंद्रित आणि नवीन स्केलिंग सोल्यूशन्स लागू करण्यासाठी अधिक चांगले आहे. + +## पूर्वतयारी {#prerequisites} + +हे पृष्ठ अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [सहमती यंत्रणेवर](/developers/docs/consensus-mechanisms/) वाचा. + +## प्रूफ-ऑफ-स्टेक (PoS) म्हणजे काय? {#what-is-pos} + +प्रूफ-ऑफ-स्टेक हा एक मार्ग आहे ज्याद्वारे व्हॅलिडेटर्सनी नेटवर्कमध्ये काहीतरी मौल्यवान ठेवले आहे हे सिद्ध करता येते, जे ते अप्रामाणिकपणे वागल्यास नष्ट केले जाऊ शकते. इथेरियमच्या प्रूफ-ऑफ-स्टेकमध्ये, व्हॅलिडेटर्स स्पष्टपणे ETH च्या स्वरूपात भांडवल इथेरियमवरील स्मार्ट कॉन्ट्रॅक्टमध्ये स्टेक करतात. त्यानंतर व्हॅलिडेटर नेटवर्कवर प्रसारित झालेले नवीन ब्लॉक्स वैध आहेत की नाही हे तपासण्यासाठी आणि कधीकधी स्वतः नवीन ब्लॉक्स तयार करून प्रसारित करण्यासाठी जबाबदार असतो. जर त्यांनी नेटवर्कची फसवणूक करण्याचा प्रयत्न केला (उदाहरणार्थ, जेव्हा त्यांनी एक ब्लॉक पाठवायला हवा तेव्हा अनेक ब्लॉक्स प्रस्तावित करून किंवा परस्परविरोधी अटेस्टेशन्स पाठवून), तर त्यांचे काही किंवा सर्व स्टेक केलेले ETH नष्ट केले जाऊ शकतात. + +## व्हॅलिडेटर्स {#validators} + +व्हॅलिडेटर म्हणून सहभागी होण्यासाठी, वापरकर्त्याने डिपॉझिट कॉन्ट्रॅक्टमध्ये 32 ETH जमा करणे आवश्यक आहे आणि सॉफ्टवेअरचे तीन वेगळे भाग चालवणे आवश्यक आहे: एक एक्झिक्युशन क्लायंट, एक कन्सेन्सस क्लायंट आणि एक व्हॅलिडेटर क्लायंट. त्यांचे ETH जमा केल्यावर, वापरकर्ता एका ॲक्टिव्हेशन रांगेत सामील होतो जी नेटवर्कमध्ये सामील होणाऱ्या नवीन व्हॅलिडेटर्सचा दर मर्यादित करते. एकदा सक्रिय झाल्यावर, व्हॅलिडेटर्सना इथेरियम नेटवर्कवरील पीअर्सकडून नवीन ब्लॉक्स मिळतात. इथेरियमच्या स्टेटमध्ये प्रस्तावित बदल वैध आहेत की नाही हे तपासण्यासाठी ब्लॉकमध्ये वितरित केलेले व्यवहार पुन्हा कार्यान्वित केले जातात आणि ब्लॉक स्वाक्षरी तपासली जाते. त्यानंतर व्हॅलिडेटर त्या ब्लॉकच्या बाजूने एक मत (ज्याला अटेस्टेशन म्हणतात) नेटवर्कवर पाठवतो. + +प्रूफ-ऑफ-वर्क अंतर्गत, ब्लॉक्सची वेळ मायनिंग डिफिकल्टीद्वारे निश्चित केली जाते, तर प्रूफ-ऑफ-स्टेकमध्ये, टेम्पो निश्चित असतो. प्रूफ-ऑफ-स्टेक इथेरियममधील वेळ स्लॉट्स (12 सेकंद) आणि इपॉक्स (32 स्लॉट्स) मध्ये विभागलेली आहे. प्रत्येक स्लॉटमध्ये एक व्हॅलिडेटर यादृच्छिकपणे ब्लॉक प्रस्तावक म्हणून निवडला जातो. हा व्हॅलिडेटर एक नवीन ब्लॉक तयार करण्यासाठी आणि तो नेटवर्कवरील इतर नोड्सना पाठवण्यासाठी जबाबदार असतो. तसेच प्रत्येक स्लॉटमध्ये, व्हॅलिडेटर्सची एक समिती यादृच्छिकपणे निवडली जाते, ज्यांच्या मतांचा वापर प्रस्तावित केलेल्या ब्लॉकची वैधता निश्चित करण्यासाठी केला जातो. नेटवर्क लोड व्यवस्थापनीय ठेवण्यासाठी व्हॅलिडेटर संच समित्यांमध्ये विभागणे महत्त्वाचे आहे. समित्या व्हॅलिडेटर संच अशा प्रकारे विभागतात की प्रत्येक सक्रिय व्हॅलिडेटर प्रत्येक इपॉकमध्ये अटेस्ट करतो, परंतु प्रत्येक स्लॉटमध्ये नाही. + +## इथेरियम PoS मध्ये व्यवहार कसा कार्यान्वित होतो {#transaction-execution-ethereum-pos} + +खालील माहिती इथेरियम प्रूफ-ऑफ-स्टेकमध्ये व्यवहार कसा कार्यान्वित होतो याचे सुरुवातीपासून शेवटपर्यंतचे स्पष्टीकरण देते. + +1. एक वापरकर्ता त्यांच्या प्रायव्हेट की सह [व्यवहार](/developers/docs/transactions/) तयार करतो आणि स्वाक्षरी करतो. हे सहसा वॉलेट किंवा [ethers.js](https://docs.ethers.org/v6/), [web3js](https://docs.web3js.org/), [web3py](https://web3py.readthedocs.io/en/v5/) इत्यादी लायब्ररीद्वारे हाताळले जाते, परंतु प्रत्यक्षात वापरकर्ता इथेरियम [JSON-RPC API](/developers/docs/apis/json-rpc/) वापरून नोडला विनंती करत असतो. वापरकर्ता गॅसची रक्कम परिभाषित करतो जी ते व्हॅलिडेटरला टिप म्हणून देण्यास तयार असतात जेणेकरून त्यांना व्यवहाराला ब्लॉकमध्ये समाविष्ट करण्यास प्रोत्साहित केले जाईल. [टिप्स](/developers/docs/gas/#priority-fee) व्हॅलिडेटरला दिले जातात, तर [बेस फी](/developers/docs/gas/#base-fee) बर्न केली जाते. +2. व्यवहार इथेरियम [एक्झिक्युशन क्लायंट](/developers/docs/nodes-and-clients/#execution-client) कडे सबमिट केला जातो जो त्याची वैधता सत्यापित करतो. याचा अर्थ प्रेषकाकडे व्यवहार पूर्ण करण्यासाठी पुरेसे ETH आहे आणि त्यांनी योग्य की सह त्यावर स्वाक्षरी केली आहे याची खात्री करणे. +3. जर व्यवहार वैध असेल, तर एक्झिक्युशन क्लायंट तो त्याच्या स्थानिक मेमपूलमध्ये (प्रलंबित व्यवहारांची यादी) जोडतो आणि एक्झिक्युशन लेयर गॉसिप नेटवर्कवर इतर नोड्सना देखील प्रसारित करतो. जेव्हा इतर नोड्सना व्यवहाराबद्दल कळते, तेव्हा ते देखील त्याला त्यांच्या स्थानिक मेमपूलमध्ये जोडतात. प्रगत वापरकर्ते कदाचित त्यांचा व्यवहार प्रसारित करण्यापासून परावृत्त होतील आणि त्याऐवजी तो [Flashbots Auction](https://docs.flashbots.net/flashbots-auction/overview) सारख्या विशेष ब्लॉक बिल्डर्सकडे पाठवतील. हे त्यांना जास्तीत जास्त नफ्यासाठी ([MEV](/developers/docs/mev/#mev-extraction)) आगामी ब्लॉक्समधील व्यवहार आयोजित करण्याची परवानगी देते. +4. नेटवर्कवरील व्हॅलिडेटर नोड्सपैकी एक सध्याच्या स्लॉटसाठी ब्लॉक प्रस्तावक आहे, जो पूर्वी RANDAO वापरून छद्म-यादृच्छिकपणे निवडला गेला होता. हा नोड इथेरियम ब्लॉकचेनमध्ये जोडला जाणारा पुढील ब्लॉक तयार करण्यासाठी आणि प्रसारित करण्यासाठी आणि ग्लोबल स्टेट अद्यतनित करण्यासाठी जबाबदार आहे. नोड तीन भागांनी बनलेला आहे: एक एक्झिक्युशन क्लायंट, एक कन्सेन्सस क्लायंट आणि एक व्हॅलिडेटर क्लायंट. एक्झिक्युशन क्लायंट स्थानिक मेमपूलमधील व्यवहार "एक्झिक्युशन पेलोड" मध्ये बंडल करतो आणि स्टेट बदल निर्माण करण्यासाठी त्यांना स्थानिकरित्या कार्यान्वित करतो. ही माहिती कन्सेन्सस क्लायंटला दिली जाते जिथे एक्झिक्युशन पेलोड "बीकन ब्लॉक" चा भाग म्हणून गुंडाळला जातो, ज्यात रिवॉर्ड्स, पेनल्टी, स्लॅशिंग, अटेस्टेशन्स इत्यादींबद्दलची माहिती देखील असते, जे नेटवर्कला चेनच्या हेडवरील ब्लॉक्सच्या क्रमावर सहमत होण्यास सक्षम करते. एक्झिक्युशन आणि कन्सेन्सस क्लायंटमधील संवाद [Connecting the Consensus and Execution Clients](/developers/docs/networking-layer/#connecting-clients) मध्ये अधिक तपशीलवार वर्णन केले आहे. +5. इतर नोड्सना कन्सेन्सस लेयर गॉसिप नेटवर्कवर नवीन बीकन ब्लॉक मिळतो. ते तो त्यांच्या एक्झिक्युशन क्लायंटकडे पाठवतात जिथे प्रस्तावित स्टेट बदल वैध आहे याची खात्री करण्यासाठी व्यवहार स्थानिकरित्या पुन्हा कार्यान्वित केले जातात. त्यानंतर व्हॅलिडेटर क्लायंट अटेस्ट करतो की ब्लॉक वैध आहे आणि त्यांच्या चेनच्या दृश्यात तो तार्किक पुढील ब्लॉक आहे (म्हणजे तो [फोर्क चॉइस नियमांनुसार](/developers/docs/consensus-mechanisms/pos/#fork-choice) परिभाषित केल्यानुसार अटेस्टेशन्सच्या सर्वाधिक वजनासह चेनवर तयार होतो). ब्लॉक प्रत्येक नोडमधील स्थानिक डेटाबेसमध्ये जोडला जातो जो त्याला अटेस्ट करतो. +6. जर व्यवहार दोन चेकपॉइंट्समधील "सुपरमजॉरिटी लिंक" सह चेनचा भाग बनला असेल तर तो "फायनलाइज्ड" मानला जाऊ शकतो. चेकपॉइंट्स प्रत्येक इपॉकच्या सुरुवातीला येतात आणि ते या वस्तुस्थितीचा हिशोब ठेवण्यासाठी अस्तित्वात आहेत की प्रत्येक स्लॉटमध्ये केवळ सक्रिय व्हॅलिडेटर्सचा उपसंच अटेस्ट करतो, परंतु सर्व सक्रिय व्हॅलिडेटर्स प्रत्येक इपॉकमध्ये अटेस्ट करतात. म्हणून, केवळ इपॉक्सच्या दरम्यान 'सुपरमजॉरिटी लिंक' प्रदर्शित केली जाऊ शकते (येथे नेटवर्कवरील एकूण स्टेक केलेल्या ETH पैकी 66% दोन चेकपॉइंट्सवर सहमत असतात). + +फायनॅलिटीबद्दल अधिक तपशील खाली आढळू शकतो. + +## अंतिमता {#finality} + +वितरित नेटवर्कमध्ये व्यवहाराला "फायनॅलिटी" असते जेव्हा तो अशा ब्लॉकचा भाग असतो जो मोठ्या प्रमाणात ETH बर्न केल्याशिवाय बदलू शकत नाही. प्रूफ-ऑफ-स्टेक इथेरियमवर, हे "चेकपॉइंट" ब्लॉक्स वापरून व्यवस्थापित केले जाते. प्रत्येक इपॉकमधील पहिला ब्लॉक एक चेकपॉइंट असतो. व्हॅलिडेटर्स चेकपॉइंट्सच्या जोड्यांसाठी मतदान करतात ज्यांना ते वैध मानतात. जर चेकपॉइंट्सच्या जोडीने एकूण स्टेक केलेल्या ETH च्या किमान दोन-तृतीयांश मतांचे प्रतिनिधित्व करणारी मते आकर्षित केली, तर चेकपॉइंट्स अपग्रेड केले जातात. दोघांपैकी अलीकडील (लक्ष्य) "न्यायोचित" बनतो. दोघांपैकी पूर्वीचा आधीच न्यायोचित आहे कारण तो मागील इपॉकमध्ये "लक्ष्य" होता. आता तो "फायनलाइज्ड" मध्ये अपग्रेड केला आहे. चेकपॉइंट्स अपग्रेड करण्याची ही प्रक्रिया **[Casper the Friendly Finality Gadget (Casper-FFG)](https://arxiv.org/pdf/1710.09437)** द्वारे हाताळली जाते. Casper-FFG हे सहमतीसाठी एक ब्लॉक फायनॅलिटी टूल आहे. एकदा ब्लॉक फायनलाइज झाल्यावर, स्टेकर्सच्या बहुसंख्य स्लॅशिंगशिवाय तो परत केला किंवा बदलला जाऊ शकत नाही, ज्यामुळे तो आर्थिकदृष्ट्या अव्यवहार्य बनतो. + +फायनलाइज्ड ब्लॉक परत करण्यासाठी, आक्रमणकर्त्याला एकूण स्टेक केलेल्या ETH पुरवठ्यापैकी किमान एक-तृतीयांश गमावण्याची तयारी ठेवावी लागेल. याचे नेमके कारण या [Ethereum Foundation ब्लॉग पोस्टमध्ये](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) स्पष्ट केले आहे. फायनॅलिटीसाठी दोन-तृतीयांश बहुमताची आवश्यकता असल्याने, आक्रमणकर्ता एकूण स्टेकच्या एक-तृतीयांश मताने मतदान करून नेटवर्कला फायनॅलिटीपर्यंत पोहोचण्यापासून रोखू शकतो. याविरुद्ध बचाव करण्यासाठी एक यंत्रणा आहे: [निष्क्रियता गळती (inactivity leak)](https://eth2book.info/bellatrix/part2/incentives/inactivity). जेव्हा चेन चारपेक्षा जास्त इपॉक्ससाठी फायनलाइज करण्यात अयशस्वी होते तेव्हा हे सक्रिय होते. निष्क्रियता गळती बहुमताच्या विरोधात मतदान करणाऱ्या व्हॅलिडेटर्सकडून स्टेक केलेले ETH काढून टाकते, ज्यामुळे बहुमताला दोन-तृतीयांश बहुमत पुन्हा मिळवता येते आणि चेन फायनलाइज करता येते. + +## क्रिप्टो-इकॉनॉमिक सुरक्षा {#crypto-economic-security} + +व्हॅलिडेटर चालवणे ही एक वचनबद्धता आहे. ब्लॉक व्हॅलिडेशन आणि प्रस्तावामध्ये सहभागी होण्यासाठी व्हॅलिडेटरने पुरेसे हार्डवेअर आणि कनेक्टिव्हिटी राखणे अपेक्षित आहे. बदल्यात, व्हॅलिडेटरला ETH मध्ये पैसे दिले जातात (त्यांची स्टेक केलेली शिल्लक वाढते). दुसरीकडे, व्हॅलिडेटर म्हणून सहभागी होण्याने वापरकर्त्यांना वैयक्तिक लाभासाठी किंवा तोडफोडीसाठी नेटवर्कवर हल्ला करण्याचे नवीन मार्ग देखील मिळतात. हे टाळण्यासाठी, व्हॅलिडेटर्सना बोलावल्यावर सहभागी होण्यात अयशस्वी झाल्यास ETH रिवॉर्ड्स मिळत नाहीत, आणि त्यांनी अप्रामाणिकपणे वागल्यास त्यांचा विद्यमान स्टेक नष्ट केला जाऊ शकतो. दोन प्राथमिक वर्तनांना अप्रामाणिक मानले जाऊ शकते: एकाच स्लॉटमध्ये अनेक ब्लॉक्स प्रस्तावित करणे (संदिग्धता) आणि परस्परविरोधी अटेस्टेशन्स सबमिट करणे. + +स्लॅश केलेल्या ETH ची रक्कम त्याच वेळी किती व्हॅलिडेटर्सना स्लॅश केले जात आहे यावर अवलंबून असते. याला ["सहसंबंध दंड" (correlation penalty)](https://eth2book.info/bellatrix/part2/incentives/slashing#the-correlation-penalty) म्हणून ओळखले जाते, आणि तो किरकोळ असू शकतो (स्वतः स्लॅश झालेल्या एका व्हॅलिडेटरसाठी ~1% स्टेक) किंवा व्हॅलिडेटरच्या 100% स्टेक नष्ट होण्यास कारणीभूत ठरू शकतो (मोठ्या प्रमाणावर स्लॅशिंगची घटना). हे एका जबरदस्तीने बाहेर पडण्याच्या कालावधीच्या मध्यभागी लादले जाते, जे पहिल्या दिवशी तात्काळ दंडाने (1 ETH पर्यंत) सुरू होते, 18 व्या दिवशी सहसंबंध दंड, आणि शेवटी, 36 व्या दिवशी नेटवर्कमधून बाहेर काढले जाते. त्यांना दररोज किरकोळ अटेस्टेशन दंड मिळतो कारण ते नेटवर्कवर उपस्थित असतात परंतु मते सबमिट करत नाहीत. या सर्वांचा अर्थ असा आहे की समन्वित हल्ला आक्रमणकर्त्यासाठी खूप महाग असेल. + +## फोर्क निवड {#fork-choice} + +जेव्हा नेटवर्क उत्कृष्टपणे आणि प्रामाणिकपणे कार्य करते, तेव्हा चेनच्या हेडवर नेहमी फक्त एक नवीन ब्लॉक असतो, आणि सर्व व्हॅलिडेटर्स त्याला अटेस्ट करतात. तथापि, नेटवर्क लेटन्सीमुळे किंवा ब्लॉक प्रस्तावकाने संदिग्धता केल्यामुळे व्हॅलिडेटर्सना चेनच्या हेडबद्दल वेगवेगळी मते असणे शक्य आहे. म्हणून, कन्सेन्सस क्लायंट्सना कोणाला प्राधान्य द्यायचे हे ठरवण्यासाठी एका अल्गोरिदमची आवश्यकता असते. प्रूफ-ऑफ-स्टेक इथेरियममध्ये वापरल्या जाणाऱ्या अल्गोरिदमला [LMD-GHOST](https://arxiv.org/pdf/2003.03052.pdf) म्हणतात, आणि तो त्याच्या इतिहासात सर्वाधिक अटेस्टेशन्सचे वजन असलेल्या फोर्कला ओळखून कार्य करतो. + +## प्रूफ-ऑफ-स्टेक आणि सुरक्षा {#pos-and-security} + +[51% हल्ल्याचा](https://www.investopedia.com/terms/1/51-attack.asp) धोका प्रूफ-ऑफ-वर्क प्रमाणेच प्रूफ-ऑफ-स्टेकमध्येही अस्तित्वात आहे, परंतु तो आक्रमणकर्त्यांसाठी अधिक धोकादायक आहे. आक्रमणकर्त्याला 51% स्टेक केलेल्या ETH ची आवश्यकता असेल. त्यानंतर ते त्यांच्या स्वतःच्या अटेस्टेशन्सचा वापर करून त्यांचा पसंतीचा फोर्क सर्वाधिक जमा झालेल्या अटेस्टेशन्सचा आहे याची खात्री करू शकतील. जमा झालेल्या अटेस्टेशन्सचे 'वजन' हेच कन्सेन्सस क्लायंट योग्य चेन निश्चित करण्यासाठी वापरतात, त्यामुळे हा आक्रमणकर्ता त्यांचा फोर्क कॅनॉनिकल बनवू शकेल. तथापि, प्रूफ-ऑफ-वर्कच्या तुलनेत प्रूफ-ऑफ-स्टेकची एक ताकद ही आहे की समुदायाकडे प्रति-हल्ला करण्यासाठी लवचिकता आहे. उदाहरणार्थ, प्रामाणिक व्हॅलिडेटर्स अल्पसंख्याक चेनवर बांधकाम सुरू ठेवण्याचा आणि आक्रमणकर्त्याच्या फोर्ककडे दुर्लक्ष करण्याचा निर्णय घेऊ शकतात, तसेच ॲप्स, एक्सचेंजेस आणि पूल्सना असे करण्यास प्रोत्साहित करू शकतात. ते आक्रमणकर्त्याला नेटवर्कमधून जबरदस्तीने काढून टाकण्याचा आणि त्यांचे स्टेक केलेले ETH नष्ट करण्याचा निर्णय घेऊ शकतात. हे 51% हल्ल्याविरुद्ध मजबूत आर्थिक संरक्षण आहेत. + +51% हल्ल्यांव्यतिरिक्त, दुर्भावनापूर्ण घटक इतर प्रकारच्या द्वेषपूर्ण क्रियाकलापांचा प्रयत्न करू शकतात, जसे की: + +- लांब पल्ल्याचे हल्ले (जरी फायनॅलिटी गॅझेट हा हल्ला वेक्टर निष्प्रभ करते) +- लहान पल्ल्याचे 'रीऑर्ग्स' (जरी प्रस्तावक बूस्टिंग आणि अटेस्टेशन डेडलाइन हे कमी करतात) +- बाउन्सिंग आणि बॅलन्सिंग हल्ले (हे देखील प्रस्तावक बूस्टिंगद्वारे कमी केले जातात, आणि हे हल्ले केवळ आदर्श नेटवर्क परिस्थितीतच प्रदर्शित केले गेले आहेत) +- ॲव्हालांच हल्ले (फक्त नवीनतम संदेशाचा विचार करण्याच्या फोर्क निवड अल्गोरिदमच्या नियमाद्वारे निष्प्रभ) + +एकंदरीत, प्रूफ-ऑफ-स्टेक, जसे की ते इथेरियमवर लागू केले आहे, प्रूफ-ऑफ-वर्कपेक्षा अधिक आर्थिकदृष्ट्या सुरक्षित असल्याचे सिद्ध झाले आहे. + +## फायदे आणि तोटे {#pros-and-cons} + +| फायदे | बाधक | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | +| स्टेकिंगमुळे व्यक्तींना नेटवर्क सुरक्षित करण्यात सहभागी होणे सोपे होते, ज्यामुळे विकेंद्रीकरणाला चालना मिळते. व्हॅलिडेटर नोड सामान्य लॅपटॉपवर चालवला जाऊ शकतो. स्टेकिंग पूल्स वापरकर्त्यांना 32 ETH नसतानाही स्टेक करण्याची परवानगी देतात. | प्रूफ-ऑफ-स्टेक प्रूफ-ऑफ-वर्कच्या तुलनेत नवीन आणि कमी युद्ध-परीक्षित आहे | +| स्टेकिंग अधिक विकेंद्रित आहे. स्केलची अर्थव्यवस्था PoW मायनिंगसाठी लागू होते तशीच लागू होत नाही. | प्रूफ-ऑफ-स्टेक प्रूफ-ऑफ-वर्कपेक्षा लागू करण्यासाठी अधिक जटिल आहे | +| प्रूफ-ऑफ-स्टेक प्रूफ-ऑफ-वर्कपेक्षा अधिक क्रिप्टो-इकॉनॉमिक सुरक्षा प्रदान करते | वापरकर्त्यांना इथेरियमच्या प्रूफ-ऑफ-स्टेकमध्ये सहभागी होण्यासाठी सॉफ्टवेअरचे तीन भाग चालवणे आवश्यक आहे. | +| नेटवर्क सहभागींना प्रोत्साहन देण्यासाठी नवीन ETH चे कमी उत्सर्जन आवश्यक आहे | | + +### प्रूफ-ऑफ-वर्कशी तुलना {#comparison-to-proof-of-work} + +इथेरियमने मूळतः प्रूफ-ऑफ-वर्क वापरले परंतु सप्टेंबर 2022 मध्ये प्रूफ-ऑफ-स्टेकमध्ये स्विच केले. PoS चे PoW पेक्षा अनेक फायदे आहेत, जसे की: + +- उत्तम ऊर्जा कार्यक्षमता – प्रूफ-ऑफ-वर्क गणनेवर जास्त ऊर्जा वापरण्याची गरज नाही +- प्रवेशासाठी कमी अडथळे, कमी हार्डवेअर आवश्यकता – नवीन ब्लॉक्स तयार करण्याची संधी मिळवण्यासाठी उच्चभ्रू हार्डवेअरची गरज नाही +- केंद्रीकरणाचा धोका कमी – प्रूफ-ऑफ-स्टेकमुळे नेटवर्क सुरक्षित करणारे अधिक नोड्स तयार झाले पाहिजेत +- कमी ऊर्जेच्या आवश्यकतेमुळे सहभागाला प्रोत्साहन देण्यासाठी कमी ETH उत्सर्जन आवश्यक आहे +- गैरवर्तनासाठी आर्थिक दंडामुळे प्रूफ-ऑफ-वर्कच्या तुलनेत आक्रमणकर्त्यासाठी 51% शैलीचे हल्ले अधिक महाग होतात +- जर 51% हल्ला क्रिप्टो-इकॉनॉमिक संरक्षणावर मात करत असेल तर समुदाय एका प्रामाणिक चेनच्या सामाजिक पुनर्प्राप्तीचा अवलंब करू शकतो. + +## पुढील वाचन {#further-reading} + +- [प्रूफ ऑफ स्टेक FAQ](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html) _Vitalik Buterin_ +- [प्रूफ ऑफ स्टेक म्हणजे काय](https://consensys.net/blog/blockchain-explained/what-is-proof-of-stake/) _ConsenSys_ +- [प्रूफ ऑफ स्टेक काय आहे आणि ते का महत्त्वाचे आहे](https://bitcoinmagazine.com/culture/what-proof-of-stake-is-and-why-it-matters-1377531463) _Vitalik Buterin_ +- [प्रूफ ऑफ स्टेक का (नोव्हेंबर 2020)](https://vitalik.eth.limo/general/2020/11/06/pos2020.html) _Vitalik Buterin_ +- [प्रूफ ऑफ स्टेक: मी कमकुवत व्यक्तिनिष्ठतेवर प्रेम कसे करायला शिकलो](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) _Vitalik Buterin_ +- [प्रूफ-ऑफ-स्टेक इथेरियम हल्ला आणि संरक्षण](https://mirror.xyz/jmcook.eth/YqHargbVWVNRQqQpVpzrqEQ8IqwNUJDIpwRP7SS5FXs) +- [प्रूफ ऑफ स्टेक डिझाइन फिलॉसॉफी](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) _Vitalik Buterin_ +- [व्हिडिओ: विटालिक बुटेरिन लेक्स फ्रिडमनला प्रूफ-ऑफ-स्टेक समजावून सांगतात](https://www.youtube.com/watch?v=3yrqBG-7EVE) + +## संबंधित विषय {#related-topics} + +- [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) +- [प्रूफ-ऑफ-अथॉरिटी](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/keys/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/keys/index.md new file mode 100644 index 00000000000..3ee92d01e27 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/keys/index.md @@ -0,0 +1,102 @@ +--- +title: "प्रूफ-ऑफ-स्टेक इथेरियममधील कीज" +description: "इथेरियमच्या प्रूफ-ऑफ-स्टेक कन्सेन्सस मेकॅनिझममध्ये वापरलेल्या कीजचे स्पष्टीकरण" +lang: mr +--- + +इथेरियम पब्लिक-प्रायव्हेट की क्रिप्टोग्राफी वापरून वापरकर्त्यांच्या मालमत्तेला सुरक्षित ठेवते. पब्लिक की इथेरियम ॲड्रेससाठी आधार म्हणून वापरली जाते—म्हणजेच, ती सर्वसामान्यांसाठी दृश्यमान असते आणि एक युनिक आयडेंटिफायर म्हणून वापरली जाते. प्रायव्हेट (किंवा 'गुप्त') की फक्त अकाउंट मालकासाठीच ॲक्सेसिबल असावी. प्रायव्हेट कीचा वापर व्यवहार आणि डेटा 'साइन' करण्यासाठी केला जातो, जेणेकरून क्रिप्टोग्राफी हे सिद्ध करू शकेल की धारकाने विशिष्ट प्रायव्हेट कीची काही क्रिया मंजूर केली आहे. + +इथेरियमच्या कीज [एलिप्टिक-कर्व्ह क्रिप्टोग्राफी](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography) वापरून जनरेट केल्या जातात. + +तथापि, जेव्हा इथेरियम [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow) वरून [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) वर स्विच झाले, तेव्हा इथेरियममध्ये एका नवीन प्रकारची की जोडली गेली. मूळ कीज अजूनही पूर्वीसारख्याच काम करतात—अकाउंट सुरक्षित करणाऱ्या एलिप्टिक-कर्व्ह-आधारित कीजमध्ये कोणतेही बदल झाले नाहीत. तथापि, ETH स्टेक करून आणि व्हॅलिडेटर्स चालवून प्रूफ-ऑफ-स्टेकमध्ये सहभागी होण्यासाठी वापरकर्त्यांना एका नवीन प्रकारच्या कीची आवश्यकता होती. ही गरज मोठ्या संख्येने व्हॅलिडेटर्समध्ये अनेक मेसेज पास होण्याशी संबंधित स्केलेबिलिटी आव्हानांमुळे निर्माण झाली, ज्यासाठी अशा क्रिप्टोग्राफिक पद्धतीची आवश्यकता होती जी सहजपणे एकत्रित केली जाऊ शकते, जेणेकरून नेटवर्कला कन्सेन्ससपर्यंत पोहोचण्यासाठी आवश्यक असलेल्या कम्युनिकेशनचे प्रमाण कमी करता येईल. + +या नवीन प्रकारची की [**बोनेह-लिन-शाचम (BLS)** सिग्नेचर स्कीम](https://wikipedia.org/wiki/BLS_digital_signature) वापरते. BLS सिग्नेचर्सचे अतिशय कार्यक्षम एकत्रीकरण सक्षम करते, परंतु एकत्रित वैयक्तिक व्हॅलिडेटर कीजचे रिव्हर्स इंजिनिअरिंग करण्यास देखील अनुमती देते आणि व्हॅलिडेटर्समधील क्रिया व्यवस्थापित करण्यासाठी आदर्श आहे. + +## व्हॅलिडेटर कीजचे दोन प्रकार {#two-types-of-keys} + +प्रूफ-ऑफ-स्टेकवर स्विच करण्यापूर्वी, इथेरियम वापरकर्त्यांकडे त्यांच्या फंडांमध्ये ऍक्सेस करण्यासाठी फक्त एकच एलिप्टिक-कर्व्ह-आधारित प्रायव्हेट की होती. प्रूफ-ऑफ-स्टेकच्या परिचयाने, सोलो स्टेकर बनू इच्छिणाऱ्या वापरकर्त्यांना एक **व्हॅलिडेटर की** आणि एक **विथड्रॉवल की** देखील आवश्यक होती. + +### व्हॅलिडेटर की {#validator-key} + +व्हॅलिडेटर साइनिंग कीमध्ये दोन घटक असतात: + +- व्हॅलिडेटर **प्रायव्हेट** की +- व्हॅलिडेटर **पब्लिक** की + +व्हॅलिडेटर प्रायव्हेट कीचा उद्देश ब्लॉक प्रस्ताव आणि अटेस्टेशन्स यांसारख्या ऑनचेन ऑपरेशन्सना साइन करणे हा आहे. यामुळे, या कीज हॉट वॉलेटमध्ये ठेवल्या पाहिजेत. + +या लवचिकतेचा फायदा असा आहे की व्हॅलिडेटर साइनिंग की एका डिव्हाइसवरून दुसऱ्या डिव्हाइसवर खूप वेगाने हलवता येतात, तथापि, जर त्या हरवल्या किंवा चोरीला गेल्या, तर चोर काही मार्गांनी **दुर्भावनापूर्णपणे वागू** शकतो: + +- याद्वारे व्हॅलिडेटरला स्लॅश करणे: + - प्रपोजर म्हणून एकाच स्लॉटसाठी दोन भिन्न बीकन ब्लॉक्स साइन करणे + - अटेस्टर म्हणून असे अटेस्टेशन साइन करणे जे दुसऱ्याला "सराउंड" करते + - अटेस्टर म्हणून समान टार्गेट असलेली दोन भिन्न अटेस्टेशन्स साइन करणे +- स्वैच्छिक एक्झिटसाठी भाग पाडणे, ज्यामुळे व्हॅलिडेटर स्टेक करणे थांबवतो, आणि त्याच्या ETH बॅलन्सचा ऍक्सेस विथड्रॉवल की मालकाला मिळतो + +जेव्हा वापरकर्ता स्टेकिंग डिपॉझिट कॉन्ट्रॅक्टमध्ये ETH जमा करतो तेव्हा **व्हॅलिडेटर पब्लिक की** व्यवहार डेटामध्ये समाविष्ट केली जाते. याला _डिपॉझिट डेटा_ म्हणून ओळखले जाते आणि ते इथेरियमला व्हॅलिडेटर ओळखण्याची परवानगी देते. + +### विथड्रॉवल क्रेडेन्शियल्स {#withdrawal-credentials} + +प्रत्येक व्हॅलिडेटरकडे _विथड्रॉवल क्रेडेन्शियल्स_ म्हणून ओळखली जाणारी एक प्रॉपर्टी असते. या 32-बाईट फील्डचा पहिला बाईट अकाउंटचा प्रकार ओळखतो: `0x00` मूळ BLS (प्री-शापेला, नॉन-विथड्रॉएबल) क्रेडेन्शियल्स दर्शवते, `0x01` एका एक्झिक्युशन ॲड्रेसकडे पॉइंट करणारी लेगसी क्रेडेन्शियल्स दर्शवते, आणि `0x02` आधुनिक कंपाउंडिंग क्रेडेन्शियल प्रकार दर्शवते. + +`0x00` BLS कीज असलेल्या व्हॅलिडेटर्सना अतिरिक्त बॅलन्स पेमेंट किंवा स्टेकिंगमधून पूर्ण विथड्रॉवल सक्रिय करण्यासाठी या क्रेडेन्शियल्सना एका एक्झिक्युशन ॲड्रेसकडे पॉइंट करण्यासाठी अपडेट करणे आवश्यक आहे. हे सुरुवातीच्या की जनरेशन दरम्यान डिपॉझिट डेटामध्ये एक्झिक्युशन ॲड्रेस देऊन केले जाऊ शकते, _किंवा_ नंतरच्या वेळी विथड्रॉवल की वापरून `BLSToExecutionChange` मेसेज साइन आणि ब्रॉडकास्ट करून केले जाऊ शकते. + +[व्हॅलिडेटर विथड्रॉवल क्रेडेन्शियल्सवर अधिक माहिती](/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/) + +### विथड्रॉवल की {#withdrawal-key} + +जर सुरुवातीच्या डिपॉझिट दरम्यान सेट केले नसेल तर, विथड्रॉवल क्रेडेन्शियल्सना एक्झिक्युशन ॲड्रेसकडे पॉइंट करण्यासाठी अपडेट करण्याकरिता विथड्रॉवल कीची आवश्यकता असेल. यामुळे अतिरिक्त बॅलन्स पेमेंटवर प्रक्रिया सुरू करणे शक्य होईल, आणि वापरकर्त्यांना त्यांचे स्टेक केलेले ETH पूर्णपणे विथड्रॉ करण्याची परवानगी देखील मिळेल. + +व्हॅलिडेटर कीजप्रमाणेच, विथड्रॉवल कीमध्ये देखील दोन घटक असतात: + +- विथड्रॉवल **प्रायव्हेट** की +- विथड्रॉवल **पब्लिक** की + +विथड्रॉवल क्रेडेन्शियल्सना `0x01` प्रकारात अपडेट करण्यापूर्वी ही की गमावणे म्हणजे व्हॅलिडेटरच्या बॅलन्सचा ऍक्सेस गमावणे. व्हॅलिडेटर अजूनही अटेस्टेशन्स आणि ब्लॉक्स साइन करू शकतो, कारण या क्रियांसाठी व्हॅलिडेटरच्या प्रायव्हेट कीची आवश्यकता असते, तथापि, विथड्रॉवल कीज गमावल्यास थोडे किंवा काहीही प्रोत्साहन राहत नाही. + +व्हॅलिडेटर कीज इथेरियम अकाउंट कीजपासून वेगळे केल्याने एकाच वापरकर्त्याद्वारे अनेक व्हॅलिडेटर्स चालवणे शक्य होते. + +![व्हॅलिडेटर की स्केमॅटिक](validator-key-schematic.png) + +**टीप**: स्टेकिंग कर्तव्यांमधून बाहेर पडण्यासाठी आणि व्हॅलिडेटरचा बॅलन्स विथड्रॉ करण्यासाठी सध्या व्हॅलिडेटर कीने [स्वैच्छिक एक्झिट मेसेज (VEM)](https://mirror.xyz/ladislaus.eth/wmoBbUBes2Wp1_6DvP6slPabkyujSU7MZOFOC3QpErs&1) साइन करणे आवश्यक आहे. तथापि, [EIP-7002](https://eips.ethereum.org/EIPS/eip-7002) हा एक प्रस्ताव आहे जो वापरकर्त्याला भविष्यात विथड्रॉवल कीने एक्झिट मेसेज साइन करून व्हॅलिडेटरचे एक्झिट सुरू करण्याची आणि त्याचा बॅलन्स विथड्रॉ करण्याची परवानगी देईल. यामुळे विश्वासाची गृहीतके कमी होतील कारण जे स्टेकर्स [स्टेकिंग-ॲज-अ-सर्व्हिस प्रोव्हायडर्स](/staking/saas/#what-is-staking-as-a-service) यांना ETH डेलीगेट करतात, त्यांना त्यांच्या फंडांवर नियंत्रण ठेवता येईल. + +## सीड फ्रेजमधून कीज मिळवणे {#deriving-keys-from-seed} + +जर प्रत्येक 32 ETH स्टेकसाठी 2 पूर्णपणे स्वतंत्र कीजचा नवीन संच आवश्यक असेल, तर की मॅनेजमेंट लवकरच अव्यवहार्य होईल, विशेषतः अनेक व्हॅलिडेटर्स चालवणाऱ्या वापरकर्त्यांसाठी. त्याऐवजी, एकाच कॉमन सीक्रेटमधून अनेक व्हॅलिडेटर कीज मिळवल्या जाऊ शकतात आणि ते एकच सीक्रेट स्टोअर केल्याने अनेक व्हॅलिडेटर कीजचा ऍक्सेस मिळतो. + +[नेमोनिक्स](https://en.bitcoinwiki.org/wiki/Mnemonic_phrase) आणि पाथ ही प्रमुख वैशिष्ट्ये आहेत जी वापरकर्त्यांना त्यांच्या वॉलेटमध्ये [ऍक्सेस](https://ethereum.stackexchange.com/questions/19055/what-is-the-difference-between-m-44-60-0-0-and-m-44-60-0) करताना अनेकदा आढळतात. नेमोनिक हा शब्दांचा एक क्रम आहे जो प्रायव्हेट कीसाठी प्रारंभिक सीड म्हणून काम करतो. अतिरिक्त डेटासोबत एकत्रित केल्यावर, नेमोनिक एक हॅश जनरेट करतो ज्याला 'मास्टर की' म्हणून ओळखले जाते. याला झाडाचे मूळ मानले जाऊ शकते. या मूळातून फांद्या नंतर एका हायरार्किकल पाथचा वापर करून मिळवल्या जाऊ शकतात, जेणेकरून चाइल्ड नोड्स त्यांच्या पॅरेंट नोडच्या हॅश आणि ट्रीमधील त्यांच्या इंडेक्सचे कॉम्बिनेशन म्हणून अस्तित्वात राहू शकतील. नेमोनिक-आधारित की जनरेशनसाठी [BIP-32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) आणि [BIP-19](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) मानकांविषयी वाचा. + +या पाथ्सची रचना खालीलप्रमाणे आहे, जी हार्डवेअर वॉलेट्सशी संवाद साधलेल्या वापरकर्त्यांना परिचित असेल: + +``` +m/44'/60'/0'/0` +``` + +या पाथमधील स्लॅश प्रायव्हेट कीचे घटक खालीलप्रमाणे वेगळे करतात: + +``` +मास्टर_की / उद्देश / कॉइन_प्रकार / अकाउंट / बदल / ॲड्रेस_इंडेक्स +``` + +हे लॉजिक वापरकर्त्यांना एकाच **नेमोनिक फ्रेज**शी शक्य तितके व्हॅलिडेटर्स जोडण्यास सक्षम करते कारण ट्री रूट कॉमन असू शकतो, आणि फांद्यांवर वेगळेपण येऊ शकते. वापरकर्ता नेमोनिक फ्रेजमधून **कितीही कीज मिळवू** शकतो. + +``` + [m / 0] + / + / +[m] - [m / 1] + \ + \ + [m / 2] +``` + +प्रत्येक फांदी `/` ने वेगळी केली आहे, म्हणून `m/2` म्हणजे मास्टर कीने सुरुवात करून फांदी 2 फॉलो करणे. खालील स्केमॅटिकमध्ये, तीन विथड्रॉवल कीज स्टोअर करण्यासाठी एकाच नेमोनिक फ्रेजचा वापर केला जातो, प्रत्येकी दोन संबंधित व्हॅलिडेटर्ससोबत. + +![व्हॅलिडेटर की लॉजिक](multiple-keys.png) + +## पुढील वाचन {#further-reading} + +- [कार्ल बीखुइझेनचा इथेरियम फाउंडेशन ब्लॉग पोस्ट](https://blog.ethereum.org/2020/05/21/keys/) +- [EIP-2333 BLS12-381 की जनरेशन](https://eips.ethereum.org/EIPS/eip-2333) +- [EIP-7002: एक्झिक्युशन लेयर ट्रिगर्ड एक्झिट्स](https://web.archive.org/web/20250125035123/https://research.2077.xyz/eip-7002-unpacking-improvements-to-staking-ux-post-merge) +- [मोठ्या प्रमाणावर की मॅनेजमेंट](https://docs.ethstaker.cc/ethstaker-knowledge-base/scaled-node-operators/key-management-at-scale) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md new file mode 100644 index 00000000000..1e2b3b1f5aa --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/pos-vs-pow/index.md @@ -0,0 +1,69 @@ +--- +title: "प्रूफ-ऑफ-स्टेक विरुद्ध प्रूफ-ऑफ-वर्क" +description: "इथेरियमच्या प्रूफ-ऑफ-स्टेक आणि प्रूफ-ऑफ-वर्क आधारित सहमती यंत्रणेमधील तुलना" +lang: mr +--- + +जेव्हा इथेरियम लाँच झाले, तेव्हा इथेरियमला सुरक्षित ठेवण्यासाठी त्यावर विश्वास ठेवण्यापूर्वी प्रूफ-ऑफ-स्टेकला अजूनही खूप संशोधन आणि विकासाची आवश्यकता होती. प्रूफ-ऑफ-वर्क ही एक सोपी यंत्रणा होती जी बिटकॉइनद्वारे आधीच सिद्ध झाली होती, याचा अर्थ कोअर डेव्हलपर्स इथेरियम लाँच करण्यासाठी लगेचच तिची अंमलबजावणी करू शकत होते. प्रूफ-ऑफ-स्टेकला त्या टप्प्यापर्यंत विकसित करण्यासाठी आणखी आठ वर्षे लागली जिथे त्याची अंमलबजावणी करता येईल. + +हे पृष्ठ इथेरियमच्या प्रूफ-ऑफ-वर्कमधून प्रूफ-ऑफ-स्टेकवर स्विच करण्यामागील तर्क आणि त्यात सामील असलेले फायदे-तोटे स्पष्ट करते. + +## सुरक्षा {#security} + +इथेरियमचे संशोधक प्रूफ-ऑफ-वर्कपेक्षा प्रूफ-ऑफ-स्टेकला अधिक सुरक्षित मानतात. तथापि, हे नुकतेच खऱ्या इथेरियम मेननेटसाठी लागू केले गेले आहे आणि प्रूफ-ऑफ-वर्कपेक्षा कमी वेळ-सिद्ध आहे. खालील विभाग प्रूफ-ऑफ-वर्कच्या तुलनेत प्रूफ-ऑफ-स्टेकच्या सुरक्षा मॉडेलचे फायदे आणि तोटे यावर चर्चा करतात. + +### हल्ला करण्याची किंमत {#cost-to-attack} + +प्रूफ-ऑफ-स्टेकमध्ये, व्हॅलिडेटर्सना स्मार्ट कॉन्ट्रॅक्टमध्ये किमान 32 ETH एस्क्रो (\"स्टेक\") करणे आवश्यक आहे. इथेरियम गैरवर्तन करणाऱ्या व्हॅलिडेटर्सना शिक्षा देण्यासाठी स्टेक केलेला इथर नष्ट करू शकते. सहमतीवर येण्यासाठी, एकूण स्टेक केलेल्या इथरपैकी किमान 66% ने ब्लॉकच्या विशिष्ट संचाच्या बाजूने मतदान करणे आवश्यक आहे. स्टेकच्या >=66% द्वारे मतदान केलेले ब्लॉक्स \"अंतिम\" (finalized) बनतात, याचा अर्थ ते काढले किंवा पुनर्रचित केले जाऊ शकत नाहीत. + +नेटवर्कवर हल्ला करणे म्हणजे साखळीला अंतिम होण्यापासून रोखणे किंवा कॅनोनिकल साखळीमध्ये ब्लॉकची एक विशिष्ट संघटना सुनिश्चित करणे, ज्यामुळे आक्रमणकर्त्याला कसा तरी फायदा होतो. यासाठी आक्रमणकर्त्याला मोठ्या प्रमाणात इथर जमा करून आणि थेट त्याच्यासह मतदान करून किंवा प्रामाणिक व्हॅलिडेटर्सना विशिष्ट प्रकारे मतदान करण्यासाठी फसवून प्रामाणिक सहमतीचा मार्ग वळवावा लागतो. प्रामाणिक व्हॅलिडेटर्सना फसवणारे अत्याधुनिक, कमी-संभाव्यतेचे हल्ले वगळता, इथेरियमवर हल्ला करण्याची किंमत म्हणजे आक्रमणकर्त्याला त्यांच्या बाजूने सहमतीवर प्रभाव टाकण्यासाठी जमा कराव्या लागणाऱ्या स्टेकची किंमत. + +हल्ल्याची सर्वात कमी किंमत एकूण स्टेकच्या >33% आहे. एकूण स्टेकच्या >33% धारण करणारा आक्रमणकर्ता फक्त ऑफलाइन जाऊन अंतिम निश्चितीमध्ये (finality) विलंब घडवून आणू शकतो. नेटवर्कसाठी ही एक तुलनेने किरकोळ समस्या आहे कारण \"निष्क्रियता लीक\" (inactivity leak) नावाची एक यंत्रणा आहे जी ऑफलाइन व्हॅलिडेटर्सकडून स्टेक लीक करते, जोपर्यंत ऑनलाइन बहुमत स्टेकच्या 66% चे प्रतिनिधित्व करत नाही आणि साखळी पुन्हा अंतिम करू शकत नाही. हे सैद्धांतिकदृष्ट्या शक्य आहे की आक्रमणकर्ता एकूण स्टेकच्या 33% पेक्षा थोडे जास्त घेऊन दुहेरी अंतिम निश्चिती (double finality) घडवून आणू शकतो, जेव्हा त्यांना ब्लॉक प्रोड्यूसर बनण्यास सांगितले जाते तेव्हा एकाऐवजी दोन ब्लॉक तयार करून आणि नंतर त्यांच्या सर्व व्हॅलिडेटर्ससह दुहेरी-मतदान करून. प्रत्येक फोर्कला प्रत्येक ब्लॉक प्रथम पाहण्यासाठी उर्वरित प्रामाणिक व्हॅलिडेटर्सपैकी फक्त 50% आवश्यक असतात, म्हणून जर ते त्यांचे संदेश योग्य वेळी पाठवण्यात यशस्वी झाले, तर ते दोन्ही फोर्क अंतिम करू शकतील. याची यशस्वी होण्याची शक्यता कमी आहे, परंतु जर आक्रमणकर्ता दुहेरी-अंतिम निश्चिती (double-finality) घडवून आणू शकला, तर इथेरियम समुदायाला एका फोर्कचे अनुसरण करण्याचा निर्णय घ्यावा लागेल, ज्या प्रकरणात आक्रमणकर्त्याच्या व्हॅलिडेटर्सना दुसऱ्या फोर्कवर नक्कीच स्लॅश केले जाईल. + +एकूण स्टेकच्या >33% सह, आक्रमणकर्त्याला इथेरियम नेटवर्कवर किरकोळ (अंतिम निश्चितीमध्ये विलंब) किंवा अधिक गंभीर (दुहेरी अंतिम निश्चिती) परिणाम करण्याची संधी असते. नेटवर्कवर 14,000,000 पेक्षा जास्त ETH स्टेक केलेले असताना आणि $1000/ETH च्या प्रातिनिधिक किंमतीसह, हे हल्ले करण्यासाठी किमान खर्च `1000 x 14,000,000 x 0.33 = $4,620,000,000` आहे. आक्रमणकर्ता स्लॅशिंगद्वारे हे पैसे गमावेल आणि नेटवर्कमधून बाहेर काढला जाईल. पुन्हा हल्ला करण्यासाठी, त्यांना स्टेकच्या >33% (पुन्हा) जमा करावे लागेल आणि ते (पुन्हा) बर्न करावे लागेल. नेटवर्कवर हल्ला करण्याच्या प्रत्येक प्रयत्नाची किंमत >$4.6 अब्ज असेल ($1000/ETH आणि 14M ETH स्टेक केलेले असताना). आक्रमणकर्त्याला स्लॅश केल्यावर नेटवर्कमधून बाहेर काढले जाते, आणि त्यांना पुन्हा सामील होण्यासाठी सक्रियकरण रांगेत (activation queue) सामील व्हावे लागते. याचा अर्थ पुनरावृत्ती हल्ल्याचा दर केवळ आक्रमणकर्ता एकूण स्टेकच्या >33% जमा करू शकण्याच्या दरापुरता मर्यादित नाही, तर त्यांच्या सर्व व्हॅलिडेटर्सना नेटवर्कवर ऑनबोर्ड करण्यासाठी लागणाऱ्या वेळेवरही अवलंबून आहे. प्रत्येक वेळी आक्रमणकर्ता हल्ला करतो, तेव्हा ते अधिक गरीब होतात आणि उर्वरित समुदाय परिणामी पुरवठा धक्क्यामुळे (supply shock) श्रीमंत होतो. + +इतर हल्ले, जसे की 51% हल्ले किंवा एकूण स्टेकच्या 66% सह अंतिम निश्चिती रिव्हर्जन (finality reversion), यासाठी लक्षणीयरीत्या अधिक ETH आवश्यक आहे आणि ते आक्रमणकर्त्यासाठी खूपच महाग आहेत. + +याची प्रूफ-ऑफ-वर्कशी तुलना करा. प्रूफ-ऑफ-वर्क इथेरियमवर हल्ला करण्याची किंमत एकूण नेटवर्क हॅश रेटच्या >50% सातत्याने मालकीची असण्याची किंमत होती. यामध्ये इतर मायनर्सना सातत्याने प्रूफ-ऑफ-वर्क सोल्यूशन्सची गणना करण्यासाठी मागे टाकण्याकरिता पुरेशी संगणकीय शक्ती मिळवण्यासाठी हार्डवेअर आणि चालू खर्चाचा समावेश होता. इथेरियमचे मायनिंग मुख्यतः ASICs ऐवजी GPUs वापरून केले जात होते, ज्यामुळे खर्च कमी राहिला (जरी इथेरियम प्रूफ-ऑफ-वर्कवर राहिले असते, तर ASIC मायनिंग अधिक लोकप्रिय झाले असते). प्रूफ-ऑफ-वर्क इथेरियम नेटवर्कवर हल्ला करण्यासाठी प्रतिस्पर्ध्याला भरपूर हार्डवेअर खरेदी करावे लागेल आणि ते चालवण्यासाठी विजेचे पैसे द्यावे लागतील, परंतु एकूण खर्च हल्ला सुरू करण्यासाठी पुरेसे ETH जमा करण्यासाठी लागणाऱ्या खर्चापेक्षा कमी असेल. प्रूफ-ऑफ-स्टेकपेक्षा प्रूफ-ऑफ-वर्कवर 51% हल्ला ~[20x कमी](https://youtu.be/1m12zgJ42dI?t=1562) महाग असतो. जर हल्ला ओळखला गेला आणि त्यांच्या बदलांना काढून टाकण्यासाठी साखळी हार्ड-फोर्क केली गेली, तर आक्रमणकर्ता नवीन फोर्कवर हल्ला करण्यासाठी वारंवार तेच हार्डवेअर वापरू शकतो. + +### गुंतागुंत {#complexity} + +प्रूफ-ऑफ-स्टेक हे प्रूफ-ऑफ-वर्कपेक्षा खूपच गुंतागुंतीचे आहे. हा प्रूफ-ऑफ-वर्कच्या बाजूने एक मुद्दा असू शकतो कारण सोप्या प्रोटोकॉलमध्ये चुकून बग्स किंवा अनपेक्षित परिणाम आणणे अधिक कठीण आहे. तथापि, अनेक वर्षांच्या संशोधन आणि विकास, सिम्युलेशन आणि टेस्टनेट अंमलबजावणीद्वारे ही गुंतागुंत कमी केली गेली आहे. प्रूफ-ऑफ-स्टेक प्रोटोकॉल पाच स्वतंत्र संघांनी (एक्झिक्युशन आणि कन्सेंसस लेयर प्रत्येकावर) पाच प्रोग्रामिंग भाषांमध्ये स्वतंत्रपणे लागू केला आहे, जो क्लायंट बग्सविरुद्ध लवचिकता प्रदान करतो. + +प्रूफ-ऑफ-स्टेक सहमती लॉजिक सुरक्षितपणे विकसित आणि चाचणी करण्यासाठी, इथेरियम मेननेटवर प्रूफ-ऑफ-स्टेक लागू होण्याच्या दोन वर्षांपूर्वी बीकन चेन लाँच करण्यात आली होती. बीकन चेनने प्रूफ-ऑफ-स्टेक चाचणीसाठी सँडबॉक्स म्हणून काम केले, कारण ती एक लाइव्ह ब्लॉकचेन होती जी प्रूफ-ऑफ-स्टेक सहमती लॉजिक लागू करत होती परंतु वास्तविक इथेरियम व्यवहारांना स्पर्श न करता - प्रभावीपणे फक्त स्वतःवरच सहमतीवर येत होती. एकदा हे पुरेसा काळ स्थिर आणि बग-मुक्त झाल्यावर, बीकन चेन इथेरियम मेननेटसोबत \"विलीन\" (merged) करण्यात आली. या सर्वांनी प्रूफ-ऑफ-स्टेकची गुंतागुंत त्या टप्प्यापर्यंत कमी करण्यास हातभार लावला की अनपेक्षित परिणाम किंवा क्लायंट बग्सचा धोका खूप कमी होता. + +### हल्ल्याची शक्यता {#attack-surface} + +प्रूफ-ऑफ-स्टेक हे प्रूफ-ऑफ-वर्कपेक्षा अधिक गुंतागुंतीचे आहे, याचा अर्थ हाताळण्यासाठी अधिक संभाव्य हल्ल्याचे मार्ग (attack vectors) आहेत. क्लायंटना जोडणाऱ्या एका पीअर-टू-पीअर नेटवर्कऐवजी, दोन आहेत, प्रत्येक एक वेगळा प्रोटोकॉल लागू करतो. प्रत्येक स्लॉटमध्ये ब्लॉक प्रस्तावित करण्यासाठी एका विशिष्ट व्हॅलिडेटरची पूर्व-निवड केल्याने डिनायल-ऑफ-सर्व्हिसची शक्यता निर्माण होते जिथे मोठ्या प्रमाणात नेटवर्क ट्रॅफिक त्या विशिष्ट व्हॅलिडेटरला ऑफलाइन करते. + +आक्रमणकर्त्यांसाठी त्यांचे ब्लॉक्स किंवा साक्षांकन (attestations) सोडण्याची वेळ काळजीपूर्वक साधण्याचे मार्ग देखील आहेत जेणेकरून ते प्रामाणिक नेटवर्कच्या विशिष्ट प्रमाणात प्राप्त होतील, ज्यामुळे त्यांना विशिष्ट मार्गांनी मतदान करण्यास प्रभावित करता येईल. शेवटी, आक्रमणकर्ता फक्त स्टेक करण्यासाठी पुरेसे ETH जमा करू शकतो आणि सहमती यंत्रणेवर (consensus mechanism) वर्चस्व गाजवू शकतो. या प्रत्येक [हल्ल्याच्या मार्गांशी संबंधित संरक्षण](/developers/docs/consensus-mechanisms/pos/attack-and-defense) आहे, परंतु प्रूफ-ऑफ-वर्क अंतर्गत त्यांचे संरक्षण करण्याची गरज नसते. + +## विकेंद्रीकरण {#decentralization} + +प्रूफ-ऑफ-स्टेक हे प्रूफ-ऑफ-वर्कपेक्षा अधिक विकेंद्रित आहे कारण मायनिंग हार्डवेअरच्या शस्त्रास्त्र शर्यतीमुळे व्यक्ती आणि लहान संस्थांना बाहेर पडावे लागते. कोणीही तांत्रिकदृष्ट्या माफक हार्डवेअरसह मायनिंग सुरू करू शकत असले तरी, संस्थात्मक मायनिंग ऑपरेशन्सच्या तुलनेत त्यांना कोणतेही बक्षीस मिळण्याची शक्यता नगण्य आहे. प्रूफ-ऑफ-स्टेकसह, स्टेक‍िंगचा खर्च आणि त्या स्टेकवरील परताव्याची टक्केवारी प्रत्येकासाठी समान आहे. सध्या व्हॅलिडेटर चालवण्यासाठी 32 ETH खर्च येतो. + +दुसरीकडे, लिक्विड स्टेक‍िंग डेरिव्हेटिव्ह्जच्या शोधाने केंद्रीकरणाची चिंता निर्माण केली आहे कारण काही मोठे प्रदाते मोठ्या प्रमाणात स्टेक केलेले ETH व्यवस्थापित करतात. ही एक समस्या आहे आणि ती शक्य तितक्या लवकर दुरुस्त करणे आवश्यक आहे, परंतु ती दिसते त्यापेक्षा अधिक सूक्ष्म आहे. केंद्रीकृत स्टेक‍िंग प्रदात्यांचे व्हॅलिडेटर्सवर नेहमीच केंद्रीकृत नियंत्रण नसते - अनेकदा हा ETH चा एक केंद्रीय पूल तयार करण्याचा एक मार्ग असतो जिथे अनेक स्वतंत्र नोड ऑपरेटर प्रत्येक सहभागीला स्वतःचे 32 ETH आवश्यक न ठेवता स्टेक करू शकतात. + +इथेरियमसाठी सर्वोत्तम पर्याय म्हणजे व्हॅलिडेटर्स घरगुती संगणकांवर स्थानिकरित्या चालवणे, ज्यामुळे विकेंद्रीकरण जास्तीत जास्त होते. यामुळेच इथेरियम नोड/व्हॅलिडेटर चालवण्यासाठी हार्डवेअर आवश्यकता वाढवणाऱ्या बदलांना विरोध करते. + +## टिकावूपणा {#sustainability} + +प्रूफ-ऑफ-स्टेक हा ब्लॉकचेन सुरक्षित करण्याचा कमी कार्बन-उत्सर्जन करणारा मार्ग आहे. प्रूफ-ऑफ-वर्क अंतर्गत मायनर्स ब्लॉक माईन करण्याच्या हक्कासाठी स्पर्धा करतात. जेव्हा मायनर्स जलद गतीने गणना करू शकतात तेव्हा ते अधिक यशस्वी होतात, ज्यामुळे हार्डवेअर आणि ऊर्जा वापरामध्ये गुंतवणुकीला प्रोत्साहन मिळते. हे इथेरियमने प्रूफ-ऑफ-स्टेकवर स्विच करण्यापूर्वी पाहिले गेले. प्रूफ-ऑफ-स्टेकमध्ये संक्रमण होण्यापूर्वी, इथेरियम अंदाजे 78 TWh/yr वापरत होते - जे एका लहान देशाएवढे आहे. तथापि, प्रूफ-ऑफ-स्टेकवर स्विच केल्याने हा ऊर्जा खर्च ~99.98% ने कमी झाला. प्रूफ-ऑफ-स्टेकने इथेरियमला एक ऊर्जा-कार्यक्षम, कमी कार्बन उत्सर्जन करणारे प्लॅटफॉर्म बनवले. + +[इथेरियमच्या ऊर्जा वापराविषयी अधिक](/energy-consumption) + +## जारी करणे {#issuance} + +प्रूफ-ऑफ-स्टेक इथेरियम त्याच्या सुरक्षेसाठी प्रूफ-ऑफ-वर्क इथेरियमपेक्षा खूप कमी कॉइन्स जारी करून पैसे देऊ शकते कारण व्हॅलिडेटर्सना उच्च वीज खर्च भरावा लागत नाही. परिणामी, जेव्हा मोठ्या प्रमाणात ETH बर्न केले जातात तेव्हा ETH त्याची चलनवाढ कमी करू शकते किंवा डिफ्लेशनरी ( चलनघट ) देखील होऊ शकते. कमी चलनवाढ पातळीचा अर्थ असा आहे की इथेरियमची सुरक्षा प्रूफ-ऑफ-वर्क अंतर्गत होती त्यापेक्षा स्वस्त आहे. + +## तुम्ही पाहून शिकणारे आहात का? {#visual-learner} + +पहा जस्टिन ड्रेक प्रूफ-ऑफ-वर्कपेक्षा प्रूफ-ऑफ-स्टेकचे फायदे स्पष्ट करत आहेत: + + + +## पुढील वाचन {#further-reading} + +- [विटालिकचे प्रूफ-ऑफ-स्टेक डिझाइन तत्वज्ञान](https://medium.com/@VitalikButerin/a-proof-of-stake-design-philosophy-506585978d51) +- [विटालिकचे प्रूफ-ऑफ-स्टेक FAQs](https://vitalik.eth.limo/general/2017/12/31/pos_faq.html#what-is-proof-of-stake) +- [\"सोप्या भाषेत स्पष्ट केलेले\" pos विरुद्ध pow वरील व्हिडिओ](https://www.youtube.com/watch?v=M3EFi_POhps) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md new file mode 100644 index 00000000000..d6ea072c3d4 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/rewards-and-penalties/index.md @@ -0,0 +1,91 @@ +--- +title: "प्रूफ-ऑफ-स्टेक बक्षिसे आणि दंड" +description: "प्रूफ-ऑफ-स्टेक Ethereum मधील प्रोटोकॉलमधील प्रोत्साहनांबद्दल जाणून घ्या." +lang: mr +--- + +Ethereum त्याच्या मूळ क्रिप्टोकरन्सी, ईथर (ETH) वापरून सुरक्षित केले आहे. नोड ऑपरेटर्स जे ब्लॉक्स प्रमाणित करण्यात आणि चेनच्या हेडची ओळख पटवण्यात सहभागी होऊ इच्छितात, ते Ethereum वरील [डिपॉझिट कॉन्ट्रॅक्ट](/staking/deposit-contract/) मध्ये ईथर जमा करतात. त्यांना नंतर व्हॅलिडेटर सॉफ्टवेअर चालवण्यासाठी ईथरमध्ये पैसे दिले जातात, जे पिअर-टू-पिअर नेटवर्कवर मिळालेल्या नवीन ब्लॉक्सची वैधता तपासते आणि चेनच्या हेडची ओळख पटवण्यासाठी फोर्क-चॉइस अल्गोरिदम लागू करते. + +व्हॅलिडेटरसाठी दोन प्राथमिक भूमिका आहेत: १) नवीन ब्लॉक्स तपासणे आणि ते वैध असल्यास त्यांना “साक्षांकित करणे”, २) एकूण व्हॅलिडेटर पूलमधून यादृच्छिकपणे निवडल्यावर नवीन ब्लॉक्स प्रस्तावित करणे. जर व्हॅलिडेटर विचारले असता यापैकी कोणतेही कार्य करण्यास अयशस्वी ठरले, तर ते ईथर पेआउट चुकवतात. व्हॅलिडेटर्सना काहीवेळा सिग्नेचर एग्रीगेशन आणि सिंक कमिटीमध्ये सहभागी होण्याचे कामही दिले जाते. + +अशा काही कृती देखील आहेत ज्या चुकून करणे खूप कठीण आहे आणि त्या काही दुर्भावनापूर्ण हेतू दर्शवतात, जसे की एकाच स्लॉटसाठी अनेक ब्लॉक्स प्रस्तावित करणे किंवा एकाच स्लॉटसाठी अनेक ब्लॉक्सना साक्षांकित करणे. हे “स्लॅशेबल” वर्तन आहेत ज्यामुळे व्हॅलिडेटरला नेटवर्कमधून काढून टाकण्यापूर्वी काही प्रमाणात ईथर (1 ETH पर्यंत) बर्न केले जाते, ज्याला 36 दिवस लागतात. स्लॅश केलेल्या व्हॅलिडेटरचा ईथर एक्झिट कालावधीत हळूहळू कमी होत जातो, परंतु 18 व्या दिवशी त्यांना “कोरिलेशन पेनल्टी” मिळते, जी त्याच वेळी अधिक व्हॅलिडेटर्सना स्लॅश केल्यावर मोठी असते. म्हणूनच कन्सेन्सस मेकॅनिझमची प्रोत्साहन रचना प्रामाणिकपणासाठी पैसे देते आणि वाईट कलाकारांना शिक्षा देते. + +सर्व बक्षिसे आणि दंड प्रत्येक इपॉकमध्ये एकदा लागू केले जातात. + +अधिक माहितीसाठी पुढे वाचा... + +## बक्षिसे आणि दंड {#rewards} + +### पुरस्कार {#rewards} + +जेव्हा व्हॅलिडेटर्स बहुसंख्य इतर व्हॅलिडेटर्सशी सुसंगत मते देतात, ब्लॉक्स प्रस्तावित करतात, आणि सिंक कमिटीमध्ये सहभागी होतात, तेव्हा त्यांना बक्षिसे मिळतात. प्रत्येक इपॉकमधील बक्षिसांचे मूल्य `base_reward` वरून मोजले जाते. हे मूळ एकक आहे ज्यावरून इतर बक्षिसे मोजली जातात. `base_reward` हे प्रति इपॉक इष्टतम परिस्थितीत एका व्हॅलिडेटरला मिळालेले सरासरी बक्षीस दर्शवते. हे व्हॅलिडेटरच्या प्रभावी बॅलन्स आणि सक्रिय व्हॅलिडेटर्सच्या एकूण संख्येवरून खालीलप्रमाणे मोजले जाते: + +``` +base_reward = effective_balance * (base_reward_factor / (base_rewards_per_epoch * sqrt(sum(active_balance)))) +``` + +जिथे `base_reward_factor` 64 आहे, `base_rewards_per_epoch` 4 आहे आणि `sum(active balance)` सर्व सक्रिय व्हॅलिडेटर्समधील एकूण स्टेक केलेला ईथर आहे. + +याचा अर्थ असा की बेस रिवॉर्ड व्हॅलिडेटरच्या प्रभावी बॅलन्सच्या प्रमाणात आहे आणि नेटवर्कवरील व्हॅलिडेटर्सच्या संख्येच्या व्यस्त प्रमाणात आहे. व्हॅलिडेटर्स जितके जास्त, तितके एकूण इश्युअन्स जास्त (`sqrt(N)` प्रमाणे) पण प्रति व्हॅलिडेटर `base_reward` तितका लहान (`1/sqrt(N)` प्रमाणे). हे घटक स्टेकिंग नोडसाठी APR ला प्रभावित करतात. [विटालिकच्या नोट्स](https://notes.ethereum.org/@vbuterin/rkhCgQteN?type=view#Base-rewards) मध्ये यामागील तर्क वाचा. + +एकूण बक्षीस नंतर पाच घटकांच्या बेरजेनुसार मोजले जाते, ज्यापैकी प्रत्येकाचे एक वेटिंग असते जे ठरवते की प्रत्येक घटक एकूण बक्षिसामध्ये किती भर घालतो. हे घटक आहेत: + +``` +१. सोर्स व्होट: व्हॅलिडेटरने योग्य सोर्स चेकपॉइंटसाठी वेळेवर मत दिले आहे +२. टार्गेट व्होट: व्हॅलिडेटरने योग्य टार्गेट चेकपॉइंटसाठी वेळेवर मत दिले आहे +३. हेड व्होट: व्हॅलिडेटरने योग्य हेड ब्लॉकसाठी वेळेवर मत दिले आहे +४. सिंक कमिटी रिवॉर्ड: व्हॅलिडेटरने सिंक कमिटीमध्ये भाग घेतला आहे +५. प्रपोजर रिवॉर्ड: व्हॅलिडेटरने योग्य स्लॉटमध्ये ब्लॉक प्रस्तावित केला आहे +``` + +प्रत्येक घटकासाठी वेटिंग खालीलप्रमाणे आहेत: + +``` +TIMELY_SOURCE_WEIGHT uint64(14) +TIMELY_TARGET_WEIGHT uint64(26) +TIMELY_HEAD_WEIGHT uint64(14) +SYNC_REWARD_WEIGHT uint64(2) +PROPOSER_WEIGHT uint64(8) +``` + +या वजनांची बेरीज 64 आहे. लागू होणाऱ्या वजनांची बेरीज 64 ने भागून बक्षीस मोजले जाते. एखादा व्हॅलिडेटर ज्याने वेळेवर सोर्स, टार्गेट आणि हेड व्होट्स दिले आहेत, ब्लॉक प्रस्तावित केला आहे आणि सिंक कमिटीमध्ये भाग घेतला आहे, त्याला `64/64 * base_reward == base_reward` मिळू शकते. तथापि, एक व्हॅलिडेटर सहसा ब्लॉक प्रपोजर नसतो, त्यामुळे त्याचे जास्तीत जास्त बक्षीस `64-8 /64 * base_reward == 7/8 * base_reward` आहे. जे व्हॅलिडेटर ब्लॉक प्रपोजर किंवा सिंक कमिटीमध्ये नाहीत, ते `64-8-2 / 64 * base_reward == 6.75/8 * base_reward` मिळवू शकतात. + +जलद साक्षांकनांना प्रोत्साहन देण्यासाठी अतिरिक्त बक्षीस जोडले जाते. हे `inclusion_delay_reward` आहे. याचे मूल्य `base_reward` ला `1/delay` ने गुणल्यावर येणाऱ्या मूल्याच्या बरोबरीचे असते, जिथे `delay` म्हणजे ब्लॉक प्रस्ताव आणि साक्षांकन यांना वेगळे करणाऱ्या स्लॉट्सची संख्या आहे. उदाहरणार्थ, जर साक्षांकन ब्लॉक प्रस्तावाच्या एका स्लॉटमध्ये सादर केले गेले, तर साक्षांकित करणाऱ्याला `base_reward * 1/1 == base_reward` मिळते. जर साक्षांकन पुढील स्लॉटमध्ये आले, तर साक्षांकित करणाऱ्याला `base_reward * 1/2` मिळते आणि असेच पुढे. + +ब्लॉक प्रस्तावक ब्लॉकमध्ये समाविष्ट **प्रत्येक वैध साक्षांकनासाठी** `8 / 64 * base_reward` प्राप्त करतात, त्यामुळे बक्षिसाचे वास्तविक मूल्य साक्षांकित करणाऱ्या व्हॅलिडेटर्सच्या संख्येनुसार स्केल होते. ब्लॉक प्रस्तावक त्यांच्या प्रस्तावित ब्लॉकमध्ये इतर व्हॅलिडेटर्सच्या गैरवर्तनाचा पुरावा समाविष्ट करून आपले बक्षीस वाढवू शकतात. ही बक्षिसे व्हॅलिडेटरच्या प्रामाणिकपणाला प्रोत्साहन देणारे “गाजर” आहेत. स्लॅशिंगचा समावेश करणाऱ्या ब्लॉक प्रस्तावकला `slashed_validators_effective_balance / 512` बक्षीस दिले जाईल. + +### दंड {#penalties} + +आतापर्यंत आपण उत्तम वर्तन करणाऱ्या व्हॅलिडेटर्सचा विचार केला आहे, पण जे व्हॅलिडेटर्स वेळेवर हेड, सोर्स आणि टार्गेट मते देत नाहीत किंवा हळू देतात त्यांचे काय? + +टार्गेट आणि सोर्स मते चुकवल्याबद्दलचा दंड, साक्षांकित करणाऱ्याने ते सादर केल्यास त्याला मिळणाऱ्या बक्षिसांच्या बरोबरीचा असतो. याचा अर्थ असा की त्यांच्या बॅलन्समध्ये बक्षीस जोडण्याऐवजी, त्यांच्या बॅलन्समधून समान मूल्य काढून टाकले जाते. हेड व्होट चुकवल्याबद्दल कोणताही दंड नाही (म्हणजे, हेड व्होट्सना फक्त बक्षीस दिले जाते, कधीही दंड आकारला जात नाही). `inclusion_delay` सोबत कोणताही दंड जोडलेला नाही - बक्षीस फक्त व्हॅलिडेटरच्या बॅलन्समध्ये जोडले जाणार नाही. ब्लॉक प्रस्तावित करण्यात अयशस्वी झाल्यास कोणताही दंड नाही. + +[कन्सेन्सस स्पेक्स](https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md) मध्ये बक्षिसे आणि दंडांबद्दल अधिक वाचा. बेलॅट्रिक्स अपग्रेडमध्ये बक्षिसे आणि दंड समायोजित केले गेले - [Peep an EIP व्हिडिओ](https://www.youtube.com/watch?v=iaAEGs1DMgQ) मध्ये यावर डॅनी रायन आणि विटालिक यांची चर्चा पहा. + +## स्लॅशिंग {#slashing} + +स्लॅशिंग ही एक अधिक गंभीर कृती आहे ज्यामुळे एका व्हॅलिडेटरला नेटवर्कमधून जबरदस्तीने काढून टाकले जाते आणि त्यांच्या स्टेक केलेल्या ईथरचे संबंधित नुकसान होते. एका व्हॅलिडेटरला स्लॅश करण्याचे तीन मार्ग आहेत, जे सर्व म्हणजे ब्लॉक्सचे अप्रामाणिक प्रस्ताव किंवा साक्षांकन: + +- एकाच स्लॉटसाठी दोन वेगळे ब्लॉक्स प्रस्तावित करणे आणि त्यावर सही करणे +- एका ब्लॉकला साक्षांकित करून जो दुसऱ्या ब्लॉकला “सराउंड” करतो (प्रभावीपणे इतिहास बदलतो) +- एकाच ब्लॉकसाठी दोन उमेदवारांना साक्षांकित करून “डबल व्होटिंग” करणे + +जर या कृती शोधल्या गेल्या, तर व्हॅलिडेटरला स्लॅश केले जाते. याचा अर्थ असा की 32 ETH व्हॅलिडेटरसाठी 0.0078125 तात्काळ बर्न केले जाते (सक्रिय बॅलन्ससह रेषीय प्रमाणात), त्यानंतर 36 दिवसांचा काढण्याचा कालावधी सुरू होतो. या काढण्याच्या कालावधीत व्हॅलिडेटरचा स्टेक हळूहळू कमी होत जातो. मध्यभागी (18 व्या दिवशी) एक अतिरिक्त दंड लागू केला जातो, ज्याची तीव्रता स्लॅशिंग घटनेच्या 36 दिवस आधी सर्व स्लॅश केलेल्या व्हॅलिडेटर्सच्या एकूण स्टेक केलेल्या ईथरनुसार स्केल होते. याचा अर्थ असा की जेव्हा अधिक व्हॅलिडेटर्सना स्लॅश केले जाते, तेव्हा स्लॅशची तीव्रता वाढते. जास्तीत जास्त स्लॅश म्हणजे सर्व स्लॅश केलेल्या व्हॅलिडेटर्सचा पूर्ण प्रभावी बॅलन्स (म्हणजे, जर बरेच व्हॅलिडेटर्स स्लॅश होत असतील तर ते आपला संपूर्ण स्टेक गमावू शकतात). दुसरीकडे, एकच, वेगळी स्लॅशिंग घटना व्हॅलिडेटरच्या स्टेकचा फक्त एक लहान भाग बर्न करते. हा मध्यबिंदू दंड जो स्लॅश केलेल्या व्हॅलिडेटर्सच्या संख्येनुसार स्केल होतो, त्याला “कोरिलेशन पेनल्टी” म्हणतात. + +## निष्क्रियता गळती {#inactivity-leak} + +जर कन्सेन्सस लेअर चारपेक्षा जास्त इपॉक्ससाठी फायनलाइज झाले नाही, तर “निष्क्रियता गळती” नावाचा एक आपत्कालीन प्रोटोकॉल सक्रिय केला जातो. निष्क्रियता गळतीचे अंतिम उद्दिष्ट चेनला फायनलिटी परत मिळवण्यासाठी आवश्यक परिस्थिती निर्माण करणे आहे. वर स्पष्ट केल्याप्रमाणे, फायनलिटीसाठी एकूण स्टेक केलेल्या ईथरपैकी 2/3 बहुमताची सोर्स आणि टार्गेट चेकपॉइंट्सवर सहमत होण्याची आवश्यकता असते. जर एकूण व्हॅलिडेटर्सपैकी 1/3 पेक्षा जास्त व्हॅलिडेटर्स ऑफलाइन गेले किंवा योग्य साक्षांकन सादर करण्यात अयशस्वी झाले, तर 2/3 सुपरमेजोरिटीसाठी चेकपॉइंट्स फायनलाइज करणे शक्य नसते. निष्क्रियता गळतीमुळे निष्क्रिय व्हॅलिडेटर्सचा स्टेक हळूहळू कमी होत जातो जोपर्यंत ते एकूण स्टेकच्या 1/3 पेक्षा कमी नियंत्रित करत नाहीत, ज्यामुळे उर्वरित सक्रिय व्हॅलिडेटर्स चेन फायनलाइज करू शकतात. निष्क्रिय व्हॅलिडेटर्सचा पूल कितीही मोठा असला तरी, उर्वरित सक्रिय व्हॅलिडेटर्स अखेरीस >2/3 स्टेक नियंत्रित करतील. स्टेकचे नुकसान हे निष्क्रिय व्हॅलिडेटर्सना शक्य तितक्या लवकर पुन्हा सक्रिय होण्यासाठी एक मजबूत प्रोत्साहन आहे! मेडाला टेस्टनेटवर निष्क्रियता गळतीची परिस्थिती आली होती, जेव्हा < 66% सक्रिय व्हॅलिडेटर्स ब्लॉकचेनच्या सध्याच्या हेडवर सहमतीवर येऊ शकले नव्हते. निष्क्रियता गळती सक्रिय झाली आणि अखेरीस फायनलिटी पुन्हा मिळवली गेली! + +कन्सेन्सस मेकॅनिझमची बक्षीस, दंड आणि स्लॅशिंगची रचना वैयक्तिक व्हॅलिडेटर्सना योग्यरित्या वागण्यासाठी प्रोत्साहित करते. तथापि, या डिझाइन निवडींमधून एक अशी प्रणाली उदयास येते जी अनेक क्लायंट्समध्ये व्हॅलिडेटर्सच्या समान वितरणाला जोरदारपणे प्रोत्साहित करते, आणि एकल-क्लायंट वर्चस्वाला जोरदारपणे परावृत्त करते. + +## पुढील वाचन {#further-reading} + +- [Ethereum अपग्रेड करणे: प्रोत्साहन लेअर](https://eth2book.info/altair/part2/incentives) +- [Ethereum च्या हायब्रीड कॅस्पर प्रोटोकॉलमधील प्रोत्साहन](https://arxiv.org/pdf/1903.04205.pdf) +- [विटालिकचे भाष्य केलेले स्पेक](https://github.com/ethereum/annotated-spec/blob/master/phase0/beacon-chain.md#rewards-and-penalties-1) +- [Eth2 स्लॅशिंग प्रतिबंधक टिप्स](https://medium.com/prysmatic-labs/eth2-slashing-prevention-tips-f6faa5025f50) +- [EIP-7251 अंतर्गत स्लॅशिंग दंडांचे विश्लेषण](https://ethresear.ch/t/slashing-penalty-analysis-eip-7251/16509) + +_स्रोत_ + +- _[https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/](https://benjaminion.xyz/eth2-annotated-spec/phase0/beacon-chain/)_ diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md new file mode 100644 index 00000000000..e3fb74e410c --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/weak-subjectivity/index.md @@ -0,0 +1,39 @@ +--- +title: "अशक्त व्यक्तिनिष्ठता" +description: "अशक्त व्यक्तिनिष्ठता आणि PoS इथेरियममधील तिच्या भूमिकेचे स्पष्टीकरण." +lang: mr +--- + +ब्लॉकचेनमध्ये व्यक्तिनिष्ठता म्हणजे सद्य स्थितीवर सहमत होण्यासाठी सामाजिक माहितीवर अवलंबून राहणे. नेटवर्कवरील इतर पिअर्सकडून गोळा केलेल्या माहितीनुसार निवडले जाणारे अनेक वैध फोर्क असू शकतात. याउलट वस्तुनिष्ठता आहे, जी अशा चेन्सना संदर्भित करते जिथे फक्त एकच संभाव्य वैध चेन असते ज्यावर सर्व नोड्स त्यांचे कोडेड नियम लागू करून सहमत होतील. तिसरी स्थिती देखील आहे, जी अशक्त व्यक्तिनिष्ठता म्हणून ओळखली जाते. हे अशा चेनला संदर्भित करते जी सामाजिकरित्या काही सुरुवातीची माहिती प्राप्त झाल्यानंतर वस्तुनिष्ठपणे प्रगती करू शकते. + +## पूर्वतयारी {#prerequisites} + +हे पान समजून घेण्यासाठी, प्रथम [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) च्या मूलभूत गोष्टी समजून घेणे आवश्यक आहे. + +## अशक्त व्यक्तिनिष्ठता कोणत्या समस्या सोडवते? {#problems-ws-solves} + +प्रूफ-ऑफ-स्टेक ब्लॉकचेनमध्ये व्यक्तिनिष्ठता अंतर्भूत आहे कारण अनेक फोर्कमधून योग्य चेन निवडणे हे ऐतिहासिक मतांची मोजणी करून केले जाते. हे ब्लॉकचेनला अनेक हल्ल्यांच्या मार्गांवर आणते, ज्यात लांब पल्ल्याच्या हल्ल्यांचा समावेश आहे, ज्यामध्ये चेनमध्ये खूप लवकर सहभागी झालेले नोड्स एक पर्यायी फोर्क तयार करतात जो ते नंतर स्वतःच्या फायद्यासाठी रिलीज करतात. वैकल्पिकरित्या, जर 33% व्हॅलिडेटर्सनी त्यांचा स्टेक काढून घेतला पण तरीही साक्षांकन आणि ब्लॉक्स तयार करणे सुरू ठेवले, तर ते एक पर्यायी फोर्क तयार करू शकतात जो कॅनॉनिकल चेनशी संघर्ष करतो. नवीन नोड्स किंवा जे नोड्स बऱ्याच काळापासून ऑफलाइन आहेत, त्यांना हे माहीत नसेल की या आक्रमण करणाऱ्या व्हॅलिडेटर्सनी त्यांचे फंड काढून घेतले आहेत, त्यामुळे आक्रमणकर्ते त्यांना चुकीच्या चेनचे अनुसरण करण्यास फसवू शकतात. इथेरियम या हल्ल्यांचे मार्ग सोडवू शकते, ते अशा मर्यादा घालून जे यंत्रणेच्या व्यक्तिनिष्ठ पैलूंना—आणि त्यामुळे विश्वासाच्या गृहितकांना—किमान पातळीवर कमी करतात. + +## अशक्त व्यक्तिनिष्ठता चेकपॉईंट्स {#ws-checkpoints} + +प्रूफ-ऑफ-स्टेक इथेरियममध्ये "अशक्त व्यक्तिनिष्ठता चेकपॉईंट्स" वापरून अशक्त व्यक्तिनिष्ठता लागू केली जाते. हे स्टेट रूट्स आहेत ज्यावर नेटवर्कवरील सर्व नोड्स सहमत आहेत की ते कॅनॉनिकल चेनमध्ये आहेत. ते जेनेसिस ब्लॉक्स सारखेच "सार्वत्रिक सत्य" उद्दिष्ट पूर्ण करतात, फक्त ते ब्लॉकचेनमध्ये जेनेसिस स्थितीत नसतात. फोर्क निवड अल्गोरिदम विश्वास ठेवतो की त्या चेकपॉईंटमध्ये परिभाषित ब्लॉकचेन स्थिती योग्य आहे आणि ते त्या बिंदूपासून पुढे चेन स्वतंत्रपणे आणि वस्तुनिष्ठपणे सत्यापित करते. चेकपॉईंट्स "रिव्हर्ट मर्यादा" म्हणून काम करतात कारण अशक्त-व्यक्तिनिष्ठता चेकपॉईंट्सच्या आधी असलेले ब्लॉक्स बदलले जाऊ शकत नाहीत. हे लांब पल्ल्याचे हल्ले कमी करते, कारण या यंत्रणेच्या डिझाइनचा भाग म्हणून लांब पल्ल्याच्या फोर्कला अवैध म्हणून परिभाषित केले जाते. अशक्त व्यक्तिनिष्ठता चेकपॉईंट्स व्हॅलिडेटर पैसे काढण्याच्या कालावधीपेक्षा कमी अंतराने विभक्त आहेत याची खात्री केल्याने हे निश्चित होते की चेन फोर्क करणार्‍या व्हॅलिडेटरला त्यांचा स्टेक काढण्यापूर्वी किमान काही मर्यादित रक्कम स्लॅश केली जाते आणि नवीन प्रवेशकर्त्यांना ज्या व्हॅलिडेटर्सनी स्टेक काढला आहे त्यांच्याकडून चुकीच्या फोर्कमध्ये फसवले जाऊ शकत नाही. + +## अशक्त व्यक्तिनिष्ठता चेकपॉईंट्स आणि अंतिम ब्लॉक्समधील फरक {#difference-between-ws-and-finalized-blocks} + +अंतिम ब्लॉक्स आणि अशक्त व्यक्तिनिष्ठता चेकपॉईंट्सना इथेरियम नोड्सकडून वेगळी वागणूक दिली जाते. जर एखाद्या नोडला दोन प्रतिस्पर्धी अंतिम ब्लॉक्सबद्दल माहिती झाली, तर तो त्या दोन्हींमध्ये विभागला जातो - कॅनॉनिकल फोर्क कोणता आहे हे स्वयंचलितपणे ओळखण्याचा त्याच्याकडे कोणताही मार्ग नसतो. हे कन्सेंसस अयशस्वी झाल्याचे लक्षण आहे. याउलट, नोड त्याच्या अशक्त व्यक्तिनिष्ठता चेकपॉईंटशी संघर्ष करणारा कोणताही ब्लॉक नाकारतो. नोडच्या दृष्टिकोनातून, अशक्त व्यक्तिनिष्ठता चेकपॉईंट एक परिपूर्ण सत्य दर्शवते जे त्याच्या पिअर्सकडून मिळालेल्या नवीन ज्ञानाने कमी केले जाऊ शकत नाही. + +## किती अशक्त? {#how-weak-is-weak} + +इथेरियमच्या प्रूफ-ऑफ-स्टेकचा व्यक्तिनिष्ठ पैलू म्हणजे सिंक करण्यासाठी विश्वसनीय स्त्रोताकडून अलीकडील स्थितीची (अशक्त व्यक्तिनिष्ठता चेकपॉईंट) आवश्यकता. खराब अशक्त व्यक्तिनिष्ठता चेकपॉईंट मिळण्याचा धोका खूप कमी आहे कारण ते ब्लॉक एक्सप्लोरर किंवा अनेक नोड्ससारख्या अनेक स्वतंत्र सार्वजनिक स्त्रोतांवर तपासले जाऊ शकतात. तथापि, कोणतेही सॉफ्टवेअर ॲप्लिकेशन चालवण्यासाठी नेहमीच काही प्रमाणात विश्वासाची आवश्यकता असते, उदाहरणार्थ, सॉफ्टवेअर डेव्हलपर्सनी प्रामाणिक सॉफ्टवेअर तयार केले आहे यावर विश्वास ठेवणे. + +एक अशक्त व्यक्तिनिष्ठता चेकपॉईंट क्लायंट सॉफ्टवेअरचा भाग म्हणून देखील येऊ शकतो. वादग्रस्तपणे, एक आक्रमणकर्ता सॉफ्टवेअरमधील चेकपॉईंटमध्ये फेरफार करू शकतो आणि तितक्याच सहजपणे सॉफ्टवेअरमध्येच फेरफार करू शकतो. या समस्येवर कोणताही खरा क्रिप्टो-इकॉनॉमिक मार्ग नाही, परंतु इथेरियममध्ये अविश्वसनीय डेव्हलपर्सचा प्रभाव कमी केला जातो कारण त्यात अनेक स्वतंत्र क्लायंट टीम्स आहेत, प्रत्येक टीम वेगवेगळ्या भाषांमध्ये समकक्ष सॉफ्टवेअर तयार करत आहे, आणि सर्वांचा एक प्रामाणिक चेन राखण्यात रस आहे. ब्लॉक एक्सप्लोरर अशक्त व्यक्तिनिष्ठता चेकपॉईंट्स किंवा इतर कोठूनतरी मिळवलेले चेकपॉईंट्स एका अतिरिक्त स्त्रोतासह क्रॉस-रेफरन्स करण्याचा मार्ग देखील प्रदान करू शकतात. + +शेवटी, चेकपॉईंट्स इतर नोड्सकडून मागवले जाऊ शकतात; कदाचित दुसरा इथेरियम वापरकर्ता जो पूर्ण नोड चालवतो, तो एक चेकपॉईंट प्रदान करू शकतो जो व्हॅलिडेटर्स नंतर ब्लॉक एक्सप्लोररच्या डेटासह सत्यापित करू शकतात. एकंदरीत, अशक्त व्यक्तिनिष्ठता चेकपॉईंटच्या प्रदात्यावर विश्वास ठेवणे हे क्लायंट डेव्हलपर्सवर विश्वास ठेवण्याइतकेच समस्याप्रधान मानले जाऊ शकते. एकूण आवश्यक विश्वास कमी आहे. हे लक्षात घेणे महत्त्वाचे आहे की हे विचार केवळ अशा अत्यंत अशक्य घटनेत महत्त्वाचे ठरतात, जेव्हा बहुसंख्य व्हॅलिडेटर्स ब्लॉकचेनचा पर्यायी फोर्क तयार करण्याचा कट रचतात. इतर कोणत्याही परिस्थितीत, निवडण्यासाठी फक्त एकच इथेरियम चेन असते. + +## अधिक वाचन {#further-reading} + +- [Eth2 मध्ये अशक्त व्यक्तिनिष्ठता](https://notes.ethereum.org/@adiasg/weak-subjectvity-eth2) +- [विटालिक: मी अशक्त व्यक्तिनिष्ठतेवर प्रेम करायला कसे शिकलो](https://blog.ethereum.org/2014/11/25/proof-stake-learned-love-weak-subjectivity/) +- [अशक्त व्यक्तिनिष्ठता (Teku डॉक्स)](https://docs.teku.consensys.io/concepts/weak-subjectivity) +- [फेज-0 अशक्त व्यक्तिनिष्ठता मार्गदर्शक](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/weak-subjectivity.md) +- [इथेरियम 2.0 मधील अशक्त व्यक्तिनिष्ठतेचे विश्लेषण](https://github.com/runtimeverification/beacon-chain-verification/blob/master/weak-subjectivity/weak-subjectivity-analysis.pdf) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md new file mode 100644 index 00000000000..838f2617aff --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pos/withdrawal-credentials/index.md @@ -0,0 +1,64 @@ +--- +title: "विथड्रॉवल क्रेडेन्शियल्स" +description: "व्हॅलिडेटर विथड्रॉवल क्रेडेंशियलच्या प्रकारांचे (0x00, 0x01, 0x02) स्पष्टीकरण आणि Ethereum स्टेकर्सवर होणारे त्यांचे परिणाम." +lang: mr +--- + +प्रत्येक व्हॅलिडेटरकडे एक **विथड्रॉवल क्रेडेंशियल** असते, जे ठरवते की त्यांचे स्टेक केलेले ETH आणि रिवॉर्ड्स कसे आणि कोठून काढले जाऊ शकतात. क्रेडेंशियलचा प्रकार पहिल्या बाइटद्वारे दर्शविला जातो: `0x00`, `0x01`, किंवा `0x02`. त्यांचे स्टेक व्यवस्थापित करणाऱ्या व्हॅलिडेटर्ससाठी हे प्रकार समजून घेणे महत्त्वाचे आहे. + +## 0x00: Shapella-पूर्व क्रेडेंशियल्स {#0x00-credentials} + +`0x00` प्रकार हा Shapella अपग्रेडच्या (एप्रिल २०२३) आधीचा मूळ विथड्रॉवल क्रेडेंशियल फॉरमॅट आहे. या प्रकारच्या क्रेडेंशियल असलेल्या व्हॅलिडेटर्सचा कोणताही एक्झिक्यूशन लेयर विथड्रॉवल ॲड्रेस सेट केलेला नसतो, याचा अर्थ त्यांचे फंड्स कन्सेन्सस लेयरवर लॉक राहतात. जर तुमच्याकडे अजूनही `0x00` क्रेडेंशियल्स असतील, तर तुम्हाला कोणतेही विथड्रॉवल मिळवण्यापूर्वी `0x01` किंवा `0x02` मध्ये अपग्रेड करणे आवश्यक आहे. + +## 0x01: लेगसी विथड्रॉवल क्रेडेंशियल्स {#0x01-credentials} + +`0x01` प्रकार Shapella अपग्रेडसोबत सादर करण्यात आला आणि ज्या व्हॅलिडेटर्सना एक्झिक्यूशन लेयर विथड्रॉवल ॲड्रेस सेट करायचा होता त्यांच्यासाठी हे मानक बनले. `0x01` क्रेडेंशियल्ससह: + +- 32 ETH पेक्षा जास्त असलेली कोणतीही शिल्लक तुमच्या विथड्रॉवल ॲड्रेसवर **आपोआप पाठवली जाते** +- पूर्ण एक्झिट मानक एक्झिट रांगेतून जातात +- 32 ETH पेक्षा जास्त रिवॉर्ड्स कंपाऊंड होऊ शकत नाहीत—ते नियमितपणे काढले जातात + +**काही व्हॅलिडेटर्स अजूनही 0x01 का वापरतात:** हे सोपे आणि परिचित आहे. अनेक व्हॅलिडेटर्सनी Shapella नंतर डिपॉझिट केले आहे आणि त्यांच्याकडे आधीपासूनच हा प्रकार आहे, आणि ज्यांना अतिरिक्त शिलकीचे आपोआप विथड्रॉवल हवे आहे त्यांच्यासाठी ते ठीक काम करते. + +**याची शिफारस का केली जात नाही:** `0x01` सह, तुम्ही 32 ETH पेक्षा जास्त रिवॉर्ड्स कंपाऊंड करण्याची क्षमता गमावता. प्रत्येक अतिरिक्त भाग आपोआप काढला जातो, ज्यामुळे तुमच्या व्हॅलिडेटरची कमाईची क्षमता मर्यादित होते आणि काढलेल्या फंड्सचे स्वतंत्रपणे व्यवस्थापन करणे आवश्यक ठरते. + +## 0x02: कंपाऊंडिंग विथड्रॉवल क्रेडेंशियल्स {#0x02-credentials} + +`0x02` प्रकार Pectra अपग्रेडसोबत सादर करण्यात आला आणि आज व्हॅलिडेटर्ससाठी हा **शिफारस केलेला पर्याय** आहे. `0x02` क्रेडेंशियल्स असलेल्या व्हॅलिडेटर्सना कधीकधी "कंपाऊंडिंग व्हॅलिडेटर्स" म्हटले जाते. + +`0x02` क्रेडेंशियल्ससह: + +- 32 ETH पेक्षा जास्त रिवॉर्ड्स 2048 ETH च्या कमाल प्रभावी शिलकीपर्यंत 1 ETH च्या वाढीमध्ये **कंपाऊंड** होतात. +- आंशिक विथड्रॉवलची मॅन्युअली विनंती करणे आवश्यक आहे (2048 ETH च्या मर्यादेपेक्षा जास्त झाल्यावरच आपोआप स्वीप्स होतात) +- व्हॅलिडेटर्स अनेक 32 ETH व्हॅलिडेटर्सना एकाच उच्च-शिलकीच्या व्हॅलिडेटरमध्ये एकत्रित करू शकतात. +- पूर्ण एक्झिट अजूनही मानक एक्झिट रांगेद्वारे समर्थित आहेत + +आंशिक विथड्रॉवल आणि एकत्रीकरण दोन्ही [Launchpad Validator Actions](https://launchpad.ethereum.org/en/validator-actions) द्वारे केले जाऊ शकतात. + +**व्हॅलिडेटर्सनी 0x02 ला प्राधान्य का द्यावे:** हे कंपाऊंडिंगद्वारे उत्तम भांडवली कार्यक्षमता प्रदान करते, विथड्रॉवल कधी होतात यावर अधिक नियंत्रण देते आणि व्हॅलिडेटर एकत्रीकरणास समर्थन देते. जे सोलो स्टेकर्स कालांतराने रिवॉर्ड्स जमा करतात, त्यांच्यासाठी याचा अर्थ असा की त्यांची प्रभावी शिल्लक—आणि त्यामुळे त्यांचे रिवॉर्ड्स—मॅन्युअल हस्तक्षेपाशिवाय 32 ETH च्या पुढे वाढू शकतात. + +**महत्त्वाचे:** एकदा तुम्ही `0x01` मधून `0x02` मध्ये रूपांतरित केल्यावर, तुम्ही परत येऊ शकत नाही. + +टाइप 2 क्रेडेंशियल्समध्ये रूपांतरित करण्याच्या आणि MaxEB वैशिष्ट्याच्या तपशीलवार मार्गदर्शकासाठी, [MaxEB स्पष्टीकरण पृष्ठ](/roadmap/pectra/maxeb/) पहा. + +## मी काय निवडावे? {#what-should-i-pick} + +- **नवीन व्हॅलिडेटर्स:** `0x02` निवडा. हे उत्तम कंपाऊंडिंग आणि लवचिकतेसह आधुनिक मानक आहे. +- **विद्यमान 0x01 व्हॅलिडेटर्स:** जर तुम्हाला 32 ETH पेक्षा जास्त रिवॉर्ड्स कंपाऊंड करायचे असतील किंवा व्हॅलिडेटर्स एकत्रित करण्याची योजना असेल तर `0x02` मध्ये रूपांतरित करण्याचा विचार करा. +- **विद्यमान 0x00 व्हॅलिडेटर्स:** त्वरित अपग्रेड करा—तुम्ही तुमचे क्रेडेंशियल्स अद्ययावत केल्याशिवाय विथड्रॉ करू शकत नाही. तुम्हाला आधी `0x01` मध्ये रूपांतरित करावे लागेल, मग तुम्ही `0x02` मध्ये रूपांतरित करू शकता. + +## विथड्रॉवल क्रेडेंशियल्स व्यवस्थापित करण्यासाठी टूल्स {#withdrawal-credential-tools} + +क्रेडेंशियल प्रकारांमध्ये निवड करण्यासाठी किंवा रूपांतरित करण्यासाठी अनेक टूल्स समर्थन देतात: + +- **[Ethereum Staking Launchpad](https://launchpad.ethereum.org/en/validator-actions)** - डिपॉझिट आणि व्हॅलिडेटर व्यवस्थापनासाठी अधिकृत टूल, ज्यामध्ये क्रेडेंशियल रूपांतरण आणि एकत्रीकरण समाविष्ट आहे. +- **[Pectra Staking Manager](https://pectrastaking.com)** - रूपांतरण आणि एकत्रीकरणासाठी वॉलेट-कनेक्ट समर्थनासह वेब UI +- **[Pectra Validator Ops CLI Tool](https://github.com/Luganodes/Pectra-Batch-Contract)** - बॅच रूपांतरणासाठी कमांड-लाइन टूल +- **[Ethereal](https://github.com/wealdtech/ethereal)** - Ethereum ऑपरेशन्ससाठी CLI टूल, व्हॅलिडेटर व्यवस्थापनासह + +एकत्रीकरण टूल्सची संपूर्ण यादी आणि तपशीलवार रूपांतरण सूचनांसाठी, [MaxEB एकत्रीकरण टूलिंग](/roadmap/pectra/maxeb/#consolidation-tooling) पहा. + +## पुढील वाचन {#further-reading} + +- [प्रूफ-ऑफ-स्टेक Ethereum मधील कीज](/developers/docs/consensus-mechanisms/pos/keys/) - व्हॅलिडेटर कीज आणि त्या विथड्रॉवल क्रेडेंशियल्सशी कशा संबंधित आहेत याबद्दल जाणून घ्या. +- [MaxEB](/roadmap/pectra/maxeb/) - Pectra अपग्रेड आणि कमाल प्रभावी शिल्लक वैशिष्ट्यावर तपशीलवार मार्गदर्शक. diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/index.md new file mode 100644 index 00000000000..8ce57c7098d --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/index.md @@ -0,0 +1,114 @@ +--- +title: "प्रूफ-ऑफ-वर्क (PoW)" +description: "प्रूफ-ऑफ-वर्क एकमत प्रोटोकॉलचे स्पष्टीकरण आणि Ethereum मधील त्याची भूमिका." +lang: mr +--- + +Ethereum नेटवर्कने **[प्रूफ-ऑफ-वर्क (PoW)](/developers/docs/consensus-mechanisms/pow)** समाविष्ट असलेल्या एकमत यंत्रणेचा वापर करून सुरुवात केली. यामुळे Ethereum नेटवर्कच्या नोड्सना Ethereum ब्लॉकचेनवर रेकॉर्ड केलेल्या सर्व माहितीच्या स्थितीवर सहमत होण्यास आणि विशिष्ट प्रकारचे आर्थिक हल्ले रोखण्यास मदत झाली. तथापि, Ethereum ने 2022 मध्ये प्रूफ-ऑफ-वर्क बंद केले आणि त्याऐवजी [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) वापरण्यास सुरुवात केली. + + + + + + प्रूफ-ऑफ-वर्क आता नापसंत झाले आहे. Ethereum आता त्याच्या एकमत यंत्रणेचा भाग म्हणून प्रूफ-ऑफ-वर्क वापरत नाही. त्याऐवजी, ते प्रूफ-ऑफ-स्टेक वापरते. [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) आणि [स्टेकिंग](/staking/) वर अधिक वाचा. + + + + +## पूर्वतयारी {#prerequisites} + +हे पान अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/), आणि [consensus mechanisms](/developers/docs/consensus-mechanisms/) बद्दल वाचा. + +## प्रूफ-ऑफ-वर्क (PoW) म्हणजे काय? {#what-is-pow} + +नाकामोटो एकमत, जे प्रूफ-ऑफ-वर्कचा उपयोग करते, ही ती यंत्रणा आहे जिने एकेकाळी विकेंद्रित Ethereum नेटवर्कला खाते शिल्लक आणि व्यवहारांचा क्रम यासारख्या गोष्टींवर एकमतापर्यंत पोहोचण्याची (म्हणजे, सर्व नोड्स सहमत) परवानगी दिली. यामुळे वापरकर्त्यांना त्यांचे कॉइन्स "डबल स्पेंड" करण्यापासून रोखले गेले आणि Ethereum चेनवर हल्ला करणे किंवा त्यात फेरफार करणे खूप कठीण होईल हे सुनिश्चित केले गेले. हे सुरक्षा गुणधर्म आता [Gasper](/developers/docs/consensus-mechanisms/pos/gasper/) म्हणून ओळखल्या जाणार्‍या एकमत यंत्रणेचा वापर करून प्रूफ-ऑफ-स्टेककडून येतात. + +## प्रूफ-ऑफ-वर्क आणि मायनिंग {#pow-and-mining} + +प्रूफ-ऑफ-वर्क हा मूळ अल्गोरिदम आहे जो प्रूफ-ऑफ-वर्क ब्लॉकचेनवर मायनर्स करत असलेल्या कामासाठी अडचण आणि नियम सेट करतो. मायनिंग हेच खरे "काम" आहे. चेनमध्ये वैध ब्लॉक्स जोडण्याची ही क्रिया आहे. हे महत्त्वाचे आहे कारण चेनची लांबी नेटवर्कला ब्लॉकचेनच्या योग्य फोर्कचे अनुसरण करण्यास मदत करते. जितके जास्त "काम" केले जाईल, तितकी चेन लांब होईल आणि ब्लॉक क्रमांक जितका जास्त असेल, तितके नेटवर्क सद्यस्थितीबद्दल अधिक निश्चित होऊ शकते. + +[मायनिंगवर अधिक](/developers/docs/consensus-mechanisms/pow/mining/) + +## Ethereum चे प्रूफ-ऑफ-वर्क कसे काम करत होते? {#how-it-works} + +Ethereum व्यवहारांवर ब्लॉक्समध्ये प्रक्रिया केली जाते. आता नापसंत झालेल्या प्रूफ-ऑफ-वर्क Ethereum मध्ये, प्रत्येक ब्लॉकमध्ये हे समाविष्ट होते: + +- ब्लॉकची अडचण – उदाहरणार्थ: 3,324,092,183,262,715 +- मिक्सहॅश – उदाहरणार्थ: `0x44bca881b07a6a09f83b130798072441705d9a665c5ac8bdf2f39a3cdf3bee29` +- नॉन्स – उदाहरणार्थ: `0xd3ee432b4fb3d26b` + +हा ब्लॉक डेटा थेट प्रूफ-ऑफ-वर्कशी संबंधित होता. + +### प्रूफ-ऑफ-वर्क मधील काम {#the-work} + +प्रूफ-ऑफ-वर्क प्रोटोकॉल, Ethash, नुसार मायनर्सना ब्लॉकसाठी नॉन्स शोधण्याकरिता प्रयत्न आणि त्रुटीच्या तीव्र शर्यतीतून जावे लागत होते. केवळ वैध नॉन्स असलेले ब्लॉक्स चेनमध्ये जोडले जाऊ शकत होते. + +ब्लॉक तयार करण्याच्या शर्यतीत असताना, एक मायनर वारंवार एका डेटासेटला (जो केवळ संपूर्ण चेन डाउनलोड करून आणि चालवून मिळवता येतो, जसे एक मायनर करतो) गणितीय फंक्शनमधून चालवत असे. डेटासेटचा वापर ब्लॉकच्या अडचणीनुसार ठरवलेल्या लक्ष्यापेक्षा कमी असलेला मिक्सहॅश निर्माण करण्यासाठी केला जात असे. हे करण्याचा सर्वोत्तम मार्ग म्हणजे प्रयत्न आणि त्रुटी. + +अडचणीमुळे हॅशसाठी लक्ष्य निर्धारित केले जात असे. लक्ष्य जितके कमी, वैध हॅशचा संच तितकाच लहान. एकदा तयार झाल्यावर, इतर मायनर्स आणि क्लायंट्ससाठी याची पडताळणी करणे खूप सोपे होते. जरी एक व्यवहार बदलला तरी, हॅश पूर्णपणे वेगळा होईल, जो फसवणुकीचा संकेत देतो. + +हॅशिंगमुळे फसवणूक शोधणे सोपे होते. पण एक प्रक्रिया म्हणून प्रूफ-ऑफ-वर्क चेनवर हल्ला करण्यापासून एक मोठा प्रतिबंधक देखील होता. + +### प्रूफ-ऑफ-वर्क आणि सुरक्षा {#security} + +मुख्य Ethereum चेनवर हे काम करण्यासाठी मायनर्सना प्रोत्साहन दिले जात असे. मायनर्सच्या उपसमूहाला त्यांची स्वतःची चेन सुरू करण्यासाठी फार कमी प्रोत्साहन होते—कारण ते प्रणालीला कमकुवत करते. ब्लॉकचेन सत्याचा स्रोत म्हणून एकाच स्थितीवर अवलंबून असतात. + +प्रूफ-ऑफ-वर्कचा उद्देश चेन वाढवणे हा होता. सर्वात लांब चेन वैध म्हणून सर्वात विश्वासार्ह होती कारण ती निर्माण करण्यासाठी सर्वात जास्त संगणकीय काम केले गेले होते. Ethereum च्या PoW प्रणालीमध्ये, व्यवहार मिटवणारे, बनावट व्यवहार करणारे नवीन ब्लॉक्स तयार करणे किंवा दुसरी चेन राखणे जवळजवळ अशक्य होते. कारण एका दुर्भावनापूर्ण मायनरला नेहमीच ब्लॉक नॉन्स इतर सर्वांपेक्षा वेगाने सोडवावे लागले असते. + +सातत्याने दुर्भावनापूर्ण तरीही वैध ब्लॉक्स तयार करण्यासाठी, एका दुर्भावनापूर्ण मायनरला इतर सर्वांना हरवण्यासाठी नेटवर्कच्या ५१% पेक्षा जास्त मायनिंग शक्तीची गरज भासली असती. त्या प्रमाणात "काम" करण्यासाठी खूप महाग संगणकीय शक्तीची आवश्यकता असते आणि खर्च झालेली ऊर्जा हल्ल्यात मिळालेल्या फायद्यांपेक्षा जास्त असू शकते. + +### प्रूफ-ऑफ-वर्क अर्थशास्त्र {#economics} + +प्रूफ-ऑफ-वर्क प्रणालीमध्ये नवीन चलन जारी करण्यासाठी आणि मायनर्सना काम करण्यासाठी प्रोत्साहन देण्यासाठी देखील जबाबदार होते. + +[कॉन्स्टँटिनोपल अपग्रेड](/ethereum-forks/#constantinople) पासून, यशस्वीरित्या ब्लॉक तयार करणाऱ्या मायनर्सना दोन नव्याने तयार केलेले ETH आणि व्यवहार शुल्काचा काही भाग बक्षीस म्हणून मिळत असे. ओमर ब्लॉक्सना देखील 1.75 ETH भरपाई मिळत असे. ओमर ब्लॉक्स हे वैध ब्लॉक्स होते जे एका मायनरने त्याच वेळी तयार केले होते ज्यावेळी दुसऱ्या मायनरने कॅनोनिकल ब्लॉक तयार केला, जे शेवटी कोणत्या चेनवर प्रथम बांधकाम झाले यावरून ठरवले गेले. ओमर ब्लॉक्स सहसा नेटवर्क लेटन्सीमुळे घडत. + +## अंतिमता {#finality} + +जेव्हा एखादा व्यवहार अशा ब्लॉकचा भाग असतो जो बदलू शकत नाही, तेव्हा त्याला Ethereum वर "अंतिमता" प्राप्त होते. + +कारण मायनर्स विकेंद्रित पद्धतीने काम करत होते, त्यामुळे एकाच वेळी दोन वैध ब्लॉक्स माइन केले जाऊ शकत होते. यामुळे एक तात्पुरता फोर्क तयार होतो. अखेरीस, यापैकी एक चेन नंतरचे ब्लॉक्स माइन करून त्यात जोडल्यानंतर आणि ती लांब झाल्यानंतर स्वीकृत चेन बनली. + +गोष्टी अधिक गुंतागुंतीच्या करण्यासाठी, तात्पुरत्या फोर्कवर नाकारलेले व्यवहार कदाचित स्वीकृत चेनमध्ये समाविष्ट केले गेले नसतील. याचा अर्थ ते उलटले जाऊ शकते. म्हणून अंतिमता म्हणजे व्यवहार अपरिवर्तनीय मानण्यापूर्वी तुम्ही प्रतीक्षा करावी लागणारी वेळ. पूर्वीच्या प्रूफ-ऑफ-वर्क Ethereum अंतर्गत, विशिष्ट ब्लॉक `N` वर जितके अधिक ब्लॉक्स माइन केले जातील, तितका `N` मधील व्यवहार यशस्वी झाल्याचा आणि ते उलटवले जाणार नाहीत याचा आत्मविश्वास जास्त असे. आता, प्रूफ-ऑफ-स्टेकसह, अंतिम स्वरूप देणे हे ब्लॉकचे संभाव्यतेऐवजी एक स्पष्ट गुणधर्म आहे. + +## प्रूफ-ऑफ-वर्क ऊर्जा-वापर {#energy} + +नेटवर्क सुरक्षित ठेवण्यासाठी आवश्यक असलेल्या ऊर्जेचे प्रमाण ही प्रूफ-ऑफ-वर्कवरील एक मोठी टीका आहे. सुरक्षा आणि विकेंद्रीकरण टिकवून ठेवण्यासाठी, प्रूफ-ऑफ-वर्कवरील Ethereum मोठ्या प्रमाणात ऊर्जा वापरत असे. प्रूफ-ऑफ-स्टेकवर स्विच करण्याच्या काही काळ आधी, Ethereum मायनर्स एकत्रितपणे सुमारे 70 TWh/वर्ष ऊर्जा वापरत होते (18-जुलै-2022 रोजी [digiconomist](https://digiconomist.net/) नुसार, हे चेक प्रजासत्ताकच्या वापराइतके आहे). + +## फायदे आणि तोटे {#pros-and-cons} + +| फायदे | बाधक | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| प्रूफ-ऑफ-वर्क तटस्थ आहे. सुरुवात करण्यासाठी तुम्हाला ETH ची गरज नाही आणि ब्लॉक रिवॉर्ड्स तुम्हाला 0ETH पासून सकारात्मक शिलकीपर्यंत जाण्याची परवानगी देतात. [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) मध्ये तुम्हाला सुरुवात करण्यासाठी ETH ची गरज आहे. | प्रूफ-ऑफ-वर्क इतकी ऊर्जा वापरते की ते पर्यावरणासाठी वाईट आहे. | +| प्रूफ-ऑफ-वर्क ही एक प्रयत्न केलेली आणि चाचणी केलेली एकमत यंत्रणा आहे जिने Bitcoin आणि Ethereum ला अनेक वर्षे सुरक्षित आणि विकेंद्रित ठेवले आहे. | तुम्हाला माइनिंग करायचे असल्यास, तुम्हाला अशा विशेष उपकरणांची आवश्यकता आहे की सुरुवात करण्यासाठी ही एक मोठी गुंतवणूक ठरते. | +| प्रूफ-ऑफ-स्टेकच्या तुलनेत ते अंमलात आणणे तुलनेने सोपे आहे. | वाढत्या संगणकीय आवश्यकतेमुळे, मायनिंग पूल्स संभाव्यतः मायनिंग गेमवर वर्चस्व गाजवू शकतात, ज्यामुळे केंद्रीकरण आणि सुरक्षेचे धोके निर्माण होतात. | + +## प्रूफ-ऑफ-स्टेकच्या तुलनेत {#compared-to-pos} + +उच्च स्तरावर, प्रूफ-ऑफ-स्टेकचे अंतिम ध्येय प्रूफ-ऑफ-वर्क सारखेच आहे: विकेंद्रित नेटवर्कला सुरक्षितपणे एकमतापर्यंत पोहोचण्यास मदत करणे. परंतु प्रक्रिया आणि कर्मचार्‍यांमध्ये काही फरक आहेत: + +- प्रूफ-ऑफ-स्टेक संगणकीय शक्तीचे महत्त्व स्टेक केलेल्या ETH ने बदलते. +- प्रूफ-ऑफ-स्टेक मायनर्सची जागा व्हॅलिडेटर्स घेतात. व्हॅलिडेटर्स नवीन ब्लॉक्स तयार करण्याची क्षमता सक्रिय करण्यासाठी त्यांचे ETH स्टेक करतात. +- व्हॅलिडेटर्स ब्लॉक्स तयार करण्यासाठी स्पर्धा करत नाहीत, त्याऐवजी त्यांना एका अल्गोरिदमद्वारे यादृच्छिकपणे निवडले जाते. +- अंतिमता अधिक स्पष्ट आहे: विशिष्ट चेकपॉइंट्सवर, जर 2/3 व्हॅलिडेटर्स ब्लॉकच्या स्थितीवर सहमत असतील तर तो अंतिम मानला जातो. व्हॅलिडेटर्सना यावर त्यांचे संपूर्ण स्टेक लावावे लागते, त्यामुळे जर त्यांनी नंतर संगनमत करण्याचा प्रयत्न केला, तर ते त्यांचे संपूर्ण स्टेक गमावतील. + +[प्रूफ-ऑफ-स्टेकवर अधिक](/developers/docs/consensus-mechanisms/pos/) + +## तुम्ही पाहून शिकणारे आहात का? {#visual-learner} + + + +## अधिक वाचन {#further-reading} + +- [बहुमताचा हल्ला](https://en.bitcoin.it/wiki/Majority_attack) +- [सेटलमेंटच्या अंतिमातेवर](https://blog.ethereum.org/2016/05/09/on-settlement-finality/) + +### व्हिडिओ {#videos} + +- [प्रूफ-ऑफ-वर्क प्रोटोकॉलचे तांत्रिक स्पष्टीकरण](https://youtu.be/9V1bipPkCTU) + +## संबंधित विषय {#related-topics} + +- [मायनिंग](/developers/docs/consensus-mechanisms/pow/mining/) +- [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) +- [प्रूफ-ऑफ-अथॉरिटी](/developers/docs/consensus-mechanisms/poa/) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/index.md new file mode 100644 index 00000000000..c24b5008920 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/index.md @@ -0,0 +1,86 @@ +--- +title: "मायनिंग" +description: "इथेरियमवर मायनिंग कसे कार्य करते याचे स्पष्टीकरण." +lang: mr +--- + + + + + +प्रूफ-ऑफ-वर्क आता इथेरियमच्या एकमत यंत्रणेचा आधार नाही, याचा अर्थ मायनिंग बंद करण्यात आले आहे. त्याऐवजी, इथेरियम ETH स्टेक करणाऱ्या व्हॅलिडेटर्सद्वारे सुरक्षित आहे. तुम्ही आजच तुमचे ETH स्टेक करणे सुरू करू शकता. द मर्ज, प्रूफ-ऑफ-स्टेक, आणि स्टॅकिंग यावर अधिक वाचा. हे पान केवळ ऐतिहासिक माहितीसाठी आहे. + + + + +## पूर्वतयारी {#prerequisites} + +हे पान अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [transactions](/developers/docs/transactions/), [blocks](/developers/docs/blocks/) आणि [proof-of-work](/developers/docs/consensus-mechanisms/pow/) याबद्दल वाचा. + +## इथेरियम मायनिंग म्हणजे काय? {#what-is-ethereum-mining} + +इथेरियमच्या आता कालबाह्य झालेल्या प्रूफ-ऑफ-वर्क आर्किटेक्चरमध्ये इथेरियम ब्लॉकचेनमध्ये जोडण्यासाठी व्यवहारांचा ब्लॉक तयार करण्याची प्रक्रिया म्हणजे मायनिंग. + +मायनिंग हा शब्द क्रिप्टोकरन्सीसाठी सोन्याच्या साधर्म्याच्या संदर्भात उद्भवला आहे. सोने किंवा मौल्यवान धातू दुर्मिळ आहेत, तसेच डिजिटल टोकन देखील दुर्मिळ आहेत, आणि प्रूफ-ऑफ-वर्क प्रणालीमध्ये एकूण व्हॉल्यूम वाढवण्याचा एकमेव मार्ग म्हणजे मायनिंग. प्रूफ-ऑफ-वर्क इथेरियममध्ये, जारी करण्याचा एकमेव मार्ग मायनिंगद्वारे होता. तथापि, सोने किंवा मौल्यवान धातूंच्या विपरीत, इथेरियम मायनिंग हे ब्लॉकचेनमध्ये ब्लॉक तयार करून, सत्यापित करून, प्रकाशित करून आणि प्रसारित करून नेटवर्क सुरक्षित करण्याचा मार्ग होता. + +इथर मायनिंग = नेटवर्क सुरक्षित करणे + +कोणत्याही प्रूफ-ऑफ-वर्क ब्लॉकचेनचा मायनिंग हा जीवनप्रवाह आहे. इथेरियम मायनर्स - सॉफ्टवेअर चालवणारे संगणक - प्रूफ-ऑफ-स्टेकवर संक्रमणापूर्वी व्यवहारांवर प्रक्रिया करण्यासाठी आणि ब्लॉक तयार करण्यासाठी त्यांचा वेळ आणि संगणकीय शक्ती वापरत होते. + +## मायनर्स का अस्तित्वात आहेत? {#why-do-miners-exist} + +इथेरियमसारख्या विकेंद्रित प्रणालींमध्ये, व्यवहारांच्या क्रमावर प्रत्येकजण सहमत आहे याची खात्री करणे आवश्यक आहे. मायनर्सने ब्लॉक तयार करण्यासाठी संगणकीयदृष्ट्या कठीण कोडी सोडवून हे घडवून आणण्यास मदत केली, ज्यामुळे नेटवर्क हल्ल्यांपासून सुरक्षित राहिले. + +[प्रूफ-ऑफ-वर्कबद्दल अधिक](/developers/docs/consensus-mechanisms/pow/) + +पूर्वी कोणीही आपल्या संगणकाचा वापर करून इथेरियम नेटवर्कवर मायनिंग करू शकत होते. तथापि, प्रत्येकजण फायदेशीरपणे इथर (ETH) माइन करू शकत नव्हते. बऱ्याच प्रकरणांमध्ये, मायनर्सना समर्पित संगणक हार्डवेअर खरेदी करावे लागत होते आणि स्वस्त उर्जा स्त्रोतांमध्ये प्रवेश मिळवावा लागत होता. मायनिंगच्या संबंधित खर्चाची भरपाई करण्यासाठी सरासरी संगणकाला पुरेसे ब्लॉक रिवॉर्ड मिळण्याची शक्यता कमी होती. + +### मायनिंगचा खर्च {#cost-of-mining} + +- मायनिंग रिग तयार करण्यासाठी आणि देखरेखीसाठी आवश्यक हार्डवेअरचा संभाव्य खर्च +- मायनिंग रिगला वीज पुरवण्याचा खर्च +- जर तुम्ही पूलमध्ये मायनिंग करत असाल, तर हे पूल्स सामान्यतः पूलद्वारे तयार केलेल्या प्रत्येक ब्लॉकवर एक निश्चित % शुल्क आकारतात +- मायनिंग रिगला समर्थन देण्यासाठी उपकरणांचा संभाव्य खर्च (वायुवीजन, ऊर्जा देखरेख, विद्युत वायरिंग, इ.) + +मायनिंगच्या नफाक्षमतेबद्दल अधिक जाणून घेण्यासाठी, [Etherscan](https://etherscan.io/ether-mining-calculator) द्वारे प्रदान केलेल्या मायनिंग कॅल्क्युलेटरचा वापर करा. + +## इथेरियम व्यवहार कसे माइन केले गेले {#how-ethereum-transactions-were-mined} + +खालील माहिती इथेरियम प्रूफ-ऑफ-वर्कमध्ये व्यवहार कसे माइन केले जात होते याचा आढावा देते. इथेरियम प्रूफ-ऑफ-स्टेकसाठी या प्रक्रियेचे साधर्म्य असलेले वर्णन [येथे](/developers/docs/consensus-mechanisms/pos/#transaction-execution-ethereum-pos) आढळू शकते. + +1. एक वापरकर्ता काही [खात्याच्या](/developers/docs/accounts/) खासगी की सह [व्यवहार](/developers/docs/transactions/) विनंती लिहितो आणि त्यावर सही करतो. +2. वापरकर्ता काही [नोडवरून](/developers/docs/nodes-and-clients/) संपूर्ण इथेरियम नेटवर्कवर व्यवहार विनंती प्रसारित करतो. +3. नवीन व्यवहार विनंतीबद्दल ऐकल्यावर, इथेरियम नेटवर्कमधील प्रत्येक नोड ती विनंती त्यांच्या स्थानिक मेमपूलमध्ये जोडतो, जी अशा सर्व व्यवहार विनंत्यांची यादी आहे ज्यांच्याबद्दल त्यांनी ऐकले आहे परंतु अद्याप ब्लॉकचेनमध्ये एका ब्लॉकमध्ये समाविष्ट केल्या गेल्या नाहीत. +4. एका क्षणी, एक मायनिंग नोड अनेक डझन किंवा शंभर व्यवहार विनंत्या एका संभाव्य [ब्लॉकमध्ये](/developers/docs/blocks/) एकत्र करतो, अशा प्रकारे की ब्लॉक गॅस मर्यादेच्या आत राहून ते कमावत असलेले [व्यवहार शुल्क](/developers/docs/gas/) जास्तीत जास्त होईल. त्यानंतर मायनिंग नोड: + 1. प्रत्येक व्यवहार विनंतीच्या वैधतेची पडताळणी करते (उदा., कोणीही अशा खात्यातून इथर हस्तांतरित करण्याचा प्रयत्न करत नाही ज्यासाठी त्यांनी स्वाक्षरी तयार केलेली नाही, विनंती सदोष नाही, इ.), आणि नंतर विनंतीचा कोड कार्यान्वित करते, ज्यामुळे त्यांच्या EVM च्या स्थानिक प्रतीची स्थिती बदलते. मायनर अशा प्रत्येक व्यवहार विनंतीसाठीचे व्यवहार शुल्क स्वतःच्या खात्यात जमा करतो. + 2. ब्लॉकमधील सर्व व्यवहार विनंत्या स्थानिक EVM प्रतीवर सत्यापित आणि कार्यान्वित झाल्यावर, संभाव्य ब्लॉकसाठी प्रूफ-ऑफ-वर्क “वैधतेचे प्रमाणपत्र” तयार करण्याची प्रक्रिया सुरू करते. +5. अखेरीस, एक मायनर एका ब्लॉकसाठी प्रमाणपत्र तयार करणे पूर्ण करेल ज्यात आपली विशिष्ट व्यवहार विनंती समाविष्ट आहे. त्यानंतर मायनर पूर्ण झालेला ब्लॉक प्रसारित करतो, ज्यात प्रमाणपत्र आणि दाव्या केलेल्या नवीन EVM स्थितीचा चेकसम समाविष्ट असतो. +6. इतर नोड्स नवीन ब्लॉकबद्दल ऐकतात. ते प्रमाणपत्राची पडताळणी करतात, ब्लॉकवरील सर्व व्यवहार स्वतः कार्यान्वित करतात (आपल्या वापरकर्त्याने मूळतः प्रसारित केलेला व्यवहार धरून), आणि सर्व व्यवहार कार्यान्वित झाल्यानंतर त्यांच्या नवीन EVM स्थितीचा चेकसम मायनरच्या ब्लॉकने दावा केलेल्या स्थितीच्या चेकसमशी जुळतो याची पडताळणी करतात. केवळ तेव्हाच हे नोड्स हा ब्लॉक त्यांच्या ब्लॉकचेनच्या शेवटी जोडतात आणि नवीन EVM स्थितीला कॅनॉनिकल स्थिती म्हणून स्वीकारतात. +7. प्रत्येक नोड नवीन ब्लॉकमधील सर्व व्यवहार त्यांच्या अपूर्ण व्यवहार विनंत्यांच्या स्थानिक मेमपूलमधून काढून टाकतो. +8. नेटवर्कमध्ये सामील होणारे नवीन नोड्स क्रमाने सर्व ब्लॉक डाउनलोड करतात, ज्यात आपल्या आवडीचा व्यवहार असलेला ब्लॉक समाविष्ट आहे. ते स्थानिक EVM प्रतीची सुरुवात करतात (जी रिक्त-स्थिती EVM म्हणून सुरू होते), आणि नंतर त्यांच्या स्थानिक EVM प्रतीवर प्रत्येक ब्लॉकमधील प्रत्येक व्यवहार कार्यान्वित करण्याच्या प्रक्रियेतून जातात, आणि मार्गातील प्रत्येक ब्लॉकवर स्थिती चेकसमची पडताळणी करतात. + +प्रत्येक व्यवहार एकदाच माइन केला जातो (नवीन ब्लॉकमध्ये समाविष्ट केला जातो आणि पहिल्यांदा प्रसारित केला जातो), परंतु कॅनॉनिकल EVM स्थिती पुढे नेण्याच्या प्रक्रियेत प्रत्येक सहभागीद्वारे तो कार्यान्वित आणि सत्यापित केला जातो. हे ब्लॉकचेनच्या केंद्रीय मंत्रांपैकी एक अधोरेखित करते: **विश्वास ठेवू नका, पडताळणी करा**. + +## ओमर (अंकल) ब्लॉक्स {#ommer-blocks} + +प्रूफ-ऑफ-वर्कवर ब्लॉक मायनिंग संभाव्य होते, म्हणजे कधीकधी नेटवर्क लेटन्सीमुळे दोन वैध ब्लॉक एकाच वेळी प्रकाशित होत असत. या प्रकरणात, प्रोटोकॉलला प्रस्तावित केलेल्या, समाविष्ट न केलेल्या वैध ब्लॉकला अंशतः पुरस्कृत करून मायनर्सप्रती निष्पक्षता सुनिश्चित करताना सर्वात लांब (आणि म्हणून सर्वात "वैध") साखळी निश्चित करावी लागत होती. यामुळे नेटवर्कच्या अधिक विकेंद्रीकरणाला प्रोत्साहन मिळाले कारण लहान मायनर्स, ज्यांना जास्त लेटन्सीचा सामना करावा लागू शकतो, ते [ओमर](/glossary/#ommer) ब्लॉक रिवॉर्ड्सद्वारे परतावा मिळवू शकत होते. + +"ओमर" हा शब्द पॅरेंट ब्लॉकच्या भावंडासाठी पसंतीचा लिंग-तटस्थ शब्द आहे, परंतु याला कधीकधी "अंकल" असेही संबोधले जाते. **इथेरियमच्या प्रूफ-ऑफ-स्टेककडे जाण्यापासून, ओमर ब्लॉक आता माइन केले जात नाहीत** कारण प्रत्येक स्लॉटमध्ये फक्त एकच प्रस्तावक निवडला जातो. माइन केलेल्या ओमर ब्लॉक्सचा [ऐतिहासिक चार्ट](https://ycharts.com/indicators/ethereum_uncle_rate) पाहून तुम्ही हा बदल पाहू शकता. + +## एक दृश्यात्मक डेमो {#a-visual-demo} + +ऑस्टिन तुम्हाला मायनिंग आणि प्रूफ-ऑफ-वर्क ब्लॉकचेनबद्दल माहिती देत असताना पहा. + + + +## मायनिंग अल्गोरिदम {#mining-algorithm} + +इथेरियम मेननेटने फक्त एकच मायनिंग अल्गोरिदम वापरला - ['इथॅश'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/). इथॅश हा मूळ R&D अल्गोरिदमचा उत्तराधिकारी होता, जो ['डॅगर-हाशिमोटो'](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/) म्हणून ओळखला जातो. + +[मायनिंग अल्गोरिदमबद्दल अधिक](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/). + +## संबंधित विषय {#related-topics} + +- [गॅस](/developers/docs/gas/) +- [EVM](/developers/docs/evm/) +- [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md new file mode 100644 index 00000000000..d9931ed70c1 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto/index.md @@ -0,0 +1,329 @@ +--- +title: Dagger-Hashimoto +description: "Dagger-Hashimoto अल्गोरिदमचा एक सविस्तर आढावा." +lang: mr +--- + +Dagger-Hashimoto हे इथेरियमच्या मायनिंग अल्गोरिदमसाठी मूळ संशोधन अंमलबजावणी आणि विनिर्देश होते. Dagger-Hashimoto ची जागा [Ethash](#ethash) ने घेतली. 15 सप्टेंबर 2022 रोजी [द मर्ज](/roadmap/merge/) येथे मायनिंग पूर्णपणे बंद करण्यात आले. तेव्हापासून, त्याऐवजी [प्रुफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) यंत्रणा वापरून इथेरियम सुरक्षित केले गेले आहे. हे पान ऐतिहासिक माहितीसाठी आहे - येथील माहिती मर्ज-नंतरच्या इथेरियमसाठी आता संबंधित नाही. + +## पूर्वतयारी {#prerequisites} + +हे पान अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [प्रुफ-ऑफ-वर्क कन्सेंसस](/developers/docs/consensus-mechanisms/pow), [मायनिंग](/developers/docs/consensus-mechanisms/pow/mining), आणि [मायनिंग अल्गोरिदम](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms) बद्दल वाचा. + +## Dagger-Hashimoto {#dagger-hashimoto} + +Dagger-Hashimoto चे उद्दिष्ट दोन उद्दिष्टे पूर्ण करणे आहे: + +1. **ASIC-प्रतिरोध**: अल्गोरिदमसाठी विशेष हार्डवेअर तयार करण्याचा फायदा शक्य तितका कमी असावा +2. **लाईट क्लायंट पडताळणीक्षमता**: लाईट क्लायंटद्वारे एका ब्लॉकची कार्यक्षमतेने पडताळणी करता आली पाहिजे. + +एका अतिरिक्त बदलासह, आम्ही इच्छित असल्यास तिसरे उद्दिष्ट कसे पूर्ण करायचे हे देखील निर्दिष्ट करतो, परंतु अतिरिक्त गुंतागुंतीच्या किंमतीवर: + +**पूर्ण चेन स्टोरेज**: मायनिंगसाठी संपूर्ण ब्लॉकचेन स्थितीचा स्टोरेज आवश्यक असावा (इथेरियम स्टेट ट्राईच्या अनियमित रचनेमुळे, आम्हाला अपेक्षा आहे की काही प्रूनिंग शक्य होईल, विशेषत: काही वारंवार वापरल्या जाणाऱ्या कॉन्ट्रॅक्ट्सची, परंतु आम्हाला हे कमी करायचे आहे). + +## DAG जनरेशन {#dag-generation} + +अल्गोरिदमसाठीचा कोड खाली Python मध्ये परिभाषित केला जाईल. प्रथम, आम्ही निर्दिष्ट अचूकतेचे अनसाईन्ड इंट्स स्ट्रिंग्समध्ये मार्शल करण्यासाठी `encode_int` देतो. त्याचा व्यस्त देखील दिला आहे: + +```python +NUM_BITS = 512 + +def encode_int(x): + "बिग-एंडियन स्कीम वापरून x या पूर्णांकाला 64 वर्णांच्या स्ट्रिंगमध्ये एन्कोड करा" + o = '' + for _ in range(NUM_BITS / 8): + o = chr(x % 256) + o + x //= 256 + return o + +def decode_int(s): + "बिग-एंडियन स्कीम वापरून स्ट्रिंगमधून x या पूर्णांकाला अनएन्कोड करा" + x = 0 + for c in s: + x *= 256 + x += ord(c) + return x +``` + +पुढे आपण असे गृहीत धरतो की `sha3` हे एक फंक्शन आहे जे एक पूर्णांक घेते आणि एक पूर्णांक आउटपुट देते, आणि `dbl_sha3` हे एक डबल-sha3 फंक्शन आहे; हा संदर्भ कोड अंमलबजावणीमध्ये रूपांतरित करत असल्यास वापरा: + +```python +from pyethereum import utils +def sha3(x): + if isinstance(x, (int, long)): + x = encode_int(x) + return decode_int(utils.sha3(x)) + +def dbl_sha3(x): + if isinstance(x, (int, long)): + x = encode_int(x) + return decode_int(utils.sha3(utils.sha3(x))) +``` + +### मापदंड {#parameters} + +अल्गोरिदमसाठी वापरलेले मापदंड आहेत: + +```python +SAFE_PRIME_512 = 2**512 - 38117 # 2**512 पेक्षा कमी सर्वात मोठी सुरक्षित अविभाज्य संख्या + +params = { + "n": 4000055296 * 8 // NUM_BITS, # डेटासेटचा आकार (4 गिगाबाईट्स); 65536 च्या पटीत असणे आवश्यक आहे + "n_inc": 65536, # प्रति कालावधी n च्या मूल्यात वाढ; 65536 च्या पटीत असणे आवश्यक आहे + # epochtime=20000 सह प्रति वर्ष 882 MB वाढ देते + "cache_size": 2500, # लाईट क्लायंटच्या कॅशेचा आकार (लाईट क्लायंटद्वारे निवडला जाऊ शकतो; अल्गो स्पेसिफिकेशनचा भाग नाही) + "diff": 2**14, # अडचण (ब्लॉक मूल्यांकनादरम्यान समायोजित) + "epochtime": 100000, # ब्लॉक्समधील एका इपॉकची लांबी (डेटासेट किती वेळा अपडेट केला जातो) + "k": 1, # नोडच्या पॅरेंट्सची संख्या + "w": w, # मॉड्यूलर घातांक हॅशिंगसाठी वापरले जाते + "accesses": 200, # हाशिमोटो दरम्यान डेटासेट प्रवेशांची संख्या + "P": SAFE_PRIME_512 # हॅशिंग आणि यादृच्छिक संख्या निर्मितीसाठी सुरक्षित अविभाज्य संख्या +} +``` + +या प्रकरणात `P` ही एक अविभाज्य संख्या आहे जी अशी निवडली आहे की `log₂(P)` 512 पेक्षा किंचित कमी आहे, जे आपल्या संख्या दर्शवण्यासाठी आपण वापरत असलेल्या 512 बिट्सशी जुळते. लक्षात घ्या की प्रत्यक्षात DAG चा फक्त उत्तरार्ध संग्रहित करणे आवश्यक आहे, त्यामुळे वास्तविक रॅमची आवश्यकता 1 GB पासून सुरू होते आणि प्रति वर्ष 441 MB ने वाढते. + +### डॅगर ग्राफ बिल्डिंग {#dagger-graph-building} + +डॅगर ग्राफ बिल्डिंग प्रिमिटिव्ह खालीलप्रमाणे परिभाषित केले आहे: + +```python +def produce_dag(params, seed, length): + P = params["P"] + picker = init = pow(sha3(seed), params["w"], P) + o = [init] + for i in range(1, length): + x = picker = (picker * init) % P + for _ in range(params["k"]): + x ^= o[x % i] + o.append(pow(x, params["w"], P)) + return o +``` + +मूलत:, हे एकाच नोड, `sha3(seed)` पासून ग्राफ सुरू करते आणि तेथून यादृच्छिक मागील नोड्सवर आधारित इतर नोड्स क्रमशः जोडण्यास सुरुवात करते. जेव्हा एक नवीन नोड तयार होतो, तेव्हा सीडची एक मॉड्यूलर पॉवर `i` पेक्षा कमी असलेले काही निर्देशांक यादृच्छिकपणे निवडण्यासाठी मोजली जाते (वर `x % i` वापरून), आणि त्या निर्देशांकांवर असलेल्या नोड्सची मूल्ये `x` साठी नवीन मूल्य तयार करण्यासाठी एका गणनेत वापरली जातात, जे नंतर एका लहान प्रुफ-ऑफ-वर्क फंक्शनमध्ये (XOR वर आधारित) दिले जाते, जेणेकरून शेवटी `i` निर्देशांकावर ग्राफचे मूल्य तयार होते. या विशिष्ट डिझाइनमागील तर्क म्हणजे DAG च्या क्रमशः प्रवेशासाठी सक्ती करणे; जोपर्यंत वर्तमान मूल्य ज्ञात नाही तोपर्यंत DAG चे पुढील मूल्य निर्धारित केले जाऊ शकत नाही. शेवटी, मॉड्यूलर घातांक परिणामास पुढे हॅश करते. + +हा अल्गोरिदम संख्या सिद्धांतातील अनेक परिणामांवर अवलंबून आहे. चर्चेसाठी खालील परिशिष्ट पहा. + +## लाईट क्लायंट मूल्यांकन {#light-client-evaluation} + +वरील ग्राफ रचनेचा उद्देश ग्राफमधील प्रत्येक नोडची पुनर्रचना करण्यास परवानगी देणे आहे, फक्त थोड्या संख्येच्या नोड्सच्या सबट्रीची गणना करून आणि फक्त थोड्या प्रमाणात सहायक मेमरीची आवश्यकता असते. लक्षात घ्या की k=1 सह, सबट्री ही DAG मधील पहिल्या घटकापर्यंत जाणारी मूल्यांची एक साखळी आहे. + +DAG साठी लाईट क्लायंट कंप्युटिंग फंक्शन खालीलप्रमाणे कार्य करते: + +```python +def quick_calc(params, seed, p): + w, P = params["w"], params["P"] + cache = {} + + def quick_calc_cached(p): + if p in cache: + pass + elif p == 0: + cache[p] = pow(sha3(seed), w, P) + else: + x = pow(sha3(seed), (p + 1) * w, P) + for _ in range(params["k"]): + x ^= quick_calc_cached(x % p) + cache[p] = pow(x, w, P) + return cache[p] + + return quick_calc_cached(p) +``` + +मूलत:, हे वरील अल्गोरिदमचे एक पुनर्लेखन आहे जे संपूर्ण DAG साठी मूल्ये मोजण्याचे लूप काढून टाकते आणि पूर्वीच्या नोड लूकअपला रिकर्सिव्ह कॉल किंवा कॅशे लूकअपसह बदलते. लक्षात घ्या की `k=1` साठी कॅशे अनावश्यक आहे, जरी पुढील ऑप्टिमायझेशन प्रत्यक्षात DAG ची पहिली काही हजार मूल्ये पूर्व-गणना करते आणि ते गणनेसाठी स्थिर कॅशे म्हणून ठेवते; याची कोड अंमलबजावणी परिशिष्टात पहा. + +## DAGs चे डबल बफर {#double-buffer} + +एका पूर्ण क्लायंटमध्ये, वरील सूत्राद्वारे तयार केलेल्या 2 DAGs चा एक [_डबल बफर_](https://wikipedia.org/wiki/Multiple_buffering) वापरला जातो. कल्पना अशी आहे की वरील पॅरामीटर्सनुसार प्रत्येक `epochtime` ब्लॉक संख्येवर DAGs तयार केले जातात. क्लायंटने तयार केलेला नवीनतम DAG वापरण्याऐवजी, तो मागील एक वापरतो. याचा फायदा हा आहे की ते DAGs वेळेनुसार बदलण्याची परवानगी देते, ज्यात मायनर्सना अचानक सर्व डेटाची पुनर्गणना करावी लागते असा टप्पा समाविष्ट करण्याची आवश्यकता नाही. अन्यथा, नियमित अंतराने चेन प्रक्रियेत अचानक तात्पुरती मंदी येण्याची आणि केंद्रीकरण नाटकीयरित्या वाढण्याची शक्यता आहे. त्यामुळे सर्व डेटाची पुनर्गणना होण्यापूर्वी त्या काही मिनिटांत 51% हल्ल्याचा धोका असतो. + +ब्लॉकसाठी कार्य मोजण्यासाठी वापरल्या जाणाऱ्या DAGs चा संच तयार करण्यासाठी वापरलेला अल्गोरिदम खालीलप्रमाणे आहे: + +```python +def get_prevhash(n): + from pyethereum.blocks import GENESIS_PREVHASH + from pyethereum import chain_manager + if n <= 0: + return hash_to_int(GENESIS_PREVHASH) + else: + prevhash = chain_manager.index.get_block_by_number(n - 1) + return decode_int(prevhash) + +def get_seedset(params, block): + seedset = {} + seedset["back_number"] = block.number - (block.number % params["epochtime"]) + seedset["back_hash"] = get_prevhash(seedset["back_number"]) + seedset["front_number"] = max(seedset["back_number"] - params["epochtime"], 0) + seedset["front_hash"] = get_prevhash(seedset["front_number"]) + return seedset + +def get_dagsize(params, block): + return params["n"] + (block.number // params["epochtime"]) * params["n_inc"] + +def get_daggerset(params, block): + dagsz = get_dagsize(params, block) + seedset = get_seedset(params, block) + if seedset["front_hash"] <= 0: + # बॅक बफर शक्य नाही, फक्त फ्रंट बफर तयार करा + return {"front": {"dag": produce_dag(params, seedset["front_hash"], dagsz), + "block_number": 0}} + else: + return {"front": {"dag": produce_dag(params, seedset["front_hash"], dagsz), + "block_number": seedset["front_number"]}, + "back": {"dag": produce_dag(params, seedset["back_hash"], dagsz), + "block_number": seedset["back_number"]}} +``` + +## Hashimoto {#hashimoto} + +मूळ हाशिमोटोमागील कल्पना ब्लॉकचेनला डेटासेट म्हणून वापरणे आहे, एक गणना करणे जी ब्लॉकचेनमधून N निर्देशांक निवडते, त्या निर्देशांकांवरील व्यवहार गोळा करते, या डेटाचे XOR करते आणि परिणामाचा हॅश परत करते. थॅडियस ड्रायजाचा मूळ अल्गोरिदम, सुसंगततेसाठी Python मध्ये अनुवादित, खालीलप्रमाणे आहे: + +```python +def orig_hashimoto(prev_hash, merkle_root, list_of_transactions, nonce): + hash_output_A = sha256(prev_hash + merkle_root + nonce) + txid_mix = 0 + for i in range(64): + shifted_A = hash_output_A >> i + transaction = shifted_A % len(list_of_transactions) + txid_mix ^= list_of_transactions[transaction] << i + return txid_mix ^ (nonce << 192) +``` + +दुर्दैवाने, हाशिमोटोला रॅम हार्ड मानले जात असले तरी, ते 256-बिट अंकगणितावर अवलंबून आहे, ज्यात लक्षणीय संगणकीय ओव्हरहेड आहे. तथापि, या समस्येचे निराकरण करण्यासाठी Dagger-Hashimoto आपल्या डेटासेटला अनुक्रमित करताना फक्त सर्वात कमी लक्षणीय 64 बिट्स वापरते. + +```python +def hashimoto(dag, dagsize, params, header, nonce): + m = dagsize / 2 + mix = sha3(encode_int(nonce) + header) + for _ in range(params["accesses"]): + mix ^= dag[m + (mix % 2**64) % m] + return dbl_sha3(mix) +``` + +डबल SHA3 चा वापर शून्य-डेटा, जवळपास-तत्काळ पूर्व-पडताळणीसाठी परवानगी देतो, फक्त हे सत्यापित करतो की योग्य मध्यवर्ती मूल्य प्रदान केले गेले होते. प्रुफ-ऑफ-वर्कचा हा बाह्य थर अत्यंत ASIC-अनुकूल आणि बऱ्यापैकी कमकुवत आहे, परंतु DDoS आणखी कठीण करण्यासाठी अस्तित्वात आहे कारण असा ब्लॉक तयार करण्यासाठी ते लहान काम करणे आवश्यक आहे जो त्वरित नाकारला जाणार नाही. ही लाईट-क्लायंट आवृत्ती आहे: + +```python +def quick_hashimoto(seed, dagsize, params, header, nonce): + m = dagsize // 2 + mix = sha3(nonce + header) + for _ in range(params["accesses"]): + mix ^= quick_calc(params, seed, m + (mix % 2**64) % m) + return dbl_sha3(mix) +``` + +## मायनिंग आणि पडताळणी {#mining-and-verifying} + +आता, आपण हे सर्व मायनिंग अल्गोरिदममध्ये एकत्र ठेवूया: + +```python +def mine(daggerset, params, block): + from random import randint + nonce = randint(0, 2**64) + while 1: + result = hashimoto(daggerset, get_dagsize(params, block), + params, decode_int(block.prevhash), nonce) + if result * params["diff"] < 2**256: + break + nonce += 1 + if nonce >= 2**64: + nonce = 0 + return nonce +``` + +हा पडताळणी अल्गोरिदम आहे: + +```python +def verify(daggerset, params, block, nonce): + result = hashimoto(daggerset, get_dagsize(params, block), + params, decode_int(block.prevhash), nonce) + return result * params["diff"] < 2**256 +``` + +लाईट-क्लायंट अनुकूल पडताळणी: + +```python +def light_verify(params, header, nonce): + seedset = get_seedset(params, block) + result = quick_hashimoto(seedset["front_hash"], get_dagsize(params, block), + params, decode_int(block.prevhash), nonce) + return result * params["diff"] < 2**256 +``` + +तसेच, लक्षात घ्या की Dagger-Hashimoto ब्लॉक हेडरवर अतिरिक्त आवश्यकता लादते: + +- दोन-स्तरीय पडताळणी कार्य करण्यासाठी, ब्लॉक हेडरमध्ये नॉन्स आणि मध्यवर्ती मूल्य दोन्ही प्री-sha3 असणे आवश्यक आहे +- कुठेतरी, ब्लॉक हेडरने वर्तमान सीडसेटचा sha3 संग्रहित करणे आवश्यक आहे + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## परिशिष्ट {#appendix} + +वर नमूद केल्याप्रमाणे, DAG जनरेशनसाठी वापरलेले RNG संख्या सिद्धांतातील काही परिणामांवर अवलंबून आहे. प्रथम, आम्ही आश्वासन देतो की लेमर RNG जे `picker` व्हेरिएबलचा आधार आहे त्याचा कालावधी मोठा आहे. दुसरे, आम्ही दाखवतो की `pow(x,3,P)` `x` ला `1` किंवा `P-1` वर मॅप करणार नाही, जर `x ∈ [2,P-2]` पासून सुरू होत असेल. शेवटी, आम्ही दाखवतो की `pow(x,3,P)` चा टक्कर दर कमी आहे जेव्हा त्याला हॅशिंग फंक्शन म्हणून मानले जाते. + +### लेमर यादृच्छिक संख्या जनरेटर {#lehmer-random-number} + +`produce_dag` फंक्शनला निःपक्षपाती यादृच्छिक संख्या तयार करण्याची आवश्यकता नसली तरी, एक संभाव्य धोका आहे की `seed**i % P` फक्त काही मोजकीच मूल्ये घेते. हे पॅटर्न ओळखणाऱ्या मायनर्सना जे ओळखत नाहीत त्यांच्यापेक्षा फायदा देऊ शकते. + +हे टाळण्यासाठी, संख्या सिद्धांतातील एका निकालाचा आधार घेतला जातो. एक [_सुरक्षित अविभाज्य संख्या_](https://en.wikipedia.org/wiki/Safe_prime) अशी अविभाज्य संख्या `P` म्हणून परिभाषित केली जाते की `(P-1)/2` देखील अविभाज्य असते. [गुणाकार गट](https://en.wikipedia.org/wiki/Multiplicative_group_of_integers_modulo_n) `ℤ/nℤ` च्या सदस्य `x` चा _ऑर्डर_ किमान `m` म्हणून परिभाषित केला जातो जसे की
xᵐ mod P ≡ 1
+या व्याख्या दिल्यावर, आपल्याकडे आहे: + +> निरीक्षण 1. `x` हा सुरक्षित अविभाज्य `P` साठी गुणाकार गट `ℤ/Pℤ` चा सदस्य असू द्या. जर `x mod P ≠ 1 mod P` आणि `x mod P ≠ P-1 mod P` असेल, तर `x` चा ऑर्डर `P-1` किंवा `(P-1)/2` आहे. + +_पुरावा_. `P` एक सुरक्षित अविभाज्य असल्यामुळे, नंतर [लाग्रेंजच्या प्रमेयानुसार][lagrange] आपल्याकडे `x` चा ऑर्डर `1`, `2`, `(P-1)/2`, किंवा `P-1` आहे. + +`x` चा ऑर्डर `1` असू शकत नाही, कारण फर्माच्या लहान प्रमेयानुसार आपल्याकडे आहे: + +
xP-1 mod P ≡ 1
+ +म्हणून `x` हे `ℤ/nℤ` चे एक गुणाकार ओळख असणे आवश्यक आहे, जे अद्वितीय आहे. आपण गृहित धरल्याप्रमाणे `x ≠ 1` गृहित धरल्यामुळे, हे शक्य नाही. + +`x` चा ऑर्डर `2` असू शकत नाही जोपर्यंत `x = P-1` नाही, कारण हे `P` अविभाज्य असल्याचे उल्लंघन करेल. + +वरील प्रतिपादनावरून, आपण ओळखू शकतो की `(picker * init) % P` ची पुनरावृत्ती केल्यास चक्राची लांबी किमान `(P-1)/2` असेल. हे कारण आपण `P` ला दोनच्या उच्च घातांकाच्या अंदाजे समान असलेली एक सुरक्षित अविभाज्य संख्या म्हणून निवडले आहे, आणि `init` हे `[2,2**256+1]` या अंतराळात आहे. `P` चे परिमाण पाहता, आपण मॉड्यूलर घातांकातून चक्राची अपेक्षा कधीही करू नये. + +जेव्हा आपण DAG मधील पहिली सेल (व्हेरिएबल `init` म्हणून लेबल केलेले) नियुक्त करत असतो, तेव्हा आपण `pow(sha3(seed) + 2, 3, P)` मोजतो. पहिल्या दृष्टीक्षेपात, हे परिणाम `1` किंवा `P-1` नसल्याची हमी देत नाही. तथापि, `P-1` एक सुरक्षित अविभाज्य असल्यामुळे, आपल्याकडे खालील अतिरिक्त आश्वासन आहे, जे निरीक्षण 1 चे एक उपप्रमेय आहे: + +> निरीक्षण २. `x` हा सुरक्षित अविभाज्य `P` साठी गुणाकार गट `ℤ/Pℤ` चा सदस्य असू द्या, आणि `w` एक नैसर्गिक संख्या असू द्या. जर `x mod P ≠ 1 mod P` आणि `x mod P ≠ P-1 mod P` असेल, तसेच `w mod P ≠ P-1 mod P` आणि `w mod P ≠ 0 mod P` असेल, तर `xʷ mod P ≠ 1 mod P` आणि `xʷ mod P ≠ P-1 mod P` + +### हॅश फंक्शन म्हणून मॉड्यूलर घातांक {#modular-exponentiation} + +`P` आणि `w` च्या काही विशिष्ट मूल्यांसाठी, `pow(x, w, P)` या फंक्शनमध्ये अनेक टकराव असू शकतात. उदाहरणार्थ, `pow(x,9,19)` फक्त `{1,18}` ही मूल्ये घेते. + +`P` अविभाज्य आहे हे लक्षात घेता, मॉड्यूलर घातांक हॅशिंग फंक्शनसाठी योग्य `w` खालील निकालाचा वापर करून निवडला जाऊ शकतो: + +> निरीक्षण 3. `P` एक अविभाज्य संख्या असू द्या; `w` आणि `P-1` सापेक्ष अविभाज्य आहेत जर आणि फक्त जर `ℤ/Pℤ` मधील सर्व `a` आणि `b` साठी:
`aʷ mod P ≡ bʷ mod P` जर आणि फक्त जर `a mod P ≡ b mod P`
+ +म्हणून, `P` अविभाज्य आहे आणि `w` हे `P-1` च्या सापेक्ष अविभाज्य आहे हे लक्षात घेता, आपल्याकडे `|{pow(x, w, P) : x ∈ ℤ}| = P` आहे, याचा अर्थ असा की हॅशिंग फंक्शनचा टक्कर दर शक्य तितका किमान आहे. + +आपण निवडल्याप्रमाणे `P` एक सुरक्षित अविभाज्य संख्या आहे या विशेष बाबतीत, तर `P-1` ला फक्त 1, 2, `(P-1)/2` आणि `P-1` हे घटक आहेत. `P` > 7 असल्यामुळे, आपल्याला माहित आहे की 3 हे `P-1` च्या सापेक्ष अविभाज्य आहे, म्हणून `w=3` वरील प्रतिपादनाची पूर्तता करते. + +## अधिक कार्यक्षम कॅशे-आधारित मूल्यांकन अल्गोरिदम {#cache-based-evaluation} + +```python +def quick_calc(params, seed, p): + cache = produce_dag(params, seed, params["cache_size"]) + return quick_calc_cached(cache, params, p) + +def quick_calc_cached(cache, params, p): + P = params["P"] + if p < len(cache): + return cache[p] + else: + x = pow(cache[0], p + 1, P) + for _ in range(params["k"]): + x ^= quick_calc_cached(cache, params, x % p) + return pow(x, params["w"], P) + +def quick_hashimoto(seed, dagsize, params, header, nonce): + cache = produce_dag(params, seed, params["cache_size"]) + return quick_hashimoto_cached(cache, dagsize, params, header, nonce) + +def quick_hashimoto_cached(cache, dagsize, params, header, nonce): + m = dagsize // 2 + mask = 2**64 - 1 + mix = sha3(encode_int(nonce) + header) + for _ in range(params["accesses"]): + mix ^= quick_calc_cached(cache, params, m + (mix & mask) % m) + return dbl_sha3(mix) +``` diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md new file mode 100644 index 00000000000..8f9e6923c23 --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash/index.md @@ -0,0 +1,1019 @@ +--- +title: "एथहॅश" +description: "एथहॅश अल्गोरिदमवर एक विस्तृत नजर." +lang: mr +--- + + + + + + एथहॅश हा इथेरियमचा प्रूफ-ऑफ-वर्क मायनिंग अल्गोरिदम होता. प्रूफ-ऑफ-वर्क आता **पूर्णपणे बंद** केले आहे आणि इथेरियम आता त्याऐवजी [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) वापरून सुरक्षित केले आहे. [द मर्ज](/roadmap/merge/), [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) आणि [स्टेकिंग](/staking/) वर अधिक वाचा. हे पृष्ठ केवळ ऐतिहासिक माहितीसाठी आहे! + + + + +एथहॅश हे [डॅगर-हाशिमोटो](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) अल्गोरिदमची सुधारित आवृत्ती आहे. एथहॅश प्रूफ-ऑफ-वर्क हे [मेमरी हार्ड](https://wikipedia.org/wiki/Memory-hard_function) आहे, ज्यामुळे अल्गोरिदम ASIC प्रतिरोधक बनेल असे मानले जात होते. अखेरीस एथहॅश ASICs विकसित केले गेले परंतु प्रूफ-ऑफ-वर्क बंद होईपर्यंत GPU मायनिंग हा एक व्यवहार्य पर्याय होता. इतर नॉन-इथेरियम प्रूफ-ऑफ-वर्क नेटवर्क्सवर इतर कॉइन्स माइन करण्यासाठी एथहॅश अजूनही वापरले जाते. + +## एथहॅश कसे कार्य करते? {#how-does-ethash-work} + +मेमरी हार्डनेस एका प्रूफ ऑफ वर्क अल्गोरिदमद्वारे प्राप्त केली जाते ज्यासाठी नॉन्स आणि ब्लॉक हेडरवर अवलंबून असलेल्या निश्चित रिसोर्समधून उपसंचांची निवड करणे आवश्यक असते. या रिसोर्सला (आकारात काही गीगाबाईट्स) DAG म्हटले जाते. DAG प्रत्येक ३०००० ब्लॉक्सनंतर बदलला जातो, जो ~१२५-तासांचा कालावधी आहे ज्याला इपॉक (अंदाजे ५.२ दिवस) म्हणतात आणि तो तयार होण्यासाठी थोडा वेळ लागतो. DAG केवळ ब्लॉकच्या उंचीवर अवलंबून असल्याने, तो पूर्व-उत्पन्न केला जाऊ शकतो, परंतु तसे नसल्यास क्लायंटला ब्लॉक तयार करण्यासाठी या प्रक्रियेच्या शेवटपर्यंत थांबावे लागेल. जर क्लायंट्सनी वेळेपूर्वी DAGs पूर्व-उत्पन्न आणि कॅशे केले नाहीत, तर नेटवर्कला प्रत्येक इपॉक संक्रमणावर मोठ्या ब्लॉक विलंबाचा सामना करावा लागू शकतो. लक्षात घ्या की प्रूफ-ऑफ-वर्क सत्यापित करण्यासाठी DAG तयार करण्याची आवश्यकता नाही, ज्यामुळे कमी CPU आणि कमी मेमरीसह सत्यापन शक्य होते. + +अल्गोरिदम ज्या सामान्य मार्गाचा अवलंब करतो तो खालीलप्रमाणे आहे: + +1. एक **सीड** अस्तित्वात आहे जी प्रत्येक ब्लॉकसाठी त्या बिंदूपर्यंतच्या ब्लॉक हेडर्समधून स्कॅन करून मोजली जाऊ शकते. +2. सीडमधून, कोणीही **१६ MB स्युडोरँडम कॅशे** मोजू शकतो. लाइट क्लायंट कॅशे संग्रहित करतात. +3. कॅशेमधून, आम्ही **१ GB डेटासेट** तयार करू शकतो, ज्यामध्ये डेटासेटमधील प्रत्येक आयटम कॅशेमधील केवळ काही आयटमवर अवलंबून असतो. पूर्ण क्लायंट आणि मायनर्स डेटासेट संग्रहित करतात. डेटासेट वेळेनुसार रेषीयपणे वाढतो. +4. मायनिंगमध्ये डेटासेटचे यादृच्छिक स्लाइस घेणे आणि त्यांना एकत्र हॅश करणे समाविष्ट आहे. तुम्हाला आवश्यक असलेल्या डेटासेटचे विशिष्ट तुकडे पुन्हा तयार करण्यासाठी कॅशे वापरून कमी मेमरीसह सत्यापन केले जाऊ शकते, म्हणून तुम्हाला फक्त कॅशे संग्रहित करण्याची आवश्यकता आहे. + +मोठा डेटासेट प्रत्येक ३०००० ब्लॉक्सनंतर एकदा अपडेट केला जातो, त्यामुळे मायनरचा बहुतांश प्रयत्न डेटासेट वाचण्यात जाईल, त्यात बदल करण्यात नाही. + +## व्याख्या {#definitions} + +आम्ही खालील व्याख्या वापरतो: + +``` +WORD_BYTES = 4 # शब्दात बाइट्स +DATASET_BYTES_INIT = 2**30 # जेनेसिसवेळी डेटासेटमधील बाइट्स +DATASET_BYTES_GROWTH = 2**23 # प्रति इपॉक डेटासेट वाढ +CACHE_BYTES_INIT = 2**24 # जेनेसिसवेळी कॅशेमधील बाइट्स +CACHE_BYTES_GROWTH = 2**17 # प्रति इपॉक कॅशे वाढ +CACHE_MULTIPLIER=1024 # कॅशेच्या तुलनेत DAG चा आकार +EPOCH_LENGTH = 30000 # प्रति इपॉक ब्लॉक्स +MIX_BYTES = 128 # मिक्सची रुंदी +HASH_BYTES = 64 # बाइट्समध्ये हॅशची लांबी +DATASET_PARENTS = 256 # प्रत्येक डेटासेट घटकाच्या पॅरेंट्सची संख्या +CACHE_ROUNDS = 3 # कॅशे उत्पादनातील फेऱ्यांची संख्या +ACCESSES = 64 # हाशिमोटो लूपमधील प्रवेशांची संख्या +``` + +### 'SHA3' चा वापर {#sha3} + +इथेरियमचा विकास SHA3 मानकाच्या विकासासोबतच झाला आणि मानकीकरण प्रक्रियेने अंतिम हॅश अल्गोरिदमच्या पॅडिंगमध्ये उशीरा बदल केला, त्यामुळे इथेरियमचे "sha3_256" आणि "sha3_512" हॅश हे मानक sha3 हॅश नाहीत, तर एक प्रकार आहे ज्याला इतर संदर्भांमध्ये अनेकदा "Keccak-256" आणि "Keccak-512" असे संबोधले जाते. चर्चा पहा, उदा., [येथे](https://eips.ethereum.org/EIPS/eip-1803), [येथे](http://ethereum.stackexchange.com/questions/550/which-cryptographic-hash-function-does-ethereum-use), किंवा [येथे](http://bitcoin.stackexchange.com/questions/42055/what-is-the-approach-to-calculate-an-ethereum-address-from-a-256-bit-private-key/42057#42057). + +कृपया हे लक्षात ठेवा कारण खालील अल्गोरिदमच्या वर्णनात "sha3" हॅशचा उल्लेख आहे. + +## मापदंड {#parameters} + +एथहॅशच्या कॅशे आणि डेटासेटसाठी पॅरामीटर्स ब्लॉक क्रमांकावर अवलंबून असतात. कॅशे आकार आणि डेटासेट आकार दोन्ही रेषीयपणे वाढतात; तथापि, चक्रीय वर्तणुकीला कारणीभूत होणाऱ्या अपघाती नियमिततेचा धोका कमी करण्यासाठी आम्ही नेहमी रेषीय वाढत्या थ्रेशोल्डच्या खाली सर्वोच्च अविभाज्य संख्या घेतो. + +```python +def get_cache_size(block_number): + sz = CACHE_BYTES_INIT + CACHE_BYTES_GROWTH * (block_number // EPOCH_LENGTH) + sz -= HASH_BYTES + while not isprime(sz / HASH_BYTES): + sz -= 2 * HASH_BYTES + return sz + +def get_full_size(block_number): + sz = DATASET_BYTES_INIT + DATASET_BYTES_GROWTH * (block_number // EPOCH_LENGTH) + sz -= MIX_BYTES + while not isprime(sz / MIX_BYTES): + sz -= 2 * MIX_BYTES + return sz +``` + +डेटासेट आणि कॅशे आकाराच्या मूल्यांचे तक्ते परिशिष्टात दिले आहेत. + +## कॅशे निर्मिती {#cache-generation} + +आता, आम्ही कॅशे तयार करण्याचे कार्य निर्दिष्ट करतो: + +```python +def mkcache(cache_size, seed): + n = cache_size // HASH_BYTES + + # क्रमाने प्रारंभिक डेटासेट तयार करा + o = [sha3_512(seed)] + for i in range(1, n): + o.append(sha3_512(o[-1])) + + # randmemohash ची कमी-फेरीची आवृत्ती वापरा + for _ in range(CACHE_ROUNDS): + for i in range(n): + v = o[i][0] % n + o[i] = sha3_512(map(xor, o[(i-1+n) % n], o[v])) + + return o +``` + +कॅशे उत्पादन प्रक्रियेत प्रथम क्रमाने ३२ MB मेमरी भरणे, नंतर सर्जियो डेमियन लर्नरच्या [_स्ट्रिक्ट मेमरी हार्ड हॅशिंग फंक्शन्स_ (२०१४)](http://www.hashcash.org/papers/memohash.pdf) मधील _RandMemoHash_ अल्गोरिदमच्या दोन फेऱ्या करणे समाविष्ट आहे. आउटपुट ५२४२८८ ६४-बाइट मूल्यांचा एक संच आहे. + +## डेटा एकत्रीकरण कार्य {#date-aggregation-function} + +आम्ही काही प्रकरणांमध्ये XOR साठी नॉन-असोसिएटिव्ह पर्याय म्हणून [FNV हॅश](https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function) द्वारे प्रेरित अल्गोरिदम वापरतो. लक्षात घ्या की आम्ही अविभाज्य संख्येला पूर्ण ३२-बिट इनपुटसह गुणतो, याउलट FNV-1 स्पेसिफिकेशन अविभाज्य संख्येला एका बाइट (ऑक्टेट) ने गुणते. + +```python +FNV_PRIME = 0x01000193 + +def fnv(v1, v2): + return ((v1 * FNV_PRIME) ^ v2) % 2**32 +``` + +कृपया लक्षात घ्या, जरी यलो पेपरमध्ये fnv हे v1\*(FNV_PRIME ^ v2) म्हणून निर्दिष्ट केले असले तरी, सध्याची सर्व अंमलबजावणी सातत्याने वरील व्याख्या वापरतात. + +## पूर्ण डेटासेट गणना {#full-dataset-calculation} + +पूर्ण १ GB डेटासेटमधील प्रत्येक ६४-बाइट आयटम खालीलप्रमाणे मोजला जातो: + +```python +def calc_dataset_item(cache, i): + n = len(cache) + r = HASH_BYTES // WORD_BYTES + # मिक्स सुरू करा + mix = copy.copy(cache[i % n]) + mix[0] ^= i + mix = sha3_512(mix) + # i वर आधारित अनेक यादृच्छिक कॅशे नोड्ससह त्याचे fnv करा + for j in range(DATASET_PARENTS): + cache_index = fnv(i ^ j, mix[j % r]) + mix = map(fnv, mix, cache[cache_index % n]) + return sha3_512(mix) +``` + +मूलतः, आम्ही २५६ स्युडोरँडमली निवडलेल्या कॅशे नोड्समधील डेटा एकत्र करतो आणि डेटासेट नोडची गणना करण्यासाठी ते हॅश करतो. संपूर्ण डेटासेट नंतर याद्वारे तयार केला जातो: + +```python +def calc_dataset(full_size, cache): + return [calc_dataset_item(cache, i) for i in range(full_size // HASH_BYTES)] +``` + +## मुख्य लूप {#main-loop} + +आता, आम्ही मुख्य "हाशिमोटो" सारखी लूप निर्दिष्ट करतो, जिथे आम्ही विशिष्ट हेडर आणि नॉन्ससाठी आमचे अंतिम मूल्य तयार करण्यासाठी पूर्ण डेटासेटमधून डेटा एकत्र करतो. खालील कोडमध्ये, `header` हे एका _ट्रंकेटेड_ ब्लॉक हेडरच्या RLP प्रतिनिधित्वाचा SHA3-256 _हॅश_ दर्शविते, म्हणजेच, **mixHash** आणि **nonce** फील्ड वगळून एका हेडरचा. `nonce` हे बिग-एन्डियन क्रमाने ६४ बिट अनसाईन्ड इंटीजरचे आठ बाइट्स आहेत. त्यामुळे `nonce[::-1]` हे त्या मूल्याचे आठ-बाइट लिटिल-एन्डियन प्रतिनिधित्व आहे: + +```python +def hashimoto(header, nonce, full_size, dataset_lookup): + n = full_size / HASH_BYTES + w = MIX_BYTES // WORD_BYTES + mixhashes = MIX_BYTES / HASH_BYTES + # हेडर+नॉन्स एकत्र करून ६४ बाइटचा सीड तयार करा + s = sha3_512(header + nonce[::-1]) + # प्रतिकृती केलेल्या s सह मिक्स सुरू करा + mix = [] + for _ in range(MIX_BYTES / HASH_BYTES): + mix.extend(s) + # यादृच्छिक डेटासेट नोड्समध्ये मिक्स करा + for i in range(ACCESSES): + p = fnv(i ^ s[0], mix[i % w]) % (n // mixhashes) * mixhashes + newdata = [] + for j in range(MIX_BYTES / HASH_BYTES): + newdata.extend(dataset_lookup(p + j)) + mix = map(fnv, mix, newdata) + # मिक्स कॉम्प्रेस करा + cmix = [] + for i in range(0, len(mix), 4): + cmix.append(fnv(fnv(fnv(mix[i], mix[i+1]), mix[i+2]), mix[i+3])) + return { + "mix digest": serialize_hash(cmix), + "result": serialize_hash(sha3_256(s+cmix)) + } + +def hashimoto_light(full_size, cache, header, nonce): + return hashimoto(header, nonce, full_size, lambda x: calc_dataset_item(cache, x)) + +def hashimoto_full(full_size, dataset, header, nonce): + return hashimoto(header, nonce, full_size, lambda x: dataset[x]) +``` + +मूलतः, आम्ही १२८ बाइट्स रुंद असलेला एक "मिक्स" राखतो आणि पूर्ण डेटासेटमधून वारंवार क्रमाने १२८ बाइट्स आणतो आणि ते मिक्ससह एकत्र करण्यासाठी `fnv` फंक्शन वापरतो. १२८ बाइट्सचा क्रमिक प्रवेश वापरला जातो जेणेकरून अल्गोरिदमची प्रत्येक फेरी नेहमी RAM मधून एक पूर्ण पृष्ठ आणेल, ज्यामुळे ट्रान्सलेशन लुकअसाइड बफर मिसेस कमी होतात जे ASICs सैद्धांतिकदृष्ट्या टाळू शकले असते. + +जर या अल्गोरिदमचे आउटपुट इच्छित लक्ष्यापेक्षा कमी असेल, तर नॉन्स वैध आहे. लक्षात घ्या की शेवटी `sha3_256` चा अतिरिक्त अनुप्रयोग हे सुनिश्चित करतो की एक मध्यवर्ती नॉन्स अस्तित्वात आहे जो किमान थोडे काम केले आहे हे सिद्ध करण्यासाठी प्रदान केला जाऊ शकतो; हे जलद बाह्य PoW सत्यापन अँटी-DDoS हेतूंसाठी वापरले जाऊ शकते. हे परिणाम एक निःपक्षपाती, २५६-बिट संख्या आहे याची सांख्यिकीय खात्री देण्याचे काम देखील करते. + +## मायनिंग {#mining} + +मायनिंग अल्गोरिदम खालीलप्रमाणे परिभाषित केला आहे: + +```python +def mine(full_size, dataset, header, difficulty): + # समान अंकावर हॅशशी तुलना करण्यासाठी टार्गेटला शून्य-पॅड करा + target = zpad(encode_int(2**256 // difficulty), 64)[::-1] + from random import randint + nonce = randint(0, 2**64) + while hashimoto_full(full_size, dataset, header, nonce) > target: + nonce = (nonce + 1) % 2**64 + return nonce +``` + +## सीड हॅश परिभाषित करणे {#seed-hash} + +दिलेल्या ब्लॉकवर माइन करण्यासाठी वापरल्या जाणाऱ्या सीड हॅशची गणना करण्यासाठी, आम्ही खालील अल्गोरिदम वापरतो: + +```python + def get_seedhash(block): + s = '\x00' * 32 + for i in range(block.number // EPOCH_LENGTH): + s = serialize_hash(sha3_256(s)) + return s +``` + +लक्षात घ्या की सुरळीत मायनिंग आणि पडताळणीसाठी, आम्ही भविष्यातील सीडहॅश आणि डेटासेट एका वेगळ्या थ्रेडमध्ये पूर्व-गणना करण्याची शिफारस करतो. + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## परिशिष्ट {#appendix} + +जर तुम्हाला वरील पायथन स्पेसिफिकेशन कोड म्हणून चालवण्यात स्वारस्य असेल तर खालील कोड आधी जोडला पाहिजे. + +```python +import sha3, copy + +# लिट्ल एंडियन बिट ऑर्डरिंग गृहीत धरते (इंटेल आर्किटेक्चर्स प्रमाणेच) +def decode_int(s): + return int(s[::-1].encode('hex'), 16) if s else 0 + +def encode_int(s): + a = "%x" % s + return '' if s == 0 else ('0' * (len(a) % 2) + a).decode('hex')[::-1] + +def zpad(s, length): + return s + '\x00' * max(0, length - len(s)) + +def serialize_hash(h): + return ''.join([zpad(encode_int(x), 4) for x in h]) + +def deserialize_hash(h): + return [decode_int(h[i:i+WORD_BYTES]) for i in range(0, len(h), WORD_BYTES)] + +def hash_words(h, sz, x): + if isinstance(x, list): + x = serialize_hash(x) + y = h(x) + return deserialize_hash(y) + +def serialize_cache(ds): + return ''.join([serialize_hash(h) for h in ds]) + +serialize_dataset = serialize_cache + +# sha3 हॅश फंक्शन, ६४ बाइट्स आउटपुट देते +def sha3_512(x): + return hash_words(lambda v: sha3.sha3_512(v).digest(), 64, x) + +def sha3_256(x): + return hash_words(lambda v: sha3.sha3_256(v).digest(), 32, x) + +def xor(a, b): + return a ^ b + +def isprime(x): + for i in range(2, int(x**0.5)): + if x % i == 0: + return False + return True +``` + +### डेटा आकार {#data-sizes} + +खालील लुकअप टेबल अंदाजे २०४८ सारणीबद्ध इपॉक्ससाठी डेटा आकार आणि कॅशे आकार प्रदान करतात. + +```python +def get_datasize(block_number): + return data_sizes[block_number // EPOCH_LENGTH] + +def get_cachesize(block_number): + return cache_sizes[block_number // EPOCH_LENGTH] + +data_sizes = [ +1073739904, 1082130304, 1090514816, 1098906752, 1107293056, +1115684224, 1124070016, 1132461952, 1140849536, 1149232768, +1157627776, 1166013824, 1174404736, 1182786944, 1191180416, +1199568512, 1207958912, 1216345216, 1224732032, 1233124736, +1241513344, 1249902464, 1258290304, 1266673792, 1275067264, +1283453312, 1291844992, 1300234112, 1308619904, 1317010048, +1325397376, 1333787776, 1342176128, 1350561664, 1358954368, +1367339392, 1375731584, 1384118144, 1392507008, 1400897408, +1409284736, 1417673344, 1426062464, 1434451072, 1442839168, +1451229056, 1459615616, 1468006016, 1476394112, 1484782976, +1493171584, 1501559168, 1509948032, 1518337664, 1526726528, +1535114624, 1543503488, 1551892096, 1560278656, 1568669056, +1577056384, 1585446272, 1593831296, 1602219392, 1610610304, +1619000192, 1627386752, 1635773824, 1644164224, 1652555648, +1660943488, 1669332608, 1677721216, 1686109312, 1694497664, +1702886272, 1711274624, 1719661184, 1728047744, 1736434816, +1744829056, 1753218944, 1761606272, 1769995904, 1778382464, +1786772864, 1795157888, 1803550592, 1811937664, 1820327552, +1828711552, 1837102976, 1845488768, 1853879936, 1862269312, +1870656896, 1879048064, 1887431552, 1895825024, 1904212096, +1912601216, 1920988544, 1929379456, 1937765504, 1946156672, +1954543232, 1962932096, 1971321728, 1979707264, 1988093056, +1996487552, 2004874624, 2013262208, 2021653888, 2030039936, +2038430848, 2046819968, 2055208576, 2063596672, 2071981952, +2080373632, 2088762752, 2097149056, 2105539712, 2113928576, +2122315136, 2130700672, 2139092608, 2147483264, 2155872128, +2164257664, 2172642176, 2181035392, 2189426048, 2197814912, +2206203008, 2214587264, 2222979712, 2231367808, 2239758208, +2248145024, 2256527744, 2264922752, 2273312128, 2281701248, +2290086272, 2298476672, 2306867072, 2315251072, 2323639168, +2332032128, 2340420224, 2348808064, 2357196416, 2365580416, +2373966976, 2382363008, 2390748544, 2399139968, 2407530368, +2415918976, 2424307328, 2432695424, 2441084288, 2449472384, +2457861248, 2466247808, 2474637184, 2483026816, 2491414144, +2499803776, 2508191872, 2516582272, 2524970368, 2533359232, +2541743488, 2550134144, 2558525056, 2566913408, 2575301504, +2583686528, 2592073856, 2600467328, 2608856192, 2617240448, +2625631616, 2634022016, 2642407552, 2650796416, 2659188352, +2667574912, 2675965312, 2684352896, 2692738688, 2701130624, +2709518464, 2717907328, 2726293376, 2734685056, 2743073152, +2751462016, 2759851648, 2768232832, 2776625536, 2785017728, +2793401984, 2801794432, 2810182016, 2818571648, 2826959488, +2835349376, 2843734144, 2852121472, 2860514432, 2868900992, +2877286784, 2885676928, 2894069632, 2902451584, 2910843008, +2919234688, 2927622784, 2936011648, 2944400768, 2952789376, +2961177728, 2969565568, 2977951616, 2986338944, 2994731392, +3003120256, 3011508352, 3019895936, 3028287104, 3036675968, +3045063808, 3053452928, 3061837696, 3070228352, 3078615424, +3087003776, 3095394944, 3103782272, 3112173184, 3120562048, +3128944768, 3137339264, 3145725056, 3154109312, 3162505088, +3170893184, 3179280256, 3187669376, 3196056704, 3204445568, +3212836736, 3221224064, 3229612928, 3238002304, 3246391168, +3254778496, 3263165824, 3271556224, 3279944576, 3288332416, +3296719232, 3305110912, 3313500032, 3321887104, 3330273152, +3338658944, 3347053184, 3355440512, 3363827072, 3372220288, +3380608384, 3388997504, 3397384576, 3405774208, 3414163072, +3422551936, 3430937984, 3439328384, 3447714176, 3456104576, +3464493952, 3472883584, 3481268864, 3489655168, 3498048896, +3506434432, 3514826368, 3523213952, 3531603584, 3539987072, +3548380288, 3556763264, 3565157248, 3573545344, 3581934464, +3590324096, 3598712704, 3607098752, 3615488384, 3623877248, +3632265856, 3640646528, 3649043584, 3657430144, 3665821568, +3674207872, 3682597504, 3690984832, 3699367808, 3707764352, +3716152448, 3724541056, 3732925568, 3741318016, 3749706368, +3758091136, 3766481536, 3774872704, 3783260032, 3791650432, +3800036224, 3808427648, 3816815488, 3825204608, 3833592704, +3841981568, 3850370432, 3858755968, 3867147904, 3875536256, +3883920512, 3892313728, 3900702592, 3909087872, 3917478784, +3925868416, 3934256512, 3942645376, 3951032192, 3959422336, +3967809152, 3976200064, 3984588416, 3992974976, 4001363584, +4009751168, 4018141312, 4026530432, 4034911616, 4043308928, +4051695488, 4060084352, 4068472448, 4076862848, 4085249408, +4093640576, 4102028416, 4110413696, 4118805632, 4127194496, +4135583104, 4143971968, 4152360832, 4160746112, 4169135744, +4177525888, 4185912704, 4194303616, 4202691968, 4211076736, +4219463552, 4227855488, 4236246656, 4244633728, 4253022848, +4261412224, 4269799808, 4278184832, 4286578048, 4294962304, +4303349632, 4311743104, 4320130432, 4328521088, 4336909184, +4345295488, 4353687424, 4362073472, 4370458496, 4378852736, +4387238528, 4395630208, 4404019072, 4412407424, 4420790656, +4429182848, 4437571456, 4445962112, 4454344064, 4462738048, +4471119232, 4479516544, 4487904128, 4496289664, 4504682368, +4513068416, 4521459584, 4529846144, 4538232704, 4546619776, +4555010176, 4563402112, 4571790208, 4580174464, 4588567936, +4596957056, 4605344896, 4613734016, 4622119808, 4630511488, +4638898816, 4647287936, 4655675264, 4664065664, 4672451968, +4680842624, 4689231488, 4697620352, 4706007424, 4714397056, +4722786176, 4731173248, 4739562368, 4747951744, 4756340608, +4764727936, 4773114496, 4781504384, 4789894784, 4798283648, +4806667648, 4815059584, 4823449472, 4831835776, 4840226176, +4848612224, 4857003392, 4865391488, 4873780096, 4882169728, +4890557312, 4898946944, 4907333248, 4915722368, 4924110976, +4932499328, 4940889728, 4949276032, 4957666432, 4966054784, +4974438016, 4982831488, 4991221376, 4999607168, 5007998848, +5016386432, 5024763776, 5033164672, 5041544576, 5049941888, +5058329728, 5066717056, 5075107456, 5083494272, 5091883904, +5100273536, 5108662144, 5117048192, 5125436032, 5133827456, +5142215296, 5150605184, 5158993024, 5167382144, 5175769472, +5184157568, 5192543872, 5200936064, 5209324928, 5217711232, +5226102656, 5234490496, 5242877312, 5251263872, 5259654016, +5268040832, 5276434304, 5284819328, 5293209728, 5301598592, +5309986688, 5318374784, 5326764416, 5335151488, 5343542144, +5351929472, 5360319872, 5368706944, 5377096576, 5385484928, +5393871232, 5402263424, 5410650496, 5419040384, 5427426944, +5435816576, 5444205952, 5452594816, 5460981376, 5469367936, +5477760896, 5486148736, 5494536832, 5502925952, 5511315328, +5519703424, 5528089984, 5536481152, 5544869504, 5553256064, +5561645696, 5570032768, 5578423936, 5586811264, 5595193216, +5603585408, 5611972736, 5620366208, 5628750464, 5637143936, +5645528192, 5653921408, 5662310272, 5670694784, 5679082624, +5687474048, 5695864448, 5704251008, 5712641408, 5721030272, +5729416832, 5737806208, 5746194304, 5754583936, 5762969984, +5771358592, 5779748224, 5788137856, 5796527488, 5804911232, +5813300608, 5821692544, 5830082176, 5838468992, 5846855552, +5855247488, 5863636096, 5872024448, 5880411008, 5888799872, +5897186432, 5905576832, 5913966976, 5922352768, 5930744704, +5939132288, 5947522432, 5955911296, 5964299392, 5972688256, +5981074304, 5989465472, 5997851008, 6006241408, 6014627968, +6023015552, 6031408256, 6039796096, 6048185216, 6056574848, +6064963456, 6073351808, 6081736064, 6090128768, 6098517632, +6106906496, 6115289216, 6123680896, 6132070016, 6140459648, +6148849024, 6157237376, 6165624704, 6174009728, 6182403712, +6190792064, 6199176064, 6207569792, 6215952256, 6224345216, +6232732544, 6241124224, 6249510272, 6257899136, 6266287744, +6274676864, 6283065728, 6291454336, 6299843456, 6308232064, +6316620928, 6325006208, 6333395584, 6341784704, 6350174848, +6358562176, 6366951296, 6375337856, 6383729536, 6392119168, +6400504192, 6408895616, 6417283456, 6425673344, 6434059136, +6442444672, 6450837376, 6459223424, 6467613056, 6476004224, +6484393088, 6492781952, 6501170048, 6509555072, 6517947008, +6526336384, 6534725504, 6543112832, 6551500672, 6559888768, +6568278656, 6576662912, 6585055616, 6593443456, 6601834112, +6610219648, 6618610304, 6626999168, 6635385472, 6643777408, +6652164224, 6660552832, 6668941952, 6677330048, 6685719424, +6694107776, 6702493568, 6710882176, 6719274112, 6727662976, +6736052096, 6744437632, 6752825984, 6761213824, 6769604224, +6777993856, 6786383488, 6794770816, 6803158144, 6811549312, +6819937664, 6828326528, 6836706176, 6845101696, 6853491328, +6861880448, 6870269312, 6878655104, 6887046272, 6895433344, +6903822208, 6912212864, 6920596864, 6928988288, 6937377152, +6945764992, 6954149248, 6962544256, 6970928768, 6979317376, +6987709312, 6996093824, 7004487296, 7012875392, 7021258624, +7029652352, 7038038912, 7046427776, 7054818944, 7063207808, +7071595136, 7079980928, 7088372608, 7096759424, 7105149824, +7113536896, 7121928064, 7130315392, 7138699648, 7147092352, +7155479168, 7163865728, 7172249984, 7180648064, 7189036672, +7197424768, 7205810816, 7214196608, 7222589824, 7230975104, +7239367552, 7247755904, 7256145536, 7264533376, 7272921472, +7281308032, 7289694848, 7298088832, 7306471808, 7314864512, +7323253888, 7331643008, 7340029568, 7348419712, 7356808832, +7365196672, 7373585792, 7381973888, 7390362752, 7398750592, +7407138944, 7415528576, 7423915648, 7432302208, 7440690304, +7449080192, 7457472128, 7465860992, 7474249088, 7482635648, +7491023744, 7499412608, 7507803008, 7516192384, 7524579968, +7532967296, 7541358464, 7549745792, 7558134656, 7566524032, +7574912896, 7583300992, 7591690112, 7600075136, 7608466816, +7616854912, 7625244544, 7633629824, 7642020992, 7650410368, +7658794112, 7667187328, 7675574912, 7683961984, 7692349568, +7700739712, 7709130368, 7717519232, 7725905536, 7734295424, +7742683264, 7751069056, 7759457408, 7767849088, 7776238208, +7784626816, 7793014912, 7801405312, 7809792128, 7818179968, +7826571136, 7834957184, 7843347328, 7851732352, 7860124544, +7868512384, 7876902016, 7885287808, 7893679744, 7902067072, +7910455936, 7918844288, 7927230848, 7935622784, 7944009344, +7952400256, 7960786048, 7969176704, 7977565312, 7985953408, +7994339968, 8002730368, 8011119488, 8019508096, 8027896192, +8036285056, 8044674688, 8053062272, 8061448832, 8069838464, +8078227328, 8086616704, 8095006592, 8103393664, 8111783552, +8120171392, 8128560256, 8136949376, 8145336704, 8153726848, +8162114944, 8170503296, 8178891904, 8187280768, 8195669632, +8204058496, 8212444544, 8220834176, 8229222272, 8237612672, +8246000768, 8254389376, 8262775168, 8271167104, 8279553664, +8287944064, 8296333184, 8304715136, 8313108352, 8321497984, +8329885568, 8338274432, 8346663296, 8355052928, 8363441536, +8371828352, 8380217984, 8388606592, 8396996224, 8405384576, +8413772672, 8422161536, 8430549376, 8438939008, 8447326592, +8455715456, 8464104832, 8472492928, 8480882048, 8489270656, +8497659776, 8506045312, 8514434944, 8522823808, 8531208832, +8539602304, 8547990656, 8556378752, 8564768384, 8573154176, +8581542784, 8589933952, 8598322816, 8606705024, 8615099264, +8623487872, 8631876992, 8640264064, 8648653952, 8657040256, +8665430656, 8673820544, 8682209152, 8690592128, 8698977152, +8707374464, 8715763328, 8724151424, 8732540032, 8740928384, +8749315712, 8757704576, 8766089344, 8774480768, 8782871936, +8791260032, 8799645824, 8808034432, 8816426368, 8824812928, +8833199488, 8841591424, 8849976448, 8858366336, 8866757248, +8875147136, 8883532928, 8891923328, 8900306816, 8908700288, +8917088384, 8925478784, 8933867392, 8942250368, 8950644608, +8959032704, 8967420544, 8975809664, 8984197504, 8992584064, +9000976256, 9009362048, 9017752448, 9026141312, 9034530688, +9042917504, 9051307904, 9059694208, 9068084864, 9076471424, +9084861824, 9093250688, 9101638528, 9110027648, 9118416512, +9126803584, 9135188096, 9143581312, 9151969664, 9160356224, +9168747136, 9177134464, 9185525632, 9193910144, 9202302848, +9210690688, 9219079552, 9227465344, 9235854464, 9244244864, +9252633472, 9261021824, 9269411456, 9277799296, 9286188928, +9294574208, 9302965888, 9311351936, 9319740032, 9328131968, +9336516736, 9344907392, 9353296768, 9361685888, 9370074752, +9378463616, 9386849408, 9395239808, 9403629184, 9412016512, +9420405376, 9428795008, 9437181568, 9445570688, 9453960832, +9462346624, 9470738048, 9479121536, 9487515008, 9495903616, +9504289664, 9512678528, 9521067904, 9529456256, 9537843584, +9546233728, 9554621312, 9563011456, 9571398784, 9579788672, +9588178304, 9596567168, 9604954496, 9613343104, 9621732992, +9630121856, 9638508416, 9646898816, 9655283584, 9663675776, +9672061312, 9680449664, 9688840064, 9697230464, 9705617536, +9714003584, 9722393984, 9730772608, 9739172224, 9747561088, +9755945344, 9764338816, 9772726144, 9781116544, 9789503872, +9797892992, 9806282624, 9814670464, 9823056512, 9831439232, +9839833984, 9848224384, 9856613504, 9865000576, 9873391232, +9881772416, 9890162816, 9898556288, 9906940544, 9915333248, +9923721088, 9932108672, 9940496512, 9948888448, 9957276544, +9965666176, 9974048384, 9982441088, 9990830464, 9999219584, +10007602816, 10015996544, 10024385152, 10032774016, 10041163648, +10049548928, 10057940096, 10066329472, 10074717824, 10083105152, +10091495296, 10099878784, 10108272256, 10116660608, 10125049216, +10133437312, 10141825664, 10150213504, 10158601088, 10166991232, +10175378816, 10183766144, 10192157312, 10200545408, 10208935552, +10217322112, 10225712768, 10234099328, 10242489472, 10250876032, +10259264896, 10267656064, 10276042624, 10284429184, 10292820352, +10301209472, 10309598848, 10317987712, 10326375296, 10334763392, +10343153536, 10351541632, 10359930752, 10368318592, 10376707456, +10385096576, 10393484672, 10401867136, 10410262144, 10418647424, +10427039104, 10435425664, 10443810176, 10452203648, 10460589952, +10468982144, 10477369472, 10485759104, 10494147712, 10502533504, +10510923392, 10519313536, 10527702656, 10536091264, 10544478592, +10552867712, 10561255808, 10569642368, 10578032768, 10586423168, +10594805632, 10603200128, 10611588992, 10619976064, 10628361344, +10636754048, 10645143424, 10653531776, 10661920384, 10670307968, +10678696832, 10687086464, 10695475072, 10703863168, 10712246144, +10720639616, 10729026688, 10737414784, 10745806208, 10754190976, +10762581376, 10770971264, 10779356288, 10787747456, 10796135552, +10804525184, 10812915584, 10821301888, 10829692288, 10838078336, +10846469248, 10854858368, 10863247232, 10871631488, 10880023424, +10888412032, 10896799616, 10905188992, 10913574016, 10921964672, +10930352768, 10938742912, 10947132544, 10955518592, 10963909504, +10972298368, 10980687488, 10989074816, 10997462912, 11005851776, +11014241152, 11022627712, 11031017344, 11039403904, 11047793024, +11056184704, 11064570752, 11072960896, 11081343872, 11089737856, +11098128256, 11106514816, 11114904448, 11123293568, 11131680128, +11140065152, 11148458368, 11156845696, 11165236864, 11173624192, +11182013824, 11190402688, 11198790784, 11207179136, 11215568768, +11223957376, 11232345728, 11240734592, 11249122688, 11257511296, +11265899648, 11274285952, 11282675584, 11291065472, 11299452544, +11307842432, 11316231296, 11324616832, 11333009024, 11341395584, +11349782656, 11358172288, 11366560384, 11374950016, 11383339648, +11391721856, 11400117376, 11408504192, 11416893568, 11425283456, +11433671552, 11442061184, 11450444672, 11458837888, 11467226752, +11475611776, 11484003968, 11492392064, 11500780672, 11509169024, +11517550976, 11525944448, 11534335616, 11542724224, 11551111808, +11559500672, 11567890304, 11576277376, 11584667008, 11593056128, +11601443456, 11609830016, 11618221952, 11626607488, 11634995072, +11643387776, 11651775104, 11660161664, 11668552576, 11676940928, +11685330304, 11693718656, 11702106496, 11710496128, 11718882688, +11727273088, 11735660416, 11744050048, 11752437376, 11760824704, +11769216128, 11777604736, 11785991296, 11794381952, 11802770048, +11811157888, 11819548544, 11827932544, 11836324736, 11844713344, +11853100928, 11861486464, 11869879936, 11878268032, 11886656896, +11895044992, 11903433088, 11911822976, 11920210816, 11928600448, +11936987264, 11945375872, 11953761152, 11962151296, 11970543488, +11978928512, 11987320448, 11995708288, 12004095104, 12012486272, +12020875136, 12029255552, 12037652096, 12046039168, 12054429568, +12062813824, 12071206528, 12079594624, 12087983744, 12096371072, +12104759936, 12113147264, 12121534592, 12129924992, 12138314624, +12146703232, 12155091584, 12163481216, 12171864704, 12180255872, +12188643968, 12197034112, 12205424512, 12213811328, 12222199424, +12230590336, 12238977664, 12247365248, 12255755392, 12264143488, +12272531584, 12280920448, 12289309568, 12297694592, 12306086528, +12314475392, 12322865024, 12331253632, 12339640448, 12348029312, +12356418944, 12364805248, 12373196672, 12381580928, 12389969024, +12398357632, 12406750592, 12415138432, 12423527552, 12431916416, +12440304512, 12448692352, 12457081216, 12465467776, 12473859968, +12482245504, 12490636672, 12499025536, 12507411584, 12515801728, +12524190592, 12532577152, 12540966272, 12549354368, 12557743232, +12566129536, 12574523264, 12582911872, 12591299456, 12599688064, +12608074624, 12616463488, 12624845696, 12633239936, 12641631616, +12650019968, 12658407296, 12666795136, 12675183232, 12683574656, +12691960192, 12700350592, 12708740224, 12717128576, 12725515904, +12733906816, 12742295168, 12750680192, 12759071872, 12767460736, +12775848832, 12784236928, 12792626816, 12801014656, 12809404288, +12817789312, 12826181504, 12834568832, 12842954624, 12851345792, +12859732352, 12868122496, 12876512128, 12884901248, 12893289088, +12901672832, 12910067584, 12918455168, 12926842496, 12935232896, +12943620736, 12952009856, 12960396928, 12968786816, 12977176192, +12985563776, 12993951104, 13002341504, 13010730368, 13019115392, +13027506304, 13035895168, 13044272512, 13052673152, 13061062528, +13069446272, 13077838976, 13086227072, 13094613632, 13103000192, +13111393664, 13119782528, 13128157568, 13136559232, 13144945024, +13153329536, 13161724288, 13170111872, 13178502784, 13186884736, +13195279744, 13203667072, 13212057472, 13220445824, 13228832128, +13237221248, 13245610624, 13254000512, 13262388352, 13270777472, +13279166336, 13287553408, 13295943296, 13304331904, 13312719488, +13321108096, 13329494656, 13337885824, 13346274944, 13354663808, +13363051136, 13371439232, 13379825024, 13388210816, 13396605056, +13404995456, 13413380224, 13421771392, 13430159744, 13438546048, +13446937216, 13455326848, 13463708288, 13472103808, 13480492672, +13488875648, 13497269888, 13505657728, 13514045312, 13522435712, +13530824576, 13539210112, 13547599232, 13555989376, 13564379008, +13572766336, 13581154432, 13589544832, 13597932928, 13606320512, +13614710656, 13623097472, 13631477632, 13639874944, 13648264064, +13656652928, 13665041792, 13673430656, 13681818496, 13690207616, +13698595712, 13706982272, 13715373184, 13723762048, 13732150144, +13740536704, 13748926592, 13757316224, 13765700992, 13774090112, +13782477952, 13790869376, 13799259008, 13807647872, 13816036736, +13824425344, 13832814208, 13841202304, 13849591424, 13857978752, +13866368896, 13874754688, 13883145344, 13891533184, 13899919232, +13908311168, 13916692096, 13925085056, 13933473152, 13941866368, +13950253696, 13958643584, 13967032192, 13975417216, 13983807616, +13992197504, 14000582272, 14008973696, 14017363072, 14025752192, +14034137984, 14042528384, 14050918016, 14059301504, 14067691648, +14076083584, 14084470144, 14092852352, 14101249664, 14109635968, +14118024832, 14126407552, 14134804352, 14143188608, 14151577984, +14159968384, 14168357248, 14176741504, 14185127296, 14193521024, +14201911424, 14210301824, 14218685056, 14227067264, 14235467392, +14243855488, 14252243072, 14260630144, 14269021568, 14277409408, +14285799296, 14294187904, 14302571392, 14310961792, 14319353728, +14327738752, 14336130944, 14344518784, 14352906368, 14361296512, +14369685376, 14378071424, 14386462592, 14394848128, 14403230848, +14411627392, 14420013952, 14428402304, 14436793472, 14445181568, +14453569664, 14461959808, 14470347904, 14478737024, 14487122816, +14495511424, 14503901824, 14512291712, 14520677504, 14529064832, +14537456768, 14545845632, 14554234496, 14562618496, 14571011456, +14579398784, 14587789184, 14596172672, 14604564608, 14612953984, +14621341312, 14629724288, 14638120832, 14646503296, 14654897536, +14663284864, 14671675264, 14680061056, 14688447616, 14696835968, +14705228416, 14713616768, 14722003328, 14730392192, 14738784128, +14747172736, 14755561088, 14763947648, 14772336512, 14780725376, +14789110144, 14797499776, 14805892736, 14814276992, 14822670208, +14831056256, 14839444352, 14847836032, 14856222848, 14864612992, +14872997504, 14881388672, 14889775744, 14898165376, 14906553472, +14914944896, 14923329664, 14931721856, 14940109696, 14948497024, +14956887424, 14965276544, 14973663616, 14982053248, 14990439808, +14998830976, 15007216768, 15015605888, 15023995264, 15032385152, +15040768384, 15049154944, 15057549184, 15065939072, 15074328448, +15082715008, 15091104128, 15099493504, 15107879296, 15116269184, +15124659584, 15133042304, 15141431936, 15149824384, 15158214272, +15166602368, 15174991232, 15183378304, 15191760512, 15200154496, +15208542592, 15216931712, 15225323392, 15233708416, 15242098048, +15250489216, 15258875264, 15267265408, 15275654528, 15284043136, +15292431488, 15300819584, 15309208192, 15317596544, 15325986176, +15334374784, 15342763648, 15351151744, 15359540608, 15367929728, +15376318336, 15384706432, 15393092992, 15401481856, 15409869952, +15418258816, 15426649984, 15435037568, 15443425664, 15451815296, +15460203392, 15468589184, 15476979328, 15485369216, 15493755776, +15502146944, 15510534272, 15518924416, 15527311232, 15535699072, +15544089472, 15552478336, 15560866688, 15569254528, 15577642624, +15586031488, 15594419072, 15602809472, 15611199104, 15619586432, +15627975296, 15636364928, 15644753792, 15653141888, 15661529216, +15669918848, 15678305152, 15686696576, 15695083136, 15703474048, +15711861632, 15720251264, 15728636288, 15737027456, 15745417088, +15753804928, 15762194048, 15770582656, 15778971008, 15787358336, +15795747712, 15804132224, 15812523392, 15820909696, 15829300096, +15837691264, 15846071936, 15854466944, 15862855808, 15871244672, +15879634816, 15888020608, 15896409728, 15904799104, 15913185152, +15921577088, 15929966464, 15938354816, 15946743424, 15955129472, +15963519872, 15971907968, 15980296064, 15988684928, 15997073024, +16005460864, 16013851264, 16022241152, 16030629248, 16039012736, +16047406976, 16055794816, 16064181376, 16072571264, 16080957824, +16089346688, 16097737856, 16106125184, 16114514816, 16122904192, +16131292544, 16139678848, 16148066944, 16156453504, 16164839552, +16173236096, 16181623424, 16190012032, 16198401152, 16206790528, +16215177344, 16223567744, 16231956352, 16240344704, 16248731008, +16257117824, 16265504384, 16273898624, 16282281856, 16290668672, +16299064192, 16307449216, 16315842176, 16324230016, 16332613504, +16341006464, 16349394304, 16357783168, 16366172288, 16374561664, +16382951296, 16391337856, 16399726208, 16408116352, 16416505472, +16424892032, 16433282176, 16441668224, 16450058624, 16458448768, +16466836864, 16475224448, 16483613056, 16492001408, 16500391808, +16508779648, 16517166976, 16525555328, 16533944192, 16542330752, +16550719616, 16559110528, 16567497088, 16575888512, 16584274816, +16592665472, 16601051008, 16609442944, 16617832064, 16626218624, +16634607488, 16642996096, 16651385728, 16659773824, 16668163712, +16676552576, 16684938112, 16693328768, 16701718144, 16710095488, +16718492288, 16726883968, 16735272832, 16743661184, 16752049792, +16760436608, 16768827008, 16777214336, 16785599104, 16793992832, +16802381696, 16810768768, 16819151744, 16827542656, 16835934848, +16844323712, 16852711552, 16861101952, 16869489536, 16877876864, +16886265728, 16894653056, 16903044736, 16911431296, 16919821696, +16928207488, 16936592768, 16944987776, 16953375616, 16961763968, +16970152832, 16978540928, 16986929536, 16995319168, 17003704448, +17012096896, 17020481152, 17028870784, 17037262208, 17045649536, +17054039936, 17062426496, 17070814336, 17079205504, 17087592064, +17095978112, 17104369024, 17112759424, 17121147776, 17129536384, +17137926016, 17146314368, 17154700928, 17163089792, 17171480192, +17179864192, 17188256896, 17196644992, 17205033856, 17213423488, +17221811072, 17230198912, 17238588032, 17246976896, 17255360384, +17263754624, 17272143232, 17280530048, 17288918912, 17297309312, +17305696384, 17314085504, 17322475136, 17330863744, 17339252096, +17347640192, 17356026496, 17364413824, 17372796544, 17381190016, +17389583488, 17397972608, 17406360704, 17414748544, 17423135872, +17431527296, 17439915904, 17448303232, 17456691584, 17465081728, +17473468288, 17481857408, 17490247552, 17498635904, 17507022464, +17515409024, 17523801728, 17532189824, 17540577664, 17548966016, +17557353344, 17565741184, 17574131584, 17582519168, 17590907008, +17599296128, 17607687808, 17616076672, 17624455808, 17632852352, +17641238656, 17649630848, 17658018944, 17666403968, 17674794112, +17683178368, 17691573376, 17699962496, 17708350592, 17716739968, +17725126528, 17733517184, 17741898112, 17750293888, 17758673024, +17767070336, 17775458432, 17783848832, 17792236928, 17800625536, +17809012352, 17817402752, 17825785984, 17834178944, 17842563968, +17850955648, 17859344512, 17867732864, 17876119424, 17884511872, +17892900224, 17901287296, 17909677696, 17918058112, 17926451072, +17934843776, 17943230848, 17951609216, 17960008576, 17968397696, +17976784256, 17985175424, 17993564032, 18001952128, 18010339712, +18018728576, 18027116672, 18035503232, 18043894144, 18052283264, +18060672128, 18069056384, 18077449856, 18085837184, 18094225792, +18102613376, 18111004544, 18119388544, 18127781248, 18136170368, +18144558976, 18152947328, 18161336192, 18169724288, 18178108544, +18186498944, 18194886784, 18203275648, 18211666048, 18220048768, +18228444544, 18236833408, 18245220736] + +cache_sizes = [ +16776896, 16907456, 17039296, 17170112, 17301056, 17432512, 17563072, +17693888, 17824192, 17955904, 18087488, 18218176, 18349504, 18481088, +18611392, 18742336, 18874304, 19004224, 19135936, 19267264, 19398208, +19529408, 19660096, 19791424, 19922752, 20053952, 20184896, 20315968, +20446912, 20576576, 20709184, 20840384, 20971072, 21102272, 21233216, +21364544, 21494848, 21626816, 21757376, 21887552, 22019392, 22151104, +22281536, 22412224, 22543936, 22675264, 22806464, 22935872, 23068096, +23198272, 23330752, 23459008, 23592512, 23723968, 23854912, 23986112, +24116672, 24247616, 24378688, 24509504, 24640832, 24772544, 24903488, +25034432, 25165376, 25296704, 25427392, 25558592, 25690048, 25820096, +25951936, 26081728, 26214208, 26345024, 26476096, 26606656, 26737472, +26869184, 26998208, 27131584, 27262528, 27393728, 27523904, 27655744, +27786688, 27917888, 28049344, 28179904, 28311488, 28441792, 28573504, +28700864, 28835648, 28966208, 29096768, 29228608, 29359808, 29490752, +29621824, 29752256, 29882816, 30014912, 30144448, 30273728, 30406976, +30538432, 30670784, 30799936, 30932672, 31063744, 31195072, 31325248, +31456192, 31588288, 31719232, 31850432, 31981504, 32110784, 32243392, +32372672, 32505664, 32636608, 32767808, 32897344, 33029824, 33160768, +33289664, 33423296, 33554368, 33683648, 33816512, 33947456, 34076992, +34208704, 34340032, 34471744, 34600256, 34734016, 34864576, 34993984, +35127104, 35258176, 35386688, 35518528, 35650624, 35782336, 35910976, +36044608, 36175808, 36305728, 36436672, 36568384, 36699968, 36830656, +36961984, 37093312, 37223488, 37355072, 37486528, 37617472, 37747904, +37879232, 38009792, 38141888, 38272448, 38403392, 38535104, 38660672, +38795584, 38925632, 39059264, 39190336, 39320768, 39452096, 39581632, +39713984, 39844928, 39974848, 40107968, 40238144, 40367168, 40500032, +40631744, 40762816, 40894144, 41023552, 41155904, 41286208, 41418304, +41547712, 41680448, 41811904, 41942848, 42073792, 42204992, 42334912, +42467008, 42597824, 42729152, 42860096, 42991552, 43122368, 43253696, +43382848, 43515712, 43646912, 43777088, 43907648, 44039104, 44170432, +44302144, 44433344, 44564288, 44694976, 44825152, 44956864, 45088448, +45219008, 45350464, 45481024, 45612608, 45744064, 45874496, 46006208, +46136768, 46267712, 46399424, 46529344, 46660672, 46791488, 46923328, +47053504, 47185856, 47316928, 47447872, 47579072, 47710144, 47839936, +47971648, 48103232, 48234176, 48365248, 48496192, 48627136, 48757312, +48889664, 49020736, 49149248, 49283008, 49413824, 49545152, 49675712, +49807168, 49938368, 50069056, 50200256, 50331584, 50462656, 50593472, +50724032, 50853952, 50986048, 51117632, 51248576, 51379904, 51510848, +51641792, 51773248, 51903296, 52035136, 52164032, 52297664, 52427968, +52557376, 52690112, 52821952, 52952896, 53081536, 53213504, 53344576, +53475776, 53608384, 53738816, 53870528, 54000832, 54131776, 54263744, +54394688, 54525248, 54655936, 54787904, 54918592, 55049152, 55181248, +55312064, 55442752, 55574336, 55705024, 55836224, 55967168, 56097856, +56228672, 56358592, 56490176, 56621888, 56753728, 56884928, 57015488, +57146816, 57278272, 57409216, 57540416, 57671104, 57802432, 57933632, +58064576, 58195264, 58326976, 58457408, 58588864, 58720192, 58849984, +58981696, 59113024, 59243456, 59375552, 59506624, 59637568, 59768512, +59897792, 60030016, 60161984, 60293056, 60423872, 60554432, 60683968, +60817216, 60948032, 61079488, 61209664, 61341376, 61471936, 61602752, +61733696, 61865792, 61996736, 62127808, 62259136, 62389568, 62520512, +62651584, 62781632, 62910784, 63045056, 63176128, 63307072, 63438656, +63569216, 63700928, 63831616, 63960896, 64093888, 64225088, 64355392, +64486976, 64617664, 64748608, 64879424, 65009216, 65142464, 65273792, +65402816, 65535424, 65666752, 65797696, 65927744, 66060224, 66191296, +66321344, 66453056, 66584384, 66715328, 66846656, 66977728, 67108672, +67239104, 67370432, 67501888, 67631296, 67763776, 67895104, 68026304, +68157248, 68287936, 68419264, 68548288, 68681408, 68811968, 68942912, +69074624, 69205568, 69337024, 69467584, 69599168, 69729472, 69861184, +69989824, 70122944, 70253888, 70385344, 70515904, 70647232, 70778816, +70907968, 71040832, 71171648, 71303104, 71432512, 71564992, 71695168, +71826368, 71958464, 72089536, 72219712, 72350144, 72482624, 72613568, +72744512, 72875584, 73006144, 73138112, 73268672, 73400128, 73530944, +73662272, 73793344, 73924544, 74055104, 74185792, 74316992, 74448832, +74579392, 74710976, 74841664, 74972864, 75102784, 75233344, 75364544, +75497024, 75627584, 75759296, 75890624, 76021696, 76152256, 76283072, +76414144, 76545856, 76676672, 76806976, 76937792, 77070016, 77200832, +77331392, 77462464, 77593664, 77725376, 77856448, 77987776, 78118336, +78249664, 78380992, 78511424, 78642496, 78773056, 78905152, 79033664, +79166656, 79297472, 79429568, 79560512, 79690816, 79822784, 79953472, +80084672, 80214208, 80346944, 80477632, 80608576, 80740288, 80870848, +81002048, 81133504, 81264448, 81395648, 81525952, 81657536, 81786304, +81919808, 82050112, 82181312, 82311616, 82443968, 82573376, 82705984, +82835776, 82967744, 83096768, 83230528, 83359552, 83491264, 83622464, +83753536, 83886016, 84015296, 84147776, 84277184, 84409792, 84540608, +84672064, 84803008, 84934336, 85065152, 85193792, 85326784, 85458496, +85589312, 85721024, 85851968, 85982656, 86112448, 86244416, 86370112, +86506688, 86637632, 86769344, 86900672, 87031744, 87162304, 87293632, +87424576, 87555392, 87687104, 87816896, 87947968, 88079168, 88211264, +88341824, 88473152, 88603712, 88735424, 88862912, 88996672, 89128384, +89259712, 89390272, 89521984, 89652544, 89783872, 89914816, 90045376, +90177088, 90307904, 90438848, 90569152, 90700096, 90832832, 90963776, +91093696, 91223744, 91356992, 91486784, 91618496, 91749824, 91880384, +92012224, 92143552, 92273344, 92405696, 92536768, 92666432, 92798912, +92926016, 93060544, 93192128, 93322816, 93453632, 93583936, 93715136, +93845056, 93977792, 94109504, 94240448, 94371776, 94501184, 94632896, +94764224, 94895552, 95023424, 95158208, 95287744, 95420224, 95550016, +95681216, 95811904, 95943872, 96075328, 96203584, 96337856, 96468544, +96599744, 96731072, 96860992, 96992576, 97124288, 97254848, 97385536, +97517248, 97647808, 97779392, 97910464, 98041408, 98172608, 98303168, +98434496, 98565568, 98696768, 98827328, 98958784, 99089728, 99220928, +99352384, 99482816, 99614272, 99745472, 99876416, 100007104, +100138048, 100267072, 100401088, 100529984, 100662592, 100791872, +100925248, 101056064, 101187392, 101317952, 101449408, 101580608, +101711296, 101841728, 101973824, 102104896, 102235712, 102366016, +102498112, 102628672, 102760384, 102890432, 103021888, 103153472, +103284032, 103415744, 103545152, 103677248, 103808576, 103939648, +104070976, 104201792, 104332736, 104462528, 104594752, 104725952, +104854592, 104988608, 105118912, 105247808, 105381184, 105511232, +105643072, 105774784, 105903296, 106037056, 106167872, 106298944, +106429504, 106561472, 106691392, 106822592, 106954304, 107085376, +107216576, 107346368, 107478464, 107609792, 107739712, 107872192, +108003136, 108131392, 108265408, 108396224, 108527168, 108657344, +108789568, 108920384, 109049792, 109182272, 109312576, 109444928, +109572928, 109706944, 109837888, 109969088, 110099648, 110230976, +110362432, 110492992, 110624704, 110755264, 110886208, 111017408, +111148864, 111279296, 111410752, 111541952, 111673024, 111803456, +111933632, 112066496, 112196416, 112328512, 112457792, 112590784, +112715968, 112852672, 112983616, 113114944, 113244224, 113376448, +113505472, 113639104, 113770304, 113901376, 114031552, 114163264, +114294592, 114425536, 114556864, 114687424, 114818624, 114948544, +115080512, 115212224, 115343296, 115473472, 115605184, 115736128, +115867072, 115997248, 116128576, 116260288, 116391488, 116522944, +116652992, 116784704, 116915648, 117046208, 117178304, 117308608, +117440192, 117569728, 117701824, 117833024, 117964096, 118094656, +118225984, 118357312, 118489024, 118617536, 118749632, 118882112, +119012416, 119144384, 119275328, 119406016, 119537344, 119668672, +119798464, 119928896, 120061376, 120192832, 120321728, 120454336, +120584512, 120716608, 120848192, 120979136, 121109056, 121241408, +121372352, 121502912, 121634752, 121764416, 121895744, 122027072, +122157632, 122289088, 122421184, 122550592, 122682944, 122813888, +122945344, 123075776, 123207488, 123338048, 123468736, 123600704, +123731264, 123861952, 123993664, 124124608, 124256192, 124386368, +124518208, 124649024, 124778048, 124911296, 125041088, 125173696, +125303744, 125432896, 125566912, 125696576, 125829056, 125958592, +126090304, 126221248, 126352832, 126483776, 126615232, 126746432, +126876608, 127008704, 127139392, 127270336, 127401152, 127532224, +127663552, 127794752, 127925696, 128055232, 128188096, 128319424, +128449856, 128581312, 128712256, 128843584, 128973632, 129103808, +129236288, 129365696, 129498944, 129629888, 129760832, 129892288, +130023104, 130154048, 130283968, 130416448, 130547008, 130678336, +130807616, 130939456, 131071552, 131202112, 131331776, 131464384, +131594048, 131727296, 131858368, 131987392, 132120256, 132250816, +132382528, 132513728, 132644672, 132774976, 132905792, 133038016, +133168832, 133299392, 133429312, 133562048, 133692992, 133823296, +133954624, 134086336, 134217152, 134348608, 134479808, 134607296, +134741056, 134872384, 135002944, 135134144, 135265472, 135396544, +135527872, 135659072, 135787712, 135921472, 136052416, 136182848, +136313792, 136444864, 136576448, 136707904, 136837952, 136970048, +137099584, 137232064, 137363392, 137494208, 137625536, 137755712, +137887424, 138018368, 138149824, 138280256, 138411584, 138539584, +138672832, 138804928, 138936128, 139066688, 139196864, 139328704, +139460032, 139590208, 139721024, 139852864, 139984576, 140115776, +140245696, 140376512, 140508352, 140640064, 140769856, 140902336, +141032768, 141162688, 141294016, 141426496, 141556544, 141687488, +141819584, 141949888, 142080448, 142212544, 142342336, 142474432, +142606144, 142736192, 142868288, 142997824, 143129408, 143258944, +143392448, 143523136, 143653696, 143785024, 143916992, 144045632, +144177856, 144309184, 144440768, 144570688, 144701888, 144832448, +144965056, 145096384, 145227584, 145358656, 145489856, 145620928, +145751488, 145883072, 146011456, 146144704, 146275264, 146407232, +146538176, 146668736, 146800448, 146931392, 147062336, 147193664, +147324224, 147455936, 147586624, 147717056, 147848768, 147979456, +148110784, 148242368, 148373312, 148503232, 148635584, 148766144, +148897088, 149028416, 149159488, 149290688, 149420224, 149551552, +149683136, 149814976, 149943616, 150076352, 150208064, 150338624, +150470464, 150600256, 150732224, 150862784, 150993088, 151125952, +151254976, 151388096, 151519168, 151649728, 151778752, 151911104, +152042944, 152174144, 152304704, 152435648, 152567488, 152698816, +152828992, 152960576, 153091648, 153222976, 153353792, 153484096, +153616192, 153747008, 153878336, 154008256, 154139968, 154270912, +154402624, 154533824, 154663616, 154795712, 154926272, 155057984, +155188928, 155319872, 155450816, 155580608, 155712064, 155843392, +155971136, 156106688, 156237376, 156367424, 156499264, 156630976, +156761536, 156892352, 157024064, 157155008, 157284416, 157415872, +157545536, 157677248, 157810496, 157938112, 158071744, 158203328, +158334656, 158464832, 158596288, 158727616, 158858048, 158988992, +159121216, 159252416, 159381568, 159513152, 159645632, 159776192, +159906496, 160038464, 160169536, 160300352, 160430656, 160563008, +160693952, 160822208, 160956352, 161086784, 161217344, 161349184, +161480512, 161611456, 161742272, 161873216, 162002752, 162135872, +162266432, 162397888, 162529216, 162660032, 162790976, 162922048, +163052096, 163184576, 163314752, 163446592, 163577408, 163707968, +163839296, 163969984, 164100928, 164233024, 164364224, 164494912, +164625856, 164756672, 164887616, 165019072, 165150016, 165280064, +165412672, 165543104, 165674944, 165805888, 165936832, 166067648, +166198336, 166330048, 166461248, 166591552, 166722496, 166854208, +166985408, 167116736, 167246656, 167378368, 167508416, 167641024, +167771584, 167903168, 168034112, 168164032, 168295744, 168427456, +168557632, 168688448, 168819136, 168951616, 169082176, 169213504, +169344832, 169475648, 169605952, 169738048, 169866304, 169999552, +170131264, 170262464, 170393536, 170524352, 170655424, 170782016, +170917696, 171048896, 171179072, 171310784, 171439936, 171573184, +171702976, 171835072, 171966272, 172097216, 172228288, 172359232, +172489664, 172621376, 172747712, 172883264, 173014208, 173144512, +173275072, 173407424, 173539136, 173669696, 173800768, 173931712, +174063424, 174193472, 174325696, 174455744, 174586816, 174718912, +174849728, 174977728, 175109696, 175242688, 175374272, 175504832, +175636288, 175765696, 175898432, 176028992, 176159936, 176291264, +176422592, 176552512, 176684864, 176815424, 176946496, 177076544, +177209152, 177340096, 177470528, 177600704, 177731648, 177864256, +177994816, 178126528, 178257472, 178387648, 178518464, 178650176, +178781888, 178912064, 179044288, 179174848, 179305024, 179436736, +179568448, 179698496, 179830208, 179960512, 180092608, 180223808, +180354752, 180485696, 180617152, 180748096, 180877504, 181009984, +181139264, 181272512, 181402688, 181532608, 181663168, 181795136, +181926592, 182057536, 182190016, 182320192, 182451904, 182582336, +182713792, 182843072, 182976064, 183107264, 183237056, 183368384, +183494848, 183631424, 183762752, 183893824, 184024768, 184154816, +184286656, 184417984, 184548928, 184680128, 184810816, 184941248, +185072704, 185203904, 185335616, 185465408, 185596352, 185727296, +185859904, 185989696, 186121664, 186252992, 186383552, 186514112, +186645952, 186777152, 186907328, 187037504, 187170112, 187301824, +187429184, 187562048, 187693504, 187825472, 187957184, 188087104, +188218304, 188349376, 188481344, 188609728, 188743616, 188874304, +189005248, 189136448, 189265088, 189396544, 189528128, 189660992, +189791936, 189923264, 190054208, 190182848, 190315072, 190447424, +190577984, 190709312, 190840768, 190971328, 191102656, 191233472, +191364032, 191495872, 191626816, 191758016, 191888192, 192020288, +192148928, 192282176, 192413504, 192542528, 192674752, 192805952, +192937792, 193068608, 193198912, 193330496, 193462208, 193592384, +193723456, 193854272, 193985984, 194116672, 194247232, 194379712, +194508352, 194641856, 194772544, 194900672, 195035072, 195166016, +195296704, 195428032, 195558592, 195690304, 195818176, 195952576, +196083392, 196214336, 196345792, 196476736, 196607552, 196739008, +196869952, 197000768, 197130688, 197262784, 197394368, 197523904, +197656384, 197787584, 197916608, 198049472, 198180544, 198310208, +198442432, 198573632, 198705088, 198834368, 198967232, 199097792, +199228352, 199360192, 199491392, 199621696, 199751744, 199883968, +200014016, 200146624, 200276672, 200408128, 200540096, 200671168, +200801984, 200933312, 201062464, 201194944, 201326144, 201457472, +201588544, 201719744, 201850816, 201981632, 202111552, 202244032, +202374464, 202505152, 202636352, 202767808, 202898368, 203030336, +203159872, 203292608, 203423296, 203553472, 203685824, 203816896, +203947712, 204078272, 204208192, 204341056, 204472256, 204603328, +204733888, 204864448, 204996544, 205125568, 205258304, 205388864, +205517632, 205650112, 205782208, 205913536, 206044736, 206176192, +206307008, 206434496, 206569024, 206700224, 206831168, 206961856, +207093056, 207223616, 207355328, 207486784, 207616832, 207749056, +207879104, 208010048, 208141888, 208273216, 208404032, 208534336, +208666048, 208796864, 208927424, 209059264, 209189824, 209321792, +209451584, 209582656, 209715136, 209845568, 209976896, 210106432, +210239296, 210370112, 210501568, 210630976, 210763712, 210894272, +211024832, 211156672, 211287616, 211418176, 211549376, 211679296, +211812032, 211942592, 212074432, 212204864, 212334016, 212467648, +212597824, 212727616, 212860352, 212991424, 213120832, 213253952, +213385024, 213515584, 213645632, 213777728, 213909184, 214040128, +214170688, 214302656, 214433728, 214564544, 214695232, 214826048, +214956992, 215089088, 215219776, 215350592, 215482304, 215613248, +215743552, 215874752, 216005312, 216137024, 216267328, 216399296, +216530752, 216661696, 216790592, 216923968, 217054528, 217183168, +217316672, 217448128, 217579072, 217709504, 217838912, 217972672, +218102848, 218233024, 218364736, 218496832, 218627776, 218759104, +218888896, 219021248, 219151936, 219281728, 219413056, 219545024, +219675968, 219807296, 219938624, 220069312, 220200128, 220331456, +220461632, 220592704, 220725184, 220855744, 220987072, 221117888, +221249216, 221378368, 221510336, 221642048, 221772736, 221904832, +222031808, 222166976, 222297536, 222428992, 222559936, 222690368, +222820672, 222953152, 223083968, 223213376, 223345984, 223476928, +223608512, 223738688, 223869376, 224001472, 224132672, 224262848, +224394944, 224524864, 224657344, 224788288, 224919488, 225050432, +225181504, 225312704, 225443776, 225574592, 225704768, 225834176, +225966784, 226097216, 226229824, 226360384, 226491712, 226623424, +226754368, 226885312, 227015104, 227147456, 227278528, 227409472, +227539904, 227669696, 227802944, 227932352, 228065216, 228196288, +228326464, 228457792, 228588736, 228720064, 228850112, 228981056, +229113152, 229243328, 229375936, 229505344, 229636928, 229769152, +229894976, 230030272, 230162368, 230292416, 230424512, 230553152, +230684864, 230816704, 230948416, 231079616, 231210944, 231342016, +231472448, 231603776, 231733952, 231866176, 231996736, 232127296, +232259392, 232388672, 232521664, 232652608, 232782272, 232914496, +233043904, 233175616, 233306816, 233438528, 233569984, 233699776, +233830592, 233962688, 234092224, 234221888, 234353984, 234485312, +234618304, 234749888, 234880832, 235011776, 235142464, 235274048, +235403456, 235535936, 235667392, 235797568, 235928768, 236057152, +236190272, 236322752, 236453312, 236583616, 236715712, 236846528, +236976448, 237108544, 237239104, 237371072, 237501632, 237630784, +237764416, 237895232, 238026688, 238157632, 238286912, 238419392, +238548032, 238681024, 238812608, 238941632, 239075008, 239206336, +239335232, 239466944, 239599168, 239730496, 239861312, 239992384, +240122816, 240254656, 240385856, 240516928, 240647872, 240779072, +240909632, 241040704, 241171904, 241302848, 241433408, 241565248, +241696192, 241825984, 241958848, 242088256, 242220224, 242352064, +242481856, 242611648, 242744896, 242876224, 243005632, 243138496, +243268672, 243400384, 243531712, 243662656, 243793856, 243924544, +244054592, 244187072, 244316608, 244448704, 244580032, 244710976, +244841536, 244972864, 245104448, 245233984, 245365312, 245497792, +245628736, 245759936, 245889856, 246021056, 246152512, 246284224, +246415168, 246545344, 246675904, 246808384, 246939584, 247070144, +247199552, 247331648, 247463872, 247593536, 247726016, 247857088, +247987648, 248116928, 248249536, 248380736, 248512064, 248643008, +248773312, 248901056, 249036608, 249167552, 249298624, 249429184, +249560512, 249692096, 249822784, 249954112, 250085312, 250215488, +250345792, 250478528, 250608704, 250739264, 250870976, 251002816, +251133632, 251263552, 251395136, 251523904, 251657792, 251789248, +251919424, 252051392, 252182464, 252313408, 252444224, 252575552, +252706624, 252836032, 252968512, 253099712, 253227584, 253361728, +253493056, 253623488, 253754432, 253885504, 254017216, 254148032, +254279488, 254410432, 254541376, 254672576, 254803264, 254933824, +255065792, 255196736, 255326528, 255458752, 255589952, 255721408, +255851072, 255983296, 256114624, 256244416, 256374208, 256507712, +256636096, 256768832, 256900544, 257031616, 257162176, 257294272, +257424448, 257555776, 257686976, 257818432, 257949632, 258079552, +258211136, 258342464, 258473408, 258603712, 258734656, 258867008, +258996544, 259127744, 259260224, 259391296, 259522112, 259651904, +259784384, 259915328, 260045888, 260175424, 260308544, 260438336, +260570944, 260700992, 260832448, 260963776, 261092672, 261226304, +261356864, 261487936, 261619648, 261750592, 261879872, 262011968, +262143424, 262274752, 262404416, 262537024, 262667968, 262799296, +262928704, 263061184, 263191744, 263322944, 263454656, 263585216, +263716672, 263847872, 263978944, 264108608, 264241088, 264371648, +264501184, 264632768, 264764096, 264895936, 265024576, 265158464, +265287488, 265418432, 265550528, 265681216, 265813312, 265943488, +266075968, 266206144, 266337728, 266468032, 266600384, 266731072, +266862272, 266993344, 267124288, 267255616, 267386432, 267516992, +267648704, 267777728, 267910592, 268040512, 268172096, 268302784, +268435264, 268566208, 268696256, 268828096, 268959296, 269090368, +269221312, 269352256, 269482688, 269614784, 269745856, 269876416, +270007616, 270139328, 270270272, 270401216, 270531904, 270663616, +270791744, 270924736, 271056832, 271186112, 271317184, 271449536, +271580992, 271711936, 271843136, 271973056, 272105408, 272236352, +272367296, 272498368, 272629568, 272759488, 272891456, 273022784, +273153856, 273284672, 273415616, 273547072, 273677632, 273808448, +273937088, 274071488, 274200896, 274332992, 274463296, 274595392, +274726208, 274857536, 274988992, 275118656, 275250496, 275382208, +275513024, 275643968, 275775296, 275906368, 276037184, 276167872, +276297664, 276429376, 276560576, 276692672, 276822976, 276955072, +277085632, 277216832, 277347008, 277478848, 277609664, 277740992, +277868608, 278002624, 278134336, 278265536, 278395328, 278526784, +278657728, 278789824, 278921152, 279052096, 279182912, 279313088, +279443776, 279576256, 279706048, 279838528, 279969728, 280099648, +280230976, 280361408, 280493632, 280622528, 280755392, 280887104, +281018176, 281147968, 281278912, 281411392, 281542592, 281673152, +281803712, 281935552, 282066496, 282197312, 282329024, 282458816, +282590272, 282720832, 282853184, 282983744, 283115072, 283246144, +283377344, 283508416, 283639744, 283770304, 283901504, 284032576, +284163136, 284294848, 284426176, 284556992, 284687296, 284819264, +284950208, 285081536] +``` diff --git a/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md new file mode 100644 index 00000000000..5dc5ad5b1ec --- /dev/null +++ b/public/content/translations/mr/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/index.md @@ -0,0 +1,42 @@ +--- +title: "मायनिंग अल्गोरिदम" +description: "Ethereum मायनिंगसाठी वापरलेल्या अल्गोरिदम्सबद्दल सविस्तर माहिती." +lang: mr +--- + + + + + +प्रूफ-ऑफ-वर्क आता इथेरियमच्या एकमत यंत्रणेचा आधार नाही, याचा अर्थ मायनिंग बंद करण्यात आले आहे. त्याऐवजी, इथेरियम ETH स्टेक करणाऱ्या व्हॅलिडेटर्सद्वारे सुरक्षित आहे. तुम्ही आजच तुमचे ETH स्टेक करणे सुरू करू शकता. द मर्ज, प्रूफ-ऑफ-स्टेक, आणि स्टॅकिंग यावर अधिक वाचा. हे पान केवळ ऐतिहासिक माहितीसाठी आहे. + + + + +Ethereum मायनिंगमध्ये Ethash नावाचा अल्गोरिदम वापरला जात होता. अल्गोरिदमची मूळ कल्पना अशी आहे की, मायनर ब्रूट फोर्स कंप्युटेशन वापरून एक नॉन्स इनपुट शोधण्याचा प्रयत्न करतो, जेणेकरून मिळणारा हॅश हा कॅल्क्युलेटेड डिफिकल्टीनुसार ठरवलेल्या थ्रेशोल्डपेक्षा लहान असेल. ही डिफिकल्टी लेव्हल डायनॅमिकली ॲडजस्ट केली जाऊ शकते, ज्यामुळे नियमित अंतराने ब्लॉक तयार होऊ शकतात. + +## पूर्वतयारी {#prerequisites} + +हे पेज अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [प्रूफ-ऑफ-वर्क कन्सेन्सस](/developers/docs/consensus-mechanisms/pow) आणि [मायनिंग](/developers/docs/consensus-mechanisms/pow/mining) याबद्दल वाचा. + +## Dagger Hashimoto {#dagger-hashimoto} + +Dagger Hashimoto हा Ethereum मायनिंगसाठीचा एक पूर्ववर्ती संशोधन अल्गोरिदम होता, ज्याची जागा Ethash ने घेतली. हे दोन वेगवेगळ्या अल्गोरिदम्सचे एकत्रीकरण होते: Dagger आणि Hashimoto. हे केवळ एक संशोधन अंमलबजावणी होते आणि Ethereum मेननेट लाँच होईपर्यंत Ethash ने त्याची जागा घेतली होती. + +[Dagger](http://www.hashcash.org/papers/dagger.html) मध्ये [डायरेक्टेड एसायक्लिक ग्राफ](https://en.wikipedia.org/wiki/Directed_acyclic_graph) तयार करणे समाविष्ट आहे, ज्याचे रँडम स्लाइस एकत्र हॅश केले जातात. मूळ तत्त्व हे आहे की प्रत्येक नॉन्ससाठी मोठ्या डेटा ट्रीच्या फक्त एका लहान भागाची आवश्यकता असते. प्रत्येक नॉन्ससाठी सबट्रीची पुन्हा गणना करणे मायनिंगसाठी खूपच खर्चिक आहे - त्यामुळे ट्री संग्रहित करण्याची गरज आहे - परंतु एका नॉन्सच्या व्हेरिफिकेशनसाठी ते ठीक आहे. Dagger ची रचना Scrypt सारख्या विद्यमान अल्गोरिदम्सना पर्याय म्हणून केली गेली होती, जे मेमरी-हार्ड आहेत परंतु जेव्हा त्यांची मेमरी-हार्डनेस खरोखर सुरक्षित पातळीपर्यंत वाढते तेव्हा व्हेरिफाय करणे कठीण होते. तथापि, Dagger शेअर्ड मेमरी हार्डवेअर ॲक्सिलरेशनसाठी असुरक्षित होता आणि संशोधनाच्या इतर मार्गांसाठी तो वगळण्यात आला. + +[Hashimoto](http://diyhpl.us/%7Ebryan/papers2/bitcoin/meh/hashimoto.pdf) हा एक अल्गोरिदम आहे जो I/O बाउंड (म्हणजे, मेमरी रीड्स ही मायनिंग प्रक्रियेतील मर्यादित घटक आहे) असल्यामुळे ASIC-प्रतिरोधक आहे. सिद्धांत असा आहे की कंप्युटेशनपेक्षा RAM अधिक उपलब्ध आहे; अब्जावधी डॉलर्सच्या संशोधनाने आधीच वेगवेगळ्या वापराच्या प्रकरणांसाठी RAM ऑप्टिमाइझ करण्यावर लक्ष केंद्रित केले आहे, ज्यात अनेकदा जवळपास-रँडम ॲक्सेस पॅटर्न (म्हणूनच “रँडम ॲक्सेस मेमरी”) समाविष्ट असतात. परिणामी, विद्यमान RAM अल्गोरिदमचे मूल्यांकन करण्यासाठी मध्यम प्रमाणात ऑप्टिमल असण्याची शक्यता आहे. Hashimoto डेटाचा स्रोत म्हणून ब्लॉकचेन वापरतो, आणि एकाच वेळी वरील (1) आणि (3) पूर्ण करतो. + +Dagger-Hashimoto मध्ये Dagger आणि Hashimoto अल्गोरिदम्सच्या सुधारित आवृत्त्या वापरल्या गेल्या. Dagger Hashimoto आणि Hashimoto मधील फरक हा आहे की, ब्लॉकचेनला डेटा स्रोत म्हणून वापरण्याऐवजी, Dagger Hashimoto कस्टम-जनरेटेड डेटा सेट वापरतो, जो प्रत्येक N ब्लॉक्सनंतर ब्लॉक डेटावर आधारित अपडेट होतो. हा डेटा सेट Dagger अल्गोरिदम वापरून तयार केला जातो, ज्यामुळे लाइट क्लायंट व्हेरिफिकेशन अल्गोरिदमसाठी प्रत्येक नॉन्ससाठी विशिष्ट सबसेटची कार्यक्षमतेने गणना करता येते. Dagger Hashimoto आणि Dagger मधील फरक हा आहे की, मूळ Dagger च्या विपरीत, ब्लॉकला क्वेरी करण्यासाठी वापरलेला डेटासेट अर्ध-स्थायी असतो, जो केवळ अधूनमधून (उदा., आठवड्यातून एकदा) अपडेट केला जातो. याचा अर्थ असा की डेटासेट तयार करण्याच्या प्रयत्नांचा भाग शून्याच्या जवळ आहे, त्यामुळे शेअर्ड मेमरी स्पीडअप्सबद्दल सर्जियो लर्नरचे युक्तिवाद नगण्य ठरतात. + +[Dagger-Hashimoto](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/dagger-hashimoto) बद्दल अधिक माहिती. + +## Ethash {#ethash} + +Ethash हा मायनिंग अल्गोरिदम होता जो आता रद्द झालेल्या प्रूफ-ऑफ-वर्क आर्किटेक्चर अंतर्गत वास्तविक Ethereum मेननेटवर वापरला गेला होता. अल्गोरिदममध्ये लक्षणीय बदल झाल्यानंतर Dagger-Hashimoto च्या विशिष्ट आवृत्तीला Ethash हे नवीन नाव दिले गेले, तरीही त्याने आपल्या पूर्ववर्तीची मूलभूत तत्त्वे कायम ठेवली. Ethereum मेननेटने केवळ Ethash वापरला - Dagger Hashimoto हे मायनिंग अल्गोरिदमचे R&D आवृत्ती होते, जे Ethereum मेननेटवर मायनिंग सुरू होण्यापूर्वी बदलण्यात आले होते. + +[Ethash](/developers/docs/consensus-mechanisms/pow/mining/mining-algorithms/ethash) बद्दल अधिक माहिती. + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/dapps/index.md b/public/content/translations/mr/developers/docs/dapps/index.md new file mode 100644 index 00000000000..bf5785e9ad9 --- /dev/null +++ b/public/content/translations/mr/developers/docs/dapps/index.md @@ -0,0 +1,96 @@ +--- +title: "dapps ची तांत्रिक ओळख" +description: +lang: mr +--- + +विकेंद्रित ॲप्लिकेशन (dapp) हे एक विकेंद्रित नेटवर्कवर तयार केलेले ॲप्लिकेशन आहे जे [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/) आणि फ्रंटएंड यूजर इंटरफेस एकत्र करते. Ethereum वर, स्मार्ट कॉन्ट्रॅक्ट्स प्रवेशयोग्य आणि पारदर्शक आहेत – खुल्या API प्रमाणे – त्यामुळे तुमच्या dapp मध्ये दुसऱ्या कोणीतरी लिहिलेले स्मार्ट कॉन्ट्रॅक्ट देखील समाविष्ट असू शकते. + +## पूर्वतयारी {#prerequisites} + +dapps बद्दल जाणून घेण्यापूर्वी, तुम्ही [ब्लॉकचेनची मूलभूत माहिती](/developers/docs/intro-to-ethereum/) घेतली पाहिजे आणि Ethereum नेटवर्क आणि ते कसे विकेंद्रित आहे याबद्दल वाचले पाहिजे. + +## dapp ची व्याख्या {#definition-of-a-dapp} + +dapp चा बॅकएंड कोड विकेंद्रित पीअर-टू-पीअर नेटवर्कवर चालतो. याची तुलना अशा ॲपशी करा जिथे बॅकएंड कोड केंद्रीकृत सर्व्हरवर चालत आहे. + +dapp मध्ये फ्रंटएंड कोड आणि यूजर इंटरफेस कोणत्याही भाषेत (ॲपप्रमाणेच) लिहिलेले असू शकतात जेणेकरून ते त्याच्या बॅकएंडला कॉल करू शकतील. शिवाय, त्याचा फ्रंटएंड [IPFS](https://ipfs.io/) सारख्या विकेंद्रित स्टोरेजवर होस्ट केला जाऊ शकतो. + +- **विकेंद्रित** - dapps Ethereum वर चालतात, जे एक खुले सार्वजनिक विकेंद्रित प्लॅटफॉर्म आहे जिथे कोणत्याही एका व्यक्तीचे किंवा गटाचे नियंत्रण नसते +- **निर्धारक** - dapps ज्या वातावरणात कार्यान्वित केले जातात त्याकडे दुर्लक्ष करून समान कार्य करतात +- **ट्युरिंग पूर्ण** - आवश्यक संसाधने दिल्यास dapps कोणतीही कृती करू शकतात +- **विलग** - dapps Ethereum व्हर्च्युअल मशीन म्हणून ओळखल्या जाणार्‍या व्हर्च्युअल वातावरणात कार्यान्वित केले जातात जेणेकरून स्मार्ट कॉन्ट्रॅक्टमध्ये बग असल्यास, ते ब्लॉकचेन नेटवर्कच्या सामान्य कामकाजात अडथळा आणणार नाही + +### स्मार्ट कॉन्ट्रॅक्ट्सवर {#on-smart-contracts} + +dapps ची ओळख करून देण्यासाठी, आम्हाला स्मार्ट कॉन्ट्रॅक्ट्सची ओळख करून देणे आवश्यक आहे – चांगल्या शब्दाच्या अभावी dapp चा बॅकएंड. तपशीलवार माहितीसाठी, आमच्या [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) वरील विभागाकडे जा. + +स्मार्ट कॉन्ट्रॅक्ट हा एक कोड आहे जो Ethereum ब्लॉकचेनवर राहतो आणि प्रोग्राम केल्याप्रमाणेच चालतो. एकदा स्मार्ट कॉन्ट्रॅक्ट नेटवर्कवर तैनात झाल्यावर तुम्ही ते बदलू शकत नाही. Dapps विकेंद्रित केले जाऊ शकतात कारण ते एखाद्या व्यक्ती किंवा कंपनीद्वारे नव्हे, तर कॉन्ट्रॅक्टमध्ये लिहिलेल्या लॉजिकद्वारे नियंत्रित केले जातात. याचा अर्थ असाही होतो की तुम्हाला तुमचे कॉन्ट्रॅक्ट्स अत्यंत काळजीपूर्वक डिझाइन करणे आणि त्यांची पूर्णपणे चाचणी करणे आवश्यक आहे. + +## dapp डेव्हलपमेंटचे फायदे {#benefits-of-dapp-development} + +- **शून्य डाउनटाइम** – एकदा स्मार्ट कॉन्ट्रॅक्ट ब्लॉकचेनवर तैनात झाल्यावर, संपूर्ण नेटवर्क नेहमीच कॉन्ट्रॅक्टशी संवाद साधू पाहणाऱ्या क्लायंटना सेवा देऊ शकेल. त्यामुळे, दुर्भावनापूर्ण घटक वैयक्तिक dapps वर लक्ष्यित डिनायल-ऑफ-सर्व्हिस हल्ले करू शकत नाहीत. +- **गोपनीयता** – dapp तैनात करण्यासाठी किंवा त्याच्याशी संवाद साधण्यासाठी तुम्हाला वास्तविक-जगातील ओळख प्रदान करण्याची आवश्यकता नाही. +- **सेन्सॉरशिपला प्रतिकार** – नेटवर्कवरील कोणतीही एकच संस्था वापरकर्त्यांना व्यवहार सबमिट करण्यापासून, dapps तैनात करण्यापासून किंवा ब्लॉकचेनमधून डेटा वाचण्यापासून रोखू शकत नाही. +- **संपूर्ण डेटा अखंडता** – क्रिप्टोग्राफिक प्रिमिटिव्हमुळे ब्लॉकचेनवर संग्रहित केलेला डेटा अपरिवर्तनीय आणि निर्विवाद आहे. दुर्भावनापूर्ण घटक आधीच सार्वजनिक केलेले व्यवहार किंवा इतर डेटा बनावट करू शकत नाहीत. +- **विश्वासहीन गणना/सत्यापन करण्यायोग्य वर्तन** – स्मार्ट कॉन्ट्रॅक्ट्सचे विश्लेषण केले जाऊ शकते आणि केंद्रीय प्राधिकरणावर विश्वास ठेवण्याची गरज न बाळगता ते अंदाजित मार्गांनी कार्यान्वित होण्याची हमी दिली जाते. हे पारंपारिक मॉडेल्समध्ये खरे नाही; उदाहरणार्थ, जेव्हा आपण ऑनलाइन बँकिंग प्रणाली वापरतो, तेव्हा आपल्याला विश्वास ठेवावा लागतो की वित्तीय संस्था आमच्या आर्थिक डेटाचा गैरवापर करणार नाहीत, रेकॉर्डमध्ये फेरफार करणार नाहीत किंवा हॅक होणार नाहीत. + +## dapp डेव्हलपमेंटचे तोटे {#drawbacks-of-dapp-development} + +- **देखभाल** – Dapps ची देखभाल करणे अधिक कठीण असू शकते कारण ब्लॉकचेनवर प्रकाशित केलेला कोड आणि डेटा सुधारणे कठीण आहे. डेव्हलपर्ससाठी एकदा तैनात केल्यावर त्यांच्या dapps मध्ये (किंवा dapp द्वारे संग्रहित केलेल्या मूळ डेटामध्ये) अद्यतने करणे कठीण आहे, जरी जुन्या आवृत्तीमध्ये बग किंवा सुरक्षा धोके ओळखले गेले तरीही. +- **कार्यप्रदर्शन ओव्हरहेड** – एक मोठा कार्यप्रदर्शन ओव्हरहेड आहे, आणि स्केलिंग खरोखर कठीण आहे. सुरक्षितता, अखंडता, पारदर्शकता आणि विश्वासार्हतेची पातळी गाठण्यासाठी ज्याची Ethereum आकांक्षा बाळगते, प्रत्येक नोड प्रत्येक व्यवहार चालवतो आणि संग्रहित करतो. यावर, प्रूफ-ऑफ-स्टेक सहमतीला देखील वेळ लागतो. +- **नेटवर्क गर्दी** – जेव्हा एक dapp खूप जास्त संगणकीय संसाधने वापरते, तेव्हा संपूर्ण नेटवर्क बॅक अप होते. सध्या, नेटवर्क प्रति सेकंद फक्त 10-15 व्यवहार प्रक्रिया करू शकते; जर व्यवहार यापेक्षा वेगाने पाठवले जात असतील, तर अपुष्ट व्यवहारांचा पूल पटकन फुगू शकतो. +- **वापरकर्ता अनुभव** – वापरकर्ता-अनुकूल अनुभव तयार करणे अधिक कठीण असू शकते कारण सरासरी अंतिम-वापरकर्त्याला खऱ्या अर्थाने सुरक्षित पद्धतीने ब्लॉकचेनशी संवाद साधण्यासाठी आवश्यक असलेले टूल स्टॅक सेट करणे खूप कठीण वाटू शकते. +- **केंद्रीकरण** – Ethereum च्या बेस लेअरवर तयार केलेले वापरकर्ता-अनुकूल आणि डेव्हलपर-अनुकूल सोल्यूशन्स शेवटी केंद्रीकृत सेवांसारखे दिसू शकतात. उदाहरणार्थ, अशा सेवा की (keys) किंवा इतर संवेदनशील माहिती सर्व्हर-साइडला संग्रहित करू शकतात, केंद्रीकृत सर्व्हर वापरून फ्रंटएंड सर्व्ह करू शकतात, किंवा ब्लॉकचेनवर लिहिण्यापूर्वी केंद्रीकृत सर्व्हरवर महत्त्वपूर्ण व्यावसायिक लॉजिक चालवू शकतात. केंद्रीकरण पारंपारिक मॉडेलपेक्षा ब्लॉकचेनचे अनेक (सर्व नाही तर) फायदे काढून टाकते. + +## तुम्ही पाहून शिकणारे आहात का? {#visual-learner} + + + +## dapps तयार करण्यासाठी साधने {#dapp-tools} + +**Scaffold-ETH _- तुमच्या स्मार्ट कॉन्ट्रॅक्टला अनुकूल असलेल्या फ्रंटएंडचा वापर करून Solidity सह पटकन प्रयोग करा._** + +- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) +- [उदाहरण dapp](https://punkwallet.io/) + +**Create Eth App _- एका कमांडने Ethereum-सक्षम ॲप्स तयार करा._** + +- [GitHub](https://github.com/paulrberg/create-eth-app) + +**One Click Dapp _- [ABI](/glossary/#abi) मधून dapp फ्रंटएंड्स तयार करण्यासाठी FOSS साधन._** + +- [oneclickdapp.com](https://oneclickdapp.com) +- [GitHub](https://github.com/oneclickdapp/oneclickdapp-v1) + +**Etherflow _- Ethereum डेव्हलपर्ससाठी त्यांचे नोड तपासण्यासाठी आणि ब्राउझरमधून RPC कॉल्स तयार करण्यासाठी आणि डीबग करण्यासाठी FOSS साधन._** + +- [etherflow.quiknode.io](https://etherflow.quiknode.io/) +- [GitHub](https://github.com/abunsen/etherflow) + +**thirdweb _- प्रत्येक भाषेत SDK, स्मार्ट कॉन्ट्रॅक्ट्स, साधने आणि web3 डेव्हलपमेंटसाठी पायाभूत सुविधा._** + +- [मुख्यपृष्ठ](https://thirdweb.com/) +- [दस्तऐवजीकरण](https://portal.thirdweb.com/) +- [GitHub](https://github.com/thirdweb-dev/) + +**Crossmint _- स्मार्ट कॉन्ट्रॅक्ट्स तैनात करण्यासाठी, क्रेडिट-कार्ड आणि क्रॉस चेन पेमेंट सक्षम करण्यासाठी, आणि NFTs तयार करण्यासाठी, वितरित करण्यासाठी, विकण्यासाठी, संग्रहित करण्यासाठी आणि संपादित करण्यासाठी API वापरण्यासाठी एंटरप्राइझ-ग्रेड web3 डेव्हलपमेंट प्लॅटफॉर्म._** + +- [crossmint.com](https://www.crossmint.com) +- [दस्तऐवजीकरण](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) + +## पुढील वाचन {#further-reading} + +- [dapps एक्सप्लोर करा](/apps) +- [वेब 3.0 ॲप्लिकेशनची रचना](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _प्रीती कासिरेड्डी_ +- [विकेंद्रित ॲप्लिकेशन्ससाठी 2021 चे मार्गदर्शक](https://limechain.tech/blog/what-are-dapps-the-2021-guide/) - _LimeChain_ +- [विकेंद्रित ॲप्स म्हणजे काय?](https://www.gemini.com/cryptopedia/decentralized-applications-defi-dapps) - _Gemini_ +- [लोकप्रिय dapps](https://www.alchemy.com/dapps) - _Alchemy_ + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [Ethereum स्टॅकची ओळख](/developers/docs/ethereum-stack/) +- [डेव्हलपमेंट फ्रेमवर्क्स](/developers/docs/frameworks/) diff --git a/public/content/translations/mr/developers/docs/data-and-analytics/block-explorers/index.md b/public/content/translations/mr/developers/docs/data-and-analytics/block-explorers/index.md new file mode 100644 index 00000000000..d82be4f31af --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-and-analytics/block-explorers/index.md @@ -0,0 +1,254 @@ +--- +title: "ब्लॉक एक्सप्लोरर" +description: "ब्लॉक एक्सप्लोररची ओळख, ब्लॉकचेन डेटाच्या जगातील तुमचे पोर्टल, जिथे तुम्ही व्यवहार, खाती, करार आणि बरेच काही याबद्दल माहिती घेऊ शकता." +lang: mr +sidebarDepth: 3 +--- + +ब्लॉक एक्सप्लोरर हे Ethereumच्या डेटासाठी तुमचे पोर्टल आहेत. तुम्ही त्यांचा वापर ब्लॉक, व्यवहार, व्हॅलिडेटर्स, खाती आणि इतर ऑनचेन अ‍ॅक्टिव्हिटीवर रिअल-टाइम डेटा पाहण्यासाठी करू शकता. + +## पूर्वतयारी {#prerequisites} + +तुम्ही Ethereum च्या मूलभूत संकल्पना समजून घेतल्या पाहिजेत जेणेकरून तुम्हाला ब्लॉक एक्सप्लोररद्वारे दिलेल्या डेटाचा अर्थ लावता येईल. [Ethereum च्या परिचयाने](/developers/docs/intro-to-ethereum/) सुरुवात करा. + +## सेवा {#services} + +- [Etherscan](https://etherscan.io/) -_चीनी, कोरियन, रशियन आणि जपानी भाषेत देखील उपलब्ध आहे_ +- [3xpl](https://3xpl.com/ethereum) +- [Beaconcha.in](https://beaconcha.in/) +- [Blockchair](https://blockchair.com/ethereum) -_स्पॅनिश, फ्रेंच, इटालियन, डच, पोर्तुगीज, रशियन, चीनी आणि फारसीमध्ये देखील उपलब्ध आहे_ +- [Blockscout](https://eth.blockscout.com/) +- [Chainlens](https://www.chainlens.com/) +- [DexGuru Block Explorer](https://ethereum.dex.guru/) +- [Etherchain](https://www.etherchain.org/) +- [Ethplorer](https://ethplorer.io/) -_चीनी, स्पॅनिश, फ्रेंच, तुर्की, रशियन, कोरियन आणि व्हिएतनामी भाषेत देखील उपलब्ध_ +- [EthVM](https://www.ethvm.com/) +- [OKLink](https://www.oklink.com/eth) +- [Ethseer](https://ethseer.io) + +## ओपन सोर्स टूल्स {#open-source-tools} + +- [Otterscan](https://otterscan.io/) +- [lazy-etherscan](https://github.com/woxjro/lazy-etherscan) + +## डेटा {#data} + +Ethereum डिझाइननुसार पारदर्शक आहे त्यामुळे सर्व काही सत्यापित करण्यायोग्य आहे. ब्लॉक एक्सप्लोरर ही माहिती मिळवण्यासाठी एक इंटरफेस प्रदान करतात. आणि हे मुख्य Ethereum नेटवर्क आणि टेस्टनेट दोन्हीसाठी आहे, जर तुम्हाला त्या डेटाची आवश्यकता असेल. डेटा एक्झिक्युशन डेटा आणि कन्सेन्सस डेटामध्ये विभागलेला आहे. एक्झिक्युशन डेटा एका विशिष्ट ब्लॉकमध्ये कार्यान्वित केलेल्या व्यवहारांना सूचित करतो. कन्सेन्सस डेटा स्वतः ब्लॉक आणि ज्या व्हॅलिडेटरनी ते प्रस्तावित केले आहेत त्यांना सूचित करतो. + +येथे डेटाच्या प्रकारांचा सारांश आहे जो तुम्ही ब्लॉक एक्सप्लोररकडून मिळवू शकता. + +### एक्झिक्युशन डेटा {#execution-data} + +दर 12 सेकंदांनी Ethereum मध्ये नवीन ब्लॉक जोडले जातात (जोपर्यंत ब्लॉक प्रस्तावक आपली पाळी चुकवत नाही), त्यामुळे ब्लॉक एक्सप्लोररमध्ये डेटाचा जवळपास-स्थिर प्रवाह जोडला जातो. ब्लॉकमध्ये भरपूर महत्त्वाची माहिती असते जी तुम्हाला उपयुक्त वाटू शकते: + +**मानक डेटा** + +- ब्लॉकची उंची - सध्याचा ब्लॉक तयार झाल्यावर ब्लॉक क्रमांक आणि ब्लॉकचेनची लांबी (ब्लॉकमध्ये) +- टाइमस्टॅम्प - ज्या वेळी ब्लॉक प्रस्तावित केला गेला होता +- व्यवहार - ब्लॉकमध्ये समाविष्ट असलेल्या व्यवहारांची संख्या +- शुल्क प्राप्तकर्ता - व्यवहारांमधून गॅस शुल्काच्या टिप्स प्राप्त करणारा पत्ता +- ब्लॉक रिवॉर्ड - ब्लॉक प्रस्तावित करणाऱ्या व्हॅलिडेटरला दिलेली ETH ची रक्कम +- आकार - ब्लॉकमधील डेटाचा आकार (बाईट्समध्ये मोजला जातो) +- वापरलेला गॅस - ब्लॉकमधील व्यवहारांद्वारे वापरलेल्या गॅसची एकूण युनिट्स +- गॅस मर्यादा - ब्लॉकमधील व्यवहारांद्वारे सेट केलेली एकूण गॅस मर्यादा +- प्रति गॅस मूळ शुल्क - ब्लॉकमध्ये व्यवहार समाविष्ट करण्यासाठी आवश्यक असलेला किमान गुणक +- जाळलेले शुल्क - ब्लॉकमध्ये किती ETH बर्न केले जाते +- अतिरिक्त डेटा - बिल्डरने ब्लॉकमध्ये समाविष्ट केलेला कोणताही अतिरिक्त डेटा + +**प्रगत डेटा** + +- हॅश - क्रिप्टोग्राफिक हॅश जो ब्लॉक हेडरचे प्रतिनिधित्व करतो (ब्लॉकचा युनिक आयडेंटिफायर) +- पॅरेंट हॅश - सध्याच्या ब्लॉकच्या आधी आलेल्या ब्लॉकचा हॅश +- स्टेट रूट - मर्केल ट्रायचा रूट हॅश जो सिस्टमची संपूर्ण स्थिती संग्रहित करतो + +### गॅस {#gas} + +ब्लॉक एक्सप्लोरर्स तुम्हाला केवळ व्यवहार आणि ब्लॉक्समधील गॅसच्या वापराबद्दल डेटा देणार नाहीत, तर काही तुम्हाला नेटवर्कच्या सध्याच्या गॅस किमतींबद्दल माहिती देतील. हे तुम्हाला नेटवर्क वापर समजण्यास, सुरक्षित व्यवहार सबमिट करण्यास आणि गॅसवर जास्त खर्च न करण्यास मदत करेल. अशा API शोधा जे तुम्हाला ही माहिती तुमच्या उत्पादनाच्या इंटरफेसमध्ये मिळविण्यात मदत करू शकतील. गॅस-विशिष्ट डेटामध्ये समाविष्ट आहे: + +- सुरक्षित परंतु हळू व्यवहारासाठी आवश्यक असलेल्या गॅसच्या अंदाजे युनिट्स (+ अंदाजे किंमत आणि कालावधी) +- सरासरी व्यवहारासाठी आवश्यक असलेल्या गॅसच्या अंदाजे युनिट्स (+ अंदाजे किंमत आणि कालावधी) +- जलद व्यवहारासाठी आवश्यक असलेल्या गॅसच्या अंदाजे युनिट्स (+ अंदाजे किंमत आणि कालावधी) +- गॅस किमतीवर आधारित सरासरी पुष्टीकरण वेळ +- गॅस वापरणारे करार - दुसऱ्या शब्दांत, लोकप्रिय उत्पादने जी नेटवर्कवर मोठ्या प्रमाणात वापरली जात आहेत +- गॅस खर्च करणारी खाती - दुसऱ्या शब्दांत, वारंवार नेटवर्क वापरणारे + +### व्यवहार {#transactions} + +लोकांना त्यांच्या व्यवहारांच्या प्रगतीचा मागोवा घेण्यासाठी ब्लॉक एक्सप्लोरर एक सामान्य जागा बनले आहेत. कारण तुम्हाला मिळणाऱ्या तपशिलाची पातळी अतिरिक्त निश्चितता प्रदान करते. व्यवहार डेटामध्ये समाविष्ट आहे: + +**मानक डेटा** + +- व्यवहार हॅश - व्यवहार सबमिट केल्यावर तयार केलेला हॅश +- स्थिती - व्यवहार प्रलंबित, अयशस्वी किंवा यशस्वी आहे की नाही याचे सूचक +- ब्लॉक - ज्या ब्लॉकमध्ये व्यवहार समाविष्ट केला गेला आहे +- टाइमस्टॅम्प - व्हॅलिडेटरने प्रस्तावित केलेल्या ब्लॉकमध्ये व्यवहार समाविष्ट करण्याची वेळ +- प्रेषक - व्यवहार सबमिट करणाऱ्या खात्याचा पत्ता +- प्राप्तकर्ता - प्राप्तकर्त्याचा किंवा स्मार्ट कराराचा पत्ता ज्याच्याशी व्यवहार संवाद साधतो +- हस्तांतरित केलेले टोकन - व्यवहाराचा भाग म्हणून हस्तांतरित केलेल्या टोकनची सूची +- मूल्य - हस्तांतरित केले जात असलेले एकूण ETH मूल्य +- व्यवहार शुल्क - व्यवहार प्रक्रिया करण्यासाठी व्हॅलिडेटरला दिलेली रक्कम (गॅसची किंमत \* वापरलेला गॅस द्वारे मोजली जाते) + +**प्रगत डेटा** + +- गॅस मर्यादा - हा व्यवहार वापरू शकणाऱ्या गॅस युनिट्सची कमाल संख्या +- वापरलेला गॅस - व्यवहाराने वापरलेल्या गॅस युनिट्सची वास्तविक रक्कम +- गॅसची किंमत - प्रति गॅस युनिट सेट केलेली किंमत +- नॉन्स - `from` पत्त्यासाठी व्यवहार क्रमांक (लक्षात ठेवा की हे 0 पासून सुरू होते त्यामुळे `100` चा नॉन्स प्रत्यक्षात या खात्याद्वारे सबमिट केलेला 101 वा व्यवहार असेल) +- इनपुट डेटा - व्यवहारासाठी आवश्यक असलेली कोणतीही अतिरिक्त माहिती + +### खाती {#accounts} + +खात्याबद्दल बरीच माहिती आहे जी तुम्ही ऍक्सेस करू शकता. म्हणूनच अनेक खाती वापरण्याची शिफारस केली जाते जेणेकरून तुमची मालमत्ता आणि मूल्य सहजपणे ट्रॅक केले जाऊ शकत नाही. व्यवहार आणि खात्यातील अ‍ॅक्टिव्हिटी अधिक खाजगी करण्यासाठी काही उपाययोजना देखील विकसित केल्या जात आहेत. परंतु येथे खात्यांसाठी उपलब्ध असलेला डेटा आहे: + +**वापरकर्ता खाती** + +- खात्याचा पत्ता - सार्वजनिक पत्ता ज्याचा वापर तुम्ही निधी पाठवण्यासाठी करू शकता +- ETH शिल्लक - त्या खात्याशी संबंधित ETH ची रक्कम +- एकूण ETH मूल्य - ETH चे मूल्य +- टोकन - खात्याशी संबंधित टोकन आणि त्यांचे मूल्य +- व्यवहाराचा इतिहास - सर्व व्यवहारांची सूची जिथे हे खाते प्रेषक किंवा प्राप्तकर्ता होते + +**स्मार्ट कॉन्ट्रॅक्ट** + +स्मार्ट कॉन्ट्रॅक्ट खात्यांमध्ये वापरकर्त्याच्या खात्यातील सर्व डेटा असतो, परंतु काही ब्लॉक एक्सप्लोरर काही कोड माहिती देखील प्रदर्शित करतील. उदाहरणांमध्ये समाविष्ट आहे: + +- करार निर्माता - मेननेटवर करार तैनात करणारा पत्ता +- निर्मिती व्यवहार - मेननेटवर तैनाती समाविष्ट असलेला व्यवहार +- स्रोत कोड - स्मार्ट कराराचा सॉलिडिटी किंवा वायपर कोड +- करार ABI - कराराचा ऍप्लिकेशन बायनरी इंटरफेस—करार करत असलेले कॉल आणि प्राप्त केलेला डेटा +- करार निर्मिती कोड - स्मार्ट कराराचा संकलित बायटेकोड—जेव्हा तुम्ही सॉलिडिटी किंवा वायपर इत्यादीमध्ये लिहिलेला स्मार्ट करार संकलित करता तेव्हा तयार होतो. +- करार इव्हेंट्स - स्मार्ट करारामध्ये कॉल केलेल्या पद्धतींचा इतिहास—मूलतः करार कसा वापरला जात आहे आणि किती वेळा हे पाहण्याचा एक मार्ग + +### टोकन {#tokens} + +टोकन हे एक प्रकारचे करार आहेत त्यामुळे त्यांच्याकडे स्मार्ट करारासारखाच डेटा असेल. परंतु त्यांचे मूल्य असल्यामुळे आणि त्यांचा व्यापार केला जाऊ शकत असल्यामुळे त्यांच्याकडे अतिरिक्त डेटा पॉइंट्स आहेत: + +- प्रकार - ते ERC-20, ERC-721 किंवा अन्य टोकन मानक आहेत की नाही +- किंमत - जर ते ERC-20 असतील तर त्यांचे सध्याचे बाजार मूल्य असेल +- बाजार भांडवल - जर ते ERC-20 असतील तर त्यांचे बाजार भांडवल असेल (किंमत \* एकूण पुरवठा द्वारे मोजले जाते) +- एकूण पुरवठा - चलनात असलेल्या टोकनची संख्या +- धारक - टोकन धारण करणाऱ्या पत्त्यांची संख्या +- हस्तांतरण - खात्यांदरम्यान टोकन किती वेळा हस्तांतरित केले गेले आहे +- व्यवहाराचा इतिहास - टोकनसह सर्व व्यवहारांचा इतिहास +- करार पत्ता - मेननेटवर तैनात केलेल्या टोकनचा पत्ता +- दशांश - ERC-20 टोकन विभाज्य आहेत आणि त्यात दशांश स्थळे आहेत + +### नेटवर्क {#network} + +काही ब्लॉक डेटा Ethereumच्या आरोग्याबद्दल अधिक समग्रपणे संबंधित आहे. + +- एकूण व्यवहार - Ethereum तयार झाल्यापासूनच्या व्यवहारांची संख्या +- प्रति सेकंद व्यवहार - एका सेकंदात प्रक्रिया करण्यायोग्य व्यवहारांची संख्या +- ETH किंमत - 1 ETH चे सध्याचे मूल्यांकन +- एकूण ETH पुरवठा - चलनात असलेल्या ETH ची संख्या—लक्षात ठेवा की प्रत्येक ब्लॉकच्या निर्मितीसह ब्लॉक रिवॉर्डच्या स्वरूपात नवीन ETH तयार केले जाते +- बाजार भांडवल - किंमत \* पुरवठा यांचे गणन + +## कन्सेन्सस लेयर डेटा {#consensus-layer-data} + +### इपॉक {#epoch} + +सुरक्षेच्या कारणास्तव, प्रत्येक इपॉकच्या शेवटी (प्रत्येक 6.4 मिनिटांनी) व्हॅलिडेटर्सच्या यादृच्छिक समित्या तयार केल्या जातात. इपॉक डेटामध्ये समाविष्ट आहे: + +- इपॉक क्रमांक +- अंतिम स्थिती - इपॉक अंतिम झाले आहे की नाही (होय/नाही) +- वेळ - इपॉक संपण्याची वेळ +- प्रमाणीकरण - इपॉकमधील प्रमाणीकरणांची संख्या (स्लॉट्समधील ब्लॉक्ससाठी मते) +- ठेवी - इपॉकमध्ये समाविष्ट असलेल्या ETH ठेवींची संख्या (व्हॅलिडेटर्सना व्हॅलिडेटर बनण्यासाठी ETH स्टेक करणे आवश्यक आहे) +- स्लॅशिंग - ब्लॉकच्या प्रस्तावक किंवा प्रमाणीकरण करणाऱ्यांना दिलेली दंडांची संख्या +- मतदान सहभाग - ब्लॉक्सना प्रमाणित करण्यासाठी वापरलेली स्टेक केलेली ETH ची रक्कम +- व्हॅलिडेटर्स - इपॉकसाठी सक्रिय असलेल्या व्हॅलिडेटर्सची संख्या +- सरासरी व्हॅलिडेटर शिल्लक - सक्रिय व्हॅलिडेटर्ससाठी सरासरी शिल्लक +- स्लॉट्स - इपॉकमध्ये समाविष्ट असलेल्या स्लॉट्सची संख्या (स्लॉट्समध्ये एक वैध ब्लॉक असतो) + +### स्लॉट {#slot} + +स्लॉट्स हे ब्लॉक निर्मितीच्या संधी आहेत, प्रत्येक स्लॉटसाठी उपलब्ध असलेल्या डेटामध्ये समाविष्ट आहे: + +- इपॉक - ज्या इपॉकमध्ये स्लॉट वैध आहे +- स्लॉट क्रमांक +- स्थिती - स्लॉटची स्थिती (प्रस्तावित/चुकलेला) +- वेळ - स्लॉट टाइमस्टॅम्प +- प्रस्तावक - स्लॉटसाठी ब्लॉक प्रस्तावित करणारा व्हॅलिडेटर +- ब्लॉक रूट - बीकनब्लॉकचा हॅश-ट्री-रूट +- पॅरेंट रूट - आधी आलेल्या ब्लॉकचा हॅश +- स्टेट रूट - बीकनस्टेटचा हॅश-ट्री-रूट +- सही +- Randao रिव्हील +- ग्राफिटी - एक ब्लॉक प्रस्तावक आपल्या ब्लॉक प्रस्तावात 32 बाइट लांबीचा संदेश समाविष्ट करू शकतो +- एक्झिक्युशन डेटा + - ब्लॉक हॅश + - ठेवींची संख्या + - ठेवींचा रूट +- प्रमाणीकरण - या स्लॉटमधील ब्लॉकसाठी प्रमाणीकरणांची संख्या +- ठेवी - या स्लॉट दरम्यानच्या ठेवींची संख्या +- स्वैच्छिक निर्गमन - स्लॉट दरम्यान बाहेर पडलेल्या व्हॅलिडेटर्सची संख्या +- स्लॅशिंग - ब्लॉकच्या प्रस्तावक किंवा प्रमाणीकरण करणाऱ्यांना दिलेली दंडांची संख्या +- मते - या स्लॉटमधील ब्लॉकसाठी मतदान करणारे व्हॅलिडेटर्स + +### ब्लॉक्स {#blocks-1} + +प्रूफ-ऑफ-स्टेक वेळेला स्लॉट्स आणि इपॉक्समध्ये विभाजित करतो. म्हणजे नवीन डेटा! + +- प्रस्तावक - नवीन ब्लॉक प्रस्तावित करण्यासाठी अल्गोरिदमद्वारे निवडलेला व्हॅलिडेटर +- इपॉक - ज्या इपॉकमध्ये ब्लॉक प्रस्तावित केला गेला होता +- स्लॉट - ज्या स्लॉटमध्ये ब्लॉक प्रस्तावित केला गेला होता +- प्रमाणीकरण - स्लॉटमध्ये समाविष्ट असलेल्या प्रमाणीकरणांची संख्या—प्रमाणीकरण मतांसारखे असतात जे सूचित करतात की ब्लॉक बीकन चेनवर जाण्यासाठी तयार आहे + +### व्हॅलिडेटर्स {#validators} + +व्हॅलिडेटर्स स्लॉट्समध्ये ब्लॉक प्रस्तावित करण्यासाठी आणि त्यांना प्रमाणित करण्यासाठी जबाबदार असतात. + +- व्हॅलिडेटर क्रमांक - व्हॅलिडेटरचे प्रतिनिधित्व करणारा युनिक क्रमांक +- सध्याची शिल्लक - व्हॅलिडेटरची बक्षिसांसह शिल्लक +- प्रभावी शिल्लक - व्हॅलिडेटरची शिल्लक जी स्टेक करण्यासाठी वापरली जाते +- उत्पन्न - व्हॅलिडेटरद्वारे प्राप्त बक्षिसे किंवा दंड +- स्थिती - व्हॅलिडेटर सध्या ऑनलाइन आणि सक्रिय आहे की नाही +- प्रमाणीकरण प्रभावीपणा - व्हॅलिडेटरच्या प्रमाणीकरणांना चेनमध्ये समाविष्ट करण्यासाठी लागणारा सरासरी वेळ +- सक्रियतेसाठी पात्रता - तारीख (आणि इपॉक) जेव्हा व्हॅलिडेटर प्रमाणित करण्यासाठी उपलब्ध झाला +- यापासून सक्रिय - तारीख (आणि इपॉक) जेव्हा व्हॅलिडेटर सक्रिय झाला +- प्रस्तावित ब्लॉक - व्हॅलिडेटरने प्रस्तावित केलेले ब्लॉक +- प्रमाणीकरण - व्हॅलिडेटरने प्रदान केलेले प्रमाणीकरण +- ठेवी - व्हॅलिडेटरने केलेल्या स्टेक केलेल्या ठेवीचा प्रेषक पत्ता, व्यवहार हॅश, ब्लॉक क्रमांक, टाइमस्टॅम्प, रक्कम आणि स्थिती + +### प्रमाणीकरण {#attestations} + +प्रमाणीकरण हे चेनमध्ये ब्लॉक समाविष्ट करण्यासाठी "होय" मते आहेत. त्यांचा डेटा प्रमाणीकरणाच्या रेकॉर्डशी आणि प्रमाणित करणाऱ्या व्हॅलिडेटर्सशी संबंधित आहे + +- स्लॉट - ज्या स्लॉटमध्ये प्रमाणीकरण झाले +- समिती निर्देशांक - दिलेल्या स्लॉटमधील समितीचा निर्देशांक +- एकत्रीकरण बिट्स - प्रमाणीकरणात सहभागी होणाऱ्या सर्व व्हॅलिडेटर्सच्या एकत्रित प्रमाणीकरणाचे प्रतिनिधित्व करते +- व्हॅलिडेटर्स - प्रमाणीकरण प्रदान करणारे व्हॅलिडेटर्स +- बीकन ब्लॉक रूट - व्हॅलिडेटर्स ज्या ब्लॉकला प्रमाणित करत आहेत त्याकडे निर्देश करतो +- स्रोत - नवीनतम न्याय्य इपॉककडे निर्देश करतो +- लक्ष्य - नवीनतम इपॉक सीमेकडे निर्देश करतो +- सही + +### नेटवर्क {#network-1} + +कन्सेन्सस लेयरच्या टॉप-लेव्हल डेटामध्ये खालील गोष्टींचा समावेश आहे: + +- सध्याचा इपॉक +- सध्याचा स्लॉट +- सक्रिय व्हॅलिडेटर्स - सक्रिय व्हॅलिडेटर्सची संख्या +- प्रलंबित व्हॅलिडेटर्स - सक्रिय होण्याची वाट पाहणाऱ्या व्हॅलिडेटर्सची संख्या +- स्टेक केलेले ETH - नेटवर्कमध्ये स्टेक केलेल्या ETH ची रक्कम +- सरासरी शिल्लक - व्हॅलिडेटर्सची सरासरी ETH शिल्लक + +## ब्लॉक एक्सप्लोरर्स {#block-explorers} + +- [Etherscan](https://etherscan.io/) - एक ब्लॉक एक्सप्लोरर ज्याचा वापर तुम्ही Ethereum मेननेट आणि टेस्टनेटसाठी डेटा आणण्यासाठी करू शकता +- [3xpl](https://3xpl.com/ethereum) - एक जाहिरात-मुक्त ओपन-सोर्स Ethereum एक्सप्लोरर जो त्याचे डेटासेट डाउनलोड करण्याची परवानगी देतो +- [Beaconcha.in](https://beaconcha.in/) - Ethereum मेननेट आणि टेस्टनेटसाठी एक ओपन सोर्स ब्लॉक एक्सप्लोरर +- [Blockchair](https://blockchair.com/ethereum) - सर्वात खाजगी Ethereum एक्सप्लोरर. डेटा (मेमपूल) वर्गीकरण आणि फिल्टरिंगसाठी देखील +- [Etherchain](https://www.etherchain.org/) - Ethereum मेननेटसाठी एक ब्लॉक एक्सप्लोरर +- [Ethplorer](https://ethplorer.io/) - Ethereum मेननेट आणि कोव्हान टेस्टनेटसाठी टोकनवर लक्ष केंद्रित करणारा ब्लॉक एक्सप्लोरर + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [व्यवहार](/developers/docs/transactions/) +- [खाती](/developers/docs/accounts/) +- [नेटवर्क्स](/developers/docs/networks/) diff --git a/public/content/translations/mr/developers/docs/data-and-analytics/index.md b/public/content/translations/mr/developers/docs/data-and-analytics/index.md new file mode 100644 index 00000000000..2d8911c0aff --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-and-analytics/index.md @@ -0,0 +1,72 @@ +--- +title: "माहिती आणि विश्लेषण" +description: "आपल्या dapps मध्ये वापरण्यासाठी ऑनचेन विश्लेषण आणि डेटा कसा मिळवायचा" +lang: mr +--- + +## परिचय {#Introduction} + +नेटवर्कचा वापर वाढत असताना, ऑनचेन डेटामध्ये मौल्यवान माहितीचे प्रमाण वाढत जाईल. डेटाचे प्रमाण वेगाने वाढत असताना, अहवाल देण्यासाठी किंवा dapp चालवण्यासाठी ही माहिती मोजणे आणि एकत्रित करणे हे वेळखाऊ आणि प्रक्रिया-जड प्रयत्न होऊ शकते. + +विद्यमान डेटा प्रदात्यांचा फायदा घेऊन विकास जलद होऊ शकतो, अधिक अचूक परिणाम मिळू शकतात, आणि चालू देखभालीचे प्रयत्न कमी होऊ शकतात. यामुळे संघाला त्यांच्या प्रकल्पाद्वारे प्रदान करण्याचा प्रयत्न करत असलेल्या मुख्य कार्यक्षमतेवर लक्ष केंद्रित करता येईल. + +## पूर्वतयारी {#prerequisites} + +डेटा विश्लेषण संदर्भात त्यांचा वापर अधिक चांगल्या प्रकारे समजून घेण्यासाठी आपण [ब्लॉक एक्सप्लोरर्स](/developers/docs/data-and-analytics/block-explorers/) ची मूलभूत संकल्पना समजून घेतली पाहिजे. याव्यतिरिक्त, सिस्टम डिझाइनमध्ये ते जोडत असलेले फायदे समजून घेण्यासाठी [इंडेक्स](/glossary/#index) च्या संकल्पनेशी स्वतःला परिचित करा. + +आर्किटेक्चरल मूलभूत तत्त्वांच्या बाबतीत, [API](https://www.wikipedia.org/wiki/API) आणि [REST](https://www.wikipedia.org/wiki/Representational_state_transfer) काय आहेत हे सैद्धांतिकरित्या तरी समजून घेणे महत्त्वाचे आहे. + +## ब्लॉक एक्सप्लोरर्स {#block-explorers} + +अनेक [ब्लॉक एक्सप्लोरर्स](/developers/docs/data-and-analytics/block-explorers/) [RESTful](https://www.wikipedia.org/wiki/Representational_state_transfer) [API](https://www.wikipedia.org/wiki/API) गेटवे देतात जे विकसकांना ब्लॉक्स, व्यवहार, व्हॅलिडेटर्स, खाती आणि इतर ऑनचेन क्रियाकलापांवरील रिअल-टाइम डेटामध्ये दृश्यमानता प्रदान करतील. + +विकसक नंतर हा डेटा प्रक्रिया आणि रूपांतरित करू शकतात जेणेकरून त्यांच्या वापरकर्त्यांना [ब्लॉकचेन](/glossary/#blockchain) सह अद्वितीय अंतर्दृष्टी आणि संवाद मिळू शकेल. उदाहरणार्थ, [Etherscan](https://etherscan.io) आणि [Blockscout](https://eth.blockscout.com) प्रत्येक १२ सेकंदांच्या स्लॉटसाठी अंमलबजावणी आणि सहमती डेटा प्रदान करतात. + +## द ग्राफ {#the-graph} + +[द ग्राफ](https://thegraph.com/) हा एक इंडेक्सिंग प्रोटोकॉल आहे जो सबग्राफ म्हणून ओळखल्या जाणाऱ्या ओपन API द्वारे ब्लॉकचेन डेटा क्वेरी करण्याचा एक सोपा मार्ग प्रदान करतो. + +द ग्राफसह, विकसकांना खालील फायदे मिळू शकतात: + +- विकेंद्रीकृत इंडेक्सिंग: एकाधिक इंडेक्सर्सद्वारे ब्लॉकचेन डेटा इंडेक्स करण्यास सक्षम करते, ज्यामुळे अपयशाचा कोणताही एक बिंदू दूर होतो +- GraphQL क्वेरीज: इंडेक्स केलेल्या डेटाची क्वेरी करण्यासाठी एक शक्तिशाली GraphQL इंटरफेस प्रदान करते, ज्यामुळे डेटा पुनर्प्राप्ती अत्यंत सोपी होते +- सानुकूलन: ब्लॉकचेन डेटा रूपांतरित करण्यासाठी आणि संग्रहित करण्यासाठी स्वतःचे तर्क परिभाषित करा आणि द ग्राफ नेटवर्कवरील इतर विकसकांनी प्रकाशित केलेले सबग्राफ पुन्हा वापरा + +५ मिनिटांत सबग्राफ तयार करण्यासाठी, उपयोजित करण्यासाठी आणि क्वेरी करण्यासाठी या [क्विक-स्टार्ट](https://thegraph.com/docs/en/quick-start/) मार्गदर्शकाचे अनुसरण करा. + +## क्लायंट विविधता {#client-diversity} + +[क्लायंट विविधता](/developers/docs/nodes-and-clients/client-diversity/) Ethereum नेटवर्कच्या एकूण आरोग्यासाठी महत्त्वाची आहे कारण ती बग्स आणि शोषणांपासून लवचिकता प्रदान करते. आता [clientdiversity.org](https://clientdiversity.org/), [rated.network](https://www.rated.network), [supermajority.info](https://supermajority.info//) आणि [Ethernodes](https://ethernodes.org/) यासह अनेक क्लायंट विविधता डॅशबोर्ड आहेत. + +## ड्युन अॅनालिटिक्स {#dune-analytics} + +[ड्युन अॅनालिटिक्स](https://dune.com/) ब्लॉकचेन डेटा रिलेशनल डेटाबेस (DuneSQL) टेबलमध्ये पूर्व-प्रक्रिया करते, वापरकर्त्यांना SQL वापरून ब्लॉकचेन डेटा क्वेरी करण्याची आणि क्वेरी परिणामांवर आधारित डॅशबोर्ड तयार करण्याची परवानगी देते. ऑनचेन डेटा ४ रॉ टेबलमध्ये आयोजित केला जातो: `blocks`, `transactions`, (इव्हेंट) `logs` आणि (कॉल) `traces`. लोकप्रिय करार आणि प्रोटोकॉल डीकोड केले गेले आहेत आणि प्रत्येकाकडे इव्हेंट आणि कॉल टेबलचा स्वतःचा संच आहे. त्या इव्हेंट आणि कॉल टेबलवर पुढे प्रक्रिया केली जाते आणि प्रोटोकॉलच्या प्रकारानुसार ॲबस्ट्रॅक्शन टेबलमध्ये आयोजित केले जाते, उदाहरणार्थ, dex, lending, stablecoins, इत्यादी. + +## SQD {#sqd} + +[SQD](https://sqd.dev/) हे एक विकेंद्रित हायपर-स्केलेबल डेटा प्लॅटफॉर्म आहे जे मोठ्या प्रमाणात डेटामध्ये कार्यक्षम, परवानगीशिवाय प्रवेश प्रदान करण्यासाठी ऑप्टिमाइझ केलेले आहे. हे सध्या इव्हेंट लॉग, व्यवहार पावती, ट्रेस आणि प्रति-व्यवहार स्टेट डिफ्ससह ऐतिहासिक ऑन-चेन डेटा सेवा देते. SQD सानुकूल डेटा एक्सट्रॅक्शन आणि प्रोसेसिंग पाइपलाइन तयार करण्यासाठी एक शक्तिशाली टूलकिट प्रदान करते, प्रति सेकंद १५०k ब्लॉक्सपर्यंत इंडेक्सिंग गती प्राप्त करते. + +प्रारंभ करण्यासाठी, [दस्तऐवजीकरण](https://docs.sqd.dev/) ला भेट द्या किंवा आपण SQD सह काय तयार करू शकता याची [EVM उदाहरणे](https://github.com/subsquid-labs/squid-evm-examples) पहा. + +## SubQuery नेटवर्क {#subquery-network} + +[SubQuery](https://subquery.network/) एक अग्रगण्य डेटा इंडेक्सर आहे जो विकासकांना त्यांच्या web3 प्रकल्पांसाठी जलद, विश्वसनीय, विकेंद्रित आणि सानुकूलित API देतो. SubQuery १६५+ पेक्षा जास्त इकोसिस्टम (Ethereum सह) मधील विकासकांना त्यांच्या वापरकर्त्यांसाठी एक अंतर्ज्ञानी आणि विस्मयकारक अनुभव तयार करण्यासाठी समृद्ध इंडेक्स केलेल्या डेटासह सक्षम करते. SubQuery नेटवर्क आपल्या न थांबणाऱ्या ॲप्सला एका लवचिक आणि विकेंद्रित पायाभूत सुविधा नेटवर्कसह शक्ती देते. डेटा प्रोसेसिंग क्रियाकलापांसाठी सानुकूल बॅकएंड तयार करण्यात वेळ न घालवता, भविष्यातील web3 ॲप्लिकेशन्स तयार करण्यासाठी SubQuery च्या ब्लॉकचेन विकसक टूलकिटचा वापर करा. + +प्रारंभ करण्यासाठी, [SubQuery's managed service](https://managedservice.subquery.network/) किंवा [SubQuery's decentralised network](https://app.subquery.network/dashboard) वर थेट जाण्यापूर्वी चाचणीसाठी स्थानिक डॉकर वातावरणात मिनिटांत Ethereum ब्लॉकचेन डेटा इंडेक्स करणे सुरू करण्यासाठी [Ethereum क्विक स्टार्ट गाइड](https://academy.subquery.network/quickstart/quickstart_chains/ethereum-gravatar.html) ला भेट द्या. + +## EVM क्वेरी भाषा {#evm-query-language} + +EVM क्वेरी भाषा (EQL) ही एक SQL-सारखी भाषा आहे जी EVM (Ethereum Virtual Machine) चेन्सची क्वेरी करण्यासाठी डिझाइन केलेली आहे. EQL चे अंतिम उद्दिष्ट EVM चेनच्या फर्स्ट-क्लास सिटीझन्स (ब्लॉक्स, खाती आणि व्यवहार) वर जटिल रिलेशनल क्वेरींना समर्थन देणे आहे, त्याचवेळी विकसकांना आणि संशोधकांना दैनंदिन वापरासाठी अर्गोनॉमिक सिंटॅक्स प्रदान करणे. EQL सह, विकसक परिचित SQL-सारख्या सिंटॅक्सचा वापर करून ब्लॉकचेन डेटा मिळवू शकतात आणि जटिल बॉयलरप्लेट कोडची आवश्यकता दूर करू शकतात. EQL मानक ब्लॉकचेन डेटा विनंत्यांना (उदा. Ethereum वर खात्याचा नॉन्स आणि शिल्लक पुनर्प्राप्त करणे किंवा वर्तमान ब्लॉक आकार आणि टाइमस्टॅम्प मिळवणे) समर्थन देते आणि अधिक जटिल विनंत्या आणि वैशिष्ट्यांसाठी सतत समर्थन जोडत आहे. + +## अधिक वाचन {#further-reading} + +- [क्रिप्टो डेटाचे अन्वेषण I: डेटा फ्लो आर्किटेक्चर्स](https://web.archive.org/web/20250125012042/https://research.2077.xyz/exploring-crypto-data-1-data-flow-architectures) +- [ग्राफ नेटवर्क आढावा](https://thegraph.com/docs/en/about/) +- [ग्राफ क्वेरी प्लेग्राउंड](https://thegraph.com/explorer/subgraph/graphprotocol/graph-network-mainnet?version=current) +- [EtherScan वर API कोड उदाहरणे](https://etherscan.io/apis#contracts) +- [Blockscout वर API दस्तऐवजीकरण](https://docs.blockscout.com/devs/apis) +- [Beaconcha.in बीकन चेन एक्सप्लोरर](https://beaconcha.in) +- [ड्युन बेसिक्स](https://docs.dune.com/#dune-basics) +- [SubQuery Ethereum क्विक स्टार्ट गाइड](https://academy.subquery.network/indexer/quickstart/quickstart_chains/ethereum-gravatar.html) +- [SQD नेटवर्क आढावा](https://docs.sqd.dev/) +- [EVM क्वेरी भाषा](https://eql.sh/blog/alpha-release-notes) diff --git a/public/content/translations/mr/developers/docs/data-availability/blockchain-data-storage-strategies/index.md b/public/content/translations/mr/developers/docs/data-availability/blockchain-data-storage-strategies/index.md new file mode 100644 index 00000000000..cfed17621f5 --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-availability/blockchain-data-storage-strategies/index.md @@ -0,0 +1,118 @@ +--- +title: "ब्लॉकचेन डेटा स्टोरेज धोरणे" +description: "ब्लॉकचेन वापरून डेटा साठवण्याचे अनेक मार्ग आहेत. हा लेख विविध धोरणे, त्यांचे खर्च आणि फायदे-तोटे, तसेच त्याचा सुरक्षितपणे वापर करण्यासाठीच्या आवश्यकतांची तुलना करेल." +lang: mr +--- + +ब्लॉकचेनवर थेट माहिती संग्रहित करण्याचे किंवा ब्लॉकचेनद्वारे सुरक्षित असलेल्या पद्धतीने माहिती संग्रहित करण्याचे अनेक मार्ग आहेत: + +- EIP-4844 ब्लॉब्स +- कॉलडेटा +- L1 यंत्रणांसह ऑफचेन +- कंत्राट "कोड" +- कार्यक्रम +- EVM स्टोरेज + +कोणती पद्धत वापरायची याची निवड अनेक निकषांवर आधारित आहे: + +- माहितीचा स्रोत. कॉलडेटामधील माहिती थेट ब्लॉकचेनमधून येऊ शकत नाही. +- माहितीचे अंतिम स्थान. कॉलडेटा केवळ त्या व्यवहारात उपलब्ध असतो ज्यामध्ये त्याचा समावेश असतो. इव्हेंट्स ऑनचेन अजिबात उपलब्ध नसतात. +- किती त्रास स्वीकारार्ह आहे? पूर्ण-प्रमाणातील नोड चालवणारे संगणक ब्राउझरमध्ये चालणाऱ्या अॅप्लिकेशनमधील लाइट क्लायंटपेक्षा जास्त प्रक्रिया करू शकतात. +- प्रत्येक नोडमधून माहिती सहज उपलब्ध करणे आवश्यक आहे का? +- सुरक्षेच्या आवश्यकता. + +## सुरक्षेच्या आवश्यकता {#security-requirements} + +सर्वसाधारणपणे, माहिती सुरक्षेमध्ये तीन गुणधर्म असतात: + +- _गोपनीयता_, अनधिकृत संस्थांना माहिती वाचण्याची परवानगी नाही. हे अनेक बाबतीत महत्त्वाचे आहे, परंतु येथे नाही. _ब्लॉकचेनवर कोणतीही गुपिते नाहीत_. ब्लॉकचेन्स काम करतात कारण कोणीही स्टेटमधील बदल सत्यापित करू शकतो, म्हणून त्यांचा थेट गुपिते साठवण्यासाठी वापर करणे अशक्य आहे. ब्लॉकचेनवर गोपनीय माहिती साठवण्याचे मार्ग आहेत, परंतु ते सर्व किमान एक की साठवण्यासाठी काही ऑफचेन घटकावर अवलंबून असतात. + +- _अखंडता_, माहिती अचूक आहे, ती अनधिकृत संस्थांद्वारे किंवा अनधिकृत मार्गांनी बदलली जाऊ शकत नाही (उदाहरणार्थ, `Transfer` इव्हेंटशिवाय [ERC-20 टोकन्स](https://eips.ethereum.org/EIPS/eip-20#events) हस्तांतरित करणे). ब्लॉकचेनवर, प्रत्येक नोड प्रत्येक स्टेट बदलाची पडताळणी करतो, ज्यामुळे अखंडता सुनिश्चित होते. + +- _उपलब्धता_, माहिती कोणत्याही अधिकृत संस्थेसाठी उपलब्ध आहे. ब्लॉकचेनवर, हे सामान्यतः प्रत्येक [पूर्ण नोड](https://ethereum.org/developers/docs/nodes-and-clients#full-node) वर माहिती उपलब्ध करून साधले जाते. + +येथील सर्व विविध उपायांमध्ये उत्कृष्ट अखंडता आहे, कारण हॅश L1 वर पोस्ट केले जातात. तथापि, त्यांच्याकडे वेगवेगळ्या उपलब्धतेची हमी आहे. + +## पूर्वतयारी {#prerequisites} + +तुम्हाला [ब्लॉकचेनच्या मूलभूत तत्त्वांची](/developers/docs/intro-to-ethereum/) चांगली समज असायला हवी. हे पृष्ठ असेही गृहीत धरते की वाचक [ब्लॉक्स](/developers/docs/blocks/), [व्यवहार](/developers/docs/transactions/) आणि इतर संबंधित विषयांबद्दल परिचित आहे. + +## EIP-4844 ब्लॉब्स {#eip-4844-blobs} + +[Dencun हार्डफोर्क](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/beacon-chain.md) पासून, Ethereum ब्लॉकचेनमध्ये [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) समाविष्ट आहे, जे Ethereum मध्ये मर्यादित आयुष्य असलेले डेटा ब्लॉब्स जोडते (सुरुवातीला सुमारे [18 दिवस](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration)). या ब्लॉब्सची किंमत [एक्झिक्यूशन गॅस](/developers/docs/gas) पासून वेगळी आहे, जरी त्यासाठी समान यंत्रणा वापरली जात असली तरी. ते तात्पुरता डेटा पोस्ट करण्याचा एक स्वस्त मार्ग आहेत. + +EIP-4844 ब्लॉब्सचा मुख्य उपयोग रोलअप्सना त्यांचे व्यवहार प्रकाशित करण्यासाठी आहे. [ऑप्टिमिस्टिक रोलअप्सना](/developers/docs/scaling/optimistic-rollups) त्यांच्या ब्लॉकचेनवर व्यवहार प्रकाशित करणे आवश्यक आहे. जर रोलअपच्या [सिक्वेन्सरने](https://docs.optimism.io/connect/resources/glossary#sequencer) चुकीचे स्टेट रूट पोस्ट केले तर [व्हॅलिडेटर्सना](https://docs.optimism.io/connect/resources/glossary#validator) चूक दुरुस्त करण्यास सक्षम करण्यासाठी ते व्यवहार [चॅलेंज कालावधीत](https://docs.optimism.io/connect/resources/glossary#challenge-period) कोणालाही उपलब्ध असणे आवश्यक आहे. + +तथापि, एकदा चॅलेंज कालावधी संपला आणि स्टेट रूट अंतिम झाले की, हे व्यवहार जाणून घेण्याचा उर्वरित उद्देश चेनच्या सद्य स्टेटची प्रतिकृती तयार करणे हा असतो. हे स्टेट चेन नोड्सवरून देखील उपलब्ध आहे, ज्यासाठी खूप कमी प्रक्रियेची आवश्यकता असते. म्हणून व्यवहाराची माहिती अजूनही काही ठिकाणी जतन केली पाहिजे, जसे की [ब्लॉक एक्सप्लोरर्स](/developers/docs/data-and-analytics/block-explorers), परंतु Ethereum द्वारे प्रदान केलेल्या सेन्सॉरशिप प्रतिरोधाच्या पातळीसाठी पैसे देण्याची गरज नाही. + +[झीरो-नॉलेज रोलअप्स](/developers/docs/scaling/zk-rollups/#data-availability) देखील इतर नोड्सना विद्यमान स्टेटची प्रतिकृती तयार करण्यास आणि व्हॅलिडिटी प्रूफ्स सत्यापित करण्यास सक्षम करण्यासाठी त्यांचा व्यवहार डेटा पोस्ट करतात, परंतु पुन्हा ही एक अल्प-मुदतीची आवश्यकता आहे. + +हे लिहित असताना, EIP-4844 वर पोस्ट करण्याचा खर्च प्रति बाइट एक wei (10-18 ETH) आहे, जो [ब्लॉब्स पोस्ट करणाऱ्या व्यवहारासह कोणत्याही व्यवहाराला लागणाऱ्या 21,000 एक्झिक्यूशन गॅसच्या](https://eth.blockscout.com/tx/0xf6cfaf0431c73dd1d96369a5e6707d64f463ccf477a4131265397f1d81466929?tab=index) तुलनेत नगण्य आहे. तुम्ही [blobscan.com](https://blobscan.com/blocks) वर सध्याची EIP-4844 किंमत पाहू शकता. + +काही प्रसिद्ध रोलअप्सद्वारे पोस्ट केलेले ब्लॉब्स पाहण्यासाठी येथे अ‍ॅड्रेस दिले आहेत. + +| रोलअप | मेलबॉक्स अ‍ॅड्रेस | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- | +| [Optimism](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://blobscan.com/address/0xFF00000000000000000000000000000000000010) | +| [Arbitrum](https://arbitrum.io/) | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://blobscan.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) | +| [Base](https://base.org/) | [`0xFF00000000000000000000000000000000008453`](https://blobscan.com/address/0xFF00000000000000000000000000000000008453) | + +## कॉलडेटा {#calldata} + +कॉलडेटा म्हणजे व्यवहाराचा भाग म्हणून पाठवलेले बाइट्स. हे ब्लॉकचेनच्या कायमस्वरूपी रेकॉर्डचा एक भाग म्हणून त्या व्यवहाराचा समावेश असलेल्या ब्लॉकमध्ये संग्रहित केले जाते. + +ब्लॉकचेनमध्ये कायमस्वरूपी डेटा टाकण्याची ही सर्वात स्वस्त पद्धत आहे. प्रति बाइट खर्च 4 एक्झिक्यूशन गॅस (जर बाइट शून्य असेल) किंवा 16 गॅस (इतर कोणतेही मूल्य) आहे. जर डेटा संकुचित केला असेल, जी एक मानक पद्धत आहे, तर प्रत्येक बाइट मूल्याची शक्यता समान असते, त्यामुळे सरासरी खर्च प्रति बाइट अंदाजे 15.95 गॅस येतो. + +हे लिहित असताना, किमती 12 gwei/gas आणि 2300 $/ETH आहेत, याचा अर्थ खर्च प्रति किलोबाइट अंदाजे 45 सेंट आहे. कारण EIP-4844 पूर्वी ही सर्वात स्वस्त पद्धत होती, हीच पद्धत रोलअप्सनी व्यवहार माहिती साठवण्यासाठी वापरली होती, जी [फॉल्ट चॅलेंजेससाठी](https://docs.optimism.io/stack/protocol/overview#fault-proofs) उपलब्ध असणे आवश्यक आहे, परंतु ती थेट ऑनचेन उपलब्ध असणे आवश्यक नाही. + +काही प्रसिद्ध रोलअप्सद्वारे पोस्ट केलेले व्यवहार पाहण्यासाठी येथे अ‍ॅड्रेस दिले आहेत. + +| रोलअप | मेलबॉक्स अ‍ॅड्रेस | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | +| [Optimism](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000000010) | +| [Arbitrum](https://arbitrum.io/) | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://eth.blockscout.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) | +| [Base](https://base.org/) | [`0xFF00000000000000000000000000000000008453`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000008453) | + +## L1 यंत्रणांसह ऑफचेन {#offchain-with-l1-mechs} + +तुमच्या सुरक्षेतील फायदे-तोट्यांवर अवलंबून, माहिती इतरत्र ठेवणे आणि आवश्यकतेनुसार डेटा उपलब्ध असल्याची खात्री करणारी यंत्रणा वापरणे स्वीकारार्ह असू शकते. हे काम करण्यासाठी दोन आवश्यकता आहेत: + +1. डेटाचा एक [हॅश](https://en.wikipedia.org/wiki/Cryptographic_hash_function) ब्लॉकचेनवर पोस्ट करा, ज्याला _इनपुट कमिटमेंट_ म्हणतात. हा एकच 32-बाइट शब्द असू शकतो, त्यामुळे तो महाग नाही. जोपर्यंत इनपुट कमिटमेंट उपलब्ध आहे, तोपर्यंत अखंडतेची खात्री असते कारण समान मूल्यावर हॅश होणारा कोणताही अन्य डेटा शोधणे व्यवहार्य नाही. त्यामुळे जर चुकीचा डेटा प्रदान केला गेला, तर तो ओळखला जाऊ शकतो. + +2. उपलब्धतेची खात्री देणारी यंत्रणा असावी. उदाहरणार्थ, [Redstone](https://redstone.xyz/docs/what-is-redstone) मध्ये कोणताही नोड उपलब्धता चॅलेंज सादर करू शकतो. जर सिक्वेन्सरने अंतिम मुदतीपर्यंत ऑनचेन प्रतिसाद दिला नाही, तर इनपुट कमिटमेंट टाकून दिली जाते, त्यामुळे माहिती कधीही पोस्ट केली गेली नव्हती असे मानले जाते. + +हे ऑप्टिमिस्टिक रोलअपसाठी स्वीकारार्ह आहे कारण आपण आधीच स्टेट रूटसाठी किमान एका प्रामाणिक व्हेरिफायरवर अवलंबून आहोत. असा प्रामाणिक व्हेरिफायर ब्लॉक्सवर प्रक्रिया करण्यासाठी त्याच्याकडे डेटा असल्याची खात्री करेल, आणि जर माहिती ऑफचेन उपलब्ध नसेल तर उपलब्धता चॅलेंज जारी करेल. या प्रकारच्या ऑप्टिमिस्टिक रोलअपला [प्लाझ्मा](/developers/docs/scaling/plasma/) म्हणतात. + +## कंत्राट कोड {#contract-code} + +जी माहिती एकदाच लिहिण्याची आवश्यकता आहे, जी कधीही ओव्हरराइट होत नाही आणि ऑनचेन उपलब्ध असणे आवश्यक आहे, ती कंत्राट कोड म्हणून संग्रहित केली जाऊ शकते. याचा अर्थ असा की आपण डेटासह एक "स्मार्ट कंत्राट" तयार करतो आणि नंतर माहिती वाचण्यासाठी [`EXTCODECOPY`](https://www.evm.codes/#3c?fork=shanghai) वापरतो. फायदा असा आहे की कोड कॉपी करणे तुलनेने स्वस्त आहे. + +मेमरी विस्ताराच्या खर्चाव्यतिरिक्त, `EXTCODECOPY` साठी कंत्राटाच्या पहिल्या प्रवेशासाठी (जेव्हा ते "कोल्ड" असते) 2600 गॅस खर्च येतो आणि त्याच कंत्राटातून त्यानंतरच्या प्रतींसाठी 100 गॅस अधिक प्रति 32 बाइट शब्दासाठी 3 गॅस खर्च येतो. कॉलडेटाच्या तुलनेत, ज्याचा खर्च प्रति बाइट 15.95 आहे, हे सुमारे 200 बाइट्सपासून स्वस्त आहे. [मेमरी विस्ताराच्या खर्चाच्या सूत्रानुसार](https://www.evm.codes/about#memoryexpansion), जोपर्यंत तुम्हाला 4MB पेक्षा जास्त मेमरीची आवश्यकता नाही, तोपर्यंत मेमरी विस्ताराचा खर्च कॉलडेटा जोडण्याच्या खर्चापेक्षा कमी आहे. + +अर्थात, हा फक्त डेटा _वाचण्याचा_ खर्च आहे. कंत्राट तयार करण्यासाठी अंदाजे 32,000 गॅस + 200 गॅस/बाइट खर्च येतो. जेव्हा समान माहिती वेगवेगळ्या व्यवहारांमध्ये अनेक वेळा वाचण्याची आवश्यकता असते तेव्हाच ही पद्धत किफायतशीर असते. + +कंत्राट कोड निरर्थक असू शकतो, जोपर्यंत तो `0xEF` ने सुरू होत नाही. `0xEF` ने सुरू होणारे कंत्राट [ethereum ऑब्जेक्ट फॉरमॅट](https://notes.ethereum.org/@ipsilon/evm-object-format-overview) म्हणून अर्थ लावले जातात, ज्यामध्ये अधिक कठोर आवश्यकता आहेत. + +## इव्हेंट्स {#events} + +[इव्हेंट्स](https://docs.alchemy.com/docs/solidity-events) स्मार्ट कंत्राटांद्वारे उत्सर्जित केले जातात, आणि ऑफचेन सॉफ्टवेअरद्वारे वाचले जातात. +त्यांचा फायदा असा आहे की ऑफचेन कोड इव्हेंट्स ऐकू शकतो. खर्च [गॅस](https://www.evm.codes/#a0?fork=cancun), 375 अधिक डेटाच्या प्रति बाइट 8 गॅस आहे. 12 gwei/gas आणि 2300 $/ETH वर, याचा अर्थ एक सेंट अधिक प्रति किलोबाइट 22 सेंट असा होतो. + +## स्टोरेज {#storage} + +स्मार्ट कंत्राटांना [कायमस्वरूपी स्टोरेज](https://docs.alchemy.com/docs/smart-contract-storage-layout#what-is-storage-memory)मध्ये प्रवेश असतो. तथापि, ते खूप महाग आहे. पूर्वी रिकाम्या असलेल्या स्टोरेज स्लॉटमध्ये 32 बाइटचा शब्द लिहिण्यासाठी [22,100 गॅस खर्च](https://www.evm.codes/#55?fork=cancun) येऊ शकतो. 12 gwei/gas आणि 2300 $/ETH वर, हे प्रति लेखन ऑपरेशन सुमारे 61 सेंट किंवा प्रति किलोबाइट $19.5 आहे. + +हे Ethereum मधील स्टोरेजचे सर्वात महाग स्वरूप आहे. + +## सारांश {#summary} + +ही सारणी विविध पर्याय, त्यांचे फायदे आणि तोटे यांचा सारांश देते. + +| स्टोरेजचा प्रकार | डेटाचा स्रोत | उपलब्धतेची हमी | ऑनचेन उपलब्धता | अतिरिक्त मर्यादा | +| ------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------------ | +| EIP-4844 ब्लॉब्स | ऑफचेन | [~18 दिवसांसाठी](https://github.com/ethereum/consensus-specs/blob/dev/specs/deneb/p2p-interface.md#configuration) Ethereum हमी | फक्त हॅश उपलब्ध आहे | | +| कॉलडेटा | ऑफचेन | कायमस्वरूपी Ethereum हमी (ब्लॉकचेनचा भाग) | फक्त कंत्राटात लिहिले असेल तर आणि त्या व्यवहारात उपलब्ध | | +| L1 यंत्रणांसह ऑफचेन | ऑफचेन | चॅलेंज कालावधीत "एक प्रामाणिक व्हेरिफायर" हमी | फक्त हॅश | चॅलेंज यंत्रणेद्वारे हमी, फक्त चॅलेंज कालावधीत | +| कंत्राट कोड | ऑनचेन किंवा ऑफचेन | कायमस्वरूपी Ethereum हमी (ब्लॉकचेनचा भाग) | होय | "यादृच्छिक" अ‍ॅड्रेसवर लिहिलेले, `0xEF` ने सुरू होऊ शकत नाही | +| कार्यक्रम | ऑनचेन | कायमस्वरूपी Ethereum हमी (ब्लॉकचेनचा भाग) | नाही | | +| स्टोरेज | ऑनचेन | कायमस्वरूपी Ethereum हमी (ब्लॉकचेनचा भाग आणि ओव्हरराइट होईपर्यंत सद्य स्टेट) | होय | | diff --git a/public/content/translations/mr/developers/docs/data-availability/index.md b/public/content/translations/mr/developers/docs/data-availability/index.md new file mode 100644 index 00000000000..3476018b98f --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-availability/index.md @@ -0,0 +1,84 @@ +--- +title: "डेटा उपलब्धता" +description: "Ethereum मध्ये डेटा उपलब्धतेशी संबंधित समस्या आणि उपायांचे एक अवलोकन" +lang: mr +--- + +"विश्वास ठेवू नका, सत्यापित करा" हे Ethereum मधील एक सामान्य सूत्र आहे. यामागील कल्पना अशी आहे की तुमचा नोड त्याला पिअर्सकडून मिळालेल्या ब्लॉक्समधील सर्व व्यवहारांची अंमलबजावणी करून स्वतंत्रपणे मिळालेली माहिती योग्य आहे की नाही हे सत्यापित करू शकतो, जेणेकरून प्रस्तावित बदल नोडद्वारे स्वतंत्रपणे गणन केलेल्या बदलांशी तंतोतंत जुळतील याची खात्री करता येईल. याचा अर्थ असा की नोड्सना ब्लॉकच्या प्रेषकांवर प्रामाणिक असल्याचा विश्वास ठेवण्याची गरज नाही. डेटा गहाळ असल्यास हे शक्य नाही. + +**डेटा उपलब्धता** म्हणजे ब्लॉक सत्यापित करण्यासाठी आवश्यक असलेला डेटा नेटवर्कमधील सर्व सहभागींना खरोखर उपलब्ध आहे यावर वापरकर्त्याचा विश्वास. Ethereum लेयर 1 वरील फुल नोड्ससाठी हे तुलनेने सोपे आहे; फुल नोड प्रत्येक ब्लॉकमधील सर्व डेटाची एक प्रत डाउनलोड करतो - डाउनलोड करणे शक्य होण्यासाठी डेटा उपलब्ध _असलाच_ पाहिजे. गहाळ डेटा असलेला ब्लॉक ब्लॉकचेनमध्ये जोडण्याऐवजी टाकून दिला जातो. ही "ऑनचेन डेटा उपलब्धता" आहे आणि हे मोनोलिथिक ब्लॉकचेन्सचे वैशिष्ट्य आहे. फुल नोड्सना अवैध व्यवहार स्वीकारण्यासाठी फसवले जाऊ शकत नाही कारण ते प्रत्येक व्यवहार स्वतःसाठी डाउनलोड करतात आणि कार्यान्वित करतात. तथापि, मॉड्यूलर ब्लॉकचेन, लेयर 2 रोलअप आणि लाईट क्लायंटसाठी, डेटा उपलब्धतेचे परिदृश्य अधिक गुंतागुंतीचे आहे, ज्यासाठी काही अधिक अत्याधुनिक सत्यापन प्रक्रियांची आवश्यकता आहे. + +## पूर्वतयारी {#prerequisites} + +तुम्हाला [ब्लॉकचेनची मूलभूत तत्त्वे](/developers/docs/intro-to-ethereum/), विशेषतः [सहमती यंत्रणा](/developers/docs/consensus-mechanisms/) यांची चांगली समज असली पाहिजे. हे पृष्ठ असेही गृहीत धरते की वाचक [ब्लॉक्स](/developers/docs/blocks/), [व्यवहार](/developers/docs/transactions/), [नोड्स](/developers/docs/nodes-and-clients/), [स्केलिंग सोल्यूशन्स](/developers/docs/scaling/), आणि इतर संबंधित विषयांबद्दल परिचित आहेत. + +## डेटा उपलब्धता समस्या {#the-data-availability-problem} + +डेटा उपलब्धता समस्या म्हणजे, ब्लॉकचेनमध्ये जोडल्या जाणाऱ्या काही व्यवहार डेटाचे संक्षिप्त स्वरूप खरोखरच वैध व्यवहारांच्या संचाचे प्रतिनिधित्व करते हे संपूर्ण नेटवर्कला सिद्ध करण्याची गरज, पण असे करताना सर्व नोड्सना सर्व डेटा डाउनलोड करण्याची आवश्यकता न ठेवणे. स्वतंत्रपणे ब्लॉक्सची पडताळणी करण्यासाठी पूर्ण व्यवहार डेटा आवश्यक आहे, परंतु सर्व नोड्सना सर्व व्यवहार डेटा डाउनलोड करण्याची आवश्यकता असणे हे स्केलिंगसाठी एक अडथळा आहे. डेटा उपलब्धता समस्येवरील उपायांचे उद्दिष्ट नेटवर्कमधील अशा सहभागींना पुरेसे आश्वासन देणे आहे जे स्वतःसाठी डेटा डाउनलोड आणि संग्रहित करत नाहीत, की पूर्ण व्यवहार डेटा पडताळणीसाठी उपलब्ध करून देण्यात आला होता. + +[लाईट नोड्स](/developers/docs/nodes-and-clients/light-clients) आणि [लेयर 2 रोलअप्स](/developers/docs/scaling) ही नेटवर्कमधील अशा सहभागींची महत्त्वाची उदाहरणे आहेत ज्यांना डेटा उपलब्धतेची मजबूत हमी आवश्यक आहे परंतु ते स्वतःसाठी व्यवहार डेटा डाउनलोड आणि त्यावर प्रक्रिया करू शकत नाहीत. व्यवहार डेटा डाउनलोड करणे टाळल्यामुळेच लाईट नोड्स 'लाईट' (हलके) बनतात आणि रोलअप्सना प्रभावी स्केलिंग सोल्यूशन्स बनण्यास मदत होते. + +भविष्यातील ["स्टेटलेस"](/roadmap/statelessness) Ethereum क्लायंटसाठी डेटा उपलब्धता ही एक गंभीर चिंतेची बाब आहे, ज्यांना ब्लॉक्सची पडताळणी करण्यासाठी स्टेट डेटा डाउनलोड आणि संग्रहित करण्याची आवश्यकता नाही. स्टेटलेस क्लायंट्सना अजूनही खात्री असणे आवश्यक आहे की डेटा _कुठेतरी_ उपलब्ध आहे आणि त्यावर योग्यरित्या प्रक्रिया केली गेली आहे. + +## डेटा उपलब्धता उपाय {#data-availability-solutions} + +### डेटा उपलब्धता सॅम्पलिंग (DAS) {#data-availability-sampling} + +डेटा उपलब्धता सॅम्पलिंग (DAS) हा नेटवर्कसाठी कोणत्याही एका नोडवर जास्त ताण न टाकता डेटा उपलब्ध आहे की नाही हे तपासण्याचा एक मार्ग आहे. प्रत्येक नोड (नॉन-स्टेकिंग नोड्ससह) एकूण डेटाचा एक छोटा, यादृच्छिकपणे निवडलेला उपसंच डाउनलोड करतो. नमुने यशस्वीरित्या डाउनलोड केल्याने सर्व डेटा उपलब्ध असल्याची उच्च आत्मविश्वासाने पुष्टी होते. हे डेटा इरेजर कोडिंगवर अवलंबून आहे, जे रिडंडंट माहितीसह दिलेल्या डेटासेटचा विस्तार करते (हे करण्याचा मार्ग म्हणजे डेटावर _पॉलीनोमियल_ म्हणून ओळखले जाणारे फंक्शन फिट करणे आणि अतिरिक्त पॉईंट्सवर त्या पॉलीनोमियलचे मूल्यांकन करणे). हे आवश्यकतेनुसार रिडंडंट डेटामधून मूळ डेटा पुनर्प्राप्त करण्यास अनुमती देते. या डेटा निर्मितीचा परिणाम असा आहे की जर मूळ डेटाचा _कोणताही_ भाग अनुपलब्ध असेल, तर विस्तारित डेटाचा _अर्धा_ भाग गहाळ होईल! प्रत्येक नोडद्वारे डाउनलोड केलेल्या डेटा नमुन्यांचे प्रमाण अशा प्रकारे ट्यून केले जाऊ शकते की जर अर्ध्यापेक्षा कमी डेटा खरोखर उपलब्ध असेल, तर प्रत्येक क्लायंटद्वारे नमुना घेतलेल्या डेटाच्या तुकड्यांपैकी किमान एक तुकडा गहाळ असण्याची _अत्यंत_ शक्यता असते. + +[फुल डँकशार्डिंग](/roadmap/danksharding/#what-is-danksharding) लागू झाल्यानंतर रोलअप ऑपरेटर आपला व्यवहार डेटा उपलब्ध करतात याची खात्री करण्यासाठी DAS चा वापर केला जाईल. सर्व डेटा अस्तित्वात आहे याची खात्री करण्यासाठी Ethereum नोड्स वर स्पष्ट केलेल्या रिडंडंसी स्कीमचा वापर करून ब्लॉब्समध्ये प्रदान केलेल्या व्यवहार डेटाचे यादृच्छिकपणे सॅम्पल घेतील. ब्लॉक प्रोड्युसर्स लाईट क्लायंट्सना सुरक्षित ठेवण्यासाठी आपला सर्व डेटा उपलब्ध करून देत आहेत याची खात्री करण्यासाठी हीच पद्धत वापरली जाऊ शकते. त्याचप्रमाणे, [प्रस्तावक-निर्माता पृथक्करण (proposer-builder separation)](/roadmap/pbs) अंतर्गत, केवळ ब्लॉक बिल्डरलाच संपूर्ण ब्लॉकवर प्रक्रिया करणे आवश्यक असेल - इतर व्हॅलिडेटर्स डेटा उपलब्धता सॅम्पलिंग वापरून पडताळणी करतील. + +### डेटा उपलब्धता समित्या {#data-availability-committees} + +डेटा उपलब्धता समित्या (DACs) या विश्वसनीय पक्ष आहेत जे डेटा उपलब्धतेची हमी देतात किंवा त्याची साक्ष देतात. DACs चा वापर DAS च्या ऐवजी [किंवा त्याच्या संयोगाने](https://hackmd.io/@vbuterin/sharding_proposal#Why-not-use-just-committees-and-not-DAS) केला जाऊ शकतो. समित्यांसोबत येणारी सुरक्षा हमी विशिष्ट सेटअपवर अवलंबून असते. उदाहरणार्थ, लाईट नोड्ससाठी डेटा उपलब्धतेची साक्ष देण्यासाठी Ethereum व्हॅलिडेटर्सच्या यादृच्छिकपणे निवडलेल्या उपसंचांचा वापर करते. + +काही व्हॅलिडियम्सद्वारे DACs चा वापर केला जातो. DAC हा नोड्सचा एक विश्वसनीय संच आहे जो डेटाच्या प्रती ऑफलाइन संग्रहित करतो. विवादाच्या प्रसंगी डेटा उपलब्ध करून देणे DAC ला आवश्यक आहे. DAC चे सदस्य ऑनचेन साक्षांकन देखील प्रकाशित करतात हे सिद्ध करण्यासाठी की सदर डेटा खरोखर उपलब्ध आहे. काही व्हॅलिडियम्स DACs च्या जागी प्रूफ-ऑफ-स्टेक (PoS) व्हॅलिडेटर प्रणाली वापरतात. येथे, कोणीही व्हॅलिडेटर बनू शकतो आणि डेटा ऑफचेन संग्रहित करू शकतो. तथापि, त्यांना एक "बॉन्ड" प्रदान करणे आवश्यक आहे, जो स्मार्ट कॉन्ट्रॅक्टमध्ये जमा केला जातो. दुर्भावनापूर्ण वर्तनाच्या प्रसंगी, जसे की व्हॅलिडेटरने डेटा रोखून ठेवल्यास, बॉन्ड स्लॅश केला जाऊ शकतो. प्रूफ-ऑफ-स्टेक डेटा उपलब्धता समित्या नियमित DACs पेक्षा अधिक सुरक्षित आहेत कारण त्या प्रामाणिक वर्तनाला थेट प्रोत्साहन देतात. + +## डेटा उपलब्धता आणि लाईट नोड्स {#data-availability-and-light-nodes} + +[लाईट नोड्सना](/developers/docs/nodes-and-clients/light-clients) ब्लॉक डेटा डाउनलोड न करता त्यांना मिळणाऱ्या ब्लॉक हेडर्सची अचूकता सत्यापित करणे आवश्यक आहे. या हलकेपणाची किंमत म्हणजे फुल नोड्स ज्या प्रकारे स्थानिक पातळीवर व्यवहार पुन्हा कार्यान्वित करून ब्लॉक हेडर्सची स्वतंत्रपणे पडताळणी करू शकतात, तसे न करू शकणे. + +Ethereum लाईट नोड्स 512 व्हॅलिडेटर्सच्या यादृच्छिक संचांवर विश्वास ठेवतात ज्यांना _सिंक समिती_मध्ये नेमले गेले आहे. सिंक समिती एका DAC प्रमाणे कार्य करते जी लाईट क्लायंट्सना क्रिप्टोग्राफिक स्वाक्षरी वापरून सूचित करते की हेडरमधील डेटा योग्य आहे. दररोज, सिंक समिती रिफ्रेश होते. प्रत्येक ब्लॉक हेडर लाईट नोड्सना सावध करतो की कोणत्या व्हॅलिडेटर्सकडून _पुढील_ ब्लॉकवर स्वाक्षरीची अपेक्षा करावी, त्यामुळे त्यांना खऱ्या सिंक-समितीचे ढोंग करणाऱ्या दुर्भावनापूर्ण गटावर विश्वास ठेवण्यासाठी फसवले जाऊ शकत नाही. + +तथापि, जर एखाद्या आक्रमणकर्त्याने लाईट क्लायंट्सना एक दुर्भावनापूर्ण ब्लॉक हेडर पाठवण्यात आणि तो एका प्रामाणिक सिंक-समितीने स्वाक्षरी केलेला आहे यावर त्यांचा विश्वास बसवण्यात यश मिळवले तर काय होईल? त्या बाबतीत, आक्रमणकर्ता अवैध व्यवहार समाविष्ट करू शकतो आणि लाईट क्लायंट त्यांना आंधळेपणाने स्वीकारेल, कारण ते ब्लॉक हेडरमध्ये सारांशित केलेले सर्व स्टेट बदल स्वतंत्रपणे तपासत नाहीत. यापासून संरक्षण करण्यासाठी, लाईट क्लायंट फ्रॉड प्रूफ्सचा वापर करू शकतो. + +हे फ्रॉड प्रूफ्स ज्या प्रकारे काम करतात ते असे आहे की, नेटवर्कमध्ये अवैध स्टेट ट्रांझिशन पसरताना पाहून एक फुल नोड त्वरीत डेटाचा एक छोटा तुकडा तयार करू शकतो, जो हे दर्शवतो की प्रस्तावित स्टेट ट्रांझिशन दिलेल्या व्यवहारांच्या संचामधून शक्य नाही, आणि तो डेटा पिअर्सना प्रसारित करू शकतो. लाईट नोड्स ते फ्रॉड-प्रूफ्स घेऊ शकतात आणि खराब ब्लॉक हेडर्स टाकून देण्यासाठी त्यांचा वापर करू शकतात, ज्यामुळे ते फुल नोड्सप्रमाणेच प्रामाणिक चेनवर राहतील याची खात्री होते. + +हे फुल नोड्सना पूर्ण व्यवहार डेटाचा ऍक्सेस असण्यावर अवलंबून आहे. एक आक्रमणकर्ता जो एक खराब ब्लॉक हेडर प्रसारित करतो आणि व्यवहार डेटा उपलब्ध करून देण्यात अपयशी ठरतो, तो फुल नोड्सना फ्रॉड प्रूफ्स तयार करण्यापासून रोखू शकतो. फुल नोड्स कदाचित एका खराब ब्लॉकबद्दल चेतावणी देऊ शकतील, परंतु ते त्यांच्या चेतावणीला पुराव्यासह दुजोरा देऊ शकणार नाहीत, कारण पुरावा तयार करण्यासाठी डेटा उपलब्ध करून दिला गेला नव्हता! + +या डेटा उपलब्धता समस्येवर उपाय म्हणजे DAS. लाईट नोड्स संपूर्ण स्टेट डेटाचे खूप लहान यादृच्छिक तुकडे डाउनलोड करतात आणि संपूर्ण डेटा संच उपलब्ध असल्याची पडताळणी करण्यासाठी त्या नमुन्यांचा वापर करतात. N यादृच्छिक चंक्स डाउनलोड केल्यानंतर पूर्ण डेटा उपलब्ध आहे असे चुकीने गृहीत धरण्याची वास्तविक शक्यता मोजली जाऊ शकते ([100 चंक्ससाठी ही शक्यता 10^-30 आहे](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html), म्हणजे, अविश्वसनीयपणे अशक्य). + +या परिस्थितीतही, केवळ काही बाइट्स रोखून ठेवणारे हल्ले यादृच्छिक डेटा विनंत्या करणाऱ्या क्लायंट्सच्या लक्षात न येण्याची शक्यता आहे. इरेजर कोडिंग डेटाचे गहाळ झालेले छोटे तुकडे पुन्हा तयार करून ही समस्या दूर करते, ज्याचा उपयोग प्रस्तावित स्टेट बदल तपासण्यासाठी केला जाऊ शकतो. त्यानंतर पुनर्रचित डेटा वापरून एक फ्रॉड प्रूफ तयार केला जाऊ शकतो, ज्यामुळे लाईट नोड्सना खराब हेडर्स स्वीकारण्यापासून रोखता येते. + +**टीप:** प्रूफ-ऑफ-स्टेक Ethereum लाईट क्लायंटसाठी DAS आणि फ्रॉड प्रूफ्स अद्याप लागू केलेले नाहीत, परंतु ते रोडमॅपवर आहेत, आणि बहुधा ZK-SNARK आधारित प्रूफ्सच्या स्वरूपात असतील. आजचे लाईट क्लायंट DAC च्या एका प्रकारावर अवलंबून आहेत: ते सिंक-समितीच्या ओळखीची पडताळणी करतात आणि नंतर त्यांना मिळालेल्या स्वाक्षरी केलेल्या ब्लॉक हेडर्सवर विश्वास ठेवतात. + +## डेटा उपलब्धता आणि लेयर 2 रोलअप्स {#data-availability-and-layer-2-rollups} + +[लेयर 2 स्केलिंग सोल्यूशन्स](/layer-2/), जसे की [रोलअप्स](/glossary/#rollups), ऑफचेन व्यवहारांवर प्रक्रिया करून व्यवहार खर्च कमी करतात आणि Ethereum चा थ्रुपुट वाढवतात. रोलअप व्यवहार संकुचित केले जातात आणि बॅचमध्ये Ethereum वर पोस्ट केले जातात. बॅचेस Ethereum वरील एकाच व्यवहारामध्ये हजारो वैयक्तिक ऑफचेन व्यवहारांचे प्रतिनिधित्व करतात. हे बेस लेयरवरील गर्दी कमी करते आणि वापरकर्त्यांसाठी शुल्क कमी करते. + +तथापि, Ethereum वर पोस्ट केलेल्या 'सारांश' व्यवहारांवर तेव्हाच विश्वास ठेवणे शक्य आहे जेव्हा प्रस्तावित स्टेट बदलाची स्वतंत्रपणे पडताळणी केली जाऊ शकते आणि सर्व वैयक्तिक ऑफचेन व्यवहार लागू केल्याचा तो परिणाम असल्याची पुष्टी केली जाऊ शकते. जर रोलअप ऑपरेटर्सनी या पडताळणीसाठी व्यवहार डेटा उपलब्ध करून दिला नाही, तर ते Ethereum ला चुकीचा डेटा पाठवू शकतात. + +[ऑप्टिमिस्टिक रोलअप्स](/developers/docs/scaling/optimistic-rollups/) संकुचित व्यवहार डेटा Ethereum वर पोस्ट करतात आणि स्वतंत्र पडताळणीकर्त्यांना डेटा तपासण्याची परवानगी देण्यासाठी काही कालावधीसाठी (सामान्यतः 7 दिवस) प्रतीक्षा करतात. जर कोणाला समस्या आढळली, तर ते एक फ्रॉड-प्रूफ तयार करू शकतात आणि रोलअपला आव्हान देण्यासाठी त्याचा वापर करू शकतात. यामुळे चेन रोल बॅक होईल आणि अवैध ब्लॉक वगळला जाईल. हे केवळ डेटा उपलब्ध असल्यास शक्य आहे. सध्या, ऑप्टिमिस्टिक रोलअप्स L1 वर व्यवहार डेटा पोस्ट करण्याचे दोन मार्ग आहेत. काही रोलअप्स डेटा `CALLDATA` म्हणून कायमस्वरूपी उपलब्ध करून देतात जो ऑनचेन कायमस्वरूपी राहतो. EIP-4844 च्या अंमलबजावणीसह, काही रोलअप्स आपला व्यवहार डेटा त्याऐवजी स्वस्त ब्लॉब स्टोरेजवर पोस्ट करतात. हे कायमस्वरूपी स्टोरेज नाही. Ethereum लेयर-1 मधून डेटा हटवण्यापूर्वी स्वतंत्र पडताळणीकर्त्यांना ~18 दिवसांच्या आत ब्लॉब्सची क्वेरी करावी लागते आणि आपली आव्हाने मांडावी लागतात. त्या लहान निश्चित विंडोसाठी डेटाची उपलब्धता केवळ Ethereum प्रोटोकॉलद्वारे हमी दिली जाते. त्यानंतर, ती Ethereum परिसंस्थेतील इतर घटकांची जबाबदारी बनते. कोणताही नोड DAS वापरून डेटाची उपलब्धता सत्यापित करू शकतो, म्हणजेच, ब्लॉब डेटाचे छोटे, यादृच्छिक नमुने डाउनलोड करून. + +[झिरो-नॉलेज (ZK) रोलअप्सना](/developers/docs/scaling/zk-rollups) व्यवहार डेटा पोस्ट करण्याची आवश्यकता नाही कारण [झिरो-नॉलेज व्हॅलिडिटी प्रूफ्स](/glossary/#zk-proof) स्टेट ट्रांझिशनच्या अचूकतेची हमी देतात. तथापि, डेटा उपलब्धता अजूनही एक समस्या आहे कारण आपण ZK-रोलअपच्या स्टेट डेटामध्ये प्रवेश केल्याशिवाय त्याच्या कार्यक्षमतेची हमी देऊ शकत नाही (किंवा त्याच्याशी संवाद साधू शकत नाही). उदाहरणार्थ, जर एखाद्या ऑपरेटरने रोलअपच्या स्टेटबद्दल तपशील रोखून ठेवला तर वापरकर्ते त्यांचे बॅलन्स जाणून घेऊ शकत नाहीत. तसेच, ते नव्याने जोडलेल्या ब्लॉकमध्ये असलेली माहिती वापरून स्टेट अपडेट्स करू शकत नाहीत. + +## डेटा उपलब्धता विरुद्ध डेटा पुनर्प्राप्ती {#data-availability-vs-data-retrievability} + +डेटा उपलब्धता ही डेटा पुनर्प्राप्तीपेक्षा वेगळी आहे. डेटा उपलब्धता ही खात्री आहे की फुल नोड्स एका विशिष्ट ब्लॉकशी संबंधित व्यवहारांच्या संपूर्ण संचावर प्रवेश करू शकले आहेत आणि त्याची पडताळणी करू शकले आहेत. याचा अर्थ असा नाही की डेटा कायमस्वरूपी उपलब्ध आहे. + +डेटा पुनर्प्राप्ती म्हणजे नोड्सची ब्लॉकचेनमधून _ऐतिहासिक माहिती_ पुनर्प्राप्त करण्याची क्षमता. नवीन ब्लॉक्सची पडताळणी करण्यासाठी या ऐतिहासिक डेटाची आवश्यकता नाही, तो फक्त जेनेसिस ब्लॉकमधून फुल नोड्स सिंक करण्यासाठी किंवा विशिष्ट ऐतिहासिक विनंत्या पूर्ण करण्यासाठी आवश्यक आहे. + +मूळ Ethereum प्रोटोकॉल प्रामुख्याने डेटा उपलब्धतेशी संबंधित आहे, डेटा पुनर्प्राप्तीशी नाही. डेटा पुनर्प्राप्ती तृतीय पक्षांद्वारे चालवल्या जाणाऱ्या अर्काइव्ह नोड्सच्या लहान लोकसंख्येद्वारे प्रदान केली जाऊ शकते, किंवा [पोर्टल नेटवर्क](https://www.ethportal.net/) सारख्या विकेंद्रित फाइल स्टोरेजचा वापर करून नेटवर्कवर वितरित केली जाऊ शकते. + +## पुढील वाचन {#further-reading} + +- [डेटा उपलब्धता म्हणजे काय?](https://medium.com/blockchain-capital-blog/wtf-is-data-availability-80c2c95ded0f) +- [डेटा उपलब्धता काय आहे?](https://coinmarketcap.com/academy/article/what-is-data-availability) +- [डेटा उपलब्धता तपासणीवर एक प्राइमर](https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html) +- [शार्डिंग + DAS प्रस्तावाचे स्पष्टीकरण](https://hackmd.io/@vbuterin/sharding_proposal#ELI5-data-availability-sampling) +- [डेटा उपलब्धता आणि इरेजर कोडिंगवर एक टीप](https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding#can-an-attacker-not-circumvent-this-scheme-by-releasing-a-full-unavailable-block-but-then-only-releasing-individual-bits-of-data-as-clients-query-for-them) +- [डेटा उपलब्धता समित्या.](https://medium.com/starkware/data-availability-e5564c416424) +- [प्रूफ-ऑफ-स्टेक डेटा उपलब्धता समित्या.](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [डेटा पुनर्प्राप्ती समस्येवरील उपाय](https://notes.ethereum.org/@vbuterin/data_sharding_roadmap#Who-would-store-historical-data-under-sharding) +- [डेटा उपलब्धता किंवा: रोलअप्स कसे काळजी करणे सोडून Ethereum वर प्रेम करायला शिकले](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum) +- [EIP-7623: कॉलडेटा खर्च वाढवणे](https://web.archive.org/web/20250515194659/https://research.2077.xyz/eip-7623-increase-calldata-cost) diff --git a/public/content/translations/mr/developers/docs/data-structures-and-encoding/index.md b/public/content/translations/mr/developers/docs/data-structures-and-encoding/index.md new file mode 100644 index 00000000000..b9a07843c96 --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-structures-and-encoding/index.md @@ -0,0 +1,32 @@ +--- +title: "डेटा संरचना आणि एन्कोडिंग" +description: "मूलभूत इथेरियम डेटा स्ट्रक्चर्सचा आढावा." +lang: mr +sidebarDepth: 2 +--- + +इथेरियम मोठ्या प्रमाणात डेटा तयार करते, साठवते आणि हस्तांतरित करते. हा डेटा प्रमाणित आणि मेमरी-कार्यक्षम मार्गांनी स्वरूपित करणे आवश्यक आहे, जेणेकरून कोणीही तुलनेने सामान्य ग्राहक-श्रेणी हार्डवेअरवर [एक नोड चालवू](/run-a-node/) शकेल. हे साध्य करण्यासाठी, इथेरियम स्टॅकवर अनेक विशिष्ट डेटा स्ट्रक्चर्स वापरल्या जातात. + +## पूर्वतयारी {#prerequisites} + +आपण इथेरियमची मूलभूत तत्त्वे आणि [क्लायंट सॉफ्टवेअर](/developers/docs/nodes-and-clients/) समजून घेतले पाहिजे. नेटवर्किंग लेअर आणि [इथेरियम श्वेतपत्रिकेची](/whitepaper/) माहिती असण्याची शिफारस केली जाते. + +## डेटा स्ट्रक्चर्स {#data-structures} + +### पॅट्रिशिया मर्केल ट्राइज {#patricia-merkle-tries} + +पॅट्रिशिया मर्केल ट्राइज अशा रचना आहेत ज्या की-व्हॅल्यू जोड्यांना एका निश्चित आणि क्रिप्टोग्राफिकली प्रमाणीकृत ट्राइमध्ये एन्कोड करतात. इथेरियमच्या एक्झिक्युशन लेअरवर यांचा मोठ्या प्रमाणावर वापर केला जातो. + +[पॅट्रिशिया मर्केल ट्राइजबद्दल अधिक](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) + +### रिकर्सिव्ह लेंथ प्रीफिक्स {#recursive-length-prefix} + +रिकर्सिव्ह लेंथ प्रीफिक्स (RLP) ही एक सिरिअलायझेशन पद्धत आहे जी इथेरियमच्या एक्झिक्युशन लेअरवर मोठ्या प्रमाणावर वापरली जाते. + +[RLP बद्दल अधिक](/developers/docs/data-structures-and-encoding/rlp) + +### सिंपल सिरिअलाइज {#simple-serialize} + +सिंपल सिरिअलाइज (SSZ) हे इथेरियमच्या कन्सेन्सस लेअरवरील प्रमुख सिरिअलायझेशन स्वरूप आहे, कारण ते मर्केलायझेशनशी सुसंगत आहे. + +[SSZ बद्दल अधिक](/developers/docs/data-structures-and-encoding/ssz) diff --git a/public/content/translations/mr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md b/public/content/translations/mr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md new file mode 100644 index 00000000000..8c487aff810 --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-structures-and-encoding/patricia-merkle-trie/index.md @@ -0,0 +1,266 @@ +--- +title: "मर्केल पॅट्रिशिया ट्राई" +description: "मर्केल पॅट्रिशिया ट्राईची ओळख." +lang: mr +sidebarDepth: 2 +--- + +इथेरियमची स्टेट (सर्व अकाउंट्स, बॅलन्स आणि स्मार्ट कॉन्ट्रॅक्ट्सची एकूणता), डेटा स्ट्रक्चरच्या एका विशेष आवृत्तीमध्ये एन्कोड केली जाते, जी संगणक विज्ञानात सामान्यतः मर्केल ट्री म्हणून ओळखली जाते. ही रचना क्रिप्टोग्राफीमधील अनेक ॲप्लिकेशन्ससाठी उपयुक्त आहे कारण ती ट्रीमध्ये गुंतलेल्या डेटाच्या सर्व वैयक्तिक भागांमध्ये एक सत्यापित करण्यायोग्य संबंध तयार करते, ज्यामुळे एकच **रूट** व्हॅल्यू तयार होते ज्याचा वापर डेटाबद्दल गोष्टी सिद्ध करण्यासाठी केला जाऊ शकतो. + +इथेरियमची डेटा स्ट्रक्चर एक 'मॉडिफाइड मर्केल-पॅट्रिशिया ट्राई' आहे, ज्याला हे नाव दिले गेले आहे कारण ते PATRICIA (प्रॅक्टिकल अल्गोरिदम टू रिट्रीव्ह इन्फॉर्मेशन कोडेड इन अल्फान्यूमेरिक) चे काही वैशिष्ट्ये घेते आणि कारण ते इथेरियम स्टेट तयार करणाऱ्या आयटम्सच्या कार्यक्षम डेटा रि**ट्राई**व्हलसाठी डिझाइन केलेले आहे. + +मर्केल-पॅट्रिशिया ट्राई ही निश्चित (deterministic) आणि क्रिप्टोग्राफिकदृष्ट्या सत्यापित करण्यायोग्य आहे: स्टेट रूट तयार करण्याचा एकमेव मार्ग म्हणजे स्टेटच्या प्रत्येक वैयक्तिक भागातून त्याची गणना करणे आणि दोन सारख्याच स्टेट्सची रूट हॅश आणि त्यापर्यंत पोहोचलेल्या हॅशेसची तुलना करून सहजपणे सिद्ध करता येते (_एक मर्केल प्रूफ_). याउलट, एकाच रूट हॅशसह दोन भिन्न स्टेट्स तयार करण्याचा कोणताही मार्ग नाही आणि भिन्न मूल्यांसह स्टेटमध्ये बदल करण्याचा कोणताही प्रयत्न केल्यास भिन्न स्टेट रूट हॅश मिळेल. सैद्धांतिकदृष्ट्या, ही रचना इन्सर्ट, लुकअप आणि डिलीटसाठी `O(log(n))` कार्यक्षमतेचे 'होली ग्रेल' प्रदान करते. + +नजीकच्या भविष्यात, इथेरियम [Verkle Tree](/roadmap/verkle-trees) रचनेमध्ये स्थलांतरित करण्याची योजना आखत आहे, ज्यामुळे भविष्यातील प्रोटोकॉल सुधारणांसाठी अनेक नवीन शक्यता उघडल्या जातील. + +## पूर्वतयारी {#prerequisites} + +हे पृष्ठ अधिक चांगल्या प्रकारे समजून घेण्यासाठी, [हॅशेस](https://en.wikipedia.org/wiki/Hash_function), [मर्केल ट्रीज](https://en.wikipedia.org/wiki/Merkle_tree), [ट्राईज](https://en.wikipedia.org/wiki/Trie) आणि [सीरियलायझेशन](https://en.wikipedia.org/wiki/Serialization) यांचे मूलभूत ज्ञान असणे उपयुक्त ठरेल. हा लेख मूलभूत [रॅडिक्स ट्री](https://en.wikipedia.org/wiki/Radix_tree) च्या वर्णनाने सुरू होतो, नंतर हळूहळू इथेरियमच्या अधिक ऑप्टिमाइझ केलेल्या डेटा स्ट्रक्चरसाठी आवश्यक बदल सादर करतो. + +## मूलभूत रॅडिक्स ट्राईज {#basic-radix-tries} + +मूलभूत रॅडिक्स ट्राईमध्ये, प्रत्येक नोड खालीलप्रमाणे दिसतो: + +``` + [i_0, i_1 ... i_n, value] +``` + +जिथे `i_0 ... i_n` वर्णमालेची चिन्हे दर्शवतात (बहुतेकदा बायनरी किंवा हेक्स), `व्हॅल्यू` नोडमधील टर्मिनल व्हॅल्यू आहे, आणि `i_0, i_1 ... ` मधील व्हॅल्यूज i_n`स्लॉट एकतर`NULL`किंवा इतर नोड्सचे पॉइंटर्स (आमच्या बाबतीत, हॅश) असतात. हे एक मूलभूत`(की, व्हॅल्यू)` स्टोअर तयार करते. + +समजा तुम्हाला की-व्हॅल्यू जोड्यांच्या सेटवर ऑर्डर कायम ठेवण्यासाठी रॅडिक्स ट्री डेटा स्ट्रक्चर वापरायचे आहे. ट्राईमध्ये सध्या `dog` की शी मॅप केलेली व्हॅल्यू शोधण्यासाठी, तुम्ही प्रथम `dog` ला वर्णमालेच्या अक्षरांमध्ये रूपांतरित कराल ( `64 6f 67` देऊन), आणि नंतर तुम्हाला व्हॅल्यू मिळेपर्यंत त्या मार्गावरून ट्राईमध्ये खाली जाल. म्हणजे, तुम्ही ट्राईचा रूट नोड शोधण्यासाठी फ्लॅट की/व्हॅल्यू DB मध्ये रूट हॅश शोधून सुरुवात करता. ते इतर नोड्सना पॉइंट करणाऱ्या कीजच्या ॲरे म्हणून दर्शविले जाते. तुम्ही इंडेक्स `6` वरील व्हॅल्यूचा की म्हणून वापर कराल आणि एका लेव्हल खालील नोड मिळवण्यासाठी फ्लॅट की/व्हॅल्यू DB मध्ये शोधाल. नंतर पुढील व्हॅल्यू शोधण्यासाठी इंडेक्स `4` निवडा, नंतर इंडेक्स `6` निवडा, आणि असेच, जोपर्यंत तुम्ही मार्ग: `रूट -> 6 -> 4 -> 6 -> 15 -> 6 -> 7` फॉलो करत नाही, तोपर्यंत तुम्ही नोडची व्हॅल्यू शोधून निकाल परत कराल. + +'ट्राई' मध्ये काहीतरी शोधणे आणि अंतर्निहित फ्लॅट की/व्हॅल्यू 'DB' मध्ये शोधणे यात फरक आहे. ते दोघेही की/व्हॅल्यू व्यवस्था परिभाषित करतात, परंतु अंतर्निहित DB की चा पारंपरिक 1-स्टेप लुकअप करू शकतो. ट्राईमध्ये की शोधण्यासाठी वर वर्णन केलेल्या अंतिम व्हॅल्यूपर्यंत पोहोचण्यासाठी अनेक अंतर्निहित DB लुकअप्सची आवश्यकता असते. अस्पष्टता दूर करण्यासाठी आपण नंतरच्याला `पाथ` म्हणूया. + +रॅडिक्स ट्राईजसाठी अपडेट आणि डिलीट ऑपरेशन्स खालीलप्रमाणे परिभाषित केल्या जाऊ शकतात: + +```python + def update(node_hash, path, value): + curnode = db.get(node_hash) if node_hash else [NULL] * 17 + newnode = curnode.copy() + if path == "": + newnode[-1] = value + else: + newindex = update(curnode[path[0]], path[1:], value) + newnode[path[0]] = newindex + db.put(hash(newnode), newnode) + return hash(newnode) + + def delete(node_hash, path): + if node_hash is NULL: + return NULL + else: + curnode = db.get(node_hash) + newnode = curnode.copy() + if path == "": + newnode[-1] = NULL + else: + newindex = delete(curnode[path[0]], path[1:]) + newnode[path[0]] = newindex + + if all(x is NULL for x in newnode): + return NULL + else: + db.put(hash(newnode), newnode) + return hash(newnode) +``` + +एक "मर्केल" रॅडिक्स ट्री निश्चितपणे-उत्पादित क्रिप्टोग्राफिक हॅश डायजेस्ट वापरून नोड्स लिंक करून तयार केली जाते. हे कंटेंट-ॲड्रेसिंग (की/व्हॅल्यू DB मध्ये `की == keccak256(rlp(व्हॅल्यू))`) संग्रहित डेटाची क्रिप्टोग्राफिक अखंडतेची हमी देते. जर दिलेल्या ट्राईचा रूट हॅश सार्वजनिकरित्या ज्ञात असेल, तर अंतर्निहित लीफ डेटामध्ये प्रवेश असलेला कोणीही विशिष्ट व्हॅल्यूला ट्री रूटशी जोडणाऱ्या प्रत्येक नोडचे हॅश प्रदान करून, ट्राईमध्ये विशिष्ट मार्गावर विशिष्ट व्हॅल्यू समाविष्ट असल्याचा पुरावा तयार करू शकतो. + +आक्रमणकर्त्यासाठी अस्तित्वात नसलेल्या `(पाथ, व्हॅल्यू)` जोडीचा पुरावा देणे अशक्य आहे कारण रूट हॅश शेवटी त्याच्या खालील सर्व हॅशवर आधारित असतो. कोणत्याही अंतर्निहित बदलामुळे रूट हॅश बदलेल. आपण हॅशला डेटाच्या संरचनात्मक माहितीचे संकुचित प्रतिनिधित्व म्हणून विचार करू शकता, जे हॅशिंग फंक्शनच्या प्री-इमेज संरक्षणाद्वारे सुरक्षित केलेले आहे. + +आपण रॅडिक्स ट्रीच्या अणु एककाला (उदा., एकच हेक्स कॅरॅक्टर किंवा 4 बिट बायनरी संख्या) "निबल" म्हणू. वर वर्णन केल्याप्रमाणे, एका वेळी एक निबल मार्गक्रमण करताना, नोड्स जास्तीत जास्त 16 चिल्ड्रेनचा संदर्भ घेऊ शकतात परंतु त्यात `व्हॅल्यू` घटक समाविष्ट असतो. म्हणून, आम्ही त्यांना 17 लांबीच्या ॲरे म्हणून दर्शवितो. आम्ही या 17-घटक ॲरेला "ब्रांच नोड्स" म्हणतो. + +## मर्केल पॅट्रिशिया ट्राई {#merkle-patricia-trees} + +रॅडिक्स ट्राईजची एक मोठी मर्यादा आहे: त्या अकार्यक्षम आहेत. जर तुम्हाला एक `(पाथ, व्हॅल्यू)` बाइंडिंग साठवायचे असेल जिथे पाथ, इथेरियमप्रमाणे, 64 कॅरॅक्टर लांब आहे (`bytes32` मधील निबल्सची संख्या), तर आम्हाला प्रत्येक कॅरॅक्टरसाठी एक लेव्हल साठवण्यासाठी एक किलोबाइटपेक्षा जास्त अतिरिक्त जागेची आवश्यकता असेल, आणि प्रत्येक लुकअप किंवा डिलीटसाठी पूर्ण 64 स्टेप्स लागतील. खालीलप्रमाणे सादर केलेली पॅट्रिशिया ट्राई ही समस्या सोडवते. + +### ऑप्टिमायझेशन {#optimization} + +मर्केल पॅट्रिशिया ट्राईमधील नोड खालीलपैकी एक असतो: + +1. `NULL` (रिकाम्या स्ट्रिंगने दर्शविलेले) +2. `ब्रांच` एक 17-आयटम नोड `[ v0 ... v15, vt ]` +3. `लीफ` एक 2-आयटम नोड `[ एन्कोडेडपाथ, व्हॅल्यू ]` +4. `एक्सटेन्शन` एक 2-आयटम नोड `[ एन्कोडेडपाथ, की ]` + +64 कॅरॅक्टर पाथसह, ट्राईच्या पहिल्या काही लेयर्समधून गेल्यानंतर, तुम्ही अशा नोडवर पोहोचणारच आहात जिथे किमान काही मार्गासाठी कोणताही भिन्न मार्ग अस्तित्वात नाही. मार्गावर 15 पर्यंत विरळ `NULL` नोड्स तयार करणे टाळण्यासाठी, आम्ही `[ एन्कोडेडपाथ, की ]` स्वरूपाचा एक `एक्सटेन्शन` नोड सेट करून उतरण लहान करतो, जिथे `एन्कोडेडपाथ` मध्ये पुढे जाण्यासाठी "आंशिक मार्ग" असतो (खाली वर्णन केलेल्या कॉम्पॅक्ट एन्कोडिंगचा वापर करून), आणि `की` पुढील DB लुकअपसाठी असते. + +`लीफ` नोडसाठी, जे `एन्कोडेडपाथ`च्या पहिल्या निबलमधील ध्वजाद्वारे चिन्हांकित केले जाऊ शकते, पाथमध्ये मागील सर्व नोडच्या पाथच्या तुकड्यांचे एन्कोडिंग असते आणि आम्ही थेट `व्हॅल्यू` शोधू शकतो. + +तथापि, वरील ऑप्टिमायझेशनमुळे संदिग्धता निर्माण होते. + +निबल्समध्ये पाथक्रमण करताना, आपल्याला विषम संख्येने निबल्सचा सामना करावा लागू शकतो, परंतु सर्व डेटा `बाइट्स` स्वरूपात संग्रहित असल्यामुळे. उदाहरणार्थ, निबल `1` आणि निबल्स `01` मध्ये फरक करणे शक्य नाही (दोन्ही `<01>` म्हणून संग्रहित करणे आवश्यक आहे). विषम लांबी निर्दिष्ट करण्यासाठी, आंशिक मार्गाच्या आधी एक ध्वज लावला जातो. + +### स्पेसिफिकेशन: पर्यायी टर्मिनेटरसह हेक्स सीक्वेन्सचे कॉम्पॅक्ट एन्कोडिंग {#specification} + +वर वर्णन केल्याप्रमाणे _विषम विरुद्ध सम उर्वरित आंशिक मार्गाची लांबी_ आणि _लीफ विरुद्ध एक्सटेन्शन नोड_ या दोन्हींचे ध्वजांकन कोणत्याही 2-आयटम नोडच्या आंशिक मार्गाच्या पहिल्या निबलमध्ये असते. त्यांचे परिणाम खालीलप्रमाणे आहेत: + +| हेक्स कॅरॅक्टर | बिट्स | नोड प्रकार आंशिक | पाथची लांबी | +| -------------- | ----- | ------------------------------------ | ----------- | +| 0 | 0000 | एक्सटेन्शन | सम | +| 1 | 0001 | एक्सटेन्शन | विषम | +| 2 | 0010 | टर्मिनेटिंग (लीफ) | सम | +| 3 | 0011 | टर्मिनेटिंग (लीफ) | विषम | + +सम उर्वरित पाथ लांबीसाठी (`0` किंवा `2`), नेहमीच आणखी एक `0` "पॅडिंग" निबल येईल. + +```python + def compact_encode(hexarray): + term = 1 if hexarray[-1] == 16 else 0 + if term: + hexarray = hexarray[:-1] + oddlen = len(hexarray) % 2 + flags = 2 * term + oddlen + if oddlen: + hexarray = [flags] + hexarray + else: + hexarray = [flags] + [0] + hexarray + # hexarray now has an even length whose first nibble is the flags. + o = "" + for i in range(0, len(hexarray), 2): + o += chr(16 * hexarray[i] + hexarray[i + 1]) + return o +``` + +उदाहरणे: + +```python + > [1, 2, 3, 4, 5, ...] + '11 23 45' + > [0, 1, 2, 3, 4, 5, ...] + '00 01 23 45' + > [0, f, 1, c, b, 8, 10] + '20 0f 1c b8' + > [f, 1, c, b, 8, 10] + '3f 1c b8' +``` + +मर्केल पॅट्रिशिया ट्राईमध्ये नोड मिळवण्यासाठी विस्तारित कोड येथे आहे: + +```python + def get_helper(node_hash, path): + if path == []: + return node_hash + if node_hash == "": + return "" + curnode = rlp.decode(node_hash if len(node_hash) < 32 else db.get(node_hash)) + if len(curnode) == 2: + (k2, v2) = curnode + k2 = compact_decode(k2) + if k2 == path[: len(k2)]: + return get(v2, path[len(k2) :]) + else: + return "" + elif len(curnode) == 17: + return get_helper(curnode[path[0]], path[1:]) + + def get(node_hash, path): + path2 = [] + for i in range(len(path)): + path2.push(int(ord(path[i]) / 16)) + path2.push(ord(path[i]) % 16) + path2.push(16) + return get_helper(node_hash, path2) +``` + +### उदाहरण ट्राई {#example-trie} + +समजा आपल्याला चार पाथ/व्हॅल्यू जोड्या असलेली ट्राई हवी आहे: `('do', 'verb')`, `('dog', 'puppy')`, `('doge', 'coins')`, `('horse', 'stallion')`. + +प्रथम, आपण पाथ आणि व्हॅल्यू दोन्ही `बाइट्स` मध्ये रूपांतरित करतो. खाली, _पाथ_ साठी वास्तविक बाइट रिप्रेझेंटेशन्स `<>` ने दर्शविले आहेत, तरीही _व्हॅल्यू_ सोप्या समजुतीसाठी `''` ने दर्शविलेल्या स्ट्रिंग म्हणून दाखवल्या आहेत (त्या देखील वास्तविकपणे `बाइट्स` असतील): + +``` + <64 6f> : 'क्रियापद' + <64 6f 67> : 'पिल्लू' + <64 6f 67 65> : 'नाणी' + <68 6f 72 73 65> : 'घोडा' +``` + +आता, आपण अंतर्निहित DB मध्ये खालील की/व्हॅल्यू जोड्यांसह अशी ट्राई तयार करू: + +``` + rootHash: [ <16>, hashA ] + hashA: [ <>, <>, <>, <>, hashB, <>, <>, <>, [ <20 6f 72 73 65>, 'घोडा' ], <>, <>, <>, <>, <>, <>, <>, <> ] + hashB: [ <00 6f>, hashC ] + hashC: [ <>, <>, <>, <>, <>, <>, hashD, <>, <>, <>, <>, <>, <>, <>, <>, <>, 'क्रियापद' ] + hashD: [ <17>, [ <>, <>, <>, <>, <>, <>, [ <35>, 'नाणी' ], <>, <>, <>, <>, <>, <>, <>, <>, <>, 'पिल्लू' ] ] +``` + +जेव्हा एका नोडचा दुसऱ्या नोडमध्ये संदर्भ दिला जातो, तेव्हा `keccak256(rlp.encode(node))` समाविष्ट केले जाते, जर `len(rlp.encode(node)) >= 32` असेल तर, अन्यथा `node` समाविष्ट केले जाते जिथे `rlp.encode` हे [RLP](/developers/docs/data-structures-and-encoding/rlp) एन्कोडिंग फंक्शन आहे. + +लक्षात घ्या की ट्राई अपडेट करताना, जर नव्याने तयार केलेला नोड 32 किंवा त्यापेक्षा जास्त लांबीचा असेल तर, की/व्हॅल्यू जोडी `(keccak256(x), x)` एका पर्सिस्टंट लुकअप टेबलमध्ये साठवणे आवश्यक आहे. तथापि, जर नोड त्यापेक्षा लहान असेल, तर काहीही साठवण्याची गरज नाही, कारण f(x) = x हे फंक्शन उलट करता येण्याजोगे आहे. + +## इथेरियममधील ट्राईज {#tries-in-ethereum} + +इथेरियमच्या एक्झिक्युशन लेअरमधील सर्व मर्केल ट्राईज मर्केल पॅट्रिशिया ट्राई वापरतात. + +ब्लॉक हेडरमधून यापैकी 3 ट्राईजचे 3 रूट्स असतात. + +1. स्टेटरूट +2. ट्रान्झॅक्शन्सरूट +3. रीसीट्सरूट + +### स्टेट ट्राई {#state-trie} + +एक जागतिक स्टेट ट्राई आहे, आणि जेव्हा एखादा क्लायंट ब्लॉकवर प्रक्रिया करतो तेव्हा ती प्रत्येक वेळी अपडेट केली जाते. त्यात, एक `पाथ` नेहमी असतो: `keccak256(ethereumAddress)` आणि एक `व्हॅल्यू` नेहमी असते: `rlp(ethereumAccount)`. अधिक विशेषतः, एक इथेरियम `अकाउंट` `[nonce,balance,storageRoot,codeHash]` या 4 आयटमचा ॲरे आहे. या टप्प्यावर, हे लक्षात घेण्यासारखे आहे की हा `storageRoot` दुसऱ्या पॅट्रिशिया ट्राईचा रूट आहे: + +### स्टोरेज ट्राई {#storage-trie} + +स्टोरेज ट्राई हे असे ठिकाण आहे जिथे _सर्व_ कॉन्ट्रॅक्ट डेटा राहतो. प्रत्येक अकाउंटसाठी स्वतंत्र स्टोरेज ट्राई असते. विशिष्ट ॲड्रेसवर विशिष्ट स्टोरेज पोझिशनवरील व्हॅल्यूज मिळवण्यासाठी स्टोरेज ॲड्रेस, स्टोरेजमध्ये संग्रहित डेटाची पूर्णांक पोझिशन आणि ब्लॉक आयडी आवश्यक आहेत. त्यानंतर JSON-RPC API मध्ये परिभाषित `eth_getStorageAt` ला आर्गुमेंट्स म्हणून पास केले जाऊ शकते, उदा., ॲड्रेस `0x295a70b2de5e3953354a6a8344e616ed314d7251` साठी स्टोरेज स्लॉट 0 मधील डेटा मिळवण्यासाठी: + +```bash +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x0", "latest"], "id": 1}' localhost:8545 + +{"jsonrpc":"2.0","id":1,"result":"0x00000000000000000000000000000000000000000000000000000000000004d2"} + +``` + +स्टोरेजमधील इतर घटक मिळवणे थोडे अधिक गुंतागुंतीचे आहे कारण स्टोरेज ट्राईमधील पोझिशनची प्रथम गणना करणे आवश्यक आहे. पोझिशनची गणना ॲड्रेस आणि स्टोरेज पोझिशनच्या `keccak256` हॅश म्हणून केली जाते, दोन्ही 32 बाइट्सच्या लांबीपर्यंत शून्यांसह डावीकडे पॅड केलेले असतात. उदाहरणार्थ, ॲड्रेस `0x391694e7e0b0cce554cb130d723a9d27458f9298` साठी स्टोरेज स्लॉट 1 मधील डेटाची पोझिशन आहे: + +```python +keccak256(decodeHex("000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001")) +``` + +Geth कन्सोलमध्ये, याची गणना खालीलप्रमाणे केली जाऊ शकते: + +``` +> var key = "000000000000000000000000391694e7e0b0cce554cb130d723a9d27458f9298" + "0000000000000000000000000000000000000000000000000000000000000001" +undefined +> web3.sha3(key, {"encoding": "hex"}) +"0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9" +``` + +म्हणून `पाथ` `keccak256(<6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9>)` आहे. हे आता पूर्वीप्रमाणेच स्टोरेज ट्राईमधून डेटा मिळवण्यासाठी वापरले जाऊ शकते: + +```bash +curl -X POST --data '{"jsonrpc":"2.0", "method": "eth_getStorageAt", "params": ["0x295a70b2de5e3953354a6a8344e616ed314d7251", "0x6661e9d6d8b923d5bbaab1b96e1dd51ff6ea2a93520fdc9eb75d059238b8c5e9", "latest"], "id": 1}' localhost:8545 + +{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000162e"} +``` + +टीप: जर ते कॉन्ट्रॅक्ट अकाउंट नसेल तर इथेरियम अकाउंटसाठी `storageRoot` डिफॉल्टनुसार रिकामा असतो. + +### ट्रान्झॅक्शन ट्राई {#transaction-trie} + +प्रत्येक ब्लॉकसाठी एक वेगळी ट्रान्झॅक्शन ट्राई असते, जी पुन्हा `(की, व्हॅल्यू)` जोड्या साठवते. येथे एक पाथ आहे: `rlp(transactionIndex)` जो एका व्हॅल्यूशी संबंधित की दर्शवितो, जी याद्वारे निर्धारित केली जाते: + +```python +if legacyTx: + value = rlp(tx) +else: + value = TxType | encode(tx) +``` + +याबद्दल अधिक माहिती [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) डॉक्युमेंटेशनमध्ये आढळू शकते. + +### रीसीट्स ट्राई {#receipts-trie} + +प्रत्येक ब्लॉकची स्वतःची रीसीट्स ट्राई असते. येथे एक `पाथ` आहे: `rlp(transactionIndex)`. `transactionIndex` हा ज्या ब्लॉक मध्ये त्याचा समावेश आहे त्यातील त्याचा इंडेक्स आहे. रीसीट्स ट्राई कधीही अपडेट केली जात नाही. ट्रान्झॅक्शन ट्राई प्रमाणेच, सध्याच्या आणि लेगसी रीसीट्स आहेत. रीसीट्स ट्राईमध्ये विशिष्ट रीसीट क्वेरी करण्यासाठी, त्याच्या ब्लॉकमधील ट्रान्झॅक्शनचा इंडेक्स, रीसीट पेलोड आणि ट्रान्झॅक्शन प्रकार आवश्यक आहे. परत आलेली रीसीट `Receipt` प्रकाराची असू शकते जी `TransactionType` आणि `ReceiptPayload` चे एकत्रीकरण म्हणून परिभाषित केली आहे किंवा ती `LegacyReceipt` प्रकाराची असू शकते जी `rlp([status, cumulativeGasUsed, logsBloom, logs])` म्हणून परिभाषित केली आहे. + +याबद्दल अधिक माहिती [EIP 2718](https://eips.ethereum.org/EIPS/eip-2718) डॉक्युमेंटेशनमध्ये आढळू शकते. + +## अधिक वाचन {#further-reading} + +- [सुधारित मर्केल पॅट्रिशिया ट्राई — इथेरियम स्टेट कसे सेव्ह करते](https://medium.com/codechain/modified-merkle-patricia-trie-how-ethereum-saves-a-state-e6d7555078dd) +- [इथेरियममधील मर्कलिंग](https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/) +- [इथेरियम ट्राई समजून घेणे](https://easythereentropy.wordpress.com/2014/06/04/understanding-the-ethereum-trie/) diff --git a/public/content/translations/mr/developers/docs/data-structures-and-encoding/rlp/index.md b/public/content/translations/mr/developers/docs/data-structures-and-encoding/rlp/index.md new file mode 100644 index 00000000000..0cfe3d990e6 --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-structures-and-encoding/rlp/index.md @@ -0,0 +1,163 @@ +--- +title: "रिकर्सिव्ह-लेंग्थ प्रीफिक्स (RLP) सिरियलायझेशन" +description: "Ethereum च्या एक्सिक्युशन लेअरमधील rlp एन्कोडिंगची व्याख्या." +lang: mr +sidebarDepth: 2 +--- + +रिकर्सिव्ह लेंग्थ प्रीफिक्स (RLP) सिरियलायझेशनचा वापर Ethereum च्या एक्सिक्युशन क्लायंट्समध्ये मोठ्या प्रमाणावर केला जातो. RLP नोड्समधील डेटाच्या हस्तांतरणाला स्पेस-एफिशिएंट फॉरमॅटमध्ये प्रमाणित करते. RLP चा उद्देश बायनरी डेटाच्या अनियंत्रितपणे नेस्टेड अॅरेंना एन्कोड करणे आहे आणि RLP ही Ethereum च्या एक्सिक्युशन लेअरमधील ऑब्जेक्ट्स सिरियलाइज करण्यासाठी वापरली जाणारी प्राथमिक एन्कोडिंग पद्धत आहे. RLP चा मुख्य उद्देश स्ट्रक्चर एन्कोड करणे आहे; धन पूर्णांक वगळता, RLP विशिष्ट डेटा प्रकारांचे (उदा., स्ट्रिंग, फ्लोट्स) एन्कोडिंग हायर-ऑर्डर प्रोटोकॉलकडे सोपवते. धन पूर्णांक बिग-एंडियन बायनरी स्वरूपात कोणत्याही लीडिंग शून्येशिवाय दर्शविले पाहिजेत (त्यामुळे पूर्णांक मूल्य शून्य हे रिक्त बाइट अॅरेच्या समतुल्य होते). लीडिंग शून्य असलेले डिसेरियलाइज्ड धन पूर्णांक RLP वापरणाऱ्या कोणत्याही हायर-ऑर्डर प्रोटोकॉलद्वारे अवैध मानले पाहिजेत. + +अधिक माहिती [Ethereum यलो पेपर (परिशिष्ट B)](https://ethereum.github.io/yellowpaper/paper.pdf#page=19) मध्ये. + +डिक्शनरी एन्कोड करण्यासाठी RLP वापरण्याकरिता, दोन सुचवलेले कॅनोनिकल फॉर्म आहेत: + +- लेक्सिकोग्राफिक क्रमाने की सह `[[k1,v1],[k2,v2]...]` वापरा +- Ethereum प्रमाणे हायर-लेव्हल पॅट्रिशिया ट्री एन्कोडिंग वापरा + +## व्याख्या {#definition} + +RLP एन्कोडिंग फंक्शन एक आयटम इनपुट म्हणून घेते. आयटमची व्याख्या खालीलप्रमाणे आहे: + +- एक स्ट्रिंग (म्हणजेच, बाइट अॅरे) एक आयटम आहे +- आयटम्सची एक यादी हा एक आयटम आहे +- एक धन पूर्णांक एक आयटम आहे + +उदाहरणार्थ, खालील सर्व आयटम आहेत: + +- एक रिकामी स्ट्रिंग; +- "cat" हा शब्द असलेली स्ट्रिंग; +- कितीही स्ट्रिंग असलेली यादी; +- आणि `["cat", ["puppy", "cow"], "horse", [[]], "pig", [""], "sheep"]` सारखी अधिक जटिल डेटा स्ट्रक्चर्स. +- `100` ही संख्या + +लक्षात घ्या की या पानाच्या उर्वरित संदर्भात, 'स्ट्रिंग' याचा अर्थ "बायनरी डेटाचे विशिष्ट संख्येचे बाइट्स" आहे; कोणतेही विशेष एन्कोडिंग वापरले जात नाहीत आणि स्ट्रिंगच्या सामग्रीबद्दल कोणतेही ज्ञान सूचित केले जात नाही (नॉन-मिनिमल धन पूर्णांकांविरुद्धच्या नियमानुसार आवश्यक असल्याशिवाय). + +RLP एन्कोडिंग खालीलप्रमाणे परिभाषित केले आहे: + +- धन पूर्णांकासाठी, त्याला सर्वात लहान बाइट अॅरेमध्ये रूपांतरित केले जाते ज्याचे बिग-एंडियन इंटरप्रिटेशन तो पूर्णांक आहे, आणि नंतर खालील नियमांनुसार स्ट्रिंग म्हणून एन्कोड केले जाते. +- एका बाइटसाठी ज्याचे मूल्य `[0x00, 0x7f]` (दशांश `[0, 127]`) या रेंजमध्ये आहे, तो बाइट स्वतःच त्याचे RLP एन्कोडिंग आहे. +- अन्यथा, जर एखादी स्ट्रिंग 0-55 बाइट्स लांब असेल, तर RLP एन्कोडिंगमध्ये **0x80** (दशांश 128) मूल्याचा एक बाइट अधिक स्ट्रिंगची लांबी आणि त्यानंतर स्ट्रिंग असते. पहिल्या बाइटची रेंज `[0x80, 0xb7]` (दशांश `[128, 183]`) आहे. +- जर एखादी स्ट्रिंग 55 बाइट्सपेक्षा लांब असेल, तर RLP एन्कोडिंगमध्ये **0xb7** (दशांश 183) अधिक स्ट्रिंगच्या लांबीच्या बायनरी स्वरूपाची बाइट्समधील लांबी, हे मूल्य असलेला एक बाइट असतो. त्यानंतर स्ट्रिंगची लांबी आणि मग स्ट्रिंग असते. उदाहरणार्थ, 1024 बाइट लांबीच्या स्ट्रिंगला `\xb9\x04\x00` (दशांश `185, 4, 0`) आणि त्यानंतर स्ट्रिंग असे एन्कोड केले जाईल. येथे, पहिला बाइट `0xb9` (183 + 2 = 185) आहे, त्यानंतर 2 बाइट्स `0x0400` (दशांश 1024) येतात जे प्रत्यक्ष स्ट्रिंगची लांबी दर्शवतात. पहिल्या बाइटची रेंज `[0xb8, 0xbf]` (दशांश `[184, 191]`) आहे. +- जर एखादी स्ट्रिंग 2^64 बाइट्स लांब किंवा त्याहून अधिक लांब असेल, तर ती एन्कोड केली जाऊ शकत नाही. +- जर एखाद्या यादीचा एकूण पेलोड (म्हणजेच, RLP एन्कोड केलेल्या तिच्या सर्व आयटमची एकत्रित लांबी) 0-55 बाइट्स लांब असेल, तर RLP एन्कोडिंगमध्ये **0xc0** अधिक पेलोडची लांबी हे मूल्य असलेला एक बाइट असतो, आणि त्यानंतर आयटमच्या RLP एन्कोडिंगचे एकत्रीकरण असते. पहिल्या बाइटची रेंज `[0xc0, 0xf7]` (दशांश `[192, 247]`) आहे. +- जर यादीचा एकूण पेलोड 55 बाइट्सपेक्षा जास्त असेल, तर RLP एन्कोडिंगमध्ये **0xf7** अधिक पेलोडच्या लांबीच्या बायनरी स्वरूपाची बाइट्समधील लांबी हे मूल्य असलेला एक बाइट असतो, त्यानंतर पेलोडची लांबी, आणि त्यानंतर आयटमच्या RLP एन्कोडिंगचे एकत्रीकरण असते. पहिल्या बाइटची रेंज `[0xf8, 0xff]` (दशांश `[248, 255]`) आहे. + +कोडमध्ये, हे असे आहे: + +```python +def rlp_encode(input): + if isinstance(input,str): + if len(input) == 1 and ord(input) < 0x80: + return input + return encode_length(len(input), 0x80) + input + elif isinstance(input, list): + output = '' + for item in input: + output += rlp_encode(item) + return encode_length(len(output), 0xc0) + output + +def encode_length(L, offset): + if L < 56: + return chr(L + offset) + elif L < 256**8: + BL = to_binary(L) + return chr(len(BL) + offset + 55) + BL + raise Exception("input too long") + +def to_binary(x): + if x == 0: + return '' + return to_binary(int(x / 256)) + chr(x % 256) +``` + +## उदाहरणे {#examples} + +- "dog" ही स्ट्रिंग = [ 0x83, 'd', 'o', 'g' ] +- [ "cat", "dog" ] ही यादी = `[ 0xc8, 0x83, 'c', 'a', 't', 0x83, 'd', 'o', 'g' ]` +- रिकामी स्ट्रिंग ('null') = `[ 0x80 ]` +- रिकामी यादी = `[ 0xc0 ]` +- पूर्णांक 0 = `[ 0x80 ]` +- बाइट '\\x00' = `[ 0x00 ]` +- बाइट '\\x0f' = `[ 0x0f ]` +- बाइट्स '\\x04\\x00' = `[ 0x82, 0x04, 0x00 ]` +- तीनचे [संच सैद्धांतिक प्रतिनिधित्व](http://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers), `[ [], [[]], [ [], [[]] ] ] = [ 0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0 ]` +- "Lorem ipsum dolor sit amet, consectetur adipisicing elit" ही स्ट्रिंग = `[ 0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ...` , 'e', 'l', 'i', 't' ]` + +## RLP डीकोडिंग {#rlp-decoding} + +RLP एन्कोडिंगच्या नियमांनुसार आणि प्रक्रियेनुसार, RLP डीकोडचे इनपुट बायनरी डेटाचा अॅरे म्हणून मानले जाते. RLP डीकोडिंग प्रक्रिया खालीलप्रमाणे आहे: + +1. इनपुट डेटाच्या पहिल्या बाइटनुसार (म्हणजे, प्रीफिक्स) डेटा प्रकार, प्रत्यक्ष डेटाची लांबी आणि ऑफसेट डीकोड करणे; + +2. डेटाच्या प्रकार आणि ऑफसेटनुसार डेटा डीकोड करणे, धन पूर्णांकांसाठी किमान एन्कोडिंग नियमाचा आदर राखून; + +3. उर्वरित इनपुट डीकोड करणे सुरू ठेवणे; + +त्यापैकी, डेटा प्रकार आणि ऑफसेट डीकोड करण्याचे नियम खालीलप्रमाणे आहेत: + +1. जर पहिल्या बाइटची (म्हणजे, प्रीफिक्स) रेंज [0x00, 0x7f] असेल, तर डेटा एक स्ट्रिंग आहे आणि स्ट्रिंग हा तो पहिला बाइटच असतो; + +2. जर पहिल्या बाइटची रेंज [0x80, 0xb7] असेल, तर डेटा एक स्ट्रिंग आहे, आणि ज्याची लांबी पहिल्या बाइट वजा 0x80 इतकी आहे अशी स्ट्रिंग पहिल्या बाइटनंतर येते; + +3. जर पहिल्या बाइटची रेंज [0xb8, 0xbf] असेल, तर डेटा एक स्ट्रिंग आहे, आणि ज्याची बाइट्समधील लांबी पहिल्या बाइट वजा 0xb7 इतकी आहे अशी स्ट्रिंगची लांबी पहिल्या बाइटनंतर येते, आणि स्ट्रिंग त्या लांबीनंतर येते; + +4. जर पहिल्या बाइटची रेंज [0xc0, 0xf7] असेल, तर डेटा एक यादी आहे, आणि ज्या यादीचा एकूण पेलोड पहिल्या बाइट वजा 0xc0 इतका आहे, तिच्या सर्व आयटमच्या RLP एन्कोडिंगचे एकत्रीकरण पहिल्या बाइटनंतर येते; + +5. जर पहिल्या बाइटची रेंज [0xf8, 0xff] असेल, तर डेटा एक यादी आहे, आणि ज्याची लांबी पहिल्या बाइट वजा 0xf7 इतकी आहे असा यादीचा एकूण पेलोड पहिल्या बाइटनंतर येतो, आणि यादीच्या सर्व आयटमच्या RLP एन्कोडिंगचे एकत्रीकरण यादीच्या एकूण पेलोडनंतर येते; + +कोडमध्ये, हे असे आहे: + +```python +def rlp_decode(input): + if len(input) == 0: + return + output = '' + (offset, dataLen, type) = decode_length(input) + if type is str: + output = instantiate_str(substr(input, offset, dataLen)) + elif type is list: + output = instantiate_list(substr(input, offset, dataLen)) + output += rlp_decode(substr(input, offset + dataLen)) + return output + +def decode_length(input): + length = len(input) + if length == 0: + raise Exception("input is null") + prefix = ord(input[0]) + if prefix <= 0x7f: + return (0, 1, str) + elif prefix <= 0xb7 and length > prefix - 0x80: + strLen = prefix - 0x80 + return (1, strLen, str) + elif prefix <= 0xbf and length > prefix - 0xb7 and length > prefix - 0xb7 + to_integer(substr(input, 1, prefix - 0xb7)): + lenOfStrLen = prefix - 0xb7 + strLen = to_integer(substr(input, 1, lenOfStrLen)) + return (1 + lenOfStrLen, strLen, str) + elif prefix <= 0xf7 and length > prefix - 0xc0: + listLen = prefix - 0xc0; + return (1, listLen, list) + elif prefix <= 0xff and length > prefix - 0xf7 and length > prefix - 0xf7 + to_integer(substr(input, 1, prefix - 0xf7)): + lenOfListLen = prefix - 0xf7 + listLen = to_integer(substr(input, 1, lenOfListLen)) + return (1 + lenOfListLen, listLen, list) + raise Exception("input does not conform to RLP encoding form") + +def to_integer(b): + length = len(b) + if length == 0: + raise Exception("input is null") + elif length == 1: + return ord(b[0]) + return ord(substr(b, -1)) + to_integer(substr(b, 0, -1)) * 256 +``` + +## पुढील वाचन {#further-reading} + +- [Ethereum मधील RLP](https://medium.com/coinmonks/data-structure-in-ethereum-episode-1-recursive-length-prefix-rlp-encoding-decoding-d1016832f919) +- [Ethereum अंडर द हूड: RLP](https://medium.com/coinmonks/ethereum-under-the-hood-part-3-rlp-decoding-df236dc13e58) +- Coglio, A. (2020). ACL2 मधील Ethereum चा रिकर्सिव्ह लेंग्थ प्रीफिक्स. arXiv preprint arXiv:2009.13769.](https://arxiv.org/abs/2009.13769) + +## संबंधित विषय {#related-topics} + +- [पॅट्रिशिया मर्केल ट्राय](/developers/docs/data-structures-and-encoding/patricia-merkle-trie) diff --git a/public/content/translations/mr/developers/docs/data-structures-and-encoding/ssz/index.md b/public/content/translations/mr/developers/docs/data-structures-and-encoding/ssz/index.md new file mode 100644 index 00000000000..33130a7a662 --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-structures-and-encoding/ssz/index.md @@ -0,0 +1,149 @@ +--- +title: "सिंपल सिरीअलाइझ" +description: "Ethereum च्या SSZ फॉरमॅटचे स्पष्टीकरण." +lang: mr +sidebarDepth: 2 +--- + +**सिंपल सिरीअलाइझ (SSZ)** ही बीकन चेनवर वापरली जाणारी सिरीअलायझेशन पद्धत आहे. हे, पीअर डिस्कव्हरी प्रोटोकॉल वगळता, कन्सेंसस लेयरवर सर्वत्र एक्झिक्यूशन लेयरवर वापरल्या जाणार्‍या RLP सिरीअलायझेशनची जागा घेते. RLP सिरीअलायझेशनबद्दल अधिक जाणून घेण्यासाठी, [रिकर्सिव्ह-लेंग्थ प्रीफिक्स (RLP)](/developers/docs/data-structures-and-encoding/rlp/) पहा. SSZ डिटर्मिनिस्टिक असण्यासाठी आणि कार्यक्षमतेने मर्केलाइझ करण्यासाठी डिझाइन केलेले आहे. SSZ मध्ये दोन घटक आहेत असे मानले जाऊ शकते: एक सिरीअलायझेशन स्कीम आणि एक मर्केलायझेशन स्कीम जी सिरीअलाइझ केलेल्या डेटा स्ट्रक्चरसह कार्यक्षमतेने काम करण्यासाठी डिझाइन केलेली आहे. + +## SSZ कसे काम करते? {#how-does-ssz-work} + +### सिरीअलायझेशन {#serialization} + +SSZ ही एक सिरीअलायझेशन स्कीम आहे जी स्वयं-वर्णन करणारी नाही - उलट ती एका स्कीमावर अवलंबून असते जी आगाऊ माहित असणे आवश्यक आहे. SSZ सिरीअलायझेशनचे ध्येय म्हणजे कोणत्याही जटिलतेच्या ऑब्जेक्ट्सना बाइट्सच्या स्ट्रिंगच्या रूपात दर्शवणे. "बेसिक टाइप्स" साठी ही एक अतिशय सोपी प्रक्रिया आहे. घटकाला फक्त हेक्साडेसिमल बाइट्समध्ये रूपांतरित केले जाते. बेसिक टाइप्समध्ये यांचा समावेश आहे: + +- अनसाईन्ड इंटिजर्स +- बूलियन्स + +जटिल "कंपोझिट" प्रकारांसाठी, सिरीअलायझेशन अधिक क्लिष्ट आहे कारण कंपोझिट प्रकारात अनेक घटक असतात जे भिन्न प्रकार किंवा भिन्न आकाराचे किंवा दोन्ही असू शकतात. जेव्हा या सर्व ऑब्जेक्ट्सची लांबी निश्चित असते (म्हणजे, घटकांचा आकार त्यांच्या वास्तविक मूल्यांकडे दुर्लक्ष करून नेहमी स्थिर असतो) तेव्हा सिरीअलायझेशन म्हणजे कंपोझिट प्रकारातील प्रत्येक घटकाचे लिट्ल-एंडियन बाईटस्ट्रिंगमध्ये रूपांतरण करणे होय. हे बाईटस्ट्रिंग्स एकत्र जोडले जातात. सिरीअलाइझ केलेल्या ऑब्जेक्टमध्ये निश्चित-लांबीच्या घटकांचे बाईटलिस्ट रिप्रेझेंटेशन त्याच क्रमाने असते ज्या क्रमाने ते डीसिरीअलाइझ केलेल्या ऑब्जेक्टमध्ये दिसतात. + +व्हेरिएबल लांबीच्या प्रकारांसाठी, सिरीअलाइझ केलेल्या ऑब्जेक्टमधील त्या घटकाच्या स्थितीत प्रत्यक्ष डेटाला "ऑफसेट" मूल्याने बदलले जाते. प्रत्यक्ष डेटा सिरीअलाइझ केलेल्या ऑब्जेक्टच्या शेवटी एका हीपमध्ये जोडला जातो. ऑफसेट व्हॅल्यू हीपमधील प्रत्यक्ष डेटाच्या सुरूवातीसाठी इंडेक्स आहे, जो संबंधित बाइट्ससाठी पॉईंटर म्हणून काम करतो. + +खालील उदाहरण स्पष्ट करते की निश्चित आणि व्हेरिएबल-लांबीच्या दोन्ही घटकांसह कंटेनरसाठी ऑफसेटिंग कसे कार्य करते: + +```Rust + + struct Dummy { + + number1: u64, + number2: u64, + vector: Vec, + number3: u64 + } + + dummy = Dummy{ + + number1: 37, + number2: 55, + vector: vec![1,2,3,4], + number3: 22, + } + + serialized = ssz.serialize(dummy) + +``` + +`serialized` ची रचना खालीलप्रमाणे असेल (येथे फक्त 4 बिट्सपर्यंत पॅड केलेले आहे, प्रत्यक्षात 32 बिट्सपर्यंत पॅड केलेले आहे आणि स्पष्टतेसाठी `int` रिप्रेझेंटेशन ठेवले आहे): + +``` +[37, 0, 0, 0, 55, 0, 0, 0, 16, 0, 0, 0, 22, 0, 0, 0, 1, 2, 3, 4] +------------ ----------- ----------- ----------- ---------- + | | | | | + नंबर1 नंबर2 वेक्टरसाठी नंबर 3 वेक्टरचे + ऑफसेट मूल्य + +``` + +स्पष्टतेसाठी ओळींमध्ये विभागलेले: + +``` +[ + 37, 0, 0, 0, # `number1` चे लिट्ल-एंडियन एन्कोडिंग. + 55, 0, 0, 0, # `number2` चे लिट्ल-एंडियन एन्कोडिंग. + 16, 0, 0, 0, # `vector` चे मूल्य कोठे सुरू होते हे दर्शवणारा "ऑफसेट" (लिट्ल-एंडियन 16). + 22, 0, 0, 0, # `number3` चे लिट्ल-एंडियन एन्कोडिंग. + 1, 2, 3, 4, # `vector` मधील वास्तविक मूल्ये. +] +``` + +हे अजूनही एक सरलीकरण आहे - वरील स्कीमाटिक्समधील इंटिजर्स आणि शून्य प्रत्यक्षात बाईटलिस्ट म्हणून संग्रहित केले जातील, याप्रमाणे: + +``` +[ + 10100101000000000000000000000000 # `number1` चे लिट्ल-एंडियन एन्कोडिंग + 10110111000000000000000000000000 # `number2` चे लिट्ल-एंडियन एन्कोडिंग. + 10010000000000000000000000000000 # `vector` चे मूल्य कोठे सुरू होते हे दर्शवणारा "ऑफसेट" (लिट्ल-एंडियन 16). + 10010110000000000000000000000000 # `number3` चे लिट्ल-एंडियन एन्कोडिंग. + 10000001100000101000001110000100 # `bytes` फील्डचे वास्तविक मूल्य. +] +``` + +त्यामुळे व्हेरिएबल-लांबीच्या प्रकारांसाठी वास्तविक मूल्ये सिरीअलाइझ केलेल्या ऑब्जेक्टच्या शेवटी एका हीपमध्ये संग्रहित केली जातात आणि त्यांचे ऑफसेट फील्डच्या क्रमबद्ध सूचीमध्ये त्यांच्या योग्य स्थानांवर संग्रहित केले जातात. + +`BitList` प्रकारासारखी काही विशेष प्रकरणे देखील आहेत ज्यांना विशिष्ट हाताळणीची आवश्यकता असते, ज्यासाठी सिरीअलायझेशन दरम्यान लांबी कॅप जोडणे आणि डीसिरीअलायझेशन दरम्यान काढून टाकणे आवश्यक असते. संपूर्ण तपशील [SSZ स्पेक](https://github.com/ethereum/consensus-specs/blob/dev/ssz/simple-serialize.md) मध्ये उपलब्ध आहेत. + +### डीसिरीअलायझेशन {#deserialization} + +या ऑब्जेक्टला डीसिरीअलाइझ करण्यासाठी स्कीमा आवश्यक आहे. स्कीमा सिरीअलाइझ केलेल्या डेटाचा अचूक लेआउट परिभाषित करतो जेणेकरून प्रत्येक विशिष्ट घटक बाइट्सच्या ब्लॉबमधून काही अर्थपूर्ण ऑब्जेक्टमध्ये डीसिरीअलाइझ केला जाऊ शकतो, ज्यामध्ये घटकांचा योग्य प्रकार, मूल्य, आकार आणि स्थान असेल. स्कीमाच डीसिरीअलायझरला सांगते की कोणती मूल्ये वास्तविक मूल्ये आहेत आणि कोणती ऑफसेट आहेत. जेव्हा एखादे ऑब्जेक्ट सिरीअलाइझ केले जाते तेव्हा सर्व फील्ड नावे अदृश्य होतात, परंतु स्कीमानुसार डीसिरीअलायझेशनवर पुन्हा इन्स्टंटिएट केली जातात. + +यावरील इंटरॅक्टिव्ह स्पष्टीकरणासाठी [ssz.dev](https://www.ssz.dev/overview) पहा. + +## मर्केलायझेशन {#merkleization} + +या SSZ सिरीअलाइझ केलेल्या ऑब्जेक्टला नंतर मर्केलाइझ केले जाऊ शकते - म्हणजेच त्याच डेटाच्या मर्केल-ट्री रिप्रेझेंटेशनमध्ये रूपांतरित केले जाऊ शकते. प्रथम, सिरीअलाइझ केलेल्या ऑब्जेक्टमधील 32-बाइट चंक्सची संख्या निश्चित केली जाते. ही ट्रीची "लीव्हज" (पाने) आहेत. लीव्हजची एकूण संख्या 2 च्या घातांकात असणे आवश्यक आहे जेणेकरून लीव्हज एकत्र हॅश केल्यावर शेवटी एकच हॅश-ट्री-रूट तयार होईल. जर नैसर्गिकरित्या असे नसेल, तर 32 बाइट शून्य असलेली अतिरिक्त लीव्हज जोडली जातात. रेखाचित्रानुसार: + +``` + हॅश ट्री रूट + / \ + / \ + / \ + / \ + लीव्हज 1 आणि 2 चा हॅश लीव्हज 3 आणि 4 चा हॅश + / \ / \ + / \ / \ + / \ / \ + लीफ1 लीफ2 लीफ3 लीफ4 +``` + +अशी काही प्रकरणे देखील आहेत जिथे ट्रीची लीव्हज वरील उदाहरणाप्रमाणे नैसर्गिकरित्या समान रीतीने वितरीत होत नाहीत. उदाहरणार्थ, लीफ 4 हे अनेक घटकांसह एक कंटेनर असू शकते ज्यासाठी मर्केल ट्रीमध्ये अतिरिक्त "डेप्थ" (खोली) जोडण्याची आवश्यकता असते, ज्यामुळे एक असमान ट्री तयार होते. + +या ट्री घटकांना लीफ X, नोड X इत्यादी म्हणून संबोधण्याऐवजी, आपण त्यांना सामान्यीकृत इंडेक्स देऊ शकतो, ज्याची सुरुवात रूट = 1 पासून होते आणि प्रत्येक स्तरावर डावीकडून उजवीकडे मोजणी केली जाते. हा वर स्पष्ट केलेला सामान्यीकृत इंडेक्स आहे. सिरीअलाइझ केलेल्या सूचीतील प्रत्येक घटकाचा एक सामान्यीकृत इंडेक्स `2**depth + idx` च्या बरोबर असतो, जिथे idx हे सिरीअलाइझ केलेल्या ऑब्जेक्टमधील त्याचे शून्य-इंडेक्स केलेले स्थान आहे आणि डेप्थ (खोली) मर्केल ट्रीमधील स्तरांची संख्या आहे, जी घटकांच्या (लीव्हज) संख्येचा बेस-टू लॉगरिथम म्हणून निर्धारित केली जाऊ शकते. + +## सामान्यीकृत इंडेक्स {#generalized-indices} + +सामान्यीकृत इंडेक्स हा एक इंटिजर आहे जो बायनरी मर्केल ट्रीमधील नोडचे प्रतिनिधित्व करतो जिथे प्रत्येक नोडचा सामान्यीकृत इंडेक्स `2 ** depth + index in row` असतो. + +``` + 1 --डेप्थ = 0 2**0 + 0 = 1 + 2 3 --डेप्थ = 1 2**1 + 0 = 2, 2**1+1 = 3 + 4 5 6 7 --डेप्थ = 2 2**2 + 0 = 4, 2**2 + 1 = 5... + +``` + +हे रिप्रेझेंटेशन मर्केल ट्रीमधील डेटाच्या प्रत्येक भागासाठी एक नोड इंडेक्स देते. + +## मल्टीप्रूफ्स {#multiproofs} + +एका विशिष्ट घटकाचे प्रतिनिधित्व करणाऱ्या सामान्यीकृत इंडेक्सची सूची प्रदान केल्याने आम्हाला ते हॅश-ट्री-रूट विरुद्ध सत्यापित करण्याची परवानगी मिळते. हे रूट म्हणजे वास्तवाची आपली स्वीकारलेली आवृत्ती आहे. आपल्याला प्रदान केलेला कोणताही डेटा त्या वास्तवाविरुद्ध मर्केल ट्रीमध्ये योग्य ठिकाणी (त्याच्या सामान्यीकृत इंडेक्सद्वारे निर्धारित) घालून आणि रूट स्थिर राहतो हे पाहून सत्यापित केला जाऊ शकतो. [येथे](https://github.com/ethereum/consensus-specs/blob/dev/ssz/merkle-proofs.md#merkle-multiproofs) स्पेक्समध्ये अशी फंक्शन्स आहेत जी सामान्यीकृत इंडेक्सच्या विशिष्ट सेटमधील सामग्री सत्यापित करण्यासाठी आवश्यक असलेल्या नोड्सचा किमान संच कसा मोजावा हे दर्शवतात. + +उदाहरणार्थ, खालील ट्रीमधील इंडेक्स 9 मधील डेटा सत्यापित करण्यासाठी, आम्हाला इंडेक्स 8, 9, 5, 3, 1 वरील डेटाचा हॅश आवश्यक आहे. +(8,9) चा हॅश (4) च्या हॅशच्या बरोबर असावा, जो 5 सोबत हॅश होऊन 2 तयार करतो, जो 3 सोबत हॅश होऊन ट्री रूट 1 तयार करतो. जर 9 साठी चुकीचा डेटा प्रदान केला गेला, तर रूट बदलेल - आम्ही हे ओळखू आणि ब्रांच सत्यापित करण्यात अयशस्वी होऊ. + +``` +* = प्रूफ तयार करण्यासाठी आवश्यक डेटा + + 1* + 2 3* + 4 5* 6 7 +8* 9* 10 11 12 13 14 15 + +``` + +## पुढील वाचन {#further-reading} + +- [Ethereum अपग्रेड करणे: SSZ](https://eth2book.info/altair/part2/building_blocks/ssz) +- [Ethereum अपग्रेड करणे: मर्केलायझेशन](https://eth2book.info/altair/part2/building_blocks/merkleization) +- [SSZ अंमलबजावणी](https://github.com/ethereum/consensus-specs/issues/2138) +- [SSZ कॅल्क्युलेटर](https://simpleserialize.com/) +- [SSZ.dev](https://www.ssz.dev/) diff --git a/public/content/translations/mr/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md b/public/content/translations/mr/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md new file mode 100644 index 00000000000..f4cf8d5ed21 --- /dev/null +++ b/public/content/translations/mr/developers/docs/data-structures-and-encoding/web3-secret-storage/index.md @@ -0,0 +1,195 @@ +--- +title: "Web3 गुप्त स्टोरेजची व्याख्या" +description: "web3 गुप्त स्टोरेजची औपचारिक व्याख्या" +lang: mr +sidebarDepth: 2 +--- + +तुमचा ॲप Ethereum वर काम करण्यासाठी, तुम्ही web3.js लायब्ररीद्वारे प्रदान केलेला web3 ऑब्जेक्ट वापरू शकता. आतल्या बाजूला ते RPC कॉलद्वारे स्थानिक नोडशी संवाद साधते. [web3](https://github.com/ethereum/web3.js/) कोणत्याही Ethereum नोडसोबत काम करते जे RPC लेयर उघड करते. + +`web3` मध्ये `eth` ऑब्जेक्ट आहे - web3.eth. + +```js +var fs = require("fs") +var recognizer = require("ethereum-keyfile-recognizer") + +fs.readFile("keyfile.json", (err, data) => { + var json = JSON.parse(data) + var result = recognizer(json) +}) + +/** परिणाम + * [ 'web3', 3 ] web3 (v3) कीफाइल + * [ 'ethersale', undefined ] Ethersale कीफाइल + * null अवैध कीफाइल + */ +``` + +हे दस्तऐवज Web3 गुप्त स्टोरेज व्याख्येच्या **आवृत्ती 3** चे वर्णन करते. + +## व्याख्या {#definition} + +फाईलचे प्रत्यक्ष एन्कोडिंग आणि डीकोडिंग आवृत्ती 1 पासून मोठ्या प्रमाणात अपरिवर्तित आहे, फक्त क्रिप्टो अल्गोरिदम आता AES-128-CBC पर्यंत मर्यादित नाही (AES-128-CTR ही आता किमान आवश्यकता आहे). बहुतेक अर्थ/अल्गोरिदम आवृत्ती 1 प्रमाणेच आहेत, `mac` वगळता, जे `ciphertext` सह साधित की च्या दुसऱ्या-डावीकडील 16 बाइट्सच्या एकत्रिकरणाचे SHA3 (keccak-256) म्हणून दिले जाते. + +गुप्त की फाइल्स थेट `~/.web3/keystore` (Unix-सारख्या प्रणालींसाठी) आणि `~/AppData/Web3/keystore` (Windows साठी) मध्ये साठवल्या जातात. त्यांना कोणतेही नाव दिले जाऊ शकते, परंतु एक चांगला संकेत म्हणजे `.json`, जिथे `` हा गुप्त की ला दिलेला 128-बिट UUID आहे (गुप्त की च्या ॲड्रेससाठी गोपनीयता-संरक्षक प्रॉक्सी). + +अशा सर्व फाइल्सना एक संबंधित पासवर्ड असतो. दिलेल्या `.json` फाइलची गुप्त की मिळवण्यासाठी, प्रथम फाइलची एन्क्रिप्शन की मिळवा; हे फाइलचा पासवर्ड घेऊन आणि `kdf` की द्वारे वर्णन केल्यानुसार की डेरिवेशन फंक्शनमधून पास करून केले जाते. KDF फंक्शनसाठी KDF-अवलंबित स्थिर आणि डायनॅमिक पॅरामीटर्सचे वर्णन `kdfparams` की मध्ये केले आहे. + +PBKDF2 ला सर्व किमान-अनुरूप अंमलबजावणीद्वारे समर्थित करणे आवश्यक आहे, जे खालीलप्रमाणे दर्शविले आहे: + +- `kdf`: `pbkdf2` + +PBKDF2 साठी, kdfparams मध्ये समाविष्ट आहे: + +- `prf`: `hmac-sha256` असणे आवश्यक आहे (भविष्यात वाढवले जाऊ शकते); +- `c`: पुनरावृत्तींची संख्या; +- `salt`: PBKDF ला पास केलेला सॉल्ट; +- `dklen`: साधित की साठी लांबी. >= 32 असणे आवश्यक आहे. + +एकदा फाईलची की मिळवल्यानंतर, MAC च्या डेरिवेशनद्वारे त्याची पडताळणी केली पाहिजे. MAC ची गणना साधित की च्या दुसऱ्या-डावीकडील 16 बाइट्स आणि `ciphertext` की च्या सामग्रीच्या एकत्रिकरणाने तयार झालेल्या बाइट ॲरेच्या SHA3 (keccak-256) हॅश म्हणून केली पाहिजे, म्हणजे: + +```js +KECCAK(DK[16..31] ++ ) +``` + +(जिथे `++` हा कॉनकेटिनेशन ऑपरेटर आहे) + +या मूल्याची तुलना `mac` की च्या सामग्रीशी केली पाहिजे; जर ते वेगळे असतील, तर पर्यायी पासवर्डची विनंती केली पाहिजे (किंवा ऑपरेशन रद्द केले पाहिजे). + +फाईलच्या कीची पडताळणी केल्यानंतर, सिफर टेक्स्ट (`ciphertext` की फाईलमध्ये) `cipher` की द्वारे निर्दिष्ट सिमेट्रिक एन्क्रिप्शन अल्गोरिदम वापरून आणि `cipherparams` की द्वारे पॅरामेटराइज करून डिक्रिप्ट केले जाऊ शकते. जर साधित की चा आकार आणि अल्गोरिदमच्या कीचा आकार जुळत नसेल, तर साधित की चे शून्य पॅडेड, उजवीकडील बाइट्स अल्गोरिदमची की म्हणून वापरले पाहिजेत. + +सर्व किमान-अनुरूप अंमलबजावणीने AES-128-CTR अल्गोरिदमला समर्थन दिले पाहिजे, जे खालीलप्रमाणे दर्शविले आहे: + +- `cipher: aes-128-ctr` + +हे सिफर खालील पॅरामीटर्स घेते, जे cipherparams की साठी की म्हणून दिले जातात: + +- `iv`: सिफरसाठी 128-बिट इनिशियलायझेशन वेक्टर. + +सिफरसाठी की ही साधित की चे डावीकडील 16 बाइट्स आहेत, म्हणजे `DK[0..15]` + +गुप्त कीची निर्मिती/एन्क्रिप्शन मूलतः या सूचनांच्या उलट असावी. `uuid`, `salt` आणि `iv` खरोखरच यादृच्छिक असल्याची खात्री करा. + +`version` फील्ड व्यतिरिक्त, जे आवृत्तीचे "हार्ड" ओळखकर्ता म्हणून काम केले पाहिजे, अंमलबजावणी स्वरूपातील लहान, नॉन-ब्रेकिंग बदलांचा मागोवा घेण्यासाठी `minorversion` देखील वापरू शकतात. + +## चाचणी व्हेक्टर्स {#test-vectors} + +तपशील: + +- `ॲड्रेस`: `008aeeda4d805471df9b2a5b0f38a0c3bcba786b` +- `ICAP`: `XE542A5PZHH8PYIZUBEJEO0MFWRAPPIL67` +- `UUID`: `3198bc9c-6672-5ab3-d9954942343ae5b6` +- `पासवर्ड`: `testpassword` +- `गुप्त`: `7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d` + +### PBKDF2-SHA-256 {#PBKDF2-SHA-256} + +`AES-128-CTR` आणि `PBKDF2-SHA-256` वापरून चाचणी व्हेक्टर: + +`~/.web3/keystore/3198bc9c-6672-5ab3-d9954942343ae5b6.json` ची फाइल सामग्री: + +```json +{ + "crypto": { + "cipher": "aes-128-ctr", + "cipherparams": { + "iv": "6087dab2f9fdbbfaddc31a909735c1e6" + }, + "ciphertext": "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46", + "kdf": "pbkdf2", + "kdfparams": { + "c": 262144, + "dklen": 32, + "prf": "hmac-sha256", + "salt": "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd" + }, + "mac": "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2" + }, + "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version": 3 +} +``` + +**मध्यस्थ**: + +`साधित की`: `f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551` +`MAC बॉडी`: `e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46` +`MAC`: `517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2` +`सिफर की`: `f06d69cdc7da0faffb1008270bca38f5` + +### Scrypt {#scrypt} + +AES-128-CTR आणि Scrypt वापरून चाचणी व्हेक्टर: + +```json +{ + "crypto": { + "cipher": "aes-128-ctr", + "cipherparams": { + "iv": "740770fce12ce862af21264dab25f1da" + }, + "ciphertext": "dd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2", + "kdf": "scrypt", + "kdfparams": { + "dklen": 32, + "n": 262144, + "p": 1, + "r": 8, + "salt": "25710c2ccd7c610b24d068af83b959b7a0e5f40641f0c82daeb1345766191034" + }, + "mac": "337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c" + }, + "id": "3198bc9c-6672-5ab3-d995-4942343ae5b6", + "version": 3 +} +``` + +**मध्यस्थ**: + +`साधित की`: `7446f59ecc301d2d79bc3302650d8a5cedc185ccbb4bf3ca1ebd2c163eaa6c2d` +`MAC बॉडी`: `edc185ccbb4bf3ca1ebd2c163eaa6c2ddd8a1132cf57db67c038c6763afe2cbe6ea1949a86abc5843f8ca656ebbb1ea2` +`MAC`: `337aeb86505d2d0bb620effe57f18381377d67d76dac1090626aa5cd20886a7c` +`सिफर की`: `7446f59ecc301d2d79bc3302650d8a5c` + +## आवृत्ती 1 मधील बदल {#alterations-from-v2} + +ही आवृत्ती [येथे](https://github.com/ethereum/homestead-guide/blob/master/old-docs-for-reference/go-ethereum-wiki.rst/Passphrase-protected-key-store-spec.rst) प्रकाशित आवृत्ती 1 मधील अनेक विसंगती दूर करते. थोडक्यात ते खालीलप्रमाणे आहेत: + +- कॅपिटलायझेशन अयोग्य आणि विसंगत आहे (scrypt लोअरकेस, Kdf मिक्स्ड-केस, MAC अप्परकेस). +- ॲड्रेस अनावश्यक आहे आणि गोपनीयतेशी तडजोड करतो. +- `Salt` हे मूलतः की डेरिवेशन फंक्शनचे एक पॅरामीटर आहे आणि ते त्याच्याशी संबंधित असले पाहिजे, सर्वसाधारणपणे क्रिप्टोशी नाही. +- _SaltLen_ अनावश्यक (फक्त Salt पासून मिळवा). +- की डेरिवेशन फंक्शन दिले आहे, तरीही क्रिप्टो अल्गोरिदम हार्ड स्पेसिफाइड आहे. +- `Version` हे मूलतः अंकीय आहे तरीही एक स्ट्रिंग आहे (स्ट्रिंगसह संरचित आवृत्ती शक्य आहे, परंतु क्वचितच बदलणाऱ्या कॉन्फिगरेशन फाइल स्वरूपासाठी कार्यक्षेत्राबाहेर मानले जाऊ शकते). +- `KDF` आणि `cipher` या संकल्पना काल्पनिकदृष्ट्या एकसारख्या आहेत तरीही त्या वेगवेगळ्या प्रकारे आयोजित केल्या आहेत. +- `MAC` ची गणना एका व्हाइटस्पेस अज्ञेयवादी डेटाच्या तुकड्याद्वारे केली जाते(!) + +पूर्वी लिंक केलेल्या पृष्ठावरील उदाहरणाप्रमाणे कार्यात्मकदृष्ट्या समतुल्य असलेली खालील फाइल देण्यासाठी स्वरूपात बदल केले गेले आहेत: + +```json +{ + "crypto": { + "cipher": "aes-128-cbc", + "ciphertext": "07533e172414bfa50e99dba4a0ce603f654ebfa1ff46277c3e0c577fdc87f6bb4e4fe16c5a94ce6ce14cfa069821ef9b", + "cipherparams": { + "iv": "16d67ba0ce5a339ff2f07951253e6ba8" + }, + "kdf": "scrypt", + "kdfparams": { + "dklen": 32, + "n": 262144, + "p": 1, + "r": 8, + "salt": "06870e5e6a24e183a5c807bd1c43afd86d573f7db303ff4853d135cd0fd3fe91" + }, + "mac": "8ccded24da2e99a11d48cda146f9cc8213eb423e2ea0d8427f41c3be414424dd", + "version": 1 + }, + "id": "0498f19a-59db-4d54-ac95-33901b4f1870", + "version": 2 +} +``` + +## आवृत्ती 2 मधील बदल {#alterations-from-v2} + +आवृत्ती 2 ही अनेक बग्ससह एक सुरुवातीची C++ अंमलबजावणी होती. त्यातील सर्व आवश्यक गोष्टी अपरिवर्तित आहेत. diff --git a/public/content/translations/mr/developers/docs/design-and-ux/dex-design-best-practice/index.md b/public/content/translations/mr/developers/docs/design-and-ux/dex-design-best-practice/index.md new file mode 100644 index 00000000000..43c2311516c --- /dev/null +++ b/public/content/translations/mr/developers/docs/design-and-ux/dex-design-best-practice/index.md @@ -0,0 +1,219 @@ +--- +title: "विकेंद्रित एक्सचेंज (DEX) डिझाइनमधील सर्वोत्तम पद्धती" +description: "टोकन्स स्वॅप करण्यासाठी UX/UI निर्णयांचे स्पष्टीकरण देणारे मार्गदर्शक." +lang: mr +--- + +2018 मध्ये Uniswap च्या लाँचपासून, अनेक वेगवेगळ्या चेन्सवर शेकडो विकेंद्रित एक्सचेंज लाँच झाले आहेत. +यापैकी अनेकांनी नवीन घटक सादर केले किंवा स्वतःचा ट्विस्ट जोडला, परंतु इंटरफेस सामान्यतः तसाच राहिला आहे. + +याचे एक कारण [जेकबचा नियम](https://lawsofux.com/jakobs-law/) आहे: + +> वापरकर्ते आपला बहुतेक वेळ इतर साइट्सवर घालवतात. याचा अर्थ असा की वापरकर्त्यांना तुमची साइट त्यांना आधीच माहीत असलेल्या इतर सर्व साइट्सप्रमाणेच काम करणे पसंत आहे. + +Uniswap, Pancakeswap आणि Sushiswap सारख्या सुरुवातीच्या इनोव्हेटर्समुळे, DeFi वापरकर्त्यांना DEX कसा दिसतो याची एक सामूहिक कल्पना आहे. +या कारणास्तव, "सर्वोत्तम पद्धत" सारखे काहीतरी आता उदयास येत आहे. आम्ही पाहतो की अधिकाधिक डिझाइन निर्णय साइट्सवर प्रमाणित केले जात आहेत. तुम्ही DEXes च्या उत्क्रांतीला थेट चाचणीचे एक मोठे उदाहरण म्हणून पाहू शकता. ज्या गोष्टींनी काम केले त्या राहिल्या, ज्यांनी नाही केले त्या बाहेर फेकल्या गेल्या. व्यक्तिमत्त्वासाठी अजूनही जागा आहे, परंतु काही विशिष्ट मानके आहेत ज्यांचे पालन DEX ने केले पाहिजे. + +हा लेख खालील गोष्टींचा सारांश आहे: + +- काय समाविष्ट करावे +- ते शक्य तितके वापरण्यायोग्य कसे बनवायचे +- डिझाइन सानुकूलित करण्याचे मुख्य मार्ग + +सर्व उदाहरण वायरफ्रेम विशेषतः या लेखासाठी बनवले गेले होते, जरी ते सर्व वास्तविक प्रकल्पांवर आधारित असले तरी. + +फिग्मा किट देखील तळाशी समाविष्ट आहे - ते वापरण्यास मोकळ्या मनाने आणि आपल्या स्वतःच्या वायरफ्रेम्सला गती द्या! + +## DEX ची मूलभूत रचना {#basic-anatomy-of-a-dex} + +UI मध्ये साधारणपणे तीन घटक असतात: + +1. मुख्य फॉर्म +2. बटण +3. तपशील पॅनेल + +![जेनेरिक DEX UI, तीन मुख्य घटक दर्शविते](./1.png) + +## फरक {#variations} + +या लेखात ही एक सामान्य थीम असेल, परंतु हे घटक आयोजित करण्याचे विविध मार्ग आहेत. "तपशील पॅनेल" असू शकते: + +- बटणाच्या वर +- बटणाच्या खाली +- एकॉर्डियन पॅनेलमध्ये लपवलेले +- आणि/किंवा “पूर्वावलोकन” मोडलवर + +एन.बी. एक “पूर्वावलोकन” मोडल पर्यायी आहे, परंतु तुम्ही मुख्य UI वर खूप कमी तपशील दाखवत असाल तर ते आवश्यक बनते. + +## मुख्य फॉर्मची रचना {#structure-of-the-main-form} + +हा तो बॉक्स आहे जिथे तुम्ही प्रत्यक्षात कोणते टोकन स्वॅप करायचे आहे ते निवडता. घटकामध्ये एका ओळीत इनपुट फील्ड आणि एक लहान बटण असते. + +DEXes सामान्यतः एका ओळीच्या वर आणि एका ओळीच्या खाली अतिरिक्त तपशील प्रदर्शित करतात, जरी हे वेगळ्या प्रकारे कॉन्फिगर केले जाऊ शकते. + +![इनपुट ओळ, वर आणि खाली तपशील ओळीसह](./2.png) + +## फरक {#variations2} + +येथे दोन UI भिन्नता दर्शविल्या आहेत; एक कोणत्याही सीमांशिवाय, एक अतिशय खुले डिझाइन तयार करते आणि एक जिथे इनपुट ओळीला एक सीमा आहे, त्या घटकावर लक्ष केंद्रित करते. + +![मुख्य फॉर्मच्या दोन UI भिन्नता](./3.png) + +ही मूलभूत रचना डिझाइनमध्ये **माहितीचे चार मुख्य भाग** दाखवण्याची परवानगी देते: प्रत्येक कोपऱ्यात एक. फक्त एक वरची/खालची ओळ असल्यास, फक्त दोन जागा आहेत. + +DeFi च्या उत्क्रांती दरम्यान, येथे अनेक वेगवेगळ्या गोष्टी समाविष्ट केल्या गेल्या आहेत. + +## समाविष्ट करण्यासाठी मुख्य माहिती {#key-info-to-include} + +- वॉलेटमधील शिल्लक +- कमाल बटण +- फियाट समतुल्य +- मिळणाऱ्या रकमेवर किंमतीचा प्रभाव + +DeFi च्या सुरुवातीच्या दिवसांमध्ये, फियाट समतुल्य अनेकदा गहाळ होते. तुम्ही कोणत्याही प्रकारचा Web3 प्रकल्प तयार करत असाल, तर फियाट समतुल्य दर्शवणे आवश्यक आहे. वापरकर्ते अजूनही स्थानिक चलनांच्या बाबतीत विचार करतात, म्हणून वास्तविक जगाच्या मानसिक मॉडेल्सशी जुळण्यासाठी, हे समाविष्ट केले पाहिजे. + +दुसऱ्या फील्डवर (जिथे तुम्ही स्वॅप करत असलेले टोकन निवडता) तुम्ही इनपुट रक्कम आणि अंदाजित आउटपुट रकमांमधील फरक मोजून फियाट चलन रकमेच्या पुढे किमतीचा परिणाम देखील समाविष्ट करू शकता. हा समाविष्ट करण्यासाठी एक उपयुक्त तपशील आहे. + +टक्केवारी बटणे (उदा., 25%, 50%, 75%) एक उपयुक्त वैशिष्ट्य असू शकतात, परंतु ते अधिक जागा घेतात, अधिक कॉल टू अॅक्शन जोडतात आणि अधिक मानसिक भार टाकतात. टक्केवारी स्लाइडर्सचेही तसेच आहे. यापैकी काही UI निर्णय तुमच्या ब्रँड आणि तुमच्या वापरकर्ता प्रकारावर अवलंबून असतील. + +अतिरिक्त तपशील मुख्य फॉर्मच्या खाली दर्शविले जाऊ शकतात. या प्रकारची माहिती बहुतेक प्रो वापरकर्त्यांसाठी असल्याने, हे करणे अर्थपूर्ण आहे: + +- ते शक्य तितके कमी ठेवा, किंवा; +- ते एकॉर्डियन पॅनेलमध्ये लपवा + +![मुख्य फॉर्मच्या कोपऱ्यात दर्शविलेले तपशील](./4.png) + +## समाविष्ट करण्यासाठी अतिरिक्त माहिती {#extra-info-to-include} + +- टोकन किंमत +- स्लिपेज +- किमान प्राप्त +- अपेक्षित आउटपुट +- किंमतीचा प्रभाव +- गॅस खर्चाचा अंदाज +- इतर शुल्क +- ऑर्डर रूटिंग + +वादग्रस्तपणे, यापैकी काही तपशील पर्यायी असू शकतात. + +ऑर्डर रूटिंग मनोरंजक आहे, परंतु बहुतेक वापरकर्त्यांसाठी फारसा फरक पडत नाही. + +काही इतर तपशील फक्त तीच गोष्ट वेगवेगळ्या प्रकारे पुन्हा सांगतात. उदाहरणार्थ, "किमान प्राप्त" आणि "स्लिपेज" हे एकाच नाण्याच्या दोन बाजू आहेत. तुमचे स्लिपेज 1% वर सेट असल्यास, तुम्हाला मिळणारी किमान अपेक्षित रक्कम = अपेक्षित आउटपुट - 1%. काही UI अपेक्षित रक्कम, किमान रक्कम आणि स्लिपेज दाखवतील... जे उपयुक्त आहे पण कदाचित अनावश्यक आहे. + +बहुतेक वापरकर्ते तरीही डीफॉल्ट स्लिपेज ठेवतील. + +"किंमत परिणाम" अनेकदा "to" फील्डमध्ये फियाट समतुल्यच्या पुढे कंसात दर्शविला जातो. हा जोडण्यासाठी एक उत्तम ux तपशील आहे, परंतु जर तो येथे दर्शविला असेल तर तो खाली पुन्हा दाखवण्याची खरोखर गरज आहे का? आणि मग पुन्हा पूर्वावलोकन स्क्रीनवर? + +अनेक वापरकर्ते (विशेषतः जे कमी प्रमाणात स्वॅप करतात) या तपशीलांची पर्वा करणार नाहीत; ते फक्त एक संख्या टाकतील आणि स्वॅप दाबतील. + +![काही तपशील तीच गोष्ट दाखवतात](./5.png) + +नेमके कोणते तपशील दाखवले जातील हे तुमच्या प्रेक्षक आणि तुम्हाला अॅपमध्ये कोणत्या प्रकारची भावना हवी आहे यावर अवलंबून असेल. + +तुम्ही तपशील पॅनेलमध्ये स्लिपेज टॉलरन्स समाविष्ट केल्यास, तुम्ही ते थेट येथून संपादन करण्यायोग्य देखील बनवले पाहिजे. हे "एक्सेलेटर" चे एक चांगले उदाहरण आहे; एक सुबक UX युक्ती जी अॅपच्या सामान्य उपयोगितेवर परिणाम न करता अनुभवी वापरकर्त्यांच्या प्रवाहांना गती देऊ शकते. + +![तपशील पॅनेलमधून स्लिपेज नियंत्रित केले जाऊ शकते](./6.png) + +एका स्क्रीनवरील केवळ एका विशिष्ट माहितीबद्दलच नव्हे, तर संपूर्ण प्रवाहाबद्दल काळजीपूर्वक विचार करणे ही एक चांगली कल्पना आहे: मुख्य फॉर्ममध्ये संख्या प्रविष्ट करणे → तपशील स्कॅन करणे → पूर्वावलोकन स्क्रीनवर क्लिक करणे (तुमच्याकडे पूर्वावलोकन स्क्रीन असल्यास). +तपशील पॅनेल नेहमी दृश्यमान असावे की वापरकर्त्याला ते विस्तारित करण्यासाठी क्लिक करणे आवश्यक आहे? +तुम्ही पूर्वावलोकन स्क्रीन जोडून घर्षण निर्माण करावे का? हे वापरकर्त्याला हळू करण्यास आणि त्यांच्या व्यापाराचा विचार करण्यास भाग पाडते, जे उपयुक्त असू शकते. पण त्यांना पुन्हा तीच सर्व माहिती बघायची आहे का? या क्षणी त्यांच्यासाठी सर्वात उपयुक्त काय आहे? + +## डिझाइन पर्याय {#design-options} + +नमूद केल्याप्रमाणे, यापैकी बरेच काही तुमच्या वैयक्तिक शैलीवर अवलंबून असते +तुमचा वापरकर्ता कोण आहे? +तुमचा ब्रँड कोणता आहे? +तुम्हाला प्रत्येक तपशील दाखवणारा “प्रो” इंटरफेस हवा आहे की तुम्हाला मिनिमलिस्ट व्हायचे आहे? +जरी तुम्ही सर्व शक्य माहिती हवी असलेल्या प्रो वापरकर्त्यांना लक्ष्य करत असाल, तरीही तुम्हाला ॲलन कूपरचे शहाणपणाचे शब्द लक्षात ठेवले पाहिजेत: + +> तुमचा इंटरफेस कितीही सुंदर असो, कितीही छान असो, तो कमी असता तर बरे झाले असते. + +### रचना {#structure} + +- डावीकडे टोकन किंवा उजवीकडे टोकन +- 2 ओळी किंवा 3 +- बटणाच्या वर किंवा खाली तपशील +- तपशील विस्तृत, लहान केलेले किंवा न दर्शवलेले + +### घटक शैली {#component-style} + +- रिकामे +- बाह्यरेखित +- भरलेले + +केवळ UX च्या दृष्टिकोनातून, UI शैली तुम्हाला वाटते त्यापेक्षा कमी महत्त्वाची आहे. दृष्य ट्रेंड चक्रात येतात आणि जातात, आणि बरीचशी पसंती व्यक्तिनिष्ठ असते. + +याची अनुभूती घेण्याचा - आणि विविध भिन्न कॉन्फिगरेशनबद्दल विचार करण्याचा सर्वात सोपा मार्ग म्हणजे काही उदाहरणे पाहणे आणि नंतर स्वतः काही प्रयोग करणे. + +समाविष्ट फिग्मा किटमध्ये रिकामे, बाह्यरेखित आणि भरलेले घटक आहेत. + +हे सर्व एकत्र ठेवण्याचे वेगवेगळे मार्ग पाहण्यासाठी खालील उदाहरणे पहा: + +![भरलेल्या शैलीमध्ये 3 ओळी](./7.png) + +![बाह्यरेखित शैलीमध्ये 3 ओळी](./8.png) + +![रिकाम्या शैलीमध्ये 2 ओळी](./9.png) + +![बाह्यरेखित शैलीमध्ये 3 ओळी, तपशील पॅनेलसह](./10.png) + +![बाह्यरेखित शैलीमध्ये इनपुट ओळीसह 3 ओळी](./11.png) + +![भरलेल्या शैलीमध्ये 2 ओळी](./12.png) + +## पण टोकन कोणत्या बाजूला जावे? {#but-which-side-should-the-token-go-on} + +मुख्य गोष्ट अशी आहे की यामुळे उपयोगितेवर फारसा फरक पडण्याची शक्यता नाही. तथापि, काही गोष्टी लक्षात ठेवण्यासारख्या आहेत, ज्या तुम्हाला एका किंवा दुसऱ्या मार्गावर प्रभावित करू शकतात. + +वेळेनुसार फॅशनमध्ये बदल पाहणे थोडे मनोरंजक आहे. Uniswap ने सुरुवातीला टोकन डावीकडे ठेवले होते, परंतु नंतर ते उजवीकडे हलवले. Sushiswap ने देखील डिझाइन अपग्रेड दरम्यान हा बदल केला. सर्व नाही, पण बहुतेक प्रोटोकॉल्सने त्याचे अनुकरण केले आहे. + +आर्थिक संकेतांनुसार पारंपारिकपणे चलन चिन्ह संख्येच्या आधी ठेवले जाते, उदा., $50, €50, £50, परंतु आपण 50 डॉलर्स, 50 युरो, 50 पाउंड असे _म्हणतो_. + +सर्वसाधारण वापरकर्त्याला - विशेषतः जो डावीकडून उजवीकडे, वरपासून खालपर्यंत वाचतो - उजवीकडील टोकन अधिक नैसर्गिक वाटू शकते. + +![डावीकडे टोकन असलेला UI](./13.png) + +डावीकडे टोकन आणि उजवीकडे सर्व संख्या ठेवणे आनंददायक सममित दिसते, जे एक प्लस आहे, परंतु या लेआउटमध्ये आणखी एक तोटा आहे. + +सान्निध्याचा नियम सांगतो की जवळ असलेल्या वस्तू संबंधित म्हणून समजल्या जातात. त्यानुसार, आम्हाला संबंधित वस्तू एकमेकांच्या शेजारी ठेवायच्या आहेत. टोकन शिल्लक थेट टोकनशी संबंधित आहे, आणि जेव्हा नवीन टोकन निवडले जाते तेव्हा ते बदलेल. म्हणून, टोकन शिल्लक टोकन निवड बटणाच्या पुढे असणे थोडे अधिक अर्थपूर्ण आहे. ते टोकनच्या खाली हलवले जाऊ शकते, परंतु ते लेआउटची सममिती मोडते. + +शेवटी, दोन्ही पर्यायांसाठी प्लस आणि मायनस आहेत, परंतु उजवीकडील टोकनकडे कल कसा दिसतो हे मनोरंजक आहे. + +## बटणाचे वर्तन {#button-behavior} + +Approve साठी वेगळे बटण ठेवू नका. Approve साठी वेगळा क्लिक देखील ठेवू नका. वापरकर्त्याला स्वॅप करायचे आहे, म्हणून बटणावर फक्त “स्वॅप” म्हणा आणि पहिली पायरी म्हणून मंजुरी सुरू करा. एक मोडल स्टेपरसह प्रगती दर्शवू शकतो, किंवा एक साधे “tx 1 of 2 - approving” सूचना. + +![approve आणि swap साठी वेगळ्या बटणांसह UI](./14.png) + +![approve असे लिहिलेले एक बटण असलेले UI](./15.png) + +### संदर्भानुसार मदतीसाठी बटण {#button-as-contextual-help} + +बटण अलर्ट म्हणून दुहेरी कर्तव्य करू शकते! + +हे खरेतर Web3 बाहेर एक असामान्य डिझाइन पॅटर्न आहे, परंतु त्याच्या आत ते मानक बनले आहे. ही एक चांगली नवकल्पना आहे कारण ती जागा वाचवते आणि लक्ष केंद्रित ठेवते. + +जर मुख्य क्रिया - SWAP - त्रुटीमुळे अनुपलब्ध असेल, तर कारण बटणासह स्पष्ट केले जाऊ शकते, उदा: + +- नेटवर्क स्विच करा +- वॉलेट कनेक्ट करा +- विविध त्रुटी + +बटण **आवश्यक असलेल्या कृतीसाठी मॅप** केले जाऊ शकते. उदाहरणार्थ, वापरकर्ता चुकीच्या नेटवर्कवर असल्यामुळे स्वॅप करू शकत नसल्यास, बटणावर "Ethereum वर स्विच करा" असे लिहिलेले असावे आणि जेव्हा वापरकर्ता बटणावर क्लिक करतो, तेव्हा ते नेटवर्क Ethereum वर स्विच झाले पाहिजे. यामुळे वापरकर्त्याचा प्रवाह लक्षणीयरीत्या वेगवान होतो. + +![मुख्य CTA वरून सुरू होणाऱ्या मुख्य क्रिया](./16.png) + +![मुख्य CTA मध्ये दर्शविलेला त्रुटी संदेश](./17.png) + +## या figma फाइलसह स्वतःचे तयार करा {#build-your-own-with-this-figma-file} + +अनेक प्रोटोकॉलच्या कठोर परिश्रमामुळे, DEX डिझाइनमध्ये खूप सुधारणा झाली आहे. आम्हाला माहित आहे की वापरकर्त्याला कोणती माहिती हवी आहे, ती कशी दाखवावी, आणि प्रवाह शक्य तितका सुरळीत कसा करावा. +आशा आहे की हा लेख UX तत्त्वांचे एक ठोस विहंगावलोकन प्रदान करतो. + +तुम्हाला प्रयोग करायचे असल्यास, कृपया फिग्मा वायरफ्रेम किट वापरण्यास मोकळ्या मनाने. हे शक्य तितके सोपे ठेवले आहे, परंतु विविध मार्गांनी मूलभूत रचना तयार करण्यासाठी पुरेशी लवचिकता आहे. + +[Figma वायरफ्रेम किट](https://www.figma.com/community/file/1393606680816807382/dex-wireframes-kit) + +DeFi विकसित होत राहील, आणि सुधारणेसाठी नेहमीच जागा असते. + +शुभेच्छा! diff --git a/public/content/translations/mr/developers/docs/design-and-ux/heuristics-for-web3/index.md b/public/content/translations/mr/developers/docs/design-and-ux/heuristics-for-web3/index.md new file mode 100644 index 00000000000..182ed9ea633 --- /dev/null +++ b/public/content/translations/mr/developers/docs/design-and-ux/heuristics-for-web3/index.md @@ -0,0 +1,138 @@ +--- +title: "Web3 इंटरफेस डिझाइनसाठी 7 मार्गदर्शक तत्वे" +description: "Web3 ची उपयोगिता सुधारण्यासाठीची तत्त्वे" +lang: mr +--- + +उपयोगिता मार्गदर्शक तत्वे हे व्यापक 'अंगठ्याचे नियम' आहेत जे तुम्ही तुमच्या साइटची उपयोगिता मोजण्यासाठी वापरू शकता. +येथील 7 मार्गदर्शक तत्वे विशेषतः Web3 साठी तयार केली आहेत आणि जेकब निल्सनच्या [इंटरॅक्शन डिझाइनसाठी 10 सामान्य तत्त्वे](https://www.nngroup.com/articles/ten-usability-heuristics/) सोबत वापरली पाहिजेत. + +## web3 साठी सात उपयोगिता मार्गदर्शक तत्वे {#seven-usability-heuristics-for-web3} + +1. कृतीनंतर प्रतिक्रिया येते +2. सुरक्षा आणि विश्वास +3. सर्वात महत्त्वाची माहिती स्पष्ट आहे +4. समजण्यायोग्य परिभाषा +5. कृती शक्य तितक्या लहान असाव्यात +6. नेटवर्क कनेक्शन दृश्यमान आणि लवचिक आहेत +7. ॲपमधून नियंत्रण, वॉलेटमधून नाही + +## व्याख्या आणि उदाहरणे {#definitions-and-examples} + +### १. कृतीनंतर प्रतिक्रिया येते {#feedback-follows-action} + +**जेव्हा काहीतरी घडले आहे किंवा घडत आहे, तेव्हा ते स्पष्ट असले पाहिजे.** + +वापरकर्ते त्यांच्या मागील कृतींच्या परिणामावर आधारित पुढील कृती ठरवतात. म्हणून त्यांना सिस्टमच्या स्थितीबद्दल माहिती देत राहणे आवश्यक आहे. Web3 मध्ये हे विशेषतः महत्त्वाचे आहे कारण व्यवहारांना ब्लॉकचेनवर नोंद होण्यासाठी काही वेळा थोडा वेळ लागू शकतो. जर त्यांना थांबायला सांगणारी कोणतीही प्रतिक्रिया नसेल, तर वापरकर्त्यांना काही घडले आहे की नाही याची खात्री नसते. + +**टिपा:** + +- मेसेजिंग, नोटिफिकेशन्स आणि इतर अलर्टद्वारे वापरकर्त्याला माहिती द्या. +- प्रतीक्षा कालावधी स्पष्टपणे कळवा. +- जर एखाद्या कृतीला काही सेकंदांपेक्षा जास्त वेळ लागणार असेल, तर टायमर किंवा ॲनिमेशनद्वारे वापरकर्त्याला दिलासा द्या जेणेकरून त्यांना काहीतरी घडत आहे असे वाटेल. +- जर प्रक्रियेत अनेक पायऱ्या असतील, तर प्रत्येक पायरी दाखवा. + +**उदाहरण:** +व्यवहारात समाविष्ट असलेली प्रत्येक पायरी दाखवल्याने वापरकर्त्यांना ते प्रक्रियेत कोठे आहेत हे जाणून घेण्यास मदत होते. योग्य आयकॉन वापरकर्त्याला त्यांच्या कृतींची स्थिती कळवतात. + +![टोकन स्वॅप करताना वापरकर्त्याला प्रत्येक पायरीबद्दल माहिती देणे](./Image1.png) + +### २. सुरक्षा आणि विश्वास अंतर्भूत आहेत {#security-and-trust-are-backed-in} + +सुरक्षेला प्राधान्य दिले पाहिजे आणि वापरकर्त्यासाठी यावर जोर दिला पाहिजे. +लोकांना त्यांच्या डेटाची खूप काळजी असते. वापरकर्त्यांसाठी सुरक्षितता ही अनेकदा प्राथमिक चिंता असते, म्हणून डिझाइनच्या सर्व स्तरांवर तिचा विचार केला पाहिजे. तुम्ही नेहमी तुमच्या वापरकर्त्यांचा विश्वास मिळवण्याचा प्रयत्न केला पाहिजे, पण तुम्ही हे कसे करता याचा अर्थ वेगवेगळ्या ॲप्सवर वेगळा असू शकतो. तो नंतरचा विचार नसावा, तर संपूर्ण प्रक्रियेत जाणीवपूर्वक डिझाइन केले पाहिजे. अंतिम UI तसेच सोशल चॅनेल आणि डॉक्युमेंटेशनसह संपूर्ण वापरकर्ता अनुभवातून विश्वास निर्माण करा. विकेंद्रीकरणाची पातळी, ट्रेझरी मल्टी-सिग स्थिती आणि टीम डॉक्स आहे की नाही, यासारख्या गोष्टी वापरकर्त्यांच्या विश्वासावर परिणाम करतात + +**टिपा:** + +- तुमच्या ऑडिटची अभिमानाने यादी करा +- अनेक ऑडिट मिळवा +- तुम्ही डिझाइन केलेल्या कोणत्याही सुरक्षा वैशिष्ट्यांची जाहिरात करा +- अंतर्निहित इंटिग्रेशन्ससह संभाव्य धोके ठळकपणे सांगा +- धोरणांची जटिलता कळवा +- तुमच्या वापरकर्त्यांच्या सुरक्षिततेच्या धारणेवर परिणाम करणाऱ्या UI-व्यतिरिक्त समस्यांचा विचार करा + +**उदाहरण:** +फूटरमध्ये तुमचे ऑडिट ठळक आकारात समाविष्ट करा. + +![वेबसाइटच्या फूटरमध्ये संदर्भित ऑडिट](./Image2.png) + +### ३. सर्वात महत्त्वाची माहिती स्पष्ट आहे {#the-most-important-info-is-obvious} + +जटिल प्रणालींसाठी, केवळ सर्वात संबंधित डेटा दाखवा. सर्वात महत्त्वाचे काय आहे ते ठरवा आणि ते दाखवण्यास प्राधान्य द्या. +खूप जास्त माहिती गोंधळात टाकणारी असते आणि वापरकर्ते निर्णय घेताना सहसा माहितीच्या एकाच तुकड्यावर लक्ष केंद्रित करतात. DeFi मध्ये, हे बहुधा यील्ड ॲप्सवर APR आणि लेंडिंग ॲप्सवर LTV असेल. + +**टिपा:** + +- वापरकर्ता संशोधन सर्वात महत्त्वाचे मेट्रिक उघड करेल +- मुख्य माहिती मोठी आणि इतर तपशील लहान आणि नजरेत न भरणारे ठेवा +- लोक वाचत नाहीत, ते स्कॅन करतात; तुमचे डिझाइन स्कॅन करण्यायोग्य असल्याची खात्री करा + +**उदाहरण:** पूर्ण रंगातील मोठे टोकन स्कॅन करताना सहज सापडतात. APR मोठा आहे आणि ॲक्सेंट रंगात हायलाइट केलेला आहे. + +![टोकन आणि APR सहज शोधता येतात](./Image3.png) + +### ४. स्पष्ट परिभाषा {#clear-terminology} + +परिभाषा समजण्यायोग्य आणि योग्य असावी. +तांत्रिक शब्दजाल एक मोठा अडथळा असू शकतो, कारण त्यासाठी पूर्णपणे नवीन मानसिक मॉडेल तयार करणे आवश्यक असते. वापरकर्ते डिझाइनला त्यांना आधीच माहित असलेल्या शब्द, वाक्ये आणि संकल्पनांशी जोडू शकत नाहीत. सर्व काही गोंधळात टाकणारे आणि अपरिचित वाटते, आणि ते वापरण्याचा प्रयत्न करण्याआधीच एक कठीण शिकण्याची प्रक्रिया असते. एक वापरकर्ता काही पैसे वाचवण्याच्या इच्छेने DeFi कडे येऊ शकतो आणि त्याला काय मिळते ते म्हणजे: मायनिंग, फार्मिंग, स्टेकिंग, एमिशन्स, ब्राइब्स, वॉल्ट्स, लॉकर्स, veTokens, वेस्टिंग, इपॉक्स, विकेंद्रीकृत अल्गोरिदम, प्रोटोकॉल-ओन्ड लिक्विडिटी... +असे सोपे शब्द वापरण्याचा प्रयत्न करा जे लोकांच्या सर्वात मोठ्या गटाला समजतील. फक्त तुमच्या प्रोजेक्टसाठी नवीन शब्द तयार करू नका. + +**टिपा:** + +- सोपी आणि सुसंगत परिभाषा वापरा +- शक्य तितकी विद्यमान भाषा वापरा +- तुमचे स्वतःचे शब्द तयार करू नका +- संकेत जसे दिसतील तसे त्यांचे पालन करा +- वापरकर्त्यांना शक्य तितके शिक्षित करा + +**उदाहरण:** +“तुमचे रिवॉर्ड्स” हा एक व्यापकपणे समजला जाणारा, तटस्थ शब्द आहे; या प्रोजेक्टसाठी बनवलेला नवीन शब्द नाही. वास्तविक जगाच्या मानसिक मॉडेलशी जुळण्यासाठी रिवॉर्ड्स USD मध्ये दर्शविले जातात, जरी रिवॉर्ड्स स्वतः दुसऱ्या टोकनमध्ये असले तरी. + +![यू.एस. मध्ये दर्शविलेले टोकन रिवॉर्ड्स डॉलर्स](./Image4.png) + +### ५. कृती शक्य तितक्या लहान असाव्यात {#actions-are-as-short-as-possible} + +उप-कृती एकत्र करून वापरकर्त्याच्या परस्परसंवादाला गती द्या. +हे स्मार्ट कॉन्ट्रॅक्ट स्तरावर तसेच UI मध्ये केले जाऊ शकते. एक सामान्य कृती पूर्ण करण्यासाठी वापरकर्त्याला सिस्टमच्या एका भागातून दुसऱ्या भागात जाण्याची - किंवा सिस्टम पूर्णपणे सोडण्याची गरज पडू नये. + +**टिपा:** + +- शक्य असेल तिथे "Approve" ला इतर कृतींसह एकत्र करा +- स्वाक्षरी करण्याच्या पायऱ्या शक्य तितक्या जवळ एकत्र करा + +**उदाहरण:** “लिक्विडिटी ॲड करणे” आणि “स्टेक करणे” एकत्र करणे हे ॲक्सलरेटरचे एक सोपे उदाहरण आहे जे वापरकर्त्याचा वेळ आणि गॅस दोन्ही वाचवते. + +![डिपॉझिट आणि स्टेक क्रिया एकत्र करण्यासाठी स्विच दर्शवणारा मॉडेल](./Image5.png) + +### 6. नेटवर्क कनेक्शन दृश्यमान आणि लवचिक आहेत {#network-connections-are-visible-and-flexible} + +वापरकर्त्याला ते कोणत्या नेटवर्कशी कनेक्ट आहेत याची माहिती द्या आणि नेटवर्क बदलण्यासाठी स्पष्ट शॉर्टकट प्रदान करा. +मल्टीचेन ॲप्सवर हे विशेषतः महत्त्वाचे आहे. डिस्कनेक्ट असताना किंवा नॉन-सपोर्टेड नेटवर्कशी कनेक्ट असतानाही ॲपची मुख्य कार्ये दृश्यमान असावीत. + +**टिपा:** + +- डिस्कनेक्ट असताना शक्य तितके ॲप दाखवा +- वापरकर्ता सध्या कोणत्या नेटवर्कशी कनेक्ट आहे ते दाखवा +- नेटवर्क बदलण्यासाठी वापरकर्त्याला वॉलेटमध्ये जाऊ देऊ नका +- जर ॲपला वापरकर्त्याला नेटवर्क बदलण्याची आवश्यकता असेल, तर मुख्य कॉल टू ॲक्शनमधून कृतीसाठी प्रॉम्प्ट करा +- जर ॲपमध्ये अनेक नेटवर्कसाठी मार्केट्स किंवा वॉल्ट्स असतील, तर वापरकर्ता सध्या कोणता संच पाहत आहे हे स्पष्टपणे सांगा + +**उदाहरण:** वापरकर्त्याला ते कोणत्या नेटवर्कशी कनेक्ट आहेत ते ॲपबारमध्ये दाखवा आणि त्यांना ते बदलण्याची परवानगी द्या. + +![कनेक्ट केलेले नेटवर्क दर्शविणारे ड्रॉपडाउन बटण](./Image6.png) + +### 7. ॲपमधून नियंत्रण, वॉलेटमधून नाही {#control-from-the-app-not-the-wallet} + +UI ने वापरकर्त्याला त्यांना माहित असणे आवश्यक असलेल्या सर्व गोष्टी सांगाव्यात आणि त्यांना जे काही करायचे आहे त्यावर नियंत्रण द्यावे. +Web3 मध्ये, काही कृती तुम्ही UI मध्ये करता आणि काही कृती तुम्ही वॉलेटमध्ये करता. सामान्यतः, तुम्ही UI मध्ये एक कृती सुरू करता आणि नंतर वॉलेटमध्ये तिची पुष्टी करता. जर हे दोन धागे काळजीपूर्वक एकत्रित केले नाहीत तर वापरकर्त्यांना अस्वस्थ वाटू शकते. + +**टिपा:** + +- UI मधील प्रतिक्रियेद्वारे सिस्टमची स्थिती कळवा +- त्यांच्या इतिहासाची नोंद ठेवा +- जुन्या व्यवहारांसाठी ब्लॉक एक्सप्लोरर्सच्या लिंक प्रदान करा +- नेटवर्क बदलण्यासाठी शॉर्टकट प्रदान करा. + +**उदाहरण:** एक सूक्ष्म कंटेनर वापरकर्त्याला त्यांच्या वॉलेटमध्ये कोणते संबंधित टोकन आहेत हे दाखवतो आणि मुख्य CTA नेटवर्क बदलण्यासाठी एक शॉर्टकट प्रदान करतो. + +![मुख्य CTA वापरकर्त्याला नेटवर्क स्विच करण्यासाठी प्रॉम्प्ट करत आहे](./Image7.png) diff --git a/public/content/translations/mr/developers/docs/design-and-ux/index.md b/public/content/translations/mr/developers/docs/design-and-ux/index.md new file mode 100644 index 00000000000..a2418ec4a95 --- /dev/null +++ b/public/content/translations/mr/developers/docs/design-and-ux/index.md @@ -0,0 +1,86 @@ +--- +title: "वेब3 मध्ये डिझाइन आणि यूएक्स" +description: "वेब3 स्पेस आणि Ethereum मध्ये यूएक्स डिझाइन आणि संशोधनाची ओळख" +lang: mr +--- + +तुम्ही Ethereum सह डिझाइन करण्यासाठी नवीन आहात का? तुमच्यासाठी ही योग्य जागा आहे. Ethereum समुदायाने तुम्हाला वेब3 डिझाइन आणि संशोधनाच्या मूलभूत गोष्टींची ओळख करून देण्यासाठी संसाधने लिहिली आहेत. तुम्ही अशा मुख्य संकल्पनांबद्दल शिकाल ज्या तुम्हाला परिचित असलेल्या इतर ॲप डिझाइनपेक्षा वेगळ्या असू शकतात. + +प्रथम वेब3 ची अधिक मूलभूत माहिती हवी आहे का? [**लर्न हब**](/learn/) पहा. + +## वापरकर्ता संशोधनापासून सुरुवात करा {#start-with-user-research} + +प्रभावी डिझाइन हे केवळ दृष्यदृष्ट्या आकर्षक वापरकर्ता इंटरफेस तयार करण्याच्या पलीकडे जाते. यात वापरकर्त्याच्या गरजा, उद्दिष्ट्ये आणि प्रेरक घटकांची सखोल समज मिळवणे समाविष्ट आहे. म्हणून, आम्ही सर्व डिझाइनर्सना जोरदार शिफारस करतो की त्यांनी त्यांचे कार्य विचारपूर्वक आणि हेतुपुरस्सर आहे हे सुनिश्चित करण्यासाठी, [**डबल डायमंड प्रक्रियेसारखी**](https://en.wikipedia.org/wiki/Double_Diamond_\(design_process_model\)) डिझाइन प्रक्रिया स्वीकारावी. + +- [वेब3 ला अधिक यूएक्स संशोधक आणि डिझाइनर्सची गरज आहे](https://blog.akasha.org/akasha-conversations-9-web3-needs-more-ux-researchers-and-designers) - सध्याच्या डिझाइन परिपक्वतेचा आढावा +- [वेब3 मधील यूएक्स संशोधनासाठी एक सोपा मार्गदर्शक](https://uxplanet.org/a-complete-guide-to-ux-research-for-web-3-0-products-d6bead20ebb1) - संशोधन कसे करावे यासाठी सोपा मार्गदर्शक +- [वेब3 मध्ये यूएक्स निर्णय कसे घ्यावेत](https://archive.devcon.org/archive/watch/6/data-empathy-how-to-approach-ux-decisions-in-web3/) - संख्यात्मक आणि गुणात्मक संशोधनाचा आणि दोघांमधील फरकांचा संक्षिप्त आढावा (व्हिडिओ, 6 मिनिटे) +- [वेब3 मध्ये यूएक्स संशोधक असणे](https://medium.com/@georgia.rakusen/what-its-like-being-a-user-researcher-in-web3-6a4bcc096849) - वेब3 मध्ये यूएक्स संशोधक असण्याचा अनुभव कसा असतो यावर एक वैयक्तिक दृष्टिकोन + +## वेब3 मधील संशोधन अभ्यास {#research-in-web3} + +ही वेब3 मध्ये केलेल्या वापरकर्ता संशोधनाची एक क्युरेट केलेली यादी आहे जी डिझाइन आणि उत्पादन निर्णयांमध्ये मदत करू शकते किंवा स्वतःचा अभ्यास करण्यासाठी प्रेरणा म्हणून काम करू शकते. + +| लक्ष केंद्रित करण्याचे क्षेत्र | नाव | +| :-------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| क्रिप्टो ऑनबोर्डिंग | [द रिओन पल्स 2024: क्रिप्टो ग्राहक भावना आणि वापर](https://reown.com/blog/unveiling-walletconnects-consumer-crypto-report) | +| क्रिप्टो ऑनबोर्डिंग | [CRADL: क्रिप्टोकरन्सीमधील यूएक्स](https://docs.google.com/presentation/d/1s2OPSH5sMJzxRYaJSSRTe8W2iIoZx0PseIV-WeZWD1s/edit?usp=sharing) | +| क्रिप्टो ऑनबोर्डिंग | [CRADL: क्रिप्टोकरन्सीसाठी ऑनबोर्डिंग](https://docs.google.com/presentation/d/1R9nFuzA-R6SxaGCKhoMbE4Vxe0JxQSTiHXind3LVq_w/edit?usp=sharing) | +| क्रिप्टो ऑनबोर्डिंग | [Bitcoin यूएक्स अहवाल](https://github.com/patestevao/BitcoinUX-report/blob/master/report.md) | +| क्रिप्टो ऑनबोर्डिंग | [ConSensys: जगभरातील वेब3 धारणाची स्थिती 2023](https://consensys.io/insight-report/web3-and-crypto-global-survey-2023) | +| क्रिप्टो ऑनबोर्डिंग | [NEAR: दत्तक घेण्याच्या दिशेने प्रवास वेगवान करणे](https://drive.google.com/file/d/1VuaQP4QSaQxR5ddQKTMGI0b0rWdP7uGn/view) | +| स्टेकिंग | [OpenUX: रॉकेट पूल नोड ऑपरेटर यूएक्स](https://storage.googleapis.com/rocketpool/RocketPool-NodeOperator-UX-Report-Jan-2024.pdf) | +| स्टेकिंग | [स्टेकिंग: मुख्य ट्रेंड, टेकअवे आणि अंदाज - Eth स्टेकर](https://lookerstudio.google.com/u/0/reporting/cafcee00-e1af-4148-bae8-442a88ac75fa/page/p_ja2srdhh2c?s=hmbTWDh9hJo) | +| स्टेकिंग | [मल्टी ॲप स्टेकिंग](https://github.com/threshold-network/UX-User-Research/blob/main/Multi-App%20Staking%20\(MAS\)/iterative-user-study/MAS%20Iterative%20User%20Study.pdf) | +| DAO | [2022 DAO संशोधन अपडेट: DAO बिल्डर्सना कशाची गरज आहे?](https://blog.aragon.org/2022-dao-research-update/) | +| DeFi | [कव्हरेज पूल](https://github.com/threshold-network/UX-User-Research/tree/main/Keep%20Coverage%20Pool) | +| DeFi | [ConSensys: DeFi वापरकर्ता संशोधन अहवाल 2022](https://cdn2.hubspot.net/hubfs/4795067/ConsenSys%20Codefi-Defi%20User%20ResearchReport.pdf) | +| मेटाव्हर्स | [मेटाव्हर्स: वापरकर्ता संशोधन अहवाल](https://www.politico.com/f/?id=00000187-7685-d820-a7e7-7e85d1420000) | +| मेटाव्हर्स | [सफारीवर जात आहे: मेटाव्हर्समधील वापरकर्त्यांचे संशोधन](https://archive.devcon.org/archive/watch/6/going-on-safari-researching-users-in-the-metaverse/?tab=YouTube) (व्हिडिओ, 27 मिनिटे) | + +## वेब3 साठी डिझाइन {#design-for-web3} + +- [वेब3 यूएक्स डिझाइन हँडबुक](https://web3ux.design/) - वेब3 ॲप्स डिझाइन करण्यासाठी व्यावहारिक मार्गदर्शक +- [वेब3 डिझाइनची तत्त्वे](https://medium.com/@lyricalpolymath/web3-design-principles-f21db2f240c1) - ब्लॉकचेन-आधारित dapps साठी यूएक्स नियमांची एक चौकट +- [ब्लॉकचेन डिझाइनची तत्त्वे](https://medium.com/design-ibm/blockchain-design-principles-599c5c067b6e) - IBM मधील ब्लॉकचेन डिझाइन टीमने शिकलेले धडे +- [Neueux.com](https://neueux.com/apps) - विविध फिल्टरिंग पर्यायांसह वापरकर्ता प्रवाहांची यूआय लायब्ररी +- [वेब3 चे उपयोगिता संकट: तुम्हाला काय माहित असणे आवश्यक आहे!](https://www.youtube.com/watch?v=oBSXT_6YDzg) - डेव्हलपर-केंद्रित प्रोजेक्ट बिल्डिंगच्या त्रुटींवर एक पॅनेल चर्चा (व्हिडिओ, 34 मिनिटे) + +## सुरुवात करणे {#getting-started} + +- [वेब3 साठी ह्युरिस्टिक्स](/developers/docs/design-and-ux/heuristics-for-web3/) - वेब3 इंटरफेस डिझाइनसाठी 7 ह्युरिस्टिक्स +- [DEX डिझाइन सर्वोत्तम पद्धती](/developers/docs/design-and-ux/dex-design-best-practice/) - विकेंद्रीकृत एक्सचेंज डिझाइन करण्यासाठी एक मार्गदर्शक + +## वेब3 डिझाइन केस स्टडीज {#design-case-studies} + +- [Deep Work Studio](https://www.deepwork.studio/case-studies) +- [OpenSea वर एनएफटी विकणे](https://builtformars.com/case-studies/opensea) +- [वॉलेट यूएक्स टियरडाउन: वॉलेट्सना कसे बदलण्याची गरज आहे](https://www.youtube.com/watch?v=oTpuxYj8JWI&ab_channel=ETHDenver) (व्हिडिओ, 20 मिनिटे) + +## डिझाइन बाउंटीज {#bounties} + +- [Dework](https://app.dework.xyz/bounties) +- [बिल्डबॉक्स हॅकथॉन्स](https://app.buidlbox.io/) +- [ETHGlobal हॅकथॉन्स](https://ethglobal.com/) + +## डिझाइन DAO आणि समुदाय {#design-daos-and-communities} + +व्यावसायिक समुदाय-चालित संस्थांमध्ये सामील व्हा किंवा इतर सदस्यांसह डिझाइन आणि संशोधनाशी संबंधित विषय आणि ट्रेंडवर चर्चा करण्यासाठी डिझाइन गटांमध्ये सामील व्हा. + +- [Vectordao.com](https://vectordao.com/) +- [Deepwork.studio](https://www.deepwork.studio/) +- [We3.co](https://we3.co/) +- [Openux.xyz](https://openux.xyz/) + +## डिझाइन सिस्टीम आणि इतर डिझाइन संसाधने {#design-systems-and-resources} + +- [Optimism डिझाइन](https://www.figma.com/@optimism) (Figma) +- [Ethereum.org डिझाइन सिस्टीम](https://www.figma.com/@ethdotorg) (Figma) +- [फिनिटी, पॉलीगॉनची एक डिझाइन सिस्टीम](https://www.figma.com/community/file/1073921725197233598/finity-design-system) (Figma) +- [क्लेरोस डिझाइन सिस्टीम](https://www.figma.com/community/file/999852250110186964/kleros-design-system) (Figma) +- [सेफ डिझाइन सिस्टीम](https://www.figma.com/community/file/1337417127407098506/safe-design-system) (Figma) +- [ENS डिझाइन सिस्टीम](https://thorin.ens.domains/) +- [मिरर डिझाइन सिस्टीम](https://degen-xyz.vercel.app/) + +**या पृष्ठावर सूचीबद्ध केलेले लेख आणि प्रकल्प अधिकृत समर्थन नाहीत**, आणि केवळ माहितीच्या उद्देशाने प्रदान केले आहेत. +आम्ही आमच्या [सूचीकरण धोरणातील](/contributing/design/adding-design-resources) निकषांवर आधारित या पृष्ठावर दुवे जोडतो. तुम्हाला एखादा प्रकल्प/लेख जोडायचा असल्यास, [GitHub](https://github.com/ethereum/ethereum-org-website/blob/dev/public/content/developers/docs/design-and-ux/index.md) वर हे पृष्ठ संपादित करा. diff --git a/public/content/translations/mr/developers/docs/development-networks/index.md b/public/content/translations/mr/developers/docs/development-networks/index.md new file mode 100644 index 00000000000..5dad0544fda --- /dev/null +++ b/public/content/translations/mr/developers/docs/development-networks/index.md @@ -0,0 +1,71 @@ +--- +title: "विकास नेटवर्क" +description: "विकास नेटवर्क आणि Ethereum ॲप्लिकेशन्स तयार करण्यात मदत करण्यासाठी उपलब्ध साधनांचे एक अवलोकन." +lang: mr +--- + +स्मार्ट कॉन्ट्रॅक्ट्ससह Ethereum ॲप्लिकेशन तयार करताना, ते कसे काम करते हे पाहण्यासाठी, तुम्ही ते तैनात करण्यापूर्वी स्थानिक नेटवर्कवर चालवू इच्छित असाल. + +ज्याप्रमाणे तुम्ही वेब डेव्हलपमेंटसाठी तुमच्या संगणकावर स्थानिक सर्व्हर चालवू शकता, त्याचप्रमाणे तुम्ही तुमच्या dapp ची चाचणी घेण्यासाठी स्थानिक ब्लॉकचेन इन्स्टन्स तयार करण्याकरिता विकास नेटवर्क वापरू शकता. हे Ethereum विकास नेटवर्क अशी वैशिष्ट्ये प्रदान करतात जे सार्वजनिक टेस्टनेटपेक्षा खूप जलद पुनरावृत्ती करण्यास परवानगी देतात (उदाहरणार्थ तुम्हाला टेस्टनेट फॉसेटमधून ETH मिळवण्याची गरज नाही). + +## पूर्वतयारी {#prerequisites} + +विकास नेटवर्कमध्ये जाण्यापूर्वी, तुम्ही [Ethereum स्टॅकची मूलभूत माहिती](/developers/docs/ethereum-stack/) आणि [Ethereum नेटवर्क्स](/developers/docs/networks/) समजून घेतले पाहिजे. + +## विकास नेटवर्क म्हणजे काय? {#what-is-a-development-network} + +विकास नेटवर्क हे मूलत: Ethereum क्लायंट (Ethereum ची अंमलबजावणी) आहेत जे विशेषतः स्थानिक विकासासाठी डिझाइन केलेले आहेत. + +**स्थानिक पातळीवर प्रमाणित Ethereum नोड का चालवू नये?** + +तुम्ही [नोड चालवू](/developers/docs/nodes-and-clients/#running-your-own-node) _शकता_ परंतु विकास नेटवर्क विकासासाठीच तयार केलेले असल्यामुळे, ते अनेकदा सोयीस्कर वैशिष्ट्यांसह येतात जसे की: + +- तुमच्या स्थानिक ब्लॉकचेनला डेटासह (उदा. ETH शिल्लक असलेली खाती) निश्चितपणे सीड करणे +- मिळणाऱ्या प्रत्येक व्यवहारासह त्वरित, क्रमाने आणि कोणत्याही विलंबाशिवाय ब्लॉक्स तयार करणे +- वर्धित डीबगिंग आणि लॉगिंग कार्यक्षमता + +## उपलब्ध साधने {#available-projects} + +**टीप**: बहुतेक [विकास फ्रेमवर्कमध्ये](/developers/docs/frameworks/) अंगभूत विकास नेटवर्क समाविष्ट असते. तुमचे स्थानिक विकास वातावरण [सेट अप करण्यासाठी](/developers/local-environment/) आम्ही फ्रेमवर्कने सुरुवात करण्याची शिफारस करतो. + +### Hardhat नेटवर्क {#hardhat-network} + +विकासासाठी डिझाइन केलेले एक स्थानिक Ethereum नेटवर्क. हे तुम्हाला तुमचे कॉन्ट्रॅक्ट्स तैनात करण्यास, तुमच्या चाचण्या चालवण्यास आणि तुमचा कोड डीबग करण्यास अनुमती देते. + +Hardhat नेटवर्क हे Hardhat सोबत अंगभूत येते, जे व्यावसायिकांसाठी एक Ethereum विकास वातावरण आहे. + +- [वेबसाइट](https://hardhat.org/) +- [GitHub](https://github.com/NomicFoundation/hardhat) + +### स्थानिक बीकन चेन्स {#local-beacon-chains} + +काही कन्सेन्सस क्लायंट्सकडे चाचणीच्या उद्देशाने स्थानिक बीकन चेन्स सुरू करण्यासाठी अंगभूत साधने आहेत. Lighthouse, Nimbus आणि Lodestar साठी सूचना उपलब्ध आहेत: + +- [Lodestar वापरून स्थानिक टेस्टनेट](https://chainsafe.github.io/lodestar/contribution/advanced-topics/setting-up-a-testnet#post-merge-local-testnet/) +- [Lighthouse वापरून स्थानिक टेस्टनेट](https://lighthouse-book.sigmaprime.io/setup.html#local-testnets) + +### सार्वजनिक Ethereum टेस्ट-चेन्स {#public-beacon-testchains} + +Ethereum च्या दोन सार्वजनिक चाचणी अंमलबजावणी देखील आहेत: Sepolia आणि Hoodi. दीर्घकालीन समर्थनासह शिफारस केलेले टेस्टनेट Hoodi आहे, ज्यावर कोणीही प्रमाणित करण्यास स्वतंत्र आहे. Sepolia एक परवानगी असलेला व्हॅलिडेटर सेट वापरते, याचा अर्थ या टेस्टनेटवर नवीन व्हॅलिडेटर्ससाठी सामान्य प्रवेश नाही. + +- [Hoodi स्टिकिंग लॉन्चपॅड](https://hoodi.launchpad.ethereum.org/) + +### Kurtosis Ethereum पॅकेज {#kurtosis} + +Kurtosis ही मल्टी-कंटेनर चाचणी वातावरणासाठी एक बिल्ड सिस्टम आहे जी विकासकांना स्थानिक पातळीवर ब्लॉकचेन नेटवर्कचे पुनरुत्पादक इन्स्टन्स सुरू करण्यास सक्षम करते. + +Ethereum Kurtosis पॅकेजचा वापर Docker किंवा Kubernetes वर पॅरामिटरायझ करण्यायोग्य, अत्यंत स्केलेबल आणि खाजगी Ethereum टेस्टनेट त्वरित सुरू करण्यासाठी केला जाऊ शकतो. हे पॅकेज सर्व प्रमुख एक्झिक्युशन लेयर (EL) आणि कन्सेन्सस लेयर (CL) क्लायंट्सना समर्थन देते. Kurtosis Ethereum कोर इन्फ्रास्ट्रक्चरशी संबंधित व्हॅलिडेशन आणि टेस्टिंग वर्कफ्लोमध्ये वापरण्यासाठी प्रतिनिधी नेटवर्कसाठी सर्व स्थानिक पोर्ट मॅपिंग आणि सर्व्हिस कनेक्शन सुरेखपणे हाताळते. + +- [Ethereum नेटवर्क पॅकेज](https://github.com/kurtosis-tech/ethereum-package) +- [वेबसाइट](https://www.kurtosis.com/) +- [GitHub](https://github.com/kurtosis-tech/kurtosis) +- [डॉक्युमेंटेशन](https://docs.kurtosis.com/) + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [डेव्हलपमेंट फ्रेमवर्क्स](/developers/docs/frameworks/) +- [स्थानिक विकास वातावरण सेट अप करा](/developers/local-environment/) diff --git a/public/content/translations/mr/developers/docs/ethereum-stack/index.md b/public/content/translations/mr/developers/docs/ethereum-stack/index.md new file mode 100644 index 00000000000..62700fa0270 --- /dev/null +++ b/public/content/translations/mr/developers/docs/ethereum-stack/index.md @@ -0,0 +1,61 @@ +--- +title: "इथेरियम स्टॅकची ओळख" +description: "इथेरियम स्टॅकच्या विविध स्तरांचा आढावा आणि ते एकत्र कसे जुळतात." +lang: mr +--- + +कोणत्याही सॉफ्टवेअर स्टॅकप्रमाणे, संपूर्ण "इथेरियम स्टॅक" तुमच्या ध्येयांनुसार प्रोजेक्ट-दर-प्रोजेक्ट बदलू शकतो. + +तथापि, इथेरियमचे काही मुख्य घटक आहेत जे सॉफ्टवेअर ॲप्लिकेशन्स इथेरियम ब्लॉकचेनशी कसे संवाद साधतात याचे मानसिक मॉडेल प्रदान करण्यात मदत करतात. स्टॅकचे स्तर समजून घेतल्यास, इथेरियमला सॉफ्टवेअर प्रोजेक्ट्समध्ये कोणत्या विविध मार्गांनी एकत्रित केले जाऊ शकते हे समजण्यास तुम्हाला मदत होईल. + +## स्तर 1: इथेरियम व्हर्च्युअल मशीन {#ethereum-virtual-machine} + +[इथेरियम व्हर्च्युअल मशीन (EVM)](/developers/docs/evm/) हे इथेरियमवरील स्मार्ट कॉन्ट्रॅक्ट्ससाठी रनटाइम एन्व्हायरनमेंट आहे. इथेरियम ब्लॉकचेनवरील सर्व स्मार्ट कॉन्ट्रॅक्ट्स आणि स्टेटमधील बदल [ट्रान्झॅक्शन्स](/developers/docs/transactions/) द्वारे कार्यान्वित केले जातात. EVM इथेरियम नेटवर्कवरील सर्व ट्रान्झॅक्शन प्रोसेसिंग हाताळते. + +कोणत्याही व्हर्च्युअल मशीनप्रमाणे, EVM कार्यान्वित होणाऱ्या कोड आणि कार्यान्वित करणाऱ्या मशीन (एक इथेरियम नोड) यांच्यामध्ये अमूर्ततेचा एक स्तर तयार करते. सध्या, EVM जगभर वितरित असलेल्या हजारो नोड्सवर चालत आहे. + +आंतरिकरित्या, EVM विशिष्ट कार्ये कार्यान्वित करण्यासाठी ऑपकोड निर्देशांचा एक संच वापरते. हे (140 अद्वितीय) ऑपकोड्स EVM ला [ट्युरिंग-कम्प्लीट](https://en.wikipedia.org/wiki/Turing_completeness) बनवतात, याचा अर्थ पुरेशी संसाधने दिल्यास EVM जवळजवळ कोणतीही गणना करण्यास सक्षम आहे. + +एक डॅप डेव्हलपर म्हणून, तुम्हाला EVM बद्दल जास्त काही जाणून घेण्याची आवश्यकता नाही, फक्त हे की ते अस्तित्वात आहे आणि ते डाउनटाइमशिवाय इथेरियमवरील सर्व ॲप्लिकेशन्सना विश्वसनीयरित्या शक्ती देते. + +## स्तर 2: स्मार्ट कॉन्ट्रॅक्ट्स {#smart-contracts} + +[स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) हे कार्यान्वित करण्यायोग्य प्रोग्राम्स आहेत जे इथेरियम ब्लॉकचेनवर चालतात. + +स्मार्ट कॉन्ट्रॅक्ट्स विशिष्ट [प्रोग्रामिंग भाषा](/developers/docs/smart-contracts/languages/) वापरून लिहिले जातात, जे EVM बाईटकोडमध्ये (ऑपकोड्स नावाचे निम्न-स्तरीय मशीन निर्देश) कंपाइल होतात. + +स्मार्ट कॉन्ट्रॅक्ट्स केवळ ओपन सोर्स लायब्ररी म्हणूनच काम करत नाहीत, तर ते मूलतः ओपन API सेवा आहेत ज्या नेहमी चालू असतात आणि बंद केल्या जाऊ शकत नाहीत. स्मार्ट कॉन्ट्रॅक्ट्स सार्वजनिक फंक्शन्स प्रदान करतात ज्यांच्याशी वापरकर्ते आणि ॲप्लिकेशन्स ([डॅप्स](/developers/docs/dapps/)) परवानगीशिवाय संवाद साधू शकतात. कोणतेही ॲप्लिकेशन कार्यक्षमता तयार करण्यासाठी तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्ट्ससह एकत्रित होऊ शकते, जसे की [डेटा फीड](/developers/docs/oracles/) जोडणे किंवा टोकन स्वॅपला सपोर्ट देणे. याव्यतिरिक्त, त्यांच्या ॲप्लिकेशनच्या गरजा पूर्ण करण्यासाठी सानुकूल कार्यक्षमता जोडण्याकरिता कोणीही इथेरियमवर नवीन स्मार्ट कॉन्ट्रॅक्ट्स तैनात करू शकतो. + +एक डॅप डेव्हलपर म्हणून, तुम्हाला इथेरियम ब्लॉकचेनवर सानुकूल कार्यक्षमता जोडायची असेल तरच स्मार्ट कॉन्ट्रॅक्ट्स लिहिण्याची आवश्यकता असेल. तुम्हाला आढळेल की तुम्ही तुमच्या प्रोजेक्टच्या बहुतेक किंवा सर्व गरजा केवळ विद्यमान स्मार्ट कॉन्ट्रॅक्ट्ससह एकत्रित करून पूर्ण करू शकता, उदाहरणार्थ जर तुम्हाला स्टेबलकॉइन्समधील पेमेंटला सपोर्ट करायचा असेल किंवा टोकन्सची विकेंद्रित देवाणघेवाण सक्षम करायची असेल. + +## स्तर 3: इथेरियम नोड्स {#ethereum-nodes} + +एखाद्या ॲप्लिकेशनला इथेरियम ब्लॉकचेनशी संवाद साधण्यासाठी, त्याला [इथेरियम नोड](/developers/docs/nodes-and-clients/) शी कनेक्ट होणे आवश्यक आहे. नोडशी कनेक्ट केल्याने तुम्हाला ब्लॉकचेन डेटा वाचता येतो आणि/किंवा नेटवर्कवर ट्रान्झॅक्शन्स पाठवता येतात. + +इथेरियम नोड्स हे सॉफ्टवेअर चालवणारे संगणक आहेत - एक इथेरियम क्लायंट. क्लायंट हे इथेरियमचे असे अंमलबजावणी आहे जे प्रत्येक ब्लॉकमधील सर्व ट्रान्झॅक्शन्सची पडताळणी करते, नेटवर्क सुरक्षित आणि डेटा अचूक ठेवते. **इथेरियम नोड्स म्हणजेच इथेरियम ब्लॉकचेन**. ते एकत्रितपणे इथेरियम ब्लॉकचेनची स्टेट संग्रहित करतात आणि ब्लॉकचेन स्टेटमध्ये बदल करण्यासाठी ट्रान्झॅक्शन्सवर एकमत साधतात. + +तुमच्या ॲप्लिकेशनला इथेरियम नोडशी ([JSON-RPC API](/developers/docs/apis/json-rpc/) द्वारे) कनेक्ट करून, तुमचे ॲप्लिकेशन ब्लॉकचेनमधून डेटा वाचू शकते (जसे की वापरकर्त्याच्या खात्यातील शिल्लक) तसेच नेटवर्कवर नवीन ट्रान्झॅक्शन्स प्रसारित करू शकते (जसे की वापरकर्ता खात्यांमध्ये ETH हस्तांतरित करणे किंवा स्मार्ट कॉन्ट्रॅक्ट्सची फंक्शन्स कार्यान्वित करणे). + +## स्तर 4: इथेरियम क्लायंट APIs {#ethereum-client-apis} + +अनेक सोयीस्कर लायब्ररी (इथेरियमच्या ओपन सोर्स समुदायाद्वारे तयार केलेल्या आणि सांभाळलेल्या) तुमच्या ॲप्लिकेशन्सना इथेरियम ब्लॉकचेनशी कनेक्ट करण्याची आणि संवाद साधण्याची परवानगी देतात. + +जर तुमचे वापरकर्त्यासमोरचे ॲप्लिकेशन वेब ॲप असेल, तर तुम्ही तुमच्या फ्रंटएंडमध्ये थेट [JavaScript API](/developers/docs/apis/javascript/) `npm install` करणे निवडू शकता. किंवा कदाचित तुम्ही [Python](/developers/docs/programming-languages/python/) किंवा [Java](/developers/docs/programming-languages/java/) API वापरून ही कार्यक्षमता सर्व्हर-साइडला लागू करणे निवडाल. + +हे APIs स्टॅकचा आवश्यक भाग नसले तरी, ते इथेरियम नोडशी थेट संवाद साधण्यामधील बरीचशी गुंतागुंत दूर करतात. ते युटिलिटी फंक्शन्स (उदा. ETH चे Gwei मध्ये रूपांतर करणे) देखील प्रदान करतात, त्यामुळे एक डेव्हलपर म्हणून तुम्ही इथेरियम क्लायंटच्या गुंतागुंतीला सामोरे जाण्यात कमी वेळ घालवू शकता आणि तुमच्या ॲप्लिकेशनसाठी विशिष्ट कार्यक्षमतेवर अधिक लक्ष केंद्रित करू शकता. + +## स्तर 5: अंतिम-वापरकर्ता ॲप्लिकेशन्स {#end-user-applications} + +स्टॅकच्या सर्वात वरच्या स्तरावर वापरकर्त्यासमोरचे ॲप्लिकेशन्स आहेत. हे तेच मानक ॲप्लिकेशन्स आहेत जे तुम्ही आज नियमितपणे वापरता आणि तयार करता: प्रामुख्याने वेब आणि मोबाईल ॲप्स. + +तुम्ही हे युझर इंटरफेस विकसित करण्याची पद्धत मूलतः अपरिवर्तित राहते. अनेकदा वापरकर्त्यांना हे जाणून घेण्याची आवश्यकता नसते की ते वापरत असलेले ॲप्लिकेशन ब्लॉकचेन वापरून तयार केले आहे. + +## तुमचा स्टॅक निवडण्यासाठी तयार आहात? {#ready-to-choose-your-stack} + +तुमच्या इथेरियम ॲप्लिकेशनसाठी [स्थानिक विकास पर्यावरण सेट करण्यासाठी](/developers/local-environment/) आमचे मार्गदर्शक पहा. + +## पुढील वाचन {#further-reading} + +- [वेब 3.0 ॲप्लिकेशनची रचना](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _प्रीती कासिरेड्डी_ + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/evm/index.md b/public/content/translations/mr/developers/docs/evm/index.md new file mode 100644 index 00000000000..564ec0ef25d --- /dev/null +++ b/public/content/translations/mr/developers/docs/evm/index.md @@ -0,0 +1,88 @@ +--- +title: "इथेरियम व्हर्च्युअल मशीन (EVM)" +description: "इथेरियम व्हर्च्युअल मशीनचा परिचय आणि ते स्थिती, व्यवहार आणि स्मार्ट कॉन्ट्रॅक्ट्सशी कसे संबंधित आहे." +lang: mr +--- + +इथेरियम व्हर्च्युअल मशीन (EVM) हे एक विकेंद्रित आभासी पर्यावरण आहे जे सर्व इथेरियम नोड्सवर सातत्याने आणि सुरक्षितपणे कोड कार्यान्वित करते. नोड्स स्मार्ट कॉन्ट्रॅक्ट्स कार्यान्वित करण्यासाठी EVM चालवतात, [ऑपरेशन्स](/developers/docs/evm/opcodes/) साठी आवश्यक संगणकीय प्रयत्नांचे मोजमाप करण्यासाठी "[गॅस](/developers/docs/gas/)" वापरतात, ज्यामुळे कार्यक्षम संसाधन वाटप आणि नेटवर्क सुरक्षा सुनिश्चित होते. + +## पूर्वतयारी {#prerequisites} + +EVM समजून घेण्यासाठी संगणक विज्ञानातील [बाईट्स](https://wikipedia.org/wiki/Byte), [मेमरी](https://wikipedia.org/wiki/Computer_memory), आणि [स्टॅक](https://wikipedia.org/wiki/Stack_\(abstract_data_type\)) यासारख्या सामान्य शब्दावलीची काही मूलभूत माहिती असणे आवश्यक आहे. [हॅश फंक्शन्स](https://wikipedia.org/wiki/Cryptographic_hash_function) आणि [मर्केल ट्री](https://wikipedia.org/wiki/Merkle_tree) यांसारख्या क्रिप्टोग्राफी/ब्लॉकचेन संकल्पनांशी परिचित असणे देखील उपयुक्त ठरेल. + +## लेजरपासून स्टेट मशीनपर्यंत {#from-ledger-to-state-machine} + +'वितरित लेजर' हे साधर्म्य अनेकदा Bitcoin सारख्या ब्लॉकचेनचे वर्णन करण्यासाठी वापरले जाते, जे क्रिप्टोग्राफीची मूलभूत साधने वापरून विकेंद्रित चलन सक्षम करतात. लेजर क्रियाकलापांची नोंद ठेवते, ज्याला अशा नियमांच्या संचाचे पालन करणे आवश्यक आहे, जे लेजरमध्ये बदल करण्यासाठी एखादी व्यक्ती काय करू शकते आणि काय करू शकत नाही हे नियंत्रित करतात. उदाहरणार्थ, एक Bitcoin पत्ता त्याला पूर्वी मिळालेल्या Bitcoin पेक्षा जास्त Bitcoin खर्च करू शकत नाही. हे नियम Bitcoin आणि इतर अनेक ब्लॉकचेनवरील सर्व व्यवहारांना आधार देतात. + +इथेरियमचे स्वतःचे मूळ क्रिप्टोकरन्सी (इथर) असले तरी, जे जवळजवळ समान अंतर्ज्ञानी नियमांचे पालन करते, ते एक अधिक शक्तिशाली कार्य देखील सक्षम करते: [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/). या अधिक जटिल वैशिष्ट्यासाठी, अधिक अत्याधुनिक साधर्म्याची आवश्यकता आहे. वितरित लेजरऐवजी, इथेरियम एक वितरित [स्टेट मशीन](https://wikipedia.org/wiki/Finite-state_machine) आहे. इथेरियमची स्थिती ही एक मोठी डेटा रचना आहे जी केवळ सर्व खाती आणि शिल्लकच नाही, तर एक _मशीन स्थिती_ देखील ठेवते, जी पूर्वनिर्धारित नियमांनुसार ब्लॉक ते ब्लॉक बदलू शकते आणि जी कोणताही मशीन कोड कार्यान्वित करू शकते. ब्लॉक ते ब्लॉक स्थिती बदलण्याचे विशिष्ट नियम EVM द्वारे परिभाषित केले जातात. + +![EVM ची रचना दर्शविणारा एक आकृती](./evm.png) +_[इथेरियम EVM सचित्र](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रुपांतरित आकृती_ + +## इथेरियम स्टेट ट्रान्झिशन फंक्शन {#the-ethereum-state-transition-function} + +EVM गणितीय कार्याप्रमाणे वागते: इनपुट दिल्यावर, ते एक निश्चित आउटपुट तयार करते. त्यामुळे इथेरियमचे अधिक औपचारिकपणे **स्टेट ट्रान्झिशन फंक्शन** म्हणून वर्णन करणे खूप उपयुक्त आहे: + +``` +Y(S, T)= S' +``` + +एक जुनी वैध स्थिती `(S)` आणि वैध व्यवहारांचा नवीन संच `(T)` दिल्यास, इथेरियम स्टेट ट्रान्झिशन फंक्शन `Y(S, T)` एक नवीन वैध आउटपुट स्थिती `S'` तयार करते + +### स्थिती {#state} + +इथेरियमच्या संदर्भात, स्थिती ही [सुधारित मर्केल पॅट्रिशिया ट्राय](/developers/docs/data-structures-and-encoding/patricia-merkle-trie/) नावाची एक प्रचंड डेटा रचना आहे, जी सर्व [खाती](/developers/docs/accounts/) हॅशद्वारे जोडलेली ठेवते आणि ब्लॉकचेनवर संग्रहित एकाच रूट हॅशमध्ये कमी करता येते. + +### व्यवहार {#transactions} + +व्यवहार हे खात्यांमधून क्रिप्टोग्राफिकली स्वाक्षरी केलेल्या सूचना आहेत. दोन प्रकारचे व्यवहार आहेत: ज्यामुळे मेसेज कॉल्स होतात आणि ज्यामुळे कॉन्ट्रॅक्ट निर्मिती होते. + +कॉन्ट्रॅक्ट निर्मितीमुळे एक नवीन कॉन्ट्रॅक्ट खाते तयार होते ज्यामध्ये संकलित [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/anatomy/) बायटकोड असतो. जेव्हा दुसरे खाते त्या कॉन्ट्रॅक्टला मेसेज कॉल करते, तेव्हा ते त्याचा बायटकोड कार्यान्वित करते. + +## EVM सूचना {#evm-instructions} + +EVM एक [स्टॅक मशीन](https://wikipedia.org/wiki/Stack_machine) म्हणून कार्यान्वित होते ज्याची खोली 1024 आयटम आहे. प्रत्येक आयटम एक 256-बिट शब्द आहे, जो 256-बिट क्रिप्टोग्राफीसह (जसे की Keccak-256 हॅश किंवा secp256k1 स्वाक्षरी) वापरण्याच्या सुलभतेसाठी निवडला गेला होता. + +अंमलबजावणी दरम्यान, EVM एक क्षणिक _मेमरी_ (शब्द-पत्ता असलेल्या बाइट ॲरे म्हणून) ठेवते, जी व्यवहारांमध्ये टिकत नाही. + +### क्षणिक स्टोरेज + +क्षणिक स्टोरेज हे प्रति-व्यवहार की-व्हॅल्यू स्टोअर आहे, जे `TSTORE` आणि `TLOAD` ऑपकोड्सद्वारे ऍक्सेस केले जाते. हे त्याच व्यवहारादरम्यान सर्व अंतर्गत कॉल्समध्ये टिकते, पण व्यवहाराच्या शेवटी साफ केले जाते. मेमरीच्या विपरीत, क्षणिक स्टोरेजला एक्झिक्यूशन फ्रेमऐवजी EVM स्थितीचा भाग म्हणून मॉडेल केले आहे, तरीही ते जागतिक स्थितीसाठी वचनबद्ध नाही. क्षणिक स्टोरेज व्यवहारादरम्यान अंतर्गत कॉल्समध्ये गॅस-कार्यक्षम तात्पुरती स्थिती शेअरिंग सक्षम करते. + +### स्टोरेज + +कॉन्ट्रॅक्ट्समध्ये एक मर्केल पॅट्रिशिया _स्टोरेज_ ट्राय (एक शब्द-पत्ता असलेला शब्द ॲरे म्हणून) असतो, जो संबंधित खात्याशी जोडलेला आणि जागतिक स्थितीचा भाग असतो. हे कायमस्वरूपी स्टोरेज क्षणिक स्टोरेजपेक्षा वेगळे आहे, जे फक्त एका व्यवहाराच्या कालावधीसाठी उपलब्ध असते आणि खात्याच्या कायमस्वरूपी स्टोरेज ट्रायचा भाग बनत नाही. + +### ऑपकोड्स + +संकलित स्मार्ट कॉन्ट्रॅक्ट बायटकोड अनेक EVM [ऑपकोड्स](/developers/docs/evm/opcodes) म्हणून कार्यान्वित होतो, जे `XOR`, `AND`, `ADD`, `SUB`, इत्यादींसारखी मानक स्टॅक ऑपरेशन्स करतात. EVM `ADDRESS`, `BALANCE`, `BLOCKHASH`, इत्यादींसारखी अनेक ब्लॉकचेन-विशिष्ट स्टॅक ऑपरेशन्स देखील लागू करते. ऑपकोड संचामध्ये `TSTORE` आणि `TLOAD` चा देखील समावेश आहे, जे क्षणिक स्टोरेजमध्ये प्रवेश प्रदान करतात. + +![EVM ऑपरेशन्ससाठी गॅस कोठे आवश्यक आहे हे दर्शविणारा एक आकृती](../gas/gas.png) +_[इथेरियम EVM सचित्र](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रुपांतरित आकृती_ + +## EVM अंमलबजावणी {#evm-implementations} + +EVM च्या सर्व अंमलबजावणींना इथेरियम यलोपेपरमध्ये वर्णन केलेल्या विनिर्देशनाचे पालन करणे आवश्यक आहे. + +इथेरियमच्या दहा वर्षांच्या इतिहासात, EVM मध्ये अनेक सुधारणा झाल्या आहेत, आणि विविध प्रोग्रामिंग भाषांमध्ये EVM च्या अनेक अंमलबजावणी आहेत. + +[इथेरियम एक्झिक्यूशन क्लायंट्स](/developers/docs/nodes-and-clients/#execution-clients) मध्ये EVM अंमलबजावणीचा समावेश आहे. याव्यतिरिक्त, अनेक स्वतंत्र अंमलबजावणी आहेत, ज्यात समाविष्ट आहे: + +- [Py-EVM](https://github.com/ethereum/py-evm) - _Python_ +- [evmone](https://github.com/ethereum/evmone) - _C++_ +- [ethereumjs-vm](https://github.com/ethereumjs/ethereumjs-vm) - _JavaScript_ +- [revm](https://github.com/bluealloy/revm) - _Rust_ + +## अधिक वाचन {#further-reading} + +- [इथेरियम यलोपेपर](https://ethereum.github.io/yellowpaper/paper.pdf) +- [जेलोपेपर उर्फ KEVM: K मध्ये EVM चे सिमेंटिक्स](https://jellopaper.org/) +- [द बेजपेपर](https://github.com/chronaeon/beigepaper) +- [इथेरियम व्हर्च्युअल मशीन ऑपकोड्स](https://www.ethervm.io/) +- [इथेरियम व्हर्च्युअल मशीन ऑपकोड्स इंटरएक्टिव्ह रेफरन्स](https://www.evm.codes/) +- [Solidity च्या माहितीमधील एक संक्षिप्त परिचय](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#index-6) +- [मास्टरिंग इथेरियम - इथेरियम व्हर्च्युअल मशीन](https://github.com/ethereumbook/ethereumbook/blob/openedition/13evm.asciidoc) + +## संबंधित विषय {#related-topics} + +- [गॅस](/developers/docs/gas/) diff --git a/public/content/translations/mr/developers/docs/evm/opcodes/index.md b/public/content/translations/mr/developers/docs/evm/opcodes/index.md new file mode 100644 index 00000000000..109363988b3 --- /dev/null +++ b/public/content/translations/mr/developers/docs/evm/opcodes/index.md @@ -0,0 +1,177 @@ +--- +title: "EVM साठी ओपकोड्स" +description: "इथेरियम व्हर्च्युअल मशीनसाठी सर्व उपलब्ध ऑपकोड्सची सूची." +lang: mr +--- + +## आढावा {#overview} + +हे [wolflo/evm-opcodes](https://github.com/wolflo/evm-opcodes) येथील EVM संदर्भ पृष्ठाची अद्ययावत आवृत्ती आहे. +[यलो पेपर](https://ethereum.github.io/yellowpaper/paper.pdf), [जेलो पेपर](https://jellopaper.org/evm/) आणि [गेथ](https://github.com/ethereum/go-ethereum) अंमलबजावणीमधून देखील घेतले आहे. +हा एक सुलभ संदर्भ म्हणून आहे, परंतु तो विशेष सखोल नाही. +तुम्हाला अचूकतेची खात्री हवी असल्यास आणि प्रत्येक एज केसबद्दल जागरूक राहायचे असल्यास, जेलो पेपर किंवा क्लायंट अंमलबजावणी वापरण्याचा सल्ला दिला जातो. + +परस्परसंवादी संदर्भ शोधत आहात? [evm.codes](https://www.evm.codes/) पहा. + +डायनॅमिक गॅस खर्चासह ऑपरेशन्ससाठी, [gas.md](https://github.com/wolflo/evm-opcodes/blob/main/gas.md) पहा. + +💡 द्रुत टीप: संपूर्ण ओळी पाहण्यासाठी, डेस्कटॉपवर आडवे स्क्रोल करण्यासाठी `[shift] + scroll` वापरा. + +| स्टॅक | नाव | गॅस | प्रारंभिक स्टॅक | परिणामी स्टॅक | मेम / स्टोरेज | टीप | | +| :---: | :------------- | :---------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | +| 00 | STOP | 0 | | | | अंमलबजावणी थांबवते | | +| 01 | ADD | 3 | `a, b` | `a + b` | | (u)int256 बेरीज मोड्युलो 2\*\*256 | | +| 02 | MUL | 5 | `a, b` | `a * b` | | (u)int256 गुणाकार मोड्युलो 2\*\*256 | | +| 03 | SUB | 3 | `a, b` | `a - b` | | (u)int256 वजाबाकी मोड्युलो 2\*\*256 | | +| 04 | DIV | 5 | `a, b` | `a // b` | | uint256 भागाकार | | +| 05 | SDIV | 5 | `a, b` | `a // b` | | int256 भागाकार | | +| 06 | MOD | 5 | `a, b` | `a % b` | | uint256 मोड्युलस | | +| 07 | SMOD | 5 | `a, b` | `a % b` | | int256 मोड्युलस | | +| 08 | ADDMOD | 8 | `a, b, N` | `(a + b) % N` | | (u)int256 बेरीज मोड्युलो N | | +| 09 | MULMOD | 8 | `a, b, N` | `(a * b) % N` | | (u)int256 गुणाकार मोड्युलो N | | +| 0A | EXP | [A1](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a1-exp) | `a, b` | `a ** b` | | uint256 घातांक मोड्युलो 2\*\*256 | | +| 0B | SIGNEXTEND | 5 | `b, x` | `SIGNEXTEND(x, b)` | | [साइन वाढवा](https://wikipedia.org/wiki/Sign_extension) `x` ला `(b+1)` बाइट्सपासून 32 बाइट्सपर्यंत | | +| 0C-0F | _अवैध_ | | | | | | | +| 10 | LT | 3 | `a, b` | `a < b` | | uint256 पेक्षा कमी | | +| 11 | GT | 3 | `a, b` | `a > b` | | uint256 पेक्षा मोठे | | +| 12 | SLT | 3 | `a, b` | `a < b` | | int256 पेक्षा कमी | | +| 13 | SGT | 3 | `a, b` | `a > b` | | int256 पेक्षा मोठे | | +| 14 | EQ | 3 | `a, b` | `a == b` | | (u)int256 समानता | | +| 15 | ISZERO | 3 | `a` | `a == 0` | | (u)int256 शून्य आहे | | +| 16 | AND | 3 | `a, b` | `a && b` | | बिटवाईज AND | | +| 17 | OR | 3 | `a, b` | `a \\|\\| b` | | बिटवाईज OR | | +| 18 | XOR | 3 | `a, b` | `a ^ b` | | बिटवाईज XOR | | +| 19 | NOT | 3 | `a` | `~a` | | बिटवाईज NOT | | +| 1A | BYTE | 3 | `i, x` | `(x >> (248 - i * 8)) && 0xFF` | | (u)int256 `x` चा डावीकडून `i`वा बाइट | | +| 1B | SHL | 3 | `shift, val` | `val << shift` | | डावीकडे शिफ्ट करतो | | +| 1C | SHR | 3 | `shift, val` | `val >> shift` | | लॉजिकल शिफ्ट राईट | | +| 1D | SAR | 3 | `shift, val` | `val >> shift` | | अरिथमॅटिक शिफ्ट राईट | | +| 1E-1F | _अवैध_ | | | | | | | +| 20 | KECCAK256 | [A2](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a2-sha3) | `ost, len` | `keccak256(mem[ost:ost+len-1])` | | keccak256 | | +| 21-2F | _अवैध_ | | | | | | | +| 30 | ADDRESS | 2 | `.` | `address(this)` | | अंमलबजावणी करणाऱ्या कराराचा पत्ता | | +| 31 | BALANCE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `addr.balance` | | शिल्लक, wei मध्ये | | +| 32 | ORIGIN | 2 | `.` | `tx.origin` | | tx सुरू करणारा पत्ता | | +| 33 | CALLER | 2 | `.` | `msg.sender` | | msg पाठवणाऱ्याचा पत्ता | | +| 34 | CALLVALUE | 2 | `.` | `msg.value` | | msg मूल्य, wei मध्ये | | +| 35 | CALLDATALOAD | 3 | `idx` | `msg.data[idx:idx+32]` | | निर्देशांक `idx` वरून msg डेटामधून शब्द वाचतो | | +| 36 | CALLDATASIZE | 2 | `.` | `len(msg.data)` | | msg डेटाची लांबी, बाइट्समध्ये | | +| 37 | CALLDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := msg.data[ost:ost+len-1] | msg डेटा कॉपी करतो | | +| 38 | CODESIZE | 2 | `.` | `len(this.code)` | | अंमलबजावणी करणाऱ्या कराराच्या कोडची लांबी, बाइट्समध्ये | | +| 39 | CODECOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | | mem[dstOst:dstOst+len-1] := this.code[ost:ost+len-1] | अंमलबजावणी करणाऱ्या कराराचा बायटेकोड कॉपी करतो | +| 3A | GASPRICE | 2 | `.` | `tx.gasprice` | | tx ची गॅस किंमत, प्रति युनिट गॅस wei मध्ये [\*\*](https://eips.ethereum.org/EIPS/eip-1559#gasprice) | | +| 3B | EXTCODESIZE | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `len(addr.code)` | | addr वरील कोडचा आकार, बाइट्समध्ये | | +| 3C | EXTCODECOPY | [A4](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a4-extcodecopy) | `addr, dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := addr.code[ost:ost+len-1] | `addr` मधून कोड कॉपी करतो | | +| 3D | RETURNDATASIZE | 2 | `.` | `size` | | मागील बाह्य कॉलमधून परत आलेल्या डेटाचा आकार, बाइट्समध्ये | | +| 3E | RETURNDATACOPY | [A3](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a3-copy-operations) | `dstOst, ost, len` | `.` | mem[dstOst:dstOst+len-1] := returndata[ost:ost+len-1] | मागील बाह्य कॉलमधून परत आलेला डेटा कॉपी करतो | | +| 3F | EXTCODEHASH | [A5](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash) | `addr` | `hash` | | हॅश = addr.exists ? keccak256(addr.code) : 0 | | +| 40 | BLOCKHASH | 20 | `blockNum` | `blockHash(blockNum)` | | | | +| 41 | COINBASE | 2 | `.` | `block.coinbase` | | सध्याच्या ब्लॉकच्या प्रस्तावकचा पत्ता | | +| 42 | TIMESTAMP | 2 | `.` | `block.timestamp` | | सध्याच्या ब्लॉकचा टाइमस्टॅम्प | | +| 43 | NUMBER | 2 | `.` | `block.number` | | सध्याच्या ब्लॉकचा क्रमांक | | +| 44 | PREVRANDAO | 2 | `.` | `randomness beacon` | | रँडमनेस बीकन | | +| 45 | GASLIMIT | 2 | `.` | `block.gaslimit` | | सध्याच्या ब्लॉकची गॅस मर्यादा | | +| 46 | CHAINID | 2 | `.` | `chain_id` | | सध्याचा [चेन आयडी](https://eips.ethereum.org/EIPS/eip-155) स्टॅकवर पुश करतो | | +| 47 | SELFBALANCE | 5 | `.` | `address(this).balance` | | अंमलबजावणी करणाऱ्या कराराची शिल्लक, wei मध्ये | | +| 48 | BASEFEE | 2 | `.` | `block.basefee` | | सध्याच्या ब्लॉकची बेस फी | | +| 49 | BLOBHASH | 3 | `idx` | `tx.blob_versioned_hashes[idx]` | | [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) | | +| 4A | BLOBBASEFEE | 2 | `.` | `block.blobbasefee` | | सध्याच्या ब्लॉकची ब्लॉब बेस फी ([EIP-7516](https://eips.ethereum.org/EIPS/eip-7516)) | | +| 4B-4F | _अवैध_ | | | | | | | +| 50 | POP | 2 | `_anon` | `.` | | स्टॅकच्या वरून आयटम काढून टाकतो आणि टाकून देतो | | +| 51 | MLOAD | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost` | `mem[ost:ost+32]` | | ऑफसेट `ost` वरून मेमरीमधून शब्द वाचतो | | +| 52 | MSTORE | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost:ost+32] := val | मेमरीमध्ये एक शब्द लिहितो | | +| 53 | MSTORE8 | 3[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, val` | `.` | mem[ost] := val && 0xFF | मेमरीमध्ये एकच बाइट लिहितो | | +| 54 | SLOAD | [A6](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a6-sload) | `key` | `storage[key]` | | स्टोरेजमधून शब्द वाचतो | | +| 55 | SSTORE | [A7](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a7-sstore) | `key, val` | `.` | storage[key] := val | स्टोरेजमध्ये शब्द लिहितो | | +| 56 | JUMP | 8 | `dst` | `.` | | `$pc := dst` हे चिन्हांकित करते की `pc` फक्त तेव्हाच नियुक्त केले जाते जेव्हा `dst` एक वैध जंपडेस्ट असेल | | +| 57 | JUMPI | 10 | `dst, condition` | `.` | | `$pc := condition ?` dst : $pc + 1` | | +| 58 | PC | 2 | `.` | `$pc` | | प्रोग्राम काउंटर | | +| 59 | MSIZE | 2 | `.` | `len(mem)` | | सध्याच्या अंमलबजावणी संदर्भात मेमरीचा आकार, बाइट्समध्ये | | +| 5A | GAS | 2 | `.` | `gasRemaining` | | | | +| 5B | JUMPDEST | 1 | | | वैध जंप डेस्टिनेशन चिन्हांकित करतो | एक वैध जंप डेस्टिनेशन उदाहरणार्थ पुश डेटामध्ये नसलेले जंप डेस्टिनेशन | | +| 5C | TLOAD | 100 | `key` | `tstorage[key]` | | क्षणिक स्टोरेजमधून शब्द वाचतो ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | | +| 5D | TSTORE | 100 | `key, val` | `.` | tstorage[key] := val | क्षणिक स्टोरेजमध्ये शब्द लिहितो ([EIP-1153](https://eips.ethereum.org/EIPS/eip-1153)) | | +| 5E | MCOPY | 3+3\*words+[A0](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `dstOst, ost, len` | `.` | mem[dstOst] := mem[ost:ost+len] | मेमरी एका भागातून दुसऱ्या भागात कॉपी करतो ([EIP-5656](https://eips.ethereum.org/EIPS/eip-5656)) | | +| 5F | PUSH0 | 2 | `.` | `uint8` | | स्थिर मूल्य 0 स्टॅकवर पुश करतो | | +| 60 | PUSH1 | 3 | `.` | `uint8` | | स्टॅकवर 1-बाइट मूल्य पुश करतो | | +| 61 | PUSH2 | 3 | `.` | `uint16` | | स्टॅकवर 2-बाइट मूल्य पुश करतो | | +| 62 | PUSH3 | 3 | `.` | `uint24` | | स्टॅकवर 3-बाइट मूल्य पुश करतो | | +| 63 | PUSH4 | 3 | `.` | `uint32` | | स्टॅकवर 4-बाइट मूल्य पुश करतो | | +| 64 | PUSH5 | 3 | `.` | `uint40` | | स्टॅकवर 5-बाइट मूल्य पुश करतो | | +| 65 | PUSH6 | 3 | `.` | `uint48` | | स्टॅकवर 6-बाइट मूल्य पुश करतो | | +| 66 | PUSH7 | 3 | `.` | `uint56` | | स्टॅकवर 7-बाइट मूल्य पुश करतो | | +| 67 | PUSH8 | 3 | `.` | `uint64` | | स्टॅकवर 8-बाइट मूल्य पुश करतो | | +| 68 | PUSH9 | 3 | `.` | `uint72` | | स्टॅकवर 9-बाइट मूल्य पुश करतो | | +| 69 | PUSH10 | 3 | `.` | `uint80` | | स्टॅकवर 10-बाइट मूल्य पुश करतो | | +| 6A | PUSH11 | 3 | `.` | `uint88` | | स्टॅकवर 11-बाइट मूल्य पुश करतो | | +| 6B | PUSH12 | 3 | `.` | `uint96` | | स्टॅकवर 12-बाइट मूल्य पुश करतो | | +| 6C | PUSH13 | 3 | `.` | `uint104` | | स्टॅकवर 13-बाइट मूल्य पुश करतो | | +| 6D | PUSH14 | 3 | `.` | `uint112` | | स्टॅकवर 14-बाइट मूल्य पुश करतो | | +| 6E | PUSH15 | 3 | `.` | `uint120` | | स्टॅकवर 15-बाइट मूल्य पुश करतो | | +| 6F | PUSH16 | 3 | `.` | `uint128` | | स्टॅकवर 16-बाइट मूल्य पुश करतो | | +| 70 | PUSH17 | 3 | `.` | `uint136` | | स्टॅकवर 17-बाइट मूल्य पुश करतो | | +| 71 | PUSH18 | 3 | `.` | `uint144` | | स्टॅकवर 18-बाइट मूल्य पुश करतो | | +| 72 | PUSH19 | 3 | `.` | `uint152` | | स्टॅकवर 19-बाइट मूल्य पुश करतो | | +| 73 | PUSH20 | 3 | `.` | `uint160` | | स्टॅकवर 20-बाइट मूल्य पुश करतो | | +| 74 | PUSH21 | 3 | `.` | `uint168` | | स्टॅकवर 21-बाइट मूल्य पुश करतो | | +| 75 | PUSH22 | 3 | `.` | `uint176` | | स्टॅकवर 22-बाइट मूल्य पुश करतो | | +| 76 | PUSH23 | 3 | `.` | `uint184` | | स्टॅकवर 23-बाइट मूल्य पुश करतो | | +| 77 | PUSH24 | 3 | `.` | `uint192` | | स्टॅकवर 24-बाइट मूल्य पुश करतो | | +| 78 | PUSH25 | 3 | `.` | `uint200` | | स्टॅकवर 25-बाइट मूल्य पुश करतो | | +| 79 | PUSH26 | 3 | `.` | `uint208` | | स्टॅकवर 26-बाइट मूल्य पुश करतो | | +| 7A | PUSH27 | 3 | `.` | `uint216` | | स्टॅकवर 27-बाइट मूल्य पुश करतो | | +| 7B | PUSH28 | 3 | `.` | `uint224` | | स्टॅकवर 28-बाइट मूल्य पुश करतो | | +| 7C | PUSH29 | 3 | `.` | `uint232` | | स्टॅकवर 29-बाइट मूल्य पुश करतो | | +| 7D | PUSH30 | 3 | `.` | `uint240` | | स्टॅकवर 30-बाइट मूल्य पुश करतो | | +| 7E | PUSH31 | 3 | `.` | `uint248` | | स्टॅकवर 31-बाइट मूल्य पुश करतो | | +| 7F | PUSH32 | 3 | `.` | `uint256` | | स्टॅकवर 32-बाइट मूल्य पुश करतो | | +| 80 | DUP1 | 3 | `a` | `a, a` | | स्टॅकवरील पहिल्या मूल्याची प्रतिकृती करतो | | +| 81 | DUP2 | 3 | `_, a` | `a, _, a` | | स्टॅकवरील दुसऱ्या मूल्याची प्रतिकृती करतो | | +| 82 | DUP3 | 3 | `_, _, a` | `a, _, _, a` | | स्टॅकवरील तिसऱ्या मूल्याची प्रतिकृती करतो | | +| 83 | DUP4 | 3 | `_, _, _, a` | `a, _, _, _, a` | | स्टॅकवरील चौथ्या मूल्याची प्रतिकृती करतो | | +| 84 | DUP5 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील पाचव्या मूल्याची प्रतिकृती करतो | | +| 85 | DUP6 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील सहाव्या मूल्याची प्रतिकृती करतो | | +| 86 | DUP7 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील सातव्या मूल्याची प्रतिकृती करतो | | +| 87 | DUP8 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील आठव्या मूल्याची प्रतिकृती करतो | | +| 88 | DUP9 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील नवव्या मूल्याची प्रतिकृती करतो | | +| 89 | DUP10 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील दहाव्या मूल्याची प्रतिकृती करतो | | +| 8A | DUP11 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील अकराव्या मूल्याची प्रतिकृती करतो | | +| 8B | DUP12 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील बाराव्या मूल्याची प्रतिकृती करतो | | +| 8C | DUP13 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील तेराव्या मूल्याची प्रतिकृती करतो | | +| 8D | DUP14 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील चौदाव्या मूल्याची प्रतिकृती करतो | | +| 8E | DUP15 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील पंधराव्या मूल्याची प्रतिकृती करतो | | +| 8F | DUP16 | 3 | `..., a` | `a, ..., a` | | स्टॅकवरील सोळाव्या मूल्याची प्रतिकृती करतो | | +| 90 | SWAP1 | 3 | `a, b` | `b, a` | | | | +| 91 | SWAP2 | 3 | `a, _, b` | `b, _, a` | | | | +| 92 | SWAP3 | 3 | `a, _, _, b` | `b, _, _, a` | | | | +| 93 | SWAP4 | 3 | `a, _, _, _, b` | `b, _, _, _, a` | | | | +| 94 | SWAP5 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 95 | SWAP6 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 96 | SWAP7 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 97 | SWAP8 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 98 | SWAP9 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 99 | SWAP10 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9A | SWAP11 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9B | SWAP12 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9C | SWAP13 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9D | SWAP14 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9E | SWAP15 | 3 | `a, ..., b` | `b, ..., a` | | | | +| 9F | SWAP16 | 3 | `a, ..., b` | `b, ..., a` | | | | +| A0 | LOG0 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len` | `.` | | LOG0(memory[ost:ost+len-1]) | | +| A1 | LOG1 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0` | `.` | | LOG1(memory[ost:ost+len-1], topic0) | | +| A2 | LOG2 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1` | `.` | | LOG2(memory[ost:ost+len-1], topic0, topic1) | | +| A3 | LOG3 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2` | `.` | | LOG3(memory[ost:ost+len-1], topic0, topic1, topic2) | | +| A4 | LOG4 | [A8](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a8-log-operations) | `ost, len, topic0, topic1, topic2, topic3` | `.` | | LOG4(memory[ost:ost+len-1], topic0, topic1, topic2, topic3) | | +| A5-EF | _अवैध_ | | | | | | | +| F0 | CREATE | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len` | `addr` | | addr = keccak256(rlp([address(this), this.nonce])) | | +| F1 | CALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | gas, addr, val, argOst, argLen, retOst, retLen | `success` | mem[retOst:retOst+retLen-1] := returndata | | | +| F2 | CALLCODE | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, val, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] = returndata | DELEGATECALL प्रमाणेच, परंतु मूळ msg.sender आणि msg.value प्रसारित करत नाही | | +| F3 | RETURN | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | return mem[ost:ost+len-1] | | +| F4 | DELEGATECALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | | +| F5 | CREATE2 | [A9](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a9-create-operations) | `val, ost, len, salt` | `addr` | | addr = keccak256(0xff ++ address(this) ++ salt ++ keccak256(mem[ost:ost+len-1]))[12:] | | +| F6-F9 | _अवैध_ | | | | | | | +| FA | STATICCALL | [AA](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#aa-call-operations) | `gas, addr, argOst, argLen, retOst, retLen` | `success` | mem[retOst:retOst+retLen-1] := returndata | | | +| FB-FC | _अवैध_ | | | | | | | +| FD | REVERT | 0[\*](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a0-1-memory-expansion) | `ost, len` | `.` | | revert(mem[ost:ost+len-1]) | | +| FE | INVALID | [AF](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#af-invalid) | | | निर्दिष्ट अवैध ऑपकोड - [EIP-141](https://eips.ethereum.org/EIPS/eip-141) | | | +| FF | SELFDESTRUCT | [AB](https://github.com/wolflo/evm-opcodes/blob/main/gas.md#ab-selfdestruct) | `addr` | `.` | | सर्व ETH `addr` ला पाठवते; जर करार तयार केलेल्या त्याच व्यवहारात कार्यान्वित केले तर ते करार नष्ट करते | | diff --git a/public/content/translations/mr/developers/docs/frameworks/index.md b/public/content/translations/mr/developers/docs/frameworks/index.md new file mode 100644 index 00000000000..e9c602b2f2d --- /dev/null +++ b/public/content/translations/mr/developers/docs/frameworks/index.md @@ -0,0 +1,156 @@ +--- +title: "DApp विकास फ्रेमवर्क्स" +description: "फ्रेमवर्कच्या फायद्यांचे अन्वेषण करा आणि उपलब्ध पर्यायांची तुलना करा." +lang: mr +--- + +## फ्रेमवर्कची ओळख {#introduction-to-frameworks} + +एक परिपूर्ण DApp तयार करण्यासाठी +वेगवेगळ्या तंत्रज्ञानाची आवश्यकता असते. सॉफ्टवेअर फ्रेमवर्क्समध्ये अनेक आवश्यक +वैशिष्ट्ये समाविष्ट असतात किंवा तुम्हाला हवी असलेली साधने निवडण्यासाठी सोप्या प्लगइन प्रणाली पुरवतात. + +फ्रेमवर्क्स बऱ्याच आउट-ऑफ-द-बॉक्स कार्यक्षमतेसह येतात, +जसे की: + +- स्थानिक ब्लॉकचेन उदाहरण स्पिन अप करण्यासाठी वैशिष्ट्ये. +- तुमचे स्मार्ट कॉन्ट्रॅक्ट संकलित करण्यासाठी आणि चाचणी करण्यासाठी उपयुक्तता. +- त्याच प्रोजेक्ट/रिपॉझिटरीमध्ये तुमचा वापरकर्ता-केंद्रित ॲप्लिकेशन तयार करण्यासाठी + क्लायंट डेव्हलपमेंट ॲड-ऑन्स. +- Ethereum नेटवर्क्सशी कनेक्ट होण्यासाठी आणि कॉन्ट्रॅक्ट्स तैनात करण्यासाठी + कॉन्फिगरेशन, मग ते स्थानिक पातळीवर चालणाऱ्या इन्स्टन्सवर असो, किंवा Ethereum च्या + सार्वजनिक नेटवर्क्सपैकी एकावर असो. +- विकेंद्रित ॲप वितरण - IPFS सारख्या स्टोरेज + पर्यायांसह एकत्रीकरण. + +## पूर्वतयारी {#prerequisites} + +फ्रेमवर्क्समध्ये खोलवर जाण्यापूर्वी, आम्ही शिफारस करतो की तुम्ही प्रथम आमची [dapps](/developers/docs/dapps/) आणि [Ethereum स्टॅक](/developers/docs/ethereum-stack/) ची ओळख वाचून घ्या. + +## उपलब्ध फ्रेमवर्क्स {#available-frameworks} + +**Foundry** - **_Foundry हे Ethereum ऍप्लिकेशन डेव्हलपमेंटसाठी एक अतिशय वेगवान, पोर्टेबल आणि मॉड्युलर टूलकिट आहे_** + +- [Foundry इंस्टॉल करा](https://book.getfoundry.sh/) +- [Foundry पुस्तक](https://book.getfoundry.sh/) +- [Telegram वर Foundry कम्युनिटी चॅट](https://t.me/foundry_support) +- [ऑसम Foundry](https://github.com/crisgarner/awesome-foundry) + +**Hardhat -** **_व्यावसायिकांसाठी Ethereum विकास वातावरण._** + +- [hardhat.org](https://hardhat.org) +- [GitHub](https://github.com/nomiclabs/hardhat) + +**Ape -** **_पायथनिस्ट, डेटा सायंटिस्ट आणि सुरक्षा व्यावसायिकांसाठी स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंट टूल._** + +- [दस्तऐवजीकरण](https://docs.apeworx.io/ape/stable/) +- [GitHub](https://github.com/ApeWorX/ape) + +**Web3j -** **_JVM वर ब्लॉकचेन ऍप्लिकेशन्स विकसित करण्यासाठी एक प्लॅटफॉर्म._** + +- [होमपेज](https://www.web3labs.com/web3j-sdk) +- [दस्तऐवजीकरण](https://docs.web3j.io) +- [GitHub](https://github.com/web3j/web3j) + +**ethers-kt -** **_EVM-आधारित ब्लॉकचेनसाठी Async, उच्च-कार्यक्षमता असलेली Kotlin/Java/Android लायब्ररी._** + +- [GitHub](https://github.com/Kr1ptal/ethers-kt) +- [उदाहरणे](https://github.com/Kr1ptal/ethers-kt/tree/master/examples) +- [Discord](https://discord.gg/rx35NzQGSb) + +**Create Eth App -** **_एका कमांडने Ethereum-सक्षम ॲप्स तयार करा. निवडण्यासाठी UI फ्रेमवर्क्स आणि DeFi टेम्पलेट्सच्या विस्तृत श्रेणीसह येते._** + +- [GitHub](https://github.com/paulrberg/create-eth-app) +- [टेम्पलेट्स](https://github.com/PaulRBerg/create-eth-app/tree/develop/templates) + +**Scaffold-Eth -** **_Ethers.js + Hardhat + web3 साठी React कंपोनंट्स आणि हुक्स: स्मार्ट कॉन्ट्रॅक्ट्सद्वारे चालणाऱ्या विकेंद्रित ॲप्लिकेशन्सची निर्मिती सुरू करण्यासाठी तुम्हाला आवश्यक असलेले सर्वकाही._** + +- [GitHub](https://github.com/scaffold-eth/scaffold-eth-2) + +**Tenderly -** **_Web3 डेव्हलपमेंट प्लॅटफॉर्म जे ब्लॉकचेन डेव्हलपर्सना स्मार्ट कॉन्ट्रॅक्ट्स तयार करणे, तपासणे, डीबग करणे, मॉनिटर करणे, आणि ऑपरेट करण्यास आणि dApp UX सुधारण्यास सक्षम करते._** + +- [वेबसाईट](https://tenderly.co/) +- [दस्तऐवजीकरण](https://docs.tenderly.co/) + +**The Graph -** **_ब्लॉकचेन डेटा कार्यक्षमतेने क्वेरी करण्यासाठी._** + +- [वेबसाईट](https://thegraph.com/) +- [ट्यूटोरियल](/developers/tutorials/the-graph-fixing-web3-data-querying/) + +**Alchemy -** **_Ethereum डेव्हलपमेंट प्लॅटफॉर्म._** + +- [alchemy.com](https://www.alchemy.com/) +- [GitHub](https://github.com/alchemyplatform) +- [Discord](https://discord.com/invite/alchemyplatform) + +**NodeReal -** **_Ethereum डेव्हलपमेंट प्लॅटफॉर्म._** + +- [Nodereal.io](https://nodereal.io/) +- [GitHub](https://github.com/node-real) +- [Discord](https://discord.gg/V5k5gsuE) + +**thirdweb SDK -** **_आमच्या शक्तिशाली SDKs आणि CLI चा वापर करून तुमच्या स्मार्ट कॉन्ट्रॅक्ट्ससोबत संवाद साधू शकणारे web3 ॲप्लिकेशन्स तयार करा._** + +- [दस्तऐवजीकरण](https://portal.thirdweb.com/sdk/) +- [GitHub](https://github.com/thirdweb-dev/) + +**Chainstack -** **_Web3 (Ethereum आणि इतर) डेव्हलपमेंट प्लॅटफॉर्म._** + +- [chainstack.com](https://www.chainstack.com/) +- [GitHub](https://github.com/chainstack) +- [Discord](https://discord.gg/BSb5zfp9AT) + +**Crossmint -** **_एंटरप्राइझ-ग्रेड web3 डेव्हलपमेंट प्लॅटफॉर्म, जो तुम्हाला सर्व प्रमुख EVM चेन्स (आणि इतरांवर) NFT ॲप्लिकेशन्स तयार करण्याची परवानगी देतो._** + +- [वेबसाईट](https://www.crossmint.com) +- [दस्तऐवजीकरण](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) + +**Brownie -** **_पायथन-आधारित डेव्हलपमेंट एनव्हायर्नमेंट आणि टेस्टिंग फ्रेमवर्क._** + +- [दस्तऐवजीकरण](https://eth-brownie.readthedocs.io/en/latest/) +- [GitHub](https://github.com/eth-brownie/brownie) +- **Brownie ची देखभाल सध्या केली जात नाही** + +**OpenZeppelin SDK -** **_अल्टिमेट स्मार्ट कॉन्ट्रॅक्ट टूलकिट: साधनांचा एक संच जो तुम्हाला स्मार्ट कॉन्ट्रॅक्ट्स विकसित करणे, कंपाईल करणे, अपग्रेड करणे, तैनात करणे आणि त्यांच्याशी संवाद साधण्यात मदत करतो._** + +- [OpenZeppelin डिफेंडर SDK](https://docs.openzeppelin.com/defender/sdk) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-sdk) +- [कम्युनिटी फोरम](https://forum.openzeppelin.com/c/support/17) +- **OpenZeppelin SDK चा विकास थांबला आहे** + +**Catapulta -** **_मल्टी-चेन स्मार्ट कॉन्ट्रॅक्ट्स डिप्लॉयमेंट टूल, ब्लॉक एक्सप्लोररमध्ये व्हेरिफिकेशन्स ऑटोमेट करते, डिप्लॉय केलेल्या स्मार्ट कॉन्ट्रॅक्ट्सचा मागोवा ठेवते आणि डिप्लॉयमेंट रिपोर्ट्स शेअर करते, Foundry आणि Hardhat प्रोजेक्ट्ससाठी प्लग-एन-प्ले._** + +- [वेबसाईट](https://catapulta.sh/) +- [दस्तऐवजीकरण](https://catapulta.sh/docs) +- [Github](https://github.com/catapulta-sh) + +**GoldRush (Covalent द्वारा समर्थित) -** **_GoldRush डेव्हलपर्स, विश्लेषक आणि एंटरप्राइझसाठी सर्वात व्यापक ब्लॉकचेन डेटा API सूट प्रदान करते. तुम्ही DeFi डॅशबोर्ड, वॉलेट, ट्रेडिंग बॉट, AI एजंट किंवा कंप्लायन्स प्लॅटफॉर्म तयार करत असाल, डेटा APIs तुम्हाला आवश्यक असलेल्या महत्त्वाच्या ऑनचेन डेटासाठी वेगवान, अचूक आणि डेव्हलपर-फ्रेंडली ऍक्सेस प्रदान करतात_** + +- [वेबसाईट](https://goldrush.dev/) +- [दस्तऐवजीकरण](https://goldrush.dev/docs/chains/ethereum) +- [GitHub](https://github.com/covalenthq) +- [Discord](https://www.covalenthq.com/discord/) + +**Wake -** **_कॉन्ट्रॅक्ट्स टेस्टिंग, फझिंग, डिप्लॉयमेंट, व्हल्नरेबिलिटी स्कॅनिंग आणि कोड नेव्हिगेशनसाठी ऑल-इन-वन पायथन फ्रेमवर्क._** + +- [होमपेज](https://getwake.io/) +- [दस्तऐवजीकरण](https://ackeeblockchain.com/wake/docs/latest/) +- [GitHub](https://github.com/Ackee-Blockchain/wake) +- [VS कोड एक्सटेन्शन](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) + +**Veramo -** **_ओपन सोर्स, मॉड्युलर आणि ॲग्नॉस्टिक फ्रेमवर्क जे विकेंद्रित ऍप्लिकेशन डेव्हलपर्ससाठी त्यांच्या ऍप्लिकेशन्समध्ये विकेंद्रित ओळख आणि व्हेरिफायेबल क्रेडेन्शियल्स तयार करणे सोपे करते._** + +- [होमपेज](https://veramo.io/) +- [दस्तऐवजीकरण](https://veramo.io/docs/basics/introduction) +- [GitHub](https://github.com/uport-project/veramo) +- [Discord](https://discord.com/invite/FRRBdjemHV) +- [NPM पॅकेज](https://www.npmjs.com/package/@veramo/core) + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [स्थानिक विकास वातावरण सेट अप करा](/developers/local-environment/) diff --git a/public/content/translations/mr/developers/docs/gas/index.md b/public/content/translations/mr/developers/docs/gas/index.md new file mode 100644 index 00000000000..f0a4f37bcce --- /dev/null +++ b/public/content/translations/mr/developers/docs/gas/index.md @@ -0,0 +1,151 @@ +--- +title: "गॅस आणि शुल्क" +metaTitle: "इथेरियम गॅस आणि शुल्क: तांत्रिक अवलोकन" +description: "इथेरियम गॅस शुल्काबद्दल जाणून घ्या, ते कसे मोजले जातात आणि नेटवर्क सुरक्षा आणि व्यवहार प्रक्रियेत त्यांची भूमिका काय आहे." +lang: mr +--- + +इथेरियम नेटवर्कसाठी गॅस आवश्यक आहे. हे ते इंधन आहे जे त्याला चालण्यास मदत करते, ज्याप्रमाणे गाडी चालवण्यासाठी पेट्रोलची गरज असते. + +## पूर्वतयारी {#prerequisites} + +हे पान अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [व्यवहार](/developers/docs/transactions/) आणि [EVM](/developers/docs/evm/) बद्दल वाचा. + +## गॅस म्हणजे काय? {#what-is-gas} + +गॅस म्हणजे इथेरियम नेटवर्कवर विशिष्ट ऑपरेशन्स कार्यान्वित करण्यासाठी आवश्यक असलेल्या संगणकीय प्रयत्नांचे मोजमाप करणारे एकक. + +प्रत्येक इथेरियम व्यवहाराला कार्यान्वित करण्यासाठी संगणकीय संसाधनांची आवश्यकता असल्याने, इथेरियम स्पॅमसाठी असुरक्षित नाही आणि अनंत संगणकीय लूपमध्ये अडकू शकत नाही हे सुनिश्चित करण्यासाठी त्या संसाधनांसाठी पैसे द्यावे लागतात. संगणनासाठीचे पेमेंट गॅस शुल्काच्या स्वरूपात केले जाते. + +गॅस शुल्क म्हणजे **कोणतेही ऑपरेशन करण्यासाठी वापरलेला गॅस, गुणिले प्रति युनिट गॅसची किंमत**. व्यवहार यशस्वी झाला किंवा अयशस्वी झाला तरीही शुल्क भरावे लागते. + +![EVM ऑपरेशन्समध्ये गॅसची कोठे आवश्यकता आहे हे दर्शविणारा आकृती](./gas.png) +_[Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रुपांतरित केलेला आकृती_ + +गॅस शुल्क इथेरियमच्या मूळ चलनात, इथर (ETH) मध्ये भरावे लागते. गॅसच्या किमती सामान्यतः gwei मध्ये उद्धृत केल्या जातात, जे ETH चे एक मूल्यमापन आहे. प्रत्येक gwei एका ETH च्या अब्जाव्या भागाइतका असतो (0.000000001 ETH किंवा 10-9 ETH). + +उदाहरणार्थ, तुमचा गॅस खर्च 0.000000001 इथर आहे असे म्हणण्याऐवजी, तुम्ही म्हणू शकता की तुमचा गॅस खर्च 1 gwei आहे. + +'gwei' हा शब्द 'giga-wei' चा संक्षेप आहे, ज्याचा अर्थ 'अब्ज wei' आहे. एक gwei म्हणजे एक अब्ज wei. Wei स्वतः ([b-money](https://www.investopedia.com/terms/b/bmoney.asp) चे निर्माते, [Wei Dai](https://wikipedia.org/wiki/Wei_Dai) यांच्या नावावरून) ETH चे सर्वात लहान एकक आहे. + +## गॅस शुल्क कसे मोजले जाते? {#how-are-gas-fees-calculated} + +तुम्ही व्यवहार सबमिट करता तेव्हा तुम्ही किती गॅस देण्यास इच्छुक आहात हे तुम्ही सेट करू शकता. विशिष्ट प्रमाणात गॅस ऑफर करून, तुम्ही तुमचा व्यवहार पुढील ब्लॉकमध्ये समाविष्ट करण्यासाठी बोली लावत आहात. जर तुम्ही खूप कमी ऑफर दिली, तर व्हॅलिडेटर्स तुमचा व्यवहार समाविष्ट करण्यासाठी निवडण्याची शक्यता कमी असते, याचा अर्थ तुमचा व्यवहार उशिरा किंवा अजिबात कार्यान्वित होणार नाही. जर तुम्ही खूप जास्त ऑफर दिली, तर तुम्ही काही ETH वाया घालवू शकता. तर, किती पैसे द्यायचे हे तुम्ही कसे सांगू शकता? + +तुम्ही देत असलेला एकूण गॅस दोन घटकांमध्ये विभागलेला आहे: `base fee` आणि `priority fee` (टिप). + +`base fee` प्रोटोकॉलद्वारे सेट केली जाते—तुमचा व्यवहार वैध मानला जाण्यासाठी तुम्हाला किमान ही रक्कम भरावी लागेल. `priority fee` ही एक टिप आहे जी तुम्ही बेस फीमध्ये जोडता, जेणेकरून तुमचा व्यवहार व्हॅलिडेटर्सना आकर्षक वाटेल आणि ते तो पुढील ब्लॉकमध्ये समाविष्ट करण्यासाठी निवडतील. + +फक्त `base fee` भरणारा व्यवहार तांत्रिकदृष्ट्या वैध आहे पण तो समाविष्ट होण्याची शक्यता कमी आहे कारण तो व्हॅलिडेटर्सना इतर कोणत्याही व्यवहारापेक्षा निवडण्यासाठी कोणतेही प्रोत्साहन देत नाही. 'योग्य' `priority` फी तुम्ही तुमचा व्यवहार पाठवता त्यावेळच्या नेटवर्कच्या वापराद्वारे निर्धारित केली जाते—जर जास्त मागणी असेल तर तुम्हाला तुमची `priority` फी जास्त सेट करावी लागेल, पण जेव्हा मागणी कमी असेल तेव्हा तुम्ही कमी पैसे देऊ शकता. + +उदाहरणार्थ, जॉर्डनला टेलरला 1 ETH द्यायचे आहेत असे समजूया. एका ETH हस्तांतरणासाठी 21,000 युनिट्स गॅसची आवश्यकता असते आणि बेस फी 10 gwei आहे. जॉर्डन 2 gwei ची टिप समाविष्ट करतो. + +एकूण शुल्क आता याच्या बरोबर असेल: + +`वापरलेले गॅस युनिट्स * (बेस फी + प्रायॉरिटी फी)` + +जिथे `base fee` हे प्रोटोकॉलद्वारे सेट केलेले मूल्य आहे आणि `priority fee` हे वापरकर्त्याने व्हॅलिडेटरला टिप म्हणून सेट केलेले मूल्य आहे. + +उदा., `21,000 * (10 + 2) = 252,000 gwei` (0.000252 ETH). + +जेव्हा जॉर्डन पैसे पाठवतो, तेव्हा जॉर्डनच्या खात्यातून 1.000252 ETH कापले जातील. टेलरला 1.0000 ETH जमा केले जातील. व्हॅलिडेटरला 0.000042 ETH ची टिप मिळते. 0.00021 ETH ची `base fee` बर्न केली जाते. + +### बेस फी {#base-fee} + +प्रत्येक ब्लॉकसाठी एक बेस फी असते जी राखीव किंमत म्हणून काम करते. ब्लॉकमध्ये समाविष्ट होण्यासाठी पात्र होण्यासाठी, प्रति गॅस ऑफर केलेली किंमत किमान बेस फीच्या बरोबरीची असणे आवश्यक आहे. बेस फीची गणना सध्याच्या ब्लॉकपासून स्वतंत्रपणे केली जाते आणि त्याऐवजी त्याच्या पूर्वीच्या ब्लॉक्सद्वारे निर्धारित केली जाते, ज्यामुळे वापरकर्त्यांसाठी व्यवहार शुल्क अधिक अंदाजित करता येते. जेव्हा ब्लॉक तयार केला जातो तेव्हा ही **बेस फी \"बर्न\" केली जाते**, ज्यामुळे ती चलनातून काढून टाकली जाते. + +बेस फीची गणना एका सूत्रानुसार केली जाते जे मागील ब्लॉकचा आकार (सर्व व्यवहारांसाठी वापरलेला गॅस) आणि लक्ष्य आकार (गॅस मर्यादेच्या अर्धा) यांची तुलना करते. लक्ष्य ब्लॉक आकार लक्ष्यापेक्षा जास्त किंवा कमी असल्यास, बेस फी प्रति ब्लॉक जास्तीत जास्त 12.5% ने वाढेल किंवा कमी होईल. या घातांकी वाढीमुळे ब्लॉकचा आकार अनिश्चित काळासाठी उच्च राहणे आर्थिकदृष्ट्या अव्यवहार्य बनते. + +| ब्लॉक क्रमांक | समाविष्ट गॅस | शुल्क वाढ | सध्याची बेस फी | +| ------------- | -----------: | --------------------: | -------------------------: | +| 1 | 18M | 0% | 100 gwei | +| 2 | 36M | 0% | 100 gwei | +| 3 | 36M | 12.5% | 112.5 gwei | +| 4 | 36M | 12.5% | 126.6 gwei | +| 5 | 36M | 12.5% | 142.4 gwei | +| 6 | 36M | 12.5% | 160.2 gwei | +| 7 | 36M | 12.5% | 180.2 gwei | +| 8 | 36M | 12.5% | 202.7 gwei | + +वरील तक्त्यामध्ये, 36 दशलक्ष गॅस मर्यादा वापरून एक उदाहरण दिले आहे. या उदाहरणाचे अनुसरण करून, ब्लॉक क्रमांक 9 वर व्यवहार तयार करण्यासाठी, एक वॉलेट वापरकर्त्याला निश्चितपणे कळवेल की पुढील ब्लॉकमध्ये जोडली जाणारी **कमाल बेस फी** `current base fee * 112.5%` किंवा `202.7 gwei * 112.5% = 228.1 gwei` आहे. + +हे लक्षात घेणे देखील महत्त्वाचे आहे की संपूर्ण ब्लॉकच्या आधी बेस फी ज्या वेगाने वाढते त्यामुळे आपल्याला पूर्ण ब्लॉक्सचे विस्तारित स्पाइक्स दिसण्याची शक्यता कमी आहे. + +| ब्लॉक क्रमांक | समाविष्ट गॅस | शुल्क वाढ | सध्याची बेस फी | +| --------------------------------------------------- | --------------------------------------------------: | --------------------: | --------------------------------------------------: | +| 30 | 36M | 12.5% | 2705.6 gwei | +| ... | ... | 12.5% | ... | +| 50 | 36M | 12.5% | 28531.3 gwei | +| ... | ... | 12.5% | ... | +| 100 | 36M | 12.5% | 10302608.6 gwei | + +### प्रायॉरिटी फी (टिप्स) {#priority-fee} + +प्रायॉरिटी फी (टिप) व्हॅलिडेटर्सना ब्लॉकमधील व्यवहारांची संख्या वाढवण्यासाठी प्रोत्साहन देते, जे फक्त ब्लॉकच्या गॅस मर्यादेमुळे मर्यादित असते. टिप्सशिवाय, एक विवेकी व्हॅलिडेटर कोणत्याही प्रत्यक्ष एक्झिक्युशन लेयर किंवा कन्सेन्सस लेयर दंडाशिवाय कमी—किंवा अगदी शून्य—व्यवहार समाविष्ट करू शकतो, कारण स्टेकिंग रिवॉर्ड्स ब्लॉकमध्ये किती व्यवहार आहेत यापासून स्वतंत्र असतात. याव्यतिरिक्त, टिप्स वापरकर्त्यांना एकाच ब्लॉकमध्ये प्राधान्यासाठी इतरांपेक्षा जास्त बोली लावण्याची परवानगी देतात, ज्यामुळे प्रभावीपणे तातडीचे संकेत मिळतात. + +### कमाल शुल्क {#maxfee} + +नेटवर्कवर व्यवहार कार्यान्वित करण्यासाठी, वापरकर्ते त्यांच्या व्यवहारासाठी देण्यास इच्छुक असलेली कमाल मर्यादा निर्दिष्ट करू शकतात. हा ऐच्छिक पॅरामीटर `maxFeePerGas` म्हणून ओळखला जातो. व्यवहार कार्यान्वित करण्यासाठी, कमाल शुल्क हे बेस फी आणि टिपच्या बेरजेपेक्षा जास्त असणे आवश्यक आहे. व्यवहार पाठवणाऱ्याला कमाल शुल्क आणि बेस फी व टिपच्या बेरजेमधील फरकाचा परतावा दिला जातो. + +### ब्लॉकचा आकार {#block-size} + +प्रत्येक ब्लॉकचा लक्ष्य आकार सध्याच्या गॅस मर्यादेच्या अर्धा असतो, परंतु नेटवर्कच्या मागणीनुसार ब्लॉकचा आकार वाढेल किंवा कमी होईल, जोपर्यंत ब्लॉकची मर्यादा (लक्ष्य ब्लॉक आकाराच्या 2x) गाठली जात नाही. प्रोटोकॉल _tâtonnement_ प्रक्रियेद्वारे लक्ष्यावर एक समतोल सरासरी ब्लॉक आकार प्राप्त करतो. याचा अर्थ जर ब्लॉकचा आकार लक्ष्य ब्लॉक आकारापेक्षा जास्त असेल, तर प्रोटोकॉल पुढील ब्लॉकसाठी बेस फी वाढवेल. त्याचप्रमाणे, जर ब्लॉकचा आकार लक्ष्य ब्लॉक आकारापेक्षा कमी असेल तर प्रोटोकॉल बेस फी कमी करेल. + +बेस फी समायोजित करण्याची रक्कम सध्याच्या ब्लॉकचा आकार लक्ष्यापासून किती दूर आहे याच्या प्रमाणात असते. ही एक रेषीय गणना आहे जी रिकाम्या ब्लॉकसाठी -12.5% पासून, लक्ष्य आकारावर 0%, ते गॅस मर्यादेपर्यंत पोहोचणाऱ्या ब्लॉकसाठी +12.5% पर्यंत असते. गॅस मर्यादा व्हॅलिडेटर सिग्नलिंगवर आधारित, तसेच नेटवर्क अपग्रेडद्वारे कालांतराने चढ-उतार करू शकते. तुम्ही [येथे गॅस मर्यादेतील कालांतराने होणारे बदल पाहू शकता](https://eth.blockscout.com/stats/averageGasLimit?interval=threeMonths). + +[ब्लॉक्सबद्दल अधिक](/developers/docs/blocks/) + +### व्यवहारात गॅस शुल्काची गणना करणे {#calculating-fees-in-practice} + +तुमचा व्यवहार कार्यान्वित करण्यासाठी तुम्ही किती पैसे देण्यास इच्छुक आहात हे तुम्ही स्पष्टपणे सांगू शकता. तथापि, बहुतेक वॉलेट प्रदाते त्यांच्या वापरकर्त्यांवरील गुंतागुंतीचे प्रमाण कमी करण्यासाठी स्वयंचलितपणे शिफारस केलेले व्यवहार शुल्क (बेस फी + शिफारस केलेली प्रायॉरिटी फी) सेट करतील. + +## गॅस शुल्क का अस्तित्वात आहे? {#why-do-gas-fees-exist} + +थोडक्यात, गॅस शुल्क इथेरियम नेटवर्क सुरक्षित ठेवण्यास मदत करते. नेटवर्कवर कार्यान्वित होणाऱ्या प्रत्येक संगणनासाठी शुल्क आवश्यक करून, आम्ही वाईट कलाकारांना नेटवर्कवर स्पॅम करण्यापासून प्रतिबंधित करतो. कोडमधील अपघाती किंवा प्रतिकूल अनंत लूप किंवा इतर संगणकीय अपव्यय टाळण्यासाठी, प्रत्येक व्यवहाराला कोड एक्झिक्युशनच्या किती संगणकीय पायऱ्या वापरता येतील याची मर्यादा सेट करणे आवश्यक आहे. संगणनेचे मूलभूत एकक \"गॅस\" आहे. + +जरी व्यवहारात मर्यादा समाविष्ट असली तरी, व्यवहारात न वापरलेला कोणताही गॅस वापरकर्त्याला परत केला जातो (उदा., `max fee - (base fee + tip)` परत केला जातो). + +![न वापरलेला गॅस कसा परत केला जातो हे दर्शविणारा आकृती](../transactions/gas-tx.png) +_[Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रुपांतरित केलेला आकृती_ + +## गॅस मर्यादा काय आहे? {#what-is-gas-limit} + +गॅस मर्यादा म्हणजे तुम्ही एका व्यवहारावर खर्च करण्यास इच्छुक असलेल्या गॅसची कमाल रक्कम. [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/) समाविष्ट असलेल्या अधिक गुंतागुंतीच्या व्यवहारांना अधिक संगणकीय कामाची आवश्यकता असते, म्हणून त्यांना साध्या पेमेंटपेक्षा जास्त गॅस मर्यादेची आवश्यकता असते. एका मानक ETH हस्तांतरणासाठी 21,000 युनिट्स गॅसची मर्यादा आवश्यक आहे. + +उदाहरणार्थ, जर तुम्ही एका साध्या ETH हस्तांतरणासाठी 50,000 ची गॅस मर्यादा ठेवली, तर EVM 21,000 खर्च करेल आणि तुम्हाला उर्वरित 29,000 परत मिळतील. तथापि, तुम्ही खूप कमी गॅस निर्दिष्ट केल्यास, उदाहरणार्थ, एका साध्या ETH हस्तांतरणासाठी 20,000 ची गॅस मर्यादा, तर व्यवहार प्रमाणीकरण टप्प्यात अयशस्वी होईल. ब्लॉकमध्ये समाविष्ट होण्यापूर्वी ते नाकारले जाईल आणि कोणताही गॅस वापरला जाणार नाही. दुसरीकडे, जर एक्झिक्युशन दरम्यान व्यवहारात गॅस संपला (उदा., स्मार्ट कॉन्ट्रॅक्ट अर्ध्या वाटेत सर्व गॅस वापरतो), तर EVM कोणतेही बदल परत करेल, परंतु प्रदान केलेला सर्व गॅस केलेल्या कामासाठी वापरला जाईल. + +## गॅस शुल्क इतके जास्त का होऊ शकते? {#why-can-gas-fees-get-so-high} + +जास्त गॅस शुल्क इथेरियमच्या लोकप्रियतेमुळे आहे. जर खूप जास्त मागणी असेल, तर वापरकर्त्यांनी इतर वापरकर्त्यांच्या व्यवहारांपेक्षा जास्त बोली लावण्याचा प्रयत्न करण्यासाठी जास्त टिपची रक्कम ऑफर केली पाहिजे. जास्त टिपमुळे तुमचा व्यवहार पुढील ब्लॉकमध्ये जाण्याची शक्यता वाढू शकते. तसेच, अधिक गुंतागुंतीचे स्मार्ट कॉन्ट्रॅक्ट अॅप्स त्यांच्या कार्यांना समर्थन देण्यासाठी बरीच ऑपरेशन्स करत असतील, ज्यामुळे ते खूप गॅस वापरतात. + +## गॅस खर्च कमी करण्यासाठीचे उपक्रम {#initiatives-to-reduce-gas-costs} + +इथेरियम [स्केलेबिलिटी अपग्रेड](/roadmap/) अखेरीस काही गॅस शुल्क समस्यांचे निराकरण करेल, ज्यामुळे प्लॅटफॉर्मला प्रति सेकंद हजारो व्यवहार प्रक्रिया करण्यास आणि जागतिक स्तरावर स्केल करण्यास सक्षम करेल. + +लेअर 2 स्केलिंग हे गॅस खर्च, वापरकर्ता अनुभव आणि स्केलेबिलिटीमध्ये मोठी सुधारणा करण्यासाठी एक प्राथमिक उपक्रम आहे. + +[लेअर 2 स्केलिंगवर अधिक](/developers/docs/scaling/#layer-2-scaling) + +## गॅस शुल्कावर देखरेख ठेवणे {#monitoring-gas-fees} + +जर तुम्हाला गॅसच्या किमतींवर देखरेख ठेवायची असेल, जेणेकरून तुम्ही तुमचे ETH कमी खर्चात पाठवू शकाल, तर तुम्ही अनेक विविध साधने वापरू शकता जसे की: + +- [Etherscan](https://etherscan.io/gastracker) _व्यवहार गॅस किंमत अंदाजक_ +- [Blockscout](https://eth.blockscout.com/gas-tracker) _ओपन सोर्स व्यवहार गॅस किंमत अंदाजक_ +- [ETH Gas Tracker](https://www.ethgastracker.com/) _व्यवहार शुल्क कमी करण्यासाठी आणि पैसे वाचवण्यासाठी इथेरियम आणि L2 गॅसच्या किमतींचे निरीक्षण आणि मागोवा घ्या_ +- [Blocknative ETH Gas Estimator](https://chrome.google.com/webstore/detail/blocknative-eth-gas-estim/ablbagjepecncofimgjmdpnhnfjiecfm) _गॅस अंदाजित करणारे क्रोम एक्सटेंशन जे टाइप 0 लेगसी व्यवहार आणि टाइप 2 EIP-1559 व्यवहार दोन्हीला समर्थन देते._ +- [Cryptoneur Gas Fees Calculator](https://www.cryptoneur.xyz/gas-fees-calculator) _Mainnet, Arbitrum आणि Polygon वरील विविध प्रकारच्या व्यवहारांसाठी तुमच्या स्थानिक चलनात गॅस शुल्काची गणना करा._ + +## संबंधित साधने {#related-tools} + +- [Blocknative's Gas Platform](https://www.blocknative.com/gas) _Blocknative च्या जागतिक मेमपूल डेटा प्लॅटफॉर्मद्वारे समर्थित गॅस अंदाज API_ +- [Gas Network](https://gas.network) ऑनचेन गॅस ओरॅकल्स. 35+ चेन्ससाठी समर्थन. + +## पुढील वाचन {#further-reading} + +- [इथेरियम गॅस स्पष्टीकरण](https://defiprime.com/gas) +- [तुमच्या स्मार्ट कॉन्ट्रॅक्टचा गॅस वापर कमी करणे](https://medium.com/coinmonks/8-ways-of-reducing-the-gas-consumption-of-your-smart-contracts-9a506b339c0a) +- [डेव्हलपर्ससाठी गॅस ऑप्टिमायझेशन स्ट्रॅटेजीज](https://www.alchemy.com/overviews/solidity-gas-optimization) +- [EIP-1559 डॉक्स](https://eips.ethereum.org/EIPS/eip-1559). +- [टिम बेइकोची EIP-1559 संसाधने](https://hackmd.io/@timbeiko/1559-resources) +- [EIP-1559: मेम्सपासून यंत्रणा वेगळे करणे](https://web.archive.org/web/20241126205908/https://research.2077.xyz/eip-1559-separating-mechanisms-from-memes) diff --git a/public/content/translations/mr/developers/docs/ides/index.md b/public/content/translations/mr/developers/docs/ides/index.md new file mode 100644 index 00000000000..ac20008d8d7 --- /dev/null +++ b/public/content/translations/mr/developers/docs/ides/index.md @@ -0,0 +1,64 @@ +--- +title: "इंटिग्रेटेड डेव्हलपमेंट एन्व्हायर्नमेंट्स (IDEs)" +description: "Remix, VS Code, आणि लोकप्रिय प्लगइन्ससह Ethereum विकासासाठी वेब-आधारित आणि डेस्कटॉप IDEs बद्दल जाणून घ्या." +lang: mr +--- + +[इंटिग्रेटेड डेव्हलपमेंट एन्व्हायर्नमेंट (IDE)](https://wikipedia.org/wiki/Integrated_development_environment) सेट करण्याच्या बाबतीत, Ethereum वर ॲप्लिकेशन्स प्रोग्रामिंग करणे हे इतर कोणत्याही सॉफ्टवेअर प्रोजेक्टच्या प्रोग्रामिंगसारखेच आहे. निवडण्यासाठी बरेच पर्याय आहेत, म्हणून शेवटी, तुमच्या पसंतीनुसार सर्वोत्तम अनुकूल असलेला IDE किंवा कोड एडिटर निवडा. तुमच्या Ethereum विकासासाठी सर्वोत्तम IDE निवड बहुधा तोच IDE असेल जो तुम्ही आधीपासून पारंपारिक सॉफ्टवेअर विकासासाठी वापरत आहात. + +## वेब-आधारित IDEs {#web-based-ides} + +तुम्ही [स्थानिक विकास पर्यावरण सेट करण्यापूर्वी](/developers/local-environment/) कोडमध्ये काही फेरफार करू इच्छित असाल, तर हे वेब ॲप्स Ethereum स्मार्ट कॉन्ट्रॅक्ट विकासासाठी खास तयार केलेले आहेत. + +**[Remix](https://remix.ethereum.org/)** - **_अंगभूत स्टॅटिक एनालिसिस आणि टेस्ट ब्लॉकचेन व्हर्च्युअल मशीनसह वेब-आधारित IDE_** + +- [डॉक्स](https://remix-ide.readthedocs.io/en/latest/#) +- [Gitter](https://gitter.im/ethereum/remix) + +**[ChainIDE](https://chainide.com/)** - **_एक क्लाउड-आधारित मल्टी-चेन IDE_** + +- [डॉक्स](https://chainide.gitbook.io/chainide-english-1/) +- [मदत मंच](https://forum.chainide.com/) + +**[Replit (Solidity स्टार्टर - बीटा)](https://replit.com/@replit/Solidity-starter-beta)** - **_हॉट रिलोडिंग, त्रुटी तपासणी आणि फर्स्ट-क्लास टेस्टनेट समर्थनासह Ethereum साठी एक सानुकूल करण्यायोग्य विकास पर्यावरण_** + +- [डॉक्स](https://docs.replit.com/) + +**[Tenderly Sandbox](https://sandbox.tenderly.co/)** - **_एक जलद प्रोटोटाइपिंग पर्यावरण जिथे तुम्ही Solidity आणि JavaScript वापरून ब्राउझरमध्ये स्मार्ट कॉन्ट्रॅक्ट लिहू, कार्यान्वित करू आणि डीबग करू शकता_** + +**[EthFiddle](https://ethfiddle.com/)** - **_वेब-आधारित IDE जो तुम्हाला तुमचा स्मार्ट कॉन्ट्रॅक्ट लिहिण्याची, कंपाईल करण्याची आणि डीबग करण्याची परवानगी देतो_** + +- [Gitter](https://gitter.im/loomnetwork/ethfiddle) + +## डेस्कटॉप IDEs {#desktop-ides} + +बहुतेक प्रस्थापित IDEs मध्ये Ethereum विकासाचा अनुभव वाढवण्यासाठी प्लगइन्स तयार केलेले आहेत. किमान, ते [स्मार्ट कॉन्ट्रॅक्ट भाषांसाठी](/developers/docs/smart-contracts/languages/) सिंटॅक्स हायलाइटिंग प्रदान करतात. + +**Visual Studio Code -** **_अधिकृत Ethereum समर्थनासह व्यावसायिक क्रॉस-प्लॅटफॉर्म IDE_** + +- [Visual Studio Code](https://code.visualstudio.com/) +- [कोड नमुने](https://github.com/Azure-Samples/blockchain/blob/master/blockchain-workbench/application-and-smart-contract-samples/readme.md) +- [GitHub](https://github.com/microsoft/vscode) + +**JetBrains IDEs (IntelliJ IDEA, इत्यादी.) -** **_सॉफ्टवेअर डेव्हलपर्स आणि टीम्ससाठी आवश्यक साधने_** + +- [JetBrains](https://www.jetbrains.com/) +- [GitHub](https://github.com/JetBrains) +- [IntelliJ Solidity](https://github.com/intellij-solidity/intellij-solidity/) + +**Remix Desktop -** **_तुमच्या स्थानिक मशीनवर Remix IDE चा अनुभव घ्या_** + +- [डाउनलोड करा](https://github.com/ethereum/remix-desktop/releases) +- [GitHub](https://github.com/ethereum/remix-desktop) + +## प्लगइन्स आणि एक्सटेन्शन्स {#plugins-extensions} + +- [solidity](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) - Visual Studio Code साठी Ethereum Solidity भाषा +- [Solidity + Hardhat for VS Code](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) - Hardhat टीमद्वारे Solidity आणि Hardhat समर्थन +- [Prettier Solidity](https://github.com/prettier-solidity/prettier-plugin-solidity) - prettier वापरून कोड फॉर्मॅटर + +## पुढील वाचन {#further-reading} + +- [Ethereum IDEs](https://www.alchemy.com/list-of/web3-ides-on-ethereum) _- Alchemy ची Ethereum IDEs ची सूची_ + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/index.md b/public/content/translations/mr/developers/docs/index.md new file mode 100644 index 00000000000..57f7ff660d2 --- /dev/null +++ b/public/content/translations/mr/developers/docs/index.md @@ -0,0 +1,25 @@ +--- +title: "Ethereum विकास दस्तऐवजीकरण" +description: "ethereum.org विकसक दस्तऐवजीकरण सादर करत आहे." +lang: mr +--- + +हे दस्तऐवजीकरण तुम्हाला Ethereum सह बिल्ड करण्यास मदत करण्यासाठी डिझाइन केलेले आहे. हे एक संकल्पना म्हणून Ethereum समाविष्ट करते, Ethereum टेक स्टॅक स्पष्ट करते, आणि अधिक जटिल ऍप्लिकेशन्स आणि वापर प्रकरणांसाठी प्रगत विषयांचे दस्तऐवजीकरण करते. + +हा एक मुक्त-स्रोत समुदाय प्रयत्न आहे, त्यामुळे नवीन विषय सुचवण्यास, नवीन सामग्री जोडण्यास आणि जिथे तुम्हाला वाटेल तिथे उदाहरणे देण्यास मोकळ्या मनाने. सर्व दस्तऐवजीकरण GitHub द्वारे संपादित केले जाऊ शकते – तुम्हाला कसे करायचे याची खात्री नसल्यास, [या सूचनांचे पालन करा](https://github.com/ethereum/ethereum-org-website/blob/dev/docs/editing-markdown.md). + +## विकास मॉड्यूल {#development-modules} + +हा तुमचा Ethereum विकासातील पहिला प्रयत्न असल्यास, आम्ही सुरुवातीपासून प्रारंभ करण्याची आणि पुस्तकाप्रमाणे पुढे जाण्याची शिफारस करतो. + +### पायाभूत विषय {#foundational-topics} + + + +### Ethereum स्टॅक {#ethereum-stack} + + + +### प्रगत {#advanced} + + diff --git a/public/content/translations/mr/developers/docs/intro-to-ether/index.md b/public/content/translations/mr/developers/docs/intro-to-ether/index.md new file mode 100644 index 00000000000..1b40f8df2f1 --- /dev/null +++ b/public/content/translations/mr/developers/docs/intro-to-ether/index.md @@ -0,0 +1,78 @@ +--- +title: "इथरची तांत्रिक ओळख" +description: "इथर क्रिप्टोकरन्सीची डेव्हलपरसाठी ओळख." +lang: mr +--- + +## पूर्वतयारी {#prerequisites} + +हे पान तुम्हाला अधिक चांगल्या प्रकारे समजण्यास मदत करण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [इथेरियमची ओळख](/developers/docs/intro-to-ethereum/) वाचा. + +## क्रिप्टोकरन्सी म्हणजे काय? क्रिप्टोकरन्सी म्हणजे काय? + +क्रिप्टोकरन्सी हे ब्लॉकचेन-आधारित लेजरद्वारे सुरक्षित केलेले विनिमयाचे माध्यम आहे. + +विनिमयाचे माध्यम म्हणजे वस्तू आणि सेवांसाठी पेमेंट म्हणून मोठ्या प्रमाणावर स्वीकारलेली कोणतीही गोष्ट, आणि लेजर हा एक डेटा स्टोअर आहे जो व्यवहारांचा मागोवा ठेवतो. ब्लॉकचेन तंत्रज्ञान वापरकर्त्यांना लेजर सांभाळण्यासाठी विश्वासू तृतीय पक्षावर अवलंबून न राहता लेजरवर व्यवहार करण्याची परवानगी देते. + +पहिली क्रिप्टोकरन्सी बिटकॉइन होती, जी सातोशी नाकामोटोने तयार केली होती. २००९ मध्ये बिटकॉइनच्या रिलीझनंतर, लोकांनी अनेक वेगवेगळ्या ब्लॉकचेनवर हजारो क्रिप्टोकरन्सी तयार केल्या आहेत. + +## एथर म्हणजे काय? इथर म्हणजे काय? + +**इथर (ETH)** ही इथेरियम नेटवर्कवर अनेक गोष्टींसाठी वापरली जाणारी क्रिप्टोकरन्सी आहे. मूलतः, हे व्यवहार शुल्कासाठी पेमेंटचे एकमेव स्वीकार्य स्वरूप आहे, आणि [The Merge](/roadmap/merge) नंतर, मेननेटवर ब्लॉक्स प्रमाणित करण्यासाठी आणि प्रस्तावित करण्यासाठी इथर आवश्यक आहे. इथरचा वापर [DeFi](/defi) कर्ज बाजारात तारणाचे प्राथमिक स्वरूप म्हणून, NFT मार्केटप्लेसमध्ये खात्याचे एकक म्हणून, सेवा प्रदान करण्यासाठी किंवा वास्तविक-जगातील वस्तू विकून मिळवलेले पेमेंट म्हणून आणि बरेच काही म्हणून देखील केला जातो. + +इथेरियम डेव्हलपर्सना [**विकेंद्रीकृत ॲप्लिकेशन्स (dapps)**](/developers/docs/dapps) तयार करण्याची परवानगी देते, जे सर्व संगणकीय शक्तीचा एक पूल सामायिक करतात. हा सामायिक पूल मर्यादित आहे, त्यामुळे इथेरियमला ​​ते कोण वापरू शकेल हे ठरवण्यासाठी एका यंत्रणेची आवश्यकता आहे. अन्यथा, एखादे dapp अपघाताने किंवा दुर्भावनापूर्णपणे सर्व नेटवर्क संसाधने वापरू शकते, ज्यामुळे इतरांना त्यात प्रवेश करण्यापासून रोखले जाईल. + +इथर क्रिप्टोकरन्सी इथेरियमच्या संगणकीय शक्तीसाठी एक किंमत यंत्रणा समर्थित करते. जेव्हा वापरकर्त्यांना व्यवहार करायचा असतो, तेव्हा त्यांचा व्यवहार ब्लॉकचेनवर ओळखला जाण्यासाठी त्यांना इथर भरावे लागते. हे वापराचे खर्च [गॅस शुल्क](/developers/docs/gas/) म्हणून ओळखले जातात, आणि गॅस शुल्क व्यवहार कार्यान्वित करण्यासाठी आवश्यक असलेल्या संगणकीय शक्तीच्या प्रमाणावर आणि त्या वेळी संगणकीय शक्तीसाठी नेटवर्क-व्यापी मागणीवर अवलंबून असते. + +म्हणून, जरी एखाद्या दुर्भावनापूर्ण dapp ने अनंत लूप सादर केला तरी, व्यवहार अखेरीस इथर संपल्यावर समाप्त होईल, ज्यामुळे नेटवर्क सामान्य स्थितीत परत येऊ शकेल. + +इथेरियम आणि इथरमध्ये [गोंधळ होणे सामान्य आहे](https://abcnews.go.com/Business/bitcoin-slumps-week-low-amid-renewed-worries-chinese/story?id=78399845) — जेव्हा लोक "इथेरियमची किंमत" चा संदर्भ देतात, तेव्हा ते इथरच्या किंमतीचे वर्णन करत असतात. + +## इथरचे मिंटिंग {#minting-ether} + +मिंटिंग ही एक प्रक्रिया आहे ज्यामध्ये इथेरियम लेजरवर नवीन इथर तयार केला जातो. अंतर्निहित इथेरियम प्रोटोकॉल नवीन इथर तयार करतो, आणि वापरकर्त्यासाठी इथर तयार करणे शक्य नाही. + +प्रत्येक प्रस्तावित ब्लॉकसाठी आणि एकमत साधण्याशी संबंधित इतर व्हॅलिडेटरच्या क्रियेसाठी प्रत्येक इपॉक चेकपॉइंटवर बक्षीस म्हणून इथर मिंट केले जाते. जारी केलेली एकूण रक्कम व्हॅलिडेटर्सच्या संख्येवर आणि त्यांनी किती इथर स्टेक केले आहेत यावर अवलंबून असते. सर्व व्हॅलिडेटर्स प्रामाणिक आणि ऑनलाइन असल्यास आदर्श परिस्थितीत हे एकूण जारीकरण व्हॅलिडेटर्समध्ये समान रीतीने विभागले जाते, परंतु प्रत्यक्षात ते व्हॅलिडेटरच्या कामगिरीनुसार बदलते. एकूण जारी केलेल्या रकमेपैकी सुमारे 1/8 ब्लॉक प्रस्तावकाला जातो; उर्वरित रक्कम इतर व्हॅलिडेटर्समध्ये वितरीत केली जाते. ब्लॉक प्रस्तावकांना व्यवहार शुल्कातून टिप्स आणि MEV-संबंधित उत्पन्न देखील मिळते, परंतु हे पुनर्नवीनीकरण केलेल्या इथरमधून येते, नवीन जारीकरणातून नाही. + +## इथर बर्न करणे {#burning-ether} + +ब्लॉक रिवॉर्ड्सद्वारे इथर तयार करण्याबरोबरच, 'बर्निंग' नावाच्या प्रक्रियेद्वारे इथर नष्ट केले जाऊ शकते. जेव्हा इथर बर्न होते, तेव्हा ते कायमचे चलनातून काढून टाकले जाते. + +इथेरियमवरील प्रत्येक व्यवहारामध्ये इथर बर्न होते. जेव्हा वापरकर्ते त्यांच्या व्यवहारांसाठी पैसे देतात, तेव्हा व्यवहाराच्या मागणीनुसार नेटवर्कद्वारे सेट केलेले बेस गॅस शुल्क नष्ट होते. हे, बदलत्या ब्लॉक आकारांसह आणि कमाल गॅस शुल्कासह, इथेरियमवर व्यवहार शुल्काच्या अंदाजाला सोपे करते. जेव्हा नेटवर्कची मागणी जास्त असते, तेव्हा [ब्लॉक्स](https://eth.blockscout.com/block/22580057) ते मिंट करण्यापेक्षा जास्त इथर बर्न करू शकतात, ज्यामुळे इथर जारीकरणाला प्रभावीपणे ऑफसेट करता येते. + +बेस फी बर्न केल्याने ब्लॉक निर्मात्याच्या व्यवहारांमध्ये फेरफार करण्याच्या क्षमतेत अडथळा येतो. उदाहरणार्थ, जर ब्लॉक निर्मात्यांना बेस फी मिळाली, तर ते त्यांचे स्वतःचे व्यवहार विनामूल्य समाविष्ट करू शकतील आणि इतर प्रत्येकासाठी बेस फी वाढवू शकतील. वैकल्पिकरित्या, ते काही वापरकर्त्यांना ऑफचेन बेस फी परत करू शकतील, ज्यामुळे अधिक अपारदर्शक आणि गुंतागुंतीचे व्यवहार शुल्क बाजार निर्माण होईल. + +## इथरचे डिनॉमिनेशन {#denominations} + +इथेरियमवरील अनेक व्यवहारांचे मूल्य लहान असल्याने, इथरचे अनेक डिनॉमिनेशन आहेत ज्यांचा संदर्भ खात्याची लहान एकके म्हणून दिला जाऊ शकतो. या डिनॉमिनेशनपैकी, Wei आणि gwei विशेषतः महत्त्वाचे आहेत. + +Wei ही इथरची सर्वात लहान संभाव्य रक्कम आहे, आणि परिणामी, [इथेरियम यलोपेपर](https://ethereum.github.io/yellowpaper/paper.pdf) सारख्या अनेक तांत्रिक अंमलबजावणी, सर्व गणना Wei मध्ये आधारित करतील. + +Gwei, गिगा-वेईचे संक्षिप्त रूप, इथेरियमवरील गॅस खर्चाचे वर्णन करण्यासाठी अनेकदा वापरले जाते. + +| डिनॉमिनेशन | इथरमधील मूल्य | सामान्य वापर | +| ---------- | ---------------- | --------------------- | +| Wei | 10-18 | तांत्रिक अंमलबजावणी | +| Gwei | 10-9 | मानव-वाचनीय गॅस शुल्क | + +## इथर हस्तांतरित करणे {#transferring-ether} + +इथेरियमवरील प्रत्येक व्यवहारामध्ये एक `value` फील्ड असते, जे प्रेषकाच्या पत्त्यावरून प्राप्तकर्त्याच्या पत्त्यावर पाठवण्यासाठी हस्तांतरित करायच्या इथरची रक्कम wei मध्ये निर्दिष्ट करते. + +जेव्हा प्राप्तकर्त्याचा पत्ता [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/) असतो, तेव्हा स्मार्ट कॉन्ट्रॅक्ट त्याचा कोड कार्यान्वित करतो तेव्हा हा हस्तांतरित केलेला इथर गॅससाठी पैसे देण्यासाठी वापरला जाऊ शकतो. + +[व्यवहारांवर अधिक](/developers/docs/transactions/) + +## इथरची क्वेरी करणे {#querying-ether} + +वापरकर्ते कोणत्याही [खात्याची](/developers/docs/accounts/) इथर शिल्लक खात्याच्या `balance` फील्डची तपासणी करून क्वेरी करू शकतात, जे wei मध्ये डिनॉमिनेटेड इथर होल्डिंग्ज दर्शवते. + +[Etherscan](https://etherscan.io) आणि [Blockscout](https://eth.blockscout.com) ही वेब-आधारित ॲप्लिकेशन्सद्वारे पत्त्यावरील शिल्लक तपासण्यासाठी लोकप्रिय साधने आहेत. उदाहरणार्थ, [हे Blockscout पृष्ठ](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) Ethereum फाउंडेशनची शिल्लक दर्शवते. वॉलेट्स वापरून किंवा थेट नोड्सना विनंती करून खात्यातील शिलकीची क्वेरी देखील केली जाऊ शकते. + +## पुढील वाचन {#further-reading} + +- [इथर आणि इथेरियमची व्याख्या](https://www.cmegroup.com/education/courses/introduction-to-ether/defining-ether-and-ethereum.html) – _CME Group_ +- [इथेरियम व्हाइटपेपर](/whitepaper/): इथेरियमसाठी मूळ प्रस्ताव. या दस्तऐवजात इथरचे वर्णन आणि त्याच्या निर्मितीमागील प्रेरणा समाविष्ट आहेत. +- [Gwei कॅल्क्युलेटर](https://www.alchemy.com/gwei-calculator): wei, gwei, आणि इथर सहजपणे रूपांतरित करण्यासाठी हा gwei कॅल्क्युलेटर वापरा. फक्त wei, gwei, किंवा ETH ची कोणतीही रक्कम टाका आणि आपोआप रूपांतरणाची गणना करा. + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/intro-to-ethereum/index.md b/public/content/translations/mr/developers/docs/intro-to-ethereum/index.md new file mode 100644 index 00000000000..872556f0e12 --- /dev/null +++ b/public/content/translations/mr/developers/docs/intro-to-ethereum/index.md @@ -0,0 +1,124 @@ +--- +title: "इथेरियमचा तांत्रिक परिचय" +description: "इथेरियमच्या मुख्य संकल्पनांचा dapp विकसकांसाठी परिचय." +lang: mr +--- + +## ब्लॉकचेन म्हणजे काय? {#what-is-a-blockchain} + +ब्लॉकचेन हा एक सार्वजनिक डेटाबेस आहे जो नेटवर्कमधील अनेक संगणकांवर अद्ययावत केला जातो आणि सामायिक केला जातो. + +"ब्लॉक" म्हणजे डेटा आणि स्थिती "ब्लॉक्स" नावाच्या सलग गटांमध्ये संग्रहित केली जाते. तुम्ही दुसऱ्या कोणाला ETH पाठवल्यास, व्यवहार यशस्वी होण्यासाठी त्याचा डेटा एका ब्लॉकमध्ये जोडला जाणे आवश्यक आहे. + +"चेन" म्हणजे प्रत्येक ब्लॉक क्रिप्टोग्राफिकली त्याच्या मूळ ब्लॉकचा संदर्भ देतो. दुसऱ्या शब्दांत, ब्लॉक्स एकमेकांशी जोडले जातात. त्यानंतरचे सर्व ब्लॉक्स बदलल्याशिवाय ब्लॉकमधील डेटा बदलता येत नाही, ज्यासाठी संपूर्ण नेटवर्कच्या सहमतीची आवश्यकता असेल. + +नेटवर्कमधील प्रत्येक संगणकाने प्रत्येक नवीन ब्लॉक आणि संपूर्ण चेनवर सहमत होणे आवश्यक आहे. हे संगणक "नोड्स" म्हणून ओळखले जातात. ब्लॉकचेनशी संवाद साधणाऱ्या प्रत्येकाकडे समान डेटा असल्याची खात्री नोड्स करतात. हा वितरित करार पूर्ण करण्यासाठी, ब्लॉकचेनला एक सहमती यंत्रणेची आवश्यकता असते. + +इथेरियम [प्रूफ-ऑफ-स्टेक-आधारित सहमती यंत्रणा](/developers/docs/consensus-mechanisms/pos/) वापरते. ज्या कोणालाही चेनमध्ये नवीन ब्लॉक्स जोडायचे आहेत, त्यांनी तारण म्हणून ETH - इथेरियममधील मूळ चलन - स्टेक करणे आणि व्हॅलिडेटर सॉफ्टवेअर चालवणे आवश्यक आहे. हे "व्हॅलिडेटर्स" नंतर ब्लॉक्स प्रस्तावित करण्यासाठी यादृच्छिकपणे निवडले जाऊ शकतात, जे इतर व्हॅलिडेटर्स तपासतात आणि ब्लॉकचेनमध्ये जोडतात. येथे बक्षिसे आणि दंडांची एक प्रणाली आहे जी सहभागींना प्रामाणिक राहण्यासाठी आणि शक्य तितके ऑनलाइन उपलब्ध राहण्यासाठी जोरदारपणे प्रोत्साहित करते. + +ब्लॉकचेन डेटा कसा हॅश केला जातो आणि त्यानंतर ब्लॉक संदर्भांच्या इतिहासात कसा जोडला जातो हे तुम्हाला पाहायचे असेल, तर अँडर्स ब्राउनवर्थ यांचा [हा डेमो](https://andersbrownworth.com/blockchain/blockchain) नक्की पहा आणि खालील सोबतचा व्हिडिओ पहा. + +ब्लॉकचेनमधील हॅशेसविषयी अँडर्स यांचे स्पष्टीकरण पहा: + + + +## अथेरम म्हणजे काय? इथेरियम म्हणजे काय? {#what-is-ethereum} + +इथेरियम एक ब्लॉकचेन आहे ज्यात एक संगणक अंतर्भूत आहे. विकेंद्रित, परवानगी-रहित, सेन्सॉरशिप-प्रतिरोधक पद्धतीने अ‍ॅप्स आणि संस्था तयार करण्यासाठीचा हा पाया आहे. + +इथेरियमच्या विश्वात, एकच, प्रमाणभूत संगणक आहे (ज्याला इथेरियम व्हर्च्युअल मशीन, किंवा EVM म्हणतात) ज्याच्या स्थितीवर इथेरियम नेटवर्कमधील प्रत्येकजण सहमत असतो. इथेरियम नेटवर्कमध्ये सहभागी होणारा प्रत्येकजण (प्रत्येक इथेरियम नोड) या संगणकाच्या स्थितीची एक प्रत ठेवतो. याव्यतिरिक्त, कोणताही सहभागी या संगणकाला कोणतीही गणना करण्यासाठी विनंती प्रसारित करू शकतो. जेव्हा अशी विनंती प्रसारित केली जाते, तेव्हा नेटवर्कवरील इतर सहभागी त्या गणनेची पडताळणी करतात, प्रमाणित करतात आणि ती पार पाडतात ("अंमलात आणतात"). या अंमलबजावणीमुळे EVM च्या स्थितीमध्ये बदल होतो, जो संपूर्ण नेटवर्कमध्ये वचनबद्ध आणि प्रसारित केला जातो. + +गणनेसाठीच्या विनंत्यांना व्यवहार विनंत्या म्हटले जाते; सर्व व्यवहारांची नोंद आणि EVM ची सद्य स्थिती ब्लॉकचेनवर संग्रहित केली जाते, जी नंतर सर्व नोड्सद्वारे संग्रहित केली जाते आणि त्यावर सहमती दर्शवली जाते. + +क्रिप्टोग्राफिक यंत्रणा हे सुनिश्चित करतात की एकदा व्यवहार वैध म्हणून सत्यापित करून ब्लॉकचेनमध्ये जोडले गेल्यावर, नंतर त्यात फेरफार करता येणार नाही. याच यंत्रणा हे देखील सुनिश्चित करतात की सर्व व्यवहार योग्य "परवानग्यांसह" स्वाक्षरी केलेले आणि अंमलात आणले जातात (स्वतः ॲलिस वगळता कोणीही ॲलिसच्या खात्यातून डिजिटल मालमत्ता पाठवू नये). + +## एथर म्हणजे काय? इथर म्हणजे काय? + +**इथर (ETH)** हे इथेरियमचे मूळ क्रिप्टोकरन्सी आहे. ETH चा उद्देश गणनेसाठी एक बाजारपेठ उपलब्ध करून देणे हा आहे. अशी बाजारपेठ सहभागींना व्यवहार विनंत्या सत्यापित करण्यासाठी आणि अंमलात आणण्यासाठी, तसेच नेटवर्कला गणनेची संसाधने पुरवण्यासाठी आर्थिक प्रोत्साहन देते. + +व्यवहार विनंती प्रसारित करणार्‍या कोणत्याही सहभागीने नेटवर्कला बक्षीस म्हणून काही प्रमाणात ETH देऊ करणे आवश्यक आहे. नेटवर्क बक्षीसाचा काही भाग बर्न करेल आणि उर्वरित भाग त्या व्यक्तीला देईल जो अखेरीस व्यवहार सत्यापित करणे, त्याची अंमलबजावणी करणे, त्याला ब्लॉकचेनमध्ये समाविष्ट करणे आणि नेटवर्कवर प्रसारित करण्याचे काम करतो. + +दिलेल्या ETH ची रक्कम गणनेसाठी आवश्यक असलेल्या संसाधनांच्या प्रमाणात असते. हे बक्षीस दुर्भावनापूर्ण सहभागींना अमर्याद गणना किंवा इतर संसाधन-केंद्रित स्क्रिप्ट्सच्या अंमलबजावणीची विनंती करून हेतुपुरस्सर नेटवर्क जाम करण्यापासून देखील प्रतिबंधित करतात, कारण या सहभागींना गणनेच्या संसाधनांसाठी पैसे द्यावे लागतात. + +ETH चा वापर नेटवर्कला तीन मुख्य मार्गांनी क्रिप्टो-आर्थिक सुरक्षा प्रदान करण्यासाठी देखील केला जातो: १) जे व्हॅलिडेटर्स ब्लॉक्स प्रस्तावित करतात किंवा इतर व्हॅलिडेटर्सच्या अप्रामाणिक वर्तनावर बोट ठेवतात त्यांना बक्षीस देण्यासाठी याचा वापर केला जातो; २) हे व्हॅलिडेटर्सद्वारे स्टेक केले जाते, जे अप्रामाणिक वर्तनाविरुद्ध तारण म्हणून काम करते—जर व्हॅलिडेटर्सनी गैरवर्तन करण्याचा प्रयत्न केला तर त्यांचे ETH नष्ट केले जाऊ शकते; ३) नवीन प्रस्तावित ब्लॉक्ससाठी 'मते' तोलण्यासाठी याचा वापर केला जातो, जे सहमती यंत्रणेच्या फोर्क-चॉईस भागात योगदान देते. + +## स्मार्ट करार म्हणजे काय? स्मार्ट कॉन्ट्रॅक्ट्स म्हणजे काय? {#what-are-smart-contracts} + +व्यवहारात, सहभागी प्रत्येक वेळी EVM वर गणनेची विनंती करताना नवीन कोड लिहित नाहीत. त्याऐवजी, ॲप्लिकेशन डेव्हलपर प्रोग्राम्स (कोडचे पुन्हा वापरता येण्याजोगे स्निपेट्स) EVM स्थितीमध्ये अपलोड करतात आणि वापरकर्ते विविध पॅरामीटर्ससह हे कोड स्निपेट्स कार्यान्वित करण्याची विनंती करतात. नेटवर्कवर अपलोड आणि कार्यान्वित केलेल्या प्रोग्राम्सना आम्ही "स्मार्ट कॉन्ट्रॅक्ट्स" म्हणतो. + +अगदी मूलभूत स्तरावर, तुम्ही स्मार्ट कॉन्ट्रॅक्टला एका प्रकारच्या व्हेंडिंग मशीनसारखे समजू शकता: एक स्क्रिप्ट जी, विशिष्ट पॅरामीटर्ससह कॉल केल्यावर, काही अटी पूर्ण झाल्यास काही क्रिया किंवा गणना करते. उदाहरणार्थ, जर कॉलरने विशिष्ट प्राप्तकर्त्याला ETH पाठवले तर एक साधा विक्रेता स्मार्ट कॉन्ट्रॅक्ट डिजिटल मालमत्ता तयार करू शकतो आणि तिची मालकी देऊ शकतो. + +कोणताही डेव्हलपर नेटवर्कला शुल्क देऊन, ब्लॉकचेनचा डेटा लेअर म्हणून वापर करून, एक स्मार्ट कॉन्ट्रॅक्ट तयार करू शकतो आणि तो नेटवर्कसाठी सार्वजनिक करू शकतो. नंतर कोणताही वापरकर्ता पुन्हा नेटवर्कला शुल्क देऊन, त्याचा कोड कार्यान्वित करण्यासाठी स्मार्ट कॉन्ट्रॅक्टला कॉल करू शकतो. + +अशाप्रकारे, स्मार्ट कॉन्ट्रॅक्ट्सद्वारे, डेव्हलपर वापरकर्त्यांसाठी कितीही क्लिष्ट अ‍ॅप्स आणि सेवा जसे की: बाजारपेठा, आर्थिक साधने, खेळ इत्यादी तयार आणि तैनात करू शकतात. + +## परिभाषा {#terminology} + +### ब्लॉकचेन {#blockchain} + +नेटवर्कच्या इतिहासात इथेरियम नेटवर्कवर वचनबद्ध केलेल्या सर्व ब्लॉक्सचा क्रम. असे नाव दिले आहे कारण प्रत्येक ब्लॉकमध्ये मागील ब्लॉकचा संदर्भ असतो, जे आपल्याला सर्व ब्लॉक्सवर (आणि त्यामुळे अचूक इतिहासावर) एक क्रम राखण्यास मदत करते. + +### ETH {#eth} + +**इथर (ETH)** हे इथेरियमचे मूळ क्रिप्टोकरन्सी आहे. वापरकर्ते त्यांच्या कोड अंमलबजावणीच्या विनंत्या पूर्ण करून घेण्यासाठी इतर वापरकर्त्यांना ETH देतात. + +[ETH बद्दल अधिक](/developers/docs/intro-to-ether/) + +### EVM {#evm} + +इथेरियम व्हर्च्युअल मशीन हा जागतिक व्हर्च्युअल संगणक आहे ज्याची स्थिती इथेरियम नेटवर्कवरील प्रत्येक सहभागी संग्रहित करतो आणि त्यावर सहमत असतो. कोणताही सहभागी EVM वर कोणत्याही कोडच्या अंमलबजावणीची विनंती करू शकतो; कोडच्या अंमलबजावणीमुळे EVM ची स्थिती बदलते. + +[EVM बद्दल अधिक](/developers/docs/evm/) + +### नोड्स {#nodes} + +वास्तविक जीवनातील मशीन्स जे EVM स्थिती संग्रहित करत आहेत. EVM स्थिती आणि नवीन स्थिती बदलांविषयी माहिती प्रसारित करण्यासाठी नोड्स एकमेकांशी संवाद साधतात. कोणताही वापरकर्ता नोडमधून कोड अंमलबजावणीची विनंती प्रसारित करून कोडच्या अंमलबजावणीची विनंती देखील करू शकतो. इथेरियम नेटवर्क स्वतः सर्व इथेरियम नोड्स आणि त्यांच्या संवादांचे एकत्रीकरण आहे. + +[नोड्सबद्दल अधिक](/developers/docs/nodes-and-clients/) + +### खाती {#accounts} + +जेथे ETH संग्रहित केले जाते. वापरकर्ते खाती सुरू करू शकतात, खात्यांमध्ये ETH जमा करू शकतात आणि त्यांच्या खात्यांमधून इतर वापरकर्त्यांना ETH हस्तांतरित करू शकतात. खाती आणि खात्यातील शिल्लक EVM मधील एका मोठ्या टेबलमध्ये संग्रहित केली जातात; ते एकूण EVM स्थितीचा एक भाग आहेत. + +[खात्यांबद्दल अधिक](/developers/docs/accounts/) + +### व्यवहार {#transactions} + +"व्यवहार विनंती" ही EVM वरील कोड अंमलबजावणीच्या विनंतीसाठी औपचारिक संज्ञा आहे, आणि "व्यवहार" म्हणजे एक पूर्ण झालेली व्यवहार विनंती आणि EVM स्थितीतील संबंधित बदल. कोणताही वापरकर्ता नोडमधून नेटवर्कवर व्यवहार विनंती प्रसारित करू शकतो. व्यवहार विनंतीने मान्य केलेल्या EVM स्थितीवर परिणाम करण्यासाठी, ती दुसऱ्या नोडद्वारे प्रमाणित, अंमलात आणली आणि "नेटवर्कवर वचनबद्ध" केली जाणे आवश्यक आहे. कोणत्याही कोडच्या अंमलबजावणीमुळे EVM च्या स्थितीत बदल होतो; वचनबद्धतेनंतर, हा स्थिती बदल नेटवर्कमधील सर्व नोड्सवर प्रसारित केला जातो. व्यवहारांची काही उदाहरणे: + +- माझ्या खात्यातून ॲलिसच्या खात्यात X ETH पाठवा. +- काही स्मार्ट कॉन्ट्रॅक्ट कोड EVM स्थितीत प्रकाशित करा. +- EVM मधील X पत्त्यावर असलेल्या स्मार्ट कॉन्ट्रॅक्टचा कोड, Y वितर्कांसह कार्यान्वित करा. + +[व्यवहारांवर अधिक](/developers/docs/transactions/) + +### ब्लॉक्स {#blocks} + +व्यवहारांचे प्रमाण खूप जास्त आहे, म्हणून व्यवहार बॅचमध्ये किंवा ब्लॉक्समध्ये "वचनबद्ध" केले जातात. ब्लॉक्समध्ये साधारणपणे डझनभर ते शेकडो व्यवहार असतात. + +[ब्लॉक्सबद्दल अधिक](/developers/docs/blocks/) + +### स्मार्ट कॉन्ट्रॅक्ट्स {#smart-contracts} + +कोडचा पुन्हा वापरता येण्याजोगा एक स्निपेट (एक प्रोग्राम) जो एक डेव्हलपर EVM स्थितीत प्रकाशित करतो. कोणीही व्यवहार विनंती करून स्मार्ट कॉन्ट्रॅक्ट कोड कार्यान्वित करण्याची विनंती करू शकतो. कारण डेव्हलपर EVM मध्ये कोणतेही कार्यान्वित करण्यायोग्य ॲप्लिकेशन्स (खेळ, बाजारपेठा, आर्थिक साधने, इत्यादी) लिहू शकतात स्मार्ट कॉन्ट्रॅक्ट्स प्रकाशित करून, यांना अनेकदा [dapps, किंवा विकेंद्रित ॲप्स](/developers/docs/dapps/) असेही म्हटले जाते. + +[स्मार्ट कॉन्ट्रॅक्ट्सबद्दल अधिक](/developers/docs/smart-contracts/) + +## पुढील वाचन {#further-reading} + +- [इथेरियम व्हाइटपेपर](/whitepaper/) +- [तरीही, इथेरियम कसे कार्य करते?](https://medium.com/@preethikasireddy/how-does-ethereum-work-anyway-22d1df506369) - _प्रीती कासिरेड्डी_ (**टीप:** हे संसाधन अजूनही मौल्यवान आहे परंतु लक्षात ठेवा की ते [द मर्ज](/roadmap/merge) पूर्वीचे आहे आणि त्यामुळे ते अजूनही इथेरियमच्या प्रूफ-ऑफ-वर्क यंत्रणेचा संदर्भ देते - इथेरियम आता प्रत्यक्षात [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) वापरून सुरक्षित आहे) + +### तुम्ही पाहून शिकणारे आहात का? {#visual-learner} + +ही व्हिडिओ मालिका पायाभूत विषयांचे सखोल अन्वेषण करते: + + + +[इथेरियम मूलभूत प्लेलिस्ट](https://youtube.com/playlist?list=PLqgutSGloqiJyyoL0zvLVFPS-GMD2wKa5&si=kZTf5I7PKGTXDsOZ) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [डेव्हलपरसाठी इथेरियम मार्गदर्शक, भाग 1](/developers/tutorials/a-developers-guide-to-ethereum-part-one/) _– पायथन आणि web3.py वापरून इथेरियमचे अतिशय नवशिक्या-अनुकूल अन्वेषण_ diff --git a/public/content/translations/mr/developers/docs/mev/index.md b/public/content/translations/mr/developers/docs/mev/index.md new file mode 100644 index 00000000000..5d128e67958 --- /dev/null +++ b/public/content/translations/mr/developers/docs/mev/index.md @@ -0,0 +1,221 @@ +--- +title: "मॅक्सिमम एक्सट्रॅक्टेबल व्हॅल्यू (MEV)" +description: "मॅक्सिमम एक्सट्रॅक्टेबल व्हॅल्यू (MEV) चा परिचय" +lang: mr +--- + +मॅक्सिमल एक्स्ट्रॅक्टेबल व्हॅल्यू (MEV) म्हणजे ब्लॉक रिवॉर्ड आणि गॅस फी व्यतिरिक्त, ब्लॉकमधील ट्रान्झॅक्शनचा समावेश करणे, वगळणे आणि क्रम बदलून ब्लॉक उत्पादनातून काढता येणारे कमाल मूल्य. + +## मॅक्सिमल एक्स्ट्रॅक्टेबल व्हॅल्यू {#maximal-extractable-value} + +मॅक्सिमल एक्स्ट्रॅक्टेबल व्हॅल्यू हे प्रथम [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) च्या संदर्भात लागू केले गेले होते आणि सुरुवातीला त्याला "मायनर एक्स्ट्रॅक्टेबल व्हॅल्यू" असे संबोधले जात असे. याचे कारण असे की प्रूफ-ऑफ-वर्कमध्ये, मायनर्स ट्रान्झॅक्शनचा समावेश, वगळणे आणि क्रमवारी नियंत्रित करतात. तथापि, [द मर्ज](/roadmap/merge) द्वारे प्रूफ-ऑफ-स्टेकमध्ये संक्रमण झाल्यामुळे, व्हॅलिडेटर्स या भूमिकांसाठी जबाबदार आहेत आणि मायनिंग आता Ethereum प्रोटोकॉलचा भाग नाही. तरीही मूल्य काढण्याच्या पद्धती अस्तित्वात आहेत, म्हणून आता त्याऐवजी "मॅक्सिमल एक्स्ट्रॅक्टेबल व्हॅल्यू" हा शब्द वापरला जातो. + +## पूर्वतयारी {#prerequisites} + +तुम्ही [ट्रान्झॅक्शन्स](/developers/docs/transactions/), [ब्लॉक्स](/developers/docs/blocks/), [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) आणि [गॅस](/developers/docs/gas/) यांच्याशी परिचित आहात याची खात्री करा. [dapps](/apps/) आणि [DeFi](/defi/) शी ओळख असणे देखील उपयुक्त आहे. + +## MEV एक्स्ट्रॅक्शन {#mev-extraction} + +सिद्धांतानुसार MEV पूर्णपणे व्हॅलिडेटर्सना मिळते कारण ते एकमेव पक्ष आहेत जे फायदेशीर MEV संधीच्या अंमलबजावणीची हमी देऊ शकतात. तथापि, व्यवहारात, MEV चा मोठा भाग "सर्चर्स" म्हणून ओळखल्या जाणाऱ्या स्वतंत्र नेटवर्क सहभागींद्वारे काढला जातो. सर्चर्स फायदेशीर MEV संधी शोधण्यासाठी ब्लॉकचेन डेटावर जटिल अल्गोरिदम चालवतात आणि त्या फायदेशीर ट्रान्झॅक्शन्स नेटवर्कवर स्वयंचलितपणे सबमिट करण्यासाठी बॉट्स वापरतात. + +व्हॅलिडेटर्सना तरीही पूर्ण MEV रकमेचा काही भाग मिळतो कारण सर्चर्स त्यांच्या फायदेशीर ट्रान्झॅक्शन्सना ब्लॉकमध्ये समाविष्ट करण्याची शक्यता वाढवण्याच्या बदल्यात जास्त गॅस फी (जी व्हॅलिडेटरला जाते) देण्यास तयार असतात. सर्चर्स आर्थिकदृष्ट्या तर्कसंगत आहेत असे गृहीत धरल्यास, सर्चर देण्यास तयार असलेली गॅस फी सर्चरच्या MEV च्या १००% पर्यंत असेल (कारण गॅस फी जास्त असल्यास, सर्चरचे नुकसान होईल). + +त्यामुळे, [DEX आर्बिट्राज](#mev-examples-dex-arbitrage) सारख्या काही अत्यंत स्पर्धात्मक MEV संधींसाठी, सर्चर्सना त्यांच्या एकूण MEV महसुलाच्या ९०% किंवा त्याहून अधिक गॅस फी व्हॅलिडेटरला द्यावी लागू शकते कारण अनेक लोकांना तोच फायदेशीर आर्बिट्राज ट्रेड चालवायचा असतो. याचे कारण असे की त्यांचे आर्बिट्राज ट्रान्झॅक्शन चालेल याची हमी देण्याचा एकमेव मार्ग म्हणजे त्यांनी सर्वात जास्त गॅस किंमतीसह ट्रान्झॅक्शन सबमिट करणे. + +### गॅस गोल्फिंग {#mev-extraction-gas-golfing} + +या गतिमानतेमुळे "गॅस गोल्फिंग" मध्ये चांगले असणे — म्हणजेच ट्रान्झॅक्शन्सना अशा प्रकारे प्रोग्रामिंग करणे जेणेकरून ते कमीत कमी गॅस वापरतील — एक स्पर्धात्मक फायदा बनला आहे, कारण यामुळे सर्चर्सना त्यांची एकूण गॅस फी स्थिर ठेवून (कारण गॅस फी = गॅस किंमत \* वापरलेला गॅस) जास्त गॅस किंमत सेट करण्याची अनुमती मिळते. + +काही सुप्रसिद्ध गॅस गोल्फ तंत्रांमध्ये यांचा समावेश आहे: शून्यांच्या लांबलचक स्ट्रिंगने सुरू होणारे पत्ते वापरणे (उदा., [0x0000000000C521824EaFf97Eac7B73B084ef9306](https://eth.blockscout.com/address/0x0000000000C521824EaFf97Eac7B73B084ef9306)) कारण ते संग्रहित करण्यासाठी कमी जागा (आणि त्यामुळे गॅस) घेतात; आणि कॉन्ट्रॅक्टमध्ये लहान [ERC-20](/developers/docs/standards/tokens/erc-20/) टोकन बॅलन्स ठेवणे, कारण स्टोरेज स्लॉट अपडेट करण्यापेक्षा स्टोरेज स्लॉट सुरू करण्यासाठी (बॅलन्स 0 असल्यास) जास्त गॅस लागतो. गॅसचा वापर कमी करण्यासाठी अधिक तंत्रे शोधणे हे सर्चर्समध्ये संशोधनाचे एक सक्रिय क्षेत्र आहे. + +### जनरलाइज्ड फ्रंटरनर्स {#mev-extraction-generalized-frontrunners} + +फायदेशीर MEV संधी शोधण्यासाठी जटिल अल्गोरिदम प्रोग्राम करण्याऐवजी, काही सर्चर्स जनरलाइज्ड फ्रंटरनर्स चालवतात. जनरलाइज्ड फ्रंटरनर्स हे बॉट्स आहेत जे फायदेशीर ट्रान्झॅक्शन्स शोधण्यासाठी मेमपूलवर लक्ष ठेवतात. फ्रंटनरनर संभाव्य फायदेशीर ट्रान्झॅक्शनचा कोड कॉपी करेल, पत्ते फ्रंटनरनरच्या पत्त्यासह बदलेल आणि सुधारित ट्रान्झॅक्शनमुळे फ्रंटनरनरच्या पत्त्यावर नफा होतो की नाही हे तपासण्यासाठी स्थानिक पातळीवर ट्रान्झॅक्शन चालवेल. जर ट्रान्झॅक्शन खरोखरच फायदेशीर असेल, तर फ्रंटनरनर बदललेल्या पत्त्यासह आणि जास्त गॅस किंमतीसह सुधारित ट्रान्झॅक्शन सबमिट करेल, मूळ ट्रान्झॅक्शनला "फ्रंटरनिंग" करेल आणि मूळ सर्चरचा MEV मिळवेल. + +### Flashbots {#mev-extraction-flashbots} + +Flashbots हा एक स्वतंत्र प्रकल्प आहे जो एक्सिक्यूशन क्लायंटना एका सेवेद्वारे विस्तारित करतो ज्यामुळे सर्चर्सना सार्वजनिक मेमपूलमध्ये उघड न करता व्हॅलिडेटर्सना MEV ट्रान्झॅक्शन्स सबमिट करण्याची अनुमती मिळते. यामुळे जनरलाइज्ड फ्रंटरनर्सद्वारे ट्रान्झॅक्शन्सना फ्रंटरन होण्यापासून प्रतिबंधित करते. + +## MEV उदाहरणे {#mev-examples} + +MEV ब्लॉकचेनवर काही मार्गांनी उदयास येते. + +### DEX आर्बिट्राज {#mev-examples-dex-arbitrage} + +[डिसेंट्रलाइज्ड एक्सचेंज](/glossary/#dex) (DEX) आर्बिट्राज ही सर्वात सोपी आणि सर्वात प्रसिद्ध MEV संधी आहे. परिणामी, ही सर्वात स्पर्धात्मक देखील आहे. + +हे असे कार्य करते: जर दोन DEXes दोन वेगवेगळ्या किमतींवर एक टोकन देत असतील, तर कोणीतरी कमी किमतीच्या DEX वर टोकन खरेदी करू शकतो आणि एकाच, अ‍ॅटॉमिक ट्रान्झॅक्शनमध्ये जास्त किमतीच्या DEX वर विकू शकतो. ब्लॉकचेनच्या यांत्रिकीमुळे, हे खरे, जोखीममुक्त आर्बिट्राज आहे. + +येथे एका फायदेशीर आर्बिट्राज ट्रान्झॅक्शनचे [एक उदाहरण आहे](https://eth.blockscout.com/tx/0x5e1657ef0e9be9bc72efefe59a2528d0d730d478cfc9e6cdd09af9f997bb3ef4), जिथे एका सर्चरने Uniswap विरुद्ध Sushiswap वर ETH/DAI जोडीच्या वेगवेगळ्या किंमतींचा फायदा घेऊन 1,000 ETH चे 1,045 ETH मध्ये रूपांतर केले. + +### लिक्विडेशन्स {#mev-examples-liquidations} + +लेंडिंग प्रोटोकॉल लिक्विडेशन्स ही आणखी एक सुप्रसिद्ध MEV संधी आहे. + +Maker आणि Aave सारख्या लेंडिंग प्रोटोकॉलमध्ये वापरकर्त्यांना काही कोलॅटरल (उदा., ETH) जमा करणे आवश्यक असते. हे जमा केलेले कोलॅटरल नंतर इतर वापरकर्त्यांना कर्ज देण्यासाठी वापरले जाते. + +वापरकर्ते नंतर त्यांच्या गरजेनुसार इतरांकडून मालमत्ता आणि टोकन कर्ज घेऊ शकतात (उदा., तुम्हाला MakerDAO गव्हर्नन्स प्रस्तावात मत द्यायचे असल्यास तुम्ही MKR कर्ज घेऊ शकता) त्यांच्या जमा केलेल्या कोलॅटरलच्या ठराविक टक्केवारीपर्यंत. उदाहरणार्थ, जर कर्जाची रक्कम कमाल ३०% असेल, तर प्रोटोकॉलमध्ये १०० DAI जमा करणारा वापरकर्ता दुसऱ्या मालमत्तेच्या ३० DAI पर्यंत कर्ज घेऊ शकतो. प्रोटोकॉल कर्जाच्या क्षमतेची नेमकी टक्केवारी ठरवते. + +कर्जदाराच्या कोलॅटरलचे मूल्य जसे बदलते, तशीच त्यांची कर्ज घेण्याची क्षमताही बदलते. जर, बाजारातील चढउतारामुळे, कर्ज घेतलेल्या मालमत्तेचे मूल्य त्यांच्या कोलॅटरलच्या मूल्याच्या ३०% पेक्षा जास्त झाले (पुन्हा, नेमकी टक्केवारी प्रोटोकॉलद्वारे निर्धारित केली जाते), तर प्रोटोकॉल सामान्यतः कोणालाही कोलॅटरल लिक्विडेट करण्याची परवानगी देतो, ज्यामुळे कर्जदारांना त्वरित पैसे परत मिळतात (हे पारंपारिक फायनान्समध्ये [मार्जिन कॉल्स](https://www.investopedia.com/terms/m/margincall.asp) कसे कार्य करतात यासारखेच आहे). लिक्विडेट झाल्यास, कर्जदाराला सहसा मोठी लिक्विडेशन फी भरावी लागते, ज्यापैकी काही भाग लिक्विडेटरला जातो — इथेच MEV ची संधी निर्माण होते. + +कोणत्या कर्जदारांना लिक्विडेट केले जाऊ शकते हे ठरवण्यासाठी आणि लिक्विडेशन ट्रान्झॅक्शन सबमिट करणारे पहिले होऊन स्वतःसाठी लिक्विडेशन फी गोळा करण्यासाठी सर्चर्स शक्य तितक्या वेगाने ब्लॉकचेन डेटाचे विश्लेषण करण्यासाठी स्पर्धा करतात. + +### सँडविच ट्रेडिंग {#mev-examples-sandwich-trading} + +सँडविच ट्रेडिंग ही MEV एक्स्ट्रॅक्शनची दुसरी सामान्य पद्धत आहे. + +सँडविच करण्यासाठी, एक सर्चर मोठ्या DEX ट्रेड्ससाठी मेमपूलवर लक्ष ठेवेल. उदाहरणार्थ, समजा कोणालातरी Uniswap वर DAI देऊन १०,००० UNI खरेदी करायचे आहेत. या तीव्रतेच्या ट्रेडचा UNI/DAI जोडीवर महत्त्वपूर्ण परिणाम होईल, ज्यामुळे DAI च्या तुलनेत UNI ची किंमत लक्षणीयरीत्या वाढू शकते. + +एक सर्चर UNI/DAI जोडीवर या मोठ्या ट्रेडच्या अंदाजित किंमत प्रभावाची गणना करू शकतो आणि मोठ्या ट्रेडच्या लगेच _आधी_ एक उत्तम खरेदी ऑर्डर कार्यान्वित करू शकतो, स्वस्तात UNI खरेदी करून, नंतर मोठ्या ट्रेडच्या लगेच _नंतर_ विक्री ऑर्डर कार्यान्वित करू शकतो, मोठ्या ऑर्डरमुळे वाढलेल्या किमतीला ते विकून. + +तथापि, सँडविचिंग अधिक जोखमीचे आहे कारण ते अ‍ॅटॉमिक नाही (वर वर्णन केलेल्या DEX आर्बिट्राजच्या विपरीत) आणि ते [salmonella attack](https://github.com/Defi-Cartel/salmonella) ला बळी पडू शकते. + +### NFT MEV {#mev-examples-nfts} + +NFT क्षेत्रात MEV ही एक उदयोन्मुख घटना आहे, आणि ती नेहमीच फायदेशीर नसते. + +तथापि, NFT ट्रान्झॅक्शन्स त्याच ब्लॉकचेनवर होतात ज्यावर इतर सर्व Ethereum ट्रान्झॅक्शन्स होतात, त्यामुळे सर्चर्स NFT मार्केटमध्ये पारंपारिक MEV संधींमध्ये वापरल्या जाणाऱ्या तंत्रांसारखीच तंत्रे वापरू शकतात. + +उदाहरणार्थ, जर एखादा लोकप्रिय NFT ड्रॉप असेल आणि सर्चरला ठराविक NFT किंवा NFTs चा सेट हवा असेल, तर ते अशा प्रकारे ट्रान्झॅक्शन प्रोग्राम करू शकतात की ते NFT खरेदी करण्यासाठी रांगेत पहिले असतील, किंवा ते एकाच ट्रान्झॅक्शनमध्ये NFTs चा संपूर्ण सेट खरेदी करू शकतात. किंवा जर एखादे NFT [चुकून कमी किमतीत सूचीबद्ध झाले](https://www.theblockcrypto.com/post/113546/mistake-sees-69000-cryptopunk-sold-for-less-than-a-cent), तर एक सर्चर इतर खरेदीदारांना फ्रंटरन करून ते स्वस्तात मिळवू शकतो. + +NFT MEV चे एक प्रमुख उदाहरण तेव्हा घडले जेव्हा एका सर्चरने ७ दशलक्ष डॉलर्स खर्च करून प्राइस फ्लोरवर प्रत्येक Cryptopunk [खरेदी केला](https://eth.blockscout.com/address/0x650dCdEB6ecF05aE3CAF30A70966E2F395d5E9E5?tab=txs). एका ब्लॉकचेन संशोधकाने [Twitter वर स्पष्ट केले](https://twitter.com/IvanBogatyy/status/1422232184493121538) की खरेदीदाराने आपली खरेदी गुप्त ठेवण्यासाठी MEV प्रदात्यासोबत कसे काम केले. + +### लाँग टेल {#mev-examples-long-tail} + +DEX आर्बिट्राज, लिक्विडेशन्स आणि सँडविच ट्रेडिंग या सर्व सुप्रसिद्ध MEV संधी आहेत आणि नवीन सर्चर्ससाठी फायदेशीर ठरण्याची शक्यता कमी आहे. तथापि, कमी ज्ञात MEV संधींची एक लाँग टेल आहे (NFT MEV ही अशीच एक संधी आहे). + +जे सर्चर्स नुकतेच सुरुवात करत आहेत त्यांना या लाँग टेलमध्ये MEV शोधून अधिक यश मिळू शकते. Flashbot चा [MEV जॉब बोर्ड](https://github.com/flashbots/mev-job-board) काही उदयोन्मुख संधींची यादी करतो. + +## MEV चे परिणाम {#effects-of-mev} + +MEV पूर्णपणे वाईट नाही — Ethereum वर MEV चे सकारात्मक आणि नकारात्मक दोन्ही परिणाम आहेत. + +### चांगले {#effects-of-mev-the-good} + +अनेक DeFi प्रकल्प त्यांच्या प्रोटोकॉलची उपयुक्तता आणि स्थिरता सुनिश्चित करण्यासाठी आर्थिकदृष्ट्या तर्कसंगत घटकांवर अवलंबून असतात. उदाहरणार्थ, DEX आर्बिट्राज हे सुनिश्चित करते की वापरकर्त्यांना त्यांच्या टोकनसाठी सर्वोत्तम, सर्वात योग्य किंमती मिळतील आणि लेंडिंग प्रोटोकॉल कर्जदारांना पैसे परत मिळतील याची खात्री करण्यासाठी कर्जदार कोलॅटरलायझेशन गुणोत्तराच्या खाली आल्यावर जलद लिक्विडेशनवर अवलंबून असतात. + +आर्थिक अकार्यक्षमता शोधणारे आणि दुरुस्त करणारे आणि प्रोटोकॉलच्या आर्थिक प्रोत्साहनांचा फायदा घेणारे तर्कसंगत सर्चर्स नसतील तर, DeFi प्रोटोकॉल आणि सर्वसाधारणपणे dapps आज जितके मजबूत आहेत तितके मजबूत नसतील. + +### वाईट {#effects-of-mev-the-bad} + +अ‍ॅप्लिकेशन लेयरवर, MEV चे काही प्रकार, जसे की सँडविच ट्रेडिंग, वापरकर्त्यांसाठी निःसंशयपणे वाईट अनुभवाचे कारण ठरतात. सँडविच झालेल्या वापरकर्त्यांना त्यांच्या ट्रेड्सवर वाढीव स्लिपेज आणि खराब एक्सिक्यूशनचा सामना करावा लागतो. + +नेटवर्क लेयरवर, जनरलाइज्ड फ्रंटरनर्स आणि ते अनेकदा सहभागी होणारे गॅस-प्राइस ऑक्शन्स (जेव्हा दोन किंवा अधिक फ्रंटरनर्स त्यांच्या ट्रान्झॅक्शनला पुढील ब्लॉकमध्ये समाविष्ट करण्यासाठी स्पर्धा करतात आणि स्वतःच्या ट्रान्झॅक्शनची गॅस किंमत हळूहळू वाढवतात) यामुळे नेटवर्क कंजेशन आणि सामान्य ट्रान्झॅक्शन्स चालवण्याचा प्रयत्न करणाऱ्या इतर सर्वांसाठी उच्च गॅस किंमती होतात. + +ब्लॉक्सच्या _आत_ काय घडत आहे यापलीकडे, MEV चे ब्लॉक्सच्या _दरम्यान_ हानिकारक परिणाम होऊ शकतात. जर ब्लॉकमध्ये उपलब्ध MEV मानक ब्लॉक रिवॉर्डपेक्षा लक्षणीयरीत्या जास्त असेल, तर व्हॅलिडेटर्सना ब्लॉक्सचे रिऑर्गनायझेशन करण्यासाठी आणि स्वतःसाठी MEV मिळवण्यासाठी प्रोत्साहन मिळू शकते, ज्यामुळे ब्लॉकचेन रि-ऑर्गनायझेशन आणि कन्सेन्सस अस्थिरता निर्माण होते. + +ब्लॉकचेन रि-ऑर्गनायझेशनची ही शक्यता [पूर्वी Bitcoin ब्लॉकचेनवर तपासली गेली आहे](https://dl.acm.org/doi/10.1145/2976749.2978408). Bitcoin चा ब्लॉक रिवॉर्ड अर्धा होत असताना आणि ट्रान्झॅक्शन फी ब्लॉक रिवॉर्डचा अधिकाधिक मोठा भाग बनत असताना, अशी परिस्थिती निर्माण होते जिथे मायनर्ससाठी पुढील ब्लॉकचा रिवॉर्ड सोडून देणे आणि त्याऐवजी जास्त फी असलेले मागील ब्लॉक्स पुन्हा माइन करणे आर्थिकदृष्ट्या तर्कसंगत ठरते. MEV च्या वाढीसह, Ethereum मध्येही अशीच परिस्थिती उद्भवू शकते, ज्यामुळे ब्लॉकचेनच्या अखंडतेला धोका निर्माण होतो. + +## MEV ची स्थिती {#state-of-mev} + +२०२१ च्या सुरुवातीला MEV एक्स्ट्रॅक्शनमध्ये मोठी वाढ झाली, ज्यामुळे वर्षाच्या पहिल्या काही महिन्यांत गॅसच्या किमती प्रचंड वाढल्या. Flashbots च्या MEV रिलेच्या उदयामुळे जनरलाइज्ड फ्रंटरनर्सची प्रभावीता कमी झाली आहे आणि गॅस प्राइस ऑक्शन्स ऑफचेन गेले आहेत, ज्यामुळे सामान्य वापरकर्त्यांसाठी गॅसच्या किमती कमी झाल्या आहेत. + +जरी अनेक सर्चर्स अजूनही MEV मधून चांगली कमाई करत असले तरी, संधी अधिक ज्ञात झाल्यामुळे आणि अधिकाधिक सर्चर्स त्याच संधीसाठी स्पर्धा करत असल्यामुळे, व्हॅलिडेटर्स एकूण MEV महसुलाचा अधिकाधिक भाग मिळवतील (कारण वर वर्णन केल्याप्रमाणेच गॅस ऑक्शन्स Flashbots मध्ये देखील होतात, जरी खासगी असले तरी, आणि व्हॅलिडेटर्स परिणामी गॅस महसूल मिळवतील). MEV फक्त Ethereum पुरते मर्यादित नाही, आणि Ethereum वर संधी अधिक स्पर्धात्मक होत असल्याने, सर्चर्स Binance Smart Chain सारख्या पर्यायी ब्लॉकचेनकडे वळत आहेत, जिथे Ethereum सारख्याच MEV संधी कमी स्पर्धेत अस्तित्वात आहेत. + +दुसरीकडे, प्रूफ-ऑफ-वर्कमधून प्रूफ-ऑफ-स्टेककडे संक्रमण आणि रोलअप वापरून Ethereum ला स्केल करण्याचे चालू प्रयत्न हे सर्व MEV लँडस्केपमध्ये अशा प्रकारे बदल घडवत आहेत जे अद्याप काहीसे अस्पष्ट आहेत. प्रूफ-ऑफ-वर्कमधील संभाव्य मॉडेलच्या तुलनेत, थोडे आगाऊ ज्ञात असलेले हमीपूर्ण ब्लॉक-प्रपोजर्स MEV एक्स्ट्रॅक्शनची गतिशीलता कशी बदलतात किंवा [सिंगल सीक्रेट लीडर इलेक्शन](https://ethresear.ch/t/secret-non-single-leader-election/11789) आणि [डिस्ट्रिब्युटेड व्हॅलिडेटर टेक्नॉलॉजी](/staking/dvt/) लागू झाल्यावर यात कसा व्यत्यय येईल हे अद्याप चांगले ज्ञात नाही. त्याचप्रमाणे, जेव्हा बहुतेक वापरकर्ता क्रियाकलाप Ethereum वरून त्याच्या लेयर 2 रोलअप्स आणि शार्ड्सवर पोर्ट केले जातात तेव्हा कोणत्या MEV संधी अस्तित्वात असतील हे पाहणे बाकी आहे. + +## Ethereum प्रूफ-ऑफ-स्टेक (PoS) मधील MEV {#mev-in-ethereum-proof-of-stake} + +स्पष्ट केल्याप्रमाणे, MEV चे एकूण वापरकर्ता अनुभव आणि कन्सेन्सस-लेयर सुरक्षेवर नकारात्मक परिणाम होतात. परंतु Ethereum चे प्रूफ-ऑफ-स्टेक कन्सेन्ससमध्ये संक्रमण (“द मर्ज” असे संबोधले जाणारे) संभाव्यतः नवीन MEV-संबंधित धोके निर्माण करते: + +### व्हॅलिडेटर केंद्रीकरण {#validator-centralization} + +मर्ज-नंतरच्या Ethereum मध्ये, व्हॅलिडेटर्स (३२ ETH ची सुरक्षा ठेव जमा केलेले) बीकन चेनमध्ये जोडलेल्या ब्लॉक्सच्या वैधतेवर एकमत करतात. ३२ ETH अनेकांच्या आवाक्याबाहेर असू शकत असल्याने, [स्टेकिंग पूलमध्ये सामील होणे](/staking/pools/) हा एक अधिक व्यवहार्य पर्याय असू शकतो. तरीही, [सोलो स्टेकर्स](/staking/solo/) चे निरोगी वितरण आदर्श आहे, कारण ते व्हॅलिडेटर्सचे केंद्रीकरण कमी करते आणि Ethereum ची सुरक्षा सुधारते. + +तथापि, MEV एक्स्ट्रॅक्शन व्हॅलिडेटर केंद्रीकरणाला गती देण्यास सक्षम असल्याचे मानले जाते. याचे एक कारण असे आहे की, व्हॅलिडेटर्स [ब्लॉक प्रस्तावित करण्यासाठी कमी कमाई करतात](/roadmap/merge/issuance/#how-the-merge-impacts-ETH-supply) पूर्वी मायनर्सच्या तुलनेत, MEV एक्स्ट्रॅक्शनने [द मर्ज](/roadmap/merge/) पासून [व्हॅलिडेटर कमाईवर खूप प्रभाव टाकला आहे](https://github.com/flashbots/eth2-research/blob/main/notebooks/mev-in-eth2/eth2-mev-calc.ipynb). + +मोठ्या स्टेकिंग पूल्सकडे MEV संधी मिळवण्यासाठी आवश्यक ऑप्टिमायझेशनमध्ये गुंतवणूक करण्यासाठी अधिक संसाधने असण्याची शक्यता आहे. हे पूल्स जितके जास्त MEV काढतील, तितकीच त्यांची MEV-एक्स्ट्रॅक्शन क्षमता सुधारण्यासाठी (आणि एकूण महसूल वाढवण्यासाठी) त्यांच्याकडे अधिक संसाधने असतील, ज्यामुळे मूलतः [इकोनॉमीज ऑफ स्केल](https://www.investopedia.com/terms/e/economiesofscale.asp#) तयार होतील. + +कमी संसाधने उपलब्ध असल्यामुळे, सोलो स्टेकर्सना MEV संधींमधून नफा मिळवणे शक्य होणार नाही. यामुळे स्वतंत्र व्हॅलिडेटर्सवर त्यांची कमाई वाढवण्यासाठी शक्तिशाली स्टेकिंग पूल्समध्ये सामील होण्याचा दबाव वाढू शकतो, ज्यामुळे Ethereum मधील विकेंद्रीकरण कमी होईल. + +### परमिशन असलेले मेमपूल्स {#permissioned-mempools} + +सँडविचिंग आणि फ्रंटरनिंग हल्ल्यांना प्रतिसाद म्हणून, ट्रेडर्स ट्रान्झॅक्शन गोपनीयतेसाठी व्हॅलिडेटर्ससोबत ऑफचेन सौदे करण्यास सुरुवात करू शकतात. संभाव्य MEV ट्रान्झॅक्शन सार्वजनिक मेमपूलवर पाठवण्याऐवजी, ट्रेडर ते थेट व्हॅलिडेटरला पाठवतो, जो ते एका ब्लॉकमध्ये समाविष्ट करतो आणि ट्रेडर्ससोबत नफा वाटून घेतो. + +“डार्क पूल्स” ही या व्यवस्थेची एक मोठी आवृत्ती आहे आणि ते परमिशन असलेले, केवळ-प्रवेश मेमपूल म्हणून कार्य करतात जे ठराविक फी भरण्यास इच्छुक असलेल्या वापरकर्त्यांसाठी खुले आहेत. हा ट्रेंड Ethereum ची परवानगी नसलेली आणि विश्वास नसलेली वैशिष्ट्ये कमी करेल आणि संभाव्यतः ब्लॉकचेनला “पे-टू-प्ले” यंत्रणेत रूपांतरित करेल जे सर्वाधिक बोली लावणाऱ्याला अनुकूल असेल. + +परमिशन असलेले मेमपूल मागील विभागात वर्णन केलेल्या केंद्रीकरणाच्या धोक्यांनाही गती देतील. अनेक व्हॅलिडेटर्स चालवणारे मोठे पूल्स ट्रेडर्स आणि वापरकर्त्यांना ट्रान्झॅक्शन गोपनीयता देऊ करून फायदा मिळवण्याची शक्यता आहे, ज्यामुळे त्यांचे MEV महसूल वाढेल. + +मर्ज-नंतरच्या Ethereum मध्ये या MEV-संबंधित समस्यांवर मात करणे हे संशोधनाचे एक मुख्य क्षेत्र आहे. आजपर्यंत, द मर्ज नंतर Ethereum च्या विकेंद्रीकरण आणि सुरक्षेवर MEV चा नकारात्मक परिणाम कमी करण्यासाठी प्रस्तावित केलेले दोन उपाय म्हणजे [**प्रपोजर-बिल्डर सेपरेशन (PBS)**](/roadmap/pbs/) आणि [**बिल्डर API**](https://github.com/ethereum/builder-specs). + +### प्रपोजर-बिल्डर सेपरेशन {#proposer-builder-separation} + +प्रूफ-ऑफ-वर्क आणि प्रूफ-ऑफ-स्टेक या दोन्हीमध्ये, एक नोड जो ब्लॉक तयार करतो तो चेनमध्ये जोडण्यासाठी कन्सेन्ससमध्ये सहभागी होणाऱ्या इतर नोड्सना प्रस्तावित करतो. जेव्हा दुसरा मायनर त्यावर (PoW मध्ये) तयार करतो किंवा त्याला बहुसंख्य व्हॅलिडेटर्सकडून (PoS मध्ये) अटेस्टेशन्स मिळतात तेव्हा नवीन ब्लॉक कॅनॉनिकल चेनचा भाग बनतो. + +ब्लॉक प्रोड्युसर आणि ब्लॉक प्रपोजरच्या भूमिकांचे संयोजन हे पूर्वी वर्णन केलेल्या बहुतेक MEV-संबंधित समस्यांना कारणीभूत ठरते. उदाहरणार्थ, कन्सेन्सस नोड्सना MEV कमाई वाढवण्यासाठी [टाइम-बँडिट अटॅक्स](https://www.mev.wiki/attack-examples/time-bandit-attack) मध्ये चेन रिऑर्गनायझेशन सुरू करण्यासाठी प्रोत्साहन दिले जाते. + +[प्रपोजर-बिल्डर सेपरेशन](https://ethresear.ch/t/proposer-block-builder-separation-friendly-fee-market-designs/9725) (PBS) MEV चा प्रभाव कमी करण्यासाठी डिझाइन केले आहे, विशेषतः कन्सेन्सस लेयरवर. PBS चे मुख्य वैशिष्ट्य म्हणजे ब्लॉक प्रोड्युसर आणि ब्लॉक प्रपोजरच्या नियमांचे विभाजन. व्हॅलिडेटर्स अजूनही ब्लॉक्स प्रस्तावित करण्यासाठी आणि त्यावर मतदान करण्यासाठी जबाबदार आहेत, परंतु **ब्लॉक बिल्डर्स** नावाच्या विशेष संस्थांचा एक नवीन वर्ग, ट्रान्झॅक्शन्सची क्रमवारी लावणे आणि ब्लॉक्स तयार करण्याचे काम करतो. + +PBS अंतर्गत, एक ब्लॉक बिल्डर एक ट्रान्झॅक्शन बंडल तयार करतो आणि बीकन चेन ब्लॉकमध्ये (“एक्सिक्यूशन पेलोड” म्हणून) समाविष्ट करण्यासाठी बोली लावतो. पुढील ब्लॉक प्रस्तावित करण्यासाठी निवडलेला व्हॅलिडेटर नंतर विविध बोली तपासतो आणि सर्वाधिक फी असलेला बंडल निवडतो. PBS मूलतः एक लिलाव बाजार तयार करतो, जिथे बिल्डर्स ब्लॉकस्पेस विकणाऱ्या व्हॅलिडेटर्ससोबत वाटाघाटी करतात. + +सध्याचे PBS डिझाइन [कमिट-रिव्हील स्कीम](https://gitcoin.co/blog/commit-reveal-scheme-on-ethereum/) वापरतात ज्यात बिल्डर्स त्यांच्या बोलींसोबत फक्त ब्लॉकच्या सामग्रीसाठी (ब्लॉक हेडर) क्रिप्टोग्राफिक कमिटमेंट प्रकाशित करतात. विजेती बोली स्वीकारल्यानंतर, प्रपोजर एक स्वाक्षरी केलेला ब्लॉक प्रस्ताव तयार करतो ज्यात ब्लॉक हेडर समाविष्ट असतो. स्वाक्षरी केलेला ब्लॉक प्रस्ताव पाहिल्यानंतर ब्लॉक बिल्डरने संपूर्ण ब्लॉक बॉडी प्रकाशित करणे अपेक्षित आहे, आणि अंतिम होण्यापूर्वी त्याला व्हॅलिडेटर्सकडून पुरेसे [अटेस्टेशन्स](/glossary/#attestation) देखील मिळणे आवश्यक आहे. + +#### प्रपोजर-बिल्डर सेपरेशन MEV चा प्रभाव कसा कमी करते? {#how-does-pbs-curb-mev-impact} + +इन-प्रोटोकॉल प्रपोजर-बिल्डर सेपरेशन व्हॅलिडेटर्सच्या कार्यक्षेत्रातून MEV एक्स्ट्रॅक्शन काढून टाकून कन्सेन्ससवर MEV चा प्रभाव कमी करते. त्याऐवजी, विशेष हार्डवेअर चालवणारे ब्लॉक बिल्डर्स पुढे MEV संधी मिळवतील. + +तथापि, यामुळे व्हॅलिडेटर्सना MEV-संबंधित उत्पन्नातून पूर्णपणे वगळले जात नाही, कारण बिल्डर्सना त्यांचे ब्लॉक्स व्हॅलिडेटर्सकडून स्वीकारले जाण्यासाठी उच्च बोली लावावी लागते. तरीही, व्हॅलिडेटर्स आता थेट MEV उत्पन्न ऑप्टिमाइझ करण्यावर लक्ष केंद्रित करत नसल्यामुळे, टाइम-बँडिट हल्ल्यांचा धोका कमी होतो. + +प्रपोजर-बिल्डर सेपरेशन MEV च्या केंद्रीकरणाच्या धोक्यांनाही कमी करते. उदाहरणार्थ, कमिट-रिव्हील स्कीमच्या वापरामुळे बिल्डर्सना व्हॅलिडेटर्सवर MEV संधी चोरणार नाहीत किंवा ती इतर बिल्डर्ससमोर उघड करणार नाहीत यावर विश्वास ठेवण्याची गरज नाही. हे सोलो स्टेकर्ससाठी MEV मधून फायदा मिळवण्याचा अडथळा कमी करते, अन्यथा, बिल्डर्स ऑफचेन प्रतिष्ठा असलेल्या मोठ्या पूल्सना अनुकूलता दर्शविण्याकडे आणि त्यांच्यासोबत ऑफचेन सौदे करण्याकडे कल ठेवतील. + +त्याचप्रमाणे, व्हॅलिडेटर्सना बिल्डर्सवर विश्वास ठेवण्याची गरज नाही की ते ब्लॉक बॉडी रोखून धरणार नाहीत किंवा अवैध ब्लॉक्स प्रकाशित करणार नाहीत कारण पेमेंट बिनशर्त आहे. प्रस्तावित ब्लॉक अनुपलब्ध असला किंवा इतर व्हॅलिडेटर्सद्वारे अवैध घोषित केला गेला तरीही व्हॅलिडेटरची फी प्रक्रिया केली जाते. नंतरच्या बाबतीत, ब्लॉक फक्त टाकून दिला जातो, ज्यामुळे ब्लॉक बिल्डरला सर्व ट्रान्झॅक्शन फी आणि MEV महसूल गमवावा लागतो. + +### बिल्डर API {#builder-api} + +जरी प्रपोजर-बिल्डर सेपरेशन MEV एक्स्ट्रॅक्शनचे परिणाम कमी करण्याचे वचन देत असले तरी, ते लागू करण्यासाठी कन्सेन्सस प्रोटोकॉलमध्ये बदल आवश्यक आहेत. विशेषतः, बीकन चेनवरील [फोर्क चॉइस](/developers/docs/consensus-mechanisms/pos/#fork-choice) नियम अपडेट करणे आवश्यक असेल. [बिल्डर API](https://github.com/ethereum/builder-specs) हा एक तात्पुरता उपाय आहे ज्याचा उद्देश प्रपोजर-बिल्डर सेपरेशनची कार्यरत अंमलबजावणी प्रदान करणे आहे, जरी त्यात जास्त विश्वासाची गृहीतके आहेत. + +बिल्डर API हे [इंजिन API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) ची एक सुधारित आवृत्ती आहे, जी कन्सेन्सस लेयर क्लायंटद्वारे एक्सिक्यूशन लेयर क्लायंटकडून एक्सिक्यूशन पेलोडची विनंती करण्यासाठी वापरली जाते. [ऑनेस्ट व्हॅलिडेटर स्पेसिफिकेशन](https://github.com/ethereum/consensus-specs/blob/dev/specs/bellatrix/validator.md) मध्ये सांगितल्याप्रमाणे, ब्लॉक प्रस्तावित करण्याच्या कर्तव्यांसाठी निवडलेले व्हॅलिडेटर्स कनेक्टेड एक्सिक्यूशन क्लायंटकडून एक ट्रान्झॅक्शन बंडलची विनंती करतात, जे ते प्रस्तावित बीकन चेन ब्लॉकमध्ये समाविष्ट करतात. + +बिल्डर API व्हॅलिडेटर्स आणि एक्सिक्यूशन-लेयर क्लायंट्समध्ये एक मिडलवेअर म्हणून देखील कार्य करते; परंतु ते वेगळे आहे कारण ते बीकन चेनवरील व्हॅलिडेटर्सना बाह्य संस्थांकडून ब्लॉक्स मिळवण्याची अनुमती देते (एक्सिक्यूशन क्लायंट वापरून स्थानिक पातळीवर ब्लॉक तयार करण्याऐवजी). + +बिल्डर API कसे कार्य करते याचे विहंगावलोकन खाली दिले आहे: + +1. बिल्डर API व्हॅलिडेटरला एक्सिक्यूशन लेयर क्लायंट चालवणार्‍या ब्लॉक बिल्डर्सच्या नेटवर्कशी जोडते. PBS प्रमाणेच, बिल्डर्स हे विशेष पक्ष आहेत जे संसाधन-केंद्रित ब्लॉक-बिल्डिंगमध्ये गुंतवणूक करतात आणि MEV + प्रायोरिटी टिप्समधून मिळणारा महसूल वाढवण्यासाठी विविध धोरणे वापरतात. + +2. एक व्हॅलिडेटर (कन्सेन्सस लेयर क्लायंट चालवणारा) बिल्डर्सच्या नेटवर्ककडून बोलींसोबत एक्सिक्यूशन पेलोडची विनंती करतो. बिल्डर्सच्या बोलींमध्ये एक्सिक्यूशन पेलोड हेडर—पेलोडच्या सामग्रीसाठी एक क्रिप्टोग्राफिक कमिटमेंट—आणि व्हॅलिडेटरला देय असलेली फी असेल. + +3. व्हॅलिडेटर येणाऱ्या बोलींचे पुनरावलोकन करतो आणि सर्वाधिक फी असलेला एक्सिक्यूशन पेलोड निवडतो. बिल्डर API वापरून, व्हॅलिडेटर एक "ब्लाइंडेड" बीकन ब्लॉक प्रस्ताव तयार करतो ज्यात फक्त त्यांची स्वाक्षरी आणि एक्सिक्यूशन पेलोड हेडर समाविष्ट असतो आणि ते बिल्डरला पाठवतो. + +4. ब्लाइंडेड ब्लॉक प्रस्ताव पाहिल्यावर बिल्डर API चालवणार्‍या बिल्डरने संपूर्ण एक्सिक्यूशन पेलोडसह प्रतिसाद देणे अपेक्षित आहे. यामुळे व्हॅलिडेटरला एक "साईन्ड" बीकन ब्लॉक तयार करण्याची अनुमती मिळते, जो ते संपूर्ण नेटवर्कवर प्रसारित करतात. + +5. बिल्डर API वापरणार्‍या व्हॅलिडेटरने ब्लॉक बिल्डर वेळेवर प्रतिसाद देण्यात अयशस्वी झाल्यास स्थानिक पातळीवर ब्लॉक तयार करणे अपेक्षित आहे, जेणेकरून ते ब्लॉक प्रस्ताव रिवॉर्ड गमावणार नाहीत. तथापि, व्हॅलिडेटर आता उघड झालेल्या ट्रान्झॅक्शन्स किंवा दुसऱ्या सेटचा वापर करून दुसरा ब्लॉक तयार करू शकत नाही, कारण ते _इक्विव्होकेशन_ (एकाच स्लॉटमध्ये दोन ब्लॉक्सवर स्वाक्षरी करणे) ठरेल, जो एक स्लॅशेबल गुन्हा आहे. + +बिल्डर API चे एक उदाहरण म्हणजे [MEV बूस्ट](https://github.com/flashbots/mev-boost), जे Ethereum वर MEV च्या नकारात्मक बाह्य परिणामांवर नियंत्रण ठेवण्यासाठी डिझाइन केलेल्या [Flashbots ऑक्शन मेकॅनिझम](https://docs.flashbots.net/Flashbots-auction/overview) मधील एक सुधारणा आहे. Flashbots ऑक्शन प्रूफ-ऑफ-स्टेकमधील व्हॅलिडेटर्सना फायदेशीर ब्लॉक्स तयार करण्याचे काम **सर्चर्स** नावाच्या विशेष पक्षांना आउटसोर्स करण्याची अनुमती देते. +![MEV प्रवाहाचा तपशीलवार आकृती](./mev.png) + +सर्चर्स आकर्षक MEV संधी शोधतात आणि ब्लॉकमध्ये समाविष्ट करण्यासाठी [सील्ड-प्राइस बिड](https://en.wikipedia.org/wiki/First-price_sealed-bid_auction) सोबत ब्लॉक प्रपोजर्सना ट्रान्झॅक्शन बंडल पाठवतात. mev-geth चालवणार्‍या व्हॅलिडेटरला, जो go-ethereum (Geth) क्लायंटची एक फोर्क केलेली आवृत्ती आहे, फक्त सर्वाधिक नफा असलेला बंडल निवडावा लागतो आणि तो नवीन ब्लॉकचा भाग म्हणून समाविष्ट करावा लागतो. ब्लॉक प्रपोजर्स (व्हॅलिडेटर्स) यांना स्पॅम आणि अवैध ट्रान्झॅक्शन्सपासून संरक्षण देण्यासाठी, ट्रान्झॅक्शन बंडल प्रपोजरपर्यंत पोहोचण्यापूर्वी व्हॅलिडेशनसाठी **रिलेअर्स** मधून जातात. + +MEV बूस्ट मूळ Flashbots ऑक्शनची कार्यपद्धती कायम ठेवते, जरी Ethereum च्या प्रूफ-ऑफ-स्टेककडे स्विच करण्यासाठी डिझाइन केलेल्या नवीन वैशिष्ट्यांसह. सर्चर्स अजूनही ब्लॉक्समध्ये समाविष्ट करण्यासाठी फायदेशीर MEV ट्रान्झॅक्शन्स शोधतात, परंतु **बिल्डर्स** नावाचा एक नवीन विशेष पक्षांचा वर्ग, ट्रान्झॅक्शन्स आणि बंडल्स ब्लॉक्समध्ये एकत्रित करण्यासाठी जबाबदार आहे. एक बिल्डर सर्चर्सकडून सील्ड-प्राइस बोली स्वीकारतो आणि सर्वात फायदेशीर क्रमवारी शोधण्यासाठी ऑप्टिमायझेशन चालवतो. + +रिलेअर अजूनही ट्रान्झॅक्शन बंडल प्रपोजरकडे पाठवण्यापूर्वी ते व्हॅलिडेट करण्यासाठी जबाबदार आहे. तथापि, MEV बूस्ट **एस्क्रो** सादर करते जे बिल्डर्सद्वारे पाठवलेले ब्लॉक बॉडी आणि व्हॅलिडेटर्सद्वारे पाठवलेले ब्लॉक हेडर्स संग्रहित करून [डेटा उपलब्धता](/developers/docs/data-availability/) प्रदान करण्यासाठी जबाबदार असतात. येथे, रिलेशी कनेक्ट केलेला व्हॅलिडेटर उपलब्ध एक्सिक्यूशन पेलोड्सची मागणी करतो आणि सर्वाधिक बोली + MEV टिप्स असलेला पेलोड हेडर निवडण्यासाठी MEV बूस्टच्या ऑर्डरिंग अल्गोरिदमचा वापर करतो. + +#### बिल्डर API MEV चा प्रभाव कसा कमी करते? {#how-does-builder-api-curb-mev-impact} + +बिल्डर API चा मुख्य फायदा म्हणजे MEV संधींमध्ये प्रवेश लोकशाहीकरण करण्याची त्याची क्षमता. कमिट-रिव्हील स्कीम वापरल्याने विश्वासाची गृहीतके दूर होतात आणि MEV चा लाभ घेऊ इच्छिणाऱ्या व्हॅलिडेटर्ससाठी प्रवेशाचे अडथळे कमी होतात. यामुळे सोलो स्टेकर्सवर MEV नफा वाढवण्यासाठी मोठ्या स्टेकिंग पूल्समध्ये एकत्रित होण्याचा दबाव कमी झाला पाहिजे. + +बिल्डर API च्या व्यापक अंमलबजावणीमुळे ब्लॉक बिल्डर्समध्ये अधिक स्पर्धेला प्रोत्साहन मिळेल, ज्यामुळे सेन्सॉरशिप प्रतिरोध वाढतो. व्हॅलिडेटर्स अनेक बिल्डर्सच्या बोलींचे पुनरावलोकन करत असल्यामुळे, एक किंवा अधिक वापरकर्ता ट्रान्झॅक्शन्स सेन्सॉर करण्याचा हेतू असलेल्या बिल्डरला यशस्वी होण्यासाठी इतर सर्व नॉन-सेन्सॉरिंग बिल्डर्सपेक्षा जास्त बोली लावावी लागेल. यामुळे वापरकर्त्यांना सेन्सॉर करण्याची किंमत प्रचंड वाढते आणि या प्रथेला परावृत्त करते. + +काही प्रकल्प, जसे की MEV बूस्ट, बिल्डर API चा वापर अशा समग्र रचनेचा भाग म्हणून करतात जी फ्रंटरनिंग/सँडविचिंग हल्ले टाळण्याचा प्रयत्न करणाऱ्या ट्रेडर्ससारख्या विशिष्ट पक्षांना ट्रान्झॅक्शन गोपनीयता प्रदान करण्यासाठी डिझाइन केलेली आहे. हे वापरकर्ते आणि ब्लॉक बिल्डर्स यांच्यात एक खाजगी संवाद चॅनेल प्रदान करून साध्य केले जाते. पूर्वी वर्णन केलेल्या परमिशन असलेल्या मेमपूल्सच्या विपरीत, हा दृष्टिकोन खालील कारणांसाठी फायदेशीर आहे: + +1. बाजारात अनेक बिल्डर्सच्या अस्तित्वामुळे सेन्सॉरिंग अव्यवहार्य बनते, ज्यामुळे वापरकर्त्यांना फायदा होतो. याउलट, केंद्रीकृत आणि विश्वास-आधारित डार्क पूल्सच्या अस्तित्वामुळे काही ब्लॉक बिल्डर्सच्या हातात सत्ता केंद्रित होईल आणि सेन्सॉरिंगची शक्यता वाढेल. + +2. बिल्डर API सॉफ्टवेअर ओपन-सोर्स आहे, ज्यामुळे कोणालाही ब्लॉक-बिल्डर सेवा देऊ करण्याची अनुमती मिळते. याचा अर्थ असा की वापरकर्त्यांना कोणताही विशिष्ट ब्लॉक बिल्डर वापरण्यास भाग पाडले जात नाही आणि यामुळे Ethereum ची तटस्थता आणि परवानगी नसलेली वैशिष्ट्ये सुधारतात. शिवाय, MEV शोधणारे ट्रेडर्स खाजगी ट्रान्झॅक्शन चॅनेल वापरून अनावधानाने केंद्रीकरणाला हातभार लावणार नाहीत. + +## संबंधित संसाधने {#related-resources} + +- [Flashbots डॉक्स](https://docs.flashbots.net/) +- [Flashbots GitHub](https://github.com/flashbots/pm) +- [mevboost.org](https://www.mevboost.org/) - _MEV-बूस्ट रिले आणि ब्लॉक बिल्डर्ससाठी रिअल-टाइम आकडेवारीसह ट्रॅकर_ + +## पुढील वाचन {#further-reading} + +- [मायनर-एक्स्ट्रॅक्टेबल व्हॅल्यू (MEV) म्हणजे काय?](https://blog.chain.link/what-is-miner-extractable-value-mev/) +- [MEV आणि मी](https://www.paradigm.xyz/2021/02/mev-and-me) +- [Ethereum एक गडद जंगल आहे](https://www.paradigm.xyz/2020/08/ethereum-is-a-dark-forest/) +- [गडद जंगलातून सुटका](https://samczsun.com/escaping-the-dark-forest/) +- [Flashbots: MEV संकटाचे फ्रंटरनिंग](https://medium.com/flashbots/frontrunning-the-mev-crisis-40629a613752) +- [@bertcmiller चे MEV थ्रेड्स](https://twitter.com/bertcmiller/status/1402665992422047747) +- [MEV-बूस्ट: मर्जसाठी तयार Flashbots आर्किटेक्चर](https://ethresear.ch/t/mev-boost-merge-ready-flashbots-architecture/11177) +- [MEV बूस्ट म्हणजे काय](https://www.alchemy.com/overviews/mev-boost) +- [mev-boost का चालवावा?](https://writings.flashbots.net/writings/why-run-mevboost/) +- [द हिचहायकर्स गाइड टू Ethereum](https://members.delphidigital.io/reports/the-hitchhikers-guide-to-ethereum) diff --git a/public/content/translations/mr/developers/docs/networking-layer/index.md b/public/content/translations/mr/developers/docs/networking-layer/index.md new file mode 100644 index 00000000000..3d84f50fc4e --- /dev/null +++ b/public/content/translations/mr/developers/docs/networking-layer/index.md @@ -0,0 +1,163 @@ +--- +title: "नेटवर्किंग स्तर" +description: "Ethereum च्या नेटवर्किंग लेयरचा परिचय." +lang: mr +sidebarDepth: 2 +--- + +Ethereum हे हजारो नोड्स असलेले एक पियर-टू-पियर नेटवर्क आहे, जे प्रमाणित प्रोटोकॉल वापरून एकमेकांशी संवाद साधण्यास सक्षम असले पाहिजेत. "नेटवर्किंग लेयर" हा प्रोटोकॉलचा एक स्टॅक आहे जो त्या नोड्सना एकमेकांना शोधू देतो आणि माहितीची देवाणघेवाण करू देतो. यामध्ये नेटवर्कवर "गॉसिपिंग" माहिती (एकाकडून अनेकांपर्यंत संवाद) तसेच विशिष्ट नोड्स दरम्यान विनंत्या आणि प्रतिसादांची अदलाबदल (एकाकडून एकापर्यंत संवाद) करणे समाविष्ट आहे. प्रत्येक नोडने विशिष्ट नेटवर्किंग नियमांचे पालन केले पाहिजे, जेणेकरून ते योग्य माहिती पाठवत आणि प्राप्त करत आहेत याची खात्री होईल. + +क्लायंट सॉफ्टवेअरचे दोन भाग आहेत (एक्झिक्युशन क्लायंट आणि कन्सेन्सस क्लायंट), प्रत्येकाचा स्वतःचा वेगळा नेटवर्किंग स्टॅक आहे. इतर Ethereum नोड्सशी संवाद साधण्याव्यतिरिक्त, एक्झिक्युशन आणि कन्सेन्सस क्लायंटना एकमेकांशी संवाद साधावा लागतो. हे पृष्ठ या संवादास सक्षम करणाऱ्या प्रोटोकॉलचे प्रास्ताविक स्पष्टीकरण देते. + +एक्झिक्युशन क्लायंट एक्झिक्युशन-लेयर पियर-टू-पियर नेटवर्कवर व्यवहारांची गॉसिपिंग करतात. यासाठी प्रमाणित पियर्समध्ये एनक्रिप्टेड संवादाची आवश्यकता असते. जेव्हा ब्लॉक प्रस्तावित करण्यासाठी व्हॅलिडेटर निवडला जातो, तेव्हा नोडच्या स्थानिक ट्रान्झॅक्शन पूलमधून व्यवहार स्थानिक RPC कनेक्शनद्वारे कन्सेन्सस क्लायंटकडे पाठवले जातात, जे बीकन ब्लॉक्समध्ये पॅकेज केले जातील. त्यानंतर कन्सेन्सस क्लायंट त्यांच्या p2p नेटवर्कवर बीकन ब्लॉक्सची गॉसिपिंग करतील. यासाठी दोन स्वतंत्र p2p नेटवर्क आवश्यक आहेत: एक ट्रान्झॅक्शन गॉसिपसाठी एक्झिक्युशन क्लायंट्सना जोडणारे आणि दुसरे ब्लॉक गॉसिपसाठी कन्सेन्सस क्लायंट्सना जोडणारे. + +## पूर्वतयारी {#prerequisites} + +हे पृष्ठ समजून घेण्यासाठी Ethereum [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) यांचे काही ज्ञान उपयुक्त ठरेल. + +## एक्झिक्युशन लेयर {#execution-layer} + +एक्झिक्युशन लेयरचे नेटवर्किंग प्रोटोकॉल दोन स्टॅक्समध्ये विभागलेले आहेत: + +- डिस्कव्हरी स्टॅक: UDP वर तयार केलेला आहे आणि नवीन नोडला कनेक्ट करण्यासाठी पियर्स शोधण्याची परवानगी देतो + +- DevP2P स्टॅक: TCP वर आधारित आहे आणि नोड्सना माहितीची देवाणघेवाण करण्यास सक्षम करतो + +दोन्ही स्टॅक समांतरपणे कार्य करतात. डिस्कव्हरी स्टॅक नेटवर्कमध्ये नवीन नेटवर्क सहभागींना आणतो, आणि DevP2P स्टॅक त्यांच्या परस्परसंवादांना सक्षम करतो. + +### डिस्कव्हरी {#discovery} + +डिस्कव्हरी म्हणजे नेटवर्कमधील इतर नोड्स शोधण्याची प्रक्रिया. हे बूटनोड्सच्या (नोड्स ज्यांचे पत्ते क्लायंटमध्ये [हार्डकोड केलेले](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go) असतात जेणेकरून ते त्वरित शोधता येतील आणि क्लायंटला पियर्सशी कनेक्ट करता येईल) एका छोट्या सेटचा वापर करून बूटस्ट्रॅप केले जाते. हे बूटनोड्स फक्त एका नवीन नोडला पियर्सच्या सेटशी ओळख करून देण्यासाठी अस्तित्वात आहेत - हाच त्यांचा एकमेव उद्देश आहे, ते चेन सिंक करण्यासारख्या सामान्य क्लायंट कार्यांमध्ये सहभागी होत नाहीत, आणि ते फक्त क्लायंट पहिल्यांदा सुरू झाल्यावरच वापरले जातात. + +नोड-बूटनोड परस्परसंवादासाठी वापरला जाणारा प्रोटोकॉल [काडेम्लिया](https://medium.com/coinmonks/a-brief-overview-of-kademlia-and-its-use-in-various-decentralized-platforms-da08a7f72b8f) चे सुधारित रूप आहे जे नोड्सच्या याद्या शेअर करण्यासाठी [डिस्ट्रिब्युटेड हॅश टेबल](https://en.wikipedia.org/wiki/Distributed_hash_table) वापरते. प्रत्येक नोडकडे या टेबलची एक आवृत्ती असते ज्यात त्याच्या सर्वात जवळच्या पियर्सशी कनेक्ट करण्यासाठी आवश्यक माहिती असते. ही 'जवळीक' भौगोलिक नाही - अंतर नोडच्या ID च्या समानतेनुसार परिभाषित केले जाते. प्रत्येक नोडची टेबल सुरक्षा वैशिष्ट्य म्हणून नियमितपणे रिफ्रेश केली जाते. उदाहरणार्थ, [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) डिस्कव्हरी प्रोटोकॉलमध्ये नोड्स 'जाहिराती' देखील पाठवू शकतात, जे क्लायंटद्वारे समर्थित सब-प्रोटोकॉल दर्शवतात, ज्यामुळे पियर्स संवाद साधण्यासाठी वापरल्या जाऊ शकणाऱ्या प्रोटोकॉलबद्दल वाटाघाटी करू शकतात. + +डिस्कव्हरी पिंग-पॉन्गच्या खेळाने सुरू होते. एक यशस्वी पिंग-पॉन्ग नवीन नोडला बूटनोडशी "बॉण्ड" करतो. नेटवर्कमध्ये प्रवेश करणाऱ्या नवीन नोडच्या अस्तित्वाची बूटनोडला सूचना देणारा प्रारंभिक संदेश म्हणजे `PING`. या `PING` मध्ये नवीन नोड, बूटनोड आणि एक एक्स्पायरी टाइम-स्टॅम्पबद्दल हॅश केलेली माहिती असते. बूटनोड `PING` प्राप्त करतो आणि `PING` हॅश असलेला `PONG` परत करतो. जर `PING` आणि `PONG` हॅश जुळले तर नवीन नोड आणि बूटनोडमधील कनेक्शनची पडताळणी केली जाते आणि ते "बॉन्डेड" झाले आहेत असे म्हटले जाते. + +एकदा बॉण्ड झाल्यावर, नवीन नोड बूटनोडला `FIND-NEIGHBOURS` विनंती पाठवू शकतो. बूटनोडद्वारे परत केलेल्या डेटामध्ये पियर्सची एक यादी असते ज्यांना नवीन नोड कनेक्ट करू शकतो. जर नोड्स बॉन्डेड नसतील, तर `FIND-NEIGHBOURS` विनंती अयशस्वी होईल, त्यामुळे नवीन नोड नेटवर्कमध्ये प्रवेश करू शकणार नाही. + +एकदा नवीन नोडला बूटनोडकडून शेजाऱ्यांची यादी मिळाल्यावर, तो त्या प्रत्येकाशी पिंग-पॉन्ग एक्सचेंज सुरू करतो. यशस्वी पिंग-पॉन्ग नवीन नोडला त्याच्या शेजाऱ्यांशी बॉण्ड करतात, ज्यामुळे संदेशांची देवाणघेवाण शक्य होते. + +``` +क्लायंट सुरू करा --> बूटनोडला कनेक्ट करा --> बूटनोडशी बॉण्ड करा --> शेजारी शोधा --> शेजाऱ्यांशी बॉण्ड करा +``` + +एक्झिक्युशन क्लायंट सध्या [Discv4](https://github.com/ethereum/devp2p/blob/master/discv4.md) डिस्कव्हरी प्रोटोकॉल वापरत आहेत आणि [Discv5](https://github.com/ethereum/devp2p/tree/master/discv5) प्रोटोकॉलमध्ये स्थलांतरित होण्यासाठी सक्रिय प्रयत्न सुरू आहेत. + +#### ENR: Ethereum नोड रेकॉर्ड्स {#enr} + +[Ethereum नोड रेकॉर्ड (ENR)](/developers/docs/networking-layer/network-addresses/) एक ऑब्जेक्ट आहे ज्यामध्ये तीन मूलभूत घटक आहेत: एक स्वाक्षरी (काही मान्य ओळख योजनेनुसार बनवलेल्या रेकॉर्ड सामग्रीचा हॅश), रेकॉर्डमधील बदलांचा मागोवा घेणारा एक क्रम क्रमांक, आणि की:व्हॅल्यू जोड्यांची एक अनियंत्रित यादी. हे एक भविष्यासाठी सुरक्षित स्वरूप आहे जे नवीन पियर्समध्ये ओळखणारी माहितीची सुलभ देवाणघेवाण करण्यास अनुमती देते आणि Ethereum नोड्ससाठी प्राधान्य दिलेले [नेटवर्क अॅड्रेस](/developers/docs/networking-layer/network-addresses) स्वरूप आहे. + +#### डिस्कव्हरी UDP वर का तयार केली आहे? {#why-udp} + +UDP कोणतीही त्रुटी तपासणी, अयशस्वी पॅकेट पुन्हा पाठवणे, किंवा कनेक्शन डायनॅमिकपणे उघडणे आणि बंद करणे याला समर्थन देत नाही - त्याऐवजी ते लक्ष्यावर माहितीचा सतत प्रवाह पाठवते, मग ती यशस्वीरित्या प्राप्त झाली आहे की नाही याची पर्वा न करता. ही किमान कार्यक्षमता किमान ओव्हरहेडमध्ये रूपांतरित होते, ज्यामुळे अशा प्रकारचे कनेक्शन खूप वेगवान होते. डिस्कव्हरीसाठी, जिथे नोडला फक्त त्याचे अस्तित्व ज्ञात करायचे असते जेणेकरून नंतर पियरशी औपचारिक कनेक्शन स्थापित करता येईल, तिथे UDP पुरेसे आहे. तथापि, उर्वरित नेटवर्किंग स्टॅकसाठी, UDP उद्देशासाठी योग्य नाही. नोड्समधील माहितीची देवाणघेवाण खूपच गुंतागुंतीची आहे आणि म्हणून पुन्हा पाठवणे, त्रुटी तपासणी इत्यादींना समर्थन देऊ शकणाऱ्या अधिक पूर्ण वैशिष्ट्यीकृत प्रोटोकॉलची आवश्यकता आहे. TCP शी संबंधित अतिरिक्त ओव्हरहेड अतिरिक्त कार्यक्षमतेसाठी योग्य आहे. म्हणून, P2P स्टॅकचा बहुतांश भाग TCP वर कार्य करतो. + +### DevP2P {#devp2p} + +DevP2P स्वतःच प्रोटोकॉलचा एक संपूर्ण स्टॅक आहे जो Ethereum पियर-टू-पियर नेटवर्क स्थापित करण्यासाठी आणि राखण्यासाठी लागू करतो. नवीन नोड्स नेटवर्कमध्ये प्रवेश केल्यानंतर, त्यांचे परस्परसंवाद [DevP2P](https://github.com/ethereum/devp2p) स्टॅकमधील प्रोटोकॉलद्वारे नियंत्रित केले जातात. हे सर्व TCP वर आधारित आहेत आणि त्यात RLPx ट्रान्सपोर्ट प्रोटोकॉल, वायर प्रोटोकॉल आणि अनेक सब-प्रोटोकॉल समाविष्ट आहेत. [RLPx](https://github.com/ethereum/devp2p/blob/master/rlpx.md) हा नोड्समधील सत्रे सुरू करणे, प्रमाणित करणे आणि राखणे नियंत्रित करणारा प्रोटोकॉल आहे. RLPx संदेश एन्कोड करण्यासाठी RLP (रिकर्सिव्ह लेंथ प्रीफिक्स) वापरतो जी नोड्समध्ये पाठवण्यासाठी डेटाला किमान संरचनेत एन्कोड करण्याची एक अत्यंत जागा-कार्यक्षम पद्धत आहे. + +दोन नोड्समधील RLPx सत्र प्रारंभिक क्रिप्टोग्राफिक हँडशेकने सुरू होते. यामध्ये नोड एक ऑथ मेसेज पाठवतो जो नंतर पियरद्वारे सत्यापित केला जातो. यशस्वी पडताळणीवर, पियर प्रारंभकर्ता नोडला परत करण्यासाठी एक ऑथ-अॅकनॉलेजमेंट संदेश तयार करतो. ही एक की-एक्सचेंज प्रक्रिया आहे जी नोड्सना खाजगी आणि सुरक्षितपणे संवाद साधण्यास सक्षम करते. एक यशस्वी क्रिप्टोग्राफिक हँडशेक नंतर दोन्ही नोड्सना एकमेकांना "ऑन द वायर" एक "हॅलो" संदेश पाठवण्यासाठी ट्रिगर करतो. वायर प्रोटोकॉल हॅलो संदेशांच्या यशस्वी देवाणघेवाणीने सुरू होतो. + +हॅलो संदेशांमध्ये खालील गोष्टी असतात: + +- प्रोटोकॉल आवृत्ती +- क्लायंट आयडी +- पोर्ट +- नोड आयडी +- समर्थित सब-प्रोटोकॉलची यादी + +यशस्वी परस्परसंवादासाठी ही आवश्यक माहिती आहे कारण ती दोन्ही नोड्समध्ये कोणती क्षमता सामायिक केली आहे हे परिभाषित करते आणि संवाद कॉन्फिगर करते. सब-प्रोटोकॉल वाटाघाटीची एक प्रक्रिया आहे जिथे प्रत्येक नोडद्वारे समर्थित सब-प्रोटोकॉलच्या याद्यांची तुलना केली जाते आणि जे दोन्ही नोड्ससाठी सामान्य आहेत ते सत्रात वापरले जाऊ शकतात. + +हॅलो संदेशांसह, वायर प्रोटोकॉल एक "डिस्कनेक्ट" संदेश देखील पाठवू शकतो जो पियरला कनेक्शन बंद केले जाईल अशी चेतावणी देतो. वायर प्रोटोकॉलमध्ये पिंग आणि पॉंग संदेश देखील समाविष्ट आहेत जे सत्र चालू ठेवण्यासाठी वेळोवेळी पाठवले जातात. RLPx आणि वायर प्रोटोकॉल एक्सचेंज त्यामुळे नोड्समधील संवादाचा पाया स्थापित करतात, विशिष्ट सब-प्रोटोकॉलनुसार उपयुक्त माहितीची देवाणघेवाण करण्यासाठी स्कॅफोल्डिंग प्रदान करतात. + +### सब-प्रोटोकॉल्स {#sub-protocols} + +#### वायर प्रोटोकॉल {#wire-protocol} + +एकदा पियर्स कनेक्ट झाल्यावर, आणि RLPx सत्र सुरू झाल्यावर, वायर प्रोटोकॉल पियर्स कसे संवाद साधतील हे परिभाषित करतो. सुरुवातीला, वायर प्रोटोकॉलने तीन मुख्य कार्ये परिभाषित केली: चेन सिंक्रोनाइझेशन, ब्लॉक प्रोपगेशन आणि ट्रान्झॅक्शन एक्सचेंज. तथापि, एकदा Ethereum प्रूफ-ऑफ-स्टेकवर स्विच झाल्यावर, ब्लॉक प्रोपगेशन आणि चेन सिंक्रोनाइझेशन कन्सेन्सस लेयरचा भाग बनले. ट्रान्झॅक्शन एक्सचेंज अजूनही एक्झिक्युशन क्लायंटच्या अखत्यारित आहे. ट्रान्झॅक्शन एक्सचेंज म्हणजे नोड्समध्ये प्रलंबित व्यवहारांची देवाणघेवाण करणे जेणेकरून ब्लॉक बिल्डर्स त्यापैकी काही पुढील ब्लॉकमध्ये समाविष्ट करण्यासाठी निवडू शकतील. या कार्यांविषयी तपशीलवार माहिती [येथे](https://github.com/ethereum/devp2p/blob/master/caps/eth.md) उपलब्ध आहे. या सब-प्रोटोकॉलला समर्थन देणारे क्लायंट त्यांना [JSON-RPC](/developers/docs/apis/json-rpc/) द्वारे उघड करतात. + +#### les (लाइट Ethereum सबप्रोटोकॉल) {#les} + +हा लाईट क्लायंट सिंक करण्यासाठी एक किमान प्रोटोकॉल आहे. पारंपारिकपणे हा प्रोटोकॉल क्वचितच वापरला जातो कारण पूर्ण नोड्सना लाईट क्लायंटना डेटा देण्यासाठी प्रोत्साहन न देता आवश्यक असते. एक्झिक्युशन क्लायंटचे डीफॉल्ट वर्तन हे les वर लाईट क्लायंट डेटा सर्व्ह करणे नाही. अधिक माहिती les [spec](https://github.com/ethereum/devp2p/blob/master/caps/les.md) मध्ये उपलब्ध आहे. + +#### स्नॅप {#snap} + +[स्नॅप प्रोटोकॉल](https://github.com/ethereum/devp2p/blob/master/caps/snap.md#ethereum-snapshot-protocol-snap) एक वैकल्पिक विस्तार आहे जो पियर्सना अलीकडील स्टेट्सचे स्नॅपशॉट एक्सचेंज करण्याची परवानगी देतो, ज्यामुळे पियर्सना इंटरमीडिएट मर्केल ट्राय नोड्स डाउनलोड न करता अकाउंट आणि स्टोरेज डेटाची पडताळणी करता येते. + +#### विट (विटनेस प्रोटोकॉल) {#wit} + +[विटनेस प्रोटोकॉल](https://github.com/ethereum/devp2p/blob/master/caps/wit.md#ethereum-witness-protocol-wit) एक वैकल्पिक विस्तार आहे जो पियर्समध्ये स्टेट विटनेसची देवाणघेवाण सक्षम करतो, ज्यामुळे क्लायंटला चेनच्या टोकापर्यंत सिंक करण्यास मदत होते. + +#### व्हिस्पर {#whisper} + +व्हिस्पर हा एक प्रोटोकॉल होता ज्याचा उद्देश ब्लॉकचेनवर कोणतीही माहिती न लिहिता पियर्समध्ये सुरक्षित मेसेजिंग वितरित करणे हा होता. हा DevP2P वायर प्रोटोकॉलचा भाग होता परंतु आता तो नापसंत आहे. समान उद्देशांसह इतर [संबंधित प्रकल्प](https://wakunetwork.com/) अस्तित्वात आहेत. + +## कन्सेन्सस लेयर {#consensus-layer} + +कन्सेन्सस क्लायंट एका वेगळ्या स्पेसिफिकेशनसह वेगळ्या पियर-टू-पियर नेटवर्कमध्ये सहभागी होतात. कन्सेन्सस क्लायंटला ब्लॉक गॉसिपमध्ये सहभागी होणे आवश्यक आहे जेणेकरून ते पियर्सकडून नवीन ब्लॉक प्राप्त करू शकतील आणि जेव्हा ब्लॉक प्रस्तावक होण्याची त्यांची पाळी असेल तेव्हा ते प्रसारित करू शकतील. एक्झिक्युशन लेयर प्रमाणेच, यासाठी प्रथम एक डिस्कव्हरी प्रोटोकॉल आवश्यक आहे जेणेकरून नोड पियर्स शोधू शकेल आणि ब्लॉक, अटेस्टेशन्स इत्यादींच्या देवाणघेवाणीसाठी सुरक्षित सत्रे स्थापित करू शकेल. + +### डिस्कव्हरी {#consensus-discovery} + +एक्झिक्युशन क्लायंट्सप्रमाणेच, कन्सेन्सस क्लायंट्स पियर्स शोधण्यासाठी UDP वर [discv5](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-discovery-domain-discv5) वापरतात. discv5 ची कन्सेन्सस लेयर अंमलबजावणी एक्झिक्युशन क्लायंट्सपेक्षा फक्त एवढ्याच बाबतीत वेगळी आहे की त्यात discv5 ला [libP2P](https://libp2p.io/) स्टॅकमध्ये जोडणारा अडॅप्टर समाविष्ट आहे, ज्यामुळे DevP2P नापसंत होते. एक्झिक्युशन लेयरचे RLPx सत्र libP2P च्या नॉइज सिक्युर चॅनल हँडशेकच्या बाजूने नापसंत केले आहेत. + +### ENRs {#consensus-enr} + +कन्सेन्सस नोड्ससाठी ENR मध्ये नोडची सार्वजनिक की, IP पत्ता, UDP आणि TCP पोर्ट आणि दोन कन्सेन्सस-विशिष्ट फील्ड्स समाविष्ट आहेत: अटेस्टेशन सबनेट बिटफील्ड आणि `eth2` की. पहिल्यामुळे नोड्सना विशिष्ट अटेस्टेशन गॉसिप सब-नेटवर्कमध्ये सहभागी होणारे पियर्स शोधणे सोपे होते. `eth2` की मध्ये नोड कोणत्या Ethereum फोर्क आवृत्तीचा वापर करत आहे याबद्दल माहिती असते, ज्यामुळे पियर्स योग्य Ethereum शी कनेक्ट होत आहेत याची खात्री होते. + +### libP2P {#libp2p} + +libP2P स्टॅक डिस्कव्हरीनंतरच्या सर्व संवादांना समर्थन देतो. क्लायंट त्यांच्या ENR मध्ये परिभाषित केल्यानुसार IPv4 आणि/किंवा IPv6 वर डायल आणि ऐकू शकतात. libP2P लेयरवरील प्रोटोकॉल गॉसिप आणि req/resp डोमेनमध्ये विभागले जाऊ शकतात. + +### गॉसिप {#gossip} + +गॉसिप डोमेनमध्ये अशी सर्व माहिती समाविष्ट आहे जी संपूर्ण नेटवर्कमध्ये वेगाने पसरणे आवश्यक आहे. यामध्ये बीकन ब्लॉक, प्रूफ, अटेस्टेशन्स, एक्झिट्स आणि स्लॅशिंग्स यांचा समावेश आहे. हे libP2P gossipsub v1 वापरून प्रसारित केले जाते आणि प्रत्येक नोडवर स्थानिकरित्या संग्रहित केलेल्या विविध मेटाडेटावर अवलंबून असते, ज्यात गॉसिप पेलोड प्राप्त करण्यासाठी आणि प्रसारित करण्यासाठी कमाल आकाराचा समावेश आहे. गॉसिप डोमेनबद्दल तपशीलवार माहिती [येथे](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#the-gossip-domain-gossipsub) उपलब्ध आहे. + +### विनंती-प्रतिसाद {#request-response} + +विनंती-प्रतिसाद डोमेनमध्ये त्यांच्या पियर्सकडून विशिष्ट माहितीची विनंती करणाऱ्या क्लायंटसाठी प्रोटोकॉल आहेत. उदाहरणांमध्ये विशिष्ट रूट हॅशशी जुळणारे किंवा स्लॉटच्या मर्यादेतील विशिष्ट बीकन ब्लॉकची विनंती करणे समाविष्ट आहे. प्रतिसाद नेहमी स्नॅपी-कॉम्प्रेस्ड SSZ एन्कोडेड बाइट्स म्हणून परत केले जातात. + +## कन्सेन्सस क्लायंट RLP पेक्षा SSZ ला प्राधान्य का देतो? {#ssz-vs-rlp} + +SSZ म्हणजे सिंपल सीरियलायझेशन. हे निश्चित ऑफसेट वापरते ज्यामुळे संपूर्ण संरचना डीकोड न करता एन्कोड केलेल्या संदेशाचे वैयक्तिक भाग डीकोड करणे सोपे होते, जे कन्सेन्सस क्लायंटसाठी खूप उपयुक्त आहे कारण ते एन्कोड केलेल्या संदेशांमधून माहितीचे विशिष्ट तुकडे कार्यक्षमतेने मिळवू शकते. हे विशेषतः मर्केल प्रोटोकॉलसह समाकलित करण्यासाठी डिझाइन केलेले आहे, मर्केलायझेशनसाठी संबंधित कार्यक्षमता वाढीसह. कन्सेन्सस लेयरमधील सर्व हॅश मर्केल रूट्स असल्याने, यामुळे लक्षणीय सुधारणा होते. SSZ मूल्यांचे अद्वितीय प्रतिनिधित्व देखील सुनिश्चित करते. + +## एक्झिक्युशन आणि कन्सेन्सस क्लायंट कनेक्ट करणे {#connecting-clients} + +कन्सेन्सस आणि एक्झिक्युशन दोन्ही क्लायंट समांतर चालतात. त्यांना कनेक्ट करणे आवश्यक आहे जेणेकरून कन्सेन्सस क्लायंट एक्झिक्युशन क्लायंटला सूचना देऊ शकेल, आणि एक्झिक्युशन क्लायंट बीकन ब्लॉक्समध्ये समाविष्ट करण्यासाठी कन्सेन्सस क्लायंटला व्यवहारांचे बंडल पाठवू शकेल. दोन क्लायंटमधील संवाद स्थानिक RPC कनेक्शन वापरून साधला जाऊ शकतो. ['इंजिन-एपीआय'](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) म्हणून ओळखले जाणारे API दोन क्लायंटमध्ये पाठवलेल्या सूचना परिभाषित करते. दोन्ही क्लायंट एकाच नेटवर्क ओळखीच्या मागे बसल्यामुळे, ते एक ENR (Ethereum नोड रेकॉर्ड) शेअर करतात ज्यात प्रत्येक क्लायंटसाठी एक स्वतंत्र की असते (eth1 की आणि eth2 की). + +कंट्रोल फ्लोचा सारांश खाली दर्शविला आहे, संबंधित नेटवर्किंग स्टॅक कंसात आहे. + +### जेव्हा कन्सेन्सस क्लायंट ब्लॉक निर्माता नसतो: {#when-consensus-client-is-not-block-producer} + +- कन्सेन्सस क्लायंटला ब्लॉक गॉसिप प्रोटोकॉलद्वारे एक ब्लॉक मिळतो (कन्सेन्सस p2p) +- कन्सेन्सस क्लायंट ब्लॉकची पूर्व-पडताळणी करतो, म्हणजे, तो योग्य पाठवणाऱ्याकडून योग्य मेटाडेटसह आला आहे याची खात्री करतो +- ब्लॉकमधील व्यवहार एक्झिक्युशन पेलोड म्हणून एक्झिक्युशन लेयरकडे पाठवले जातात (स्थानिक RPC कनेक्शन) +- एक्झिक्युशन लेयर व्यवहार कार्यान्वित करतो आणि ब्लॉक हेडरमधील स्टेटची पडताळणी करतो (म्हणजे, हॅश जुळतात की नाही हे तपासतो) +- एक्झिक्युशन लेयर व्हॅलिडेशन डेटा परत कन्सेन्सस लेयरकडे पाठवतो, आता ब्लॉक व्हॅलिडेटेड मानला जातो (स्थानिक RPC कनेक्शन) +- कन्सेन्सस लेयर ब्लॉकला स्वतःच्या ब्लॉकचेनच्या हेडमध्ये जोडतो आणि त्याची अटेस्टेशन करतो, नेटवर्कवर अटेस्टेशन प्रसारित करतो (कन्सेन्सस p2p) + +### जेव्हा कन्सेन्सस क्लायंट ब्लॉक निर्माता असतो: {#when-consensus-client-is-block-producer} + +- कन्सेन्सस क्लायंटला सूचना मिळते की तो पुढील ब्लॉक निर्माता आहे (कन्सेन्सस p2p) +- कन्सेन्सस लेयर एक्झिक्युशन क्लायंटमध्ये `create block` पद्धत कॉल करतो (स्थानिक RPC) +- एक्झिक्युशन लेयर ट्रान्झॅक्शन मेमपूलमध्ये प्रवेश करतो जो ट्रान्झॅक्शन गॉसिप प्रोटोकॉलद्वारे पॉप्युलेट केला गेला आहे (एक्झिक्युशन p2p) +- एक्झिक्युशन क्लायंट व्यवहारांना एका ब्लॉकमध्ये बंडल करतो, व्यवहार कार्यान्वित करतो आणि एक ब्लॉक हॅश तयार करतो +- कन्सेन्सस क्लायंट एक्झिक्युशन क्लायंटकडून व्यवहार आणि ब्लॉक हॅश घेतो आणि त्यांना बीकन ब्लॉकमध्ये जोडतो (स्थानिक RPC) +- कन्सेन्सस क्लायंट ब्लॉक गॉसिप प्रोटोकॉलवर ब्लॉक प्रसारित करतो (कन्सेन्सस p2p) +- इतर क्लायंट प्रस्तावित ब्लॉक ब्लॉक गॉसिप प्रोटोकॉलद्वारे प्राप्त करतात आणि वर वर्णन केल्याप्रमाणे व्हॅलिडेट करतात (कन्सेन्सस p2p) + +एकदा पुरेसे व्हॅलिडेटर्सद्वारे ब्लॉक अटेस्टेड झाल्यावर, तो चेनच्या हेडमध्ये जोडला जातो, जस्टिफाय केला जातो आणि शेवटी फायनलाइज केला जातो. + +![](cons_client_net_layer.png) +![](exe_client_net_layer.png) + +कन्सेन्सस आणि एक्झिक्युशन क्लायंटसाठी नेटवर्क लेयर स्किमॅटिक, [ethresear.ch](https://ethresear.ch/t/eth1-eth2-client-relationship/7248) वरून + +## अधिक वाचन {#further-reading} + +[DevP2P](https://github.com/ethereum/devp2p) +[LibP2p](https://github.com/libp2p/specs) +[कन्सेन्सस लेयर नेटवर्क स्पेक्स](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) +[kademlia to discv5](https://vac.dev/kademlia-to-discv5) +[kademlia पेपर](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) +[Ethereum p2p चा परिचय](https://p2p.paris/en/talks/intro-ethereum-networking/) +[eth1/eth2 संबंध](http://ethresear.ch/t/eth1-eth2-client-relationship/7248) +[मर्ज आणि eth2 क्लायंट तपशील व्हिडिओ](https://www.youtube.com/watch?v=zNIrIninMgg) diff --git a/public/content/translations/mr/developers/docs/networking-layer/network-addresses/index.md b/public/content/translations/mr/developers/docs/networking-layer/network-addresses/index.md new file mode 100644 index 00000000000..e1d0c72083c --- /dev/null +++ b/public/content/translations/mr/developers/docs/networking-layer/network-addresses/index.md @@ -0,0 +1,39 @@ +--- +title: "नेटवर्क अ‍ॅड्रेसेस" +description: "नेटवर्क अ‍ॅड्रेसेसची ओळख." +lang: mr +sidebarDepth: 2 +--- + +पिअर्सशी कनेक्ट होण्यासाठी इथेरियम नोड्सना काही मूलभूत माहितीसह स्वतःची ओळख पटवून द्यावी लागते. कोणताही संभाव्य पिअर या माहितीचा अर्थ लावू शकेल याची खात्री करण्यासाठी, ती तीन प्रमाणित फॉरमॅटपैकी एकात रिले केली जाते जे कोणताही इथेरियम नोड समजू शकतो: मल्टीऍडर, इनोड किंवा इथेरियम नोड रेकॉर्ड्स (ENRs). ENRs हे इथेरियम नेटवर्क अ‍ॅड्रेसेससाठी सध्याचे मानक आहेत. + +## पूर्वतयारी {#prerequisites} + +हे पृष्ठ समजण्यासाठी इथेरियमच्या [नेटवर्किंग लेयर](/developers/docs/networking-layer/) ची काही समज असणे आवश्यक आहे. + +## मल्टीऍडर {#multiaddr} + +मूळ इथेरियम नोड अ‍ॅड्रेस फॉरमॅट 'मल्टीऍडर' ('मल्टी-अ‍ॅड्रेसेस'चे संक्षिप्त रूप) होता. मल्टीऍडर हे पिअर-टू-पिअर नेटवर्कसाठी डिझाइन केलेले एक सार्वत्रिक फॉरमॅट आहे. अ‍ॅड्रेसेस की-व्हॅल्यू जोड्या म्हणून दर्शविले जातात, ज्यात की आणि व्हॅल्यूज फॉरवर्ड स्लॅशने विभक्त केलेल्या असतात. उदाहरणार्थ, IPv4 अ‍ॅड्रेस `192.168.22.27` असलेल्या आणि TCP पोर्ट `33000` ऐकणाऱ्या नोडसाठी मल्टीऍडर खालीलप्रमाणे दिसतो: + +`/ip4/192.168.22.27/tcp/33000` + +इथेरियम नोडसाठी, मल्टीऍडरमध्ये नोड-आयडी (त्यांच्या पब्लिक कीचा हॅश) असतो: + +`/ip4/192.168.22.27/tcp/33000/p2p/5t7Nv7dG2d6ffbvAiewVsEwWweU3LdebSqX2y1bPrW8br` + +## इनोड {#enode} + +इनोड हा URL अ‍ॅड्रेस फॉरमॅट वापरून इथेरियम नोड ओळखण्याचा एक मार्ग आहे. हेक्साडेसिमल नोड-आयडी URL च्या युजरनेम भागात एन्कोड केलेला असतो आणि तो @ चिन्हाचा वापर करून होस्टपासून वेगळा केला जातो. होस्टनेम फक्त आयपी अ‍ॅड्रेस म्हणून दिले जाऊ शकते; DNS नावांना परवानगी नाही. होस्टनेम विभागातील पोर्ट हा TCP लिसनिंग पोर्ट असतो. जर TCP आणि UDP (डिस्कव्हरी) पोर्ट्स वेगळे असतील, तर UDP पोर्ट \"discport\" हा क्वेरी पॅरामीटर म्हणून नमूद केला जातो. + +खालील उदाहरणात, नोड URL अशा नोडचे वर्णन करते ज्याचा आयपी अ‍ॅड्रेस `10.3.58.6`, TCP पोर्ट `30303` आणि UDP डिस्कव्हरी पोर्ट `30301` आहे. + +`enode://6f8a80d14311c39f35f516fa664deaaaa13e85b2f7493f37f6144d86991ec012937307647bd3b9a82abe2974e1407241d54947bbb39763a4cac9f77166ad92a0@10.3.58.6:30303?discport=30301` + +## इथेरियम नोड रेकॉर्ड्स (ENRs) {#enr} + +इथेरियम नोड रेकॉर्ड्स (ENRs) हे इथेरियमवरील नेटवर्क अ‍ॅड्रेसेससाठी एक प्रमाणित फॉरमॅट आहे. ते मल्टीऍडर आणि इनोड्सची जागा घेतात. हे विशेषतः उपयुक्त आहेत कारण ते नोड्स दरम्यान अधिक माहितीची देवाणघेवाण करण्यास परवानगी देतात. ENR मध्ये स्वाक्षरी, क्रम क्रमांक आणि स्वाक्षऱ्या निर्माण करण्यासाठी व प्रमाणित करण्यासाठी वापरल्या जाणाऱ्या आयडेंटिटी स्कीमचा तपशील देणारी फील्ड्स असतात. ENR मध्ये की-व्हॅल्यू जोड्या म्हणून आयोजित केलेला कोणताही डेटा देखील भरला जाऊ शकतो. या की-व्हॅल्यू जोड्यांमध्ये नोडचा आयपी अ‍ॅड्रेस आणि नोड वापरू शकणाऱ्या सब-प्रोटोकॉल्सबद्दलची माहिती असते. कन्सेन्सस क्लायंट्स बूट नोड्स ओळखण्यासाठी एक [विशिष्ट ENR रचना](https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/p2p-interface.md#enr-structure) वापरतात आणि त्यात `eth2` फील्ड देखील समाविष्ट असते, ज्यात सध्याच्या इथेरियम फोर्क आणि अटेस्टेशन गॉसिप सबनेटबद्दल माहिती असते (हे नोडला पिअर्सच्या एका विशिष्ट संचाशी जोडते ज्यांचे अटेस्टेशन एकत्रित केले जातात). + +## अधिक वाचन {#further-reading} + +- [EIP-778: इथेरियम नोड रेकॉर्ड्स (ENR)](https://eips.ethereum.org/EIPS/eip-778) +- [LibP2P: Multiaddr-Enode-ENR?!](https://consensys.net/diligence/blog/2020/09/libp2p-multiaddr-enode-enr/) diff --git a/public/content/translations/mr/developers/docs/networking-layer/portal-network/index.md b/public/content/translations/mr/developers/docs/networking-layer/portal-network/index.md new file mode 100644 index 00000000000..2bf8a1a50b1 --- /dev/null +++ b/public/content/translations/mr/developers/docs/networking-layer/portal-network/index.md @@ -0,0 +1,89 @@ +--- +title: "पोर्टल नेटवर्क" +description: "पोर्टल नेटवर्कचे विहंगावलोकन - कमी-संसाधन क्लायंटना समर्थन देण्यासाठी डिझाइन केलेले एक इन-डेव्हलपमेंट नेटवर्क." +lang: mr +--- + +Ethereum हे Ethereum क्लायंट सॉफ्टवेअर चालवणार्‍या कॉम्प्युटरने बनलेले एक नेटवर्क आहे. यापैकी प्रत्येक कॉम्प्युटरला 'नोड' म्हटले जाते. क्लायंट सॉफ्टवेअर नोडला Ethereum नेटवर्कवर डेटा पाठवण्याची आणि प्राप्त करण्याची परवानगी देते आणि Ethereum प्रोटोकॉल नियमांनुसार डेटाची पडताळणी करते. नोड्स त्यांच्या डिस्क स्टोरेजमध्ये भरपूर ऐतिहासिक डेटा ठेवतात आणि जेव्हा त्यांना नेटवर्कवरील इतर नोड्सकडून माहितीचे नवीन पॅकेट, ज्यांना ब्लॉक्स म्हणून ओळखले जाते, प्राप्त होतात तेव्हा त्यात भर घालतात. नोडकडे उर्वरित नेटवर्कशी सुसंगत माहिती आहे हे नेहमी तपासण्यासाठी हे आवश्यक आहे. याचा अर्थ नोड चालवण्यासाठी भरपूर डिस्क स्पेसची आवश्यकता असू शकते. काही नोड ऑपरेशन्ससाठी भरपूर RAM ची देखील आवश्यकता असू शकते. + +या डिस्क स्टोरेज समस्येवर मात करण्यासाठी, 'लाइट' नोड्स विकसित केले गेले आहेत जे सर्व माहिती स्वतः संग्रहित करण्याऐवजी पूर्ण नोड्सकडून माहितीची विनंती करतात. तथापि, याचा अर्थ असा आहे की लाइट नोड स्वतंत्रपणे माहितीची पडताळणी करत नाही आणि त्याऐवजी दुसर्‍या नोडवर विश्वास ठेवत आहे. याचा अर्थ असाही होतो की त्या लाइट नोड्सना सेवा देण्यासाठी पूर्ण नोड्सना अतिरिक्त काम करावे लागते. + +पोर्टल नेटवर्क हे Ethereum साठी एक नवीन नेटवर्किंग डिझाइन आहे ज्याचा उद्देश "लाइट" नोड्ससाठी डेटा उपलब्धतेची समस्या पूर्ण नोड्सवर विश्वास न ठेवता किंवा अतिरिक्त ताण न टाकता सोडवणे आहे, नेटवर्कवर आवश्यक डेटा लहान भागांमध्ये शेअर करून. + +[नोड्स आणि क्लायंट्स](/developers/docs/nodes-and-clients/) वर अधिक माहिती + +## आम्हाला पोर्टल नेटवर्कची गरज का आहे {#why-do-we-need-portal-network} + +Ethereum नोड्स Ethereum ब्लॉकचेनची स्वतःची पूर्ण किंवा आंशिक प्रत संग्रहित करतात. ही स्थानिक प्रत व्यवहारांची वैधता तपासण्यासाठी आणि नोड योग्य साखळीचे अनुसरण करत असल्याची खात्री करण्यासाठी वापरली जाते. हा स्थानिकरित्या संग्रहित केलेला डेटा नोड्सना कोणत्याही इतर घटकावर विश्वास न ठेवता येणाऱ्या डेटाची वैधता आणि अचूकता स्वतंत्रपणे सत्यापित करण्यास अनुमती देतो. + +ब्लॉकचेनची ही स्थानिक प्रत आणि संबंधित स्टेट आणि पावती डेटा नोडच्या हार्ड डिस्कवर बरीच जागा घेतो. उदाहरणार्थ, एक कन्सेंसस क्लायंटला जोडलेल्या [Geth](https://geth.ethereum.org) चा वापर करून नोड चालवण्यासाठी 2TB हार्ड डिस्कची शिफारस केली जाते. स्नॅप सिंक वापरून, जे केवळ तुलनेने अलीकडील ब्लॉक्सच्या संचातून चेन डेटा संग्रहित करते, Geth साधारणपणे सुमारे 650GB डिस्क स्पेस व्यापते परंतु आठवड्यातून सुमारे 14GB ने वाढते (तुम्ही वेळोवेळी नोडची छाटणी करून 650GB पर्यंत कमी करू शकता). + +याचा अर्थ नोड्स चालवणे महाग असू शकते, कारण मोठ्या प्रमाणात डिस्क स्पेस Ethereum ला समर्पित करावी लागते. Ethereum रोडमॅपवर या समस्येवर अनेक उपाय आहेत, ज्यात [हिस्टरी एक्सपायरी](/roadmap/statelessness/#history-expiry), [स्टेट एक्सपायरी](/roadmap/statelessness/#state-expiry) आणि [स्टेटलेसनेस](/roadmap/statelessness/) यांचा समावेश आहे. तथापि, हे लागू होण्यास अनेक वर्षे लागण्याची शक्यता आहे. असे [लाइट नोड्स](/developers/docs/nodes-and-clients/light-clients/) देखील आहेत जे चेन डेटाची स्वतःची प्रत जतन करत नाहीत, ते त्यांना आवश्यक असलेला डेटा पूर्ण नोड्सकडून मागवतात. तथापि, याचा अर्थ असा आहे की लाइट नोड्सना प्रामाणिक डेटा प्रदान करण्यासाठी पूर्ण नोड्सवर विश्वास ठेवावा लागतो आणि लाइट नोड्सना आवश्यक असलेला डेटा सर्व्ह करणार्‍या पूर्ण नोड्सवर देखील ताण येतो. + +पोर्टल नेटवर्कचा उद्देश लाइट नोड्सना त्यांचा डेटा मिळविण्यासाठी एक पर्यायी मार्ग प्रदान करणे आहे ज्यासाठी पूर्ण नोड्सद्वारे कराव्या लागणाऱ्या कामावर विश्वास ठेवण्याची किंवा त्यात लक्षणीय वाढ करण्याची आवश्यकता नाही. हे करण्याचा मार्ग म्हणजे Ethereum नोड्सना नेटवर्कवर डेटा शेअर करण्यासाठी एक नवीन मार्ग सादर करणे. + +## पोर्टल नेटवर्क कसे कार्य करते? {#how-does-portal-network-work} + +Ethereum नोड्समध्ये कठोर प्रोटोकॉल असतात जे ते एकमेकांशी कसे संवाद साधतात हे परिभाषित करतात. एक्झिक्युशन क्लायंट [DevP2P](/developers/docs/networking-layer/#devp2p) म्हणून ओळखल्या जाणार्‍या सबप्रोटोकॉलच्या सेटचा वापर करून संवाद साधतात, तर कन्सेंसस क्लायंट [libP2P](/developers/docs/networking-layer/#libp2p) नावाच्या सबप्रोटोकॉलच्या वेगळ्या स्टॅकचा वापर करतात. हे नोड्स दरम्यान पास केल्या जाऊ शकणार्‍या डेटाचे प्रकार परिभाषित करतात. + +![devP2P and libP2P](portal-network-devp2p-libp2p.png) + +नोड्स [JSON-RPC API](/developers/docs/apis/json-rpc/) द्वारे विशिष्ट डेटा देखील देऊ शकतात, ज्याद्वारे ॲप्स आणि वॉलेट्स Ethereum नोड्ससह माहितीची देवाणघेवाण करतात. तथापि, यापैकी कोणताही लाइट क्लायंटना डेटा देण्यासाठी आदर्श प्रोटोकॉल नाही. + +लाइट क्लायंट सध्या DevP2P किंवा libP2p वर चेन डेटाचे विशिष्ट भाग मागू शकत नाहीत कारण ते प्रोटोकॉल केवळ चेन सिंक्रोनाइझेशन आणि ब्लॉक्स आणि व्यवहारांच्या गॉसिपिंगसाठी डिझाइन केलेले आहेत. लाइट क्लायंट ही माहिती डाउनलोड करू इच्छित नाहीत कारण त्यामुळे ते "लाइट" राहणार नाहीत. + +JSON-RPC API देखील लाइट क्लायंट डेटा विनंत्यांसाठी एक आदर्श पर्याय नाही, कारण ते एका विशिष्ट पूर्ण नोड किंवा केंद्रीकृत RPC प्रदात्याच्या कनेक्शनवर अवलंबून असते जे डेटा देऊ शकतात. याचा अर्थ असा आहे की लाइट क्लायंटला तो विशिष्ट नोड/प्रदाता प्रामाणिक असेल यावर विश्वास ठेवावा लागतो आणि पूर्ण नोडला अनेक लाइट क्लायंटकडून अनेक विनंत्या हाताळाव्या लागू शकतात, ज्यामुळे त्यांच्या बँडविड्थ आवश्यकतांमध्ये वाढ होते. + +पोर्टल नेटवर्कचा मुद्दा म्हणजे संपूर्ण डिझाइनवर पुनर्विचार करणे, विद्यमान Ethereum क्लायंटच्या डिझाइन मर्यादांच्या बाहेर, विशेषतः हलकेपणासाठी तयार करणे. + +पोर्टल नेटवर्कची मुख्य कल्पना म्हणजे सध्याच्या नेटवर्किंग स्टॅकचे सर्वोत्तम भाग घेणे, ज्यामध्ये लाइट क्लायंटना आवश्यक असलेली माहिती, जसे की ऐतिहासिक डेटा आणि चेनच्या सध्याच्या हेडची ओळख, [DHT](https://en.wikipedia.org/wiki/Distributed_hash_table) (Bittorrent सारखे) वापरून हलक्या वजनाच्या DevP2P शैलीतील पीअर-टू-पीअर विकेंद्रित नेटवर्कद्वारे दिली जाईल. + +प्रत्येक नोडमध्ये एकूण ऐतिहासिक Ethereum डेटाचे लहान भाग आणि काही विशिष्ट नोड जबाबदाऱ्या जोडण्याची कल्पना आहे. नंतर, विनंती केलेला विशिष्ट डेटा संग्रहित करणारे नोड्स शोधून आणि त्यांच्याकडून तो मिळवून विनंत्या पूर्ण केल्या जातात. + +हे लाइट नोड्सच्या सामान्य मॉडेलला उलट करते ज्यात एकच नोड शोधून मोठ्या प्रमाणात डेटा फिल्टर करण्याची आणि सर्व्ह करण्याची विनंती केली जाते; त्याऐवजी, ते नोड्सच्या मोठ्या नेटवर्कला त्वरीत फिल्टर करतात जे प्रत्येकजण कमी प्रमाणात डेटा हाताळतात. + +हलक्या वजनाच्या पोर्टल क्लायंटच्या विकेंद्रित नेटवर्कला खालील गोष्टी करण्याची परवानगी देणे हे ध्येय आहे: + +- चेनच्या हेडचा मागोवा घेणे +- अलीकडील आणि ऐतिहासिक चेन डेटा सिंक करणे +- स्टेट डेटा मिळवणे +- व्यवहार प्रसारित करणे +- [EVM](/developers/docs/evm/) वापरून व्यवहार कार्यान्वित करणे + +या नेटवर्क डिझाइनचे फायदे आहेत: + +- केंद्रीकृत प्रदात्यांवरील अवलंबित्व कमी करणे +- इंटरनेट बँडविड्थ वापर कमी करणे +- किमान किंवा शून्य सिंकिंग +- संसाधन-मर्यादित उपकरणांसाठी प्रवेशयोग्य (<1 GB RAM, <100 MB डिस्क स्पेस, 1 CPU) + +खालील तक्ता विद्यमान क्लायंटची कार्ये दर्शवितो जी पोर्टल नेटवर्कद्वारे वितरित केली जाऊ शकतात, ज्यामुळे वापरकर्त्यांना अत्यंत कमी-संसाधन उपकरणांवर या कार्यांमध्ये प्रवेश करता येतो. + +### पोर्टल नेटवर्क्स + +| बीकन लाइट क्लायंट | स्टेट नेटवर्क | व्यवहार गॉसिप | हिस्टरी नेटवर्क | +| ----------------- | --------------------- | ------------- | --------------- | +| बीकन चेन लाइट | खाते आणि करार स्टोरेज | हलके मेमपूल | हेडर्स | +| प्रोटोकॉल डेटा | | | ब्लॉक बॉडीज | +| | | | पावत्या | + +## डीफॉल्टनुसार क्लायंट विविधता {#client-diversity-as-default} + +पोर्टल नेटवर्क डेव्हलपर्सनी पहिल्या दिवसापासून चार वेगळे पोर्टल नेटवर्क क्लायंट तयार करण्याचा डिझाइन पर्याय निवडला. + +पोर्टल नेटवर्क क्लायंट आहेत: + +- [Trin](https://github.com/ethereum/trin): रस्टमध्ये लिहिलेले +- [Fluffy](https://fluffy.guide): निममध्ये लिहिलेले +- [Ultralight](https://github.com/ethereumjs/ultralight): टाइप्सक्रिप्टमध्ये लिहिलेले +- [Shisui](https://github.com/zen-eth/shisui): गो मध्ये लिहिलेले + +एकाधिक स्वतंत्र क्लायंट अंमलबजावणी असणे Ethereum नेटवर्कची लवचिकता आणि विकेंद्रीकरण वाढवते. + +एखाद्या क्लायंटला समस्या किंवा असुरक्षिततेचा सामना करावा लागल्यास, इतर क्लायंट सहजतेने कार्य करणे सुरू ठेवू शकतात, ज्यामुळे अपयशाचा एकच बिंदू टाळता येतो. याव्यतिरिक्त, विविध क्लायंट अंमलबजावणी नवकल्पना आणि स्पर्धेला प्रोत्साहन देतात, सुधारणांना चालना देतात आणि इकोसिस्टममधील मोनोकल्चरचा धोका कमी करतात. + +## पुढील वाचन {#further-reading} + +- [पोर्टल नेटवर्क (डेव्हकॉन बोगोटा येथे पायपर मेरियम)](https://www.youtube.com/watch?v=0stc9jnQLXA). +- [पोर्टल नेटवर्क डिस्कॉर्ड](https://discord.gg/CFFnmE7Hbs) +- [पोर्टल नेटवर्क वेबसाइट](https://www.ethportal.net/) diff --git a/public/content/translations/mr/developers/docs/networks/index.md b/public/content/translations/mr/developers/docs/networks/index.md new file mode 100644 index 00000000000..1d458c3b72c --- /dev/null +++ b/public/content/translations/mr/developers/docs/networks/index.md @@ -0,0 +1,216 @@ +--- +title: "नेटवर्क" +description: "Ethereum च्या नेटवर्क्सचा आढावा आणि तुमच्या ॲप्लिकेशनची चाचणी करण्यासाठी टेस्टनेट ईथर (ETH) कुठून मिळवायचे." +lang: mr +--- + +Ethereum नेटवर्क्स हे एकमेकांना जोडलेल्या संगणकांचे गट आहेत जे Ethereum प्रोटोकॉल वापरून संवाद साधतात. फक्त एकच Ethereum मेननेट आहे, परंतु चाचणी आणि विकासाच्या उद्देशांसाठी त्याच प्रोटोकॉल नियमांचे पालन करणारे स्वतंत्र नेटवर्क्स तयार केले जाऊ शकतात. असे अनेक स्वतंत्र "नेटवर्क्स" आहेत जे एकमेकांशी संवाद न साधता प्रोटोकॉलचे पालन करतात. तुम्ही तुमच्या स्मार्ट कॉन्ट्रॅक्ट्स आणि वेब3 ॲप्सची चाचणी करण्यासाठी तुमच्या स्वतःच्या संगणकावर स्थानिक पातळीवर एक सुरू करू शकता. + +तुमचे Ethereum खाते वेगवेगळ्या नेटवर्क्सवर काम करेल, परंतु तुमच्या खात्यातील शिल्लक आणि व्यवहारांचा इतिहास मुख्य Ethereum नेटवर्कवरून पुढे नेला जाणार नाही. चाचणीच्या उद्देशांसाठी, कोणते नेटवर्क्स उपलब्ध आहेत आणि प्रयोग करण्यासाठी टेस्टनेट ETH कसे मिळवायचे हे जाणून घेणे उपयुक्त आहे. सर्वसाधारणपणे, सुरक्षिततेच्या कारणास्तव, मेननेट खाती टेस्टनेट्सवर किंवा याउलट पुन्हा वापरण्याची शिफारस केली जात नाही. + +## पूर्वतयारी {#prerequisites} + +वेगवेगळ्या नेटवर्क्सबद्दल वाचण्यापूर्वी तुम्ही [Ethereum च्या मूलभूत गोष्टी](/developers/docs/intro-to-ethereum/) समजून घ्याव्यात, कारण टेस्ट नेटवर्क्स तुम्हाला प्रयोग करण्यासाठी Ethereum ची एक स्वस्त, सुरक्षित आवृत्ती देतील. + +## सार्वजनिक नेटवर्क्स {#public-networks} + +सार्वजनिक नेटवर्क्स इंटरनेट कनेक्शन असलेल्या जगातील कोणालाही उपलब्ध आहेत. कोणीही सार्वजनिक ब्लॉकचेनवर व्यवहार वाचू किंवा तयार करू शकतो आणि कार्यान्वित होत असलेल्या व्यवहारांना प्रमाणित करू शकतो. पीअर्समधील सहमती व्यवहारांच्या समावेशावर आणि नेटवर्कच्या स्थितीवर निर्णय घेते. + +### Ethereum मेननेट {#ethereum-mainnet} + +मेननेट हे प्राथमिक सार्वजनिक Ethereum प्रोडक्शन ब्लॉकचेन आहे, जिथे वितरित लेजरवर वास्तविक-मूल्याचे व्यवहार होतात. + +जेव्हा लोक आणि एक्सचेंज ETH च्या किमतींवर चर्चा करतात, तेव्हा ते मेननेट ETH बद्दल बोलत असतात. + +### Ethereum टेस्टनेट्स {#ethereum-testnets} + +मेननेट व्यतिरिक्त, सार्वजनिक टेस्टनेट्स आहेत. हे प्रोटोकॉल डेव्हलपर्स किंवा स्मार्ट कॉन्ट्रॅक्ट डेव्हलपर्सद्वारे मेननेटवर तैनात करण्यापूर्वी प्रोटोकॉल अपग्रेड्स आणि संभाव्य स्मार्ट कॉन्ट्रॅक्ट्स या दोन्हींची प्रोडक्शनसारख्या वातावरणात चाचणी घेण्यासाठी वापरले जाणारे नेटवर्क्स आहेत. याला प्रोडक्शन विरुद्ध स्टेजिंग सर्व्हर्सच्या एनालॉग म्हणून विचार करा. + +तुम्ही लिहिलेला कोणताही कॉन्ट्रॅक्ट कोड मेननेटवर तैनात करण्यापूर्वी टेस्टनेटवर तपासला पाहिजे. विद्यमान स्मार्ट कॉन्ट्रॅक्ट्ससह एकत्रित होणाऱ्या dApps पैकी, बहुतेक प्रोजेक्ट्सच्या कॉपीज टेस्टनेट्सवर तैनात केलेल्या असतात. + +बहुतेक टेस्टनेट्सनी परवानगी असलेल्या प्रूफ-ऑफ-अथॉरिटी सहमती यंत्रणेचा वापर करून सुरुवात केली. याचा अर्थ असा की व्यवहार प्रमाणित करण्यासाठी आणि नवीन ब्लॉक्स तयार करण्यासाठी काही मोजके नोड्स निवडले जातात – या प्रक्रियेत त्यांची ओळख स्टेक करून. याव्यतिरिक्त, काही टेस्टनेट्समध्ये एक खुली प्रूफ-ऑफ-स्टेक सहमती यंत्रणा असते, जिथे प्रत्येकजण Ethereum मेननेटप्रमाणेच व्हॅलिडेटर चालवण्याची चाचणी करू शकतो. + +टेस्टनेट्सवरील ETH चे कोणतेही वास्तविक मूल्य नसते असे मानले जाते; तथापि, काही प्रकारच्या टेस्टनेट ETH साठी बाजारपेठा तयार झाल्या आहेत जे दुर्मिळ किंवा मिळवण्यासाठी कठीण झाले आहे. Ethereum सोबत (अगदी टेस्टनेट्सवरही) संवाद साधण्यासाठी तुम्हाला ETH ची आवश्यकता असल्याने, बहुतेक लोक फॉसेट्समधून विनामूल्य टेस्टनेट ETH मिळवतात. बहुतेक फॉसेट्स हे वेबॲप्स आहेत जिथे तुम्ही एक पत्ता टाकू शकता ज्यावर ETH पाठवण्याची विनंती करता. + +#### मी कोणता टेस्टनेट वापरावा? + +क्लायंट डेव्हलपर्स सध्या सांभाळत असलेले दोन सार्वजनिक टेस्टनेट्स Sepolia आणि Hoodi आहेत. Sepolia हे कॉन्ट्रॅक्ट आणि ॲप्लिकेशन डेव्हलपर्ससाठी त्यांच्या ॲप्लिकेशन्सची चाचणी करण्याकरिता एक नेटवर्क आहे. Hoodi नेटवर्क प्रोटोकॉल डेव्हलपर्सना नेटवर्क अपग्रेडची चाचणी करण्याची आणि स्टेकर्सना व्हॅलिडेटर्स चालवण्याची चाचणी करण्याची परवानगी देते. + +#### Sepolia {#sepolia} + +**ॲप्लिकेशन डेव्हलपमेंटसाठी Sepolia हा शिफारस केलेला डीफॉल्ट टेस्टनेट आहे**. Sepolia नेटवर्क क्लायंट आणि टेस्टिंग टीमद्वारे नियंत्रित असलेला परवानगीप्राप्त व्हॅलिडेटर संच वापरते. + +##### संसाधने + +- [वेबसाइट](https://sepolia.dev/) +- [GitHub](https://github.com/eth-clients/sepolia) +- [Otterscan](https://sepolia.otterscan.io/) +- [Etherscan](https://sepolia.etherscan.io) +- [Blockscout](https://eth-sepolia.blockscout.com/) + +##### फॉसेट्स + +- [Alchemy Sepolia फॉसेट](https://www.alchemy.com/faucets/ethereum-sepolia) +- [Chain Platform Sepolia फॉसेट](https://faucet.chainplatform.co/faucets/ethereum-sepolia/) +- [Chainstack Sepolia फॉसेट](https://faucet.chainstack.com/sepolia-testnet-faucet) +- [Ethereum इकोसिस्टम फॉसेट](https://www.ethereum-ecosystem.com/faucets/ethereum-sepolia) +- [ethfaucet.com Sepolia फॉसेट](https://ethfaucet.com/networks/ethereum) +- [Google Cloud Web3 Sepolia फॉसेट](https://cloud.google.com/application/web3/faucet/ethereum/sepolia) +- [Grabteeth](https://grabteeth.xyz/) +- [Infura Sepolia फॉसेट](https://www.infura.io/faucet) +- [PoW फॉसेट](https://sepolia-faucet.pk910.de/) +- [QuickNode Sepolia फॉसेट](https://faucet.quicknode.com/ethereum/sepolia) + +#### Hoodi {#hoodi} + +Hoodi हा व्हॅलिडेटिंग आणि स्टेकिंगची चाचणी करण्यासाठी एक टेस्टनेट आहे. Hoodi नेटवर्क टेस्टनेट व्हॅलिडेटर चालवू इच्छिणाऱ्या वापरकर्त्यांसाठी खुले आहे. म्हणून, मेननेटवर तैनात करण्यापूर्वी प्रोटोकॉल अपग्रेडची चाचणी करू इच्छिणाऱ्या स्टेकर्सनी Hoodi वापरावे. + +- खुला व्हॅलिडेटर सेट, स्टेकर्स नेटवर्क अपग्रेडची चाचणी करू शकतात +- मोठी स्टेट, गुंतागुंतीच्या स्मार्ट कॉन्ट्रॅक्ट इंटरॅक्शन्सची चाचणी करण्यासाठी उपयुक्त +- सिंक करण्यासाठी जास्त वेळ लागतो आणि नोड चालवण्यासाठी जास्त स्टोरेजची आवश्यकता असते + +##### संसाधने + +- [वेबसाइट](https://hoodi.ethpandaops.io/) +- [GitHub](https://github.com/eth-clients/hoodi) +- [एक्सप्लोरर](https://explorer.hoodi.ethpandaops.io/) +- [चेकपॉइंट सिंक](https://checkpoint-sync.hoodi.ethpandaops.io/) +- [Otterscan](https://hoodi.otterscan.io/) +- [Etherscan](https://hoodi.etherscan.io/) + +##### फॉसेट्स + +- [Chain Platform Hoodi फॉसेट](https://faucet.chainplatform.co/faucets/ethereum-hoodi/) +- [Hoodi फॉसेट](https://hoodi.ethpandaops.io/) +- [PoW फॉसेट](https://hoodi-faucet.pk910.de/) + +#### Ephemery {#ephemery} + +Ephemery हा एक अनोखा प्रकारचा टेस्टनेट आहे जो दर महिन्याला पूर्णपणे रीसेट होतो. अंमलबजावणी आणि सहमतीची स्थिती दर 28 दिवसांनी जेनेसिसवर परत जाते, याचा अर्थ टेस्टनेटवर घडणारी कोणतीही गोष्ट क्षणिक असते. यामुळे हे अल्प-मुदतीच्या चाचणी, जलद नोड बूटस्ट्रॅप आणि 'हॅलो वर्ल्ड' सारख्या ॲप्लिकेशन्ससाठी आदर्श आहे ज्यांना कायमस्वरूपीपणाची आवश्यकता नसते. + +- नेहमी ताजी स्थिती, व्हॅलिडेटर्स आणि ॲप्सची अल्प-मुदतीची चाचणी +- फक्त मूलभूत कॉन्ट्रॅक्ट्सचा संच समाविष्ट आहे +- खुला व्हॅलिडेटर सेट आणि मोठ्या प्रमाणात निधी मिळवणे सोपे +- सर्वात कमी नोड आवश्यकता आणि सर्वात जलद सिंक, सरासरी <5GB + +##### संसाधने + +- [वेबसाइट](https://ephemery.dev/) +- [Github](https://github.com/ephemery-testnet/ephemery-resources) +- [कम्युनिटी चॅट](https://matrix.to/#/#staker-testnet:matrix.org) +- [Blockscout](https://explorer.ephemery.dev/) +- [Otterscan](https://otter.bordel.wtf/) +- [बीकन एक्सप्लोरर](https://beaconlight.ephemery.dev/) +- [चेकपॉइंट सिंक](https://checkpoint-sync.ephemery.ethpandaops.io) +- [लाँचपॅड](https://launchpad.ephemery.dev/) + +#### फॉसेट्स + +- [Bordel फॉसेट](https://faucet.bordel.wtf/) +- [Pk910 PoW फॉसेट](https://ephemery-faucet.pk910.de/) + +#### Holesky (कालबाह्य) {#holesky} + +Holesky टेस्टनेट सप्टेंबर २०२५ पासून कालबाह्य आहे. स्टेकिंग ऑपरेटर्स आणि इन्फ्रास्ट्रक्चर प्रोव्हायडर्सनी त्याऐवजी व्हॅलिडेटर चाचणीसाठी Hoodi वापरावे. + +- [Holesky टेस्टनेट शटडाउनची घोषणा](https://blog.ethereum.org/2025/09/01/holesky-shutdown-announcement) - _EF ब्लॉग, 1-सप्टेंबर-2025_ +- [Holesky आणि Hoodi टेस्टनेट अपडेट्स](https://blog.ethereum.org/en/2025/03/18/hoodi-holesky) - _EF ब्लॉग, 18-मार्च-2025_ + +### लेयर 2 टेस्टनेट्स {#layer-2-testnets} + +[लेयर 2 (L2)](/layer-2/) ही Ethereum स्केलिंग सोल्यूशन्सच्या विशिष्ट संचाचे वर्णन करण्यासाठी वापरली जाणारी एक सामूहिक संज्ञा आहे. लेयर 2 हे एक वेगळे ब्लॉकचेन आहे जे Ethereum चा विस्तार करते आणि Ethereum च्या सुरक्षा हमी वारसा हक्काने घेते. लेयर 2 टेस्टनेट्स सामान्यतः सार्वजनिक Ethereum टेस्टनेट्सशी घट्टपणे जोडलेले असतात. + +#### Arbitrum Sepolia {#arbitrum-sepolia} + +[Arbitrum](https://arbitrum.io/) साठी एक टेस्टनेट. + +##### संसाधने + +- [Etherscan](https://sepolia.arbiscan.io/) +- [Blockscout](https://sepolia-explorer.arbitrum.io/) + +##### फॉसेट्स + +- [Alchemy Arbitrum Sepolia फॉसेट](https://www.alchemy.com/faucets/arbitrum-sepolia) +- [Chainlink Arbitrum Sepolia फॉसेट](https://faucets.chain.link/arbitrum-sepolia) +- [ethfaucet.com Arbitrum Sepolia फॉसेट](https://ethfaucet.com/networks/arbitrum) +- [QuickNode Arbitrum Sepolia फॉसेट](https://faucet.quicknode.com/arbitrum/sepolia) + +#### Optimistic Sepolia {#optimistic-sepolia} + +[Optimism](https://www.optimism.io/) साठी एक टेस्टनेट. + +##### संसाधने + +- [Etherscan](https://sepolia-optimistic.etherscan.io/) +- [Blockscout](https://optimism-sepolia.blockscout.com/) + +##### फॉसेट्स + +- [Alchemy फॉसेट](https://www.alchemy.com/faucets/optimism-sepolia) +- [Chainlink फॉसेट](https://faucets.chain.link/optimism-sepolia) +- [ethfaucet.com Optimism Sepolia फॉसेट](https://ethfaucet.com/networks/optimism) +- [टेस्टनेट फॉसेट](https://docs.optimism.io/builders/tools/build/faucets) + +#### Starknet Sepolia {#starknet-sepolia} + +[Starknet](https://www.starknet.io) साठी एक टेस्टनेट. + +##### संसाधने + +- [Starkscan](https://sepolia.starkscan.co/) + +##### फॉसेट्स + +- [Alchemy फॉसेट](https://www.alchemy.com/faucets/starknet-sepolia) +- [Blast Starknet Sepolia फॉसेट](https://blastapi.io/faucets/starknet-sepolia-eth) +- [Starknet फॉसेट](https://starknet-faucet.vercel.app/) + +## खाजगी नेटवर्क्स {#private-networks} + +एक Ethereum नेटवर्क हे खाजगी नेटवर्क असते जर त्याचे नोड्स सार्वजनिक नेटवर्कशी (म्हणजेच, मेननेट किंवा टेस्टनेट) जोडलेले नसतील. या संदर्भात, 'खाजगी' म्हणजे फक्त राखीव किंवा वेगळे, संरक्षित किंवा सुरक्षित नाही. + +### विकास नेटवर्क्स {#development-networks} + +Ethereum ॲप्लिकेशन विकसित करण्यासाठी, ते तैनात करण्यापूर्वी कसे कार्य करते हे पाहण्यासाठी तुम्हाला ते एका खाजगी नेटवर्कवर चालवायचे असेल. जसे तुम्ही वेब डेव्हलपमेंटसाठी तुमच्या संगणकावर लोकल सर्व्हर तयार करता, त्याचप्रमाणे तुम्ही तुमच्या dApp ची चाचणी करण्यासाठी लोकल ब्लॉकचेन इन्स्टन्स तयार करू शकता. हे सार्वजनिक टेस्टनेटपेक्षा खूप जलद पुनरावृत्ती करण्यास अनुमती देते. + +यासाठी मदत करण्यासाठी समर्पित प्रोजेक्ट्स आणि टूल्स आहेत. [विकास नेटवर्क्स](/developers/docs/development-networks/)बद्दल अधिक जाणून घ्या. + +### कंसोर्टियम नेटवर्क्स {#consortium-networks} + +सहमती प्रक्रिया विश्वसनीय असलेल्या नोड्सच्या पूर्व-परिभाषित संचाद्वारे नियंत्रित केली जाते. उदाहरणार्थ, ज्ञात शैक्षणिक संस्थांचे एक खाजगी नेटवर्क ज्यापैकी प्रत्येक एका नोडवर नियंत्रण ठेवते, आणि ब्लॉक्स नेटवर्कमधील स्वाक्षरीकर्त्यांच्या थ्रेशोल्डद्वारे प्रमाणित केले जातात. + +जर सार्वजनिक Ethereum नेटवर्क सार्वजनिक इंटरनेटसारखे असेल, तर कंसोर्टियम नेटवर्क खाजगी इंट्रानेटसारखे आहे. + +## Ethereum टेस्टनेट्सना मेट्रो स्टेशन्सची नावे का दिली जातात? {#why-naming} + +अनेक Ethereum टेस्टनेट्सना वास्तविक जगातील मेट्रो किंवा ट्रेन स्टेशन्सवरून नावे दिली आहेत. ही नाव देण्याची परंपरा लवकर सुरू झाली आणि ती जागतिक शहरे प्रतिबिंबित करते जिथे योगदानकर्ते राहिले किंवा काम केले आहेत. हे प्रतिकात्मक, संस्मरणीय आणि व्यावहारिक आहे. जसे टेस्टनेट्स Ethereum मेननेटपासून वेगळे आहेत, तसेच मेट्रो लाईन्स पृष्ठभागावरील रहदारीपासून वेगळ्या चालतात. + +### सामान्यतः वापरले जाणारे आणि लेगसी टेस्टनेट्स {#common-and-legacy-testnets} + +- **Sepolia** - अथेन्स, ग्रीसमधील मेट्रोने जोडलेला परिसर. सध्या स्मार्ट कॉन्ट्रॅक्ट आणि dApp चाचणीसाठी वापरले जाते. +- **Hoodi** - बंगळूर, भारतातील हुडी मेट्रो स्टेशनच्या नावावरून ठेवलेले. व्हॅलिडेटर आणि प्रोटोकॉल अपग्रेड चाचणीसाठी वापरले जाते. +- **Goerli** _(कालबाह्य)_ - बर्लिन, जर्मनीमधील Görlitzer Bahnhof च्या नावावरून ठेवलेले. +- **Rinkeby** _(कालबाह्य)_ - स्टॉकहोममधील मेट्रो स्टेशन असलेल्या उपनगराच्या नावावरून ठेवलेले. +- **Ropsten** _(कालबाह्य)_ - स्टॉकहोममधील एक परिसर आणि पूर्वीचे फेरी/मेट्रो टर्मिनल. +- **Kovan** _(कालबाह्य)_ - सिंगापूरमधील MRT स्टेशनच्या नावावरून ठेवलेले. +- **Morden** _(कालबाह्य)_ - लंडन अंडरग्राउंड स्टेशनच्या नावावरून ठेवलेले. Ethereum चा पहिला सार्वजनिक टेस्टनेट. + +### इतर विशेष टेस्टनेट्स {#other-testnets} + +काही टेस्टनेट्स अल्प-मुदतीच्या किंवा अपग्रेड-विशिष्ट चाचणीसाठी तयार केले गेले होते आणि ते आवश्यक नाही की मेट्रो-थीमवर आधारित असतील: + +- **Holesky** _(कालबाह्य)_ - प्रागमधील Holešovice स्टेशनच्या नावावरून ठेवलेले. व्हॅलिडेटर चाचणीसाठी वापरले जाते; 2025 मध्ये कालबाह्य. +- **Kiln**, **Zhejiang**, **Shandong**, **Prater**, **Pyrmont**, **Olympic** _(सर्व कालबाह्य)_ आणि **Ephemery** - द मर्ज, शांघाय, किंवा व्हॅलिडेटर प्रयोगांसारख्या अपग्रेड सिम्युलेशनसाठी उद्देश-निर्मित. काही नावे मेट्रो-आधारित नसून प्रादेशिक किंवा थीमॅटिक आहेत. + +मेट्रो स्टेशनची नावे वापरल्याने डेव्हलपर्सना अंकीय चेन आयडीवर अवलंबून न राहता टेस्टनेट्स पटकन ओळखण्यास आणि लक्षात ठेवण्यास मदत होते. हे Ethereum च्या संस्कृतीला देखील प्रतिबिंबित करते: व्यावहारिक, जागतिक आणि मानवकेंद्रित. + +## संबंधित साधने {#related-tools} + +- [Chainlist](https://chainlist.org/) _वॉलेट्स आणि प्रोव्हायडर्सना योग्य चेन आयडी आणि नेटवर्क आयडीशी जोडण्यासाठी EVM नेटवर्क्सची सूची_ +- [EVM-आधारित चेन्स](https://github.com/ethereum-lists/chains) _चेन मेटाडेटाचा GitHub रेपो जो Chainlist ला शक्ती देतो_ + +## पुढील वाचन {#further-reading} + +- [प्रस्ताव: अंदाजित Ethereum टेस्टनेट जीवनचक्र](https://ethereum-magicians.org/t/proposal-predictable-ethereum-testnet-lifecycle/11575/17) +- [Ethereum टेस्टनेट्सची उत्क्रांती](https://etherworld.co/2022/08/19/the-evolution-of-ethereum-testnet/) diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/archive-nodes/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/archive-nodes/index.md new file mode 100644 index 00000000000..094c61594a9 --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/archive-nodes/index.md @@ -0,0 +1,81 @@ +--- +title: "इथेरियम आर्काइव्ह नोड" +description: "आर्काइव्ह नोड्सचा आढावा" +lang: mr +sidebarDepth: 2 +--- + +आर्काइव्ह नोड हा इथेरियम क्लायंटचा एक इन्स्टन्स आहे जो सर्व ऐतिहासिक स्टेट्सचा आर्काइव्ह तयार करण्यासाठी कॉन्फिगर केलेला असतो. हे काही विशिष्ट वापरासाठी एक उपयुक्त साधन आहे परंतु पूर्ण नोडपेक्षा चालवण्यासाठी अधिक अवघड असू शकते. + +## पूर्वतयारी {#prerequisites} + +तुम्ही [इथेरियम नोडची](/developers/docs/nodes-and-clients/) संकल्पना, [त्याची रचना](/developers/docs/nodes-and-clients/node-architecture/), [सिंक करण्याची धोरणे](/developers/docs/nodes-and-clients/#sync-modes), [तो चालवण्याच्या](/developers/docs/nodes-and-clients/run-a-node/) आणि [वापरण्याच्या](/developers/docs/apis/json-rpc/) पद्धती समजून घेतल्या पाहिजेत. + +## आर्काइव्ह नोड म्हणजे काय + +आर्काइव्ह नोडचे महत्त्व समजून घेण्यासाठी, चला "स्टेट" ही संकल्पना स्पष्ट करूया. इथेरियमला _ट्रान्झॅक्शन-आधारित स्टेट मशीन_ म्हणून संबोधले जाऊ शकते. यात खाती आणि ॲप्लिकेशन्स असतात जे व्यवहार कार्यान्वित करून त्यांची स्टेट बदलतात. प्रत्येक खाते आणि कराराबद्दलच्या माहितीसह असलेला जागतिक डेटा, स्टेट नावाच्या ट्राय डेटाबेसमध्ये संग्रहित केला जातो. हे एक्झिक्युशन लेअर (EL) क्लायंटद्वारे हाताळले जाते आणि त्यात समाविष्ट आहे: + +- खात्यातील शिल्लक आणि नॉन्स +- कराराचा कोड आणि स्टोरेज +- कन्सेंसस-संबंधित डेटा, उदा., स्टेकिंग डिपॉझिट कॉन्ट्रॅक्ट + +नेटवर्कशी संवाद साधण्यासाठी, नवीन ब्लॉक्सची पडताळणी करण्यासाठी आणि तयार करण्यासाठी, इथेरियम क्लायंट्सना सर्वात अलीकडील बदलांसह (चेनचे टोक) आणि म्हणूनच वर्तमान स्टेटसह अद्ययावत रहावे लागते. पूर्ण नोड म्हणून कॉन्फिगर केलेला एक्झिक्युशन लेअर क्लायंट नेटवर्कच्या नवीनतम स्टेटची पडताळणी करतो आणि त्याचे अनुसरण करतो, पण तो फक्त मागील काही स्टेट्स कॅशे करतो, उदा., शेवटच्या 128 ब्लॉक्सशी संबंधित स्टेट, जेणेकरून तो चेन रिऑर्ग्स हाताळू शकेल आणि अलीकडील डेटामध्ये जलद प्रवेश प्रदान करू शकेल. येणारे व्यवहार सत्यापित करण्यासाठी आणि नेटवर्क वापरण्यासाठी सर्व क्लायंट्सना अलीकडील स्टेटची आवश्यकता असते. + +तुम्ही स्टेटची कल्पना एका दिलेल्या ब्लॉकवरील नेटवर्कच्या क्षणिक स्नॅपशॉट म्हणून आणि आर्काइव्हची कल्पना इतिहासाच्या रिप्ले म्हणून करू शकता. + +ऐतिहासिक स्टेट्स सुरक्षितपणे काढून टाकल्या जाऊ शकतात, कारण त्या नेटवर्क चालवण्यासाठी आवश्यक नाहीत आणि क्लायंटने सर्व कालबाह्य डेटा ठेवणे अनावश्यकपणे निरर्थक ठरेल. काही अलीकडील ब्लॉकच्या आधी अस्तित्वात असलेल्या स्टेट्स (उदा., हेडच्या 128 ब्लॉक्स आधी) प्रभावीपणे टाकून दिल्या जातात. पूर्ण नोड्स फक्त ऐतिहासिक ब्लॉकचेन डेटा (ब्लॉक्स आणि व्यवहार) आणि अधूनमधून ऐतिहासिक स्नॅपशॉट्स ठेवतात, जे ते विनंतीनुसार जुन्या स्टेट्स पुन्हा तयार करण्यासाठी वापरू शकतात. ते EVM मध्ये मागील व्यवहार पुन्हा कार्यान्वित करून हे करतात, जे संगणकीयदृष्ट्या मागणी करणारे असू शकते जेव्हा इच्छित स्टेट सर्वात जवळच्या स्नॅपशॉटपासून दूर असते. + +तथापि, याचा अर्थ असा की पूर्ण नोडवर ऐतिहासिक स्टेटमध्ये प्रवेश करण्यासाठी खूप संगणन लागते. क्लायंटला सर्व मागील व्यवहार कार्यान्वित करण्याची आणि जेनेसिसपासून एक ऐतिहासिक स्टेट संगणित करण्याची आवश्यकता भासू शकते. आर्काइव्ह नोड्स ही समस्या केवळ सर्वात अलीकडील स्टेट्सच नव्हे, तर प्रत्येक ब्लॉकनंतर तयार झालेली प्रत्येक ऐतिहासिक स्टेट संग्रहित करून सोडवतात. हे मुळात मोठ्या डिस्क स्पेसच्या आवश्यकतेसह तडजोड करते. + +हे लक्षात घेणे महत्त्वाचे आहे की सर्व ऐतिहासिक डेटा ठेवण्यासाठी आणि प्रदान करण्यासाठी नेटवर्क आर्काइव्ह नोड्सवर अवलंबून नाही. वर नमूद केल्याप्रमाणे, सर्व ऐतिहासिक अंतरिम स्टेट्स पूर्ण नोडवर मिळवता येतात. व्यवहार कोणत्याही पूर्ण नोडद्वारे संग्रहित केले जातात (सध्या 400G पेक्षा कमी) आणि संपूर्ण आर्काइव्ह तयार करण्यासाठी ते पुन्हा प्ले केले जाऊ शकतात. + +### प्रकरणे वापरा + +इथेरियमच्या नियमित वापरासाठी, जसे की व्यवहार पाठवणे, करार तैनात करणे, कन्सेंसस सत्यापित करणे इत्यादी, ऐतिहासिक स्टेट्समध्ये प्रवेशाची आवश्यकता नसते. नेटवर्कशी मानक संवादासाठी वापरकर्त्यांना आर्काइव्ह नोडची कधीही आवश्यकता नसते. + +स्टेट आर्काइव्हचा मुख्य फायदा म्हणजे ऐतिहासिक स्टेट्सबद्दलच्या क्वेरींमध्ये जलद प्रवेश मिळवणे. उदाहरणार्थ, आर्काइव्ह नोड त्वरित खालीलप्रमाणे परिणाम देईल: + +- _खाते 0x1337... ची ETH शिल्लक काय होती..._ _ब्लॉक 15537393 वर?_ +- _ब्लॉक 1920000 वर करार 0x मधील टोकन 0x ची शिल्लक काय आहे?_ + +वर स्पष्ट केल्याप्रमाणे, पूर्ण नोडला EVM एक्झिक्युशनद्वारे हा डेटा तयार करण्याची आवश्यकता असेल, जे CPU वापरते आणि वेळ घेते. आर्काइव्ह नोड्स डिस्कवर त्यात प्रवेश करतात आणि त्वरित प्रतिसाद देतात. पायाभूत सुविधांच्या काही भागांसाठी हे एक उपयुक्त वैशिष्ट्य आहे, उदाहरणार्थ: + +- ब्लॉक एक्सप्लोरर्स सारखे सेवा प्रदाते +- संशोधक +- सुरक्षा विश्लेषक +- Dapp डेव्हलपर्स +- ऑडिटिंग आणि अनुपालन + +विविध विनामूल्य [सेवा](/developers/docs/nodes-and-clients/nodes-as-a-service/) आहेत ज्या ऐतिहासिक डेटामध्ये प्रवेश करण्याची परवानगी देखील देतात. आर्काइव्ह नोड चालवणे अधिक मागणीचे असल्याने, हा प्रवेश बहुतेक मर्यादित असतो आणि फक्त अधूनमधून प्रवेशासाठी कार्य करतो. तुमच्या प्रोजेक्टला ऐतिहासिक डेटामध्ये सतत प्रवेशाची आवश्यकता असल्यास, तुम्ही स्वतः एक चालवण्याचा विचार केला पाहिजे. + +## अंमलबजावणी आणि वापर + +या संदर्भात आर्काइव्ह नोड म्हणजे वापरकर्त्यांसमोर असलेल्या एक्झिक्युशन लेअर क्लायंटद्वारे सेवा दिलेला डेटा, कारण ते स्टेट डेटाबेस हाताळतात आणि JSON-RPC एंडपॉइंट्स प्रदान करतात. कॉन्फिगरेशन पर्याय, सिंक वेळ आणि डेटाबेस आकार क्लायंटनुसार भिन्न असू शकतात. तपशिलांसाठी, कृपया तुमच्या क्लायंटने प्रदान केलेल्या डॉक्युमेंटेशनचा संदर्भ घ्या. + +तुमचा स्वतःचा आर्काइव्ह नोड सुरू करण्यापूर्वी, क्लायंटमधील फरक आणि विशेषतः विविध [हार्डवेअर आवश्यकतां](/developers/docs/nodes-and-clients/run-a-node/#requirements)बद्दल जाणून घ्या. बहुतेक क्लायंट या वैशिष्ट्यासाठी ऑप्टिमाइझ केलेले नाहीत आणि त्यांच्या आर्काइव्हसाठी 12TB पेक्षा जास्त जागेची आवश्यकता असते. याउलट, Erigon सारखी अंमलबजावणी तोच डेटा 3TB पेक्षा कमी जागेत संग्रहित करू शकते, ज्यामुळे ते आर्काइव्ह नोड चालवण्याचा सर्वात प्रभावी मार्ग ठरतात. + +## शिफारस केलेल्या पद्धती + +[नोड चालवण्यासाठीच्या](/developers/docs/nodes-and-clients/run-a-node/) सामान्य शिफारशींव्यतिरिक्त, आर्काइव्ह नोड हार्डवेअर आणि देखभालीसाठी अधिक मागणी करणारा असू शकतो. Erigon ची [मुख्य वैशिष्ट्ये](https://github.com/ledgerwatch/erigon#key-features) विचारात घेता, [Erigon](/developers/docs/nodes-and-clients/#erigon) क्लायंट अंमलबजावणी वापरणे हा सर्वात व्यावहारिक दृष्टिकोन आहे. + +### हार्डवेअर + +क्लायंटच्या डॉक्युमेंटेशनमध्ये दिलेल्या मोडसाठी हार्डवेअर आवश्यकता नेहमी सत्यापित करण्याची खात्री करा. +आर्काइव्ह नोड्ससाठी सर्वात मोठी आवश्यकता डिस्क स्पेस आहे. क्लायंटवर अवलंबून, ते 3TB ते 12TB पर्यंत बदलते. जरी मोठ्या प्रमाणात डेटासाठी HDD एक चांगला उपाय मानला जाऊ शकतो, तरीही ते सिंक करण्यासाठी आणि चेनचे हेड सतत अद्ययावत करण्यासाठी SSD ड्राइव्हची आवश्यकता असेल. [SATA](https://www.cleverfiles.com/help/sata-hard-drive.html) ड्राइव्ह पुरेसे चांगले आहेत, परंतु ते विश्वसनीय दर्जाचे असावेत, किमान [TLC](https://blog.synology.com/tlc-vs-qlc-ssds-what-are-the-differences). पुरेशा स्लॉट्स असलेल्या डेस्कटॉप संगणकात किंवा सर्व्हरमध्ये डिस्क बसवल्या जाऊ शकतात. अशी समर्पित उपकरणे उच्च अपटाइम नोड चालवण्यासाठी आदर्श आहेत. हे लॅपटॉपवर चालवणे पूर्णपणे शक्य आहे, परंतु पोर्टेबिलिटीसाठी अतिरिक्त खर्च येईल. + +सर्व डेटा एकाच व्हॉल्यूममध्ये बसवणे आवश्यक आहे, म्हणून डिस्क जोडल्या पाहिजेत, उदा., [RAID0](https://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_0) किंवा LVM सह. [ZFS](https://en.wikipedia.org/wiki/ZFS) वापरण्याचा विचार करणे देखील योग्य ठरू शकते, कारण ते "कॉपी-ऑन-राइट" ला सपोर्ट करते, जे हे सुनिश्चित करते की डेटा कोणत्याही निम्न-स्तरीय त्रुटींशिवाय डिस्कवर योग्यरित्या लिहिला गेला आहे. + +अपघाती डेटाबेस करप्शन टाळण्यासाठी अधिक स्थिरता आणि सुरक्षिततेसाठी, विशेषतः व्यावसायिक सेटअपमध्ये, जर तुमची सिस्टीम त्याला सपोर्ट करत असेल तर [ECC मेमरी](https://en.wikipedia.org/wiki/ECC_memory) वापरण्याचा विचार करा. RAM चा आकार साधारणपणे पूर्ण नोडसाठी सारखाच ठेवण्याचा सल्ला दिला जातो, परंतु अधिक RAM सिंकचा वेग वाढविण्यात मदत करू शकते. + +सुरुवातीच्या सिंक दरम्यान, आर्काइव्ह मोडमधील क्लायंट जेनेसिसपासून प्रत्येक व्यवहार कार्यान्वित करतील. एक्झिक्युशनचा वेग बहुतेक CPU द्वारे मर्यादित असतो, त्यामुळे वेगवान CPU सुरुवातीच्या सिंक वेळेसाठी मदत करू शकतो. सरासरी ग्राहक संगणकावर, सुरुवातीच्या सिंकसाठी एक महिन्यापर्यंतचा कालावधी लागू शकतो. + +## पुढील वाचन {#further-reading} + +- [इथेरियम फुल नोड विरुद्ध आर्काइव्ह नोड](https://www.quicknode.com/guides/infrastructure/ethereum-full-node-vs-archive-node) - _QuickNode, सप्टेंबर २०२२_ +- [तुमचा स्वतःचा इथेरियम आर्काइव्ह नोड तयार करणे](https://tjayrush.medium.com/building-your-own-ethereum-archive-node-72c014affc09) - _थॉमस जे रश, ऑगस्ट २०२१_ +- [Erigon, Erigon’s RPC आणि TrueBlocks (स्क्रॅप आणि API) सेवा म्हणून कसे सेट करावे](https://magnushansson.xyz/blog_posts/crypto_defi/2022-01-10-Erigon-Trueblocks) _– मॅग्नस हॅन्सन, सप्टेंबर २०२२ रोजी अद्यतनित_ + +## संबंधित विषय {#related-topics} + +- [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) +- [नोड चालवणे](/developers/docs/nodes-and-clients/run-a-node/) diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/bootnodes/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/bootnodes/index.md new file mode 100644 index 00000000000..d0f6b4739b3 --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/bootnodes/index.md @@ -0,0 +1,31 @@ +--- +title: "इथेरियम बूटनोड्सचा परिचय" +description: "बूटनोड्स समजण्यासाठी आवश्यक असलेली मूलभूत माहिती" +lang: mr +--- + +जेव्हा एखादा नवीन नोड इथेरियम नेटवर्कमध्ये सामील होतो, तेव्हा त्याला नवीन पीअर्स शोधण्यासाठी नेटवर्कवर आधीपासून असलेल्या नोड्सशी कनेक्ट करणे आवश्यक असते. इथेरियम नेटवर्कमधील या एन्ट्री पॉईंट्सना बूटनोड्स म्हणतात. क्लायंट्समध्ये सहसा बूटनोड्सची यादी हार्डकोड केलेली असते. हे बूटनोड्स सामान्यतः इथेरियम फाउंडेशनच्या डेव्हॉप्स टीम किंवा क्लायंट टीम्सद्वारे चालवले जातात. लक्षात घ्या की बूटनोड्स आणि स्टॅटिक नोड्स एकच नाहीत. स्टॅटिक नोड्सना वारंवार कॉल केले जाते, तर बूटनोड्सना तेव्हाच कॉल केले जाते जेव्हा कनेक्ट करण्यासाठी पुरेसे पीअर्स नसतात आणि नोडला काही नवीन कनेक्शन्स बूटस्ट्रॅप करण्याची आवश्यकता असते. + +## बूटनोडला कनेक्ट करा {#connect-to-a-bootnode} + +बहुतेक क्लायंट्समध्ये बूटनोड्सची यादी बिल्ट-इन असते, परंतु तुम्हाला तुमचा स्वतःचा बूटनोड चालवायचा असेल किंवा क्लायंटच्या हार्डकोड केलेल्या यादीत नसलेला एखादा बूटनोड वापरायचा असेल. अशा परिस्थितीत, तुम्ही तुमचा क्लायंट सुरू करताना ते खालीलप्रमाणे निर्दिष्ट करू शकता (उदाहरण Geth साठी आहे, कृपया तुमच्या क्लायंटचे डॉक्युमेंटेशन तपासा): + +``` +geth --bootnodes "enode://@:" +``` + +## बूटनोड चालवा {#run-a-bootnode} + +बूटनोड्स हे पूर्ण नोड्स आहेत जे NAT ([नेटवर्क अॅड्रेस ट्रान्सलेशन](https://www.geeksforgeeks.org/network-address-translation-nat/)) च्या मागे नसतात. प्रत्येक पूर्ण नोड जोपर्यंत सार्वजनिकरित्या उपलब्ध आहे तोपर्यंत बूटनोड म्हणून काम करू शकतो. + +तुम्ही नोड सुरू करता तेव्हा, तो तुमचा [enode](/developers/docs/networking-layer/network-addresses/#enode) लॉग करतो, जो एक सार्वजनिक ओळखकर्ता आहे ज्याचा वापर इतर तुमच्या नोडशी कनेक्ट करण्यासाठी करू शकतात. + +प्रत्येक रीस्टार्टवर enode सहसा पुन्हा जनरेट होतो, त्यामुळे तुमच्या बूटनोडसाठी एक कायमस्वरूपी enode कसा तयार करायचा याबद्दल तुमच्या क्लायंटचे डॉक्युमेंटेशन नक्की तपासा. + +एक चांगला बूटनोड होण्यासाठी, त्याच्याशी कनेक्ट होऊ शकणाऱ्या पीअर्सची कमाल संख्या वाढवणे ही एक चांगली कल्पना आहे. अनेक पीअर्ससह बूटनोड चालवल्याने बँडविड्थची आवश्यकता लक्षणीयरीत्या वाढेल. + +## उपलब्ध बूटनोड्स {#available-bootnodes} + +go-ethereum मधील बिल्ट-इन बूटनोड्सची यादी [येथे](https://github.com/ethereum/go-ethereum/blob/master/params/bootnodes.go#L23) आढळू शकते. हे बूटनोड्स इथेरियम फाउंडेशन आणि go-ethereum टीमद्वारे सांभाळले जातात. + +स्वयंसेवकांकडून सांभाळल्या जाणाऱ्या बूटनोड्सच्या इतर याद्या देखील उपलब्ध आहेत. कृपया खात्री करा की तुम्ही नेहमी किमान एक अधिकृत बूटनोड समाविष्ट करा, अन्यथा तुमच्यावर एक्लिप्स अटॅक होऊ शकतो. diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/client-diversity/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/client-diversity/index.md new file mode 100644 index 00000000000..8d8c2cd1a8d --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/client-diversity/index.md @@ -0,0 +1,132 @@ +--- +title: "क्लायंट विविधता" +description: "Ethereum क्लायंट विविधतेच्या महत्त्वाचे उच्च स्तरीय स्पष्टीकरण." +lang: mr +sidebarDepth: 2 +--- + +Ethereum नोडचे वर्तन ते चालवत असलेल्या क्लायंट सॉफ्टवेअरद्वारे नियंत्रित केले जाते. अनेक प्रोडक्शन-लेव्हल Ethereum क्लायंट आहेत, प्रत्येक स्वतंत्र टीमद्वारे वेगवेगळ्या भाषांमध्ये विकसित आणि देखरेख केले जाते. क्लायंट एका सामान्य स्पेसिफिकेशननुसार तयार केले आहेत, जे हे सुनिश्चित करते की क्लायंट एकमेकांशी अखंडपणे संवाद साधतात आणि समान कार्यक्षमता ठेवतात आणि समतुल्य वापरकर्ता अनुभव देतात. तथापि, सध्या नोड्सवरील क्लायंटचे वितरण या नेटवर्कच्या मजबुतीकरणाला त्याच्या पूर्ण क्षमतेपर्यंत पोहोचवण्यासाठी पुरेसे समान नाही. आदर्शपणे, वापरकर्त्यांनी नेटवर्कमध्ये शक्य तितकी क्लायंट विविधता आणण्यासाठी विविध क्लायंटमध्ये अंदाजे समान रीतीने विभागले पाहिजे. + +## पूर्वतयारी {#prerequisites} + +तुम्हाला नोड्स आणि क्लायंट काय आहेत हे आधीच माहीत नसल्यास, [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) तपासा. [अंमलबजावणी](/glossary/#execution-layer) आणि [सहमती](/glossary/#consensus-layer) स्तर शब्दकोशात परिभाषित केले आहेत. + +## एकापेक्षा जास्त क्लायंट का आहेत? {#why-multiple-clients} + +एकाधिक, स्वतंत्रपणे विकसित आणि देखरेख केलेले क्लायंट अस्तित्वात आहेत कारण क्लायंट विविधता नेटवर्कला हल्ले आणि बग्ससाठी अधिक लवचिक बनवते. एकाधिक क्लायंट असणे ही Ethereum साठी एक अद्वितीय ताकद आहे - इतर ब्लॉकचेन एकाच क्लायंटच्या अचूकतेवर अवलंबून असतात. तथापि, केवळ एकाधिक क्लायंट उपलब्ध असणे पुरेसे नाही, त्यांना समुदायाद्वारे स्वीकारले जाणे आवश्यक आहे आणि एकूण सक्रिय नोड्स त्यांच्यामध्ये तुलनेने समान रीतीने वितरीत केले पाहिजेत. + +## क्लायंट विविधता का महत्त्वाची आहे? {#client-diversity-importance} + +अनेक स्वतंत्रपणे विकसित आणि देखरेख केलेले क्लायंट असणे विकेंद्रित नेटवर्कच्या आरोग्यासाठी महत्त्वाचे आहे. चला त्यामागील कारणे जाणून घेऊया. + +### बग्स {#bugs} + +एखाद्या वैयक्तिक क्लायंटमधील बग, जेव्हा ते Ethereum नोड्सच्या अल्पसंख्याकांचे प्रतिनिधित्व करते, तेव्हा नेटवर्कसाठी कमी धोकादायक असते. अनेक क्लायंटमध्ये नोड्सच्या अंदाजे समान वितरणासह, बहुतेक क्लायंटना सामायिक समस्येचा सामना करण्याची शक्यता कमी असते आणि परिणामी, नेटवर्क अधिक मजबूत होते. + +### हल्ल्यांना प्रतिरोधक क्षमता {#resilience} + +क्लायंट विविधता हल्ल्यांना प्रतिरोधक क्षमता देखील प्रदान करते. उदाहरणार्थ, एखादा हल्ला जो [एखाद्या विशिष्ट क्लायंटला फसवून](https://twitter.com/vdWijden/status/1437712249926393858) चेनच्या विशिष्ट शाखेवर आणतो, तो यशस्वी होण्याची शक्यता कमी असते कारण इतर क्लायंट त्याच प्रकारे शोषण करण्यायोग्य नसतात आणि कॅनॉनिकल चेन अबाधित राहते. कमी क्लायंट विविधता प्रबळ क्लायंटवरील हॅकशी संबंधित धोका वाढवते. क्लायंट विविधता ही नेटवर्कवरील दुर्भावनापूर्ण हल्ल्यांविरूद्ध एक महत्त्वपूर्ण संरक्षण असल्याचे आधीच सिद्ध झाले आहे, उदाहरणार्थ, 2016 मधील शांघाय डिनायल-ऑफ-सर्व्हिस हल्ला शक्य झाला कारण हल्लेखोर प्रबळ क्लायंटला (Geth) प्रति ब्लॉक हजारो वेळा हळू डिस्क i/o ऑपरेशन कार्यान्वित करण्यासाठी फसवू शकले. कारण पर्यायी क्लायंट देखील ऑनलाइन होते जे असुरक्षितता सामायिक करत नव्हते, Ethereum हल्ल्याचा प्रतिकार करण्यास आणि Geth मधील असुरक्षितता दुरुस्त होईपर्यंत कार्यरत राहण्यास सक्षम होते. + +### प्रूफ-ऑफ-स्टेक अंतिमता {#finality} + +Ethereum नोड्सपैकी 33% पेक्षा जास्त असलेल्या सहमती क्लायंटमधील बग सहमती स्तराला अंतिम होण्यापासून रोखू शकतो, याचा अर्थ वापरकर्ते असा विश्वास ठेवू शकत नाहीत की व्यवहार कधीतरी परत घेतले जाणार नाहीत किंवा बदलले जाणार नाहीत. हे Ethereum वर तयार केलेल्या अनेक ॲप्ससाठी, विशेषतः DeFi साठी खूप समस्याप्रधान असेल. + + याहूनही वाईट, दोन-तृतीयांश बहुमत असलेल्या क्लायंटमधील एक गंभीर बग चेनला चुकीच्या पद्धतीने विभाजित आणि अंतिम करण्यास कारणीभूत ठरू शकतो, ज्यामुळे व्हॅलिडेटर्सचा एक मोठा संच अवैध चेनवर अडकून पडू शकतो. जर त्यांना योग्य चेनमध्ये पुन्हा सामील व्हायचे असेल, तर या व्हॅलिडेटर्सना स्लॅशिंग किंवा हळू आणि महागड्या ऐच्छिक पैसे काढणे आणि पुन्हा सक्रिय करणे याचा सामना करावा लागतो. स्लॅशिंगचे प्रमाण दोषी नोड्सच्या संख्येनुसार वाढते, ज्यात दोन-तृतीयांश बहुमताला जास्तीत जास्त (32 ETH) स्लॅश केले जाते. + +जरी हे अशक्यप्राय प्रसंग असले तरी, Ethereum इको-सिस्टम सक्रिय नोड्सवरील क्लायंटचे वितरण समान करून त्यांचा धोका कमी करू शकते. आदर्शपणे, कोणताही सहमती क्लायंट एकूण नोड्सच्या 33% वाटा कधीही गाठणार नाही. + +### सामायिक जबाबदारी {#responsibility} + +बहुसंख्य क्लायंट असण्याची मानवी किंमत देखील आहे. हे एका लहान विकास टीमवर अतिरिक्त ताण आणि जबाबदारी टाकते. क्लायंट विविधता जितकी कमी असेल, तितकीच बहुसंख्य क्लायंटची देखभाल करणाऱ्या विकासकांवर जबाबदारीचा भार जास्त असतो. ही जबाबदारी अनेक टीममध्ये विभागणे Ethereum च्या नोड्सच्या नेटवर्कच्या आणि त्याच्या लोकांच्या नेटवर्कच्या आरोग्यासाठी चांगले आहे. + +## सध्याची क्लायंट विविधता {#current-client-diversity} + +### अंमलबजावणी क्लायंट {#execution-clients-breakdown} + + + +### सहमती क्लायंट {#consensus-clients-breakdown} + + + +हा आकृती कदाचित जुना असेल — अद्ययावत माहितीसाठी [ethernodes.org](https://ethernodes.org) आणि [clientdiversity.org](https://clientdiversity.org) वर जा. + +वरील दोन पाय चार्ट अंमलबजावणी आणि सहमती स्तरांसाठी सध्याच्या क्लायंट विविधतेचे स्नॅपशॉट दर्शवतात (ऑक्टोबर 2025 मध्ये लिहिण्याच्या वेळी). गेल्या काही वर्षांत क्लायंट विविधता सुधारली आहे, आणि अंमलबजावणी स्तराने [Geth](https://geth.ethereum.org/) च्या वर्चस्वात घट पाहिली आहे, [Nethermind](https://www.nethermind.io/nethermind-client) दुसऱ्या क्रमांकावर, [Besu](https://besu.hyperledger.org/) तिसऱ्या आणि [Erigon](https://github.com/ledgerwatch/erigon) चौथ्या क्रमांकावर आहे, आणि इतर क्लायंट नेटवर्कच्या 3% पेक्षा कमी आहेत. सहमती स्तरावरील सर्वात सामान्यपणे वापरला जाणारा क्लायंट—[Lighthouse](https://lighthouse.sigmaprime.io/)—दुसऱ्या सर्वात जास्त वापरल्या जाणाऱ्या क्लायंटच्या अगदी जवळ आहे. [Prysm](https://prysmaticlabs.com/#projects) आणि [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) अनुक्रमे ~31% आणि ~14% आहेत, आणि इतर क्लायंट क्वचितच वापरले जातात. + +अंमलबजावणी स्तरावरील डेटा [supermajority.info](https://supermajority.info/) वरून 26-Oct-2025 रोजी मिळवला होता. सहमती क्लायंटसाठी डेटा [Michael Sproul](https://github.com/sigp/blockprint) यांच्याकडून मिळवला होता. सहमती क्लायंट डेटा मिळवणे अधिक कठीण आहे कारण सहमती स्तरावरील क्लायंटमध्ये नेहमीच स्पष्ट ट्रेस नसतात ज्याचा वापर त्यांना ओळखण्यासाठी केला जाऊ शकतो. हा डेटा एका वर्गीकरण अल्गोरिदमचा वापर करून तयार केला गेला आहे जो कधीकधी काही अल्पसंख्य क्लायंटमध्ये गोंधळ घालतो (अधिक माहितीसाठी [येथे](https://twitter.com/sproulM_/status/1440512518242197516) पहा). वरील आकृतीत, या संदिग्ध वर्गीकरणांना एक/किंवा लेबल (उदा. Nimbus/Teku) ने दर्शविले आहे. तरीही, हे स्पष्ट आहे की नेटवर्कचा बहुतांश भाग Prysm चालवत आहे. केवळ स्नॅपशॉट असूनही, आकृतीमधील मूल्ये क्लायंट विविधतेच्या सद्यस्थितीची एक चांगली सामान्य कल्पना देतात. + +सहमती स्तरासाठी अद्ययावत क्लायंट विविधता डेटा आता [clientdiversity.org](https://clientdiversity.org/) वर उपलब्ध आहे. + +## अंमलबजावणी स्तर {#execution-layer} + +आतापर्यंत, क्लायंट विविधतेवरील संभाषण प्रामुख्याने सहमती स्तरावर केंद्रित होते. तथापि, अंमलबजावणी क्लायंट [Geth](https://geth.ethereum.org) सध्या सर्व नोड्सपैकी सुमारे 85% आहे. ही टक्केवारी सहमती क्लायंटसाठी असलेल्या त्याच कारणांसाठी समस्याप्रधान आहे. उदाहरणार्थ, Geth मधील एक बग जो व्यवहार हाताळणी किंवा अंमलबजावणी पेलोड्स तयार करण्यावर परिणाम करतो, तो सहमती क्लायंटना समस्याप्रधान किंवा बगयुक्त व्यवहार अंतिम करण्यास प्रवृत्त करू शकतो. म्हणून, अंमलबजावणी क्लायंटच्या अधिक समान वितरणासह Ethereum अधिक निरोगी होईल, आदर्शपणे कोणताही क्लायंट नेटवर्कच्या 33% पेक्षा जास्त प्रतिनिधित्व करणार नाही. + +## अल्पसंख्य क्लायंट वापरा {#use-minority-client} + +क्लायंट विविधतेचे निराकरण करण्यासाठी केवळ वैयक्तिक वापरकर्त्यांनी अल्पसंख्य क्लायंट निवडणे पुरेसे नाही - त्यासाठी व्हॅलिडेटर पूल आणि प्रमुख dapps आणि एक्सचेंज सारख्या संस्थांना देखील क्लायंट बदलण्याची आवश्यकता आहे. तथापि, सर्व वापरकर्ते सध्याचा असमतोल दूर करण्यात आणि सर्व उपलब्ध Ethereum सॉफ्टवेअरचा वापर सामान्य करण्यात आपली भूमिका बजावू शकतात. The Merge नंतर, सर्व नोड ऑपरेटर्सना एक अंमलबजावणी क्लायंट आणि एक सहमती क्लायंट चालवणे आवश्यक असेल. खाली सुचवलेल्या क्लायंटचे संयोजन निवडल्यास क्लायंट विविधता वाढण्यास मदत होईल. + +### एक्झिक्युशन क्लायंट {#execution-clients} + +- [Besu](https://www.hyperledger.org/use/besu) +- [Nethermind](https://downloads.nethermind.io/) +- [Erigon](https://github.com/ledgerwatch/erigon) +- [Go-Ethereum](https://geth.ethereum.org/) +- [Reth](https://reth.rs/) + +### कन्सेंसस क्लायंट {#consensus-clients} + +- [Nimbus](https://nimbus.team/) +- [Lighthouse](https://github.com/sigp/lighthouse) +- [Teku](https://consensys.io/teku) +- [Lodestar](https://github.com/ChainSafe/lodestar) +- [Prysm](https://prysm.offchainlabs.com/docs/) +- [Grandine](https://docs.grandine.io/) + +तांत्रिक वापरकर्ते अल्पसंख्य क्लायंटसाठी अधिक ट्युटोरियल्स आणि डॉक्युमेंटेशन लिहून आणि त्यांच्या नोड-ऑपरेटिंग सहकाऱ्यांना प्रबळ क्लायंटपासून दूर जाण्यासाठी प्रोत्साहित करून ही प्रक्रिया वेगवान करण्यास मदत करू शकतात. अल्पसंख्य सहमती क्लायंटवर स्विच करण्यासाठी मार्गदर्शक [clientdiversity.org](https://clientdiversity.org/) वर उपलब्ध आहेत. + +## क्लायंट विविधता डॅशबोर्ड {#client-diversity-dashboards} + +अनेक डॅशबोर्ड अंमलबजावणी आणि सहमती स्तरासाठी रिअल-टाइम क्लायंट विविधता आकडेवारी देतात. + +**सहमती स्तर:** + +- [Rated.network](https://www.rated.network/) +- [clientdiversity.org](https://clientdiversity.org/) + +**अंमलबजावणी स्तर:** + +- [supermajority.info](https://supermajority.info//) +- [Ethernodes](https://ethernodes.org/) + +## पुढील वाचन {#further-reading} + +- [Ethereum च्या सहमती स्तरावरील क्लायंट विविधता](https://mirror.xyz/jmcook.eth/S7ONEka_0RgtKTZ3-dakPmAHQNPvuj15nh0YGKPFriA) +- [Ethereum Merge: बहुसंख्य क्लायंट तुमच्या स्वतःच्या जोखमीवर चालवा!](https://dankradfeist.de/ethereum/2022/03/24/run-the-majority-client-at-your-own-peril.html) – _Dankrad Fiest, 24 मार्च 2022_ +- [क्लायंट विविधतेचे महत्त्व](https://our.status.im/the-importance-of-client-diversity/) +- [Ethereum नोड सेवांची सूची](https://ethereumnodes.com/) +- [क्लायंट विविधता समस्येचे \"पाच का\"](https://notes.ethereum.org/@afhGjrKfTKmksTOtqhB9RQ/BJGj7uh08) +- [Ethereum विविधता आणि ती कशी सोडवायची (YouTube)](https://www.youtube.com/watch?v=1hZgCaiqwfU) +- [clientdiversity.org](https://clientdiversity.org/) + +## संबंधित विषय {#related-topics} + +- [एक Ethereum नोड चालवा](/run-a-node/) +- [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/index.md new file mode 100644 index 00000000000..b9173b1e0c6 --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/index.md @@ -0,0 +1,319 @@ +--- +title: "नोड्स आणि क्लायंट" +description: "Ethereum नोड्स आणि क्लायंट सॉफ्टवेअरचा आढावा, तसेच नोड कसा सेट करायचा आणि तुम्ही ते का करावे." +lang: mr +sidebarDepth: 2 +--- + +Ethereum हे संगणकांचे (नोड्स म्हणून ओळखले जाणारे) एक वितरित नेटवर्क आहे जे सॉफ्टवेअर चालवते जे ब्लॉक्स आणि व्यवहाराच्या डेटाची पडताळणी करू शकते. तुमच्या संगणकाला Ethereum नोडमध्ये रूपांतरित करण्यासाठी हे सॉफ्टवेअर त्यावर चालवणे आवश्यक आहे. नोड तयार करण्यासाठी सॉफ्टवेअरचे दोन स्वतंत्र भाग ('क्लायंट' म्हणून ओळखले जाणारे) आवश्यक आहेत. + +## पूर्वतयारी {#prerequisites} + +Ethereum क्लायंटचे तुमचे स्वतःचे इन्स्टन्स चालवण्यापूर्वी आणि अधिक सखोल अभ्यास करण्यापूर्वी तुम्हाला पीअर-टू-पीअर नेटवर्कची संकल्पना आणि [EVM च्या मूलभूत गोष्टी](/developers/docs/evm/) समजल्या पाहिजेत. आमची [Ethereum ची ओळख](/developers/docs/intro-to-ethereum/) पहा. + +तुम्ही नोड्सच्या विषयासाठी नवीन असाल, तर आम्ही तुम्हाला शिफारस करतो की तुम्ही प्रथम [Ethereum नोड चालवण्यावर](/run-a-node) आमची वापरकर्ता-अनुकूल ओळख तपासा. + +## नोड्स आणि क्लायंट म्हणजे काय? {#what-are-nodes-and-clients} + +"नोड" हे Ethereum क्लायंट सॉफ्टवेअरचे कोणतेही उदाहरण आहे जे Ethereum सॉफ्टवेअर चालवणाऱ्या इतर संगणकांशी जोडलेले असते, ज्यामुळे एक नेटवर्क तयार होते. क्लायंट हे Ethereum चे एक अंमलबजावणी आहे जे प्रोटोकॉल नियमांनुसार डेटाची पडताळणी करते आणि नेटवर्क सुरक्षित ठेवते. एका नोडला दोन क्लायंट चालवावे लागतात: एक कन्सेंसस क्लायंट आणि एक एक्झिक्युशन क्लायंट. + +- एक्झिक्युशन क्लायंट (ज्याला एक्झिक्युशन इंजिन, EL क्लायंट किंवा पूर्वीचे Eth1 क्लायंट म्हणूनही ओळखले जाते) नेटवर्कमध्ये प्रसारित होणाऱ्या नवीन व्यवहारांवर लक्ष ठेवतो, त्यांना EVM मध्ये कार्यान्वित करतो आणि सर्व सद्य Ethereum डेटाची नवीनतम स्थिती आणि डेटाबेस ठेवतो. +- कन्सेंसस क्लायंट (ज्याला बीकन नोड, CL क्लायंट किंवा पूर्वीचा Eth2 क्लायंट असेही म्हणतात) प्रूफ-ऑफ-स्टेक कन्सेंसस अल्गोरिदमची अंमलबजावणी करतो, ज्यामुळे नेटवर्कला एक्झिक्युशन क्लायंटकडून प्रमाणित केलेल्या डेटाच्या आधारे एकमत साधता येते. एक तिसरे सॉफ्टवेअर देखील आहे, ज्याला 'व्हॅलिडेटर' म्हणून ओळखले जाते, जे कन्सेंसस क्लायंटमध्ये जोडले जाऊ शकते, ज्यामुळे नोडला नेटवर्क सुरक्षित करण्यात सहभागी होता येते. + +हे क्लायंट एकत्र काम करून Ethereum चेनच्या हेडचा मागोवा ठेवतात आणि वापरकर्त्यांना Ethereum नेटवर्कशी संवाद साधण्याची परवानगी देतात. एकत्र काम करणाऱ्या सॉफ्टवेअरच्या अनेक भागांच्या या मॉड्युलर डिझाइनला [एनकॅप्स्युलेटेड कॉम्प्लेक्सिटी](https://vitalik.eth.limo/general/2022/02/28/complexity.html) म्हटले जाते. या दृष्टिकोनामुळे [द मर्ज](/roadmap/merge) अखंडपणे कार्यान्वित करणे सोपे झाले, क्लायंट सॉफ्टवेअरची देखभाल आणि विकास सोपा होतो आणि वैयक्तिक क्लायंटचा पुनर्वापर सक्षम होतो, उदाहरणार्थ, [लेयर 2 इकोसिस्टममध्ये](/layer-2/). + +![जोडलेले एक्झिक्युशन आणि कन्सेंसस क्लायंट](./eth1eth2client.png) +जोडलेल्या एक्झिक्युशन आणि कन्सेंसस क्लायंटची सरलीकृत आकृती. + +### क्लायंट विविधता {#client-diversity} + +[एक्झिक्युशन क्लायंट](/developers/docs/nodes-and-clients/#execution-clients) आणि [कन्सेंसस क्लायंट](/developers/docs/nodes-and-clients/#consensus-clients) दोन्ही वेगवेगळ्या संघांनी विकसित केलेल्या विविध प्रोग्रामिंग भाषांमध्ये अस्तित्वात आहेत. + +एकाधिक क्लायंट अंमलबजावणीमुळे नेटवर्क एकाच कोडबेसवरील अवलंबित्व कमी करून अधिक मजबूत होऊ शकते. आदर्श ध्येय हे आहे की कोणताही एक क्लायंट नेटवर्कवर वर्चस्व गाजवणार नाही अशी विविधता प्राप्त करणे, ज्यामुळे अपयशाचा संभाव्य एकच बिंदू नाहीसा होईल. +भाषांमधील विविधता एका व्यापक विकासक समुदायाला आमंत्रित करते आणि त्यांना त्यांच्या पसंतीच्या भाषेत एकत्रीकरण तयार करण्याची परवानगी देते. + +[क्लायंट विविधतेबद्दल](/developers/docs/nodes-and-clients/client-diversity/) अधिक जाणून घ्या. + +या सर्व अंमलबजावणींमध्ये एक गोष्ट समान आहे की त्या सर्व एकाच विनिर्देशाचे पालन करतात. Ethereum नेटवर्क आणि ब्लॉकचेन कसे कार्य करतात हे विनिर्देश ठरवतात. प्रत्येक तांत्रिक तपशील परिभाषित केलेला आहे आणि विनिर्देश खालीलप्रमाणे आढळू शकतात: + +- मूळतः, [Ethereum यलो पेपर](https://ethereum.github.io/yellowpaper/paper.pdf) +- [एक्झिक्युशन स्पेसिफिकेशन्स](https://github.com/ethereum/execution-specs/) +- [कन्सेंसस स्पेसिफिकेशन्स](https://github.com/ethereum/consensus-specs) +- [EIPs](https://eips.ethereum.org/) विविध [नेटवर्क अपग्रेड्स](/ethereum-forks/) मध्ये लागू + +### नेटवर्कमधील नोड्सचा मागोवा घेणे {#network-overview} + +अनेक ट्रॅकर्स Ethereum नेटवर्कमधील नोड्सचा रिअल-टाइम आढावा देतात. लक्षात घ्या की विकेंद्रित नेटवर्कच्या स्वरूपामुळे, हे क्रॉलर्स नेटवर्कचे केवळ मर्यादित दृश्य प्रदान करू शकतात आणि भिन्न परिणाम नोंदवू शकतात. + +- Etherscan द्वारे [नोड्सचा नकाशा](https://etherscan.io/nodetracker) +- Bitfly द्वारे [Ethernodes](https://ethernodes.org/) +- Chainsafe द्वारे [Nodewatch](https://www.nodewatch.io/), कन्सेंसस नोड्स क्रॉल करत आहे +- [Monitoreth](https://monitoreth.io/) - MigaLabs द्वारे, एक वितरित नेटवर्क मॉनिटरिंग साधन +- [साप्ताहिक नेटवर्क आरोग्य अहवाल](https://probelab.io) - ProbeLab द्वारे, [Nebula crawler](https://github.com/dennis-tra/nebula) आणि इतर साधनांचा वापर करून + +## नोडचे प्रकार {#node-types} + +तुम्हाला [तुमचा स्वतःचा नोड चालवायचा असेल](/developers/docs/nodes-and-clients/run-a-node/), तर तुम्हाला हे समजले पाहिजे की नोडचे विविध प्रकार आहेत जे डेटा वेगळ्या प्रकारे वापरतात. खरं तर, क्लायंट तीन वेगवेगळ्या प्रकारचे नोड चालवू शकतात: लाइट, फुल आणि आर्काइव्ह. वेगवेगळ्या सिंक धोरणांचे पर्याय देखील आहेत जे जलद सिंक्रोनाइझेशन वेळ सक्षम करतात. सिंक्रोनाइझेशन म्हणजे Ethereum च्या स्थितीबद्दल सर्वात अद्ययावत माहिती किती लवकर मिळवता येते. + +### फुल नोड {#full-node} + +फुल नोड्स ब्लॉकचेनची ब्लॉक-दर-ब्लॉक पडताळणी करतात, ज्यात प्रत्येक ब्लॉकसाठी ब्लॉक बॉडी आणि स्टेट डेटा डाउनलोड करणे आणि सत्यापित करणे समाविष्ट आहे. फुल नोडचे वेगवेगळे वर्ग आहेत - काही जेनेसिस ब्लॉकपासून सुरुवात करतात आणि ब्लॉकचेनच्या संपूर्ण इतिहासातील प्रत्येक ब्लॉकची पडताळणी करतात. इतर त्यांची पडताळणी अधिक अलीकडील ब्लॉकपासून सुरू करतात ज्यावर ते वैध असल्याचा विश्वास ठेवतात (उदा., Geth चे 'स्नॅप सिंक'). पडताळणी कोठून सुरू होते याची पर्वा न करता, फुल नोड्स फक्त तुलनेने अलीकडील डेटाची स्थानिक प्रत ठेवतात (साधारणपणे सर्वात अलीकडील 128 ब्लॉक्स), ज्यामुळे डिस्कची जागा वाचवण्यासाठी जुना डेटा हटवता येतो. आवश्यकतेनुसार जुना डेटा पुन्हा तयार केला जाऊ शकतो. + +- संपूर्ण ब्लॉकचेन डेटा संग्रहित करतो (जरी हा डेटा वेळोवेळी छाटला जातो, त्यामुळे फुल नोड जेनेसिसपासूनचा सर्व स्टेट डेटा संग्रहित करत नाही) +- ब्लॉक पडताळणीत भाग घेतो, सर्व ब्लॉक्स आणि स्टेट्सची पडताळणी करतो. +- सर्व स्टेट्स एकतर स्थानिक स्टोरेजमधून मिळवता येतात किंवा फुल नोडद्वारे 'स्नॅपशॉट्स'मधून पुन्हा तयार करता येतात. +- नेटवर्कला सेवा देतो आणि विनंतीनुसार डेटा प्रदान करतो. + +### आर्काइव्ह नोड {#archive-node} + +आर्काइव्ह नोड्स हे फुल नोड्स आहेत जे जेनेसिसपासून प्रत्येक ब्लॉकची पडताळणी करतात आणि डाउनलोड केलेला कोणताही डेटा कधीही हटवत नाहीत. + +- फुल नोडमध्ये ठेवलेल्या सर्व गोष्टी संग्रहित करतो आणि ऐतिहासिक स्टेट्सचे आर्काइव्ह तयार करतो. जर तुम्हाला ब्लॉक #4,000,000 वरील खात्यातील शिल्लक यासारख्या गोष्टींची चौकशी करायची असेल किंवा ट्रेसिंग वापरून तुमच्या स्वतःच्या व्यवहारांच्या सेटची पडताळणी न करता फक्त आणि विश्वसनीयरित्या चाचणी करायची असेल तर याची आवश्यकता आहे. +- हा डेटा टेराबाइट्सच्या युनिट्समध्ये असतो, ज्यामुळे आर्काइव्ह नोड्स सामान्य वापरकर्त्यांसाठी कमी आकर्षक ठरतात, परंतु ब्लॉक एक्सप्लोरर्स, वॉलेट विक्रेते आणि चेन अॅनालिटिक्स यांसारख्या सेवांसाठी ते उपयुक्त ठरू शकतात. + +आर्काइव्ह व्यतिरिक्त इतर कोणत्याही मोडमध्ये क्लायंट सिंक केल्याने ब्लॉकचेन डेटा छाटला जाईल. याचा अर्थ, सर्व ऐतिहासिक स्टेट्सचे कोणतेही आर्काइव्ह नसते, परंतु फुल नोड गरजेनुसार ते तयार करू शकतो. + +[आर्काइव्ह नोड्सबद्दल](/developers/docs/nodes-and-clients/archive-nodes) अधिक जाणून घ्या. + +### लाइट नोड {#light-node} + +प्रत्येक ब्लॉक डाउनलोड करण्याऐवजी, लाइट नोड्स फक्त ब्लॉक हेडर्स डाउनलोड करतात. या हेडर्समध्ये ब्लॉक्सच्या सामग्रीबद्दल सारांश माहिती असते. लाइट नोडला आवश्यक असलेली इतर कोणतीही माहिती फुल नोडकडून मागवली जाते. लाइट नोड त्यानंतर ब्लॉक हेडर्समधील स्टेट रूट्सच्या आधारावर त्यांना मिळालेल्या डेटाची स्वतंत्रपणे पडताळणी करू शकतो. लाइट नोड्स वापरकर्त्यांना फुल नोड्स चालवण्यासाठी आवश्यक असलेल्या शक्तिशाली हार्डवेअर किंवा उच्च बँडविड्थशिवाय Ethereum नेटवर्कमध्ये सहभागी होण्यास सक्षम करतात. अखेरीस, लाइट नोड्स मोबाईल फोन किंवा एम्बेडेड उपकरणांवर चालवता येतील. लाइट नोड्स कन्सेंससमध्ये सहभागी होत नाहीत (म्हणजे, ते व्हॅलिडेटर असू शकत नाहीत), परंतु ते फुल नोड प्रमाणेच समान कार्यक्षमता आणि सुरक्षा हमीसह Ethereum ब्लॉकचेनमध्ये प्रवेश करू शकतात. + +लाइट क्लायंट हे Ethereum साठी सक्रिय विकासाचे क्षेत्र आहे आणि आम्ही लवकरच कन्सेंसस लेयर आणि एक्झिक्युशन लेयरसाठी नवीन लाइट क्लायंट पाहण्याची अपेक्षा करतो. +[गॉसिप नेटवर्क](https://www.ethportal.net/) वरून लाइट क्लायंट डेटा प्रदान करण्याचे संभाव्य मार्ग देखील आहेत. हे फायदेशीर आहे कारण गॉसिप नेटवर्क विनंत्या पूर्ण करण्यासाठी फुल नोड्सची आवश्यकता न ठेवता लाइट नोड्सच्या नेटवर्कला समर्थन देऊ शकते. + +Ethereum अद्याप मोठ्या संख्येने लाइट नोड्सना समर्थन देत नाही, परंतु लाइट नोड समर्थन हे एक क्षेत्र आहे जे नजीकच्या भविष्यात वेगाने विकसित होण्याची अपेक्षा आहे. विशेषतः, [Nimbus](https://nimbus.team/), [Helios](https://github.com/a16z/helios), आणि [LodeStar](https://lodestar.chainsafe.io/) सारखे क्लायंट सध्या लाइट नोड्सवर जास्त लक्ष केंद्रित करत आहेत. + +## मी Ethereum नोड का चालवावा? {#why-should-i-run-an-ethereum-node} + +नोड चालवण्यामुळे तुम्हाला Ethereum थेट, विश्वासहीनपणे आणि खाजगीरित्या वापरता येतो, तसेच नेटवर्कला अधिक मजबूत आणि विकेंद्रित ठेवून त्याला समर्थन देता येते. + +### तुमच्यासाठी फायदे {#benefits-to-you} + +तुमचा स्वतःचा नोड चालवल्याने तुम्हाला Ethereum खाजगी, स्वयंपूर्ण आणि विश्वासहीन पद्धतीने वापरता येते. तुम्हाला नेटवर्कवर विश्वास ठेवण्याची गरज नाही कारण तुम्ही तुमच्या क्लायंटद्वारे डेटा स्वतःच सत्यापित करू शकता. "विश्वास ठेवू नका, पडताळणी करा" हा एक लोकप्रिय ब्लॉकचेन मंत्र आहे. + +- तुमचा नोड सर्व व्यवहार आणि ब्लॉक्सची पडताळणी कन्सेंसस नियमांनुसार स्वतःच करतो. याचा अर्थ असा की तुम्हाला नेटवर्कमधील इतर कोणत्याही नोडवर अवलंबून राहण्याची किंवा त्यांच्यावर पूर्णपणे विश्वास ठेवण्याची आवश्यकता नाही. +- तुम्ही तुमच्या स्वतःच्या नोडसह Ethereum वॉलेट वापरू शकता. तुम्ही dapps अधिक सुरक्षितपणे आणि खाजगीरित्या वापरू शकता कारण तुम्हाला तुमचे पत्ते आणि शिल्लक मध्यस्थांना लीक करण्याची आवश्यकता नाही. सर्व काही तुमच्या स्वतःच्या क्लायंटने तपासले जाऊ शकते. [MetaMask](https://metamask.io), [Frame](https://frame.sh/), आणि [इतर अनेक वॉलेट्स](/wallets/find-wallet/) RPC-इम्पोर्टिंगची सुविधा देतात, ज्यामुळे त्यांना तुमचा नोड वापरता येतो. +- तुम्ही Ethereum मधील डेटावर अवलंबून असलेल्या इतर सेवा चालवू आणि स्वयं-होस्ट करू शकता. उदाहरणार्थ, हे बीकन चेन व्हॅलिडेटर, लेयर 2 सारखे सॉफ्टवेअर, पायाभूत सुविधा, ब्लॉक एक्सप्लोरर, पेमेंट प्रोसेसर इत्यादी असू शकते. +- तुम्ही तुमचे स्वतःचे सानुकूल [RPC एंडपॉइंट](/developers/docs/apis/json-rpc/) प्रदान करू शकता. तुम्ही मोठ्या केंद्रीकृत प्रदात्यांना टाळण्यास मदत करण्यासाठी समुदायाला हे एंडपॉइंट्स सार्वजनिकरित्या देऊ शकता. +- तुम्ही **इंटर-प्रोसेस कम्युनिकेशन्स (IPC)** वापरून तुमच्या नोडशी कनेक्ट होऊ शकता किंवा तुमचा प्रोग्राम प्लगइन म्हणून लोड करण्यासाठी नोड पुन्हा लिहू शकता. हे कमी विलंबता प्रदान करते, जे वेब3 लायब्ररी वापरून बरेच डेटा प्रक्रिया करताना किंवा जेव्हा आपल्याला शक्य तितक्या लवकर आपले व्यवहार पुनर्स्थित करण्याची आवश्यकता असते (उदा. फ्रंटरनिंग) तेव्हा खूप मदत करते. +- तुम्ही नेटवर्क सुरक्षित करण्यासाठी आणि बक्षिसे मिळवण्यासाठी थेट ETH स्टेक करू शकता. प्रारंभ करण्यासाठी [सोलो स्टेकिंग](/staking/solo/) पहा. + +![तुमच्या ॲप्लिकेशन आणि नोड्सद्वारे तुम्ही Ethereum मध्ये कसे प्रवेश करता](./nodes.png) + +### नेटवर्क फायदे {#network-benefits} + +Ethereum च्या आरोग्यासाठी, सुरक्षेसाठी आणि कार्यान्वयन लवचिकतेसाठी नोड्सचा एक वैविध्यपूर्ण संच महत्त्वाचा आहे. + +- फुल नोड्स कन्सेंसस नियमांची अंमलबजावणी करतात जेणेकरून त्यांना नियमांचे पालन न करणाऱ्या ब्लॉक्सना स्वीकारण्यासाठी फसवता येणार नाही. हे नेटवर्कमध्ये अतिरिक्त सुरक्षा प्रदान करते कारण जर सर्व नोड्स लाइट नोड्स असते, जे पूर्ण पडताळणी करत नाहीत, तर व्हॅलिडेटर्स नेटवर्कवर हल्ला करू शकले असते. +- [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/#what-is-pos) च्या क्रिप्टो-इकॉनॉमिक संरक्षणावर मात करणाऱ्या हल्ल्याच्या बाबतीत, प्रामाणिक चेनचे अनुसरण करणे निवडून फुल नोड्सद्वारे सामाजिक पुनर्प्राप्ती केली जाऊ शकते. +- नेटवर्कमधील अधिक नोड्समुळे अधिक वैविध्यपूर्ण आणि मजबूत नेटवर्क तयार होते, जे विकेंद्रीकरणाचे अंतिम ध्येय आहे, जे सेन्सॉरशिप-प्रतिरोधक आणि विश्वासार्ह प्रणाली सक्षम करते. +- फुल नोड्स त्यांच्यावर अवलंबून असलेल्या हलक्या क्लायंटसाठी ब्लॉकचेन डेटामध्ये प्रवेश प्रदान करतात. लाइट नोड्स संपूर्ण ब्लॉकचेन संग्रहित करत नाहीत, त्याऐवजी ते [ब्लॉक हेडर्समधील स्टेट रूट्स](/developers/docs/blocks/#block-anatomy) द्वारे डेटाची पडताळणी करतात. त्यांना आवश्यक असल्यास ते फुल नोड्सकडून अधिक माहितीची विनंती करू शकतात. + +तुम्ही व्हॅलिडेटर चालवत नसला तरीही, तुम्ही फुल नोड चालवल्यास संपूर्ण Ethereum नेटवर्कला त्याचा फायदा होतो. + +## तुमचा स्वतःचा नोड चालवणे {#running-your-own-node} + +तुमचा स्वतःचा Ethereum क्लायंट चालविण्यात स्वारस्य आहे का? + +नवशिक्यांसाठी सोप्या परिचयासाठी, अधिक जाणून घेण्यासाठी आमच्या [नोड चालवा](/run-a-node) पृष्ठास भेट द्या. + +तुम्ही अधिक तांत्रिक वापरकर्ते असल्यास, [तुमचा स्वतःचा नोड कसा सुरू करायचा](/developers/docs/nodes-and-clients/run-a-node/) याबद्दल अधिक तपशील आणि पर्यायांमध्ये सखोल जा. + +## पर्याय {#alternatives} + +तुमचा स्वतःचा नोड सेट करण्यासाठी तुम्हाला वेळ आणि संसाधने लागू शकतात परंतु तुम्हाला नेहमीच तुमचे स्वतःचे उदाहरण चालवण्याची गरज नसते. या प्रकरणात, आपण तृतीय-पक्ष API प्रदाता वापरू शकता. या सेवा वापरण्याच्या विहंगावलोकनासाठी, [सेवा म्हणून नोड्स](/developers/docs/nodes-and-clients/nodes-as-a-service/) पहा. + +जर कोणी तुमच्या समुदायात सार्वजनिक API सह Ethereum नोड चालवत असेल, तर तुम्ही तुमच्या वॉलेट्सना कस्टम RPC द्वारे समुदाय नोडकडे निर्देशित करू शकता आणि काही यादृच्छिक विश्वासू तृतीय पक्षापेक्षा अधिक गोपनीयता मिळवू शकता. + +दुसरीकडे, जर तुम्ही क्लायंट चालवत असाल, तर तुम्ही तो तुमच्या मित्रांना शेअर करू शकता ज्यांना त्याची गरज असेल. + +## एक्झिक्युशन क्लायंट {#execution-clients} + +Ethereum समुदाय एकाधिक ओपन-सोर्स एक्झिक्युशन क्लायंट्स (पूर्वी 'Eth1 क्लायंट्स' किंवा फक्त 'Ethereum क्लायंट्स' म्हणून ओळखले जाणारे) सांभाळतो, जे वेगवेगळ्या टीम्सनी वेगवेगळ्या प्रोग्रामिंग भाषा वापरून विकसित केले आहेत. हे नेटवर्कला अधिक मजबूत आणि अधिक [विविध](/developers/docs/nodes-and-clients/client-diversity/) बनवते. आदर्श ध्येय हे आहे की अपयशाचा कोणताही एकच बिंदू कमी करण्यासाठी कोणताही क्लायंट वर्चस्व गाजवणार नाही अशी विविधता प्राप्त करणे. + +हा तक्ता वेगवेगळ्या क्लायंटचा सारांश देतो. ते सर्व [क्लायंट चाचण्या](https://github.com/ethereum/tests) पास करतात आणि नेटवर्क अपग्रेडसह अद्ययावत राहण्यासाठी सक्रियपणे देखरेख केली जाते. + +| क्लायंट | भाषा | ऑपरेटिंग सिस्टीम | नेटवर्क | सिंक स्ट्रॅटेजीज | स्टेट प्रूनिंग | +| ------------------------------------------------------------------------------------------- | ------------------------ | --------------------- | ---------------------- | ------------------------------------------------------------------------------ | ------------------ | +| [Geth](https://geth.ethereum.org/) | Go | Linux, Windows, macOS | मेननेट, सेपोलिया, हूडी | [स्नॅप](#snap-sync), [फुल](#full-sync) | आर्काइव्ह, प्रुन्ड | +| [Nethermind](https://www.nethermind.io/) | C#, .NET | Linux, Windows, macOS | मेननेट, सेपोलिया, हूडी | [स्नॅप](#snap-sync) (सेवा न देता), फास्ट, [फुल](#full-sync) | आर्काइव्ह, प्रुन्ड | +| [Besu](https://besu.hyperledger.org/en/stable/) | Java | Linux, Windows, macOS | मेननेट, सेपोलिया, हूडी | [स्नॅप](#snap-sync), [फास्ट](#fast-sync), [फुल](#full-sync) | आर्काइव्ह, प्रुन्ड | +| [Erigon](https://github.com/ledgerwatch/erigon) | Go | Linux, Windows, macOS | मेननेट, सेपोलिया, हूडी | [फुल](#full-sync) | आर्काइव्ह, प्रुन्ड | +| [Reth](https://reth.rs/) | Rust | Linux, Windows, macOS | मेननेट, सेपोलिया, हूडी | [फुल](#full-sync) | आर्काइव्ह, प्रुन्ड | +| [EthereumJS](https://github.com/ethereumjs/ethereumjs-monorepo) _(बीटा)_ | TypeScript | Linux, Windows, macOS | सेपोलिया, हूडी | [फुल](#full-sync) | प्रुन्ड | + +समर्थित नेटवर्कवर अधिक माहितीसाठी, [Ethereum नेटवर्क्स](/developers/docs/networks/) वर वाचा. + +प्रत्येक क्लायंटचे स्वतःचे अनन्य उपयोग आणि फायदे आहेत, त्यामुळे तुम्ही तुमच्या स्वतःच्या आवडीनुसार एक निवडले पाहिजे. विविधता अंमलबजावणींना वेगवेगळ्या वैशिष्ट्यांवर आणि वापरकर्त्यांच्या प्रेक्षकांवर लक्ष केंद्रित करण्यास अनुमती देते. तुम्ही वैशिष्ट्ये, समर्थन, प्रोग्रामिंग भाषा किंवा परवान्यांवर आधारित क्लायंट निवडू शकता. + +### Besu {#besu} + +हायपरलेजर Besu हा सार्वजनिक आणि परवानगी असलेल्या नेटवर्क्ससाठी एक एंटरप्राइज-ग्रेड Ethereum क्लायंट आहे. हे ट्रेसिंगपासून GraphQL पर्यंत सर्व Ethereum मेननेट वैशिष्ट्ये चालवते, त्यात विस्तृत देखरेख आहे आणि ConsenSys द्वारे, मुक्त समुदाय चॅनेलमध्ये आणि एंटरप्राइझसाठी व्यावसायिक SLA द्वारे समर्थित आहे. हे Java मध्ये लिहिलेले आहे आणि Apache 2.0 परवानाकृत आहे. + +Besu चे विस्तृत [दस्तऐवजीकरण](https://besu.hyperledger.org/en/stable/) तुम्हाला त्याच्या वैशिष्ट्यांबद्दल आणि सेटअपबद्दल सर्व तपशीलांमध्ये मार्गदर्शन करेल. + +### Erigon {#erigon} + +Erigon, पूर्वी Turbo-Geth म्हणून ओळखले जात असे, Go Ethereum च्या फोर्क म्हणून सुरू झाले जे गती आणि डिस्क-स्पेस कार्यक्षमतेवर केंद्रित होते. Erigon हे Ethereum चे पूर्णपणे पुनर्रचित केलेले अंमलबजावणी आहे, जे सध्या Go मध्ये लिहिलेले आहे परंतु इतर भाषांमध्ये अंमलबजावणी विकासाधीन आहे. Erigon चे ध्येय Ethereum ची जलद, अधिक मॉड्युलर आणि अधिक ऑप्टिमाइझ केलेली अंमलबजावणी प्रदान करणे आहे. हे सुमारे 2TB डिस्क स्पेस वापरून 3 दिवसांपेक्षा कमी वेळेत पूर्ण आर्काइव्ह नोड सिंक करू शकते. + +### Go Ethereum {#geth} + +Go Ethereum (थोडक्यात Geth) हे Ethereum प्रोटोकॉलच्या मूळ अंमलबजावणींपैकी एक आहे. सध्या, हे सर्वात व्यापक क्लायंट आहे ज्यात वापरकर्ते आणि विकासकांसाठी सर्वात मोठा वापरकर्ता आधार आणि विविध प्रकारची साधने आहेत. हे Go मध्ये लिहिलेले आहे, पूर्णपणे ओपन सोर्स आहे आणि GNU LGPL v3 अंतर्गत परवानाकृत आहे. + +Geth बद्दल त्याच्या [दस्तऐवजीकरण](https://geth.ethereum.org/docs/) मध्ये अधिक जाणून घ्या. + +### Nethermind {#nethermind} + +Nethermind हे C# .NET टेक स्टॅकसह तयार केलेले Ethereum अंमलबजावणी आहे, जे LGPL-3.0 सह परवानाकृत आहे, ARM सह सर्व प्रमुख प्लॅटफॉर्मवर चालते. हे यासह उत्कृष्ट कार्यप्रदर्शन देते: + +- एक ऑप्टिमाइझ केलेले व्हर्च्युअल मशीन +- स्टेट ऍक्सेस +- नेटवर्किंग आणि Prometheus/Grafana डॅशबोर्ड, seq एंटरप्राइझ लॉगिंग समर्थन, JSON-RPC ट्रेसिंग, आणि विश्लेषण प्लगइन यांसारख्या समृद्ध वैशिष्ट्ये. + +Nethermind कडे [तपशीलवार दस्तऐवजीकरण](https://docs.nethermind.io), मजबूत डेव्हलपर समर्थन, एक ऑनलाइन समुदाय आणि प्रीमियम वापरकर्त्यांसाठी 24/7 समर्थन देखील उपलब्ध आहे. + +### Reth {#reth} + +Reth (Rust Ethereum चे संक्षिप्त रूप) हे एक Ethereum फुल नोड अंमलबजावणी आहे जे वापरकर्ता-अनुकूल, अत्यंत मॉड्युलर, जलद आणि कार्यक्षम असण्यावर लक्ष केंद्रित करते. Reth मूळतः Paradigm द्वारे तयार केले गेले आणि पुढे नेले गेले आणि ते Apache आणि MIT परवान्यांतर्गत परवानाकृत आहे. + +Reth उत्पादनासाठी तयार आहे आणि स्टेकिंग किंवा उच्च-अपटाइम सेवांसारख्या मिशन-क्रिटिकल वातावरणात वापरासाठी योग्य आहे. RPC, MEV, इंडेक्सिंग, सिम्युलेशन आणि P2P क्रियाकलाप यांसारख्या उच्च कार्यक्षमतेची आवश्यकता असलेल्या वापराच्या प्रकरणांमध्ये चांगला परफाॅरमन्स देते. + +[Reth बुक](https://reth.rs/) किंवा [Reth GitHub repo](https://github.com/paradigmxyz/reth?tab=readme-ov-file#reth) तपासून अधिक जाणून घ्या. + +### विकासात {#execution-in-development} + +हे क्लायंट अजूनही विकासाच्या सुरुवातीच्या टप्प्यात आहेत आणि अद्याप उत्पादन वापरासाठी शिफारस केलेले नाहीत. + +#### EthereumJS {#ethereumjs} + +EthereumJS एक्झिक्युशन क्लायंट (EthereumJS) TypeScript मध्ये लिहिलेला आहे आणि अनेक पॅकेजेसनी बनलेला आहे, ज्यात ब्लॉक, व्यवहार आणि मर्क्ल-पॅट्रिशिया ट्री क्लासेसद्वारे दर्शविलेले मूळ Ethereum आदिम आणि Ethereum व्हर्च्युअल मशीन (EVM) चे अंमलबजावणी, एक ब्लॉकचेन क्लास आणि DevP2P नेटवर्किंग स्टॅकसह मूळ क्लायंट घटक समाविष्ट आहेत. + +त्याच्या [दस्तऐवजीकरण](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master) वाचून त्याबद्दल अधिक जाणून घ्या + +## कन्सेंसस क्लायंट {#consensus-clients} + +[कन्सेंसस अपग्रेड](/roadmap/beacon-chain/) ला समर्थन देण्यासाठी एकाधिक कन्सेंसस क्लायंट (पूर्वी 'Eth2' क्लायंट म्हणून ओळखले जाणारे) आहेत. ते फोर्क-चॉइस अल्गोरिदम, प्रमाणीकरणांवर प्रक्रिया करणे आणि [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) पुरस्कार आणि दंड व्यवस्थापित करण्यासह सर्व कन्सेंसस-संबंधित तर्कासाठी जबाबदार आहेत. + +| क्लायंट | भाषा | ऑपरेटिंग सिस्टीम | नेटवर्क | +| ------------------------------------------------------------- | ---------- | --------------------- | --------------------------------------------------------- | +| [Lighthouse](https://lighthouse.sigmaprime.io/) | Rust | Linux, Windows, macOS | बीकन चेन, हूडी, पिरमाँट, सेपोलिया, आणि बरेच काही | +| [Lodestar](https://lodestar.chainsafe.io/) | TypeScript | Linux, Windows, macOS | बीकन चेन, हूडी, सेपोलिया, आणि बरेच काही | +| [Nimbus](https://nimbus.team/) | Nim | Linux, Windows, macOS | बीकन चेन, हूडी, सेपोलिया, आणि बरेच काही | +| [Prysm](https://prysm.offchainlabs.com/docs/) | Go | Linux, Windows, macOS | बीकन चेन, ग्नोसिस, हूडी, पिरमाँट, सेपोलिया, आणि बरेच काही | +| [Teku](https://consensys.net/knowledge-base/ethereum-2/teku/) | Java | Linux, Windows, macOS | बीकन चेन, ग्नोसिस, हूडी, सेपोलिया, आणि बरेच काही | +| [Grandine](https://docs.grandine.io/) | Rust | Linux, Windows, macOS | बीकन चेन, हूडी, सेपोलिया, आणि बरेच काही | + +### Lighthouse {#lighthouse} + +Lighthouse हे Rust मध्ये Apache-2.0 परवान्याअंतर्गत लिहिलेले एक कन्सेंसस क्लायंट अंमलबजावणी आहे. हे सिग्मा प्राइम द्वारे सांभाळले जाते आणि बीकन चेन जेनेसिसपासून स्थिर आणि उत्पादनासाठी तयार आहे. विविध उपक्रम, स्टेकिंग पूल आणि व्यक्ती त्यावर अवलंबून आहेत. हे डेस्कटॉप पीसीपासून ते अत्याधुनिक स्वयंचलित उपयोजनांपर्यंतच्या विस्तृत वातावरणात सुरक्षित, कार्यक्षम आणि आंतर-कार्यक्षम असण्याचे उद्दिष्ट ठेवते. + +दस्तऐवजीकरण [लाइटहाऊस बुक](https://lighthouse-book.sigmaprime.io/) मध्ये आढळू शकते + +### Lodestar {#lodestar} + +लोडस्टार हे Typescript मध्ये LGPL-3.0 परवान्याअंतर्गत लिहिलेले एक उत्पादन-तयार कन्सेंसस क्लायंट अंमलबजावणी आहे. हे चेनसेफ सिस्टीम्सद्वारे सांभाळले जाते आणि सोलो-स्टेकर्स, डेव्हलपर्स आणि संशोधकांसाठी कन्सेंसस क्लायंटमधील सर्वात नवीन आहे. लोडस्टारमध्ये बीकन नोड आणि व्हॅलिडेटर क्लायंटचा समावेश आहे जे Ethereum प्रोटोकॉलच्या JavaScript अंमलबजावणीद्वारे समर्थित आहेत. लोडस्टारचे उद्दिष्ट लाइट क्लायंटसह Ethereum उपयोगिता सुधारणे, विकसकांच्या मोठ्या गटासाठी सुलभता वाढवणे आणि इकोसिस्टम विविधतेमध्ये अधिक योगदान देणे हे आहे. + +अधिक माहिती [लोडस्टार वेबसाइट](https://lodestar.chainsafe.io/) वर आढळू शकते + +### Nimbus {#nimbus} + +निंबस हे निममध्ये Apache-2.0 परवान्याअंतर्गत लिहिलेले एक कन्सेंसस क्लायंट अंमलबजावणी आहे. हा एक उत्पादन-तयार क्लायंट आहे जो सोलो-स्टेकर्स आणि स्टेकिंग पूलद्वारे वापरला जातो. निंबस संसाधनांच्या कार्यक्षमतेसाठी डिझाइन केलेले आहे, ज्यामुळे ते संसाधन-प्रतिबंधित उपकरणांवर आणि एंटरप्राइझ इन्फ्रास्ट्रक्चरवर समान सहजतेने चालवणे सोपे होते, स्थिरता किंवा बक्षीस कार्यक्षमतेशी तडजोड न करता. हलक्या संसाधनांच्या पदचिन्हाचा अर्थ असा आहे की नेटवर्क तणावाखाली असताना क्लायंटला सुरक्षिततेचा अधिक मार्जिन असतो. + +[निंबस डॉक्स](https://nimbus.guide/) मध्ये अधिक जाणून घ्या + +### Prysm {#prysm} + +Prysm हे GPL-3.0 परवान्याअंतर्गत Go मध्ये लिहिलेले एक पूर्ण-वैशिष्ट्यीकृत, ओपन सोर्स कन्सेंसस क्लायंट आहे. यात एक पर्यायी वेबॲप UI आहे आणि घरातून स्टेक करणाऱ्या आणि संस्थात्मक वापरकर्त्यांसाठी वापरकर्ता अनुभव, दस्तऐवजीकरण आणि कॉन्फिगरिबिलिटीला प्राधान्य देते. + +अधिक जाणून घेण्यासाठी [Prysm डॉक्स](https://prysm.offchainlabs.com/docs/) ला भेट द्या. + +### Teku {#teku} + +Teku हे मूळ बीकन चेन जेनेसिस क्लायंटपैकी एक आहे. नेहमीच्या उद्दिष्टांसोबतच (सुरक्षा, मजबुती, स्थिरता, उपयोगिता, कार्यक्षमता), Teku विशेषतः सर्व विविध कन्सेंसस क्लायंट मानकांचे पूर्णपणे पालन करण्याचे उद्दिष्ट ठेवते. + +Teku खूप लवचिक उपयोजन पर्याय देते. बीकन नोड आणि व्हॅलिडेटर क्लायंट एकत्र एकाच प्रक्रियेत चालवले जाऊ शकतात, जे सोलो स्टेकर्ससाठी अत्यंत सोयीचे आहे, किंवा अत्याधुनिक स्टेकिंग ऑपरेशन्ससाठी नोड्स स्वतंत्रपणे चालवले जाऊ शकतात. याव्यतिरिक्त, Teku की सुरक्षा आणि स्लॅशिंग संरक्षणासाठी [Web3Signer](https://github.com/ConsenSys/web3signer/) सह पूर्णपणे आंतर-कार्यक्षम आहे. + +Teku Java मध्ये लिहिलेले आहे आणि Apache 2.0 परवानाकृत आहे. हे ConsenSys मधील प्रोटोकॉल टीमद्वारे विकसित केले आहे जे Besu आणि Web3Signer साठी देखील जबाबदार आहे. [Teku डॉक्स](https://docs.teku.consensys.net/en/latest/) मध्ये अधिक जाणून घ्या. + +### Grandine {#grandine} + +Grandine हे Rust मध्ये GPL-3.0 परवान्याअंतर्गत लिहिलेले एक कन्सेंसस क्लायंट अंमलबजावणी आहे. हे Grandine कोअर टीमद्वारे सांभाळले जाते आणि ते जलद, उच्च-कार्यक्षम आणि हलके आहे. हे रास्पबेरी पाय सारख्या कमी-संसाधन उपकरणांवर चालणाऱ्या सोलो स्टेकर्सपासून ते हजारो व्हॅलिडेटर्स चालवणाऱ्या मोठ्या संस्थात्मक स्टेकर्सपर्यंतच्या विस्तृत स्टेकर्ससाठी योग्य आहे. + +दस्तऐवजीकरण [Grandine Book](https://docs.grandine.io/) मध्ये आढळू शकते + +## सिंक्रोनाइझेशन मोड {#sync-modes} + +नेटवर्कमधील सद्य डेटाचे अनुसरण आणि पडताळणी करण्यासाठी, Ethereum क्लायंटला नवीनतम नेटवर्क स्थितीसह सिंक करणे आवश्यक आहे. हे पीअर्सकडून डेटा डाउनलोड करून, त्यांच्या अखंडतेची क्रिप्टोग्राफिकरित्या पडताळणी करून आणि स्थानिक ब्लॉकचेन डेटाबेस तयार करून केले जाते. + +सिंक्रोनाइझेशन मोड्स या प्रक्रियेसाठी विविध ट्रेड-ऑफसह भिन्न दृष्टिकोन दर्शवतात. क्लायंट त्यांच्या सिंक अल्गोरिदमच्या अंमलबजावणीमध्ये देखील भिन्न आहेत. अंमलबजावणीवरील तपशीलांसाठी नेहमी तुमच्या निवडलेल्या क्लायंटच्या अधिकृत दस्तऐवजीकरणाचा संदर्भ घ्या. + +### एक्झिक्युशन लेयर सिंक मोड्स {#execution-layer-sync-modes} + +एक्झिक्युशन लेयर वेगवेगळ्या वापराच्या प्रकरणांसाठी वेगवेगळ्या मोड्समध्ये चालवले जाऊ शकते, ब्लॉकचेनच्या जागतिक स्थितीची पुन्हा-अंमलबजावणी करण्यापासून ते विश्वसनीय चेकपॉइंटवरून केवळ चेनच्या टोकाशी सिंक करण्यापर्यंत. + +#### फुल सिंक {#full-sync} + +एक फुल सिंक सर्व ब्लॉक्स (हेडर्स आणि ब्लॉक बॉडीसह) डाउनलोड करतो आणि जेनेसिसपासून प्रत्येक ब्लॉक कार्यान्वित करून ब्लॉकचेनची स्थिती वाढीवपणे पुन्हा तयार करतो. + +- प्रत्येक व्यवहाराची पडताळणी करून विश्वास कमी करते आणि सर्वोच्च सुरक्षा देते. +- वाढत्या व्यवहारांच्या संख्येमुळे, सर्व व्यवहारांवर प्रक्रिया करण्यासाठी दिवस ते आठवडे लागू शकतात. + +[आर्काइव्ह नोड्स](#archive-node) प्रत्येक ब्लॉकमधील प्रत्येक व्यवहाराद्वारे केलेल्या स्थिती बदलांचा संपूर्ण इतिहास तयार करण्यासाठी (आणि टिकवून ठेवण्यासाठी) पूर्ण सिंक करतात. + +#### फास्ट सिंक {#fast-sync} + +फुल सिंकप्रमाणे, फास्ट सिंक सर्व ब्लॉक्स (हेडर्स, व्यवहार आणि पावत्यांसह) डाउनलोड करतो. तथापि, ऐतिहासिक व्यवहारांवर पुन्हा प्रक्रिया करण्याऐवजी, फास्ट सिंक अलीकडील हेडपर्यंत पोहोचेपर्यंत पावत्यांवर अवलंबून असतो, त्यानंतर तो पूर्ण नोड प्रदान करण्यासाठी ब्लॉक्स इम्पोर्ट करणे आणि प्रक्रिया करणे सुरू करतो. + +- फास्ट सिंक स्ट्रॅटेजी. +- बँडविड्थ वापराच्या बाजूने प्रक्रिया मागणी कमी करते. + +#### स्नॅप सिंक {#snap-sync} + +स्नॅप सिंक देखील चेनची ब्लॉक-दर-ब्लॉक पडताळणी करतात. तथापि, जेनेसिस ब्लॉकपासून सुरुवात करण्याऐवजी, स्नॅप सिंक अधिक अलीकडील 'विश्वसनीय' चेकपॉइंटपासून सुरू होतो जो खऱ्या ब्लॉकचेनचा भाग असल्याचे ओळखले जाते. नोड ठराविक वयापेक्षा जुना डेटा हटवताना नियतकालिक चेकपॉइंट्स सेव्ह करतो. हे स्नॅपशॉट्स कायमचे संग्रहित करण्याऐवजी आवश्यकतेनुसार स्टेट डेटा पुन्हा तयार करण्यासाठी वापरले जातात. + +- सर्वात वेगवान सिंक स्ट्रॅटेजी, सध्या Ethereum मेननेटमध्ये डीफॉल्ट आहे. +- सुरक्षिततेशी तडजोड न करता भरपूर डिस्क वापर आणि नेटवर्क बँडविड्थ वाचवते. + +[स्नॅप सिंकवर अधिक](https://github.com/ethereum/devp2p/blob/master/caps/snap.md). + +#### लाइट सिंक {#light-sync} + +लाइट क्लायंट मोड सर्व ब्लॉक हेडर्स, ब्लॉक डेटा डाउनलोड करतो आणि काहींची यादृच्छिकपणे पडताळणी करतो. केवळ विश्वसनीय चेकपॉइंटवरून चेनच्या टोकापर्यंत सिंक करते. + +- विकसक आणि कन्सेंसस यंत्रणेवरील विश्वासावर अवलंबून राहून केवळ नवीनतम स्थिती प्राप्त करते. +- क्लायंट काही मिनिटांत सध्याच्या नेटवर्क स्थितीसह वापरण्यासाठी तयार. + +**सूचना** लाइट सिंक अजूनही प्रूफ-ऑफ-स्टेक Ethereum सह कार्य करत नाही - लाइट सिंकच्या नवीन आवृत्त्या लवकरच पाठवल्या पाहिजेत! + +[लाइट क्लायंटवर अधिक](/developers/docs/nodes-and-clients/light-clients/) + +### कन्सेंसस लेयर सिंक मोड्स {#consensus-layer-sync-modes} + +#### ऑप्टिमिस्टिक सिंक {#optimistic-sync} + +ऑप्टिमिस्टिक सिंक ही एक विलीनीकरणानंतरची सिंक्रोनाइझेशन स्ट्रॅटेजी आहे जी ऑप्ट-इन आणि बॅकवर्ड्स सुसंगत असण्यासाठी डिझाइन केलेली आहे, ज्यामुळे एक्झिक्युशन नोड्सना स्थापित पद्धतींद्वारे सिंक करता येते. एक्झिक्युशन इंजिन _आशावादीपणे_ बीकन ब्लॉक्स पूर्णपणे सत्यापित न करता आयात करू शकते, नवीनतम हेड शोधू शकते आणि नंतर वरील पद्धतींसह चेन सिंक करणे सुरू करू शकते. त्यानंतर, एक्झिक्युशन क्लायंट पकडल्यानंतर, ते कन्सेंसस क्लायंटला बीकन चेनमधील व्यवहारांच्या वैधतेबद्दल सूचित करेल. + +[ऑप्टिमिस्टिक सिंकवर अधिक](https://github.com/ethereum/consensus-specs/blob/dev/sync/optimistic.md) + +#### चेकपॉइंट सिंक {#checkpoint-sync} + +चेकपॉइंट सिंक, ज्याला वीक सब्जेक्टिव्हिटी सिंक असेही म्हणतात, बीकन नोड सिंक करण्यासाठी एक उत्कृष्ट वापरकर्ता अनुभव तयार करतो. हे [कमकुवत व्यक्तिनिष्ठतेच्या](/developers/docs/consensus-mechanisms/pos/weak-subjectivity/) गृहितकांवर आधारित आहे जे जेनेसिसऐवजी अलीकडील कमकुवत व्यक्तिनिष्ठता चेकपॉइंटवरून बीकन चेन सिंक करण्यास सक्षम करते. चेकपॉइंट सिंक [जेनेसिस](/glossary/#genesis-block) पासून सिंक करण्यासारख्याच विश्वासाच्या गृहितकांसह प्रारंभिक सिंक वेळ लक्षणीयरीत्या जलद करतात. + +व्यवहारात, याचा अर्थ असा की तुमचा नोड अलीकडील अंतिम स्थिती डाउनलोड करण्यासाठी रिमोट सेवेशी कनेक्ट होतो आणि त्या बिंदूपासून डेटाची पडताळणी करणे सुरू ठेवतो. डेटा प्रदान करणारा तृतीय पक्ष विश्वासार्ह आहे आणि काळजीपूर्वक निवडला पाहिजे. + +[चेकपॉइंट सिंक](https://notes.ethereum.org/@djrtwo/ws-sync-in-practice) वर अधिक + +## पुढील वाचन {#further-reading} + +- [Ethereum 101 - भाग 2 - नोड्स समजून घेणे](https://kauri.io/ethereum-101-part-2-understanding-nodes/48d5098292fd4f11b251d1b1814f0bba/a) _- विल् बार्न्स, 13 फेब्रुवारी 2019_ +- [Ethereum फुल नोड्स चालवणे: केवळ प्रेरित लोकांसाठी एक मार्गदर्शक](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _- जस्टिन लेरॉक्स, 7 नोव्हेंबर 2019_ + +## संबंधित विषय {#related-topics} + +- [ब्लॉक्स](/developers/docs/blocks/) +- [नेटवर्क्स](/developers/docs/networks/) + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [तुमच्या रास्पबेरी पाय 4 ला फक्त मायक्रोएसडी कार्ड फ्लॅश करून व्हॅलिडेटर नोडमध्ये बदला - इन्स्टॉलेशन मार्गदर्शक](/developers/tutorials/run-node-raspberry-pi/) _- तुमचा रास्पबेरी पाय 4 फ्लॅश करा, इथरनेट केबल लावा, एसएसडी डिस्क कनेक्ट करा आणि रास्पबेरी पाय 4 ला एक्झिक्युशन लेयर (मेननेट) आणि/किंवा कन्सेंसस लेयर (बीकन चेन/व्हॅलिडेटर) चालवणारा पूर्ण Ethereum नोड बनवण्यासाठी डिव्हाइस चालू करा._ diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/light-clients/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/light-clients/index.md new file mode 100644 index 00000000000..45fa80b5242 --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/light-clients/index.md @@ -0,0 +1,61 @@ +--- +title: "लाईट क्लायंट्स" +description: "इथेरियम लाईट क्लायंट्सची ओळख." +lang: mr +--- + +पूर्ण नोड चालवणे हा इथेरियमशी संवाद साधण्याचा सर्वात ट्रस्टलेस, खाजगी, विकेंद्रित आणि सेन्सॉरशिप-प्रतिरोधक मार्ग आहे. पूर्ण नोडसह, तुम्ही ब्लॉकचेनची तुमची स्वतःची प्रत ठेवता, ज्याला तुम्ही त्वरित क्वेरी करू शकता आणि तुम्हाला इथेरियमच्या पीअर-टू-पीअर नेटवर्कमध्ये थेट प्रवेश मिळतो. तथापि, पूर्ण नोड चालवण्यासाठी मोठ्या प्रमाणात मेमरी, स्टोरेज आणि CPU आवश्यक असते. याचा अर्थ प्रत्येकासाठी स्वतःचा नोड चालवणे व्यवहार्य नाही. इथेरियम रोडमॅपवर यासाठी अनेक उपाय आहेत, ज्यात स्टेटलेसनेसचा समावेश आहे, परंतु ते लागू होण्यापासून अनेक वर्षे दूर आहेत. नजीकच्या काळातील उत्तर म्हणजे मोठ्या कार्यप्रदर्शन सुधारणांसाठी पूर्ण नोड चालवण्याच्या काही फायद्यांशी तडजोड करणे, जे नोड्सना अत्यंत कमी हार्डवेअर आवश्यकतांसह चालविण्यास अनुमती देतात. ही तडजोड करणारे नोड्स लाईट नोड्स म्हणून ओळखले जातात. + +## लाईट क्लायंट म्हणजे काय {#what-is-a-light-client} + +लाईट नोड हा लाईट क्लायंट सॉफ्टवेअर चालवणारा नोड आहे. ब्लॉकचेन डेटाच्या स्थानिक प्रती ठेवण्याऐवजी आणि सर्व बदलांची स्वतंत्रपणे पडताळणी करण्याऐवजी, ते काही प्रदात्याकडून आवश्यक डेटाची विनंती करतात. प्रदाता हा पूर्ण नोडशी थेट कनेक्शन किंवा काही केंद्रीकृत RPC सर्व्हरद्वारे असू शकतो. नंतर डेटाची लाईट नोडद्वारे पडताळणी केली जाते, ज्यामुळे त्याला चेनच्या हेडसोबत राहता येते. लाईट नोड फक्त ब्लॉक हेडर्सवर प्रक्रिया करतो, केवळ अधूनमधून वास्तविक ब्लॉक सामग्री डाउनलोड करतो. नोड्स त्यांच्या लाईटनेसमध्ये (हलकेपणात) भिन्न असू शकतात, जे ते चालवत असलेल्या लाईट आणि पूर्ण क्लायंट सॉफ्टवेअरच्या संयोजनावर अवलंबून असते. उदाहरणार्थ, सर्वात लाईट कॉन्फिगरेशन म्हणजे लाईट एक्झिक्युशन क्लायंट आणि लाईट कन्सेन्सस क्लायंट चालवणे. हे देखील शक्य आहे की अनेक नोड्स पूर्ण एक्झिक्युशन क्लायंटसह लाईट कन्सेन्सस क्लायंट चालवणे निवडतील किंवा याउलट. + +## लाईट क्लायंट कसे काम करतात? {#how-do-light-clients-work} + +जेव्हा इथेरियमने प्रूफ-ऑफ-स्टेक आधारित कन्सेन्सस मेकॅनिझम वापरण्यास सुरुवात केली, तेव्हा विशेषतः लाईट क्लायंटना समर्थन देण्यासाठी नवीन पायाभूत सुविधा सादर केल्या गेल्या. हे ज्या प्रकारे कार्य करते ते म्हणजे दर 1.1 दिवसांनी 512 व्हॅलिडेटर्सचा एक उपसंच **सिंक कमिटी** म्हणून काम करण्यासाठी यादृच्छिकपणे निवडला जातो. सिंक कमिटी अलीकडील ब्लॉक्सच्या हेडरवर स्वाक्षरी करते. प्रत्येक ब्लॉक हेडरमध्ये सिंक कमिटीमधील व्हॅलिडेटर्सची एकत्रित स्वाक्षरी आणि एक "बिटफील्ड" असते, जे दर्शवते की कोणत्या व्हॅलिडेटर्सनी स्वाक्षरी केली आणि कोणी केली नाही. प्रत्येक हेडरमध्ये पुढील ब्लॉकवर स्वाक्षरी करण्यासाठी अपेक्षित असलेल्या व्हॅलिडेटर्सची यादी देखील समाविष्ट असते. याचा अर्थ असा की लाईट क्लायंट त्वरीत पाहू शकतो की सिंक कमिटीने त्यांना मिळालेल्या डेटावर स्वाक्षरी केली आहे, आणि ते मागील ब्लॉकमध्ये अपेक्षित असलेल्या सिंक कमिटीशी त्यांना मिळालेल्या सिंक कमिटीची तुलना करून ती खरी आहे की नाही हे देखील तपासू शकतात. अशाप्रकारे, लाईट क्लायंट प्रत्यक्ष ब्लॉक डाउनलोड न करता, केवळ सारांश माहिती असलेले हेडर वापरून नवीनतम इथेरियम ब्लॉकबद्दलचे आपले ज्ञान अद्यतनित ठेवू शकतो. + +एक्झिक्युशन लेअरवर लाईट एक्झिक्युशन क्लायंटसाठी कोणतेही एकच स्पेसिफिकेशन नाही. लाईट एक्झिक्युशन क्लायंटची व्याप्ती बदलू शकते: तो पूर्ण एक्झिक्युशन क्लायंटचा "लाईट मोड" असू शकतो, ज्यात पूर्ण नोडची सर्व EVM आणि नेटवर्किंग कार्यक्षमता असते पण तो संबंधित डेटा डाउनलोड न करता केवळ ब्लॉक हेडर्सची पडताळणी करतो; किंवा तो एक अधिक मर्यादित स्वरूपाचा क्लायंट असू शकतो, जो इथेरियमशी संवाद साधण्यासाठी RPC प्रदात्याकडे विनंत्या फॉरवर्ड करण्यावर मोठ्या प्रमाणावर अवलंबून असतो. + +## लाईट क्लायंट महत्त्वाचे का आहेत? {#why-are-light-clients-important} + +लाईट क्लायंट महत्त्वाचे आहेत कारण ते वापरकर्त्यांना त्यांच्या डेटा प्रदात्यावर तो बरोबर आणि प्रामाणिक आहे यावर आंधळा विश्वास ठेवण्याऐवजी, येणाऱ्या डेटाची पडताळणी करण्याची परवानगी देतात, आणि हे सर्व पूर्ण नोडच्या संगणकीय संसाधनांच्या केवळ एका लहान अंशाचा वापर करून शक्य होते. लाईट क्लायंटना मिळणारा डेटा अशा ब्लॉक हेडर्सच्या विरोधात तपासला जाऊ शकतो ज्यांच्यावर 512 इथेरियम व्हॅलिडेटर्सच्या यादृच्छिक संचापैकी किमान 2/3 ने स्वाक्षरी केली आहे हे त्यांना माहीत असते. हा डेटा बरोबर असल्याचा एक खूप भक्कम पुरावा आहे. + +लाईट क्लायंट केवळ थोड्या प्रमाणात संगणकीय शक्ती, मेमरी आणि स्टोरेज वापरतो, त्यामुळे तो मोबाईल फोनवर चालवला जाऊ शकतो, ॲपमध्ये एम्बेड केला जाऊ शकतो किंवा ब्राउझरचा भाग म्हणून वापरला जाऊ शकतो. लाईट क्लायंट हा इथेरियममध्ये ट्रस्ट-मिनिमाइज्ड प्रवेश तृतीय-पक्ष प्रदात्यावर विश्वास ठेवण्याइतकाच घर्षणरहित बनवण्याचा एक मार्ग आहे. + +एक सोपे उदाहरण घेऊया. कल्पना करा की तुम्हाला तुमच्या खात्यातील शिल्लक तपासायची आहे. हे करण्यासाठी, तुम्हाला इथेरियम नोडला विनंती करावी लागेल. तो नोड तुमच्या शिलकीसाठी इथेरियम स्टेटची त्याची स्थानिक प्रत तपासेल आणि ती तुम्हाला परत करेल. जर तुमच्याकडे नोडमध्ये थेट प्रवेश नसेल, तर असे केंद्रीकृत ऑपरेटर आहेत जे ही माहिती एक सेवा म्हणून प्रदान करतात. तुम्ही त्यांना विनंती पाठवू शकता, ते त्यांचा नोड तपासतात, आणि निकाल तुम्हाला परत पाठवतात. यातील समस्या ही आहे की तुम्हाला प्रदात्यावर विश्वास ठेवावा लागतो की तो तुम्हाला योग्य माहिती देत आहे. जर तुम्ही स्वतः त्याची पडताळणी करू शकत नसाल, तर माहिती योग्य आहे की नाही हे तुम्ही कधीच खऱ्या अर्थाने जाणू शकत नाही. + +लाईट क्लायंट या समस्येचे निराकरण करतो. तुम्ही अजूनही काही बाह्य प्रदात्याकडून डेटाची विनंती करता, परंतु जेव्हा तुम्हाला डेटा परत मिळतो, तेव्हा तो एका पुराव्यासह येतो जो तुमचा लाईट नोड ब्लॉक हेडरमध्ये मिळालेल्या माहितीनुसार तपासू शकतो. याचा अर्थ असा की, तुमचा डेटा एखाद्या विश्वासू ऑपरेटरऐवजी इथेरियम स्वतः सत्यापित करत आहे. + +## लाईट क्लायंट कोणते नवकल्पना सक्षम करतात? {#what-innovations-do-light-clients-enable} + +लाईट क्लायंटचा प्राथमिक फायदा म्हणजे अधिक लोकांना नगण्य हार्डवेअर आवश्यकतांसह आणि तृतीय पक्षांवर कमीत कमी अवलंबून राहून स्वतंत्रपणे इथेरियममध्ये प्रवेश करण्यास सक्षम करणे. हे वापरकर्त्यांसाठी चांगले आहे कारण ते त्यांच्या स्वतःच्या डेटाची पडताळणी करू शकतात आणि हे नेटवर्कसाठी चांगले आहे कारण ते चेनची पडताळणी करणाऱ्या नोड्सची संख्या आणि विविधता वाढवते. + +अतिशय कमी स्टोरेज, मेमरी आणि प्रोसेसिंग पॉवर असलेल्या उपकरणांवर इथेरियम नोड्स चालवण्याची क्षमता हे लाईट क्लायंटमुळे शक्य झालेल्या नवकल्पनेच्या प्रमुख क्षेत्रांपैकी एक आहे. आज इथेरियम नोड्सना बरीच संगणकीय संसाधने आवश्यक असताना, लाईट क्लायंट ब्राउझरमध्ये एम्बेड केले जाऊ शकतात, मोबाईल फोनवर चालवले जाऊ शकतात आणि कदाचित स्मार्ट घड्याळांसारख्या लहान उपकरणांवरही चालवले जाऊ शकतात. याचा अर्थ एम्बेडेड क्लायंट असलेले इथेरियम वॉलेट्स मोबाईल फोनवर चालू शकतील. याचा अर्थ मोबाईल वॉलेट्स अधिक विकेंद्रित होऊ शकतील कारण त्यांना त्यांच्या डेटासाठी केंद्रीकृत डेटा प्रदात्यांवर विश्वास ठेवावा लागणार नाही. + +याचाच एक विस्तार म्हणजे **इंटरनेट ऑफ थिंग्ज (IoT)** उपकरणांना सक्षम करणे. सिंक कमिटीद्वारे प्रदान केलेल्या सर्व सुरक्षा हमींसह, काही टोकन बॅलन्स किंवा NFT च्या मालकीचा त्वरीत पुरावा देण्यासाठी लाईट क्लायंटचा वापर केला जाऊ शकतो, ज्यामुळे IoT नेटवर्कवर काही क्रिया सुरू होऊ शकते. एका [सायकल भाड्याने देणाऱ्या सेवेची](https://youtu.be/ZHNrAXf3RDE?t=929) कल्पना करा, जी तुम्ही भाडेतत्त्वावरील सेवेचा NFT धारण करता की नाही हे त्वरीत सत्यापित करण्यासाठी एम्बेडेड लाईट क्लायंटसह एक ॲप वापरते आणि तसे असल्यास, तुमच्यासाठी चालवून नेण्यासाठी एक सायकल अनलॉक करते! + +इथेरियम रोलअप्सना देखील लाईट क्लायंट्सचा फायदा होईल. रोलअप्ससाठी एक मोठी समस्या म्हणजे ब्रिजवर होणारे हॅक्स, जे इथेरियम मेननेटवरून रोलअपमध्ये निधी हस्तांतरित करण्याची परवानगी देतात. एक असुरक्षितता म्हणजे ते ओरॅकल्स आहेत जे रोलअप्स वापरकर्त्याने ब्रिजमध्ये ठेव जमा केली आहे की नाही हे शोधण्यासाठी वापरतात. जर एखाद्या ओरॅकलने चुकीचा डेटा पुरवला, तर तो रोलअपला ब्रिजमध्ये ठेव जमा झाली आहे असे वाटायला लावून फसवू शकतो आणि चुकीच्या पद्धतीने निधी जारी करू शकतो. रोलअपमध्ये एम्बेड केलेला लाईट क्लायंट भ्रष्ट ओरॅकल्सपासून संरक्षण करण्यासाठी वापरला जाऊ शकतो, कारण ब्रिजमधील ठेवीसोबत एक पुरावा येऊ शकतो जो कोणतेही टोकन जारी करण्यापूर्वी रोलअपद्वारे सत्यापित केला जाऊ शकतो. हीच संकल्पना इतर इंटरचेन ब्रिजवर देखील लागू केली जाऊ शकते. + +इथेरियम वॉलेट्स अपग्रेड करण्यासाठी देखील लाईट क्लायंटचा वापर केला जाऊ शकतो. RPC प्रदात्याकडून प्रदान केलेल्या डेटावर विश्वास ठेवण्याऐवजी, तुमचे वॉलेट एम्बेडेड लाईट क्लायंटचा वापर करून तुम्हाला सादर केलेल्या डेटाची थेट पडताळणी करू शकते. यामुळे तुमच्या वॉलेटची सुरक्षा वाढेल. जर तुमचा RPC प्रदाता अप्रामाणिक असेल आणि त्याने तुम्हाला चुकीची माहिती दिली, तर एम्बेडेड लाईट क्लायंट तुम्हाला ते सांगू शकेल! + +## लाईट क्लायंट विकासाची सद्यस्थिती काय आहे? {#current-state-of-development} + +अनेक लाईट क्लायंट विकासाधीन आहेत, ज्यात एक्झिक्युशन, कन्सेन्सस आणि एकत्रित एक्झिक्युशन/कन्सेन्सस लाईट क्लायंट समाविष्ट आहेत. हे पान लिहिण्याच्या वेळेपर्यंत आम्हाला माहीत असलेल्या लाईट क्लायंट अंमलबजावणी खालीलप्रमाणे आहेत: + +- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client): TypeScript मधील कन्सेन्सस लाईट क्लायंट +- [Helios](https://github.com/a16z/helios): Rust मधील एकत्रित एक्झिक्युशन आणि कन्सेन्सस लाईट क्लायंट +- [Geth](https://github.com/ethereum/go-ethereum/tree/master/beacon/light): Go मधील एक्झिक्युशन क्लायंटसाठी लाईट मोड (विकासाधीन) +- [Nimbus](https://nimbus.guide/el-light-client.html): Nim मधील कन्सेन्सस लाईट क्लायंट + +आमच्या माहितीनुसार, यापैकी कोणतेही अद्याप उत्पादन-तयार मानले जात नाही. + +लाईट क्लायंट इथेरियम डेटामध्ये कसे प्रवेश करू शकतात हे सुधारण्यासाठी बरेच काम केले जात आहे. सध्या, लाईट क्लायंट क्लायंट/सर्व्हर मॉडेल वापरून पूर्ण नोड्सना RPC विनंत्यांवर अवलंबून असतात, परंतु भविष्यात [पोर्टल नेटवर्क](https://www.ethportal.net/) सारख्या समर्पित नेटवर्कचा वापर करून डेटा अधिक विकेंद्रित पद्धतीने विनंती केला जाऊ शकतो, जे पीअर-टू-पीअर गॉसिप प्रोटोकॉल वापरून लाईट क्लायंटना डेटा देऊ शकते. + +इतर [रोडमॅप](/roadmap/) आयटम जसे की [Verkle trees](/roadmap/verkle-trees/) आणि [statelessness](/roadmap/statelessness/) अखेरीस लाईट क्लायंटच्या सुरक्षा हमींना पूर्ण क्लायंटच्या बरोबरीने आणतील. + +## पुढील वाचन {#further-reading} + +- [झोल्ट फेल्फोधी Geth लाईट क्लायंटवर](https://www.youtube.com/watch?v=EPZeFXau-RE) +- [एटन किस्सलिंग लाईट क्लायंट नेटवर्किंगवर](https://www.youtube.com/watch?v=85MeiMA4dD8) +- [एटन किस्सलिंग द मर्जनंतर लाईट क्लायंटवर](https://www.youtube.com/watch?v=ZHNrAXf3RDE) +- [पायपर मेरियम: कार्यक्षम लाईट क्लायंट्सचा वळणदार मार्ग](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/) diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/node-architecture/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/node-architecture/index.md new file mode 100644 index 00000000000..d1ef878d741 --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/node-architecture/index.md @@ -0,0 +1,59 @@ +--- +title: "नोड आर्किटेक्चर" +description: "इथेरियम नोड्स कसे आयोजित केले जातात याची ओळख." +lang: mr +--- + +एक इथेरियम नोड दोन क्लायंट्सनी बनलेला असतो: एक [एक्झिक्यूशन क्लायंट](/developers/docs/nodes-and-clients/#execution-clients) आणि एक [कन्सेन्सस क्लायंट](/developers/docs/nodes-and-clients/#consensus-clients). एखाद्या नोडला नवीन ब्लॉक प्रस्तावित करण्यासाठी, त्याला [व्हॅलिडेटर क्लायंट](#validators) देखील चालवणे आवश्यक आहे. + +जेव्हा इथेरियम [प्रूफ-ऑफ-वर्क](/developers/docs/consensus-mechanisms/pow/) वापरत होते, तेव्हा संपूर्ण इथेरियम नोड चालवण्यासाठी एक एक्झिक्यूशन क्लायंट पुरेसा होता. तथापि, [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pow/) लागू केल्यापासून, एक्झिक्यूशन क्लायंटला [कन्सेन्सस क्लायंट](/developers/docs/nodes-and-clients/#consensus-clients) नावाच्या दुसऱ्या सॉफ्टवेअरसोबत वापरणे आवश्यक आहे. + +खालील आकृती दोन इथेरियम क्लायंट्समधील संबंध दर्शवते. हे दोन क्लायंट आपापल्या पीअर-टू-पीअर (P2P) नेटवर्कशी जोडले जातात. वेगवेगळे P2P नेटवर्क्स आवश्यक आहेत कारण एक्झिक्यूशन क्लायंट त्यांच्या P2P नेटवर्कवर व्यवहारांची देवाणघेवाण (गॉसिप) करतात, ज्यामुळे ते त्यांचे स्थानिक व्यवहार पूल व्यवस्थापित करू शकतात, तर कन्सेन्सस क्लायंट त्यांच्या P2P नेटवर्कवर ब्लॉक्सची देवाणघेवाण करतात, ज्यामुळे सहमती (कन्सेन्सस) आणि चेनची वाढ होते. + +![](node-architecture-text-background.png) + +_एक्झिक्यूशन क्लायंटसाठी Erigon, Nethermind आणि Besu यांसह अनेक पर्याय उपलब्ध आहेत_. + +ही दोन-क्लायंट रचना कार्य करण्यासाठी, कन्सेन्सस क्लायंट्सनी व्यवहारांचे बंडल एक्झिक्यूशन क्लायंटकडे पाठवणे आवश्यक आहे. एक्झिक्यूशन क्लायंट स्थानिक पातळीवर व्यवहारांची अंमलबजावणी करतो, हे प्रमाणित करण्यासाठी की व्यवहार इथेरियमच्या कोणत्याही नियमांचे उल्लंघन करत नाहीत आणि इथेरियमच्या स्टेटमध्ये प्रस्तावित अपडेट योग्य आहे. जेव्हा एखादा नोड ब्लॉक निर्माता म्हणून निवडला जातो, तेव्हा त्याचा कन्सेन्सस क्लायंट इन्स्टन्स एक्झिक्यूशन क्लायंटकडून नवीन ब्लॉकमध्ये समाविष्ट करण्यासाठी व्यवहारांचे बंडल मागवतो आणि जागतिक स्टेट अपडेट करण्यासाठी त्यांची अंमलबजावणी करतो. [Engine API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md) वापरून स्थानिक RPC कनेक्शनद्वारे कन्सेन्सस क्लायंट एक्झिक्यूशन क्लायंटला चालवतो. + +## एक्झिक्यूशन क्लायंट काय करतो? {#execution-client} + +एक्झिक्यूशन क्लायंट व्यवहारांचे प्रमाणीकरण, हाताळणी आणि गॉसिपसाठी जबाबदार आहे, तसेच स्टेट मॅनेजमेंट आणि इथेरियम व्हर्च्युअल मशीन ([EVM](/developers/docs/evm/)) ला सपोर्ट करतो. तो ब्लॉक तयार करणे, ब्लॉकची गॉसिपिंग करणे किंवा कन्सेन्सस लॉजिक हाताळण्यासाठी जबाबदार **नाही**. हे कन्सेन्सस क्लायंटच्या अखत्यारीत आहे. + +एक्झिक्यूशन क्लायंट एक्झिक्यूशन पेलोड तयार करतो - व्यवहारांची सूची, अपडेटेड स्टेट ट्राय आणि इतर अंमलबजावणी-संबंधित डेटा. कन्सेन्सस क्लायंट प्रत्येक ब्लॉकमध्ये एक्झिक्यूशन पेलोड समाविष्ट करतात. एक्झिक्यूशन क्लायंट नवीन ब्लॉक्समधील व्यवहारांची पुन्हा अंमलबजावणी करून ते वैध असल्याची खात्री करण्यासाठी देखील जबाबदार आहे. व्यवहारांची अंमलबजावणी एक्झिक्यूशन क्लायंटच्या एम्बेडेड कॉम्प्युटरवर केली जाते, ज्याला [इथेरियम व्हर्च्युअल मशीन (EVM)](/developers/docs/evm) म्हणून ओळखले जाते. + +एक्झिक्यूशन क्लायंट [RPC पद्धती](/developers/docs/apis/json-rpc) द्वारे इथेरियमसाठी एक यूजर इंटरफेस देखील प्रदान करतो जो वापरकर्त्यांना इथेरियम ब्लॉकचेनची क्वेरी करण्यास, व्यवहार सबमिट करण्यास आणि स्मार्ट कॉन्ट्रॅक्ट्स तैनात करण्यास सक्षम करतो. RPC कॉल्स [Web3js](https://docs.web3js.org/), [Web3py](https://web3py.readthedocs.io/en/v5/) सारख्या लायब्ररीद्वारे किंवा ब्राउझर वॉलेटसारख्या यूजर-इंटरफेसद्वारे हाताळले जाणे सामान्य आहे. + +सारांश, एक्झिक्यूशन क्लायंट आहे: + +- इथेरियमसाठी एक यूजर गेटवे +- इथेरियम व्हर्च्युअल मशीन, इथेरियमचे स्टेट आणि व्यवहार पूल यांचे घर. + +## कन्सेन्सस क्लायंट काय करतो? {#consensus-client} + +कन्सेन्सस क्लायंट सर्व लॉजिक हाताळतो ज्यामुळे नोड इथेरियम नेटवर्कसोबत सिंकमध्ये राहू शकतो. यामध्ये पीअर्सकडून ब्लॉक प्राप्त करणे आणि फोर्क चॉईस अल्गोरिदम चालवणे समाविष्ट आहे, जेणेकरून नोड नेहमी सर्वाधिक अटेस्टेशन्स (व्हॅलिडेटरच्या प्रभावी बॅलन्सद्वारे भारित) जमा केलेल्या चेनचे अनुसरण करेल याची खात्री होते. एक्झिक्यूशन क्लायंटप्रमाणेच, कन्सेन्सस क्लायंट्सचे स्वतःचे P2P नेटवर्क असते ज्याद्वारे ते ब्लॉक आणि अटेस्टेशन्स शेअर करतात. + +कन्सेन्सस क्लायंट ब्लॉक प्रमाणित करण्यात किंवा प्रस्तावित करण्यात भाग घेत नाही - हे व्हॅलिडेटरद्वारे केले जाते, जो कन्सेन्सस क्लायंटसाठी एक ऐच्छिक ॲड-ऑन आहे. व्हॅलिडेटरशिवाय एक कन्सेन्सस क्लायंट फक्त चेनच्या हेडसोबत राहतो, ज्यामुळे नोडला सिंकमध्ये राहता येते. हे वापरकर्त्याला त्यांच्या एक्झिक्यूशन क्लायंटचा वापर करून इथेरियमसोबत व्यवहार करण्यास सक्षम करते, कारण त्यांना खात्री असते की ते योग्य चेनवर आहेत. + +## व्हॅलिडेटर्स {#validators} + +स्टेकिंग करणे आणि व्हॅलिडेटर सॉफ्टवेअर चालवणे एखाद्या नोडला नवीन ब्लॉक प्रस्तावित करण्यासाठी निवडले जाण्यास पात्र बनवते. नोड ऑपरेटर डिपॉझिट कॉन्ट्रॅक्टमध्ये ३२ ETH जमा करून त्यांच्या कन्सेन्सस क्लायंटमध्ये व्हॅलिडेटर जोडू शकतात. व्हॅलिडेटर क्लायंट कन्सेन्सस क्लायंटसोबत बंडल केलेला येतो आणि तो कोणत्याही वेळी नोडमध्ये जोडला जाऊ शकतो. व्हॅलिडेटर अटेस्टेशन्स आणि ब्लॉक प्रस्ताव हाताळतो. हे नोडला दंड किंवा स्लॅशिंगद्वारे बक्षिसे मिळवण्यास किंवा ETH गमावण्यास सक्षम करते. + +[स्टेकिंगबद्दल अधिक](/staking/). + +## नोडच्या घटकांची तुलना {#node-comparison} + +| एक्झिक्यूशन क्लायंट | कन्सेन्सस क्लायंट | व्हॅलिडेटर | +| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------ | +| त्याच्या P2P नेटवर्कवर व्यवहारांची देवाणघेवाण (गॉसिप) करतो | त्याच्या P2P नेटवर्कवर ब्लॉक आणि अटेस्टेशन्सची देवाणघेवाण (गॉसिप) करतो | ब्लॉक प्रस्तावित करतो | +| व्यवहारांची अंमलबजावणी/पुन्हा अंमलबजावणी करतो | फोर्क चॉईस अल्गोरिदम चालवतो | बक्षिसे/दंड जमा करतो | +| येणाऱ्या स्टेटमधील बदल सत्यापित करतो | चेनच्या हेडचा मागोवा ठेवतो | अटेस्टेशन्स करतो | +| स्टेट आणि रिसिट्स ट्राय्स व्यवस्थापित करतो | बीकन स्टेट (ज्यात कन्सेन्सस आणि एक्झिक्यूशन माहिती असते) व्यवस्थापित करतो | स्टेक करण्यासाठी ३२ ETH आवश्यक | +| एक्झिक्यूशन पेलोड तयार करतो | RANDAO मध्ये जमा झालेल्या यादृच्छिकतेचा (रँडमनेस) मागोवा ठेवतो (एक अल्गोरिदम जो व्हॅलिडेटर निवड आणि इतर कन्सेन्सस ऑपरेशन्ससाठी सत्यापित करण्यायोग्य यादृच्छिकता प्रदान करतो) | स्लॅश केले जाऊ शकते | +| इथेरियमशी संवाद साधण्यासाठी JSON-RPC API उघड करतो | जस्टिफिकेशन आणि फायनलायझेशनचा मागोवा ठेवतो | | + +## पुढील वाचन {#further-reading} + +- [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos) +- [ब्लॉक प्रस्ताव](/developers/docs/consensus-mechanisms/pos/block-proposal) +- [व्हॅलिडेटरची बक्षिसे आणि दंड](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties) diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md new file mode 100644 index 00000000000..fc6cd29da83 --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/nodes-as-a-service/index.md @@ -0,0 +1,418 @@ +--- +title: "एक सेवा म्हणून नोड्स" +description: "नोड सेवांचे प्रवेश-स्तरीय विहंगावलोकन, त्याचे फायदे आणि तोटे, आणि लोकप्रिय प्रदाते." +lang: mr +sidebarDepth: 2 +--- + +## परिचय {#Introduction} + +तुमचा स्वतःचा [Ethereum नोड](/developers/docs/nodes-and-clients/#what-are-nodes-and-clients) चालवणे आव्हानात्मक असू शकते, विशेषतः सुरुवात करताना किंवा वेगाने स्केलिंग करताना. अशा [अनेक सेवा](#popular-node-services) आहेत ज्या तुमच्यासाठी ऑप्टिमाइझ केलेल्या नोड इन्फ्रास्ट्रक्चर चालवतात, त्यामुळे तुम्ही त्याऐवजी तुमच्या ॲप्लिकेशन किंवा उत्पादनाच्या विकासावर लक्ष केंद्रित करू शकता. आम्ही नोड सेवा कशा कार्य करतात, त्यांच्या वापराचे फायदे आणि तोटे हे स्पष्ट करू आणि जर तुम्हाला सुरुवात करण्यास स्वारस्य असेल तर प्रदात्यांची यादी देऊ. + +## पूर्वतयारी {#prerequisites} + +जर तुम्हाला नोड्स आणि क्लायंट काय आहेत हे आधीच माहीत नसेल, तर [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) पहा. + +## स्टेकर्स {#stakoooooooooooooors} + +सोलो स्टेकर्सनी तृतीय-पक्ष प्रदात्यांवर अवलंबून न राहता स्वतःची पायाभूत सुविधा चालवली पाहिजे. याचा अर्थ कन्सेंसस क्लायंट सोबत एक्झिक्युशन क्लायंट चालवणे. [द मर्ज](/roadmap/merge) पूर्वी, फक्त कन्सेंसस क्लायंट चालवणे आणि एक्झिक्युशन डेटासाठी केंद्रीकृत प्रदाता वापरणे शक्य होते; हे आता शक्य नाही - एका सोलो स्टेकरने दोन्ही क्लायंट चालवणे आवश्यक आहे. तथापि, ही प्रक्रिया सुलभ करण्यासाठी सेवा उपलब्ध आहेत. + +[नोड चालवण्याबद्दल अधिक वाचा](/developers/docs/nodes-and-clients/run-a-node/). + +या पृष्ठावर वर्णन केलेल्या सेवा नॉन-स्टेकिंग नोड्ससाठी आहेत. + +## नोड सेवा कशा कार्य करतात? {#how-do-node-services-work} + +नोड सेवा प्रदाते तुमच्यासाठी पडद्यामागे वितरित नोड क्लायंट चालवतात, त्यामुळे तुम्हाला ते करावे लागत नाही. + +या सेवा सामान्यतः एक API की प्रदान करतात जी तुम्ही ब्लॉकचेनवर लिहिण्यासाठी आणि वाचण्यासाठी वापरू शकता. ते अनेकदा मेननेट व्यतिरिक्त [Ethereum टेस्टनेट](/developers/docs/networks/#ethereum-testnets) मध्ये प्रवेश देतात. + +काही सेवा तुम्हाला तुमचा स्वतःचा समर्पित नोड ऑफर करतात ज्याचे ते तुमच्यासाठी व्यवस्थापन करतात, तर इतर नोड्सवर क्रियाकलाप वितरित करण्यासाठी लोड बॅलन्सर वापरतात. + +जवळजवळ सर्व नोड सेवा एकत्रित करण्यास अत्यंत सोप्या आहेत, ज्यात तुमचा सेल्फ-होस्ट केलेला नोड बदलण्यासाठी किंवा सेवांमध्येच स्विच करण्यासाठी तुमच्या कोडमध्ये फक्त एका ओळीत बदल करावा लागतो. + +बऱ्याचदा नोड सेवा विविध प्रकारचे [नोड क्लायंट](/developers/docs/nodes-and-clients/#execution-clients) आणि [प्रकार](/developers/docs/nodes-and-clients/#node-types) चालवतात, ज्यामुळे तुम्हाला एकाच API मध्ये क्लायंट विशिष्ट पद्धतींव्यतिरिक्त पूर्ण आणि संग्रहित नोड्समध्ये प्रवेश मिळतो. + +हे लक्षात घेणे महत्त्वाचे आहे की नोड सेवा तुमच्या खाजगी की किंवा माहिती साठवत नाहीत आणि साठवू नयेत. + +## नोड सेवा वापरण्याचे फायदे काय आहेत? {#benefits-of-using-a-node-service} + +नोड सेवा वापरण्याचा मुख्य फायदा हा आहे की तुम्हाला स्वतः नोड्सची देखभाल आणि व्यवस्थापन करण्यासाठी अभियांत्रिकी वेळ घालवावा लागत नाही. हे तुम्हाला पायाभूत सुविधांच्या देखभालीची चिंता करण्याऐवजी तुमच्या उत्पादनाच्या निर्मितीवर लक्ष केंद्रित करण्यास अनुमती देते. + +स्टोरेजपासून बँडविड्थ ते मौल्यवान अभियांत्रिकी वेळेपर्यंत, स्वतःचे नोड्स चालवणे खूप महाग असू शकते. स्केलिंग करताना अधिक नोड्स सुरू करणे, नोड्सला नवीनतम आवृत्त्यांमध्ये अपग्रेड करणे आणि स्टेट कन्सिस्टन्सी सुनिश्चित करणे यासारख्या गोष्टी तुम्हाला तुमच्या इच्छित web3 उत्पादनाच्या निर्मितीवर आणि संसाधने खर्च करण्यापासून विचलित करू शकतात. + +## नोड सेवा वापरण्याचे तोटे काय आहेत? {#cons-of-using-a-node-service} + +नोड सेवा वापरून, तुम्ही तुमच्या उत्पादनाच्या पायाभूत सुविधांच्या पैलूचे केंद्रीकरण करत आहात. या कारणास्तव, विकेंद्रीकरणाला सर्वाधिक महत्त्व देणारे प्रकल्प तिसऱ्या पक्षाला आउटसोर्स करण्याऐवजी सेल्फ-होस्टिंग नोड्सला प्राधान्य देऊ शकतात. + +[स्वतःचा नोड चालवण्याच्या फायद्यांबद्दल अधिक वाचा](/developers/docs/nodes-and-clients/#benefits-to-you). + +## लोकप्रिय नोड सेवा {#popular-node-services} + +येथे काही सर्वात लोकप्रिय Ethereum नोड प्रदात्यांची यादी आहे, यामध्ये नसलेल्या कोणत्याही प्रदात्याला जोडण्यास तुम्ही मोकळे आहात! प्रत्येक नोड सेवा मोफत किंवा सशुल्क स्तरांव्यतिरिक्त विविध फायदे आणि वैशिष्ट्ये ऑफर करते, निर्णय घेण्यापूर्वी तुमच्या गरजांनुसार कोणते सर्वोत्तम आहे याचा तुम्ही तपास केला पाहिजे. + +- [**Alchemy**](https://alchemy.com/) + - [डॉक्स](https://www.alchemy.com/docs/) + - वैशिष्ट्ये + - प्रति महिना ३०० दशलक्ष कॉम्प्युट युनिट्ससह सर्वात मोठा विनामूल्य टियर (~३० दशलक्ष getLatestBlock विनंत्या) + - Polygon, Starknet, Optimism, Arbitrum साठी मल्टीचेन समर्थन + - सर्वात मोठ्या Ethereum dapps आणि DeFi व्यवहारांच्या व्हॉल्यूमपैकी ~७०% ला सामर्थ्य देते + - Alchemy Notify द्वारे रिअल-टाइम वेबहुक अलर्ट + - सर्वोत्कृष्ट-श्रेणीतील समर्थन आणि विश्वसनीयता / स्थिरता + - Alchemy चा NFT API + - रिक्वेस्ट एक्सप्लोरर, Mempool वॉचर आणि कंपोझरसह डॅशबोर्ड + - एकात्मिक टेस्टनेट फॉसेट प्रवेश + - १८ हजार वापरकर्त्यांसह सक्रिय Discord बिल्डर समुदाय + +- [**Allnodes**](https://www.allnodes.com/) + - [डॉक्स](https://docs.allnodes.com/) + - वैशिष्ट्ये + - Allnodes पोर्टफोलिओ पृष्ठावर तयार केलेल्या PublicNode टोकनसह कोणतेही दर मर्यादा नाहीत. + - [PublicNode](https://www.publicnode.com) वर गोपनीयता केंद्रित विनामूल्य rpc एंडपॉइंट्स (१००+ ब्लॉकचेन) + - ९०+ ब्लॉकचेनसाठी दर मर्यादेशिवाय समर्पित नोड्स + - ३०+ ब्लॉकचेनसाठी समर्पित आर्काइव्ह नोड्स + - ३ प्रदेशांमध्ये उपलब्ध (US, EU, आशिया) + - [PublicNode](https://www.publicnode.com/snapshots) वर १००+ ब्लॉकचेनसाठी स्नॅपशॉट्स + - ९९.९०%-९९.९८% अपटाइम SLA सह २४/७ तांत्रिक समर्थन (प्लॅनवर अवलंबून). + - प्रति-तास किंमत + - क्रेडिट कार्ड, PayPal किंवा क्रिप्टोद्वारे पैसे द्या + +- [**All That Node**](https://allthatnode.com/) + - [डॉक्स](https://docs.allthatnode.com/) + - वैशिष्ट्ये + - विनामूल्य टियरसह दररोज ५०,००० विनंत्या + - ४० हून अधिक प्रोटोकॉलसाठी समर्थन + - JSON-RPC (EVM, Tendermint), REST आणि Websocket APIs समर्थित + - आर्काइव्ह डेटामध्ये अमर्यादित प्रवेश + - २४/७ तांत्रिक समर्थन आणि ९९.९% पेक्षा जास्त अपटाइम + - मल्टी चेनवर फॉसेट उपलब्ध + - अमर्यादित API की सह अमर्यादित एंडपॉइंट प्रवेश + - ट्रेस/डीबग API समर्थित + - स्वयंचलित अपडेट्स + +- [**Amazon Managed Blockchain**](https://aws.amazon.com/managed-blockchain/) + - [डॉक्स](https://aws.amazon.com/managed-blockchain/resources/) + - वैशिष्ट्ये + - पूर्णपणे व्यवस्थापित Ethereum नोड्स + - सहा प्रदेशांमध्ये उपलब्ध + - HTTP आणि सुरक्षित WebSockets वर JSON-RPC + - ३ चेन्सना समर्थन देते + - SLAs, AWS समर्थन २४/७ + - Go-ethereum आणि Lighthouse + +- [**Ankr**](https://www.ankr.com/) + - [डॉक्स](https://docs.ankr.com/) + - वैशिष्ट्ये + - Ankr प्रोटोकॉल - ८+ चेन्ससाठी सार्वजनिक RPC API एंडपॉइंट्ससाठी खुला प्रवेश + - जवळच्या उपलब्ध नोडसाठी जलद आणि विश्वसनीय गेटवेसाठी लोड बॅलेंसिंग आणि नोड आरोग्य देखरेख + - WSS एंडपॉइंट आणि अमर्याद दर मर्यादा सक्षम करणारा प्रीमियम टियर + - ४०+ चेन्ससाठी एक-क्लिक फुल नोड आणि व्हॅलिडेटर नोड उपयोजन + - आवश्यकतेनुसार स्केल करा + - ॲनालिटिक्स साधने + - डॅशबोर्ड + - RPC, HTTPS आणि WSS एंडपॉइंट्स + - थेट समर्थन + +- [**Blast**](https://blastapi.io/) + - [डॉक्स](https://docs.blastapi.io/) + - वैशिष्ट्ये + - RPC आणि WSS समर्थन + - बहु-प्रादेशिक नोड होस्टिंग + - विकेंद्रीकृत पायाभूत सुविधा + - सार्वजनिक API + - समर्पित विनामूल्य प्लॅन + - मल्टीचेन समर्थन (१७+ ब्लॉकचेन) + - आर्काइव्ह नोड्स + - २४/७ Discord समर्थन + - २४/७ देखरेख आणि अलर्ट + - एकूण ९९.९% चा SLA + - क्रिप्टोमध्ये पैसे द्या + +- [**BlockDaemon**](https://blockdaemon.com/) + - [डॉक्स](https://ubiquity.docs.blockdaemon.com/) + - फायदे + - डॅशबोर्ड + - प्रति नोड आधारावर + - ॲनालिटिक्स + +- [**BlockPI**](https://blockpi.io/) + - [डॉक्स](https://docs.blockpi.io/) + - वैशिष्ट्ये + - मजबूत आणि वितरित नोड रचना + - ४० पर्यंत HTTPS आणि WSS एंडपॉइंट्स + - विनामूल्य साइनअप पॅकेज आणि मासिक पॅकेज + - ट्रेस पद्धत + आर्काइव्ह डेटा समर्थन + - ९० दिवसांपर्यंत वैधतेचे पॅकेजेस + - सानुकूल प्लॅन आणि पे ॲज यू गो पेमेंट + - क्रिप्टोमध्ये पैसे द्या + - थेट समर्थन आणि तांत्रिक समर्थन + +- [**Chainbase**](https://www.chainbase.com/) + - [डॉक्स](https://docs.chainbase.com) + - वैशिष्ट्ये + - अत्यंत उपलब्ध, जलद आणि स्केलेबल RPC सेवा + - मल्टी-चेन समर्थन + - विनामूल्य दर + - वापरकर्ता-अनुकूल डॅशबोर्ड + - RPC च्या पलीकडे ब्लॉकचेन डेटा सेवा प्रदान करते + +- [**Chainstack**](https://chainstack.com/) + - [डॉक्स](https://docs.chainstack.com/) + - वैशिष्ट्ये + - विनामूल्य सामायिक नोड्स + - सामायिक आर्काइव्ह नोड्स + - GraphQL समर्थन + - RPC आणि WSS एंडपॉइंट्स + - समर्पित पूर्ण आणि आर्काइव्ह नोड्स + - समर्पित उपयोजनांसाठी जलद सिंक वेळ + - तुमचे स्वतःचे क्लाउड आणा + - प्रति-तास किंमत + - थेट २४/७ समर्थन + +- [**dRPC**](https://drpc.org/) + - [डॉक्स](https://drpc.org/docs) + - NodeCloud: प्लग-एन-प्ले RPC इन्फ्रा $१० (USD) पासून सुरू—पूर्ण गती, कोणतीही मर्यादा नाही + - NodeCloud वैशिष्ट्ये: + - १८५ नेटवर्कसाठी API समर्थन + - ४०+ प्रदात्यांचा वितरित पूल + - नऊ (९) जिओ-क्लस्टर्ससह जागतिक व्याप्ती + - AI-चालित लोड बॅलेंसिंग प्रणाली + - पे-ॲज-यू-गो फ्लॅट किंमत—कोणतीही वाढ नाही, कोणतीही मुदत नाही, कोणतेही लॉक-इन नाही + - अमर्यादित की, ग्रॅन्युलर की ट्वीक्स, टीम भूमिका, फ्रंट-एंड संरक्षण + - प्रति पद्धत २० कॉम्प्युट युनिट्स (CUs) चा फ्लॅट रेट + - [सार्वजनिक एंडपॉइंट चेनलिस्ट](https://drpc.org/chainlist) + - [किंमत कॅल्क्युलेटर](https://drpc.org/pricing#calculator) + - NodeCore: पूर्ण नियंत्रणाची इच्छा असलेल्या संस्थांसाठी ओपन-सोर्स स्टॅक + +- [**GetBlock**](https://getblock.io/) + - [डॉक्स](https://getblock.io/docs/get-started/authentication-with-api-key/) + - वैशिष्ट्ये + - ४०+ ब्लॉकचेन नोड्समध्ये प्रवेश + - ४० हजार विनामूल्य दैनिक विनंत्या + - अमर्यादित API की + - १GB/सेकंद चा उच्च कनेक्शन वेग + - ट्रेस+आर्काइव्ह + - प्रगत ॲनालिटिक्स + - स्वयंचलित अपडेट्स + - तांत्रिक समर्थन + +- [**InfStones**](https://infstones.com/) + - वैशिष्ट्ये + - विनामूल्य टियर पर्याय + - आवश्यकतेनुसार स्केल करा + - ॲनालिटिक्स + - डॅशबोर्ड + - युनिक API एंडपॉइंट्स + - समर्पित पूर्ण नोड्स + - समर्पित उपयोजनांसाठी जलद सिंक वेळ + - थेट २४/७ समर्थन + - ५०+ ब्लॉकचेन नोड्समध्ये प्रवेश + +- [**Infura**](https://infura.io/) + - [डॉक्स](https://infura.io/docs) + - वैशिष्ट्ये + - विनामूल्य टियर पर्याय + - आवश्यकतेनुसार स्केल करा + - सशुल्क आर्काइव्हल डेटा + - थेट समर्थन + - डॅशबोर्ड + +- [**Kaleido**](https://kaleido.io/) + - [डॉक्स](https://docs.kaleido.io/) + - वैशिष्ट्ये + - विनामूल्य स्टार्टर टियर + - एक-क्लिक Ethereum नोड उपयोजन + - सानुकूल करण्यायोग्य क्लायंट आणि अल्गोरिदम (Geth, Quorum & Besu || PoA, IBFT & Raft) + - ५००+ प्रशासकीय आणि सेवा APIs + - Ethereum व्यवहार सबमिशनसाठी RESTful इंटरफेस (Apache Kafka समर्थित) + - इव्हेंट वितरणासाठी आउटबाउंड प्रवाह (Apache Kafka समर्थित) + - "ऑफचेन" आणि सहायक सेवांचा सखोल संग्रह (उदा. द्विपक्षीय एनक्रिप्टेड मेसेजिंग वाहतूक) + - प्रशासन आणि भूमिका-आधारित प्रवेश नियंत्रणासह सरळ नेटवर्क ऑनबोर्डिंग + - प्रशासक आणि अंतिम वापरकर्ते दोघांसाठी अत्याधुनिक वापरकर्ता व्यवस्थापन + - अत्यंत स्केलेबल, लवचिक, एंटरप्राइझ-ग्रेड पायाभूत सुविधा + - क्लाउड HSM खाजगी की व्यवस्थापन + - Ethereum मेननेट टेदरिंग + - ISO 27k आणि SOC 2, प्रकार 2 प्रमाणपत्रे + - डायनॅमिक रनटाइम कॉन्फिगरेशन (उदा. क्लाउड इंटिग्रेशन जोडणे, नोड इनग्रेस बदलणे, इ.) + - मल्टी-क्लाउड, मल्टी-रीजन आणि हायब्रीड उपयोजन ऑर्केस्ट्रेशनसाठी समर्थन + - सोपी तासाप्रमाणे SaaS-आधारित किंमत + - SLAs आणि २४x७ समर्थन + +- [**Lava Network**](https://www.lavanet.xyz/) + - [डॉक्स](https://docs.lavanet.xyz/) + - वैशिष्ट्ये + - विनामूल्य टेस्टनेट वापर + - उच्च अपटाइमसाठी विकेंद्रीकृत रिडंडन्सी + - ओपन-सोर्स + - पूर्णपणे विकेंद्रीकृत SDK + - Ethers.js एकत्रीकरण + - सहज प्रकल्प व्यवस्थापन इंटरफेस + - सहमती-आधारित डेटा अखंडता + - मल्टी-चेन समर्थन + +- [**Moralis**](https://moralis.io/) + - [डॉक्स](https://docs.moralis.io/) + - वैशिष्ट्ये + - विनामूल्य सामायिक नोड्स + - विनामूल्य सामायिक आर्काइव्ह नोड्स + - गोपनीयता केंद्रित (नो लॉग्स धोरण) + - क्रॉस चेन समर्थन + - आवश्यकतेनुसार स्केल करा + - डॅशबोर्ड + - युनिक Ethereum SDK + - युनिक API एंडपॉइंट्स + - थेट, तांत्रिक समर्थन + +- [**NodeReal MegaNode**](https://nodereal.io/) + - [डॉक्स](https://docs.nodereal.io/docs/introduction) + - वैशिष्ट्ये + - विश्वसनीय, जलद आणि स्केलेबल RPC API सेवा + - web3 विकासकांसाठी वर्धित API + - मल्टी-चेन समर्थन + - विनामूल्य सुरुवात करा + +- [**NOWNodes**](https://nownodes.io/) + - [डॉक्स](https://documenter.getpostman.com/view/13630829/TVmFkLwy) + - वैशिष्ट्ये + - ५०+ ब्लॉकचेन नोड्समध्ये प्रवेश + - विनामूल्य API की + - ब्लॉक एक्सप्लोरर्स + - API प्रतिसाद वेळ ⩽ १ सेकंद + - २४/७ समर्थन टीम + - वैयक्तिक खाते व्यवस्थापक + - सामायिक, आर्काइव्ह, बॅकअप आणि समर्पित नोड्स + +- [**Pocket Network**](https://www.pokt.network/) + - [डॉक्स](https://docs.pokt.network/home/) + - वैशिष्ट्ये + - विकेंद्रीकृत RPC प्रोटोकॉल आणि मार्केटप्लेस + - प्रतिदिन १ दशलक्ष विनंत्या विनामूल्य टियर (प्रति एंडपॉइंट, कमाल २) + - [सार्वजनिक एंडपॉइंट्स](https://docs.pokt.network/developers/public-endpoints) + - प्री-स्टेक+ प्रोग्राम (जर तुम्हाला दररोज १ दशलक्ष पेक्षा जास्त विनंत्यांची आवश्यकता असेल) + - १५+ ब्लॉकचेन समर्थित + - ६४००+ नोड्स ॲप्लिकेशन्सना सेवा देऊन POKT मिळवत आहेत + - आर्काइव्हल नोड, ट्रेसिंगसह आर्काइव्हल नोड, आणि टेस्टनेट नोड समर्थन + - Ethereum मेननेट नोड क्लायंट विविधता + - अपयशाचा एकही बिंदू नाही + - शून्य डाउनटाइम + - किफायतशीर जवळ-शून्य टोकनॉमिक्स (नेटवर्क बँडविड्थसाठी एकदा POKT स्टेक करा) + - कोणताही मासिक बुडीत खर्च नाही, आपल्या पायाभूत सुविधांना मालमत्तेत बदला + - प्रोटोकॉलमध्येच लोड-बॅलेंसिंग अंतर्भूत + - आवश्यकतेनुसार दररोज विनंत्यांची संख्या आणि प्रति तास नोड्सची संख्या अमर्यादपणे वाढवा + - सर्वात खाजगी, सेन्सॉरशिप-प्रतिरोधक पर्याय + - प्रत्यक्ष विकासक समर्थन + - [Pocket Portal](https://bit.ly/ETHorg_POKTportal) डॅशबोर्ड आणि ॲनालिटिक्स + +- [**QuickNode**](https://www.quicknode.com) + - [डॉक्स](https://www.quicknode.com/docs/) + - वैशिष्ट्ये + - २४/७ तांत्रिक समर्थन आणि डेव्ह Discord समुदाय + - जिओ-बॅलन्स्ड, मल्टी क्लाउड/मेटल, कमी-लेटन्सी नेटवर्क + - मल्टीचेन समर्थन (Optimism, Arbitrum, Polygon + ११ इतर) + - वेग आणि स्थिरतेसाठी मध्य-स्तर (कॉल रूटिंग, कॅशे, इंडेक्सिंग) + - वेबहूक्सद्वारे स्मार्ट-कॉन्ट्रॅक्ट देखरेख + - सहज डॅशबोर्ड, ॲनालिटिक्स सूट, RPC कंपोझर + - प्रगत सुरक्षा वैशिष्ट्ये (JWT, मास्किंग, व्हाइटलिस्टिंग) + - NFT डेटा आणि ॲनालिटिक्स API + - [SOC2 प्रमाणित](https://www.quicknode.com/security) + - डेव्हलपर्सपासून एंटरप्राइजेसपर्यंत योग्य + +- [**Rivet**](https://rivet.cloud/) + - [डॉक्स](https://rivet.readthedocs.io/en/latest/) + - वैशिष्ट्ये + - विनामूल्य टियर पर्याय + - आवश्यकतेनुसार स्केल करा + +- [**SenseiNode**](https://senseinode.com) + - [डॉक्स](https://docs.senseinode.com/) + - वैशिष्ट्ये + - समर्पित आणि सामायिक नोड्स + - डॅशबोर्ड + - लॅटिन अमेरिकेतील विविध ठिकाणी अनेक होस्टिंग प्रदात्यांवर AWS बाहेर होस्टिंग + - Prysm आणि Lighthouse क्लायंट + +- [**SettleMint**](https://console.settlemint.com/) + - [डॉक्स](https://docs.settlemint.com/) + - वैशिष्ट्ये + - विनामूल्य चाचणी + - आवश्यकतेनुसार स्केल करा + - GraphQL समर्थन + - RPC आणि WSS एंडपॉइंट्स + - समर्पित पूर्ण नोड्स + - तुमचे स्वतःचे क्लाउड आणा + - ॲनालिटिक्स साधने + - डॅशबोर्ड + - प्रति-तास किंमत + - थेट समर्थन + +- [**Tenderly**](https://tenderly.co/web3-gateway) + - [डॉक्स](https://docs.tenderly.co/web3-gateway/web3-gateway) + - वैशिष्ट्ये + - विनामूल्य टियरमध्ये दरमहा २५ दशलक्ष Tenderly युनिट्सचा समावेश + - ऐतिहासिक डेटामध्ये विनामूल्य प्रवेश + - ८x पर्यंत जलद रीड-हेवी वर्कलोड्स + - १००% सुसंगत रीड ॲक्सेस + - JSON-RPC एंडपॉइंट्स + - UI-आधारित RPC रिक्वेस्ट बिल्डर आणि रिक्वेस्ट प्रीव्ह्यू + - Tenderly च्या विकास, डीबगिंग आणि चाचणी साधनांसह घट्टपणे एकत्रित + - व्यवहार सिम्युलेशन + - वापर ॲनालिटिक्स आणि फिल्टरिंग + - सोपे ॲक्सेस की व्यवस्थापन + - चॅट, ईमेल आणि Discord द्वारे समर्पित अभियांत्रिकी समर्थन + +- [**Tokenview**](https://services.tokenview.io/) + - [डॉक्स](https://services.tokenview.io/docs?type=nodeService) + - वैशिष्ट्ये + - २४/७ तांत्रिक समर्थन आणि डेव्ह टेलिग्राम समुदाय + - मल्टीचेन समर्थन (Bitcoin, Ethereum, Tron, BNB Smart Chain, Ethereum Classic) + - RPC आणि WSS दोन्ही एंडपॉइंट्स वापरासाठी खुले आहेत + - आर्काइव्ह डेटा API मध्ये अमर्यादित प्रवेश + - रिक्वेस्ट एक्सप्लोरर आणि Mempool वॉचरसह डॅशबोर्ड + - NFT डेटा API आणि वेबहुक सूचना + - क्रिप्टोमध्ये पैसे द्या + - अतिरिक्त वर्तणूक आवश्यकतांसाठी बाह्य समर्थन + +- [**Watchdata**](https://watchdata.io/) + - [डॉक्स](https://docs.watchdata.io/) + - वैशिष्ट्ये + - डेटा विश्वसनीयता + - डाउनटाइमशिवाय अखंड कनेक्शन + - प्रक्रिया ऑटोमेशन + - विनामूल्य दर + - कोणत्याही वापरकर्त्यास अनुकूल अशा उच्च मर्यादा + - विविध नोड्ससाठी समर्थन + - संसाधन स्केलिंग + - उच्च प्रक्रिया गती + +- [**ZMOK**](https://zmok.io/) + - [डॉक्स](https://docs.zmok.io/) + - वैशिष्ट्ये + - सेवा म्हणून फ्रंट-रनिंग + - शोध/फिल्टरिंग पद्धतींसह जागतिक व्यवहार मेमपूल + - व्यवहार पाठवण्यासाठी अमर्याद TX फी आणि अमर्याद Gas + - नवीन ब्लॉक मिळवणे आणि ब्लॉकचेन वाचणे सर्वात जलद + - प्रति API कॉल सर्वोत्तम किंमतीची हमी + +- [**Zeeve**](https://www.zeeve.io/) + - [डॉक्स](https://www.zeeve.io/docs/) + - वैशिष्ट्ये + - एंटरप्राइझ-ग्रेड नो-कोड ऑटोमेशन प्लॅटफॉर्म जो ब्लॉकचेन नोड्स आणि नेटवर्क्सचे उपयोजन, देखरेख आणि व्यवस्थापन प्रदान करतो + - ३०+ समर्थित प्रोटोकॉल आणि एकत्रीकरण, आणि अधिक जोडले जात आहेत + - विकेंद्रीकृत स्टोरेज, विकेंद्रीकृत ओळख आणि ब्लॉकचेन लेजर डेटा APIs यांसारख्या वास्तविक-जगातील वापरासाठी मूल्यवर्धित वेब3 पायाभूत सुविधा सेवा + - २४/७ समर्थन आणि सक्रिय देखरेख नेहमी नोड्सचे आरोग्य सुनिश्चित करते. + - RPC एंडपॉइंट्स APIs साठी प्रमाणीकृत प्रवेश, सहज डॅशबोर्ड आणि ॲनालिटिक्ससह त्रास-मुक्त व्यवस्थापन ऑफर करतात. + - व्यवस्थापित क्लाउड आणि स्वतःचे क्लाउड आणा हे दोन्ही पर्याय निवडण्यासाठी प्रदान करते आणि AWS, Azure, Google Cloud, Digital Ocean आणि ऑन-प्रिमाइस यांसारख्या सर्व प्रमुख क्लाउड प्रदात्यांना समर्थन देते. + - आम्ही प्रत्येक वेळी तुमच्या वापरकर्त्याच्या सर्वात जवळच्या नोडला हिट करण्यासाठी इंटेलिजेंट राउटिंग वापरतो + +## पुढील वाचन {#further-reading} + +- [Ethereum नोड सेवांची सूची](https://ethereumnodes.com/) + +## संबंधित विषय {#related-topics} + +- [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [Alchemy वापरून Ethereum विकासाची सुरुवात करणे](/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/) +- [web3 आणि Alchemy वापरून व्यवहार पाठवण्यासाठी मार्गदर्शक](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) diff --git a/public/content/translations/mr/developers/docs/nodes-and-clients/run-a-node/index.md b/public/content/translations/mr/developers/docs/nodes-and-clients/run-a-node/index.md new file mode 100644 index 00000000000..022867271f0 --- /dev/null +++ b/public/content/translations/mr/developers/docs/nodes-and-clients/run-a-node/index.md @@ -0,0 +1,484 @@ +--- +title: "तुमचा स्वतःचा इथेरियम नोड सुरू करा" +description: "इथेरियम क्लायंटची तुमची स्वतःची इंस्टन्स चालवण्यासाठी सामान्य ओळख." +lang: mr +sidebarDepth: 2 +--- + +तुमचा स्वतःचा नोड चालवल्याने तुम्हाला विविध फायदे मिळतात, नवीन शक्यता उघडतात आणि इकोसिस्टमला सपोर्ट करण्यास मदत होते. हे पेज तुम्हाला तुमचा स्वतःचा नोड सुरू करण्यासाठी आणि इथेरियम व्यवहारांची पडताळणी करण्यात भाग घेण्यासाठी मार्गदर्शन करेल. + +लक्षात घ्या की [द मर्ज](/roadmap/merge) नंतर, इथेरियम नोड चालवण्यासाठी दोन क्लायंट्सची आवश्यकता आहे; एक **एक्झिक्यूशन लेयर (EL)** क्लायंट आणि एक **कन्सेन्सस लेयर (CL)** क्लायंट. हे पेज इथेरियम नोड चालवण्यासाठी या दोन क्लायंट्सना कसे इंस्टॉल, कॉन्फिगर आणि कनेक्ट करायचे हे दर्शवेल. + +## पूर्वतयारी {#prerequisites} + +इथेरियम नोड म्हणजे काय आणि तुम्ही क्लायंट का चालवू इच्छिता हे तुम्हाला समजले पाहिजे. हे [नोड्स आणि क्लायंट्स](/developers/docs/nodes-and-clients/) मध्ये समाविष्ट आहे. + +जर तुम्ही नोड चालवण्याच्या विषयासाठी नवीन असाल, किंवा कमी तांत्रिक मार्ग शोधत असाल, तर आम्ही शिफारस करतो की प्रथम [इथेरियम नोड चालवण्यावर](/run-a-node) आमची वापरकर्ता-अनुकूल ओळख तपासा. + +## एक दृष्टिकोन निवडणे {#choosing-approach} + +तुमचा नोड सुरू करण्याची पहिली पायरी म्हणजे तुमचा दृष्टिकोन निवडणे. आवश्यकता आणि विविध शक्यतांवर आधारित, तुम्हाला क्लायंट अंमलबजावणी (एक्झिक्यूशन आणि कन्सेन्सस क्लायंट दोन्ही), पर्यावरण (हार्डवेअर, सिस्टम) आणि क्लायंट सेटिंग्जसाठी पॅरामीटर्स निवडणे आवश्यक आहे. + +हे पेज तुम्हाला या निर्णयांमध्ये मार्गदर्शन करेल आणि तुमची इथेरियम इंस्टन्स चालवण्याचा सर्वात योग्य मार्ग शोधण्यात मदत करेल. + +क्लायंट अंमलबजावणीमधून निवडण्यासाठी, सर्व उपलब्ध मेननेटसाठी तयार [एक्झिक्यूशन क्लायंट्स](/developers/docs/nodes-and-clients/#execution-clients), [कन्सेन्सस क्लायंट्स](/developers/docs/nodes-and-clients/#consensus-clients) पहा आणि [क्लायंट डायव्हर्सिटी](/developers/docs/nodes-and-clients/client-diversity) बद्दल जाणून घ्या. + +क्लायंटच्या [आवश्यकता](#requirements) लक्षात घेऊन, तुमच्या स्वतःच्या [हार्डवेअरवर किंवा क्लाउडमध्ये](#local-vs-cloud) सॉफ्टवेअर चालवायचे की नाही हे ठरवा. + +पर्यावरण तयार केल्यानंतर, निवडलेले क्लायंट [नवशिक्यांसाठी अनुकूल इंटरफेससह](#automatized-setup) किंवा प्रगत पर्यायांसह टर्मिनल वापरून [मॅन्युअली](#manual-setup) इंस्टॉल करा. + +जेव्हा नोड चालू असतो आणि सिंक होत असतो, तेव्हा तुम्ही तो [वापरण्यासाठी](#using-the-node) तयार असता, परंतु त्याच्या [देखभालीकडे](#operating-the-node) लक्ष ठेवण्याची खात्री करा. + +![क्लायंट सेटअप](./diagram.png) + +### पर्यावरण आणि हार्डवेअर {#environment-and-hardware} + +#### स्थानिक किंवा क्लाउड {#local-vs-cloud} + +इथेरियम क्लायंट्स ग्राहक-श्रेणीच्या संगणकांवर चालू शकतात आणि त्यांना कोणत्याही विशेष हार्डवेअरची आवश्यकता नसते, उदाहरणार्थ मायनिंग मशीन्स. त्यामुळे, तुमच्या गरजेनुसार नोड तैनात करण्यासाठी तुमच्याकडे विविध पर्याय आहेत. +सोपे करण्यासाठी, आपण स्थानिक भौतिक मशीन आणि क्लाउड सर्व्हर दोन्हीवर नोड चालवण्याबद्दल विचार करूया: + +- क्लाउड + - प्रदाते उच्च सर्व्हर अपटाइम आणि स्थिर सार्वजनिक IP पत्ते देतात + - स्वतःचे तयार करण्यापेक्षा समर्पित किंवा व्हर्च्युअल सर्व्हर मिळवणे अधिक सोयीचे असू शकते + - यामध्ये तिसऱ्या पक्षावर - सर्व्हर प्रदात्यावर विश्वास ठेवण्याचा धोका असतो + - पूर्ण नोडसाठी आवश्यक असलेल्या स्टोरेज आकारामुळे, भाड्याने घेतलेल्या सर्व्हरची किंमत जास्त असू शकते +- स्वतःचे हार्डवेअर + - अधिक विश्वासहीन आणि सार्वभौम दृष्टिकोन + - एक वेळची गुंतवणूक + - पूर्व-कॉन्फिगर केलेले मशीन खरेदी करण्याचा पर्याय + - तुम्हाला भौतिकरित्या मशीन आणि नेटवर्किंग तयार करावे लागेल, त्याची देखभाल करावी लागेल आणि संभाव्यतः समस्यांचे निराकरण करावे लागेल + +दोन्ही पर्यायांचे वेगवेगळे फायदे वर सारांशित केले आहेत. जर तुम्ही क्लाउड सोल्यूशन शोधत असाल, तर अनेक पारंपरिक क्लाउड कॉम्प्युटिंग प्रदात्यांव्यतिरिक्त, नोड्स तैनात करण्यावर लक्ष केंद्रित करणाऱ्या सेवा देखील आहेत. होस्ट केलेल्या नोड्सवरील अधिक पर्यायांसाठी [सेवा म्हणून नोड्स](/developers/docs/nodes-and-clients/nodes-as-a-service/) पहा. + +#### हार्डवेअर {#hardware} + +तथापि, सेन्सॉरशिप-प्रतिरोधक, विकेंद्रित नेटवर्कने क्लाउड प्रदात्यांवर अवलंबून राहू नये. त्याऐवजी, तुमचा नोड तुमच्या स्वतःच्या स्थानिक हार्डवेअरवर चालवणे इकोसिस्टमसाठी अधिक आरोग्यदायी आहे. [अंदाज](https://www.ethernodes.org/networkType/cl/Hosting) दर्शवितात की नोड्सचा मोठा वाटा क्लाउडवर चालतो, जो अयशस्वी होण्याचा एकच बिंदू बनू शकतो. + +इथेरियम क्लायंट तुमच्या संगणक, लॅपटॉप, सर्व्हर किंवा अगदी सिंगल-बोर्ड संगणकावर चालू शकतात. तुमच्या वैयक्तिक संगणकावर क्लायंट चालवणे शक्य असले तरी, फक्त तुमच्या नोडसाठी एक समर्पित मशीन ठेवल्याने तुमच्या प्राथमिक संगणकावरील परिणाम कमी करताना त्याची कार्यक्षमता आणि सुरक्षितता लक्षणीयरीत्या वाढू शकते. + +तुमचे स्वतःचे हार्डवेअर वापरणे खूप सोपे असू शकते. अधिक तांत्रिक लोकांसाठी अनेक सोपे पर्याय तसेच प्रगत सेटअप आहेत. तर चला तुमच्या मशीनवर इथेरियम क्लायंट चालवण्यासाठीच्या आवश्यकता आणि साधनांवर नजर टाकूया. + +#### आवश्यकता {#requirements} + +हार्डवेअर आवश्यकता क्लायंटनुसार भिन्न असतात परंतु सामान्यतः त्या इतक्या जास्त नसतात कारण नोडला फक्त सिंक राहण्याची आवश्यकता असते. याला मायनिंगसोबत गोंधळात टाकू नका, ज्यासाठी खूप जास्त संगणकीय शक्तीची आवश्यकता असते. तथापि, अधिक शक्तिशाली हार्डवेअरसह सिंक वेळ आणि कार्यक्षमता सुधारते. + +कोणताही क्लायंट इंस्टॉल करण्यापूर्वी, कृपया खात्री करा की तुमच्या संगणकात तो चालवण्यासाठी पुरेशी संसाधने आहेत. तुम्ही खाली किमान आणि शिफारस केलेल्या आवश्यकता शोधू शकता. + +तुमच्या हार्डवेअरसाठी अडथळा मुख्यत्वे डिस्क स्पेस आहे. इथेरियम ब्लॉकचेन सिंक करणे खूप इनपुट/आउटपुट गहन आहे आणि त्यासाठी खूप जागेची आवश्यकता आहे. सिंक्रोनाइझेशननंतरही शेकडो GB मोकळी जागा असलेली **सॉलिड-स्टेट ड्राइव्ह (SSD)** असणे उत्तम. + +डेटाबेसचा आकार आणि सुरुवातीच्या सिंक्रोनाइझेशनची गती निवडलेल्या क्लायंट, त्याचे कॉन्फिगरेशन आणि [सिंक स्ट्रॅटेजी](/developers/docs/nodes-and-clients/#sync-modes) यावर अवलंबून असते. + +तसेच खात्री करा की तुमचे इंटरनेट कनेक्शन [बँडविड्थ कॅप](https://wikipedia.org/wiki/Data_cap) द्वारे मर्यादित नाही. अनमीटर केलेले कनेक्शन वापरण्याची शिफारस केली जाते कारण सुरुवातीची सिंक आणि नेटवर्कवर प्रसारित केलेला डेटा तुमची मर्यादा ओलांडू शकतो. + +##### ऑपरेटिंग सिस्टम + +सर्व क्लायंट प्रमुख ऑपरेटिंग सिस्टम - लिनक्स, मॅकओएस, विंडोजला सपोर्ट करतात. याचा अर्थ तुम्ही नियमित डेस्कटॉप किंवा सर्व्हर मशीन्सवर तुम्हाला सर्वात योग्य असलेल्या ऑपरेटिंग सिस्टम (OS) सह नोड्स चालवू शकता. संभाव्य समस्या आणि सुरक्षा भेद्यता टाळण्यासाठी तुमची OS अद्ययावत असल्याची खात्री करा. + +##### किमान आवश्यकता + +- 2+ कोर असलेले CPU +- 8 GB रॅम +- 2TB SSD +- 10+ MBit/s बँडविड्थ + +##### शिफारस केलेले तपशील + +- 4+ कोर असलेले जलद CPU +- 16 GB+ रॅम +- 2+TB सह जलद SSD +- 25+ MBit/s बँडविड्थ + +तुम्ही निवडलेला सिंक मोड आणि क्लायंट स्पेस आवश्यकतांवर परिणाम करेल, परंतु आम्ही खाली प्रत्येक क्लायंटसाठी तुम्हाला आवश्यक असलेल्या डिस्क स्पेसचा अंदाज लावला आहे. + +| क्लायंट | डिस्क आकार (स्नॅप सिंक) | डिस्क आकार (पूर्ण संग्रहण) | +| ---------- | ------------------------------------------ | --------------------------------------------- | +| Besu | 800GB+ | 12TB+ | +| Erigon | लागू नाही | 2.5TB+ | +| Geth | 500GB+ | 12TB+ | +| Nethermind | 500GB+ | 12TB+ | +| Reth | लागू नाही | 2.2TB+ | + +- टीप: Erigon आणि Reth स्नॅप सिंक ऑफर करत नाहीत, परंतु फुल प्रुनिंग शक्य आहे (~2TB Erigon साठी, ~1.2TB Reth साठी) + +कन्सेन्सस क्लायंट्ससाठी, जागेची आवश्यकता क्लायंट अंमलबजावणी आणि सक्षम केलेल्या वैशिष्ट्यांवर (उदा. व्हॅलिडेटर स्लॅशर) देखील अवलंबून असते परंतु सामान्यतः बीकन डेटासाठी आवश्यक असलेल्या आणखी 200GB ची गणना करा. मोठ्या संख्येने व्हॅलिडेटर्ससह, बँडविड्थ लोड देखील वाढतो. तुम्ही [या विश्लेषणात कन्सेन्सस क्लायंट आवश्यकतांवरील तपशील](https://mirror.xyz/0x934e6B4D7eee305F8C9C42b46D6EEA09CcFd5EDc/b69LBy8p5UhcGJqUAmT22dpvdkU-Pulg2inrhoS9Mbc) शोधू शकता. + +#### प्लग-अँड-प्ले सोल्यूशन्स {#plug-and-play} + +तुमच्या स्वतःच्या हार्डवेअरसह नोड चालवण्याचा सर्वात सोपा पर्याय म्हणजे प्लग-अँड-प्ले बॉक्सेस वापरणे. विक्रेत्यांकडून पूर्व-कॉन्फिगर केलेली मशीन्स सर्वात सरळ अनुभव देतात: ऑर्डर करा, कनेक्ट करा, चालवा. सॉफ्टवेअरचे निरीक्षण आणि नियंत्रण करण्यासाठी एक अंतर्ज्ञानी मार्गदर्शक आणि डॅशबोर्डसह सर्वकाही पूर्व-कॉन्फिगर केलेले आहे आणि आपोआप चालते. + +- [DappNode](https://dappnode.io/) +- [Avado](https://ava.do/) + +#### सिंगल-बोर्ड संगणकावर इथेरियम {#ethereum-on-a-single-board-computer} + +इथेरियम नोड चालवण्याचा एक सोपा आणि स्वस्त मार्ग म्हणजे सिंगल-बोर्ड संगणक वापरणे, अगदी रास्पबेरी पाय सारख्या ARM आर्किटेक्चरसह. ARM वर इथेरियम रास्पबेरी पाय आणि इतर ARM बोर्डसाठी अनेक एक्झिक्यूशन आणि कन्सेन्सस क्लायंटच्या चालवण्यास-सोप्या प्रतिमा प्रदान करते. + +यांसारखी लहान, परवडणारी आणि कार्यक्षम उपकरणे घरी नोड चालवण्यासाठी आदर्श आहेत परंतु त्यांची मर्यादित कार्यक्षमता लक्षात ठेवा. + +## नोड सुरू करणे {#spinning-up-node} + +वास्तविक क्लायंट सेटअप स्वयंचलित लॉन्चर्सद्वारे किंवा मॅन्युअली, क्लायंट सॉफ्टवेअर थेट सेट करून केले जाऊ शकते. + +कमी प्रगत वापरकर्त्यांसाठी, शिफारस केलेला दृष्टिकोन म्हणजे लॉन्चर वापरणे, एक सॉफ्टवेअर जे तुम्हाला इंस्टॉलेशनमध्ये मार्गदर्शन करते आणि क्लायंट सेटअप प्रक्रिया स्वयंचलित करते. तथापि, जर तुम्हाला टर्मिनल वापरण्याचा काही अनुभव असेल, तर मॅन्युअल सेटअपसाठीच्या पायऱ्या फॉलो करणे सोपे असावे. + +### मार्गदर्शित सेटअप {#automatized-setup} + +अनेक वापरकर्ता-अनुकूल प्रकल्पांचा उद्देश क्लायंट सेट करण्याचा अनुभव सुधारणे आहे. हे लॉन्चर्स स्वयंचलित क्लायंट इंस्टॉलेशन आणि कॉन्फिगरेशन प्रदान करतात, काही तर मार्गदर्शित सेटअप आणि क्लायंटच्या देखरेखीसाठी ग्राफिकल इंटरफेस देखील देतात. + +खाली काही प्रकल्प आहेत जे तुम्हाला फक्त काही क्लिक्सने क्लायंट इंस्टॉल आणि नियंत्रित करण्यास मदत करू शकतात: + +- [DappNode](https://docs.dappnode.io/docs/user/getting-started/choose-your-path) - DappNode फक्त विक्रेत्याकडून मशीनसह येत नाही. सॉफ्टवेअर, वास्तविक नोड लॉन्चर आणि अनेक वैशिष्ट्यांसह नियंत्रण केंद्र कोणत्याही हार्डवेअरवर वापरले जाऊ शकते. +- [EthPillar](https://www.coincashew.com/coins/overview-eth/ethpillar) - पूर्ण नोड सेट करण्याचा सर्वात जलद आणि सोपा मार्ग. वन-लाइनर सेटअप टूल आणि नोड व्यवस्थापन TUI. मोफत. ओपन सोर्स. सोलो स्टेकर्सद्वारे इथेरियमसाठी सार्वजनिक वस्तू. ARM64 आणि AMD64 सपोर्ट. +- [eth-docker](https://eth-docker.net/) - डॉकर वापरून स्वयंचलित सेटअप जो सोपे आणि सुरक्षित स्टेकिंगवर लक्ष केंद्रित करतो, ज्यासाठी मूलभूत टर्मिनल आणि डॉकर ज्ञानाची आवश्यकता आहे, थोड्या अधिक प्रगत वापरकर्त्यांसाठी शिफारस केलेले. +- [Stereum](https://stereum-dev.github.io/ethereum-node-web-docs) - GUI सेटअप मार्गदर्शक, नियंत्रण केंद्र आणि इतर अनेक वैशिष्ट्यांसह SSH कनेक्शनद्वारे रिमोट सर्व्हरवर क्लायंट इंस्टॉल करण्यासाठी लॉन्चर. +- [NiceNode](https://www.nicenode.xyz/) - तुमच्या संगणकावर नोड चालवण्यासाठी सरळ वापरकर्ता अनुभवासह लॉन्चर. फक्त क्लायंट निवडा आणि त्यांना काही क्लिक्सने सुरू करा. अजूनही विकासात आहे. +- [Sedge](https://docs.sedge.nethermind.io/docs/intro) - नोड सेटअप टूल जे CLI विझार्ड वापरून स्वयंचलितपणे डॉकर कॉन्फिगरेशन तयार करते. Nethermind द्वारे Go मध्ये लिहिलेले. + +### मॅन्युअल क्लायंट सेटअप {#manual-setup} + +दुसरा पर्याय म्हणजे क्लायंट सॉफ्टवेअर मॅन्युअली डाउनलोड करणे, सत्यापित करणे आणि कॉन्फिगर करणे. जरी काही क्लायंट ग्राफिकल इंटरफेस ऑफर करत असले तरी, मॅन्युअल सेटअपसाठी अजूनही टर्मिनलसह मूलभूत कौशल्यांची आवश्यकता असते परंतु ते अधिक अष्टपैलुत्व प्रदान करते. + +आधी सांगितल्याप्रमाणे, तुमचा स्वतःचा इथेरियम नोड सेट करण्यासाठी कन्सेन्सस आणि एक्झिक्यूशन क्लायंटची एक जोडी चालवणे आवश्यक असेल. काही क्लायंटमध्ये दुसऱ्या प्रकारचा लाईट क्लायंट समाविष्ट असू शकतो आणि इतर कोणत्याही सॉफ्टवेअरची आवश्यकता नसताना सिंक होऊ शकतो. तथापि, पूर्ण विश्वासहीन पडताळणीसाठी दोन्ही अंमलबजावणी आवश्यक आहेत. + +#### क्लायंट सॉफ्टवेअर मिळवणे {#getting-the-client} + +प्रथम, तुम्हाला तुमचे पसंतीचे [एक्झिक्यूशन क्लायंट](/developers/docs/nodes-and-clients/#execution-clients) आणि [कन्सेन्सस क्लायंट](/developers/docs/nodes-and-clients/#consensus-clients) सॉफ्टवेअर मिळवणे आवश्यक आहे. + +तुम्ही फक्त एक एक्झिक्युटेबल ॲप्लिकेशन किंवा इंस्टॉलेशन पॅकेज डाउनलोड करू शकता जे तुमच्या ऑपरेटिंग सिस्टम आणि आर्किटेक्चरला अनुकूल आहे. डाउनलोड केलेल्या पॅकेजेसच्या स्वाक्षरी आणि चेकसमची नेहमी पडताळणी करा. काही क्लायंट सोप्या इंस्टॉलेशन आणि अपडेट्ससाठी रेपॉजिटरीज किंवा डॉकर प्रतिमा देखील ऑफर करतात. सर्व क्लायंट ओपन सोर्स आहेत, त्यामुळे तुम्ही त्यांना सोर्समधून देखील तयार करू शकता. ही एक अधिक प्रगत पद्धत आहे, परंतु काही प्रकरणांमध्ये, ती आवश्यक असू शकते. + +प्रत्येक क्लायंट इंस्टॉल करण्याच्या सूचना वरील क्लायंट सूचीमध्ये लिंक केलेल्या माहितीमध्ये दिल्या आहेत. + +येथे क्लायंटची रिलीज पेजेस आहेत जिथे तुम्ही त्यांचे पूर्व-निर्मित बायनरीज किंवा इंस्टॉलेशनवरील सूचना शोधू शकता: + +##### एक्झिक्यूशन क्लायंट्स + +- [Besu](https://github.com/hyperledger/besu/releases) +- [Erigon](https://github.com/ledgerwatch/erigon/releases) +- [Geth](https://geth.ethereum.org/downloads/) +- [Nethermind](https://downloads.nethermind.io/) +- [Reth](https://reth.rs/installation/installation.html) + +हे देखील लक्षात घेण्यासारखे आहे की क्लायंट विविधता ही [एक्झिक्यूशन लेयरवरील एक समस्या आहे](/developers/docs/nodes-and-clients/client-diversity/#execution-layer). वाचकांनी अल्पसंख्याक एक्झिक्यूशन क्लायंट चालवण्याचा विचार करावा अशी शिफारस केली जाते. + +##### कन्सेन्सस क्लायंट्स + +- [Lighthouse](https://github.com/sigp/lighthouse/releases/latest) +- [Lodestar](https://chainsafe.github.io/lodestar/run/getting-started/installation#build-from-source/) (पूर्व-निर्मित बायनरी प्रदान करत नाही, फक्त एक डॉकर प्रतिमा किंवा सोर्समधून तयार केली जाते) +- [Nimbus](https://github.com/status-im/nimbus-eth2/releases/latest) +- [Prysm](https://github.com/prysmaticlabs/prysm/releases/latest) +- [Teku](https://github.com/ConsenSys/teku/releases) + +व्हॅलिडेटर्स चालवणाऱ्या कन्सेन्सस नोड्ससाठी [क्लायंट विविधता](/developers/docs/nodes-and-clients/client-diversity/) महत्त्वपूर्ण आहे. जर बहुसंख्य व्हॅलिडेटर्स एकच क्लायंट अंमलबजावणी चालवत असतील, तर नेटवर्क सुरक्षितता धोक्यात आहे. त्यामुळे अल्पसंख्याक क्लायंट निवडण्याचा विचार करण्याची शिफारस केली जाते. + +[नवीनतम नेटवर्क क्लायंट वापर पहा](https://clientdiversity.org/) आणि [क्लायंट विविधतेबद्दल](/developers/docs/nodes-and-clients/client-diversity) अधिक जाणून घ्या. + +##### सॉफ्टवेअरची पडताळणी + +इंटरनेटवरून सॉफ्टवेअर डाउनलोड करताना, त्याच्या अखंडतेची पडताळणी करण्याची शिफारस केली जाते. ही पायरी वैकल्पिक आहे परंतु विशेषतः इथेरियम क्लायंटसारख्या महत्त्वपूर्ण पायाभूत सुविधांच्या बाबतीत, संभाव्य हल्ला वेक्टर्सबद्दल जागरूक असणे आणि ते टाळणे महत्त्वाचे आहे. जर तुम्ही पूर्व-निर्मित बायनरी डाउनलोड केली असेल, तर तुम्हाला त्यावर विश्वास ठेवावा लागेल आणि धोका पत्करावा लागेल की एखादा आक्रमणकर्ता एक्झिक्युटेबलला दुर्भावनापूर्ण एक्झिक्युटेबलने बदलू शकतो. + +डेव्हलपर्स त्यांच्या PGP कीसह रिलीज केलेल्या बायनरीजवर स्वाक्षरी करतात जेणेकरून तुम्ही क्रिप्टोग्राफिकदृष्ट्या सत्यापित करू शकता की तुम्ही तेच सॉफ्टवेअर चालवत आहात जे त्यांनी तयार केले आहे. तुम्हाला फक्त डेव्हलपर्सद्वारे वापरल्या जाणाऱ्या सार्वजनिक की मिळवणे आवश्यक आहे, ज्या क्लायंट रिलीज पेजेसवर किंवा माहितीमध्ये आढळू शकतात. क्लायंट रिलीज आणि त्याची स्वाक्षरी डाउनलोड केल्यानंतर, तुम्ही PGP अंमलबजावणी वापरू शकता, उदा., [GnuPG](https://gnupg.org/download/index.html) त्यांची सहजपणे पडताळणी करण्यासाठी. [linux](https://www.tecmint.com/verify-pgp-signature-downloaded-software/) किंवा [Windows/MacOS](https://freedom.press/training/verifying-open-source-software/) वर `gpg` वापरून ओपन-सोर्स सॉफ्टवेअरची पडताळणी करण्यावरील ट्यूटोरियल पहा. + +पडताळणीचा आणखी एक प्रकार म्हणजे तुम्ही डाउनलोड केलेल्या सॉफ्टवेअरचा हॅश, एक अद्वितीय क्रिप्टोग्राफिक फिंगरप्रिंट, डेव्हलपर्सद्वारे प्रदान केलेल्या हॅशशी जुळतो याची खात्री करणे. हे PGP वापरण्यापेक्षाही सोपे आहे, आणि काही क्लायंट फक्त हाच पर्याय देतात. फक्त डाउनलोड केलेल्या सॉफ्टवेअरवर हॅश फंक्शन चालवा आणि रिलीज पेजवरील हॅशशी त्याची तुलना करा. उदाहरणार्थ: + +```sh +sha256sum teku-22.6.1.tar.gz + +9b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde +``` + +#### क्लायंट सेटअप {#client-setup} + +क्लायंट सॉफ्टवेअर इंस्टॉल, डाउनलोड किंवा कंपाईल केल्यानंतर, तुम्ही ते चालवण्यासाठी तयार आहात. याचा अर्थ फक्त एवढाच आहे की ते योग्य कॉन्फिगरेशनसह कार्यान्वित केले जावे. क्लायंट समृद्ध कॉन्फिगरेशन पर्याय देतात, जे विविध वैशिष्ट्ये सक्षम करू शकतात. + +चला अशा पर्यायांपासून सुरुवात करूया जे क्लायंटची कार्यक्षमता आणि डेटा वापरावर लक्षणीय परिणाम करू शकतात. [सिंक मोड्स](/developers/docs/nodes-and-clients/#sync-modes) ब्लॉकचेन डेटा डाउनलोड आणि सत्यापित करण्याच्या विविध पद्धतींचे प्रतिनिधित्व करतात. नोड सुरू करण्यापूर्वी, तुम्ही कोणते नेटवर्क आणि सिंक मोड वापरायचा हे ठरवावे. विचारात घेण्यासारख्या सर्वात महत्त्वाच्या गोष्टी म्हणजे डिस्क स्पेस आणि क्लायंटला लागणारा सिंक वेळ. क्लायंटच्या डॉक्सकडे लक्ष द्या की कोणता सिंक मोड डीफॉल्ट आहे हे निर्धारित करण्यासाठी. जर ते तुम्हाला अनुकूल नसेल, तर सुरक्षितता, उपलब्ध डेटा आणि खर्चाच्या पातळीवर आधारित दुसरा निवडा. सिंक्रोनाइझेशन अल्गोरिदम व्यतिरिक्त, तुम्ही विविध प्रकारच्या जुन्या डेटाचे प्रुनिंग देखील सेट करू शकता. प्रुनिंग कालबाह्य डेटा हटविण्यास सक्षम करते, म्हणजेच, अलीकडील ब्लॉक्समधून पोहोचण्यायोग्य नसलेले स्टेट ट्री नोड्स काढणे. + +इतर मूलभूत कॉन्फिगरेशन पर्यायांमध्ये, उदा., नेटवर्क निवडणे - मेननेट किंवा टेस्टनेट, RPC किंवा वेबसॉकेट्ससाठी HTTP एंडपॉइंट सक्षम करणे इत्यादी. तुम्ही क्लायंटच्या माहितीमध्ये सर्व वैशिष्ट्ये आणि पर्याय शोधू शकता. विविध क्लायंट कॉन्फिगरेशन्स थेट CLI किंवा कॉन्फिग फाइलमध्ये संबंधित फ्लॅगसह क्लायंट चालवून सेट केले जाऊ शकतात. प्रत्येक क्लायंट थोडा वेगळा आहे; कृपया कॉन्फिग पर्यायांवरील तपशिलांसाठी नेहमी त्याच्या अधिकृत माहिती किंवा मदत पेजचा संदर्भ घ्या. + +चाचणीच्या उद्देशाने, तुम्ही टेस्टनेट नेटवर्कपैकी एकावर क्लायंट चालवणे पसंत करू शकता. [सपोर्टेड नेटवर्कचे विहंगावलोकन पहा](/developers/docs/nodes-and-clients/#execution-clients). + +मूलभूत कॉन्फिगरेशनसह एक्झिक्यूशन क्लायंट चालवण्याची उदाहरणे पुढील विभागात आढळू शकतात. + +#### एक्झिक्यूशन क्लायंट सुरू करणे {#starting-the-execution-client} + +इथेरियम क्लायंट सॉफ्टवेअर सुरू करण्यापूर्वी, तुमचे पर्यावरण तयार आहे की नाही याची शेवटची तपासणी करा. उदाहरणार्थ, खात्री करा: + +- निवडलेले नेटवर्क आणि सिंक मोड लक्षात घेता पुरेशी डिस्क जागा आहे. +- मेमरी आणि CPU इतर प्रोग्राम्समुळे थांबलेले नाही. +- ऑपरेटिंग सिस्टम नवीनतम आवृत्तीवर अपडेट केलेली आहे. +- सिस्टममध्ये योग्य वेळ आणि तारीख आहे. +- तुमचा राउटर आणि फायरवॉल लिसनिंग पोर्ट्सवर कनेक्शन स्वीकारतात. डीफॉल्टनुसार इथेरियम क्लायंट एक लिसनर (TCP) पोर्ट आणि एक डिस्कव्हरी (UDP) पोर्ट वापरतात, दोन्ही डीफॉल्टनुसार 30303 वर. + +सर्व काही योग्यरित्या कार्य करत असल्याची खात्री करण्यासाठी प्रथम तुमचा क्लायंट टेस्टनेटवर चालवा. + +तुम्हाला कोणत्याही क्लायंट सेटिंग्जची घोषणा करावी लागेल जी सुरुवातीला डीफॉल्ट नाहीत. तुम्ही तुमच्या पसंतीचे कॉन्फिगरेशन घोषित करण्यासाठी फ्लॅग किंवा कॉन्फिग फाइल वापरू शकता. प्रत्येक क्लायंटचे वैशिष्ट्यांचा संच आणि कॉन्फिग सिंटॅक्स भिन्न असतो. विशिष्ट माहितीसाठी तुमच्या क्लायंटची माहिती तपासा. + +एक्झिक्यूशन आणि कन्सेन्सस क्लायंट [इंजिन API](https://github.com/ethereum/execution-apis/tree/main/src/engine) मध्ये निर्दिष्ट केलेल्या प्रमाणित एंडपॉइंटद्वारे संवाद साधतात. कन्सेन्सस क्लायंटशी कनेक्ट करण्यासाठी, एक्झिक्यूशन क्लायंटने ज्ञात मार्गावर एक [`jwtsecret`](https://jwt.io/) तयार करणे आवश्यक आहे. सुरक्षितता आणि स्थिरतेच्या कारणास्तव, क्लायंट एकाच मशीनवर चालले पाहिजेत आणि दोन्ही क्लायंटना हा मार्ग माहित असणे आवश्यक आहे कारण तो त्यांच्या दरम्यान स्थानिक RPC कनेक्शन प्रमाणित करण्यासाठी वापरला जातो. एक्झिक्यूशन क्लायंटने प्रमाणित API साठी एक लिसनिंग पोर्ट देखील परिभाषित करणे आवश्यक आहे. + +हे टोकन क्लायंट सॉफ्टवेअरद्वारे स्वयंचलितपणे तयार केले जाते, परंतु काही प्रकरणांमध्ये, तुम्हाला ते स्वतः करावे लागेल. तुम्ही ते [OpenSSL](https://www.openssl.org/) वापरून तयार करू शकता: + +```sh +openssl rand -hex 32 > jwtsecret +``` + +#### एक्झिक्यूशन क्लायंट चालवणे {#running-an-execution-client} + +हा विभाग तुम्हाला एक्झिक्यूशन क्लायंट सुरू करण्यासाठी मार्गदर्शन करेल. हे फक्त मूलभूत कॉन्फिगरेशनचे उदाहरण म्हणून काम करते, जे क्लायंटला या सेटिंग्जसह सुरू करेल: + +- कनेक्ट करण्यासाठी नेटवर्क निर्दिष्ट करते, आमच्या उदाहरणांमध्ये मेननेट + - त्याऐवजी तुम्ही तुमच्या सेटअपच्या प्राथमिक चाचणीसाठी [टेस्टनेटपैकी एक](/developers/docs/networks/) निवडू शकता +- डेटा डिरेक्टरी परिभाषित करते, जिथे ब्लॉकचेनसह सर्व डेटा संग्रहित केला जाईल + - मार्ग एका वास्तविक मार्गाने बदलण्याची खात्री करा, उदा., तुमच्या बाह्य ड्राइव्हकडे निर्देश करणारा +- क्लायंटशी संवाद साधण्यासाठी इंटरफेस सक्षम करते + - कन्सेन्सस क्लायंटशी संवाद साधण्यासाठी JSON-RPC आणि इंजिन API सह +- प्रमाणित API साठी `jwtsecret` चा मार्ग परिभाषित करते + - उदाहरण मार्ग एका वास्तविक मार्गाने बदलण्याची खात्री करा ज्यावर क्लायंटद्वारे प्रवेश केला जाऊ शकतो, उदा., `/tmp/jwtsecret` + +कृपया लक्षात ठेवा की हे फक्त एक मूलभूत उदाहरण आहे, इतर सर्व सेटिंग्ज डीफॉल्टवर सेट केल्या जातील. डीफॉल्ट मूल्ये, सेटिंग्ज आणि वैशिष्ट्यांबद्दल अधिक जाणून घेण्यासाठी प्रत्येक क्लायंटच्या माहितीकडे लक्ष द्या. अधिक वैशिष्ट्यांसाठी, उदाहरणार्थ व्हॅलिडेटर्स चालवण्यासाठी, देखरेखीसाठी इत्यादी, कृपया विशिष्ट क्लायंटच्या माहितीचा संदर्भ घ्या. + +> लक्षात घ्या की उदाहरणांमधील बॅकस्लॅशेस `` केवळ स्वरूपन उद्देशांसाठी आहेत; कॉन्फिग फ्लॅग एकाच ओळीत परिभाषित केले जाऊ शकतात. + +##### Besu चालवणे + +हे उदाहरण Besu मेननेटवर सुरू करते, ब्लॉकचेन डेटा डीफॉल्ट स्वरूपात `/data/ethereum` येथे संग्रहित करते, कन्सेन्सस क्लायंट कनेक्ट करण्यासाठी JSON-RPC आणि इंजिन RPC सक्षम करते. इंजिन API `jwtsecret` टोकनसह प्रमाणित आहे आणि केवळ `localhost` वरून कॉलला परवानगी आहे. + +```sh +besu --network=mainnet \ + --data-path=/data/ethereum \ + --rpc-http-enabled=true \ + --engine-rpc-enabled=true \ + --engine-host-allowlist="*" \ + --engine-jwt-enabled=true \ + --engine-jwt-secret=/path/to/jwtsecret +``` + +Besu एक लॉन्चर पर्यायासह देखील येतो जो अनेक प्रश्न विचारेल आणि कॉन्फिग फाइल तयार करेल. याचा वापर करून इंटरएक्टिव्ह लॉन्चर चालवा: + +```sh +besu --Xlauncher +``` + +[Besu चे माहिती](https://besu.hyperledger.org/public-networks/get-started/start-node/) मध्ये अतिरिक्त पर्याय आणि कॉन्फिगरेशन तपशील आहेत. + +##### Erigon चालवणे + +हे उदाहरण मेननेटवर Erigon सुरू करते, ब्लॉकचेन डेटा `/data/ethereum` येथे संग्रहित करते, JSON-RPC सक्षम करते, कोणत्या नेमस्पेसेसना परवानगी आहे हे परिभाषित करते आणि `jwtsecret` मार्गाद्वारे परिभाषित केलेल्या कन्सेन्सस क्लायंटला कनेक्ट करण्यासाठी प्रमाणीकरण सक्षम करते. + +```sh +erigon --chain mainnet \ + --datadir /data/ethereum \ + --http --http.api=engine,eth,web3,net \ + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +Erigon डीफॉल्टनुसार 8GB HDD सह पूर्ण सिंक करतो ज्यामुळे 2TB पेक्षा जास्त संग्रहण डेटा तयार होईल. खात्री करा की `datadir` पुरेशा मोकळ्या जागेसह डिस्ककडे निर्देश करत आहे किंवा `--prune` फ्लॅग पहा जो विविध प्रकारचा डेटा कमी करू शकतो. अधिक जाणून घेण्यासाठी Erigon चे `--help` तपासा. + +##### Geth चालवणे + +हे उदाहरण मेननेटवर Geth सुरू करते, ब्लॉकचेन डेटा `/data/ethereum` येथे संग्रहित करते, JSON-RPC सक्षम करते आणि कोणत्या नेमस्पेसेसना परवानगी आहे हे परिभाषित करते. हे कन्सेन्सस क्लायंट कनेक्ट करण्यासाठी प्रमाणीकरण देखील सक्षम करते ज्यासाठी `jwtsecret` चा मार्ग आवश्यक आहे आणि तसेच कोणत्या कनेक्शन्सना परवानगी आहे हे परिभाषित करणारा पर्याय, आमच्या उदाहरणात फक्त `localhost` वरून. + +```sh +geth --mainnet \ + --datadir "/data/ethereum" \ + --http --authrpc.addr localhost \ + --authrpc.vhosts="localhost" \ + --authrpc.port 8551 + --authrpc.jwtsecret=/path/to/jwtsecret +``` + +सर्व कॉन्फिगरेशन पर्यायांसाठी [डॉक्स तपासा](https://geth.ethereum.org/docs/fundamentals/command-line-options) आणि [कन्सेन्सस क्लायंटसह Geth चालवण्याबद्दल](https://geth.ethereum.org/docs/getting-started/consensus-clients) अधिक जाणून घ्या. + +##### Nethermind चालवणे + +Nethermind विविध [इंस्टॉलेशन पर्याय](https://docs.nethermind.io/get-started/installing-nethermind) ऑफर करते. पॅकेज विविध बायनरीजसह येते, ज्यामध्ये मार्गदर्शित सेटअपसह लॉन्चर समाविष्ट आहे, जे तुम्हाला परस्परसंवादीपणे कॉन्फिगरेशन तयार करण्यात मदत करेल. वैकल्पिकरित्या, तुम्हाला रनर मिळेल जो स्वतः एक्झिक्युटेबल आहे आणि तुम्ही फक्त कॉन्फिग फ्लॅगसह चालवू शकता. JSON-RPC डीफॉल्टनुसार सक्षम आहे. + +```sh +Nethermind.Runner --config mainnet \ + --datadir /data/ethereum \ + --JsonRpc.JwtSecretFile=/path/to/jwtsecret +``` + +Nethermind डॉक्स Nethermind कन्सेन्सस क्लायंटसह चालवण्यावर [संपूर्ण मार्गदर्शक](https://docs.nethermind.io/get-started/running-node/) ऑफर करते. + +एक एक्झिक्यूशन क्लायंट त्याची मुख्य कार्ये, निवडलेले एंडपॉइंट्स सुरू करेल आणि पीअर्स शोधण्यास सुरुवात करेल. यशस्वीरित्या पीअर्स शोधल्यानंतर, क्लायंट सिंक्रोनाइझेशन सुरू करतो. एक्झिक्यूशन क्लायंट कन्सेन्सस क्लायंटकडून कनेक्शनची प्रतीक्षा करेल. एकदा क्लायंट यशस्वीरित्या वर्तमान स्थितीशी सिंक झाल्यावर वर्तमान ब्लॉकचेन डेटा उपलब्ध होईल. + +##### Reth चालवणे + +हे उदाहरण मेननेटवर Reth सुरू करते, डीफॉल्ट डेटा स्थान वापरून. `jwtsecret` मार्गाद्वारे परिभाषित केलेल्या कन्सेन्सस क्लायंटला कनेक्ट करण्यासाठी JSON-RPC आणि इंजिन RPC प्रमाणीकरण सक्षम करते, ज्यामध्ये केवळ `localhost` वरून कॉलला परवानगी आहे. + +```sh +reth node \ + --authrpc.jwtsecret /path/to/jwtsecret \ + --authrpc.addr 127.0.0.1 \ + --authrpc.port 8551 +``` + +डीफॉल्ट डेटा डिरेक्टरीज बद्दल अधिक जाणून घेण्यासाठी [Reth कॉन्फिगर करणे](https://reth.rs/run/config.html?highlight=data%20directory#configuring-reth) पहा. [Reth चे माहिती](https://reth.rs/run/mainnet.html) मध्ये अतिरिक्त पर्याय आणि कॉन्फिगरेशन तपशील आहेत. + +#### कन्सेन्सस क्लायंट सुरू करणे {#starting-the-consensus-client} + +एक्झिक्यूशन क्लायंटशी स्थानिक RPC कनेक्शन स्थापित करण्यासाठी कन्सेन्सस क्लायंट योग्य पोर्ट कॉन्फिगरेशनसह सुरू करणे आवश्यक आहे. कन्सेन्सस क्लायंट्सना कॉन्फिगरेशन युक्तिवाद म्हणून उघड केलेल्या एक्झिक्यूशन क्लायंट पोर्टसह चालवावे लागेल. + +कन्सेन्सस क्लायंटला त्यांच्या दरम्यान RPC कनेक्शन प्रमाणित करण्यासाठी एक्झिक्यूशन क्लायंटच्या `jwt-secret` चा मार्ग देखील आवश्यक आहे. वरील एक्झिक्यूशन उदाहरणांप्रमाणेच, प्रत्येक कन्सेन्सस क्लायंटमध्ये एक कॉन्फिगरेशन फ्लॅग असतो जो jwt टोकन फाइल मार्ग युक्तिवाद म्हणून घेतो. हे एक्झिक्यूशन क्लायंटला प्रदान केलेल्या `jwtsecret` मार्गाशी सुसंगत असले पाहिजे. + +जर तुम्ही व्हॅलिडेटर चालवण्याची योजना करत असाल, तर फी प्राप्तकर्त्याचा इथेरियम पत्ता निर्दिष्ट करणारा कॉन्फिगरेशन फ्लॅग जोडण्याची खात्री करा. येथे तुमच्या व्हॅलिडेटरसाठी इथर बक्षिसे जमा होतात. प्रत्येक कन्सेन्सस क्लायंटकडे एक पर्याय असतो, उदा., `--suggested-fee-recipient=0xabcd1`, जो एक इथेरियम पत्ता युक्तिवाद म्हणून घेतो. + +टेस्टनेटवर बीकन नोड सुरू करताना, तुम्ही [चेकपॉइंट सिंक](https://notes.ethereum.org/@launchpad/checkpoint-sync) साठी सार्वजनिक एंडपॉइंट वापरून लक्षणीय सिंकिंग वेळ वाचवू शकता. + +#### कन्सेन्सस क्लायंट चालवणे {#running-a-consensus-client} + +##### Lighthouse चालवणे + +Lighthouse चालवण्यापूर्वी, [Lighthouse Book](https://lighthouse-book.sigmaprime.io/installation.html) मध्ये ते कसे इंस्टॉल आणि कॉन्फिगर करायचे याबद्दल अधिक जाणून घ्या. + +```sh +lighthouse beacon_node \ + --network mainnet \ + --datadir /data/ethereum \ + --http \ + --execution-endpoint http://127.0.0.1:8551 \ + --execution-jwt /path/to/jwtsecret +``` + +##### Lodestar चालवणे + +Lodestar सॉफ्टवेअर कंपाइल करून किंवा डॉकर इमेज डाउनलोड करून इंस्टॉल करा. [डॉक्स](https://chainsafe.github.io/lodestar/) आणि अधिक व्यापक [सेटअप मार्गदर्शक](https://hackmd.io/@philknows/rk5cDvKmK) मध्ये अधिक जाणून घ्या. + +```sh +lodestar beacon \ + --dataDir="/data/ethereum" \ + --network=mainnet \ + --eth1.enabled=true \ + --execution.urls="http://127.0.0.1:8551" \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### Nimbus चालवणे + +Nimbus कन्सेन्सस आणि एक्झिक्यूशन क्लायंट दोन्हीसह येतो. हे अगदी कमी संगणकीय शक्तीसह विविध उपकरणांवर चालवले जाऊ शकते. +[डिपेंडेंसी आणि Nimbus स्वतः इंस्टॉल केल्यानंतर](https://nimbus.guide/quick-start.html), तुम्ही त्याचा कन्सेन्सस क्लायंट चालवू शकता: + +```sh +nimbus_beacon_node \ + --network=mainnet \ + --web3-url=http://127.0.0.1:8551 \ + --rest \ + --jwt-secret="/path/to/jwtsecret" +``` + +##### Prysm चालवणे + +Prysm एक स्क्रिप्टसह येतो जो सोप्या स्वयंचलित इंस्टॉलेशनला परवानगी देतो. तपशील [Prysm डॉक्स](https://prysm.offchainlabs.com/docs/install-prysm/install-with-script/) मध्ये आढळू शकतात. + +```sh +./prysm.sh beacon-chain \ + --mainnet \ + --datadir /data/ethereum \ + --execution-endpoint=http://localhost:8551 \ + --jwt-secret=/path/to/jwtsecret +``` + +##### Teku चालवणे + +```sh +teku --network mainnet \ + --data-path "/data/ethereum" \ + --ee-endpoint http://localhost:8551 \ + --ee-jwt-secret-file "/path/to/jwtsecret" +``` + +जेव्हा एक कन्सेन्सस क्लायंट एक्झिक्यूशन क्लायंटशी डिपॉझिट कॉन्ट्रॅक्ट वाचण्यासाठी आणि व्हॅलिडेटर्स ओळखण्यासाठी कनेक्ट होतो, तेव्हा तो इतर बीकन नोड पीअर्सशी देखील कनेक्ट होतो आणि जेनेसिसपासून कन्सेन्सस स्लॉट्स सिंक करण्यास सुरुवात करतो. एकदा बीकन नोड वर्तमान युगात पोहोचला की, बीकन API तुमच्या व्हॅलिडेटर्ससाठी वापरण्यायोग्य होते. [बीकन नोड APIs](https://eth2docs.vercel.app/) बद्दल अधिक जाणून घ्या. + +### व्हॅलिडेटर्स जोडणे {#adding-validators} + +एक कन्सेन्सस क्लायंट व्हॅलिडेटर्सना कनेक्ट करण्यासाठी बीकन नोड म्हणून काम करतो. प्रत्येक कन्सेन्सस क्लायंटचे स्वतःचे व्हॅलिडेटर सॉफ्टवेअर असते जे त्याच्या संबंधित माहितीमध्ये तपशीलवार वर्णन केलेले आहे. + +तुमचा स्वतःचा व्हॅलिडेटर चालवल्याने [सोलो स्टेकिंग](/staking/solo/) करता येते, जी इथेरियम नेटवर्कला सपोर्ट करण्याची सर्वात प्रभावी आणि विश्वासहीन पद्धत आहे. तथापि, यासाठी 32 ETH ची ठेव आवश्यक आहे. तुमच्या स्वतःच्या नोडवर कमी रकमेसह व्हॅलिडेटर चालवण्यासाठी, [रॉकेट पूल](https://rocketpool.net/node-operators) सारखा परवानगी-रहित नोड ऑपरेटर्ससह विकेंद्रित पूल तुम्हाला आवडेल. + +स्टेकिंग आणि व्हॅलिडेटर की निर्मितीसह प्रारंभ करण्याचा सर्वात सोपा मार्ग म्हणजे [हुडी टेस्टनेट स्टेकिंग लॉन्चपॅड](https://hoodi.launchpad.ethereum.org/) वापरणे, जे तुम्हाला [हुडीवर नोड्स चालवून](https://notes.ethereum.org/@launchpad/hoodi) तुमचा सेटअप तपासण्याची परवानगी देते. जेव्हा तुम्ही मेननेटसाठी तयार असाल, तेव्हा तुम्ही [मेननेट स्टेकिंग लॉन्चपॅड](https://launchpad.ethereum.org/) वापरून या पायऱ्या पुन्हा करू शकता. + +स्टेकिंग पर्यायांच्या विहंगावलोकनासाठी [स्टेकिंग पेज](/staking) पहा. + +### नोड वापरणे {#using-the-node} + +एक्झिक्यूशन क्लायंट [RPC API एंडपॉइंट्स](/developers/docs/apis/json-rpc/) ऑफर करतात जे तुम्ही व्यवहार सबमिट करण्यासाठी, इथेरियम नेटवर्कवर स्मार्ट कॉन्ट्रॅक्ट्सशी संवाद साधण्यासाठी किंवा तैनात करण्यासाठी विविध मार्गांनी वापरू शकता: + +- योग्य प्रोटोकॉलसह त्यांना मॅन्युअली कॉल करणे (उदा., `curl` वापरून) +- प्रदान केलेला कन्सोल जोडणे (उदा., `geth attach`) +- वेब3 लायब्ररीज वापरून त्यांना ॲप्लिकेशन्समध्ये अंमलात आणणे, उदा., [web3.py](https://web3py.readthedocs.io/en/stable/overview.html#overview), [ethers](https://github.com/ethers-io/ethers.js/) + +विविध क्लायंट्सकडे RPC एंडपॉइंट्सच्या विविध अंमलबजावणी आहेत. परंतु एक मानक JSON-RPC आहे जो तुम्ही प्रत्येक क्लायंटसह वापरू शकता. विहंगावलोकनासाठी [JSON-RPC डॉक्स वाचा](/developers/docs/apis/json-rpc/). इथेरियम नेटवर्कमधून माहितीची आवश्यकता असलेले ॲप्लिकेशन्स हे RPC वापरू शकतात. उदाहरणार्थ, लोकप्रिय वॉलेट MetaMask तुम्हाला [तुमच्या स्वतःच्या RPC एंडपॉइंटशी कनेक्ट](https://metamask.zendesk.com/hc/en-us/articles/360015290012-Using-a-Local-Node) होऊ देते ज्याचे मजबूत गोपनीयता आणि सुरक्षा फायदे आहेत. + +कन्सेन्सस क्लायंट सर्व एक [बीकन API](https://ethereum.github.io/beacon-APIs) उघड करतात जे कन्सेन्सस क्लायंटची स्थिती तपासण्यासाठी किंवा [Curl](https://curl.se) सारख्या साधनांचा वापर करून विनंत्या पाठवून ब्लॉक्स आणि कन्सेन्सस डेटा डाउनलोड करण्यासाठी वापरले जाऊ शकते. याबद्दल अधिक माहिती प्रत्येक कन्सेन्सस क्लायंटच्या माहितीमध्ये आढळू शकते. + +#### RPC पर्यंत पोहोचणे {#reaching-rpc} + +एक्झिक्यूशन क्लायंट JSON-RPC साठी डीफॉल्ट पोर्ट `8545` आहे परंतु तुम्ही कॉन्फिगरेशनमध्ये स्थानिक एंडपॉइंट्सचे पोर्ट बदलू शकता. डीफॉल्टनुसार, RPC इंटरफेस केवळ तुमच्या संगणकाच्या लोकलहोस्टवर पोहोचण्यायोग्य आहे. ते दूरस्थपणे प्रवेशयोग्य करण्यासाठी, तुम्ही पत्ता `0.0.0.0` वर बदलून ते सार्वजनिक करू शकता. यामुळे ते स्थानिक नेटवर्क आणि सार्वजनिक IP पत्त्यांवर पोहोचण्यायोग्य होईल. बहुतेक प्रकरणांमध्ये तुम्हाला तुमच्या राउटरवर पोर्ट फॉरवर्डिंग सेट करावे लागेल. + +इंटरनेटवर पोर्ट उघडताना सावधगिरी बाळगा कारण यामुळे इंटरनेटवरील कोणालाही तुमचा नोड नियंत्रित करण्याची परवानगी मिळेल. जर तुम्ही तुमचा क्लायंट वॉलेट म्हणून वापरत असाल तर दुर्भावनापूर्ण कलाकार तुमची सिस्टम खाली आणण्यासाठी किंवा तुमचे फंड चोरण्यासाठी तुमच्या नोडमध्ये प्रवेश करू शकतात. + +यावर एक उपाय म्हणजे संभाव्यतः हानिकारक RPC पद्धतींना बदलण्यायोग्य होण्यापासून रोखणे. उदाहरणार्थ, Geth सह, तुम्ही फ्लॅगसह बदलण्यायोग्य पद्धती घोषित करू शकता: `--http.api web3,eth,txpool`. + +RPC इंटरफेसमध्ये प्रवेश एज लेयर APIs किंवा Nginx सारख्या वेब सर्व्हर ॲप्लिकेशन्सच्या विकासाद्वारे वाढविला जाऊ शकतो आणि त्यांना तुमच्या क्लायंटच्या स्थानिक पत्त्यावर आणि पोर्टवर कनेक्ट करून. मध्यम लेयरचा फायदा घेतल्याने डेव्हलपर्सना RPC इंटरफेसवर सुरक्षित `https` कनेक्शनसाठी प्रमाणपत्र सेट करण्याची क्षमता देखील मिळू शकते. + +तुमच्या नोडच्या RPC एंडपॉइंटमध्ये प्रवेश प्रदान करण्याचा एकमेव मार्ग वेब सर्व्हर, प्रॉक्सी किंवा बाह्य फेसिंग रेस्ट API सेट करणे नाही. सार्वजनिकरित्या पोहोचण्यायोग्य एंडपॉइंट सेट करण्याचा आणखी एक गोपनीयता-संरक्षण करणारा मार्ग म्हणजे तुमच्या स्वतःच्या [Tor](https://www.torproject.org/) ओनियन सेवेवर नोड होस्ट करणे. यामुळे तुम्ही तुमच्या स्थानिक नेटवर्कच्या बाहेर RPC पर्यंत पोहोचू शकता, स्थिर सार्वजनिक IP पत्त्याशिवाय किंवा उघडलेल्या पोर्टशिवाय. तथापि, हे कॉन्फिगरेशन वापरल्याने RPC एंडपॉइंट केवळ Tor नेटवर्कद्वारे प्रवेशयोग्य होऊ शकतो जो सर्व ॲप्लिकेशन्सद्वारे समर्थित नाही आणि यामुळे कनेक्शन समस्या उद्भवू शकतात. + +हे करण्यासाठी, तुम्हाला तुमची स्वतःची [ओनियन सेवा](https://community.torproject.org/onion-services/) तयार करावी लागेल. तुमचे स्वतःचे होस्ट करण्यासाठी ओनियन सेवा सेटअपवरील [माहिती](https://community.torproject.org/onion-services/setup/) पहा. तुम्ही ते RPC पोर्टवर प्रॉक्सीसह वेब सर्व्हरकडे किंवा फक्त थेट RPC कडे निर्देशित करू शकता. + +शेवटी, आणि अंतर्गत नेटवर्कमध्ये प्रवेश प्रदान करण्याच्या सर्वात लोकप्रिय मार्गांपैकी एक VPN कनेक्शन आहे. तुमच्या वापराच्या केसवर आणि तुमच्या नोडमध्ये प्रवेशाची आवश्यकता असलेल्या वापरकर्त्यांच्या संख्येवर अवलंबून, एक सुरक्षित VPN कनेक्शन एक पर्याय असू शकतो. [OpenVPN](https://openvpn.net/) एक पूर्ण-वैशिष्ट्यीकृत SSL VPN आहे जे उद्योग मानक SSL/TLS प्रोटोकॉल वापरून OSI लेयर 2 किंवा 3 सुरक्षित नेटवर्क विस्तार लागू करते, प्रमाणपत्रे, स्मार्ट कार्ड आणि/किंवा वापरकर्तानाव/पासवर्ड क्रेडेन्शियलवर आधारित लवचिक क्लायंट प्रमाणीकरण पद्धतींना समर्थन देते, आणि VPN व्हर्च्युअल इंटरफेसवर लागू केलेल्या फायरवॉल नियमांचा वापर करून वापरकर्ता किंवा गट-विशिष्ट प्रवेश नियंत्रण धोरणांना परवानगी देते. + +### नोड चालवणे {#operating-the-node} + +तुमचा नोड योग्यरित्या चालू आहे याची खात्री करण्यासाठी तुम्ही नियमितपणे त्याचे निरीक्षण केले पाहिजे. तुम्हाला अधूनमधून देखभाल करण्याची आवश्यकता असू शकते. + +#### नोड ऑनलाइन ठेवणे {#keeping-node-online} + +तुमचा नोड नेहमी ऑनलाइन असणे आवश्यक नाही, परंतु नेटवर्कशी सिंक राहण्यासाठी तुम्ही तो शक्य तितका ऑनलाइन ठेवला पाहिजे. तुम्ही तो रीस्टार्ट करण्यासाठी बंद करू शकता, परंतु लक्षात ठेवा की: + +- जर अलीकडील स्थिती अजूनही डिस्कवर लिहिली जात असेल तर बंद होण्यास काही मिनिटे लागू शकतात. +- सक्तीने बंद केल्याने डेटाबेस खराब होऊ शकतो ज्यामुळे तुम्हाला संपूर्ण नोड पुन्हा सिंक करावा लागेल. +- तुमचा क्लायंट नेटवर्कमधून सिंकच्या बाहेर जाईल आणि तुम्ही तो रीस्टार्ट केल्यावर त्याला पुन्हा सिंक करावे लागेल. नोड जिथे शेवटचा बंद झाला होता तिथून सिंकिंग सुरू करू शकत असला तरी, तो किती वेळ ऑफलाइन होता यावर अवलंबून प्रक्रियेला वेळ लागू शकतो. + +_हे कन्सेन्सस लेयर व्हॅलिडेटर नोड्सवर लागू होत नाही._ तुमचा नोड ऑफलाइन घेतल्याने त्यावर अवलंबून असलेल्या सर्व सेवांवर परिणाम होईल. जर तुम्ही _स्टेकिंग_ उद्देशाने नोड चालवत असाल तर तुम्ही डाउनटाइम शक्य तितका कमी करण्याचा प्रयत्न केला पाहिजे. + +#### क्लायंट सेवा तयार करणे {#creating-client-services} + +तुमचे क्लायंट स्टार्टअपवर आपोआप चालवण्यासाठी सेवा तयार करण्याचा विचार करा. उदाहरणार्थ, लिनक्स सर्व्हरवर, चांगली प्रथा म्हणजे एक सेवा तयार करणे, उदा., `systemd` सह, जी क्लायंटला योग्य कॉन्फिगसह, मर्यादित विशेषाधिकार असलेल्या वापरकर्त्याखाली कार्यान्वित करते आणि आपोआप रीस्टार्ट होते. + +#### क्लायंट अपडेट करणे {#updating-clients} + +तुम्हाला तुमचे क्लायंट सॉफ्टवेअर नवीनतम सुरक्षा पॅच, वैशिष्ट्ये आणि [EIPs](/eips/) सह अद्ययावत ठेवणे आवश्यक आहे. विशेषतः [हार्ड फोर्क्स](/ethereum-forks/) पूर्वी, तुम्ही योग्य क्लायंट आवृत्त्या चालवत असल्याची खात्री करा. + +> महत्त्वाच्या नेटवर्क अपडेट्सपूर्वी, EF त्याच्या [ब्लॉग](https://blog.ethereum.org) वर एक पोस्ट प्रकाशित करते. तुमच्या नोडला अपडेटची आवश्यकता असताना तुम्हाला तुमच्या मेलवर सूचना मिळवण्यासाठी तुम्ही [या घोषणांसाठी सदस्यत्व घेऊ शकता](https://blog.ethereum.org/category/protocol#subscribe). + +क्लायंट अपडेट करणे खूप सोपे आहे. प्रत्येक क्लायंटकडे त्यांच्या माहितीमध्ये विशिष्ट सूचना आहेत, परंतु प्रक्रिया सामान्यतः फक्त नवीनतम आवृत्ती डाउनलोड करणे आणि नवीन एक्झिक्युटेबलसह क्लायंट रीस्टार्ट करणे आहे. क्लायंटने जिथे सोडले होते तिथून उचलले पाहिजे, परंतु अपडेट्स लागू करून. + +प्रत्येक क्लायंट अंमलबजावणीमध्ये एक मानवी-वाचनीय आवृत्ती स्ट्रिंग असते जी पीअर-टू-पीअर प्रोटोकॉलमध्ये वापरली जाते परंतु कमांड लाइनवरून देखील प्रवेशयोग्य असते. ही आवृत्ती स्ट्रिंग वापरकर्त्यांना ते योग्य आवृत्ती चालवत आहेत की नाही हे तपासण्याची परवानगी देते आणि ब्लॉक एक्सप्लोरर्स आणि नेटवर्कवर विशिष्ट क्लायंटच्या वितरणाचे प्रमाण मोजण्यात स्वारस्य असलेल्या इतर विश्लेषणात्मक साधनांना परवानगी देते. आवृत्ती स्ट्रिंगबद्दल अधिक माहितीसाठी कृपया वैयक्तिक क्लायंट माहितीचा संदर्भ घ्या. + +#### अतिरिक्त सेवा चालवणे {#running-additional-services} + +तुमचा स्वतःचा नोड चालवल्याने तुम्हाला अशा सेवा वापरता येतात ज्यांना इथेरियम क्लायंट RPC मध्ये थेट प्रवेश आवश्यक असतो. या सेवा इथेरियमवर तयार केलेल्या आहेत जसे की [लेयर 2 सोल्यूशन्स](/developers/docs/scaling/#layer-2-scaling), वॉलेट्ससाठी बॅकएंड, ब्लॉक एक्सप्लोरर्स, डेव्हलपर टूल्स आणि इतर इथेरियम पायाभूत सुविधा. + +#### नोडचे निरीक्षण करणे {#monitoring-the-node} + +तुमच्या नोडचे योग्यरित्या निरीक्षण करण्यासाठी, मेट्रिक्स गोळा करण्याचा विचार करा. क्लायंट मेट्रिक्स एंडपॉइंट्स प्रदान करतात जेणेकरून तुम्हाला तुमच्या नोडबद्दल सर्वसमावेशक डेटा मिळू शकेल. [InfluxDB](https://www.influxdata.com/get-influxdb/) किंवा [Prometheus](https://prometheus.io/) सारख्या साधनांचा वापर करून डेटाबेस तयार करा ज्यांना तुम्ही [Grafana](https://grafana.com/) सारख्या सॉफ्टवेअरमध्ये व्हिज्युअलायझेशन आणि चार्टमध्ये बदलू शकता. या सॉफ्टवेअरचा वापर करण्यासाठी अनेक सेटअप आहेत आणि तुमच्यासाठी तुमचा नोड आणि संपूर्ण नेटवर्क व्हिज्युअलाइझ करण्यासाठी विविध ग्राफना डॅशबोर्ड आहेत. उदाहरणार्थ, [Geth चे InfluxDB आणि Grafana सह निरीक्षण करण्यावरील ट्यूटोरियल](/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/) पहा. + +तुमच्या निरीक्षणाचा भाग म्हणून, तुमच्या मशीनच्या कार्यक्षमतेवर लक्ष ठेवण्याची खात्री करा. तुमच्या नोडच्या सुरुवातीच्या सिंक दरम्यान, क्लायंट सॉफ्टवेअर CPU आणि रॅमवर खूप भारी असू शकते. ग्राफनाव्यतिरिक्त, तुम्ही हे करण्यासाठी `htop` किंवा `uptime` सारख्या तुमच्या OS द्वारे ऑफर केलेल्या साधनांचा वापर करू शकता. + +## पुढील वाचन {#further-reading} + +- [इथेरियम स्टेकिंग मार्गदर्शक](https://github.com/SomerEsat/ethereum-staking-guides) - _सोमर एसॅट, वारंवार अद्यतनित_ +- [मार्गदर्शक | मेननेटवर इथेरियम स्टेकिंगसाठी व्हॅलिडेटर कसे सेट करावे](https://www.coincashew.com/coins/overview-eth/guide-or-how-to-setup-a-validator-on-eth2-mainnet) _– कॉइनकॅश्यू, वारंवार अद्यतनित_ +- [टेस्टनेट्सवर व्हॅलिडेटर्स चालवण्यावर ETHStaker मार्गदर्शक](https://github.com/remyroy/ethstaker#guides) – _ETHStaker, नियमितपणे अद्यतनित_ +- [इथेरियम नोड्ससाठी सॅम्पल AWS ब्लॉकचेन नोड रनर ॲप](https://aws-samples.github.io/aws-blockchain-node-runners/docs/Blueprints/Ethereum) - _AWS, वारंवार अद्यतनित_ +- [नोड ऑपरेटर्ससाठी द मर्ज FAQ](https://notes.ethereum.org/@launchpad/node-faq-merge) - _जुलै २०२२_ +- [इथेरियम पूर्ण प्रमाणित नोड होण्यासाठी हार्डवेअर आवश्यकतांचे विश्लेषण](https://medium.com/coinmonks/analyzing-the-hardware-requirements-to-be-an-ethereum-full-validated-node-dc064f167902) _– अल्बर्ट पलाऊ, २४ सप्टेंबर २०१८_ +- [Ethereum फुल नोड्स चालवणे: केवळ प्रेरित लोकांसाठी एक मार्गदर्शक](https://medium.com/@JustinMLeroux/running-ethereum-full-nodes-a-guide-for-the-barely-motivated-a8a13e7a0d31) _- जस्टिन लेरॉक्स, 7 नोव्हेंबर 2019_ +- [इथेरियम मेननेटवर हायपरलेजर बेसू नोड चालवणे: फायदे, आवश्यकता आणि सेटअप](https://pegasys.tech/running-a-hyperledger-besu-node-on-the-ethereum-mainnet-benefits-requirements-and-setup/) _– फेलिपे फरागी, ७ मे २०२०_ +- [मॉनिटरिंग स्टॅकसह नेदरमाइंड इथेरियम क्लायंट तैनात करणे](https://medium.com/nethermind-eth/deploying-nethermind-ethereum-client-with-monitoring-stack-55ce1622edbd) _– Nethermind.eth, ८ जुलै २०२०_ + +## संबंधित विषय {#related-topics} + +- [नोड्स आणि क्लायंट](/developers/docs/nodes-and-clients/) +- [ब्लॉक्स](/developers/docs/blocks/) +- [नेटवर्क्स](/developers/docs/networks/) diff --git a/public/content/translations/mr/developers/docs/oracles/index.md b/public/content/translations/mr/developers/docs/oracles/index.md new file mode 100644 index 00000000000..144bb71b124 --- /dev/null +++ b/public/content/translations/mr/developers/docs/oracles/index.md @@ -0,0 +1,433 @@ +--- +title: "ओरॅकल्स" +description: "ओरॅकल्स इथेरियम स्मार्ट कॉन्ट्रॅक्ट्सना वास्तविक जगातील डेटामध्ये प्रवेश देतात, ज्यामुळे वापरकर्त्यांसाठी अधिक वापर-प्रकरणे आणि अधिक मूल्य अनलॉक होते." +lang: mr +--- + +ओरॅकल्स हे असे ऍप्लिकेशन्स आहेत जे डेटा फीड्स तयार करतात जे स्मार्ट कॉन्ट्रॅक्ट्ससाठी ब्लॉकचेनला ऑफचेन डेटा स्रोत उपलब्ध करून देतात. हे आवश्यक आहे कारण इथेरियम-आधारित स्मार्ट कॉन्ट्रॅक्ट्स, डीफॉल्टनुसार, ब्लॉकचेन नेटवर्कच्या बाहेर संग्रहित माहितीमध्ये प्रवेश करू शकत नाहीत. + +स्मार्ट कॉन्ट्रॅक्ट्सना ऑफचेन डेटा वापरून कार्यान्वित करण्याची क्षमता देणे विकेंद्रित ऍप्लिकेशन्सची उपयोगिता आणि मूल्य वाढवते. उदाहरणार्थ, ऑनचेन प्रेडिक्शन मार्केट्स निकालांबद्दल माहिती देण्यासाठी ओरॅकल्सवर अवलंबून असतात, ज्याचा वापर ते वापरकर्त्याच्या अंदाजांची पडताळणी करण्यासाठी करतात. समजा ॲलिसने पुढील यू.एस. कोण होईल यावर 20 ETH ची पैज लावली. अध्यक्ष. त्या प्रकरणात, प्रेडिक्शन-मार्केट डॅपला निवडणुकीच्या निकालांची पुष्टी करण्यासाठी आणि ॲलिस पेमेंटसाठी पात्र आहे की नाही हे ठरवण्यासाठी एका ओरॅकलची आवश्यकता आहे. + +## पूर्वतयारी {#prerequisites} + +हे पान असे गृहीत धरते की वाचक इथेरियमच्या मूलभूत तत्त्वांशी परिचित आहे, ज्यात [नोड्स](/developers/docs/nodes-and-clients/), [सहमती यंत्रणा](/developers/docs/consensus-mechanisms/), आणि [EVM](/developers/docs/evm/) यांचा समावेश आहे. तुम्हाला [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) आणि [स्मार्ट कॉन्ट्रॅक्टची रचना](/developers/docs/smart-contracts/anatomy/), विशेषतः [इव्हेंट्स](/glossary/#events) यांची चांगली समज असणे आवश्यक आहे. + +## ब्लॉकचेन ओरॅकल म्हणजे काय? {#what-is-a-blockchain-oracle} + +ओरॅकल्स हे असे ऍप्लिकेशन्स आहेत जे ब्लॉकचेनवर चालू असलेल्या स्मार्ट कॉन्ट्रॅक्ट्सना बाह्य माहिती (म्हणजे ऑफचेन संग्रहित माहिती) मिळवतात, सत्यापित करतात आणि प्रसारित करतात. ऑफचेन डेटा 'पुल' करण्याव्यतिरिक्त आणि इथेरियमवर प्रसारित करण्याव्यतिरिक्त, ओरॅकल्स ब्लॉकचेनमधून बाह्य प्रणालींमध्ये माहिती 'पुश' देखील करू शकतात, उदा., वापरकर्त्याने इथेरियम व्यवहाराद्वारे शुल्क पाठवल्यावर स्मार्ट लॉक अनलॉक करणे. + +ओरॅकलशिवाय, स्मार्ट कॉन्ट्रॅक्ट पूर्णपणे ऑनचेन डेटापुरते मर्यादित राहील. + +ओरॅकल्स डेटाच्या स्रोतावर (एक किंवा अनेक स्रोत), विश्वास मॉडेल्सवर (केंद्रीकृत किंवा विकेंद्रित), आणि सिस्टम आर्किटेक्चरवर (इमिडिएट-रीड, पब्लिश-सबस्क्राइब, आणि रिक्वेस्ट-रिस्पॉन्स) आधारित वेगळे असतात. ते ऑनचेन कॉन्ट्रॅक्ट्सद्वारे वापरासाठी बाह्य डेटा पुनर्प्राप्त करतात (इनपुट ओरॅकल्स), ब्लॉकचेनमधून ऑफचेन ऍप्लिकेशन्सना माहिती पाठवतात (आउटपुट ओरॅकल्स), किंवा ऑफचेन संगणकीय कार्ये करतात (संगणकीय ओरॅकल्स) यावर आधारित आपण ओरॅकल्समध्ये फरक करू शकतो. + +## स्मार्ट कॉन्ट्रॅक्ट्सना ओरॅकल्सची गरज का आहे? {#why-do-smart-contracts-need-oracles} + +बरेच डेव्हलपर्स स्मार्ट कॉन्ट्रॅक्ट्सना ब्लॉकचेनवरील विशिष्ट ॲड्रेसवर चालणारा कोड म्हणून पाहतात. तथापि, [स्मार्ट कॉन्ट्रॅक्ट्सचा अधिक सामान्य दृष्टिकोन](/smart-contracts/) असा आहे की ते स्व-अंमलबजावणी करणारे सॉफ्टवेअर प्रोग्राम आहेत जे एकदा विशिष्ट अटी पूर्ण झाल्यावर पक्षांमधील करारांची अंमलबजावणी करण्यास सक्षम असतात - म्हणूनच 'स्मार्ट कॉन्ट्रॅक्ट्स' ही संज्ञा आहे. + +परंतु इथेरियम निर्धारक असल्यामुळे, लोकांमध्ये करारांची अंमलबजावणी करण्यासाठी स्मार्ट कॉन्ट्रॅक्ट्स वापरणे सोपे नाही. [निर्धारक प्रणाली](https://en.wikipedia.org/wiki/Deterministic_algorithm) अशी आहे जी प्रारंभिक स्थिती आणि विशिष्ट इनपुट दिल्यास नेहमी समान परिणाम देते, याचा अर्थ इनपुटमधून आउटपुटची गणना करण्याच्या प्रक्रियेत कोणतीही यादृच्छिकता किंवा भिन्नता नसते. + +निर्धारक अंमलबजावणी साध्य करण्यासाठी, ब्लॉकचेन _केवळ_ ब्लॉकचेनवरच संग्रहित डेटा वापरून साध्या बायनरी (खरे/खोटे) प्रश्नांवर सहमतीपर्यंत पोहोचण्यासाठी नोड्सना मर्यादित करतात. अशा प्रश्नांची उदाहरणे: + +- “खाते मालकाने (सार्वजनिक की द्वारे ओळखले जाते) या व्यवहारावर जोडलेल्या खाजगी की सह स्वाक्षरी केली होती का?” +- “या खात्यात व्यवहार कव्हर करण्यासाठी पुरेसा निधी आहे का?” +- “या स्मार्ट कॉन्ट्रॅक्टच्या संदर्भात हा व्यवहार वैध आहे का?”, इत्यादी. + +जर ब्लॉकचेनला बाह्य स्रोतांकडून (म्हणजे, वास्तविक जगातून) माहिती मिळाली, तर निर्धारकता साध्य करणे अशक्य होईल, ज्यामुळे नोड्सना ब्लॉकचेनच्या स्थितीतील बदलांच्या वैधतेवर सहमत होण्यापासून प्रतिबंधित केले जाईल. उदाहरणार्थ, एक स्मार्ट कॉन्ट्रॅक्ट घ्या जो पारंपारिक किंमत API मधून मिळवलेल्या सध्याच्या ETH-USD विनिमय दरावर आधारित व्यवहार कार्यान्वित करतो. हा आकडा वारंवार बदलण्याची शक्यता आहे (API नापसंत किंवा हॅक होऊ शकते याचा उल्लेख नाही), याचा अर्थ समान कॉन्ट्रॅक्ट कोड कार्यान्वित करणारे नोड्स वेगवेगळ्या निष्कर्षांवर पोहोचतील. + +इथेरियमसारख्या सार्वजनिक ब्लॉकचेनसाठी, जिथे जगभरातील हजारो नोड्स व्यवहार प्रक्रिया करत आहेत, निर्धारकता अत्यंत महत्त्वाची आहे. सत्याचा स्रोत म्हणून काम करणारी कोणतीही केंद्रीय संस्था नसल्यामुळे, समान व्यवहार लागू केल्यानंतर समान स्थितीवर पोहोचण्यासाठी नोड्सना यंत्रणेची आवश्यकता आहे. अशी केस जिथे नोड A स्मार्ट कॉन्ट्रॅक्टचा कोड कार्यान्वित करतो आणि परिणाम म्हणून '3' मिळवतो, तर नोड B समान व्यवहार चालवल्यानंतर '7' मिळवतो, यामुळे सहमती तुटेल आणि विकेंद्रित संगणन प्लॅटफॉर्म म्हणून इथेरियमचे मूल्य नष्ट होईल. + +हे परिदृश्य बाह्य स्रोतांकडून माहिती खेचण्यासाठी ब्लॉकचेन डिझाइन करण्यामधील समस्या देखील अधोरेखित करते. तथापि, ओरॅकल्स ऑफचेन स्रोतांकडून माहिती घेऊन आणि स्मार्ट कॉन्ट्रॅक्ट्स वापरण्यासाठी ती ब्लॉकचेनवर संग्रहित करून ही समस्या सोडवतात. ऑनचेन संग्रहित माहिती अपरिवर्तनीय आणि सार्वजनिकरित्या उपलब्ध असल्यामुळे, इथेरियम नोड्स सहमती न तोडता स्थितीतील बदल संगणित करण्यासाठी ओरॅकलद्वारे आयात केलेला ऑफचेन डेटा सुरक्षितपणे वापरू शकतात. + +हे करण्यासाठी, एक ओरॅकल सामान्यतः ऑनचेन चालणाऱ्या स्मार्ट कॉन्ट्रॅक्ट आणि काही ऑफचेन घटकांपासून बनलेला असतो. ऑनचेन कॉन्ट्रॅक्ट इतर स्मार्ट कॉन्ट्रॅक्ट्सकडून डेटासाठी विनंत्या प्राप्त करतो, ज्या तो ऑफचेन घटकाकडे (ज्याला ओरॅकल नोड म्हणतात) पाठवतो. हा ओरॅकल नोड डेटा स्रोतांना क्वेरी करू शकतो - उदाहरणार्थ, ऍप्लिकेशन प्रोग्रामिंग इंटरफेस (APIs) वापरून - आणि विनंती केलेला डेटा स्मार्ट कॉन्ट्रॅक्टच्या स्टोरेजमध्ये संग्रहित करण्यासाठी व्यवहार पाठवू शकतो. + +मूलतः, एक ब्लॉकचेन ओरॅकल ब्लॉकचेन आणि बाह्य पर्यावरण यांच्यातील माहितीतील अंतर भरून काढतो, ज्यामुळे “हायब्रीड स्मार्ट कॉन्ट्रॅक्ट्स” तयार होतात. हायब्रीड स्मार्ट कॉन्ट्रॅक्ट हा एक असा कॉन्ट्रॅक्ट आहे जो ऑनचेन कॉन्ट्रॅक्ट कोड आणि ऑफचेन पायाभूत सुविधांच्या संयोजनावर आधारित कार्य करतो. विकेंद्रित प्रेडिक्शन मार्केट्स हे हायब्रीड स्मार्ट कॉन्ट्रॅक्ट्सचे उत्कृष्ट उदाहरण आहे. इतर उदाहरणांमध्ये पीक विमा स्मार्ट कॉन्ट्रॅक्ट्सचा समावेश असू शकतो जे ओरॅकल्सचा एक संच विशिष्ट हवामान घटना घडल्या आहेत हे ठरवल्यावर पेमेंट करतात. + +## ओरॅकल समस्या काय आहे? {#the-oracle-problem} + +ओरॅकल्स एक महत्त्वाची समस्या सोडवतात, परंतु काही गुंतागुंत देखील निर्माण करतात, उदा.,: + +- आपण हे कसे सत्यापित करू शकतो की इंजेक्ट केलेली माहिती योग्य स्रोतातून काढली गेली आहे किंवा तिच्यात फेरफार झालेली नाही? + +- हा डेटा नेहमी उपलब्ध आहे आणि नियमितपणे अपडेट केला जातो याची आपण खात्री कशी करू शकतो? + +तथाकथित “ओरॅकल समस्या” स्मार्ट कॉन्ट्रॅक्ट्सना इनपुट पाठवण्यासाठी ब्लॉकचेन ओरॅकल्स वापरण्याशी संबंधित समस्या दर्शवते. स्मार्ट कॉन्ट्रॅक्ट योग्यरित्या कार्यान्वित होण्यासाठी ओरॅकलमधील डेटा अचूक असणे आवश्यक आहे. शिवाय, अचूक माहिती पुरवण्यासाठी ओरॅकल ऑपरेटर्सवर ‘विश्वास’ ठेवणे हे स्मार्ट कॉन्ट्रॅक्ट्सच्या 'विश्वासहीन' पैलूला कमी करते. + +वेगवेगळे ओरॅकल्स ओरॅकल समस्येवर वेगवेगळे उपाय देतात, ज्याचा आपण नंतर शोध घेऊ. ओरॅकल्सचे सामान्यतः ते खालील आव्हाने किती चांगल्या प्रकारे हाताळू शकतात यावर मूल्यांकन केले जाते: + +1. **अचूकता**: ओरॅकलने अवैध ऑफचेन डेटावर आधारित स्मार्ट कॉन्ट्रॅक्ट्सना स्थितीतील बदल सुरू करण्यास कारणीभूत ठरू नये. एका ओरॅकलने डेटाची _सत्यता_ आणि _अखंडता_ याची हमी दिली पाहिजे. सत्यता म्हणजे डेटा योग्य स्रोताकडून मिळवला गेला आहे, तर अखंडता म्हणजे ऑनचेन पाठवण्यापूर्वी डेटा अखंड राहिला (म्हणजे, बदलला गेला नाही). + +2. **उपलब्धता**: ओरॅकलने स्मार्ट कॉन्ट्रॅक्ट्सना कृती कार्यान्वित करण्यापासून आणि स्थितीतील बदल सुरू करण्यापासून विलंब किंवा प्रतिबंध करू नये. याचा अर्थ असा की ओरॅकलमधील डेटा व्यत्ययाशिवाय _विनंतीनुसार उपलब्ध_ असणे आवश्यक आहे. + +3. **प्रोत्साहन सुसंगतता**: ओरॅकलने ऑफचेन डेटा प्रदात्यांना स्मार्ट कॉन्ट्रॅक्ट्समध्ये अचूक माहिती सबमिट करण्यासाठी प्रोत्साहन दिले पाहिजे. प्रोत्साहन सुसंगततेमध्ये _श्रेय देण्याची क्षमता_ आणि _उत्तरदायित्व_ यांचा समावेश आहे. श्रेय देण्याची क्षमता बाह्य माहितीचा एक तुकडा त्याच्या प्रदात्याशी जोडण्याची परवानगी देते, तर उत्तरदायित्व डेटा प्रदात्यांना ते देत असलेल्या माहितीशी बांधते, जेणेकरून प्रदान केलेल्या माहितीच्या गुणवत्तेवर आधारित त्यांना पुरस्कृत किंवा दंडित केले जाऊ शकते. + +## ब्लॉकचेन ओरॅकल सेवा कशी कार्य करते? {#how-does-a-blockchain-oracle-service-work} + +### वापरकर्ते {#users} + +वापरकर्ते अशा संस्था आहेत (म्हणजे, स्मार्ट कॉन्ट्रॅक्ट्स) ज्यांना विशिष्ट क्रिया पूर्ण करण्यासाठी ब्लॉकचेनच्या बाहेरील माहितीची आवश्यकता असते. ओरॅकल सेवेचा मूलभूत कार्यप्रवाह वापरकर्त्याने ओरॅकल कॉन्ट्रॅक्टला डेटा विनंती पाठवण्यापासून सुरू होतो. डेटा विनंत्या सहसा खालीलपैकी काही किंवा सर्व प्रश्नांची उत्तरे देतील: + +1. विनंती केलेल्या माहितीसाठी ऑफचेन नोड्स कोणत्या स्रोतांचा सल्ला घेऊ शकतात? + +2. रिपोर्टर्स डेटा स्रोतांकडून माहितीवर प्रक्रिया कशी करतात आणि उपयुक्त डेटा पॉइंट्स कसे काढतात? + +3. डेटा पुनर्प्राप्त करण्यासाठी किती ओरॅकल नोड्स सहभागी होऊ शकतात? + +4. ओरॅकल अहवालांमधील विसंगती कशा व्यवस्थापित केल्या पाहिजेत? + +5. सबमिशन फिल्टर करण्यासाठी आणि अहवालांना एकाच मूल्यात एकत्रित करण्यासाठी कोणती पद्धत लागू केली पाहिजे? + +### ओरॅकल कॉन्ट्रॅक्ट {#oracle-contract} + +ओरॅकल कॉन्ट्रॅक्ट हा ओरॅकल सेवेसाठी ऑनचेन घटक आहे. हे इतर कॉन्ट्रॅक्ट्सकडून डेटा विनंत्या ऐकते, ओरॅकल नोड्सना डेटा क्वेरी रिले करते आणि क्लायंट कॉन्ट्रॅक्ट्सना परत आलेला डेटा प्रसारित करते. हा कॉन्ट्रॅक्ट विनंती करणाऱ्या कॉन्ट्रॅक्टला पाठवण्यासाठी एकत्रित मूल्य तयार करण्यासाठी परत आलेल्या डेटा पॉइंट्सवर काही गणना देखील करू शकतो. + +ओरॅकल कॉन्ट्रॅक्ट काही फंक्शन्स उघड करतो जे क्लायंट कॉन्ट्रॅक्ट्स डेटा विनंती करताना कॉल करतात. नवीन क्वेरी मिळाल्यावर, स्मार्ट कॉन्ट्रॅक्ट डेटा विनंतीच्या तपशीलांसह एक [लॉग इव्हेंट](/developers/docs/smart-contracts/anatomy/#events-and-logs) उत्सर्जित करेल. हे लॉगला सबस्क्राइब केलेल्या ऑफचेन नोड्सना सूचित करते (सहसा JSON-RPC `eth_subscribe` कमांडसारखे काहीतरी वापरून), जे लॉग इव्हेंटमध्ये परिभाषित केलेला डेटा पुनर्प्राप्त करण्यासाठी पुढे जातात. + +खाली पेड्रो कोस्टा द्वारे एक [उदाहरण ओरॅकल कॉन्ट्रॅक्ट](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) आहे. ही एक सोपी ओरॅकल सेवा आहे जी इतर स्मार्ट कॉन्ट्रॅक्ट्सच्या विनंतीनुसार ऑफचेन APIs ला क्वेरी करू शकते आणि विनंती केलेली माहिती ब्लॉकचेनवर संग्रहित करू शकते: + +```solidity +pragma solidity >=0.4.21 <0.6.0; + +contract Oracle { + Request[] requests; //कॉन्ट्रॅक्टला केलेल्या विनंत्यांची यादी + uint currentId = 0; //वाढणारी विनंती आयडी + uint minQuorum = 2; //अंतिम निकाल घोषित करण्यापूर्वी प्राप्त करण्यासाठी किमान प्रतिसादांची संख्या + uint totalOracleCount = 3; // हार्डकोड केलेली ओरॅकल संख्या + + // एक सामान्य एपीआय विनंती परिभाषित करते + struct Request { + uint id; //विनंती आयडी + string urlToQuery; //API url + string attributeToFetch; //प्रतिसादामध्ये पुनर्प्राप्त करण्यासाठी json ॲट्रिब्यूट (की) + string agreedValue; //की पासून मूल्य + mapping(uint => string) answers; //ओरॅकल्सनी दिलेली उत्तरे + mapping(address => uint) quorum; //ओरॅकल्स जे उत्तराला क्वेरी करतील (1=ओरॅकलने मत दिलेले नाही, 2=ओरॅकलने मत दिलेले आहे) + } + + //ब्लॉकचेनच्या बाहेर ओरॅकलला चालना देणारी इव्हेंट + event NewRequest ( + uint id, + string urlToQuery, + string attributeToFetch + ); + + //अंतिम निकालावर एकमत झाल्यावर चालना दिली जाते + event UpdatedRequest ( + uint id, + string urlToQuery, + string attributeToFetch, + string agreedValue + ); + + function createRequest ( + string memory _urlToQuery, + string memory _attributeToFetch + ) + public + { + uint length = requests.push(Request(currentId, _urlToQuery, _attributeToFetch, "")); + Request storage r = requests[length-1]; + + // हार्डकोड केलेला ओरॅकल्स ॲड्रेस + r.quorum[address(0x6c2339b46F41a06f09CA0051ddAD54D1e582bA77)] = 1; + r.quorum[address(0xb5346CF224c02186606e5f89EACC21eC25398077)] = 1; + r.quorum[address(0xa2997F1CA363D11a0a35bB1Ac0Ff7849bc13e914)] = 1; + + //ब्लॉकचेनच्या बाहेर ओरॅकलद्वारे शोधण्यासाठी एक इव्हेंट लॉन्च करा + emit NewRequest ( + currentId, + _urlToQuery, + _attributeToFetch + ); + + //विनंती आयडी वाढवा + currentId++; + } + + //ओरॅकलद्वारे त्याचे उत्तर नोंदवण्यासाठी कॉल केले जाते + function updateRequest ( + uint _id, + string memory _valueRetrieved + ) public { + + Request storage currRequest = requests[_id]; + + //विश्वसनीय ओरॅकल्सच्या यादीत ओरॅकल आहे की नाही ते तपासा + //आणि ओरॅकलने अद्याप मत दिले नसल्यास + if(currRequest.quorum[address(msg.sender)] == 1){ + + //या ॲड्रेसने मत दिले आहे असे चिन्हांकित करणे + currRequest.quorum[msg.sender] = 2; + + //उत्तरांच्या "ॲरे" मधून पुनरावृत्ती करा जोपर्यंत एखादी जागा मोकळी होत नाही आणि पुनर्प्राप्त केलेले मूल्य जतन करा + uint tmpI = 0; + bool found = false; + while(!found) { + //पहिली रिकामी स्लॉट शोधा + if(bytes(currRequest.answers[tmpI]).length == 0){ + found = true; + currRequest.answers[tmpI] = _valueRetrieved; + } + tmpI++; + } + + uint currentQuorum = 0; + + //ओरॅकल यादीतून पुनरावृत्ती करा आणि पुरेसे ओरॅकल्स (किमान कोरम) आहेत की नाही ते तपासा + //सध्याच्या उत्तरासारखेच मत दिले आहे + for(uint i = 0; i < totalOracleCount; i++){ + bytes memory a = bytes(currRequest.answers[i]); + bytes memory b = bytes(_valueRetrieved); + + if(keccak256(a) == keccak256(b)){ + currentQuorum++; + if(currentQuorum >= minQuorum){ + currRequest.agreedValue = _valueRetrieved; + emit UpdatedRequest ( + currRequest.id, + currRequest.urlToQuery, + currRequest.attributeToFetch, + currRequest.agreedValue + ); + } + } + } + } + } +} +``` + +### ओरॅकल नोड्स {#oracle-nodes} + +ओरॅकल नोड हा ओरॅकल सेवेचा ऑफचेन घटक आहे. हे तृतीय-पक्ष सर्व्हरवर होस्ट केलेल्या APIs सारख्या बाह्य स्रोतांकडून माहिती काढते आणि स्मार्ट कॉन्ट्रॅक्ट्सद्वारे वापरासाठी ऑनचेन ठेवते. ओरॅकल नोड्स ऑनचेन ओरॅकल कॉन्ट्रॅक्टमधील इव्हेंट्स ऐकतात आणि लॉगमध्ये वर्णन केलेले कार्य पूर्ण करण्यासाठी पुढे जातात. + +ओरॅकल नोड्ससाठी एक सामान्य कार्य म्हणजे API सेवेला [HTTP GET](https://www.w3schools.com/tags/ref_httpmethods.asp) विनंती पाठवणे, संबंधित डेटा काढण्यासाठी प्रतिसादाचे विश्लेषण करणे, ब्लॉकचेन-वाचनीय आउटपुटमध्ये स्वरूपन करणे आणि ओरॅकल कॉन्ट्रॅक्टला व्यवहारात समाविष्ट करून ऑनचेन पाठवणे. ओरॅकल नोडला “सत्यता पुराव्यांचा” वापर करून सबमिट केलेल्या माहितीच्या वैधतेची आणि अखंडतेची पुष्टी करणे देखील आवश्यक असू शकते, ज्याचा आपण नंतर शोध घेऊ. + +संगणकीय ओरॅकल्स गॅस खर्च आणि ब्लॉक आकाराच्या मर्यादा लक्षात घेता, ऑनचेन कार्यान्वित करणे अव्यवहार्य असलेल्या संगणकीय कार्यांसाठी ऑफचेन नोड्सवर देखील अवलंबून असतात. उदाहरणार्थ, ओरॅकल नोडला सत्यापित करता येण्याजोगा यादृच्छिक आकडा तयार करण्याचे काम दिले जाऊ शकते (उदा., ब्लॉकचेन-आधारित गेम्ससाठी). + +## ओरॅकल डिझाइन पॅटर्न्स {#oracle-design-patterns} + +ओरॅकल्स विविध प्रकारांमध्ये येतात, ज्यात _इमिडिएट-रीड_, _पब्लिश-सबस्क्राइब_, आणि _रिक्वेस्ट-रिस्पॉन्स_ यांचा समावेश आहे, ज्यात नंतरचे दोन इथेरियम स्मार्ट कॉन्ट्रॅक्ट्समध्ये सर्वाधिक लोकप्रिय आहेत. येथे आपण पब्लिश-सबस्क्राइब आणि रिक्वेस्ट-रिस्पॉन्स मॉडेल्सचे थोडक्यात वर्णन करतो. + +### पब्लिश-सबस्क्राइब ओरॅकल्स {#publish-subscribe-oracles} + +या प्रकारचा ओरॅकल एक “डेटा फीड” उघड करतो जो इतर कॉन्ट्रॅक्ट्स माहितीसाठी नियमितपणे वाचू शकतात. या प्रकरणातील डेटा वारंवार बदलण्याची अपेक्षा आहे, म्हणून क्लायंट कॉन्ट्रॅक्ट्सनी ओरॅकलच्या स्टोरेजमधील डेटामधील अपडेट्ससाठी ऐकले पाहिजे. एक उदाहरण म्हणजे एक ओरॅकल जो वापरकर्त्यांना नवीनतम ETH-USD किंमत माहिती प्रदान करतो. + +### रिक्वेस्ट-रिस्पॉन्स ओरॅकल्स {#request-response-oracles} + +एक रिक्वेस्ट-रिस्पॉन्स सेटअप क्लायंट कॉन्ट्रॅक्टला पब्लिश-सबस्क्राइब ओरॅकलद्वारे प्रदान केलेल्या व्यतिरिक्त अनियंत्रित डेटाची विनंती करण्याची परवानगी देतो. रिक्वेस्ट-रिस्पॉन्स ओरॅकल्स आदर्श आहेत जेव्हा डेटासेट स्मार्ट कॉन्ट्रॅक्टच्या स्टोरेजमध्ये संग्रहित करण्यासाठी खूप मोठा असतो, आणि/किंवा वापरकर्त्यांना कोणत्याही वेळी डेटाचा फक्त एक छोटासा भाग आवश्यक असेल. + +पब्लिश-सबस्क्राइब मॉडेल्सपेक्षा अधिक जटिल असले तरी, रिक्वेस्ट-रिस्पॉन्स ओरॅकल्स मूलतः तेच आहेत ज्याचे आपण मागील विभागात वर्णन केले आहे. ओरॅकलमध्ये एक ऑनचेन घटक असेल जो डेटा विनंती प्राप्त करतो आणि प्रक्रियेसाठी ऑफचेन नोडला पाठवतो. + +डेटा क्वेरी सुरू करणाऱ्या वापरकर्त्यांनी ऑफचेन स्रोताकडून माहिती पुनर्प्राप्त करण्याची किंमत भरली पाहिजे. विनंतीमध्ये निर्दिष्ट केलेल्या कॉलबॅक फंक्शनद्वारे प्रतिसाद परत करण्यासाठी ओरॅकल कॉन्ट्रॅक्टद्वारे झालेल्या गॅस खर्चाची भरपाई करण्यासाठी क्लायंट कॉन्ट्रॅक्टने निधी देखील प्रदान करणे आवश्यक आहे. + +## केंद्रीकृत विरुद्ध विकेंद्रित ओरॅकल्स {#types-of-oracles} + +### केंद्रीकृत ओरॅकल्स {#centralized-oracles} + +एक केंद्रीकृत ओरॅकल एकाच संस्थेद्वारे नियंत्रित केला जातो जो ऑफचेन माहिती एकत्रित करण्यासाठी आणि विनंतीनुसार ओरॅकल कॉन्ट्रॅक्टचा डेटा अपडेट करण्यासाठी जबाबदार असतो. केंद्रीकृत ओरॅकल्स कार्यक्षम आहेत कारण ते सत्याच्या एकाच स्रोतावर अवलंबून असतात. जेव्हा मालकीचे डेटासेट थेट मालकाद्वारे व्यापकपणे स्वीकारलेल्या स्वाक्षरीसह प्रकाशित केले जातात तेव्हा ते अधिक चांगले कार्य करू शकतात. तथापि, त्याचे काही तोटे देखील आहेत: + +#### कमी अचूकतेची हमी {#low-correctness-guarantees} + +केंद्रीकृत ओरॅकल्ससह, प्रदान केलेली माहिती योग्य आहे की नाही याची पुष्टी करण्याचा कोणताही मार्ग नाही. अगदी "प्रतिष्ठित" प्रदाते देखील चुकीचे वागू शकतात किंवा हॅक होऊ शकतात. जर ओरॅकल भ्रष्ट झाला, तर स्मार्ट कॉन्ट्रॅक्ट्स चुकीच्या डेटाच्या आधारावर कार्यान्वित होतील. + +#### खराब उपलब्धता {#poor-availability} + +केंद्रीकृत ओरॅकल्स इतर स्मार्ट कॉन्ट्रॅक्ट्सना ऑफचेन डेटा नेहमी उपलब्ध करून देतील याची हमी नाही. जर प्रदात्याने सेवा बंद करण्याचा निर्णय घेतला किंवा हॅकरने ओरॅकलच्या ऑफचेन घटकावर नियंत्रण मिळवले, तर तुमच्या स्मार्ट कॉन्ट्रॅक्टला डिनायल ऑफ सर्व्हिस (DoS) हल्ल्याचा धोका आहे. + +#### खराब प्रोत्साहन सुसंगतता {#poor-incentive-compatibility} + +केंद्रीकृत ओरॅकल्समध्ये अनेकदा डेटा प्रदात्याला अचूक/अपरिवर्तित माहिती पाठवण्यासाठी खराब डिझाइन केलेले किंवा अस्तित्वात नसलेले प्रोत्साहन असते. अचूकतेसाठी ओरॅकलला पैसे देणे प्रामाणिकपणाची हमी देत नाही. स्मार्ट कॉन्ट्रॅक्ट्सद्वारे नियंत्रित मूल्याच्या प्रमाणात ही समस्या अधिक मोठी होते. + +### विकेंद्रित ओरॅकल्स {#decentralized-oracles} + +विकेंद्रित ओरॅकल्स केंद्रीकृत ओरॅकल्सच्या मर्यादांवर मात करण्यासाठी डिझाइन केलेले आहेत, ज्यामुळे अपयशाचे एकच बिंदू दूर होतात. विकेंद्रित ओरॅकल सेवेमध्ये पीअर-टू-पीअर नेटवर्कमधील अनेक सहभागींचा समावेश असतो जे स्मार्ट कॉन्ट्रॅक्टला पाठवण्यापूर्वी ऑफचेन डेटावर एकमत तयार करतात. + +एक विकेंद्रित ओरॅकल (आदर्शपणे) परवानगीशिवाय, विश्वासहीन आणि केंद्रीय पक्षाच्या प्रशासनापासून मुक्त असावा; प्रत्यक्षात, ओरॅकल्समधील विकेंद्रीकरण एका स्पेक्ट्रमवर आहे. अर्ध-विकेंद्रित ओरॅकल नेटवर्क आहेत जिथे कोणीही सहभागी होऊ शकतो, परंतु एक “मालक” असतो जो ऐतिहासिक कामगिरीच्या आधारावर नोड्सना मंजूर करतो आणि काढून टाकतो. पूर्णपणे विकेंद्रित ओरॅकल नेटवर्क देखील अस्तित्वात आहेत: हे सहसा स्वतंत्र ब्लॉकचेन म्हणून चालतात आणि नोड्सचे समन्वय साधण्यासाठी आणि गैरवर्तनासाठी शिक्षा देण्यासाठी परिभाषित सहमती यंत्रणा असतात. + +विकेंद्रित ओरॅकल्स वापरण्याचे खालील फायदे आहेत: + +### उच्च अचूकतेची हमी {#high-correctness-guarantees} + +विकेंद्रित ओरॅकल्स वेगवेगळ्या दृष्टिकोनांचा वापर करून डेटाची अचूकता प्राप्त करण्याचा प्रयत्न करतात. यामध्ये परत केलेल्या माहितीची सत्यता आणि अखंडता सिद्ध करणारे पुरावे वापरणे आणि ऑफचेन डेटाच्या वैधतेवर एकत्रितपणे सहमत होण्यासाठी अनेक संस्थांची आवश्यकता असते. + +#### सत्यतेचे पुरावे {#authenticity-proofs} + +सत्यतेचे पुरावे हे क्रिप्टोग्राफिक यंत्रणा आहेत जे बाह्य स्रोतांकडून पुनर्प्राप्त केलेल्या माहितीची स्वतंत्र पडताळणी करण्यास सक्षम करतात. हे पुरावे माहितीच्या स्रोताची पडताळणी करू शकतात आणि पुनर्प्राप्तीनंतर डेटामधील संभाव्य बदलांचा शोध घेऊ शकतात. + +सत्यतेच्या पुराव्यांची उदाहरणे: + +**ट्रान्सपोर्ट लेयर सिक्युरिटी (TLS) पुरावे**: ओरॅकल नोड्स अनेकदा ट्रान्सपोर्ट लेयर सिक्युरिटी (TLS) प्रोटोकॉलवर आधारित सुरक्षित HTTP कनेक्शन वापरून बाह्य स्रोतांकडून डेटा पुनर्प्राप्त करतात. काही विकेंद्रित ओरॅकल्स TLS सत्रांची पडताळणी करण्यासाठी सत्यता पुराव्यांचा वापर करतात (म्हणजे, नोड आणि विशिष्ट सर्व्हर दरम्यान माहितीच्या देवाणघेवाणीची पुष्टी करणे) आणि सत्रातील सामग्री बदललेली नाही याची पुष्टी करतात. + +**ट्रस्टेड एक्झिक्यूशन एन्व्हायर्नमेंट (TEE) अटेस्टेशन्स**: एक [ट्रस्टेड एक्झिक्यूशन एन्व्हायर्नमेंट](https://en.wikipedia.org/wiki/Trusted_execution_environment) (TEE) हे एक सँडबॉक्स केलेले संगणकीय वातावरण आहे जे त्याच्या होस्ट सिस्टमच्या कार्यान्वयन प्रक्रियेपासून वेगळे आहे. TEEs हे सुनिश्चित करतात की संगणन वातावरणात संग्रहित/वापरलेला कोणताही ऍप्लिकेशन कोड किंवा डेटा अखंडता, गोपनीयता आणि अपरिवर्तनीयता टिकवून ठेवतो. वापरकर्ते ट्रस्टेड एक्झिक्यूशन एन्व्हायर्नमेंटमध्ये ऍप्लिकेशन इन्स्टन्स चालू आहे हे सिद्ध करण्यासाठी एक अटेस्टेशन देखील तयार करू शकतात. + +विकेंद्रित ओरॅकल्सच्या विशिष्ट वर्गांना ओरॅकल नोड ऑपरेटर्सना TEE अटेस्टेशन्स प्रदान करणे आवश्यक असते. हे वापरकर्त्याला पुष्टी देते की नोड ऑपरेटर ट्रस्टेड एक्झिक्यूशन एन्व्हायर्नमेंटमध्ये ओरॅकल क्लायंटचा इन्स्टन्स चालवत आहे. TEEs बाह्य प्रक्रियांच्या ऍप्लिकेशनच्या कोड आणि डेटामध्ये बदल करण्यापासून किंवा वाचण्यापासून प्रतिबंध करतात, त्यामुळे, ते अटेस्टेशन्स सिद्ध करतात की ओरॅकल नोडने माहिती अखंड आणि गोपनीय ठेवली आहे. + +#### माहितीची सहमती-आधारित पडताळणी {#consensus-based-validation-of-information} + +केंद्रीकृत ओरॅकल्स स्मार्ट कॉन्ट्रॅक्ट्सना डेटा प्रदान करताना सत्याच्या एकाच स्रोतावर अवलंबून असतात, ज्यामुळे चुकीची माहिती प्रकाशित होण्याची शक्यता निर्माण होते. विकेंद्रित ओरॅकल्स ऑफचेन माहितीची क्वेरी करण्यासाठी अनेक ओरॅकल नोड्सवर अवलंबून राहून ही समस्या सोडवतात. अनेक स्रोतांकडून डेटाची तुलना करून, विकेंद्रित ओरॅकल्स ऑनचेन कॉन्ट्रॅक्ट्सना अवैध माहिती पाठवण्याचा धोका कमी करतात. + +तथापि, विकेंद्रित ओरॅकल्सना अनेक ऑफचेन स्रोतांकडून पुनर्प्राप्त केलेल्या माहितीमधील विसंगती हाताळावी लागते. माहितीमधील फरक कमी करण्यासाठी आणि ओरॅकल कॉन्ट्रॅक्टला पाठवलेला डेटा ओरॅकल नोड्सच्या सामूहिक मताचे प्रतिबिंब आहे हे सुनिश्चित करण्यासाठी, विकेंद्रित ओरॅकल्स खालील यंत्रणा वापरतात: + +##### डेटाच्या अचूकतेवर मतदान/स्टेकिंग करणे + +काही विकेंद्रित ओरॅकल नेटवर्क्स सहभागींना डेटा क्वेरींच्या उत्तरांच्या अचूकतेवर मतदान किंवा स्टेक करणे आवश्यक करतात (उदा., "2020 ची यूएस निवडणूक कोणी जिंकली?"). नेटवर्कच्या मूळ टोकनचा वापर करून. एकत्रीकरण प्रोटोकॉल नंतर मते आणि स्टेक्स एकत्रित करतो आणि बहुमताने समर्थित उत्तर वैध म्हणून घेतो. + +ज्या नोड्सची उत्तरे बहुमताच्या उत्तरापेक्षा वेगळी असतात त्यांना त्यांचे टोकन अधिक अचूक मूल्ये प्रदान करणाऱ्या इतरांना वितरित करून दंडित केले जाते. डेटा प्रदान करण्यापूर्वी नोड्सना बॉण्ड प्रदान करण्यास भाग पाडणे प्रामाणिक प्रतिसादांना प्रोत्साहन देते कारण ते तर्कसंगत आर्थिक अभिनेते मानले जातात जे परतावा जास्तीत जास्त करण्याच्या हेतूने असतात. + +स्टेकिंग/मतदान विकेंद्रित ओरॅकल्सना [सिबिल हल्ल्यांपासून](/glossary/#sybil-attack) देखील संरक्षण देते जिथे दुर्भावनापूर्ण अभिनेते सहमती प्रणालीला खेळण्यासाठी अनेक ओळखी तयार करतात. तथापि, स्टेकिंग “फ्रीलोडिंग” (ओरॅकल नोड्स इतरांकडून माहिती कॉपी करणे) आणि “आळशी पडताळणी” (ओरॅकल नोड्स स्वतः माहितीची पडताळणी न करता बहुमताचे अनुसरण करणे) प्रतिबंधित करू शकत नाही. + +##### शेलिंग पॉइंट यंत्रणा + +[शेलिंग पॉइंट](https://en.wikipedia.org/wiki/Focal_point_\(game_theory\)) ही एक गेम-थिअरी संकल्पना आहे जी गृहीत धरते की अनेक संस्था कोणत्याही संवादाच्या अनुपस्थितीत समस्येवर नेहमीच एका सामान्य समाधानाकडे वळतील. शेलिंग-पॉइंट यंत्रणा अनेकदा विकेंद्रित ओरॅकल नेटवर्क्समध्ये वापरल्या जातात जेणेकरून नोड्सना डेटा विनंत्यांच्या उत्तरांवर सहमती साधता येईल. + +यासाठी एक प्रारंभिक कल्पना [शेलिंगकॉइन](https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/) होती, जो एक प्रस्तावित डेटा फीड आहे जिथे सहभागी "स्केलर" प्रश्नांची उत्तरे (ज्या प्रश्नांची उत्तरे परिमाणाने वर्णन केली जातात, उदा., "ETH ची किंमत काय आहे?") एका ठेवीसह सबमिट करतात. 25 व्या आणि 75 व्या [पर्सेंटाइल](https://en.wikipedia.org/wiki/Percentile) दरम्यान मूल्ये प्रदान करणाऱ्या वापरकर्त्यांना पुरस्कृत केले जाते, तर ज्यांची मूल्ये मध्यक मूल्यापासून मोठ्या प्रमाणात विचलित होतात त्यांना दंडित केले जाते. + +जरी शेलिंगकॉइन आज अस्तित्वात नसले तरी, अनेक विकेंद्रित ओरॅकल्स — विशेषतः [मेकर प्रोटोकॉलचे ओरॅकल्स](https://docs.makerdao.com/smart-contract-modules/oracle-module) — ओरॅकल डेटाची अचूकता सुधारण्यासाठी शेलिंग-पॉइंट यंत्रणेचा वापर करतात. प्रत्येक मेकर ओरॅकलमध्ये नोड्सच्या (“रिलेअर्स” आणि “फीड्स”) ऑफचेन P2P नेटवर्कचा समावेश असतो जे संपार्श्विक मालमत्तेसाठी बाजारातील किमती सबमिट करतात आणि एक ऑनचेन “मीडियनाइझर” कॉन्ट्रॅक्ट जो सर्व प्रदान केलेल्या मूल्यांचा मध्यक मोजतो. एकदा निर्दिष्ट विलंब कालावधी संपला की, हे मध्यक मूल्य संबंधित मालमत्तेसाठी नवीन संदर्भ किंमत बनते. + +शेलिंग पॉइंट यंत्रणा वापरणाऱ्या ओरॅकल्सच्या इतर उदाहरणांमध्ये [चेनलिंक ऑफचेन रिपोर्टिंग](https://docs.chain.link/architecture-overview/off-chain-reporting) आणि [विटनेट](https://witnet.io/) यांचा समावेश आहे. दोन्ही प्रणालींमध्ये, पीअर-टू-पीअर नेटवर्कमधील ओरॅकल नोड्सच्या प्रतिसादांना एकाच एकत्रित मूल्यात, जसे की मध्य किंवा मध्यक, एकत्रित केले जाते. नोड्सना त्यांचे प्रतिसाद एकत्रित मूल्याशी किती प्रमाणात जुळतात किंवा त्यापासून विचलित होतात यानुसार पुरस्कृत किंवा दंडित केले जाते. + +शेलिंग पॉइंट यंत्रणा आकर्षक आहेत कारण त्या ऑनचेन फूटप्रिंट कमी करतात (फक्त एक व्यवहार पाठवण्याची आवश्यकता आहे) आणि विकेंद्रीकरणाची हमी देतात. नंतरचे शक्य आहे कारण नोड्सनी सबमिट केलेल्या प्रतिसादांच्या यादीवर स्वाक्षरी करणे आवश्यक आहे, त्याआधी ते अल्गोरिदममध्ये दिले जाते जे मध्य/मध्यक मूल्य तयार करते. + +### उपलब्धता {#availability} + +विकेंद्रित ओरॅकल सेवा स्मार्ट कॉन्ट्रॅक्ट्सना ऑफचेन डेटाची उच्च उपलब्धता सुनिश्चित करतात. हे ऑफचेन माहितीच्या स्रोताचे आणि माहिती ऑनचेन हस्तांतरित करण्यासाठी जबाबदार असलेल्या नोड्सचे विकेंद्रीकरण करून साध्य केले जाते. + +हे दोष-सहिष्णुता सुनिश्चित करते कारण ओरॅकल कॉन्ट्रॅक्ट इतर कॉन्ट्रॅक्ट्सकडून क्वेरी कार्यान्वित करण्यासाठी अनेक नोड्सवर (जे अनेक डेटा स्रोतांवर देखील अवलंबून असतात) अवलंबून राहू शकतो. स्रोतावर आणि नोड-ऑपरेटर स्तरावर विकेंद्रीकरण महत्त्वपूर्ण आहे—एकाच स्रोतावरून पुनर्प्राप्त केलेली माहिती देणारे ओरॅकल नोड्सचे नेटवर्क केंद्रीकृत ओरॅकलसारख्याच समस्येत सापडेल. + +स्टेक-आधारित ओरॅकल्ससाठी नोड ऑपरेटर्सना स्लॅश करणे देखील शक्य आहे जे डेटा विनंत्यांना त्वरीत प्रतिसाद देण्यात अयशस्वी ठरतात. हे ओरॅकल नोड्सना दोष-सहिष्णु पायाभूत सुविधांमध्ये गुंतवणूक करण्यास आणि वेळेवर डेटा प्रदान करण्यास लक्षणीयरीत्या प्रोत्साहन देते. + +### चांगली प्रोत्साहन सुसंगतता {#good-incentive-compatibility} + +विकेंद्रित ओरॅकल्स ओरॅकल नोड्समधील [बायझंटाइन](https://en.wikipedia.org/wiki/Byzantine_fault) वर्तन रोखण्यासाठी विविध प्रोत्साहन डिझाइन लागू करतात. विशेषतः, ते _श्रेय देण्याची क्षमता_ आणि _उत्तरदायित्व_ साध्य करतात: + +1. विकेंद्रित ओरॅकल नोड्सना डेटा विनंत्यांच्या प्रतिसादात ते प्रदान करत असलेल्या डेटावर स्वाक्षरी करणे आवश्यक असते. ही माहिती ओरॅकल नोड्सच्या ऐतिहासिक कामगिरीचे मूल्यांकन करण्यास मदत करते, जेणेकरून वापरकर्ते डेटा विनंत्या करताना अविश्वसनीय ओरॅकल नोड्स फिल्टर करू शकतात. एक उदाहरण विटनेटची [ॲल्गोरिथमिक रिप्युटेशन सिस्टीम](https://docs.witnet.io/intro/about/architecture#algorithmic-reputation-system) आहे. + +2. विकेंद्रित ओरॅकल्स—जसे आधी स्पष्ट केले आहे—नोड्सना ते सबमिट करत असलेल्या डेटाच्या सत्यावरील त्यांच्या आत्मविश्वासावर स्टेक ठेवण्याची आवश्यकता असू शकते. जर दावा खरा ठरला, तर हा स्टेक प्रामाणिक सेवेसाठी पुरस्कारांसह परत केला जाऊ शकतो. परंतु माहिती चुकीची असल्यास ते स्लॅश देखील केले जाऊ शकते, ज्यामुळे काही प्रमाणात उत्तरदायित्व मिळते. + +## स्मार्ट कॉन्ट्रॅक्ट्समध्ये ओरॅकल्सचे ऍप्लिकेशन्स {#applications-of-oracles-in-smart-contracts} + +इथेरियममध्ये ओरॅकल्ससाठी खालील सामान्य वापर-प्रकरणे आहेत: + +### आर्थिक डेटा पुनर्प्राप्त करणे {#retrieving-financial-data} + +[विकेंद्रित वित्त](/defi/) (DeFi) ऍप्लिकेशन्स पीअर-टू-पीअर कर्ज देणे, घेणे आणि मालमत्तेचा व्यापार करण्याची परवानगी देतात. यासाठी अनेकदा विविध आर्थिक माहिती मिळवणे आवश्यक असते, ज्यात विनिमय दर डेटा (क्रिप्टोकरन्सीचे फियाट मूल्य मोजण्यासाठी किंवा टोकन किमतींची तुलना करण्यासाठी) आणि भांडवली बाजार डेटा (सोनं किंवा यूएस डॉलरसारख्या टोकनाइज्ड मालमत्तेचे मूल्य मोजण्यासाठी) यांचा समावेश आहे. + +एक DeFi कर्ज प्रोटोकॉल, उदाहरणार्थ, संपार्श्विक म्हणून जमा केलेल्या मालमत्तेच्या (उदा., ETH) सध्याच्या बाजारातील किमतींची क्वेरी करणे आवश्यक आहे. हे कॉन्ट्रॅक्टला संपार्श्विक मालमत्तेचे मूल्य निर्धारित करण्यास आणि प्रणालीतून किती कर्ज घेऊ शकते हे ठरविण्यास अनुमती देते. + +DeFi मधील लोकप्रिय “प्राइस ओरॅकल्स” (जसे त्यांना अनेकदा म्हटले जाते) मध्ये चेनलिंक प्राइस फीड्स, कंपाऊंड प्रोटोकॉलचे [ओपन प्राइस फीड](https://compound.finance/docs/prices), युनिस्वॅपचे [टाइम-वेटेड ॲव्हरेज प्राइसेस (TWAPs)](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles), आणि [मेकर ओरॅकल्स](https://docs.makerdao.com/smart-contract-modules/oracle-module) यांचा समावेश आहे. + +बिल्डर्सनी त्यांच्या प्रोजेक्टमध्ये या प्राइस ओरॅकल्सना समाकलित करण्यापूर्वी त्यांच्यासोबत येणाऱ्या caveats (सावधगिरी) समजून घ्याव्यात. हा [लेख](https://blog.openzeppelin.com/secure-smart-contract-guidelines-the-dangers-of-price-oracles) उल्लेख केलेल्या कोणत्याही प्राइस ओरॅकल्सचा वापर करण्याची योजना आखताना काय विचार करावा याचे तपशीलवार विश्लेषण प्रदान करतो. + +खाली एक उदाहरण आहे की तुम्ही तुमच्या स्मार्ट कॉन्ट्रॅक्टमध्ये चेनलिंक प्राइस फीड वापरून नवीनतम ETH किंमत कशी पुनर्प्राप्त करू शकता: + +```solidity +pragma solidity ^0.6.7; + +import "@chainlink/contracts/src/v0.6/interfaces/AggregatorV3Interface.sol"; + +contract PriceConsumerV3 { + + AggregatorV3Interface internal priceFeed; + + /** + * नेटवर्क: Kovan + * ॲग्रीगेटर: ETH/USD + * ॲड्रेस: 0x9326BFA02ADD2366b30bacB125260Af641031331 + */ + constructor() public { + priceFeed = AggregatorV3Interface(0x9326BFA02ADD2366b30bacB125260Af641031331); + } + + /** + * नवीनतम किंमत परत करते + */ + function getLatestPrice() public view returns (int) { + ( + uint80 roundID, + int price, + uint startedAt, + uint timeStamp, + uint80 answeredInRound + ) = priceFeed.latestRoundData(); + return price; + } +} +``` + +### पडताळणीयोग्य यादृच्छिकता निर्माण करणे {#generating-verifiable-randomness} + +काही ब्लॉकचेन ऍप्लिकेशन्स, जसे की ब्लॉकचेन-आधारित गेम्स किंवा लॉटरी योजना, प्रभावीपणे कार्य करण्यासाठी उच्च पातळीची अप्रत्याशितता आणि यादृच्छिकता आवश्यक असते. तथापि, ब्लॉकचेनची निर्धारक अंमलबजावणी यादृच्छिकता काढून टाकते. + +मूळ दृष्टिकोन `blockhash` सारख्या स्यूडोरँडम क्रिप्टोग्राफिक फंक्शन्सचा वापर करणे होता, परंतु हे [मायनर्सद्वारे हाताळले जाऊ शकते](https://ethereum.stackexchange.com/questions/3140/risk-of-using-blockhash-other-miners-preventing-attack#:~:text=So%20while%20the%20miners%20can,to%20one%20of%20the%20players.) प्रूफ-ऑफ-वर्क अल्गोरिदम सोडवणे. तसेच, इथेरियमचे [प्रूफ-ऑफ-स्टेकवर स्विच करणे](/roadmap/merge/) म्हणजे डेव्हलपर्स आता ऑनचेन यादृच्छिकतेसाठी `blockhash` वर अवलंबून राहू शकत नाहीत. बीकन चेनची [RANDAO यंत्रणा](https://eth2book.info/altair/part2/building_blocks/randomness) त्याऐवजी यादृच्छिकतेचा पर्यायी स्रोत प्रदान करते. + +ऑफचेन यादृच्छिक मूल्य तयार करणे आणि ते ऑनचेन पाठवणे शक्य आहे, परंतु असे केल्याने वापरकर्त्यांवर उच्च विश्वासाची आवश्यकता लादली जाते. त्यांना विश्वास ठेवावा लागतो की मूल्य खरोखरच अप्रत्याशित यंत्रणेद्वारे तयार केले गेले आहे आणि ते संक्रमणामध्ये बदलले नाही. + +ऑफचेन गणनेसाठी डिझाइन केलेले ओरॅकल्स ही समस्या सोडवतात, ते ऑफचेन सुरक्षितपणे यादृच्छिक परिणाम तयार करतात जे ते प्रक्रियेच्या अप्रत्याशिततेची पुष्टी करणाऱ्या क्रिप्टोग्राफिक पुराव्यांसह ऑनचेन प्रसारित करतात. एक उदाहरण म्हणजे [चेनलिंक VRF](https://docs.chain.link/docs/chainlink-vrf/) (व्हेरिफायेबल रँडम फंक्शन), जो एक सिद्धपणे निष्पक्ष आणि छेडछाड-प्रतिरोधक यादृच्छिक संख्या जनरेटर (RNG) आहे जो अप्रत्याशित परिणामांवर अवलंबून असलेल्या ऍप्लिकेशन्ससाठी विश्वसनीय स्मार्ट कॉन्ट्रॅक्ट्स तयार करण्यासाठी उपयुक्त आहे. + +### घटनांसाठी परिणाम मिळवणे {#getting-outcomes-for-events} + +ओरॅकल्ससह, वास्तविक-जगातील घटनांना प्रतिसाद देणारे स्मार्ट कॉन्ट्रॅक्ट्स तयार करणे सोपे आहे. ओरॅकल सेवा कॉन्ट्रॅक्ट्सना ऑफचेन घटकांद्वारे बाह्य APIs शी कनेक्ट करण्याची आणि त्या डेटा स्रोतांमधून माहिती वापरण्याची परवानगी देऊन हे शक्य करतात. उदाहरणार्थ, पूर्वी उल्लेख केलेला प्रेडिक्शन डॅप एका ओरॅकलला एका विश्वसनीय ऑफचेन स्रोताकडून (उदा., असोसिएटेड प्रेस) निवडणुकीचे निकाल परत करण्याची विनंती करू शकतो. + +वास्तविक-जगातील परिणामांवर आधारित डेटा पुनर्प्राप्त करण्यासाठी ओरॅकल्सचा वापर इतर नवीन वापर-प्रकरणांना सक्षम करतो; उदाहरणार्थ, एका विकेंद्रित विमा उत्पादनाला प्रभावीपणे कार्य करण्यासाठी हवामान, आपत्ती इत्यादींबद्दल अचूक माहितीची आवश्यकता असते. + +### स्मार्ट कॉन्ट्रॅक्ट्स स्वयंचलित करणे {#automating-smart-contracts} + +स्मार्ट कॉन्ट्रॅक्ट्स आपोआप चालत नाहीत; त्याऐवजी, बाह्यतः मालकीचे खाते (EOA), किंवा दुसरे कॉन्ट्रॅक्ट खाते, कॉन्ट्रॅक्टचा कोड कार्यान्वित करण्यासाठी योग्य फंक्शन्स चालवणे आवश्यक आहे. बहुतेक प्रकरणांमध्ये, कॉन्ट्रॅक्टची बरीचशी फंक्शन्स सार्वजनिक असतात आणि EOAs आणि इतर कॉन्ट्रॅक्ट्सद्वारे बोलावली जाऊ शकतात. + +परंतु कॉन्ट्रॅक्टमध्ये _खाजगी फंक्शन्स_ देखील आहेत जी इतरांसाठी प्रवेशयोग्य नाहीत;, परंतु जी डॅपच्या एकूण कार्यक्षमतेसाठी महत्त्वपूर्ण आहेत. उदाहरणांमध्ये `mintERC721Token()` फंक्शन जे नियमितपणे वापरकर्त्यांसाठी नवीन NFTs मिंट करते, प्रेडिक्शन मार्केटमध्ये पेमेंट देण्यासाठी एक फंक्शन, किंवा DEX मध्ये स्टेक केलेले टोकन्स अनलॉक करण्यासाठी एक फंक्शन यांचा समावेश आहे. + +ऍप्लिकेशन सुरळीतपणे चालू ठेवण्यासाठी डेव्हलपर्सना अशा फंक्शन्सना ठराविक अंतराने चालवणे आवश्यक असेल. तथापि, यामुळे डेव्हलपर्ससाठी क्षुल्लक कामांमध्ये अधिक तास वाया जाऊ शकतात, म्हणूनच स्मार्ट कॉन्ट्रॅक्ट्सची अंमलबजावणी स्वयंचलित करणे आकर्षक आहे. + +काही विकेंद्रित ओरॅकल नेटवर्क ऑटोमेशन सेवा देतात, जे ऑफचेन ओरॅकल नोड्सना वापरकर्त्याद्वारे परिभाषित केलेल्या पॅरामीटर्सनुसार स्मार्ट कॉन्ट्रॅक्ट फंक्शन्स चालविण्याची परवानगी देतात. यासाठी सामान्यतः लक्ष्य कॉन्ट्रॅक्टला ओरॅकल सेवेसह “नोंदणी” करणे, ओरॅकल ऑपरेटरला पैसे देण्यासाठी निधी प्रदान करणे आणि कॉन्ट्रॅक्टला चालवण्यासाठीच्या अटी किंवा वेळा निर्दिष्ट करणे आवश्यक असते. + +चेनलिंकचा [कीपर नेटवर्क](https://chain.link/keepers) स्मार्ट कॉन्ट्रॅक्ट्सना कमीत कमी विश्वासावर आणि विकेंद्रित पद्धतीने नियमित देखभालीची कामे आउटसोर्स करण्याचे पर्याय प्रदान करते. तुमचा कॉन्ट्रॅक्ट कीपर-सुसंगत बनवण्यासाठी आणि अपकीप सेवेचा वापर करण्यासाठी अधिकृत [कीपरची माहिती](https://docs.chain.link/docs/chainlink-keepers/introduction/) वाचा. + +## ब्लॉकचेन ओरॅकल्स कसे वापरावे {#use-blockchain-oracles} + +तुमच्या इथेरियम डॅपमध्ये तुम्ही समाकलित करू शकणारे अनेक ओरॅकल ऍप्लिकेशन्स आहेत: + +**[Chainlink](https://chain.link/)** - _चेनलिंक विकेंद्रित ओरॅकल नेटवर्क्स कोणत्याही ब्लॉकचेनवर प्रगत स्मार्ट कॉन्ट्रॅक्ट्सना समर्थन देण्यासाठी छेडछाड-प्रतिरोधक इनपुट, आउटपुट आणि गणना प्रदान करतात._ + +**[RedStone Oracles](https://redstone.finance/)** - _रेडस्टोन हे एक विकेंद्रित मॉड्युलर ओरॅकल आहे जे गॅस-ऑप्टिमाइझ्ड डेटा फीड्स प्रदान करते. हे लिक्विड स्टेकिंग टोकन्स (LSTs), लिक्विड रीस्टेकिंग टोकन्स (LRTs), आणि बिटकॉइन स्टेकिंग डेरिव्हेटिव्ह्जसारख्या उदयोन्मुख मालमत्तेसाठी किंमत फीड्स प्रदान करण्यात माहिर आहे._ + +**[Chronicle](https://chroniclelabs.org/)** - _क्रॉनिकल खऱ्या अर्थाने स्केलेबल, किफायतशीर, विकेंद्रित आणि पडताळणीयोग्य ओरॅकल्स विकसित करून ऑनचेन डेटा हस्तांतरित करण्याच्या सध्याच्या मर्यादांवर मात करते._ + +**[Witnet](https://witnet.io/)** - _विटनेट हे एक परवानगीशिवाय, विकेंद्रित आणि सेन्सॉरशिप-प्रतिरोधक ओरॅकल आहे जे स्मार्ट कॉन्ट्रॅक्ट्सना मजबूत क्रिप्टो-इकॉनॉमिक हमीसह वास्तविक जगातील घटनांवर प्रतिक्रिया देण्यास मदत करते._ + +**[UMA Oracle](https://uma.xyz)** - _UMA चे आशावादी ओरॅकल स्मार्ट कॉन्ट्रॅक्ट्सना विमा, आर्थिक डेरिव्हेटिव्ह्ज आणि प्रेडिक्शन मार्केट्ससह विविध ऍप्लिकेशन्ससाठी कोणत्याही प्रकारचा डेटा त्वरीत प्राप्त करण्याची परवानगी देते._ + +**[Tellor](https://tellor.io/)** - _टेलोर हा तुमच्या स्मार्ट कॉन्ट्रॅक्टसाठी एक पारदर्शक आणि परवानगीशिवाय ओरॅकल प्रोटोकॉल आहे, ज्यामुळे त्याला गरज असेल तेव्हा कोणताही डेटा सहजपणे मिळू शकतो._ + +**[Band Protocol](https://bandprotocol.com/)** - _बँड प्रोटोकॉल हा एक क्रॉस-चेन डेटा ओरॅकल प्लॅटफॉर्म आहे जो वास्तविक-जगातील डेटा आणि APIs ला स्मार्ट कॉन्ट्रॅक्ट्समध्ये एकत्रित करतो आणि जोडतो._ + +**[Pyth Network](https://pyth.network/)** - _Pyth नेटवर्क हे एक प्रथम-पक्षीय आर्थिक ओरॅकल नेटवर्क आहे जे छेडछाड-प्रतिरोधक, विकेंद्रित आणि स्व-शाश्वत वातावरणात ऑनचेन सतत वास्तविक-जगातील डेटा प्रकाशित करण्यासाठी डिझाइन केलेले आहे._ + +**[API3 DAO](https://www.api3.org/)** - _API3 DAO प्रथम-पक्षीय ओरॅकल सोल्यूशन्स देत आहे जे स्मार्ट कॉन्ट्रॅक्ट्ससाठी विकेंद्रित सोल्यूशनमध्ये अधिक स्रोत पारदर्शकता, सुरक्षा आणि स्केलेबिलिटी देतात._ + +**[Supra](https://supra.com/)** - क्रॉस-चेन सोल्यूशन्सचे एक अनुलंब एकात्मिक टूलकिट जे सर्व ब्लॉकचेन, सार्वजनिक (L1s आणि L2s) किंवा खाजगी (उद्यम), एकमेकांशी जोडते, विकेंद्रित ओरॅकल किंमत फीड्स प्रदान करते जे ऑनचेन आणि ऑफचेन वापरासाठी वापरले जाऊ शकतात. + +**[Gas Network](https://gas.network/)** - ब्लॉकचेनवर रिअल-टाइम गॅस किंमत डेटा प्रदान करणारा एक वितरित ओरॅकल प्लॅटफॉर्म. अग्रगण्य गॅस किंमत डेटा प्रदात्यांकडून डेटा ऑनचेन आणून, Gas Network इंटरऑपरेबिलिटीला चालना देण्यास मदत करत आहे. Gas Network इथेरियम मेननेट आणि अनेक अग्रगण्य L2 सह 35 पेक्षा जास्त चेन्ससाठी डेटाला समर्थन देते. + +## पुढील वाचन {#further-reading} + +**लेख** + +- [ब्लॉकचेन ओरॅकल म्हणजे काय?](https://chain.link/education/blockchain-oracles) — _चेनलिंक_ +- [ब्लॉकचेन ओरॅकल म्हणजे काय?](https://medium.com/better-programming/what-is-a-blockchain-oracle-f5ccab8dbd72) — _पॅट्रिक कॉलिन्स_ +- [विकेंद्रित ओरॅकल्स: एक सर्वसमावेशक आढावा](https://medium.com/fabric-ventures/decentralised-oracles-a-comprehensive-overview-d3168b9a8841) — _ज्युलियन थेवेनार्ड_ +- [इथेरियमवर ब्लॉकचेन ओरॅकल लागू करणे](https://medium.com/@pedrodc/implementing-a-blockchain-oracle-on-ethereum-cedc7e26b49e) – _पेड्रो कोस्टा_ +- [स्मार्ट कॉन्ट्रॅक्ट्स API कॉल्स का करू शकत नाहीत?](https://ethereum.stackexchange.com/questions/301/why-cant-contracts-make-api-calls) — _स्टॅकएक्सचेंज_ +- [तर तुम्हाला प्राइस ओरॅकल वापरायचे आहे](https://samczsun.com/so-you-want-to-use-a-price-oracle/) — _samczsun_ + +**व्हिडिओ** + +- [ओरॅकल्स आणि ब्लॉकचेन उपयोगितेचा विस्तार](https://youtu.be/BVUZpWa8vpw) — _रिअल व्हिजन फायनान्स_ + +**शिकवण्या** + +- [सॉलिडिटीमध्ये इथेरियमची सध्याची किंमत कशी मिळवायची](https://blog.chain.link/fetch-current-crypto-price-data-solidity/) — _चेनलिंक_ +- [ओरॅकल डेटा वापरणे](https://docs.chroniclelabs.org/Developers/tutorials/Remix) — _क्रॉनिकल_ + +**उदाहरणार्थ प्रकल्प** + +- [सॉलिडिटीमध्ये इथेरियमसाठी पूर्ण चेनलिंक स्टार्टर प्रोजेक्ट](https://github.com/hackbg/chainlink-fullstack) — _HackBG_ diff --git a/public/content/translations/mr/developers/docs/programming-languages/dart/index.md b/public/content/translations/mr/developers/docs/programming-languages/dart/index.md new file mode 100644 index 00000000000..485be371f0e --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/dart/index.md @@ -0,0 +1,31 @@ +--- +title: "डार्ट डेव्हलपर्ससाठी इथेरियम" +description: "डार्ट भाषेचा वापर करून इथेरियमसाठी डेव्हलप कसे करायचे ते शिका" +lang: mr +incomplete: true +--- + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह प्रारंभ करणे {#getting-started-with-smart-contracts-and-solidity} + +## ट्यूटोरियल्स {#tutorials} + +- [Flutter आणि ब्लॉकचेन – हॅलो वर्ल्ड Dapp](https://www.geeksforgeeks.org/flutter-and-blockchain-hello-world-dapp/) तुम्हाला सुरुवात करण्यासाठी सर्व पायऱ्यांमधून घेऊन जाते: + 1. [Solidity](https://soliditylang.org/) मध्ये स्मार्ट कॉन्ट्रॅक्ट लिहिणे + 2. डार्टमध्ये यूजर इंटरफेस लिहिणे +- [Flutter सह मोबाईल dapp तयार करणे](https://medium.com/dash-community/building-a-mobile-dapp-with-flutter-be945c80315a) खूपच लहान आहे, जे अधिक चांगले असू शकते + जर तुम्हाला आधीच मूलभूत गोष्टी माहित असतील तर +- जर तुम्ही व्हिडिओ पाहून शिकण्यास प्राधान्य देत असाल, तर तुम्ही [तुमचे पहिले ब्लॉकचेन Flutter ॲप तयार करा](https://www.youtube.com/watch?v=3Eeh3pJ6PeA) पाहू शकता, जे सुमारे एक तासाचे आहे +- जर तुम्ही अधीर असाल, तर तुम्ही [Flutter आणि Dart सह Ethereum वर ब्लॉकचेन विकेंद्रित-ॲप तयार करणे](https://www.youtube.com/watch?v=jaMFEOCq_1s) ला प्राधान्य देऊ शकता, जे फक्त सुमारे वीस मिनिटांचे आहे +- [WalletConnect द्वारे Web3Modal सह Flutter ॲप्लिकेशनमध्ये MetaMask समाकलित करणे](https://www.youtube.com/watch?v=v_M2buHCpc4) - हा छोटा व्हिडिओ तुम्हाला WalletConnect द्वारे [Web3Modal](https://pub.dev/packages/web3modal_flutter) लायब्ररीसह तुमच्या Flutter ॲप्लिकेशन्समध्ये MetaMask समाकलित करण्याच्या पायऱ्यांमधून घेऊन जातो +- [Solidity आणि Flutter सह मोबाईल ब्लॉकचेन डेव्हलपर बूटकॅम्प कोर्स](https://youtube.com/playlist?list=PL4V4Unlk5luhQ26ERO6hWEbcUwHDSSmVH) - फुल स्टॅक मोबाईल ब्लॉकचेन डेव्हलपर कोर्स प्लेलिस्ट + +## इथेरियम क्लायंट्ससोबत काम करणे {#working-with-ethereum-clients} + +तुम्ही विकेंद्रित ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियमचा वापर करू शकता जे क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करतात. +इथेरियमसाठी [JSON-RPC API](/developers/docs/apis/json-rpc/) वापरण्याकरिता डार्टसाठी सध्या किमान दोन लायब्ररींची देखरेख केली जाते. + +1. [pwa.ir कडून Web3dart](https://pub.dev/packages/web3dart) +2. [darticulate.com कडून इथेरियम 5.0.0](https://pub.dev/packages/ethereum) + +अशा अतिरिक्त लायब्ररी देखील आहेत ज्या तुम्हाला विशिष्ट इथेरियम ॲड्रेस हाताळण्याची परवानगी देतात, किंवा ज्या तुम्हाला विविध क्रिप्टोकरन्सीच्या किमती मिळवू देतात. +[तुम्ही संपूर्ण यादी येथे पाहू शकता](https://pub.dev/dart/packages?q=ethereum). diff --git a/public/content/translations/mr/developers/docs/programming-languages/delphi/index.md b/public/content/translations/mr/developers/docs/programming-languages/delphi/index.md new file mode 100644 index 00000000000..eb955450708 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/delphi/index.md @@ -0,0 +1,56 @@ +--- +title: "डेल्फी डेव्हलपर्ससाठी इथेरियम" +description: "डेल्फी प्रोग्रामिंग भाषेचा वापर करून इथेरियमसाठी कसे विकसित करावे ते शिका" +lang: mr +incomplete: true +--- + + + +डेल्फी प्रोग्रामिंग भाषेचा वापर करून इथेरियमसाठी कसे विकसित करावे ते शिका + + + +क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करणाऱ्या विकेंद्रीकृत ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियम वापरा. हे dapps विश्वासार्ह असू शकतात, याचा अर्थ असा की एकदा ते इथेरियमवर तैनात केले की, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. नवीन प्रकारचे आर्थिक ॲप्लिकेशन्स तयार करण्यासाठी ते डिजिटल मालमत्ता नियंत्रित करू शकतात. ते विकेंद्रित असू शकतात, याचा अर्थ असा की कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि सेन्सॉर करणे जवळजवळ अशक्य आहे. + +इथेरियमवर विकेंद्रीकृत ऍप्लिकेशन्स तयार करा आणि डेल्फी प्रोग्रामिंग भाषेचा वापर करून स्मार्ट कॉन्ट्रॅक्ट्सशी संवाद साधा! + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह सुरुवात करणे {#getting-started-with-smart-contracts-and-the-solidity-language} + +**डेल्फीला इथेरियमसोबत समाकलित करण्यासाठी तुमची पहिली पाऊले उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers](/developers/) पहा. + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## नवशिक्यांसाठी संदर्भ आणि लिंक्स {#beginner-references-and-links} + +**डेल्फिअरिअम लायब्ररी सादर करत आहोत** + +- [डेल्फिअरिअम म्हणजे काय?](https://github.com/svanas/delphereum/blob/master/README.md) +- [डेल्फीला स्थानिक (इन-मेमरी) ब्लॉकचेनशी कनेक्ट करणे](https://medium.com/@svanas/connecting-delphi-to-a-local-in-memory-blockchain-9a1512d6c5b0) +- [डेल्फीला इथेरियम मेननेटशी कनेक्ट करणे](https://medium.com/@svanas/connecting-delphi-to-the-ethereum-main-net-5faf1feffd83) +- [डेल्फीला स्मार्ट कॉन्ट्रॅक्ट्सशी कनेक्ट करणे](https://medium.com/@svanas/connecting-delphi-to-smart-contracts-3146b12803a1) + +**तुम्हाला आतासाठी सेटअप वगळून थेट सॅम्पल्सवर जायचे आहे का?** + +- [३ मिनिटांत स्मार्ट कॉन्ट्रॅक्ट आणि डेल्फी - भाग १](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-61d998571d) +- [३ मिनिटांत स्मार्ट कॉन्ट्रॅक्ट आणि डेल्फी - भाग २](https://medium.com/@svanas/a-3-minute-smart-contract-and-delphi-part-2-446925faa47b) + +## मध्यम स्तरावरील लेख {#intermediate-articles} + +- [डेल्फीमध्ये इथेरियम-साईन्ड संदेश स्वाक्षरी तयार करणे](https://medium.com/@svanas/generating-an-ethereum-signed-message-signature-in-delphi-75661ce5031b) +- [डेल्फीसह ईथर हस्तांतरित करणे](https://medium.com/@svanas/transferring-ether-with-delphi-b5f24b1a98a4) +- [डेल्फीसह ERC-20 टोकन्स हस्तांतरित करणे](https://medium.com/@svanas/transferring-erc-20-tokens-with-delphi-bb44c05b295d) + +## प्रगत वापर पद्धती {#advanced-use-patterns} + +- [डेल्फी आणि इथेरियम नेम सर्व्हिस (ENS)](https://medium.com/@svanas/delphi-and-ethereum-name-service-ens-4443cd278af7) +- [क्विकनोड, इथेरियम आणि डेल्फी](https://medium.com/@svanas/quiknode-ethereum-and-delphi-f7bfc9671c23) +- [डेल्फी आणि इथेरियम डार्क फॉरेस्ट](https://svanas.medium.com/delphi-and-the-ethereum-dark-forest-5b430da3ad93) +- [डेल्फीमध्ये एका टोकनची दुसऱ्या टोकनमध्ये अदलाबदल करणे](https://svanas.medium.com/swap-one-token-for-another-in-delphi-bcb999c47f7) + +अधिक संसाधने शोधत आहात? [ethereum.org/developers](/developers/) पहा. diff --git a/public/content/translations/mr/developers/docs/programming-languages/dot-net/index.md b/public/content/translations/mr/developers/docs/programming-languages/dot-net/index.md new file mode 100644 index 00000000000..c37690848a1 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/dot-net/index.md @@ -0,0 +1,86 @@ +--- +title: ".NET डेव्हलपर्ससाठी इथेरियम" +description: ".NET-आधारित प्रोजेक्ट्स आणि टूलिंग वापरून इथेरियमसाठी डेव्हलप कसे करायचे ते शिका" +lang: mr +incomplete: true +--- + +.NET-आधारित प्रोजेक्ट्स आणि टूलिंग वापरून इथेरियमसाठी डेव्हलप कसे करायचे ते शिका + +क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करणाऱ्या विकेंद्रीकृत ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियम वापरा. हे dapps विश्वासार्ह असू शकतात, याचा अर्थ असा की एकदा ते इथेरियमवर तैनात केले की, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. नवीन प्रकारचे आर्थिक ॲप्लिकेशन्स तयार करण्यासाठी ते डिजिटल मालमत्ता नियंत्रित करू शकतात. ते विकेंद्रित असू शकतात, याचा अर्थ असा की कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि सेन्सॉर करणे जवळजवळ अशक्य आहे. + +मायक्रोसॉफ्ट टेक्नॉलॉजी स्टॅकमधील साधने आणि भाषा वापरून इथेरियमवर विकेंद्रित ऍप्लिकेशन्स तयार करा आणि स्मार्ट कॉन्ट्रॅक्ट्सशी संवाद साधा - जे .NET फ्रेमवर्क/.NET कोअर/.NET स्टँडर्डवर VSCode आणि व्हिज्युअल स्टुडिओ सारख्या टूलिंगवर C#, व्हिज्युअल बेसिक .NET, F# ला सपोर्ट करते. Microsoft Azure ब्लॉकचेन वापरून काही मिनिटांत Azure वर इथेरियम ब्लॉकचेन तैनात करा. .NET ची आवड इथेरियममध्ये आणा! + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह सुरुवात करणे {#getting-started-with-smart-contracts-and-the-solidity-language} + +**इथेरियमसोबत .NET एकत्रित करण्यासाठी तुमची पहिली पायरी उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers](/developers/) पहा. + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## नवशिक्यांसाठी संदर्भ आणि लिंक्स {#beginner-references-and-links} + +**Nethereum लायब्ररी आणि VS Code सॉलिडिटीची ओळख** + +- [Nethereum, सुरुवात करणे](https://docs.nethereum.com/en/latest/getting-started/) +- [VS Code सॉलिडिटी इंस्टॉल करणे](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity) +- [इथेरियम स्मार्ट कॉन्ट्रॅक्ट्स तयार करण्यासाठी आणि कॉल करण्यासाठी .NET डेव्हलपरची कार्यप्रणाली](https://medium.com/coinmonks/a-net-developers-workflow-for-creating-and-calling-ethereum-smart-contracts-44714f191db2) +- [Nethereum सोबत स्मार्ट कॉन्ट्रॅक्ट्सचे एकत्रीकरण](https://kauri.io/#collections/Getting%20Started/smart-contracts-integration-with-nethereum/#smart-contracts-integration-with-nethereumm) +- [Nethereum सह .NET आणि इथेरियम ब्लॉकचेन स्मार्ट कॉन्ट्रॅक्ट्सला इंटरफेस करणे](https://medium.com/my-blockchain-development-daily-journey/interfacing-net-and-ethereum-blockchain-smart-contracts-with-nethereum-2fa3729ac933), [中文版](https://medium.com/my-blockchain-development-daily-journey/%E4%BD%BF%E7%94%A8nethereum%E9%80%A3%E6%8E%A5-net%E5%92%8C%E4%BB%A5%E5%A4%AA%E7%B6%B2%E5%8D%80%E5%A1%8A%E9%8F%88%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84-4a96d35ad1e1) मध्ये देखील +- [Nethereum - ब्लॉकचेनसाठी एक ओपन सोर्स .NET इंटिग्रेशन लायब्ररी](https://kauri.io/#collections/a%20hackathon%20survival%20guide/nethereum-an-open-source-.net-integration-library/) +- [Nethereum वापरून SQL डेटाबेसमध्ये इथेरियम ट्रान्झॅक्शन्स लिहिणे](https://medium.com/coinmonks/writing-ethereum-transactions-to-sql-database-using-nethereum-fd94e0e4fa36) +- [C# आणि VisualStudio वापरून इथेरियम स्मार्ट कॉन्ट्रॅक्ट्स सहजपणे कसे तैनात करायचे ते पहा](https://koukia.ca/deploy-ethereum-smart-contracts-using-c-and-visualstudio-5be188ae928c) + +**तुम्हाला आतासाठी सेटअप वगळून थेट सॅम्पल्सवर जायचे आहे का?** + +- [Playground](http://playground.nethereum.com/) - ब्राउझरद्वारे इथेरियमशी संवाद साधा आणि Nethereum कसे वापरायचे ते शिका. + - अकाउंट बॅलन्सची चौकशी करा [C#](http://playground.nethereum.com/csharp/id/1001) [VB.NET](http://playground.nethereum.com/vb/id/2001) + - ERC20 स्मार्ट कॉन्ट्रॅक्ट बॅलन्सची चौकशी करा [C#](http://playground.nethereum.com/csharp/id/1005) [VB.NET](http://playground.nethereum.com/vb/id/2004) + - एका अकाउंटवर ईथर ट्रान्सफर करा [C#](http://playground.nethereum.com/csharp/id/1003) [VB.NET](http://playground.nethereum.com/vb/id/2003) + - ... आणि बरेच काही! + +## मध्यम स्तरावरील लेख {#intermediate-articles} + +- [Nethereum वर्कबुक/सॅम्पल लिस्ट](http://docs.nethereum.com/en/latest/Nethereum.Workbooks/docs/) +- [तुमच्या स्वतःच्या डेव्हलपमेंट टेस्टचेन्स तैनात करा](https://github.com/Nethereum/Testchains) +- [सॉलिडिटीसाठी VSCode कोडजेन प्लगिन](https://docs.nethereum.com/en/latest/nethereum-codegen-vscodesolidity/) +- [युनिटी आणि इथेरियम: का आणि कसे](https://www.raywenderlich.com/5509-unity-and-ethereum-why-and-how) +- [इथेरियम dapps साठी ASP.NET कोअर वेब API तयार करा](https://tech-mint.com/blockchain/create-asp-net-core-web-api-for-ethereum-dapps/) +- [Nethereum Web3 वापरून सप्लाय चेन ट्रॅकिंग सिस्टीम लागू करणे](http://blog.pomiager.com/post/using-nethereum-web3-to-implement-a-supply-chain-traking-system4) +- [Nethereum ब्लॉक प्रोसेसिंग](https://nethereum.readthedocs.io/en/latest/nethereum-block-processing-detail/), [C# Playground sample](http://playground.nethereum.com/csharp/id/1025) सह +- [Nethereum वेबसॉकेट स्ट्रीमिंग](https://nethereum.readthedocs.io/en/latest/nethereum-subscriptions-streaming/) +- [Kaleido आणि Nethereum](https://kaleido.io/kaleido-and-nethereum/) +- [Quorum आणि Nethereum](https://github.com/Nethereum/Nethereum/blob/master/src/Nethereum.Quorum/README.md) + +## प्रगत वापर पद्धती {#advanced-use-patterns} + +- [Azure की व्हॉल्ट आणि Nethereum](https://github.com/Azure-Samples/bc-community-samples/tree/master/akv-nethereum) +- [Nethereum.DappHybrid](https://github.com/Nethereum/Nethereum.DappHybrid) +- [Ujo Nethereum बॅकएंड रेफरन्स आर्किटेक्चर](https://docs.nethereum.com/en/latest/nethereum-ujo-backend-sample/) + +## .NET प्रोजेक्ट्स, साधने आणि इतर मजेदार गोष्टी {#dot-net-projects-tools-and-other-fun-stuff} + +- [Nethereum Playground](http://playground.nethereum.com/) - _ब्राउझरमध्ये Nethereum कोड स्निपेट्स कंपाइल करा, तयार करा आणि चालवा_ +- [Nethereum Codegen Blazor](https://github.com/Nethereum/Nethereum.CodeGen.Blazor) - _Blazor मध्ये UI सह Nethereum कोडजेन_ +- [Nethereum Blazor](https://github.com/Nethereum/NethereumBlazor) - _एक .NET Wasm SPA लाइट ब्लॉकचेन एक्सप्लोरर आणि साधे वॉलेट_ +- [Wonka Business Rules Engine](https://docs.nethereum.com/en/latest/wonka/) - _एक बिझनेस रूल्स इंजिन (.NET प्लॅटफॉर्म आणि इथेरियम प्लॅटफॉर्म दोन्हीसाठी) जे मूळतः मेटाडेटा-चालित आहे_ +- [Nethermind](https://github.com/NethermindEth/nethermind) - _Linux, Windows, MacOS साठी एक .NET कोअर इथेरियम क्लायंट_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _इथेरियम संबंधित कोडबेससह काम करण्यासाठी युटिलिटी फंक्शन्स_ +- [TestChains](https://github.com/Nethereum/TestChains) - _जलद प्रतिसादासाठी (PoA) पूर्व-कॉन्फिगर केलेले .NET डेव्हचेन्स_ + +अधिक संसाधने शोधत आहात? [ethereum.org/developers](/developers/) पहा. + +## .NET कम्युनिटी योगदानकर्ते {#dot-net-community-contributors} + +Nethereum मध्ये, आम्ही बहुतेक [Gitter](https://gitter.im/Nethereum/Nethereum) वर असतो, जिथे प्रश्न विचारण्यासाठी/उत्तरे देण्यासाठी, मदत मिळवण्यासाठी, किंवा फक्त वेळ घालवण्यासाठी प्रत्येकाचे स्वागत आहे. तुम्ही [Nethereum GitHub repository](https://github.com/Nethereum) वर एक PR करू शकता किंवा समस्या नोंदवू शकता, किंवा आमच्या अनेक साइड/सॅम्पल प्रोजेक्ट्समधून फक्त ब्राउझ करू शकता. तुम्ही आम्हाला [Discord](https://discord.gg/jQPrR58FxX) वर देखील शोधू शकता! + +तुम्ही Nethermind साठी नवीन असाल आणि सुरुवात करण्यासाठी मदतीची आवश्यकता असेल, तर आमच्या [Discord](http://discord.gg/PaCMRFdvWT) मध्ये सामील व्हा. तुमच्या प्रश्नांची उत्तरे देण्यासाठी आमचे डेव्हलपर्स उपलब्ध आहेत. [Nethermind GitHub repository](https://github.com/NethermindEth/nethermind) वर PR ओपन करण्यास किंवा कोणत्याही समस्या मांडण्यास संकोच करू नका. + +## इतर एकत्रित याद्या {#other-aggregated-lists} + +[अधिकृत Nethereum साइट](https://nethereum.com/) +[अधिकृत Nethermind साइट](https://nethermind.io/) diff --git a/public/content/translations/mr/developers/docs/programming-languages/elixir/index.md b/public/content/translations/mr/developers/docs/programming-languages/elixir/index.md new file mode 100644 index 00000000000..8ef0e2c4d38 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/elixir/index.md @@ -0,0 +1,55 @@ +--- +title: "इलिक्सिर डेव्हलपर्ससाठी इथेरियम" +description: "इलिक्सिर-आधारित प्रोजेक्ट्स आणि टूलिंगचा वापर करून इथेरियमसाठी कसे डेव्हलप करायचे ते शिका." +lang: mr +incomplete: false +--- + +इलिक्सिर-आधारित प्रोजेक्ट्स आणि टूलिंगचा वापर करून इथेरियमसाठी डेव्हलप कसे करायचे ते शिका. + +क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करणाऱ्या विकेंद्रीकृत ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियम वापरा. हे dapps विश्वासहीन असू शकतात, म्हणजेच एकदा ते इथेरियमवर तैनात झाल्यावर, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. ते नवीन प्रकारचे आर्थिक ॲप्लिकेशन्स तयार करण्यासाठी डिजिटल मालमत्तांवर नियंत्रण ठेवू शकतात. ते विकेंद्रित असू शकतात, याचा अर्थ असा की कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि सेन्सॉर करणे जवळजवळ अशक्य आहे. + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह प्रारंभ करणे {#getting-started-with-smart-contracts-and-solidity} + +**इलिक्सिरला इथेरियमसोबत समाकलित करण्यासाठी तुमची पहिली पावले उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers](/developers/) पहा. + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## नवशिक्यांसाठी लेख {#beginner-articles} + +- [अखेरीस इथेरियम खाती समजून घेणे](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [Ethers — इलिक्सिरसाठी एक फर्स्ट-क्लास इथेरियम वेब3 लायब्ररी](https://medium.com/@alisinabh/announcing-ethers-a-first-class-ethereum-web3-library-for-elixir-1d64e9409122) + +## मध्यम स्तरावरील लेख {#intermediate-articles} + +- [इलिक्सिरसह रॉ इथेरियम कॉन्ट्रॅक्ट व्यवहारांवर कसे साइन करावे](https://kohlerjp.medium.com/how-to-sign-raw-ethereum-contract-transactions-with-elixir-f8822bcc813b) +- [इथेरियम स्मार्ट कॉन्ट्रॅक्ट्स आणि इलिक्सिर](https://medium.com/agile-alpha/ethereum-smart-contracts-and-elixir-c7c4b239ddb4) + +## इलिक्सिर प्रोजेक्ट्स आणि टूल्स {#elixir-projects-and-tools} + +### सक्रिय {#active} + +- [block_keys](https://github.com/ExWeb3/block_keys) - _इलिक्सिरमध्ये BIP32 आणि BIP44 अंमलबजावणी (डिटरमिनिस्टिक वॉलेट्ससाठी मल्टी-अकाउंट हायरार्की)_ +- [ethereumex](https://github.com/mana-ethereum/ethereumex) - _इथेरियम ब्लॉकचेनसाठी इलिक्सिर JSON-RPC क्लायंट_ +- [ethers](https://github.com/ExWeb3/elixir_ethers) - _इलिक्सिरचा वापर करून इथेरियमवर स्मार्ट कॉन्ट्रॅक्ट्सशी संवाद साधण्यासाठी एक सर्वसमावेशक Web3 लायब्ररी_ +- [ethers_kms](https://github.com/ExWeb3/elixir_ethers_kms) - _Ethers साठी एक KMS सायनर लायब्ररी (AWS KMS सह व्यवहारांवर साइन करा)_ +- [ex_abi](https://github.com/poanetwork/ex_abi) - _इलिक्सिरमध्ये इथेरियम ABI पार्सर/डीकोडर/एन्कोडर अंमलबजावणी_ +- [ex_keccak](https://github.com/ExWeb3/ex_keccak) - _NIF द्वारे तयार केलेल्या tiny-keccak Rust crate चा वापर करून Keccak SHA3-256 हॅशची गणना करण्यासाठी इलिक्सिर लायब्ररी_ +- [ex_rlp](https://github.com/mana-ethereum/ex_rlp) - _इथेरियमच्या RLP (रिकर्सिव्ह लेंथ प्रीफिक्स) एन्कोडिंगची इलिक्सिर अंमलबजावणी_ + +### संग्रहित / आता देखरेख केली जात नाही {#archived--no-longer-maintained} + +- [eth](https://hex.pm/packages/eth) - _इलिक्सिरसाठी इथेरियम युटिलिटीज_ +- [exw3](https://github.com/hswick/exw3) - _इलिक्सिरसाठी उच्च-स्तरीय इथेरियम RPC क्लायंट_ +- [mana](https://github.com/mana-ethereum/mana) - _इलिक्सिरमध्ये लिहिलेली इथेरियम फुल नोड अंमलबजावणी_ + +अधिक संसाधने शोधत आहात? [आमचे डेव्हलपरचे होम](/developers/) पहा. + +## इलिक्सिर समुदाय योगदानकर्ते {#elixir-community-contributors} + +[इलिक्सिरचे स्लॅक #ethereum चॅनल](https://elixir-lang.slack.com/archives/C5RPZ3RJL) हे वेगाने वाढणाऱ्या समुदायाचे यजमान आहे आणि वरीलपैकी कोणत्याही प्रोजेक्ट्स आणि संबंधित विषयांवरील चर्चेसाठी समर्पित संसाधन आहे. diff --git a/public/content/translations/mr/developers/docs/programming-languages/golang/index.md b/public/content/translations/mr/developers/docs/programming-languages/golang/index.md new file mode 100644 index 00000000000..5ddc617bcb9 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/golang/index.md @@ -0,0 +1,84 @@ +--- +title: "Go डेव्हलपर्ससाठी इथेरियम" +description: "Go-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी डेव्हलप कसे करायचे ते शिका" +lang: mr +incomplete: true +--- + +Go-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी डेव्हलप कसे करायचे ते शिका + +विकेंद्रित ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियमचा वापर करा. हे dapps विश्वासार्ह असू शकतात, याचा अर्थ असा की एकदा ते इथेरियमवर तैनात केले की, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. ते विकेंद्रित आहेत, याचा अर्थ ते पीअर-टू-पीअर नेटवर्कवर चालतात आणि अपयशासाठी कोणताही एक बिंदू नाही. कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि त्यांना सेन्सॉर करणे जवळजवळ अशक्य आहे. नवीन प्रकारचे ॲप्लिकेशन्स तयार करण्यासाठी ते डिजिटल मालमत्ता नियंत्रित करू शकतात. + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह प्रारंभ करणे {#getting-started-with-smart-contracts-and-solidity} + +**Go ला इथेरियमसोबत एकत्रित करण्यासाठी तुमची पहिली पावले उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers](/developers/) पहा. + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [कॉन्ट्रॅक्ट ट्यूटोरियल](https://github.com/ethereum/go-ethereum/wiki/Contract-Tutorial) + +## नवशिक्यांसाठी लेख आणि पुस्तके {#beginner-articles-and-books} + +- [Geth सह प्रारंभ करणे](https://medium.com/@tzhenghao/getting-started-with-geth-c1a30b8d6458) +- [इथेरियमशी कनेक्ट होण्यासाठी Golang वापरा](https://www.youtube.com/watch?v=-7uChuO_VzM) +- [Golang वापरून इथेरियम स्मार्ट कॉन्ट्रॅक्ट्स उपयोजित करा](https://www.youtube.com/watch?v=pytGqQmDslE) +- [Go मध्ये इथेरियम स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी आणि उपयोजन करण्यासाठी चरण-दर-चरण मार्गदर्शक](https://hackernoon.com/a-step-by-step-guide-to-testing-and-deploying-ethereum-smart-contracts-in-go-9fc34b178d78) +- [ई-पुस्तक: Go सह इथेरियम डेव्हलपमेंट](https://goethereumbook.org/) - _Go सह इथेरियम ॲप्लिकेशन्स विकसित करा_ + +## मध्यम स्तरावरील लेख आणि दस्तऐवज {#intermediate-articles-and-docs} + +- [Go इथेरियम डॉक्युमेंटेशन](https://geth.ethereum.org/docs/) - _अधिकृत इथेरियम Golang साठी डॉक्युमेंटेशन_ +- [Erigon प्रोग्रामरचे मार्गदर्शक](https://github.com/ledgerwatch/erigon/blob/devel/docs/programmers_guide/guide.md) - _स्टेट ट्री, मल्टी-प्रूफ आणि व्यवहार प्रक्रियेसह सचित्र मार्गदर्शक_ +- [Erigon आणि स्टेटलेस इथेरियम](https://youtu.be/3-Mn7OckSus?t=394) - _2020 इथेरियम समुदाय परिषद (EthCC 3)_ +- [Erigon: इथेरियम क्लायंट ऑप्टिमाइझ करणे](https://www.youtube.com/watch?v=CSpc1vZQW2Q) - _2018 Devcon 4_ +- [Go इथेरियम GoDoc](https://godoc.org/github.com/ethereum/go-ethereum) +- [Geth सह Go मध्ये dapp तयार करणे](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/creating-a-dapp-in-go-with-geth/) +- [Golang आणि Geth सह इथेरियम खाजगी नेटवर्कवर काम करणे](https://myhsts.org/tutorial-learn-how-to-work-with-ethereum-private-network-with-golang-with-geth.php) +- [Go सह इथेरियमवर सॉलिडिटी कॉन्ट्रॅक्ट्सची युनिट टेस्टिंग](https://medium.com/coinmonks/unit-testing-solidity-contracts-on-ethereum-with-go-3cc924091281) +- [Geth चा लायब्ररी म्हणून वापर करण्यासाठी त्वरित संदर्भ](https://medium.com/coinmonks/web3-go-part-1-31c68c68e20e) + +## प्रगत वापर पद्धती {#advanced-use-patterns} + +- [GETH सिम्युलेटेड बॅकएंड](https://kauri.io/#collections/An%20ethereum%20test%20toolkit%20in%20Go/the-geth-simulated-backend/#_top) +- [इथेरियम आणि Quorum वापरून ब्लॉकचेन-ॲज-अ-सर्व्हिस ॲप्स](https://blockchain.dcwebmakers.com/blockchain-as-a-service-apps-using-ethereum-and-quorum.html) +- [इथेरियम ब्लॉकचेन ॲप्लिकेशन्समध्ये डिस्ट्रिब्युटेड स्टोरेज IPFS आणि Swarm](https://blockchain.dcwebmakers.com/work-with-distributed-storage-ipfs-and-swarm-in-ethereum.html) +- [मोबाईल क्लायंट: लायब्ररी आणि इनप्रोक इथेरियम नोड्स](https://github.com/ethereum/go-ethereum/wiki/Mobile-Clients:-Libraries-and-Inproc-Ethereum-Nodes) +- [नेटिव्ह dapps: इथेरियम कॉन्ट्रॅक्ट्ससाठी Go बाइंडिंग्ज](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) + +## Go प्रकल्प आणि साधने {#go-projects-and-tools} + +- [Geth / Go इथेरियम](https://github.com/ethereum/go-ethereum) - _इथेरियम प्रोटोकॉलची अधिकृत Go अंमलबजावणी_ +- [Go इथेरियम कोड विश्लेषण](https://github.com/ZtesoftCS/go-ethereum-code-analysis) - _Go इथेरियम सोर्स कोडचे पुनरावलोकन आणि विश्लेषण_ +- [Erigon](https://github.com/ledgerwatch/erigon) - _Go इथेरियमचे जलद डेरिव्हेटिव्ह, आर्काइव्ह नोड्सवर लक्ष केंद्रित करून_ +- [Golem](https://github.com/golemfactory/golem) - _Golem संगणकीय शक्तीसाठी जागतिक बाजारपेठ तयार करत आहे_ +- [Quorum](https://github.com/jpmorganchase/quorum) - _डेटा गोपनीयतेला समर्थन देणारी इथेरियमची परवानगी असलेली अंमलबजावणी_ +- [Prysm](https://github.com/prysmaticlabs/prysm) - _इथेरियम 'Serenity' 2.0 Go अंमलबजावणी_ +- [Eth ट्विट](https://github.com/yep/eth-tweet) - _विकेंद्रित ट्विटर: इथेरियम ब्लॉकचेनवर चालणारी एक मायक्रोब्लॉगिंग सेवा_ +- [प्लाझ्मा MVP Golang](https://github.com/kyokan/plasma) — _मिनिमम व्हायबल प्लाझ्मा स्पेसिफिकेशनची Golang अंमलबजावणी आणि विस्तार_ +- [ओपन इथेरियम मायनिंग पूल](https://github.com/sammy007/open-ethereum-pool) - _एक ओपन सोर्स इथेरियम मायनिंग पूल_ +- [इथेरियम HD वॉलेट](https://github.com/miguelmota/go-ethereum-hdwallet) - _Go मध्ये इथेरियम HD वॉलेट डेरिव्हेशन्स_ +- [Multi Geth](https://github.com/multi-geth/multi-geth) - _अनेक प्रकारच्या इथेरियम नेटवर्क्ससाठी समर्थन_ +- [Geth लाइट क्लायंट](https://github.com/zsfelfoldi/go-ethereum/wiki/Geth-Light-Client) - _लाइट इथेरियम सबप्रोटोकॉलची Geth अंमलबजावणी_ +- [इथेरियम Golang SDK](https://github.com/everFinance/goether) - _Golang मध्ये एक साधी इथेरियम वॉलेट अंमलबजावणी आणि युटिलिटीज_ +- [Covalent Golang SDK](https://github.com/covalenthq/covalent-api-sdk-go) - _200+ ब्लॉकचेनसाठी Go SDK द्वारे कार्यक्षम ब्लॉकचेन डेटा ॲक्सेस_ + +अधिक संसाधने शोधत आहात? [ethereum.org/developers](/developers/) पहा + +## Go समुदाय योगदानकर्ते {#go-community-contributors} + +- [Geth डिस्कॉर्ड](https://discordapp.com/invite/nthXNEv) +- [Geth गिटर](https://gitter.im/ethereum/go-ethereum) +- [Gophers स्लॅक](https://invite.slack.golangbridge.org/) - [#इथेरियम चॅनल](https://gophers.slack.com/messages/C9HP1S9V2) +- [StackExchange - इथेरियम](https://ethereum.stackexchange.com/) +- [Multi Geth गिटर](https://gitter.im/ethoxy/multi-geth) +- [इथेरियम गिटर](https://gitter.im/ethereum/home) +- [Geth लाइट क्लायंट गिटर](https://gitter.im/ethereum/light-client) + +## इतर एकत्रित याद्या {#other-aggregated-lists} + +- [Awesome इथेरियम](https://github.com/btomashvili/awesome-ethereum) +- [Consensys: इथेरियम डेव्हलपर साधनांची एक निश्चित सूची](https://media.consensys.net/an-definitive-list-of-ethereum-developer-tools-2159ce865974) | [GitHub सोर्स](https://github.com/ConsenSys/ethereum-developer-tools-list) diff --git a/public/content/translations/mr/developers/docs/programming-languages/index.md b/public/content/translations/mr/developers/docs/programming-languages/index.md new file mode 100644 index 00000000000..6d596210725 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/index.md @@ -0,0 +1,33 @@ +--- +title: "प्रोग्रामिंग भाषा" +description: "JavaScript, Python, Go, Rust आणि बरेच काही यासह विविध प्रोग्रामिंग भाषांसाठी इथेरियम विकास संसाधने शोधा." +lang: mr +--- + +एक सामान्य गैरसमज असा आहे की इथेरियमवर तयार करण्यासाठी डेव्हलपर्सना [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) लिहावेच लागतील. हे खोटे आहे. +इथेरियम नेटवर्क आणि समुदायाच्या सुंदरतेपैकी एक म्हणजे तुम्ही जवळजवळ कोणत्याही प्रोग्रामिंग भाषेत [सहभागी](/community/) होऊ शकता. + +इथेरियम आणि त्याचा समुदाय ओपन सोर्सचा स्वीकार करतात. तुम्हाला विविध भाषांमध्ये समुदाय प्रकल्प - क्लायंट अंमलबजावणी, APIs, विकास फ्रेमवर्क, चाचणी साधने - सापडतील. + +## तुमची भाषा निवडा {#data} + +प्रकल्प, संसाधने आणि व्हर्च्युअल समुदाय शोधण्यासाठी तुमच्या आवडीची प्रोग्रामिंग भाषा निवडा: + +- [डार्ट डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/dart/) +- [डेल्फी डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/delphi/) +- [.NET डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/dot-net/) +- [एलिक्सिर डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/elixir/) +- [गो डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/golang/) +- [जावा डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/java/) +- [JavaScript डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/javascript/) +- [पायथॉन डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/python/) +- [रुबी डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/ruby/) +- [रस्ट डेव्हलपर्ससाठी इथेरियम](/developers/docs/programming-languages/rust/) + +### माझ्या भाषेला सपोर्ट नसल्यास काय करावे {#other-lang} + +तुम्हाला अतिरिक्त प्रोग्रामिंग भाषेसाठी संसाधनांशी लिंक करायचे असल्यास किंवा व्हर्च्युअल समुदायाकडे निर्देश करायचे असल्यास तुम्ही [एक इश्यू उघडून](https://github.com/ethereum/ethereum-org-website/issues/new/choose) नवीन पेजची विनंती करू शकता. + +तुम्हाला सध्या असमर्थित भाषा वापरून ब्लॉकचेनशी संवाद साधण्यासाठी कोड लिहायचा असल्यास +तुम्ही इथेरियम नेटवर्कशी कनेक्ट होण्यासाठी [JSON-RPC इंटरफेस](/developers/docs/apis/json-rpc/) वापरू शकता. TCP/IP वापरू शकणारी कोणतीही प्रोग्रामिंग +भाषा हा इंटरफेस वापरू शकते. diff --git a/public/content/translations/mr/developers/docs/programming-languages/java/index.md b/public/content/translations/mr/developers/docs/programming-languages/java/index.md new file mode 100644 index 00000000000..7579a274f21 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/java/index.md @@ -0,0 +1,64 @@ +--- +title: "जावा डेव्हलपर्ससाठी इथेरियम" +description: "जावा-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे डेव्हलप करावे हे शिका" +lang: mr +incomplete: true +--- + +जावा-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे डेव्हलप करावे हे शिका + +क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करणाऱ्या विकेंद्रीकृत ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियम वापरा. हे dapps विश्वासार्ह असू शकतात, याचा अर्थ असा की एकदा ते इथेरियमवर तैनात केले की, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. नवीन प्रकारचे आर्थिक ॲप्लिकेशन्स तयार करण्यासाठी ते डिजिटल मालमत्ता नियंत्रित करू शकतात. ते विकेंद्रित असू शकतात, याचा अर्थ असा की कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि सेन्सॉर करणे जवळजवळ अशक्य आहे. + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह प्रारंभ करणे {#getting-started-with-smart-contracts-and-solidity} + +**जावाला इथेरियमसोबत एकत्रित करण्यासाठी तुमची पहिली पावले उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers.](/developers/) पहा + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## इथेरियम क्लायंट्ससोबत काम करणे {#working-with-ethereum-clients} + +दोन अग्रगण्य जावा इथेरियम क्लायंट, [Web3J](https://github.com/web3j/web3j) आणि हायपरलेजर बेसू कसे वापरावे हे शिका + +- [जावा, इक्लिप्स आणि Web3J सह इथेरियम क्लायंटशी कनेक्ट करणे](https://kauri.io/article/b9eb647c47a546bc95693acc0be72546/connecting-to-an-ethereum-client-with-java-eclipse-and-web3j) +- [जावा आणि Web3j सह इथेरियम खाते व्यवस्थापित करणे](https://kauri.io/article/925d923e12c543da9a0a3e617be963b4/manage-an-ethereum-account-with-java-and-web3j) +- [तुमच्या स्मार्ट कॉन्ट्रॅक्टमधून जावा रॅपर तयार करणे](https://kauri.io/article/84475132317d4d6a84a2c42eb9348e4b/generate-a-java-wrapper-from-your-smart-contract) +- [इथेरियम स्मार्ट कॉन्ट्रॅक्टसोबत संवाद साधणे](https://kauri.io/article/14dc434d11ef4ee18bf7d57f079e246e/interacting-with-an-ethereum-smart-contract-in-java) +- [इथेरियम स्मार्ट कॉन्ट्रॅक्ट इव्हेंट्ससाठी ऐकणे](https://kauri.io/article/760f495423db42f988d17b8c145b0874/listening-for-ethereum-smart-contract-events-in-java) +- [बेसू (पँथिऑन) वापरणे, लिनक्ससह जावा इथेरियम क्लायंट](https://kauri.io/article/276dd27f1458443295eea58403fd6965/using-pantheon-the-java-ethereum-client-with-linux) +- [जावा इंटिग्रेशन टेस्टमध्ये हायपरलेजर बेसू (पँथिऑन) नोड चालवणे](https://kauri.io/article/7dc3ecc391e54f7b8cbf4e5fa0caf780/running-a-pantheon-node-in-java-integration-tests) +- [Web3j चीट शीट](https://kauri.io/web3j-cheat-sheet-\(java-ethereum\)/5dfa1ea941ac3d0001ce1d90/c) + +EVM-आधारित ब्लॉकचेनशी संवाद साधण्यासाठी [ethers-kt](https://github.com/Kr1ptal/ethers-kt), एक असिंक, उच्च-कार्यक्षमता असलेली कोटलिन लायब्ररी, कशी वापरावी हे शिका. JVM आणि अँड्रॉइड प्लॅटफॉर्मला लक्ष्य करते. + +- [ERC20 टोकन्स हस्तांतरित करा](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/abi/TransferERC20.kt) +- [इव्हेंट लिसनिंगसह UniswapV2 स्वॅप](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/tokenswapwitheventlistening/TokenSwapWithEventListening.kt) +- [ETH / ERC20 बॅलन्स ट्रॅकर](https://github.com/Kr1ptal/ethers-kt/blob/master/examples/src/main/kotlin/io/ethers/examples/balancetracker/BalanceTracker.kt) + +## मध्यम स्तरावरील लेख {#intermediate-articles} + +- [IPFS सह जावा ऍप्लिकेशनमध्ये स्टोरेज व्यवस्थापित करणे](https://kauri.io/article/3e8494f4f56f48c4bb77f1f925c6d926/managing-storage-in-a-java-application-with-ipfs) +- [Web3j सह जावामध्ये ERC20 टोकन्स व्यवस्थापित करणे](https://kauri.io/article/d13e911bbf624108b1d5718175a5e0a0/manage-erc20-tokens-in-java-with-web3j) +- [Web3j ट्रान्झॅक्शन व्यवस्थापक](https://kauri.io/article/4cb780bb4d0846438d11885a25b6d7e7/web3j-transaction-managers) + +## प्रगत वापर पद्धती {#advanced-use-patterns} + +- [जावा स्मार्ट कॉन्ट्रॅक्ट डेटा कॅशे तयार करण्यासाठी Eventeum वापरणे](https://kauri.io/article/fe81ee9612eb4e5a9ab72790ef24283d/using-eventeum-to-build-a-java-smart-contract-data-cache) + +## जावा प्रकल्प आणि साधने {#java-projects-and-tools} + +- [Web3J (इथेरियम क्लायंट्सशी संवाद साधण्यासाठी लायब्ररी)](https://github.com/web3j/web3j) +- [ethers-kt (EVM-आधारित ब्लॉकचेनसाठी असिंक, उच्च-कार्यक्षमता असलेली कोटलिन/जावा/अँड्रॉइड लायब्ररी.)](https://github.com/Kr1ptal/ethers-kt) +- [Eventeum (इव्हेंट लिसनर)](https://github.com/ConsenSys/eventeum) +- [Mahuta (IPFS डेव्ह टूल्स)](https://github.com/ConsenSys/mahuta) + +अधिक संसाधने शोधत आहात? [ethereum.org/developers.](/developers/) तपासा. + +## जावा समुदाय योगदानकर्ते {#java-community-contributors} + +- [IO Builders](https://io.builders) +- [Kauri](https://kauri.io) diff --git a/public/content/translations/mr/developers/docs/programming-languages/javascript/index.md b/public/content/translations/mr/developers/docs/programming-languages/javascript/index.md new file mode 100644 index 00000000000..710d85d832a --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/javascript/index.md @@ -0,0 +1,72 @@ +--- +title: "JavaScript डेव्हलपर्ससाठी Ethereum" +description: "JavaScript-आधारित प्रकल्प आणि टूलिंग वापरून Ethereum साठी कसे डेव्हलप करावे ते शिका." +lang: mr +--- + +Ethereum इकोसिस्टममधील सर्वात लोकप्रिय भाषांपैकी JavaScript ही एक आहे. खरं तर, शक्य तितके Ethereum JavaScript वर आणण्यासाठी समर्पित एक [टीम](https://github.com/ethereumjs) आहे. + +[स्टॅकच्या सर्व स्तरांवर](/developers/docs/ethereum-stack/) JavaScript (किंवा तत्सम काही) लिहिण्याच्या संधी आहेत. + +## Ethereum सह संवाद साधा {#interact-with-ethereum} + +### JavaScript API लायब्ररीज {#javascript-api-libraries} + +तुम्हाला ब्लॉकचेनची क्वेरी करण्यासाठी, व्यवहार पाठवण्यासाठी आणि बरेच काही करण्यासाठी JavaScript लिहायचे असल्यास, हे करण्याचा सर्वात सोयीस्कर मार्ग म्हणजे [JavaScript API लायब्ररी](/developers/docs/apis/javascript/) वापरणे. हे APIs डेव्हलपर्सना [Ethereum नेटवर्कमधील नोड्ससोबत](/developers/docs/nodes-and-clients/) सहजपणे संवाद साधण्याची परवानगी देतात. + +तुम्ही Ethereum वरील स्मार्ट कॉन्ट्रॅक्ट्सशी संवाद साधण्यासाठी या लायब्ररींचा वापर करू शकता, त्यामुळे असे dapp तयार करणे शक्य आहे जिथे तुम्ही आधीपासून अस्तित्वात असलेल्या कॉन्ट्रॅक्ट्सशी संवाद साधण्यासाठी फक्त JavaScript वापरता. + +**पहा** + +- [Web3.js](https://web3js.readthedocs.io) +- [Ethers.js](https://ethers.org) – _यामध्ये JavaScript आणि TypeScript मधील Ethereum वॉलेट अंमलबजावणी आणि युटिलिटीजचा समावेश आहे._ +- [viem](https://viem.sh) – _Ethereum साठी एक TypeScript इंटरफेस जो Ethereum सह संवाद साधण्यासाठी लो-लेव्हल स्टेटलेस प्रिमिटीव्ह प्रदान करतो._ +- [Drift](https://ryangoree.github.io/drift/) – _बिल्ट-इन कॅशिंग, हुक्स आणि टेस्ट मॉक्स असलेली एक TypeScript मेटा-लायब्ररी जी वेब3 लायब्ररीजमध्ये सहज Ethereum डेव्हलपमेंटसाठी आहे._ + +### स्मार्ट कॉन्ट्रॅक्ट्स {#smart-contracts} + +तुम्ही JavaScript डेव्हलपर असाल आणि तुम्हाला तुमचा स्वतःचा स्मार्ट कॉन्ट्रॅक्ट लिहायचा असेल, तर तुम्ही [Solidity](https://solidity.readthedocs.io) शी परिचित होऊ शकता. ही सर्वात लोकप्रिय स्मार्ट कॉन्ट्रॅक्ट भाषा आहे आणि ती सिंटॅक्टिकली JavaScript सारखी आहे, ज्यामुळे ती शिकायला सोपी जाऊ शकते. + +[स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) बद्दल अधिक. + +## प्रोटोकॉल समजून घ्या {#understand-the-protocol} + +### Ethereum व्हर्च्युअल मशीन {#the-ethereum-virtual-machine} + +[Ethereum च्या व्हर्च्युअल मशीनची](/developers/docs/evm/) एक JavaScript अंमलबजावणी आहे. हे नवीनतम फोर्क नियमांना समर्थन देते. फोर्क नियम म्हणजे नियोजित अपग्रेड्सच्या परिणामी EVM मध्ये केलेले बदल. + +हे विविध JavaScript पॅकेजेसमध्ये विभागलेले आहे जे तुम्ही अधिक चांगल्या प्रकारे समजून घेण्यासाठी तपासू शकता: + +- खाती +- ब्लॉक +- ब्लॉकचेन स्वतः +- व्यवहार +- आणि बरेच काही... + +यामुळे तुम्हाला "एखाद्या अकाउंटची डेटा स्ट्रक्चर काय आहे?" यासारख्या गोष्टी समजायला मदत होईल. + +तुम्हाला कोड वाचायला आवडत असेल, तर आमचे डॉक्स वाचण्याऐवजी हे JavaScript एक उत्तम पर्याय असू शकते. + +**EVM पहा** +[`@ethereumjs/evm`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/evm) + +### नोड्स आणि क्लायंट्स {#nodes-and-clients} + +एक Ethereumjs क्लायंट सक्रिय डेव्हलपमेंटमध्ये आहे जो तुम्हाला Ethereum क्लायंट कसे काम करतात हे तुम्हाला समजणाऱ्या भाषेत; JavaScript मध्ये खोलवर पाहू देतो! + +**क्लायंट पहा** +[`@ethereumjs/client`](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/client) + +## इतर प्रकल्प {#other-projects} + +Ethereum JavaScript च्या जगात अजूनही बऱ्याच गोष्टी चालू आहेत, ज्यात खालील गोष्टींचा समावेश आहे: + +- वॉलेट युटिलिटीजच्या लायब्ररीज. +- Ethereum कीज उत्पन्न करण्यासाठी, आयात करण्यासाठी आणि निर्यात करण्यासाठी साधने. +- `merkle-patricia-tree` ची एक अंमलबजावणी – Ethereum यलो पेपरमध्ये वर्णन केलेली एक डेटा स्ट्रक्चर. + +[EthereumJS रेपो](https://github.com/ethereumjs) वर तुम्हाला सर्वात जास्त आवड असलेल्या गोष्टीत खोलवर जा + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/programming-languages/python/index.md b/public/content/translations/mr/developers/docs/programming-languages/python/index.md new file mode 100644 index 00000000000..3f677dc15bb --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/python/index.md @@ -0,0 +1,99 @@ +--- +title: "पायथॉन डेव्हलपर्ससाठी इथेरियम" +description: "पायथॉन-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे विकसित करायचे ते शिका" +lang: mr +incomplete: true +--- + +पायथॉन-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे विकसित करायचे ते शिका + +क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करणाऱ्या विकेंद्रीकृत ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियम वापरा. हे dapps विश्वासार्ह असू शकतात, याचा अर्थ असा की एकदा ते इथेरियमवर तैनात केले की, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. नवीन प्रकारचे आर्थिक ॲप्लिकेशन्स तयार करण्यासाठी ते डिजिटल मालमत्ता नियंत्रित करू शकतात. ते विकेंद्रित असू शकतात, याचा अर्थ असा की कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि सेन्सॉर करणे जवळजवळ अशक्य आहे. + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह प्रारंभ करणे {#getting-started-with-smart-contracts-and-solidity} + +**पायथॉनला इथेरियमसोबत एकत्रित करण्यासाठी तुमची पहिली पाऊले उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers](/developers/) पहा. + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) +- [ब्लॉकचेनमधील पायथॉनची स्थिती 2023 अहवाल](https://tradingstrategy.ai/blog/the-state-of-python-in-blockchain-in-2023) + +## नवशिक्यांसाठी लेख {#beginner-articles} + +- [web3.py आढावा](https://web3py.readthedocs.io/en/latest/overview.html) +- [इथेरियम पायथॉन इकोसिस्टम टूर](https://snakecharmers.ethereum.org/python-ecosystem/) +- [इथेरियमसाठी (पायथॉन) डेव्हलपरचे मार्गदर्शक](https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/) +- [पारितोषिक-योग्य: एक इथेरियम पायथॉन हॅकेथॉन मार्गदर्शक](https://snakecharmers.ethereum.org/prize-worthy/) +- [वायपरसह स्मार्ट कॉन्ट्रॅक्ट्सची ओळख](https://kauri.io/#collections/Getting%20Started/an-introduction-to-smart-contracts-with-vyper/) +- [पायथॉन फ्लास्क वापरून इथेरियम कॉन्ट्रॅक्ट कसा विकसित करायचा?](https://medium.com/coinmonks/how-to-develop-ethereum-contract-using-python-flask-9758fe65976e) +- [Web3.py ची ओळख · पायथॉन डेव्हलपर्ससाठी इथेरियम](https://www.dappuniversity.com/articles/web3-py-intro) +- [पायथॉन आणि web3.py वापरून स्मार्ट कॉन्ट्रॅक्ट फंक्शन कसे कॉल करायचे](https://stackoverflow.com/questions/57580702/how-to-call-a-smart-contract-function-using-python-and-web3-py) + +## मध्यम स्तरावरील लेख {#intermediate-articles} + +- [web3.py चे मित्र: Ape ची ओळख](https://snakecharmers.ethereum.org/intro-to-ape/) +- [पायथॉन प्रोग्रामर्ससाठी Dapp विकास](https://levelup.gitconnected.com/dapps-development-for-python-developers-f52b32b54f28) +- [पायथॉन इथेरियम इंटरफेस तयार करणे: भाग 1](https://hackernoon.com/creating-a-python-ethereum-interface-part-1-4d2e47ea0f4d) +- [पायथॉनमधील इथेरियम स्मार्ट कॉन्ट्रॅक्ट्स: एक सर्वसमावेशक(अंदाजे) मार्गदर्शक](https://hackernoon.com/ethereum-smart-contracts-in-python-a-comprehensive-ish-guide-771b03990988) + +## प्रगत वापर पद्धती {#advanced-use-patterns} + +- [web3.py पद्धती: रिअल-टाइम इव्हेंट सबस्क्रिप्शन्स](https://snakecharmers.ethereum.org/subscriptions/) +- [web3.py पद्धती: WebSocketProvider](https://snakecharmers.ethereum.org/websocketprovider/) +- [पायथॉन वापरून इथेरियम स्मार्ट कॉन्ट्रॅक्ट संकलित करणे, तैनात करणे आणि कॉल करणे](https://yohanes.gultom.id/2018/11/28/compiling-deploying-and-calling-ethereum-smartcontract-using-python/) +- [Slither सह सॉलिडिटी स्मार्ट कॉन्ट्रॅक्ट्सचे विश्लेषण करा](https://kauri.io/#collections/DevOps/analyze-solidity-smart-contracts-with-slither/#analyze-solidity-smart-contracts-with-slither) +- [ब्लॉकचेन फिनटेक ट्युटोरियल: पायथॉनसह कर्ज देणे आणि घेणे](https://blog.chain.link/blockchain-fintech-defi-tutorial-lending-borrowing-python/) + +## संग्रहित लेख + +- [पायथॉन आणि Brownie सह तुमचा स्वतःचा ERC20 टोकन तैनात करा](https://betterprogramming.pub/python-blockchain-token-deployment-tutorial-create-an-erc20-77a5fd2e1a58) +- [स्मार्ट कॉन्ट्रॅक्ट्स तैनात करण्यासाठी Brownie आणि पायथॉन वापरणे](https://dev.to/patrickalphac/using-brownie-for-to-deploy-smart-contracts-1kkp) +- [Brownie सह OpenSea वर NFTs तयार करणे](https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/) + +## पायथॉन प्रकल्प आणि साधने {#python-projects-and-tools} + +### सक्रिय: {#active} + +- [Web3.py](https://github.com/ethereum/web3.py) - _इथेरियमशी संवाद साधण्यासाठी पायथॉन लायब्ररी_ +- [Vyper](https://github.com/ethereum/vyper/) - _EVM साठी पायथॉनिक स्मार्ट कॉन्ट्रॅक्ट भाषा_ +- [Ape](https://github.com/ApeWorX/ape) - _Pythonistas, डेटा सायंटिस्ट आणि सुरक्षा व्यावसायिकांसाठी स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंट टूल_ +- [py-evm](https://github.com/ethereum/py-evm) - _इथेरियम व्हर्च्युअल मशीनची अंमलबजावणी_ +- [eth-tester](https://github.com/ethereum/eth-tester) - _इथेरियम-आधारित ॲप्लिकेशन्सची चाचणी करण्यासाठीची साधने_ +- [eth-utils](https://github.com/ethereum/eth-utils/) - _इथेरियम संबंधित कोडबेससह काम करण्यासाठी युटिलिटी फंक्शन्स_ +- [py-solc-x](https://pypi.org/project/py-solc-x/) - _0.5.x समर्थनासह solc सॉलिडिटी कंपाइलरभोवती पायथॉन रॅपर_ +- [pymaker](https://github.com/makerdao/pymaker) - _मेकर कॉन्ट्रॅक्ट्ससाठी पायथॉन API_ +- [siwe](https://github.com/signinwithethereum/siwe-py) - _पायथॉनसाठी इथेरियमसह साइन इन करा (siwe)_ +- [इथेरियम इंटिग्रेशन्ससाठी Web3 DeFi](https://github.com/tradingstrategy-ai/web3-ethereum-defi) - _ERC-20, Uniswap आणि इतर लोकप्रिय प्रकल्पांसाठी तयार इंटिग्रेशन्स असलेले एक पायथॉन पॅकेज_ +- [Wake](https://getwake.io) - _कॉन्ट्रॅक्ट टेस्टिंग, फझिंग, डिप्लॉयमेंट, व्हल्नरेबिलिटी स्कॅनिंग आणि कोड नेव्हिगेशनसाठी ऑल-इन-वन पायथॉन फ्रेमवर्क (लँग्वेज सर्व्हर - [सॉलिडिटीसाठी साधने](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity))_ + +### संग्रहित / आता देखरेख केली जात नाही: {#archived--no-longer-maintained} + +- [Trinity](https://github.com/ethereum/trinity) - _इथेरियम पायथॉन क्लायंट_ +- [Mamba](https://github.com/arjunaskykok/mamba) - _वायपर भाषेत लिहिलेले स्मार्ट कॉन्ट्रॅक्ट्स लिहिण्यासाठी, संकलित करण्यासाठी आणि तैनात करण्यासाठी फ्रेमवर्क_ +- [Brownie](https://github.com/eth-brownie/brownie) - _इथेरियम स्मार्ट कॉन्ट्रॅक्ट्स तैनात करणे, त्यांची चाचणी करणे आणि त्यांच्याशी संवाद साधण्यासाठी पायथॉन फ्रेमवर्क_ +- [pydevp2p](https://github.com/ethereum/pydevp2p) - _इथेरियम P2P स्टॅकची अंमलबजावणी_ +- [py-wasm](https://github.com/ethereum/py-wasm) - _वेब असेंब्ली इंटरप्रिटरची पायथॉन अंमलबजावणी_ + +अधिक संसाधने शोधत आहात? [ethereum.org/developers](/developers/) पहा. + +## पायथॉन टूलिंग वापरणारे प्रकल्प {#projects-using-python-tooling} + +खालील इथेरियम-आधारित प्रकल्प या पृष्ठावर नमूद केलेली साधने वापरतात. संबंधित ओपन-सोर्स रिपॉझिटरीज उदाहरण कोड आणि सर्वोत्तम पद्धतींसाठी एक चांगला संदर्भ म्हणून काम करतात. + +- [Yearn Finance](https://yearn.finance/) आणि [Yearn Vault Contracts रिपॉझिटरी](https://github.com/yearn/yearn-vaults) +- [Curve](https://www.curve.finance/) आणि [Curve स्मार्ट कॉन्ट्रॅक्ट्स रिपॉझिटरी](https://github.com/curvefi/curve-contract) +- [BadgerDAO](https://badger.com/) आणि [Brownie टूलचेन वापरणारे स्मार्ट कॉन्ट्रॅक्ट्स](https://github.com/Badger-Finance/badger-system) +- [Sushi](https://sushi.com/) [त्यांच्या वेस्टिंग कॉन्ट्रॅक्ट्सच्या व्यवस्थापन आणि तैनातीमध्ये पायथॉन](https://github.com/sushiswap/sushi-vesting-protocols) वापरते +- [Alpha Finance](https://alphafinance.io/), जे Alpha Homora मुळे प्रसिद्ध आहे, [स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी आणि तैनातीसाठी Brownie](https://github.com/AlphaFinanceLab/alpha-staking-contract) वापरते + +## पायथॉन समुदाय चर्चा {#python-community-contributors} + +- Web3.py आणि इतर पायथॉन फ्रेमवर्क चर्चेसाठी [इथेरियम पायथॉन कम्युनिटी डिस्कॉर्ड](https://discord.gg/9zk7snTfWe) +- वायपर स्मार्ट कॉन्ट्रॅक्ट प्रोग्रामिंग चर्चेसाठी [वायपर डिस्कॉर्ड](https://discord.gg/SdvKC79cJk) + +## इतर एकत्रित याद्या {#other-aggregated-lists} + +वायपर विकीमध्ये [वायपरसाठी संसाधनांची एक अविश्वसनीय यादी](https://github.com/vyperlang/vyper/wiki/Vyper-tools-and-resources) आहे \ No newline at end of file diff --git a/public/content/translations/mr/developers/docs/programming-languages/ruby/index.md b/public/content/translations/mr/developers/docs/programming-languages/ruby/index.md new file mode 100644 index 00000000000..4ddfe1b9845 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/ruby/index.md @@ -0,0 +1,60 @@ +--- +title: "Ruby डेव्हलपर्ससाठी इथेरियम" +description: "Ruby-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे विकसित करायचे ते शिका." +lang: mr +incomplete: false +--- + +Ruby-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे विकसित करायचे ते शिका. + +क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करणाऱ्या विकेंद्रीकृत ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियम वापरा. हे dapps विश्वासहीन असू शकतात, म्हणजेच एकदा ते इथेरियमवर तैनात झाल्यावर, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. ते नवीन प्रकारचे आर्थिक ॲप्लिकेशन्स तयार करण्यासाठी डिजिटल मालमत्तांवर नियंत्रण ठेवू शकतात. ते विकेंद्रित असू शकतात, याचा अर्थ असा की कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि सेन्सॉर करणे जवळजवळ अशक्य आहे. + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह प्रारंभ करणे {#getting-started-with-smart-contracts-and-solidity} + +**Ruby ला इथेरियमसोबत समाकलित करण्यासाठी तुमची पहिली पावले उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers](/developers/) पहा. + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## नवशिक्यांसाठी लेख {#beginner-articles} + +- [अखेरीस इथेरियम खाती समजून घेणे](https://dev.to/q9/finally-understanding-ethereum-accounts-1kpe) +- [शेवटी मेटामास्कसह रेल वापरकर्त्यांना प्रमाणीकृत करणे](https://dev.to/q9/finally-authenticating-rails-users-with-metamask-3fj) +- [Ruby वापरून इथेरियम नेटवर्कशी कसे कनेक्ट करावे](https://www.quicknode.com/guides/web3-sdks/how-to-connect-to-the-ethereum-network-using-ruby) +- [Ruby मध्ये नवीन इथेरियम ॲड्रेस कसा तयार करायचा](https://www.quicknode.com/guides/web3-sdks/how-to-generate-a-new-ethereum-address-in-ruby) + +## मध्यम स्तरावरील लेख {#intermediate-articles} + +- [Ruby सह ब्लॉकचेन ॲप](https://www.nopio.com/blog/blockchain-app-ruby/) +- [स्मार्ट कॉन्ट्रॅक्ट कार्यान्वित करण्यासाठी, इथेरियमशी कनेक्ट केलेले Ruby वापरा](https://titanwolf.org/Network/Articles/Article?AID=87285822-9b25-49d5-ba2a-7ad95fff7ef9) + +## Ruby प्रकल्प आणि साधने {#ruby-projects-and-tools} + +### सक्रिय {#active} + +- [eth.rb](https://github.com/q9f/eth.rb) - _इथेरियम खाती, संदेश आणि व्यवहार हाताळण्यासाठी Ruby लायब्ररी आणि RPC-क्लायंट_ +- [keccak.rb](https://github.com/q9f/keccak.rb) - _इथेरियमद्वारे वापरलेला Keccak (SHA3) हॅश_ +- [siwe-ruby](https://github.com/signinwithethereum/siwe-ruby) - _साइन-इन विथ इथेरियमची Ruby अंमलबजावणी_ +- [siwe-rails](https://github.com/signinwithethereum/siwe-rails) - _रेल्स जेम जे SIWE लोकल साइन इन रूट्स जोडते_ +- [siwe-rails-examples](https://github.com/signinwithethereum/siwe-rails-examples) - _कस्टम कंट्रोलरसह Ruby on Rails वापरून SIWE उदाहरण_ +- [omniauth-siwe](https://github.com/signinwithethereum/omniauth-siwe) - _साइन इन विथ इथेरियम (SIWE) साठी OmniAuth स्ट्रॅटेजी_ +- [omniauth-nft](https://github.com/valthon/omniauth-nft) - _NFT मालकीद्वारे प्रमाणीकरणासाठी OmniAuth स्ट्रॅटेजी_ +- [ethereum-on-rails](https://github.com/q9f/ethereum-on-rails) - _इथेरियम ऑन रेल्स टेम्पलेट जे मेटामास्कला Ruby on Rails शी कनेक्ट करण्याची परवानगी देते_ + +### संग्रहित / आता देखरेख केली जात नाही {#archived--no-longer-maintained} + +- [web3-eth](https://github.com/spikewilliams/vtada-ethereum) - _Ruby सह इथेरियम नोडच्या RPC पद्धतींना कॉल करणे_ +- [ethereum_tree](https://github.com/longhoangwkm/ethereum_tree) - _BIP32 मानकानुसार हायरार्किकल डिटरमिनिस्टिक वॉलेटमधून ETH ॲड्रेस तयार करण्यासाठी Ruby लायब्ररी_ +- [etherlite](https://github.com/budacom/etherlite) - _Ruby on Rails साठी इथेरियम इंटिग्रेशन_ +- [ethereum.rb](https://github.com/EthWorks/ethereum.rb) - _व्यवहार पाठवण्यासाठी, कॉन्ट्रॅक्ट तयार करण्यासाठी आणि त्यांच्याशी संवाद साधण्यासाठी JSON-RPC इंटरफेस वापरणारा Ruby इथेरियम क्लायंट तसेच इथेरियम नोडसोबत काम करण्यासाठी उपयुक्त टूलकिट_ +- [omniauth-ethereum.rb](https://github.com/q9f/omniauth-ethereum.rb) - _OmniAuth साठी इथेरियम प्रोव्हायडर स्ट्रॅटेजी लागू करते_ + +अधिक संसाधने शोधत आहात? [आमचे डेव्हलपरचे होम](/developers/) पहा. + +## Ruby समुदाय योगदानकर्ते {#ruby-community-contributors} + +[इथेरियम Ruby टेलिग्राम ग्रुप](https://t.me/ruby_eth) हा वेगाने वाढणाऱ्या समुदायाचे यजमान आहे आणि वरीलपैकी कोणत्याही प्रकल्पांवर आणि संबंधित विषयांवर चर्चा करण्यासाठी एक समर्पित संसाधन आहे. diff --git a/public/content/translations/mr/developers/docs/programming-languages/rust/index.md b/public/content/translations/mr/developers/docs/programming-languages/rust/index.md new file mode 100644 index 00000000000..7b2cda54b42 --- /dev/null +++ b/public/content/translations/mr/developers/docs/programming-languages/rust/index.md @@ -0,0 +1,65 @@ +--- +title: "रस्ट डेव्हलपर्ससाठी इथेरियम" +description: "रस्ट-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे विकसित करायचे ते शिका" +lang: mr +incomplete: true +--- + +रस्ट-आधारित प्रकल्प आणि टूलिंग वापरून इथेरियमसाठी कसे विकसित करायचे ते शिका + +क्रिप्टोकरन्सी आणि ब्लॉकचेन तंत्रज्ञानाच्या फायद्यांचा उपयोग करणाऱ्या विकेंद्रीकृत ॲप्लिकेशन्स (किंवा "dapps") तयार करण्यासाठी इथेरियम वापरा. हे dapps विश्वासार्ह असू शकतात, याचा अर्थ असा की एकदा ते इथेरियमवर तैनात केले की, ते नेहमी प्रोग्राम केल्याप्रमाणे चालतील. नवीन प्रकारचे आर्थिक ॲप्लिकेशन्स तयार करण्यासाठी ते डिजिटल मालमत्ता नियंत्रित करू शकतात. ते विकेंद्रित असू शकतात, याचा अर्थ असा की कोणतीही एक संस्था किंवा व्यक्ती त्यांना नियंत्रित करत नाही आणि सेन्सॉर करणे जवळजवळ अशक्य आहे. + +## स्मार्ट कॉन्ट्रॅक्ट्स आणि सॉलिडिटी भाषेसह प्रारंभ करणे {#getting-started-with-smart-contracts-and-solidity} + +**इथेरियमसह रस्टला एकत्रित करण्यासाठी तुमची पहिली पावले उचला** + +प्रथम अधिक मूलभूत प्राइमरची आवश्यकता आहे? [ethereum.org/learn](/learn/) किंवा [ethereum.org/developers](/developers/) पहा. + +- [ब्लॉकचेन स्पष्टीकरण](https://kauri.io/article/d55684513211466da7f8cc03987607d5/blockchain-explained) +- [स्मार्ट कॉन्ट्रॅक्ट्स समजून घेणे](https://kauri.io/article/e4f66c6079e74a4a9b532148d3158188/ethereum-101-part-5-the-smart-contract) +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट लिहा](https://kauri.io/article/124b7db1d0cf4f47b414f8b13c9d66e2/remix-ide-your-first-smart-contract) +- [सॉलिडिटी कसे संकलित आणि तैनात करायचे ते शिका](https://kauri.io/article/973c5f54c4434bb1b0160cff8c695369/understanding-smart-contract-compilation-and-deployment) + +## नवशिक्यांसाठी लेख {#beginner-articles} + +- [रस्ट इथेरियम क्लायंट](https://openethereum.github.io/) \* **लक्षात घ्या की ओपनइथेरियम [नापसंत केले आहे](https://medium.com/openethereum/gnosis-joins-erigon-formerly-turbo-geth-to-release-next-gen-ethereum-client-c6708dd06dd) आणि आता ते देखरेख केले जात नाही.** ते सावधगिरीने वापरा आणि शक्यतो दुसऱ्या क्लायंट अंमलबजावणीवर स्विच करा. +- [रस्ट वापरून इथेरियमला व्यवहार पाठवणे](https://kauri.io/#collections/A%20Hackathon%20Survival%20Guide/sending-ethereum-transactions-with-rust/) +- [कोवानसाठी रस्ट Wasm मध्ये कॉन्ट्रॅक्ट कसे लिहायचे यावर एक चरण-दर-चरण ट्युटोरियल](https://github.com/paritytech/pwasm-tutorial) + +## मध्यम स्तरावरील लेख {#intermediate-articles} + +## प्रगत वापर पद्धती {#advanced-use-patterns} + +- [इथेरियम-सारख्या नेटवर्कशी संवाद साधण्यासाठी pwasm_ethereum एक्सटर्न्स लायब्ररी](https://github.com/openethereum/pwasm-ethereum) + +- [जावास्क्रिप्ट आणि रस्ट वापरून एक विकेंद्रित चॅट तयार करा](https://medium.com/perlin-network/build-a-decentralized-chat-using-javascript-rust-webassembly-c775f8484b52) + +- [Vue.js आणि रस्ट वापरून एक विकेंद्रित टूडू ॲप तयार करा](https://medium.com/@jjmace01/build-a-decentralized-todo-app-using-vue-js-rust-webassembly-5381a1895beb) + +- [रस्टमध्ये एक ब्लॉकचेन तयार करा](https://blog.logrocket.com/how-to-build-a-blockchain-in-rust/) + +## रस्ट प्रकल्प आणि साधने {#rust-projects-and-tools} + +- [pwasm-ethereum](https://github.com/paritytech/pwasm-ethereum) - _इथेरियम-सारख्या नेटवर्कशी संवाद साधण्यासाठी एक्सटर्न्सचा संग्रह_ +- [Lighthouse](https://github.com/sigp/lighthouse) - _जलद इथेरियम कन्सेन्सस लेयर क्लायंट_ +- [Ethereum WebAssembly](https://ewasm.readthedocs.io/en/mkdocs/) - _WebAssembly च्या एका निश्चित उपसंचाचा वापर करून इथेरियम स्मार्ट कॉन्ट्रॅक्ट एक्झिक्यूशन लेयरची प्रस्तावित पुनर्रचना_ +- [oasis_std](https://docs.rs/oasis-std/latest/oasis_std/index.html) - _OASIS API संदर्भ_ +- [Solaris](https://github.com/paritytech/sol-rs) - _मूळ Parity Client EVM वापरून सॉलिडिटी स्मार्ट कॉन्ट्रॅक्ट्स युनिट टेस्ट हार्नेस._ +- [SputnikVM](https://github.com/rust-blockchain/evm) - _रस्ट इथेरियम व्हर्च्युअल मशीन अंमलबजावणी_ +- [Wavelet](https://wavelet.perlin.net/docs/smart-contracts) - _रस्टमध्ये वेव्हलेट स्मार्ट कॉन्ट्रॅक्ट_ +- [Foundry](https://github.com/foundry-rs/foundry) - _इथेरियम ॲप्लिकेशन विकासासाठी टूलकिट_ +- [Alloy](https://alloy.rs) - _इथेरियम आणि इतर EVM-आधारित चेन्सशी संवाद साधण्यासाठी उच्च-कार्यक्षमता, चांगल्या प्रकारे चाचणी केलेल्या आणि दस्तऐवजीकरण केलेल्या लायब्ररीज._ +- [Ethers_rs](https://github.com/gakonst/ethers-rs) - _इथेरियम लायब्ररी आणि वॉलेट अंमलबजावणी_ +- [SewUp](https://github.com/second-state/SewUp) - _रस्टसह तुमचा इथेरियम वेबअसेम्बली कॉन्ट्रॅक्ट तयार करण्यात आणि सामान्य बॅकएंडमध्ये विकसित करण्याप्रमाणेच मदत करणारी एक लायब्ररी_ +- [Substreams](https://github.com/streamingfast/substreams) - _समांतर ब्लॉकचेन डेटा अनुक्रमणिका तंत्रज्ञान_ +- [Reth](https://github.com/paradigmxyz/reth) Reth (रस्ट इथेरियमचे संक्षिप्त रूप) ही एक नवीन इथेरियम फुल-नोड अंमलबजावणी आहे +- [Awesome Ethereum Rust](https://github.com/Vid201/awesome-ethereum-rust) - _इथेरियम इकोसिस्टममधील रस्टमध्ये लिहिलेल्या प्रकल्पांचा एक निवडक संग्रह_ + +अधिक संसाधने शोधत आहात? [ethereum.org/developers.](/developers/) तपासा. + +## रस्ट समुदाय योगदानकर्ते {#rust-community-contributors} + +- [इथेरियम WebAssembly](https://gitter.im/ewasm/Lobby) +- [Oasis Gitter](https://gitter.im/Oasis-official/Lobby) +- [Parity Gitter](https://gitter.im/paritytech/parity) +- [Enigma](https://discord.gg/SJK32GY) diff --git a/public/content/translations/mr/developers/docs/scaling/index.md b/public/content/translations/mr/developers/docs/scaling/index.md new file mode 100644 index 00000000000..7edd1ca3440 --- /dev/null +++ b/public/content/translations/mr/developers/docs/scaling/index.md @@ -0,0 +1,113 @@ +--- +title: "स्केलिंग" +description: "इथेरियम समुदायाकडून सध्या विकसित केल्या जात असलेल्या विविध स्केलिंग पर्यायांचा परिचय." +lang: mr +sidebarDepth: 3 +--- + +## स्केलिंगचा आढावा {#scaling-overview} + +इथेरियम वापरणाऱ्या लोकांची संख्या वाढल्याने, ब्लॉकचेन क्षमतेच्या काही मर्यादांवर पोहोचला आहे. यामुळे नेटवर्क वापरण्याचा खर्च वाढला आहे, ज्यामुळे "स्केलिंग सोल्यूशन्सची" गरज निर्माण झाली आहे. अनेक सोल्यूशन्सवर संशोधन, चाचणी आणि अंमलबजावणी केली जात आहे, जे समान उद्दिष्टे साध्य करण्यासाठी वेगवेगळे दृष्टिकोन वापरतात. + +स्केलेबिलिटीचे मुख्य उद्दिष्ट विकेंद्रीकरण किंवा सुरक्षिततेशी तडजोड न करता व्यवहाराचा वेग (जलद अंतिमता) आणि व्यवहार थ्रुपुट (प्रति सेकंद अधिक व्यवहार) वाढवणे आहे. लेयर 1 इथेरियम ब्लॉकचेनवर, जास्त मागणीमुळे व्यवहार मंद होतात आणि [गॅस किमती](/developers/docs/gas/) अव्यवहार्य होतात. वेग आणि थ्रुपुटच्या बाबतीत नेटवर्कची क्षमता वाढवणे हे इथेरियमच्या अर्थपूर्ण आणि मोठ्या प्रमाणावर अवलंब करण्यासाठी मूलभूत आहे. + +वेग आणि थ्रुपुट महत्त्वाचे असले तरी, ही उद्दिष्ट्ये साध्य करणारी स्केलिंग सोल्यूशन्स विकेंद्रित आणि सुरक्षित राहणे आवश्यक आहे. नोड ऑपरेटर्ससाठी प्रवेशाचा अडथळा कमी ठेवणे हे केंद्रीकृत आणि असुरक्षित संगणकीय शक्तीच्या प्रगतीला प्रतिबंध करण्यासाठी महत्त्वाचे आहे. + +संकल्पनात्मकदृष्ट्या, आम्ही प्रथम स्केलिंगला ऑनचेन स्केलिंग किंवा ऑफचेन स्केलिंग म्हणून वर्गीकृत करतो. + +## पूर्वतयारी {#prerequisites} + +तुम्हाला सर्व मूलभूत विषयांची चांगली समज असायला हवी. स्केलिंग सोल्यूशन्सची अंमलबजावणी करणे प्रगत आहे कारण तंत्रज्ञान कमी युद्ध-परीक्षित आहे, आणि त्यावर संशोधन आणि विकास चालू आहे. + +## ऑनचेन स्केलिंग {#onchain-scaling} + +ऑनचेन स्केलिंगसाठी इथेरियम प्रोटोकॉलमध्ये (लेयर 1 [मेननेट](/glossary/#mainnet)) बदल आवश्यक आहेत. बऱ्याच काळापासून, ब्लॉकचेनचे शार्डिंग करणे इथेरियमला ​​स्केल करेल अशी अपेक्षा होती. यामध्ये व्हॅलिडेटर्सच्या उपसंचाद्वारे सत्यापित करण्यासाठी ब्लॉकचेनला वेगळ्या तुकड्यांमध्ये (शार्ड्स) विभागणे समाविष्ट होते. तथापि, लेयर-2 रोलअप्सद्वारे स्केलिंग हे प्राथमिक स्केलिंग तंत्र म्हणून स्वीकारले गेले आहे. याला इथेरियम ब्लॉक्सना जोडलेल्या डेटाच्या एका नवीन स्वस्त स्वरूपाच्या जोडणीमुळे समर्थन मिळते, जे विशेषतः वापरकर्त्यांसाठी रोलअप स्वस्त करण्यासाठी डिझाइन केलेले आहे. + +### Sharding {#sharding} + +शार्डिंग ही डेटाबेस विभाजित करण्याची प्रक्रिया आहे. व्हॅलिडेटर्सचे उपसंच संपूर्ण इथेरियमचा मागोवा ठेवण्याऐवजी वैयक्तिक शार्ड्ससाठी जबाबदार असतील. शार्डिंग बऱ्याच काळापासून इथेरियम [रोडमॅप](/roadmap/) वर होते, आणि एकेकाळी द मर्जच्या आधी प्रूफ-ऑफ-स्टेकवर पाठवण्याचा हेतू होता. तथापि, [लेयर 2 रोलअप्स](#layer-2-scaling) चा जलद विकास आणि [डँकशार्डिंग](/roadmap/danksharding) चा शोध (इथेरियम ब्लॉक्समध्ये रोलअप डेटाचे ब्लॉब्स जोडणे जे व्हॅलिडेटर्सद्वारे अत्यंत कार्यक्षमतेने सत्यापित केले जाऊ शकतात) यामुळे इथेरियम समुदायाने शार्डिंगद्वारे स्केलिंग करण्याऐवजी रोलअप-केंद्रित स्केलिंगला पसंती दिली आहे. यामुळे इथेरियमचे कन्सेंसस लॉजिक सोपे ठेवण्यास देखील मदत होईल. + +## ऑफचेन स्केलिंग {#offchain-scaling} + +ऑफचेन सोल्यूशन्स लेयर 1 मेननेटपासून स्वतंत्रपणे लागू केली जातात - त्यांना विद्यमान इथेरियम प्रोटोकॉलमध्ये कोणत्याही बदलांची आवश्यकता नाही. काही सोल्यूशन्स, ज्यांना "लेयर 2" सोल्यूशन्स म्हणून ओळखले जाते, त्यांची सुरक्षा थेट लेयर 1 इथेरियम कन्सेंससपासून प्राप्त करतात, जसे की [ऑप्टिमिस्टिक रोलअप્સ](/developers/docs/scaling/optimistic-rollups/), [झिरो-नॉलेज रोलअप્સ](/developers/docs/scaling/zk-rollups/) किंवा [स्टेट चॅनेल्स](/developers/docs/scaling/state-channels/). इतर सोल्यूशन्समध्ये विविध स्वरूपातील नवीन चेन्स तयार करणे समाविष्ट आहे जे मेननेटपासून स्वतंत्रपणे त्यांची सुरक्षा प्राप्त करतात, जसे की [साईडचेन्स](#sidechains), [व्हॅलिडियम्स](#validium), किंवा [प्लाझ्मा चेन्स](#plasma). हे सोल्यूशन्स मेननेटशी संवाद साधतात परंतु विविध उद्दिष्टे साध्य करण्यासाठी त्यांची सुरक्षा वेगळ्या प्रकारे प्राप्त करतात. + +### लेयर 2 स्केलिंग {#layer-2-scaling} + +ऑफचेन सोल्यूशन्सची ही श्रेणी मेननेट इथेरियममधून आपली सुरक्षा मिळवते. + +लेयर 2 ही तुमच्या ॲप्लिकेशनला इथेरियम मेननेट (लेयर 1) बाहेर व्यवहार हाताळून स्केल करण्यास मदत करण्यासाठी डिझाइन केलेल्या सोल्यूशन्ससाठी एक एकत्रित संज्ञा आहे, जी मेननेटच्या मजबूत विकेंद्रित सुरक्षा मॉडेलचा फायदा घेते. जेव्हा नेटवर्क व्यस्त असते तेव्हा व्यवहाराचा वेग कमी होतो, ज्यामुळे काही विशिष्ट प्रकारच्या डॅप्ससाठी वापरकर्त्याचा अनुभव खराब होतो. आणि जसे नेटवर्क व्यस्त होते, तसे व्यवहार पाठवणारे एकमेकांवर मात करण्याचे ध्येय ठेवत असल्याने गॅसच्या किमती वाढतात. यामुळे इथेरियम वापरणे खूप महाग होऊ शकते. + +बहुतेक लेयर 2 सोल्यूशन्स सर्व्हर किंवा सर्व्हरच्या क्लस्टरभोवती केंद्रित असतात, ज्यापैकी प्रत्येकाला नोड, व्हॅलिडेटर, ऑपरेटर, सिक्वेन्सर, ब्लॉक प्रोड्यूसर किंवा तत्सम संज्ञा म्हणून संबोधले जाऊ शकते. अंमलबजावणीवर अवलंबून, हे लेयर 2 नोड्स त्यांचा वापर करणारे व्यक्ती, व्यवसाय किंवा संस्था, किंवा तृतीय-पक्ष ऑपरेटर, किंवा व्यक्तींच्या मोठ्या गटाद्वारे (मेननेट प्रमाणेच) चालवले जाऊ शकतात. सर्वसाधारणपणे, व्यवहार थेट लेयर 1 (मेननेट) वर सबमिट करण्याऐवजी या लेयर 2 नोड्सवर सबमिट केले जातात. काही सोल्यूशन्ससाठी, लेयर 2 इन्स्टन्स त्यांना लेयर 1 वर अँकर करण्यापूर्वी गटांमध्ये बॅच करतो, त्यानंतर ते लेयर 1 द्वारे सुरक्षित केले जातात आणि बदलले जाऊ शकत नाहीत. हे कसे केले जाते याचे तपशील वेगवेगळ्या लेयर 2 तंत्रज्ञान आणि अंमलबजावणींमध्ये लक्षणीयरीत्या भिन्न असतात. + +एक विशिष्ट लेयर 2 इन्स्टन्स अनेक ॲप्लिकेशन्ससाठी खुला आणि शेअर केलेला असू शकतो, किंवा एका प्रोजेक्टद्वारे तैनात केला जाऊ शकतो आणि फक्त त्यांच्या ॲप्लिकेशनला सपोर्ट करण्यासाठी समर्पित असू शकतो. + +#### लेयर 2 ची गरज का आहे? {#why-is-layer-2-needed} + +- प्रति सेकंद वाढलेले व्यवहार वापरकर्त्याचा अनुभव मोठ्या प्रमाणात सुधारतात आणि मेननेट इथेरियमवरील नेटवर्कची गर्दी कमी करतात. +- व्यवहार मेननेट इथेरियमवर एकाच व्यवहारामध्ये रोल अप केले जातात, ज्यामुळे वापरकर्त्यांसाठी गॅस शुल्क कमी होते आणि इथेरियम सर्वत्र लोकांसाठी अधिक समावेशक आणि सुलभ बनते. +- स्केलेबिलिटीमधील कोणतेही अपडेट विकेंद्रीकरण किंवा सुरक्षिततेच्या खर्चावर नसावेत – लेयर 2 इथेरियमच्या वर तयार केले आहे. +- मोठ्या प्रमाणावर मालमत्तेसह काम करताना स्वतःची कार्यक्षमता आणणारे ॲप्लिकेशन-विशिष्ट लेयर 2 नेटवर्क्स आहेत. + +[लेयर 2 बद्दल अधिक](/layer-2/). + +#### रोलअप्स {#rollups} + +रोलअप्स लेयर 1 च्या बाहेर व्यवहार अंमलबजावणी करतात आणि नंतर डेटा लेयर 1 वर पोस्ट केला जातो जेथे कन्सेंसस गाठला जातो. व्यवहाराचा डेटा लेयर 1 ब्लॉक्समध्ये समाविष्ट केल्यामुळे, हे रोलअप्सला मूळ इथेरियम सुरक्षेने सुरक्षित ठेवण्याची परवानगी देते. + +वेगवेगळ्या सुरक्षा मॉडेल्ससह दोन प्रकारचे रोलअप आहेत: + +- **ऑप्टिमिस्टिक रोलअप્સ**: व्यवहार डिफॉल्टनुसार वैध आहेत असे गृहीत धरते आणि आव्हान आल्यास केवळ [**फ्रॉड प्रूफ**](/glossary/#fraud-proof) द्वारे गणना चालवते. [ऑप्टिमिस्टिक रोलअप्सबद्दल अधिक](/developers/docs/scaling/optimistic-rollups/). +- **झिरो-नॉलेज रोलअप्स**: ऑफचेन गणना चालवते आणि चेनला [**व्हॅलिडिटी प्रूफ**](/glossary/#validity-proof) सबमिट करते. [झिरो-नॉलेज रोलअप્સबद्दल अधिक](/developers/docs/scaling/zk-rollups/). + +#### स्टेट चॅनेल्स {#channels} + +स्टेट चॅनेल सहभागींना ऑफचेन जलद आणि मुक्तपणे व्यवहार करण्यास सक्षम करण्यासाठी मल्टीसिग कॉन्ट्रॅक्ट्सचा वापर करतात, नंतर मेननेटसह अंतिमता निश्चित करतात. यामुळे नेटवर्कमधील गर्दी, शुल्क आणि विलंब कमी होतो. सध्या चॅनेलचे दोन प्रकार आहेत: स्टेट चॅनेल आणि पेमेंट चॅनेल. + +[स्टेट चॅनेल्स](/developers/docs/scaling/state-channels/) बद्दल अधिक जाणून घ्या. + +### साईडचेन्स {#sidechains} + +साईडचेन ही एक स्वतंत्र EVM-सुसंगत ब्लॉकचेन आहे जी मेननेटच्या समांतर चालते. हे टू-वे ब्रिजेसद्वारे इथेरियमशी सुसंगत आहेत आणि कन्सेंसस आणि ब्लॉक पॅरामीटर्सच्या स्वतःच्या निवडलेल्या नियमांनुसार चालतात. + +[साईडचेन्स](/developers/docs/scaling/sidechains/) बद्दल अधिक जाणून घ्या. + +### प्लाझ्मा {#plasma} + +प्लाझ्मा चेन ही एक वेगळी ब्लॉकचेन आहे जी मुख्य इथेरियम चेनला जोडलेली आहे आणि विवादांवर निर्णय घेण्यासाठी फ्रॉड प्रूफ्सचा ([ऑप्टिमिस्टिक रोलअप્સ](/developers/docs/scaling/optimistic-rollups/) प्रमाणे) वापर करते. + +[प्लाझ्मा](/developers/docs/scaling/plasma/) बद्दल अधिक जाणून घ्या. + +### व्हॅलिडियम {#validium} + +व्हॅलिडियम चेन झिरो-नॉलेज रोलअप્સसारखे व्हॅलिडिटी प्रूफ वापरते परंतु डेटा मुख्य लेयर 1 इथेरियम चेनवर संग्रहित केला जात नाही. यामुळे प्रति व्हॅलिडियम चेन प्रति सेकंद 10k व्यवहार होऊ शकतात आणि अनेक चेन्स समांतर चालवल्या जाऊ शकतात. + +[व्हॅलिडियम](/developers/docs/scaling/validium/) बद्दल अधिक जाणून घ्या. + +## इतक्या सगळ्या स्केलिंग सोल्यूशन्सची गरज का आहे? {#why-do-we-need-these} + +- अनेक सोल्यूशन्स नेटवर्कच्या कोणत्याही एका भागावरील एकूण गर्दी कमी करण्यास मदत करू शकतात आणि अयशस्वी होण्याचे एकल बिंदू देखील टाळू शकतात. +- संपूर्ण हे त्याच्या भागांच्या बेरजेपेक्षा मोठे आहे. वेगवेगळी सोल्यूशन्स अस्तित्वात असू शकतात आणि सुसंवादाने कार्य करू शकतात, ज्यामुळे भविष्यातील व्यवहार गती आणि थ्रुपुटवर घातांकीय परिणाम होऊ शकतो. +- सर्व सोल्यूशन्सना थेट इथेरियम कन्सेंसस अल्गोरिदम वापरण्याची आवश्यकता नसते, आणि पर्याय असे फायदे देऊ शकतात जे अन्यथा मिळवणे कठीण असते. + +## तुम्ही पाहून शिकणारे आहात का? {#visual-learner} + + + +_लक्षात घ्या की व्हिडिओमधील स्पष्टीकरण सर्व ऑफचेन स्केलिंग सोल्यूशन्ससाठी "लेयर 2" हा शब्द वापरते, तर आम्ही "लेयर 2" ला एक ऑफचेन सोल्यूशन म्हणून वेगळे करतो जे लेयर 1 मेननेट कन्सेंससद्वारे आपली सुरक्षा मिळवते._ + + + +## पुढील वाचन {#further-reading} + +- [एक रोलअप-केंद्रित इथेरियम रोडमॅप](https://ethereum-magicians.org/t/a-rollup-centric-ethereum-roadmap/4698) _विटालिक बुटेरिन_ +- [इथेरियमसाठी लेयर 2 स्केलिंग सोल्यूशन्सवर अद्ययावत विश्लेषण](https://www.l2beat.com/) +- [इथेरियम लेयर 2 स्केलिंग सोल्यूशन्सचे मूल्यांकन: एक तुलनात्मक फ्रेमवर्क](https://medium.com/matter-labs/evaluating-ethereum-l2-scaling-solutions-a-comparison-framework-b6b2f410f955) +- [रोलअप्ससाठी एक अपूर्ण मार्गदर्शक](https://vitalik.eth.limo/general/2021/01/05/rollup.html) +- [इथेरियम-चालित ZK-रोलअप्स: जागतिक विजेते](https://hackmd.io/@canti/rkUT0BD8K) +- [ऑप्टिमिस्टिक रोलअप્સ विरुद्ध ZK रोलअप્સ](https://limechain.tech/blog/optimistic-rollups-vs-zk-rollups/) +- [उच्च स्केलेबिलिटीसाठी रोलअप્સ + डेटा शार्ड्स हे एकमेव शाश्वत उपाय का आहेत](https://polynya.medium.com/why-rollups-data-shards-are-the-only-sustainable-solution-for-high-scalability-c9aabd6fbb48) +- [कोणत्या प्रकारचे लेयर 3 अर्थपूर्ण आहेत?](https://vitalik.eth.limo/general/2022/09/17/layer_3.html) +- [डेटा उपलब्धता किंवा: रोलअप्स कसे काळजी करणे सोडून Ethereum वर प्रेम करायला शिकले](https://web.archive.org/web/20250515194659/https://web.archive.org/web/20241108192208/https://research.2077.xyz/data-availability-or-how-rollups-learned-to-stop-worrying-and-love-ethereum) +- [इथेरियम रोलअप्ससाठी व्यावहारिक मार्गदर्शक](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/scaling/optimistic-rollups/index.md b/public/content/translations/mr/developers/docs/scaling/optimistic-rollups/index.md new file mode 100644 index 00000000000..1050de83a6b --- /dev/null +++ b/public/content/translations/mr/developers/docs/scaling/optimistic-rollups/index.md @@ -0,0 +1,265 @@ +--- +title: "आशावादी रोलअप्स" +description: "आशावादी रोलअप्सची ओळख—इथेरियम समुदायाद्वारे वापरले जाणारे एक स्केलिंग सोल्यूशन." +lang: mr +--- + +आशावादी रोलअप्स हे लेयर 2 (L2) प्रोटोकॉल आहेत जे इथेरियमच्या बेस लेयरचा थ्रुपुट वाढवण्यासाठी डिझाइन केलेले आहेत. ते ऑफचेन व्यवहार प्रक्रिया करून मुख्य इथेरियम चेनवरील गणना कमी करतात, ज्यामुळे प्रक्रिया गतीमध्ये लक्षणीय सुधारणा होते. [साइडचेन्स](/developers/docs/scaling/sidechains/) सारख्या इतर स्केलिंग सोल्यूशन्सच्या विपरीत, आशावादी रोलअप्स ऑनचेन व्यवहाराचे परिणाम प्रकाशित करून मेननेटमधून सुरक्षा मिळवतात, किंवा [प्लाझ्मा चेन्स](/developers/docs/scaling/plasma/), जे फ्रॉड प्रूफसह इथेरियमवर व्यवहार सत्यापित करतात, परंतु व्यवहार डेटा इतरत्र संग्रहित करतात. + +इथेरियम वापरताना गणना हा एक हळू आणि महागडा भाग असल्याने, आशावादी रोलअप्स स्केलेबिलिटीमध्ये 10-100x पर्यंत सुधारणा देऊ शकतात. आशावादी रोलअप्स `calldata` म्हणून किंवा [blobs](/roadmap/danksharding/) मध्ये इथेरियमवर व्यवहार लिहितात, ज्यामुळे वापरकर्त्यांसाठी गॅस खर्च कमी होतो. + +## पूर्वतयारी {#prerequisites} + +तुम्ही आमचे [इथेरियम स्केलिंग](/developers/docs/scaling/) आणि [लेयर 2](/layer-2/) वरील पृष्ठे वाचलेली आणि समजून घेतलेली असावीत. + +## आशावादी रोलअप म्हणजे काय? {#what-is-an-optimistic-rollup} + +आशावादी रोलअप हा इथेरियमला स्केल करण्याचा एक दृष्टीकोन आहे ज्यामध्ये गणना आणि स्टेट स्टोरेज ऑफचेन हलवणे समाविष्ट आहे. आशावादी रोलअप्स इथेरियमच्या बाहेर व्यवहार कार्यान्वित करतात, परंतु व्यवहार डेटा मेननेटवर `calldata` म्हणून किंवा [blobs](/roadmap/danksharding/) मध्ये पोस्ट करतात. + +आशावादी रोलअप ऑपरेटर इथेरियमवर सादर करण्यापूर्वी एकाधिक ऑफचेन व्यवहारांना मोठ्या बॅचमध्ये एकत्र बंडल करतात. या दृष्टिकोनामुळे प्रत्येक बॅचमधील एकाधिक व्यवहारांवर निश्चित खर्च पसरवणे शक्य होते, ज्यामुळे अंतिम वापरकर्त्यांसाठी शुल्क कमी होते. आशावादी रोलअप्स इथेरियमवर पोस्ट केलेल्या डेटाचे प्रमाण कमी करण्यासाठी कॉम्प्रेशन तंत्रांचा देखील वापर करतात. + +आशावादी रोलअप्सना "आशावादी" मानले जाते कारण ते ऑफचेन व्यवहार वैध आहेत असे गृहीत धरतात आणि ऑनचेन पोस्ट केलेल्या व्यवहार बॅचसाठी वैधतेचे पुरावे प्रकाशित करत नाहीत. हे आशावादी रोलअप्सना [झिरो-नॉलेज रोलअप्स](/developers/docs/scaling/zk-rollups) पासून वेगळे करते जे ऑफचेन व्यवहारांसाठी क्रिप्टोग्राफिक [वैधतेचे पुरावे](/glossary/#validity-proof) प्रकाशित करतात. + +त्याऐवजी आशावादी रोलअप्स अशा प्रकरणांचा शोध घेण्यासाठी फ्रॉड-प्रूफिंग योजनेवर अवलंबून असतात जिथे व्यवहारांची गणना योग्यरित्या केली जात नाही. इथेरियमवर रोलअप बॅच सबमिट केल्यानंतर, एक वेळ विंडो असते (ज्याला चॅलेंज पीरियड म्हणतात) ज्या दरम्यान कोणीही [फ्रॉड प्रूफ](/glossary/#fraud-proof) मोजून रोलअप व्यवहाराच्या परिणामांना आव्हान देऊ शकते. + +जर फ्रॉड प्रूफ यशस्वी झाला, तर रोलअप प्रोटोकॉल व्यवहार (व्यवहार) पुन्हा कार्यान्वित करतो आणि त्यानुसार रोलअपची स्टेट अपडेट करतो. यशस्वी फ्रॉड प्रूफचा दुसरा परिणाम म्हणजे चुकीच्या पद्धतीने कार्यान्वित केलेला व्यवहार ब्लॉकवर समाविष्ट करण्यासाठी जबाबदार असलेल्या सिक्वेन्सरला दंड मिळतो. + +जर चॅलेंज कालावधी संपल्यानंतर रोलअप बॅचला आव्हान दिले गेले नाही (म्हणजे, सर्व व्यवहार योग्यरित्या कार्यान्वित झाले), तर ते वैध मानले जाते आणि इथेरियमवर स्वीकारले जाते. इतर लोक एका अपुष्ट रोलअप ब्लॉकवर तयार करणे सुरू ठेवू शकतात, परंतु एका चेतावणीसह: पूर्वी प्रकाशित झालेल्या चुकीच्या पद्धतीने कार्यान्वित केलेल्या व्यवहारावर आधारित असल्यास व्यवहाराचे परिणाम उलट केले जातील. + +## आशावादी रोलअप्स इथेरियमसोबत कसे संवाद साधतात? {#optimistic-rollups-and-Ethereum} + +आशावादी रोलअप्स हे [ऑफचेन स्केलिंग सोल्यूशन्स](/developers/docs/scaling/#offchain-scaling) आहेत जे इथेरियमच्या वर चालण्यासाठी तयार केले आहेत. प्रत्येक आशावादी रोलअप इथेरियम नेटवर्कवर तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्टच्या सेटद्वारे व्यवस्थापित केला जातो. आशावादी रोलअप्स मुख्य इथेरियम चेनच्या बाहेर व्यवहार प्रक्रिया करतात, परंतु ऑफचेन व्यवहार (बॅचमध्ये) ऑनचेन रोलअप कॉन्ट्रॅक्टवर पोस्ट करतात. इथेरियम ब्लॉकचेनप्रमाणेच, हे व्यवहार रेकॉर्ड अपरिवर्तनीय आहे आणि "आशावादी रोलअप चेन" तयार करते. + +आशावादी रोलअपच्या आर्किटेक्चरमध्ये खालील भाग समाविष्ट आहेत: + +**ऑनचेन कॉन्ट्रॅक्ट्स**: आशावादी रोलअपचे कार्य इथेरियमवर चालणाऱ्या स्मार्ट कॉन्ट्रॅक्ट्सद्वारे नियंत्रित केले जाते. यामध्ये रोलअप ब्लॉक्स संग्रहित करणारे, रोलअपवरील स्टेट अपडेट्सचे निरीक्षण करणारे आणि वापरकर्त्याच्या ठेवींचा मागोवा घेणारे कॉन्ट्रॅक्ट्स समाविष्ट आहेत. या अर्थाने, इथेरियम आशावादी रोलअपसाठी बेस लेयर किंवा "लेयर 1" म्हणून काम करते. + +**ऑफचेन व्हर्च्युअल मशीन (VM)**: जरी आशावादी रोलअप प्रोटोकॉल व्यवस्थापित करणारे कॉन्ट्रॅक्ट्स इथेरियमवर चालतात, तरी रोलअप प्रोटोकॉल [इथेरियम व्हर्च्युअल मशीन](/developers/docs/evm/) पेक्षा वेगळ्या दुसऱ्या व्हर्च्युअल मशीनवर गणना आणि स्टेट स्टोरेज करतो. ऑफचेन VM हे असे ठिकाण आहे जिथे ॲप्लिकेशन्स राहतात आणि स्टेट बदल कार्यान्वित केले जातात; ते आशावादी रोलअपसाठी अप्पर लेयर किंवा "लेयर 2" म्हणून काम करते. + +आशावादी रोलअप्स EVM साठी लिहिलेल्या किंवा संकलित केलेल्या प्रोग्राम्स चालवण्यासाठी डिझाइन केलेले असल्याने, ऑफचेन VM मध्ये अनेक EVM डिझाइन स्पेक्स समाविष्ट आहेत. याव्यतिरिक्त, ऑनचेनवर मोजलेले फ्रॉड प्रूफ इथेरियम नेटवर्कला ऑफचेन VM मध्ये मोजलेल्या स्टेट बदलांची वैधता लागू करण्याची परवानगी देतात. + +आशावादी रोलअप्सना 'हायब्रिड स्केलिंग सोल्यूशन्स' असे म्हटले जाते कारण, जरी ते स्वतंत्र प्रोटोकॉल म्हणून अस्तित्वात असले तरी, त्यांचे सुरक्षा गुणधर्म इथेरियममधून मिळवले जातात. इतर गोष्टींबरोबरच, इथेरियम रोलअपच्या ऑफचेन गणनेची अचूकता आणि गणनेमागील डेटाची उपलब्धता याची हमी देते. हे आशावादी रोलअप्सना शुद्ध ऑफचेन स्केलिंग प्रोटोकॉलपेक्षा (उदा., [साइडचेन्स](/developers/docs/scaling/sidechains/)) अधिक सुरक्षित बनवते जे सुरक्षेसाठी इथेरियमवर अवलंबून नाहीत. + +आशावादी रोलअप्स खालील गोष्टींसाठी मुख्य इथेरियम प्रोटोकॉलवर अवलंबून असतात: + +### डेटा उपलब्धता {#data-availability} + +उल्लेख केल्याप्रमाणे, आशावादी रोलअप्स व्यवहार डेटा इथेरियमवर `calldata` किंवा [blobs](/roadmap/danksharding/) म्हणून पोस्ट करतात. रोलअप चेनची अंमलबजावणी सादर केलेल्या व्यवहारांवर आधारित असल्याने, कोणीही ही माहिती—इथेरियमच्या बेस लेयरवर आधारित—रोलअपची स्टेट कार्यान्वित करण्यासाठी आणि स्टेट संक्रमणांच्या अचूकतेची पडताळणी करण्यासाठी वापरू शकतो. + +[डेटा उपलब्धता](/developers/docs/data-availability/) महत्त्वपूर्ण आहे कारण स्टेट डेटामध्ये प्रवेशाशिवाय, आव्हानकर्ते अवैध रोलअप ऑपरेशन्सना विवादित करण्यासाठी फ्रॉड प्रूफ तयार करू शकत नाहीत. इथेरियम डेटा उपलब्धता प्रदान केल्यामुळे, रोलअप ऑपरेटर्सना दुर्भावनापूर्ण कृत्ये (उदा. अवैध ब्लॉक्स सादर करणे) करून सुटण्याचा धोका कमी होतो. + +### सेन्सॉरशिप प्रतिरोध {#censorship-resistance} + +आशावादी रोलअप्स सेन्सॉरशिप प्रतिरोधासाठी इथेरियमवर देखील अवलंबून असतात. आशावादी रोलअपमध्ये एक केंद्रीकृत संस्था (ऑपरेटर) व्यवहार प्रक्रिया करण्यासाठी आणि इथेरियमवर रोलअप ब्लॉक्स सादर करण्यासाठी जबाबदार असते. याचे काही परिणाम आहेत: + +- रोलअप ऑपरेटर्स पूर्णपणे ऑफलाइन जाऊन किंवा काही विशिष्ट व्यवहार असलेले ब्लॉक्स तयार करण्यास नकार देऊन वापरकर्त्यांना सेन्सॉर करू शकतात. + +- रोलअप ऑपरेटर्स मालकीच्या मर्केल प्रूफसाठी आवश्यक असलेला स्टेट डेटा रोखून वापरकर्त्यांना रोलअप कॉन्ट्रॅक्टमध्ये जमा केलेले फंड काढण्यापासून रोखू शकतात. स्टेट डेटा रोखल्याने रोलअपची स्टेट वापरकर्त्यांपासून लपवली जाऊ शकते आणि त्यांना रोलअपशी संवाद साधण्यापासून रोखले जाऊ शकते. + +आशावादी रोलअप्स ऑपरेटर्सना इथेरियमवर स्टेट अपडेट्सशी संबंधित डेटा प्रकाशित करण्यास भाग पाडून ही समस्या सोडवतात. ऑनचेनवर रोलअप डेटा प्रकाशित करण्याचे खालील फायदे आहेत: + +- जर एखादा आशावादी रोलअप ऑपरेटर ऑफलाइन गेला किंवा व्यवहार बॅच तयार करणे थांबवले, तर दुसरा नोड उपलब्ध डेटा वापरून रोलअपची शेवटची स्टेट पुन्हा तयार करू शकतो आणि ब्लॉक उत्पादन सुरू ठेवू शकतो. + +- वापरकर्ते निधीच्या मालकीचे पुरावे देण्यासाठी मर्केल प्रूफ तयार करण्यासाठी व्यवहार डेटा वापरू शकतात आणि रोलअपमधून त्यांची मालमत्ता काढू शकतात. + +- वापरकर्ते त्यांचे व्यवहार सिक्वेन्सरऐवजी L1 वर देखील सबमिट करू शकतात, अशा परिस्थितीत सिक्वेन्सरला वैध ब्लॉक्स तयार करणे सुरू ठेवण्यासाठी एका विशिष्ट वेळेच्या मर्यादेत व्यवहार समाविष्ट करावा लागतो. + +### सेटलमेंट {#settlement} + +आशावादी रोलअप्सच्या संदर्भात इथेरियमची दुसरी भूमिका सेटलमेंट लेयरची आहे. एक सेटलमेंट लेयर संपूर्ण ब्लॉकचेन इकोसिस्टमला अँकर करते, सुरक्षा स्थापित करते, आणि जर दुसऱ्या चेनवर (या प्रकरणात आशावादी रोलअप्स) विवाद उद्भवला ज्यासाठी लवादाची आवश्यकता आहे तर वस्तुनिष्ठ अंतिमता प्रदान करते. + +इथेरियम मेननेट आशावादी रोलअप्सना फ्रॉड प्रूफ सत्यापित करण्यासाठी आणि विवाद सोडवण्यासाठी एक केंद्र प्रदान करते. शिवाय, रोलअपवर केलेले व्यवहार केवळ _नंतर_ अंतिम होतात जेव्हा रोलअप ब्लॉक इथेरियमवर स्वीकारला जातो. एकदा रोलअप व्यवहार इथेरियमच्या बेस लेयरवर वचनबद्ध झाल्यावर, तो मागे घेतला जाऊ शकत नाही (चेन पुनर्रचनेच्या अत्यंत असंभव प्रकरणात वगळता). + +## आशावादी रोलअप्स कसे काम करतात? {#how-optimistic-rollups-work} + +### व्यवहार अंमलबजावणी आणि एकत्रीकरण {#transaction-execution-and-aggregation} + +वापरकर्ते “ऑपरेटर्स” कडे व्यवहार सादर करतात, जे आशावादी रोलअपवर व्यवहार प्रक्रिया करण्यासाठी जबाबदार नोड्स आहेत. “व्हॅलिडेटर” किंवा “ॲग्रिगेटर” म्हणूनही ओळखले जाणारे, ऑपरेटर व्यवहार एकत्र करतो, अंतर्निहित डेटा कॉम्प्रेस करतो आणि इथेरियमवर ब्लॉक प्रकाशित करतो. + +[प्रूफ-ऑफ-स्टेक सिस्टीम](/developers/docs/consensus-mechanisms/pos/) प्रमाणेच, कोणीही व्हॅलिडेटर बनू शकत असले तरी, आशावादी रोलअप व्हॅलिडेटर्सनी ब्लॉक्स तयार करण्यापूर्वी एक बॉण्ड प्रदान करणे आवश्यक आहे. जर व्हॅलिडेटरने अवैध ब्लॉक पोस्ट केला किंवा जुन्या-पण-अवैध ब्लॉकवर तयार केला (जरी त्यांचा ब्लॉक वैध असला तरी) तर हा बॉण्ड स्लॅश केला जाऊ शकतो. याप्रकारे आशावादी रोलअप्स व्हॅलिडेटर्स प्रामाणिकपणे वागतील याची खात्री करण्यासाठी क्रिप्टोकॉनॉमिक प्रोत्साहनांचा वापर करतात. + +आशावादी रोलअप चेनवरील इतर व्हॅलिडेटर्सकडून रोलअपच्या स्टेटच्या त्यांच्या प्रतीचा वापर करून सादर केलेले व्यवहार कार्यान्वित करण्याची अपेक्षा केली जाते. जर व्हॅलिडेटरची अंतिम स्टेट ऑपरेटरच्या प्रस्तावित स्टेटपेक्षा वेगळी असेल, तर ते आव्हान सुरू करू शकतात आणि फ्रॉड प्रूफ मोजू शकतात. + +काही आशावादी रोलअप्स परवानगीविरहित व्हॅलिडेटर सिस्टीम सोडून देऊ शकतात आणि चेन कार्यान्वित करण्यासाठी एकाच “सिक्वेन्सर”चा वापर करू शकतात. व्हॅलिडेटरप्रमाणे, सिक्वेन्सर व्यवहार प्रक्रिया करतो, रोलअप ब्लॉक्स तयार करतो आणि रोलअप व्यवहार L1 चेन (इथेरियम) वर सादर करतो. + +सिक्वेन्सर नियमित रोलअप ऑपरेटरपेक्षा वेगळा आहे कारण त्यांचे व्यवहारांच्या क्रमावर जास्त नियंत्रण असते. तसेच, सिक्वेन्सरला रोलअप चेनमध्ये प्राधान्याने प्रवेश असतो आणि ऑनचेन कॉन्ट्रॅक्टवर व्यवहार सादर करण्यासाठी अधिकृत असलेली एकमेव संस्था आहे. सिक्वेन्सर नसलेल्या नोड्स किंवा नियमित वापरकर्त्यांकडून आलेले व्यवहार एका वेगळ्या इनबॉक्समध्ये रांगेत ठेवले जातात, जोपर्यंत सिक्वेन्सर त्यांना नवीन बॅचमध्ये समाविष्ट करत नाही. + +#### इथेरियमवर रोलअप ब्लॉक्स सादर करणे {#submitting-blocks-to-ethereum} + +उल्लेख केल्याप्रमाणे, आशावादी रोलअपचा ऑपरेटर ऑफचेन व्यवहारांना बॅचमध्ये बंडल करतो आणि नोटरीकरणासाठी इथेरियमकडे पाठवतो. या प्रक्रियेत व्यवहार-संबंधित डेटा कॉम्प्रेस करणे आणि तो इथेरियमवर `calldata` म्हणून किंवा ब्लॉब्समध्ये प्रकाशित करणे समाविष्ट आहे. + +`calldata` हे स्मार्ट कॉन्ट्रॅक्टमधील एक न बदलता येणारे, न-टिकाऊ क्षेत्र आहे जे बहुतेक [मेमरी](/developers/docs/smart-contracts/anatomy/#memory) सारखे वागते. `calldata` ब्लॉकचेनच्या [इतिहास लॉग](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) चा भाग म्हणून ऑनचेन टिकून राहतो, तरी तो इथेरियमच्या स्टेटचा भाग म्हणून संग्रहित केला जात नाही. कारण `calldata` इथेरियमच्या स्टेटच्या कोणत्याही भागाला स्पर्श करत नाही, त्यामुळे ऑनचेन डेटा संग्रहित करण्यासाठी तो स्टेटपेक्षा स्वस्त आहे. + +`calldata` कीवर्डचा वापर सॉलिडिटीमध्ये अंमलबजावणीच्या वेळी स्मार्ट कॉन्ट्रॅक्ट फंक्शनला वितर्क पास करण्यासाठी देखील केला जातो. `calldata` व्यवहारादरम्यान कॉल होत असलेल्या फंक्शनची ओळख पटवते आणि बाइट्सच्या अनियंत्रित क्रमाच्या स्वरूपात फंक्शनचे इनपुट धारण करते. + +आशावादी रोलअप्सच्या संदर्भात, `calldata` चा वापर कॉम्प्रेस केलेला व्यवहार डेटा ऑनचेन कॉन्ट्रॅक्टवर पाठवण्यासाठी केला जातो. रोलअप ऑपरेटर रोलअप कॉन्ट्रॅक्टमध्ये आवश्यक फंक्शन कॉल करून आणि कॉम्प्रेस केलेला डेटा फंक्शन वितर्क म्हणून पास करून नवीन बॅच जोडतो. `calldata` वापरल्याने वापरकर्त्यांचे शुल्क कमी होते कारण रोलअप्सना लागणारा बहुतेक खर्च ऑनचेन डेटा संग्रहित करण्यापासून येतो. + +ही संकल्पना कशी कार्य करते हे दाखवण्यासाठी रोलअप बॅच सबमिशनचे [एक उदाहरण](https://eth.blockscout.com/tx/0x9102bfce17c58b5fc1c974c24b6bb7a924fb5fbd7c4cd2f675911c27422a5591) येथे आहे. सिक्वेन्सरने `appendSequencerBatch()` पद्धत सुरू केली आणि `calldata` वापरून कॉम्प्रेस केलेला व्यवहार डेटा इनपुट म्हणून पास केला. + +काही रोलअप्स आता इथेरियमवर व्यवहारांच्या बॅच पोस्ट करण्यासाठी ब्लॉब्स वापरतात. + +ब्लॉब्स न बदलता येणारे आणि न टिकणारे आहेत (`calldata` प्रमाणेच) परंतु ~18 दिवसांनंतर इतिहासातून काढले जातात. ब्लॉब्सबद्दल अधिक माहितीसाठी, [Danksharding](/roadmap/danksharding) पहा. + +### स्टेट कमिटमेंट्स {#state-commitments} + +कोणत्याही वेळी, आशावादी रोलअपची स्टेट (खाती, शिल्लक, कॉन्ट्रॅक्ट कोड, इ.) [मर्केल ट्री](/whitepaper/#merkle-trees) म्हणून आयोजित केले जाते ज्याला "स्टेट ट्री" म्हणतात. या मर्केल ट्रीचे मूळ (स्टेट रूट), जे रोलअपच्या नवीनतम स्टेटचा संदर्भ देते, हॅश केले जाते आणि रोलअप कॉन्ट्रॅक्टमध्ये संग्रहित केले जाते. चेनवरील प्रत्येक स्टेट संक्रमण नवीन रोलअप स्टेट तयार करते, ज्यासाठी ऑपरेटर नवीन स्टेट रूट मोजून वचनबद्ध करतो. + +ऑपरेटरला बॅच पोस्ट करताना जुने स्टेट रूट्स आणि नवीन स्टेट रूट्स दोन्ही सादर करणे आवश्यक आहे. जर जुना स्टेट रूट ऑनचेन कॉन्ट्रॅक्टमधील विद्यमान स्टेट रूटशी जुळत असेल, तर नंतरचा स्टेट रूट टाकून दिला जातो आणि त्याच्या जागी नवीन स्टेट रूट ठेवला जातो. + +रोलअप ऑपरेटरला व्यवहार बॅचसाठी मर्केल रूट देखील वचनबद्ध करणे आवश्यक आहे. हे कोणालाही [मर्केल प्रूफ](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) सादर करून बॅचमध्ये (L1 वर) व्यवहार समाविष्ट असल्याचे सिद्ध करण्यास अनुमती देते. + +स्टेट कमिटमेंट्स, विशेषतः स्टेट रूट्स, आशावादी रोलअपमध्ये स्टेट बदलांची अचूकता सिद्ध करण्यासाठी आवश्यक आहेत. रोलअप कॉन्ट्रॅक्ट ऑपरेटर्सकडून नवीन स्टेट रूट्स पोस्ट केल्यावर लगेच स्वीकारतो, परंतु नंतर अवैध स्टेट रूट्स हटवून रोलअपला त्याच्या योग्य स्टेटवर पुनर्संचयित करू शकतो. + +### फ्रॉड प्रूफिंग {#fraud-proving} + +स्पष्ट केल्याप्रमाणे, आशावादी रोलअप्स कोणालाही वैधतेचे पुरावे न देता ब्लॉक्स प्रकाशित करण्याची परवानगी देतात. तथापि, चेन सुरक्षित राहील याची खात्री करण्यासाठी, आशावादी रोलअप्स एक वेळ विंडो निर्दिष्ट करतात ज्या दरम्यान कोणीही स्टेट संक्रमणास विवादित करू शकतो. म्हणून, रोलअप ब्लॉक्सना “असर्शन्स” म्हटले जाते कारण कोणीही त्यांच्या वैधतेला विवादित करू शकतो. + +जर कोणी असर्शनला विवादित केले, तर रोलअप प्रोटोकॉल फ्रॉड प्रूफची गणना सुरू करेल. प्रत्येक प्रकारचा फ्रॉड प्रूफ परस्परसंवादी असतो—दुसऱ्या व्यक्तीला आव्हान देण्यापूर्वी कोणीतरी असर्शन पोस्ट करणे आवश्यक आहे. फरक यात आहे की फ्रॉड प्रूफ मोजण्यासाठी किती फेऱ्यांच्या परस्परसंवादाची आवश्यकता आहे. + +सिंगल-राउंड इंटरॅक्टिव्ह प्रूफिंग योजना अवैध असर्शन्स शोधण्यासाठी L1 वर विवादित व्यवहार पुन्हा चालवतात. रोलअप प्रोटोकॉल L1 (इथेरियम) वर विवादित व्यवहाराच्या पुन्हा अंमलबजावणीचे अनुकरण व्हेरिफायर कॉन्ट्रॅक्ट वापरून करतो, ज्यामध्ये मोजलेला स्टेट रूट आव्हान कोण जिंकतो हे ठरवते. जर आव्हानकर्त्याचा रोलअपच्या योग्य स्टेटबद्दलचा दावा योग्य असेल, तर ऑपरेटरला त्यांचा बॉण्ड स्लॅश करून दंडित केले जाते. + +तथापि, फ्रॉड शोधण्यासाठी L1 वर व्यवहार पुन्हा कार्यान्वित करण्यासाठी वैयक्तिक व्यवहारांसाठी स्टेट कमिटमेंट्स प्रकाशित करणे आवश्यक आहे आणि रोलअप्सनी ऑनचेनवर प्रकाशित करावयाच्या डेटाचे प्रमाण वाढवते. व्यवहार पुन्हा चालवण्यामुळे लक्षणीय गॅस खर्च देखील येतो. या कारणास्तव, आशावादी रोलअप्स मल्टी-राउंड इंटरॅक्टिव्ह प्रूफिंगवर स्विच करत आहेत, जे समान उद्दिष्ट (म्हणजे, अवैध रोलअप ऑपरेशन्स शोधणे) अधिक कार्यक्षमतेने साध्य करते. + +#### मल्टी-राउंड इंटरॅक्टिव्ह प्रूफिंग {#multi-round-interactive-proving} + +मल्टी-राउंड इंटरॅक्टिव्ह प्रूफिंगमध्ये असर्टर आणि चॅलेंजर यांच्यात एक बॅक-अँड-फोर्थ प्रोटोकॉल समाविष्ट असतो ज्यावर L1 व्हेरिफायर कॉन्ट्रॅक्टद्वारे देखरेख ठेवली जाते, जो शेवटी खोट्या पक्षाचा निर्णय घेतो. L2 नोडने असर्शनला आव्हान दिल्यानंतर, असर्टरला विवादित असर्शन दोन समान भागांमध्ये विभागणे आवश्यक आहे. या प्रकरणात प्रत्येक वैयक्तिक असर्शनमध्ये दुसऱ्या इतकेच गणनेचे टप्पे असतील. + +चॅलेंजर नंतर कोणत्या असर्शनला आव्हान द्यायचे आहे ते निवडेल. विभाजनाची प्रक्रिया (“बायसेक्शन प्रोटोकॉल” म्हणतात) तोपर्यंत सुरू राहते जोपर्यंत दोन्ही पक्ष अंमलबजावणीच्या _एकाच_ टप्प्याबद्दलच्या असर्शनवर विवाद करत नाहीत. या टप्प्यावर, L1 कॉन्ट्रॅक्ट फसवणूक करणाऱ्या पक्षाला पकडण्यासाठी निर्देशांचे (आणि त्याच्या परिणामाचे) मूल्यांकन करून विवाद सोडवेल. + +असर्शन करणाऱ्याला विवादित सिंगल-स्टेप गणनेची वैधता सत्यापित करणारा “वन-स्टेप प्रूफ” प्रदान करणे आवश्यक आहे. जर असर्शन करणारा वन-स्टेप प्रूफ प्रदान करण्यात अयशस्वी झाला, किंवा L1 व्हेरिफायरने प्रूफ अवैध मानला, तर ते आव्हान गमावतात. + +या प्रकारच्या फ्रॉड प्रूफबद्दल काही नोट्स: + +1. मल्टी-राउंड इंटरॅक्टिव्ह फ्रॉड प्रूफिंग कार्यक्षम मानले जाते कारण ते विवाद लवादामध्ये L1 चेनला करावे लागणारे काम कमी करते. संपूर्ण व्यवहार पुन्हा चालवण्याऐवजी, L1 चेनला फक्त रोलअपच्या अंमलबजावणीमधील एकच टप्पा पुन्हा कार्यान्वित करण्याची आवश्यकता असते. + +2. बायसेक्शन प्रोटोकॉल ऑनचेनवर पोस्ट केलेल्या डेटाचे प्रमाण कमी करतात (प्रत्येक व्यवहारासाठी स्टेट कमिट प्रकाशित करण्याची आवश्यकता नाही). तसेच, आशावादी रोलअप व्यवहार इथेरियमच्या गॅस मर्यादेद्वारे मर्यादित नाहीत. याउलट, व्यवहार पुन्हा कार्यान्वित करणारे आशावादी रोलअप्सना खात्री करावी लागते की L2 व्यवहाराची गॅस मर्यादा कमी आहे जेणेकरून त्याची अंमलबजावणी एकाच इथेरियम व्यवहारात अनुकरण करता येईल. + +3. दुर्भावनापूर्ण असर्टरच्या बॉण्डचा काही भाग चॅलेंजरला दिला जातो, तर दुसरा भाग बर्न केला जातो. बर्निंगमुळे व्हॅलिडेटर्समधील संगनमत टाळले जाते; जर दोन व्हॅलिडेटर्स बनावट आव्हाने सुरू करण्यासाठी संगनमत करत असतील, तरीही ते संपूर्ण स्टेकचा एक मोठा भाग गमावतील. + +4. मल्टी-राउंड इंटरॅक्टिव्ह प्रूफिंगसाठी दोन्ही पक्षांना (असर्शन करणारा आणि आव्हानकर्ता) निर्दिष्ट वेळेच्या विंडोमध्ये हालचाल करणे आवश्यक आहे. वेळेची मर्यादा संपण्यापूर्वी कारवाई करण्यात अयशस्वी झाल्यास डिफॉल्टिंग पक्ष आव्हान गमावतो. + +#### आशावादी रोलअप्ससाठी फ्रॉड प्रूफ का महत्त्वाचे आहेत {#fraud-proof-benefits} + +फ्रॉड प्रूफ महत्त्वाचे आहेत कारण ते आशावादी रोलअप्समध्ये _ट्रस्टलेस फायनॅलिटी_ सुलभ करतात. ट्रस्टलेस फायनॅलिटी हा आशावादी रोलअप्सचा एक गुण आहे जो हमी देतो की एखादा व्यवहार—जोपर्यंत तो वैध आहे—अखेरीस पुष्टी केली जाईल. + +दुर्भावनापूर्ण नोड्स खोटे आव्हान सुरू करून वैध रोलअप ब्लॉकच्या पुष्टीकरणास विलंब करण्याचा प्रयत्न करू शकतात. तथापि, फ्रॉड प्रूफ अखेरीस रोलअप ब्लॉकची वैधता सिद्ध करतील आणि त्याची पुष्टी करतील. + +हे आशावादी रोलअप्सच्या दुसऱ्या सुरक्षा गुणधर्माशी संबंधित आहे: चेनची वैधता _एका_ प्रामाणिक नोडच्या अस्तित्वावर अवलंबून आहे. प्रामाणिक नोड वैध दावे पोस्ट करून किंवा अवैध दावे विवादित करून चेन योग्यरित्या पुढे नेऊ शकतो. काहीही असले तरी, प्रामाणिक नोडशी विवाद करणारे दुर्भावनापूर्ण नोड्स फ्रॉड प्रूफिंग प्रक्रियेदरम्यान त्यांचे स्टेक गमावतील. + +### L1/L2 इंटरऑपरेबिलिटी {#l1-l2-interoperability} + +आशावादी रोलअप्स इथेरियम मेननेटसोबतच्या आंतरकार्यक्षमतेसाठी डिझाइन केलेले आहेत आणि वापरकर्त्यांना L1 आणि L2 दरम्यान संदेश आणि अनियंत्रित डेटा पास करण्याची परवानगी देतात. ते EVM शी देखील सुसंगत आहेत, त्यामुळे तुम्ही विद्यमान [dapps](/developers/docs/dapps/) आशावादी रोलअप्सवर पोर्ट करू शकता किंवा इथेरियम डेव्हलपमेंट टूल्स वापरून नवीन dapps तयार करू शकता. + +#### १. मालमत्ता हस्तांतरण {#asset-movement} + +##### रोलअपमध्ये प्रवेश करणे + +आशावादी रोलअप वापरण्यासाठी, वापरकर्ते L1 वरील रोलअपच्या [ब्रिज](/developers/docs/bridges/) कॉन्ट्रॅक्टमध्ये ETH, ERC-20 टोकन आणि इतर स्वीकारलेली मालमत्ता जमा करतात. ब्रिज कॉन्ट्रॅक्ट व्यवहार L2 वर रिले करेल, जिथे समतुल्य मालमत्ता तयार केली जाईल आणि आशावादी रोलअपवर वापरकर्त्याच्या निवडलेल्या पत्त्यावर पाठवली जाईल. + +वापरकर्त्याने तयार केलेले व्यवहार (जसे की L1 > L2 ठेव) सामान्यतः सिक्वेन्सर त्यांना रोलअप कॉन्ट्रॅक्टवर पुन्हा सादर करेपर्यंत रांगेत ठेवले जातात. तथापि, सेन्सॉरशिप प्रतिरोध टिकवून ठेवण्यासाठी, आशावादी रोलअप्स वापरकर्त्यांना व्यवहार थेट ऑनचेन रोलअप कॉन्ट्रॅक्टवर सादर करण्याची परवानगी देतात, जर तो परवानगी दिलेल्या कमाल वेळेपेक्षा जास्त विलंबित झाला असेल. + +काही आशावादी रोलअप्स सिक्वेन्सरला वापरकर्त्यांना सेन्सॉर करण्यापासून रोखण्यासाठी अधिक सरळ दृष्टिकोन स्वीकारतात. येथे, एक ब्लॉक रोलअप चेनवर प्रक्रिया केलेल्या व्यवहारांव्यतिरिक्त मागील ब्लॉकपासून L1 कॉन्ट्रॅक्टवर सादर केलेल्या सर्व व्यवहारांद्वारे (उदा., ठेवी) परिभाषित केला जातो. जर सिक्वेन्सरने L1 व्यवहाराकडे दुर्लक्ष केले, तर तो (सिद्ध करण्यायोग्य) चुकीचा स्टेट रूट प्रकाशित करेल; म्हणून, सिक्वेन्सर L1 वर पोस्ट केल्यावर वापरकर्त्याने तयार केलेले संदेश विलंबित करू शकत नाहीत. + +##### रोलअपमधून बाहेर पडणे + +आशावादी रोलअपमधून इथेरियममध्ये पैसे काढणे फ्रॉड प्रूफिंग योजनेमुळे अधिक कठीण आहे. जर एखादा वापरकर्ता L1 वर एस्क्रो केलेले फंड काढण्यासाठी L2 > L1 व्यवहार सुरू करतो, तर त्यांना आव्हान कालावधी—अंदाजे सात दिवस चालणारा—संपेपर्यंत थांबावे लागेल. तरीसुद्धा, पैसे काढण्याची प्रक्रिया स्वतःच बरीच सरळ आहे. + +L2 रोलअपवर पैसे काढण्याची विनंती सुरू झाल्यानंतर, व्यवहार पुढील बॅचमध्ये समाविष्ट केला जातो, तर रोलअपवरील वापरकर्त्याची मालमत्ता बर्न केली जाते. एकदा बॅच इथेरियमवर प्रकाशित झाल्यावर, वापरकर्ता ब्लॉकवर त्यांच्या बाहेर पडण्याच्या व्यवहाराचा समावेश सत्यापित करणारा मर्केल प्रूफ मोजू शकतो. नंतर L1 वर व्यवहार अंतिम करण्यासाठी आणि मेननेटवर फंड काढण्यासाठी विलंब कालावधीत प्रतीक्षा करावी लागते. + +इथेरियममध्ये फंड काढण्यापूर्वी एक आठवडा थांबणे टाळण्यासाठी, आशावादी रोलअप वापरकर्ते **लिक्विडिटी प्रोव्हायडर** (LP) वापरू शकतात. लिक्विडिटी प्रोव्हायडर प्रलंबित L2 काढण्याच्या मालकीची जबाबदारी घेतो आणि वापरकर्त्याला L1 वर (एका शुल्काच्या बदल्यात) पैसे देतो. + +लिक्विडिटी प्रोव्हायडर्स फंड्स जारी करण्यापूर्वी वापरकर्त्याच्या पैसे काढण्याच्या विनंतीची वैधता तपासू शकतात (चेन स्वतः कार्यान्वित करून). या प्रकारे त्यांना आश्वासन मिळते की व्यवहार अखेरीस पुष्टी केला जाईल (म्हणजे, ट्रस्टलेस फायनॅलिटी). + +#### २. EVM सुसंगतता {#evm-compatibility} + +डेव्हलपर्ससाठी, आशावादी रोलअप्सचा फायदा त्यांची सुसंगतता—किंवा, अधिक चांगले म्हणजे, [इथेरियम व्हर्च्युअल मशीन (EVM)](/developers/docs/evm/) शी समानता—आहे. EVM-सुसंगत रोलअप्स [इथेरियम यलो पेपर](https://ethereum.github.io/yellowpaper/paper.pdf) मधील वैशिष्ट्यांचे पालन करतात आणि बाइटकोड स्तरावर EVM ला समर्थन देतात. + +आशावादी रोलअप्समध्ये EVM-सुसंगततेचे खालील फायदे आहेत: + +i. डेव्हलपर्स इथेरियमवरील विद्यमान स्मार्ट कॉन्ट्रॅक्ट्स आशावादी रोलअप चेन्सवर कोडबेसमध्ये मोठ्या प्रमाणात बदल न करता स्थलांतरित करू शकतात. हे L2 वर इथेरियम स्मार्ट कॉन्ट्रॅक्ट तैनात करताना डेव्हलपमेंट टीम्सचा वेळ वाचवू शकते. + +ii. आशावादी रोलअप्स वापरणारे डेव्हलपर्स आणि प्रोजेक्ट टीम्स इथेरियमच्या पायाभूत सुविधांचा फायदा घेऊ शकतात. यामध्ये प्रोग्रामिंग भाषा, कोड लायब्ररी, टेस्टिंग टूल्स, क्लायंट सॉफ्टवेअर, डिप्लॉयमेंट इन्फ्रास्ट्रक्चर इत्यादींचा समावेश आहे. + +विद्यमान टूलिंग वापरणे महत्त्वाचे आहे कारण ही साधने अनेक वर्षांपासून मोठ्या प्रमाणात ऑडिट, डीबग आणि सुधारित केली गेली आहेत. हे इथेरियम डेव्हलपर्सना संपूर्ण नवीन डेव्हलपमेंट स्टॅकसह कसे तयार करायचे हे शिकण्याची गरज देखील दूर करते. + +#### ३. क्रॉस-चेन कॉन्ट्रॅक्ट कॉल्स {#cross-chain-contract-calls} + +वापरकर्ते (बाह्य मालकीची खाती) रोलअप कॉन्ट्रॅक्टवर व्यवहार सबमिट करून किंवा सिक्वेन्सर किंवा व्हॅलिडेटरकडून ते करून घेऊन L2 कॉन्ट्रॅक्ट्सशी संवाद साधतात. आशावादी रोलअप्स इथेरियमवरील कॉन्ट्रॅक्ट खात्यांना संदेश रिले करण्यासाठी आणि L1 आणि L2 दरम्यान डेटा पास करण्यासाठी ब्रिजिंग कॉन्ट्रॅक्ट्स वापरून L2 कॉन्ट्रॅक्ट्सशी संवाद साधण्याची परवानगी देतात. याचा अर्थ असा की तुम्ही इथेरियम मेननेटवर L1 कॉन्ट्रॅक्ट प्रोग्राम करू शकता जो L2 आशावादी रोलअपवरील कॉन्ट्रॅक्ट्सशी संबंधित फंक्शन्सना कॉल करू शकतो. + +क्रॉस-चेन कॉन्ट्रॅक्ट कॉल्स असिंक्रोनसपणे होतात—म्हणजे कॉल प्रथम सुरू केला जातो, नंतर नंतरच्या वेळी कार्यान्वित केला जातो. हे इथेरियमवरील दोन कॉन्ट्रॅक्ट्समधील कॉल्सपेक्षा वेगळे आहे, जिथे कॉल लगेच परिणाम देतो. + +क्रॉस-चेन कॉन्ट्रॅक्ट कॉलचे एक उदाहरण म्हणजे आधी वर्णन केलेली टोकन ठेव. L1 वरील एक कॉन्ट्रॅक्ट वापरकर्त्याचे टोकन एस्क्रो करतो आणि रोलअपवर समान प्रमाणात टोकन मिंट करण्यासाठी जोडलेल्या L2 कॉन्ट्रॅक्टला संदेश पाठवतो. + +क्रॉस-चेन संदेश कॉल्समुळे कॉन्ट्रॅक्ट अंमलबजावणी होत असल्याने, पाठवणाऱ्याला सामान्यतः गणनेसाठी [गॅस खर्च](/developers/docs/gas/) भरावा लागतो. लक्ष्य चेनवर व्यवहार अयशस्वी होण्यापासून रोखण्यासाठी उच्च गॅस मर्यादा सेट करणे उचित आहे. टोकन ब्रिजिंग परिस्थिती हे एक चांगले उदाहरण आहे; जर व्यवहाराची L1 बाजू (टोकन जमा करणे) काम करते, परंतु L2 बाजू (नवीन टोकन मिंट करणे) कमी गॅसमुळे अयशस्वी होते, तर ठेव अपरिवर्तनीय बनते. + +शेवटी, आपण हे लक्षात घेतले पाहिजे की कॉन्ट्रॅक्ट्समधील L2 > L1 संदेश कॉल्सना विलंबाचा हिशोब द्यावा लागतो (L1 > L2 कॉल्स सामान्यतः काही मिनिटांनंतर कार्यान्वित केले जातात). हे असे आहे कारण आशावादी रोलअपमधून मेननेटवर पाठवलेले संदेश चॅलेंज विंडो संपेपर्यंत कार्यान्वित केले जाऊ शकत नाहीत. + +## आशावादी रोलअप शुल्क कसे कार्य करते? {#how-do-optimistic-rollup-fees-work} + +आशावादी रोलअप्स इथेरियमप्रमाणेच गॅस फी योजना वापरतात, जे दर्शवते की वापरकर्ते प्रत्येक व्यवहारासाठी किती पैसे देतात. आशावादी रोलअप्सवर आकारले जाणारे शुल्क खालील घटकांवर अवलंबून असते: + +1. **स्टेट राइट**: आशावादी रोलअप्स व्यवहार डेटा आणि ब्लॉक हेडर्स (मागील ब्लॉक हेडर हॅश, स्टेट रूट, बॅच रूट यांचा समावेश असलेले) इथेरियमवर `blob` किंवा "बायनरी लार्ज ऑब्जेक्ट" म्हणून प्रकाशित करतात. [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) ने ऑनचेनवर डेटा समाविष्ट करण्यासाठी एक किफायतशीर उपाय सादर केला. `blob` हे एक नवीन व्यवहार क्षेत्र आहे जे रोलअप्सना कॉम्प्रेस केलेला स्टेट संक्रमण डेटा इथेरियम L1 वर पोस्ट करण्याची परवानगी देते. `calldata` च्या विपरीत, जे कायमस्वरूपी ऑनचेन राहते, ब्लॉब्स अल्पायुषी असतात आणि [4096 युगांनंतर](https://github.com/ethereum/consensus-specs/blob/81f3ea8322aff6b9fb15132d050f8f98b16bdba4/configs/mainnet.yaml#L147) (अंदाजे 18 दिवस) क्लायंटमधून छाटले जाऊ शकतात. कॉम्प्रेस केलेल्या व्यवहारांच्या बॅचेस पोस्ट करण्यासाठी ब्लॉब्स वापरून, आशावादी रोलअप्स L1 वर व्यवहार लिहिण्याचा खर्च लक्षणीयरीत्या कमी करू शकतात. + +2. **ब्लॉब गॅस वापरला**: ब्लॉब-वाहून नेणारे व्यवहार [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) द्वारे सादर केलेल्या डायनॅमिक फी यंत्रणेसारखी यंत्रणा वापरतात. टाइप-3 व्यवहारांसाठी गॅस फी ब्लॉब्ससाठी बेस फी विचारात घेते, जी नेटवर्कद्वारे ब्लॉब-स्पेस मागणी आणि पाठवल्या जाणाऱ्या व्यवहाराच्या ब्लॉब-स्पेस वापराच्या आधारावर निर्धारित केली जाते. + +3. **L2 ऑपरेटर शुल्क**: ही रक्कम रोलअप नोड्सना व्यवहार प्रक्रिया करताना झालेल्या संगणकीय खर्चाची भरपाई म्हणून दिली जाते, जसे की इथेरियमवरील गॅस फी. रोलअप नोड्स कमी व्यवहार शुल्क आकारतात कारण L2s ची प्रक्रिया क्षमता जास्त असते आणि त्यांना नेटवर्क गर्दीचा सामना करावा लागत नाही ज्यामुळे इथेरियमवरील व्हॅलिडेटर्सना जास्त शुल्कासह व्यवहारांना प्राधान्य द्यावे लागते. + +आशावादी रोलअप्स वापरकर्त्यांसाठी शुल्क कमी करण्यासाठी अनेक यंत्रणा लागू करतात, ज्यात व्यवहार बॅचिंग करणे आणि डेटा प्रकाशन खर्च कमी करण्यासाठी `calldata` कॉम्प्रेस करणे समाविष्ट आहे. इथेरियम-आधारित आशावादी रोलअप्स वापरण्यासाठी किती खर्च येतो याच्या रिअल-टाइम विहंगावलोकनासाठी तुम्ही [L2 शुल्क ट्रॅकर](https://l2fees.info/) तपासू शकता. + +## आशावादी रोलअप्स इथेरियमला कसे स्केल करतात? {#scaling-ethereum-with-optimistic-rollups} + +स्पष्ट केल्याप्रमाणे, आशावादी रोलअप्स डेटा उपलब्धतेची हमी देण्यासाठी इथेरियमवर कॉम्प्रेस केलेला व्यवहार डेटा प्रकाशित करतात. आशावादी रोलअप्ससह इथेरियमवर थ्रुपुट स्केल करण्यासाठी ऑनचेनवर प्रकाशित डेटा कॉम्प्रेस करण्याची क्षमता महत्त्वपूर्ण आहे. + +मुख्य इथेरियम चेन ब्लॉक्स किती डेटा ठेवू शकतात यावर मर्यादा घालते, जी गॅस युनिट्समध्ये दर्शविली जाते ([सरासरी ब्लॉक आकार](/developers/docs/blocks/#block-size) 15 दशलक्ष गॅस आहे). हे प्रत्येक व्यवहार किती गॅस वापरू शकतो यावर मर्यादा घालते, तरीही याचा अर्थ असा आहे की आपण व्यवहार-संबंधित डेटा कमी करून प्रति ब्लॉक प्रक्रिया केलेल्या व्यवहारांची संख्या वाढवू शकतो— थेट स्केलेबिलिटी सुधारते. + +आशावादी रोलअप्स व्यवहार डेटा कॉम्प्रेशन साध्य करण्यासाठी आणि TPS दर सुधारण्यासाठी अनेक तंत्रांचा वापर करतात. उदाहरणार्थ, हा [लेख](https://vitalik.eth.limo/general/2021/01/05/rollup.html) मेननेटवर एक मूलभूत वापरकर्ता व्यवहार (ईथर पाठवणे) किती डेटा तयार करतो आणि रोलअपवर तोच व्यवहार किती डेटा तयार करतो याची तुलना करतो: + +| पॅरामीटर | इथेरियम (L1) | रोलअप (L2) | +| --------- | ---------------------------------------------------- | ------------------------------------ | +| नॉन्स | ~3 | 0 | +| गॅसप्राइस | ~8 | 0-0.5 | +| गॅस | 3 | 0-0.5 | +| ते | 21 | 4 | +| मूल्य | 9 | ~3 | +| सही | ~68 (2 + 33 + 33) | ~0.5 | +| कडून | 0 (सिग पासून वसूल) | 4 | +| **एकूण** | **~112 बाइट्स** | **~12 बाइट्स** | + +या आकडेवारीवर काही ढोबळ गणना केल्यास आशावादी रोलअपने मिळवलेल्या स्केलेबिलिटी सुधारणा दर्शविण्यात मदत होऊ शकते: + +1. प्रत्येक ब्लॉकसाठी लक्ष्य आकार 15 दशलक्ष गॅस आहे आणि एक बाइट डेटा सत्यापित करण्यासाठी 16 गॅस खर्च येतो. सरासरी ब्लॉक आकाराला 16 गॅसने भागल्यास (15,000,000/16) सरासरी ब्लॉकमध्ये **937,500 बाइट्स डेटा** ठेवता येतो. +2. जर मूलभूत रोलअप व्यवहार 12 बाइट्स वापरत असेल, तर सरासरी इथेरियम ब्लॉक **78,125 रोलअप व्यवहार** (937,500/12) किंवा **39 रोलअप बॅच** (जर प्रत्येक बॅचमध्ये सरासरी 2,000 व्यवहार असतील) प्रक्रिया करू शकतो. +3. जर इथेरियमवर दर 15 सेकंदांनी एक नवीन ब्लॉक तयार केला गेला, तर रोलअपची प्रक्रिया गती अंदाजे **प्रति सेकंद 5,208 व्यवहार** असेल. हे इथेरियम ब्लॉक किती मूलभूत रोलअप व्यवहार ठेवू शकतो (**78,125**) याला सरासरी ब्लॉक वेळेने (**15 सेकंद**) भागून केले जाते. + +हा एक बऱ्यापैकी आशावादी अंदाज आहे, कारण आशावादी रोलअप व्यवहार इथेरियमवर संपूर्ण ब्लॉकचा समावेश करू शकत नाहीत. तथापि, ते आशावादी रोलअप्स इथेरियम वापरकर्त्यांना किती स्केलेबिलिटी लाभ देऊ शकतात याची ढोबळ कल्पना देऊ शकते (सध्याची अंमलबजावणी 2,000 TPS पर्यंत ऑफर करते). + +इथेरियमवर [डेटा शार्डिंग](/roadmap/danksharding/) सुरू केल्याने आशावादी रोलअप्समध्ये स्केलेबिलिटी सुधारण्याची अपेक्षा आहे. रोलअप व्यवहारांना इतर नॉन-रोलअप व्यवहारांसह ब्लॉकस्पेस शेअर करावी लागत असल्याने, त्यांची प्रक्रिया क्षमता मुख्य इथेरियम चेनवरील डेटा थ्रुपुटद्वारे मर्यादित आहे. डँकशार्डिंग महागड्या, कायमस्वरूपी `CALLDATA` ऐवजी स्वस्त, तात्पुरत्या "ब्लॉब" स्टोरेजचा वापर करून प्रति ब्लॉक डेटा प्रकाशित करण्यासाठी L2 चेन्ससाठी उपलब्ध जागा वाढवेल. + +### आशावादी रोलअप्सचे फायदे आणि तोटे {#optimistic-rollups-pros-and-cons} + +| फायदे | बाधक | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| सुरक्षितता किंवा विश्वासार्हतेशी तडजोड न करता स्केलेबिलिटीमध्ये प्रचंड सुधारणा देते. | संभाव्य फसवणुकीच्या आव्हानांमुळे व्यवहार अंतिम होण्यास विलंब. | +| व्यवहार डेटा लेयर 1 चेनवर संग्रहित केला जातो, ज्यामुळे पारदर्शकता, सुरक्षा, सेन्सॉरशिप-प्रतिरोध आणि विकेंद्रीकरण सुधारते. | केंद्रीकृत रोलअप ऑपरेटर (सिक्वेन्सर) व्यवहाराच्या क्रमावर प्रभाव टाकू शकतात. | +| फ्रॉड प्रूफिंग विश्वासार्ह अंतिमतेची हमी देते आणि प्रामाणिक अल्पसंख्याकांना चेन सुरक्षित करण्याची परवानगी देते. | जर प्रामाणिक नोड्स नसतील तर एक दुर्भावनापूर्ण ऑपरेटर अवैध ब्लॉक्स आणि स्टेट कमिटमेंट्स पोस्ट करून निधी चोरू शकतो. | +| फ्रॉड प्रूफ मोजणे नियमित L2 नोडसाठी खुले आहे, वैधता प्रूफ (ZK-रोलअप्समध्ये वापरले जाते) च्या विपरीत ज्यांना विशेष हार्डवेअरची आवश्यकता असते. | सुरक्षा मॉडेल कमीतकमी एका प्रामाणिक नोडवर अवलंबून असते जो रोलअप व्यवहार कार्यान्वित करतो आणि अवैध स्टेट संक्रमणांना आव्हान देण्यासाठी फ्रॉड प्रूफ सादर करतो. | +| रोलअप्सना "विश्वासार्ह सजीवतेचा" फायदा होतो (कोणीही व्यवहार कार्यान्वित करून आणि दावे पोस्ट करून चेन पुढे नेण्यास भाग पाडू शकतो) | वापरकर्त्यांना इथेरियमवर निधी परत काढण्यापूर्वी एक आठवड्याचा आव्हान कालावधी संपण्याची प्रतीक्षा करावी लागते. | +| आशावादी रोलअप्स चेनवरील सुरक्षा वाढवण्यासाठी चांगल्या प्रकारे डिझाइन केलेल्या क्रिप्टोकॉनॉमिक प्रोत्साहनांवर अवलंबून असतात. | रोलअप्सना सर्व व्यवहार डेटा ऑनचेनवर पोस्ट करावा लागतो, ज्यामुळे खर्च वाढू शकतो. | +| EVM आणि सॉलिडिटीसह सुसंगतता डेव्हलपर्सना इथेरियम-नेटिव्ह स्मार्ट कॉन्ट्रॅक्ट्स रोलअप्सवर पोर्ट करण्याची किंवा नवीन dapps तयार करण्यासाठी विद्यमान टूलिंग वापरण्याची परवानगी देते. | | + +### आशावादी रोलअप्सचे एक दृष्य स्पष्टीकरण {#optimistic-video} + +तुम्ही पाहून शिकणारे आहात का? फायनेमॅटिक्सला आशावादी रोलअप्सचे स्पष्टीकरण देताना पहा: + + + +## आशावादी रोलअप्सवर पुढील वाचन + +- [आशावादी रोलअप्स कसे काम करतात (संपूर्ण मार्गदर्शक)](https://www.alchemy.com/overviews/optimistic-rollups) +- [ब्लॉकचेन रोलअप म्हणजे काय? एक तांत्रिक ओळख](https://www.ethereum-ecosystem.com/blog/what-is-a-blockchain-rollup-a-technical-introduction) +- [आर्बिट्रमसाठी आवश्यक मार्गदर्शक](https://www.bankless.com/the-essential-guide-to-arbitrum) +- [इथेरियम रोलअप्ससाठी व्यावहारिक मार्गदर्शक](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) +- [इथेरियम L2s मधील फ्रॉड प्रूफची स्थिती](https://web.archive.org/web/20241124154627/https://research.2077.xyz/the-state-of-fraud-proofs-in-ethereum-l2s) +- [ऑप्टिमिझमचा रोलअप खरोखर कसा काम करतो?](https://www.paradigm.xyz/2021/01/how-does-optimism-s-rollup-really-work) +- [OVM डीप डाइव्ह](https://medium.com/ethereum-optimism/ovm-deep-dive-a300d1085f52) +- [ऑप्टिमिस्टिक व्हर्च्युअल मशीन म्हणजे काय?](https://www.alchemy.com/overviews/optimistic-virtual-machine) diff --git a/public/content/translations/mr/developers/docs/scaling/plasma/index.md b/public/content/translations/mr/developers/docs/scaling/plasma/index.md new file mode 100644 index 00000000000..6a16af6ebf4 --- /dev/null +++ b/public/content/translations/mr/developers/docs/scaling/plasma/index.md @@ -0,0 +1,176 @@ +--- +title: "प्लाझ्मा चेन्स" +description: "इथेरियम समुदायाद्वारे सध्या वापरले जाणारे स्केलिंग सोल्यूशन म्हणून प्लाझ्मा चेन्सची ओळख." +lang: mr +incomplete: true +sidebarDepth: 3 +--- + +प्लाझ्मा चेन ही इथेरियम मेननेटशी जोडलेली एक वेगळी ब्लॉकचेन आहे, परंतु ती ब्लॉक व्हॅलिडेशनसाठी स्वतःच्या यंत्रणेसह ऑफचेन व्यवहार कार्यान्वित करते. प्लाझ्मा चेन्सना कधीकधी "चाइल्ड" चेन्स म्हटले जाते, जे मूलत: इथेरियम मेननेटच्या लहान प्रती आहेत. प्लाझ्मा चेन्स विवादांचे निराकरण करण्यासाठी [फ्रॉड प्रूफ](/glossary/#fraud-proof) (जसे की [ऑप्टिमिस्टिक रोलअप्स](/developers/docs/scaling/optimistic-rollups/)) वापरतात. + +मर्कल ट्रीज या चेन्सचा एक अंतहीन स्टॅक तयार करण्यास सक्षम करतात जे मूळ चेन्सवरून (इथेरियम मेननेटसह) बँडविड्थ ऑफलोड करण्यासाठी काम करू शकतात. तथापि, या चेन्स इथेरियमकडून (फ्रॉड प्रूफद्वारे) काही प्रमाणात सुरक्षा मिळवत असल्या तरी, त्यांच्या सुरक्षा आणि कार्यक्षमतेवर अनेक डिझाइन मर्यादांचा परिणाम होतो. + +## पूर्वतयारी {#prerequisites} + +तुम्हाला सर्व मूलभूत विषयांची चांगली समज आणि [इथेरियम स्केलिंग](/developers/docs/scaling/) ची उच्च-स्तरीय समज असणे आवश्यक आहे. + +## प्लाझ्मा म्हणजे काय? + +प्लाझ्मा हे इथेरियमसारख्या सार्वजनिक ब्लॉकचेनमध्ये स्केलेबिलिटी सुधारण्यासाठी एक फ्रेमवर्क आहे. मूळ [प्लाझ्मा व्हाइटपेपर](http://plasma.io/plasma.pdf) मध्ये वर्णन केल्याप्रमाणे, प्लाझ्मा चेन्स दुसर्‍या ब्लॉकचेनवर (ज्याला "रूट चेन" म्हणतात) तयार केल्या जातात. प्रत्येक "चाइल्ड चेन" रूट चेनपासून विस्तारते आणि सामान्यतः मूळ चेनवर तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्टद्वारे व्यवस्थापित केली जाते. + +प्लाझ्मा कॉन्ट्रॅक्ट, इतर गोष्टींबरोबरच, वापरकर्त्यांना इथेरियम मेननेट आणि प्लाझ्मा चेन दरम्यान मालमत्ता हलविण्यास अनुमती देणारा [ब्रिज](/developers/docs/bridges/) म्हणून कार्य करतो. जरी हे त्यांना [साइडचेन्स](/developers/docs/scaling/sidechains/) सारखे बनवते, तरी प्लाझ्मा चेन्सना काही प्रमाणात इथेरियम मेननेटच्या सुरक्षेचा फायदा होतो. हे साइडचेन्सच्या विपरीत आहे जे केवळ त्यांच्या सुरक्षेसाठी जबाबदार असतात. + +## प्लाझ्मा कसे कार्य करते? + +प्लाझ्मा फ्रेमवर्कचे मूलभूत घटक आहेत: + +### ऑफचेन कम्प्युटेशन {#offchain-computation} + +इथेरियमचा सध्याचा प्रोसेसिंग वेग प्रति सेकंद ~ 15-20 व्यवहारांपर्यंत मर्यादित आहे, ज्यामुळे अधिक वापरकर्त्यांना हाताळण्यासाठी स्केलिंगची अल्प-मुदतीची शक्यता कमी होते. ही समस्या मुख्यत्वे अस्तित्वात आहे कारण इथेरियमच्या [कन्सेन्सस मेकॅनिझम](/developers/docs/consensus-mechanisms/) ला ब्लॉकचेनच्या स्थितीत प्रत्येक अपडेट सत्यापित करण्यासाठी अनेक पीअर-टू-पीअर नोड्सची आवश्यकता असते. + +इथेरियमचा कन्सेन्सस मेकॅनिझम सुरक्षेसाठी आवश्यक असला तरी, तो प्रत्येक वापराच्या बाबतीत लागू होऊ शकत नाही. उदाहरणार्थ, अॅलिसला बॉबला एका कप कॉफीसाठी केलेल्या दैनंदिन पेमेंटची संपूर्ण इथेरियम नेटवर्कद्वारे पडताळणी करण्याची आवश्यकता नाही, कारण दोन्ही पक्षांमध्ये काही विश्वास असतो. + +प्लाझ्मा असे गृहीत धरते की इथेरियम मेननेटला सर्व व्यवहार सत्यापित करण्याची आवश्यकता नाही. त्याऐवजी, आम्ही मेननेटच्या बाहेर व्यवहार प्रक्रिया करू शकतो, ज्यामुळे नोड्सना प्रत्येक व्यवहार प्रमाणित करण्यापासून मुक्तता मिळते. + +ऑफचेन कम्प्युटेशन आवश्यक आहे कारण प्लाझ्मा चेन्स वेग आणि खर्चासाठी ऑप्टिमाइझ करू शकतात. उदाहरणार्थ, प्लाझ्मा चेन व्यवहारांची क्रमवारी आणि अंमलबजावणी व्यवस्थापित करण्यासाठी एकाच "ऑपरेटर" चा वापर करू शकते - आणि बहुतेकदा करते. फक्त एकच संस्था व्यवहार सत्यापित करत असल्याने, प्लाझ्मा चेनवरील प्रक्रिया वेळ इथेरियम मेननेटपेक्षा वेगवान असतो. + +### स्टेट कमिटमेंट्स {#state-commitments} + +प्लाझ्मा ऑफचेन व्यवहार कार्यान्वित करत असताना, ते मुख्य इथेरियम एक्झिक्यूशन लेयरवर सेटल केले जातात—अन्यथा, प्लाझ्मा चेन्स इथेरियमच्या सुरक्षा हमींचा लाभ घेऊ शकत नाहीत. परंतु प्लाझ्मा चेनची स्थिती न जाणता ऑफचेन व्यवहार अंतिम केल्याने सुरक्षा मॉडेल मोडले जाईल आणि अवैध व्यवहारांचा प्रसार होईल. यामुळेच ऑपरेटर, प्लाझ्मा चेनवर ब्लॉक्स तयार करण्यासाठी जबाबदार असलेली संस्था, वेळोवेळी इथेरियमवर "स्टेट कमिटमेंट्स" प्रकाशित करणे आवश्यक आहे. + +[कमिटमेंट स्कीम](https://en.wikipedia.org/wiki/Commitment_scheme) हे एक क्रिप्टोग्राफिक तंत्र आहे जे एखाद्या मूल्यासाठी किंवा विधानासाठी वचनबद्ध होण्यासाठी वापरले जाते, ते दुसऱ्या पक्षाला उघड न करता. कमिटमेंट्स या अर्थाने "बंधनकारक" आहेत की एकदा तुम्ही त्यासाठी वचनबद्ध झाल्यावर तुम्ही ते मूल्य किंवा विधान बदलू शकत नाही. प्लाझ्मा मधील स्टेट कमिटमेंट्स "मर्कल रूट्स" ([मर्कल ट्री](/whitepaper/#merkle-trees) पासून घेतलेले) चे स्वरूप घेतात, जे ऑपरेटर इथेरियम चेनवरील प्लाझ्मा कॉन्ट्रॅक्टला ठराविक अंतराने पाठवतो. + +मर्कल रूट्स हे क्रिप्टोग्राफिक प्रिमिटिव्ह आहेत जे मोठ्या प्रमाणात माहिती संकुचित करण्यास सक्षम करतात. एक मर्कल रूट (या प्रकरणात "ब्लॉक रूट" असेही म्हटले जाते) एका ब्लॉकमधील सर्व व्यवहारांचे प्रतिनिधित्व करू शकते. मर्कल रूट्समुळे डेटाचा एक लहान तुकडा मोठ्या डेटासेटचा भाग आहे हे सत्यापित करणे सोपे होते. उदाहरणार्थ, एखादा वापरकर्ता विशिष्ट ब्लॉकमध्ये व्यवहाराचा समावेश सिद्ध करण्यासाठी [मर्कल प्रूफ](/developers/tutorials/merkle-proofs-for-offline-data-integrity/#main-content) तयार करू शकतो. + +ऑफचेनच्या स्थितीबद्दल इथेरियमला माहिती देण्यासाठी मर्कल रूट्स महत्त्वाचे आहेत. तुम्ही मर्कल रूट्सला "सेव्ह पॉइंट्स" म्हणून विचार करू शकता: ऑपरेटर म्हणत आहे, "ही प्लाझ्मा चेनची x वेळेतील स्थिती आहे, आणि हा पुरावा म्हणून मर्कल रूट आहे." ऑपरेटर मर्कल रूटसह प्लाझ्मा चेनच्या _सध्याच्या स्थितीसाठी_ वचनबद्ध आहे, म्हणूनच याला "स्टेट कमिटमेंट" म्हटले जाते. + +### एंट्रीज आणि एग्झिट्स {#entries-and-exits} + +इथेरियम वापरकर्त्यांना प्लाझ्माचा फायदा घेण्यासाठी, मेननेट आणि प्लाझ्मा चेन्समध्ये निधी हलविण्यासाठी एक यंत्रणा असणे आवश्यक आहे. आम्ही प्लाझ्मा चेनवरील पत्त्यावर अनियंत्रितपणे ईथर पाठवू शकत नाही - या चेन्स विसंगत आहेत, त्यामुळे व्यवहार अयशस्वी होईल किंवा निधी गमावला जाईल. + +प्लाझ्मा वापरकर्त्यांच्या एंट्रीज आणि एग्झिट्सवर प्रक्रिया करण्यासाठी इथेरियमवर चालणाऱ्या मास्टर कॉन्ट्रॅक्टचा वापर करते. हा मास्टर कॉन्ट्रॅक्ट स्टेट कमिटमेंट्सचा (पूर्वी स्पष्ट केल्याप्रमाणे) मागोवा घेण्यासाठी आणि फ्रॉड प्रूफद्वारे (यावर नंतर अधिक) अप्रामाणिक वर्तनाला शिक्षा देण्यासाठी देखील जबाबदार आहे. + +#### प्लाझ्मा चेनमध्ये प्रवेश करणे {#entering-the-plasma-chain} + +प्लाझ्मा चेनमध्ये प्रवेश करण्यासाठी, अॅलिसला (वापरकर्त्याला) प्लाझ्मा कॉन्ट्रॅक्टमध्ये ETH किंवा कोणताही ERC-20 टोकन जमा करावा लागेल. प्लाझ्मा ऑपरेटर, जो कॉन्ट्रॅक्ट डिपॉझिट्सवर लक्ष ठेवतो, अॅलिसच्या सुरुवातीच्या डिपॉझिटच्या समान रक्कम पुन्हा तयार करतो आणि ती प्लाझ्मा चेनवरील तिच्या पत्त्यावर जारी करतो. अॅलिसला चाइल्ड चेनवर निधी मिळाल्याची साक्ष देणे आवश्यक आहे आणि त्यानंतर ती हे निधी व्यवहारांसाठी वापरू शकते. + +#### प्लाझ्मा चेनमधून बाहेर पडणे {#exiting-the-plasma-chain} + +प्लाझ्मा चेनमधून बाहेर पडणे हे त्यात प्रवेश करण्यापेक्षा अनेक कारणांमुळे अधिक गुंतागुंतीचे आहे. सर्वात मोठे कारण म्हणजे, इथेरियमकडे प्लाझ्मा चेनच्या स्थितीबद्दल माहिती असली तरी, ती माहिती खरी आहे की नाही हे सत्यापित करू शकत नाही. एक दुर्भावनापूर्ण वापरकर्ता चुकीचा दावा करू शकतो ("माझ्याकडे 1000 ETH आहेत") आणि दाव्याला पाठिंबा देण्यासाठी बनावट पुरावे देऊन सुटू शकतो. + +दुर्भावनापूर्ण विथड्रॉअल्स रोखण्यासाठी, "चॅलेंज पीरियड" सादर केला जातो. चॅलेंज पीरियड दरम्यान (साधारणपणे एक आठवडा), कोणीही फ्रॉड-प्रूफ वापरून विथड्रॉअल विनंतीला आव्हान देऊ शकते. जर आव्हान यशस्वी झाले, तर विथड्रॉअल विनंती नाकारली जाते. + +तथापि, सहसा असे घडते की वापरकर्ते प्रामाणिक असतात आणि त्यांच्या मालकीच्या निधीबद्दल योग्य दावे करतात. या परिस्थितीत, अॅलिस रूट चेन (इथेरियम) वर प्लाझ्मा कॉन्ट्रॅक्टमध्ये एक व्यवहार सबमिट करून विथड्रॉअल विनंती सुरू करेल. + +तिला एक मर्कल प्रूफ देखील द्यावा लागेल जो प्लाझ्मा चेनवर तिचा निधी तयार करणारा व्यवहार एका ब्लॉकमध्ये समाविष्ट होता हे सत्यापित करेल. [अनस्पेंट ट्रान्झॅक्शन आउटपुट (UTXO)](https://en.wikipedia.org/wiki/Unspent_transaction_output) मॉडेल वापरणाऱ्या [प्लाझ्मा MVP](https://www.learnplasma.org/en/learn/mvp.html) सारख्या प्लाझ्माच्या पुनरावृत्तीसाठी हे आवश्यक आहे. + +[प्लाझ्मा कॅश](https://www.learnplasma.org/en/learn/cash.html) सारखे इतर, निधीला UTXOs ऐवजी [नॉन-फंजिबल टोकन्स](/developers/docs/standards/tokens/erc-721/) म्हणून दर्शवतात. या प्रकरणात, पैसे काढण्यासाठी, प्लाझ्मा चेनवरील टोकनच्या मालकीचा पुरावा आवश्यक आहे. हे टोकन समाविष्ट असलेले नवीनतम दोन व्यवहार सबमिट करून आणि त्या व्यवहारांचा एका ब्लॉकमध्ये समावेश सत्यापित करणारा मर्कल प्रूफ देऊन केले जाते. + +वापरकर्त्याला प्रामाणिक वर्तनाची हमी म्हणून पैसे काढण्याच्या विनंतीमध्ये बॉन्ड देखील जोडावा लागतो. जर एखाद्या चॅलेंजरने अॅलिसची पैसे काढण्याची विनंती अवैध असल्याचे सिद्ध केले, तर तिचा बॉन्ड स्लॅश केला जातो आणि त्याचा काही भाग चॅलेंजरला बक्षीस म्हणून जातो. + +जर चॅलेंज पीरियड कोणीही फ्रॉड-प्रूफ न देता संपला, तर अॅलिसची पैसे काढण्याची विनंती वैध मानली जाते, ज्यामुळे तिला इथेरियमवरील प्लाझ्मा कॉन्ट्रॅक्टमधून डिपॉझिट परत मिळवता येते. + +### विवाद लवाद {#dispute-arbitration} + +कोणत्याही ब्लॉकचेनप्रमाणे, प्लाझ्मा चेनला सहभागींनी दुर्भावनापूर्णपणे वागल्यास (उदा. निधी दुप्पट खर्च करणे) व्यवहारांची अखंडता लागू करण्यासाठी एका यंत्रणेची आवश्यकता असते. यासाठी, प्लाझ्मा चेन्स स्टेट ट्रान्झिशन्सच्या वैधतेबद्दलच्या विवादांचे निराकरण करण्यासाठी आणि वाईट वर्तनाला दंड देण्यासाठी फ्रॉड प्रूफ वापरतात. फ्रॉड प्रूफ्सचा वापर एक यंत्रणा म्हणून केला जातो ज्याद्वारे प्लाझ्मा चाइल्ड चेन आपल्या मूळ चेनकडे किंवा रूट चेनकडे तक्रार दाखल करते. + +फ्रॉड-प्रूफ म्हणजे विशिष्ट स्टेट ट्रान्झिशन अवैध असल्याचा दावा. एक उदाहरण म्हणजे जर एखादा वापरकर्ता (अॅलिस) समान निधी दोनदा खर्च करण्याचा प्रयत्न करतो. कदाचित तिने बॉबसोबतच्या व्यवहारात UTXO खर्च केला असेल आणि तोच UTXO (जो आता बॉबचा आहे) दुसऱ्या व्यवहारात खर्च करू इच्छित असेल. + +पैसे काढणे टाळण्यासाठी, बॉब अॅलिसने मागील व्यवहारात उक्त UTXO खर्च केल्याचा पुरावा आणि व्यवहाराचा एका ब्लॉकमध्ये समावेश असल्याचा मर्कल प्रूफ देऊन एक फ्रॉड-प्रूफ तयार करेल. तीच प्रक्रिया प्लाझ्मा कॅशमध्ये कार्य करते—बॉबला अॅलिसने पूर्वी ती टोकन्स हस्तांतरित केल्याचा पुरावा द्यावा लागेल जे ती काढण्याचा प्रयत्न करत आहे. + +जर बॉबचे आव्हान यशस्वी झाले, तर अॅलिसची पैसे काढण्याची विनंती रद्द केली जाते. तथापि, हा दृष्टिकोन बॉबच्या पैसे काढण्याच्या विनंत्यांसाठी चेनवर लक्ष ठेवण्याच्या क्षमतेवर अवलंबून आहे. जर बॉब ऑफलाइन असेल, तर चॅलेंज पीरियड संपल्यानंतर अॅलिस दुर्भावनापूर्ण पैसे काढण्याची प्रक्रिया करू शकते. + +## प्लाझ्मा मधील मास एग्झिट समस्या {#the-mass-exit-problem-in-plasma} + +जेव्हा मोठ्या संख्येने वापरकर्ते एकाच वेळी प्लाझ्मा चेनमधून पैसे काढण्याचा प्रयत्न करतात तेव्हा मास एग्झिट समस्या उद्भवते. ही समस्या का अस्तित्वात आहे याचा संबंध प्लाझ्माच्या सर्वात मोठ्या समस्यांपैकी एकाशी आहे: **डेटा अनुपलब्धता**. + +डेटा उपलब्धता म्हणजे प्रस्तावित ब्लॉकची माहिती प्रत्यक्षात ब्लॉकचेन नेटवर्कवर प्रकाशित झाली होती हे सत्यापित करण्याची क्षमता. जर उत्पादकाने ब्लॉक स्वतः प्रकाशित केला परंतु ब्लॉक तयार करण्यासाठी वापरलेला डेटा रोखून ठेवला तर ब्लॉक "अनुपलब्ध" असतो. + +जर नोड्सना ब्लॉक डाउनलोड करायचा असेल आणि व्यवहारांची वैधता सत्यापित करायची असेल तर ब्लॉक्स उपलब्ध असणे आवश्यक आहे. ब्लॉकचेन्स ब्लॉक उत्पादकांना सर्व व्यवहार डेटा ऑनचेन पोस्ट करण्यास भाग पाडून डेटा उपलब्धता सुनिश्चित करतात. + +डेटा उपलब्धता इथेरियमच्या बेस लेयरवर तयार होणाऱ्या ऑफचेन स्केलिंग प्रोटोकॉल सुरक्षित करण्यात देखील मदत करते. या चेन्सवरील ऑपरेटर्सना इथेरियमवर व्यवहार डेटा प्रकाशित करण्यास भाग पाडून, कोणीही चेनच्या योग्य स्थितीचा संदर्भ देणारे फ्रॉड प्रूफ तयार करून अवैध ब्लॉक्सना आव्हान देऊ शकतो. + +प्लाझ्मा चेन्स प्रामुख्याने ऑपरेटरकडे व्यवहार डेटा संग्रहित करतात आणि **मेननेटवर कोणताही डेटा प्रकाशित करत नाहीत** (उदा. वेळोवेळी स्टेट कमिटमेंट्स वगळता). याचा अर्थ असा की वापरकर्त्यांना अवैध व्यवहारांना आव्हान देणारे फ्रॉड प्रूफ तयार करण्याची आवश्यकता असल्यास ब्लॉक डेटा प्रदान करण्यासाठी ऑपरेटरवर अवलंबून रहावे लागेल. जर ही प्रणाली कार्य करत असेल, तर वापरकर्ते निधी सुरक्षित करण्यासाठी नेहमी फ्रॉड प्रूफ वापरू शकतात. + +समस्या तेव्हा सुरू होते जेव्हा फक्त कोणताही वापरकर्ता नव्हे, तर ऑपरेटर दुर्भावनापूर्णपणे वागतो. कारण ऑपरेटर ब्लॉकचेनच्या एकमेव नियंत्रणात असतो, त्यामुळे त्यांना मोठ्या प्रमाणावर अवैध स्टेट ट्रान्झिशन पुढे नेण्यासाठी अधिक प्रोत्साहन मिळते, जसे की प्लाझ्मा चेनवरील वापरकर्त्यांचे निधी चोरणे. + +या प्रकरणात, क्लासिक फ्रॉड-प्रूफ प्रणाली कार्य करत नाही. ऑपरेटर सहजपणे अॅलिस आणि बॉबचे निधी त्यांच्या वॉलेटमध्ये हस्तांतरित करणारा अवैध व्यवहार करू शकतो आणि फ्रॉड-प्रूफ तयार करण्यासाठी आवश्यक डेटा लपवू शकतो. हे शक्य आहे कारण ऑपरेटरला वापरकर्त्यांसाठी किंवा मेननेटसाठी डेटा उपलब्ध करून देण्याची आवश्यकता नाही. + +म्हणून, सर्वात आशावादी उपाय म्हणजे प्लाझ्मा चेनमधून वापरकर्त्यांचा "मास एग्झिट" करण्याचा प्रयत्न करणे. मास एग्झिटमुळे दुर्भावनापूर्ण ऑपरेटरची निधी चोरण्याची योजना मंदावते आणि वापरकर्त्यांसाठी काही प्रमाणात संरक्षण मिळते. प्रत्येक UTXO (किंवा टोकन) केव्हा तयार केले गेले यावर आधारित पैसे काढण्याच्या विनंत्यांची क्रमवारी लावली जाते, ज्यामुळे दुर्भावनापूर्ण ऑपरेटर्सना प्रामाणिक वापरकर्त्यांना फ्रंट-रन करण्यापासून प्रतिबंधित केले जाते. + +तरीही, आम्हाला मास एग्झिट दरम्यान पैसे काढण्याच्या विनंत्यांची वैधता सत्यापित करण्याचा एक मार्ग हवा आहे—अवैध एग्झिटवर प्रक्रिया करून संधीसाधू व्यक्तींना गोंधळाचा फायदा घेण्यापासून रोखण्यासाठी. उपाय सोपा आहे: वापरकर्त्यांना त्यांचे पैसे काढण्यासाठी चेनची शेवटची **वैध स्थिती** पोस्ट करणे आवश्यक आहे. + +परंतु या दृष्टिकोनात अजूनही समस्या आहेत. उदाहरणार्थ, जर प्लाझ्मा चेनवरील सर्व वापरकर्त्यांना बाहेर पडण्याची आवश्यकता असेल (जे दुर्भावनापूर्ण ऑपरेटरच्या बाबतीत शक्य आहे), तर प्लाझ्मा चेनची संपूर्ण वैध स्थिती एकाच वेळी इथेरियमच्या बेस लेयरवर डंप करणे आवश्यक आहे. प्लाझ्मा चेन्सच्या अनियंत्रित आकारामुळे (उच्च थ्रूपुट = अधिक डेटा) आणि इथेरियमच्या प्रक्रिया गतीवरील मर्यादांमुळे, हा एक आदर्श उपाय नाही. + +जरी एग्झिट गेम्स सिद्धांतानुसार चांगले वाटत असले तरी, वास्तविक जीवनातील मास एग्झिटमुळे इथेरियमवरच नेटवर्क-व्यापी गर्दी होण्याची शक्यता आहे. इथेरियमच्या कार्यक्षमतेला हानी पोहोचवण्याव्यतिरिक्त, एक अयोग्यरित्या समन्वयित मास एग्झिट म्हणजे ऑपरेटर प्लाझ्मा चेनवरील प्रत्येक खाते रिकामे करण्यापूर्वी वापरकर्ते निधी काढू शकणार नाहीत. + +## प्लाझ्माचे फायदे आणि तोटे {#pros-and-cons-of-plasma} + +| फायदे | बाधक | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| उच्च थ्रूपुट आणि प्रति व्यवहार कमी खर्च देते. | सामान्य कम्प्युटेशनला सपोर्ट करत नाही (स्मार्ट कॉन्ट्रॅक्ट्स चालवू शकत नाही). प्रीडिकेट लॉजिकद्वारे फक्त मूलभूत टोकन ट्रान्सफर, स्वॅप्स आणि काही इतर व्यवहार प्रकार समर्थित आहेत. | +| अनियंत्रित वापरकर्त्यांमधील व्यवहारांसाठी चांगले (जर दोन्ही प्लाझ्मा चेनवर स्थापित असतील तर प्रति वापरकर्ता जोडीसाठी कोणताही ओव्हरहेड नाही). | तुमच्या निधीची सुरक्षा सुनिश्चित करण्यासाठी वेळोवेळी नेटवर्कवर लक्ष ठेवणे (लाइव्हनेसची आवश्यकता) किंवा ही जबाबदारी दुसऱ्या कोणालातरी सोपवणे आवश्यक आहे. | +| प्लाझ्मा चेन्स मुख्य चेनशी संबंधित नसलेल्या विशिष्ट वापराच्या प्रकरणांसाठी जुळवून घेतल्या जाऊ शकतात. व्यवसायांसह कोणीही, वेगवेगळ्या संदर्भात काम करणारी स्केलेबल इन्फ्रास्ट्रक्चर प्रदान करण्यासाठी प्लाझ्मा स्मार्ट कॉन्ट्रॅक्ट्स सानुकूलित करू शकतो. | डेटा संग्रहित करण्यासाठी आणि विनंतीनुसार तो पुरवण्यासाठी एक किंवा अधिक ऑपरेटर्सवर अवलंबून असते. | +| कम्प्युटेशन आणि स्टोरेज ऑफचेन हलवून इथेरियम मेननेटवरील भार कमी करते. | आव्हानांना परवानगी देण्यासाठी पैसे काढण्यास अनेक दिवस उशीर होतो. फंजिबल मालमत्तेसाठी, लिक्विडिटी प्रोव्हायडर्सद्वारे हे कमी केले जाऊ शकते, परंतु त्यासाठी भांडवली खर्च येतो. | +| | जर खूप जास्त वापरकर्ते एकाच वेळी बाहेर पडण्याचा प्रयत्न करत असतील, तर इथेरियम मेननेटवर गर्दी होऊ शकते. | + +## प्लाझ्मा विरुद्ध लेयर 2 स्केलिंग प्रोटोकॉल {#plasma-vs-layer-2} + +प्लाझ्मा एकेकाळी इथेरियमसाठी एक उपयुक्त स्केलिंग सोल्यूशन मानले जात होते, परंतु आता ते [लेयर 2 (L2) स्केलिंग प्रोटोकॉल](/layer-2/) च्या बाजूने सोडून देण्यात आले आहे. L2 स्केलिंग सोल्यूशन्स प्लाझ्माच्या अनेक समस्यांवर उपाय करतात: + +### कार्यक्षमता {#efficiency} + +[झिरो-नॉलेज रोलअप्स](/developers/docs/scaling/zk-rollups) ऑफचेन प्रक्रिया केलेल्या व्यवहारांच्या प्रत्येक बॅचच्या वैधतेचे क्रिप्टोग्राफिक पुरावे तयार करतात. हे वापरकर्त्यांना (आणि ऑपरेटर्सना) अवैध स्टेट ट्रान्झिशन्स पुढे नेण्यापासून प्रतिबंधित करते, ज्यामुळे चॅलेंज पीरियड्स आणि एग्झिट गेम्सची गरज नाहीशी होते. याचा अर्थ असाही होतो की वापरकर्त्यांना त्यांचे निधी सुरक्षित करण्यासाठी वेळोवेळी चेनवर लक्ष ठेवण्याची गरज नाही. + +### स्मार्ट कॉन्ट्रॅक्ट्ससाठी सपोर्ट {#support-for-smart-contracts} + +प्लाझ्मा फ्रेमवर्कमधील दुसरी समस्या म्हणजे [इथेरियम स्मार्ट कॉन्ट्रॅक्ट्सच्या अंमलबजावणीला सपोर्ट करण्याची असमर्थता](https://ethresear.ch/t/why-smart-contracts-are-not-feasible-on-plasma/2598/4). परिणामी, प्लाझ्माची बहुतेक अंमलबजावणी मुख्यतः साध्या पेमेंट्ससाठी किंवा ERC-20 टोकनच्या देवाणघेवाणीसाठी तयार केली गेली होती. + +याच्या उलट, ऑप्टिमिस्टिक रोलअप्स [इथेरियम व्हर्च्युअल मशीन](/developers/docs/evm/) शी सुसंगत आहेत आणि इथेरियम-नेटिव्ह [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) चालवू शकतात, ज्यामुळे ते [विकेंद्रीकृत ॲप्लिकेशन्स](/developers/docs/dapps/) स्केलिंग करण्यासाठी एक उपयुक्त आणि _सुरक्षित_ उपाय बनतात. त्याचप्रमाणे, [EVM (zkEVM) ची झिरो-नॉलेज अंमलबजावणी तयार करण्याच्या](https://ethresear.ch/t/a-zk-evm-specification/11549) योजना सुरू आहेत, ज्यामुळे ZK-रोलअप्सला अनियंत्रित लॉजिकवर प्रक्रिया करता येईल आणि स्मार्ट कॉन्ट्रॅक्ट्स कार्यान्वित करता येतील. + +### डेटा अनुपलब्धता {#data-unavailability} + +आधी सांगितल्याप्रमाणे, प्लाझ्माला डेटा उपलब्धता समस्येचा सामना करावा लागतो. जर एखाद्या दुर्भावनापूर्ण ऑपरेटरने प्लाझ्मा चेनवर अवैध ट्रान्झिशन पुढे नेले, तर वापरकर्ते त्याला आव्हान देऊ शकणार नाहीत कारण ऑपरेटर फ्रॉड-प्रूफ तयार करण्यासाठी आवश्यक डेटा रोखून ठेवू शकतो. रोलअप्स ऑपरेटर्सना इथेरियमवर व्यवहार डेटा पोस्ट करण्यास भाग पाडून ही समस्या सोडवतात, ज्यामुळे कोणालाही चेनची स्थिती सत्यापित करता येते आणि आवश्यक असल्यास फ्रॉड प्रूफ तयार करता येतात. + +### मास एग्झिट समस्या {#mass-exit-problem} + +ZK-रोलअप्स आणि ऑप्टिमिस्टिक रोलअप्स दोन्ही प्लाझ्माच्या मास एग्झिट समस्येवर विविध प्रकारे उपाय करतात. उदाहरणार्थ, एक ZK-रोलअप क्रिप्टोग्राफिक यंत्रणेवर अवलंबून असतो जे सुनिश्चित करते की ऑपरेटर कोणत्याही परिस्थितीत वापरकर्त्याचे निधी चोरू शकत नाहीत. + +त्याचप्रमाणे, ऑप्टिमिस्टिक रोलअप्स पैसे काढण्यावर एक विलंब कालावधी लादतात, ज्या दरम्यान कोणीही आव्हान सुरू करू शकतो आणि दुर्भावनापूर्ण पैसे काढण्याच्या विनंत्या रोखू शकतो. हे प्लाझ्मासारखे असले तरी, फरक हा आहे की पडताळणी करणार्‍यांना फ्रॉड प्रूफ तयार करण्यासाठी आवश्यक असलेला डेटा मिळतो. त्यामुळे, रोलअप वापरकर्त्यांना इथेरियम मेननेटवर उन्मादपूर्ण, "प्रथम-बाहेर-पडा" स्थलांतरात गुंतण्याची गरज नाही. + +## प्लाझ्मा साइडचेन आणि शार्डिंगपेक्षा कसे वेगळे आहे? {#plasma-sidechains-sharding} + +प्लाझ्मा, साइडचेन आणि शार्डिंग बर्‍यापैकी सारखे आहेत कारण ते सर्व कोणत्या ना कोणत्या प्रकारे इथेरियम मेननेटशी जोडलेले आहेत. तथापि, या कनेक्शनची पातळी आणि ताकद वेगवेगळी असते, ज्यामुळे प्रत्येक स्केलिंग सोल्यूशनच्या सुरक्षा गुणधर्मांवर परिणाम होतो. + +### प्लाझ्मा विरुद्ध साइडचेन्स {#plasma-vs-sidechains} + +[साइडचेन](/developers/docs/scaling/sidechains/) ही एक स्वतंत्रपणे चालवली जाणारी ब्लॉकचेन आहे जी द्वि-मार्गी ब्रिजद्वारे इथेरियम मेननेटशी जोडलेली असते. [ब्रिजेस](/bridges/) वापरकर्त्यांना दोन ब्लॉकचेनमध्ये टोकनची देवाणघेवाण करून साइडचेनवर व्यवहार करण्याची परवानगी देतात, ज्यामुळे इथेरियम मेननेटवरील गर्दी कमी होते आणि स्केलेबिलिटी सुधारते. +साइडचेन्स एक वेगळी कन्सेन्सस मेकॅनिझम वापरतात आणि सामान्यतः इथेरियम मेननेटपेक्षा खूप लहान असतात. परिणामी, या चेन्सवर मालमत्ता ब्रिजिंगमध्ये वाढीव धोका असतो; साइडचेन मॉडेलमध्ये इथेरियम मेननेटकडून मिळालेल्या सुरक्षा हमींच्या अभावामुळे, वापरकर्त्यांना साइडचेनवरील हल्ल्यात निधी गमावण्याचा धोका असतो. + +याउलट, प्लाझ्मा चेन्स त्यांची सुरक्षा मेननेटमधून मिळवतात. हे त्यांना साइडचेनपेक्षा मोजता येण्याजोगे अधिक सुरक्षित बनवते. साइडचेन्स आणि प्लाझ्मा चेन्स दोन्हीमध्ये वेगवेगळे कन्सेन्सस प्रोटोकॉल असू शकतात, परंतु फरक असा आहे की प्लाझ्मा चेन्स इथेरियम मेननेटवर प्रत्येक ब्लॉकसाठी मर्कल रूट्स प्रकाशित करतात. ब्लॉक रूट्स ही माहितीचे लहान तुकडे आहेत जे आपण प्लाझ्मा चेनवर होणाऱ्या व्यवहारांबद्दल माहिती सत्यापित करण्यासाठी वापरू शकतो. जर प्लाझ्मा चेनवर हल्ला झाला, तर वापरकर्ते योग्य पुरावे वापरून त्यांचे निधी सुरक्षितपणे मेननेटवर परत काढू शकतात. + +### प्लाझ्मा विरुद्ध शार्डिंग {#plasma-vs-sharding} + +प्लाझ्मा चेन्स आणि शार्ड चेन्स दोन्ही वेळोवेळी इथेरियम मेननेटवर क्रिप्टोग्राफिक पुरावे प्रकाशित करतात. तथापि, दोन्हीचे सुरक्षा गुणधर्म वेगवेगळे आहेत. + +शार्ड चेन्स प्रत्येक डेटा शार्डबद्दल तपशीलवार माहिती असलेले "कोलेशन हेडर्स" मेननेटवर कमिट करतात. मेननेटवरील नोड्स डेटा शार्ड्सची वैधता सत्यापित करतात आणि लागू करतात, ज्यामुळे अवैध शार्ड ट्रान्झिशन्सची शक्यता कमी होते आणि नेटवर्कला दुर्भावनापूर्ण क्रियाकलापांपासून संरक्षण मिळते. + +प्लाझ्मा वेगळे आहे कारण मेननेटला फक्त चाइल्ड चेन्सच्या स्थितीबद्दल किमान माहिती मिळते. याचा अर्थ मेननेट चाइल्ड चेन्सवर केलेल्या व्यवहारांची प्रभावीपणे पडताळणी करू शकत नाही, ज्यामुळे त्या कमी सुरक्षित होतात. + +**टीप** इथेरियम ब्लॉकचेनचे शार्डिंग करणे आता रोडमॅपवर नाही. त्याची जागा रोलअप्स आणि [डँकशार्डिंग](/roadmap/danksharding) द्वारे स्केलिंगने घेतली आहे. + +### प्लाझ्मा वापरा {#use-plasma} + +अनेक प्रकल्प प्लाझ्माची अंमलबजावणी प्रदान करतात जे तुम्ही तुमच्या dapps मध्ये समाकलित करू शकता: + +- [पॉलिगॉन](https://polygon.technology/) (पूर्वीचे मॅटिक नेटवर्क) + +## पुढील वाचन {#further-reading} + +- [प्लाझ्मा शिका](https://www.learnplasma.org/en/) +- ["सामायिक सुरक्षा" म्हणजे काय आणि ते इतके महत्त्वाचे का आहे याची एक छोटी आठवण](https://old.reddit.com/r/ethereum/comments/sgd3zt/a_quick_reminder_of_what_shared_security_means/) +- [साइडचेन्स विरुद्ध प्लाझ्मा विरुद्ध शार्डिंग](https://vitalik.eth.limo/general/2019/06/12/plasma_vs_sharding.html) +- [प्लाझ्मा समजून घेणे, भाग 1: मूलभूत गोष्टी](https://www.theblockcrypto.com/amp/post/10793/understanding-plasma-part-1-the-basics) +- [प्लाझ्माचे जीवन आणि मृत्यू](https://medium.com/dragonfly-research/the-life-and-death-of-plasma-b72c6a59c5ad#) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/scaling/sidechains/index.md b/public/content/translations/mr/developers/docs/scaling/sidechains/index.md new file mode 100644 index 00000000000..a3ed1fffbdc --- /dev/null +++ b/public/content/translations/mr/developers/docs/scaling/sidechains/index.md @@ -0,0 +1,73 @@ +--- +title: "साइडचेन्स" +description: "सध्या इथेरिअम समुदायाद्वारे स्केलिंग सोल्यूशन म्हणून वापरल्या जाणाऱ्या साइडचेन्सची ओळख." +lang: mr +sidebarDepth: 3 +--- + +साइडचेन ही एक स्वतंत्र ब्लॉकचेन आहे जी इथेरिअमपासून स्वतंत्रपणे चालते आणि दोन-मार्गी ब्रिजद्वारे इथेरिअम मेननेटशी जोडलेली असते. साइडचेन्समध्ये स्वतंत्र ब्लॉक पॅरामीटर्स आणि [कन्सेन्सस अल्गोरिदम](/developers/docs/consensus-mechanisms/) असू शकतात, जे अनेकदा व्यवहारांच्या कार्यक्षम प्रक्रियेसाठी डिझाइन केलेले असतात. साइडचेन वापरण्यामध्ये काही तडजोडींचा समावेश असतो, कारण त्यांना इथेरिअमचे सुरक्षा गुणधर्म वारसा हक्काने मिळत नाहीत. [लेअर 2 स्केलिंग सोल्यूशन्स](/layer-2/) च्या विपरीत, साइडचेन्स स्टेटमधील बदल आणि व्यवहारांचा डेटा इथेरिअम मेननेटवर परत पोस्ट करत नाहीत. + +साइडचेन्स उच्च थ्रुपुट ([स्केलेबिलिटी ट्रायलेमा](https://vitalik.eth.limo/general/2021/05/23/scaling.html)) साध्य करण्यासाठी विकेंद्रीकरण किंवा सुरक्षेच्या काही प्रमाणात त्याग करतात. तथापि, इथेरिअम विकेंद्रीकरण आणि सुरक्षेशी तडजोड न करता स्केलिंगसाठी वचनबद्ध आहे. + +## साइडचेन्स कसे कार्य करतात? {#how-do-sidechains-work} + +साइडचेन्स स्वतंत्र ब्लॉकचेन आहेत, ज्यांचा इतिहास, विकासाचा रोडमॅप आणि डिझाइन विचार वेगळे आहेत. जरी साइडचेनमध्ये इथेरिअमसोबत काही वरवरची साम्ये असली तरी, त्यात अनेक विशिष्ट वैशिष्ट्ये आहेत. + +### कन्सेन्सस अल्गोरिदम {#consensus-algorithms} + +साइडचेन्सना अद्वितीय (म्हणजेच, इथेरिअमपेक्षा वेगळे) बनवणाऱ्या गुणांपैकी एक म्हणजे वापरलेला कन्सेन्सस अल्गोरिदम. साइडचेन्स कन्सेन्सससाठी इथेरिअमवर अवलंबून नसतात आणि त्यांच्या गरजेनुसार पर्यायी कन्सेन्सस प्रोटोकॉल निवडू शकतात. साइडचेन्सवर वापरल्या जाणाऱ्या कन्सेन्सस अल्गोरिदमची काही उदाहरणे खालीलप्रमाणे: + +- [प्रूफ-ऑफ-अथॉरिटी](/developers/docs/consensus-mechanisms/poa/) +- [डेलीगेटेड प्रूफ-ऑफ-स्टेक](https://en.bitcoin.it/wiki/Delegated_proof_of_stake) +- [बायझेंटाईन फॉल्ट टॉलरन्स](https://decrypt.co/resources/byzantine-fault-tolerance-what-is-it-explained). + +इथेरिअमप्रमाणे, साइडचेन्समध्ये व्हॅलिडेटिंग नोड्स असतात जे व्यवहार सत्यापित आणि प्रक्रिया करतात, ब्लॉक तयार करतात आणि ब्लॉकचेन स्टेट संग्रहित करतात. व्हॅलिडेटर्स नेटवर्कवर कन्सेन्सस राखण्यासाठी आणि दुर्भावनापूर्ण हल्ल्यांपासून ते सुरक्षित ठेवण्यासाठी देखील जबाबदार असतात. + +#### ब्लॉक पॅरामीटर्स {#block-parameters} + +इथेरिअम [ब्लॉक वेळा](/developers/docs/blocks/#block-time) (म्हणजे, नवीन ब्लॉक तयार करण्यासाठी लागणारा वेळ) आणि [ब्लॉक आकार](/developers/docs/blocks/#block-size) (म्हणजे, प्रति ब्लॉक गॅसमध्ये दर्शविलेल्या डेटाचे प्रमाण) यावर मर्यादा घालतो. याउलट, साइडचेन्स अनेकदा उच्च थ्रुपुट, जलद व्यवहार आणि कमी शुल्क साध्य करण्यासाठी जलद ब्लॉक वेळा आणि उच्च गॅस मर्यादा यांसारखे वेगवेगळे पॅरामीटर्स स्वीकारतात. + +याचे काही फायदे असले तरी, नेटवर्क विकेंद्रीकरण आणि सुरक्षेसाठी याचे गंभीर परिणाम आहेत. जलद ब्लॉक वेळा आणि मोठे ब्लॉक आकार यांसारखे ब्लॉक पॅरामीटर्स पूर्ण नोड चालवण्याची अडचण वाढवतात - ज्यामुळे चेनपुरवठा सुरक्षित ठेवण्यासाठी काही "सुपरनोड्स" जबाबदार राहतात. अशा परिस्थितीत, व्हॅलिडेटर संगनमत किंवा चेनवर दुर्भावनापूर्ण ताबा मिळवण्याची शक्यता वाढते. + +ब्लॉकचेन्सना विकेंद्रीकरणाला हानी न पोहोचवता स्केल करण्यासाठी, नोड चालवणे प्रत्येकासाठी खुले असले पाहिजे - केवळ विशेष हार्डवेअर असलेल्या पक्षांसाठीच नव्हे. यामुळेच इथेरिअम नेटवर्कवर प्रत्येकजण [एक पूर्ण नोड चालवू शकेल](/developers/docs/nodes-and-clients/#why-should-i-run-an-ethereum-node) याची खात्री करण्यासाठी प्रयत्न सुरू आहेत. + +### EVM सुसंगतता {#evm-compatibility} + +काही साइडचेन्स EVM-सुसंगत आहेत आणि [इथेरिअम व्हर्च्युअल मशीन (EVM)](/developers/docs/evm/) साठी विकसित केलेले कॉन्ट्रॅक्ट्स कार्यान्वित करण्यास सक्षम आहेत. EVM-सुसंगत साइडचेन्स [सॉलिडिटीमध्ये लिहिलेल्या](/developers/docs/smart-contracts/languages/) स्मार्ट कॉन्ट्रॅक्ट्सना, तसेच इतर EVM स्मार्ट कॉन्ट्रॅक्ट भाषांना समर्थन देतात, याचा अर्थ इथेरिअम मेननेटसाठी लिहिलेले स्मार्ट कॉन्ट्रॅक्ट्स EVM-सुसंगत साइडचेन्सवर देखील कार्य करतील. + +याचा अर्थ असा की जर तुम्हाला तुमचे [dapp](/developers/docs/dapps/) साइडचेनवर वापरायचे असेल, तर तुम्हाला फक्त तुमचा [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/) या साइडचेनवर तैनात करायचा आहे. ते मेननेटसारखेच दिसते, वाटते आणि कार्य करते—तुम्ही सॉलिडिटीमध्ये कॉन्ट्रॅक्ट्स लिहिता आणि साइडचेन्स RPC द्वारे चेनशी संवाद साधता. + +साइडचेन्स EVM-सुसंगत असल्यामुळे, त्यांना इथेरिअम-नेटिव्ह dapps साठी एक उपयुक्त [स्केलिंग सोल्यूशन](/developers/docs/scaling/) मानले जाते. साइडचेनवर तुमच्या dapp सह, वापरकर्ते कमी गॅस शुल्क आणि जलद व्यवहारांचा आनंद घेऊ शकतात, विशेषतः जेव्हा मेननेटवर गर्दी असते. + +तथापि, आधी स्पष्ट केल्याप्रमाणे, साइडचेन वापरण्यामध्ये महत्त्वपूर्ण तडजोडींचा समावेश असतो. प्रत्येक साइडचेन स्वतःच्या सुरक्षेसाठी जबाबदार असते आणि तिला इथेरिअमचे सुरक्षा गुणधर्म वारसा हक्काने मिळत नाहीत. यामुळे दुर्भावनापूर्ण वर्तनाची शक्यता वाढते ज्यामुळे तुमच्या वापरकर्त्यांवर परिणाम होऊ शकतो किंवा त्यांचे फंड धोक्यात येऊ शकतात. + +### मालमत्ता हस्तांतरण {#asset-movement} + +एका स्वतंत्र ब्लॉकचेनला इथेरिअम मेननेटची साइडचेन बनण्यासाठी, तिला इथेरिअम मेननेटवरून आणि इथेरिअम मेननेटवर मालमत्ता हस्तांतरणाची सोय करण्याची क्षमता असणे आवश्यक आहे. इथेरिअमसोबतची ही इंटरऑपरेबिलिटी ब्लॉकचेन ब्रिज वापरून साध्य केली जाते. [ब्रिजेस](/bridges/) इथेरिअम मेननेट आणि साइडचेनवर तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्ट्सचा वापर करून त्यांच्यामधील फंडांच्या ब्रिजिंगवर नियंत्रण ठेवतात. + +ब्रिज वापरकर्त्यांना इथेरिअम आणि साइडचेन दरम्यान फंड हलविण्यात मदत करत असले तरी, मालमत्ता प्रत्यक्षरित्या दोन चेन्समध्ये हलवली जात नाही. त्याऐवजी, चेन्समध्ये मूल्य हस्तांतरित करण्यासाठी सामान्यतः मिंटिंग आणि बर्निंगचा समावेश असलेल्या यंत्रणा वापरल्या जातात. [ब्रिज कसे कार्य करतात](/developers/docs/bridges/#how-do-bridges-work) यावर अधिक माहिती. + +## साइडचेन्सचे फायदे आणि तोटे {#pros-and-cons-of-sidechains} + +| फायदे | बाधक | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| साइडचेन्सना आधार देणारे तंत्रज्ञान सुस्थापित आहे आणि विस्तृत संशोधन आणि डिझाइनमधील सुधारणांमुळे त्याला फायदा होतो. | साइडचेन्स स्केलेबिलिटीसाठी विकेंद्रीकरण आणि विश्वासार्हतेच्या काही प्रमाणात तडजोड करतात. | +| साइडचेन्स सामान्य गणनेस समर्थन देतात आणि EVM सुसंगतता प्रदान करतात (त्या इथेरिअम-नेटिव्ह dapps चालवू शकतात). | एक साइडचेन वेगळी कन्सेन्सस यंत्रणा वापरते आणि तिला इथेरिअमच्या सुरक्षा हमींचा फायदा होत नाही. | +| साइडचेन्स व्यवहारांवर कार्यक्षमतेने प्रक्रिया करण्यासाठी आणि वापरकर्त्यांसाठी व्यवहार शुल्क कमी करण्यासाठी भिन्न कन्सेन्सस मॉडेल वापरतात. | साइडचेन्सना उच्च विश्वासाची गृहीतके आवश्यक असतात (उदा., दुर्भावनापूर्ण साइडचेन व्हॅलिडेटर्सचा कोरम फसवणूक करू शकतो). | +| EVM-सुसंगत साइडचेन्स dapps ला त्यांची इकोसिस्टम विस्तृत करण्यास परवानगी देतात. | | + +### साइडचेन्स वापरा {#use-sidechains} + +अनेक प्रकल्प साइडचेन्सची अंमलबजावणी प्रदान करतात जे तुम्ही तुमच्या dapps मध्ये समाकलित करू शकता: + +- [पॉलिगॉन PoS](https://polygon.technology/solutions/polygon-pos) +- [स्केल](https://skale.network/) +- [ग्नोसिस चेन (पूर्वीचे xDai)](https://www.gnosischain.com/) +- [लूम नेटवर्क](https://loomx.io/) +- [मेटिस अँड्रोमेडा](https://www.metis.io/) + +## पुढील वाचन {#further-reading} + +- [साइडचेन्सद्वारे इथेरिअम dapps स्केलिंग](https://medium.com/loom-network/dappchains-scaling-ethereum-dapps-through-sidechains-f99e51fff447) _फेब्रु. 8, 2018 - जॉर्जियस कॉन्स्टँटिनोपोलोस_ + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/scaling/state-channels/index.md b/public/content/translations/mr/developers/docs/scaling/state-channels/index.md new file mode 100644 index 00000000000..64f6d8f95b7 --- /dev/null +++ b/public/content/translations/mr/developers/docs/scaling/state-channels/index.md @@ -0,0 +1,261 @@ +--- +title: "स्टेट चॅनल्स" +description: "इथेरियम समुदायाद्वारे सध्या वापरले जाणारे स्केलिंग सोल्यूशन म्हणून स्टेट चॅनेल्स आणि पेमेंट चॅनेलची ओळख." +lang: mr +sidebarDepth: 3 +--- + +स्टेट चॅनेल्स सहभागींना इथेरियम मेननेटसोबत कमीत कमी संवाद साधत ऑफचेन सुरक्षितपणे व्यवहार करण्याची परवानगी देतात. चॅनल पीअर्स केवळ चॅनल उघडण्यासाठी आणि बंद करण्यासाठी दोन ऑनचेन व्यवहार सादर करताना कितीही संख्येने ऑफचेन व्यवहार करू शकतात. यामुळे अत्यंत उच्च व्यवहार थ्रूपुट शक्य होतो आणि वापरकर्त्यांसाठी कमी खर्च येतो. + +## पूर्वतयारी {#prerequisites} + +तुम्ही आमचे [इथेरियम स्केलिंग](/developers/docs/scaling/) आणि [लेयर 2](/layer-2/) वरील पृष्ठे वाचलेली आणि समजून घेतलेली असावीत. + +## चॅनल्स म्हणजे काय? {#what-are-channels} + +इथेरियमसारख्या सार्वजनिक ब्लॉकचेन्सना त्यांच्या वितरित आर्किटेक्चरमुळे स्केलेबिलिटी आव्हानांना सामोरे जावे लागते: ऑनचेन व्यवहार सर्व नोड्सद्वारे कार्यान्वित केले पाहिजेत. नेटवर्क विकेंद्रित ठेवण्यासाठी नोड्सना सामान्य हार्डवेअर वापरून एका ब्लॉकमधील व्यवहारांचे प्रमाण हाताळता आले पाहिजे, ज्यामुळे व्यवहार थ्रूपुटवर मर्यादा येते. ब्लॉकचेन चॅनेल्स वापरकर्त्यांना अंतिम सेटलमेंटसाठी मुख्य चेनच्या सुरक्षिततेवर अवलंबून राहून ऑफचेन संवाद साधण्याची परवानगी देऊन ही समस्या सोडवतात. + +चॅनल्स हे सोपे पीअर-टू-पीअर प्रोटोकॉल आहेत जे दोन पक्षांना एकमेकांमध्ये अनेक व्यवहार करण्याची आणि नंतर केवळ अंतिम परिणाम ब्लॉकचेनवर पोस्ट करण्याची परवानगी देतात. चॅनल क्रिप्टोग्राफीचा वापर करून हे दर्शवते की ते तयार करत असलेला सारांश डेटा खरोखरच वैध मध्यवर्ती व्यवहारांच्या संचाचा परिणाम आहे. एक ["मल्टीसिग"](/developers/docs/smart-contracts/#multisig) स्मार्ट कॉन्ट्रॅक्ट हे सुनिश्चित करते की व्यवहार योग्य पक्षांद्वारे स्वाक्षरी केलेले आहेत. + +चॅनेल्ससह, स्टेट बदल इच्छुक पक्षांद्वारे कार्यान्वित आणि प्रमाणित केले जातात, ज्यामुळे इथेरियमच्या एक्झिक्युशन लेयरवरील संगणन कमी होते. यामुळे इथेरियमवरील गर्दी कमी होते आणि वापरकर्त्यांसाठी व्यवहार प्रक्रियेचा वेग वाढतो. + +प्रत्येक चॅनल इथेरियमवर चालणाऱ्या [मल्टीसिग स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/#multisig) द्वारे व्यवस्थापित केले जाते. चॅनल उघडण्यासाठी, सहभागी चॅनल कॉन्ट्रॅक्ट ऑनचेन तैनात करतात आणि त्यात निधी जमा करतात. दोन्ही पक्ष एकत्रितपणे चॅनलच्या स्टेटला सुरू करण्यासाठी स्टेट अपडेटवर स्वाक्षरी करतात, त्यानंतर ते जलद आणि मुक्तपणे ऑफचेन व्यवहार करू शकतात. + +चॅनल बंद करण्यासाठी, सहभागी चॅनलच्या शेवटच्या मान्य केलेल्या स्टेटला ऑनचेन सादर करतात. त्यानंतर, स्मार्ट कॉन्ट्रॅक्ट चॅनलच्या अंतिम स्टेटमधील प्रत्येक सहभागीच्या शिल्लकनुसार लॉक केलेले निधी वितरित करते. + +पीअर-टू-पीअर चॅनल्स विशेषतः अशा परिस्थितीत उपयुक्त आहेत जिथे काही पूर्वनिर्धारित सहभागी दृश्यमान ओव्हरहेडशिवाय उच्च वारंवारतेने व्यवहार करू इच्छितात. ब्लॉकचेन चॅनल्स दोन श्रेणींमध्ये येतात: **पेमेंट चॅनल्स** आणि **स्टेट चॅनल्स**. + +## पेमेंट चॅनल्स {#payment-channels} + +पेमेंट चॅनलला दोन वापरकर्त्यांद्वारे एकत्रितपणे राखले जाणारे "द्वि-मार्गी लेजर" म्हणून सर्वोत्तम वर्णन केले जाते. लेजरची सुरुवातीची शिल्लक ही चॅनल उघडण्याच्या टप्प्यात ऑनचेन कॉन्ट्रॅक्टमध्ये लॉक केलेल्या ठेवींची बेरीज असते. पेमेंट चॅनल हस्तांतरण तात्काळ आणि प्रत्यक्ष ब्लॉकचेनच्या सहभागाशिवाय केले जाऊ शकते, केवळ सुरुवातीच्या एक-वेळच्या ऑनचेन निर्मिती आणि चॅनलच्या अंतिम बंद वगळता. + +लेजरच्या शिल्लक (म्हणजे, पेमेंट चॅनलची स्टेट) मधील अपडेट्ससाठी चॅनलमधील सर्व पक्षांची मान्यता आवश्यक असते. सर्व चॅनल सहभागींनी स्वाक्षरी केलेला चॅनल अपडेट, इथेरियमवरील व्यवहाराप्रमाणेच अंतिम मानला जातो. + +पेमेंट चॅनेल्स हे सर्वात जुने स्केलिंग सोल्यूशन्सपैकी एक होते जे सोप्या वापरकर्ता परस्परसंवादाच्या (उदा., ETH हस्तांतरण, अणु स्वॅप, मायक्रोपेमेंट्स) महागड्या ऑनचेन क्रियाकलाप कमी करण्यासाठी डिझाइन केलेले होते. चॅनल सहभागी एकमेकांमध्ये अमर्याद प्रमाणात तात्काळ, शुल्क-मुक्त व्यवहार करू शकतात, जोपर्यंत त्यांच्या हस्तांतरणाची निव्वळ बेरीज जमा केलेल्या टोकन्सपेक्षा जास्त होत नाही. + +## स्टेट चॅनल्स {#state-channels} + +ऑफचेन पेमेंटला समर्थन देण्याव्यतिरिक्त, पेमेंट चॅनेल्स सामान्य स्टेट संक्रमण लॉजिक हाताळण्यासाठी उपयुक्त ठरलेले नाहीत. स्टेट चॅनेल्स ही समस्या सोडवण्यासाठी आणि सामान्य-उद्देशीय संगणनाच्या स्केलिंगसाठी चॅनेल उपयुक्त करण्यासाठी तयार केले गेले. + +स्टेट चॅनल्समध्ये अजूनही पेमेंट चॅनेल्ससोबत बरेच साम्य आहे. उदाहरणार्थ, वापरकर्ते क्रिप्टोग्राफिकली स्वाक्षरी केलेले संदेश (व्यवहार) देवाणघेवाण करून संवाद साधतात, ज्यावर इतर चॅनल सहभागींनी देखील स्वाक्षरी करणे आवश्यक आहे. जर प्रस्तावित स्टेट अपडेटवर सर्व सहभागींनी स्वाक्षरी केली नसेल, तर ते अवैध मानले जाते. + +तथापि, वापरकर्त्याच्या शिलकी ठेवण्याव्यतिरिक्त, चॅनल कॉन्ट्रॅक्टच्या स्टोरेजच्या सद्य स्थितीचा (म्हणजे, कॉन्ट्रॅक्ट व्हेरिएबल्सची मूल्ये) मागोवा ठेवते. + +यामुळे दोन वापरकर्त्यांमध्ये स्मार्ट कॉन्ट्रॅक्ट ऑफचेन कार्यान्वित करणे शक्य होते. या परिस्थितीत, स्मार्ट कॉन्ट्रॅक्टच्या अंतर्गत स्टेटमध्ये अपडेट करण्यासाठी फक्त चॅनल तयार करणाऱ्या पीअर्सची मान्यता आवश्यक असते. + +जरी यामुळे पूर्वी वर्णन केलेली स्केलेबिलिटीची समस्या सुटते, तरी त्याचे सुरक्षिततेवर परिणाम होतात. इथेरियमवर, स्टेट संक्रमणांची वैधता नेटवर्कच्या एकमत प्रोटोकॉलद्वारे लागू केली जाते. यामुळे स्मार्ट कॉन्ट्रॅक्टच्या स्टेटमध्ये अवैध अपडेट प्रस्तावित करणे किंवा स्मार्ट कॉन्ट्रॅक्ट एक्झिक्यूशनमध्ये बदल करणे अशक्य होते. + +स्टेट चॅनल्समध्ये समान सुरक्षा हमी नसते. काही प्रमाणात, स्टेट चॅनल हे मेननेटची एक लहान आवृत्ती आहे. नियमांची अंमलबजावणी करणाऱ्या सहभागींच्या मर्यादित संचासह, दुर्भावनापूर्ण वर्तनाची शक्यता (उदा. अवैध स्टेट अपडेट प्रस्तावित करणे) वाढते. [फसवणूक पुराव्यावर](/glossary/#fraud-proof) आधारित विवाद लवादाच्या प्रणालीतून स्टेट चॅनेल्स त्यांची सुरक्षा मिळवतात. + +## स्टेट चॅनेल्स कसे काम करतात {#how-state-channels-work} + +मूलतः, स्टेट चॅनलमधील क्रियाकलाप हे वापरकर्ते आणि ब्लॉकचेन प्रणाली यांचा समावेश असलेल्या परस्परसंवादांचे सत्र आहे. वापरकर्ते बहुतेक एकमेकांशी ऑफचेन संवाद साधतात आणि चॅनल उघडण्यासाठी, चॅनल बंद करण्यासाठी किंवा सहभागींमधील संभाव्य वाद मिटवण्यासाठीच अंतर्निहित ब्लॉकचेनशी संवाद साधतात. + +पुढील विभागात स्टेट चॅनलच्या मूलभूत कार्यप्रवाहाची रूपरेषा दिली आहे: + +### चॅनल उघडणे {#opening-the-channel} + +चॅनल उघडण्यासाठी सहभागींनी मेननेटवरील स्मार्ट कॉन्ट्रॅक्टमध्ये निधी जमा करणे आवश्यक आहे. ही ठेव व्हर्च्युअल टॅब म्हणूनही काम करते, त्यामुळे सहभागी कलाकार तात्काळ पेमेंट सेटल करण्याची गरज न बाळगता मुक्तपणे व्यवहार करू शकतात. जेव्हा चॅनल ऑनचेन अंतिम केले जाते तेव्हाच पक्ष एकमेकांना सेटल करतात आणि त्यांच्या टॅबमधून उरलेले पैसे काढतात. + +ही ठेव प्रत्येक सहभागीकडून प्रामाणिक वर्तनाची हमी देण्यासाठी बॉण्ड म्हणूनही काम करते. जर ठेवीदार विवाद निराकरण टप्प्यात दुर्भावनापूर्ण कृतींसाठी दोषी आढळले, तर करार त्यांची ठेव स्लॅश करतो. + +चॅनल पीअर्सना एका प्रारंभिक स्थितीवर स्वाक्षरी करणे आवश्यक आहे, ज्यावर ते सर्व सहमत आहेत. हे स्टेट चॅनलचे जेनेसिस म्हणून काम करते, त्यानंतर वापरकर्ते व्यवहार सुरू करू शकतात. + +### चॅनल वापरणे {#using-the-channel} + +चॅनलची स्थिती सुरू केल्यानंतर, पीअर्स व्यवहारांवर स्वाक्षरी करून आणि मंजुरीसाठी एकमेकांना पाठवून संवाद साधतात. सहभागी या व्यवहारांद्वारे स्टेट अपडेट सुरू करतात आणि इतरांकडून स्टेट अपडेटवर स्वाक्षरी करतात. प्रत्येक व्यवहारात खालील गोष्टींचा समावेश असतो: + +- एक **नॉन्स**, जो व्यवहारांसाठी एक अद्वितीय आयडी म्हणून काम करतो आणि रिप्ले हल्ले टाळतो. हे स्टेट अपडेट कोणत्या क्रमाने घडले हे देखील ओळखते (जे विवाद निराकरणासाठी महत्त्वाचे आहे) + +- चॅनलची जुनी स्थिती + +- चॅनलची नवीन स्थिती + +- स्टेट संक्रमणाला चालना देणारा व्यवहार (उदा., ॲलिस बॉबला ५ ETH पाठवते) + +चॅनलमधील स्टेट अपडेट्स ऑनचेन प्रसारित केले जात नाहीत जसे की सामान्यतः मेननेटवर वापरकर्ते संवाद साधताना घडते, जे स्टेट चॅनेल्सच्या ऑनचेन फूटप्रिंट कमी करण्याच्या उद्दिष्टाशी जुळते. जोपर्यंत सहभागी स्टेट अपडेटवर सहमत आहेत, तोपर्यंत ते इथेरियम व्यवहारासारखेच अंतिम आहेत. विवाद निर्माण झाल्यास सहभागींना फक्त मेननेटच्या सहमतीवर अवलंबून राहावे लागते. + +### चॅनल बंद करणे {#closing-the-channel} + +स्टेट चॅनल बंद करण्यासाठी चॅनलची अंतिम, मान्य केलेली स्थिती ऑनचेन स्मार्ट कॉन्ट्रॅक्टला सादर करणे आवश्यक आहे. स्टेट अपडेटमध्ये संदर्भित तपशिलांमध्ये प्रत्येक सहभागीच्या चालींची संख्या आणि मंजूर व्यवहारांची यादी समाविष्ट आहे. + +स्टेट अपडेट वैध आहे हे सत्यापित केल्यानंतर (म्हणजे, त्यावर सर्व पक्षांनी स्वाक्षरी केली आहे), स्मार्ट कॉन्ट्रॅक्ट चॅनलला अंतिम रूप देते आणि चॅनलच्या निकालानुसार लॉक केलेले निधी वितरित करते. ऑफचेन केलेले पेमेंट इथेरियमच्या स्टेटवर लागू केले जातात आणि प्रत्येक सहभागीला लॉक केलेल्या निधीचा त्यांचा उर्वरित भाग मिळतो. + +वर वर्णन केलेले परिदृश्य आनंदी बाबतीत काय घडते ते दर्शवते. कधीकधी, वापरकर्ते करार करू शकत नाहीत आणि चॅनल अंतिम करू शकत नाहीत (दुःखद बाब). परिस्थितीबद्दल खालीलपैकी कोणतीही गोष्ट खरी असू शकते: + +- सहभागी ऑफलाइन जातात आणि स्टेट संक्रमण प्रस्तावित करण्यात अयशस्वी होतात + +- सहभागी वैध स्टेट अपडेटवर सह-स्वाक्षरी करण्यास नकार देतात + +- सहभागी ऑनचेन कॉन्ट्रॅक्टला जुना स्टेट अपडेट प्रस्तावित करून चॅनल अंतिम करण्याचा प्रयत्न करतात + +- सहभागी इतरांना स्वाक्षरी करण्यासाठी अवैध स्टेट संक्रमण प्रस्तावित करतात + +जेव्हा चॅनलमधील सहभागी कलाकारांमध्ये एकमत मोडते, तेव्हा शेवटचा पर्याय म्हणजे चॅनलची अंतिम, वैध स्थिती लागू करण्यासाठी मेननेटच्या एकमतावर अवलंबून राहणे. या प्रकरणात, स्टेट चॅनल बंद करण्यासाठी ऑनचेन वाद मिटवणे आवश्यक आहे. + +### वाद मिटवणे {#settling-disputes} + +सामान्यतः, चॅनलमधील पक्ष चॅनल बंद करण्यावर आधीच सहमत होतात आणि शेवटच्या स्टेट संक्रमणावर सह-स्वाक्षरी करतात, जे ते स्मार्ट कॉन्ट्रॅक्टला सादर करतात. एकदा अपडेट ऑनचेन मंजूर झाल्यावर, ऑफचेन स्मार्ट कॉन्ट्रॅक्टचे एक्झिक्युशन संपते आणि सहभागी त्यांच्या पैशांसह चॅनलमधून बाहेर पडतात. + +तथापि, एक पक्ष स्मार्ट कॉन्ट्रॅक्टचे एक्झिक्युशन संपवण्यासाठी आणि चॅनल अंतिम करण्यासाठी ऑनचेन विनंती सादर करू शकतो—त्यांच्या प्रतिपक्षाच्या मंजुरीची वाट न पाहता. जर पूर्वी वर्णन केलेल्या एकमत-भंग करणाऱ्या परिस्थितींपैकी कोणतीही घडली, तर दोन्हीपैकी कोणताही पक्ष चॅनल बंद करण्यासाठी आणि निधी वितरित करण्यासाठी ऑनचेन कॉन्ट्रॅक्टला ट्रिगर करू शकतो. हे **विश्वासरहितता** प्रदान करते, हे सुनिश्चित करते की प्रामाणिक पक्ष कोणत्याही वेळी त्यांची ठेव काढू शकतात, दुसऱ्या पक्षाच्या कृतींची पर्वा न करता. + +चॅनलमधून बाहेर पडण्याची प्रक्रिया करण्यासाठी, वापरकर्त्याला अनुप्रयोगाचे शेवटचे वैध स्टेट अपडेट ऑनचेन कॉन्ट्रॅक्टला सादर करणे आवश्यक आहे. जर हे तपासले गेले (म्हणजे, त्यावर सर्व पक्षांची स्वाक्षरी आहे), तर निधी त्यांच्या बाजूने पुनर्वितरित केला जातो. + +तथापि, एकल-वापरकर्ता एक्झिट विनंत्या कार्यान्वित करण्यास विलंब होतो. जर चॅनल संपवण्याची विनंती एकमताने मंजूर झाली, तर ऑनचेन एक्झिट व्यवहार ताबडतोब कार्यान्वित केला जातो. + +फसवणूक करणाऱ्या कृतींच्या शक्यतेमुळे एकल-वापरकर्ता एक्झिटमध्ये विलंब होतो. उदाहरणार्थ, एक चॅनल सहभागी जुना स्टेट अपडेट ऑनचेन सादर करून इथेरियमवर चॅनल अंतिम करण्याचा प्रयत्न करू शकतो. + +प्रतिउपाय म्हणून, स्टेट चॅनेल्स प्रामाणिक वापरकर्त्यांना चॅनलची नवीनतम, वैध स्थिती ऑनचेन सादर करून अवैध स्टेट अपडेटला आव्हान देण्याची परवानगी देतात. स्टेट चॅनेल्स अशा प्रकारे डिझाइन केलेले आहेत की नवीन, मान्य केलेले स्टेट अपडेट्स जुन्या स्टेट अपडेट्सवर मात करतात. + +एकदा एक पीअर ऑनचेन विवाद-निराकरण प्रणाली सुरू करतो, तेव्हा दुसऱ्या पक्षाला एका वेळेच्या मर्यादेत (ज्याला चॅलेंज विंडो म्हणतात) प्रतिसाद देणे आवश्यक असते. हे वापरकर्त्यांना एक्झिट व्यवहाराला आव्हान देण्याची परवानगी देते, विशेषतः जर दुसरा पक्ष जुना अपडेट लागू करत असेल. + +परिस्थिती काहीही असो, चॅनल वापरकर्त्यांना नेहमीच मजबूत अंतिमतेची हमी असते: जर त्यांच्या ताब्यातील स्टेट संक्रमण सर्व सदस्यांनी स्वाक्षरी केलेले असेल आणि ते सर्वात अलीकडील अपडेट असेल, तर ते नियमित ऑनचेन व्यवहाराच्या समान अंतिमतेचे असते. त्यांना अजूनही दुसऱ्या पक्षाला ऑनचेन आव्हान द्यावे लागते, परंतु शक्य असलेला एकमेव परिणाम म्हणजे शेवटची वैध स्थिती अंतिम करणे, जी त्यांच्याकडे आहे. + +### स्टेट चॅनेल्स इथेरियमशी कसे संवाद साधतात? {#how-do-state-channels-interact-with-ethereum} + +जरी ते ऑफचेन प्रोटोकॉल म्हणून अस्तित्वात असले तरी, स्टेट चॅनेल्समध्ये एक ऑनचेन घटक असतो: चॅनल उघडताना इथेरियमवर तैनात केलेला स्मार्ट कॉन्ट्रॅक्ट. हा करार चॅनलमध्ये जमा केलेल्या मालमत्तेवर नियंत्रण ठेवतो, स्टेट अपडेट सत्यापित करतो आणि सहभागींमधील वाद मिटवतो. + +[लेयर २](/layer-2/) स्केलिंग सोल्यूशन्सच्या विपरीत, स्टेट चॅनल्स मेननेटवर व्यवहार डेटा किंवा स्टेट कमिटमेंट प्रकाशित करत नाहीत. तथापि, ते [साईडचेन्स](/developers/docs/scaling/sidechains/) पेक्षा मेननेटशी अधिक जोडलेले आहेत, ज्यामुळे ते काहीसे सुरक्षित बनतात. + +स्टेट चॅनेल्स खालील गोष्टींसाठी मुख्य इथेरियम प्रोटोकॉलवर अवलंबून असतात: + +#### १. लाईव्हनेस {#liveness} + +चॅनल उघडताना तैनात केलेला ऑनचेन करार चॅनलच्या कार्यक्षमतेसाठी जबाबदार असतो. जर करार इथेरियमवर चालू असेल, तर चॅनल वापरासाठी नेहमी उपलब्ध असतो. याउलट, मेननेट कार्यरत असले तरीही साईडचेन नेहमीच अयशस्वी होऊ शकते, ज्यामुळे वापरकर्त्याचा निधी धोक्यात येतो. + +#### २. सुरक्षा {#security} + +काही प्रमाणात, स्टेट चॅनेल्स सुरक्षा प्रदान करण्यासाठी आणि वापरकर्त्यांना दुर्भावनापूर्ण पीअर्सपासून संरक्षण देण्यासाठी इथेरियमवर अवलंबून असतात. नंतरच्या विभागांमध्ये चर्चा केल्याप्रमाणे, चॅनेल्स एक फ्रॉड प्रूफ यंत्रणा वापरतात जी वापरकर्त्यांना अवैध किंवा जुन्या अपडेटसह चॅनल अंतिम करण्याच्या प्रयत्नांना आव्हान देण्यास परवानगी देते. + +या प्रकरणात, प्रामाणिक पक्ष सत्यापनासाठी ऑनचेन कराराला फ्रॉड प्रूफ म्हणून चॅनलची नवीनतम वैध स्थिती प्रदान करतो. फ्रॉड प्रूफ परस्पर अविश्वासी पक्षांना प्रक्रियेत त्यांचा निधी धोक्यात न घालवता ऑफचेन व्यवहार करण्यास सक्षम करतात. + +#### ३. अंतिमता {#finality} + +चॅनल वापरकर्त्यांद्वारे एकत्रितपणे स्वाक्षरी केलेले स्टेट अपडेट्स ऑनचेन व्यवहारांइतकेच चांगले मानले जातात. तरीही, जेव्हा इथेरियमवर चॅनल बंद केले जाते तेव्हाच सर्व इन-चॅनल क्रियाकलाप खरी अंतिमता प्राप्त करतात. + +आशावादी बाबतीत, दोन्ही पक्ष सहकार्य करू शकतात आणि अंतिम स्टेट अपडेटवर स्वाक्षरी करू शकतात आणि चॅनल बंद करण्यासाठी ऑनचेन सादर करू शकतात, त्यानंतर चॅनलच्या अंतिम स्थितीनुसार निधी वितरित केला जातो. निराशावादी बाबतीत, जिथे कोणी ऑनचेन चुकीचा स्टेट अपडेट पोस्ट करून फसवणूक करण्याचा प्रयत्न करतो, तिथे त्यांचा व्यवहार चॅलेंज विंडो संपेपर्यंत अंतिम होत नाही. + +## व्हर्च्युअल स्टेट चॅनेल्स {#virtual-state-channels} + +स्टेट चॅनलची सोपी अंमलबजावणी म्हणजे जेव्हा दोन वापरकर्ते ऑफचेन अनुप्रयोग कार्यान्वित करू इच्छितात तेव्हा एक नवीन करार तैनात करणे. हे केवळ अव्यवहार्य नाही, तर ते स्टेट चॅनेल्सच्या खर्च-प्रभावीतेवर देखील नकारात्मक परिणाम करते (ऑनचेन व्यवहार खर्च त्वरीत वाढू शकतात). + +ही समस्या सोडवण्यासाठी, "व्हर्च्युअल चॅनेल्स" तयार केले गेले. नियमित चॅनेल्सच्या विपरीत ज्यांना उघडण्यासाठी आणि समाप्त करण्यासाठी ऑनचेन व्यवहारांची आवश्यकता असते, व्हर्च्युअल चॅनल मुख्य चेनशी संवाद साधल्याशिवाय उघडता, कार्यान्वित करता आणि अंतिम करता येतो. या पद्धतीचा वापर करून ऑफचेन वाद मिटवणे देखील शक्य आहे. + +ही प्रणाली तथाकथित "लेजर चॅनेल्स" च्या अस्तित्वावर अवलंबून आहे, ज्यांना ऑनचेन निधी दिला गेला आहे. दोन पक्षांमधील व्हर्च्युअल चॅनेल्स विद्यमान लेजर चॅनलच्या वर तयार केले जाऊ शकतात, ज्यामध्ये लेजर चॅनलचे मालक मध्यस्थ म्हणून काम करतात. + +प्रत्येक व्हर्च्युअल चॅनलमधील वापरकर्ते नवीन करार उदाहरणाद्वारे संवाद साधतात, ज्यामध्ये लेजर चॅनल अनेक करार उदाहरणांना समर्थन देण्यास सक्षम असतो. लेजर चॅनलच्या स्थितीत एकापेक्षा जास्त करार स्टोरेज स्थिती देखील असते, ज्यामुळे वेगवेगळ्या वापरकर्त्यांमध्ये ऑफचेन अनुप्रयोगांची समांतर अंमलबजावणी शक्य होते. + +नियमित चॅनेल्सप्रमाणेच, वापरकर्ते स्टेट मशीनला पुढे नेण्यासाठी स्टेट अपडेट्सची देवाणघेवाण करतात. विवाद निर्माण झाल्याशिवाय, मध्यस्थाशी केवळ चॅनल उघडताना किंवा समाप्त करताना संपर्क साधावा लागतो. + +### व्हर्च्युअल पेमेंट चॅनेल्स {#virtual-payment-channels} + +व्हर्च्युअल पेमेंट चॅनेल्स व्हर्च्युअल स्टेट चॅनेल्सच्याच कल्पनेवर काम करतात: एकाच नेटवर्कशी जोडलेले सहभागी ऑनचेन नवीन चॅनल उघडण्याची गरज न भासता संदेश पाठवू शकतात. व्हर्च्युअल पेमेंट चॅनेल्समध्ये, मूल्य हस्तांतरण एक किंवा अधिक मध्यस्थांद्वारे मार्गस्थ केले जातात, या हमीसह की केवळ इच्छित प्राप्तकर्त्याला हस्तांतरित निधी मिळू शकतो. + +## स्टेट चॅनेल्सचे अनुप्रयोग {#applications-of-state-channels} + +### पेमेंट {#payments} + +सुरुवातीचे ब्लॉकचेन चॅनेल्स सोपे प्रोटोकॉल होते जे दोन सहभागींना मेननेटवर उच्च व्यवहार शुल्क न भरता ऑफचेन जलद, कमी-शुल्क हस्तांतरण करण्यास परवानगी देत होते. आजही, पेमेंट चॅनेल्स इथर आणि टोकन्सच्या देवाणघेवाणीसाठी आणि ठेवींसाठी डिझाइन केलेल्या अनुप्रयोगांसाठी उपयुक्त आहेत. + +चॅनल-आधारित पेमेंटचे खालील फायदे आहेत: + +1. **थ्रूपुट**: प्रति चॅनल ऑफचेन व्यवहारांची संख्या इथेरियमच्या थ्रूपुटशी संबंधित नाही, जो विविध घटकांवर, विशेषतः ब्लॉक आकार आणि ब्लॉक वेळेवर अवलंबून असतो. ऑफचेन व्यवहार कार्यान्वित करून, ब्लॉकचेन चॅनेल्स उच्च थ्रूपुट प्राप्त करू शकतात. + +2. **गोपनीयता**: चॅनेल्स ऑफचेन अस्तित्वात असल्यामुळे, सहभागींमधील परस्परसंवादाचे तपशील इथेरियमच्या सार्वजनिक ब्लॉकचेनवर नोंदवले जात नाहीत. चॅनल वापरकर्त्यांना फक्त निधी देताना आणि चॅनल बंद करताना किंवा वाद मिटवतानाच ऑनचेन संवाद साधावा लागतो. म्हणून, अधिक खाजगी व्यवहार करू इच्छिणाऱ्या व्यक्तींसाठी चॅनेल्स उपयुक्त आहेत. + +3. **विलंबता**: चॅनल सहभागींमध्ये होणारे ऑफचेन व्यवहार, दोन्ही पक्षांनी सहकार्य केल्यास, विलंब कमी करून त्वरित सेटल केले जाऊ शकतात. याउलट, मेननेटवर व्यवहार पाठवण्यासाठी नोड्सनी व्यवहार प्रक्रिया करणे, व्यवहारासह नवीन ब्लॉक तयार करणे आणि सहमती गाठण्याची वाट पाहावी लागते. वापरकर्त्यांना व्यवहार अंतिम मानण्यापूर्वी अधिक ब्लॉक पुष्टीकरणासाठी देखील प्रतीक्षा करावी लागू शकते. + +4. **खर्च**: स्टेट चॅनेल्स विशेषतः अशा परिस्थितीत उपयुक्त आहेत जिथे सहभागींचा एक गट दीर्घ कालावधीत अनेक स्टेट अपडेट्सची देवाणघेवाण करेल. येणारा एकमेव खर्च म्हणजे स्टेट चॅनल स्मार्ट कॉन्ट्रॅक्ट उघडणे आणि बंद करणे; चॅनल उघडणे आणि बंद करणे यामधील प्रत्येक स्टेट बदल शेवटच्यापेक्षा स्वस्त असेल कारण सेटलमेंट खर्च त्यानुसार वितरित केला जातो. + +[रोलअप्स](/developers/docs/scaling/#rollups) सारख्या लेयर २ सोल्यूशन्सवर स्टेट चॅनेल्सची अंमलबजावणी केल्याने ते पेमेंटसाठी आणखी आकर्षक बनू शकतात. चॅनेल्स स्वस्त पेमेंट ऑफर करत असले तरी, उघडण्याच्या टप्प्यात मेननेटवर ऑनचेन करार सेट करण्याचा खर्च महाग होऊ शकतो—विशेषतः जेव्हा गॅस शुल्क वाढते. इथेरियम-आधारित रोलअप्स [कमी व्यवहार शुल्क](https://l2fees.info/) देतात आणि सेटअप शुल्क कमी करून चॅनल सहभागींसाठी ओव्हरहेड कमी करू शकतात. + +### मायक्रोट्रान्झॅक्शन्स {#microtransactions} + +मायक्रोट्रान्झॅक्शन्स हे कमी-मूल्याचे पेमेंट आहेत (उदा., एका डॉलरच्या अंशापेक्षा कमी) जे व्यवसाय नुकसान न होता प्रक्रिया करू शकत नाहीत. या संस्थांना पेमेंट सेवा प्रदात्यांना पैसे द्यावे लागतात, जे ते करू शकत नाहीत जर ग्राहक पेमेंटवरील मार्जिन नफा मिळवण्यासाठी खूप कमी असेल. + +पेमेंट चॅनेल्स मायक्रोट्रान्झॅक्शन्सशी संबंधित ओव्हरहेड कमी करून ही समस्या सोडवतात. उदाहरणार्थ, एक इंटरनेट सेवा प्रदाता (ISP) ग्राहकासोबत पेमेंट चॅनल उघडू शकतो, ज्यामुळे त्यांना प्रत्येक वेळी सेवा वापरताना लहान पेमेंट प्रवाहित करण्याची परवानगी मिळते. + +चॅनल उघडण्याच्या आणि बंद करण्याच्या खर्चाव्यतिरिक्त, सहभागींना मायक्रोट्रान्झॅक्शन्सवर अधिक खर्च येत नाही (कोणतेही गॅस शुल्क नाही). ही एक जिंक-जिंक परिस्थिती आहे कारण ग्राहकांना सेवांसाठी किती पैसे द्यायचे यात अधिक लवचिकता असते आणि व्यवसाय फायदेशीर मायक्रोट्रान्झॅक्शन्स गमावत नाहीत. + +### विकेंद्रित अनुप्रयोग {#decentralized-applications} + +पेमेंट चॅनेल्सप्रमाणे, स्टेट चॅनेल्स स्टेट मशीनच्या अंतिम स्थितीनुसार सशर्त पेमेंट करू शकतात. स्टेट चॅनेल्स अनियंत्रित स्टेट संक्रमण लॉजिकला देखील समर्थन देऊ शकतात, ज्यामुळे ते सामान्य ॲप्स ऑफचेन कार्यान्वित करण्यासाठी उपयुक्त ठरतात. + +स्टेट चॅनेल्स सहसा साध्या वळण-आधारित अनुप्रयोगांपुरते मर्यादित असतात, कारण यामुळे ऑनचेन करारासाठी वचनबद्ध निधी व्यवस्थापित करणे सोपे होते. तसेच, ऑफचेन अनुप्रयोगाची स्थिती ठराविक अंतराने अपडेट करणाऱ्या पक्षांची मर्यादित संख्या असल्यामुळे, अप्रामाणिक वर्तनाला शिक्षा देणे तुलनेने सोपे आहे. + +स्टेट चॅनल अनुप्रयोगाची कार्यक्षमता देखील त्याच्या डिझाइनवर अवलंबून असते. उदाहरणार्थ, एक डेव्हलपर ॲप चॅनल करार एकदाच ऑनचेन तैनात करू शकतो आणि इतर खेळाडूंना ऑनचेन न जाता ॲप पुन्हा वापरण्याची परवानगी देऊ शकतो. या प्रकरणात, प्रारंभिक ॲप चॅनल एकाधिक व्हर्च्युअल चॅनेल्सना समर्थन देणारे लेजर चॅनल म्हणून काम करते, प्रत्येक ॲपच्या स्मार्ट कराराची नवीन उदाहरणे ऑफचेन चालवते. + +स्टेट चॅनल अनुप्रयोगांसाठी एक संभाव्य उपयोग-प्रकरण सोपे दोन-खेळाडूंचे खेळ आहेत, जिथे खेळाच्या निकालानुसार निधी वितरित केला जातो. येथे फायदा असा आहे की खेळाडूंना एकमेकांवर विश्वास ठेवण्याची गरज नाही (विश्वासरहितता) आणि ऑनचेन करार, खेळाडू नव्हे, निधीचे वाटप आणि विवादांचे निराकरण नियंत्रित करतो (विकेंद्रीकरण). + +स्टेट चॅनल ॲप्ससाठी इतर संभाव्य उपयोग-प्रकरणांमध्ये ENS नाव मालकी, NFT लेजर्स आणि बरेच काही समाविष्ट आहे. + +### ॲटोमिक ट्रान्सफर्स {#atomic-transfers} + +सुरुवातीचे पेमेंट चॅनेल्स दोन पक्षांमधील हस्तांतरणापुरते मर्यादित होते, ज्यामुळे त्यांची उपयोगिता मर्यादित होती. तथापि, व्हर्च्युअल चॅनेल्सच्या परिचयाने व्यक्तींना मध्यस्थांद्वारे हस्तांतरण मार्गस्थ करण्याची परवानगी दिली (म्हणजे, अनेक p2p चॅनेल्स) ऑनचेन नवीन चॅनल उघडण्याची गरज न भासता. + +सामान्यतः "मल्टी-हॉप ट्रान्सफर्स" म्हणून वर्णन केलेले, राउटेड पेमेंट अणु असतात (म्हणजे, व्यवहाराचे सर्व भाग यशस्वी होतात किंवा ते पूर्णपणे अयशस्वी होते). ॲटोमिक ट्रान्सफर्स [हॅश्ड टाइमलॉक कॉन्ट्रॅक्ट्स (HTLCs)](https://en.bitcoin.it/wiki/Hash_Time_Locked_Contracts) वापरतात हे सुनिश्चित करण्यासाठी की पेमेंट केवळ काही अटी पूर्ण झाल्यासच रिलीज केले जाते, ज्यामुळे प्रतिपक्षाचा धोका कमी होतो. + +## स्टेट चॅनेल्स वापरण्याचे तोटे {#drawbacks-of-state-channels} + +### लाईव्हनेस गृहितके {#liveness-assumptions} + +कार्यक्षमता सुनिश्चित करण्यासाठी, स्टेट चॅनेल्स चॅनल सहभागींच्या विवादांना प्रतिसाद देण्याच्या क्षमतेवर वेळेची मर्यादा घालतात. हा नियम गृहीत धरतो की पीअर्स चॅनल क्रियाकलापांचे निरीक्षण करण्यासाठी आणि आवश्यक असेल तेव्हा आव्हानांना आव्हान देण्यासाठी नेहमीच ऑनलाइन असतील. + +प्रत्यक्षात, वापरकर्ते त्यांच्या नियंत्रणाबाहेरील कारणांमुळे ऑफलाइन जाऊ शकतात (उदा., खराब इंटरनेट कनेक्शन, यांत्रिक बिघाड, इ.). जर एखादा प्रामाणिक वापरकर्ता ऑफलाइन गेला, तर एक दुर्भावनापूर्ण पीअर निर्णय देणाऱ्या कराराला जुन्या मध्यवर्ती स्थिती सादर करून आणि वचनबद्ध निधी चोरून परिस्थितीचा फायदा घेऊ शकतो. + +काही चॅनेल्स "वॉचटावर्स" वापरतात—इतरांच्या वतीने ऑनचेन विवाद घटनांवर लक्ष ठेवण्यासाठी आणि संबंधित पक्षांना सतर्क करण्यासारख्या आवश्यक कृती करण्यासाठी जबाबदार संस्था. तथापि, यामुळे स्टेट चॅनल वापरण्याच्या खर्चात भर पडू शकते. + +### डेटा अनुपलब्धता {#data-unavailability} + +पूर्वी स्पष्ट केल्याप्रमाणे, अवैध विवादाला आव्हान देण्यासाठी स्टेट चॅनलची नवीनतम, वैध स्थिती सादर करणे आवश्यक आहे. हा दुसरा नियम एका गृहितकावर आधारित आहे—की वापरकर्त्यांना चॅनलच्या नवीनतम स्थितीत प्रवेश आहे. + +जरी चॅनल वापरकर्त्यांनी ऑफचेन अनुप्रयोग स्थितीच्या प्रती संग्रहित करणे अपेक्षित असले तरी, हा डेटा त्रुटी किंवा यांत्रिक बिघाडामुळे गमावला जाऊ शकतो. जर वापरकर्त्याकडे डेटाचा बॅकअप नसेल, तर ते फक्त आशा करू शकतात की दुसरा पक्ष त्यांच्या ताब्यातील जुन्या स्टेट संक्रमणांचा वापर करून अवैध एक्झिट विनंती अंतिम करणार नाही. + +इथेरियम वापरकर्त्यांना या समस्येशी सामना करावा लागत नाही कारण नेटवर्क डेटा उपलब्धतेवर नियम लागू करते. व्यवहार डेटा सर्व नोड्सद्वारे संग्रहित आणि प्रसारित केला जातो आणि आवश्यक असल्यास आणि आवश्यक असेल तेव्हा वापरकर्त्यांना डाउनलोड करण्यासाठी उपलब्ध असतो. + +### तरलता समस्या {#liquidity-issues} + +ब्लॉकचेन चॅनल स्थापित करण्यासाठी, सहभागींना चॅनलच्या जीवनचक्रासाठी ऑनचेन स्मार्ट कॉन्ट्रॅक्टमध्ये निधी लॉक करणे आवश्यक आहे. हे चॅनल वापरकर्त्यांची तरलता कमी करते आणि मेननेटवर निधी लॉक ठेवू शकणाऱ्यांपुरतेच चॅनेल्स मर्यादित ठेवते. + +तथापि, लेजर चॅनेल्स—ऑफचेन सेवा प्रदाता (OSP) द्वारे संचालित—वापरकर्त्यांसाठी तरलता समस्या कमी करू शकतात. लेजर चॅनलशी जोडलेले दोन पीअर्स एक व्हर्च्युअल चॅनल तयार करू शकतात, जे ते कधीही, पूर्णपणे ऑफचेन उघडू आणि अंतिम करू शकतात. + +ऑफचेन सेवा प्रदाते अनेक पीअर्ससोबत चॅनेल देखील उघडू शकतात, ज्यामुळे ते पेमेंट मार्गस्थ करण्यासाठी उपयुक्त ठरतात. अर्थात, वापरकर्त्यांनी त्यांच्या सेवांसाठी OSPs ला शुल्क भरावे लागेल, जे काहींसाठी अवांछनीय असू शकते. + +### ग्रिफिंग हल्ले {#griefing-attacks} + +ग्रिफिंग हल्ले हे फसवणूक पुरावा-आधारित प्रणालींचे एक सामान्य वैशिष्ट्य आहे. ग्रिफिंग हल्ल्यामुळे हल्लेखोराला थेट फायदा होत नाही परंतु पीडितेला दु:ख (म्हणजे, हानी) होते, म्हणूनच हे नाव. + +फसवणूक सिद्ध करणे हे ग्रिफिंग हल्ल्यांना बळी पडू शकते कारण प्रामाणिक पक्षाला प्रत्येक विवादाला प्रतिसाद द्यावा लागतो, अगदी अवैध विवादांनाही, अन्यथा त्यांचा निधी गमावण्याचा धोका असतो. एक दुर्भावनापूर्ण सहभागी वारंवार जुने स्टेट संक्रमण ऑनचेन पोस्ट करण्याचा निर्णय घेऊ शकतो, ज्यामुळे प्रामाणिक पक्षाला वैध स्थितीसह प्रतिसाद देण्यास भाग पाडले जाते. त्या ऑनचेन व्यवहारांचा खर्च त्वरीत वाढू शकतो, ज्यामुळे प्रामाणिक पक्षांचे प्रक्रियेत नुकसान होते. + +### पूर्वनिर्धारित सहभागी संच {#predefined-participant-sets} + +डिझाइननुसार, स्टेट चॅनल बनवणाऱ्या सहभागींची संख्या त्याच्या संपूर्ण जीवनकाळात स्थिर राहते. हे कारण सहभागी संच अद्यतनित केल्याने चॅनलचे कार्य गुंतागुंतीचे होईल, विशेषतः चॅनलला निधी देताना किंवा वाद मिटवताना. सहभागी जोडण्यासाठी किंवा काढण्यासाठी अतिरिक्त ऑनचेन क्रियाकलापांची देखील आवश्यकता असेल, ज्यामुळे वापरकर्त्यांसाठी ओव्हरहेड वाढतो. + +जरी यामुळे स्टेट चॅनेल्सबद्दल तर्क करणे सोपे होते, तरी ते अनुप्रयोग डेव्हलपर्ससाठी चॅनल डिझाइनची उपयुक्तता मर्यादित करते. यामुळे अंशतः स्पष्ट होते की रोलअप्स सारख्या इतर स्केलिंग सोल्यूशन्सच्या बाजूने स्टेट चॅनेल्स का सोडले गेले आहेत. + +### समांतर व्यवहार प्रक्रिया {#parallel-transaction-processing} + +स्टेट चॅनलमधील सहभागी वळणावळणाने स्टेट अपडेट्स पाठवतात, म्हणूनच ते "वळण-आधारित अनुप्रयोगांसाठी" (उदा., दोन-खेळाडूंचा बुद्धिबळ खेळ) सर्वोत्तम काम करतात. हे एकाच वेळी स्टेट अपडेट्स हाताळण्याची गरज काढून टाकते आणि जुन्या अपडेट पोस्टर्सना शिक्षा देण्यासाठी ऑनचेन कराराने करावे लागणारे काम कमी करते. तथापि, या डिझाइनचा एक दुष्परिणाम असा आहे की व्यवहार एकमेकांवर अवलंबून असतात, ज्यामुळे विलंबता वाढते आणि एकूण वापरकर्ता अनुभव कमी होतो. + +काही स्टेट चॅनेल्स "फुल-डुप्लेक्स" डिझाइन वापरून ही समस्या सोडवतात जे ऑफचेन स्थितीला दोन एकदिशीय "सिंप्लेक्स" स्थितींमध्ये विभाजित करते, ज्यामुळे एकाचवेळी स्टेट अपडेट्स शक्य होतात. अशा डिझाइनमुळे ऑफचेन थ्रूपुट सुधारतो आणि व्यवहार विलंब कमी होतो. + +## स्टेट चॅनेल्स वापरा {#use-state-channels} + +अनेक प्रकल्प स्टेट चॅनेल्सची अंमलबजावणी करतात जे तुम्ही तुमच्या dapps मध्ये समाकलित करू शकता: + +- [Connext](https://connext.network/) +- [Kchannels](https://www.kchannels.io/) +- [Perun](https://perun.network/) +- [Raiden](https://raiden.network/) +- [Statechannels.org](https://statechannels.org/) + +## पुढील वाचन {#further-reading} + +**स्टेट चॅनेल्स** + +- [इथेरियमच्या लेयर २ स्केलिंग सोल्यूशन्सचा अर्थ लावणे: स्टेट चॅनेल्स, प्लाझ्मा आणि ट्रूबीट](https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4) _– जोश स्टार्क, १२ फेब्रुवारी २०१८_ +- [स्टेट चॅनेल्स - एक स्पष्टीकरण](https://www.jeffcoleman.ca/state-channels/) _६ नोव्हेंबर २०१५ - जेफ कोलमन_ +- [स्टेट चॅनेल्सची मूलभूत माहिती](https://education.district0x.io/general-topics/understanding-ethereum/basics-state-channels/) _District0x_ +- [ब्लॉकचेन स्टेट चॅनेल्स: एक अद्ययावत स्थिती](https://ieeexplore.ieee.org/document/9627997) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/scaling/validium/index.md b/public/content/translations/mr/developers/docs/scaling/validium/index.md new file mode 100644 index 00000000000..c015876b472 --- /dev/null +++ b/public/content/translations/mr/developers/docs/scaling/validium/index.md @@ -0,0 +1,166 @@ +--- +title: Validium +description: "सध्या इथेरियम समुदायाद्वारे वापरल्या जाणाऱ्या स्केलिंग सोल्यूशन म्हणून Validium चा परिचय." +lang: mr +sidebarDepth: 3 +--- + +Validium हे एक [स्केलिंग सोल्यूशन](/developers/docs/scaling/) आहे जे [ZK-रोलअप्स](/developers/docs/scaling/zk-rollups/) प्रमाणे व्हॅलिडिटी प्रूफ्स वापरून व्यवहारांची अखंडता लागू करते, परंतु इथेरियम मेननेटवर व्यवहारांचा डेटा संग्रहित करत नाही. ऑफचेन डेटा उपलब्धता काही तडजोडी सादर करत असली तरी, त्यामुळे स्केलेबिलिटीमध्ये मोठ्या प्रमाणात सुधारणा होऊ शकते (व्हेलिडियम्स प्रति सेकंद [~9,000 व्यवहार किंवा अधिक](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) प्रक्रिया करू शकतात). + +## पूर्वतयारी {#prerequisites} + +तुम्ही आमचे [इथेरियम स्केलिंग](/developers/docs/scaling/) आणि [लेअर 2](/layer-2) वरील पेज वाचून समजून घेतलेले असावे. + +## व्हेलिडियम म्हणजे काय? {#what-is-validium} + +व्हेलिडियम्स हे स्केलिंग सोल्यूशन्स आहेत जे इथेरियम मेननेटच्या बाहेर व्यवहार प्रक्रिया करून थ्रुपुट सुधारण्यासाठी डिझाइन केलेले ऑफचेन डेटा उपलब्धता आणि गणनेचा वापर करतात. झिरो-नॉलेज रोलअप्स (ZK-रोलअप्स) प्रमाणे, व्हेलिडियम्स इथेरियमवर ऑफचेन व्यवहारांची पडताळणी करण्यासाठी [झिरो-नॉलेज प्रूफ्स](/glossary/#zk-proof) प्रकाशित करतात. हे अवैध स्टेट ट्रान्झिशन्सना प्रतिबंधित करते आणि व्हेलिडियम चेनच्या सुरक्षा हमी वाढवते. + +हे "व्हॅलिडिटी प्रूफ्स" ZK-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) किंवा ZK-STARKs (Zero-Knowledge Scalable Transparent ARgument of Knowledge) च्या स्वरूपात येऊ शकतात. [झिरो-नॉलेज प्रूफ्स](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) वर अधिक माहिती. + +व्हेलिडियम वापरकर्त्यांचे फंड्स इथेरियमवरील एका स्मार्ट कॉन्ट्रॅक्टद्वारे नियंत्रित केले जातात. व्हेलिडियम्स ZK-रोलअप्स प्रमाणेच, जवळजवळ-तत्काळ विथड्रॉव्हल्स ऑफर करतात; एकदा मेननेटवर विथड्रॉव्हल विनंतीसाठी व्हॅलिडिटी प्रूफ पडताळला गेला की, वापरकर्ते [मर्कल प्रूफ्स](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) प्रदान करून फंड्स काढू शकतात. मर्कल प्रूफ वापरकर्त्याच्या विथड्रॉव्हल व्यवहाराचा एका सत्यापित व्यवहार बॅचमध्ये समावेश प्रमाणित करतो, ज्यामुळे ऑनचेन कॉन्ट्रॅक्टला विथड्रॉव्हलवर प्रक्रिया करण्याची परवानगी मिळते. + +तथापि, व्हेलिडियम वापरकर्त्यांचे फंड्स गोठवले जाऊ शकतात आणि विथड्रॉव्हल्स प्रतिबंधित केले जाऊ शकतात. व्हेलिडियम चेनवरील डेटा उपलब्धता व्यवस्थापक वापरकर्त्यांकडून ऑफचेन स्टेट डेटा रोखून धरल्यास हे होऊ शकते. व्यवहार डेटाच्या प्रवेशाशिवाय, वापरकर्ते फंड्सची मालकी सिद्ध करण्यासाठी आणि विथड्रॉव्हल्स कार्यान्वित करण्यासाठी आवश्यक असलेला मर्कल प्रूफची गणना करू शकत नाहीत. + +व्हेलिडियम्स आणि ZK-रोलअप्समधील हा मुख्य फरक आहे—डेटा उपलब्धता स्पेक्ट्रमवरील त्यांची स्थिती. दोन्ही सोल्यूशन्स डेटा स्टोरेजला वेगवेगळ्या प्रकारे हाताळतात, ज्याचे सुरक्षा आणि ट्रस्टलेसनेसवर परिणाम होतात. + +## व्हेलिडियम्स इथेरियमसोबत कसे संवाद साधतात? {#how-do-validiums-interact-with-ethereum} + +व्हेलिडियम्स हे विद्यमान इथेरियम चेनच्या वर तयार केलेले स्केलिंग प्रोटोकॉल आहेत. जरी ते ऑफचेन व्यवहार कार्यान्वित करत असले तरी, व्हेलिडियम चेन मेननेटवर तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्ट्सच्या संग्रहाद्वारे प्रशासित केली जाते, ज्यात खालील गोष्टींचा समावेश आहे: + +1. **पडताळणीकर्ता कॉन्ट्रॅक्ट**: पडताळणीकर्ता कॉन्ट्रॅक्ट स्टेट अपडेट्स करताना व्हेलिडियम ऑपरेटरद्वारे सादर केलेल्या प्रूफ्सच्या वैधतेची पडताळणी करतो. यात ऑफचेन व्यवहारांच्या अचूकतेची साक्ष देणारे व्हॅलिडिटी प्रूफ्स आणि ऑफचेन व्यवहार डेटाच्या अस्तित्वाची पडताळणी करणारे डेटा उपलब्धता प्रूफ्स यांचा समावेश आहे. + +2. **मुख्य कॉन्ट्रॅक्ट**: मुख्य कॉन्ट्रॅक्ट ब्लॉक उत्पादकांनी सादर केलेले स्टेट कमिटमेंट्स (मर्कल रूट्स) संग्रहित करतो आणि एकदा ऑनचेन व्हॅलिडिटी प्रूफची पडताळणी झाल्यावर व्हेलिडियमच्या स्टेटला अपडेट करतो. हा कॉन्ट्रॅक्ट व्हेलिडियम चेनमध्ये डिपॉझिट आणि विथड्रॉव्हल्सची प्रक्रिया देखील करतो. + +व्हेलिडियम्स खालील गोष्टींसाठी मुख्य इथेरियम चेनवर देखील अवलंबून असतात: + +### सेटलमेंट {#settlement} + +व्हेलिडियमवर कार्यान्वित केलेल्या व्यवहारांची पूर्णपणे पुष्टी केली जाऊ शकत नाही जोपर्यंत पॅरेंट चेन त्यांच्या वैधतेची पडताळणी करत नाही. व्हेलिडियमवर केलेले सर्व व्यवहार अखेरीस मेननेटवर सेटल केले पाहिजेत. इथेरियम ब्लॉकचेन व्हेलिडियम वापरकर्त्यांसाठी "सेटलमेंट हमी" देखील प्रदान करते, याचा अर्थ ऑफचेन व्यवहार एकदा ऑनचेनवर कमिट झाल्यावर उलटवले किंवा बदलले जाऊ शकत नाहीत. + +### सुरक्षा {#security} + +इथेरियम, एक सेटलमेंट लेअर म्हणून काम करत, व्हेलिडियमवरील स्टेट ट्रान्झिशन्सच्या वैधतेची हमी देखील देते. व्हेलिडियम चेनवर कार्यान्वित केलेल्या ऑफचेन व्यवहारांची पडताळणी बेस इथेरियम लेअरवरील स्मार्ट कॉन्ट्रॅक्टद्वारे केली जाते. + +जर ऑनचेन पडताळणीकर्ता कॉन्ट्रॅक्टने प्रूफ अवैध ठरवला, तर व्यवहार नाकारले जातात. याचा अर्थ ऑपरेटर्सना व्हेलिडियमचे स्टेट अपडेट करण्यापूर्वी इथेरियम प्रोटोकॉलद्वारे लागू केलेल्या वैधता अटी पूर्ण करणे आवश्यक आहे. + +## व्हेलिडियम कसे कार्य करते? {#how-does-validium-work} + +### व्यवहार {#transactions} + +वापरकर्ते ऑपरेटरकडे व्यवहार सादर करतात, जो व्हेलिडियम चेनवर व्यवहार कार्यान्वित करण्यासाठी जबाबदार एक नोड आहे. काही व्हेलिडियम्स चेन कार्यान्वित करण्यासाठी एकच ऑपरेटर वापरू शकतात किंवा ऑपरेटर्स फिरवण्यासाठी [प्रूफ-ऑफ-स्टेक (PoS)](/developers/docs/consensus-mechanisms/pos/) यंत्रणेवर अवलंबून राहू शकतात. + +ऑपरेटर व्यवहारांना एका बॅचमध्ये एकत्र करतो आणि ते सिद्ध करण्यासाठी एका प्रूफिंग सर्किटला पाठवतो. प्रूफिंग सर्किट व्यवहार बॅच (आणि इतर संबंधित डेटा) इनपुट म्हणून स्वीकारतो आणि ऑपरेशन्स योग्यरित्या केल्या गेल्या आहेत याची पडताळणी करणारा व्हॅलिडिटी प्रूफ आउटपुट करतो. + +### स्टेट कमिटमेंट्स {#state-commitments} + +व्हेलिडियमच्या स्टेटला मर्कल ट्री म्हणून हॅश केले जाते ज्याचा रूट इथेरियमवरील मुख्य कॉन्ट्रॅक्टमध्ये संग्रहित केला जातो. मर्कल रूट, ज्याला स्टेट रूट म्हणूनही ओळखले जाते, व्हेलिडियमवरील खाती आणि शिल्लकच्या सध्याच्या स्थितीसाठी एक क्रिप्टोग्राफिक कमिटमेंट म्हणून कार्य करतो. + +स्टेट अपडेट करण्यासाठी, ऑपरेटरने नवीन स्टेट रूटची (व्यवहार कार्यान्वित केल्यानंतर) गणना करणे आणि ते ऑनचेन कॉन्ट्रॅक्टला सादर करणे आवश्यक आहे. जर व्हॅलिडिटी प्रूफ तपासला गेला, तर प्रस्तावित स्टेट स्वीकारली जाते आणि व्हेलिडियम नवीन स्टेट रूटवर स्विच करते. + +### डिपॉझिट आणि विथड्रॉव्हल्स {#deposits-and-withdrawals} + +वापरकर्ते ऑनचेन कॉन्ट्रॅक्टमध्ये ETH (किंवा कोणतेही ERC-सुसंगत टोकन) डिपॉझिट करून इथेरियममधून व्हेलिडियममध्ये फंड्स हलवतात. कॉन्ट्रॅक्ट डिपॉझिट इव्हेंटला व्हेलिडियम ऑफचेनवर रिले करतो, जिथे वापरकर्त्याच्या पत्त्यावर त्यांच्या डिपॉझिटच्या बरोबरीची रक्कम जमा केली जाते. ऑपरेटर या डिपॉझिट व्यवहाराचा नवीन बॅचमध्ये देखील समावेश करतो. + +मेननेटवर फंड्स परत हलवण्यासाठी, एक व्हेलिडियम वापरकर्ता विथड्रॉव्हल व्यवहार सुरू करतो आणि तो ऑपरेटरला सादर करतो जो विथड्रॉव्हल विनंतीची पडताळणी करतो आणि बॅचमध्ये समाविष्ट करतो. सिस्टममधून बाहेर पडण्यापूर्वी व्हेलिडियम चेनवरील वापरकर्त्याची मालमत्ता देखील नष्ट केली जाते. एकदा बॅचशी संबंधित व्हॅलिडिटी प्रूफची पडताळणी झाल्यावर, वापरकर्ता त्यांच्या सुरुवातीच्या डिपॉझिटची उर्वरित रक्कम काढण्यासाठी मुख्य कॉन्ट्रॅक्टला कॉल करू शकतो. + +सेन्सॉरशिप-विरोधी यंत्रणा म्हणून, व्हेलिडियम प्रोटोकॉल वापरकर्त्यांना ऑपरेटरमार्फत न जाता थेट व्हेलिडियम कॉन्ट्रॅक्टमधून पैसे काढण्याची परवानगी देतो. या प्रकरणात, वापरकर्त्यांना स्टेट रूटमध्ये खात्याचा समावेश दर्शवणारा मर्कल प्रूफ पडताळणीकर्ता कॉन्ट्रॅक्टला प्रदान करणे आवश्यक आहे. जर प्रूफ स्वीकारला गेला, तर वापरकर्ता त्यांचे फंड्स व्हेलिडियममधून बाहेर काढण्यासाठी मुख्य कॉन्ट्रॅक्टच्या विथड्रॉव्हल फंक्शनला कॉल करू शकतो. + +### बॅच सबमिशन {#batch-submission} + +व्यवहारांची बॅच कार्यान्वित केल्यानंतर, ऑपरेटर संबंधित व्हॅलिडिटी प्रूफ पडताळणीकर्ता कॉन्ट्रॅक्टला सादर करतो आणि मुख्य कॉन्ट्रॅक्टला नवीन स्टेट रूट प्रस्तावित करतो. जर प्रूफ वैध असेल, तर मुख्य कॉन्ट्रॅक्ट व्हेलिडियमच्या स्टेटला अपडेट करतो आणि बॅचमधील व्यवहारांचे परिणाम अंतिम करतो. + +ZK-रोलअपच्या विपरीत, व्हेलिडियमवरील ब्लॉक उत्पादकांना व्यवहार बॅचसाठी व्यवहार डेटा प्रकाशित करणे आवश्यक नाही (केवळ ब्लॉक हेडर). यामुळे व्हेलिडियम हा एक शुद्ध ऑफचेन स्केलिंग प्रोटोकॉल बनतो, जो "हायब्रीड" स्केलिंग प्रोटोकॉलच्या (उदा., [लेअर 2](/layer-2/)) विरुद्ध आहे, जे ब्लॉब डेटा, `calldata`, किंवा दोन्हीच्या संयोजनाचा वापर करून मुख्य इथेरियम चेनवर स्टेट डेटा प्रकाशित करतात. + +### डेटा उपलब्धता {#data-availability} + +नमूद केल्याप्रमाणे, व्हेलिडियम्स ऑफचेन डेटा उपलब्धता मॉडेलचा वापर करतात, जिथे ऑपरेटर्स सर्व व्यवहार डेटा इथेरियम मेननेटच्या बाहेर संग्रहित करतात. व्हेलिडियमचा कमी ऑनचेन डेटा फूटप्रिंट स्केलेबिलिटी सुधारतो (थ्रुपुट इथेरियमच्या डेटा प्रक्रिया क्षमतेने मर्यादित नाही) आणि वापरकर्ता शुल्क कमी करतो (ऑनचेन डेटा प्रकाशित करण्याची किंमत कमी आहे). + +तथापि, ऑफचेन डेटा उपलब्धता एक समस्या निर्माण करते: मर्कल प्रूफ तयार करण्यासाठी किंवा सत्यापित करण्यासाठी आवश्यक असलेला डेटा अनुपलब्ध असू शकतो. याचा अर्थ असा की जर ऑपरेटर्सनी दुर्भावनापूर्णपणे कार्य केले तर वापरकर्ते ऑनचेन कॉन्ट्रॅक्टमधून निधी काढू शकणार नाहीत. + +विविध व्हेलिडियम सोल्यूशन्स स्टेट डेटाच्या स्टोरेजचे विकेंद्रीकरण करून ही समस्या सोडवण्याचा प्रयत्न करतात. यामध्ये ब्लॉक उत्पादकांना मूळ डेटा "डेटा उपलब्धता व्यवस्थापकांना" पाठवण्यासाठी भाग पाडणे समाविष्ट आहे, जे ऑफचेन डेटा संग्रहित करण्यासाठी आणि विनंतीनुसार वापरकर्त्यांना उपलब्ध करून देण्यासाठी जबाबदार आहेत. + +व्हेलिडियममधील डेटा उपलब्धता व्यवस्थापक प्रत्येक व्हेलिडियम बॅचवर स्वाक्षरी करून ऑफचेन व्यवहारांसाठी डेटाच्या उपलब्धतेची साक्ष देतात. या स्वाक्षऱ्या "उपलब्धता प्रूफ" चे एक स्वरूप आहेत जे ऑनचेन पडताळणीकर्ता कॉन्ट्रॅक्ट स्टेट अपडेट्स मंजूर करण्यापूर्वी तपासतो. + +व्हेलिडियम्स डेटा उपलब्धता व्यवस्थापनाच्या त्यांच्या दृष्टिकोनात भिन्न आहेत. काही स्टेट डेटा संग्रहित करण्यासाठी विश्वासू पक्षांवर अवलंबून असतात, तर इतर या कार्यासाठी यादृच्छिकपणे नियुक्त केलेले व्हॅलिडेटर्स वापरतात. + +#### डेटा उपलब्धता समिती (DAC) {#data-availability-committee} + +ऑफचेन डेटाची उपलब्धता सुनिश्चित करण्यासाठी, काही व्हेलिडियम सोल्यूशन्स विश्वासू संस्थांच्या एका गटाला, ज्यांना एकत्रितपणे डेटा उपलब्धता समिती (DAC) म्हणून ओळखले जाते, स्टेटच्या प्रती संग्रहित करण्यासाठी आणि डेटा उपलब्धतेचा पुरावा देण्यासाठी नियुक्त करतात. DACs लागू करणे सोपे आहे आणि सदस्यत्व कमी असल्याने कमी समन्वयाची आवश्यकता असते. + +तथापि, वापरकर्त्यांनी आवश्यकतेनुसार डेटा उपलब्ध करून देण्यासाठी DAC वर विश्वास ठेवला पाहिजे (उदा. मर्कल प्रूफ तयार करण्यासाठी). डेटा उपलब्धता समित्यांचे सदस्य [दुर्भावनापूर्ण अभिनेत्याद्वारे तडजोड होण्याची](https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view) शक्यता आहे, जो नंतर ऑफचेन डेटा रोखू शकतो. + +[व्हेलिडियममधील डेटा उपलब्धता समित्यांवर अधिक](https://medium.com/starkware/data-availability-e5564c416424). + +#### बाँडेड डेटा उपलब्धता {#bonded-data-availability} + +इतर व्हेलिडियम्सना ऑफलाइन डेटा संग्रहित करण्याचे काम करणाऱ्या सहभागींना त्यांची भूमिका स्वीकारण्यापूर्वी स्मार्ट कॉन्ट्रॅक्टमध्ये टोकन्स स्टेक (म्हणजे, लॉक अप) करणे आवश्यक असते. हा स्टेक डेटा उपलब्धता व्यवस्थापकांमध्ये प्रामाणिक वर्तनाची हमी देण्यासाठी आणि विश्वासाची गृहीतके कमी करण्यासाठी "बाँड" म्हणून काम करतो. जर हे सहभागी डेटा उपलब्धतेचा पुरावा देण्यात अयशस्वी झाले, तर बाँड स्लॅश केला जातो. + +बाँडेड डेटा उपलब्धता योजनेत, कोणीही आवश्यक स्टेक प्रदान केल्यावर ऑफचेन डेटा ठेवण्यासाठी नियुक्त केले जाऊ शकते. हे पात्र डेटा उपलब्धता व्यवस्थापकांचा पूल वाढवते, ज्यामुळे डेटा उपलब्धता समित्यांवर (DACs) परिणाम करणारे केंद्रीकरण कमी होते. सर्वात महत्त्वाचे म्हणजे, हा दृष्टिकोन दुर्भावनापूर्ण क्रियाकलाप टाळण्यासाठी क्रिप्टोइकॉनॉमिक प्रोत्साहनांवर अवलंबून आहे, जे व्हेलिडियममध्ये ऑफलाइन डेटा सुरक्षित करण्यासाठी विश्वासू पक्षांची नियुक्ती करण्यापेक्षा अधिक सुरक्षित आहे. + +[व्हेलिडियममधील बाँडेड डेटा उपलब्धतेवर अधिक](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf). + +## व्होलिशन्स आणि व्हेलिडियम {#volitions-and-validium} + +व्हेलिडियम्स अनेक फायदे देतात परंतु ते तडजोडींसह येतात (सर्वात महत्त्वाचे म्हणजे, डेटा उपलब्धता). परंतु, अनेक स्केलिंग सोल्यूशन्सप्रमाणे, व्हेलिडियम्स विशिष्ट वापराच्या प्रकरणांसाठी योग्य आहेत - म्हणूनच व्होलिशन्स तयार केले गेले. + +व्होलिशन्स ZK-रोलअप आणि व्हेलिडियम चेन एकत्र करतात आणि वापरकर्त्यांना दोन स्केलिंग सोल्यूशन्समध्ये स्विच करण्याची परवानगी देतात. व्होलिशन्ससह, वापरकर्ते विशिष्ट व्यवहारांसाठी व्हेलिडियमच्या ऑफचेन डेटा उपलब्धतेचा फायदा घेऊ शकतात, तर आवश्यक असल्यास ऑनचेन डेटा उपलब्धता सोल्यूशन (ZK-रोलअप) वर स्विच करण्याचे स्वातंत्र्य टिकवून ठेवू शकतात. हे मुळात वापरकर्त्यांना त्यांच्या विशिष्ट परिस्थितीनुसार तडजोडी निवडण्याचे स्वातंत्र्य देते. + +एक विकेंद्रीकृत एक्सचेंज (DEX) उच्च-मूल्याच्या व्यापारांसाठी व्हेलिडियमच्या स्केलेबल आणि खाजगी पायाभूत सुविधांचा वापर करण्यास प्राधान्य देऊ शकते. ज्या वापरकर्त्यांना ZK-रोलअपची उच्च सुरक्षा हमी आणि ट्रस्टलेसनेस हवी आहे त्यांच्यासाठी ते ZK-रोलअप देखील वापरू शकते. + +## व्हेलिडियम्स आणि EVM सुसंगतता {#validiums-and-evm-compatibility} + +ZK-रोलअप्सप्रमाणे, व्हेलिडियम्स बहुतेक सोप्या ॲप्लिकेशन्ससाठी योग्य आहेत, जसे की टोकन स्वॅप आणि पेमेंट्स. झिरो-नॉलेज प्रूफ सर्किटमध्ये [EVM](/developers/docs/evm/) निर्देशांना सिद्ध करण्याच्या मोठ्या ओव्हरहेडमुळे, व्हेलिडियम्समध्ये सामान्य गणना आणि स्मार्ट कॉन्ट्रॅक्ट अंमलबजावणीला समर्थन देणे कठीण आहे. + +काही व्हेलिडियम प्रकल्प EVM-सुसंगत भाषा (उदा., Solidity, Vyper) संकलित करून ही समस्या टाळण्याचा प्रयत्न करतात आणि कार्यक्षम प्रूफिंगसाठी ऑप्टिमाइझ केलेला कस्टम बायटेकोड तयार करतात. या दृष्टिकोनाचा एक तोटा असा आहे की नवीन झिरो-नॉलेज प्रूफ-फ्रेंडली VMs महत्त्वाच्या EVM ऑपकोड्सना समर्थन देऊ शकत नाहीत, आणि डेव्हलपर्सना चांगल्या अनुभवासाठी थेट उच्च-स्तरीय भाषेत लिहावे लागते. यामुळे आणखी समस्या निर्माण होतात: हे डेव्हलपर्सना पूर्णपणे नवीन डेव्हलपमेंट स्टॅकसह dapps तयार करण्यास भाग पाडते आणि सध्याच्या इथेरियम पायाभूत सुविधांसह सुसंगतता तोडते. + +तथापि, काही संघ ZK-प्रूफिंग सर्किट्ससाठी विद्यमान EVM ऑपकोड्स ऑप्टिमाइझ करण्याचा प्रयत्न करीत आहेत. यामुळे झिरो-नॉलेज इथेरियम व्हर्च्युअल मशीन (zkEVM) चा विकास होईल, जे एक EVM-सुसंगत VM आहे जे प्रोग्राम अंमलबजावणीची अचूकता सत्यापित करण्यासाठी प्रूफ तयार करते. zkEVM सह, व्हेलिडियम चेन्स ऑफचेन स्मार्ट कॉन्ट्रॅक्ट्स कार्यान्वित करू शकतात आणि इथेरियमवर ऑफचेन गणनेची (पुन्हा-कार्यान्वित न करता) पडताळणी करण्यासाठी व्हॅलिडिटी प्रूफ सादर करू शकतात. + +[zkEVMs वर अधिक](https://www.alchemy.com/overviews/zkevm). + +## व्हेलिडियम्स इथेरियमला कसे स्केल करतात? {#scaling-ethereum-with-validiums} + +### १. ऑफचेन डेटा स्टोरेज {#offchain-data-storage} + +लेअर 2 स्केलिंग प्रकल्प, जसे की ऑप्टिमिस्टिक रोलअप्स आणि ZK-रोलअप्स, L1 वर काही व्यवहार डेटा प्रकाशित करून सुरक्षिततेसाठी शुद्ध ऑफचेन स्केलिंग प्रोटोकॉलच्या (उदा., [प्लाझ्मा](/developers/docs/scaling/plasma/)) अनंत स्केलेबिलिटीचा व्यापार करतात. परंतु याचा अर्थ असा की रोलअप्सचे स्केलेबिलिटी गुणधर्म इथेरियम मेननेटवरील डेटा बँडविड्थने मर्यादित आहेत ([डेटा शार्डिंग](/roadmap/danksharding/) याच कारणासाठी इथेरियमची डेटा स्टोरेज क्षमता सुधारण्याचा प्रस्ताव देते). + +व्हेलिडियम्स सर्व व्यवहार डेटा ऑफचेन ठेवून आणि मुख्य इथेरियम चेनवर स्टेट अपडेट्स रिले करताना केवळ स्टेट कमिटमेंट्स (आणि व्हॅलिडिटी प्रूफ्स) पोस्ट करून स्केलेबिलिटी प्राप्त करतात. तथापि, व्हॅलिडिटी प्रूफ्सचे अस्तित्व व्हेलिडियम्सना प्लाझ्मा आणि [साइडचेन्स](/developers/docs/scaling/sidechains/) यासह इतर शुद्ध ऑफचेन स्केलिंग सोल्यूशन्सपेक्षा उच्च सुरक्षा हमी देते. ऑफचेन व्यवहार प्रमाणित करण्यापूर्वी इथेरियमला प्रक्रिया कराव्या लागणाऱ्या डेटाचे प्रमाण कमी करून, व्हेलिडियम डिझाइन्स मेननेटवर थ्रुपुट मोठ्या प्रमाणात वाढवतात. + +### २. रिकर्सिव्ह प्रूफ्स {#recursive-proofs} + +रिकर्सिव्ह प्रूफ हा एक व्हॅलिडिटी प्रूफ आहे जो इतर प्रूफ्सची वैधता सत्यापित करतो. हे "प्रूफ ऑफ प्रूफ्स" अनेक प्रूफ्सना रिकर्सिव्हली एकत्र करून तयार केले जातात जोपर्यंत सर्व मागील प्रूफ्सची पडताळणी करणारा एक अंतिम प्रूफ तयार होत नाही. रिकर्सिव्ह प्रूफ्स प्रति व्हॅलिडिटी प्रूफ सत्यापित केल्या जाऊ शकणाऱ्या व्यवहारांची संख्या वाढवून ब्लॉकचेन प्रक्रिया गती स्केल करतात. + +सामान्यतः, व्हेलिडियम ऑपरेटर पडताळणीसाठी इथेरियमला सादर करत असलेला प्रत्येक व्हॅलिडिटी प्रूफ एकाच ब्लॉकची अखंडता प्रमाणित करतो. तर एकच रिकर्सिव्ह प्रूफ एकाच वेळी अनेक व्हेलिडियम ब्लॉक्सची वैधता निश्चित करण्यासाठी वापरला जाऊ शकतो - हे शक्य आहे कारण प्रूफिंग सर्किट अनेक ब्लॉक प्रूफ्सना रिकर्सिव्हली एका अंतिम प्रूफमध्ये एकत्र करू शकते. जर ऑनचेन पडताळणीकर्ता कॉन्ट्रॅक्टने रिकर्सिव्ह प्रूफ स्वीकारला, तर सर्व मूळ ब्लॉक्स त्वरित अंतिम केले जातात. + +## व्हेलिडियमचे फायदे आणि तोटे {#pros-and-cons-of-validium} + +| फायदे | बाधक | +| --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| व्हॅलिडिटी प्रूफ्स ऑफचेन व्यवहारांची अखंडता लागू करतात आणि ऑपरेटर्सना अवैध स्टेट अपडेट्स अंतिम करण्यापासून प्रतिबंधित करतात. | व्हॅलिडिटी प्रूफ तयार करण्यासाठी विशेष हार्डवेअरची आवश्यकता असते, ज्यामुळे केंद्रीकरणाचा धोका निर्माण होतो. | +| वापरकर्त्यांसाठी भांडवली कार्यक्षमता वाढवते (इथेरियममध्ये फंड्स परत काढण्यात कोणताही विलंब नाही). | सामान्य गणना/स्मार्ट कॉन्ट्रॅक्टसाठी मर्यादित समर्थन; विकासासाठी विशेष भाषा आवश्यक. | +| उच्च-मूल्याच्या ॲप्लिकेशन्समध्ये फ्रॉड-प्रूफ आधारित प्रणालींना सामोरे जावे लागणाऱ्या विशिष्ट आर्थिक हल्ल्यांसाठी असुरक्षित नाही. | ZK प्रूफ तयार करण्यासाठी उच्च गणना शक्ती आवश्यक; कमी थ्रुपुट ॲप्लिकेशन्ससाठी किफायतशीर नाही. | +| इथेरियम मेननेटवर calldata पोस्ट न करून वापरकर्त्यांसाठी गॅस शुल्क कमी करते. | धीमी व्यक्तिनिष्ठ अंतिमता वेळ (ZK प्रूफ तयार करण्यासाठी 10-30 मिनिटे) परंतु पूर्ण अंतिमततेसाठी जलद कारण कोणताही विवाद वेळ विलंब नाही. | +| विशिष्ट वापराच्या प्रकरणांसाठी योग्य, जसे की ट्रेडिंग किंवा ब्लॉकचेन गेमिंग जे व्यवहार गोपनीयता आणि स्केलेबिलिटीला प्राधान्य देतात. | वापरकर्त्यांना निधी काढण्यापासून प्रतिबंधित केले जाऊ शकते कारण मालकीचे मर्कल प्रूफ तयार करण्यासाठी ऑफचेन डेटा नेहमी उपलब्ध असणे आवश्यक आहे. | +| ऑफचेन डेटा उपलब्धता उच्च पातळीचे थ्रुपुट प्रदान करते आणि स्केलेबिलिटी वाढवते. | सुरक्षा मॉडेल विश्वासाच्या गृहितकांवर आणि क्रिप्टोइकॉनॉमिक प्रोत्साहनांवर अवलंबून आहे, ZK-रोलअप्सच्या विपरीत, जे पूर्णपणे क्रिप्टोग्राफिक सुरक्षा यंत्रणेवर अवलंबून असतात. | + +### व्हेलिडियम/व्होलिशन्स वापरा {#use-validium-and-volitions} + +अनेक प्रकल्प व्हेलिडियम आणि व्होलिशन्सची अंमलबजावणी प्रदान करतात जे तुम्ही तुमच्या dapps मध्ये समाकलित करू शकता: + +**StarkWare StarkEx** - _StarkEx हे इथेरियम लेअर 2 (L2) स्केलेबिलिटी सोल्यूशन आहे जे व्हॅलिडिटी प्रूफ्सवर आधारित आहे. ते ZK-रोलअप किंवा व्हेलिडियम डेटा-उपलब्धता मोडमध्ये काम करू शकते._ + +- [दस्तऐवजीकरण](https://docs.starkware.co/starkex-v4/starkex-deep-dive/data-availability-modes#validium) +- [वेबसाइट](https://starkware.co/starkex/) + +**Matter Labs zkPorter**- _zkPorter हा एक लेअर 2 स्केलिंग प्रोटोकॉल आहे जो zkRollup आणि शार्डिंगच्या कल्पनांना एकत्रित करणाऱ्या हायब्रीड दृष्टिकोनाने डेटा उपलब्धतेची समस्या हाताळतो. ते अनियंत्रितपणे अनेक शार्ड्सना समर्थन देऊ शकते, प्रत्येकाची स्वतःची डेटा उपलब्धता धोरण असते._ + +- [ब्लॉग](https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf) +- [दस्तऐवजीकरण](https://docs.zksync.io/zksync-protocol/rollup/data-availability) +- [वेबसाइट](https://zksync.io/) + +## पुढील वाचन {#further-reading} + +- [व्हेलिडियम आणि लेअर 2 टू-बाय-टू — अंक क्र. 99](https://www.buildblockchain.tech/newsletter/issues/no-99-validium-and-the-layer-2-two-by-two) +- [ZK-रोलअप्स वि. व्हेलिडियम](https://blog.matter-labs.io/zkrollup-vs-validium-starkex-5614e38bc263) +- [व्होलिशन आणि उदयोन्मुख डेटा उपलब्धता स्पेक्ट्रम](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb) +- [रोलअप्स, व्हेलिडियम्स, आणि व्होलिशन्स: सर्वात लोकप्रिय इथेरियम स्केलिंग सोल्यूशन्सबद्दल जाणून घ्या](https://www.defipulse.com/blog/rollups-validiums-and-volitions-learn-about-the-hottest-ethereum-scaling-solutions) +- [इथेरियम रोलअप्ससाठी व्यावहारिक मार्गदर्शक](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) diff --git a/public/content/translations/mr/developers/docs/scaling/zk-rollups/index.md b/public/content/translations/mr/developers/docs/scaling/zk-rollups/index.md new file mode 100644 index 00000000000..3a3999e682f --- /dev/null +++ b/public/content/translations/mr/developers/docs/scaling/zk-rollups/index.md @@ -0,0 +1,257 @@ +--- +title: "शून्य-ज्ञान रोलअप्स" +description: "शून्य-ज्ञान रोलअप्सचा परिचय — Ethereum समुदायाद्वारे वापरले जाणारे स्केलिंग सोल्यूशन." +lang: mr +--- + +शून्य-ज्ञान रोलअप्स (ZK-rollups) हे लेअर 2 [स्केलिंग सोल्यूशन्स](/developers/docs/scaling/) आहेत जे कम्प्युटेशन आणि स्टेट-स्टोरेज ऑफचेन हलवून Ethereum Mainnet वरील थ्रूपूट वाढवतात. ZK-rollups एका बॅचमध्ये हजारो व्यवहारांवर प्रक्रिया करू शकतात आणि नंतर Mainnet वर फक्त काही किमान सारांश डेटा पोस्ट करतात. हा सारांश डेटा Ethereum स्टेटमध्ये केले जाणारे बदल आणि ते बदल योग्य असल्याचे काही क्रिप्टोग्राफिक पुरावे परिभाषित करतो. + +## पूर्वतयारी {#prerequisites} + +तुम्ही आमचे [इथेरियम स्केलिंग](/developers/docs/scaling/) आणि [लेअर 2](/layer-2) वरील पेज वाचून समजून घेतलेले असावे. + +## शून्य-ज्ञान रोलअप्स काय आहेत? {#what-are-zk-rollups} + +**शून्य-ज्ञान रोलअप्स (ZK-rollups)** व्यवहारांना बॅचेसमध्ये बंडल (किंवा 'रोल अप') करतात जे ऑफचेन कार्यान्वित केले जातात. ऑफचेन कम्प्युटेशनमुळे ब्लॉकचेनवर पोस्ट कराव्या लागणाऱ्या डेटाचे प्रमाण कमी होते. ZK-रोलअप ऑपरेटर्स प्रत्येक व्यवहार स्वतंत्रपणे पाठवण्याऐवजी, एका बॅचमधील सर्व व्यवहारांचे प्रतिनिधित्व करण्यासाठी आवश्यक बदलांचा सारांश सबमिट करतात. ते त्यांच्या बदलांची अचूकता सिद्ध करण्यासाठी [वैधता पुरावे](/glossary/#validity-proof) देखील तयार करतात. + +ZK-रोलअपची स्टेट Ethereum नेटवर्कवर तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्टद्वारे सांभाळली जाते. ही स्टेट अपडेट करण्यासाठी, ZK-रोलअप नोड्सनी पडताळणीसाठी वैधता पुरावा सादर करणे आवश्यक आहे. नमूद केल्याप्रमाणे, वैधता पुरावा ही एक क्रिप्टोग्राफिक हमी आहे की रोलअपद्वारे प्रस्तावित स्टेट-बदल हा दिलेल्या व्यवहारांच्या बॅचला कार्यान्वित करण्याचाच परिणाम आहे. याचा अर्थ असा की [ऑप्टिमिस्टिक रोलअप्स](/developers/docs/scaling/optimistic-rollups/) प्रमाणे सर्व व्यवहार डेटा ऑनचेन पोस्ट करण्याऐवजी, ZK-रोलअप्सना Ethereum वर व्यवहार अंतिम करण्यासाठी फक्त वैधता पुरावे प्रदान करणे आवश्यक आहे. + +ZK-रोलअपमधून Ethereum मध्ये निधी हलवताना कोणताही विलंब होत नाही, कारण ZK-रोलअप कॉन्ट्रॅक्टने वैधता पुराव्याची पडताळणी केल्यावर बाहेर पडण्याचे व्यवहार कार्यान्वित केले जातात. याउलट, ऑप्टिमिस्टिक रोलअपमधून निधी काढण्यास विलंब होतो, जेणेकरून कोणालाही [फ्रॉड प्रूफ](/glossary/#fraud-proof) सह बाहेर पडण्याच्या व्यवहाराला आव्हान देता येईल. + +ZK-रोलअप्स Ethereum वर `calldata` म्हणून व्यवहार लिहितात. `calldata` हे असे ठिकाण आहे जिथे स्मार्ट कॉन्ट्रॅक्ट फंक्शन्सच्या बाह्य कॉल्समध्ये समाविष्ट केलेला डेटा संग्रहित केला जातो. `calldata` मधील माहिती ब्लॉकचेनवर प्रकाशित केली जाते, ज्यामुळे कोणालाही रोलअपची स्टेट स्वतंत्रपणे पुनर्रचना करता येते. ZK-रोलअप्स व्यवहार डेटा कमी करण्यासाठी कॉम्प्रेशन तंत्रांचा वापर करतात—उदाहरणार्थ, अकाउंट्स पत्त्याऐवजी निर्देशांकाद्वारे दर्शविले जातात, ज्यामुळे 28 बाइट्स डेटा वाचतो. ऑनचेन डेटा प्रकाशन ही रोलअपसाठी एक महत्त्वपूर्ण खर्च आहे, त्यामुळे डेटा कॉम्प्रेशन वापरकर्त्यांसाठी शुल्क कमी करू शकते. + +## ZK-रोलअप Ethereum सोबत कसे संवाद साधतात? {#zk-rollups-and-ethereum} + +ZK-रोलअप चेन हा एक ऑफचेन प्रोटोकॉल आहे जो Ethereum ब्लॉकचेनच्या वर काम करतो आणि ऑनचेन Ethereum स्मार्ट कॉन्ट्रॅक्टद्वारे व्यवस्थापित केला जातो. ZK-रोलअप्स Mainnet च्या बाहेर व्यवहार कार्यान्वित करतात, परंतु ठराविक कालावधीने ऑफचेन व्यवहार बॅचेस ऑनचेन रोलअप कॉन्ट्रॅक्टला सादर करतात. हा व्यवहार रेकॉर्ड अपरिवर्तनीय असतो, जसा Ethereum ब्लॉकचेन असतो, आणि तो ZK-रोलअप चेन तयार करतो. + +ZK-रोलअपच्या मुख्य रचनेत खालील घटक असतात: + +1. **ऑनचेन कॉन्ट्रॅक्ट्स**: नमूद केल्याप्रमाणे, ZK-रोलअप प्रोटोकॉल Ethereum वर चालणाऱ्या स्मार्ट कॉन्ट्रॅक्टद्वारे नियंत्रित केला जातो. यामध्ये मुख्य कॉन्ट्रॅक्टचा समावेश आहे जो रोलअप ब्लॉक्स संग्रहित करतो, डिपॉझिट्सचा मागोवा घेतो आणि स्टेट अपडेट्सचे निरीक्षण करतो. आणखी एक ऑनचेन कॉन्ट्रॅक्ट (व्हेरिफायर कॉन्ट्रॅक्ट) ब्लॉक प्रोड्युसर्सद्वारे सबमिट केलेल्या शून्य-ज्ञान पुराव्यांची पडताळणी करतो. अशाप्रकारे, Ethereum ZK-रोलअपसाठी बेस लेअर किंवा "लेअर 1" म्हणून काम करते. + +2. **ऑफचेन व्हर्च्युअल मशीन (VM)**: जरी ZK-रोलअप प्रोटोकॉल Ethereum वर राहत असला तरी, व्यवहार अंमलबजावणी आणि स्टेट स्टोरेज [EVM](/developers/docs/evm/) पेक्षा स्वतंत्र असलेल्या वेगळ्या व्हर्च्युअल मशीनवर घडते. ही ऑफचेन VM ZK-रोलअपवरील व्यवहारांसाठी अंमलबजावणीचे वातावरण आहे आणि ZK-रोलअप प्रोटोकॉलसाठी सेकंडरी लेअर किंवा "लेअर 2" म्हणून काम करते. Ethereum Mainnet वर सत्यापित केलेले वैधता पुरावे ऑफचेन VM मधील स्टेट संक्रमणांची अचूकता हमी देतात. + +ZK-रोलअप हे "हायब्रिड स्केलिंग सोल्यूशन्स" आहेत—ऑफचेन प्रोटोकॉल जे स्वतंत्रपणे कार्य करतात परंतु Ethereum कडून सुरक्षा प्राप्त करतात. विशेषतः, Ethereum नेटवर्क ZK-रोलअपवरील स्टेट अपडेट्सची वैधता लागू करते आणि रोलअपच्या स्टेटच्या प्रत्येक अपडेटमागील डेटाची उपलब्धता सुनिश्चित करते. परिणामी, ZK-रोलअप्स हे [साईडचेन्स](/developers/docs/scaling/sidechains/) सारख्या शुद्ध ऑफचेन स्केलिंग सोल्यूशन्सपेक्षा बरेच सुरक्षित आहेत, जे त्यांच्या सुरक्षा गुणधर्मांसाठी जबाबदार असतात, किंवा [व्हॅलिडियम्स](/developers/docs/scaling/validium/), जे Ethereum वर वैधता पुराव्यांसह व्यवहारांची पडताळणी करतात, परंतु व्यवहार डेटा इतरत्र संग्रहित करतात. + +ZK-रोलअप खालील गोष्टींसाठी मुख्य Ethereum प्रोटोकॉलवर अवलंबून असतात: + +### डेटा उपलब्धता {#data-availability} + +ZK-रोलअप ऑफचेन प्रक्रिया केलेल्या प्रत्येक व्यवहारासाठी स्टेट डेटा Ethereum वर प्रकाशित करतात. या डेटाद्वारे, व्यक्ती किंवा व्यवसायांना रोलअपची स्टेट पुनरुत्पादित करणे आणि स्वतःच चेनची वैधता तपासणे शक्य होते. Ethereum हा डेटा नेटवर्कमधील सर्व सहभागींना `calldata` म्हणून उपलब्ध करून देते. + +ZK-रोलअपला जास्त व्यवहार डेटा ऑनचेन प्रकाशित करण्याची आवश्यकता नाही कारण वैधता पुरावे आधीच स्टेट संक्रमणांची सत्यता पडताळतात. तरीही, ऑनचेन डेटा संग्रहित करणे महत्त्वाचे आहे कारण ते L2 चेनच्या स्टेटची परवानगीरहित, स्वतंत्र पडताळणी करण्यास अनुमती देते, ज्यामुळे कोणालाही व्यवहारांचे बॅचेस सबमिट करता येतात, आणि दुर्भावनापूर्ण ऑपरेटर्सना चेननला सेन्सॉर करण्यापासून किंवा फ्रीझ करण्यापासून प्रतिबंधित करते. + +वापरकर्त्यांना रोलअपसह संवाद साधण्यासाठी ऑनचेन आवश्यक आहे. स्टेट डेटामध्ये प्रवेशाशिवाय वापरकर्ते त्यांच्या खात्यातील शिल्लक तपासू शकत नाहीत किंवा स्टेट माहितीवर अवलंबून असलेले व्यवहार (उदा. पैसे काढणे) सुरू करू शकत नाहीत. + +### व्यवहाराची अंतिम निश्चिती {#transaction-finality} + +Ethereum ZK-रोलअप्ससाठी सेटलमेंट लेअर म्हणून काम करते: L2 व्यवहार तेव्हाच अंतिम होतात जेव्हा L1 कॉन्ट्रॅक्ट वैधता पुरावा स्वीकारतो. यामुळे दुर्भावनापूर्ण ऑपरेटर्सकडून चेनमध्ये गडबड होण्याचा (उदा. रोलअप निधी चोरणे) धोका नाहीसा होतो कारण प्रत्येक व्यवहाराला Mainnet वर मंजूर करणे आवश्यक असते. तसेच, Ethereum हमी देते की एकदा L1 वर अंतिम झाल्यावर वापरकर्त्याच्या क्रिया उलटवल्या जाऊ शकत नाहीत. + +### सेन्सॉरशिप प्रतिरोध {#censorship-resistance} + +बहुतेक ZK-रोलअप्स व्यवहार कार्यान्वित करण्यासाठी, बॅच तयार करण्यासाठी आणि L1 वर ब्लॉक्स सबमिट करण्यासाठी "सुपरनोड" (ऑपरेटर) वापरतात. यामुळे कार्यक्षमता सुनिश्चित होत असली तरी, सेन्सॉरशिपचा धोका वाढतो: दुर्भावनापूर्ण ZK-रोलअप ऑपरेटर्स वापरकर्त्यांच्या व्यवहारांना बॅचेसमध्ये समाविष्ट करण्यास नकार देऊन त्यांना सेन्सॉर करू शकतात. + +सुरक्षितता उपाय म्हणून, ZK-रोलअप वापरकर्त्यांना थेट Mainnet वरील रोलअप कॉन्ट्रॅक्टमध्ये व्यवहार सबमिट करण्याची परवानगी देतात जर त्यांना वाटत असेल की ऑपरेटर त्यांना सेन्सॉर करत आहे. यामुळे वापरकर्त्यांना ऑपरेटरच्या परवानगीवर अवलंबून न राहता ZK-रोलअपमधून Ethereum वर बाहेर पडण्यास भाग पाडता येते. + +## ZK-रोलअप कसे कार्य करतात? {#how-do-zk-rollups-work} + +### व्यवहार {#transactions} + +ZK-रोलअपमधील वापरकर्ते व्यवहारांवर स्वाक्षरी करतात आणि प्रक्रियेसाठी आणि पुढील बॅचमध्ये समावेशासाठी L2 ऑपरेटर्सकडे सबमिट करतात. काही प्रकरणांमध्ये, ऑपरेटर एक केंद्रीकृत संस्था असते, ज्याला सिक्वेन्सर म्हणतात, जो व्यवहार कार्यान्वित करतो, त्यांना बॅचमध्ये एकत्र करतो आणि L1 वर सबमिट करतो. या प्रणालीतील सिक्वेन्सर ही एकमेव संस्था आहे जिला L2 ब्लॉक्स तयार करण्याची आणि ZK-रोलअप कॉन्ट्रॅक्टमध्ये रोलअप व्यवहार जोडण्याची परवानगी आहे. + +इतर ZK-रोलअप्स [प्रूफ-ऑफ-स्टेक](/developers/docs/consensus-mechanisms/pos/) व्हॅलिडेटर सेट वापरून ऑपरेटरची भूमिका फिरवत ठेवू शकतात. संभाव्य ऑपरेटर रोलअप कॉन्ट्रॅक्टमध्ये निधी जमा करतात, प्रत्येक स्टेकचा आकार पुढील रोलअप बॅच तयार करण्यासाठी निवडल्या जाण्याच्या स्टेकरच्या संधीवर प्रभाव टाकतो. जर ऑपरेटरने दुर्भावनापूर्णपणे काम केले तर त्याचा स्टेक कापला जाऊ शकतो, ज्यामुळे त्यांना वैध ब्लॉक्स पोस्ट करण्यास प्रोत्साहन मिळते. + +#### ZK-रोलअप्स Ethereum वर व्यवहार डेटा कसा प्रकाशित करतात {#how-zk-rollups-publish-transaction-data-on-ethereum} + +स्पष्ट केल्याप्रमाणे, व्यवहार डेटा Ethereum वर `calldata` म्हणून प्रकाशित केला जातो. `calldata` स्मार्ट कॉन्ट्रॅक्टमधील डेटा एरिया आहे जो फंक्शनला वितर्क पास करण्यासाठी वापरला जातो आणि [मेमरी](/developers/docs/smart-contracts/anatomy/#memory) प्रमाणेच कार्य करतो. जरी `calldata` Ethereum च्या स्टेटचा भाग म्हणून संग्रहित नसला तरी, तो Ethereum चेनच्या [इतिहास लॉग](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html?highlight=memory#logs) चा भाग म्हणून ऑनचेन टिकतो. `calldata` Ethereum च्या स्टेटवर परिणाम करत नाही, ज्यामुळे तो ऑनचेन डेटा संग्रहित करण्याचा एक स्वस्त मार्ग बनतो. + +`calldata` कीवर्ड बहुतेकदा व्यवहाराद्वारे कॉल केलेल्या स्मार्ट कॉन्ट्रॅक्ट पद्धतीची ओळख करून देतो आणि बाइट्सच्या अनियंत्रित क्रमाने पद्धतीसाठी इनपुट धारण करतो. ZK-रोलअप संकुचित व्यवहार डेटा ऑनचेन प्रकाशित करण्यासाठी `calldata` वापरतात; रोलअप ऑपरेटर फक्त रोलअप कॉन्ट्रॅक्टमध्ये आवश्यक फंक्शन कॉल करून नवीन बॅच जोडतो आणि संकुचित डेटा फंक्शन वितर्क म्हणून पास करतो. हे वापरकर्त्यांसाठी खर्च कमी करण्यास मदत करते कारण रोलअप शुल्काचा मोठा भाग ऑनचेन व्यवहार डेटा संग्रहित करण्यासाठी जातो. + +### स्टेट कमिटमेंट्स {#state-commitments} + +ZK-रोलअपची स्टेट, ज्यात L2 अकाउंट्स आणि बॅलन्स समाविष्ट आहेत, [मर्कल ट्री](/whitepaper/#merkle-trees) म्हणून दर्शविली जाते. मर्कल ट्रीच्या मूळ (मर्कल रूट) चा क्रिप्टोग्राफिक हॅश ऑनचेन कॉन्ट्रॅक्टमध्ये संग्रहित केला जातो, ज्यामुळे रोलअप प्रोटोकॉलला ZK-रोलअपच्या स्टेटमधील बदलांचा मागोवा घेता येतो. + +नवीन व्यवहारांच्या संचाच्या अंमलबजावणीनंतर रोलअप नवीन स्थितीत जातो. स्टेट ट्रान्झिशन सुरू करणाऱ्या ऑपरेटरला नवीन स्टेट रूटची गणना करणे आणि ते ऑनचेन कॉन्ट्रॅक्टला सादर करणे आवश्यक आहे. जर बॅचशी संबंधित वैधता पुरावा व्हेरिफायर कॉन्ट्रॅक्टद्वारे प्रमाणित केला गेला, तर नवीन मर्कल रूट ZK-रोलअपचा कॅनॉनिकल स्टेट रूट बनतो. + +स्टेट रूट्सची गणना करण्याव्यतिरिक्त, ZK-रोलअप ऑपरेटर बॅच रूट देखील तयार करतो - बॅचमधील सर्व व्यवहारांचा समावेश असलेल्या मर्कल ट्रीचा रूट. जेव्हा नवीन बॅच सबमिट केली जाते, तेव्हा रोलअप कॉन्ट्रॅक्ट बॅच रूट संग्रहित करतो, ज्यामुळे वापरकर्त्यांना व्यवहार (उदा. पैसे काढण्याची विनंती) बॅचमध्ये समाविष्ट असल्याचे सिद्ध करता येते. वापरकर्त्यांना व्यवहाराचे तपशील, बॅच रूट आणि समावेशाचा मार्ग दर्शवणारा [मर्कल प्रूफ](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) द्यावा लागेल. + +### वैधता पुरावे {#validity-proofs} + +ZK-रोलअप ऑपरेटर L1 कॉन्ट्रॅक्टला सादर करणारा नवीन स्टेट रूट रोलअपच्या स्टेटमधील अपडेट्सचा परिणाम आहे. समजा ॲलिसने बॉबला 10 टोकन पाठवले, तर ऑपरेटर फक्त ॲलिसची शिल्लक 10 ने कमी करतो आणि बॉबची शिल्लक 10 ने वाढवतो. त्यानंतर ऑपरेटर अपडेट केलेल्या खात्याच्या डेटाचा हॅश करतो, रोलअपची मर्कल ट्री पुन्हा तयार करतो आणि नवीन मर्कल रूट ऑनचेन कॉन्ट्रॅक्टला सादर करतो. + +परंतु रोलअप कॉन्ट्रॅक्ट प्रस्तावित स्टेट कमिटमेंट आपोआप स्वीकारणार नाही जोपर्यंत ऑपरेटर हे सिद्ध करत नाही की नवीन मर्कल रूट रोलअपच्या स्टेटमधील योग्य अपडेट्समधून आला आहे. ZK-रोलअप ऑपरेटर वैधता पुरावा तयार करून हे करतो, जो बॅचमधील व्यवहारांची अचूकता सत्यापित करणारी एक संक्षिप्त क्रिप्टोग्राफिक कमिटमेंट आहे. + +वैधता पुरावे पक्षांना विधान स्वतः उघड न करता विधानाची अचूकता सिद्ध करण्याची परवानगी देतात—म्हणून, त्यांना शून्य-ज्ञान पुरावे देखील म्हटले जाते. ZK-रोलअप्स Ethereum वर व्यवहार पुन्हा कार्यान्वित न करता ऑफचेन स्टेट संक्रमणांची अचूकता पुष्टी करण्यासाठी वैधता पुरावे वापरतात. हे पुरावे [ZK-SNARK](https://arxiv.org/abs/2202.06877) (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge) किंवा [ZK-STARK](https://eprint.iacr.org/2018/046) (Zero-Knowledge Scalable Transparent Argument of Knowledge) स्वरूपात येऊ शकतात. + +SNARKs आणि STARKs दोन्ही ZK-रोलअपमध्ये ऑफचेन गणनेच्या अखंडतेची साक्ष देण्यास मदत करतात, जरी प्रत्येक पुरावा प्रकारात विशिष्ट वैशिष्ट्ये आहेत. + +**ZK-SNARKs** + +ZK-SNARK प्रोटोकॉल कार्य करण्यासाठी, एक कॉमन रेफरन्स स्ट्रिंग (CRS) तयार करणे आवश्यक आहे: CRS वैधता पुरावे सिद्ध करण्यासाठी आणि सत्यापित करण्यासाठी सार्वजनिक पॅरामीटर्स प्रदान करते. सिद्धता प्रणालीची सुरक्षा CRS सेटअपवर अवलंबून असते; जर सार्वजनिक पॅरामीटर्स तयार करण्यासाठी वापरलेली माहिती दुर्भावनापूर्ण घटकांच्या ताब्यात आली तर ते खोटे वैधता पुरावे तयार करू शकतात. + +काही ZK-रोलअप्स ही समस्या सोडवण्यासाठी ZK-SNARK सर्किटसाठी सार्वजनिक पॅरामीटर्स तयार करण्यासाठी विश्वासू व्यक्तींचा समावेश असलेल्या [मल्टी-पार्टी कॉम्प्युटेशन सेरेमनी (MPC)](https://zkproof.org/2021/06/30/setup-ceremonies/amp/) वापरण्याचा प्रयत्न करतात. प्रत्येक पक्ष CRS तयार करण्यासाठी काही यादृच्छिकता ("विषारी कचरा" म्हटले जाते) योगदान देतो, जे त्यांनी त्वरित नष्ट केले पाहिजे. + +विश्वसनीय सेटअप्स वापरले जातात कारण ते CRS सेटअपची सुरक्षा वाढवतात. जोपर्यंत एक प्रामाणिक सहभागी आपले इनपुट नष्ट करतो, तोपर्यंत ZK-SNARK प्रणालीची सुरक्षा हमी दिली जाते. तरीही, या दृष्टिकोनासाठी सहभागींवर विश्वास ठेवणे आवश्यक आहे की ते त्यांची नमुना यादृच्छिकता हटवतील आणि प्रणालीच्या सुरक्षा हमींना कमी करणार नाहीत. + +विश्वासाच्या गृहितकांना बाजूला ठेवून, ZK-SNARKs त्यांच्या लहान पुरावा आकारांसाठी आणि स्थिर-वेळ पडताळणीसाठी लोकप्रिय आहेत. L1 वर पुरावा पडताळणी ही ZK-रोलअप चालवण्याचा मोठा खर्च असल्याने, L2s ZK-SNARKs वापरून पुरावे तयार करतात जे Mainnet वर जलद आणि स्वस्तात सत्यापित केले जाऊ शकतात. + +**ZK-STARKs** + +ZK-SNARKs प्रमाणेच, ZK-STARKs इनपुट उघड न करता ऑफचेन गणनेची वैधता सिद्ध करतात. तथापि, ZK-STARKs त्यांच्या स्केलेबिलिटी आणि पारदर्शकतेमुळे ZK-SNARKs वर सुधारणा मानले जातात. + +ZK-STARKs 'पारदर्शक' आहेत, कारण ते कॉमन रेफरन्स स्ट्रिंग (CRS) च्या विश्वसनीय सेटअपशिवाय काम करू शकतात. त्याऐवजी, ZK-STARKs पुरावे तयार करण्यासाठी आणि सत्यापित करण्यासाठी पॅरामीटर्स सेट करण्यासाठी सार्वजनिकरित्या सत्यापित करण्यायोग्य यादृच्छिकतेवर अवलंबून असतात. + +ZK-STARKs अधिक स्केलेबिलिटी देखील प्रदान करतात कारण वैधता पुरावे सिद्ध करण्यासाठी आणि सत्यापित करण्यासाठी लागणारा वेळ अंतर्निहित गणनेच्या जटिलतेच्या संबंधात _क्वासीलिनियरली_ वाढतो. ZK-SNARKs सह, सिद्ध करणे आणि पडताळणीचा वेळ अंतर्निहित गणनेच्या आकाराच्या संबंधात _रेखीयपणे_ वाढतो. याचा अर्थ असा की जेव्हा मोठ्या डेटासेटचा समावेश असतो तेव्हा ZK-STARKs ला ZK-SNARKs पेक्षा सिद्ध करण्यासाठी आणि सत्यापित करण्यासाठी कमी वेळ लागतो, ज्यामुळे ते उच्च-व्हॉल्यूम ॲप्लिकेशन्ससाठी उपयुक्त ठरतात. + +ZK-STARKs क्वांटम संगणकांविरुद्ध देखील सुरक्षित आहेत, तर ZK-SNARKs मध्ये वापरलेली इलिप्टिक कर्व क्रिप्टोग्राफी (ECC) क्वांटम संगणकीय हल्ल्यांना बळी पडण्याची शक्यता आहे असे मानले जाते. ZK-STARKs चा तोटा हा आहे की ते मोठ्या आकाराचे पुरावे तयार करतात, जे Ethereum वर सत्यापित करण्यासाठी अधिक महाग आहेत. + +#### ZK-रोलअपमध्ये वैधता पुरावे कसे कार्य करतात? {#validity-proofs-in-zk-rollups} + +##### पुरावा निर्मिती + +व्यवहार स्वीकारण्यापूर्वी, ऑपरेटर नेहमीच्या तपासण्या करेल. यामध्ये याची पुष्टी करणे समाविष्ट आहे की: + +- प्रेषक आणि प्राप्तकर्ता खाती स्टेट ट्रीचा भाग आहेत. +- प्रेषकाकडे व्यवहार प्रक्रिया करण्यासाठी पुरेसा निधी आहे. +- व्यवहार योग्य आहे आणि रोलअपवरील प्रेषकाच्या सार्वजनिक कीशी जुळतो. +- प्रेषकाचा नॉन्स योग्य आहे, इत्यादी. + +एकदा ZK-रोलअप नोडकडे पुरेसे व्यवहार झाल्यावर, तो त्यांना एका बॅचमध्ये एकत्रित करतो आणि एक संक्षिप्त ZK-पुरावा संकलित करण्यासाठी सिद्ध करणाऱ्या सर्किटसाठी इनपुट संकलित करतो. यात समाविष्ट आहे: + +- बॅचमधील सर्व व्यवहारांचा समावेश असलेला एक मर्कल ट्री रूट. +- बॅचमध्ये समावेश सिद्ध करण्यासाठी व्यवहारांसाठी मर्कल पुरावे. +- व्यवहारांमधील प्रत्येक प्रेषक-प्राप्तकर्ता जोडीसाठी मर्कल पुरावे हे सिद्ध करण्यासाठी की ती खाती रोलअपच्या स्टेट ट्रीचा भाग आहेत. +- प्रत्येक व्यवहारासाठी स्टेट अपडेट लागू केल्यानंतर स्टेट रूट अपडेट करून प्राप्त झालेल्या इंटरमीडिएट स्टेट रूट्सचा एक संच (म्हणजे, प्रेषक खाती कमी करणे आणि प्राप्तकर्ता खाती वाढवणे). + +सिद्ध करणारे सर्किट प्रत्येक व्यवहारावर "लूपिंग" करून आणि व्यवहार प्रक्रिया करण्यापूर्वी ऑपरेटरने पूर्ण केलेल्या त्याच तपासण्या करून वैधता पुरावा मोजते. प्रथम, ते प्रदान केलेल्या मर्कल पुराव्याचा वापर करून प्रेषकाचे खाते विद्यमान स्टेट रूटचा भाग असल्याची पडताळणी करते. नंतर ते प्रेषकाची शिल्लक कमी करते, त्याचा नॉन्स वाढवते, अद्ययावत खात्याच्या डेटाचा हॅश करते आणि नवीन मर्कल रूट तयार करण्यासाठी मर्कल पुराव्यासोबत जोडते. + +हा मर्कल रूट ZK-रोलअपच्या स्टेटमधील एकमेव बदल दर्शवतो: प्रेषकाची शिल्लक आणि नॉन्समध्ये बदल. हे शक्य आहे कारण खात्याचे अस्तित्व सिद्ध करण्यासाठी वापरलेला मर्कल पुरावा नवीन स्टेट रूट मिळवण्यासाठी वापरला जातो. + +सिद्ध करणारे सर्किट प्राप्तकर्त्याच्या खात्यावर समान प्रक्रिया करते. ते तपासते की प्राप्तकर्त्याचे खाते इंटरमीडिएट स्टेट रूट अंतर्गत अस्तित्वात आहे की नाही (मर्कल पुराव्याचा वापर करून), त्यांची शिल्लक वाढवते, खात्याच्या डेटाचा पुन्हा हॅश करते आणि नवीन स्टेट रूट तयार करण्यासाठी मर्कल पुराव्यासोबत जोडते. + +ही प्रक्रिया प्रत्येक व्यवहारासाठी पुनरावृत्ती होते; प्रत्येक "लूप" प्रेषकाचे खाते अद्यतनित करून एक नवीन स्टेट रूट तयार करतो आणि त्यानंतर प्राप्तकर्त्याचे खाते अद्यतनित करून एक नवीन रूट तयार करतो. स्पष्ट केल्याप्रमाणे, स्टेट रूटमधील प्रत्येक अपडेट रोलअपच्या स्टेट ट्रीचा एक भाग बदलण्याचे प्रतिनिधित्व करतो. + +ZK-सिद्ध करणारे सर्किट संपूर्ण व्यवहार बॅचवर पुनरावृत्ती करते, शेवटचा व्यवहार कार्यान्वित झाल्यानंतर अंतिम स्टेट रूटमध्ये परिणाम करणाऱ्या अद्यतनांच्या क्रमाची पडताळणी करते. शेवटचा गणना केलेला मर्कल रूट ZK-रोलअपचा सर्वात नवीन कॅनॉनिकल स्टेट रूट बनतो. + +##### पुरावा पडताळणी + +सिद्ध करणारे सर्किट स्टेट अपडेट्सची अचूकता सत्यापित केल्यानंतर, L2 ऑपरेटर गणना केलेला वैधता पुरावा L1 वरील व्हेरिफायर कॉन्ट्रॅक्टला सादर करतो. कॉन्ट्रॅक्टचे व्हेरिफिकेशन सर्किट पुराव्याच्या वैधतेची पडताळणी करते आणि पुराव्याचा भाग असलेल्या सार्वजनिक इनपुटची देखील तपासणी करते: + +- **प्री-स्टेट रूट**: ZK-रोलअपचा जुना स्टेट रूट (म्हणजे, बॅच केलेले व्यवहार कार्यान्वित होण्यापूर्वी), L2 चेनची शेवटची ज्ञात वैध स्टेट दर्शवतो. + +- **पोस्ट-स्टेट रूट**: ZK-रोलअपचा नवीन स्टेट रूट (म्हणजे, बॅच केलेल्या व्यवहारांच्या अंमलबजावणीनंतर), L2 चेनची सर्वात नवीन स्टेट दर्शवतो. पोस्ट-स्टेट रूट हा सिद्ध करणाऱ्या सर्किटमध्ये स्टेट अपडेट लागू केल्यानंतर मिळवलेला अंतिम रूट आहे. + +- **बॅच रूट**: बॅचचा मर्कल रूट, जो बॅचमधील व्यवहारांना _मर्कलाईझ_ करून आणि ट्रीच्या रूटचा हॅश करून मिळवला जातो. + +- **व्यवहार इनपुट**: सबमिट केलेल्या बॅचचा भाग म्हणून कार्यान्वित केलेल्या व्यवहारांशी संबंधित डेटा. + +जर पुरावा सर्किटला समाधान देत असेल (म्हणजे, तो वैध असेल), तर याचा अर्थ असा की वैध व्यवहारांचा एक क्रम अस्तित्वात आहे जो रोलअपला मागील स्टेटमधून (प्री-स्टेट रूटद्वारे क्रिप्टोग्राफिकली फिंगरप्रिंट केलेले) नवीन स्टेटमध्ये (पोस्ट-स्टेट रूटद्वारे क्रिप्टोग्राफिकली फिंगरप्रिंट केलेले) संक्रमण करतो. जर प्री-स्टेट रूट रोलअप कॉन्ट्रॅक्टमध्ये संग्रहित रूटशी जुळत असेल आणि पुरावा वैध असेल, तर रोलअप कॉन्ट्रॅक्ट पुराव्यातून पोस्ट-स्टेट रूट घेतो आणि रोलअपची बदललेली स्टेट दर्शवण्यासाठी त्याचे स्टेट ट्री अपडेट करतो. + +### एंट्रीज आणि एग्झिट्स {#entries-and-exits} + +वापरकर्ते L1 चेनवर तैनात केलेल्या रोलअपच्या कॉन्ट्रॅक्टमध्ये टोकन जमा करून ZK-रोलअपमध्ये प्रवेश करतात. हा व्यवहार रांगेत ठेवला जातो कारण फक्त ऑपरेटरच रोलअप कॉन्ट्रॅक्टमध्ये व्यवहार सबमिट करू शकतात. + +जर प्रलंबित डिपॉझिट रांग भरू लागली, तर ZK-रोलअप ऑपरेटर डिपॉझिट व्यवहार घेईल आणि त्यांना रोलअप कॉन्ट्रॅक्टमध्ये सबमिट करेल. एकदा वापरकर्त्याचे निधी रोलअपमध्ये आल्यावर, ते प्रक्रियेसाठी ऑपरेटरला व्यवहार पाठवून व्यवहार सुरू करू शकतात. वापरकर्ते त्यांच्या खात्याच्या डेटाचा हॅश करून, हॅश रोलअप कॉन्ट्रॅक्टला पाठवून, आणि वर्तमान स्टेट रूटविरुद्ध पडताळणी करण्यासाठी मर्कल पुरावा प्रदान करून रोलअपवरील शिल्लक सत्यापित करू शकतात. + +ZK-रोलअपमधून L1 मध्ये पैसे काढणे सोपे आहे. वापरकर्ता रोलअपवरील आपली मालमत्ता जाळण्यासाठी एका निर्दिष्ट खात्यात पाठवून बाहेर पडण्याचा व्यवहार सुरू करतो. जर ऑपरेटरने व्यवहार पुढील बॅचमध्ये समाविष्ट केला, तर वापरकर्ता ऑनचेन कॉन्ट्रॅक्टला पैसे काढण्याची विनंती सबमिट करू शकतो. या पैसे काढण्याच्या विनंतीमध्ये खालील गोष्टींचा समावेश असेल: + +- वापरकर्त्याच्या व्यवहाराचा बर्न खात्यात एका व्यवहार बॅचमध्ये समावेश असल्याचे सिद्ध करणारा मर्कल पुरावा + +- व्यवहार डेटा + +- बॅच रूट + +- जमा केलेला निधी प्राप्त करण्यासाठी L1 पत्ता + +रोलअप कॉन्ट्रॅक्ट व्यवहार डेटाचा हॅश करतो, बॅच रूट अस्तित्वात आहे की नाही हे तपासतो, आणि व्यवहार हॅश बॅच रूटचा भाग आहे की नाही हे तपासण्यासाठी मर्कल पुराव्याचा वापर करतो. त्यानंतर, कॉन्ट्रॅक्ट बाहेर पडण्याचा व्यवहार कार्यान्वित करतो आणि L1 वरील वापरकर्त्याच्या निवडलेल्या पत्त्यावर निधी पाठवतो. + +## ZK-रोलअप्स आणि EVM सुसंगतता {#zk-rollups-and-evm-compatibility} + +ऑप्टिमिस्टिक रोलअप्सच्या विपरीत, ZK-रोलअप्स [Ethereum Virtual Machine (EVM)](/developers/docs/evm/) शी सहज सुसंगत नाहीत. सर्किट्समध्ये सामान्य-उद्देशीय EVM गणना सिद्ध करणे सोप्या गणना सिद्ध करण्यापेक्षा (जसे की पूर्वी वर्णन केलेले टोकन हस्तांतरण) अधिक कठीण आणि संसाधन-केंद्रित आहे. + +तथापि, [शून्य-ज्ञान तंत्रज्ञानातील प्रगती](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now) शून्य-ज्ञान पुराव्यांमध्ये EVM गणना गुंडाळण्यात नवीन रस निर्माण करत आहे. हे प्रयत्न एक शून्य-ज्ञान EVM (zkEVM) अंमलबजावणी तयार करण्याच्या दिशेने आहेत जे प्रोग्रामच्या अंमलबजावणीची अचूकता कार्यक्षमतेने सत्यापित करू शकेल. एक zkEVM सर्किट्समध्ये सिद्ध/पडताळणीसाठी विद्यमान EVM ऑपकोड्स पुन्हा तयार करते, ज्यामुळे स्मार्ट कॉन्ट्रॅक्ट्स कार्यान्वित करणे शक्य होते. + +EVM प्रमाणे, काही इनपुटवर गणना केल्यानंतर zkEVM स्टेट्स दरम्यान संक्रमण करते. फरक हा आहे की zkEVM प्रोग्रामच्या अंमलबजावणीतील प्रत्येक चरणाची अचूकता सत्यापित करण्यासाठी शून्य-ज्ञान पुरावे देखील तयार करते. वैधता पुरावे VM च्या स्टेटला (मेमरी, स्टॅक, स्टोरेज) स्पर्श करणाऱ्या ऑपरेशन्सची अचूकता आणि गणना स्वतःच (म्हणजे, ऑपरेशनने योग्य ऑपकोड्स कॉल केले आणि ते योग्यरित्या कार्यान्वित केले का?) सत्यापित करू शकतात. + +EVM-सुसंगत ZK-रोलअप्सची ओळख विकसकांना शून्य-ज्ञान पुराव्यांच्या स्केलेबिलिटी आणि सुरक्षा हमींचा लाभ घेण्यास मदत करेल अशी अपेक्षा आहे. सर्वात महत्त्वाचे म्हणजे, मूळ Ethereum पायाभूत सुविधांसोबत सुसंगतता म्हणजे विकासक परिचित (आणि लढाई-चाचणी) साधने आणि भाषा वापरून ZK-अनुकूल dapps तयार करू शकतात. + +## ZK-रोलअप शुल्क कसे कार्य करते? {#how-do-zk-rollup-fees-work} + +ZK-रोलअपवरील व्यवहारांसाठी वापरकर्ते किती पैसे देतात हे Ethereum Mainnet प्रमाणेच गॅस शुल्कावर अवलंबून असते. तथापि, L2 वर गॅस शुल्क वेगळ्या पद्धतीने कार्य करते आणि खालील खर्चांवर प्रभावित होते: + +1. **स्टेट राइट**: Ethereum च्या स्टेटवर लिहिण्यासाठी (म्हणजे, Ethereum ब्लॉकचेनवर व्यवहार सबमिट करणे) एक निश्चित खर्च आहे. ZK-रोलअप व्यवहार बॅच करून आणि निश्चित खर्च अनेक वापरकर्त्यांमध्ये विभागून हा खर्च कमी करतात. + +2. **डेटा प्रकाशन**: ZK-रोलअप प्रत्येक व्यवहारासाठी स्टेट डेटा Ethereum वर `calldata` म्हणून प्रकाशित करतात. `calldata` चे खर्च सध्या [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) द्वारे नियंत्रित केले जातात, जे `calldata` च्या शून्य-नसलेल्या बाइट्ससाठी 16 गॅस आणि शून्य बाइट्ससाठी 4 गॅसचा खर्च निर्धारित करते. प्रत्येक व्यवहारावर दिला जाणारा खर्च त्यावर अवलंबून असतो की त्यासाठी किती `calldata` ऑनचेन पोस्ट करणे आवश्यक आहे. + +3. **L2 ऑपरेटर शुल्क**: हे रोलअप ऑपरेटरला व्यवहार प्रक्रिया करताना झालेल्या संगणकीय खर्चाची भरपाई म्हणून दिले जाणारे रक्कम आहे, जसे Ethereum Mainnet वरील [व्यवहार "प्राधान्य शुल्क (टिप्स)"](/developers/docs/gas/#how-are-gas-fees-calculated) प्रमाणे. + +4. **पुरावा निर्मिती आणि पडताळणी**: ZK-रोलअप ऑपरेटर्सना व्यवहार बॅचेससाठी वैधता पुरावे तयार करणे आवश्यक आहे, जे संसाधन-केंद्रित आहे. Mainnet वर शून्य-ज्ञान पुरावे सत्यापित करण्यासाठी देखील गॅस खर्च होतो (~ 500,000 गॅस). + +व्यवहार बॅच करण्याव्यतिरिक्त, ZK-रोलअप व्यवहार डेटा संकुचित करून वापरकर्त्यांसाठी शुल्क कमी करतात. तुम्ही Ethereum ZK-रोलअप वापरण्यासाठी किती खर्च येतो याचा [रिअल-टाइम आढावा पाहू शकता](https://l2fees.info/). + +## ZK-रोलअप Ethereum कसे मोजतात? {#scaling-ethereum-with-zk-rollups} + +### व्यवहार डेटा कॉम्प्रेशन {#transaction-data-compression} + +ZK-रोलअप्स Ethereum च्या बेस लेअरवरील थ्रूपूट वाढवतात, कम्प्युटेशन ऑफचेन घेऊन, पण स्केलिंगसाठी खरी चालना व्यवहार डेटा कॉम्प्रेशनमधून येते. Ethereum चा [ब्लॉक आकार](/developers/docs/blocks/#block-size) प्रत्येक ब्लॉकमध्ये किती डेटा असू शकतो आणि त्याद्वारे, प्रति ब्लॉक प्रक्रिया केलेल्या व्यवहारांची संख्या मर्यादित करतो. व्यवहार-संबंधित डेटा संकुचित करून, ZK-रोलअप प्रति ब्लॉक प्रक्रिया केलेल्या व्यवहारांची संख्या लक्षणीयरीत्या वाढवतात. + +ZK-रोलअप ऑप्टिमिस्टिक रोलअपपेक्षा व्यवहार डेटा अधिक चांगल्या प्रकारे संकुचित करू शकतात कारण त्यांना प्रत्येक व्यवहाराची वैधता तपासण्यासाठी आवश्यक असलेला सर्व डेटा पोस्ट करावा लागत नाही. त्यांना फक्त रोलअपवरील खाती आणि शिल्लक यांची नवीनतम स्टेट पुन्हा तयार करण्यासाठी आवश्यक असलेला किमान डेटा पोस्ट करावा लागतो. + +### रिकर्सिव्ह प्रूफ्स {#recursive-proofs} + +शून्य-ज्ञान पुराव्यांचा एक फायदा म्हणजे पुरावे इतर पुराव्यांची पडताळणी करू शकतात. उदाहरणार्थ, एक ZK-SNARK इतर ZK-SNARKs ची पडताळणी करू शकतो. अशा "पुरावा-च्या-पुराव्यांना" रिकर्सिव्ह पुरावे म्हणतात आणि ते ZK-रोलअपवरील थ्रूपूट नाटकीयरित्या वाढवतात. + +सध्या, वैधता पुरावे ब्लॉक-दर-ब्लॉक आधारावर तयार केले जातात आणि पडताळणीसाठी L1 कॉन्ट्रॅक्टला सादर केले जातात. तथापि, सिंगल ब्लॉक पुरावे सत्यापित करणे ZK-रोलअप्स साध्य करू शकणाऱ्या थ्रूपूटला मर्यादित करते कारण ऑपरेटर जेव्हा पुरावा सादर करतो तेव्हा फक्त एकच ब्लॉक अंतिम केला जाऊ शकतो. + +रिकर्सिव्ह पुरावे, तथापि, एकाच वैधता पुराव्याने अनेक ब्लॉक्स अंतिम करणे शक्य करतात. हे शक्य आहे कारण सिद्ध करणारे सर्किट अनेक ब्लॉक पुरावे रिकर्सिव्हपणे एकत्र करते जोपर्यंत एक अंतिम पुरावा तयार होत नाही. L2 ऑपरेटर हा रिकर्सिव्ह पुरावा सादर करतो, आणि जर कॉन्ट्रॅक्टने तो स्वीकारला, तर सर्व संबंधित ब्लॉक्स त्वरित अंतिम होतील. रिकर्सिव्ह पुराव्यांसह, ठराविक अंतराने Ethereum वर अंतिम केल्या जाऊ शकणाऱ्या ZK-रोलअप व्यवहारांची संख्या वाढते. + +### ZK-रोलअप्सचे फायदे आणि तोटे {#zk-rollups-pros-and-cons} + +| फायदे | बाधक | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| वैधता पुरावे ऑफचेन व्यवहारांची अचूकता सुनिश्चित करतात आणि ऑपरेटर्सना अवैध स्टेट संक्रमण कार्यान्वित करण्यापासून प्रतिबंधित करतात. | वैधता पुरावे मोजण्यासाठी आणि सत्यापित करण्यासाठी लागणारा खर्च मोठा आहे आणि त्यामुळे रोलअप वापरकर्त्यांसाठी शुल्क वाढू शकते. | +| जलद व्यवहार अंतिमत्वाची ऑफर देते कारण L1 वर वैधता पुरावे सत्यापित झाल्यावर स्टेट अपडेट्स मंजूर केले जातात. | शून्य-ज्ञान तंत्रज्ञानाच्या जटिलतेमुळे EVM-सुसंगत ZK-रोलअप तयार करणे कठीण आहे. | +| सुरक्षेसाठी विश्वासहीन क्रिप्टोग्राफिक यंत्रणांवर अवलंबून असते, [ऑप्टिमिस्टिक रोलअप्स](/developers/docs/scaling/optimistic-rollups/#optimistic-pros-and-cons) प्रमाणे प्रोत्साहनित कलाकारांच्या प्रामाणिकपणावर नाही. | वैधता पुरावे तयार करण्यासाठी विशेष हार्डवेअरची आवश्यकता असते, ज्यामुळे काही पक्षांद्वारे चेनवर केंद्रीकृत नियंत्रण वाढू शकते. | +| ऑफचेन स्टेट पुनर्प्राप्त करण्यासाठी आवश्यक डेटा L1 वर संग्रहित करते, ज्यामुळे सुरक्षा, सेन्सॉरशिप-प्रतिरोध आणि विकेंद्रीकरण सुनिश्चित होते. | केंद्रीकृत ऑपरेटर (सिक्वेन्सर) व्यवहारांच्या क्रमावर प्रभाव टाकू शकतात. | +| वापरकर्त्यांना अधिक भांडवली कार्यक्षमतेचा फायदा होतो आणि ते L2 मधून विलंब न करता निधी काढू शकतात. | हार्डवेअर आवश्यकता सहभागींची संख्या कमी करू शकतात जे चेनला प्रगती करण्यास भाग पाडू शकतात, ज्यामुळे दुर्भावनापूर्ण ऑपरेटर्सकडून रोलअपची स्टेट फ्रीझ होण्याचा आणि वापरकर्त्यांना सेन्सॉर करण्याचा धोका वाढतो. | +| लाइव्हनेस गृहितकांवर अवलंबून नाही आणि वापरकर्त्यांना त्यांचे निधी संरक्षित करण्यासाठी चेनची वैधता तपासण्याची आवश्यकता नाही. | काही सिद्धता प्रणालींना (उदा., ZK-SNARK) एका विश्वसनीय सेटअपची आवश्यकता असते, जे चुकीच्या पद्धतीने हाताळल्यास, संभाव्यतः ZK-रोलअपच्या सुरक्षा मॉडेलला धोका निर्माण करू शकते. | +| चांगले डेटा कॉम्प्रेशन Ethereum वर `calldata` प्रकाशित करण्याचा खर्च कमी करण्यास आणि वापरकर्त्यांसाठी रोलअप शुल्क कमी करण्यास मदत करू शकते. | | + +### ZK-रोलअपचे एक दृश्यात्मक स्पष्टीकरण {#zk-video} + +Finematics ला ZK-रोलअप समजावून सांगताना पहा: + + + +## zkEVM वर कोण काम करत आहे? {#zkevm-projects} + +zkEVMs वर काम करणाऱ्या प्रकल्पांमध्ये हे समाविष्ट आहे: + +- **[zkEVM](https://github.com/privacy-scaling-explorations/zkevm-specs)** - _zkEVM हा Ethereum फाउंडेशनद्वारे निधीबद्ध केलेला एक प्रकल्प आहे, जो EVM-सुसंगत ZK-रोलअप आणि Ethereum ब्लॉक्ससाठी वैधता पुरावे तयार करण्याची यंत्रणा विकसित करतो._ + +- **[Polygon zkEVM](https://polygon.technology/solutions/polygon-zkevm)** - _हा Ethereum mainnet वरील एक विकेंद्रित ZK Rollup आहे जो शून्य-ज्ञान Ethereum Virtual Machine (zkEVM) वर काम करतो, जो शून्य-ज्ञान-पुरावा प्रमाणीकरणासह स्मार्ट कॉन्ट्रॅक्ट्ससह Ethereum व्यवहारांना पारदर्शकपणे कार्यान्वित करतो._ + +- **[Scroll](https://scroll.io/blog/zkEVM)** - _Scroll ही एक तंत्रज्ञान-चालित कंपनी आहे जी Ethereum साठी एक मूळ zkEVM लेअर 2 सोल्यूशन तयार करण्यावर काम करत आहे._ + +- **[Taiko](https://taiko.xyz)** - _Taiko एक विकेंद्रित, Ethereum-समकक्ष ZK-रोलअप आहे (एक [Type 1 ZK-EVM](https://vitalik.eth.limo/general/2022/08/04/zkevm.html))._ + +- **[ZKsync](https://docs.zksync.io/)** - _ZKsync Era हा Matter Labs द्वारे तयार केलेला EVM-सुसंगत ZK Rollup आहे, जो त्याच्या स्वतःच्या zkEVM द्वारे चालतो._ + +- **[Starknet](https://starkware.co/starknet/)** - _StarkNet हे StarkWare द्वारे तयार केलेले EVM-सुसंगत लेअर 2 स्केलिंग सोल्यूशन आहे._ + +- **[Morph](https://www.morphl2.io/)** - _Morph हे एक हायब्रिड रोलअप स्केलिंग सोल्यूशन आहे जे लेअर 2 स्टेट आव्हान समस्येचे निराकरण करण्यासाठी zk-proof चा वापर करते._ + +- **[Linea](https://linea.build)** - _Linea हे Consensys द्वारे तयार केलेले Ethereum-समकक्ष zkEVM लेअर 2 आहे, जे Ethereum इकोसिस्टमशी पूर्णपणे सुसंगत आहे._ + +## ZK-रोलअप्सवर अधिक वाचन {#further-reading-on-zk-rollups} + +- [शून्य-ज्ञान रोलअप्स काय आहेत?](https://coinmarketcap.com/alexandria/glossary/zero-knowledge-rollups) +- [शून्य-ज्ञान रोलअप्स काय आहेत?](https://alchemy.com/blog/zero-knowledge-rollups) +- [इथेरियम रोलअप्ससाठी व्यावहारिक मार्गदर्शक](https://web.archive.org/web/20241108192208/https://research.2077.xyz/the-practical-guide-to-ethereum-rollups) +- [STARKs विरुद्ध SNARKs](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/) +- [zkEVM काय आहे?](https://www.alchemy.com/overviews/zkevm) +- [ZK-EVM प्रकार: Ethereum-समकक्ष, EVM-समकक्ष, प्रकार 1, प्रकार 4, आणि इतर गुप्त बझवर्ड्स](https://taiko.mirror.xyz/j6KgY8zbGTlTnHRFGW6ZLVPuT0IV0_KmgowgStpA0K4) +- [zkEVM चा परिचय](https://hackmd.io/@yezhang/S1_KMMbGt) +- [ZK-EVM L2s काय आहेत?](https://linea.mirror.xyz/qD18IaQ4BROn_Y40EBMTUTdJHYghUtdECscSWyMvm8M) +- [अप्रतिम-zkEVM संसाधने](https://github.com/LuozhuZhang/awesome-zkevm) +- [ZK-SNARKS पडद्याआड](https://vitalik.eth.limo/general/2017/02/01/zk_snarks.html) +- [SNARKs कसे शक्य आहेत?](https://vitalik.eth.limo/general/2021/01/26/snarks.html) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/anatomy/index.md b/public/content/translations/mr/developers/docs/smart-contracts/anatomy/index.md new file mode 100644 index 00000000000..d99374b9158 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/anatomy/index.md @@ -0,0 +1,657 @@ +--- +title: "स्मार्ट करारांची रचना" +description: "स्मार्ट कराराच्या रचनेचा सखोल अभ्यास – फंक्शन्स, डेटा आणि व्हेरिएबल्स." +lang: mr +--- + +स्मार्ट करार हा एक प्रोग्राम आहे जो Ethereum वरील एका पत्त्यावर (address) चालतो. ते डेटा आणि फंक्शन्सचे बनलेले असतात जे व्यवहार (transaction) प्राप्त झाल्यावर कार्यान्वित होऊ शकतात. स्मार्ट करार कशाने बनलेला आहे याचा आढावा येथे आहे. + +## पूर्वतयारी {#prerequisites} + +आपण प्रथम [स्मार्ट करार](/developers/docs/smart-contracts/) बद्दल वाचले असल्याची खात्री करा. हा दस्तऐवज असे गृहीत धरतो की आपण आधीच JavaScript किंवा Python सारख्या प्रोग्रामिंग भाषांशी परिचित आहात. + +## डेटा {#data} + +कोणताही करार डेटा एका स्थानावर नियुक्त करणे आवश्यक आहे: एकतर `storage` किंवा `memory` मध्ये. स्मार्ट करारामध्ये स्टोरेजमध्ये बदल करणे महाग आहे, त्यामुळे तुमचा डेटा कोठे राहावा याचा विचार करणे आवश्यक आहे. + +### स्टोरेज {#storage} + +पर्सिस्टंट डेटाला स्टोरेज म्हणून संबोधले जाते आणि ते स्टेट व्हेरिएबल्सद्वारे दर्शविले जाते. ही मूल्ये कायमस्वरूपी ब्लॉकचेनवर संग्रहित केली जातात. तुम्ही प्रकार घोषित करणे आवश्यक आहे जेणेकरून करार संकलित (compile) झाल्यावर त्याला ब्लॉकचेनवर किती स्टोरेजची आवश्यकता आहे याचा मागोवा ठेवू शकेल. + +```solidity +// सॉलिडिटी उदाहरण +contract SimpleStorage { + uint storedData; // स्टेट व्हेरिएबल + // ... +} +``` + +```python +# Vyper उदाहरण +storedData: int128 +``` + +जर तुम्ही आधीच ऑब्जेक्ट-ओरिएंटेड भाषा प्रोग्राम केल्या असतील, तर तुम्ही बहुतांश प्रकारांशी परिचित असाल. तथापि, जर तुम्ही Ethereum विकासासाठी नवीन असाल तर `address` तुमच्यासाठी नवीन असावा. + +एक `address` प्रकार Ethereum पत्ता धारण करू शकतो जो 20 बाइट्स किंवा 160 बिट्सच्या समान असतो. हे अग्रगण्य 0x सह हेक्साडेसिमल नोटेशनमध्ये परत येते. + +इतर प्रकारांमध्ये हे समाविष्ट आहे: + +- बुलियन +- पूर्णांक +- फिक्स्ड पॉइंट नंबर्स +- निश्चित-आकाराचे बाइट अॅरे +- डायनॅमिक आकाराचे बाइट अॅरे +- रेशनल आणि पूर्णांक लिटरल्स +- स्ट्रिंग लिटरल्स +- हेक्साडेसिमल लिटरल्स +- एनम्स + +अधिक स्पष्टीकरणासाठी, डॉक्सवर एक नजर टाका: + +- [Vyper प्रकार पहा](https://docs.vyperlang.org/en/v0.1.0-beta.6/types.html#value-types) +- [Solidity प्रकार पहा](https://docs.soliditylang.org/en/latest/types.html#value-types) + +### मेमरी {#memory} + +जी मूल्ये केवळ करार फंक्शनच्या अंमलबजावणीच्या जीवनकाळासाठी संग्रहित केली जातात त्यांना मेमरी व्हेरिएबल्स म्हणतात. हे ब्लॉकचेनवर कायमस्वरूपी संग्रहित नसल्यामुळे, ते वापरण्यासाठी खूप स्वस्त आहेत. + +EVM डेटा (स्टोरेज, मेमरी आणि स्टॅक) कसे संग्रहित करते याबद्दल [Solidity डॉक्स](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#storage-memory-and-the-stack) मध्ये अधिक जाणून घ्या. + +### एनव्हायरनमेंट व्हेरिएबल्स {#environment-variables} + +आपण आपल्या करारावर परिभाषित केलेल्या व्हेरिएबल्सव्यतिरिक्त, काही विशेष ग्लोबल व्हेरिएबल्स आहेत. ते प्रामुख्याने ब्लॉकचेन किंवा सध्याच्या व्यवहाराबद्दल माहिती प्रदान करण्यासाठी वापरले जातात. + +उदाहरणे: + +| **प्रॉप** | **स्टेट व्हेरिएबल** | **वर्णन** | +| ----------------- | ------------------- | --------------------------------------------- | +| `block.timestamp` | uint256 | सध्याचा ब्लॉक इपॉक टाइमस्टॅम्प | +| `msg.sender` | पत्ता | संदेशाचा प्रेषक (चालू कॉल) | + +## फंक्शन्स {#functions} + +अत्यंत सोप्या भाषेत सांगायचे झाल्यास, फंक्शन्स येणाऱ्या व्यवहारांना प्रतिसाद म्हणून माहिती मिळवू शकतात किंवा सेट करू शकतात. + +फंक्शन कॉलचे दोन प्रकार आहेत: + +- `internal` – हे EVM कॉल तयार करत नाहीत + - अंतर्गत फंक्शन्स आणि स्टेट व्हेरिएबल्सना फक्त अंतर्गतच प्रवेश केला जाऊ शकतो (म्हणजे, चालू करारातून किंवा त्यातून मिळवलेल्या करारांमधून) +- `external` – हे EVM कॉल तयार करतात + - बाह्य फंक्शन्स करार इंटरफेसचा भाग आहेत, याचा अर्थ ते इतर करारांमधून आणि व्यवहारांद्वारे कॉल केले जाऊ शकतात. एक बाह्य फंक्शन `f` अंतर्गत कॉल केले जाऊ शकत नाही (म्हणजे, `f()` कार्य करत नाही, परंतु `this.f()` कार्य करते). + +ते `public` किंवा `private` देखील असू शकतात + +- `public` फंक्शन्स कराराच्या आतून अंतर्गत किंवा संदेशांद्वारे बाह्यरित्या कॉल केले जाऊ शकतात +- `private` फंक्शन्स फक्त त्या करारासाठी दिसतात ज्यात ते परिभाषित केले आहेत आणि व्युत्पन्न करारांमध्ये नाहीत + +फंक्शन्स आणि स्टेट व्हेरिएबल्स दोन्ही सार्वजनिक किंवा खाजगी केले जाऊ शकतात + +करारावरील स्टेट व्हेरिएबल अपडेट करण्यासाठी येथे एक फंक्शन आहे: + +```solidity +// Solidity उदाहरण +function update_name(string value) public { + dapp_name = value; +} +``` + +- `string` प्रकारचा पॅरामीटर `value` फंक्शनमध्ये पास केला जातो: `update_name` +- हे `सार्वजनिक` म्हणून घोषित केले आहे, म्हणजे कोणीही त्यात प्रवेश करू शकतो +- हे `व्ह्यू` म्हणून घोषित केलेले नाही, त्यामुळे ते कराराची स्थिती सुधारित करू शकते + +### व्ह्यू फंक्शन्स {#view-functions} + +ही फंक्शन्स कराराच्या डेटाच्या स्थितीमध्ये बदल न करण्याचे वचन देतात. सामान्य उदाहरणे म्हणजे "गेटर" फंक्शन्स – उदाहरणार्थ, तुम्ही याचा वापर वापरकर्त्याची शिल्लक मिळवण्यासाठी करू शकता. + +```solidity +// सॉलिडिटी उदाहरण +function balanceOf(address _owner) public view returns (uint256 _balance) { + return ownerPizzaCount[_owner]; +} +``` + +```python +dappName: public(string) + +@view +@public +def readName() -> string: + return dappName +``` + +स्टेट सुधारित करणे म्हणजे काय: + +1. स्टेट व्हेरिएबल्समध्ये लिहिणे. +2. [इव्हेंट्स एमिट करणे](https://docs.soliditylang.org/en/v0.7.0/contracts.html#events). +3. [इतर करार तयार करणे](https://docs.soliditylang.org/en/v0.7.0/control-structures.html#creating-contracts). +4. `selfdestruct` वापरणे. +5. कॉलद्वारे इथर पाठवणे. +6. `व्ह्यू` किंवा `प्युअर` म्हणून चिन्हांकित नसलेले कोणतेही फंक्शन कॉल करणे. +7. लो-लेव्हल कॉल्स वापरणे. +8. विशिष्ट ऑपकोड असलेले इनलाइन असेंब्ली वापरणे. + +### कन्स्ट्रक्टर फंक्शन्स {#constructor-functions} + +`constructor` फंक्शन्स फक्त एकदाच कार्यान्वित होतात जेव्हा करार प्रथम तैनात केला जातो. अनेक वर्ग-आधारित प्रोग्रामिंग भाषांमधील `कन्स्ट्रक्टर` प्रमाणे, ही फंक्शन्स अनेकदा स्टेट व्हेरिएबल्सना त्यांच्या निर्दिष्ट मूल्यांमध्ये सुरू करतात. + +```solidity +// सॉलिडिटी उदाहरण +// कराराचा डेटा सुरू करते, `मालक` सेट करते +// करार निर्मात्याच्या पत्त्यावर. +constructor() public { + // सर्व स्मार्ट करार त्यांची कार्ये सुरू करण्यासाठी बाह्य व्यवहारांवर अवलंबून असतात. + // `msg` एक ग्लोबल व्हेरिएबल आहे ज्यात दिलेल्या व्यवहारावरील संबंधित डेटा समाविष्ट असतो, + // जसे की प्रेषकाचा पत्ता आणि व्यवहारामध्ये समाविष्ट असलेले ETH मूल्य. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + owner = msg.sender; +} +``` + +```python +# Vyper उदाहरण + +@external +def __init__(_beneficiary: address, _bidding_time: uint256): + self.beneficiary = _beneficiary + self.auctionStart = block.timestamp + self.auctionEnd = self.auctionStart + _bidding_time +``` + +### अंगभूत फंक्शन्स {#built-in-functions} + +आपण आपल्या करारावर परिभाषित केलेल्या व्हेरिएबल्स आणि फंक्शन्स व्यतिरिक्त, काही विशेष अंगभूत फंक्शन्स आहेत. सर्वात स्पष्ट उदाहरण आहे: + +- `address.send()` – Solidity +- `send(address)` – Vyper + +हे करारांना इतर खात्यांवर ETH पाठविण्याची परवानगी देतात. + +## फंक्शन्स लिहिणे {#writing-functions} + +तुमच्या फंक्शनला आवश्यक आहे: + +- पॅरामीटर व्हेरिएबल आणि प्रकार (जर ते पॅरामीटर्स स्वीकारत असेल तर) +- अंतर्गत/बाह्य ची घोषणा +- प्युअर/व्ह्यू/पेएबल ची घोषणा +- रिटर्न्स प्रकार (जर ते मूल्य परत करत असेल तर) + +```solidity +pragma solidity >=0.4.0 <=0.6.0; + +contract ExampleDapp { + string dapp_name; // स्टेट व्हेरिएबल + + // जेव्हा करार तैनात केला जातो आणि मूल्य सुरू करतो तेव्हा कॉल केला जातो + constructor() public { + dapp_name = "माझे उदाहरण dapp"; + } + + // फंक्शन मिळवा + function read_name() public view returns(string) { + return dapp_name; + } + + // फंक्शन सेट करा + function update_name(string value) public { + dapp_name = value; + } +} +``` + +एक संपूर्ण करार काहीसा असा दिसू शकतो. येथे `कन्स्ट्रक्टर` फंक्शन `dapp_name` व्हेरिएबलसाठी प्रारंभिक मूल्य प्रदान करते. + +## इव्हेंट्स आणि लॉग {#events-and-logs} + +इव्हेंट्स तुमच्या स्मार्ट कराराला तुमच्या फ्रंटएंड किंवा इतर सदस्यत्व घेतलेल्या ॲप्लिकेशन्ससह संवाद साधण्यास सक्षम करतात. एकदा व्यवहार प्रमाणित झाल्यावर आणि ब्लॉकमध्ये जोडला गेल्यावर, स्मार्ट करार इव्हेंट एमिट करू शकतात आणि माहिती लॉग करू शकतात, ज्यावर फ्रंटएंड नंतर प्रक्रिया आणि उपयोग करू शकतो. + +## भाष्य केलेली उदाहरणे {#annotated-examples} + +ही Solidity मध्ये लिहिलेली काही उदाहरणे आहेत. तुम्हाला कोडसोबत खेळायचे असल्यास, तुम्ही [Remix](http://remix.ethereum.org) मध्ये त्यांच्याशी संवाद साधू शकता. + +### हॅलो वर्ल्ड {#hello-world} + +```solidity +// सिमेंटिक व्हर्जनिंग वापरून Solidity चे व्हर्जन निर्दिष्ट करते. +// अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.5.10; + +// `HelloWorld` नावाच्या कराराची व्याख्या करते. +// करार म्हणजे फंक्शन्स आणि डेटा (त्याची स्थिती) यांचा संग्रह. +// एकदा तैनात केल्यावर, करार Ethereum ब्लॉकचेनवरील एका विशिष्ट पत्त्यावर राहतो. +// अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + // `string` प्रकाराचे `message` नावाचे स्टेट व्हेरिएबल घोषित करते. + // स्टेट व्हेरिएबल्स म्हणजे अशी व्हेरिएबल्स ज्यांची मूल्ये करार स्टोरेजमध्ये कायमस्वरूपी संग्रहित केली जातात. + // `public` कीवर्ड व्हेरिएबल्सना कराराच्या बाहेरून प्रवेश करण्यायोग्य बनवतो + // आणि एक फंक्शन तयार करतो जे इतर करार किंवा क्लायंट मूल्यामध्ये प्रवेश करण्यासाठी कॉल करू शकतात. + string public message; + + // अनेक वर्ग-आधारित ऑब्जेक्ट-ओरिएंटेड भाषांप्रमाणे, कन्स्ट्रक्टर हे + // एक विशेष फंक्शन आहे जे केवळ करार निर्मितीवर कार्यान्वित केले जाते. + // कन्स्ट्रक्टरचा वापर कराराचा डेटा सुरू करण्यासाठी केला जातो. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) public { + // `initMessage` हे स्ट्रिंग वितर्क स्वीकारते आणि मूल्य सेट करते + // कराराच्या `message` स्टोरेज व्हेरिएबलमध्ये). + message = initMessage; + } + + // एक सार्वजनिक फंक्शन जे स्ट्रिंग वितर्क स्वीकारते + // आणि `message` स्टोरेज व्हेरिएबल अपडेट करते. + function update(string memory newMessage) public { + message = newMessage; + } +} +``` + +### टोकन {#token} + +```solidity +pragma solidity ^0.5.10; + +contract Token { + // `पत्ता` हा ईमेल पत्त्याच्या तुलनेत आहे - तो Ethereum वरील खाते ओळखण्यासाठी वापरला जातो. + // पत्ते स्मार्ट करार किंवा बाह्य (वापरकर्ता) खात्यांचे प्रतिनिधित्व करू शकतात. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/types.html#address + address public owner; + + // `मॅपिंग` ही मूलत: हॅश टेबल डेटा संरचना आहे. + // हे `मॅपिंग` एका पत्त्याला (टोकन धारक) एक अनसाईन्ड पूर्णांक (टोकन शिल्लक) नियुक्त करते. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/types.html#mapping-types + mapping (address => uint) public balances; + + // इव्हेंट्स ब्लॉकचेनवरील क्रियाकलाप लॉग करण्याची परवानगी देतात. + // Ethereum क्लायंट करार स्थितीतील बदलांवर प्रतिक्रिया देण्यासाठी इव्हेंट्स ऐकू शकतात. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#events + event Transfer(address from, address to, uint amount); + + // कराराचा डेटा सुरू करते, `मालक` सेट करते + // करार निर्मात्याच्या पत्त्यावर. + constructor() public { + // सर्व स्मार्ट करार त्यांची कार्ये सुरू करण्यासाठी बाह्य व्यवहारांवर अवलंबून असतात. + // `msg` एक ग्लोबल व्हेरिएबल आहे ज्यात दिलेल्या व्यवहारावरील संबंधित डेटा समाविष्ट असतो, + // जसे की प्रेषकाचा पत्ता आणि व्यवहारामध्ये समाविष्ट असलेले ETH मूल्य. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/units-and-global-variables.html#block-and-transaction-properties + owner = msg.sender; + } + + // नवीन टोकनची रक्कम तयार करते आणि ती पत्त्यावर पाठवते. + function mint(address receiver, uint amount) public { + // `require` ही एक नियंत्रण रचना आहे जी विशिष्ट अटी लागू करण्यासाठी वापरली जाते. + // जर `require` विधान `false` म्हणून मूल्यांकन केले जाते, तर एक अपवाद ट्रिगर होतो, + // जो चालू कॉल दरम्यान स्थितीत केलेले सर्व बदल परत करतो. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + + // फक्त करार मालक हे फंक्शन कॉल करू शकतो + require(msg.sender == owner, "तुम्ही मालक नाही."); + + // टोकनची कमाल रक्कम लागू करते + require(amount < 1e60, "कमाल जारीकरण ओलांडले"); + + // `amount` ने `receiver` ची शिल्लक वाढवते + balances[receiver] += amount; + } + + // कोणत्याही कॉलरकडून विद्यमान टोकनची रक्कम पत्त्यावर पाठवते. + function transfer(address receiver, uint amount) public { + // प्रेषकाकडे पाठवण्यासाठी पुरेसे टोकन असणे आवश्यक आहे + require(amount <= balances[msg.sender], "अपुरी शिल्लक."); + + // दोन पत्त्यांची टोकन शिल्लक समायोजित करते + balances[msg.sender] -= amount; + balances[receiver] += amount; + + // पूर्वी परिभाषित केलेला इव्हेंट एमिट करते + emit Transfer(msg.sender, receiver, amount); + } +} +``` + +### युनिक डिजिटल मालमत्ता {#unique-digital-asset} + +```solidity +pragma solidity ^0.5.10; + +// चालू करारामध्ये इतर फाईल्समधून चिन्हे आयात करते. +// या प्रकरणात, OpenZeppelin कडून मदतनीस करारांची मालिका. +// अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#importing-other-source-files + +import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol"; +import "../node_modules/@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; +import "../node_modules/@openzeppelin/contracts/introspection/ERC165.sol"; +import "../node_modules/@openzeppelin/contracts/math/SafeMath.sol"; + +// `is` कीवर्ड बाह्य करारांमधून फंक्शन्स आणि कीवर्ड्स वारसा म्हणून घेण्यासाठी वापरला जातो. +// या प्रकरणात, `CryptoPizza` `IERC721` आणि `ERC165` करारांमधून वारसा घेते. +// अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#inheritance +contract CryptoPizza is IERC721, ERC165 { + // अंकगणित क्रिया सुरक्षितपणे करण्यासाठी OpenZeppelin च्या SafeMath लायब्ररीचा वापर करते. + // अधिक जाणून घ्या: https://docs.openzeppelin.com/contracts/2.x/api/math#SafeMath + using SafeMath for uint256; + + // Solidity मधील स्थिर स्टेट व्हेरिएबल्स इतर भाषांसारखेच आहेत + // परंतु तुम्ही एका अभिव्यक्तीतून नियुक्त करणे आवश्यक आहे जे संकलन वेळी स्थिर असते. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constant-state-variables + uint256 constant dnaDigits = 10; + uint256 constant dnaModulus = 10 ** dnaDigits; + bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; + + // स्ट्रक्ट प्रकार तुम्हाला तुमचा स्वतःचा प्रकार परिभाषित करू देतात + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/types.html#structs + struct Pizza { + string name; + uint256 dna; + } + + // Pizza स्ट्रक्ट्सचा एक रिकामा अॅरे तयार करते + Pizza[] public pizzas; + + // पिझ्झा आयडीपासून त्याच्या मालकाच्या पत्त्यापर्यंत मॅपिंग + mapping(uint256 => address) public pizzaToOwner; + + // मालकाच्या पत्त्यापासून मालकीच्या टोकनच्या संख्येपर्यंत मॅपिंग + mapping(address => uint256) public ownerPizzaCount; + + // टोकन आयडीपासून मंजूर पत्त्यापर्यंत मॅपिंग + mapping(uint256 => address) pizzaApprovals; + + // तुम्ही मॅपिंग नेस्ट करू शकता, हे उदाहरण मालकाचे ऑपरेटर मंजुरीसाठी मॅप करते + mapping(address => mapping(address => bool)) private operatorApprovals; + + // स्ट्रिंग (नाव) आणि DNA वरून यादृच्छिक Pizza तयार करण्यासाठी अंतर्गत फंक्शन + function _createPizza(string memory _name, uint256 _dna) + // `अंतर्गत` कीवर्डचा अर्थ असा आहे की हे फंक्शन फक्त दिसते + // या करारामध्ये आणि या करारातून मिळविलेल्या करारांमध्ये + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#visibility-and-getters + internal + // `isUnique` हे एक फंक्शन मॉडिफायर आहे जे पिझ्झा आधीच अस्तित्वात आहे की नाही हे तपासते + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html#function-modifiers + isUnique(_name, _dna) + { + // Pizzas च्या अॅरेमध्ये Pizza जोडते आणि आयडी मिळवते + uint256 id = SafeMath.sub(pizzas.push(Pizza(_name, _dna)), 1); + + // Pizza मालक सध्याच्या वापरकर्त्यासारखाच आहे हे तपासते + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/control-structures.html#error-handling-assert-require-revert-and-exceptions + + // लक्षात घ्या की address(0) हा शून्य पत्ता आहे, + // हे सूचित करते की pizza[id] अद्याप विशिष्ट वापरकर्त्याला वाटप केलेले नाही. + + assert(pizzaToOwner[id] == address(0)); + + // Pizza ला मालकाशी मॅप करते + pizzaToOwner[id] = msg.sender; + ownerPizzaCount[msg.sender] = SafeMath.add( + ownerPizzaCount[msg.sender], + 1 + ); + } + + // स्ट्रिंग (नाव) वरून यादृच्छिक Pizza तयार करते + function createRandomPizza(string memory _name) public { + uint256 randDna = generateRandomDna(_name, msg.sender); + _createPizza(_name, randDna); + } + + // स्ट्रिंग (नाव) आणि मालकाच्या (निर्माता) पत्त्यावरून यादृच्छिक DNA तयार करते + function generateRandomDna(string memory _str, address _owner) + public + // `प्युअर` म्हणून चिन्हांकित केलेली फंक्शन्स स्टेटमधून वाचण्याचे किंवा त्यात बदल न करण्याचे वचन देतात + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#pure-functions + pure + returns (uint256) + { + // स्ट्रिंग (नाव) + पत्ता (मालक) पासून यादृच्छिक uint तयार करते + uint256 rand = uint256(keccak256(abi.encodePacked(_str))) + + uint256(_owner); + rand = rand % dnaModulus; + return rand; + } + + // मालकाने शोधलेल्या Pizzas चा अॅरे परत करते + function getPizzasByOwner(address _owner) + public + // `व्ह्यू` म्हणून चिन्हांकित केलेली फंक्शन्स स्टेटमध्ये बदल न करण्याचे वचन देतात + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#view-functions + view + returns (uint256[] memory) + { + // केवळ यासाठी मूल्ये संग्रहित करण्यासाठी `मेमरी` स्टोरेज स्थान वापरते + // या फंक्शन कॉलचे जीवनचक्र. + // अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/introduction-to-smart-contracts.html#storage-memory-and-the-stack + uint256[] memory result = new uint256[](ownerPizzaCount[_owner]); + uint256 counter = 0; + for (uint256 i = 0; i < pizzas.length; i++) { + if (pizzaToOwner[i] == _owner) { + result[counter] = i; + counter++; + } + } + return result; + } + + // Pizza आणि मालकी दुसऱ्या पत्त्यावर हस्तांतरित करते + function transferFrom(address _from, address _to, uint256 _pizzaId) public { + require(_from != address(0) && _to != address(0), "अवैध पत्ता."); + require(_exists(_pizzaId), "पिझ्झा अस्तित्वात नाही."); + require(_from != _to, "त्याच पत्त्यावर हस्तांतरित करू शकत नाही."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "पत्ता मंजूर नाही."); + + ownerPizzaCount[_to] = SafeMath.add(ownerPizzaCount[_to], 1); + ownerPizzaCount[_from] = SafeMath.sub(ownerPizzaCount[_from], 1); + pizzaToOwner[_pizzaId] = _to; + + // आयात केलेल्या IERC721 करारामध्ये परिभाषित केलेला इव्हेंट एमिट करते + emit Transfer(_from, _to, _pizzaId); + _clearApproval(_to, _pizzaId); + } + + /** + * दिलेल्या टोकन आयडीची मालकी सुरक्षितपणे दुसऱ्या पत्त्यावर हस्तांतरित करते + * जर लक्ष्य पत्ता करार असेल, तर त्याने `onERC721Received` लागू केले पाहिजे, + * जे सुरक्षित हस्तांतरणावर कॉल केले जाते, आणि जादूई मूल्य परत करते + * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; + * अन्यथा, हस्तांतरण परत केले जाते. + */ + function safeTransferFrom(address from, address to, uint256 pizzaId) + public + { + // solium-disable-next-line arg-overflow + this.safeTransferFrom(from, to, pizzaId, ""); + } + + /** + * दिलेल्या टोकन आयडीची मालकी सुरक्षितपणे दुसऱ्या पत्त्यावर हस्तांतरित करते + * जर लक्ष्य पत्ता करार असेल, तर त्याने `onERC721Received` लागू केले पाहिजे, + * जे सुरक्षित हस्तांतरणावर कॉल केले जाते, आणि जादूई मूल्य परत करते + * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; + * अन्यथा, हस्तांतरण परत केले जाते. + */ + function safeTransferFrom( + address from, + address to, + uint256 pizzaId, + bytes memory _data + ) public { + this.transferFrom(from, to, pizzaId); + require(_checkOnERC721Received(from, to, pizzaId, _data), "onERC721Received लागू करणे आवश्यक आहे."); + } + + /** + * लक्ष्य पत्त्यावर `onERC721Received` सुरू करण्यासाठी अंतर्गत फंक्शन + * जर लक्ष्य पत्ता करार नसेल तर कॉल कार्यान्वित होत नाही + */ + function _checkOnERC721Received( + address from, + address to, + uint256 pizzaId, + bytes memory _data + ) internal returns (bool) { + if (!isContract(to)) { + return true; + } + + bytes4 retval = IERC721Receiver(to).onERC721Received( + msg.sender, + from, + pizzaId, + _data + ); + return (retval == _ERC721_RECEIVED); + } + + // पिझ्झा जाळतो - टोकन पूर्णपणे नष्ट करतो + // `बाह्य` फंक्शन मॉडिफायरचा अर्थ असा आहे की हे फंक्शन आहे + // करार इंटरफेसचा भाग आणि इतर करार त्याला कॉल करू शकतात + function burn(uint256 _pizzaId) external { + require(msg.sender != address(0), "अवैध पत्ता."); + require(_exists(_pizzaId), "पिझ्झा अस्तित्वात नाही."); + require(_isApprovedOrOwner(msg.sender, _pizzaId), "पत्ता मंजूर नाही."); + + ownerPizzaCount[msg.sender] = SafeMath.sub( + ownerPizzaCount[msg.sender], + 1 + ); + pizzaToOwner[_pizzaId] = address(0); + } + + // पत्त्यानुसार Pizzas ची संख्या परत करते + function balanceOf(address _owner) public view returns (uint256 _balance) { + return ownerPizzaCount[_owner]; + } + + // आयडीनुसार सापडलेल्या Pizza चा मालक परत करते + function ownerOf(uint256 _pizzaId) public view returns (address _owner) { + address owner = pizzaToOwner[_pizzaId]; + require(owner != address(0), "अवैध पिझ्झा आयडी."); + return owner; + } + + // Pizza ची मालकी हस्तांतरित करण्यासाठी दुसऱ्या पत्त्याला मंजूर करते + function approve(address _to, uint256 _pizzaId) public { + require(msg.sender == pizzaToOwner[_pizzaId], "पिझ्झा मालक असणे आवश्यक आहे."); + pizzaApprovals[_pizzaId] = _to; + emit Approval(msg.sender, _to, _pizzaId); + } + + // विशिष्ट Pizza साठी मंजूर केलेला पत्ता परत करते + function getApproved(uint256 _pizzaId) + public + view + returns (address operator) + { + require(_exists(_pizzaId), "पिझ्झा अस्तित्वात नाही."); + return pizzaApprovals[_pizzaId]; + } + + /** + * दिलेल्या टोकन आयडीची चालू मंजुरी साफ करण्यासाठी खाजगी फंक्शन + * दिलेला पत्ता खरोखर टोकनचा मालक नसल्यास परत करते + */ + function _clearApproval(address owner, uint256 _pizzaId) private { + require(pizzaToOwner[_pizzaId] == owner, "पिझ्झा मालक असणे आवश्यक आहे."); + require(_exists(_pizzaId), "पिझ्झा अस्तित्वात नाही."); + if (pizzaApprovals[_pizzaId] != address(0)) { + pizzaApprovals[_pizzaId] = address(0); + } + } + + /* + * दिलेल्या ऑपरेटरची मंजुरी सेट किंवा अनसेट करते + * ऑपरेटरला त्यांच्या वतीने प्रेषकाचे सर्व टोकन हस्तांतरित करण्याची परवानगी आहे + */ + function setApprovalForAll(address to, bool approved) public { + require(to != msg.sender, "स्वतःचा पत्ता मंजूर करू शकत नाही"); + operatorApprovals[msg.sender][to] = approved; + emit ApprovalForAll(msg.sender, to, approved); + } + + // दिलेला मालक ऑपरेटरला मंजूर करतो की नाही हे सांगते + function isApprovedForAll(address owner, address operator) + public + view + returns (bool) + { + return operatorApprovals[owner][operator]; + } + + // Pizza ची मालकी घेते - फक्त मंजूर वापरकर्त्यांसाठी + function takeOwnership(uint256 _pizzaId) public { + require(_isApprovedOrOwner(msg.sender, _pizzaId), "पत्ता मंजूर नाही."); + address owner = this.ownerOf(_pizzaId); + this.transferFrom(owner, msg.sender, _pizzaId); + } + + // Pizza अस्तित्वात आहे की नाही हे तपासते + function _exists(uint256 pizzaId) internal view returns (bool) { + address owner = pizzaToOwner[pizzaId]; + return owner != address(0); + } + + // पत्ता मालक आहे की Pizza हस्तांतरित करण्यासाठी मंजूर आहे हे तपासते + function _isApprovedOrOwner(address spender, uint256 pizzaId) + internal + view + returns (bool) + { + address owner = pizzaToOwner[pizzaId]; + // Disable solium check because of + // https://github.com/duaraghav8/Solium/issues/175 + // solium-disable-next-line operator-whitespace + return (spender == owner || + this.getApproved(pizzaId) == spender || + this.isApprovedForAll(owner, spender)); + } + + // Pizza युनिक आहे आणि अद्याप अस्तित्वात नाही हे तपासा + modifier isUnique(string memory _name, uint256 _dna) { + bool result = true; + for (uint256 i = 0; i < pizzas.length; i++) { + if ( + keccak256(abi.encodePacked(pizzas[i].name)) == + keccak256(abi.encodePacked(_name)) && + pizzas[i].dna == _dna + ) { + result = false; + } + } + require(result, "अशा नावाचा पिझ्झा आधीच अस्तित्वात आहे."); + _; + } + + // लक्ष्य पत्ता करार आहे की नाही हे परत करते + function isContract(address account) internal view returns (bool) { + uint256 size; + // सध्या पत्त्यावर करार आहे की नाही हे तपासण्याचा कोणताही चांगला मार्ग नाही + // त्या पत्त्यावरील कोडचा आकार तपासण्यापेक्षा. + // हे कसे कार्य करते याबद्दल अधिक माहितीसाठी https://ethereum.stackexchange.com/a/14016/36603 पहा. + // TODO Serenity रिलीज होण्यापूर्वी हे पुन्हा तपासा, कारण तेव्हा सर्व पत्ते + // करार असतील. + // solium-disable-next-line security/no-inline-assembly + assembly { + size := extcodesize(account) + } + return size > 0; + } +} +``` + +## पुढील वाचन {#further-reading} + +स्मार्ट करारांच्या अधिक संपूर्ण विहंगावलोकनासाठी Solidity आणि Vyper चे दस्तऐवजीकरण पहा: + +- [Solidity](https://docs.soliditylang.org/) +- [Vyper](https://docs.vyperlang.org/en/stable/) + +## संबंधित विषय {#related-topics} + +- [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) +- [Ethereum व्हर्च्युअल मशीन](/developers/docs/evm/) + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [करार आकार मर्यादेशी लढण्यासाठी करार कमी करणे](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _– तुमच्या स्मार्ट कराराचा आकार कमी करण्यासाठी काही व्यावहारिक टिप्स._ +- [इव्हेंटसह स्मार्ट करारांमधून डेटा लॉग करणे](/developers/tutorials/logging-events-smart-contracts/) _– स्मार्ट करार इव्हेंटची ओळख आणि डेटा लॉग करण्यासाठी तुम्ही त्यांचा कसा वापर करू शकता._ +- [Solidity वरून इतर करारांशी संवाद साधा](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– विद्यमान करारातून स्मार्ट करार कसा तैनात करायचा आणि त्याच्याशी संवाद कसा साधायचा._ diff --git a/public/content/translations/mr/developers/docs/smart-contracts/compiling/index.md b/public/content/translations/mr/developers/docs/smart-contracts/compiling/index.md new file mode 100644 index 00000000000..3312764f6f4 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/compiling/index.md @@ -0,0 +1,53 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट्स संकलित करणे" +description: "स्मार्ट कॉन्ट्रॅक्ट्स का संकलित करावे लागतात आणि संकलन नेमके काय करते, याचे स्पष्टीकरण." +lang: mr +incomplete: true +--- + +तुम्हाला तुमचा कॉन्ट्रॅक्ट संकलित करण्याची गरज आहे जेणेकरून तुमचे वेब ॲप आणि इथेरियम व्हर्च्युअल मशीन (EVM) ते समजू शकतील. + +## पूर्वतयारी {#prerequisites} + +संकलनाबद्दल वाचण्यापूर्वी, [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) आणि [इथेरियम व्हर्च्युअल मशीन](/developers/docs/evm/) यांबद्दलचा आमचा परिचय वाचणे तुम्हाला उपयुक्त वाटू शकते. + +## EVM {#the-evm} + +[EVM](/developers/docs/evm/) ला तुमचा कॉन्ट्रॅक्ट चालवता यावा यासाठी, तो **बाइटकोड** मध्ये असणे आवश्यक आहे. संकलन याचे रूपांतर यात करते: + +```solidity +pragma solidity 0.4.24;\n\ncontract Greeter {\n\n function greet() public view returns (string memory) {\n return \ +``` + +**यात** + +``` +PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0xCFAE3217 EQ PUSH2 0x46 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x52 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5B PUSH2 0xD6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x80 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xC8 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x5 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x48656C6C6F000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 SLT 0xec 0xe 0xf5 0xf8 SLT 0xc7 0x2d STATICCALL ADDRESS SHR 0xdb COINBASE 0xb1 BALANCE 0xe8 0xf8 DUP14 0xda 0xad DUP13 LOG1 0x4c 0xb4 0x26 0xc2 DELEGATECALL PUSH7 0x8994D3E002900 +``` + +यांना **ऑपकोड्स** म्हणतात. EVM ऑपकोड्स ह्या निम्न-स्तरीय सूचना आहेत ज्या इथेरियम व्हर्च्युअल मशीन (EVM) कार्यान्वित करू शकते. प्रत्येक ऑपकोड एक विशिष्ट ऑपरेशन दर्शवतो, जसे की अंकगणितीय ऑपरेशन्स, तार्किक ऑपरेशन्स, डेटा मॅनिप्युलेशन, कंट्रोल फ्लो, इत्यादी. + +[ऑपकोड्सबद्दल अधिक](/developers/docs/evm/opcodes/) + +## वेब ॲप्लिकेशन्स {#web-applications} + +कंपाइलर **ॲप्लिकेशन बायनरी इंटरफेस (ABI)** सुद्धा तयार करतो. तुमच्या ॲप्लिकेशनला कॉन्ट्रॅक्ट समजण्यासाठी आणि त्याची फंक्शन्स कॉल करण्यासाठी तुम्हाला याची गरज असते. + +ABI ही एक JSON फाईल आहे जी तैनात केलेल्या कॉन्ट्रॅक्ट आणि त्याच्या स्मार्ट कॉन्ट्रॅक्ट फंक्शन्सचे वर्णन करते. हे वेब2 आणि वेब3 मधील अंतर कमी करण्यास मदत करते. + +तुम्ही तुमच्या वेब ॲप इंटरफेसमध्ये तुमच्या स्मार्ट कॉन्ट्रॅक्टवर कॉल करू शकावे, यासाठी एक [जावास्क्रिप्ट क्लायंट लायब्ररी](/developers/docs/apis/javascript/) **ABI** वाचते. + +खाली ERC-20 टोकन कॉन्ट्रॅक्टसाठी ABI दिलेला आहे. ERC-20 हे एक टोकन आहे ज्याचा तुम्ही इथेरियमवर व्यापार करू शकता. + +```json +[\n {\n \ +``` + +## पुढील वाचन {#further-reading} + +- [ABI तपशील](https://solidity.readthedocs.io/en/v0.7.0/abi-spec.html) _– सॉलिडिटी_ + +## संबंधित विषय {#related-topics} + +- [जावास्क्रिप्ट क्लायंट लायब्ररी](/developers/docs/apis/javascript/) +- [इथेरियम व्हर्च्युअल मशीन](/developers/docs/evm/) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/composability/index.md b/public/content/translations/mr/developers/docs/smart-contracts/composability/index.md new file mode 100644 index 00000000000..d057b865ee9 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/composability/index.md @@ -0,0 +1,76 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट संयोजनीयता" +description: "विद्यमान घटकांचा पुन्हा वापर करून, जटिल डॅप्स (dapps) तयार करण्यासाठी लेगो ब्लॉक्सप्रमाणे स्मार्ट कॉन्ट्रॅक्ट्स कसे एकत्र केले जाऊ शकतात, हे जाणून घ्या." +lang: mr +incomplete: true +--- + +## एक संक्षिप्त परिचय {#a-brief-introduction} + +स्मार्ट कॉन्ट्रॅक्ट इथेरिअमवर सार्वजनिक आहेत आणि त्यांना मुक्त API म्हणून मानले जाऊ शकते. डॅप डेव्हलपर बनण्यासाठी तुम्हाला तुमचा स्वतःचा स्मार्ट कॉन्ट्रॅक्ट लिहिण्याची गरज नाही, तुम्हाला फक्त त्यांच्याशी कसा संवाद साधायचा हे माहित असणे आवश्यक आहे. उदाहरणार्थ, तुम्ही तुमच्या ॲपमधील सर्व टोकन स्वॅप लॉजिक हाताळण्यासाठी [Uniswap](https://uniswap.exchange/swap) या विकेंद्रित एक्सचेंजचे विद्यमान स्मार्ट कॉन्ट्रॅक्ट्स वापरू शकता – तुम्हाला अगदी सुरुवातीपासून सुरुवात करण्याची गरज नाही. त्यांचे काही [v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts) आणि [v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts) कॉन्ट्रॅक्ट्स पहा. + +## संयोजनीयता म्हणजे काय? {#what-is-composability} + +संयोजनीयता म्हणजे नवीन प्रणाली किंवा आउटपुट तयार करण्यासाठी वेगळे घटक एकत्र करणे. सॉफ्टवेअर डेव्हलपमेंटमध्ये, संयोजनीयतेचा अर्थ असा आहे की डेव्हलपर्स नवीन ॲप्लिकेशन्स तयार करण्यासाठी विद्यमान सॉफ्टवेअर घटकांचा पुन्हा वापर करू शकतात. संयोजनीयता समजून घेण्याचा एक चांगला मार्ग म्हणजे संयोजनीय घटकांना लेगो ब्लॉक्स म्हणून पाहणे. प्रत्येक लेगो दुसऱ्यासोबत जोडला जाऊ शकतो, ज्यामुळे तुम्हाला वेगवेगळे लेगो एकत्र करून गुंतागुंतीच्या रचना तयार करता येतात. + +Ethereum मध्ये, प्रत्येक स्मार्ट कॉन्ट्रॅक्ट एक प्रकारचा लेगो आहे—तुम्ही तुमच्या प्रोजेक्टसाठी बिल्डिंग ब्लॉक्स म्हणून इतर प्रोजेक्ट्समधील स्मार्ट कॉन्ट्रॅक्ट्स वापरू शकता. याचा अर्थ असा की तुम्हाला आधीच झालेल्या गोष्टी पुन्हा करण्यात किंवा सुरवातीपासून काहीतरी तयार करण्यात वेळ घालवावा लागत नाही. + +## संयोजनीयता कशी कार्य करते? {#how-does-composability-work} + +Ethereum स्मार्ट कॉन्ट्रॅक्ट्स हे सार्वजनिक APIs सारखे आहेत, त्यामुळे कोणीही कॉन्ट्रॅक्टशी संवाद साधू शकतो किंवा अतिरिक्त कार्यक्षमतेसाठी त्यांना डॅप्समध्ये समाकलित करू शकतो. स्मार्ट कॉन्ट्रॅक्ट संयोजनीयता सामान्यतः तीन तत्त्वांवर कार्य करते: मॉड्युलॅरिटी, स्वायत्तता आणि शोधक्षमता: + +**१.** **मॉड्युलॅरिटी**: ही वैयक्तिक घटकांची विशिष्ट कार्य करण्याची क्षमता आहे. Ethereum मध्ये, प्रत्येक स्मार्ट कॉन्ट्रॅक्टचा एक विशिष्ट वापर असतो (जसे Uniswap च्या उदाहरणात दाखवले आहे). + +**२.** **स्वायत्तता**: संयोजनीय घटक स्वतंत्रपणे कार्य करण्यास सक्षम असले पाहिजेत. Ethereum मधील प्रत्येक स्मार्ट कॉन्ट्रॅक्ट स्वयं-अंमलबजावणी करणारा असतो आणि प्रणालीच्या इतर भागांवर अवलंबून न राहता कार्य करू शकतो. + +**३.** डेव्हलपर्स बाह्य कॉन्ट्रॅक्टना कॉल करू शकत नाहीत किंवा सॉफ्टवेअर लायब्ररींना ॲप्लिकेशन्समध्ये समाकलित करू शकत नाहीत, जर त्या सार्वजनिकरित्या उपलब्ध नसतील. रचनेनुसार, स्मार्ट कॉन्ट्रॅक्ट्स ओपन-सोर्स असतात; कोणीही स्मार्ट कॉन्ट्रॅक्टला कॉल करू शकतो किंवा कोडबेस फोर्क करू शकतो. + +## संयोजनीयतेचे फायदे {#benefits-of-composability} + +### लहान डेव्हलपमेंट सायकल {#shorter-development-cycle} + +संयोजनीयता [dapps](/apps/#what-are-dapps) तयार करताना डेव्हलपर्सना करावे लागणारे काम कमी करते. [नवल रविकांत यांच्या मते:](https://twitter.com/naval/status/1444366754650656770) "ओपन सोर्स म्हणजे प्रत्येक समस्येचे निराकरण फक्त एकदाच करायला लागते." + +जर एखादी समस्या सोडवणारा स्मार्ट कॉन्ट्रॅक्ट अस्तित्वात असेल, तर इतर डेव्हलपर्स त्याचा पुन्हा वापर करू शकतात, त्यामुळे त्यांना तीच समस्या सोडवावी लागत नाही. अशाप्रकारे, डेव्हलपर्स नवीन डॅप्स तयार करण्यासाठी विद्यमान सॉफ्टवेअर लायब्ररी घेऊन त्यात अतिरिक्त कार्यक्षमता जोडू शकतात. + +### अधिक नवनिर्मिती {#greater-innovation} + +संयोजनीयता नवनिर्मिती आणि प्रयोगांना प्रोत्साहन देते, कारण डेव्हलपर्स इच्छित परिणाम मिळवण्यासाठी ओपन-सोर्स कोडचा पुनर्वापर, बदल, डुप्लिकेट किंवा समाकलित करण्यास स्वतंत्र असतात. परिणामी, डेव्हलपमेंट टीम्स मूलभूत कार्यक्षमतेवर कमी वेळ घालवतात आणि नवीन वैशिष्ट्यांवर प्रयोग करण्यासाठी अधिक वेळ देऊ शकतात. + +### उत्तम वापरकर्ता अनुभव {#better-user-experience} + +Ethereum इकोसिस्टीममधील घटकांमधील आंतरकार्यक्षमता वापरकर्त्याचा अनुभव सुधारते. ज्या इकोसिस्टममध्ये ॲप्लिकेशन्स एकमेकांशी संवाद साधू शकत नाहीत, अशा विखुरलेल्या इकोसिस्टमच्या तुलनेत, जेव्हा डॅप्स बाह्य स्मार्ट कॉन्ट्रॅक्ट्स समाकलित करतात तेव्हा वापरकर्त्यांना अधिक कार्यक्षमता उपलब्ध होते. + +आंतरकार्यक्षमतेचे फायदे स्पष्ट करण्यासाठी आपण आर्बिट्राज ट्रेडिंगमधील एक उदाहरण घेऊया: + +जर एखादे टोकन `एक्सचेंज B` पेक्षा `एक्सचेंज A` वर जास्त किमतीत ट्रेड होत असेल, तर तुम्ही नफा मिळवण्यासाठी या किमतीतील फरकाचा फायदा घेऊ शकता. तथापि, तुम्ही हे तेव्हाच करू शकता जेव्हा तुमच्याकडे व्यवहार पूर्ण करण्यासाठी पुरेसे भांडवल असेल (म्हणजेच, `एक्सचेंज B` वरून टोकन विकत घेणे आणि ते `एक्सचेंज A` वर विकणे). + +तुमच्याकडे ट्रेड पूर्ण करण्यासाठी पुरेसा निधी नसलेल्या परिस्थितीत, फ्लॅश लोन एक आदर्श पर्याय असू शकतो. [फ्लॅश लोन्स](/defi/#flash-loans) हे अत्यंत तांत्रिक आहेत, परंतु मूळ कल्पना अशी आहे की तुम्ही मालमत्ता (तारणाशिवाय) उधार घेऊ शकता आणि त्याच _एका_ व्यवहारात परत करू शकता. + +आपल्या सुरुवातीच्या उदाहरणाकडे परत जाताना, एक आर्बिट्राज ट्रेडर मोठा फ्लॅश लोन घेऊ शकतो, `एक्सचेंज B` वरून टोकन्स विकत घेऊन ते `एक्सचेंज A` वर विकू शकतो, भांडवल + व्याज परतफेड करू शकतो आणि नफा ठेवू शकतो, हे सर्व एकाच व्यवहारात. या गुंतागुंतीच्या लॉजिकसाठी अनेक कॉन्ट्रॅक्ट्सना केलेल्या कॉल्सना एकत्र करणे आवश्यक आहे, जे स्मार्ट कॉन्ट्रॅक्ट्समध्ये आंतरकार्यक्षमता नसल्यास शक्य झाले नसते. + +## Ethereum मधील संयोजनीयतेची उदाहरणे {#composability-in-ethereum} + +### टोकन स्वॅप्स {#token-swaps} + +जर तुम्ही असा डॅप तयार केला ज्यामध्ये व्यवहारांसाठी ETH मध्ये पैसे देणे आवश्यक आहे, तर तुम्ही टोकन स्वॅप लॉजिक समाकलित करून वापरकर्त्यांना इतर ERC-20 टोकनमध्ये पैसे देण्याची परवानगी देऊ शकता. कॉन्ट्रॅक्टने कॉल केलेले फंक्शन कार्यान्वित करण्यापूर्वी कोड आपोआप वापरकर्त्याच्या टोकनला ETH मध्ये रूपांतरित करेल. + +### शासन {#governance} + +[DAO](/dao/) साठी सानुकूलित शासन प्रणाली तयार करणे खर्चिक आणि वेळखाऊ असू शकते. त्याऐवजी, तुम्ही तुमच्या DAO ला त्वरीत बूटस्ट्रॅप करण्यासाठी आणि एक शासन फ्रेमवर्क तयार करण्यासाठी [Aragon Client](https://client.aragon.org/) सारखे ओपन-सोर्स शासन टूलकिट वापरू शकता. + +### ओळख व्यवस्थापन {#identity-management} + +सानुकूल ऑथेंटिकेशन प्रणाली तयार करण्याऐवजी किंवा केंद्रीकृत प्रदात्यांवर अवलंबून राहण्याऐवजी, तुम्ही वापरकर्त्यांसाठी ऑथेंटिकेशन व्यवस्थापित करण्यासाठी विकेंद्रित ओळख (DID) साधने समाकलित करू शकता. याचे एक उदाहरण [SpruceID](https://www.spruceid.com/) आहे, जे एक ओपन-सोर्स टूलकिट आहे. हे "Sign in with Ethereum" कार्यक्षमता प्रदान करते, ज्यामुळे वापरकर्ते Ethereum वॉलेटद्वारे त्यांची ओळख प्रमाणित करू शकतात. + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [create-eth-app सह तुमच्या डॅप फ्रंटएंड डेव्हलपमेंटला किकस्टार्ट करा](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _– लोकप्रिय स्मार्ट कॉन्ट्रॅक्ट्ससह ॲप्स तयार करण्यासाठी create-eth-app कसे वापरावे याचे विहंगावलोकन._ + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +- [संयोजनीयता ही नवनिर्मिती आहे](https://a16zcrypto.com/posts/article/how-composability-unlocks-crypto-and-everything-else/) +- [Web3 साठी संयोजनीयता का महत्त्वाची आहे](https://hackernoon.com/why-composability-matters-for-web3) +- [संयोजनीयता म्हणजे काय?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/deploying/index.md b/public/content/translations/mr/developers/docs/smart-contracts/deploying/index.md new file mode 100644 index 00000000000..af775e700aa --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/deploying/index.md @@ -0,0 +1,81 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट्स डिप्लॉय करणे" +description: "Ethereum नेटवर्क्सवर स्मार्ट कॉन्ट्रॅक्ट्स कसे डिप्लॉय करायचे ते शिका, ज्यामध्ये पूर्वआवश्यकता, साधने आणि डिप्लॉयमेंटच्या पायऱ्या समाविष्ट आहेत." +lang: mr +--- + +Ethereum नेटवर्कच्या वापरकर्त्यांसाठी तुमचा स्मार्ट कॉन्ट्रॅक्ट उपलब्ध होण्यासाठी तुम्हाला तो डिप्लॉय करणे आवश्यक आहे. + +स्मार्ट कॉन्ट्रॅक्ट डिप्लॉय करण्यासाठी, तुम्ही कोणताही प्राप्तकर्ता निर्दिष्ट न करता स्मार्ट कॉन्ट्रॅक्टचा संकलित कोड असलेला Ethereum व्यवहार पाठवता. + +## पूर्वतयारी {#prerequisites} + +स्मार्ट कॉन्ट्रॅक्ट्स डिप्लॉय करण्यापूर्वी तुम्हाला [Ethereum नेटवर्क्स](/developers/docs/networks/), [व्यवहार](/developers/docs/transactions/) आणि [स्मार्ट कॉन्ट्रॅक्ट्सची रचना](/developers/docs/smart-contracts/anatomy/) समजून घेणे आवश्यक आहे. + +कॉन्ट्रॅक्ट डिप्लॉय करण्यासाठी इथर (ETH) देखील खर्च होतो कारण ते ब्लॉकचेनवर साठवले जातात, त्यामुळे तुम्हाला Ethereum वरील [गॅस आणि शुल्क](/developers/docs/gas/) बद्दल माहिती असणे आवश्यक आहे. + +शेवटी, तुम्हाला तुमचा कॉन्ट्रॅक्ट डिप्लॉय करण्यापूर्वी तो संकलित करणे आवश्यक आहे, म्हणून तुम्ही [स्मार्ट कॉन्ट्रॅक्ट्स संकलित करणे](/developers/docs/smart-contracts/compiling/) बद्दल वाचले असल्याची खात्री करा. + +## स्मार्ट कॉन्ट्रॅक्ट कसा डिप्लॉय करायचा {#how-to-deploy-a-smart-contract} + +### तुम्हाला काय लागेल {#what-youll-need} + +- तुमच्या कॉन्ट्रॅक्टचा बायकोड – हे [संकलन](/developers/docs/smart-contracts/compiling/) द्वारे तयार केले जाते +- गॅससाठी ETH – तुम्ही इतर व्यवहारांप्रमाणे तुमची गॅस मर्यादा सेट कराल, त्यामुळे लक्षात ठेवा की कॉन्ट्रॅक्ट डिप्लॉयमेंटसाठी साध्या ETH हस्तांतरणापेक्षा खूप जास्त गॅसची आवश्यकता असते +- एक डिप्लॉयमेंट स्क्रिप्ट किंवा प्लगइन +- [Ethereum नोड](/developers/docs/nodes-and-clients/) मध्ये प्रवेश, एकतर तुमचा स्वतःचा चालवून, सार्वजनिक नोडशी कनेक्ट करून, किंवा [नोड सेवा](/developers/docs/nodes-and-clients/nodes-as-a-service/) वापरून API की द्वारे + +### स्मार्ट कॉन्ट्रॅक्ट डिप्लॉय करण्याच्या पायऱ्या {#steps-to-deploy} + +यात समाविष्ट असलेल्या विशिष्ट पायऱ्या प्रश्नातील डेव्हलपमेंट फ्रेमवर्कवर अवलंबून असतील. उदाहरणार्थ, तुम्ही [तुमचे कॉन्ट्रॅक्ट्स डिप्लॉय करण्यावर Hardhat चे डॉक्युमेंटेशन](https://hardhat.org/docs/tutorial/deploying) किंवा [स्मार्ट कॉन्ट्रॅक्ट डिप्लॉय आणि सत्यापित करण्यावर Foundry चे डॉक्युमेंटेशन](https://book.getfoundry.sh/forge/deploying) पाहू शकता. एकदा डिप्लॉय झाल्यावर, तुमच्या कॉन्ट्रॅक्टला इतर [खात्यांप्रमाणेच](/developers/docs/accounts/) एक Ethereum पत्ता मिळेल आणि [सोर्स कोड व्हेरिफिकेशन टूल्स](/developers/docs/smart-contracts/verifying/#source-code-verification-tools) वापरून ते सत्यापित केले जाऊ शकते. + +## संबंधित साधने {#related-tools} + +**Remix - _Remix IDE Ethereum सारख्या ब्लॉकचेनसाठी स्मार्ट कॉन्ट्रॅक्ट्स विकसित, डिप्लॉय आणि व्यवस्थापित करण्याची परवानगी देतो_** + +- [Remix](https://remix.ethereum.org) + +**Tenderly - _Web3 डेव्हलपमेंट प्लॅटफॉर्म जो स्मार्ट कॉन्ट्रॅक्ट्स विकसित करणे, चाचणी करणे, निरीक्षण करणे आणि ऑपरेट करण्यासाठी डीबगिंग, निरीक्षणक्षमता आणि पायाभूत सुविधा बिल्डिंग ब्लॉक्स प्रदान करतो_** + +- [tenderly.co](https://tenderly.co/) +- [Docs](https://docs.tenderly.co/) +- [GitHub](https://github.com/Tenderly) +- [Discord](https://discord.gg/eCWjuvt) + +**Hardhat - _तुमचे Ethereum सॉफ्टवेअर संकलित करणे, डिप्लॉय करणे, चाचणी करणे आणि डीबग करण्यासाठी एक डेव्हलपमेंट वातावरण_** + +- [hardhat.org](https://hardhat.org/getting-started/) +- [तुमचे कॉन्ट्रॅक्ट्स डिप्लॉय करण्यावरील डॉक्स](https://hardhat.org/docs/tutorial/deploying) +- [GitHub](https://github.com/nomiclabs/hardhat) +- [Discord](https://discord.com/invite/TETZs2KK4k) + +**thirdweb - _एकाच कमांडचा वापर करून, कोणताही कॉन्ट्रॅक्ट कोणत्याही EVM सुसंगत चेनवर सहजपणे डिप्लॉय करा_** + +- [डॉक्युमेंटेशन](https://portal.thirdweb.com/deploy/) + +**Crossmint - _स्मार्ट कॉन्ट्रॅक्ट्स डिप्लॉय करण्यासाठी, क्रेडिट-कार्ड आणि क्रॉस-चेन पेमेंट सक्षम करण्यासाठी आणि NFTs तयार करण्यासाठी, वितरित करण्यासाठी, विकण्यासाठी, संग्रहित करण्यासाठी आणि संपादित करण्यासाठी APIs वापरण्याकरिता एंटरप्राइझ-ग्रेड वेब3 डेव्हलपमेंट प्लॅटफॉर्म._** + +- [crossmint.com](https://www.crossmint.com) +- [दस्तऐवजीकरण](https://docs.crossmint.com) +- [Discord](https://discord.com/invite/crossmint) +- [Blog](https://blog.crossmint.com) + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट डिप्लॉय करणे](/developers/tutorials/deploying-your-first-smart-contract/) _– Ethereum चाचणी नेटवर्कवर तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट डिप्लॉय करण्याची ओळख._ +- [हॅलो वर्ल्ड | स्मार्ट कॉन्ट्रॅक्ट ट्यूटोरियल](/developers/tutorials/hello-world-smart-contract/) _– Ethereum वर एक मूलभूत स्मार्ट कॉन्ट्रॅक्ट तयार करण्यासाठी आणि डिप्लॉय करण्यासाठी सोपे ट्यूटोरियल._ +- [Solidity वरून इतर करारांशी संवाद साधा](/developers/tutorials/interact-with-other-contracts-from-solidity/) _– विद्यमान करारातून स्मार्ट करार कसा तैनात करायचा आणि त्याच्याशी संवाद कसा साधायचा._ +- [तुमच्या कॉन्ट्रॅक्टचा आकार कसा कमी करायचा](/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/) _- तुमच्या कॉन्ट्रॅक्टचा आकार मर्यादेत ठेवण्यासाठी आणि गॅसवर बचत करण्यासाठी तो कसा कमी करावा_ + +## पुढील वाचन {#further-reading} + +- [https://docs.openzeppelin.com/learn/deploying-and-interacting](https://docs.openzeppelin.com/learn/deploying-and-interacting) - _OpenZeppelin_ +- [Hardhat सह तुमचे कॉन्ट्रॅक्ट्स डिप्लॉय करणे](https://hardhat.org/docs/tutorial/deploying) - _Nomic Labs_ + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [डेव्हलपमेंट फ्रेमवर्क्स](/developers/docs/frameworks/) +- [एक Ethereum नोड चालवा](/developers/docs/nodes-and-clients/run-a-node/) +- [Nodes-as-a-service](/developers/docs/nodes-and-clients/nodes-as-a-service) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/formal-verification/index.md b/public/content/translations/mr/developers/docs/smart-contracts/formal-verification/index.md new file mode 100644 index 00000000000..54d4fc7bab3 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/formal-verification/index.md @@ -0,0 +1,284 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट्सची औपचारिक पडताळणी" +description: "Ethereum स्मार्ट कॉन्ट्रॅक्ट्ससाठी औपचारिक पडताळणीचा आढावा" +lang: mr +--- + +[स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) विकेंद्रित, विश्वासहीन आणि मजबूत ॲप्लिकेशन्स तयार करणे शक्य करत आहेत जे नवीन उपयोग-प्रकरणे सादर करतात आणि वापरकर्त्यांसाठी मूल्य अनलॉक करतात. कारण स्मार्ट कॉन्ट्रॅक्ट्स मोठ्या प्रमाणात मूल्य हाताळतात, त्यामुळे डेव्हलपर्ससाठी सुरक्षा हा एक महत्त्वपूर्ण विचार आहे. + +औपचारिक पडताळणी हे [स्मार्ट कॉन्ट्रॅक्ट सुरक्षा](/developers/docs/smart-contracts/security/) सुधारण्यासाठी शिफारस केलेल्या तंत्रांपैकी एक आहे. औपचारिक पडताळणी, जी प्रोग्राम्सचे विनिर्देशन, डिझाइन आणि पडताळणी करण्यासाठी [औपचारिक पद्धती](https://www.brookings.edu/techstream/formal-methods-as-a-path-toward-better-cybersecurity/) वापरते, महत्त्वपूर्ण हार्डवेअर आणि सॉफ्टवेअर प्रणालींची अचूकता सुनिश्चित करण्यासाठी अनेक वर्षांपासून वापरली जात आहे. + +स्मार्ट कॉन्ट्रॅक्ट्समध्ये लागू केल्यावर, औपचारिक पडताळणी हे सिद्ध करू शकते की कॉन्ट्रॅक्टचा व्यावसायिक तर्क पूर्वनिर्धारित विनिर्देशनाची पूर्तता करतो. कॉन्ट्रॅक्ट कोडच्या अचूकतेचे मूल्यांकन करण्याच्या इतर पद्धतींच्या तुलनेत, जसे की चाचणी, औपचारिक पडताळणी स्मार्ट कॉन्ट्रॅक्ट कार्यात्मकदृष्ट्या योग्य असल्याची अधिक मजबूत हमी देते. + +## औपचारिक पडताळणी म्हणजे काय? {#what-is-formal-verification} + +औपचारिक पडताळणी म्हणजे औपचारिक विनिर्देशनाच्या संदर्भात प्रणालीच्या अचूकतेचे मूल्यांकन करण्याची प्रक्रिया. सोप्या भाषेत सांगायचे तर, औपचारिक पडताळणी आपल्याला हे तपासण्याची परवानगी देते की प्रणालीचे वर्तन काही आवश्यकतांची पूर्तता करते की नाही (म्हणजेच, ते आपल्याला हवे ते करते). + +प्रणालीचे (या प्रकरणात स्मार्ट कॉन्ट्रॅक्ट) अपेक्षित वर्तन औपचारिक मॉडेलिंग वापरून वर्णन केले जाते, तर विनिर्देशन भाषा औपचारिक गुणधर्म तयार करण्यास सक्षम करतात. औपचारिक पडताळणी तंत्रे नंतर हे सत्यापित करू शकतात की कॉन्ट्रॅक्टची अंमलबजावणी त्याच्या विनिर्देशनाचे पालन करते आणि पूर्वीच्या अचूकतेचा गणितीय पुरावा मिळवू शकतात. जेव्हा एखादा कॉन्ट्रॅक्ट त्याच्या विनिर्देशनाची पूर्तता करतो, तेव्हा त्याचे वर्णन “कार्यात्मकदृष्ट्या योग्य”, “डिझाइननुसार योग्य” किंवा “बांधणीनुसार योग्य” असे केले जाते. + +### औपचारिक मॉडेल म्हणजे काय? {#what-is-a-formal-model} + +संगणक शास्त्रात, [औपचारिक मॉडेल](https://en.wikipedia.org/wiki/Model_of_computation) हे गणना प्रक्रियेचे गणितीय वर्णन आहे. प्रोग्राम्सना गणितीय कार्यांमध्ये (समीकरणांमध्ये) रूपांतरित केले जाते, ज्यामध्ये मॉडेल वर्णन करते की इनपुट दिल्यावर फंक्शन्सचे आउटपुट कसे मोजले जातात. + +औपचारिक मॉडेल्स अमूर्ततेची एक पातळी प्रदान करतात ज्यावर प्रोग्रामच्या वर्तनाचे विश्लेषण मूल्यांकन केले जाऊ शकते. औपचारिक मॉडेल्सचे अस्तित्व _औपचारिक विनिर्देशन_ तयार करण्याची परवानगी देते, जे प्रश्नातील मॉडेलचे इच्छित गुणधर्म वर्णन करते. + +औपचारिक पडताळणीसाठी स्मार्ट कॉन्ट्रॅक्ट्सचे मॉडेलिंग करण्यासाठी विविध तंत्रे वापरली जातात. उदाहरणार्थ, काही मॉडेल्स स्मार्ट कॉन्ट्रॅक्टच्या उच्च-स्तरीय वर्तनाबद्दल तर्क करण्यासाठी वापरले जातात. ही मॉडेलिंग तंत्रे स्मार्ट कॉन्ट्रॅक्ट्सवर ब्लॅक-बॉक्स दृष्टिकोन लागू करतात, त्यांना अशा प्रणाली म्हणून पाहतात ज्या इनपुट स्वीकारतात आणि त्या इनपुटवर आधारित गणना करतात. + +उच्च-स्तरीय मॉडेल्स स्मार्ट कॉन्ट्रॅक्ट्स आणि बाह्य एजंट्स, जसे की बाह्य मालकीची खाती (EOAs), कॉन्ट्रॅक्ट खाती आणि ब्लॉकचेन पर्यावरण यांच्यातील संबंधांवर लक्ष केंद्रित करतात. असे मॉडेल्स गुणधर्म परिभाषित करण्यासाठी उपयुक्त आहेत जे विशिष्ट वापरकर्ता परस्परसंवादांना प्रतिसाद म्हणून कॉन्ट्रॅक्टने कसे वागावे हे निर्दिष्ट करतात. + +याउलट, इतर औपचारिक मॉडेल्स स्मार्ट कॉन्ट्रॅक्टच्या निम्न-स्तरीय वर्तनावर लक्ष केंद्रित करतात. जरी उच्च-स्तरीय मॉडेल्स कॉन्ट्रॅक्टच्या कार्यक्षमतेबद्दल तर्क करण्यामध्ये मदत करू शकतात, तरी ते अंमलबजावणीच्या अंतर्गत कार्यांबद्दल तपशील कॅप्चर करण्यात अयशस्वी होऊ शकतात. निम्न-स्तरीय मॉडेल्स प्रोग्राम विश्लेषणासाठी व्हाइट-बॉक्स दृष्टिकोन लागू करतात आणि कॉन्ट्रॅक्टच्या अंमलबजावणीशी संबंधित गुणधर्मांबद्दल तर्क करण्यासाठी स्मार्ट कॉन्ट्रॅक्ट ॲप्लिकेशन्सच्या निम्न-स्तरीय प्रतिनिधित्वांवर, जसे की प्रोग्राम ट्रेसेस आणि [कंट्रोल फ्लो ग्राफ्स](https://en.wikipedia.org/wiki/Control-flow_graph) वर अवलंबून असतात. + +निम्न-स्तरीय मॉडेल्स आदर्श मानले जातात कारण ते Ethereum च्या अंमलबजावणी वातावरणात (म्हणजेच, [EVM](/developers/docs/evm/)) स्मार्ट कॉन्ट्रॅक्टच्या वास्तविक अंमलबजावणीचे प्रतिनिधित्व करतात. निम्न-स्तरीय मॉडेलिंग तंत्रे स्मार्ट कॉन्ट्रॅक्ट्समध्ये महत्त्वपूर्ण सुरक्षा गुणधर्म स्थापित करण्यासाठी आणि संभाव्य असुरक्षितता शोधण्यासाठी विशेषतः उपयुक्त आहेत. + +### औपचारिक विनिर्देशन म्हणजे काय? {#what-is-a-formal-specification} + +विनिर्देशन ही फक्त एक तांत्रिक आवश्यकता आहे जी एका विशिष्ट प्रणालीने पूर्ण केली पाहिजे. प्रोग्रामिंगमध्ये, विनिर्देशने प्रोग्रामच्या अंमलबजावणीबद्दलच्या सामान्य कल्पनांचे प्रतिनिधित्व करतात (म्हणजेच, प्रोग्रामने काय केले पाहिजे). + +स्मार्ट कॉन्ट्रॅक्ट्सच्या संदर्भात, औपचारिक विनिर्देशने _गुणधर्मांना_ सूचित करतात—कॉन्ट्रॅक्टने पूर्ण केल्या पाहिजेत अशा आवश्यकतांचे औपचारिक वर्णन. अशा गुणधर्मांना "अचल" म्हणून वर्णन केले जाते आणि ते कॉन्ट्रॅक्टच्या अंमलबजावणीबद्दल तार्किक प्रतिपादनांचे प्रतिनिधित्व करतात जे कोणत्याही अपवादांशिवाय प्रत्येक संभाव्य परिस्थितीत खरे राहिले पाहिजेत. + +अशाप्रकारे, आपण औपचारिक विनिर्देशनाला एका औपचारिक भाषेत लिहिलेल्या विधानांचा संग्रह मानू शकतो जे स्मार्ट कॉन्ट्रॅक्टच्या अभिप्रेत अंमलबजावणीचे वर्णन करतात. विनिर्देशने कॉन्ट्रॅक्टचे गुणधर्म समाविष्ट करतात आणि विविध परिस्थितीत कॉन्ट्रॅक्टने कसे वागावे हे परिभाषित करतात. औपचारिक पडताळणीचा उद्देश हे निर्धारित करणे आहे की स्मार्ट कॉन्ट्रॅक्टमध्ये हे गुणधर्म (अचल) आहेत की नाही आणि अंमलबजावणी दरम्यान या गुणधर्मांचे उल्लंघन होत नाही. + +स्मार्ट कॉन्ट्रॅक्ट्सच्या सुरक्षित अंमलबजावणी विकसित करण्यामध्ये औपचारिक विनिर्देशने महत्त्वपूर्ण आहेत. अचल लागू करण्यात अयशस्वी होणारे किंवा अंमलबजावणी दरम्यान ज्यांचे गुणधर्म उल्लंघन केले जातात असे कॉन्ट्रॅक्ट्स असुरक्षिततेस प्रवण असतात, जे कार्यक्षमतेला हानी पोहोचवू शकतात किंवा दुर्भावनापूर्ण शोषणास कारणीभूत ठरू शकतात. + +## स्मार्ट कॉन्ट्रॅक्ट्ससाठी औपचारिक विनिर्देशनांचे प्रकार {#formal-specifications-for-smart-contracts} + +औपचारिक विनिर्देशने प्रोग्राम अंमलबजावणीच्या अचूकतेबद्दल गणितीय तर्कास सक्षम करतात. औपचारिक मॉडेल्सप्रमाणेच, औपचारिक विनिर्देशने एकतर उच्च-स्तरीय गुणधर्म किंवा कॉन्ट्रॅक्ट अंमलबजावणीचे निम्न-स्तरीय वर्तन कॅप्चर करू शकतात. + +औपचारिक विनिर्देशने [प्रोग्राम लॉजिक](https://en.wikipedia.org/wiki/Logic_programming) च्या घटकांचा वापर करून साधित केली जातात, जे प्रोग्रामच्या गुणधर्मांबद्दल औपचारिक तर्कास परवानगी देतात. प्रोग्राम लॉजिकमध्ये औपचारिक नियम असतात जे प्रोग्रामचे अपेक्षित वर्तन (गणितीय भाषेत) व्यक्त करतात. औपचारिक विनिर्देशने तयार करण्यामध्ये विविध प्रोग्राम लॉजिक्स वापरले जातात, ज्यात [रीचेबिलिटी लॉजिक](https://en.wikipedia.org/wiki/Reachability_problem), [टेम्पोरल लॉजिक](https://en.wikipedia.org/wiki/Temporal_logic) आणि [होअर लॉजिक](https://en.wikipedia.org/wiki/Hoare_logic) यांचा समावेश आहे. + +स्मार्ट कॉन्ट्रॅक्ट्ससाठी औपचारिक विनिर्देशनांचे वर्गीकरण साधारणपणे **उच्च-स्तरीय** किंवा **निम्न-स्तरीय** विनिर्देशने म्हणून केले जाऊ शकते. विनिर्देशन कोणत्याही श्रेणीतील असो, त्याने विश्लेषणाधीन प्रणालीच्या गुणधर्माचे पुरेसे आणि निःसंदिग्धपणे वर्णन केले पाहिजे. + +### उच्च-स्तरीय विनिर्देशने {#high-level-specifications} + +नावाप्रमाणेच, उच्च-स्तरीय विनिर्देशन (ज्याला "मॉडेल-ओरिएंटेड विनिर्देशन" असेही म्हणतात) प्रोग्रामच्या उच्च-स्तरीय वर्तनाचे वर्णन करते. उच्च-स्तरीय विनिर्देशने स्मार्ट कॉन्ट्रॅक्टला [फायनाइट स्टेट मशीन](https://en.wikipedia.org/wiki/Finite-state_machine) (FSM) म्हणून मॉडेल करतात, जे ऑपरेशन्स करून स्टेट्समध्ये संक्रमण करू शकते, FSM मॉडेलसाठी औपचारिक गुणधर्म परिभाषित करण्यासाठी टेम्पोरल लॉजिक वापरले जाते. + +[टेम्पोरल लॉजिक्स](https://en.wikipedia.org/wiki/Temporal_logic) हे "वेळेच्या संदर्भात पात्र असलेल्या प्रस्तावांबद्दल तर्क करण्याचे नियम आहेत (उदा., "मला _नेहमीच_ भूक लागलेली असते" किंवा "मला _अखेरीस_ भूक लागेल")." औपचारिक पडताळणीवर लागू केल्यावर, टेम्पोरल लॉजिक्सचा वापर स्टेट मशीन म्हणून मॉडेल केलेल्या प्रणालींच्या योग्य वर्तनाबद्दल प्रतिपादन करण्यासाठी केला जातो. विशेषतः, एक टेम्पोरल लॉजिक स्मार्ट कॉन्ट्रॅक्टच्या भविष्यातील संभाव्य अवस्थांचे आणि ते अवस्थांमध्ये कसे संक्रमण करते याचे वर्णन करते. + +उच्च-स्तरीय विनिर्देशने साधारणपणे स्मार्ट कॉन्ट्रॅक्ट्ससाठी दोन महत्त्वपूर्ण टेम्पोरल गुणधर्म कॅप्चर करतात: **सुरक्षितता** आणि **सजीवता**. सुरक्षा गुणधर्म “काहीही वाईट कधीच घडत नाही” ही कल्पना दर्शवतात आणि सहसा अचलता व्यक्त करतात. सुरक्षा गुणधर्म सामान्य सॉफ्टवेअर आवश्यकता परिभाषित करू शकतो, जसे की [डेडलाक](https://www.techtarget.com/whatis/definition/deadlock) पासून स्वातंत्र्य, किंवा कॉन्ट्रॅक्ट्ससाठी डोमेन-विशिष्ट गुणधर्म व्यक्त करू शकतो (उदा. फंक्शन्ससाठी ॲक्सेस कंट्रोलवरील अचल, स्टेट व्हेरिएबल्सची स्वीकार्य मूल्ये, किंवा टोकन ट्रान्सफरसाठी अटी). + +उदाहरणार्थ, ERC-20 टोकन कॉन्ट्रॅक्ट्समध्ये `transfer()` किंवा `transferFrom()` वापरण्याच्या अटींचा समावेश असलेली ही सुरक्षा आवश्यकता घ्या: _“पाठवल्या जाणाऱ्या टोकनच्या विनंती केलेल्या रकमेपेक्षा पाठवणाऱ्याची शिल्लक कधीही कमी नसते.”_. कॉन्ट्रॅक्ट अचलाचे हे नैसर्गिक-भाषेतील वर्णन औपचारिक (गणितीय) विनिर्देशनामध्ये अनुवादित केले जाऊ शकते, ज्याची वैधता नंतर कठोरपणे तपासली जाऊ शकते. + +सजीवता गुणधर्म हे सांगतात की “अखेरीस काहीतरी चांगले घडते” आणि ते कॉन्ट्रॅक्टच्या विविध अवस्थांमधून प्रगती करण्याच्या क्षमतेशी संबंधित आहेत. सजीवता गुणधर्माचे एक उदाहरण "तरलता" आहे, जे विनंतीनुसार वापरकर्त्यांना त्याची शिल्लक हस्तांतरित करण्याच्या कॉन्ट्रॅक्टच्या क्षमतेला सूचित करते. या गुणधर्माचे उल्लंघन झाल्यास, वापरकर्ते कॉन्ट्रॅक्टमध्ये संग्रहित मालमत्ता काढू शकणार नाहीत, जसे [पॅरिटी वॉलेट घटनेमध्ये](https://www.cnbc.com/2017/11/08/accidental-bug-may-have-frozen-280-worth-of-ether-on-parity-wallet.html) घडले होते. + +### निम्न-स्तरीय विनिर्देशने {#low-level-specifications} + +उच्च-स्तरीय विनिर्देशने कॉन्ट्रॅक्टच्या मर्यादित-अवस्था मॉडेलला प्रारंभिक बिंदू म्हणून घेतात आणि या मॉडेलचे इच्छित गुणधर्म परिभाषित करतात. याउलट, निम्न-स्तरीय विनिर्देशने (ज्यांना "गुणधर्म-केंद्रित विनिर्देशने" असेही म्हणतात) अनेकदा प्रोग्राम्सना (स्मार्ट कॉन्ट्रॅक्ट्सना) गणितीय कार्यांचा संग्रह असलेली प्रणाली म्हणून मॉडेल करतात आणि अशा प्रणालींच्या योग्य वर्तनाचे वर्णन करतात. + +सोप्या भाषेत, निम्न-स्तरीय विनिर्देशने _प्रोग्राम ट्रेसेसचे_ विश्लेषण करतात आणि या ट्रेसेसवर स्मार्ट कॉन्ट्रॅक्टचे गुणधर्म परिभाषित करण्याचा प्रयत्न करतात. ट्रेसेस म्हणजे फंक्शन एक्झिक्युशनच्या अनुक्रमांना जे स्मार्ट कॉन्ट्रॅक्टची अवस्था बदलतात; म्हणून, निम्न-स्तरीय विनिर्देशने कॉन्ट्रॅक्टच्या अंतर्गत अंमलबजावणीसाठी आवश्यकता निर्दिष्ट करण्यास मदत करतात. + +निम्न-स्तरीय औपचारिक विनिर्देशने होअर-शैलीतील गुणधर्म किंवा अंमलबजावणी मार्गांवरील अचल म्हणून दिले जाऊ शकतात. + +### होअर-शैलीतील गुणधर्म {#hoare-style-properties} + +[होअर लॉजिक](https://en.wikipedia.org/wiki/Hoare_logic) स्मार्ट कॉन्ट्रॅक्ट्ससह प्रोग्राम्सच्या अचूकतेबद्दल तर्क करण्यासाठी औपचारिक नियमांचा एक संच प्रदान करते. होअर-शैलीतील गुणधर्म होअर ट्रिपल `{P}c{Q}` द्वारे दर्शविला जातो, जिथे `c` एक प्रोग्राम आहे आणि `P` आणि `Q` हे `c` (म्हणजेच, प्रोग्राम) च्या स्थितीवरील प्रेडिकेट्स आहेत, ज्यांना अनुक्रमे _पूर्वअटी_ आणि _उत्तरअटी_ म्हणून औपचारिकपणे वर्णन केले जाते. + +पूर्वअट ही एक प्रेडिकेट आहे जी फंक्शनच्या योग्य अंमलबजावणीसाठी आवश्यक असलेल्या अटींचे वर्णन करते; कॉन्ट्रॅक्टमध्ये कॉल करणाऱ्या वापरकर्त्यांनी ही आवश्यकता पूर्ण केली पाहिजे. उत्तरअट ही एक प्रेडिकेट आहे जी फंक्शन योग्यरित्या कार्यान्वित झाल्यास स्थापित होणारी स्थिती दर्शवते; फंक्शन कॉल केल्यानंतर वापरकर्ते ही स्थिती खरी होण्याची अपेक्षा करू शकतात. होअर लॉजिकमधील एक _अचल_ (invariant) एक प्रेडिकेट आहे जे फंक्शनच्या अंमलबजावणीद्वारे संरक्षित केले जाते (म्हणजेच ते बदलत नाही). + +होअर-शैलीतील विनिर्देशने _आंशिक अचूकता_ किंवा _संपूर्ण अचूकता_ यांची हमी देऊ शकतात. कॉन्ट्रॅक्ट फंक्शनची अंमलबजावणी "आंशिकपणे योग्य" असते जर फंक्शन कार्यान्वित होण्यापूर्वी पूर्वअट खरी असेल आणि अंमलबजावणी समाप्त झाल्यास, उत्तरअट देखील खरी असते. जर फंक्शन कार्यान्वित होण्यापूर्वी पूर्वअट खरी असेल, अंमलबजावणी समाप्त होण्याची हमी असेल आणि ती समाप्त झाल्यावर उत्तरअट खरी असेल तर संपूर्ण अचूकतेचा पुरावा मिळतो. + +संपूर्ण अचूकतेचा पुरावा मिळवणे कठीण आहे कारण काही अंमलबजावणी समाप्त होण्यापूर्वी विलंब होऊ शकतात, किंवा कधीही समाप्त होत नाहीत. तरीही, अंमलबजावणी समाप्त होते की नाही हा प्रश्न विवादास्पद आहे कारण Ethereum ची गॅस यंत्रणा अनंत प्रोग्राम लूप्सना प्रतिबंधित करते (अंमलबजावणी एकतर यशस्वीरित्या समाप्त होते किंवा 'आउट-ऑफ-गॅस' त्रुटीमुळे संपते). + +होअर लॉजिक वापरून तयार केलेल्या स्मार्ट कॉन्ट्रॅक्ट विनिर्देशनांमध्ये कॉन्ट्रॅक्टमधील फंक्शन्स आणि लूप्सच्या अंमलबजावणीसाठी पूर्वअटी, उत्तरअटी आणि अचल परिभाषित केलेले असतील. पूर्वअटींमध्ये अनेकदा फंक्शनमध्ये चुकीच्या इनपुटची शक्यता समाविष्ट असते, तर उत्तरअटी अशा इनपुटला अपेक्षित प्रतिसाद दर्शवतात (उदा., विशिष्ट अपवाद फेकणे). या प्रकारे होअर-शैलीतील गुणधर्म कॉन्ट्रॅक्ट अंमलबजावणीची अचूकता सुनिश्चित करण्यासाठी प्रभावी आहेत. + +अनेक औपचारिक पडताळणी फ्रेमवर्क फंक्शन्सच्या अर्थपूर्ण अचूकतेचा पुरावा देण्यासाठी होअर-शैलीतील विनिर्देशनांचा वापर करतात. Solidity मध्ये `require` आणि `assert` विधानांचा वापर करून होअर-शैलीतील गुणधर्म (प्रतिपादने म्हणून) थेट कॉन्ट्रॅक्ट कोडमध्ये जोडणे देखील शक्य आहे. + +`require` विधाने पूर्वअट किंवा अचल व्यक्त करतात आणि अनेकदा वापरकर्त्याच्या इनपुटची वैधता तपासण्यासाठी वापरली जातात, तर `assert` सुरक्षिततेसाठी आवश्यक उत्तरअट कॅप्चर करते. उदाहरणार्थ, फंक्शन्ससाठी योग्य प्रवेश नियंत्रण (सुरक्षा गुणधर्माचे उदाहरण) कॉलिंग खात्याच्या ओळखीवर पूर्वअट तपासणी म्हणून `require` वापरून साध्य केले जाऊ शकते. त्याचप्रमाणे, कॉन्ट्रॅक्टमधील स्टेट व्हेरिएबल्सच्या परवानगी असलेल्या मूल्यांवरील अचलता (उदा., चलनात असलेल्या एकूण टोकनची संख्या) फंक्शन अंमलबजावणीनंतर कॉन्ट्रॅक्टची स्थिती निश्चित करण्यासाठी `assert` वापरून उल्लंघनापासून संरक्षित केली जाऊ शकते. + +### ट्रेस-स्तरीय गुणधर्म {#trace-level-properties} + +ट्रेस-आधारित विनिर्देशने अशा ऑपरेशन्सचे वर्णन करतात जे कॉन्ट्रॅक्टला वेगवेगळ्या अवस्थांमध्ये संक्रमण करतात आणि या ऑपरेशन्समधील संबंधांचे वर्णन करतात. आधी स्पष्ट केल्याप्रमाणे, ट्रेसेस म्हणजे ऑपरेशन्सचे अनुक्रम जे कॉन्ट्रॅक्टची स्थिती विशिष्ट प्रकारे बदलतात. + +हा दृष्टीकोन स्मार्ट कॉन्ट्रॅक्ट्सच्या स्टेट-ट्रान्झिशन सिस्टमच्या मॉडेलवर अवलंबून आहे ज्यात काही पूर्वनिर्धारित अवस्था (स्टेट व्हेरिएबल्सद्वारे वर्णन केलेल्या) आणि पूर्वनिर्धारित संक्रमणांचा (कॉन्ट्रॅक्ट फंक्शन्सद्वारे वर्णन केलेल्या) संच असतो. शिवाय, [कंट्रोल फ्लो ग्राफ](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/) (CFG), जो प्रोग्रामच्या अंमलबजावणी प्रवाहाचे ग्राफिकल प्रतिनिधित्व आहे, अनेकदा कॉन्ट्रॅक्टच्या ऑपरेशनल सिमेंटिक्सचे वर्णन करण्यासाठी वापरला जातो. येथे, प्रत्येक ट्रेस कंट्रोल फ्लो ग्राफवरील एक मार्ग म्हणून दर्शविला जातो. + +प्राथमिकतः, ट्रेस-स्तरीय विनिर्देशने स्मार्ट कॉन्ट्रॅक्ट्समधील अंतर्गत अंमलबजावणीच्या पॅटर्नबद्दल तर्क करण्यासाठी वापरली जातात. ट्रेस-स्तरीय विनिर्देशने तयार करून, आम्ही स्मार्ट कॉन्ट्रॅक्टसाठी स्वीकार्य अंमलबजावणी मार्गांची (म्हणजेच, स्थिती संक्रमणांची) पुष्टी करतो. प्रतीकात्मक अंमलबजावणी सारख्या तंत्रांचा वापर करून, आम्ही औपचारिकपणे सत्यापित करू शकतो की अंमलबजावणी कधीही औपचारिक मॉडेलमध्ये परिभाषित नसलेल्या मार्गाचे अनुसरण करत नाही. + +चला ट्रेस-स्तरीय गुणधर्मांचे वर्णन करण्यासाठी काही सार्वजनिकरित्या प्रवेशयोग्य फंक्शन्स असलेल्या [DAO](/dao/) कॉन्ट्रॅक्टचे उदाहरण वापरूया. येथे, आम्ही असे गृहीत धरतो की DAO कॉन्ट्रॅक्ट वापरकर्त्यांना खालील ऑपरेशन्स करण्याची परवानगी देतो: + +- निधी जमा करा + +- निधी जमा केल्यानंतर प्रस्तावावर मतदान करा + +- जर त्यांनी प्रस्तावावर मतदान केले नसेल तर परताव्याचा दावा करा + +उदाहरणार्थ, ट्रेस-स्तरीय गुणधर्म असू शकतात _"जे वापरकर्ते निधी जमा करत नाहीत ते प्रस्तावावर मतदान करू शकत नाहीत"_ किंवा _"जे वापरकर्ते प्रस्तावावर मतदान करत नाहीत ते नेहमी परताव्याचा दावा करू शकले पाहिजेत"_. दोन्ही गुणधर्म अंमलबजावणीच्या पसंतीच्या अनुक्रमांची पुष्टी करतात (मतदान निधी जमा करण्या_पूर्वी_ होऊ शकत नाही आणि प्रस्तावावर मतदान केल्या_नंतर_ परताव्याचा दावा होऊ शकत नाही). + +## स्मार्ट कॉन्ट्रॅक्ट्सच्या औपचारिक पडताळणीची तंत्रे {#formal-verification-techniques} + +### मॉडेल तपासणी {#model-checking} + +मॉडेल तपासणी हे एक औपचारिक पडताळणी तंत्र आहे ज्यात एक अल्गोरिदम स्मार्ट कॉन्ट्रॅक्टच्या औपचारिक मॉडेलची त्याच्या विनिर्देशनानुसार तपासणी करते. मॉडेल तपासणीमध्ये स्मार्ट कॉन्ट्रॅक्ट्सना अनेकदा स्टेट-ट्रान्झिशन सिस्टम म्हणून दर्शविले जाते, तर परवानगी असलेल्या कॉन्ट्रॅक्ट अवस्थांवरील गुणधर्म टेम्पोरल लॉजिक वापरून परिभाषित केले जातात. + +मॉडेल तपासणीसाठी सिस्टमचे (म्हणजेच, कॉन्ट्रॅक्टचे) अमूर्त गणितीय प्रतिनिधित्व तयार करणे आणि [प्रपोझिशनल लॉजिक](https://www.baeldung.com/cs/propositional-logic) मध्ये रुजलेल्या सूत्रांचा वापर करून या सिस्टमचे गुणधर्म व्यक्त करणे आवश्यक आहे. हे मॉडेल-चेकिंग अल्गोरिदमचे कार्य सोपे करते, म्हणजेच गणितीय मॉडेल दिलेल्या तार्किक सूत्राची पूर्तता करते हे सिद्ध करणे. + +औपचारिक पडताळणीमध्ये मॉडेल तपासणीचा वापर प्रामुख्याने टेम्पोरल गुणधर्मांचे मूल्यांकन करण्यासाठी केला जातो जे वेळेनुसार कॉन्ट्रॅक्टच्या वर्तनाचे वर्णन करतात. स्मार्ट कॉन्ट्रॅक्ट्ससाठी टेम्पोरल गुणधर्मांमध्ये _सुरक्षितता_ आणि _सजीवता_ यांचा समावेश आहे, ज्यांचे आम्ही पूर्वी स्पष्टीकरण दिले आहे. + +उदाहरणार्थ, प्रवेश नियंत्रणाशी संबंधित सुरक्षा गुणधर्म (उदा., _केवळ कॉन्ट्रॅक्टचा मालक `selfdestruct` कॉल करू शकतो_) औपचारिक तर्कात लिहिला जाऊ शकतो. त्यानंतर, मॉडेल-चेकिंग अल्गोरिदम कॉन्ट्रॅक्ट या औपचारिक विनिर्देशनाचे समाधान करतो की नाही हे सत्यापित करू शकतो. + +मॉडेल तपासणी स्टेट स्पेस एक्सप्लोरेशन वापरते, ज्यात स्मार्ट कॉन्ट्रॅक्टच्या सर्व संभाव्य अवस्था तयार करणे आणि गुणधर्म उल्लंघनास कारणीभूत ठरणार्‍या पोहोचण्यायोग्य अवस्था शोधण्याचा प्रयत्न करणे समाविष्ट आहे. तथापि, यामुळे अनंत अवस्था निर्माण होऊ शकतात (ज्याला "स्टेट एक्सप्लोजन प्रॉब्लेम" म्हणतात), म्हणून मॉडेल चेकर्स स्मार्ट कॉन्ट्रॅक्ट्सचे कार्यक्षम विश्लेषण शक्य करण्यासाठी अमूर्तता तंत्रांवर अवलंबून असतात. + +### प्रमेय सिद्ध करणे {#theorem-proving} + +प्रमेय सिद्ध करणे ही स्मार्ट कॉन्ट्रॅक्ट्ससह प्रोग्राम्सच्या अचूकतेबद्दल गणितीयरित्या तर्क करण्याची एक पद्धत आहे. यात कॉन्ट्रॅक्टच्या सिस्टमच्या मॉडेलचे आणि त्याच्या विनिर्देशनांचे गणितीय सूत्रांमध्ये (तार्किक विधानांमध्ये) रूपांतर करणे समाविष्ट आहे. + +प्रमेय सिद्ध करण्याचे उद्दिष्ट या विधानांमधील तार्किक समानतेची पडताळणी करणे आहे. “लॉजिकल इक्विव्हॅलेन्स” (ज्याला “लॉजिकल बाय-इम्प्लिकेशन” असेही म्हणतात) हा दोन विधानांमधील एक प्रकारचा संबंध आहे ज्यामध्ये पहिले विधान खरे असते _जर आणि केवळ जर_ दुसरे विधान खरे असेल. + +कॉन्ट्रॅक्टच्या मॉडेल आणि त्याच्या गुणधर्मांबद्दलच्या विधानांमधील आवश्यक संबंध (लॉजिकल इक्विव्हॅलेन्स) एक सिद्ध करण्यायोग्य विधान (ज्याला प्रमेय म्हणतात) म्हणून तयार केला जातो. अनुमानाची औपचारिक प्रणाली वापरून, स्वयंचलित प्रमेय प्रोव्हर प्रमेयाच्या वैधतेची पडताळणी करू शकतो. दुसऱ्या शब्दांत, एक प्रमेय प्रोव्हर निर्णायकपणे सिद्ध करू शकतो की स्मार्ट कॉन्ट्रॅक्टचे मॉडेल त्याच्या विनिर्देशनांशी तंतोतंत जुळते. + +मॉडेल तपासणी कॉन्ट्रॅक्ट्सना मर्यादित अवस्थांसह संक्रमण प्रणाली म्हणून मॉडेल करते, तर प्रमेय सिद्ध करणे अनंत-अवस्था प्रणालींचे विश्लेषण हाताळू शकते. तथापि, याचा अर्थ असा की स्वयंचलित प्रमेय प्रोव्हरला नेहमीच माहित नसते की एखादी लॉजिक समस्या "निर्णयक्षम" आहे की नाही. + +परिणामी, अचूकतेचे पुरावे मिळवण्यासाठी प्रमेय प्रोव्हरला मार्गदर्शन करण्यासाठी अनेकदा मानवी मदतीची आवश्यकता असते. प्रमेय सिद्ध करण्यामध्ये मानवी प्रयत्नांच्या वापरामुळे ते मॉडेल तपासणीपेक्षा अधिक महाग होते, जे पूर्णपणे स्वयंचलित आहे. + +### प्रतीकात्मक अंमलबजावणी {#symbolic-execution} + +प्रतीकात्मक अंमलबजावणी ही _ठोस मूल्यां_ऐवजी (उदा., `x == 5`) _प्रतीकात्मक मूल्यां_चा (उदा., `x > 5`) वापर करून फंक्शन्स कार्यान्वित करून स्मार्ट कॉन्ट्रॅक्टचे विश्लेषण करण्याची एक पद्धत आहे. औपचारिक पडताळणी तंत्र म्हणून, प्रतीकात्मक अंमलबजावणीचा वापर कॉन्ट्रॅक्टच्या कोडमधील ट्रेस-स्तरीय गुणधर्मांबद्दल औपचारिकपणे तर्क करण्यासाठी केला जातो. + +प्रतीकात्मक अंमलबजावणी एका अंमलबजावणी ट्रेसला प्रतीकात्मक इनपुट मूल्यांवरील गणितीय सूत्र म्हणून दर्शवते, ज्याला _पाथ प्रेडिकेट_ असेही म्हणतात. [SMT सॉल्व्हर](https://en.wikipedia.org/wiki/Satisfiability_modulo_theories) चा वापर पाथ प्रेडिकेट "सॅटिस्फायेबल" आहे की नाही हे तपासण्यासाठी केला जातो (म्हणजे, असे मूल्य अस्तित्वात आहे जे सूत्र पूर्ण करू शकते). जर एखादा असुरक्षित मार्ग सॅटिस्फायेबल असेल, तर SMT सॉल्व्हर एक ठोस मूल्य निर्माण करेल जे अंमलबजावणीला त्या मार्गाकडे वळवते. + +समजा एका स्मार्ट कॉन्ट्रॅक्टचे फंक्शन इनपुट म्हणून `uint` मूल्य (`x`) घेते आणि जेव्हा `x` हे `5` पेक्षा मोठे आणि `10` पेक्षा लहान असते तेव्हा रिव्हर्ट होते. सामान्य चाचणी प्रक्रियेचा वापर करून `x` साठी असे मूल्य शोधण्यासाठी जे त्रुटी ट्रिगर करते, डझनभर (किंवा अधिक) चाचणी प्रकरणे चालवावी लागतील आणि त्रुटी-ट्रिगरिंग इनपुट खरोखरच सापडेल याची खात्री नसेल. + +याउलट, एक प्रतीकात्मक अंमलबजावणी साधन फंक्शनला प्रतीकात्मक मूल्याने कार्यान्वित करेल: `X > 5 ∧ X < 10` (म्हणजेच, `x` हे 5 पेक्षा मोठे आहे आणि `x` हे 10 पेक्षा लहान आहे). संबंधित पाथ प्रेडिकेट `x = X > 5 ∧ X < 10` नंतर निराकरण करण्यासाठी SMT सॉल्व्हरला दिले जाईल. जर एखादे विशिष्ट मूल्य `x = X > 5 ∧ X < 10` हे सूत्र पूर्ण करत असेल, तर SMT सॉल्व्हर ते मोजेल—उदाहरणार्थ, सॉल्व्हर `x` साठी मूल्य म्हणून `7` तयार करू शकतो. + +कारण प्रतीकात्मक अंमलबजावणी प्रोग्रामच्या इनपुटवर अवलंबून असते, आणि सर्व पोहोचण्यायोग्य अवस्था शोधण्यासाठी इनपुटचा संच संभाव्यतः अनंत असतो, त्यामुळे हे अजूनही चाचणीचे एक रूप आहे. तथापि, उदाहरणामध्ये दाखवल्याप्रमाणे, गुणधर्म उल्लंघनांना चालना देणारे इनपुट शोधण्यासाठी प्रतीकात्मक अंमलबजावणी नियमित चाचणीपेक्षा अधिक कार्यक्षम आहे. + +शिवाय, प्रतीकात्मक अंमलबजावणी इतर गुणधर्म-आधारित तंत्रांपेक्षा (उदा., फझिंग) कमी चुकीचे सकारात्मक परिणाम देते जे फंक्शनला यादृच्छिकपणे इनपुट तयार करतात. जर प्रतीकात्मक अंमलबजावणी दरम्यान त्रुटीची स्थिती ट्रिगर झाली, तर त्रुटी ट्रिगर करणारे ठोस मूल्य तयार करणे आणि समस्येचे पुनरुत्पादन करणे शक्य आहे. + +प्रतीकात्मक अंमलबजावणी अचूकतेचा काही प्रमाणात गणितीय पुरावा देखील देऊ शकते. ओव्हरफ्लो संरक्षणासह कॉन्ट्रॅक्ट फंक्शनचे खालील उदाहरण विचारात घ्या: + +``` +function safe_add(uint x, uint y) returns(uint z){ + + z = x + y; + require(z>=x); + require(z>=y); + + return z; +} +``` + +पूर्णांक ओव्हरफ्लो होणाऱ्या अंमलबजावणी ट्रेसला `z = x + y AND (z >= x) AND (z >= y) AND (z < x OR z < y)` हे सूत्र पूर्ण करावे लागेल. असे सूत्र सोडवले जाण्याची शक्यता नाही, म्हणून ते `safe_add` फंक्शन कधीही ओव्हरफ्लो होत नाही याचा गणितीय पुरावा म्हणून काम करते. + +### स्मार्ट कॉन्ट्रॅक्ट्ससाठी औपचारिक पडताळणी का वापरावी? {#benefits-of-formal-verification} + +#### विश्वसनीयतेची गरज {#need-for-reliability} + +औपचारिक पडताळणीचा वापर सुरक्षितता-गंभीर प्रणालींच्या अचूकतेचे मूल्यांकन करण्यासाठी केला जातो ज्यांच्या अपयशामुळे मृत्यू, इजा किंवा आर्थिक नुकसान यांसारखे विनाशकारी परिणाम होऊ शकतात. स्मार्ट कॉन्ट्रॅक्ट्स हे उच्च-मूल्याचे ॲप्लिकेशन्स आहेत जे प्रचंड प्रमाणात मूल्य नियंत्रित करतात, आणि डिझाइनमधील साध्या चुकांमुळे [वापरकर्त्यांना भरून न येणारे नुकसान होऊ शकते](https://www.freecodecamp.org/news/a-hacker-stole-31m-of-ether-how-it-happened-and-what-it-means-for-ethereum-9e5dc29e33ce/amp/). तथापि, उपयोजनापूर्वी कॉन्ट्रॅक्टची औपचारिक पडताळणी केल्याने, ब्लॉकचेनवर चालल्यावर ते अपेक्षेप्रमाणे कार्य करेल याची हमी वाढू शकते. + +कोणत्याही स्मार्ट कॉन्ट्रॅक्टमध्ये विश्वसनीयता हा अत्यंत इष्ट गुण आहे, विशेषतः कारण Ethereum व्हर्च्युअल मशीन (EVM) मध्ये तैनात केलेला कोड सामान्यतः अपरिवर्तनीय असतो. लॉन्च-नंतरचे अपग्रेड सहज उपलब्ध नसल्यामुळे, कॉन्ट्रॅक्ट्सच्या विश्वसनीयतेची हमी देण्याची गरज औपचारिक पडताळणी आवश्यक करते. औपचारिक पडताळणी इंटीजर अंडरफ्लो आणि ओव्हरफ्लो, री-एन्ट्रन्सी आणि खराब गॅस ऑप्टिमायझेशन यांसारख्या अवघड समस्या शोधू शकते, ज्या ऑडिटर्स आणि टेस्टर्सकडून सुटू शकतात. + +#### कार्यात्मक अचूकता सिद्ध करा {#prove-functional-correctness} + +स्मार्ट कॉन्ट्रॅक्ट काही आवश्यकता पूर्ण करतो हे सिद्ध करण्याची सर्वात सामान्य पद्धत प्रोग्राम चाचणी आहे. यामध्ये कॉन्ट्रॅक्टला अपेक्षित असलेल्या डेटाच्या नमुन्यासह कार्यान्वित करणे आणि त्याच्या वर्तनाचे विश्लेषण करणे समाविष्ट आहे. जर कॉन्ट्रॅक्ट नमुना डेटासाठी अपेक्षित परिणाम देत असेल, तर डेव्हलपर्सकडे त्याच्या अचूकतेचा वस्तुनिष्ठ पुरावा असतो. + +तथापि, हा दृष्टिकोन नमुन्याचा भाग नसलेल्या इनपुट मूल्यांसाठी योग्य अंमलबजावणी सिद्ध करू शकत नाही. म्हणून, कॉन्ट्रॅक्टची चाचणी बग शोधण्यात मदत करू शकते (म्हणजे, अंमलबजावणी दरम्यान काही कोड पाथ इच्छित परिणाम देत नसतील तर), पण **ते बगच्या अनुपस्थितीचा निर्णायक पुरावा देऊ शकत नाही**. + +याउलट, औपचारिक पडताळणी औपचारिकपणे सिद्ध करू शकते की स्मार्ट कॉन्ट्रॅक्ट कॉन्ट्रॅक्ट चालवल्या_शिवाय_ अनंत अंमलबजावणीसाठी आवश्यकता पूर्ण करतो. यासाठी एक औपचारिक विनिर्देशन तयार करणे आवश्यक आहे जे योग्य कॉन्ट्रॅक्ट वर्तनांचे अचूक वर्णन करते आणि कॉन्ट्रॅक्टच्या सिस्टमचे एक औपचारिक (गणितीय) मॉडेल विकसित करणे आवश्यक आहे. नंतर आम्ही कॉन्ट्रॅक्टच्या मॉडेल आणि त्याच्या विनिर्देशनामध्ये सुसंगतता तपासण्यासाठी औपचारिक पुरावा प्रक्रियेचे अनुसरण करू शकतो. + +औपचारिक पडताळणीसह, कॉन्ट्रॅक्टचा व्यावसायिक तर्क आवश्यकता पूर्ण करतो की नाही हे सत्यापित करण्याचा प्रश्न एक गणितीय प्रस्ताव आहे जो सिद्ध किंवा असिद्ध केला जाऊ शकतो. औपचारिकपणे प्रस्ताव सिद्ध करून, आम्ही मर्यादित संख्येच्या चरणांसह अनंत संख्येच्या चाचणी प्रकरणांची पडताळणी करू शकतो. या प्रकारे औपचारिक पडताळणीला विनिर्देशनाच्या संदर्भात कॉन्ट्रॅक्ट कार्यात्मकदृष्ट्या योग्य आहे हे सिद्ध करण्याची चांगली शक्यता असते. + +#### आदर्श पडताळणी लक्ष्ये {#ideal-verification-targets} + +पडताळणी लक्ष्य औपचारिकपणे सत्यापित करायच्या प्रणालीचे वर्णन करते. औपचारिक पडताळणीचा वापर "एम्बेडेड सिस्टम्स" मध्ये सर्वोत्तम होतो (मोठ्या प्रणालीचा भाग असलेले लहान, साधे सॉफ्टवेअरचे तुकडे). ते विशेष डोमेनसाठी देखील आदर्श आहेत ज्यात कमी नियम आहेत, कारण यामुळे डोमेन-विशिष्ट गुणधर्मांची पडताळणी करण्यासाठी साधने सुधारणे सोपे होते. + +स्मार्ट कॉन्ट्रॅक्ट्स—किमान, काही प्रमाणात—दोन्ही आवश्यकता पूर्ण करतात. उदाहरणार्थ, Ethereum कॉन्ट्रॅक्ट्सचा लहान आकार त्यांना औपचारिक पडताळणीसाठी अनुकूल बनवतो. त्याचप्रमाणे, EVM सोप्या नियमांचे पालन करते, ज्यामुळे EVM मध्ये चालणाऱ्या प्रोग्राम्ससाठी सिमेंटिक गुणधर्म निर्दिष्ट करणे आणि सत्यापित करणे सोपे होते. + +### जलद विकास चक्र {#faster-development-cycle} + +मॉडेल तपासणी आणि प्रतीकात्मक अंमलबजावणी यांसारखी औपचारिक पडताळणी तंत्रे साधारणपणे स्मार्ट कॉन्ट्रॅक्ट कोडच्या नियमित विश्लेषणापेक्षा (चाचणी किंवा ऑडिटिंग दरम्यान केल्या जाणाऱ्या) अधिक कार्यक्षम असतात. याचे कारण असे की औपचारिक पडताळणी प्रतिपादनांची चाचणी घेण्यासाठी प्रतीकात्मक मूल्यांवर अवलंबून असते ("जर वापरकर्त्याने _n_ ईथर काढण्याचा प्रयत्न केला तर काय होईल?"). चाचणीच्या विपरीत जी ठोस मूल्ये वापरते ("जर वापरकर्त्याने 5 ईथर काढण्याचा प्रयत्न केला तर काय होईल?"). + +प्रतीकात्मक इनपुट व्हेरिएबल्स ठोस मूल्यांच्या अनेक वर्गांना कव्हर करू शकतात, त्यामुळे औपचारिक पडताळणी दृष्टिकोन कमी वेळेत अधिक कोड कव्हरेजचे वचन देतात. प्रभावीपणे वापरल्यास, औपचारिक पडताळणी डेव्हलपर्ससाठी विकास चक्र गतिमान करू शकते. + +औपचारिक पडताळणी खर्चिक डिझाइन त्रुटी कमी करून विकेंद्रित ॲप्लिकेशन्स (dapps) तयार करण्याची प्रक्रिया सुधारते. असुरक्षितता दूर करण्यासाठी कॉन्ट्रॅक्ट्स अपग्रेड करण्यासाठी (जेथे शक्य असेल) कोडबेसचे विस्तृत पुनर्लेखन आणि विकासावर अधिक प्रयत्न आवश्यक आहेत. औपचारिक पडताळणी कॉन्ट्रॅक्ट अंमलबजावणीमधील अनेक त्रुटी शोधू शकते ज्या टेस्टर्स आणि ऑडिटर्सकडून सुटू शकतात आणि कॉन्ट्रॅक्ट तैनात करण्यापूर्वी त्या समस्या दूर करण्याची पुरेशी संधी देते. + +## औपचारिक पडताळणीचे तोटे {#drawbacks-of-formal-verification} + +### मॅन्युअल श्रमाचा खर्च {#cost-of-manual-labor} + +औपचारिक पडताळणी, विशेषतः अर्ध-स्वयंचलित पडताळणी ज्यात मानव प्रोव्हरला अचूकतेचे पुरावे मिळवण्यासाठी मार्गदर्शन करतो, त्यासाठी मोठ्या प्रमाणात मॅन्युअल श्रम आवश्यक आहेत. शिवाय, औपचारिक विनिर्देशन तयार करणे ही एक जटिल क्रिया आहे ज्यासाठी उच्च पातळीचे कौशल्य आवश्यक आहे. + +हे घटक (प्रयत्न आणि कौशल्य) औपचारिक पडताळणीला कॉन्ट्रॅक्ट्समधील अचूकतेचे मूल्यांकन करण्याच्या नेहमीच्या पद्धतींपेक्षा, जसे की चाचणी आणि ऑडिट, अधिक मागणीपूर्ण आणि महाग बनवतात. तरीही, स्मार्ट कॉन्ट्रॅक्ट अंमलबजावणीतील त्रुटींचा खर्च पाहता, पूर्ण पडताळणी ऑडिटसाठी खर्च करणे व्यावहारिक आहे. + +### खोटे नकारात्मक {#false-negatives} + +औपचारिक पडताळणी केवळ स्मार्ट कॉन्ट्रॅक्टची अंमलबजावणी औपचारिक विनिर्देशनाशी जुळते की नाही हे तपासू शकते. त्यामुळे, विनिर्देशन स्मार्ट कॉन्ट्रॅक्टच्या अपेक्षित वर्तनांचे योग्यरित्या वर्णन करते याची खात्री करणे महत्त्वाचे आहे. + +जर विनिर्देशने खराब लिहिलेली असतील, तर गुणधर्मांचे उल्लंघन—जे असुरक्षित अंमलबजावणीकडे निर्देश करतात—औपचारिक पडताळणी ऑडिटद्वारे शोधले जाऊ शकत नाहीत. या प्रकरणात, डेव्हलपर चुकीने समजू शकतो की कॉन्ट्रॅक्ट बग-मुक्त आहे. + +### कार्यप्रदर्शन समस्या {#performance-issues} + +औपचारिक पडताळणीमध्ये अनेक कार्यप्रदर्शन समस्या येतात. उदाहरणार्थ, मॉडेल तपासणी आणि प्रतीकात्मक तपासणी दरम्यान अनुक्रमे येणाऱ्या स्टेट आणि पाथ एक्सप्लोजन समस्या पडताळणी प्रक्रियांना प्रभावित करू शकतात. तसेच, औपचारिक पडताळणी साधने अनेकदा त्यांच्या अंतर्निहित स्तरावर SMT सॉल्व्हर्स आणि इतर कंस्ट्रेंट सॉल्व्हर्स वापरतात, आणि हे सॉल्व्हर्स संगणकीयदृष्ट्या गहन प्रक्रियांवर अवलंबून असतात. + +तसेच, प्रोग्राम व्हेरिफायर्सना नेहमीच हे ठरवणे शक्य नसते की एखादा गुणधर्म (लॉजिकल फॉर्म्युला म्हणून वर्णन केलेला) पूर्ण केला जाऊ शकतो की नाही (the "[decidability problem](https://en.wikipedia.org/wiki/Decision_problem)") कारण प्रोग्राम कधीही समाप्त होऊ शकत नाही. त्यामुळे, कॉन्ट्रॅक्ट व्यवस्थित निर्दिष्ट केलेला असला तरीही काही गुणधर्म सिद्ध करणे अशक्य असू शकते. + +## Ethereum स्मार्ट कॉन्ट्रॅक्ट्ससाठी औपचारिक पडताळणी साधने {#formal-verification-tools} + +### औपचारिक विनिर्देशने तयार करण्यासाठी विनिर्देशन भाषा {#specification-languages} + +**Act**: __Act स्टोरेज अद्यतने, पूर्व/उत्तर अटी आणि कॉन्ट्रॅक्ट अचलांचे विनिर्देशन करण्याची परवानगी देते. त्याच्या टूल सूटमध्ये पुरावा बॅकएंड्स देखील आहेत जे Coq, SMT सॉल्व्हर्स किंवा hevm द्वारे अनेक गुणधर्म सिद्ध करण्यास सक्षम आहेत.__ + +- [GitHub](https://github.com/ethereum/act) +- [दस्तऐवजीकरण](https://github.com/argotorg/act) + +**Scribble** - __Scribble, Scribble विनिर्देशन भाषेतील कोड भाष्यांना ठोस प्रतिपादनांमध्ये रूपांतरित करते जे विनिर्देशन तपासतात.__ + +- [दस्तऐवजीकरण](https://docs.scribble.codes/) + +**Dafny** - __Dafny ही पडताळणी-तयार प्रोग्रामिंग भाषा आहे जी कोडच्या अचूकतेबद्दल तर्क करण्यासाठी आणि सिद्ध करण्यासाठी उच्च-स्तरीय भाष्यांवर अवलंबून असते.__ + +- [GitHub](https://github.com/dafny-lang/dafny) + +### अचूकता तपासण्यासाठी प्रोग्राम व्हेरिफायर्स {#program-verifiers} + +**Certora Prover** - _Certora Prover हे स्मार्ट कॉन्ट्रॅक्ट्समधील कोडची अचूकता तपासण्यासाठी एक स्वयंचलित औपचारिक पडताळणी साधन आहे. विनिर्देशने CVL (Certora व्हेरिफिकेशन लँग्वेज) मध्ये लिहिली जातात, ज्यात स्टॅटिक विश्लेषण आणि कंस्ट्रेंट-सॉल्व्हिंगच्या संयोगाने गुणधर्म उल्लंघने शोधली जातात._ + +- [वेबसाइट](https://www.certora.com/) +- [दस्तऐवजीकरण](https://docs.certora.com/en/latest/index.html) + +**Solidity SMTChecker** - __Solidity चे SMTChecker हे SMT (सॅटिस्फायबिलिटी मॉड्युलो थिअरीज) आणि हॉर्न सॉल्विंगवर आधारित एक अंगभूत मॉडेल तपासक आहे. ते संकलनादरम्यान कॉन्ट्रॅक्टचा सोर्स कोड विनिर्देशनांशी जुळतो की नाही याची पुष्टी करते आणि सुरक्षितता गुणधर्मांच्या उल्लंघनांसाठी स्थिरपणे तपासते.__ + +- [GitHub](https://github.com/ethereum/solidity) + +**solc-verify** - __solc-verify ही Solidity कंपाइलरची विस्तारित आवृत्ती आहे जी भाष्यांचा आणि मॉड्यूलर प्रोग्राम पडताळणीचा वापर करून Solidity कोडवर स्वयंचलित औपचारिक पडताळणी करू शकते.__ + +- [GitHub](https://github.com/SRI-CSL/solidity) + +**KEVM** - __KEVM हे K फ्रेमवर्कमध्ये लिहिलेले Ethereum व्हर्च्युअल मशीन (EVM) चे औपचारिक सिमेंटिक्स आहे. KEVM कार्यान्वित करण्यायोग्य आहे आणि रीचेबिलिटी लॉजिक वापरून काही गुणधर्म-संबंधित प्रतिपादने सिद्ध करू शकते.__ + +- [GitHub](https://github.com/runtimeverification/evm-semantics) +- [दस्तऐवजीकरण](https://jellopaper.org/) + +### प्रमेय सिद्ध करण्यासाठी तार्किक फ्रेमवर्क {#theorem-provers} + +**Isabelle** - _Isabelle/HOL एक पुरावा सहाय्यक आहे जो गणितीय सूत्रांना औपचारिक भाषेत व्यक्त करण्याची परवानगी देतो आणि ती सूत्रे सिद्ध करण्यासाठी साधने प्रदान करतो. मुख्य ॲप्लिकेशन गणितीय पुराव्यांचे औपचारिकीकरण आणि विशेषतः औपचारिक पडताळणी आहे, ज्यात संगणक हार्डवेअर किंवा सॉफ्टवेअरची अचूकता सिद्ध करणे आणि संगणक भाषा आणि प्रोटोकॉलचे गुणधर्म सिद्ध करणे समाविष्ट आहे._ + +- [GitHub](https://github.com/isabelle-prover) +- [दस्तऐवजीकरण](https://isabelle.in.tum.de/documentation.html) + +**Rocq** - _Rocq एक इंटरॅक्टिव्ह प्रमेय प्रोव्हर आहे जो तुम्हाला प्रमेयांचा वापर करून प्रोग्राम्स परिभाषित करू देतो आणि अचूकतेचे मशीन-चेक्ड पुरावे इंटरॅक्टिव्हपणे तयार करू देतो._ + +- [GitHub](https://github.com/rocq-prover/rocq) +- [दस्तऐवजीकरण](https://rocq-prover.org/docs) + +### स्मार्ट कॉन्ट्रॅक्ट्समध्ये असुरक्षित नमुने शोधण्यासाठी प्रतीकात्मक अंमलबजावणी-आधारित साधने {#symbolic-execution-tools} + +**Manticore** - __प्रतीकात्मक अंमलबजावणीवर आधारित EVM बायकोड विश्लेषणासाठी एक साधन_._ + +- [GitHub](https://github.com/trailofbits/manticore) +- [दस्तऐवजीकरण](https://github.com/trailofbits/manticore/wiki) + +**hevm** - __hevm हे EVM बायकोडसाठी एक प्रतीकात्मक अंमलबजावणी इंजिन आणि समतुल्यता तपासक आहे.__ + +- [GitHub](https://github.com/dapphub/dapptools/tree/master/src/hevm) + +**Mythril** - _Ethereum स्मार्ट कॉन्ट्रॅक्ट्समधील असुरक्षितता शोधण्यासाठी एक प्रतीकात्मक अंमलबजावणी साधन_ + +- [GitHub](https://github.com/ConsenSys/mythril-classic) +- [दस्तऐवजीकरण](https://mythril-classic.readthedocs.io/en/develop/) + +## पुढील वाचन {#further-reading} + +- [स्मार्ट कॉन्ट्रॅक्ट्सची औपचारिक पडताळणी कशी कार्य करते](https://runtimeverification.com/blog/how-formal-verification-of-smart-contracts-works/) +- [औपचारिक पडताळणी निर्दोष स्मार्ट कॉन्ट्रॅक्ट्स कसे सुनिश्चित करू शकते](https://media.consensys.net/how-formal-verification-can-ensure-flawless-smart-contracts-cbda8ad99bd1) +- [Ethereum इकोसिस्टममधील औपचारिक पडताळणी प्रकल्पांचा आढावा](https://github.com/leonardoalt/ethereum_formal_verification_overview) +- [Ethereum 2.0 डिपॉझिट स्मार्ट कॉन्ट्रॅक्टची एंड-टू-एंड औपचारिक पडताळणी](https://runtimeverification.com/blog/end-to-end-formal-verification-of-ethereum-2-0-deposit-smart-contract/) +- [जगातील सर्वात लोकप्रिय स्मार्ट कॉन्ट्रॅक्टची औपचारिक पडताळणी](https://www.zellic.io/blog/formal-verification-weth) +- [SMTChecker आणि औपचारिक पडताळणी](https://docs.soliditylang.org/en/v0.8.15/smtchecker.html) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/index.md b/public/content/translations/mr/developers/docs/smart-contracts/index.md new file mode 100644 index 00000000000..afe8ceb52f8 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/index.md @@ -0,0 +1,112 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्टची ओळख" +description: "स्मार्ट कॉन्ट्रॅक्ट्सचे अवलोकन, त्यांच्या अद्वितीय वैशिष्ट्यांवर आणि मर्यादांवर लक्ष केंद्रित करणे." +lang: mr +--- + +## स्मार्ट कॉन्ट्रॅक्ट म्हणजे काय? {#what-is-a-smart-contract} + +"स्मार्ट कॉन्ट्रॅक्ट" हा फक्त इथेरिअम ब्लॉकचेनवर चालणारा एक प्रोग्राम आहे. हा कोड (त्याची फंक्शन्स) आणि डेटा (त्याची स्टेट) यांचा संग्रह आहे जो इथेरिअम ब्लॉकचेनवरील विशिष्ट ॲड्रेसवर असतो. + +स्मार्ट कॉन्ट्रॅक्ट्स हे [इथेरिअम अकाउंट](/developers/docs/accounts/) चा एक प्रकार आहेत. याचा अर्थ त्यांच्याकडे बॅलन्स असतो आणि ते व्यवहारांचे लक्ष्य असू शकतात. तथापि ते वापरकर्त्याद्वारे नियंत्रित केले जात नाहीत, त्याऐवजी ते नेटवर्कवर तैनात केले जातात आणि प्रोग्राम केल्यानुसार चालतात. वापरकर्ता खाती स्मार्ट कॉन्ट्रॅक्टवर परिभाषित फंक्शन कार्यान्वित करणाऱ्या व्यवहारांना सबमिट करून स्मार्ट कॉन्ट्रॅक्टशी संवाद साधू शकतात. स्मार्ट कॉन्ट्रॅक्ट्स नियमित कराराप्रमाणे नियम परिभाषित करू शकतात आणि कोडद्वारे त्यांची आपोआप अंमलबजावणी करू शकतात. स्मार्ट कॉन्ट्रॅक्ट्स डीफॉल्टनुसार हटवले जाऊ शकत नाहीत आणि त्यांच्यासोबतचे संवाद अपरिवर्तनीय आहेत. + +## पूर्वतयारी {#prerequisites} + +तुम्ही नुकतीच सुरुवात करत असाल किंवा कमी तांत्रिक परिचय शोधत असाल, तर आम्ही आमच्या [स्मार्ट कॉन्ट्रॅक्ट्सच्या परिचयाची](/smart-contracts/) शिफारस करतो. + +स्मार्ट कॉन्ट्रॅक्ट्सच्या जगात प्रवेश करण्यापूर्वी तुम्ही [खाती](/developers/docs/accounts/), [व्यवहार](/developers/docs/transactions/) आणि [इथेरिअम व्हर्च्युअल मशीन](/developers/docs/evm/) बद्दल वाचले असल्याची खात्री करा. + +## एक डिजिटल वेंडिंग मशीन {#a-digital-vending-machine} + +[निक स्झाबो](https://unenumerated.blogspot.com/) यांनी वर्णन केल्याप्रमाणे, स्मार्ट कॉन्ट्रॅक्टसाठी कदाचित सर्वोत्तम रूपक वेंडिंग मशीन आहे. योग्य इनपुटसह, विशिष्ट आउटपुटची हमी दिली जाते. + +वेंडिंग मशीनमधून स्नॅक मिळवण्यासाठी: + +``` +पैसे + स्नॅक निवड = स्नॅक वितरित +``` + +हे लॉजिक वेंडिंग मशीनमध्ये प्रोग्राम केलेले आहे. + +वेंडिंग मशीनप्रमाणेच स्मार्ट कॉन्ट्रॅक्टमध्ये लॉजिक प्रोग्राम केलेले असते. सॉलिडिटीमध्ये लिहिलेला स्मार्ट कॉन्ट्रॅक्ट असल्यास हे वेंडिंग मशीन कसे दिसेल याचे एक सोपे उदाहरण येथे आहे: + +```solidity +pragma solidity 0.8.7; + +contract VendingMachine { + + // कॉन्ट्रॅक्टच्या स्टेट व्हेरिएबल्स घोषित करा + address public owner; + mapping (address => uint) public cupcakeBalances; + + // जेव्हा 'VendingMachine' कॉन्ट्रॅक्ट तैनात केला जातो: + // १. तैनात करणाऱ्या ॲड्रेसला कॉन्ट्रॅक्टचा मालक म्हणून सेट करा + // २. तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्टचा कप केक बॅलन्स १०० वर सेट करा + constructor() { + owner = msg.sender; + cupcakeBalances[address(this)] = 100; + } + + // मालकाला स्मार्ट कॉन्ट्रॅक्टचा कप केक बॅलन्स वाढवण्याची परवानगी द्या + function refill(uint amount) public { + require(msg.sender == owner, "केवळ मालकच रिफिल करू शकतो."); + cupcakeBalances[address(this)] += amount; + } + + // कोणालाही कप केक खरेदी करण्याची परवानगी द्या + function purchase(uint amount) public payable { + require(msg.value >= amount * 1 ether, "तुम्ही प्रति कप केक किमान 1 ETH देणे आवश्यक आहे"); + require(cupcakeBalances[address(this)] >= amount, "ही खरेदी पूर्ण करण्यासाठी स्टॉकमध्ये पुरेसे कप केक नाहीत"); + cupcakeBalances[address(this)] -= amount; + cupcakeBalances[msg.sender] += amount; + } +} +``` + +ज्याप्रमाणे वेंडिंग मशीनमुळे विक्रेता कर्मचाऱ्याची गरज नाहीशी होते, त्याचप्रमाणे स्मार्ट कॉन्ट्रॅक्ट अनेक उद्योगांमधील मध्यस्थांची जागा घेऊ शकतात. + +## परवानगीविरहित {#permissionless} + +कोणीही स्मार्ट कॉन्ट्रॅक्ट लिहू शकतो आणि ते नेटवर्कवर तैनात करू शकतो. तुम्हाला फक्त [स्मार्ट कॉन्ट्रॅक्ट भाषेत](/developers/docs/smart-contracts/languages/) कोड कसे करायचे हे शिकण्याची आणि तुमचा कॉन्ट्रॅक्ट तैनात करण्यासाठी पुरेसा ETH असणे आवश्यक आहे. स्मार्ट कॉन्ट्रॅक्ट तैनात करणे हे तांत्रिकदृष्ट्या एक व्यवहार आहे, त्यामुळे तुम्हाला साध्या ETH हस्तांतरणासाठी गॅस द्यावा लागतो त्याच प्रकारे [गॅस](/developers/docs/gas/) द्यावा लागेल. तथापि, कॉन्ट्रॅक्ट तैनात करण्यासाठी गॅस खर्च खूप जास्त असतो. + +इथेरिअममध्ये स्मार्ट कॉन्ट्रॅक्ट लिहिण्यासाठी डेव्हलपर-अनुकूल भाषा आहेत: + +- Solidity +- Vyper + +[भाषांबद्दल अधिक](/developers/docs/smart-contracts/languages/) + +तथापि, ते तैनात करण्यापूर्वी त्यांना संकलित करणे आवश्यक आहे जेणेकरून इथेरिअमचे व्हर्च्युअल मशीन कॉन्ट्रॅक्टचा अर्थ लावू शकेल आणि संचयित करू शकेल. [संकलनाबद्दल अधिक](/developers/docs/smart-contracts/compiling/) + +## कंपोझिबिलिटी {#composability} + +स्मार्ट कॉन्ट्रॅक्ट इथेरिअमवर सार्वजनिक आहेत आणि त्यांना मुक्त API म्हणून मानले जाऊ शकते. याचा अर्थ तुम्ही तुमच्या स्वतःच्या स्मार्ट कॉन्ट्रॅक्टमध्ये इतर स्मार्ट कॉन्ट्रॅक्ट्सना कॉल करू शकता जेणेकरून जे शक्य आहे ते मोठ्या प्रमाणात वाढवता येईल. कॉन्ट्रॅक्ट्स इतर कॉन्ट्रॅक्ट्स देखील तैनात करू शकतात. + +[स्मार्ट कॉन्ट्रॅक्ट कंपोझिबिलिटी](/developers/docs/smart-contracts/composability/) बद्दल अधिक जाणून घ्या. + +## मर्यादा {#limitations} + +स्मार्ट कॉन्ट्रॅक्ट्स एकटे "वास्तविक-जगातील" घटनांबद्दल माहिती मिळवू शकत नाहीत कारण ते ऑफचेन स्त्रोतांकडून डेटा मिळवू शकत नाहीत. याचा अर्थ ते वास्तविक जगातील घटनांना प्रतिसाद देऊ शकत नाहीत. हे डिझाइननुसार आहे. बाह्य माहितीवर अवलंबून राहण्याने सहमती धोक्यात येऊ शकते, जी सुरक्षा आणि विकेंद्रीकरणासाठी महत्त्वाची आहे. + +तथापि, ब्लॉकचेन ॲप्लिकेशन्ससाठी ऑफचेन डेटा वापरता येणे महत्त्वाचे आहे. यावरील उपाय म्हणजे [ऑरेकल्स](/developers/docs/oracles/) जे ऑफचेन डेटा घेतात आणि स्मार्ट कॉन्ट्रॅक्ट्ससाठी उपलब्ध करतात. + +स्मार्ट कॉन्ट्रॅक्ट्सची आणखी एक मर्यादा म्हणजे कमाल कॉन्ट्रॅक्ट आकार. एक स्मार्ट कॉन्ट्रॅक्ट जास्तीत जास्त 24KB असू शकतो अन्यथा त्याचा गॅस संपेल. [डायमंड पॅटर्न](https://eips.ethereum.org/EIPS/eip-2535) वापरून हे टाळता येऊ शकते. + +## मल्टीसिग कॉन्ट्रॅक्ट्स {#multisig} + +मल्टीसिग (मल्टिपल-सिग्नेचर) कॉन्ट्रॅक्ट्स हे स्मार्ट कॉन्ट्रॅक्ट अकाउंट्स आहेत ज्यांना व्यवहार कार्यान्वित करण्यासाठी अनेक वैध स्वाक्षऱ्यांची आवश्यकता असते. इथर किंवा इतर टोकन्सची मोठी रक्कम असलेल्या कॉन्ट्रॅक्ट्ससाठी अयशस्वीतेचे एकल बिंदू टाळण्यासाठी हे खूप उपयुक्त आहे. मल्टीसिग्ज कॉन्ट्रॅक्टच्या अंमलबजावणीची आणि की व्यवस्थापनाची जबाबदारी अनेक पक्षांमध्ये विभागतात आणि एका खाजगी कीच्या नुकसानीमुळे निधीचे अपरिवर्तनीय नुकसान होण्यास प्रतिबंध करतात. या कारणास्तव, मल्टीसिग कॉन्ट्रॅक्ट्स साध्या DAO गव्हर्नन्ससाठी वापरले जाऊ शकतात. मल्टीसिगला कार्यान्वित करण्यासाठी M संभाव्य स्वीकार्य स्वाक्षऱ्यांपैकी N स्वाक्षऱ्यांची आवश्यकता असते (जेथे N ≤ M, आणि M > 1). `N = 3, M = 5` आणि `N = 4, M = 7` सामान्यतः वापरले जातात. एका 4/7 मल्टीसिगला सात संभाव्य वैध स्वाक्षऱ्यांपैकी चार स्वाक्षऱ्यांची आवश्यकता असते. याचा अर्थ तीन स्वाक्षऱ्या गमावल्या तरीही निधी परत मिळवता येतो. या प्रकरणात, याचा अर्थ असा आहे की कॉन्ट्रॅक्ट कार्यान्वित होण्यासाठी बहुसंख्य की-धारकांनी सहमत होऊन स्वाक्षरी करणे आवश्यक आहे. + +## स्मार्ट कॉन्ट्रॅक्ट संसाधने {#smart-contract-resources} + +**OpenZeppelin Contracts -** **_सुरक्षित स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंटसाठी लायब्ररी._** + +- [openzeppelin.com/contracts/](https://openzeppelin.com/contracts/) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts) +- [कम्युनिटी फोरम](https://forum.openzeppelin.com/c/general/16) + +## पुढील वाचन {#further-reading} + +- [Coinbase: स्मार्ट कॉन्ट्रॅक्ट म्हणजे काय?](https://www.coinbase.com/learn/crypto-basics/what-is-a-smart-contract) +- [Chainlink: स्मार्ट कॉन्ट्रॅक्ट म्हणजे काय?](https://chain.link/education/smart-contracts) +- [व्हिडिओ: सोप्या भाषेत स्पष्टीकरण - स्मार्ट कॉन्ट्रॅक्ट्स](https://youtu.be/ZE2HxTmxfrI) +- [Cyfrin Updraft: Web3 लर्निंग आणि ऑडिटिंग प्लॅटफॉर्म](https://updraft.cyfrin.io) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/languages/index.md b/public/content/translations/mr/developers/docs/smart-contracts/languages/index.md new file mode 100644 index 00000000000..a5ff4c7991d --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/languages/index.md @@ -0,0 +1,343 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट भाषा" +description: "दोन मुख्य स्मार्ट कॉन्ट्रॅक्ट भाषा - Solidity आणि Vyper यांचा आढावा आणि तुलना." +lang: mr +--- + +Ethereum बद्दल एक उत्तम गोष्ट ही आहे की स्मार्ट कॉन्ट्रॅक्ट्स तुलनेने विकसक-अनुकूल भाषा वापरून प्रोग्राम केले जाऊ शकतात. तुम्ही Python किंवा कोणत्याही [कर्ली-ब्रॅकेट भाषेमध्ये](https://wikipedia.org/wiki/List_of_programming_languages_by_type#Curly-bracket_languages) अनुभवी असाल, तर तुम्हाला परिचित सिंटॅक्स असलेली भाषा सापडू शकते. + +दोन सर्वात सक्रिय आणि देखरेख केलेल्या भाषा आहेत: + +- Solidity +- Vyper + +Remix IDE हे Solidity आणि Vyper या दोन्हीमधील कॉन्ट्रॅक्ट्स तयार करण्यासाठी आणि तपासण्यासाठी एक सर्वसमावेशक विकास वातावरण प्रदान करते. कोडिंग सुरू करण्यासाठी [ब्राउझर-मधील Remix IDE वापरून पाहा](https://remix.ethereum.org). + +अधिक अनुभवी विकसक [Ethereum Virtual Machine](/developers/docs/evm/) साठी एक मध्यस्थ भाषा Yul, किंवा Yul+ जे Yul चे विस्तारीकरण आहे, वापरू शकतात. + +तुम्ही उत्सुक असाल आणि मोठ्या प्रमाणात विकासाधीन असलेल्या नवीन भाषा तपासण्यात मदत करू इच्छित असाल, तर तुम्ही Fe सह प्रयोग करू शकता, जी एक उदयोन्मुख स्मार्ट कॉन्ट्रॅक्ट भाषा आहे आणि सध्या तिच्या सुरुवातीच्या टप्प्यात आहे. + +## पूर्वतयारी {#prerequisites} + +प्रोग्रामिंग भाषांचे, विशेषतः JavaScript किंवा Python चे पूर्वीचे ज्ञान, तुम्हाला स्मार्ट कॉन्ट्रॅक्ट भाषांमधील फरक समजून घेण्यास मदत करू शकते. आम्ही शिफारस करतो की भाषांच्या तुलनेत खोलवर जाण्यापूर्वी तुम्ही स्मार्ट कॉन्ट्रॅक्ट्स एक संकल्पना म्हणून समजून घ्या. [स्मार्ट कॉन्ट्रॅक्ट्सची ओळख](/developers/docs/smart-contracts/). + +## Solidity {#solidity} + +- स्मार्ट कॉन्ट्रॅक्ट्स लागू करण्यासाठी ऑब्जेक्ट-ओरिएंटेड, उच्च-स्तरीय भाषा. +- कर्ली-ब्रॅकेट भाषा जी C++ द्वारे सर्वाधिक प्रभावित झाली आहे. +- स्टॅटिकली टाइप केलेली (व्हेरिएबलचा प्रकार कंपाइल वेळेस ज्ञात असतो). +- समर्थन करते: + - इनहेरिटन्स (तुम्ही इतर कॉन्ट्रॅक्ट्स विस्तारित करू शकता). + - लायब्ररीज (तुम्ही पुन्हा वापरण्यायोग्य कोड तयार करू शकता जो तुम्ही वेगवेगळ्या कॉन्ट्रॅक्ट्समधून कॉल करू शकता – जसे की इतर ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषांमधील स्टॅटिक क्लासमधील स्टॅटिक फंक्शन्स). + - जटिल वापरकर्ता-परिभाषित प्रकार. + +### महत्वाच्या लिंक्स {#important-links} + +- [दस्तऐवजीकरण](https://docs.soliditylang.org/en/latest/) +- [Solidity लँग्वेज पोर्टल](https://soliditylang.org/) +- [उदाहरणांसह Solidity](https://docs.soliditylang.org/en/latest/solidity-by-example.html) +- [GitHub](https://github.com/ethereum/solidity/) +- [Solidity Gitter चॅटरूम](https://gitter.im/ethereum/solidity) जे [Solidity Matrix चॅटरूम](https://matrix.to/#/#ethereum_solidity:gitter.im) शी जोडलेले आहे +- [चीट शीट](https://reference.auditless.com/cheatsheet) +- [Solidity ब्लॉग](https://blog.soliditylang.org/) +- [Solidity ट्विटर](https://twitter.com/solidity_lang) + +### उदाहरण कॉन्ट्रॅक्ट {#example-contract} + +```solidity +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >= 0.7.0; + +contract Coin { + // "पब्लिक" हा कीवर्ड व्हेरिएबल्स + // इतर कॉन्ट्रॅक्ट्समधून ॲक्सेस करण्यायोग्य बनवतो + address public minter; + mapping (address => uint) public balances; + + // इव्हेंट्स क्लायंटना तुम्ही घोषित केलेल्या विशिष्ट + // कॉन्ट्रॅक्ट बदलांवर प्रतिक्रिया देण्यास अनुमती देतात + event Sent(address from, address to, uint amount); + + // कन्स्ट्रक्टर कोड फक्त कॉन्ट्रॅक्ट + // तयार झाल्यावर चालतो + constructor() { + minter = msg.sender; + } + + // एका ॲड्रेसवर नवीन तयार केलेल्या कॉइन्सची रक्कम पाठवते + // फक्त कॉन्ट्रॅक्ट तयार करणाऱ्याद्वारे कॉल केले जाऊ शकते + function mint(address receiver, uint amount) public { + require(msg.sender == minter); + require(amount < 1e60); + balances[receiver] += amount; + } + + // अस्तित्वात असलेल्या कॉइन्सची रक्कम + // कोणत्याही कॉलरकडून एका ॲड्रेसवर पाठवते + function send(address receiver, uint amount) public { + require(amount <= balances[msg.sender], "अपुरी शिल्लक."); + balances[msg.sender] -= amount; + balances[receiver] += amount; + emit Sent(msg.sender, receiver, amount); + } +} +``` + +हे उदाहरण तुम्हाला Solidity कॉन्ट्रॅक्ट सिंटॅक्स कसा असतो याची कल्पना देईल. फंक्शन्स आणि व्हेरिएबल्सच्या अधिक तपशीलवार वर्णनासाठी, [डॉक्युमेंट्स पहा](https://docs.soliditylang.org/en/latest/contracts.html). + +## Vyper {#vyper} + +- पायथॉनिक प्रोग्रामिंग भाषा +- स्ट्रॉंग टायपिंग +- लहान आणि समजण्याजोगा कंपाइलर कोड +- कार्यक्षम बाईटकोड निर्मिती +- Solidity पेक्षा मुद्दामहून कमी वैशिष्ट्ये आहेत, ज्याचा उद्देश कॉन्ट्रॅक्ट्स अधिक सुरक्षित आणि ऑडिट करण्यास सोपे बनवणे आहे. Vyper समर्थन करत नाही: + - मॉडिफायर्स + - इनहेरिटन्स + - इनलाइन असेंब्ली + - फंक्शन ओव्हरलोडिंग + - ऑपरेटर ओव्हरलोडिंग + - रिकर्सिव्ह कॉलिंग + - अनंत-लांबीचे लूप्स + - बायनरी फिक्स्ड पॉइंट्स + +अधिक माहितीसाठी, [Vyper रॅशनल वाचा](https://vyper.readthedocs.io/en/latest/index.html). + +### महत्वाच्या लिंक्स {#important-links-1} + +- [दस्तऐवजीकरण](https://vyper.readthedocs.io) +- [उदाहरणांसह Vyper](https://vyper.readthedocs.io/en/latest/vyper-by-example.html) +- [उदाहरणांसह अधिक Vyper](https://vyper-by-example.org/) +- [GitHub](https://github.com/vyperlang/vyper) +- [Vyper कम्युनिटी डिस्कॉर्ड चॅट](https://discord.gg/SdvKC79cJk) +- [चीट शीट](https://reference.auditless.com/cheatsheet) +- [Vyper साठी स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंट फ्रेमवर्क आणि टूल्स](/developers/docs/programming-languages/python/) +- [VyperPunk - Vyper स्मार्ट कॉन्ट्रॅक्ट्स सुरक्षित करणे आणि हॅक करणे शिका](https://github.com/SupremacyTeam/VyperPunk) +- [विकासासाठी Vyper हब](https://github.com/zcor/vyper-dev) +- [Vyper ग्रेटेस्ट हिट्स स्मार्ट कॉन्ट्रॅक्ट उदाहरणे](https://github.com/pynchmeister/vyper-greatest-hits/tree/main/contracts) +- [अप्रतिम Vyper क्युरेटेड संसाधने](https://github.com/spadebuilders/awesome-vyper) + +### उदाहरण {#example} + +```python +# ओपन ऑक्शन + +# लिलाव पॅरामीटर्स + +# लाभार्थीला सर्वाधिक बोली लावणाऱ्याकडून पैसे मिळतात + +beneficiary: public(address) +auctionStart: public(uint256) +auctionEnd: public(uint256) + +# लिलावाची सद्यस्थिती + +highestBidder: public(address) +highestBid: public(uint256) + +# शेवटी खरे वर सेट केले, कोणताही बदल करण्यास मनाई करते + +ended: public(bool) + +# परत केलेल्या बोलींचा मागोवा ठेवा जेणेकरून आम्ही काढण्याच्या पद्धतीचे अनुसरण करू शकू + +pendingReturns: public(HashMap[address, uint256]) + +# `_bidding_time` सह एक साधा लिलाव तयार करा + +# लाभार्थीच्या वतीने सेकंदांची बोली वेळ + +# लाभार्थी पत्ता `_beneficiary`. + +@external +def __init__(_beneficiary: address, _bidding_time: uint256): + self.beneficiary = _beneficiary + self.auctionStart = block.timestamp + self.auctionEnd = self.auctionStart + _bidding_time + +# पाठवलेल्या मूल्याने लिलावावर बोली लावा + +# या व्यवहारासोबत. + +# मूल्य फक्त परत केले जाईल जर + +# लिलाव जिंकला नाही. + +@external +@payable +def bid(): + # बोलीचा कालावधी संपला आहे का ते तपासा. + assert block.timestamp < self.auctionEnd + # बोली पुरेशी आहे का ते तपासा + assert msg.value > self.highestBid + # मागील उच्च बोली लावणाऱ्यासाठी परताव्याचा मागोवा घ्या + self.pendingReturns[self.highestBidder] += self.highestBid + # नवीन उच्च बोलीचा मागोवा घ्या + self.highestBidder = msg.sender + self.highestBid = msg.value + +# पूर्वी परत केलेली बोली काढा. काढण्याची पद्धत + +# येथे सुरक्षा समस्या टाळण्यासाठी वापरली जाते. जर परतावे थेट + +# bid() चा भाग म्हणून पाठवले गेले, तर एक दुर्भावनापूर्ण बोली करार ब्लॉक करू शकतो + +# ते परतावे आणि त्यामुळे नवीन उच्च बोली येण्यापासून रोखू शकतो. + +@external +def withdraw(): + pending_amount: uint256 = self.pendingReturns[msg.sender] + self.pendingReturns[msg.sender] = 0 + send(msg.sender, pending_amount) + +# लिलाव समाप्त करा आणि सर्वोच्च बोली पाठवा + +# लाभार्थीला. + +@external +def endAuction(): + # संवाद साधणाऱ्या फंक्शन्सची रचना करणे हे एक चांगले मार्गदर्शक तत्त्व आहे + # इतर करारांसह (म्हणजे, ते फंक्शन्सना कॉल करतात किंवा इथर पाठवतात) + # तीन टप्प्यांमध्ये: + # 1. अटी तपासणे + # 2. क्रिया करणे (संभाव्यतः अटी बदलणे) + # 3. इतर करारांशी संवाद साधणे + # जर हे टप्पे मिसळले गेले, तर दुसरा करार कॉल करू शकतो + # सध्याच्या करारामध्ये परत आणि स्थिती सुधारित करू शकतो किंवा + # परिणाम (इथर पेआउट) अनेक वेळा केले जाऊ शकतात. + # जर अंतर्गत कॉल केलेल्या फंक्शन्समध्ये बाह्य करारांसह + # संवाद समाविष्ट असेल, तर त्यांना देखील बाह्य करारांसह + # संवाद मानले पाहिजे. + + # 1. अटी + # लिलावाची समाप्तीची वेळ आली आहे का ते तपासा + assert block.timestamp >= self.auctionEnd + # हे फंक्शन आधीच कॉल केले आहे का ते तपासा + assert not self.ended + + # 2. परिणाम + self.ended = True + + # 3. संवाद + send(self.beneficiary, self.highestBid) +``` + +हे उदाहरण तुम्हाला Vyper कॉन्ट्रॅक्ट सिंटॅक्स कसा असतो याची कल्पना देईल. फंक्शन्स आणि व्हेरिएबल्सच्या अधिक तपशीलवार वर्णनासाठी, [डॉक्युमेंट्स पहा](https://vyper.readthedocs.io/en/latest/vyper-by-example.html#simple-open-auction). + +## Yul आणि Yul+ {#yul} + +तुम्ही Ethereum साठी नवीन असाल आणि अद्याप स्मार्ट कॉन्ट्रॅक्ट भाषांसह कोडिंग केले नसेल, तर आम्ही Solidity किंवा Vyper सह प्रारंभ करण्याची शिफारस करतो. स्मार्ट कॉन्ट्रॅक्ट सुरक्षा सर्वोत्तम पद्धती आणि EVM सह काम करण्याच्या तपशीलांशी तुम्ही परिचित झाल्यावरच Yul किंवा Yul+ चा विचार करा. + +**Yul** + +- Ethereum साठी मध्यस्थ भाषा. +- [EVM](/developers/docs/evm) आणि [Ewasm](https://github.com/ewasm), एक Ethereum फ्लेवर्ड वेबअसेंब्ली, ला समर्थन देते आणि दोन्ही प्लॅटफॉर्म्सचा वापरण्यायोग्य समान विभाजक म्हणून डिझाइन केले आहे. +- उच्च-स्तरीय ऑप्टिमायझेशन टप्प्यांसाठी चांगले लक्ष्य जे EVM आणि Ewasm दोन्ही प्लॅटफॉर्मला समान फायदा देऊ शकतात. + +**Yul+** + +- Yul चे एक निम्न-स्तरीय, अत्यंत कार्यक्षम विस्तारीकरण. +- सुरुवातीला [optimistic rollup](/developers/docs/scaling/optimistic-rollups/) कॉन्ट्रॅक्टसाठी डिझाइन केलेले. +- Yul+ ला Yul साठी एक प्रायोगिक अपग्रेड प्रस्ताव म्हणून पाहिले जाऊ शकते, जे त्यात नवीन वैशिष्ट्ये जोडते. + +### महत्वाच्या लिंक्स {#important-links-2} + +- [Yul दस्तऐवजीकरण](https://docs.soliditylang.org/en/latest/yul.html) +- [Yul+ दस्तऐवजीकरण](https://github.com/fuellabs/yulp) +- [Yul+ परिचय पोस्ट](https://medium.com/@fuellabs/introducing-yul-a-new-low-level-language-for-ethereum-aa64ce89512f) + +### उदाहरण कॉन्ट्रॅक्ट {#example-contract-2} + +पुढील सोपे उदाहरण पॉवर फंक्शन लागू करते. `solc --strict-assembly --bin input.yul` वापरून ते संकलित केले जाऊ शकते. उदाहरण +input.yul फाईलमध्ये संग्रहित केले पाहिजे. + +``` +{ + function power(base, exponent) -> result + { + switch exponent + case 0 { result := 1 } + case 1 { result := base } + default + { + result := power(mul(base, base), div(exponent, 2)) + if mod(exponent, 2) { result := mul(base, result) } + } + } + let res := power(calldataload(0), calldataload(32)) + mstore(0, res) + return(0, 32) +} +``` + +जर तुम्ही स्मार्ट कॉन्ट्रॅक्टमध्ये आधीच चांगले अनुभवी असाल, तर Yul मधील संपूर्ण ERC20 अंमलबजावणी [येथे](https://solidity.readthedocs.io/en/latest/yul.html#complete-erc20-example) आढळू शकते. + +## Fe {#fe} + +- Ethereum व्हर्च्युअल मशीन (EVM) साठी स्टॅटिकली टाइप केलेली भाषा. +- Python आणि Rust पासून प्रेरित. +- अगदी Ethereum इकोसिस्टममध्ये नवीन असलेल्या विकसकांसाठीही शिकण्यास सोपे बनविण्याचे उद्दिष्ट आहे. +- Fe चा विकास अजूनही सुरुवातीच्या टप्प्यात आहे, या भाषेची अल्फा आवृत्ती जानेवारी २०२१ मध्ये प्रसिद्ध झाली. + +### महत्वाच्या लिंक्स {#important-links-3} + +- [GitHub](https://github.com/ethereum/fe) +- [Fe घोषणा](https://snakecharmers.ethereum.org/fe-a-new-language-for-the-ethereum-ecosystem/) +- [Fe 2021 रोडमॅप](https://notes.ethereum.org/LVhaTF30SJOpkbG1iVw1jg) +- [Fe डिस्कॉर्ड चॅट](https://discord.com/invite/ywpkAXFjZH) +- [Fe ट्विटर](https://twitter.com/official_fe) + +### उदाहरण कॉन्ट्रॅक्ट {#example-contract-3} + +खालील एक Fe मध्ये अंमलात आणलेले एक साधे कॉन्ट्रॅक्ट आहे. + +``` +type BookMsg = bytes[100] + +contract GuestBook: + pub guest_book: map + + event Signed: + book_msg: BookMsg + + pub def sign(book_msg: BookMsg): + self.guest_book[msg.sender] = book_msg + + emit Signed(book_msg=book_msg) + + pub def get_msg(addr: address) -> BookMsg: + return self.guest_book[addr].to_mem() + +``` + +## कसे निवडावे {#how-to-choose} + +इतर कोणत्याही प्रोग्रामिंग भाषेप्रमाणे, हे बहुतेक योग्य कामासाठी योग्य साधन निवडण्याबद्दल तसेच वैयक्तिक पसंतींबद्दल आहे. + +तुम्ही अजून कोणतीही भाषा वापरून पाहिली नसेल, तर विचारात घेण्यासाठी येथे काही गोष्टी आहेत: + +### Solidity बद्दल काय छान आहे? {#solidity-advantages} + +- तुम्ही नवशिके असाल, तर तेथे अनेक ट्युटोरियल्स आणि शिकण्याची साधने उपलब्ध आहेत. त्याबद्दल अधिक माहिती [कोडिंगद्वारे शिका](/developers/learning-tools/) विभागात पहा. +- चांगली विकसक टूलींग उपलब्ध आहे. +- Solidity चा एक मोठा विकसक समुदाय आहे, याचा अर्थ तुम्हाला तुमच्या प्रश्नांची उत्तरे बहुधा पटकन मिळतील. + +### Vyper बद्दल काय छान आहे? {#vyper-advatages} + +- Python डेव्हलपर्ससाठी ज्यांना स्मार्ट कॉन्ट्रॅक्ट लिहायचे आहेत त्यांच्यासाठी सुरुवात करण्याचा उत्तम मार्ग. +- Vyper मध्ये कमी वैशिष्ट्ये आहेत ज्यामुळे ते कल्पनांच्या जलद प्रोटोटाइपिंगसाठी उत्तम आहे. +- Vyper चे उद्दिष्ट ऑडिट करण्यास सोपे आणि जास्तीत जास्त मानवी-वाचनीय असणे हे आहे. + +### Yul आणि Yul+ बद्दल काय छान आहे? {#yul-advantages} + +- सरळ आणि कार्यात्मक निम्न-स्तरीय भाषा. +- रॉ EVM च्या खूप जवळ जाण्याची परवानगी देते, जे तुमच्या कॉन्ट्रॅक्ट्सचा गॅस वापर ऑप्टिमाइझ करण्यात मदत करू शकते. + +## भाषांची तुलना {#language-comparisons} + +मूलभूत सिंटॅक्स, कॉन्ट्रॅक्ट लाइफसायकल, इंटरफेस, ऑपरेटर, डेटा स्ट्रक्चर्स, फंक्शन्स, कंट्रोल फ्लो, आणि बरेच काही यांच्या तुलनेसाठी Auditless द्वारे हे [चीटशीट](https://reference.auditless.com/cheatsheet/) पहा + +## पुढील वाचन {#further-reading} + +- [OpenZeppelin द्वारे Solidity कॉन्ट्रॅक्ट्स लायब्ररी](https://docs.openzeppelin.com/contracts/5.x/) +- [उदाहरणांसह Solidity](https://solidity-by-example.org) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/libraries/index.md b/public/content/translations/mr/developers/docs/smart-contracts/libraries/index.md new file mode 100644 index 00000000000..d1837a15070 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/libraries/index.md @@ -0,0 +1,117 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्या" +description: "तुमच्या इथेरियम डेव्हलपमेंट प्रोजेक्ट्सना गती देण्यासाठी पुन्हा वापरता येण्याजोग्या स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्या आणि बिल्डिंग ब्लॉक्स शोधा." +lang: mr +--- + +तुम्हाला तुमच्या प्रोजेक्टमधील प्रत्येक स्मार्ट कॉन्ट्रॅक्ट अगदी सुरुवातीपासून लिहिण्याची गरज नाही. अनेक ओपन-सोर्स स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्या उपलब्ध आहेत, ज्या तुमच्या प्रोजेक्टसाठी पुन्हा वापरता येण्याजोगे बिल्डिंग ब्लॉक्स पुरवतात. यामुळे तुम्हाला पुन्हा नव्याने सुरुवात करावी लागणार नाही. + +## पूर्वतयारी {#prerequisites} + +स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्यांमध्ये थेट प्रवेश करण्यापूर्वी, स्मार्ट कॉन्ट्रॅक्टच्या रचनेची चांगली समज असणे महत्त्वाचे आहे. जर तुम्ही अद्याप तसे केले नसेल, तर [स्मार्ट कॉन्ट्रॅक्ट ॲनाटॉमी](/developers/docs/smart-contracts/anatomy/) वर जा. + +## लायब्ररीमध्ये काय असते {#whats-in-a-library} + +स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्यांमध्ये तुम्हाला सहसा दोन प्रकारचे बिल्डिंग ब्लॉक्स आढळतील: पुन्हा वापरता येणारे बिहेवियर्स जे तुम्ही तुमच्या कॉन्ट्रॅक्टमध्ये जोडू शकता आणि विविध मानकांची अंमलबजावणी. + +### बिहेवियर्स {#behaviors} + +स्मार्ट कॉन्ट्रॅक्ट लिहिताना, तुम्हाला वारंवार सारखेच पॅटर्न लिहावे लागण्याची शक्यता आहे, जसे की कॉन्ट्रॅक्टमध्ये संरक्षित ऑपरेशन्स करण्यासाठी _ॲडमिन_ ॲड्रेस नियुक्त करणे, किंवा अनपेक्षित समस्या उद्भवल्यास आपत्कालीन _पॉझ_ बटण जोडणे. + +स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्या सहसा सॉलिडिटीमध्ये [लायब्रऱ्या](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#libraries) म्हणून किंवा [इनहेरिटन्स](https://solidity.readthedocs.io/en/v0.7.2/contracts.html#inheritance) द्वारे या बिहेवियर्सची पुन्हा वापरण्यायोग्य अंमलबजावणी प्रदान करतात. + +उदाहरणार्थ, [OpenZeppelin Contracts लायब्ररी](https://github.com/OpenZeppelin/openzeppelin-contracts) मधील [`Ownable` कॉन्ट्रॅक्टची](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.2.0/contracts/access/Ownable.sol) एक सरलीकृत आवृत्ती खालीलप्रमाणे आहे, जी एका ॲड्रेसला कॉन्ट्रॅक्टचा मालक म्हणून नियुक्त करते आणि केवळ त्या मालकापुरता एका मेथडचा ॲक्सेस मर्यादित करण्यासाठी मॉडिफायर प्रदान करते. + +```solidity +contract Ownable { + address public owner; + + constructor() internal { + owner = msg.sender; + } + + modifier onlyOwner() { + require(owner == msg.sender, "Ownable: कॉलर मालक नाही"); + _; + } +} +``` + +तुमच्या कॉन्ट्रॅक्टमध्ये असा बिल्डिंग ब्लॉक वापरण्यासाठी, तुम्हाला प्रथम तो इम्पोर्ट करावा लागेल, आणि नंतर तुमच्या स्वतःच्या कॉन्ट्रॅक्टमध्ये त्यातून एक्सटेंड करावे लागेल. हे तुम्हाला तुमची स्वतःची फंक्शन्स सुरक्षित करण्यासाठी बेस `Ownable` कॉन्ट्रॅक्टद्वारे प्रदान केलेला मॉडिफायर वापरण्याची परवानगी देईल. + +```solidity +import ".../Ownable.sol"; // इम्पोर्ट केलेल्या लायब्ररीचा पाथ + +contract MyContract is Ownable { + // खालील फंक्शन फक्त मालकाद्वारे कॉल केले जाऊ शकते + function secured() onlyOwner public { + msg.sender.transfer(1 ether); + } +} +``` + +आणखी एक लोकप्रिय उदाहरण म्हणजे [SafeMath](https://docs.openzeppelin.com/contracts/3.x/utilities#math) किंवा [DsMath](https://dappsys.readthedocs.io/en/latest/ds_math.html). या लायब्रऱ्या आहेत (बेस कॉन्ट्रॅक्ट्सच्या विरुद्ध) ज्या ओव्हरफ्लो तपासणीसह अंकगणितीय फंक्शन्स प्रदान करतात, जे भाषेद्वारे प्रदान केलेले नाहीत. तुमच्या कॉन्ट्रॅक्टला ओव्हरफ्लोपासून वाचवण्यासाठी नेटिव्ह अंकगणितीय ऑपरेशन्सऐवजी यापैकी कोणतीही एक लायब्ररी वापरणे ही एक चांगली सराव आहे, कारण ओव्हरफ्लोचे विनाशकारी परिणाम होऊ शकतात! + +### मानके {#standards} + +[कंपोझेबिलिटी आणि इंटरऑपरेबिलिटी](/developers/docs/smart-contracts/composability/) सुलभ करण्यासाठी, इथेरियम समुदायाने **ERCs** च्या स्वरूपात अनेक मानके परिभाषित केली आहेत. तुम्ही त्यांच्याबद्दल [मानके](/developers/docs/standards/) विभागात अधिक वाचू शकता. + +तुमच्या कॉन्ट्रॅक्टचा भाग म्हणून ERC समाविष्ट करताना, स्वतःची अंमलबजावणी करण्याचा प्रयत्न करण्याऐवजी मानक अंमलबजावणी शोधणे ही एक चांगली कल्पना आहे. अनेक स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्यांमध्ये सर्वात लोकप्रिय ERCs साठी अंमलबजावणी समाविष्ट असते. उदाहरणार्थ, सर्वव्यापी [ERC20 फंजिबल टोकन स्टँडर्ड](/developers/tutorials/understand-the-erc-20-token-smart-contract/) [HQ20](https://github.com/HQ20/contracts/blob/master/contracts/token/README.md), [DappSys](https://github.com/dapphub/ds-token/) आणि [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc20) मध्ये आढळू शकते. याव्यतिरिक्त, काही ERCs स्वतः ERCचा भाग म्हणून प्रमाणित अंमलबजावणी प्रदान करतात. + +हे लक्षात घेण्यासारखे आहे की काही ERCs स्वतंत्र नसतात, तर त्या इतर ERCs मध्ये भर घालणाऱ्या असतात. उदाहरणार्थ, [ERC2612](https://eips.ethereum.org/EIPS/eip-2612) हे ERC20 ची उपयोगिता सुधारण्यासाठी त्यात एक विस्तार जोडते. + +## लायब्ररी कशी जोडावी {#how-to} + +तुमच्या प्रोजेक्टमध्ये लायब्ररी कशी समाविष्ट करावी याच्या विशिष्ट सूचनांसाठी तुम्ही समाविष्ट करत असलेल्या लायब्ररीच्या डॉक्युमेंटेशनचा नेहमी संदर्भ घ्या. अनेक सॉलिडिटी कॉन्ट्रॅक्ट लायब्रऱ्या `npm` वापरून पॅकेज केल्या जातात, त्यामुळे तुम्ही त्यांना फक्त `npm install` करू शकता. कॉन्ट्रॅक्ट [संकलित](/developers/docs/smart-contracts/compiling/) करण्यासाठीची बहुतेक साधने तुमच्या `node_modules` मध्ये स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्या शोधतील, त्यामुळे तुम्ही खालीलप्रमाणे करू शकता: + +```solidity +// हे तुमच्या node_modules मधून @openzeppelin/contracts लायब्ररी लोड करेल +import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + +contract MyNFT is ERC721 { + constructor() ERC721("MyNFT", "MNFT") public { } +} +``` + +तुम्ही कोणतीही पद्धत वापरत असलात तरी, लायब्ररी समाविष्ट करताना, नेहमी [भाषा](/developers/docs/smart-contracts/languages/) आवृत्तीवर लक्ष ठेवा. उदाहरणार्थ, जर तुम्ही तुमचे कॉन्ट्रॅक्ट्स सॉलिडिटी 0.5 मध्ये लिहित असाल, तर तुम्ही सॉलिडिटी 0.6 साठीची लायब्ररी वापरू शकत नाही. + +## कधी वापरावे {#when-to-use} + +तुमच्या प्रोजेक्टसाठी स्मार्ट कॉन्ट्रॅक्ट लायब्ररी वापरण्याचे अनेक फायदे आहेत. सर्वात महत्त्वाचे म्हणजे, ते तुम्हाला स्वतः कोड करण्याऐवजी तुमच्या सिस्टममध्ये समाविष्ट करता येणारे तयार बिल्डिंग ब्लॉक्स पुरवून तुमचा वेळ वाचवते. + +सुरक्षितता हा देखील एक मोठा फायदा आहे. ओपन-सोर्स स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्यांची देखील अनेकदा कसून तपासणी केली जाते. अनेक प्रोजेक्ट्स त्यांच्यावर अवलंबून असल्यामुळे, समुदायाकडून त्यांना सतत पुनरावलोकनाखाली ठेवण्यास जोरदार प्रोत्साहन मिळते. पुन्हा वापरता येण्याजोग्या कॉन्ट्रॅक्ट लायब्रऱ्यांपेक्षा ॲप्लिकेशन कोडमध्ये त्रुटी आढळणे अधिक सामान्य आहे. अतिरिक्त सुरक्षिततेसाठी काही लायब्रऱ्यांचे [बाह्य ऑडिट](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/audits) देखील केले जाते. + +तथापि, स्मार्ट कॉन्ट्रॅक्ट लायब्रऱ्या वापरण्यामध्ये तुमच्या प्रोजेक्टमध्ये असा कोड समाविष्ट करण्याचा धोका असतो ज्याच्याशी तुम्ही परिचित नाही. एखादे कॉन्ट्रॅक्ट इम्पोर्ट करून ते थेट तुमच्या प्रोजेक्टमध्ये समाविष्ट करणे मोहक वाटते, परंतु ते कॉन्ट्रॅक्ट काय करते याची चांगली समज नसल्यास, तुम्ही अनपेक्षित वर्तनामुळे नकळतपणे तुमच्या सिस्टममध्ये समस्या निर्माण करू शकता. तुम्ही जो कोड इम्पोर्ट करत आहात त्याचे डॉक्युमेंटेशन नेहमी वाचा आणि तुमच्या प्रोजेक्टचा भाग बनवण्यापूर्वी कोडचे स्वतः पुनरावलोकन करा! + +शेवटी, लायब्ररी समाविष्ट करायची की नाही हे ठरवताना, तिच्या एकूण वापराचा विचार करा. व्यापकपणे स्वीकारलेल्या लायब्ररीला मोठा समुदाय असण्याचा आणि समस्या शोधण्यासाठी अधिक लोक त्यावर लक्ष ठेवून असण्याचा फायदा मिळतो. स्मार्ट कॉन्ट्रॅक्ट्ससह तयार करताना सुरक्षितता हे तुमचे प्राथमिक लक्ष असले पाहिजे! + +## संबंधित साधने {#related-tools} + +**OpenZeppelin Contracts -** **_सुरक्षित स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंटसाठी सर्वात लोकप्रिय लायब्ररी._** + +- [डॉक्युमेंटेशन](https://docs.openzeppelin.com/contracts/) +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-contracts) +- [कम्युनिटी फोरम](https://forum.openzeppelin.com/c/general/16) + +**DappSys -** **_स्मार्ट-कॉन्ट्रॅक्टसाठी सुरक्षित, सोपे, लवचिक बिल्डिंग-ब्लॉक्स._** + +- [डॉक्युमेंटेशन](https://dappsys.readthedocs.io/) +- [GitHub](https://github.com/dapphub/dappsys) + +**HQ20 -** **_कॉन्ट्रॅक्ट्स, लायब्रऱ्या आणि उदाहरणांसह एक सॉलिडिटी प्रोजेक्ट जो तुम्हाला वास्तविक जगासाठी पूर्ण-वैशिष्ट्यपूर्ण वितरित ॲप्लिकेशन्स तयार करण्यात मदत करतो._** + +- [GitHub](https://github.com/HQ20/contracts) + +**thirdweb Solidity SDK -** **_सानुकूल स्मार्ट कॉन्ट्रॅक्ट्स कार्यक्षमतेने तयार करण्यासाठी आवश्यक साधने पुरवते_** + +- [डॉक्युमेंटेशन](https://portal.thirdweb.com/contracts/build/overview) +- [GitHub](https://github.com/thirdweb-dev/contracts) + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [इथेरियम डेव्हलपर्ससाठी सुरक्षा विचार](/developers/docs/smart-contracts/security/) _- स्मार्ट कॉन्ट्रॅक्ट्स तयार करताना सुरक्षा विचारांवर एक ट्यूटोरियल, ज्यामध्ये लायब्ररी वापराचा समावेश आहे._ +- [ERC-20 टोकन स्मार्ट कॉन्ट्रॅक्ट समजून घ्या](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _- ERC20 मानकावरील ट्यूटोरियल, जे अनेक लायब्रऱ्यांद्वारे प्रदान केले जाते._ + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/smart-contracts/naming/index.md b/public/content/translations/mr/developers/docs/smart-contracts/naming/index.md new file mode 100644 index 00000000000..989c2dceabc --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/naming/index.md @@ -0,0 +1,101 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट्सचे नावकरण" +description: "ENS सह Ethereum स्मार्ट कॉन्ट्रॅक्ट्सना नाव देण्यासाठी सर्वोत्तम पद्धती" +lang: mr +--- + +स्मार्ट कॉन्ट्रॅक्ट्स हे Ethereum च्या विकेंद्रीकृत पायाभूत सुविधांचा आधारस्तंभ आहेत, जे स्वायत्त ॲप्लिकेशन्स आणि प्रोटोकॉल्सना सक्षम करतात. परंतु कॉन्ट्रॅक्टची क्षमता विकसित होत असतानाही, वापरकर्ते आणि डेव्हलपर अजूनही या कॉन्ट्रॅक्ट्सना ओळखण्यासाठी आणि संदर्भ देण्यासाठी मूळ हेक्साडेसिमल पत्त्यांवर अवलंबून आहेत. + +[Ethereum Name Service (ENS)](https://ens.domains/) सह स्मार्ट कॉन्ट्रॅक्ट्सचे नावकरण केल्याने हेक्साडेसिमल कॉन्ट्रॅक्ट पत्ते काढून वापरकर्त्याचा अनुभव सुधारतो आणि पत्ता विषबाधा आणि स्पूफिंग हल्ल्यांसारख्या हल्ल्यांपासून धोका कमी होतो. ही मार्गदर्शिका स्पष्ट करते की स्मार्ट कॉन्ट्रॅक्ट्सना नाव देणे का महत्त्वाचे आहे, ते कसे लागू केले जाऊ शकते आणि प्रक्रिया सुलभ करण्यासाठी आणि डेव्हलपर्सना ही पद्धत अवलंबण्यास मदत करण्यासाठी [Enscribe](https://www.enscribe.xyz) सारखी साधने उपलब्ध आहेत. + +## स्मार्ट कॉन्ट्रॅक्ट्सना नाव का द्यावे? {#why-name-contracts} + +### मानव-वाचनीय अभिज्ञापक {#human-readable-identifiers} + +`0x8f8e...f9e3` सारख्या अपारदर्शक कॉन्ट्रॅक्ट पत्त्यांशी संवाद साधण्याऐवजी, डेव्हलपर आणि वापरकर्ते `v2.myapp.eth` सारखी मानव-वाचनीय नावे वापरू शकतात. हे स्मार्ट कॉन्ट्रॅक्ट परस्परसंवाद सोपे करते. + +हे [Ethereum Name Service](https://ens.domains/) द्वारे शक्य झाले आहे जे Ethereum पत्त्यांसाठी विकेंद्रीकृत नामकरण सेवा प्रदान करते. हे डोमेन नेम सर्व्हिस (DNS) प्रमाणेच आहे, जे इंटरनेट वापरकर्त्यांना `104.18.176.152` सारख्या IP पत्त्याऐवजी ethereum.org सारख्या नावाने नेटवर्क पत्त्यांवर प्रवेश करण्यास सक्षम करते. + +### सुधारित सुरक्षा आणि विश्वास {#improved-security-and-trust} + +नामित कॉन्ट्रॅक्ट्स चुकीच्या पत्त्यावर अपघाती व्यवहार कमी करण्यास मदत करतात. ते वापरकर्त्यांना विशिष्ट ॲप्स किंवा ब्रँड्सशी जोडलेले कॉन्ट्रॅक्ट्स ओळखण्यात देखील मदत करतात. हे प्रतिष्ठेच्या विश्वासाचा एक स्तर जोडते, विशेषतः जेव्हा `uniswap.eth` सारख्या सुप्रसिद्ध पॅरेंट डोमेनशी नावे जोडलेली असतात. + +Ethereum पत्त्याच्या ४२-वर्णांच्या लांबीमुळे, वापरकर्त्यांना पत्त्यांमधील लहान बदल ओळखणे खूप कठीण आहे, जिथे काही वर्ण बदलले आहेत. उदाहरणार्थ, `0x58068646C148E313CB414E85d2Fe89dDc3426870` सारखा पत्ता सामान्यतः वॉलेट्स सारख्या वापरकर्ता-मुखी ॲप्लिकेशन्सद्वारे `0x580...870` पर्यंत कापला जाईल. वापरकर्त्याच्या लक्षात दुर्भावनापूर्ण पत्ता येण्याची शक्यता कमी असते, जिथे काही वर्ण बदललेले असतात. + +या प्रकारची पद्धत ॲड्रेस स्पूफिंग आणि पॉयझनिंग हल्ल्यांमध्ये वापरली जाते, जिथे वापरकर्त्यांना असा विश्वास दिला जातो की ते योग्य पत्त्यावर संवाद साधत आहेत किंवा निधी पाठवत आहेत, पण प्रत्यक्षात तो पत्ता फक्त योग्य पत्त्यासारखा दिसतो, पण तोच नसतो. + +वॉलेट्स आणि कॉन्ट्रॅक्ट्ससाठी ENS नावे या प्रकारच्या हल्ल्यांपासून संरक्षण करतात. DNS स्पूफिंग हल्ल्यांप्रमाणेच, ENS स्पूफिंग हल्ले देखील केले जाऊ शकतात, तथापि, वापरकर्त्याला हेक्साडेसिमल पत्त्यातील लहान बदलापेक्षा ENS नावातील चुकीचे स्पेलिंग लक्षात येण्याची अधिक शक्यता असते. + +### वॉलेट्स आणि एक्सप्लोरर्ससाठी उत्तम UX {#better-ux} + +जेव्हा एखादा स्मार्ट कॉन्ट्रॅक्ट ENS नावासह कॉन्फिगर केला जातो, तेव्हा वॉलेट्स आणि ब्लॉकचेन एक्सप्लोरर्स सारख्या ॲप्ससाठी हेक्साडेसिमल पत्त्यांऐवजी स्मार्ट कॉन्ट्रॅक्ट्ससाठी ENS नावे प्रदर्शित करणे शक्य होते. हे वापरकर्त्यांसाठी एक महत्त्वपूर्ण वापरकर्ता अनुभव (UX) सुधारणा प्रदान करते. + +उदाहरणार्थ, Uniswap सारख्या ॲपशी संवाद साधताना, वापरकर्त्यांना सामान्यतः दिसेल की ते ज्या ॲपशी संवाद साधत आहेत ते `uniswap.org` वेबसाइटवर होस्ट केलेले आहे, परंतु जर Uniswap ने त्यांच्या स्मार्ट कॉन्ट्रॅक्ट्सना ENS सह नाव दिले नसेल तर त्यांना एक हेक्साडेसिमल कॉन्ट्रॅक्ट पत्ता सादर केला जाईल. जर कॉन्ट्रॅक्टला नाव दिले असेल, तर त्याऐवजी ते `v4.contracts.uniswap.eth` पाहू शकतील जे अधिक उपयुक्त आहे. + +## डिप्लॉयमेंटवेळी नाव देणे विरुद्ध डिप्लॉयमेंटनंतर {#when-to-name} + +दोन टप्प्यांवर स्मार्ट कॉन्ट्रॅक्ट्सना नाव दिले जाऊ शकते: + +- **डिप्लॉयमेंटवेळी**: कॉन्ट्रॅक्ट डिप्लॉय होत असताना त्याला ENS नाव देणे. +- **डिप्लॉयमेंटनंतर**: विद्यमान कॉन्ट्रॅक्ट पत्त्याला नवीन ENS नावासह मॅप करणे. + +दोन्ही पद्धती ENS डोमेनच्या मालक किंवा व्यवस्थापक प्रवेशावर अवलंबून आहेत, जेणेकरून ते ENS रेकॉर्ड्स तयार आणि सेट करू शकतील. + +## कॉन्ट्रॅक्ट्ससाठी ENS नामकरण कसे कार्य करते {#how-ens-naming-works} + +ENS नावे ऑनचेन संग्रहित केली जातात आणि ENS रिझॉल्व्हर्सद्वारे Ethereum पत्त्यांवर रिझॉल्व्ह केली जातात. एका स्मार्ट कॉन्ट्रॅक्टला नाव देण्यासाठी: + +1. पॅरेंट ENS डोमेनची नोंदणी करा किंवा नियंत्रित करा (उदा. `myapp.eth`) +2. एक सबडोमेन तयार करा (उदा. `v1.myapp.eth`) +3. सबडोमेनचा `address` रेकॉर्ड कॉन्ट्रॅक्ट पत्त्यावर सेट करा +4. कॉन्ट्रॅक्टच्या रिव्हर्स रेकॉर्डला ENS वर सेट करा जेणेकरून नाव त्याच्या पत्त्याद्वारे शोधता येईल + +ENS नावे श्रेणीबद्ध आहेत आणि अमर्यादित उप-नावांना समर्थन देतात. हे रेकॉर्ड्स सेट करण्यासाठी सामान्यतः ENS नोंदणी आणि सार्वजनिक रिझॉल्व्हर कॉन्ट्रॅक्ट्सशी संवाद साधावा लागतो. + +## कॉन्ट्रॅक्ट्सना नाव देण्यासाठी साधने {#tools} + +स्मार्ट कॉन्ट्रॅक्ट्सना नाव देण्याचे दोन दृष्टिकोन आहेत. एकतर काही मॅन्युअल पायऱ्यांसह [ENS App](https://app.ens.domains) वापरणे किंवा [Enscribe](https://www.enscribe.xyz) वापरणे. हे खालीलप्रमाणे आहेत. + +### मॅन्युअल ENS सेटअप {#manual-ens-setup} + +[ENS App](https://app.ens.domains/) वापरून, डेव्हलपर मॅन्युअली उप-नावे तयार करू शकतात आणि फॉरवर्ड ॲड्रेस रेकॉर्ड्स सेट करू शकतात. तथापि, ते ENS ॲपद्वारे नावासाठी रिव्हर्स रेकॉर्ड सेट करून स्मार्ट कॉन्ट्रॅक्टसाठी प्राथमिक नाव सेट करू शकत नाहीत. मॅन्युअल पावले उचलली पाहिजेत जी [ENS docs](https://docs.ens.domains/web/naming-contracts/) मध्ये समाविष्ट आहेत. + +### Enscribe {#enscribe} + +[Enscribe](https://www.enscribe.xyz) ENS सह स्मार्ट कॉन्ट्रॅक्ट नामकरण सुलभ करते आणि स्मार्ट कॉन्ट्रॅक्ट्सवरील वापरकर्त्याचा विश्वास वाढवते. ते प्रदान करते: + +- **ॲटॉमिक डिप्लॉयमेंट आणि नामकरण**: नवीन कॉन्ट्रॅक्ट डिप्लॉय करताना ENS नाव नियुक्त करणे +- **डिप्लॉयमेंटनंतर नामकरण**: आधीच डिप्लॉय केलेल्या कॉन्ट्रॅक्ट्सना नावे जोडणे +- **मल्टी-चेन समर्थन**: Ethereum आणि L2 नेटवर्क्सवर कार्य करते जिथे ENS समर्थित आहे +- **कॉन्ट्रॅक्ट व्हेरिफिकेशन डेटा**: वापरकर्त्यांसाठी विश्वास वाढवण्यासाठी एकाधिक स्त्रोतांकडून काढलेला कॉन्ट्रॅक्ट व्हेरिफिकेशन डेटा समाविष्ट आहे + +Enscribe वापरकर्त्यांद्वारे प्रदान केलेली ENS नावे किंवा वापरकर्त्याकडे ENS नाव नसल्यास स्वतःचे डोमेन समर्थित करते. + +स्मार्ट कॉन्ट्रॅक्ट्सना नाव देणे आणि पाहणे सुरू करण्यासाठी आपण [Enscribe App](https://app.enscribe.xyz) ॲक्सेस करू शकता. + +## सर्वोत्तम पद्धती {#best-practices} + +- **स्पष्ट, आवृत्तीकृत नावे वापरा** जसे की `v1.myapp.eth` जेणेकरून कॉन्ट्रॅक्ट अपग्रेड्स पारदर्शक होतील +- **रिव्हर्स रेकॉर्ड्स सेट करा** जेणेकरून वॉलेट्स आणि ब्लॉकचेन एक्सप्लोरर्स सारख्या ॲप्समध्ये दृश्यमानतेसाठी कॉन्ट्रॅक्ट्स ENS नावांना जोडले जातील. +- **मालकीमधील अपघाती बदल टाळायचे असल्यास कालबाह्यतेवर बारकाईने लक्ष ठेवा** +- **कॉन्ट्रॅक्ट स्त्रोत सत्यापित करा** जेणेकरून वापरकर्ते विश्वास ठेवू शकतील की नामित कॉन्ट्रॅक्ट अपेक्षेप्रमाणे वागतो + +## धोके {#risks} + +स्मार्ट कॉन्ट्रॅक्ट्सना नाव देणे Ethereum च्या वापरकर्त्यांसाठी महत्त्वपूर्ण फायदे प्रदान करते, तथापि, ENS डोमेनच्या मालकांनी त्यांच्या व्यवस्थापनाबाबत सतर्क असले पाहिजे. उल्लेखनीय धोक्यांमध्ये हे समाविष्ट आहे: + +- **कालबाह्यता**: DNS नावांप्रमाणे, ENS नावांची नोंदणी मर्यादित कालावधीची असते. म्हणूनच हे महत्त्वाचे आहे की मालकांनी त्यांच्या डोमेनच्या कालबाह्यतेच्या तारखांवर लक्ष ठेवावे आणि कालबाह्य होण्यापूर्वीच त्यांचे नूतनीकरण करावे. ENS ॲप आणि Enscribe दोन्ही डोमेन मालकांसाठी कालबाह्यता जवळ आल्यावर व्हिज्युअल इंडिकेटर प्रदान करतात. +- **मालकीमध्ये बदल**: ENS रेकॉर्ड Ethereum वर NFTs म्हणून दर्शविले जातात, जिथे विशिष्ट `.eth` डोमेनच्या मालकाकडे संबंधित NFT त्यांच्या ताब्यात असते. म्हणूनच जर वेगळ्या खात्याने या NFT ची मालकी घेतली, तर नवीन मालक त्यांच्या इच्छेनुसार कोणतेही ENS रेकॉर्ड सुधारू शकतो. + +अशा धोक्यांपासून बचाव करण्यासाठी, `.eth` द्वितीय-स्तरीय डोमेन्स (2LD) साठी मालक खाते मल्टी-सिग वॉलेटद्वारे सुरक्षित केले पाहिजे, आणि कॉन्ट्रॅक्ट नामकरण व्यवस्थापित करण्यासाठी सबडोमेन्स तयार केले पाहिजेत. त्यामुळे सबडोमेन स्तरावर मालकीमध्ये कोणतेही अपघाती किंवा दुर्भावनापूर्ण बदल झाल्यास, ते 2LD मालकाद्वारे ओव्हरराइड केले जाऊ शकतात. + +## कॉन्ट्रॅक्ट नामकरणाचे भविष्य {#future} + +कॉन्ट्रॅक्ट नामकरण हे dApp विकासासाठी एक सर्वोत्तम सराव बनत आहे, जसे वेबवर डोमेन नावांनी IP पत्त्यांची जागा घेतली. वॉलेट्स, एक्सप्लोरर्स आणि डॅशबोर्ड्स सारख्या अधिक पायाभूत सुविधा कॉन्ट्रॅक्ट्ससाठी ENS रिझोल्यूशन समाकलित करत असल्याने, नामित कॉन्ट्रॅक्ट्स सुरक्षितता सुधारतील आणि संपूर्ण इकोसिस्टममध्ये चुका कमी करतील. + +स्मार्ट कॉन्ट्रॅक्ट्स ओळखण्यास आणि समजण्यास सोपे करून, नामकरण Ethereum वरील वापरकर्ते आणि ॲप्समधील अंतर कमी करण्यास मदत करते, ज्यामुळे वापरकर्त्यांसाठी सुरक्षा आणि UX दोन्ही सुधारतात. + +## पुढील वाचन {#further-reading} + +- [ENS सह स्मार्ट कॉन्ट्रॅक्ट्सचे नामकरण](https://docs.ens.domains/web/naming-contracts/) +- [Enscribe सह स्मार्ट कॉन्ट्रॅक्ट्सचे नामकरण](https://www.enscribe.xyz/docs). diff --git a/public/content/translations/mr/developers/docs/smart-contracts/security/index.md b/public/content/translations/mr/developers/docs/smart-contracts/security/index.md new file mode 100644 index 00000000000..786064ea2cf --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/security/index.md @@ -0,0 +1,574 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट सुरक्षा" +description: "सुरक्षित Ethereum स्मार्ट कॉन्ट्रॅक्ट्स तयार करण्यासाठीच्या मार्गदर्शक तत्त्वांचे अवलोकन" +lang: mr +--- + +स्मार्ट कॉन्ट्रॅक्ट्स अत्यंत लवचिक आहेत आणि ब्लॉकचेनवर तैनात केलेल्या कोडवर आधारित अपरिवर्तनीय तर्क चालवताना मोठ्या प्रमाणात मूल्य आणि डेटा नियंत्रित करण्यास सक्षम आहेत. यामुळे विश्वासहीन आणि विकेंद्रित ॲप्लिकेशन्सची एक उत्साही इकोसिस्टम तयार झाली आहे जी जुन्या सिस्टीमपेक्षा अनेक फायदे प्रदान करते. ते स्मार्ट कॉन्ट्रॅक्ट्समधील असुरक्षिततेचा फायदा घेऊन नफा मिळवू पाहणाऱ्या हल्लेखोरांसाठी संधी देखील दर्शवतात. + +Ethereum सारखे सार्वजनिक ब्लॉकचेन्स, स्मार्ट कॉन्ट्रॅक्ट्स सुरक्षित करण्याच्या समस्येला आणखी गुंतागुंतीचे करतात. तैनात केलेला कॉन्ट्रॅक्ट कोड _सहसा_ सुरक्षा त्रुटी दूर करण्यासाठी बदलला जाऊ शकत नाही, तर स्मार्ट कॉन्ट्रॅक्ट्समधून चोरलेली मालमत्ता अपरिवर्तनीयतेमुळे ट्रॅक करणे अत्यंत कठीण आणि बहुतेक वेळा परत मिळवता न येण्याजोगी असते. + +आकडेवारी वेगवेगळी असली तरी, स्मार्ट कॉन्ट्रॅक्ट्समधील सुरक्षा दोषांमुळे चोरलेल्या किंवा गमावलेल्या मूल्याची एकूण रक्कम $1 बिलियन पेक्षा जास्त असल्याचा अंदाज आहे. यामध्ये [DAO हॅक](https://hackingdistributed.com/2016/06/18/analysis-of-the-dao-exploit/) (3.6M ETH चोरले गेले, आजच्या किमतीनुसार $1B पेक्षा जास्त किंमत), [Parity मल्टी-सिग वॉलेट हॅक](https://www.coindesk.com/markets/2017/07/19/30-million-ether-reported-stolen-due-to-parity-wallet-breach) ($30M हॅकर्समुळे गमावले), आणि [Parity फ्रोझन वॉलेट समस्या](https://www.theguardian.com/technology/2017/nov/08/cryptocurrency-300m-dollars-stolen-bug-ether) (ETH मध्ये $300M पेक्षा जास्त कायमचे लॉक झाले) यांसारख्या हाय-प्रोफाइल घटनांचा समावेश आहे. + +वर नमूद केलेल्या समस्यांमुळे डेव्हलपर्सना सुरक्षित, मजबूत आणि लवचिक स्मार्ट कॉन्ट्रॅक्ट्स तयार करण्यासाठी प्रयत्न करणे अनिवार्य होते. स्मार्ट कॉन्ट्रॅक्ट सुरक्षा हा एक गंभीर विषय आहे, आणि प्रत्येक डेव्हलपरने तो शिकणे चांगले आहे. हे मार्गदर्शक Ethereum डेव्हलपर्ससाठी सुरक्षा विचारांचा आढावा घेईल आणि स्मार्ट कॉन्ट्रॅक्ट सुरक्षा सुधारण्यासाठी संसाधने शोधेल. + +## पूर्वतयारी {#prerequisites} + +सुरक्षेचा सामना करण्यापूर्वी तुम्ही [स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंटच्या मूलभूत गोष्टींशी](/developers/docs/smart-contracts/) परिचित आहात याची खात्री करा. + +## सुरक्षित Ethereum स्मार्ट कॉन्ट्रॅक्ट्स तयार करण्यासाठी मार्गदर्शक तत्त्वे {#smart-contract-security-guidelines} + +### १. योग्य प्रवेश नियंत्रणे डिझाइन करा {#design-proper-access-controls} + +स्मार्ट कॉन्ट्रॅक्ट्समध्ये, `public` किंवा `external` म्हणून चिन्हांकित केलेली फंक्शन्स कोणत्याही बाह्य मालकीच्या खात्यांद्वारे (EOAs) किंवा कॉन्ट्रॅक्ट खात्यांद्वारे कॉल केली जाऊ शकतात. जर तुम्हाला इतरांना तुमच्या कॉन्ट्रॅक्टशी संवाद साधायचा असेल तर फंक्शन्ससाठी सार्वजनिक दृश्यमानता निर्दिष्ट करणे आवश्यक आहे. तथापि, `private` म्हणून चिन्हांकित केलेली फंक्शन्स केवळ स्मार्ट कॉन्ट्रॅक्टमधील फंक्शन्सद्वारेच कॉल केली जाऊ शकतात, बाह्य खात्यांद्वारे नाही. प्रत्येक नेटवर्क सहभागीला कॉन्ट्रॅक्ट फंक्शन्समध्ये प्रवेश दिल्याने समस्या उद्भवू शकतात, विशेषतः जर याचा अर्थ कोणीही संवेदनशील ऑपरेशन्स करू शकतो (उदा. नवीन टोकन मिंट करणे). + +स्मार्ट कॉन्ट्रॅक्ट फंक्शन्सचा अनधिकृत वापर रोखण्यासाठी, सुरक्षित प्रवेश नियंत्रणे लागू करणे आवश्यक आहे. प्रवेश नियंत्रण यंत्रणा स्मार्ट कॉन्ट्रॅक्टमधील विशिष्ट फंक्शन्स वापरण्याची क्षमता मंजूर घटकांपुरती मर्यादित ठेवते, जसे की कॉन्ट्रॅक्ट व्यवस्थापित करण्यासाठी जबाबदार खाती. **Ownable पॅटर्न** आणि **भूमिका-आधारित नियंत्रण** हे स्मार्ट कॉन्ट्रॅक्ट्समध्ये प्रवेश नियंत्रण लागू करण्यासाठी उपयुक्त असलेले दोन पॅटर्न आहेत: + +#### Ownable पॅटर्न {#ownable-pattern} + +Ownable पॅटर्नमध्ये, कॉन्ट्रॅक्ट-निर्मिती प्रक्रियेदरम्यान एक ॲड्रेस कॉन्ट्रॅक्टचा “मालक” म्हणून सेट केला जातो. संरक्षित फंक्शन्सना `OnlyOwner` मॉडिफायर दिला जातो, जो फंक्शन कार्यान्वित करण्यापूर्वी कॉन्ट्रॅक्ट कॉलिंग ॲड्रेसची ओळख प्रमाणित करतो याची खात्री करतो. कॉन्ट्रॅक्ट मालकाव्यतिरिक्त इतर ॲड्रेसवरून संरक्षित फंक्शन्सना केलेले कॉल्स नेहमी परत येतात, ज्यामुळे अवांछित प्रवेश रोखला जातो. + +#### भूमिका-आधारित प्रवेश नियंत्रण {#role-based-access-control} + +स्मार्ट कॉन्ट्रॅक्टमध्ये एकाच ॲड्रेसला `Owner` म्हणून नोंदणी केल्याने केंद्रीकरणाचा धोका निर्माण होतो आणि तो एकच अपयशाचा बिंदू दर्शवतो. जर मालकाच्या खात्याच्या कीजशी तडजोड झाली, तर हल्लेखोर मालकीच्या कॉन्ट्रॅक्टवर हल्ला करू शकतात. म्हणूनच एकाधिक प्रशासकीय खात्यांसह भूमिका-आधारित प्रवेश नियंत्रण पॅटर्न वापरणे हा एक चांगला पर्याय असू शकतो. + +भूमिका-आधारित प्रवेश नियंत्रणामध्ये, संवेदनशील फंक्शन्समध्ये प्रवेश विश्वसनीय सहभागींच्या एका सेटमध्ये वितरित केला जातो. उदाहरणार्थ, एक खाते टोकन मिंट करण्यासाठी जबाबदार असू शकते, तर दुसरे खाते अपग्रेड करते किंवा कॉन्ट्रॅक्ट थांबवते. या प्रकारे प्रवेश नियंत्रणाचे विकेंद्रीकरण केल्याने अपयशाचे एकल बिंदू दूर होतात आणि वापरकर्त्यांसाठी विश्वासाची गृहितके कमी होतात. + +##### मल्टी-सिग्नेचर वॉलेट्स वापरणे + +सुरक्षित प्रवेश नियंत्रण लागू करण्याचा दुसरा दृष्टिकोन म्हणजे कॉन्ट्रॅक्ट व्यवस्थापित करण्यासाठी [मल्टी-सिग्नेचर खाते](/developers/docs/smart-contracts/#multisig) वापरणे. नियमित EOA च्या विपरीत, मल्टी-सिग्नेचर खाती एकाधिक घटकांच्या मालकीची असतात आणि व्यवहार कार्यान्वित करण्यासाठी किमान संख्येच्या खात्यांकडून स्वाक्षरी आवश्यक असते — समजा 5 पैकी 3. + +प्रवेश नियंत्रणासाठी मल्टीसिग वापरल्याने सुरक्षेचा एक अतिरिक्त स्तर येतो कारण लक्ष्य कॉन्ट्रॅक्टवरील क्रियांना अनेक पक्षांच्या संमतीची आवश्यकता असते. जर Ownable पॅटर्न वापरणे आवश्यक असेल तर हे विशेषतः उपयुक्त आहे, कारण यामुळे हल्लेखोर किंवा दुष्ट व्यक्तीसाठी दुर्भावनापूर्ण हेतूंसाठी संवेदनशील कॉन्ट्रॅक्ट फंक्शन्समध्ये फेरफार करणे अधिक कठीण होते. + +### २. कॉन्ट्रॅक्ट ऑपरेशन्सचे संरक्षण करण्यासाठी require(), assert(), आणि revert() विधाने वापरा {#use-require-assert-revert} + +नमूद केल्याप्रमाणे, एकदा तुमचा स्मार्ट कॉन्ट्रॅक्ट ब्लॉकचेनवर तैनात झाल्यावर कोणीही त्यातील सार्वजनिक फंक्शन्स कॉल करू शकतो. बाह्य खाती कॉन्ट्रॅक्टशी कसा संवाद साधतील हे तुम्ही आगाऊ जाणून घेऊ शकत नसल्यामुळे, तैनात करण्यापूर्वी समस्याग्रस्त ऑपरेशन्सविरूद्ध अंतर्गत सुरक्षा उपाययोजना लागू करणे आदर्श आहे. विशिष्ट आवश्यकता पूर्ण करण्यात अंमलबजावणी अयशस्वी झाल्यास अपवाद सुरू करण्यासाठी आणि स्थिती बदल परत करण्यासाठी `require()`, `assert()`, आणि `revert()` विधाने वापरून तुम्ही स्मार्ट कॉन्ट्रॅक्ट्समध्ये योग्य वर्तनाची अंमलबजावणी करू शकता. + +**`require()`**: `require` हे फंक्शन्सच्या सुरूवातीला परिभाषित केले जातात आणि कॉल केलेले फंक्शन कार्यान्वित होण्यापूर्वी पूर्वनिर्धारित अटी पूर्ण झाल्या आहेत याची खात्री करतात. एखादे `require` विधान वापरकर्ता इनपुट प्रमाणित करण्यासाठी, स्थिती व्हेरिएबल्स तपासण्यासाठी किंवा फंक्शनसह पुढे जाण्यापूर्वी कॉलिंग खात्याची ओळख प्रमाणित करण्यासाठी वापरले जाऊ शकते. + +**`assert()`**: `assert()` चा वापर अंतर्गत त्रुटी शोधण्यासाठी आणि तुमच्या कोडमधील “अपरिवर्तनीय” उल्लंघने तपासण्यासाठी केला जातो. एक अपरिवर्तनीय म्हणजे कॉन्ट्रॅक्टच्या स्थितीबद्दल एक तार्किक विधान जे सर्व फंक्शन अंमलबजावणीसाठी खरे असले पाहिजे. एका टोकन कॉन्ट्रॅक्टची कमाल एकूण पुरवठा किंवा शिल्लक हे एक अपरिवर्तनीय उदाहरण आहे. `assert()` वापरल्याने हे सुनिश्चित होते की तुमचा कॉन्ट्रॅक्ट कधीही असुरक्षित स्थितीत पोहोचणार नाही, आणि जर पोहोचला, तर स्थिती व्हेरिएबल्समधील सर्व बदल परत घेतले जातात. + +**`revert()`**: `revert()` चा वापर if-else स्टेटमेंटमध्ये केला जाऊ शकतो जो आवश्यक अट पूर्ण न झाल्यास अपवाद सुरू करतो. खालील नमुना कॉन्ट्रॅक्ट फंक्शन्सच्या अंमलबजावणीचे संरक्षण करण्यासाठी `revert()` वापरतो: + +``` +pragma solidity ^0.8.4; + +contract VendingMachine { + address owner; + error Unauthorized(); + function buy(uint amount) public payable { + if (amount > msg.value / 2 ether) + revert("Not enough Ether provided."); + // खरेदी करा. + } + function withdraw() public { + if (msg.sender != owner) + revert Unauthorized(); + + payable(msg.sender).transfer(address(this).balance); + } +} +``` + +### ३. स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी घ्या आणि कोडची अचूकता सत्यापित करा {#test-smart-contracts-and-verify-code-correctness} + +[Ethereum Virtual Machine](/developers/docs/evm/) मध्ये चालणाऱ्या कोडची अपरिवर्तनीयता म्हणजे स्मार्ट कॉन्ट्रॅक्ट्सना डेव्हलपमेंटच्या टप्प्यात उच्च पातळीच्या गुणवत्ता मूल्यांकनाची आवश्यकता असते. तुमच्या कॉन्ट्रॅक्टची विस्तृतपणे चाचणी करणे आणि कोणत्याही अनपेक्षित परिणामांसाठी त्याचे निरीक्षण केल्याने मोठ्या प्रमाणात सुरक्षा सुधारेल आणि दीर्घकाळात तुमच्या वापरकर्त्यांचे संरक्षण होईल. + +नेहमीची पद्धत म्हणजे वापरकर्त्यांकडून कॉन्ट्रॅक्टला अपेक्षित असलेला मॉक डेटा वापरून लहान युनिट चाचण्या लिहिणे. [युनिट टेस्टिंग](/developers/docs/smart-contracts/testing/#unit-testing) हे विशिष्ट फंक्शन्सची कार्यक्षमता तपासण्यासाठी आणि स्मार्ट कॉन्ट्रॅक्ट अपेक्षेप्रमाणे काम करत असल्याची खात्री करण्यासाठी चांगले आहे. + +दुर्दैवाने, एकटे वापरल्यास स्मार्ट कॉन्ट्रॅक्ट सुरक्षा सुधारण्यासाठी युनिट टेस्टिंग कमीतकमी प्रभावी आहे. एक युनिट चाचणी हे सिद्ध करू शकते की एखादे फंक्शन मॉक डेटासाठी योग्यरित्या कार्यान्वित होते, परंतु युनिट चाचण्या केवळ लिहिलेल्या चाचण्यांइतक्याच प्रभावी असतात. यामुळे तुमच्या स्मार्ट कॉन्ट्रॅक्टची सुरक्षितता धोक्यात आणू शकणारे सुटलेले एज केसेस आणि असुरक्षितता शोधणे कठीण होते. + +एक चांगला दृष्टीकोन म्हणजे [स्थिर आणि गतिशील विश्लेषण](/developers/docs/smart-contracts/testing/#static-dynamic-analysis) वापरून केलेल्या मालमत्ता-आधारित चाचणीसह युनिट चाचणी एकत्र करणे. स्थिर विश्लेषण पोहोचण्यायोग्य प्रोग्राम स्थिती आणि अंमलबजावणी मार्गांचे विश्लेषण करण्यासाठी [कंट्रोल फ्लो ग्राफ्स](https://en.wikipedia.org/wiki/Control-flow_graph) आणि [ॲबस्ट्रॅक्ट सिंटॅक्स ट्रीज](https://deepsource.io/glossary/ast/) सारख्या निम्न-स्तरीय प्रतिनिधित्वांवर अवलंबून असते. दरम्यान, [स्मार्ट कॉन्ट्रॅक्ट फझिंग](https://www.cyfrin.io/blog/smart-contract-fuzzing-and-invariants-testing-foundry) सारखी गतिशील विश्लेषण तंत्रे, सुरक्षा गुणधर्मांचे उल्लंघन करणाऱ्या ऑपरेशन्स शोधण्यासाठी यादृच्छिक इनपुट मूल्यांसह कॉन्ट्रॅक्ट कोड कार्यान्वित करतात. + +[औपचारिक पडताळणी](/developers/docs/smart-contracts/formal-verification) हे स्मार्ट कॉन्ट्रॅक्ट्समधील सुरक्षा गुणधर्म सत्यापित करण्याचे आणखी एक तंत्र आहे. नियमित चाचणीच्या विपरीत, औपचारिक पडताळणी स्मार्ट कॉन्ट्रॅक्टमधील त्रुटींची अनुपस्थिती निश्चितपणे सिद्ध करू शकते. हे एक औपचारिक स्पेसिफिकेशन तयार करून साध्य केले जाते जे इच्छित सुरक्षा गुणधर्मांना कॅप्चर करते आणि कॉन्ट्रॅक्ट्सचे औपचारिक मॉडेल या स्पेसिफिकेशनचे पालन करते हे सिद्ध करते. + +### ४. तुमच्या कोडचे स्वतंत्र पुनरावलोकन करण्यास सांगा {#get-independent-code-reviews} + +तुमच्या कॉन्ट्रॅक्टची चाचणी घेतल्यानंतर, इतरांना कोणत्याही सुरक्षा समस्यांसाठी स्त्रोत कोड तपासण्यास सांगणे चांगले. चाचणीमुळे स्मार्ट कॉन्ट्रॅक्टमधील प्रत्येक त्रुटी उघड होणार नाही, परंतु स्वतंत्र पुनरावलोकन मिळाल्याने असुरक्षितता शोधण्याची शक्यता वाढते. + +#### ऑडिट्स {#audits} + +स्मार्ट कॉन्ट्रॅक्ट ऑडिट करणे हा स्वतंत्र कोड पुनरावलोकन करण्याचा एक मार्ग आहे. ऑडिटर हे स्मार्ट कॉन्ट्रॅक्ट्स सुरक्षित आहेत आणि गुणवत्ता दोष आणि डिझाइन त्रुटींपासून मुक्त आहेत याची खात्री करण्यात महत्त्वाची भूमिका बजावतात. + +तरीही, तुम्ही ऑडिटला रामबाण उपाय म्हणून मानणे टाळावे. स्मार्ट कॉन्ट्रॅक्ट ऑडिट्स प्रत्येक बग पकडणार नाहीत आणि बहुतेकदा पुनरावलोकनांची अतिरिक्त फेरी प्रदान करण्यासाठी डिझाइन केलेले असतात, जे प्रारंभिक डेव्हलपमेंट आणि चाचणी दरम्यान डेव्हलपर्सकडून सुटलेल्या समस्या शोधण्यात मदत करू शकतात. तुम्ही ऑडिटर्ससोबत काम करण्यासाठी सर्वोत्तम पद्धतींचे पालन केले पाहिजे, जसे की कोडचे योग्यरित्या दस्तऐवजीकरण करणे आणि इनलाइन टिप्पण्या जोडणे, जेणेकरून स्मार्ट कॉन्ट्रॅक्ट ऑडिटचा जास्तीत जास्त फायदा घेता येईल. + +- [स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंग टिप्स आणि ट्रिक्स](https://twitter.com/tinchoabbate/status/1400170232904400897) - _@tinchoabbate_ +- [तुमच्या ऑडिटचा पुरेपूर फायदा घ्या](https://inference.ag/blog/2023-08-14-tips/) - _Inference_ + +#### बग बाउंटीज {#bug-bounties} + +बग बाउंटी प्रोग्राम सेट करणे हा बाह्य कोड पुनरावलोकन लागू करण्याचा आणखी एक दृष्टीकोन आहे. बग बाउंटी हे ॲप्लिकेशनमधील असुरक्षितता शोधणाऱ्या व्यक्तींना (सहसा व्हाईटहॅट हॅकर्सना) दिलेले आर्थिक बक्षीस आहे. + +योग्यरित्या वापरल्यास, बग बाउंटीज हॅकर समुदायाच्या सदस्यांना तुमच्या कोडमधील गंभीर त्रुटी तपासण्यासाठी प्रोत्साहन देतात. एक वास्तविक-जीवनातील उदाहरण म्हणजे “अनंत पैशाचा बग” ज्याने एका हल्लेखोराला Ethereum वर चालणाऱ्या [लेयर 2](/layer-2/) प्रोटोकॉल [Optimism](https://www.optimism.io/) वर अमर्याद प्रमाणात इथर तयार करण्याची परवानगी दिली असती. सुदैवाने, एका व्हाईटहॅट हॅकरने [ही त्रुटी शोधली](https://www.saurik.com/optimism.html) आणि टीमला सूचित केले, [या प्रक्रियेत मोठे बक्षीस मिळवले](https://cryptoslate.com/critical-bug-in-ethereum-l2-optimism-2m-bounty-paid/). + +एक उपयुक्त धोरण म्हणजे बग बाउंटी प्रोग्रामचे पेआउट धोक्यात असलेल्या निधीच्या प्रमाणात सेट करणे. “[स्केलिंग बग बाउंटी](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7)” म्हणून वर्णन केलेला हा दृष्टिकोन, व्यक्तींना असुरक्षिततेचा फायदा घेण्याऐवजी जबाबदारीने उघड करण्यासाठी आर्थिक प्रोत्साहन देतो. + +### ५. स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंट दरम्यान सर्वोत्तम पद्धतींचे पालन करा {#follow-smart-contract-development-best-practices} + +ऑडिट्स आणि बग बाउंटीजचे अस्तित्व उच्च-गुणवत्तेचा कोड लिहिण्याच्या तुमच्या जबाबदारीतून तुम्हाला सूट देत नाही. चांगली स्मार्ट कॉन्ट्रॅक्ट सुरक्षा योग्य डिझाइन आणि डेव्हलपमेंट प्रक्रियांचे पालन करण्यापासून सुरू होते: + +- सर्व कोड git सारख्या आवृत्ती नियंत्रण प्रणालीमध्ये संग्रहित करा + +- सर्व कोड बदल पुल रिक्वेस्ट्सद्वारे करा + +- पुल रिक्वेस्ट्समध्ये किमान एक स्वतंत्र समीक्षक असल्याची खात्री करा—जर तुम्ही एखाद्या प्रोजेक्टवर एकटे काम करत असाल, तर इतर डेव्हलपर्स शोधण्याचा आणि कोड पुनरावलोकनांची देवाणघेवाण करण्याचा विचार करा + +- स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी, संकलन आणि उपयोजन करण्यासाठी [विकास पर्यावरण](/developers/docs/frameworks/) वापरा + +- तुमचा कोड [Cyfrin Aderyn](https://github.com/Cyfrin/aderyn), Mythril आणि Slither सारख्या मूलभूत कोड विश्लेषण साधनांमधून चालवा. आदर्शपणे, तुम्ही प्रत्येक पुल रिक्वेस्ट विलीन होण्यापूर्वी हे केले पाहिजे आणि आउटपुटमधील फरकांची तुलना केली पाहिजे + +- तुमचा कोड त्रुटींशिवाय संकलित होतो आणि सॉलिडिटी कंपाइलर कोणतीही चेतावणी देत नाही याची खात्री करा + +- तुमच्या कोडचे योग्यरित्या दस्तऐवजीकरण करा ([NatSpec](https://solidity.readthedocs.io/en/develop/natspec-format.html) वापरून) आणि कॉन्ट्रॅक्ट आर्किटेक्चरबद्दलचे तपशील समजण्यास सोप्या भाषेत वर्णन करा. यामुळे इतरांना तुमच्या कोडचे ऑडिट आणि पुनरावलोकन करणे सोपे होईल. + +### 6. मजबूत आपत्कालीन पुनर्प्राप्ती योजना लागू करा {#implement-disaster-recovery-plans} + +सुरक्षित प्रवेश नियंत्रणे डिझाइन करणे, फंक्शन मॉडिफायर्स लागू करणे आणि इतर सूचनांमुळे स्मार्ट कॉन्ट्रॅक्ट सुरक्षा सुधारू शकते, परंतु ते दुर्भावनापूर्ण शोषणांची शक्यता नाकारू शकत नाहीत. सुरक्षित स्मार्ट कॉन्ट्रॅक्ट्स तयार करण्यासाठी “अपयशासाठी तयार राहणे” आणि हल्ल्यांना प्रभावीपणे प्रतिसाद देण्यासाठी एक बॅकअप योजना असणे आवश्यक आहे. एका योग्य आपत्कालीन पुनर्प्राप्ती योजनेत खालीलपैकी काही किंवा सर्व घटक समाविष्ट असतील: + +#### कॉन्ट्रॅक्ट अपग्रेड {#contract-upgrades} + +Ethereum स्मार्ट कॉन्ट्रॅक्ट्स डीफॉल्टनुसार अपरिवर्तनीय असले तरी, अपग्रेड पॅटर्न वापरून काही प्रमाणात बदलक्षमता प्राप्त करणे शक्य आहे. ज्या प्रकरणांमध्ये गंभीर त्रुटीमुळे तुमचा जुना कॉन्ट्रॅक्ट निरुपयोगी होतो आणि नवीन तर्क तैनात करणे हा सर्वात व्यवहार्य पर्याय असतो, अशा प्रकरणांमध्ये कॉन्ट्रॅक्ट अपग्रेड करणे आवश्यक आहे. + +कॉन्ट्रॅक्ट अपग्रेड यंत्रणा वेगवेगळ्या प्रकारे काम करतात, परंतु “प्रॉक्सी पॅटर्न” हा स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करण्यासाठी अधिक लोकप्रिय दृष्टिकोनांपैकी एक आहे. [प्रॉक्सी पॅटर्न्स](https://www.cyfrin.io/blog/upgradeable-proxy-smart-contract-pattern) ॲप्लिकेशनची स्थिती आणि तर्क _दोन_ कॉन्ट्रॅक्ट्समध्ये विभाजित करतात. पहिला कॉन्ट्रॅक्ट (ज्याला 'प्रॉक्सी कॉन्ट्रॅक्ट' म्हणतात) स्थिती व्हेरिएबल्स (उदा. वापरकर्ता शिल्लक) संग्रहित करतो, तर दुसरा कॉन्ट्रॅक्ट (ज्याला 'लॉजिक कॉन्ट्रॅक्ट' म्हणतात) कॉन्ट्रॅक्ट फंक्शन्स कार्यान्वित करण्यासाठी कोड धारण करतो. + +खाती प्रॉक्सी कॉन्ट्रॅक्टशी संवाद साधतात, जो सर्व फंक्शन कॉल्स लॉजिक कॉन्ट्रॅक्टकडे [`delegatecall()`](https://docs.soliditylang.org/en/v0.8.16/introduction-to-smart-contracts.html?highlight=delegatecall#delegatecall-callcode-and-libraries) या निम्न-स्तरीय कॉलचा वापर करून पाठवतो. नियमित मेसेज कॉलच्या विपरीत, `delegatecall()` हे सुनिश्चित करते की लॉजिक कॉन्ट्रॅक्टच्या ॲड्रेसवर चालणारा कोड कॉलिंग कॉन्ट्रॅक्टच्या संदर्भात कार्यान्वित होतो. याचा अर्थ लॉजिक कॉन्ट्रॅक्ट नेहमी प्रॉक्सीच्या स्टोरेजमध्ये लिहील (त्याच्या स्वतःच्या स्टोरेजऐवजी) आणि `msg.sender` आणि `msg.value` ची मूळ मूल्ये जतन केली जातील. + +लॉजिक कॉन्ट्रॅक्टकडे कॉल सोपवण्यासाठी त्याचा ॲड्रेस प्रॉक्सी कॉन्ट्रॅक्टच्या स्टोरेजमध्ये संग्रहित करणे आवश्यक आहे. म्हणून, कॉन्ट्रॅक्टचा तर्क अपग्रेड करणे म्हणजे फक्त दुसरा लॉजिक कॉन्ट्रॅक्ट तैनात करणे आणि नवीन ॲड्रेस प्रॉक्सी कॉन्ट्रॅक्टमध्ये संग्रहित करणे. प्रॉक्सी कॉन्ट्रॅक्टला केलेले त्यानंतरचे कॉल आपोआप नवीन लॉजिक कॉन्ट्रॅक्टकडे पाठवले जात असल्याने, तुम्ही कोडमध्ये कोणताही बदल न करता कॉन्ट्रॅक्ट “अपग्रेड” केला असेल. + +[कॉन्ट्रॅक्ट अपग्रेड करण्याबद्दल अधिक](/developers/docs/smart-contracts/upgrading/). + +#### आपत्कालीन थांबे {#emergency-stops} + +नमूद केल्याप्रमाणे, विस्तृत ऑडिटिंग आणि चाचणी स्मार्ट कॉन्ट्रॅक्टमधील सर्व बग शोधू शकत नाही. उपयोजनानंतर तुमच्या कोडमध्ये एखादी असुरक्षितता आढळल्यास, ती दूर करणे अशक्य आहे कारण तुम्ही कॉन्ट्रॅक्ट ॲड्रेसवर चालणारा कोड बदलू शकत नाही. तसेच, अपग्रेड यंत्रणा (उदा. प्रॉक्सी पॅटर्न्स) लागू करण्यासाठी वेळ लागू शकतो (त्यांना अनेकदा वेगवेगळ्या पक्षांकडून मंजुरीची आवश्यकता असते), ज्यामुळे हल्लेखोरांना अधिक नुकसान करण्यासाठी अधिक वेळ मिळतो. + +अंतिम पर्याय म्हणजे “आपत्कालीन थांबा” फंक्शन लागू करणे जे कॉन्ट्रॅक्टमधील असुरक्षित फंक्शन्सना केलेले कॉल ब्लॉक करते. आपत्कालीन थांब्यांमध्ये सामान्यतः खालील घटक असतात: + +1. एक ग्लोबल बुलियन व्हेरिएबल जे स्मार्ट कॉन्ट्रॅक्ट थांबलेल्या स्थितीत आहे की नाही हे दर्शवते. हे व्हेरिएबल कॉन्ट्रॅक्ट सेट करताना `false` वर सेट केले जाते, परंतु कॉन्ट्रॅक्ट थांबवल्यावर `true` वर परत जाईल. + +2. त्यांच्या अंमलबजावणीमध्ये बुलियन व्हेरिएबलचा संदर्भ देणारी फंक्शन्स. स्मार्ट कॉन्ट्रॅक्ट थांबवलेला नसताना अशी फंक्शन्स उपलब्ध असतात आणि आपत्कालीन थांबा वैशिष्ट्य सुरू झाल्यावर ती अनुपलब्ध होतात. + +3. एक घटक ज्याला आपत्कालीन थांबा फंक्शनमध्ये प्रवेश आहे, जो बुलियन व्हेरिएबलला `true` वर सेट करतो. दुर्भावनापूर्ण कृती टाळण्यासाठी, या फंक्शनला केलेले कॉल विश्वसनीय ॲड्रेसपर्यंत (उदा. कॉन्ट्रॅक्ट मालक) मर्यादित ठेवले जाऊ शकतात. + +एकदा कॉन्ट्रॅक्टने आपत्कालीन थांबा सक्रिय केल्यावर, काही फंक्शन्स कॉल करण्यायोग्य नसतील. हे ग्लोबल व्हेरिएबलचा संदर्भ देणाऱ्या मॉडिफायरमध्ये निवडक फंक्शन्स गुंडाळून साध्य केले जाते. खाली [एक उदाहरण](https://github.com/fravoll/solidity-patterns/blob/master/EmergencyStop/EmergencyStop.sol) आहे जे कॉन्ट्रॅक्ट्समध्ये या पॅटर्नची अंमलबजावणी दर्शवते: + +```solidity +// हा कोड व्यावसायिकरित्या ऑडिट केलेला नाही आणि सुरक्षितता किंवा अचूकतेबद्दल कोणतेही वचन देत नाही. तुमच्या स्वतःच्या जोखमीवर वापरा. + +contract EmergencyStop { + + bool isStopped = false; + + modifier stoppedInEmergency { + require(!isStopped); + _; + } + + modifier onlyWhenStopped { + require(isStopped); + _; + } + + modifier onlyAuthorized { + // msg.sender च्या अधिकृततेसाठी येथे तपासा + _; + } + + function stopContract() public onlyAuthorized { + isStopped = true; + } + + function resumeContract() public onlyAuthorized { + isStopped = false; + } + + function deposit() public payable stoppedInEmergency { + // येथे ठेव प्रक्रिया होत आहे + } + + function emergencyWithdraw() public onlyWhenStopped { + // येथे आपत्कालीन काढण्याची प्रक्रिया होत आहे + } +} +``` + +हे उदाहरण आपत्कालीन थांब्यांची मूलभूत वैशिष्ट्ये दर्शवते: + +- `isStopped` हे एक बुलियन आहे जे सुरुवातीला `false` आणि कॉन्ट्रॅक्ट आपत्कालीन मोडमध्ये प्रवेश केल्यावर `true` ठरते. + +- फंक्शन मॉडिफायर्स `onlyWhenStopped` आणि `stoppedInEmergency` `isStopped` व्हेरिएबल तपासतात. `stoppedInEmergency` चा वापर अशा फंक्शन्स नियंत्रित करण्यासाठी केला जातो जे कॉन्ट्रॅक्ट असुरक्षित असताना अनुपलब्ध असले पाहिजेत (उदा. `deposit()`). या फंक्शन्सना केलेले कॉल फक्त परत येतील. + +`onlyWhenStopped` चा वापर आपत्कालीन परिस्थितीत कॉल करण्यायोग्य असलेल्या फंक्शन्ससाठी केला जातो (उदा. `emergencyWithdraw()`). अशी फंक्शन्स परिस्थिती सोडविण्यात मदत करू शकतात, म्हणूनच त्यांना “प्रतिबंधित फंक्शन्स” सूचीमधून वगळण्यात आले आहे. + +आपत्कालीन थांबा कार्यक्षमता वापरल्याने तुमच्या स्मार्ट कॉन्ट्रॅक्टमधील गंभीर असुरक्षितता हाताळण्यासाठी एक प्रभावी तात्पुरता उपाय मिळतो. तथापि, यामुळे वापरकर्त्यांना डेव्हलपर्सवर विश्वास ठेवण्याची गरज वाढते की ते स्व-सेवा कारणांसाठी ते सक्रिय करणार नाहीत. यासाठी, आपत्कालीन थांब्याचे नियंत्रण विकेंद्रित करणे, एकतर ऑनचेन मतदान यंत्रणा, टाइमलॉक किंवा मल्टीसिग वॉलेटच्या मंजुरीच्या अधीन ठेवून, हे संभाव्य उपाय आहेत. + +#### इव्हेंट मॉनिटरिंग {#event-monitoring} + +[इव्हेंट्स](https://docs.soliditylang.org/en/v0.8.15/contracts.html#events) तुम्हाला स्मार्ट कॉन्ट्रॅक्ट फंक्शन्सना केलेले कॉल ट्रॅक करण्याची आणि स्थिती व्हेरिएबल्समधील बदल मॉनिटर करण्याची परवानगी देतात. जेव्हा एखादा पक्ष सुरक्षिततेसाठी महत्त्वपूर्ण कृती करतो (उदा. निधी काढणे) तेव्हा तुमचा स्मार्ट कॉन्ट्रॅक्ट एक इव्हेंट उत्सर्जित करण्यासाठी प्रोग्राम करणे आदर्श आहे. + +इव्हेंट्स लॉग करणे आणि त्यांचे ऑफचेन मॉनिटरिंग केल्याने कॉन्ट्रॅक्ट ऑपरेशन्सबद्दल अंतर्दृष्टी मिळते आणि दुर्भावनापूर्ण कृती लवकर शोधण्यात मदत होते. याचा अर्थ तुमची टीम हॅकला जलद प्रतिसाद देऊ शकते आणि वापरकर्त्यांवरील परिणाम कमी करण्यासाठी कृती करू शकते, जसे की फंक्शन्स थांबवणे किंवा अपग्रेड करणे. + +तुम्ही एक ऑफ-द-शेल्फ मॉनिटरिंग टूल देखील निवडू शकता जे कोणी तुमच्या कॉन्ट्रॅक्टशी संवाद साधल्यावर आपोआप अलर्ट फॉरवर्ड करते. ही साधने तुम्हाला वेगवेगळ्या ट्रिगर्सवर आधारित कस्टम अलर्ट तयार करण्याची परवानगी देतील, जसे की व्यवहाराचे प्रमाण, फंक्शन कॉलची वारंवारता किंवा विशिष्ट फंक्शन्स. उदाहरणार्थ, तुम्ही एक अलर्ट प्रोग्राम करू शकता जो एकाच व्यवहारात काढलेली रक्कम विशिष्ट मर्यादेपेक्षा जास्त झाल्यास येतो. + +### 7. सुरक्षित शासन प्रणाली डिझाइन करा {#design-secure-governance-systems} + +तुम्ही तुमच्या ॲप्लिकेशनचे विकेंद्रीकरण करू शकता, ज्यामध्ये मुख्य स्मार्ट कॉन्ट्रॅक्ट्सचे नियंत्रण समुदाय सदस्यांना सोपवले जाते. या प्रकरणात, स्मार्ट कॉन्ट्रॅक्ट सिस्टममध्ये एक गव्हर्नन्स मॉड्यूल समाविष्ट असेल - एक यंत्रणा जी समुदाय सदस्यांना ऑनचेन गव्हर्नन्स सिस्टमद्वारे प्रशासकीय कृतींना मंजूर करण्याची परवानगी देते. उदाहरणार्थ, प्रॉक्सी कॉन्ट्रॅक्टला नवीन अंमलबजावणीमध्ये अपग्रेड करण्याच्या प्रस्तावावर टोकन-धारकांकडून मतदान केले जाऊ शकते. + +विकेंद्रित शासन फायदेशीर असू शकते, विशेषतः कारण ते डेव्हलपर्स आणि अंतिम-वापरकर्त्यांच्या हितांना संरेखित करते. तरीही, स्मार्ट कॉन्ट्रॅक्ट शासन यंत्रणा चुकीच्या पद्धतीने लागू केल्यास नवीन धोके निर्माण करू शकतात. एक संभाव्य परिस्थिती अशी आहे की जर एखाद्या हल्लेखोराने [फ्लॅश लोन](/defi/#flash-loans) घेऊन प्रचंड मतदान शक्ती (टोकनच्या संख्येत मोजलेली) मिळवली आणि एक दुर्भावनापूर्ण प्रस्ताव मंजूर करून घेतला. + +ऑनचेन शासनाशी संबंधित समस्या टाळण्याचा एक मार्ग म्हणजे [टाइमलॉक वापरणे](https://blog.openzeppelin.com/protect-your-users-with-smart-contract-timelocks/). टाइमलॉक स्मार्ट कॉन्ट्रॅक्टला विशिष्ट कालावधी उलटल्याशिवाय काही क्रिया करण्यापासून प्रतिबंधित करते. इतर धोरणांमध्ये प्रत्येक टोकनला ते किती काळ लॉक केले गेले आहे यावर आधारित “मतदान वजन” देणे, किंवा सध्याच्या ब्लॉकऐवजी ऐतिहासिक कालावधीतील (उदाहरणार्थ, 2-3 ब्लॉक्स पूर्वीच्या) ॲड्रेसची मतदान शक्ती मोजणे यांचा समावेश आहे. दोन्ही पद्धती ऑनचेन मतांवर प्रभाव टाकण्यासाठी लवकर मतदान शक्ती जमा करण्याची शक्यता कमी करतात. + +सामायिक केलेल्या लिंक्समध्ये [सुरक्षित शासन प्रणाली डिझाइन करणे](https://blog.openzeppelin.com/smart-contract-security-guidelines-4-strategies-for-safer-governance-systems/), [DAOs मधील विविध मतदान यंत्रणा](https://hackernoon.com/governance-is-the-holy-grail-for-daos), आणि [DeFi चा लाभ घेणारे सामान्य DAO हल्ला वेक्टर](https://dacian.me/dao-governance-defi-attacks) यावर अधिक. + +### 8. कोडमधील गुंतागुंत कमीतकमी ठेवा {#reduce-code-complexity} + +पारंपारिक सॉफ्टवेअर डेव्हलपर्स KISS (“keep it simple, stupid”) तत्त्वाशी परिचित आहेत, जे सॉफ्टवेअर डिझाइनमध्ये अनावश्यक गुंतागुंत आणण्याविरुद्ध सल्ला देते. हे “गुंतागुंतीच्या प्रणाली गुंतागुंतीच्या मार्गांनी अयशस्वी होतात” आणि महागड्या चुकांना अधिक बळी पडतात या दीर्घकालीन विचाराचे अनुसरण करते. + +स्मार्ट कॉन्ट्रॅक्ट्स लिहिताना गोष्टी सोप्या ठेवणे विशेष महत्त्वाचे आहे, कारण स्मार्ट कॉन्ट्रॅक्ट्स संभाव्यतः मोठ्या प्रमाणात मूल्य नियंत्रित करतात. स्मार्ट कॉन्ट्रॅक्ट्स लिहिताना साधेपणा साधण्यासाठी एक टीप म्हणजे शक्य असेल तेथे [OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/5.x/) सारख्या विद्यमान लायब्ररींचा पुन्हा वापर करणे. कारण या लायब्ररींचे डेव्हलपर्सकडून विस्तृतपणे ऑडिट आणि चाचणी केली गेली आहे, त्यामुळे त्यांचा वापर केल्याने सुरवातीपासून नवीन कार्यक्षमता लिहून बग येण्याची शक्यता कमी होते. + +आणखी एक सामान्य सल्ला म्हणजे लहान फंक्शन्स लिहिणे आणि एकाधिक कॉन्ट्रॅक्ट्समध्ये व्यावसायिक तर्क विभाजित करून कॉन्ट्रॅक्ट्स मॉड्यूलर ठेवणे. सोपा कोड लिहिल्याने केवळ स्मार्ट कॉन्ट्रॅक्टमधील हल्ल्याची पृष्ठभाग कमी होत नाही, तर संपूर्ण प्रणालीच्या अचूकतेबद्दल तर्क करणे आणि संभाव्य डिझाइन त्रुटी लवकर शोधणे देखील सोपे होते. + +### 9. सामान्य स्मार्ट कॉन्ट्रॅक्ट असुरक्षिततेपासून बचाव करा {#mitigate-common-smart-contract-vulnerabilities} + +#### रीएन्ट्रन्सी {#reentrancy} + +EVM समवर्तीतेस परवानगी देत नाही, याचा अर्थ मेसेज कॉलमध्ये सामील असलेले दोन कॉन्ट्रॅक्ट्स एकाच वेळी चालू शकत नाहीत. एक बाह्य कॉल कॉलिंग कॉन्ट्रॅक्टची अंमलबजावणी आणि मेमरी थांबवतो जोपर्यंत कॉल परत येत नाही, त्यानंतर अंमलबजावणी सामान्यपणे पुढे जाते. या प्रक्रियेचे औपचारिकपणे वर्णन [कंट्रोल फ्लो](https://www.computerhope.com/jargon/c/contflow.htm) दुसऱ्या कॉन्ट्रॅक्टकडे हस्तांतरित करणे असे केले जाऊ शकते. + +जरी बहुतेक वेळा निरुपद्रवी असले तरी, अविश्वासू कॉन्ट्रॅक्ट्सकडे कंट्रोल फ्लो हस्तांतरित केल्याने समस्या निर्माण होऊ शकतात, जसे की रीएन्ट्रन्सी. जेव्हा मूळ फंक्शनची विनंती पूर्ण होण्यापूर्वी एखादा दुर्भावनापूर्ण कॉन्ट्रॅक्ट असुरक्षित कॉन्ट्रॅक्टमध्ये परत कॉल करतो तेव्हा रीएन्ट्रन्सी हल्ला होतो. या प्रकारचा हल्ला एका उदाहरणासह उत्तम प्रकारे स्पष्ट केला आहे. + +एक साधा स्मार्ट कॉन्ट्रॅक्ट (‘Victim’) विचारात घ्या जो कोणालाही इथर जमा आणि काढण्याची परवानगी देतो: + +```solidity +// हा कॉन्ट्रॅक्ट असुरक्षित आहे. उत्पादनात वापरू नका + +contract Victim { + mapping (address => uint256) public balances; + + function deposit() external payable { + balances[msg.sender] += msg.value; + } + + function withdraw() external { + uint256 amount = balances[msg.sender]; + (bool success, ) = msg.sender.call.value(amount)(""); + require(success); + balances[msg.sender] = 0; + } +} +``` + +हा कॉन्ट्रॅक्ट वापरकर्त्यांना कॉन्ट्रॅक्टमध्ये पूर्वी जमा केलेला ETH काढण्याची परवानगी देण्यासाठी `withdraw()` फंक्शन उघड करतो. पैसे काढण्याची प्रक्रिया करताना, कॉन्ट्रॅक्ट खालील ऑपरेशन्स करतो: + +1. वापरकर्त्याची ETH शिल्लक तपासते +2. कॉलिंग ॲड्रेसवर निधी पाठवते +3. त्यांची शिल्लक 0 वर रीसेट करते, ज्यामुळे वापरकर्त्याकडून अतिरिक्त पैसे काढणे प्रतिबंधित होते + +`Victim` कॉन्ट्रॅक्टमधील `withdraw()` फंक्शन “चेक्स-इंटरॅक्शन्स-इफेक्ट्स” पॅटर्नचे अनुसरण करते. ते अंमलबजावणीसाठी आवश्यक असलेल्या अटी पूर्ण झाल्या आहेत का हे _तपासते_ (उदा., वापरकर्त्याकडे सकारात्मक ETH शिल्लक आहे) आणि व्यवहाराचे _परिणाम_ लागू करण्यापूर्वी कॉलरच्या ॲड्रेसवर ETH पाठवून _संवाद_ साधते (उदा., वापरकर्त्याची शिल्लक कमी करणे). + +जर `withdraw()` बाह्य मालकीच्या खात्यातून (EOA) कॉल केले असेल, तर फंक्शन अपेक्षेप्रमाणे कार्यान्वित होते: `msg.sender.call.value()` कॉलरला ETH पाठवते. तथापि, जर `msg.sender` एक स्मार्ट कॉन्ट्रॅक्ट खाते असेल आणि ते `withdraw()` कॉल करत असेल, तर `msg.sender.call.value()` वापरून निधी पाठवल्याने त्या ॲड्रेसवर संग्रहित केलेला कोड देखील चालेल. + +कल्पना करा की हा कोड कॉन्ट्रॅक्ट ॲड्रेसवर तैनात केला आहे: + +```solidity + contract Attacker { + function beginAttack() external payable { + Victim(victim_address).deposit.value(1 ether)(); + Victim(victim_address).withdraw(); + } + + function() external payable { + if (gasleft() > 40000) { + Victim(victim_address).withdraw(); + } + } +} +``` + +हा कॉन्ट्रॅक्ट तीन गोष्टी करण्यासाठी डिझाइन केलेला आहे: + +1. दुसऱ्या खात्यातून (बहुधा हल्लेखोराच्या EOA) ठेव स्वीकारा +2. Victim कॉन्ट्रॅक्टमध्ये 1 ETH जमा करा +3. स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित 1 ETH काढा + +येथे काहीही चुकीचे नाही, फक्त `Attacker` कडे आणखी एक फंक्शन आहे जे `Victim` मधील `withdraw()` ला पुन्हा कॉल करते जर येणाऱ्या `msg.sender.call.value` मधून उरलेला गॅस 40,000 पेक्षा जास्त असेल. हे `Attacker` ला `Victim` मध्ये पुन्हा प्रवेश करण्याची आणि `withdraw` ची पहिली विनंती पूर्ण होण्यापूर्वी अधिक निधी काढण्याची क्षमता देते. हे चक्र असे दिसते: + +```solidity +- हल्लेखोराचा EOA `Attacker.beginAttack()` ला 1 ETH सह कॉल करतो +- `Attacker.beginAttack()` `Victim` मध्ये 1 ETH जमा करतो +- `Attacker` `Victim` मधील `withdraw()` ला कॉल करतो +- `Victim` `Attacker` ची शिल्लक (1 ETH) तपासतो +- `Victim` `Attacker` ला 1 ETH पाठवतो (जे डीफॉल्ट फंक्शन सुरू करते) +- `Attacker` `Victim.withdraw()` ला पुन्हा कॉल करतो (लक्षात घ्या की `Victim` ने पहिल्या काढण्यामधून `Attacker` ची शिल्लक कमी केलेली नाही) +- `Victim` `Attacker` ची शिल्लक तपासतो (जी अजूनही 1 ETH आहे कारण त्याने पहिल्या कॉलचे परिणाम लागू केलेले नाहीत) +- `Victim` `Attacker` ला 1 ETH पाठवतो (जे डीफॉल्ट फंक्शन सुरू करते आणि `Attacker` ला `withdraw` फंक्शनमध्ये पुन्हा प्रवेश करण्याची परवानगी देते) +- `Attacker` चा गॅस संपेपर्यंत ही प्रक्रिया पुनरावृत्त होते, ज्यावेळी `msg.sender.call.value` अतिरिक्त काढण्याशिवाय परत येतो +- `Victim` शेवटी पहिल्या व्यवहाराचे (आणि त्यानंतरच्या) परिणाम त्याच्या स्थितीवर लागू करतो, त्यामुळे `Attacker` ची शिल्लक 0 वर सेट केली जाते +``` + +सारांश असा आहे की कॉलरची शिल्लक फंक्शनची अंमलबजावणी पूर्ण होईपर्यंत 0 वर सेट केली जात नसल्यामुळे, त्यानंतरच्या विनंत्या यशस्वी होतील आणि कॉलरला त्यांची शिल्लक अनेक वेळा काढण्याची परवानगी मिळेल. [2016 च्या DAO हॅक](https://www.coindesk.com/learn/understanding-the-dao-attack) मध्ये घडल्याप्रमाणे, या प्रकारचा हल्ला स्मार्ट कॉन्ट्रॅक्टमधील निधी काढून घेण्यासाठी वापरला जाऊ शकतो. आजही स्मार्ट कॉन्ट्रॅक्ट्ससाठी रीएन्ट्रन्सी हल्ले ही एक गंभीर समस्या आहे, जसे की [रीएन्ट्रन्सी शोषणांची सार्वजनिक सूची](https://github.com/pcaversaccio/reentrancy-attacks) दर्शवते. + +##### रीएन्ट्रन्सी हल्ले कसे टाळावे + +रीएन्ट्रन्सी हाताळण्याचा एक दृष्टीकोन म्हणजे [चेक्स-इफेक्ट्स-इंटरॅक्शन्स पॅटर्न](https://docs.soliditylang.org/en/develop/security-considerations.html#use-the-checks-effects-interactions-pattern) चे अनुसरण करणे. हा पॅटर्न फंक्शन्सची अंमलबजावणी अशा प्रकारे क्रमबद्ध करतो की अंमलबजावणीसह पुढे जाण्यापूर्वी आवश्यक तपासणी करणारा कोड प्रथम येतो, त्यानंतर कॉन्ट्रॅक्ट स्थितीमध्ये फेरफार करणारा कोड आणि शेवटी इतर कॉन्ट्रॅक्ट्स किंवा EOAs शी संवाद साधणारा कोड येतो. + +चेक्स-इफेक्ट-इंटरॅक्शन पॅटर्न `Victim` कॉन्ट्रॅक्टच्या सुधारित आवृत्तीमध्ये वापरला जातो जो खाली दर्शविला आहे: + +```solidity +contract NoLongerAVictim { + function withdraw() external { + uint256 amount = balances[msg.sender]; + balances[msg.sender] = 0; + (bool success, ) = msg.sender.call.value(amount)(""); + require(success); + } +} +``` + +हा कॉन्ट्रॅक्ट वापरकर्त्याच्या शिलकीची _तपासणी_ करतो, `withdraw()` फंक्शनचे _परिणाम_ लागू करतो (वापरकर्त्याची शिल्लक 0 वर रीसेट करून), आणि नंतर _संवाद_ साधतो (वापरकर्त्याच्या ॲड्रेसवर ETH पाठवून). हे सुनिश्चित करते की बाह्य कॉल करण्यापूर्वी कॉन्ट्रॅक्ट आपले स्टोरेज अपडेट करते, ज्यामुळे पहिल्या हल्ल्याला सक्षम करणारी री-एन्ट्रन्सी अट दूर होते. `Attacker` कॉन्ट्रॅक्ट अजूनही `NoLongerAVictim` मध्ये परत कॉल करू शकतो, परंतु `balances[msg.sender]` 0 वर सेट केल्यामुळे, अतिरिक्त काढण्यामुळे त्रुटी येईल. + +आणखी एक पर्याय म्हणजे म्युच्युअल एक्सक्लूजन लॉक (सामान्यतः "म्यूटेक्स" म्हणून वर्णन केलेले) वापरणे जे फंक्शनची विनंती पूर्ण होईपर्यंत कॉन्ट्रॅक्टच्या स्थितीचा काही भाग लॉक करते. हे एक बुलियन व्हेरिएबल वापरून लागू केले जाते जे फंक्शन कार्यान्वित होण्यापूर्वी `true` वर सेट केले जाते आणि विनंती पूर्ण झाल्यावर `false` वर परत येते. खालील उदाहरणात पाहिल्याप्रमाणे, म्यूटेक्स वापरल्याने मूळ विनंती अजूनही प्रक्रिया करत असताना फंक्शनला पुनरावृत्ती होणाऱ्या कॉलपासून संरक्षण मिळते, ज्यामुळे रीएन्ट्रन्सी प्रभावीपणे थांबते. + +```solidity +pragma solidity ^0.7.0; + +contract MutexPattern { + bool locked = false; + mapping(address => uint256) public balances; + + modifier noReentrancy() { + require(!locked, "Blocked from reentrancy."); + locked = true; + _; + locked = false; + } + // हे फंक्शन म्यूटेक्सद्वारे संरक्षित आहे, त्यामुळे `msg.sender.call` मधून येणारे रीएन्ट्रंट कॉल `withdraw` ला पुन्हा कॉल करू शकत नाहीत. + // `return` विधान `true` ठरते पण तरीही मॉडिफायरमधील `locked = false` विधान मूल्यांकन करते + function withdraw(uint _amount) public payable noReentrancy returns(bool) { + require(balances[msg.sender] >= _amount, "No balance to withdraw."); + + balances[msg.sender] -= _amount; + (bool success, ) = msg.sender.call{value: _amount}(""); + require(success); + + return true; + } +} +``` + +तुम्ही [पुल पेमेंट्स](https://docs.openzeppelin.com/contracts/5.x/api/security#PullPayment) प्रणाली देखील वापरू शकता ज्यासाठी वापरकर्त्यांना स्मार्ट कॉन्ट्रॅक्ट्समधून निधी काढणे आवश्यक आहे, "पुश पेमेंट्स" प्रणालीऐवजी जी खात्यांमध्ये निधी पाठवते. यामुळे अज्ञात ॲड्रेसवरील कोड अनावधानाने सुरू होण्याची शक्यता दूर होते (आणि काही डिनायल-ऑफ-सर्व्हिस हल्ले देखील टाळू शकते). + +#### पूर्णांक अंडरफ्लो आणि ओव्हरफ्लो {#integer-underflows-and-overflows} + +जेव्हा अंकगणितीय क्रियेचे परिणाम स्वीकार्य मूल्यांच्या मर्यादेबाहेर जातात, तेव्हा पूर्णांक ओव्हरफ्लो होतो, ज्यामुळे ते सर्वात कमी दर्शविण्यायोग्य मूल्यावर "रोल ओव्हर" होते. उदाहरणार्थ, एक `uint8` फक्त 2^8-1=255 पर्यंतची मूल्ये संग्रहित करू शकतो. ज्या अंकगणितीय क्रियांचे परिणाम `255` पेक्षा जास्त होतात त्या ओव्हरफ्लो होतील आणि `uint` ला `0` वर रीसेट करतील, जसे गाडीचा ओडोमीटर कमाल मायलेज (999999) गाठल्यावर 0 वर रीसेट होतो. + +पूर्णांक अंडरफ्लो समान कारणांमुळे होतात: अंकगणितीय क्रियेचे परिणाम स्वीकार्य मर्यादेखाली येतात. समजा तुम्ही `uint8` मध्ये `0` कमी करण्याचा प्रयत्न केला, तर परिणाम फक्त कमाल दर्शविण्यायोग्य मूल्यावर (`255`) रोल ओव्हर होईल. + +पूर्णांक ओव्हरफ्लो आणि अंडरफ्लो दोन्ही कॉन्ट्रॅक्टच्या स्थिती व्हेरिएबल्समध्ये अनपेक्षित बदल घडवू शकतात आणि अनियोजित अंमलबजावणीस कारणीभूत ठरू शकतात. खाली एक उदाहरण दिले आहे जे दर्शवते की हल्लेखोर अवैध ऑपरेशन करण्यासाठी स्मार्ट कॉन्ट्रॅक्टमध्ये अंकगणितीय ओव्हरफ्लोचा कसा फायदा घेऊ शकतो: + +``` +pragma solidity ^0.7.6; + +// हा कॉन्ट्रॅक्ट टाइम वॉल्ट म्हणून काम करण्यासाठी डिझाइन केलेला आहे. +// वापरकर्ता या कॉन्ट्रॅक्टमध्ये जमा करू शकतो परंतु किमान एक आठवड्यासाठी पैसे काढू शकत नाही. +// वापरकर्ता 1 आठवड्याच्या प्रतीक्षा कालावधीच्या पलीकडे प्रतीक्षा वेळ वाढवू शकतो. + +/* +1. TimeLock तैनात करा +2. TimeLock च्या ॲड्रेससह Attack तैनात करा +3. 1 इथर पाठवून Attack.attack कॉल करा. तुम्ही तुमचा इथर ताबडतोब काढू शकाल. + +काय झाले? +Attack मुळे TimeLock.lockTime ओव्हरफ्लो झाला आणि 1 आठवड्याच्या प्रतीक्षा कालावधीपूर्वी पैसे काढता आले. +*/ + +contract TimeLock { + mapping(address => uint) public balances; + mapping(address => uint) public lockTime; + + function deposit() external payable { + balances[msg.sender] += msg.value; + lockTime[msg.sender] = block.timestamp + 1 weeks; + } + + function increaseLockTime(uint _secondsToIncrease) public { + lockTime[msg.sender] += _secondsToIncrease; + } + + function withdraw() public { + require(balances[msg.sender] > 0, "Insufficient funds"); + require(block.timestamp > lockTime[msg.sender], "Lock time not expired"); + + uint amount = balances[msg.sender]; + balances[msg.sender] = 0; + + (bool sent, ) = msg.sender.call{value: amount}(""); + require(sent, "Failed to send Ether"); + } +} + +contract Attack { + TimeLock timeLock; + + constructor(TimeLock _timeLock) { + timeLock = TimeLock(_timeLock); + } + + fallback() external payable {} + + function attack() public payable { + timeLock.deposit{value: msg.value}(); + /* + जर t = सध्याचा लॉक टाइम असेल तर आपल्याला x असा शोधायचा आहे की + x + t = 2**256 = 0 + म्हणून x = -t + 2**256 = type(uint).max + 1 + म्हणून x = type(uint).max + 1 - t + */ + timeLock.increaseLockTime( + type(uint).max + 1 - timeLock.lockTime(address(this)) + ); + timeLock.withdraw(); + } +} +``` + +##### पूर्णांक अंडरफ्लो आणि ओव्हरफ्लो कसे टाळावे + +आवृत्ती 0.8.0 पासून, सॉलिडिटी कंपाइलर पूर्णांक अंडरफ्लो आणि ओव्हरफ्लोस कारणीभूत ठरणारा कोड नाकारतो. तथापि, कमी कंपाइलर आवृत्तीसह संकलित केलेल्या कॉन्ट्रॅक्ट्सनी एकतर अंकगणितीय ऑपरेशन्स असलेल्या फंक्शन्सवर तपासणी करावी किंवा अंडरफ्लो/ओव्हरफ्लोसाठी तपासणारी लायब्ररी (उदा. [SafeMath](https://docs.openzeppelin.com/contracts/2.x/api/math)) वापरावी. + +#### ओरॅकल मॅनिपुलेशन {#oracle-manipulation} + +[ओरॅकल्स](/developers/docs/oracles/) ऑफचेन माहिती मिळवतात आणि स्मार्ट कॉन्ट्रॅक्ट्सना वापरण्यासाठी ऑनचेन पाठवतात. ओरॅकल्ससह, तुम्ही स्मार्ट कॉन्ट्रॅक्ट्स डिझाइन करू शकता जे ऑफचेन सिस्टम्स, जसे की भांडवली बाजार, यांच्याशी आंतरकार्य करतात, ज्यामुळे त्यांच्या ॲप्लिकेशनचा विस्तार होतो. + +परंतु जर ओरॅकल भ्रष्ट असेल आणि चुकीची माहिती ऑनचेन पाठवत असेल, तर स्मार्ट कॉन्ट्रॅक्ट्स चुकीच्या इनपुटवर आधारित कार्यान्वित होतील, ज्यामुळे समस्या निर्माण होऊ शकतात. हे “ओरॅकल समस्येचा” आधार आहे, जे ब्लॉकचेन ओरॅकलकडून आलेली माहिती अचूक, अद्ययावत आणि वेळेवर असल्याची खात्री करण्याच्या कार्याशी संबंधित आहे. + +एका मालमत्तेची स्पॉट किंमत मिळविण्यासाठी ऑनचेन ओरॅकल, जसे की विकेंद्रित एक्सचेंज, वापरणे ही एक संबंधित सुरक्षा चिंता आहे. [विकेंद्रित वित्त (DeFi)](/defi/) उद्योगातील कर्ज देणारे प्लॅटफॉर्म वापरकर्त्याच्या तारण मालमत्तेचे मूल्य निश्चित करण्यासाठी हे अनेकदा करतात, जेणेकरून ते किती कर्ज घेऊ शकतात हे ठरवता येईल. + +DEX किमती अनेकदा अचूक असतात, मुख्यत्वे बाजारात समता पुनर्संचयित करणाऱ्या आर्बिट्रेजर्समुळे. तथापि, त्या फेरफारीसाठी खुल्या आहेत, विशेषतः जर ऑनचेन ओरॅकल ऐतिहासिक ट्रेडिंग पॅटर्नवर आधारित मालमत्ता किमतींची गणना करत असेल (जे सहसा घडते). + +उदाहरणार्थ, एक हल्लेखोर तुमच्या कर्ज देणाऱ्या कॉन्ट्रॅक्टशी संवाद साधण्यापूर्वी फ्लॅश लोन घेऊन मालमत्तेची स्पॉट किंमत कृत्रिमरित्या वाढवू शकतो. मालमत्तेच्या किमतीसाठी DEX ची चौकशी केल्यास सामान्यपेक्षा जास्त मूल्य परत येईल (हल्लेखोराच्या मोठ्या “खरेदी ऑर्डर” मुळे मालमत्तेची मागणी विस्कळीत झाल्यामुळे), ज्यामुळे त्यांना गरजेपेक्षा जास्त कर्ज घेता येईल. अशा "फ्लॅश लोन हल्ल्यांचा" वापर DeFi ॲप्लिकेशन्समध्ये किंमत ओरॅकल्सवरील अवलंबित्व शोषण्यासाठी केला गेला आहे, ज्यामुळे प्रोटोकॉलना लाखो डॉलर्सचा निधी गमावावा लागला आहे. + +##### ओरॅकल मॅनिपुलेशन कसे टाळावे + +[ओरॅकल मॅनिपुलेशन टाळण्यासाठी](https://www.cyfrin.io/blog/price-oracle-manipultion-attacks-with-examples) किमान आवश्यकता म्हणजे विकेंद्रित ओरॅकल नेटवर्क वापरणे जे अपयशाचे एकल बिंदू टाळण्यासाठी अनेक स्त्रोतांकडून माहिती मिळवते. बहुतेक प्रकरणांमध्ये, विकेंद्रित ओरॅकल्समध्ये ओरॅकल नोड्सना योग्य माहिती कळवण्यासाठी प्रोत्साहित करण्यासाठी अंगभूत क्रिप्टोकॉनॉमिक प्रोत्साहन असते, ज्यामुळे ते केंद्रीकृत ओरॅकल्सपेक्षा अधिक सुरक्षित बनतात. + +जर तुम्ही मालमत्ता किमतींसाठी ऑनचेन ओरॅकलची चौकशी करण्याची योजना आखत असाल, तर टाइम-वेटेड सरासरी किंमत (TWAP) यंत्रणा लागू करणारी एक वापरण्याचा विचार करा. एक [TWAP ओरॅकल](https://docs.uniswap.org/contracts/v2/concepts/core-concepts/oracles) दोन वेगवेगळ्या वेळी (जे तुम्ही सुधारू शकता) मालमत्तेच्या किमतीची चौकशी करते आणि मिळालेल्या सरासरीवर आधारित स्पॉट किंमत मोजते. लांब कालावधी निवडल्याने तुमचे प्रोटोकॉल किंमत फेरफारीपासून संरक्षित होते कारण अलीकडेच कार्यान्वित झालेल्या मोठ्या ऑर्डर्स मालमत्ता किमतींवर परिणाम करू शकत नाहीत. + +## डेव्हलपर्ससाठी स्मार्ट कॉन्ट्रॅक्ट सुरक्षा संसाधने {#smart-contract-security-resources-for-developers} + +### स्मार्ट कॉन्ट्रॅक्ट्सचे विश्लेषण करण्यासाठी आणि कोडची अचूकता सत्यापित करण्यासाठी साधने {#code-analysis-tools} + +- **[चाचणी साधने आणि लायब्ररी](/developers/docs/smart-contracts/testing/#testing-tools-and-libraries)** - _स्मार्ट कॉन्ट्रॅक्ट्सवर युनिट चाचण्या, स्थिर विश्लेषण आणि गतिशील विश्लेषण करण्यासाठी उद्योग-मानक साधने आणि लायब्ररींचा संग्रह._ + +- **[औपचारिक पडताळणी साधने](/developers/docs/smart-contracts/formal-verification/#formal-verification-tools)** - _स्मार्ट कॉन्ट्रॅक्ट्समध्ये कार्यात्मक अचूकता सत्यापित करण्यासाठी आणि अपरिवर्तनीयता तपासण्यासाठी साधने._ + +- **[स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंग सेवा](/developers/docs/smart-contracts/testing/#smart-contract-auditing-services)** - _Ethereum विकास प्रकल्पांसाठी स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंग सेवा प्रदान करणाऱ्या संस्थांची सूची._ + +- **[बग बाउंटी प्लॅटफॉर्म](/developers/docs/smart-contracts/testing/#bug-bounty-platforms)** - _बग बाउंटीज समन्वयित करण्यासाठी आणि स्मार्ट कॉन्ट्रॅक्ट्समधील गंभीर असुरक्षिततेच्या जबाबदार प्रकटीकरणासाठी बक्षीस देण्यासाठी प्लॅटफॉर्म._ + +- **[फोर्क चेकर](https://forkchecker.hashex.org/)** - _फोर्क केलेल्या कॉन्ट्रॅक्टबद्दल सर्व उपलब्ध माहिती तपासण्यासाठी एक विनामूल्य ऑनलाइन साधन._ + +- **[ABI एनकोडर](https://abi.hashex.org/)** - _तुमची सॉलिडिटी कॉन्ट्रॅक्ट फंक्शन्स आणि कन्स्ट्रक्टर युक्तिवाद एनकोड करण्यासाठी एक विनामूल्य ऑनलाइन सेवा._ + +- **[Aderyn](https://github.com/Cyfrin/aderyn)** - _सॉलिडिटी स्टॅटिक ॲनालायझर, ॲबस्ट्रॅक्ट सिंटॅक्स ट्रीज (AST) मधून जात संशयित असुरक्षितता शोधतो आणि सोप्या-वाचण्यायोग्य मार्कडाउन स्वरूपात समस्या प्रिंट करतो._ + +### स्मार्ट कॉन्ट्रॅक्ट्सचे निरीक्षण करण्यासाठी साधने {#smart-contract-monitoring-tools} + +- **[Tenderly रिअल-टाइम अलर्टिंग](https://tenderly.co/monitoring)** - _तुमच्या स्मार्ट कॉन्ट्रॅक्ट्स किंवा वॉलेट्सवर असामान्य किंवा अनपेक्षित घटना घडल्यास रिअल-टाइम सूचना मिळवण्यासाठी एक साधन._ + +### स्मार्ट कॉन्ट्रॅक्ट्सच्या सुरक्षित प्रशासनासाठी साधने {#smart-contract-administration-tools} + +- **[Safe](https://safe.global/)** - _Ethereum वर चालणारा स्मार्ट कॉन्ट्रॅक्ट वॉलेट ज्यासाठी व्यवहार होण्यापूर्वी किमान संख्येच्या लोकांची मंजुरी आवश्यक असते (M-of-N)._ + +- **[OpenZeppelin Contracts](https://docs.openzeppelin.com/contracts/5.x/)** - _कॉन्ट्रॅक्ट मालकी, अपग्रेड, प्रवेश नियंत्रणे, शासन, थांबवण्याची क्षमता आणि बरेच काही यासह प्रशासकीय वैशिष्ट्ये लागू करण्यासाठी कॉन्ट्रॅक्ट लायब्ररीज._ + +### स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंग सेवा {#smart-contract-auditing-services} + +- **[ConsenSys Diligence](https://diligence.consensys.io/)** - _स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंग सेवा जी ब्लॉकचेन इकोसिस्टममधील प्रकल्पांना त्यांचे प्रोटोकॉल लॉन्चसाठी तयार आहेत आणि वापरकर्त्यांचे संरक्षण करण्यासाठी तयार आहेत याची खात्री करण्यास मदत करते._ + +- **[CertiK](https://www.certik.com/)** - _ब्लॉकचेन सुरक्षा फर्म जी स्मार्ट कॉन्ट्रॅक्ट्स आणि ब्लॉकचेन नेटवर्क्सवर अत्याधुनिक औपचारिक पडताळणी तंत्रज्ञानाचा वापर करण्यात अग्रणी आहे._ + +- **[Trail of Bits](https://www.trailofbits.com/)** - _सायबर सुरक्षा कंपनी जी धोका कमी करण्यासाठी आणि कोड मजबूत करण्यासाठी हल्लेखोर मानसिकतेसह सुरक्षा संशोधन एकत्र करते._ + +- **[PeckShield](https://peckshield.com/)** - _ब्लॉकचेन सुरक्षा कंपनी जी संपूर्ण ब्लॉकचेन इकोसिस्टमच्या सुरक्षा, गोपनीयता आणि उपयोगितेसाठी उत्पादने आणि सेवा देते._ + +- **[QuantStamp](https://quantstamp.com/)** - _सुरक्षा आणि जोखीम मूल्यांकन सेवांद्वारे ब्लॉकचेन तंत्रज्ञानाचा मुख्य प्रवाहात अवलंब सुलभ करणारी ऑडिटिंग सेवा._ + +- **[OpenZeppelin](https://www.openzeppelin.com/security-audits)** - _वितरित प्रणालींसाठी सुरक्षा ऑडिट प्रदान करणारी स्मार्ट कॉन्ट्रॅक्ट सुरक्षा कंपनी._ + +- **[Runtime Verification](https://runtimeverification.com/)** - _स्मार्ट कॉन्ट्रॅक्ट्सच्या औपचारिक मॉडेलिंग आणि पडताळणीमध्ये विशेषज्ञ असलेली सुरक्षा कंपनी._ + +- **[Hacken](https://hacken.io)** - _वेब3 सायबर सुरक्षा ऑडिटर जो ब्लॉकचेन सुरक्षेसाठी 360-डिग्री दृष्टिकोन आणतो._ + +- **[Nethermind](https://www.nethermind.io/smart-contract-audits)** - _Solidity आणि Cairo ऑडिटिंग सेवा, Ethereum आणि Starknet वर स्मार्ट कॉन्ट्रॅक्ट्सची अखंडता आणि वापरकर्त्यांच्या सुरक्षिततेची खात्री करते._ + +- **[HashEx](https://hashex.org/)** - _HashEx ब्लॉकचेन आणि स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंगवर लक्ष केंद्रित करते ज्यामुळे क्रिप्टोकरन्सीची सुरक्षा सुनिश्चित होते, स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंट, पेनिट्रेशन टेस्टिंग, ब्लॉकचेन कन्सल्टिंग यासारख्या सेवा प्रदान करते._ + +- **[Code4rena](https://code4rena.com/)** - _एक स्पर्धात्मक ऑडिट प्लॅटफॉर्म जो स्मार्ट कॉन्ट्रॅक्ट सुरक्षा तज्ञांना असुरक्षितता शोधण्यासाठी आणि वेब3 अधिक सुरक्षित बनविण्यात मदत करण्यासाठी प्रोत्साहन देतो._ + +- **[CodeHawks](https://codehawks.com/)** - _सुरक्षा संशोधकांसाठी स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंग स्पर्धा आयोजित करणारा स्पर्धात्मक ऑडिट प्लॅटफॉर्म._ + +- **[Cyfrin](https://cyfrin.io)** - _वेब3 सुरक्षा पॉवरहाऊस, उत्पादने आणि स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंग सेवांद्वारे क्रिप्टो सुरक्षा विकसित करते._ + +- **[ImmuneBytes](https://immunebytes.com/smart-contract-audit/)** - _वेब3 सुरक्षा फर्म जी अनुभवी ऑडिटर्स आणि सर्वोत्तम साधनांच्या टीमद्वारे ब्लॉकचेन प्रणालींसाठी सुरक्षा ऑडिट प्रदान करते._ + +- **[Oxorio](https://oxor.io/)** - _क्रिप्टो फर्म्स आणि DeFi प्रकल्पांसाठी EVM, Solidity, ZK, क्रॉस-चेन टेक मध्ये कौशल्यासह स्मार्ट कॉन्ट्रॅक्ट ऑडिट आणि ब्लॉकचेन सुरक्षा सेवा._ + +- **[Inference](https://inference.ag/)** - _सुरक्षा ऑडिटिंग कंपनी, EVM-आधारित ब्लॉकचेनसाठी स्मार्ट कॉन्ट्रॅक्ट ऑडिटिंगमध्ये विशेषज्ञ. त्यांच्या तज्ञ ऑडिटर्समुळे ते संभाव्य समस्या ओळखतात आणि उपयोजनापूर्वी त्या दुरुस्त करण्यासाठी कृतीशील उपाय सुचवतात._ + +### बग बाउंटी प्लॅटफॉर्म {#bug-bounty-platforms} + +- **[Immunefi](https://immunefi.com/)** - _स्मार्ट कॉन्ट्रॅक्ट्स आणि DeFi प्रकल्पांसाठी बग बाउंटी प्लॅटफॉर्म, जिथे सुरक्षा संशोधक कोडचे पुनरावलोकन करतात, असुरक्षितता उघड करतात, पैसे मिळवतात आणि क्रिप्टो अधिक सुरक्षित करतात._ + +- **[HackerOne](https://www.hackerone.com/)** - _असुरक्षितता समन्वय आणि बग बाउंटी प्लॅटफॉर्म जो व्यवसायांना पेनिट्रेशन टेस्टर्स आणि सायबर सुरक्षा संशोधकांशी जोडतो._ + +- **[HackenProof](https://hackenproof.com/)** - _क्रिप्टो प्रकल्पांसाठी (DeFi, स्मार्ट कॉन्ट्रॅक्ट्स, वॉलेट्स, CEX आणि बरेच काही) तज्ञ बग बाउंटी प्लॅटफॉर्म, जिथे सुरक्षा व्यावसायिक ट्रायज सेवा प्रदान करतात आणि संशोधकांना संबंधित, सत्यापित बग अहवालांसाठी पैसे मिळतात._ + +- **[Sherlock](https://www.sherlock.xyz/)** - _वेब3 मध्ये स्मार्ट कॉन्ट्रॅक्ट सुरक्षेसाठी अंडररायटर, ऑडिटर्ससाठी पेआउट स्मार्ट कॉन्ट्रॅक्ट्सद्वारे व्यवस्थापित केले जातात ज्यामुळे संबंधित बग्स योग्यरित्या दिले जातात हे सुनिश्चित होते._ + +- **[CodeHawks](https://www.codehawks.com/)** - _स्पर्धात्मक बग बाउंटी प्लॅटफॉर्म जिथे ऑडिटर्स सुरक्षा स्पर्धा आणि आव्हानांमध्ये भाग घेतात, आणि (लवकरच) त्यांच्या स्वतःच्या खाजगी ऑडिटमध्ये._ + +### ज्ञात स्मार्ट कॉन्ट्रॅक्ट असुरक्षितता आणि शोषणांची प्रकाशने {#common-smart-contract-vulnerabilities-and-exploits} + +- **[ConsenSys: ज्ञात स्मार्ट कॉन्ट्रॅक्ट हल्ले](https://consensysdiligence.github.io/smart-contract-best-practices/attacks/)** - _सर्वात महत्त्वपूर्ण कॉन्ट्रॅक्ट असुरक्षिततेचे नवशिक्यांसाठी अनुकूल स्पष्टीकरण, बहुतेक प्रकरणांसाठी नमुना कोडसह._ + +- **[SWC रजिस्ट्री](https://swcregistry.io/)** - _कॉमन वीकनेस एन्यूमरेशन (CWE) आयटमची क्युरेट केलेली सूची जी Ethereum स्मार्ट कॉन्ट्रॅक्ट्सना लागू होते._ + +- **[Rekt](https://rekt.news/)** - _उच्च-प्रोफाइल क्रिप्टो हॅक आणि शोषणांचे नियमितपणे अद्यतनित केलेले प्रकाशन, तपशीलवार पोस्ट-मॉर्टम अहवालांसह._ + +### स्मार्ट कॉन्ट्रॅक्ट सुरक्षा शिकण्यासाठी आव्हाने {#challenges-for-learning-smart-contract-security} + +- **[Awesome BlockSec CTF](https://github.com/blockthreat/blocksec-ctfs)** - _ब्लॉकचेन सुरक्षा वॉरगेम्स, आव्हाने आणि [कॅप्चर द फ्लॅग](https://www.webopedia.com/definitions/ctf-event/amp/) स्पर्धा आणि सोल्यूशन राइटअप्सची क्युरेट केलेली सूची._ + +- **[Damn Vulnerable DeFi](https://www.damnvulnerabledefi.xyz/)** - _DeFi स्मार्ट कॉन्ट्रॅक्ट्सची आक्षेपार्ह सुरक्षा शिकण्यासाठी आणि बग-हंटिंग आणि सुरक्षा ऑडिटिंगमध्ये कौशल्ये तयार करण्यासाठी वॉरगेम._ + +- **[Ethernaut](https://ethernaut.openzeppelin.com/)** - _वेब3/सॉलिडिटी-आधारित वॉरगेम जिथे प्रत्येक स्तर एक स्मार्ट कॉन्ट्रॅक्ट आहे ज्याला 'हॅक' करणे आवश्यक आहे._ + +- **[HackenProof x HackTheBox](https://app.hackthebox.com/tracks/HackenProof-Track)** - _एका काल्पनिक साहसात सेट केलेले स्मार्ट कॉन्ट्रॅक्ट हॅकिंग आव्हान. आव्हान यशस्वीरित्या पूर्ण केल्यावर खाजगी बग बाउंटी प्रोग्राममध्ये प्रवेश देखील मिळतो._ + +### स्मार्ट कॉन्ट्रॅक्ट्स सुरक्षित करण्यासाठी सर्वोत्तम पद्धती {#smart-contract-security-best-practices} + +- **[ConsenSys: Ethereum स्मार्ट कॉन्ट्रॅक्ट सुरक्षा सर्वोत्तम पद्धती](https://consensys.github.io/smart-contract-best-practices/)** - _Ethereum स्मार्ट कॉन्ट्रॅक्ट्स सुरक्षित करण्यासाठी मार्गदर्शक तत्त्वांची विस्तृत सूची._ + +- **[Nascent: साधे सुरक्षा टूलकिट](https://github.com/nascentxyz/simple-security-toolkit)** - _स्मार्ट कॉन्ट्रॅक्ट डेव्हलपमेंटसाठी व्यावहारिक सुरक्षा-केंद्रित मार्गदर्शक आणि चेकलिस्टचा संग्रह._ + +- **[Solidity पॅटर्न्स](https://fravoll.github.io/solidity-patterns/)** - _स्मार्ट कॉन्ट्रॅक्ट प्रोग्रामिंग भाषा Solidity साठी सुरक्षित पॅटर्न आणि सर्वोत्तम पद्धतींचे उपयुक्त संकलन._ + +- **[Solidity डॉक्स: सुरक्षा विचार](https://docs.soliditylang.org/en/v0.8.16/security-considerations.html)** - _Solidity सह सुरक्षित स्मार्ट कॉन्ट्रॅक्ट्स लिहिण्यासाठी मार्गदर्शक तत्त्वे._ + +- **[स्मार्ट कॉन्ट्रॅक्ट सुरक्षा पडताळणी मानक](https://github.com/securing/SCSVS)** - _डेव्हलपर्स, आर्किटेक्ट्स, सुरक्षा समीक्षक आणि विक्रेत्यांसाठी स्मार्ट कॉन्ट्रॅक्ट्सची सुरक्षा प्रमाणित करण्यासाठी तयार केलेली चौदा-भागांची चेकलिस्ट._ + +- **[स्मार्ट कॉन्ट्रॅक्ट सुरक्षा आणि ऑडिटिंग शिका](https://updraft.cyfrin.io/courses/security)** - _अंतिम स्मार्ट कॉन्ट्रॅक्ट सुरक्षा आणि ऑडिटिंग कोर्स, जो स्मार्ट कॉन्ट्रॅक्ट डेव्हलपर्ससाठी तयार केला आहे जे त्यांच्या सुरक्षा सर्वोत्तम पद्धती सुधारू इच्छितात आणि सुरक्षा संशोधक बनू इच्छितात._ + +### स्मार्ट कॉन्ट्रॅक्ट सुरक्षेवरील ट्युटोरियल्स {#tutorials-on-smart-contract-security} + +- [सुरक्षित स्मार्ट कॉन्ट्रॅक्ट कसे लिहावे](/developers/tutorials/secure-development-workflow/) + +- [स्मार्ट कॉन्ट्रॅक्ट बग शोधण्यासाठी स्लिथरचा वापर कसा करावा](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) + +- [स्मार्ट कॉन्ट्रॅक्ट बग शोधण्यासाठी मँटिकोरचा वापर कसा करावा](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) + +- [स्मार्ट कॉन्ट्रॅक्ट सुरक्षा मार्गदर्शक तत्त्वे](/developers/tutorials/smart-contract-security-guidelines/) + +- [तुमच्या टोकन कॉन्ट्रॅक्टला अनियंत्रित टोकन्ससह सुरक्षितपणे कसे समाकलित करावे](/developers/tutorials/token-integration-checklist/) + +- [सायफ्रिन अपड्राफ्ट - स्मार्ट कॉन्ट्रॅक्ट्स सुरक्षा आणि ऑडिटिंग पूर्ण कोर्स](https://updraft.cyfrin.io/courses/security) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/testing/index.md b/public/content/translations/mr/developers/docs/smart-contracts/testing/index.md new file mode 100644 index 00000000000..22ca6cf1e05 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/testing/index.md @@ -0,0 +1,310 @@ +--- +title: "स्मार्ट करारांची चाचणी" +description: "Ethereum स्मार्ट करारांच्या चाचणीसाठी तंत्र आणि विचारांचे विहंगावलोकन." +lang: mr +--- + +Ethereum सारखे सार्वजनिक ब्लॉकचेन अपरिवर्तनीय आहेत, ज्यामुळे स्मार्ट कराराचा कोड उपयोजनानंतर बदलणे कठीण होते. "व्हर्च्युअल अपग्रेड" करण्यासाठी [करार अपग्रेड पॅटर्न्स](/developers/docs/smart-contracts/upgrading/) अस्तित्वात आहेत, परंतु हे लागू करणे कठीण आहे आणि त्यासाठी सामाजिक सहमती आवश्यक आहे. शिवाय, एखादी त्रुटी शोधल्यानंतरच अपग्रेडद्वारे ती दुरुस्त केली जाऊ शकते—जर एखाद्या आक्रमणकर्त्याला प्रथम असुरक्षितता आढळली, तर तुमचा स्मार्ट करार धोक्यात येऊ शकतो. + +या कारणांमुळे, Mainnet वर [उपयोजन](/developers/docs/smart-contracts/deploying/) करण्यापूर्वी स्मार्ट करारांची चाचणी करणे हे [सुरक्षिततेसाठी](/developers/docs/smart-contracts/security/) किमान आवश्यकता आहे. करारांची चाचणी घेण्यासाठी आणि कोडच्या अचूकतेचे मूल्यांकन करण्यासाठी अनेक तंत्रे आहेत; तुम्ही काय निवडता हे तुमच्या गरजांवर अवलंबून आहे. तरीही, विविध साधने आणि दृष्टिकोनांनी बनलेला एक चाचणी संच करार कोडमधील किरकोळ आणि मोठ्या दोन्ही सुरक्षा त्रुटी शोधण्यासाठी आदर्श आहे. + +## पूर्वतयारी {#prerequisites} + +हे पृष्ठ Ethereum नेटवर्कवर उपयोजन करण्यापूर्वी स्मार्ट करारांची चाचणी कशी करावी हे स्पष्ट करते. तुम्ही [स्मार्ट करारांशी](/developers/docs/smart-contracts/) परिचित आहात असे गृहीत धरले आहे. + +## स्मार्ट करार चाचणी म्हणजे काय? {#what-is-smart-contract-testing} + +स्मार्ट करार चाचणी ही स्मार्ट कराराचा कोड अपेक्षेप्रमाणे काम करतो की नाही हे सत्यापित करण्याची प्रक्रिया आहे. एखादा विशिष्ट स्मार्ट करार विश्वासार्हता, उपयोगिता आणि सुरक्षिततेच्या गरजा पूर्ण करतो की नाही हे तपासण्यासाठी चाचणी उपयुक्त आहे. + +दृष्टिकोन वेगवेगळे असले तरी, बहुतेक चाचणी पद्धतींना स्मार्ट कराराला हाताळण्यासाठी अपेक्षित असलेल्या डेटाच्या लहान नमुन्यासह कार्यान्वित करणे आवश्यक आहे. जर करार नमुना डेटासाठी योग्य परिणाम देत असेल, तर तो योग्यरित्या कार्य करत आहे असे गृहीत धरले जाते. बहुतेक चाचणी साधने कराराची अंमलबजावणी अपेक्षित परिणामांशी जुळते की नाही हे तपासण्यासाठी [चाचणी प्रकरणे](https://en.m.wikipedia.org/wiki/Test_case) लिहिण्यासाठी आणि कार्यान्वित करण्यासाठी संसाधने प्रदान करतात. + +### स्मार्ट करारांची चाचणी करणे महत्त्वाचे का आहे? {#importance-of-testing-smart-contracts} + +स्मार्ट करार अनेकदा उच्च-मूल्याच्या आर्थिक मालमत्ता व्यवस्थापित करत असल्याने, किरकोळ प्रोग्रामिंग त्रुटी वापरकर्त्यांसाठी [मोठ्या नुकसानीस](https://rekt.news/leaderboard/) कारणीभूत ठरू शकतात. तथापि, कठोर चाचणीमुळे तुम्हाला स्मार्ट कराराच्या कोडमधील दोष आणि समस्या लवकर शोधण्यात आणि Mainnet वर लॉन्च करण्यापूर्वी त्या दुरुस्त करण्यात मदत होऊ शकते. + +बग आढळल्यास करार अपग्रेड करणे शक्य असले तरी, अपग्रेड गुंतागुंतीचे असतात आणि अयोग्यरित्या हाताळल्यास [त्रुटी येऊ शकतात](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/). कराराचे अपग्रेडेशन अपरिवर्तनीयतेच्या तत्त्वाला नाकारते आणि वापरकर्त्यांवर अतिरिक्त विश्वासाची गृहितके लादते. याउलट, तुमच्या कराराच्या चाचणीसाठी एक व्यापक योजना स्मार्ट करार सुरक्षा धोके कमी करते आणि उपयोजनानंतर जटिल लॉजिक अपग्रेड करण्याची गरज कमी करते. + +## स्मार्ट करारांची चाचणी करण्याच्या पद्धती {#methods-for-testing-smart-contracts} + +Ethereum स्मार्ट करारांच्या चाचणीच्या पद्धती दोन विस्तृत श्रेणींमध्ये येतात: **स्वयंचलित चाचणी** आणि **मॅन्युअल चाचणी**. स्वयंचलित चाचणी आणि मॅन्युअल चाचणी अद्वितीय फायदे आणि तोटे देतात, परंतु तुम्ही तुमच्या करारांचे विश्लेषण करण्यासाठी एक मजबूत योजना तयार करण्यासाठी दोन्ही एकत्र करू शकता. + +### स्वयंचलित चाचणी {#automated-testing} + +स्वयंचलित चाचणी अशा साधनांचा वापर करते जी अंमलबजावणीमधील त्रुटींसाठी स्मार्ट कराराचा कोड आपोआप तपासतात. स्वयंचलित चाचणीचा फायदा करार कार्यक्षमतेच्या मूल्यांकनासाठी [स्क्रिप्ट्स](https://www.techtarget.com/whatis/definition/script?amp=1) वापरण्यापासून मिळतो. स्क्रिप्टेड चाचण्या कमीत कमी मानवी हस्तक्षेपासह वारंवार चालवण्यासाठी शेड्यूल केल्या जाऊ शकतात, ज्यामुळे स्वयंचलित चाचणी मॅन्युअल चाचणी पद्धतींपेक्षा अधिक कार्यक्षम बनते. + +जेव्हा चाचण्या पुनरावृत्ती होणाऱ्या आणि वेळखाऊ असतात; मॅन्युअली करणे कठीण असते; मानवी त्रुटीस बळी पडण्याची शक्यता असते; किंवा गंभीर करार कार्यांचे मूल्यांकन करणे समाविष्ट असते तेव्हा स्वयंचलित चाचणी विशेषतः उपयुक्त आहे. परंतु स्वयंचलित चाचणी साधनांमध्ये काही तोटे असू शकतात—ते काही बग्स चुकवू शकतात आणि अनेक [चुकीचे सकारात्मक](https://www.contrastsecurity.com/glossary/false-positive) परिणाम देऊ शकतात. म्हणून, स्मार्ट करारांसाठी स्वयंचलित चाचणीला मॅन्युअल चाचणीसोबत जोडणे आदर्श आहे. + +### मॅन्युअल चाचणी {#manual-testing} + +मॅन्युअल चाचणी मानवी-सहाय्यित असते आणि त्यात स्मार्ट कराराच्या अचूकतेचे विश्लेषण करताना तुमच्या चाचणी संचातील प्रत्येक चाचणी प्रकरण एकामागून एक कार्यान्वित करणे समाविष्ट असते. हे स्वयंचलित चाचणीच्या विपरीत आहे जिथे तुम्ही एकाच वेळी करारावर अनेक वेगळ्या चाचण्या चालवू शकता आणि सर्व अयशस्वी आणि यशस्वी चाचण्या दर्शवणारा अहवाल मिळवू शकता. + +मॅन्युअल चाचणी एकाच व्यक्तीद्वारे केली जाऊ शकते जी विविध चाचणी परिस्थितींचा समावेश असलेल्या लिखित चाचणी योजनेचे पालन करते. तुम्ही मॅन्युअल चाचणीचा भाग म्हणून एका विशिष्ट कालावधीत अनेक व्यक्ती किंवा गटांना स्मार्ट कराराशी संवाद साधायला लावू शकता. चाचणी करणारे कराराच्या वास्तविक वर्तनाची अपेक्षित वर्तनाशी तुलना करतील, कोणत्याही फरकाला बग म्हणून चिन्हांकित करतील. + +प्रभावी मॅन्युअल चाचणीसाठी भरीव संसाधने (कौशल्य, वेळ, पैसा आणि प्रयत्न) आवश्यक असतात, आणि मानवी त्रुटीमुळे—चाचण्या कार्यान्वित करताना काही त्रुटी चुकण्याची शक्यता असते. परंतु मॅन्युअल चाचणी देखील फायदेशीर असू शकते—उदाहरणार्थ, एक मानवी चाचणीकर्ता (उदा., एक ऑडिटर) स्वयंचलित चाचणी साधनाने चुकवलेल्या एज केसेस शोधण्यासाठी अंतर्ज्ञान वापरू शकतो. + +## स्मार्ट करारांसाठी स्वयंचलित चाचणी {#automated-testing-for-smart-contracts} + +### युनिट चाचणी {#unit-testing-for-smart-contracts} + +युनिट चाचणी करार कार्यांचे स्वतंत्रपणे मूल्यांकन करते आणि प्रत्येक घटक योग्यरित्या कार्य करतो की नाही हे तपासते. चांगल्या युनिट चाचण्या सोप्या, चालवण्यास जलद असाव्यात आणि चाचण्या अयशस्वी झाल्यास काय चुकले याची स्पष्ट कल्पना द्यावी. + +कार्य अपेक्षित मूल्ये परत करतात की नाही आणि कार्य अंमलबजावणीनंतर करार स्टोरेज योग्यरित्या अपडेट केले आहे की नाही हे तपासण्यासाठी युनिट चाचण्या उपयुक्त आहेत. शिवाय, कराराच्या कोडबेसमध्ये बदल केल्यानंतर युनिट चाचण्या चालवल्याने नवीन लॉजिक जोडल्याने त्रुटी येत नाहीत याची खात्री होते. प्रभावी युनिट चाचण्या चालवण्यासाठी खाली काही मार्गदर्शक तत्त्वे आहेत: + +#### स्मार्ट करारांच्या युनिट चाचणीसाठी मार्गदर्शक तत्त्वे {#unit-testing-guidelines} + +##### १. तुमच्या करारांचे व्यावसायिक लॉजिक आणि कार्यप्रवाह समजून घ्या + +युनिट चाचण्या लिहिण्यापूर्वी, स्मार्ट करार कोणती कार्यक्षमता देतो आणि वापरकर्ते त्या कार्यांमध्ये कसे प्रवेश करतील आणि त्यांचा वापर कसा करतील हे जाणून घेणे उपयुक्त ठरते. हे विशेषतः [हॅपी पाथ चाचण्या](https://en.m.wikipedia.org/wiki/Happy_path) चालवण्यासाठी उपयुक्त आहे जे करारातील कार्ये वैध वापरकर्ता इनपुटसाठी योग्य आउटपुट परत करतात की नाही हे ठरवतात. आम्ही ही संकल्पना [लिलाव कराराच्या](https://docs.soliditylang.org/en/v0.8.17/solidity-by-example.html?highlight=Auction%20contract#simple-open-auction) या (संक्षिप्त) उदाहरणाचा वापर करून स्पष्ट करू + +```solidity +constructor( + uint biddingTime, + address payable beneficiaryAddress + ) { + beneficiary = beneficiaryAddress; + auctionEndTime = block.timestamp + biddingTime; + } + +function bid() external payable { + + if (block.timestamp > auctionEndTime) + revert AuctionAlreadyEnded(); + + if (msg.value <= highestBid) + revert BidNotHighEnough(highestBid); + + if (highestBid != 0) { + pendingReturns[highestBidder] += highestBid; + } + highestBidder = msg.sender; + highestBid = msg.value; + emit HighestBidIncreased(msg.sender, msg.value); + } + + function withdraw() external returns (bool) { + uint amount = pendingReturns[msg.sender]; + if (amount > 0) { + pendingReturns[msg.sender] = 0; + + if (!payable(msg.sender).send(amount)) { + pendingReturns[msg.sender] = amount; + return false; + } + } + return true; + } + +function auctionEnd() external { + if (block.timestamp < auctionEndTime) + revert AuctionNotYetEnded(); + if (ended) + revert AuctionEndAlreadyCalled(); + + ended = true; + emit AuctionEnded(highestBidder, highestBid); + + beneficiary.transfer(highestBid); + } +} +``` + +हा एक साधा लिलाव करार आहे जो बोलीच्या कालावधीत बोली स्वीकारण्यासाठी डिझाइन केलेला आहे. जर `highestBid` वाढली, तर मागील सर्वोच्च बोली लावणाऱ्याला त्याचे पैसे परत मिळतात; एकदा बोलीचा कालावधी संपला की, `beneficiary` त्याचे पैसे मिळवण्यासाठी कराराला कॉल करतो. + +अशा करारासाठी युनिट चाचण्या कराराशी संवाद साधताना वापरकर्ता कॉल करू शकणाऱ्या विविध कार्यांना कव्हर करतील. एक उदाहरण म्हणजे एक युनिट चाचणी जी तपासते की लिलाव चालू असताना वापरकर्ता बोली लावू शकतो की नाही (म्हणजे, `bid()` ला केलेले कॉल यशस्वी होतात) किंवा एक जी तपासते की वापरकर्ता सध्याच्या `highestBid` पेक्षा जास्त बोली लावू शकतो की नाही. + +कराराचा कार्यान्वयन कार्यप्रवाह समजून घेतल्याने अंमलबजावणी आवश्यकता पूर्ण करते की नाही हे तपासणाऱ्या युनिट चाचण्या लिहिण्यास देखील मदत होते. उदाहरणार्थ, लिलाव करार निर्दिष्ट करतो की लिलाव संपल्यावर वापरकर्ते बोली लावू शकत नाहीत (म्हणजे, जेव्हा `auctionEndTime` हे `block.timestamp` पेक्षा कमी असते). म्हणून, एक डेव्हलपर एक युनिट चाचणी चालवू शकतो जी लिलाव संपल्यावर `bid()` फंक्शनला केलेले कॉल यशस्वी होतात की अयशस्वी होतात हे तपासते (म्हणजे, जेव्हा `auctionEndTime` > `block.timestamp` असते). + +##### २. करार अंमलबजावणीशी संबंधित सर्व गृहितकांचे मूल्यांकन करा + +कराराच्या अंमलबजावणीबद्दलच्या कोणत्याही गृहितकांचे दस्तऐवजीकरण करणे आणि त्या गृहितकांची वैधता सत्यापित करण्यासाठी युनिट चाचण्या लिहिणे महत्त्वाचे आहे. अनपेक्षित अंमलबजावणीपासून संरक्षण देण्याव्यतिरिक्त, चाचणी दावे तुम्हाला अशा ऑपरेशन्सबद्दल विचार करण्यास भाग पाडतात जे स्मार्ट कराराचे सुरक्षा मॉडेल तोडू शकतात. एक उपयुक्त टीप म्हणजे "हॅपी युझर टेस्ट"च्या पलीकडे जाऊन चुकीच्या इनपुटसाठी फंक्शन अयशस्वी होते की नाही हे तपासणाऱ्या नकारात्मक चाचण्या लिहिणे. + +अनेक युनिट टेस्टिंग फ्रेमवर्क तुम्हाला दावे तयार करण्याची परवानगी देतात—साधी विधाने जी सांगतात की करार काय करू शकतो आणि काय करू शकत नाही—आणि अंमलबजावणी अंतर्गत ते दावे टिकतात की नाही हे पाहण्यासाठी चाचण्या चालवतात. पूर्वी वर्णन केलेल्या लिलाव करारावर काम करणारा एक डेव्हलपर नकारात्मक चाचण्या चालवण्यापूर्वी त्याच्या वर्तनाबद्दल खालील दावे करू शकतो: + +- लिलाव संपल्यावर किंवा सुरू झाला नसताना वापरकर्ते बोली लावू शकत नाहीत. + +- स्वीकार्य मर्यादेपेक्षा कमी बोली असल्यास लिलाव करार परत येतो. + +- बोली जिंकण्यात अयशस्वी झालेल्या वापरकर्त्यांना त्यांचे फंड परत मिळतात + +**टीप**: गृहितकांची चाचणी करण्याचा आणखी एक मार्ग म्हणजे करारात [फंक्शन मॉडिफायर्स](https://docs.soliditylang.org/en/v0.8.16/contracts.html#function-modifiers) ट्रिगर करणाऱ्या चाचण्या लिहिणे, विशेषतः `require`, `assert`, आणि `if…else` विधाने. + +##### ३. कोड कव्हरेज मोजा + +[कोड कव्हरेज](https://en.m.wikipedia.org/wiki/Code_coverage) हे एक चाचणी मेट्रिक आहे जे चाचण्यांदरम्यान तुमच्या कोडमध्ये कार्यान्वित केलेल्या शाखा, ओळी आणि विधानांची संख्या ट्रॅक करते. न तपासलेल्या असुरक्षिततेचा धोका कमी करण्यासाठी चाचण्यांमध्ये चांगले कोड कव्हरेज असावे. पुरेशा कव्हरेजशिवाय, तुम्ही चुकीच्या पद्धतीने गृहीत धरू शकता की तुमचा करार सुरक्षित आहे कारण सर्व चाचण्या पास होतात, तर न तपासलेल्या कोड मार्गांमध्ये अजूनही असुरक्षितता अस्तित्वात असते. तथापि, उच्च कोड कव्हरेज नोंदवल्याने स्मार्ट करारातील सर्व विधाने/कार्य अचूकतेसाठी पुरेशा प्रमाणात तपासली गेली असल्याची खात्री मिळते. + +##### ४. सुविकसित चाचणी फ्रेमवर्क वापरा + +तुमच्या स्मार्ट करारांसाठी युनिट चाचण्या चालवण्यासाठी वापरल्या जाणार्‍या साधनांची गुणवत्ता महत्त्वपूर्ण आहे. एक आदर्श चाचणी फ्रेमवर्क म्हणजे जे नियमितपणे सांभाळले जाते; उपयुक्त वैशिष्ट्ये (उदा., लॉगिंग आणि रिपोर्टिंग क्षमता) प्रदान करते; आणि इतर डेव्हलपर्सनी मोठ्या प्रमाणावर वापरलेले आणि तपासलेले असावे. + +Solidity स्मार्ट करारांसाठी युनिट टेस्टिंग फ्रेमवर्क वेगवेगळ्या भाषांमध्ये (मुख्यतः JavaScript, Python आणि Rust) येतात. वेगवेगळ्या चाचणी फ्रेमवर्कसह युनिट चाचण्या चालवणे कसे सुरू करावे याबद्दलच्या माहितीसाठी खालील काही मार्गदर्शक तत्त्वे पहा: + +- **[Brownie सह युनिट चाचण्या चालवणे](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** +- **[Foundry सह युनिट चाचण्या चालवणे](https://book.getfoundry.sh/forge/writing-tests)** +- **[Waffle सह युनिट चाचण्या चालवणे](https://ethereum-waffle.readthedocs.io/en/latest/getting-started.html#writing-tests)** +- **[Remix सह युनिट चाचण्या चालवणे](https://remix-ide.readthedocs.io/en/latest/unittesting.html#write-tests)** +- **[Ape सह युनिट चाचण्या चालवणे](https://docs.apeworx.io/ape/stable/userguides/testing.html)** +- **[Hardhat सह युनिट चाचण्या चालवणे](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** +- **[Wake सह युनिट चाचण्या चालवणे](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** + +### एकत्रीकरण चाचणी {#integration-testing-for-smart-contracts} + +युनिट चाचणी करार कार्यांना वेगळे करून डीबग करते, तर एकत्रीकरण चाचण्या स्मार्ट कराराच्या घटकांचे संपूर्णपणे मूल्यांकन करतात. एकत्रीकरण चाचणी क्रॉस-करार कॉल्स किंवा एकाच स्मार्ट करारातील वेगवेगळ्या कार्यांमधील परस्परसंवादातून उद्भवणाऱ्या समस्या शोधू शकते. उदाहरणार्थ, एकत्रीकरण चाचण्या [इनहेरिटन्स](https://docs.soliditylang.org/en/v0.8.12/contracts.html#inheritance) आणि अवलंबित्व इंजेक्शन यांसारख्या गोष्टी योग्यरित्या कार्य करतात की नाही हे तपासण्यात मदत करू शकतात. + +जर तुमचा करार मॉड्युलर आर्किटेक्चरचा अवलंब करत असेल किंवा अंमलबजावणी दरम्यान इतर ऑनचेन करारांशी संवाद साधत असेल तर एकत्रीकरण चाचणी उपयुक्त आहे. एकत्रीकरण चाचण्या चालवण्याचा एक मार्ग म्हणजे एका विशिष्ट उंचीवर [ब्लॉकचेनला फोर्क करणे](/glossary/#fork) ([Forge](https://book.getfoundry.sh/forge/fork-testing) किंवा [Hardhat](https://hardhat.org/hardhat-network/docs/guides/forking-other-networks) सारख्या साधनांचा वापर करून) आणि तुमच्या करार आणि उपयोजित करारांमधील परस्परसंवादांचे अनुकरण करणे. + +फोर्क केलेला ब्लॉकचेन Mainnet प्रमाणेच वागेल आणि त्यात संबंधित स्थिती आणि शिल्लक असलेली खाती असतील. परंतु ते केवळ सँडबॉक्स्ड स्थानिक विकास वातावरण म्हणून कार्य करते, याचा अर्थ तुम्हाला व्यवहारांसाठी वास्तविक ETH ची गरज भासणार नाही, उदाहरणार्थ, किंवा तुमचे बदल वास्तविक Ethereum प्रोटोकॉलवर परिणाम करणार नाहीत. + +### गुणधर्म-आधारित चाचणी {#property-based-testing-for-smart-contracts} + +गुणधर्म-आधारित चाचणी ही स्मार्ट करार काही परिभाषित गुणधर्म पूर्ण करतो की नाही हे तपासण्याची प्रक्रिया आहे. गुणधर्म कराराच्या वर्तनाबद्दल तथ्ये सांगतात जे वेगवेगळ्या परिस्थितीत खरे राहण्याची अपेक्षा असते—स्मार्ट कराराच्या गुणधर्माचे एक उदाहरण असू शकते "करारातील अंकगणितीय ऑपरेशन्स कधीही ओव्हरफ्लो किंवा अंडरफ्लो होत नाहीत." + +**स्थिर विश्लेषण** आणि **डायनॅमिक विश्लेषण** हे गुणधर्म-आधारित चाचणी कार्यान्वित करण्यासाठी दोन सामान्य तंत्रे आहेत आणि दोन्ही सत्यापित करू शकतात की प्रोग्रामचा कोड (या प्रकरणात स्मार्ट करार) काही पूर्वनिर्धारित गुणधर्म पूर्ण करतो. काही गुणधर्म-आधारित चाचणी साधने अपेक्षित करार गुणधर्मांबद्दल पूर्वनिर्धारित नियमांसह येतात आणि त्या नियमांनुसार कोड तपासतात, तर इतर तुम्हाला स्मार्ट करारासाठी सानुकूल गुणधर्म तयार करण्याची परवानगी देतात. + +#### स्थिर विश्लेषण {#static-analysis} + +एक स्थिर विश्लेषक स्मार्ट कराराचा स्त्रोत कोड इनपुट म्हणून घेतो आणि करार गुणधर्म पूर्ण करतो की नाही हे घोषित करणारे परिणाम आउटपुट करतो. डायनॅमिक विश्लेषणाच्या विपरीत, स्थिर विश्लेषणात अचूकतेसाठी त्याचे विश्लेषण करण्यासाठी करार कार्यान्वित करणे समाविष्ट नाही. स्थिर विश्लेषण त्याऐवजी अंमलबजावणी दरम्यान स्मार्ट करार घेऊ शकणाऱ्या सर्व संभाव्य मार्गांबद्दल तर्क करतो (म्हणजे, स्त्रोत कोडच्या संरचनेचे परीक्षण करून हे ठरवण्यासाठी की रनटाइममध्ये कराराच्या ऑपरेशनसाठी त्याचा काय अर्थ होईल). + +[लिंटिंग](https://www.perforce.com/blog/qac/what-is-linting) आणि [स्टॅटिक टेस्टिंग](https://www.techtarget.com/whatis/definition/static-analysis-static-code-analysis) हे करारांवर स्थिर विश्लेषण चालवण्यासाठी सामान्य पद्धती आहेत. दोन्हींना कंपाइलरद्वारे आउटपुट केलेल्या [ॲबस्ट्रॅक्ट सिंटॅक्स ट्रीज](https://en.m.wikipedia.org/wiki/Abstract_syntax_tree) आणि [कंट्रोल फ्लो ग्राफ्स](https://www.geeksforgeeks.org/software-engineering-control-flow-graph-cfg/amp/) सारख्या कराराच्या अंमलबजावणीच्या निम्न-स्तरीय प्रतिनिधित्वांचे विश्लेषण करणे आवश्यक आहे. + +बहुतेक प्रकरणांमध्ये, स्थिर विश्लेषण असुरक्षित रचनांचा वापर, वाक्यरचना त्रुटी किंवा कराराच्या कोडमधील कोडिंग मानकांचे उल्लंघन यासारख्या सुरक्षा समस्या शोधण्यासाठी उपयुक्त आहे. तथापि, स्थिर विश्लेषक सामान्यतः खोल असुरक्षितता शोधण्यात अकार्यक्षम म्हणून ओळखले जातात आणि जास्त प्रमाणात चुकीचे सकारात्मक परिणाम देऊ शकतात. + +#### डायनॅमिक विश्लेषण {#dynamic-analysis} + +डायनॅमिक विश्लेषण स्मार्ट कराराच्या फंक्शन्सना प्रतिकात्मक इनपुट (उदा., [प्रतिकात्मक अंमलबजावणीमध्ये](https://en.m.wikipedia.org/wiki/Symbolic_execution)) किंवा ठोस इनपुट (उदा., [फझिंगमध्ये](https://owasp.org/www-community/Fuzzing)) तयार करते हे पाहण्यासाठी की कोणताही अंमलबजावणी ट्रेस विशिष्ट गुणधर्मांचे उल्लंघन करतो का. गुणधर्म-आधारित चाचणीचा हा प्रकार युनिट चाचण्यांपेक्षा वेगळा आहे कारण चाचणी प्रकरणे एकाधिक परिस्थिती कव्हर करतात आणि एक प्रोग्राम चाचणी प्रकरणे तयार करण्याचे काम हाताळतो. + +[फझिंग](https://www.halborn.com/blog/post/what-is-fuzz-testing-fuzzing) हे स्मार्ट करारांमधील अनियंत्रित गुणधर्म सत्यापित करण्यासाठी डायनॅमिक विश्लेषण तंत्राचे एक उदाहरण आहे. एक फझर लक्ष्य करारातील फंक्शन्सना परिभाषित इनपुट मूल्याच्या यादृच्छिक किंवा विकृत भिन्नतांसह आमंत्रित करतो. जर स्मार्ट करार त्रुटीच्या स्थितीत प्रवेश करतो (उदा., जिथे एक दावा अयशस्वी होतो), तर समस्या ध्वजांकित केली जाते आणि असुरक्षित मार्गाकडे अंमलबजावणी चालवणारे इनपुट अहवालात तयार केले जातात. + +स्मार्ट कराराच्या इनपुट प्रमाणीकरण यंत्रणेचे मूल्यांकन करण्यासाठी फझिंग उपयुक्त आहे कारण अनपेक्षित इनपुटच्या अयोग्य हाताळणीमुळे अनपेक्षित अंमलबजावणी होऊ शकते आणि धोकादायक परिणाम होऊ शकतात. गुणधर्म-आधारित चाचणीचा हा प्रकार अनेक कारणांसाठी आदर्श असू शकतो: + +1. **अनेक परिस्थिती कव्हर करण्यासाठी चाचणी प्रकरणे लिहिणे कठीण आहे.** गुणधर्म चाचणीसाठी फक्त तुम्हाला वर्तन आणि वर्तनाची चाचणी घेण्यासाठी डेटाची श्रेणी परिभाषित करणे आवश्यक आहे—प्रोग्राम परिभाषित गुणधर्मावर आधारित स्वयंचलितपणे चाचणी प्रकरणे तयार करतो. + +2. **तुमचा चाचणी संच प्रोग्राममधील सर्व संभाव्य मार्ग पुरेशा प्रमाणात कव्हर करू शकत नाही.** 100% कव्हरेजसह देखील, एज केसेस चुकण्याची शक्यता असते. + +3. **युनिट चाचण्या सिद्ध करतात की करार नमुना डेटासाठी योग्यरित्या कार्यान्वित होतो, परंतु नमुन्याबाहेरील इनपुटसाठी करार योग्यरित्या कार्यान्वित होतो की नाही हे अज्ञात राहते.** गुणधर्म चाचण्या दावा अयशस्वी होण्यास कारणीभूत ठरणारे अंमलबजावणी ट्रेस शोधण्यासाठी दिलेल्या इनपुट मूल्याच्या एकाधिक भिन्नतांसह लक्ष्य करार कार्यान्वित करतात. म्हणून, एक गुणधर्म चाचणी अधिक हमी देते की करार इनपुट डेटाच्या विस्तृत वर्गासाठी योग्यरित्या कार्यान्वित होतो. + +### स्मार्ट करारांसाठी गुणधर्म-आधारित चाचणी चालवण्यासाठी मार्गदर्शक तत्त्वे {#running-property-based-tests} + +गुणधर्म-आधारित चाचणी चालवणे सामान्यतः स्मार्ट करारात सत्यापित करू इच्छित असलेल्या गुणधर्माची (उदा., [पूर्णांक ओव्हरफ्लोचा](https://github.com/ConsenSys/mythril/wiki/Integer-Overflow) अभाव) किंवा गुणधर्मांच्या संग्रहाची व्याख्या करून सुरू होते. गुणधर्म चाचण्या लिहिताना तुम्हाला मूल्यांची एक श्रेणी देखील परिभाषित करण्याची आवश्यकता असू शकते ज्यामध्ये प्रोग्राम व्यवहार इनपुटसाठी डेटा तयार करू शकतो. + +एकदा योग्यरित्या कॉन्फिगर केल्यावर, गुणधर्म चाचणी साधन तुमच्या स्मार्ट कराराच्या फंक्शन्सना यादृच्छिकपणे तयार केलेल्या इनपुटसह कार्यान्वित करेल. जर कोणतेही दावा उल्लंघन असेल, तर तुम्हाला मूल्यांकनाखालील गुणधर्माचे उल्लंघन करणाऱ्या ठोस इनपुट डेटासह एक अहवाल मिळायला हवा. वेगवेगळ्या साधनांसह गुणधर्म-आधारित चाचणी चालवणे सुरू करण्यासाठी खालील काही मार्गदर्शक तत्त्वे पहा: + +- **[Slither सह स्मार्ट करारांचे स्थिर विश्लेषण](https://github.com/crytic/slither)** +- **[Wake सह स्मार्ट करारांचे स्थिर विश्लेषण](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** +- **[Brownie सह गुणधर्म-आधारित चाचणी](https://eth-brownie.readthedocs.io/en/stable/tests-hypothesis-property.html)** +- **[Foundry सह करारांचे फझिंग](https://book.getfoundry.sh/forge/fuzz-testing)** +- **[Echidna सह करारांचे फझिंग](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna#echidna-tutorial)** +- **[Wake सह करारांचे फझिंग](https://ackeeblockchain.com/wake/docs/latest/testing-framework/fuzzing/)** +- **[Manticore सह स्मार्ट करारांची प्रतिकात्मक अंमलबजावणी](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore#manticore-tutorial)** +- **[Mythril सह स्मार्ट करारांची प्रतिकात्मक अंमलबजावणी](https://mythril-classic.readthedocs.io/en/master/tutorial.html)** + +## स्मार्ट करारांसाठी मॅन्युअल चाचणी {#manual-testing-for-smart-contracts} + +स्मार्ट करारांची मॅन्युअल चाचणी अनेकदा स्वयंचलित चाचण्या चालवल्यानंतर विकास चक्रात नंतर येते. चाचणीचा हा प्रकार स्मार्ट कराराचे एक पूर्णपणे एकात्मिक उत्पादन म्हणून मूल्यांकन करतो हे पाहण्यासाठी की ते तांत्रिक आवश्यकतांमध्ये निर्दिष्ट केल्याप्रमाणे कार्य करते की नाही. + +### स्थानिक ब्लॉकचेनवर करारांची चाचणी करणे {#testing-on-local-blockchain} + +स्थानिक विकास वातावरणात केलेली स्वयंचलित चाचणी उपयुक्त डीबगिंग माहिती प्रदान करू शकते, तरीही तुमचा स्मार्ट करार उत्पादन वातावरणात कसा वागतो हे तुम्हाला जाणून घ्यायचे असेल. तथापि, मुख्य Ethereum चेनवर उपयोजन केल्यास गॅस शुल्क लागते—तुमच्या स्मार्ट करारात अजूनही बग असल्यास तुम्ही किंवा तुमचे वापरकर्ते वास्तविक पैसे गमावू शकतात हे सांगायला नको. + +तुमच्या कराराची स्थानिक ब्लॉकचेनवर ([विकास नेटवर्क](/developers/docs/development-networks/) म्हणूनही ओळखले जाते) चाचणी करणे हे Mainnet वर चाचणी करण्यासाठी एक शिफारस केलेला पर्याय आहे. स्थानिक ब्लॉकचेन हे तुमच्या संगणकावर स्थानिक पातळीवर चालणाऱ्या Ethereum ब्लॉकचेनची एक प्रत आहे जी Ethereum च्या अंमलबजावणी स्तराच्या वर्तनाचे अनुकरण करते. त्यामुळे, तुम्ही महत्त्वपूर्ण ओव्हरहेड न होता कराराशी संवाद साधण्यासाठी व्यवहार प्रोग्राम करू शकता. + +स्थानिक ब्लॉकचेनवर करार चालवणे मॅन्युअल एकत्रीकरण चाचणीचा एक प्रकार म्हणून उपयुक्त ठरू शकते. [स्मार्ट करार अत्यंत संयोजनक्षम असतात](/developers/docs/smart-contracts/composability/), जे तुम्हाला विद्यमान प्रोटोकॉलसह समाकलित करण्याची परवानगी देतात—परंतु तुम्हाला अजूनही हे सुनिश्चित करणे आवश्यक आहे की अशा जटिल ऑनचेन परस्परसंवादातून योग्य परिणाम मिळतात. + +[विकास नेटवर्कबद्दल अधिक.](/developers/docs/development-networks/) + +### टेस्टनेटवर करारांची चाचणी करणे {#testing-contracts-on-testnets} + +एक चाचणी नेटवर्क किंवा टेस्टनेट Ethereum Mainnet प्रमाणेच कार्य करते, फक्त ते वास्तविक-जगाचे मूल्य नसलेले इथर (ETH) वापरते. तुमचा करार [टेस्टनेटवर](/developers/docs/networks/#ethereum-testnets) उपयोजित करणे म्हणजे कोणीही निधी धोक्यात न घालवता त्याच्याशी संवाद साधू शकतो (उदा., dApp च्या फ्रंटएंडद्वारे). + +मॅन्युअल चाचणीचा हा प्रकार वापरकर्त्याच्या दृष्टिकोनातून तुमच्या ॲप्लिकेशनच्या एंड-टू-एंड प्रवाहाचे मूल्यांकन करण्यासाठी उपयुक्त आहे. येथे, बीटा टेस्टर देखील चाचणी चालवू शकतात आणि कराराच्या व्यावसायिक लॉजिक आणि एकूण कार्यक्षमतेमधील कोणत्याही समस्यांबद्दल अहवाल देऊ शकतात. + +स्थानिक ब्लॉकचेनवर चाचणी केल्यानंतर टेस्टनेटवर उपयोजन करणे आदर्श आहे कारण पहिले Ethereum व्हर्च्युअल मशीनच्या वर्तनाच्या जवळ आहे. म्हणून, अनेक Ethereum-नेटिव्ह प्रकल्पांसाठी वास्तविक-जगातील परिस्थितीनुसार स्मार्ट कराराच्या ऑपरेशनचे मूल्यांकन करण्यासाठी टेस्टनेटवर dApps उपयोजित करणे सामान्य आहे. + +[Ethereum टेस्टनेटबद्दल अधिक.](/developers/docs/development-networks/#public-beacon-testchains) + +## चाचणी विरुद्ध औपचारिक पडताळणी {#testing-vs-formal-verification} + +चाचणी काही डेटा इनपुटसाठी करार अपेक्षित परिणाम परत करतो याची पुष्टी करण्यास मदत करत असली तरी, चाचण्यांदरम्यान न वापरलेल्या इनपुटसाठी तेच निर्णायकपणे सिद्ध करू शकत नाही. म्हणून, स्मार्ट कराराची चाचणी "कार्यात्मक अचूकतेची" हमी देऊ शकत नाही (म्हणजे, ते दाखवू शकत नाही की प्रोग्राम इनपुट मूल्यांच्या _सर्व_ संचांसाठी आवश्यकतेनुसार वागतो). + +औपचारिक पडताळणी ही प्रोग्रामचे औपचारिक मॉडेल औपचारिक तपशीलांशी जुळते की नाही हे तपासून सॉफ्टवेअरच्या अचूकतेचे मूल्यांकन करण्याचा एक दृष्टिकोन आहे. एक औपचारिक मॉडेल हे प्रोग्रामचे एक अमूर्त गणितीय प्रतिनिधित्व आहे, तर एक औपचारिक तपशील प्रोग्रामचे गुणधर्म (म्हणजे, प्रोग्रामच्या अंमलबजावणीबद्दल तार्किक दावे) परिभाषित करते. + +कारण गुणधर्म गणितीय संज्ञांमध्ये लिहिलेले आहेत, त्यामुळे तर्काच्या तार्किक नियमांचा वापर करून प्रणालीचे औपचारिक (गणितीय) मॉडेल तपशील पूर्ण करते हे सत्यापित करणे शक्य होते. म्हणून, औपचारिक पडताळणी साधने प्रणालीच्या अचूकतेचा 'गणितीय पुरावा' तयार करतात असे म्हटले जाते. + +चाचणीच्या विपरीत, औपचारिक पडताळणीचा वापर स्मार्ट कराराची अंमलबजावणी _सर्व_ अंमलबजावणीसाठी औपचारिक तपशील पूर्ण करते हे सत्यापित करण्यासाठी केला जाऊ शकतो (म्हणजे, त्यात कोणतेही बग नाहीत) नमुना डेटासह कार्यान्वित करण्याची आवश्यकता न ठेवता. हे केवळ डझनभर युनिट चाचण्या चालवण्यासाठी लागणारा वेळ कमी करत नाही, तर छुपी असुरक्षितता पकडण्यात देखील अधिक प्रभावी आहे. त्यानुसार, औपचारिक पडताळणी तंत्र त्यांच्या अंमलबजावणीच्या अडचणी आणि उपयुक्ततेनुसार एका स्पेक्ट्रमवर अवलंबून असतात. + +[स्मार्ट करारांसाठी औपचारिक पडताळणीबद्दल अधिक.](/developers/docs/smart-contracts/formal-verification) + +## चाचणी विरुद्ध ऑडिट आणि बग बाउंटीज {#testing-vs-audits-bug-bounties} + +नमूद केल्याप्रमाणे, कठोर चाचणी क्वचितच करारात बग्सच्या अनुपस्थितीची हमी देऊ शकते; औपचारिक पडताळणी दृष्टिकोन अचूकतेची अधिक मजबूत हमी देऊ शकतात परंतु सध्या वापरण्यास कठीण आहेत आणि त्यावर मोठा खर्च येतो. + +तरीही, तुम्ही स्वतंत्र कोड पुनरावलोकन मिळवून करार असुरक्षितता पकडण्याची शक्यता आणखी वाढवू शकता. [स्मार्ट करार ऑडिट](https://www.immunebytes.com/blog/what-is-a-smart-contract-audit/) आणि [बग बाउंटीज](https://medium.com/immunefi/a-defi-security-standard-the-scaling-bug-bounty-9b83dfdc1ba7) हे तुमच्या करारांचे विश्लेषण करण्यासाठी इतरांना मिळवण्याचे दोन मार्ग आहेत. + +स्मार्ट करारांमध्ये सुरक्षा त्रुटी आणि खराब विकास पद्धतींची प्रकरणे शोधण्यात अनुभवी ऑडिटर्सद्वारे ऑडिट केले जाते. एका ऑडिटमध्ये सामान्यतः चाचणी (आणि शक्यतो औपचारिक पडताळणी) तसेच संपूर्ण कोडबेसचे मॅन्युअल पुनरावलोकन समाविष्ट असते. + +याउलट, बग बाउंटी प्रोग्राममध्ये सामान्यतः एखाद्या व्यक्तीला (सामान्यतः [व्हाइटहॅट हॅकर्स](https://en.wikipedia.org/wiki/White_hat_\(computer_security\)) म्हणून वर्णन केलेले) आर्थिक बक्षीस देणे समाविष्ट असते जो स्मार्ट करारात असुरक्षितता शोधतो आणि डेव्हलपर्सना ती उघड करतो. बग बाउंटी ऑडिटसारखेच आहेत कारण त्यात स्मार्ट करारांमधील दोष शोधण्यात मदत करण्यासाठी इतरांना विचारणे समाविष्ट आहे. + +मुख्य फरक असा आहे की बग बाउंटी प्रोग्राम व्यापक डेव्हलपर/हॅकर समुदायासाठी खुले आहेत आणि अद्वितीय कौशल्ये आणि अनुभव असलेल्या नैतिक हॅकर्स आणि स्वतंत्र सुरक्षा व्यावसायिकांच्या विस्तृत वर्गाला आकर्षित करतात. स्मार्ट करार ऑडिटपेक्षा हा एक फायदा असू शकतो जे मुख्यत्वे मर्यादित किंवा संकुचित कौशल्य असलेल्या संघांवर अवलंबून असतात. + +## चाचणी साधने आणि लायब्ररी {#testing-tools-and-libraries} + +### युनिट चाचणी साधने {#unit-testing-tools} + +- **[solidity-coverage](https://github.com/sc-forks/solidity-coverage)** - _Solidity मध्ये लिहिलेल्या स्मार्ट करारांसाठी कोड कव्हरेज साधन._ + +- **[Waffle](https://ethereum-waffle.readthedocs.io/en/latest/)** - _प्रगत स्मार्ट करार विकास आणि चाचणीसाठी फ्रेमवर्क (ethers.js वर आधारित)_. + +- **[Remix Tests](https://github.com/ethereum/remix-project/tree/master/libs/remix-tests)** - _Solidity स्मार्ट करारांची चाचणी करण्यासाठी साधन. Remix IDE "Solidity Unit Testing" प्लगइनच्या खाली कार्य करते जे करारासाठी चाचणी प्रकरणे लिहिण्यासाठी आणि चालवण्यासाठी वापरले जाते._ + +- **[OpenZeppelin Test Helpers](https://github.com/OpenZeppelin/openzeppelin-test-helpers)** - _Ethereum स्मार्ट करार चाचणीसाठी Assertion लायब्ररी. तुमचे करार अपेक्षेप्रमाणे वागतात याची खात्री करा!_ + +- **[Brownie युनिट टेस्टिंग फ्रेमवर्क](https://eth-brownie.readthedocs.io/en/v1.0.0_a/tests.html)** - _Brownie Pytest चा वापर करते, एक वैशिष्ट्य-समृद्ध चाचणी फ्रेमवर्क जे तुम्हाला कमीतकमी कोडसह लहान चाचण्या लिहू देते, मोठ्या प्रकल्पांसाठी चांगले स्केल करते आणि अत्यंत विस्तारणीय आहे._ + +- **[Foundry Tests](https://github.com/foundry-rs/foundry/tree/master/crates/forge)** - _Foundry Forge देते, एक जलद आणि लवचिक Ethereum चाचणी फ्रेमवर्क जे साध्या युनिट चाचण्या, गॅस ऑप्टिमायझेशन तपासणी आणि करार फझिंग कार्यान्वित करण्यास सक्षम आहे._ + +- **[Hardhat Tests](https://hardhat.org/hardhat-runner/docs/guides/test-contracts)** - _ethers.js, Mocha, आणि Chai वर आधारित स्मार्ट करारांच्या चाचणीसाठी फ्रेमवर्क._ + +- **[ApeWorx](https://docs.apeworx.io/ape/stable/userguides/testing.html)** - _Ethereum व्हर्च्युअल मशीनला लक्ष्य करणाऱ्या स्मार्ट करारांसाठी Python-आधारित विकास आणि चाचणी फ्रेमवर्क._ + +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/testing-framework/overview/)** - _युनिट टेस्टिंग आणि फझिंगसाठी Python-आधारित फ्रेमवर्क ज्यामध्ये मजबूत डीबगिंग क्षमता आणि क्रॉस-चेन टेस्टिंग सपोर्ट आहे, सर्वोत्तम वापरकर्ता अनुभव आणि कार्यक्षमतेसाठी pytest आणि Anvil चा वापर करते._ + +### गुणधर्म-आधारित चाचणी साधने {#property-based-testing-tools} + +#### स्थिर विश्लेषण साधने {#static-analysis-tools} + +- **[Slither](https://github.com/crytic/slither)** - _असुरक्षितता शोधण्यासाठी, कोड आकलन वाढवण्यासाठी आणि स्मार्ट करारांसाठी सानुकूल विश्लेषण लिहिण्यासाठी Python-आधारित Solidity स्थिर विश्लेषण फ्रेमवर्क._ + +- **[Ethlint](https://ethlint.readthedocs.io/en/latest/)** - _Solidity स्मार्ट करार प्रोग्रामिंग भाषेसाठी शैली आणि सुरक्षा सर्वोत्तम पद्धती लागू करण्यासाठी लिंटर._ + +- **[Cyfrin Aderyn](https://cyfrin.io/tools/aderyn)** - _Web3 स्मार्ट करार सुरक्षा आणि विकासासाठी विशेषतः डिझाइन केलेले Rust-आधारित स्थिर विश्लेषक._ + +- **[Wake](https://ackeeblockchain.com/wake/docs/latest/static-analysis/using-detectors/)** - _असुरक्षितता आणि कोड गुणवत्ता डिटेक्टरसह Python-आधारित स्थिर विश्लेषण फ्रेमवर्क, कोडमधून उपयुक्त माहिती काढण्यासाठी प्रिंटर आणि सानुकूल सबमॉड्यूल लिहिण्यासाठी समर्थन._ + +- **[Slippy](https://github.com/fvictorio/slippy)** - _Solidity साठी एक साधा आणि शक्तिशाली लिंटर._ + +#### डायनॅमिक विश्लेषण साधने {#dynamic-analysis-tools} + +- **[Echidna](https://github.com/crytic/echidna/)** - _गुणधर्म-आधारित चाचणीद्वारे स्मार्ट करारांमधील असुरक्षितता शोधण्यासाठी जलद करार फझर._ + +- **[Diligence Fuzzing](https://consensys.net/diligence/fuzzing/)** - _स्मार्ट करार कोडमधील गुणधर्म उल्लंघन शोधण्यासाठी उपयुक्त स्वयंचलित फझिंग साधन._ + +- **[Manticore](https://manticore.readthedocs.io/en/latest/index.html)** - _EVM बाइटकोडचे विश्लेषण करण्यासाठी डायनॅमिक प्रतिकात्मक अंमलबजावणी फ्रेमवर्क._ + +- **[Mythril](https://github.com/ConsenSys/mythril-classic)** - _टेंट विश्लेषण, कॉन्कोलिक विश्लेषण आणि नियंत्रण प्रवाह तपासणी वापरून करार असुरक्षितता शोधण्यासाठी EVM बाइटकोड मूल्यांकन साधन._ + +- **[Diligence Scribble](https://consensys.net/diligence/scribble/)** - _Scribble ही एक स्पेसिफिकेशन भाषा आणि रनटाइम पडताळणी साधन आहे जे तुम्हाला स्मार्ट करारांना गुणधर्मांसह भाष्य करण्याची परवानगी देते जे तुम्हाला Diligence Fuzzing किंवा MythX सारख्या साधनांसह करारांची स्वयंचलितपणे चाचणी करण्याची परवानगी देते._ + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [विविध चाचणी उत्पादनांचे विहंगावलोकन आणि तुलना](/developers/tutorials/guide-to-smart-contract-security-tools/) \_ +- [स्मार्ट करारांची चाचणी करण्यासाठी Echidna कसे वापरावे](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) +- [स्मार्ट कॉन्ट्रॅक्ट बग शोधण्यासाठी मँटिकोरचा वापर कसा करावा](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) +- [स्मार्ट कॉन्ट्रॅक्ट बग शोधण्यासाठी स्लिथरचा वापर कसा करावा](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) +- [चाचणीसाठी Solidity करारांना कसे मॉक करावे](/developers/tutorials/how-to-mock-solidity-contracts-for-testing/) +- [Foundry वापरून Solidity मध्ये युनिट चाचण्या कशा चालवाव्यात](https://www.rareskills.io/post/foundry-testing-solidity) + +## पुढील वाचन {#further-reading} + +- [Ethereum स्मार्ट करारांच्या चाचणीसाठी सखोल मार्गदर्शक](https://iamdefinitelyahuman.medium.com/an-in-depth-guide-to-testing-ethereum-smart-contracts-2e41b2770297) +- [Ethereum स्मार्ट करारांची चाचणी कशी करावी](https://betterprogramming.pub/how-to-test-ethereum-smart-contracts-35abc8fa199d) +- [डेव्हलपर्ससाठी MolochDAO चे युनिट टेस्टिंग मार्गदर्शक](https://github.com/MolochVentures/moloch/tree/4e786db8a4aa3158287e0935dcbc7b1e43416e38/test#moloch-testing-guide) +- [रॉकस्टारप्रमाणे स्मार्ट करारांची चाचणी कशी करावी](https://forum.openzeppelin.com/t/test-smart-contracts-like-a-rockstar/1001) diff --git a/public/content/translations/mr/developers/docs/smart-contracts/upgrading/index.md b/public/content/translations/mr/developers/docs/smart-contracts/upgrading/index.md new file mode 100644 index 00000000000..792851274ae --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/upgrading/index.md @@ -0,0 +1,165 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करणे" +description: "इथेरियम स्मार्ट कॉन्ट्रॅक्टसाठी अपग्रेड पॅटर्नचा आढावा" +lang: mr +--- + +इथेरियमवरील स्मार्ट कॉन्ट्रॅक्ट हे स्व-कार्यकारी प्रोग्राम आहेत जे इथेरियम व्हर्च्युअल मशीन (EVM) मध्ये चालतात. हे प्रोग्राम डिझाइननुसार अपरिवर्तनीय आहेत, जे एकदा कॉन्ट्रॅक्ट तैनात झाल्यावर व्यवसायाच्या तर्कामध्ये कोणतेही बदल करण्यास प्रतिबंध करते. + +स्मार्ट कॉन्ट्रॅक्ट्सच्या विश्वासहीनता, विकेंद्रीकरण आणि सुरक्षिततेसाठी अपरिवर्तनीयता आवश्यक असली तरी, काही विशिष्ट प्रकरणांमध्ये तो एक तोटा असू शकतो. उदाहरणार्थ, अपरिवर्तनीय कोडमुळे डेव्हलपर्सना असुरक्षित कॉन्ट्रॅक्ट्स दुरुस्त करणे अशक्य होऊ शकते. + +तथापि, स्मार्ट कॉन्ट्रॅक्ट सुधारण्यावरील वाढलेल्या संशोधनामुळे अनेक अपग्रेड पॅटर्नची ओळख झाली आहे. हे अपग्रेड पॅटर्न डेव्हलपर्सना वेगवेगळ्या कॉन्ट्रॅक्टमध्ये व्यवसायाचे तर्क ठेवून स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्यास सक्षम करतात (अपरिवर्तनीयता जपताना). + +## पूर्वतयारी {#prerequisites} + +तुम्हाला [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/), [स्मार्ट कॉन्ट्रॅक्ट रचना](/developers/docs/smart-contracts/anatomy/), आणि [इथेरियम व्हर्च्युअल मशीन (EVM)](/developers/docs/evm/) यांची चांगली समज असायला हवी. हे मार्गदर्शक असेही गृहीत धरते की वाचकांना स्मार्ट कॉन्ट्रॅक्ट प्रोग्रामिंगची माहिती आहे. + +## स्मार्ट कॉन्ट्रॅक्ट अपग्रेड म्हणजे काय? {#what-is-a-smart-contract-upgrade} + +स्मार्ट कॉन्ट्रॅक्ट अपग्रेडमध्ये कॉन्ट्रॅक्टची स्थिती जतन करताना स्मार्ट कॉन्ट्रॅक्टच्या व्यवसायाच्या तर्कामध्ये बदल करणे समाविष्ट असते. हे स्पष्ट करणे महत्त्वाचे आहे की, विशेषतः स्मार्ट कॉन्ट्रॅक्टच्या संदर्भात, अपग्रेडिबिलिटी आणि म्युटेबिलिटी या एकच नाहीत. + +तुम्ही इथेरियम नेटवर्कवरील पत्त्यावर तैनात केलेला प्रोग्राम अजूनही बदलू शकत नाही. परंतु वापरकर्ते स्मार्ट कॉन्ट्रॅक्टशी संवाद साधताना कार्यान्वित होणारा कोड तुम्ही बदलू शकता. + +हे खालील पद्धतींद्वारे केले जाऊ शकते: + +1. स्मार्ट कॉन्ट्रॅक्टच्या अनेक आवृत्त्या तयार करणे आणि जुन्या कॉन्ट्रॅक्टमधून नवीन कॉन्ट्रॅक्ट इंस्टन्सवर स्थिती (म्हणजे डेटा) स्थलांतरित करणे. + +2. व्यवसाय तर्क आणि स्थिती साठवण्यासाठी स्वतंत्र कॉन्ट्रॅक्ट तयार करणे. + +3. अपरिवर्तनीय प्रॉक्सी कॉन्ट्रॅक्टमधून बदलण्यायोग्य तर्क कॉन्ट्रॅक्टकडे फंक्शन कॉल सोपवण्यासाठी प्रॉक्सी पॅटर्न वापरणे. + +4. विशिष्ट फंक्शन्स कार्यान्वित करण्यासाठी लवचिक सॅटेलाइट कॉन्ट्रॅक्ट्सशी इंटरफेस करणारा आणि त्यावर अवलंबून असणारा एक अपरिवर्तनीय मुख्य कॉन्ट्रॅक्ट तयार करणे. + +5. प्रॉक्सी कॉन्ट्रॅक्टमधून लॉजिक कॉन्ट्रॅक्ट्सकडे फंक्शन कॉल सोपवण्यासाठी डायमंड पॅटर्न वापरणे. + +### अपग्रेड यंत्रणा #1: कॉन्ट्रॅक्ट स्थलांतर {#contract-migration} + +कॉन्ट्रॅक्ट स्थलांतर हे आवृत्तीकरणावर आधारित आहे—म्हणजेच, एकाच सॉफ्टवेअरच्या अद्वितीय स्थिती तयार करणे आणि व्यवस्थापित करण्याची कल्पना. कॉन्ट्रॅक्ट स्थलांतरामध्ये अस्तित्वात असलेल्या स्मार्ट कॉन्ट्रॅक्टचा नवीन इन्स्टन्स तैनात करणे आणि नवीन कॉन्ट्रॅक्टमध्ये स्टोरेज आणि शिल्लक हस्तांतरित करणे यांचा समावेश असतो. + +नव्याने तैनात केलेल्या कॉन्ट्रॅक्टमध्ये रिकामा स्टोरेज असेल, ज्यामुळे तुम्हाला जुन्या कॉन्ट्रॅक्टमधून डेटा परत मिळवता येईल आणि तो नवीन अंमलबजावणीमध्ये लिहिता येईल. त्यानंतर, तुम्हाला जुन्या कॉन्ट्रॅक्टशी संवाद साधलेल्या सर्व कॉन्ट्रॅक्टना नवीन पत्ता दर्शवण्यासाठी अपडेट करावे लागेल. + +कॉन्ट्रॅक्ट स्थलांतरातील शेवटची पायरी म्हणजे वापरकर्त्यांना नवीन कॉन्ट्रॅक्ट वापरण्यासाठी प्रवृत्त करणे. नवीन कॉन्ट्रॅक्ट आवृत्ती वापरकर्त्याची शिल्लक आणि पत्ते कायम ठेवेल, ज्यामुळे अपरिवर्तनीयता जपली जाते. जर तो टोकन-आधारित कॉन्ट्रॅक्ट असेल, तर तुम्हाला जुना कॉन्ट्रॅक्ट रद्द करून नवीन कॉन्ट्रॅक्ट वापरण्यासाठी एक्सचेंजेसशी संपर्क साधावा लागेल. + +वापरकर्त्यांच्या संवादात व्यत्यय न आणता स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्यासाठी कॉन्ट्रॅक्ट स्थलांतर ही एक तुलनेने सोपी आणि सुरक्षित उपाययोजना आहे. तथापि, वापरकर्ता स्टोरेज आणि शिल्लक नवीन कॉन्ट्रॅक्टमध्ये मॅन्युअली स्थलांतरित करणे वेळखाऊ आहे आणि त्यात जास्त गॅस खर्च येऊ शकतो. + +[कॉन्ट्रॅक्ट स्थलांतरावर अधिक.](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) + +### अपग्रेड यंत्रणा #2: डेटा विभाजन {#data-separation} + +स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्याची दुसरी पद्धत म्हणजे व्यवसाय तर्क आणि डेटा स्टोरेज स्वतंत्र कॉन्ट्रॅक्टमध्ये वेगळे करणे. याचा अर्थ वापरकर्ते लॉजिक कॉन्ट्रॅक्टशी संवाद साधतात, तर डेटा स्टोरेज कॉन्ट्रॅक्टमध्ये संग्रहित केला जातो. + +लॉजिक कॉन्ट्रॅक्टमध्ये तो कोड असतो जो वापरकर्ते ऍप्लिकेशनशी संवाद साधताना कार्यान्वित होतो. त्यात स्टोरेज कॉन्ट्रॅक्टचा पत्ता देखील असतो आणि डेटा मिळवण्यासाठी आणि सेट करण्यासाठी त्याच्याशी संवाद साधतो. + +दरम्यान, स्टोरेज कॉन्ट्रॅक्टमध्ये स्मार्ट कॉन्ट्रॅक्टशी संबंधित स्थिती असते, जसे की वापरकर्त्याची शिल्लक आणि पत्ते. लक्षात घ्या की स्टोरेज कॉन्ट्रॅक्ट लॉजिक कॉन्ट्रॅक्टच्या मालकीचा असतो आणि तैनात करताना नंतरच्या पत्त्यासह कॉन्फिगर केलेला असतो. हे अनधिकृत कॉन्ट्रॅक्टना स्टोरेज कॉन्ट्रॅक्टला कॉल करण्यापासून किंवा त्याचा डेटा अपडेट करण्यापासून प्रतिबंधित करते. + +डीफॉल्टनुसार, स्टोरेज कॉन्ट्रॅक्ट अपरिवर्तनीय असतो—परंतु तुम्ही ज्या लॉजिक कॉन्ट्रॅक्टकडे ते निर्देश करते त्याला नवीन अंमलबजावणीसह बदलू शकता. यामुळे EVM मध्ये चालणारा कोड बदलेल, आणि स्टोरेज व शिल्लक अबाधित राहील. + +ही अपग्रेड पद्धत वापरण्यासाठी स्टोरेज कॉन्ट्रॅक्टमधील लॉजिक कॉन्ट्रॅक्टचा पत्ता अपडेट करणे आवश्यक आहे. तुम्ही नवीन लॉजिक कॉन्ट्रॅक्टला स्टोरेज कॉन्ट्रॅक्टच्या पत्त्यासह कॉन्फिगर करणे आवश्यक आहे, ज्याची कारणे पूर्वी स्पष्ट केली आहेत. + +कॉन्ट्रॅक्ट स्थलांतराच्या तुलनेत डेटा विभाजन पॅटर्न अंमलात आणणे अधिक सोपे आहे. तथापि, तुम्हाला अनेक कॉन्ट्रॅक्ट्स व्यवस्थापित करावे लागतील आणि स्मार्ट कॉन्ट्रॅक्ट्सना दुर्भावनापूर्ण अपग्रेड्सपासून वाचवण्यासाठी गुंतागुंतीच्या अधिकृतता योजना लागू कराव्या लागतील. + +### अपग्रेड यंत्रणा #3: प्रॉक्सी पॅटर्न {#proxy-patterns} + +प्रॉक्सी पॅटर्न देखील व्यवसाय तर्क आणि डेटा स्वतंत्र कॉन्ट्रॅक्टमध्ये ठेवण्यासाठी डेटा विभाजनाचा वापर करतो. तथापि, प्रॉक्सी पॅटर्नमध्ये, स्टोरेज कॉन्ट्रॅक्ट (ज्याला प्रॉक्सी म्हणतात) कोड अंमलबजावणी दरम्यान लॉजिक कॉन्ट्रॅक्टला कॉल करतो. ही डेटा विभाजन पद्धतीच्या उलट आहे, जिथे लॉजिक कॉन्ट्रॅक्ट स्टोरेज कॉन्ट्रॅक्टला कॉल करतो. + +प्रॉक्सी पॅटर्नमध्ये हे घडते: + +1. वापरकर्ते प्रॉक्सी कॉन्ट्रॅक्टशी संवाद साधतात, जो डेटा संग्रहित करतो, परंतु व्यवसायाचा तर्क ठेवत नाही. + +2. प्रॉक्सी कॉन्ट्रॅक्ट लॉजिक कॉन्ट्रॅक्टचा पत्ता संग्रहित करतो आणि `delegatecall` फंक्शन वापरून सर्व फंक्शन कॉल लॉजिक कॉन्ट्रॅक्टकडे (ज्यात व्यवसायाचा तर्क असतो) सोपवतो. + +3. कॉल लॉजिक कॉन्ट्रॅक्टकडे फॉरवर्ड केल्यानंतर, लॉजिक कॉन्ट्रॅक्टमधून परत आलेला डेटा पुनर्प्राप्त केला जातो आणि वापरकर्त्याला परत केला जातो. + +प्रॉक्सी पॅटर्न वापरण्यासाठी **delegatecall** फंक्शनची समज असणे आवश्यक आहे. मूलतः, `delegatecall` एक ऑपकोड आहे जो एका कॉन्ट्रॅक्टला दुसऱ्या कॉन्ट्रॅक्टला कॉल करण्याची परवानगी देतो, तर प्रत्यक्ष कोडची अंमलबजावणी कॉलिंग कॉन्ट्रॅक्टच्या संदर्भात होते. प्रॉक्सी पॅटर्नमध्ये `delegatecall` वापरण्याचा एक परिणाम म्हणजे प्रॉक्सी कॉन्ट्रॅक्ट त्याच्या स्टोरेजमध्ये वाचतो आणि लिहितो आणि लॉजिक कॉन्ट्रॅक्टमध्ये साठवलेला तर्क कार्यान्वित करतो, जसे की तो अंतर्गत फंक्शनला कॉल करत आहे. + +[Solidity माहिती](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries) वरून: + +> _मेसेज कॉलचा एक विशेष प्रकार आहे, ज्याला **delegatecall** म्हणतात, जो मेसेज कॉलसारखाच आहे, याशिवाय की लक्ष्य पत्त्यावरील कोड कॉलिंग कॉन्ट्रॅक्टच्या संदर्भात (म्हणजे, पत्त्यावर) कार्यान्वित होतो आणि `msg.sender` व `msg.value` त्यांची मूल्ये बदलत नाहीत._ _याचा अर्थ असा की एक कॉन्ट्रॅक्ट रनटाइमवेळी वेगळ्या पत्त्यावरून कोड डायनॅमिकली लोड करू शकतो. स्टोरेज, वर्तमान पत्ता आणि शिल्लक अजूनही कॉलिंग कॉन्ट्रॅक्टचा संदर्भ घेतात, फक्त कोड कॉल केलेल्या पत्त्यावरून घेतला जातो._ + +प्रॉक्सी कॉन्ट्रॅक्टला `delegatecall` कसे चालवायचे हे माहित असते, जेव्हा एखादा वापरकर्ता फंक्शनला कॉल करतो, कारण त्यात `fallback` फंक्शन तयार केलेले असते. Solidity प्रोग्रामिंगमध्ये, [फॉलबॅक फंक्शन](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function) तेव्हा कार्यान्वित होते जेव्हा फंक्शन कॉल कॉन्ट्रॅक्टमध्ये निर्दिष्ट केलेल्या फंक्शन्सशी जुळत नाही. + +प्रॉक्सी पॅटर्न कार्यरत करण्यासाठी एक कस्टम फॉलबॅक फंक्शन लिहिणे आवश्यक आहे, जे हे निर्दिष्ट करते की प्रॉक्सी कॉन्ट्रॅक्टने समर्थन न करणाऱ्या फंक्शन कॉल्सना कसे हाताळावे. या प्रकरणात, प्रॉक्सीचे फॉलबॅक फंक्शन delegatecall सुरू करण्यासाठी आणि वापरकर्त्याची विनंती सध्याच्या लॉजिक कॉन्ट्रॅक्ट अंमलबजावणीकडे पुन्हा मार्गस्थ करण्यासाठी प्रोग्राम केलेले असते. + +प्रॉक्सी कॉन्ट्रॅक्ट डीफॉल्टनुसार अपरिवर्तनीय असतो, परंतु अपडेटेड व्यवसाय तर्कासह नवीन लॉजिक कॉन्ट्रॅक्ट तयार केले जाऊ शकतात. त्यानंतर अपग्रेड करणे म्हणजे प्रॉक्सी कॉन्ट्रॅक्टमध्ये संदर्भित लॉजिक कॉन्ट्रॅक्टचा पत्ता बदलणे. + +प्रॉक्सी कॉन्ट्रॅक्टला नवीन लॉजिक कॉन्ट्रॅक्टकडे निर्देशित करून, वापरकर्ते प्रॉक्सी कॉन्ट्रॅक्ट फंक्शनला कॉल करतात तेव्हा कार्यान्वित होणारा कोड बदलतो. यामुळे आम्हाला वापरकर्त्यांना नवीन कॉन्ट्रॅक्टशी संवाद साधण्यास न सांगता कॉन्ट्रॅक्टचा तर्क अपग्रेड करता येतो. + +प्रॉक्सी पॅटर्न स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्याची एक लोकप्रिय पद्धत आहे कारण ते कॉन्ट्रॅक्ट स्थलांतराशी संबंधित अडचणी दूर करतात. तथापि, प्रॉक्सी पॅटर्न वापरण्यास अधिक गुंतागुंतीचे आहेत आणि जर ते अयोग्यरित्या वापरले गेले तर, [फंक्शन सिलेक्टर क्लॅश](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357) सारखे गंभीर दोष निर्माण करू शकतात. + +[प्रॉक्सी पॅटर्नवर अधिक](https://blog.openzeppelin.com/proxy-patterns/). + +### अपग्रेड यंत्रणा #4: स्ट्रॅटेजी पॅटर्न {#strategy-pattern} + +हे तंत्र [स्ट्रॅटेजी पॅटर्न](https://en.wikipedia.org/wiki/Strategy_pattern) पासून प्रभावित आहे, जे विशिष्ट वैशिष्ट्ये लागू करण्यासाठी इतर प्रोग्राम्सशी इंटरफेस करणारे सॉफ्टवेअर प्रोग्राम तयार करण्यास प्रोत्साहित करते. इथेरियम डेव्हलपमेंटमध्ये स्ट्रॅटेजी पॅटर्न लागू करणे म्हणजे इतर कॉन्ट्रॅक्ट्समधून फंक्शन्स कॉल करणारा स्मार्ट कॉन्ट्रॅक्ट तयार करणे. + +या प्रकरणात मुख्य कॉन्ट्रॅक्टमध्ये मुख्य व्यवसाय तर्क असतो, परंतु तो विशिष्ट फंक्शन्स कार्यान्वित करण्यासाठी इतर स्मार्ट कॉन्ट्रॅक्ट्स ("सॅटेलाइट कॉन्ट्रॅक्ट्स") शी इंटरफेस करतो. हा मुख्य कॉन्ट्रॅक्ट प्रत्येक सॅटेलाइट कॉन्ट्रॅक्टचा पत्ता देखील संग्रहित करतो आणि सॅटेलाइट कॉन्ट्रॅक्टच्या वेगवेगळ्या अंमलबजावणींमध्ये स्विच करू शकतो. + +तुम्ही एक नवीन सॅटेलाइट कॉन्ट्रॅक्ट तयार करू शकता आणि मुख्य कॉन्ट्रॅक्टला नवीन पत्त्यासह कॉन्फिगर करू शकता. यामुळे तुम्हाला स्मार्ट कॉन्ट्रॅक्टसाठी _स्ट्रॅटेजी_ (म्हणजे, नवीन तर्क लागू करणे) बदलता येते. + +आधी चर्चा केलेल्या प्रॉक्सी पॅटर्नसारखे असले तरी, स्ट्रॅटेजी पॅटर्न वेगळा आहे कारण मुख्य कॉन्ट्रॅक्ट, ज्याच्याशी वापरकर्ते संवाद साधतात, त्यात व्यवसायाचा तर्क असतो. हा पॅटर्न वापरल्याने तुम्हाला मुख्य पायाभूत सुविधांवर परिणाम न करता स्मार्ट कॉन्ट्रॅक्टमध्ये मर्यादित बदल करण्याची संधी मिळते. + +मुख्य तोटा असा आहे की हा पॅटर्न मुख्यतः किरकोळ अपग्रेड्ससाठी उपयुक्त आहे. तसेच, जर मुख्य कॉन्ट्रॅक्टमध्ये तडजोड झाली (उदा. हॅकद्वारे), तर तुम्ही ही अपग्रेड पद्धत वापरू शकत नाही. + +### अपग्रेड यंत्रणा #5: डायमंड पॅटर्न {#diamond-pattern} + +डायमंड पॅटर्नला प्रॉक्सी पॅटर्नमधील सुधारणा मानले जाऊ शकते. डायमंड पॅटर्न प्रॉक्सी पॅटर्नपेक्षा वेगळे आहेत कारण डायमंड प्रॉक्सी कॉन्ट्रॅक्ट एकापेक्षा जास्त लॉजिक कॉन्ट्रॅक्टकडे फंक्शन कॉल सोपवू शकतो. + +डायमंड पॅटर्नमधील लॉजिक कॉन्ट्रॅक्ट्स _फेसिट्स_ म्हणून ओळखले जातात. डायमंड पॅटर्न कार्यरत करण्यासाठी, तुम्हाला प्रॉक्सी कॉन्ट्रॅक्टमध्ये एक मॅपिंग तयार करावे लागेल जे [फंक्शन सिलेक्टर्स](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector) वेगवेगळ्या फेसिट पत्त्यांवर मॅप करेल. + +जेव्हा वापरकर्ता फंक्शन कॉल करतो, तेव्हा प्रॉक्सी कॉन्ट्रॅक्ट ते फंक्शन कार्यान्वित करण्यासाठी जबाबदार फेसिट शोधण्यासाठी मॅपिंग तपासतो. मग ते `delegatecall` (फॉलबॅक फंक्शन वापरून) चालवते आणि कॉल योग्य लॉजिक कॉन्ट्रॅक्टकडे पुनर्निर्देशित करते. + +डायमंड अपग्रेड पॅटर्नमध्ये पारंपरिक प्रॉक्सी अपग्रेड पॅटर्नपेक्षा काही फायदे आहेत: + +1. हे तुम्हाला संपूर्ण कोड न बदलता कॉन्ट्रॅक्टचा एक छोटासा भाग अपग्रेड करण्याची परवानगी देते. अपग्रेडसाठी प्रॉक्सी पॅटर्न वापरताना, किरकोळ अपग्रेडसाठी सुद्धा, संपूर्णपणे नवीन लॉजिक कॉन्ट्रॅक्ट तयार करणे आवश्यक आहे. + +2. सर्व स्मार्ट कॉन्ट्रॅक्ट्सना (प्रॉक्सी पॅटर्नमध्ये वापरलेल्या लॉजिक कॉन्ट्रॅक्ट्ससह) 24KB आकाराची मर्यादा असते, जी एक मर्यादा असू शकते - विशेषतः अधिक फंक्शन्स आवश्यक असलेल्या गुंतागुंतीच्या कॉन्ट्रॅक्ट्ससाठी. डायमंड पॅटर्न अनेक लॉजिक कॉन्ट्रॅक्ट्समध्ये फंक्शन्स विभाजित करून ही समस्या सोडवणे सोपे करते. + +3. प्रॉक्सी पॅटर्न ऍक्सेस नियंत्रणासाठी कॅच-ऑल दृष्टीकोन स्वीकारतात. अपग्रेड फंक्शन्समध्ये ऍक्सेस असलेली संस्था _संपूर्ण_ कॉन्ट्रॅक्ट बदलू शकते. परंतु डायमंड पॅटर्न एक मॉड्यूलर परवानगी दृष्टीकोन सक्षम करतो, जिथे तुम्ही संस्थांना स्मार्ट कॉन्ट्रॅक्टमधील विशिष्ट फंक्शन्स अपग्रेड करण्यापुरते मर्यादित करू शकता. + +[डायमंड पॅटर्नवर अधिक](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w). + +## स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्याचे फायदे आणि तोटे {#pros-and-cons-of-upgrading-smart-contracts} + +| फायदे | बाधक | +| ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| स्मार्ट कॉन्ट्रॅक्ट अपग्रेडमुळे तैनातीनंतरच्या टप्प्यात शोधलेल्या असुरक्षितता दुरुस्त करणे सोपे होते. | स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करणे हे कोड अपरिवर्तनीयतेच्या कल्पनेला नाकारते, ज्याचे विकेंद्रीकरण आणि सुरक्षिततेवर परिणाम होतात. | +| डेव्हलपर्स विकेंद्रित ऍप्लिकेशन्समध्ये नवीन वैशिष्ट्ये जोडण्यासाठी लॉजिक अपग्रेड्स वापरू शकतात. | वापरकर्त्यांनी डेव्हलपर्सवर विश्वास ठेवला पाहिजे की ते स्मार्ट कॉन्ट्रॅक्टमध्ये अनियंत्रितपणे बदल करणार नाहीत. | +| स्मार्ट कॉन्ट्रॅक्ट अपग्रेड्स अंतिम वापरकर्त्यांसाठी सुरक्षितता सुधारू शकतात कारण बग्स लवकर दुरुस्त केले जाऊ शकतात. | स्मार्ट कॉन्ट्रॅक्टमध्ये अपग्रेड कार्यक्षमता प्रोग्रामिंग केल्याने गुंतागुंतीचा आणखी एक स्तर वाढतो आणि गंभीर दोषांची शक्यता वाढते. | +| कॉन्ट्रॅक्ट अपग्रेड डेव्हलपर्सना वेगवेगळ्या वैशिष्ट्यांसह प्रयोग करण्यासाठी आणि कालांतराने dapps सुधारण्यासाठी अधिक संधी देतात. | स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्याची संधी डेव्हलपर्सना विकासाच्या टप्प्यात योग्य काळजी न घेता प्रकल्प लवकर सुरू करण्यास प्रोत्साहित करू शकते. | +| | स्मार्ट कॉन्ट्रॅक्टमधील असुरक्षित ऍक्सेस नियंत्रण किंवा केंद्रीकरणामुळे दुर्भावनापूर्ण व्यक्तींना अनधिकृत अपग्रेड करणे सोपे होऊ शकते. | + +## स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्यासाठी विचार करण्याच्या गोष्टी {#considerations-for-upgrading-smart-contracts} + +1. अनधिकृत स्मार्ट कॉन्ट्रॅक्ट अपग्रेड्सना प्रतिबंध करण्यासाठी सुरक्षित ऍक्सेस नियंत्रण/अधिकृतता यंत्रणा वापरा, विशेषतः प्रॉक्सी पॅटर्न, स्ट्रॅटेजी पॅटर्न किंवा डेटा विभाजन वापरत असल्यास. एक उदाहरण म्हणजे अपग्रेड फंक्शनमध्ये प्रवेश मर्यादित करणे, जेणेकरून केवळ कॉन्ट्रॅक्टचा मालकच ते कॉल करू शकेल. + +2. स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करणे ही एक गुंतागुंतीची क्रिया आहे आणि असुरक्षितता टाळण्यासाठी उच्च पातळीवरील काळजी घेणे आवश्यक आहे. + +3. अपग्रेड लागू करण्याची प्रक्रिया विकेंद्रित करून विश्वासाची गृहितके कमी करा. संभाव्य धोरणांमध्ये अपग्रेड नियंत्रित करण्यासाठी [मल्टी-सिग वॉलेट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/#multisig) वापरणे, किंवा अपग्रेड मंजूर करण्यासाठी [DAO चे सदस्य](/dao/) यांना मतदान करणे आवश्यक करणे यांचा समावेश आहे. + +4. कॉन्ट्रॅक्ट अपग्रेड करण्यामध्ये समाविष्ट असलेल्या खर्चाबद्दल जागरूक रहा. उदाहरणार्थ, कॉन्ट्रॅक्ट स्थलांतरादरम्यान जुन्या कॉन्ट्रॅक्टमधून नवीन कॉन्ट्रॅक्टमध्ये स्थिती (उदा. वापरकर्त्याची शिल्लक) कॉपी करण्यासाठी एकापेक्षा जास्त व्यवहारांची आवश्यकता असू शकते, म्हणजे अधिक गॅस शुल्क. + +5. वापरकर्त्यांचे संरक्षण करण्यासाठी **टाइमलॉक** लागू करण्याचा विचार करा. टाइमलॉक म्हणजे सिस्टममधील बदलांवर लागू होणारा विलंब. अपग्रेड नियंत्रित करण्यासाठी टाइमलॉक मल्टी-सिग गव्हर्नन्स प्रणालीसह एकत्र केले जाऊ शकतात: जर प्रस्तावित कृती आवश्यक मान्यता मर्यादेपर्यंत पोहोचली, तर ती पूर्वनिर्धारित विलंब कालावधी संपेपर्यंत कार्यान्वित होत नाही. + +जर वापरकर्ते प्रस्तावित बदलाशी (उदा. लॉजिक अपग्रेड किंवा नवीन शुल्क योजना) असहमत असतील तर टाइमलॉक त्यांना सिस्टममधून बाहेर पडण्यासाठी थोडा वेळ देतात. टाइमलॉकशिवाय, वापरकर्त्यांना डेव्हलपर्सवर विश्वास ठेवावा लागतो की ते पूर्वसूचना न देता स्मार्ट कॉन्ट्रॅक्टमध्ये अनियंत्रित बदल करणार नाहीत. येथे तोटा असा आहे की टाइमलॉक असुरक्षितता त्वरीत पॅच करण्याची क्षमता प्रतिबंधित करतात. + +## संसाधने {#resources} + +**OpenZeppelin अपग्रेड्स प्लगइन - _अपग्रेड करण्यायोग्य स्मार्ट कॉन्ट्रॅक्ट्स तैनात आणि सुरक्षित करण्यासाठी साधनांचा संच._** + +- [GitHub](https://github.com/OpenZeppelin/openzeppelin-upgrades) +- [माहिती](https://docs.openzeppelin.com/upgrades) + +## ट्यूटोरियल्स {#tutorials} + +- [तुमचे स्मार्ट कॉन्ट्रॅक्ट्स अपग्रेड करणे | YouTube ट्युटोरियल](https://www.youtube.com/watch?v=bdXJmWajZRY) पॅट्रिक कॉलिन्स द्वारे +- [इथेरियम स्मार्ट कॉन्ट्रॅक्ट मायग्रेशन ट्युटोरियल](https://medium.com/coinmonks/ethereum-smart-contract-migration-13f6f12539bd) ऑस्टिन ग्रिफिथ द्वारे +- [स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्यासाठी UUPS प्रॉक्सी पॅटर्न वापरणे](https://blog.logrocket.com/author/praneshas/) प्रणेश ए. एस. द्वारे +- [Web3 ट्युटोरियल: OpenZeppelin वापरून अपग्रेड करण्यायोग्य स्मार्ट कॉन्ट्रॅक्ट (प्रॉक्सी) लिहा](https://dev.to/yakult/tutorial-write-upgradeable-smart-contract-proxy-contract-with-openzeppelin-1916) फॅंगजुन.ईथ द्वारे + +## पुढील वाचन {#further-reading} + +- [स्मार्ट कॉन्ट्रॅक्ट अपग्रेडची स्थिती](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/) सँटियागो पॅलाडिनो द्वारे +- [सॉलिडिटी स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करण्याचे अनेक मार्ग](https://cryptomarketpool.com/multiple-ways-to-upgrade-a-solidity-smart-contract/) - क्रिप्टो मार्केट पूल ब्लॉग +- [शिका: स्मार्ट कॉन्ट्रॅक्ट अपग्रेड करणे](https://docs.openzeppelin.com/learn/upgrading-smart-contracts) - OpenZeppelin Docs +- [सॉलिडिटी कॉन्ट्रॅक्ट्सच्या अपग्रेडिबिलिटीसाठी प्रॉक्सी पॅटर्न: पारदर्शक विरुद्ध UUPS प्रॉक्सी](https://mirror.xyz/0xB38709B8198d147cc9Ff9C133838a044d78B064B/M7oTptQkBGXxox-tk9VJjL66E1V8BUF0GF79MMK4YG0) नवीन साहू द्वारे +- [डायमंड अपग्रेड्स कसे काम करतात](https://dev.to/mudgen/how-diamond-upgrades-work-417j) निक मज द्वारे diff --git a/public/content/translations/mr/developers/docs/smart-contracts/verifying/index.md b/public/content/translations/mr/developers/docs/smart-contracts/verifying/index.md new file mode 100644 index 00000000000..994a21eaa69 --- /dev/null +++ b/public/content/translations/mr/developers/docs/smart-contracts/verifying/index.md @@ -0,0 +1,113 @@ +--- +title: "हुशार करारांची पडताळणी" +description: "Ethereum हुशार करारांसाठी सोर्स कोड पडताळणीचे एक अवलोकन" +lang: mr +--- + +[हुशार करार](/developers/docs/smart-contracts/) “विश्वासहीन” (trustless) असण्यासाठी डिझाइन केलेले आहेत, याचा अर्थ वापरकर्त्यांनी कराराशी संवाद साधण्यापूर्वी तृतीय पक्षांवर (उदा. डेव्हलपर्स आणि कंपन्या) विश्वास ठेवण्याची गरज नाही. विश्वासहीनतेसाठी एक आवश्यक अट म्हणून, वापरकर्ते आणि इतर डेव्हलपर्सना हुशार कराराच्या सोर्स कोडची पडताळणी करता आली पाहिजे. सोर्स कोड पडताळणी वापरकर्त्यांना आणि डेव्हलपर्सना आश्वासन देते की प्रकाशित केलेला करार कोड Ethereum ब्लॉकचेनवरील करार पत्त्यावर चालणाऱ्या कोडसारखाच आहे. + +"सोर्स कोड पडताळणी" आणि "[औपचारिक पडताळणी](/developers/docs/smart-contracts/formal-verification/)" यातील फरक ओळखणे महत्त्वाचे आहे. सोर्स कोड पडताळणी, ज्याचे खाली तपशीलवार स्पष्टीकरण दिले जाईल, म्हणजे उच्च-स्तरीय भाषेत (उदा. Solidity) हुशार कराराचा दिलेला सोर्स कोड करार पत्त्यावर कार्यान्वित होण्यासाठी त्याच बाईटकोडमध्ये संकलित होतो की नाही हे तपासणे. तथापि, औपचारिक पडताळणी हुशार कराराच्या अचूकतेची पडताळणी करण्याचे वर्णन करते, याचा अर्थ करार अपेक्षेप्रमाणे वागतो. संदर्भ-अवलंबित असले तरी, करार पडताळणी सामान्यतः सोर्स कोड पडताळणीला संदर्भित करते. + +## सोर्स कोड पडताळणी म्हणजे काय? {#what-is-source-code-verification} + +[Ethereum व्हर्च्युअल मशीन (EVM)](/developers/docs/evm/) मध्ये हुशार करार तैनात करण्यापूर्वी, डेव्हलपर्स कराराचा सोर्स कोड—[Solidity मध्ये लिहिलेल्या](/developers/docs/smart-contracts/languages/) सूचना किंवा दुसरी उच्च-स्तरीय प्रोग्रामिंग भाषा—बाईटकोडमध्ये [संकलित](/developers/docs/smart-contracts/compiling/) करतात. EVM उच्च-स्तरीय सूचनांचा अर्थ लावू शकत नसल्यामुळे, EVM मध्ये कराराचे तर्कशास्त्र कार्यान्वित करण्यासाठी सोर्स कोडला बाईटकोडमध्ये (म्हणजे, निम्न-स्तरीय, मशीन सूचना) संकलित करणे आवश्यक आहे. + +सोर्स कोड पडताळणी म्हणजे कोणताही फरक शोधण्यासाठी हुशार कराराचा सोर्स कोड आणि करार तयार करताना वापरलेल्या संकलित बाईटकोडची तुलना करणे. हुशार करारांची पडताळणी करणे महत्त्वाचे आहे कारण जाहिरात केलेला करार कोड ब्लॉकचेनवर चालणाऱ्या कोडपेक्षा वेगळा असू शकतो. + +हुशार कराराची पडताळणी मशीन कोड वाचल्याशिवाय, करार ज्या उच्च-स्तरीय भाषेत लिहिलेला आहे त्याद्वारे तो काय करतो याचा तपास करण्यास सक्षम करते. संकलित आणि तैनात केलेल्या मूळ सोर्स कोडसह फंक्शन्स, व्हॅल्यूज आणि सामान्यतः व्हेरिएबलची नावे आणि टिप्पण्या समान राहतात. यामुळे कोड वाचणे खूप सोपे होते. सोर्स पडताळणी कोड दस्तऐवजीकरणासाठी देखील तरतूद करते, जेणेकरून अंतिम वापरकर्त्यांना कळेल की हुशार करार काय करण्यासाठी डिझाइन केला आहे. + +### पूर्ण पडताळणी म्हणजे काय? {#full-verification} + +सोर्स कोडचे काही भाग असे आहेत जे संकलित बाईटकोडवर परिणाम करत नाहीत जसे की टिप्पण्या किंवा व्हेरिएबलची नावे. याचा अर्थ असा की भिन्न व्हेरिएबल नावे आणि भिन्न टिप्पण्या असलेले दोन सोर्स कोड एकाच कराराची पडताळणी करण्यास सक्षम असतील. त्यामुळे, एक दुर्भावनापूर्ण अभिनेता फसव्या टिप्पण्या जोडू शकतो किंवा सोर्स कोडमध्ये दिशाभूल करणारी व्हेरिएबल नावे देऊ शकतो आणि मूळ सोर्स कोडपेक्षा वेगळ्या सोर्स कोडसह कराराची पडताळणी करून घेऊ शकतो. + +सोर्स कोडच्या अचूकतेसाठी _क्रिप्टोग्राफिक हमी_ म्हणून आणि संकलन माहितीचा _फिंगरप्रिंट_ म्हणून काम करण्यासाठी बाईटकोडमध्ये अतिरिक्त डेटा जोडून हे टाळणे शक्य आहे. आवश्यक माहिती [Solidity च्या करार मेटाडेटामध्ये](https://docs.soliditylang.org/en/v0.8.15/metadata.html) आढळते आणि या फाइलचा हॅश कराराच्या बाईटकोडमध्ये जोडला जातो. तुम्ही ते [मेटाडेटा प्लेग्राउंड](https://playground.sourcify.dev) मध्ये कार्यरत पाहू शकता + +मेटाडेटा फाइलमध्ये स्त्रोत फाइल्स आणि त्यांचे हॅशसह कराराच्या संकलनाविषयी माहिती असते. म्हणजेच, जर कोणतीही संकलन सेटिंग्ज किंवा स्त्रोत फाइल्सपैकी एकामधील एक बाइट जरी बदलला, तरी मेटाडेटा फाइल बदलते. परिणामी मेटाडेटा फाइलचा हॅश, जो बाईटकोडमध्ये जोडला जातो, तो देखील बदलतो. याचा अर्थ असा की जर एखाद्या कराराचा बाईटकोड + जोडलेला मेटाडेटा हॅश दिलेला सोर्स कोड आणि संकलन सेटिंग्जशी जुळत असेल, तर आपण खात्री बाळगू शकतो की हा तोच सोर्स कोड आहे जो मूळ संकलनामध्ये वापरला गेला होता, एकही बाइट वेगळा नाही. + +मेटाडेटा हॅशचा फायदा घेणार्‍या या प्रकारच्या पडताळणीला **"[पूर्ण पडताळणी](https://docs.sourcify.dev/docs/full-vs-partial-match/)"** (तसेच "परिपूर्ण पडताळणी") म्हणून संबोधले जाते. जर मेटाडेटा हॅश जुळत नसतील किंवा पडताळणीमध्ये विचारात घेतले जात नसतील तर तो एक "आंशिक जुळणी" असेल, जो सध्या करार पडताळण्याचा अधिक सामान्य मार्ग आहे. पूर्ण पडताळणीशिवाय [दुर्भावनापूर्ण कोड घालणे](https://samczsun.com/hiding-in-plain-sight/) शक्य आहे जो सत्यापित सोर्स कोडमध्ये दिसणार नाही. बहुतेक डेव्हलपर्सना पूर्ण पडताळणीबद्दल माहिती नसते आणि ते त्यांच्या संकलनाची मेटाडेटा फाइल ठेवत नाहीत, त्यामुळे आतापर्यंत करार पडताळण्यासाठी आंशिक पडताळणी ही वास्तविक पद्धत आहे. + +## सोर्स कोड पडताळणी का महत्त्वाची आहे? {#importance-of-source-code-verification} + +### विश्वासहीनता {#trustlessness} + +विश्वासहीनता हा हुशार करार आणि [विकेंद्रित ॲप्लिकेशन्स (dapps)](/developers/docs/dapps/) साठी सर्वात मोठा आधार आहे. हुशार करार “अपरिवर्तनीय” आहेत आणि त्यात बदल करता येत नाही; एखादा करार फक्त उपयोजनाच्या वेळी कोडमध्ये परिभाषित केलेला व्यवसाय तर्क कार्यान्वित करेल. याचा अर्थ डेव्हलपर्स आणि उद्योग Ethereum वर तैनात केल्यानंतर कराराच्या कोडमध्ये फेरफार करू शकत नाहीत. + +हुशार करार विश्वासहीन होण्यासाठी, कराराचा कोड स्वतंत्र पडताळणीसाठी उपलब्ध असावा. प्रत्येक हुशार करारासाठी संकलित बाईटकोड ब्लॉकचेनवर सार्वजनिकरित्या उपलब्ध असला तरी, निम्न-स्तरीय भाषा समजण्यास अवघड आहे - डेव्हलपर्स आणि वापरकर्ते दोघांसाठीही. + +प्रकल्प त्यांच्या करारांचा सोर्स कोड प्रकाशित करून विश्वासाची गृहितके कमी करतात. परंतु यामुळे दुसरी समस्या उद्भवते: प्रकाशित केलेला सोर्स कोड कराराच्या बाईटकोडशी जुळतो की नाही हे तपासणे कठीण आहे. या परिस्थितीत, विश्वासहीनतेचे मूल्य गमावले जाते कारण वापरकर्त्यांना ब्लॉकचेनवर तैनात करण्यापूर्वी कराराचे व्यवसाय तर्क (म्हणजे, बाईटकोड बदलून) न बदलण्यासाठी डेव्हलपर्सवर विश्वास ठेवावा लागतो. + +सोर्स कोड पडताळणी साधने हमी देतात की हुशार कराराच्या सोर्स कोड फाइल्स असेंब्ली कोडशी जुळतात. परिणाम एक विश्वासहीन परिसंस्था आहे, जिथे वापरकर्ते तृतीय पक्षांवर आंधळेपणाने विश्वास ठेवत नाहीत आणि त्याऐवजी करारामध्ये निधी जमा करण्यापूर्वी कोडची पडताळणी करतात. + +### वापरकर्ता सुरक्षा {#user-safety} + +हुशार करारांसह, सहसा बरेच पैसे पणाला लागलेले असतात. यासाठी उच्च सुरक्षा हमी आणि हुशार कराराच्या तर्काची पडताळणी वापरण्यापूर्वी करणे आवश्यक आहे. समस्या ही आहे की अनैतिक डेव्हलपर्स हुशार करारामध्ये दुर्भावनापूर्ण कोड घालून वापरकर्त्यांची फसवणूक करू शकतात. पडताळणीशिवाय, दुर्भावनापूर्ण हुशार करारांमध्ये [बॅकडोअर्स](https://www.trustnodes.com/2018/11/10/concerns-rise-over-backdoored-smart-contracts), वादग्रस्त ऍक्सेस कंट्रोल यंत्रणा, शोषण करण्यायोग्य भेद्यता आणि वापरकर्त्याच्या सुरक्षिततेला धोका निर्माण करणाऱ्या इतर गोष्टी असू शकतात ज्या लक्षात येणार नाहीत. + +हुशार कराराच्या सोर्स कोड फाइल्स प्रकाशित केल्याने लेखापरीक्षकांसारख्या स्वारस्य असलेल्यांना संभाव्य हल्ला करणाऱ्या वेक्टर्ससाठी कराराचे मूल्यांकन करणे सोपे होते. अनेक पक्ष स्वतंत्रपणे हुशार कराराची पडताळणी करत असल्याने, वापरकर्त्यांना त्याच्या सुरक्षिततेची अधिक मजबूत हमी मिळते. + +## Ethereum हुशार करारांसाठी सोर्स कोडची पडताळणी कशी करावी {#source-code-verification-for-ethereum-smart-contracts} + +[Ethereum वर हुशार करार तैनात करण्यासाठी](/developers/docs/smart-contracts/deploying/) डेटा पेलोड (संकलित बाईटकोड) सह एका विशेष पत्त्यावर व्यवहार पाठवणे आवश्यक आहे. डेटा पेलोड सोर्स कोड संकलित करून तयार केला जातो, तसेच व्यवहारातील डेटा पेलोडमध्ये जोडलेल्या करार उदाहरणाच्या [कन्स्ट्रक्टर युक्तिवादांसह](https://docs.soliditylang.org/en/v0.8.14/contracts.html#constructor). संकलन हे निश्चित आहे, याचा अर्थ जर समान सोर्स फाइल्स, आणि संकलन सेटिंग्ज (उदा. कंपाइलर आवृत्ती, ऑप्टिमायझर) वापरल्या गेल्या तर ते नेहमी समान आउटपुट (म्हणजे, करार बाईटकोड) तयार करते. + +![हुशार कराराच्या सोर्स कोड पडताळणीचे रेखाचित्र](./source-code-verification.png) + +हुशार कराराची पडताळणी करण्यामध्ये मुळात खालील पायऱ्या समाविष्ट आहेत: + +1. सोर्स फाइल्स आणि संकलन सेटिंग्ज कंपाइलरमध्ये इनपुट करा. + +2. कंपाइलर कराराचा बाईटकोड आउटपुट करतो + +3. दिलेल्या पत्त्यावर तैनात केलेल्या कराराचा बाईटकोड मिळवा + +4. तैनात केलेल्या बाईटकोडची पुन्हा संकलित केलेल्या बाईटकोडशी तुलना करा. जर कोड जुळले, तर दिलेला सोर्स कोड आणि संकलन सेटिंग्जसह कराराची पडताळणी होते. + +5. याव्यतिरिक्त, बाईटकोडच्या शेवटी असलेले मेटाडेटा हॅश जुळल्यास, ती पूर्ण जुळणी असेल. + +लक्षात घ्या की हे पडताळणीचे एक सोपे वर्णन आहे आणि यात अनेक अपवाद आहेत जे यासह कार्य करणार नाहीत जसे की [अपरिवर्तनीय व्हेरिएबल्स](https://docs.sourcify.dev/docs/immutables/) असणे. + +## सोर्स कोड पडताळणी साधने {#source-code-verification-tools} + +करार पडताळणीची पारंपरिक प्रक्रिया गुंतागुंतीची असू शकते. म्हणूनच आमच्याकडे Ethereum वर तैनात केलेल्या हुशार करारांसाठी सोर्स कोड पडताळण्यासाठी साधने आहेत. ही साधने सोर्स कोड पडताळणीचे मोठे भाग स्वयंचलित करतात आणि वापरकर्त्यांच्या फायद्यासाठी सत्यापित करारांची निवड करतात. + +### Etherscan {#etherscan} + +जरी मुख्यतः [Ethereum ब्लॉकचेन एक्सप्लोरर](/developers/docs/data-and-analytics/block-explorers/) म्हणून ओळखले जात असले तरी, Etherscan हुशार कराराचे डेव्हलपर्स आणि वापरकर्त्यांसाठी [सोर्स कोड पडताळणी सेवा](https://etherscan.io/verifyContract) देखील प्रदान करते. + +Etherscan तुम्हाला मूळ डेटा पेलोड (सोर्स कोड, लायब्ररी ॲड्रेस, कंपाइलर सेटिंग्ज, करार ॲड्रेस, इ.) मधून करार बाईटकोड पुन्हा संकलित करण्याची परवानगी देतो. जर पुन्हा संकलित केलेला बाईटकोड ऑनचेन कराराच्या बाईटकोडशी (आणि कन्स्ट्रक्टर पॅरामीटर्स) संबंधित असेल, तर [करार सत्यापित केला जातो](https://info.etherscan.com/types-of-contract-verification/). + +एकदा सत्यापित झाल्यावर, तुमच्या कराराच्या सोर्स कोडला "सत्यापित" लेबल मिळते आणि इतरांना ऑडिट करण्यासाठी Etherscan वर प्रकाशित केले जाते. हे [सत्यापित करार](https://etherscan.io/contractsVerified/) विभागात देखील जोडले जाते - सत्यापित सोर्स कोडसह हुशार करारांचे एक भांडार. + +Etherscan करार पडताळण्यासाठी सर्वाधिक वापरले जाणारे साधन आहे. तथापि, Etherscan च्या करार पडताळणीमध्ये एक कमतरता आहे: ते ऑनचेन बाईटकोड आणि पुन्हा संकलित केलेल्या बाईटकोडच्या **मेटाडेटा हॅश**ची तुलना करण्यात अयशस्वी ठरते. त्यामुळे Etherscan मधील जुळण्या या आंशिक जुळण्या आहेत. + +[Etherscan वर करार पडताळणीबद्दल अधिक](https://medium.com/etherscan-blog/verifying-contracts-on-etherscan-f995ab772327). + +### Blockscout {#blockscout} + +[Blockscout](https://blockscout.com/) एक ओपन-सोर्स ब्लॉकचेन एक्सप्लोरर आहे जो हुशार करार डेव्हलपर्स आणि वापरकर्त्यांसाठी [करार पडताळणी सेवा](https://eth.blockscout.com/contract-verification) देखील प्रदान करतो. एक ओपन-सोर्स पर्याय म्हणून, Blockscout पडताळणी कशी केली जाते यामध्ये पारदर्शकता प्रदान करते आणि पडताळणी प्रक्रियेत सुधारणा करण्यासाठी समुदाय योगदान सक्षम करते. + +इतर पडताळणी सेवांप्रमाणेच, Blockscout तुम्हाला बाईटकोड पुन्हा संकलित करून आणि तैनात केलेल्या कराराशी त्याची तुलना करून तुमच्या कराराच्या सोर्स कोडची पडताळणी करण्याची परवानगी देतो. एकदा सत्यापित झाल्यावर, तुमच्या कराराला पडताळणी स्थिती प्राप्त होते आणि सोर्स कोड ऑडिटिंग आणि परस्परसंवादासाठी सार्वजनिकरित्या उपलब्ध होतो. सत्यापित करार सोप्या ब्राउझिंग आणि शोधासाठी Blockscout च्या [सत्यापित करार भांडारात](https://eth.blockscout.com/verified-contracts) देखील सूचीबद्ध आहेत. + +### Sourcify {#sourcify} + +[Sourcify](https://sourcify.dev/#/verifier) हे करार पडताळण्यासाठी आणखी एक साधन आहे जे ओपन-सोर्स आणि विकेंद्रित आहे. हा ब्लॉक एक्सप्लोरर नाही आणि तो फक्त [विविध EVM आधारित नेटवर्क्स](https://docs.sourcify.dev/docs/chains) वर करारांची पडताळणी करतो. हे इतर साधनांसाठी त्यावर तयार करण्यासाठी सार्वजनिक पायाभूत सुविधा म्हणून काम करते आणि मेटाडेटा फाइलमध्ये आढळलेल्या [ABI](/developers/docs/smart-contracts/compiling/#web-applications) आणि [NatSpec](https://docs.soliditylang.org/en/v0.8.15/natspec-format.html) टिप्पण्या वापरून अधिक मानवी-अनुकूल करार संवाद सक्षम करण्याचे उद्दिष्ट ठेवते. + +Etherscan च्या विपरीत, Sourcify मेटाडेटा हॅशसह पूर्ण जुळण्यांना समर्थन देते. सत्यापित करार HTTP आणि [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/#what-is-ipfs) वर त्याच्या [सार्वजनिक भांडारात](https://docs.sourcify.dev/docs/repository/) दिले जातात, जे एक विकेंद्रित, [कंटेंट-ॲड्रेस्ड](https://docs.storacha.network/concepts/content-addressing/) स्टोरेज आहे. हे IPFS वरून कराराची मेटाडेटा फाइल मिळविण्यास अनुमती देते कारण जोडलेला मेटाडेटा हॅश एक IPFS हॅश आहे. + +याव्यतिरिक्त, IPFS वरून सोर्स कोड फाइल्स देखील मिळवू शकतात, कारण या फाइल्सचे IPFS हॅश देखील मेटाडेटामध्ये आढळतात. त्याच्या API किंवा [UI](https://sourcify.dev/#/verifier) द्वारे मेटाडेटा फाइल आणि सोर्स फाइल्स प्रदान करून किंवा प्लगइन्स वापरून कराराची पडताळणी केली जाऊ शकते. Sourcify मॉनिटरिंग टूल नवीन ब्लॉक्सवर कराराच्या निर्मितीचे देखील ऐकते आणि जर त्यांचे मेटाडेटा आणि सोर्स फाइल्स IPFS वर प्रकाशित केल्या असतील तर करारांची पडताळणी करण्याचा प्रयत्न करते. + +[Sourcify वर करार पडताळणीबद्दल अधिक](https://soliditylang.org/blog/2020/06/25/sourcify-faq/). + +### Tenderly {#tenderly} + +[Tenderly प्लॅटफॉर्म](https://tenderly.co/) Web3 डेव्हलपर्सना हुशार करार तयार करण्यास, चाचणी करण्यास, निरीक्षण करण्यास आणि ऑपरेट करण्यास सक्षम करते. डीबगिंग साधनांना निरीक्षणक्षमता आणि पायाभूत सुविधांच्या बिल्डिंग ब्लॉक्ससह एकत्र करून, Tenderly डेव्हलपर्सना हुशार कराराचा विकास वेगवान करण्यास मदत करते. Tenderly ची वैशिष्ट्ये पूर्णपणे सक्षम करण्यासाठी, डेव्हलपर्सना अनेक पद्धती वापरून [सोर्स कोड पडताळणी करणे](https://docs.tenderly.co/monitoring/contract-verification) आवश्यक आहे. + +करार खाजगीरित्या किंवा सार्वजनिकरित्या सत्यापित करणे शक्य आहे. खाजगीरित्या सत्यापित केल्यास, हुशार करार फक्त तुम्हाला (आणि तुमच्या प्रकल्पातील इतर सदस्यांना) दिसेल. करार सार्वजनिकरित्या सत्यापित केल्याने तो Tenderly प्लॅटफॉर्म वापरणाऱ्या प्रत्येकाला दिसतो. + +तुम्ही [डॅशबोर्ड](https://docs.tenderly.co/contract-verification), [Tenderly Hardhat प्लगइन](https://docs.tenderly.co/contract-verification/hardhat), किंवा [CLI](https://docs.tenderly.co/monitoring/smart-contract-verification/verifying-contracts-using-cli) वापरून तुमच्या करारांची पडताळणी करू शकता. + +डॅशबोर्डद्वारे करार पडताळताना, तुम्हाला Solidity कंपाइलरद्वारे तयार केलेली सोर्स फाइल किंवा मेटाडेटा फाइल, ॲड्रेस/नेटवर्क, आणि कंपाइलर सेटिंग्ज आयात करणे आवश्यक आहे. + +Tenderly Hardhat प्लगइन वापरल्याने कमी प्रयत्नात पडताळणी प्रक्रियेवर अधिक नियंत्रण मिळते, ज्यामुळे तुम्हाला स्वयंचलित (नो-कोड) आणि मॅन्युअल (कोड-आधारित) पडताळणी यापैकी निवड करता येते. + +## पुढील वाचन {#further-reading} + +- [करार सोर्स कोडची पडताळणी करणे](https://programtheblockchain.com/posts/2018/01/16/verifying-contract-source-code/) diff --git a/public/content/translations/mr/developers/docs/standards/index.md b/public/content/translations/mr/developers/docs/standards/index.md new file mode 100644 index 00000000000..23dceeaf403 --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/index.md @@ -0,0 +1,59 @@ +--- +title: "इथेरियम विकास मानके" +description: "EIPs, ERC-20 आणि ERC-721 सारखी टोकन मानके आणि विकास रूढींसह इथेरियम मानकांबद्दल जाणून घ्या." +lang: mr +incomplete: true +--- + +## मानकांचे विहंगावलोकन {#standards-overview} + +इथेरियम समुदायाने अनेक मानके स्वीकारली आहेत जी ([इथेरियम क्लायंट](/developers/docs/nodes-and-clients/) आणि वॉलेट्स सारखे) प्रकल्प अंमलबजावणींमध्ये आंतरकार्यक्षम ठेवण्यास मदत करतात आणि स्मार्ट कॉन्ट्रॅक्ट्स आणि डॅप्स कंपोझेबल राहतील याची खात्री करतात. + +सामान्यतः मानके [इथेरियम सुधारणा प्रस्ताव](/eips/) (EIPs) म्हणून सादर केली जातात, ज्यावर समुदाय सदस्य [मानक प्रक्रियेद्वारे](https://eips.ethereum.org/EIPS/eip-1) चर्चा करतात. + +- [EIPs चा परिचय](/eips/) +- [EIPs ची सूची](https://eips.ethereum.org/) +- [EIP गिटहब रेपो](https://github.com/ethereum/EIPs) +- [EIP चर्चा मंडळ](https://ethereum-magicians.org/c/eips) +- [इथेरियम गव्हर्नन्सचा परिचय](/governance/) +- [इथेरियम गव्हर्नन्सचे विहंगावलोकन](https://web.archive.org/web/20201107234050/https://blog.bmannconsulting.com/ethereum-governance/) _31 मार्च, 2019 - बोरिस मॅन_ +- [इथेरियम प्रोटोकॉल विकास गव्हर्नन्स आणि नेटवर्क अपग्रेड समन्वय](https://hudsonjameson.com/posts/2020-03-23-ethereum-protocol-development-governance-and-network-upgrade-coordination/) _23 मार्च, 2020 - हडसन जेमिसन_ +- [सर्व इथेरियम कोअर डेव्ह बैठकांची प्लेलिस्ट](https://www.youtube.com/@EthereumProtocol) _(YouTube प्लेलिस्ट)_ + +## मानकांचे प्रकार {#types-of-standards} + +EIPs चे 3 प्रकार आहेत: + +- स्टँडर्ड्स ट्रॅक: बहुतेक किंवा सर्व इथेरियम अंमलबजावणींवर परिणाम करणाऱ्या कोणत्याही बदलाचे वर्णन करते +- [मेटा ट्रॅक](https://eips.ethereum.org/meta): इथेरियमच्या सभोवतालच्या प्रक्रियेचे वर्णन करते किंवा प्रक्रियेत बदल प्रस्तावित करते +- [माहितीपूर्ण ट्रॅक](https://eips.ethereum.org/informational): इथेरियम डिझाइन समस्येचे वर्णन करते किंवा इथेरियम समुदायाला सामान्य मार्गदर्शक तत्त्वे किंवा माहिती प्रदान करते + +शिवाय, स्टँडर्ड ट्रॅक 4 श्रेणींमध्ये विभागलेला आहे: + +- [कोअर](https://eips.ethereum.org/core): सहमती फोर्क आवश्यक असलेल्या सुधारणा +- [नेटवर्किंग](https://eips.ethereum.org/networking): devp2p आणि लाईट इथेरियम सबप्रोटोकॉलमधील सुधारणा, तसेच व्हिस्पर आणि स्वार्मच्या नेटवर्क प्रोटोकॉल तपशीलांसाठी प्रस्तावित सुधारणा. +- [इंटरफेस](https://eips.ethereum.org/interface): क्लायंट API/RPC तपशील आणि मानकांमधील सुधारणा, आणि मेथडची नावे आणि कॉन्ट्रॅक्ट ABI सारखी विशिष्ट भाषा-स्तरीय मानके. +- [ERC](https://eips.ethereum.org/erc): अनुप्रयोग-स्तरीय मानके आणि रूढी + +या विविध प्रकार आणि श्रेणींबद्दल अधिक तपशीलवार माहिती [EIP-1](https://eips.ethereum.org/EIPS/eip-1#eip-types) मध्ये आढळू शकते + +### टोकन मानके {#token-standards} + +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - फंजिबल (परस्पर बदलण्यायोग्य) टोकनसाठी एक मानक इंटरफेस, जसे की व्होटिंग टोकन, स्टेकिंग टोकन किंवा व्हर्च्युअल चलने. + - [ERC-223](/developers/docs/standards/tokens/erc-223/) - एक फंजिबल टोकन मानक जे टोकनला इथरसारखेच वागण्यास प्रवृत्त करते आणि प्राप्तकर्त्याच्या बाजूने टोकन हस्तांतरण हाताळण्यास समर्थन देते. + - [ERC-1363](/developers/docs/standards/tokens/erc-1363/) - ERC-20 टोकन्ससाठी एक विस्तार इंटरफेस जो एकाच व्यवहारात प्राप्तकर्ता करारांवर कॉलबॅक कार्यान्वित करण्यास समर्थन देतो. +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - नॉन-फंजिबल टोकनसाठी एक मानक इंटरफेस, जसे की कलाकृती किंवा गाण्यासाठी एक डीड. + - [ERC-2309](https://eips.ethereum.org/EIPS/eip-2309) - सलग टोकन आयडेंटिफायर्स वापरून एक किंवा अनेक नॉन-फंजिबल टोकन तयार/हस्तांतरित करताना उत्सर्जित होणारा एक प्रमाणित इव्हेंट. + - [ERC-4400](https://eips.ethereum.org/EIPS/eip-4400) - EIP-721 ग्राहक भूमिकेसाठी इंटरफेस विस्तार. + - [ERC-4907](https://eips.ethereum.org/EIPS/eip-4907) - ERC-721 टोकनमध्ये प्रतिबंधित परवानग्यांसह वेळ-मर्यादित भूमिका जोडा. +- [ERC-777](/developers/docs/standards/tokens/erc-777/) - **(शिफारस केलेले नाही)** ERC-20 पेक्षा सुधारित एक टोकन मानक. +- [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - एक टोकन मानक ज्यात फंजिबल आणि नॉन-फंजिबल दोन्ही मालमत्ता असू शकतात. +- [ERC-4626](/developers/docs/standards/tokens/erc-4626/) - यील्ड-बेअरिंग वॉल्ट्सचे तांत्रिक पॅरामीटर्स ऑप्टिमाइझ करण्यासाठी आणि एकत्रित करण्यासाठी डिझाइन केलेले एक टोकनाइज्ड वॉल्ट मानक. + +[टोकन मानकां](/developers/docs/standards/tokens/)बद्दल अधिक जाणून घ्या. + +## पुढील वाचन {#further-reading} + +- [इथेरियम सुधारणा प्रस्ताव (EIPs)](/eips/) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ diff --git a/public/content/translations/mr/developers/docs/standards/tokens/erc-1155/index.md b/public/content/translations/mr/developers/docs/standards/tokens/erc-1155/index.md new file mode 100644 index 00000000000..845f9e01626 --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/erc-1155/index.md @@ -0,0 +1,146 @@ +--- +title: "ERC-1155 मल्टी-टोकन स्टँडर्ड" +description: "ERC-1155 बद्दल जाणून घ्या, हे एक मल्टी-टोकन स्टँडर्ड आहे जे एकाच कॉन्ट्रॅक्टमध्ये फंजिबल आणि नॉन-फंजिबल टोकन एकत्र करते." +lang: mr +--- + +## प्रस्तावना {#introduction} + +अनेक टोकन प्रकारांचे व्यवस्थापन करणाऱ्या कॉन्ट्रॅक्टसाठी एक स्टँडर्ड इंटरफेस. एकाच तैनात केलेल्या कॉन्ट्रॅक्टमध्ये फंजिबल टोकन, नॉन-फंजिबल टोकन किंवा इतर कॉन्फिगरेशन्सचे (उदा., सेमी-फंजिबल टोकन) कोणतेही संयोजन समाविष्ट असू शकते. + +**मल्टी-टोकन स्टँडर्ड याचा अर्थ काय आहे?** + +ही कल्पना सोपी आहे आणि एक स्मार्ट कॉन्ट्रॅक्ट इंटरफेस तयार करण्याचा प्रयत्न करते जो कोणत्याही संख्येच्या फंजिबल आणि नॉन-फंजिबल टोकन प्रकारांचे प्रतिनिधित्व आणि नियंत्रण करू शकतो. या प्रकारे, ERC-1155 टोकन [ERC-20](/developers/docs/standards/tokens/erc-20/) आणि [ERC-721](/developers/docs/standards/tokens/erc-721/) टोकन सारखीच कार्ये करू शकते, आणि एकाच वेळी दोन्हीही करू शकते. हे ERC-20 आणि ERC-721 दोन्ही स्टँडर्डची कार्यक्षमता सुधारते, त्याला अधिक कार्यक्षम बनवते आणि स्पष्ट अंमलबजावणीतील चुका दुरुस्त करते. + +ERC-1155 टोकनचे पूर्ण वर्णन [EIP-1155](https://eips.ethereum.org/EIPS/eip-1155) मध्ये केले आहे. + +## पूर्वतयारी {#prerequisites} + +हे पेज अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [टोकन स्टँडर्ड](/developers/docs/standards/tokens/), [ERC-20](/developers/docs/standards/tokens/erc-20/), आणि [ERC-721](/developers/docs/standards/tokens/erc-721/) बद्दल वाचा. + +## ERC-1155 फंक्शन्स आणि वैशिष्ट्ये: {#body} + +- [बॅच ट्रान्सफर](#batch_transfers): एकाच कॉलमध्ये एकाधिक मालमत्ता हस्तांतरित करा. +- [बॅच बॅलन्स](#batch_balance): एकाच कॉलमध्ये एकाधिक मालमत्तांची शिल्लक मिळवा. +- [बॅच अप्रूव्हल](#batch_approval): सर्व टोकन एका अॅड्रेससाठी मंजूर करा. +- [हुक्स](#receive_hook): टोकन प्राप्त करण्यासाठी हुक. +- [NFT सपोर्ट](#nft_support): पुरवठा फक्त 1 असल्यास, त्याला NFT म्हणून माना. +- [सुरक्षित हस्तांतरण नियम](#safe_transfer_rule): सुरक्षित हस्तांतरणासाठी नियमांचा संच. + +### बॅच ट्रान्सफर {#batch-transfers} + +बॅच हस्तांतरण नियमित ERC-20 हस्तांतरणासारखेच कार्य करते. चला नियमित ERC-20 `transferFrom` फंक्शन पाहूया: + +```solidity +// ERC-20 +function transferFrom(address from, address to, uint256 value) external returns (bool); + +// ERC-1155 +function safeBatchTransferFrom( + address _from, + address _to, + uint256[] calldata _ids, + uint256[] calldata _values, + bytes calldata _data +) external; +``` + +ERC-1155 मध्ये फक्त फरक हा आहे की आपण व्हॅल्यूज एका अॅरे म्हणून पास करतो आणि आपण आयडींचा अॅरे देखील पास करतो. उदाहरणार्थ, `ids=[3, 6, 13]` आणि `values=[100, 200, 5]` दिल्यास, परिणामी हस्तांतरणे अशी असतील + +1. `_from` पासून `_to` कडे आयडी 3 असलेले 100 टोकन हस्तांतरित करा. +2. `_from` पासून `_to` कडे आयडी 6 असलेले 200 टोकन हस्तांतरित करा. +3. `_from` पासून `_to` कडे आयडी 13 असलेले 5 टोकन हस्तांतरित करा. + +ERC-1155 मध्ये आपल्याकडे फक्त `transferFrom` आहे, `transfer` नाही. याचा नियमित `transfer` सारखा वापर करण्यासाठी, फक्त 'from' अॅड्रेस फंक्शन कॉल करणाऱ्या अॅड्रेसवर सेट करा. + +### बॅच बॅलन्स {#batch-balance} + +संबंधित ERC-20 `balanceOf` कॉलला देखील बॅच सपोर्टसह त्याचे पार्टनर फंक्शन आहे. एक आठवण म्हणून, ही ERC-20 आवृत्ती आहे: + +```solidity +// ERC-20 +function balanceOf(address owner) external view returns (uint256); + +// ERC-1155 +function balanceOfBatch( + address[] calldata _owners, + uint256[] calldata _ids +) external view returns (uint256[] memory); +``` + +बॅलन्स कॉलसाठी आणखी सोपे, आपण एकाच कॉलमध्ये एकाधिक बॅलन्स मिळवू शकतो. आपण ओनर्सचा अॅरे पास करतो, आणि त्यानंतर टोकन आयडींचा अॅरे पास करतो. + +उदाहरणार्थ `_ids=[3, 6, 13]` आणि `_owners=[0xbeef..., 0x1337..., 0x1111...]` दिल्यास, रिटर्न व्हॅल्यू अशी असेल + +```solidity +[ + balanceOf(0xbeef...), + balanceOf(0x1337...), + balanceOf(0x1111...) +] +``` + +### बॅच अप्रूव्हल {#batch-approval} + +```solidity +// ERC-1155 +function setApprovalForAll( + address _operator, + bool _approved +) external; + +function isApprovedForAll( + address _owner, + address _operator +) external view returns (bool); +``` + +मंजुरी ERC-20 पेक्षा थोड्या वेगळ्या आहेत. विशिष्ट रकमेला मंजुरी देण्याऐवजी, तुम्ही `setApprovalForAll` द्वारे ऑपरेटरला मंजूर किंवा नामंजूर म्हणून सेट करता. + +सध्याची स्थिती `isApprovedForAll` द्वारे वाचता येते. तुम्ही पाहू शकता की, हे एक 'ऑल-ऑर-नथिंग' ऑपरेशन आहे. तुम्ही किती टोकन मंजूर करायचे किंवा कोणता टोकन वर्ग मंजूर करायचा हे परिभाषित करू शकत नाही. + +हे सोपेपणा लक्षात घेऊन हेतुपुरस्सर डिझाइन केले आहे. तुम्ही फक्त एका अॅड्रेससाठी सर्वकाही मंजूर करू शकता. + +### रिसीव्ह हुक {#receive-hook} + +```solidity +function onERC1155BatchReceived( + address _operator, + address _from, + uint256[] calldata _ids, + uint256[] calldata _values, + bytes calldata _data +) external returns(bytes4); +``` + +[EIP-165](https://eips.ethereum.org/EIPS/eip-165) सपोर्टमुळे, ERC-1155 केवळ स्मार्ट कॉन्ट्रॅक्ट्ससाठी रिसीव्ह हुक्सना सपोर्ट करते. हुक फंक्शनने एक मॅजिक पूर्वनिर्धारित bytes4 व्हॅल्यू परत करणे आवश्यक आहे, जे खालीलप्रमाणे दिले आहे: + +```solidity +bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)")) +``` + +जेव्हा प्राप्त करणारा कॉन्ट्रॅक्ट ही व्हॅल्यू परत करतो, तेव्हा असे मानले जाते की कॉन्ट्रॅक्ट हस्तांतरण स्वीकारतो आणि ERC-1155 टोकन कसे हाताळायचे हे त्याला माहीत आहे. उत्तम, आता कॉन्ट्रॅक्टमध्ये टोकन अडकणार नाहीत! + +### NFT सपोर्ट {#nft-support} + +जेव्हा पुरवठा फक्त एक असतो, तेव्हा टोकन मूलतः एक नॉन-फंजिबल टोकन (NFT) असते. आणि जसे ERC-721 साठी स्टँडर्ड आहे, तुम्ही मेटाडेटा URL परिभाषित करू शकता. URL क्लायंटद्वारे वाचता आणि सुधारित करता येतो, [येथे](https://eips.ethereum.org/EIPS/eip-1155#metadata) पहा. + +### सुरक्षित हस्तांतरण नियम {#safe-transfer-rule} + +आपण मागील स्पष्टीकरणांमध्ये आधीच काही सुरक्षित हस्तांतरण नियमांवर चर्चा केली आहे. पण चला सर्वात महत्त्वाच्या नियमांवर नजर टाकूया: + +1. कॉलरला `_from` अॅड्रेससाठी टोकन खर्च करण्याची परवानगी असणे आवश्यक आहे किंवा कॉलर स्वतः `_from` असणे आवश्यक आहे. +2. हस्तांतरण कॉल रिव्हर्ट होणे आवश्यक आहे जर + 1. `_to` अॅड्रेस 0 आहे. + 2. `_ids` ची लांबी `_values` च्या लांबी समान नाही. + 3. `_ids` मधील टोकनसाठी धारकाची कोणतीही शिल्लक प्राप्तकर्त्याला पाठवलेल्या `_values` मधील संबंधित रकमेपेक्षा कमी असेल. + 4. इतर कोणतीही त्रुटी उद्भवल्यास. + +_टीप_: हुकसह सर्व बॅच फंक्शन्स बॅचशिवाय आवृत्त्या म्हणून देखील अस्तित्वात आहेत. हे गॅस कार्यक्षमतेसाठी केले जाते, कारण फक्त एक मालमत्ता हस्तांतरित करणे हाच बहुधा सर्वाधिक वापरला जाणारा मार्ग असेल. स्पष्टीकरणांमध्ये सोपेपणासाठी आम्ही त्यांना वगळले आहे, यात सुरक्षित हस्तांतरण नियमांचाही समावेश आहे. नावे सारखीच आहेत, फक्त 'Batch' काढून टाका. + +## पुढील वाचन {#further-reading} + +- [EIP-1155: मल्टी टोकन स्टँडर्ड](https://eips.ethereum.org/EIPS/eip-1155) +- [ERC-1155: Openzeppelin डॉक्स](https://docs.openzeppelin.com/contracts/5.x/erc1155) +- [ERC-1155: GitHub रेपो](https://github.com/enjin/erc-1155) +- [Alchemy NFT API](https://www.alchemy.com/docs/reference/nft-api-quickstart) diff --git a/public/content/translations/mr/developers/docs/standards/tokens/erc-1363/index.md b/public/content/translations/mr/developers/docs/standards/tokens/erc-1363/index.md new file mode 100644 index 00000000000..802af57b95e --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/erc-1363/index.md @@ -0,0 +1,212 @@ +--- +title: "ERC-1363 पेयबल टोकन मानक" +description: "ERC-1363 हा ERC-20 टोकनसाठी एक एक्सटेंशन इंटरफेस आहे जो हस्तांतरणानंतर प्राप्तकर्त्याच्या करारावर किंवा मंजुरीनंतर खर्च करणाऱ्याच्या करारावर, सर्व काही एकाच व्यवहारामध्ये, कस्टम लॉजिक कार्यान्वित करण्यास समर्थन देतो." +lang: mr +--- + +## प्रस्तावना {#introduction} + +### ERC-1363 म्हणजे काय? {#what-is-erc1363} + +ERC-1363 हा ERC-20 टोकनसाठी एक एक्सटेंशन इंटरफेस आहे जो हस्तांतरणानंतर प्राप्तकर्त्याच्या करारावर किंवा मंजुरीनंतर खर्च करणाऱ्याच्या करारावर, सर्व काही एकाच व्यवहारामध्ये, कस्टम लॉजिक कार्यान्वित करण्यास समर्थन देतो. + +### ERC-20 मधील फरक {#erc20-differences} + +`transfer`, `transferFrom` आणि `approve` यासारख्या मानक ERC-20 ऑपरेशन्स स्वतंत्र व्यवहाराशिवाय प्राप्तकर्ता किंवा खर्च करणाऱ्या करारावर कोड अंमलबजावणीस परवानगी देत नाहीत. +यामुळे UI विकासात गुंतागुंत निर्माण होते आणि अवलंब करण्यामध्ये अडथळा येतो कारण वापरकर्त्यांना पहिला व्यवहार कार्यान्वित होण्याची वाट पाहावी लागते आणि मग दुसरा व्यवहार सबमिट करावा लागतो. +त्यांना दोनदा GAS देखील भरावा लागतो. + +ERC-1363 फंजिबल टोकनला अधिक सहजपणे क्रिया करण्यास आणि कोणत्याही ऑफ-चेन लिसनरचा वापर न करता काम करण्यास सक्षम बनवते. +हे हस्तांतरण किंवा मंजुरीनंतर, एकाच व्यवहारामध्ये, रिसीव्हर किंवा स्पेंडर करारावर कॉलबॅक करण्याची परवानगी देते. + +## पूर्वतयारी {#prerequisites} + +हे पान अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम याबद्दल वाचा: + +- [टोकन मानके](/developers/docs/standards/tokens/) +- [ERC-20](/developers/docs/standards/tokens/erc-20/) + +## मुख्य भाग {#body} + +ERC-1363, `transfer`, `transferFrom` किंवा `approve` नंतर ERC-20 टोकनला स्मार्ट करारांशी संवाद साधण्यासाठी एक मानक API सादर करते. + +हे मानक टोकन हस्तांतरित करण्यासाठी मूलभूत कार्यक्षमता प्रदान करते, तसेच टोकनला मंजूर करण्याची परवानगी देते जेणेकरून ते दुसऱ्या ऑन-चेन तृतीय पक्षाद्वारे खर्च केले जाऊ शकतात, आणि नंतर रिसीव्हर किंवा स्पेंडर करारावर कॉलबॅक करते. + +ERC-20 कॉलबॅक स्वीकारू शकणार्‍या स्मार्ट करारांचे अनेक प्रस्तावित उपयोग आहेत. + +उदाहरणे असू शकतात: + +- **क्राउडसेल्स**: पाठवलेले टोकन त्वरित रिवॉर्ड वाटप सुरू करतात. +- **सेवा**: पेमेंट एकाच टप्प्यात सेवा प्रवेश सक्रिय करते. +- **इन्व्हॉइसेस**: टोकन आपोआप इन्व्हॉइसेस सेटल करतात. +- **सबस्क्रिप्शन्स**: वार्षिक दराला मंजुरी दिल्याने पहिल्या महिन्याच्या पेमेंटमध्येच सबस्क्रिप्शन सक्रिय होते. + +या कारणांमुळे याला मूळतः **"पेयबल टोकन"** असे नाव देण्यात आले होते. + +कॉलबॅक वर्तणूक त्याची उपयुक्तता आणखी वाढवते, ज्यामुळे यांसारखे अखंड संवाद सक्षम होतात: + +- **स्टेकिंग**: हस्तांतरित केलेले टोकन स्टेकिंग करारामध्ये स्वयंचलित लॉकिंग सुरू करतात. +- **मतदान**: प्राप्त झालेले टोकन प्रशासन प्रणालीमध्ये मते नोंदवतात. +- **स्वॅपिंग**: टोकन मान्यता एकाच टप्प्यात स्वॅप लॉजिक सक्रिय करतात. + +ERC-1363 टोकन सर्व प्रकरणांमध्ये विशिष्ट उपयुक्ततांसाठी वापरले जाऊ शकतात, ज्यात हस्तांतरण किंवा मंजुरी मिळाल्यानंतर कॉलबॅक कार्यान्वित करणे आवश्यक असते. +प्राप्तकर्त्याच्या टोकन हाताळण्याच्या क्षमतेची पडताळणी करून स्मार्ट करारांमध्ये टोकनचे नुकसान किंवा टोकन लॉकिंग टाळण्यासाठी ERC-1363 उपयुक्त आहे. + +इतर ERC-20 एक्सटेंशन प्रस्तावांच्या विपरीत, ERC-1363 हे ERC-20 `transfer` आणि `transferFrom` पद्धतींना ओव्हरराइड करत नाही आणि ERC-20 सह बॅकवर्ड सुसंगतता राखून अंमलबजावणीसाठी इंटरफेस आयडी परिभाषित करते. + +[EIP-1363](https://eips.ethereum.org/EIPS/eip-1363) वरून: + +### मेथड्स {#methods} + +ERC-1363 मानक लागू करणाऱ्या स्मार्ट करारांनी `ERC1363` इंटरफेसमधील सर्व फंक्शन्स, तसेच `ERC20` आणि `ERC165` इंटरफेस **अवश्य** लागू केले पाहिजेत. + +```solidity +pragma solidity ^0.8.0; + +/** + * @title ERC1363 + * @dev ERC-20 टोकनसाठी एक एक्सटेंशन इंटरफेस जो `transfer` किंवा `transferFrom` नंतर प्राप्तकर्ता करारावर कोड कार्यान्वित करण्यास, किंवा `approve` नंतर स्पेंडर करारावर कोड कार्यान्वित करण्यास समर्थन देतो, हे सर्व एकाच व्यवहारामध्ये. + */ +interface ERC1363 is ERC20, ERC165 { + /* + * टीप: या इंटरफेससाठी ERC-165 आयडेंटिफायर 0xb0202a11 आहे. + * 0xb0202a11 === + * bytes4(keccak256('transferAndCall(address,uint256)')) ^ + * bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^ + * bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256)')) ^ + * bytes4(keccak256('approveAndCall(address,uint256,bytes)')) + */ + + /** + * @dev कॉलरच्या खात्यातून `to` कडे `value` रकमेचे टोकन हलवते + * आणि नंतर `to` वर `ERC1363Receiver::onTransferReceived` कॉल करते. + * @param to तो पत्ता जिथे टोकन हस्तांतरित केले जात आहेत. + * @param value हस्तांतरित करायच्या टोकनची रक्कम. + * @return एक बुलियन मूल्य जे ऑपरेशन यशस्वी झाले असल्याचे दर्शवते, एरर थ्रो न केल्यास. + */ + function transferAndCall(address to, uint256 value) external returns (bool); + + /** + * @dev कॉलरच्या खात्यातून `to` कडे `value` रकमेचे टोकन हलवते + * आणि नंतर `to` वर `ERC1363Receiver::onTransferReceived` कॉल करते. + * @param to तो पत्ता जिथे टोकन हस्तांतरित केले जात आहेत. + * @param value हस्तांतरित करायच्या टोकनची रक्कम. + * @param data अतिरिक्त डेटा, ज्याचे कोणतेही विशिष्ट स्वरूप नाही, `to` ला कॉलमध्ये पाठवला जातो. + * @return एक बुलियन मूल्य जे ऑपरेशन यशस्वी झाले असल्याचे दर्शवते, एरर थ्रो न केल्यास. + */ + function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev अलाउन्स मेकॅनिझम वापरून `from` कडून `to` कडे `value` रकमेचे टोकन हलवते + * आणि नंतर `to` वर `ERC1363Receiver::onTransferReceived` कॉल करते. + * @param from तो पत्ता जिथून टोकन पाठवायचे आहेत. + * @param to तो पत्ता जिथे टोकन हस्तांतरित केले जात आहेत. + * @param value हस्तांतरित करायच्या टोकनची रक्कम. + * @return एक बुलियन मूल्य जे ऑपरेशन यशस्वी झाले असल्याचे दर्शवते, एरर थ्रो न केल्यास. + */ + function transferFromAndCall(address from, address to, uint256 value) external returns (bool); + + /** + * @dev अलाउन्स मेकॅनिझम वापरून `from` कडून `to` कडे `value` रकमेचे टोकन हलवते + * आणि नंतर `to` वर `ERC1363Receiver::onTransferReceived` कॉल करते. + * @param from तो पत्ता जिथून टोकन पाठवायचे आहेत. + * @param to तो पत्ता जिथे टोकन हस्तांतरित केले जात आहेत. + * @param value हस्तांतरित करायच्या टोकनची रक्कम. + * @param data अतिरिक्त डेटा, ज्याचे कोणतेही विशिष्ट स्वरूप नाही, `to` ला कॉलमध्ये पाठवला जातो. + * @return एक बुलियन मूल्य जे ऑपरेशन यशस्वी झाले असल्याचे दर्शवते, एरर थ्रो न केल्यास. + */ + function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool); + + /** + * @dev कॉलरच्या टोकनवर `spender` च्या अलाउन्स म्हणून `value` रकमेचे टोकन सेट करते + * आणि नंतर `spender` वर `ERC1363Spender::onApprovalReceived` कॉल करते. + * @param spender तो पत्ता जो निधी खर्च करेल. + * @param value खर्च करायच्या टोकनची रक्कम. + * @return एक बुलियन मूल्य जे ऑपरेशन यशस्वी झाले असल्याचे दर्शवते, एरर थ्रो न केल्यास. + */ + function approveAndCall(address spender, uint256 value) external returns (bool); + + /** + * @dev कॉलरच्या टोकनवर `spender` च्या अलाउन्स म्हणून `value` रकमेचे टोकन सेट करते + * आणि नंतर `spender` वर `ERC1363Spender::onApprovalReceived` कॉल करते. + * @param spender तो पत्ता जो निधी खर्च करेल. + * @param value खर्च करायच्या टोकनची रक्कम. + * @param data अतिरिक्त डेटा, ज्याचे कोणतेही विशिष्ट स्वरूप नाही, `spender` ला कॉलमध्ये पाठवला जातो. + * @return एक बुलियन मूल्य जे ऑपरेशन यशस्वी झाले असल्याचे दर्शवते, एरर थ्रो न केल्यास. + */ + function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); +} + +interface ERC20 { + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); + function transfer(address to, uint256 value) external returns (bool); + function transferFrom(address from, address to, uint256 value) external returns (bool); + function approve(address spender, uint256 value) external returns (bool); + function totalSupply() external view returns (uint256); + function balanceOf(address account) external view returns (uint256); + function allowance(address owner, address spender) external view returns (uint256); +} + +interface ERC165 { + function supportsInterface(bytes4 interfaceId) external view returns (bool); +} +``` + +`transferAndCall` किंवा `transferFromAndCall` द्वारे ERC-1363 टोकन स्वीकारू इच्छिणाऱ्या स्मार्ट कराराने `ERC1363Receiver` इंटरफेस **अवश्य** लागू केला पाहिजे: + +```solidity +/** + * @title ERC1363Receiver + * @dev कोणत्याही करारासाठी इंटरफेस जो ERC-1363 टोकन करारांमधून `transferAndCall` किंवा `transferFromAndCall` ला समर्थन देऊ इच्छितो. + */ +interface ERC1363Receiver { + /** + * @dev जेव्हा ERC-1363 टोकन `operator` द्वारे `from` कडून `ERC1363::transferAndCall` किंवा `ERC1363::transferFromAndCall` द्वारे या करारावर हस्तांतरित केले जातात, + * तेव्हा हे फंक्शन कॉल केले जाते. + * + * टीप: हस्तांतरण स्वीकारण्यासाठी, याने हे परत केले पाहिजे + * `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` + * (म्हणजे 0x88a7ca5c, किंवा त्याचे स्वतःचे फंक्शन सिलेक्टर). + * + * @param operator तो पत्ता ज्याने `transferAndCall` किंवा `transferFromAndCall` फंक्शन कॉल केले. + * @param from तो पत्ता जिथून टोकन हस्तांतरित केले आहेत. + * @param value हस्तांतरित केलेल्या टोकनची रक्कम. + * @param data कोणत्याही विशिष्ट स्वरूपाशिवाय अतिरिक्त डेटा. + * @return `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))` जर हस्तांतरणास परवानगी असेल, एरर थ्रो न केल्यास. + */ + function onTransferReceived(address operator, address from, uint256 value, bytes calldata data) external returns (bytes4); +} +``` + +`approveAndCall` द्वारे ERC-1363 टोकन स्वीकारू इच्छिणाऱ्या स्मार्ट कराराने `ERC1363Spender` इंटरफेस **अवश्य** लागू केला पाहिजे: + +```solidity +/** + * @title ERC1363Spender + * @dev कोणत्याही करारासाठी इंटरफेस जो ERC-1363 टोकन करारांमधून `approveAndCall` ला समर्थन देऊ इच्छितो. + */ +interface ERC1363Spender { + /** + * @dev जेव्हा एखादा ERC-1363 टोकनचा `owner` `ERC1363::approveAndCall` द्वारे या कराराला + * त्यांचे टोकन खर्च करण्यासाठी मंजूर करतो, तेव्हा हे फंक्शन कॉल केले जाते. + * + * टीप: मंजुरी स्वीकारण्यासाठी, याने हे परत केले पाहिजे + * `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` + * (म्हणजे 0x7b04a2d0, किंवा त्याचे स्वतःचे फंक्शन सिलेक्टर). + * + * @param owner तो पत्ता ज्याने `approveAndCall` फंक्शन कॉल केले आणि जो पूर्वी टोकनचा मालक होता. + * @param value खर्च करायच्या टोकनची रक्कम. + * @param data कोणत्याही विशिष्ट स्वरूपाशिवाय अतिरिक्त डेटा. + * @return `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))` जर मंजुरीस परवानगी असेल, एरर थ्रो न केल्यास. + */ + function onApprovalReceived(address owner, uint256 value, bytes calldata data) external returns (bytes4); +} +``` + +## पुढील वाचन {#further-reading} + +- [ERC-1363: पेयबल टोकन मानक](https://eips.ethereum.org/EIPS/eip-1363) +- [ERC-1363: GitHub रेपो](https://github.com/vittominacori/erc1363-payable-token) diff --git a/public/content/translations/mr/developers/docs/standards/tokens/erc-20/index.md b/public/content/translations/mr/developers/docs/standards/tokens/erc-20/index.md new file mode 100644 index 00000000000..9677e584cd5 --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/erc-20/index.md @@ -0,0 +1,186 @@ +--- +title: "ERC-20 टोकन मानक" +description: "ERC-20 बद्दल जाणून घ्या, Ethereum वरील फंजिबल टोकन्ससाठीचे मानक जे इंटरऑपरेबल टोकन ऍप्लिकेशन्सना सक्षम करते." +lang: mr +--- + +## प्रस्तावना {#introduction} + +**टोकन म्हणजे काय?** + +Ethereum मध्ये टोकन्स अक्षरशः काहीही दर्शवू शकतात: + +- ऑनलाइन प्लॅटफॉर्ममधील प्रतिष्ठेचे गुण +- गेममधील कॅरॅक्टरची कौशल्ये +- कंपनीमधील शेअरसारखी आर्थिक मालमत्ता +- USD सारखे फियाट चलन +- एक औंस सोने +- आणि बरेच काही... + +Ethereum चे इतके शक्तिशाली वैशिष्ट्य एका मजबूत मानकाद्वारे हाताळले जाणे आवश्यक आहे, बरोबर? अगदी इथेच ERC-20 आपली भूमिका बजावते! हे मानक डेव्हलपर्सना असे टोकन ऍप्लिकेशन्स बनविण्याची परवानगी देते जे इतर उत्पादने आणि सेवांसह इंटरऑपरेबल आहेत. ERC-20 मानकाचा वापर [ether](/glossary/#ether) ला अतिरिक्त कार्यक्षमता प्रदान करण्यासाठी देखील केला जातो. + +**ERC-20 म्हणजे काय?** + +ERC-20 फंजिबल टोकन्ससाठी एक मानक सादर करते, दुसऱ्या शब्दांत, त्यांच्याकडे एक वैशिष्ट्य आहे जे प्रत्येक टोकनला दुसऱ्या टोकनसारखेच (प्रकार आणि मूल्यात) बनवते. उदाहरणार्थ, ERC-20 टोकन ETH प्रमाणेच कार्य करते, याचा अर्थ असा की 1 टोकन इतर सर्व टोकन्सच्या समान आहे आणि नेहमीच असेल. + +## पूर्वतयारी {#prerequisites} + +- [खाती](/developers/docs/accounts) +- [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) +- [टोकन मानके](/developers/docs/standards/tokens/) + +## मुख्य भाग {#body} + +ERC-20 (Ethereum Request for Comments 20), नोव्हेंबर 2015 मध्ये फॅबियन व्होगेलस्टेलर यांनी प्रस्तावित केले, हे एक टोकन मानक आहे जे स्मार्ट कॉन्ट्रॅक्ट्समधील टोकन्ससाठी API लागू करते. + +ERC-20 द्वारे प्रदान केलेल्या उदाहरण कार्यक्षमता: + +- एका खात्यातून दुसऱ्या खात्यात टोकन हस्तांतरित करणे +- खात्यातील सध्याची टोकन शिल्लक मिळवणे +- नेटवर्कवर उपलब्ध असलेल्या टोकनचा एकूण पुरवठा मिळवणे +- एखाद्या खात्यातील टोकनची रक्कम तृतीय-पक्ष खात्याद्वारे खर्च केली जाऊ शकते की नाही हे मंजूर करणे + +जर एखादे स्मार्ट कॉन्ट्रॅक्ट खालील पद्धती आणि इव्हेंट्स लागू करत असेल, तर त्याला ERC-20 टोकन कॉन्ट्रॅक्ट म्हटले जाऊ शकते आणि एकदा तैनात केल्यावर ते Ethereum वर तयार केलेल्या टोकन्सचा मागोवा ठेवण्यासाठी जबाबदार असेल. + +[EIP-20](https://eips.ethereum.org/EIPS/eip-20) वरून: + +### मेथड्स {#methods} + +```solidity +function name() public view returns (string) +function symbol() public view returns (string) +function decimals() public view returns (uint8) +function totalSupply() public view returns (uint256) +function balanceOf(address _owner) public view returns (uint256 balance) +function transfer(address _to, uint256 _value) public returns (bool success) +function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) +function approve(address _spender, uint256 _value) public returns (bool success) +function allowance(address _owner, address _spender) public view returns (uint256 remaining) +``` + +### इव्हेंट्स {#events} + +```solidity +event Transfer(address indexed _from, address indexed _to, uint256 _value) +event Approval(address indexed _owner, address indexed _spender, uint256 _value) +``` + +### उदाहरणे {#web3py-example} + +चला पाहूया की Ethereum वरील कोणत्याही ERC-20 टोकन कॉन्ट्रॅक्टची तपासणी करणे आपल्यासाठी सोपे करण्यासाठी एक मानक किती महत्त्वाचे आहे. +कोणत्याही ERC-20 टोकनसाठी इंटरफेस तयार करण्यासाठी आपल्याला फक्त कॉन्ट्रॅक्ट ऍप्लिकेशन बायनरी इंटरफेस (ABI) ची आवश्यकता आहे. तुम्ही खाली पाहू शकता की आम्ही एक सरलीकृत ABI वापरणार आहोत, जेणेकरून हे एक कमी घर्षणाचे उदाहरण बनेल. + +#### Web3.py उदाहरण {#web3py-example} + +प्रथम, आपण [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python लायब्ररी स्थापित केली असल्याची खात्री करा: + +``` +pip install web3 +``` + +```python +from web3 import Web3 + + +w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) + +dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI +weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # रॅप्ड इथर (WETH) + +acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 2 + +# हा ERC-20 टोकन कॉन्ट्रॅक्टचा एक सरलीकृत कॉन्ट्रॅक्ट ऍप्लिकेशन बायनरी इंटरफेस (ABI) आहे. +# हे फक्त balanceOf(address), decimals(), symbol() आणि totalSupply() या पद्धती उघड करेल +simplified_abi = [ + { + 'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}], + 'name': 'balanceOf', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'decimals', + 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'symbol', + 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'totalSupply', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + } +] + +dai_contract = w3.eth.contract(address=w3.to_checksum_address(dai_token_addr), abi=simplified_abi) +symbol = dai_contract.functions.symbol().call() +decimals = dai_contract.functions.decimals().call() +totalSupply = dai_contract.functions.totalSupply().call() / 10**decimals +addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals + +# DAI +print("===== %s =====" % symbol) +print("Total Supply:", totalSupply) +print("Addr Balance:", addr_balance) + +weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi) +symbol = weth_contract.functions.symbol().call() +decimals = weth_contract.functions.decimals().call() +totalSupply = weth_contract.functions.totalSupply().call() / 10**decimals +addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals + +# WETH +print("===== %s =====" % symbol) +print("Total Supply:", totalSupply) +print("Addr Balance:", addr_balance) +``` + +## ज्ञात समस्या {#erc20-issues} + +### ERC-20 टोकन स्वीकृतीची समस्या {#reception-issue} + +**06/20/2024 पर्यंत, या समस्येमुळे किमान $83,656,418 किमतीचे ERC-20 टोकन गमावले गेले आहेत. लक्षात घ्या की शुद्ध ERC-20 अंमलबजावणी या समस्येस बळी पडू शकते, जोपर्यंत तुम्ही खाली सूचीबद्ध केल्यानुसार मानकाच्या वर अतिरिक्त निर्बंधांचा संच लागू करत नाही.** + +जेव्हा ERC-20 टोकन्स अशा स्मार्ट कॉन्ट्रॅक्टला पाठवले जातात जे ERC-20 टोकन्स हाताळण्यासाठी डिझाइन केलेले नाहीत, तेव्हा ते टोकन्स कायमचे गमावले जाऊ शकतात. हे घडते कारण प्राप्त करणाऱ्या कॉन्ट्रॅक्टमध्ये येणाऱ्या टोकन्सना ओळखण्याची किंवा प्रतिसाद देण्याची कार्यक्षमता नसते आणि ERC-20 मानकामध्ये प्राप्त करणाऱ्या कॉन्ट्रॅक्टला येणाऱ्या टोकन्सबद्दल सूचित करण्याची कोणतीही यंत्रणा नसते. ही समस्या मुख्यत्वे खालील मार्गांनी स्वरूप घेते: + +1. टोकन हस्तांतरण यंत्रणा + +- ERC-20 टोकन transfer किंवा transferFrom फंक्शन्स वापरून हस्तांतरित केले जातात + - जेव्हा एखादा वापरकर्ता या फंक्शन्सचा वापर करून कॉन्ट्रॅक्ट पत्त्यावर टोकन पाठवतो, तेव्हा प्राप्त करणारा कॉन्ट्रॅक्ट ते हाताळण्यासाठी डिझाइन केलेला आहे की नाही याची पर्वा न करता टोकन हस्तांतरित केले जातात + +2. सूचनेचा अभाव + - प्राप्त करणाऱ्या कॉन्ट्रॅक्टला टोकन पाठवले गेल्याची सूचना किंवा कॉलबॅक मिळत नाही + - जर प्राप्त करणाऱ्या कॉन्ट्रॅक्टमध्ये टोकन हाताळण्यासाठी यंत्रणेचा अभाव असेल (उदा. फॉलबॅक फंक्शन किंवा टोकन स्वीकृती व्यवस्थापित करण्यासाठी एक समर्पित फंक्शन), तर टोकन प्रभावीपणे कॉन्ट्रॅक्टच्या पत्त्यावर अडकून पडतात +3. अंगभूत हाताळणी नाही + - ERC-20 मानकामध्ये प्राप्त करणाऱ्या कॉन्ट्रॅक्ट्ससाठी लागू करण्यासाठी कोणतेही अनिवार्य फंक्शन समाविष्ट नाही, ज्यामुळे अनेक कॉन्ट्रॅक्ट्स येणाऱ्या टोकन्सचे योग्यरित्या व्यवस्थापन करण्यास असमर्थ ठरतात + +**संभाव्य उपाय** + +जरी ERC-20 सह ही समस्या पूर्णपणे टाळणे शक्य नसले तरी, अशा पद्धती आहेत ज्यामुळे अंतिम वापरकर्त्यासाठी टोकन गमावण्याची शक्यता लक्षणीयरीत्या कमी होऊ शकते: + +- सर्वात सामान्य समस्या म्हणजे जेव्हा वापरकर्ता टोकन कॉन्ट्रॅक्टच्या पत्त्यावरच टोकन पाठवतो (उदा. USDT टोकन कॉन्ट्रॅक्टच्या पत्त्यावर जमा केलेले USDT). अशा हस्तांतरणाच्या प्रयत्नांना परत फिरवण्यासाठी `transfer(..)` फंक्शन प्रतिबंधित करण्याची शिफारस केली जाते. `transfer(..)` फंक्शनच्या अंमलबजावणीमध्ये `require(_to != address(this));` तपासणी जोडण्याचा विचार करा. +- `transfer(..)` फंक्शन सर्वसाधारणपणे कॉन्ट्रॅक्ट्समध्ये टोकन जमा करण्यासाठी डिझाइन केलेले नाही. `approve(..) आणि transferFrom(..)` पॅटर्नचा वापर त्याऐवजी ERC-20 टोकन कॉन्ट्रॅक्ट्समध्ये जमा करण्यासाठी केला जातो. ट्रान्सफर फंक्शनला कोणत्याही कॉन्ट्रॅक्टमध्ये टोकन जमा करण्यास मनाई करण्यासाठी प्रतिबंधित करणे शक्य आहे, तथापि ते `trasnfer(..)` फंक्शनसह कॉन्ट्रॅक्टमध्ये टोकन जमा केले जाऊ शकतात असे गृहीत धरणाऱ्या कॉन्ट्रॅक्ट्ससह (उदा. Uniswap लिक्विडिटी पूल्स) सुसंगतता खंडित करू शकते. +- तुमच्या कॉन्ट्रॅक्टला कधीही कोणतेही टोकन मिळणे अपेक्षित नसले तरी, ERC-20 टोकन तुमच्या कॉन्ट्रॅक्टमध्ये येऊ शकतात असे नेहमी गृहीत धरा. प्राप्तकर्त्याच्या बाजूने अपघाती ठेवी रोखण्याचा किंवा नाकारण्याचा कोणताही मार्ग नाही. असे फंक्शन लागू करण्याची शिफारस केली जाते जे अपघाताने जमा केलेले ERC-20 टोकन काढण्यास अनुमती देईल. +- वैकल्पिक टोकन मानके वापरण्याचा विचार करा. + +या समस्येतून काही पर्यायी मानके समोर आली आहेत जसे की [ERC-223](/developers/docs/standards/tokens/erc-223) किंवा [ERC-1363](/developers/docs/standards/tokens/erc-1363). + +## पुढील वाचन {#further-reading} + +- [EIP-20: ERC-20 टोकन मानक](https://eips.ethereum.org/EIPS/eip-20) +- [OpenZeppelin - टोकन्स](https://docs.openzeppelin.com/contracts/3.x/tokens#ERC20) +- [OpenZeppelin - ERC-20 अंमलबजावणी](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) +- [Alchemy - Solidity ERC20 टोकन्ससाठी मार्गदर्शक](https://www.alchemy.com/overviews/erc20-solidity) + +## इतर फंजिबल टोकन मानके {#fungible-token-standards} + +- [ERC-223](/developers/docs/standards/tokens/erc-223) +- [ERC-1363](/developers/docs/standards/tokens/erc-1363) +- [ERC-777](/developers/docs/standards/tokens/erc-777) +- [ERC-4626 - टोकनाइज्ड वॉल्ट्स](/developers/docs/standards/tokens/erc-4626) diff --git a/public/content/translations/mr/developers/docs/standards/tokens/erc-223/index.md b/public/content/translations/mr/developers/docs/standards/tokens/erc-223/index.md new file mode 100644 index 00000000000..f8cc106abdc --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/erc-223/index.md @@ -0,0 +1,198 @@ +--- +title: "ERC-223 टोकन मानक" +description: "ERC-223 फंजिबल टोकन मानकाचा आढावा, ते कसे कार्य करते, आणि ERC-20 शी तुलना." +lang: mr +--- + +## प्रस्तावना {#introduction} + +### ERC-223 म्हणजे काय? {#what-is-erc223} + +ERC-223 हे ERC-20 मानकासारखेच फंजिबल टोकन्ससाठी एक मानक आहे. मुख्य फरक हा आहे की ERC-223 केवळ टोकन API परिभाषित करत नाही, तर प्रेषकाकडून प्राप्तकर्त्याकडे टोकन हस्तांतरित करण्याची तर्कप्रणाली देखील परिभाषित करते. हे एक संवाद मॉडेल सादर करते जे प्राप्तकर्त्याच्या बाजूने टोकन हस्तांतरण हाताळण्याची परवानगी देते. + +### ERC-20 मधील फरक {#erc20-differences} + +ERC-223 हे ERC-20 च्या काही मर्यादा दूर करते आणि टोकन कॉन्ट्रॅक्ट व टोकन प्राप्त करू शकणाऱ्या कॉन्ट्रॅक्टमध्ये संवादाची एक नवीन पद्धत सादर करते. ERC-223 मध्ये काही गोष्टी शक्य आहेत, पण ERC-20 मध्ये नाहीत: + +- प्राप्तकर्त्याच्या बाजूने टोकन हस्तांतरण हाताळणी: प्राप्तकर्ते हे ओळखू शकतात की ERC-223 टोकन जमा केले जात आहे. +- अयोग्यरित्या पाठवलेले टोकन नाकारणे: जर वापरकर्त्याने ERC-223 टोकन अशा कॉन्ट्रॅक्टला पाठवले जे टोकन स्वीकारण्यासाठी बनवलेले नाही, तर ते कॉन्ट्रॅक्ट व्यवहार नाकारू शकते, ज्यामुळे टोकनचे नुकसान टळते. +- हस्तांतरणामध्ये मेटाडेटा: ERC-223 टोकन्समध्ये मेटाडेटा समाविष्ट असू शकतो, ज्यामुळे टोकन व्यवहारांशी कोणतीही माहिती जोडता येते. + +## पूर्वतयारी {#prerequisites} + +- [खाती](/developers/docs/accounts) +- [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) +- [टोकन मानके](/developers/docs/standards/tokens/) +- [ERC-20](/developers/docs/standards/tokens/erc-20/) + +## मुख्य भाग {#body} + +ERC-223 हे एक टोकन मानक आहे जे स्मार्ट कॉन्ट्रॅक्ट्समधील टोकन्ससाठी एक API लागू करते. हे ERC-223 टोकन स्वीकारणाऱ्या कॉन्ट्रॅक्ट्ससाठी एक API देखील घोषित करते. जे कॉन्ट्रॅक्ट ERC-223 रिसीव्हर API ला समर्थन देत नाहीत ते ERC-223 टोकन स्वीकारू शकत नाहीत, ज्यामुळे वापरकर्त्याच्या चुका टाळता येतात. + +जर एखादे स्मार्ट कॉन्ट्रॅक्ट खालील पद्धती आणि इव्हेंट्स लागू करत असेल तर त्याला ERC-223 सुसंगत टोकन कॉन्ट्रॅक्ट म्हटले जाऊ शकते. एकदा तैनात झाल्यावर, +ते इथेरियमवर तयार केलेल्या टोकन्सचा मागोवा ठेवण्यास जबाबदार असेल. + +कॉन्ट्रॅक्टमध्ये केवळ ही फंक्शन्स असणे बंधनकारक नाही आणि एक डेव्हलपर विविध टोकन मानकांमधून या कॉन्ट्रॅक्टमध्ये इतर कोणतीही वैशिष्ट्ये जोडू शकतो. उदाहरणार्थ, `approve` आणि `transferFrom` फंक्शन्स ERC-223 मानकाचा भाग नाहीत, परंतु आवश्यक असल्यास ही फंक्शन्स लागू केली जाऊ शकतात. + +[EIP-223](https://eips.ethereum.org/EIPS/eip-223) मधून: + +### मेथड्स {#methods} + +ERC-223 टोकनने खालील पद्धती लागू केल्या पाहिजेत: + +```solidity +function name() public view returns (string) +function symbol() public view returns (string) +function decimals() public view returns (uint8) +function totalSupply() public view returns (uint256) +function balanceOf(address _owner) public view returns (uint256 balance) +function transfer(address _to, uint256 _value) public returns (bool success) +function transfer(address _to, uint256 _value, bytes calldata _data) public returns (bool success) +``` + +ERC-223 टोकन स्वीकारणाऱ्या कॉन्ट्रॅक्टने खालील पद्धत लागू करणे आवश्यक आहे: + +```solidity +function tokenReceived(address _from, uint _value, bytes calldata _data) +``` + +जर ERC-223 टोकन्स `tokenReceived(..)` फंक्शन लागू न करणाऱ्या कॉन्ट्रॅक्टला पाठवले गेले, तर हस्तांतरण अयशस्वी झाले पाहिजे आणि टोकन्स प्रेषकाच्या बॅलन्समधून हलवले जाऊ नयेत. + +### इव्हेंट्स {#events} + +```solidity +event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes calldata _data) +``` + +### उदाहरणे {#examples} + +ERC-223 टोकनचा API हा ERC-20 सारखाच आहे, त्यामुळे UI डेव्हलपमेंटच्या दृष्टिकोनातून कोणताही फरक नाही. येथे एकमेव अपवाद हा आहे की ERC-223 टोकनमध्ये `approve` + `transferFrom` फंक्शन्स असू शकत नाहीत कारण या मानकासाठी ते ऐच्छिक आहेत. + +#### Solidity उदाहरणे {#solidity-example} + +खालील उदाहरण स्पष्ट करते की एक मूलभूत ERC-223 टोकन कॉन्ट्रॅक्ट कसे कार्य करते: + +```solidity +pragma solidity ^0.8.19; +abstract contract IERC223Recipient { + function tokenReceived(address _from, uint _value, bytes memory _data) public virtual; +} +contract VeryBasicERC223Token { + event Transfer(address indexed from, address indexed to, uint value, bytes data); + string private _name; + string private _symbol; + uint8 private _decimals; + uint256 private _totalSupply; + mapping(address => uint256) private balances; + function name() public view returns (string memory) { return _name; } + function symbol() public view returns (string memory) {return _symbol; } + function decimals() public view returns (uint8) { return _decimals; } + function totalSupply() public view returns (uint256) { return _totalSupply; } + function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } + function isContract(address account) internal view returns (bool) { + uint256 size; + assembly { size := extcodesize(account) } + return size > 0; + } + function transfer(address _to, uint _value, bytes calldata _data) public returns (bool success){ + balances[msg.sender] = balances[msg.sender] - _value; + balances[_to] = balances[_to] + _value; + if(isContract(_to)) { + IERC223Recipient(_to).tokenReceived(msg.sender, _value, _data); + } + emit Transfer(msg.sender, _to, _value, _data); + return true; + } + function transfer(address _to, uint _value) public returns (bool success){ + bytes memory _empty = hex"00000000"; + balances[msg.sender] = balances[msg.sender] - _value; + balances[_to] = balances[_to] + _value; + if(isContract(_to)) { + IERC223Recipient(_to).tokenReceived(msg.sender, _value, _empty); + } + emit Transfer(msg.sender, _to, _value, _empty); + return true; + } +} +``` + +आता आपल्याला `tokenA` च्या ठेवी स्वीकारण्यासाठी दुसरा कॉन्ट्रॅक्ट हवा आहे, हे गृहीत धरून की tokenA हे ERC-223 टोकन आहे. कॉन्ट्रॅक्टने फक्त tokenA स्वीकारले पाहिजे आणि इतर कोणतेही टोकन नाकारले पाहिजेत. जेव्हा कॉन्ट्रॅक्टला tokenA प्राप्त होईल, तेव्हा त्याने `Deposit()` इव्हेंट उत्सर्जित केला पाहिजे आणि अंतर्गत `deposits` व्हेरिएबलचे मूल्य वाढवले पाहिजे. + +येथे कोड आहे: + +```solidity +contract RecipientContract is IERC223Recipient { + event Deposit(address whoSentTheTokens); + uint256 deposits = 0; + address tokenA; // एकमेव टोकन जे आम्हाला स्वीकारायचे आहे. + function tokenReceived(address _from, uint _value, bytes memory _data) public override + { + // हे समजणे महत्त्वाचे आहे की या फंक्शनमध्ये + // msg.sender हा प्राप्त होणाऱ्या टोकनचा पत्ता आहे, + // msg.value नेहमी 0 असतो कारण बहुतेक प्रकरणांमध्ये टोकन कॉन्ट्रॅक्ट ईथरचा मालक नसतो किंवा पाठवत नाही, + // _from हा टोकन हस्तांतरणाचा प्रेषक आहे, + // _value ही जमा केलेल्या टोकनची रक्कम आहे. + require(msg.sender == tokenA); + deposits += _value; + emit Deposit(_from); + } +} +``` + +## वारंवार विचारले जाणारे प्रश्न {#faq} + +### जर आपण काही tokenB कॉन्ट्रॅक्टला पाठवले तर काय होईल? {#sending-tokens} + +व्यवहार अयशस्वी होईल आणि टोकनचे हस्तांतरण होणार नाही. टोकन प्रेषकाच्या पत्त्यावर परत केले जातील. + +### आपण या कॉन्ट्रॅक्टमध्ये ठेव कशी करू शकतो? {#contract-deposits} + +ERC-223 टोकनचे `transfer(address,uint256)` किंवा `transfer(address,uint256,bytes)` फंक्शन कॉल करा, `RecipientContract` चा पत्ता निर्दिष्ट करून. + +### जर आपण या कॉन्ट्रॅक्टला ERC-20 टोकन हस्तांतरित केले तर काय होईल? {#erc-20-transfers} + +जर `RecipientContract` ला ERC-20 टोकन पाठवले, तर टोकन हस्तांतरित होतील, परंतु हस्तांतरण ओळखले जाणार नाही (कोणताही `Deposit()` इव्हेंट फायर होणार नाही, आणि ठेवींचे मूल्य बदलणार नाही). अनावश्यक ERC-20 ठेवी फिल्टर किंवा प्रतिबंधित केल्या जाऊ शकत नाहीत. + +### टोकन ठेव पूर्ण झाल्यानंतर आपल्याला एखादे फंक्शन कार्यान्वित करायचे असेल तर काय? {#function-execution} + +असे करण्याचे अनेक मार्ग आहेत. या उदाहरणात आपण ती पद्धत वापरू जी ERC-223 हस्तांतरणांना ईथर हस्तांतरणांसारखेच बनवते: + +```solidity +contract RecipientContract is IERC223Recipient { + event Foo(); + event Bar(uint256 someNumber); + address tokenA; // एकमेव टोकन जे आम्हाला स्वीकारायचे आहे. + function tokenReceived(address _from, uint _value, bytes memory _data) public override + { + require(msg.sender == tokenA); + address(this).call(_data); // येणारा व्यवहार हाताळा आणि त्यानंतरचे फंक्शन कॉल करा. + } + function foo() public + { + emit Foo(); + } + function bar(uint256 _someNumber) public + { + emit Bar(_someNumber); + } +} +``` + +जेव्हा `RecipientContract` ला ERC-223 टोकन प्राप्त होईल, तेव्हा कॉन्ट्रॅक्ट टोकन व्यवहाराच्या `_data` पॅरामीटर म्हणून एन्कोड केलेले एक फंक्शन कार्यान्वित करेल, अगदी त्याचप्रमाणे जसे ईथर व्यवहार फंक्शन कॉल्सना व्यवहार `data` म्हणून एन्कोड करतात. अधिक माहितीसाठी [डेटा फील्ड](/developers/docs/transactions/#the-data-field) वाचा. + +वरील उदाहरणामध्ये, `transfer(address,uin256,bytes calldata _data)` फंक्शन वापरून `RecipientContract` च्या पत्त्यावर ERC-223 टोकन हस्तांतरित केले जाणे आवश्यक आहे. जर डेटा पॅरामीटर `0xc2985578` (`foo()` फंक्शनची स्वाक्षरी) असेल, तर टोकन ठेव प्राप्त झाल्यानंतर foo() फंक्शन कॉल केले जाईल आणि Foo() इव्हेंट फायर होईल. + +टोकन हस्तांतरणाच्या `data` मध्ये पॅरामीटर्स देखील एन्कोड केले जाऊ शकतात, उदाहरणार्थ आपण `_someNumber` साठी 12345 मूल्याने bar() फंक्शन कॉल करू शकतो. या प्रकरणात `data` हा `0x0423a13200000000000000000000000000000000000000000000000000000000000004d2` असावा, जिथे `0x0423a132` ही `bar(uint256)` फंक्शनची स्वाक्षरी आहे आणि `00000000000000000000000000000000000000000000000000000000000004d2` हे uint256 म्हणून 12345 आहे. + +## मर्यादा {#limitations} + +जरी ERC-223 हे ERC-20 मानकात आढळलेल्या अनेक समस्यांचे निराकरण करते, तरी त्याच्या स्वतःच्या काही मर्यादा आहेत: + +- स्वीकृती आणि सुसंगतता: ERC-223 अद्याप व्यापकपणे स्वीकारले गेले नाही, जे विद्यमान टूल्स आणि प्लॅटफॉर्मसह त्याची सुसंगतता मर्यादित करू शकते. +- मागील आवृत्तीशी सुसंगतता: ERC-223 हे ERC-20 सोबत बॅकवर्ड सुसंगत नाही, याचा अर्थ असा की विद्यमान ERC-20 कॉन्ट्रॅक्ट्स आणि टूल्स बदलांशिवाय ERC-223 टोकन्ससोबत काम करणार नाहीत. +- गॅस खर्च: ERC-223 हस्तांतरणातील अतिरिक्त तपासण्या आणि कार्यक्षमतेमुळे ERC-20 व्यवहारांच्या तुलनेत गॅसचा खर्च जास्त येऊ शकतो. + +## पुढील वाचन {#further-reading} + +- [EIP-223: ERC-223 टोकन मानक](https://eips.ethereum.org/EIPS/eip-223) +- [सुरुवातीचा ERC-223 प्रस्ताव](https://github.com/ethereum/eips/issues/223) diff --git a/public/content/translations/mr/developers/docs/standards/tokens/erc-4626/index.md b/public/content/translations/mr/developers/docs/standards/tokens/erc-4626/index.md new file mode 100644 index 00000000000..666e96b113e --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/erc-4626/index.md @@ -0,0 +1,227 @@ +--- +title: "ERC-4626 टोकनाइज्ड वॉल्ट स्टँडर्ड" +description: "उत्पन्न देणाऱ्या वॉल्ट्ससाठी एक मानक." +lang: mr +--- + +## प्रस्तावना {#introduction} + +ERC-4626 हे उत्पन्न देणाऱ्या वॉल्ट्सचे तांत्रिक पॅरामीटर्स ऑप्टिमाइझ आणि एकीकृत करण्यासाठी एक मानक आहे. हे टोकनाइज्ड उत्पन्न-देणाऱ्या वॉल्ट्ससाठी एक मानक API प्रदान करते जे एकाच मूळ ERC-20 टोकनच्या शेअर्सचे प्रतिनिधित्व करतात. ERC-4626 ERC-20 वापरणाऱ्या टोकनाइज्ड वॉल्ट्ससाठी एक पर्यायी विस्तार देखील दर्शवते, जे टोकन जमा करण्यासाठी, काढण्यासाठी आणि शिल्लक वाचण्यासाठी मूलभूत कार्यक्षमता प्रदान करते. + +**उत्पन्न देणाऱ्या वॉल्ट्समध्ये ERC-4626 ची भूमिका** + +लेंडिंग मार्केट्स, एग्रीगेटर्स, आणि स्वाभाविकपणे व्याज-देणारे टोकन वापरकर्त्यांना त्यांच्या क्रिप्टो टोकनवर सर्वोत्तम उत्पन्न शोधण्यात वेगवेगळ्या स्ट्रॅटेजीस कार्यान्वित करून मदत करतात. या स्ट्रॅटेजीस थोड्या फरकाने केल्या जातात, ज्यामुळे चुका होण्याची शक्यता असते किंवा डेव्हलपमेंट संसाधने वाया जातात. + +उत्पन्न-देणाऱ्या वॉल्ट्समधील ERC-4626 अधिक सुसंगत आणि मजबूत अंमलबजावणी पॅटर्न तयार करून डेव्हलपर्सकडून कमी विशेष प्रयत्नांसह एकत्रीकरण प्रयत्न कमी करेल आणि विविध ॲप्लिकेशन्समध्ये उत्पन्नाचा ॲक्सेस अनलॉक करेल. + +ERC-4626 टोकनचे संपूर्ण वर्णन [EIP-4626](https://eips.ethereum.org/EIPS/eip-4626) मध्ये केले आहे. + +**असिंक्रोनस वॉल्ट विस्तार (ERC-7540)** + +ERC-4626 एका मर्यादेपर्यंत ॲटॉमिक डिपॉझिट आणि रिडेम्प्शनसाठी ऑप्टिमाइझ केलेले आहे. जर मर्यादा गाठली गेली, तर कोणतेही नवीन डिपॉझिट किंवा रिडेम्प्शन सबमिट केले जाऊ शकत नाहीत. ही मर्यादा कोणत्याही स्मार्ट कॉन्ट्रॅक्ट सिस्टीमसाठी योग्यरित्या काम करत नाही, ज्यात वॉल्टसोबत इंटरफेस करण्यासाठी पूर्वअट म्हणून असिंक्रोनस क्रिया किंवा विलंब असतो (उदा., वास्तविक-जगातील मालमत्ता प्रोटोकॉल, अंडरकोलॅटरलाइज्ड लेंडिंग प्रोटोकॉल, क्रॉस-चेन लेंडिंग प्रोटोकॉल, लिक्विड स्टेकिंग टोकन, किंवा विमा सुरक्षा मॉड्यूल). + +ERC-7540 असिंक्रोनस वापराच्या प्रकरणांसाठी ERC-4626 वॉल्ट्सची उपयोगिता वाढवते. विद्यमान वॉल्ट इंटरफेस (`deposit`/`withdraw`/`mint`/`redeem`) असिंक्रोनस रिक्वेस्ट्सवर दावा करण्यासाठी पूर्णपणे वापरला जातो. + +ERC-7540 विस्ताराचे संपूर्ण वर्णन [ERC-7540](https://eips.ethereum.org/EIPS/eip-7540) मध्ये केले आहे. + +**बहु-मालमत्ता वॉल्ट विस्तार (ERC-7575)** + +एक गहाळ वापर प्रकरण जे ERC-4626 द्वारे समर्थित नाही ते असे वॉल्ट्स आहेत ज्यात लिक्विडिटी प्रोव्हायडर (LP) टोकनसारख्या अनेक मालमत्ता किंवा एंट्री पॉइंट्स आहेत. ERC-4626 स्वतः एक ERC-20 असण्याच्या आवश्यकतेमुळे हे साधारणपणे अवजड किंवा गैर-अनुपालक असतात. + +ERC-7575, ERC-4626 अंमलबजावणीतून ERC-20 टोकन अंमलबजावणीला बाह्य करून अनेक मालमत्ता असलेल्या वॉल्ट्ससाठी समर्थन जोडते. + +ERC-7575 विस्ताराचे संपूर्ण वर्णन [ERC-7575](https://eips.ethereum.org/EIPS/eip-7575) मध्ये केले आहे. + +## पूर्वतयारी {#prerequisites} + +हे पृष्ठ अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही आधी [टोकन मानक](/developers/docs/standards/tokens/) आणि [ERC-20](/developers/docs/standards/tokens/erc-20/) बद्दल वाचा. + +## ERC-4626 कार्ये आणि वैशिष्ट्ये: {#body} + +### मेथड्स {#methods} + +#### ॲसेट {#asset} + +```solidity +function asset() public view returns (address assetTokenAddress) +``` + +हे फंक्शन वॉल्टसाठी अकाउंटिंग, डिपॉझिटिंग, विथड्रॉइंगसाठी वापरल्या जाणाऱ्या मूळ टोकनचा ॲड्रेस परत करते. + +#### एकूण ॲसेट्स {#totalassets} + +```solidity +function totalAssets() public view returns (uint256) +``` + +हे फंक्शन वॉल्टमध्ये ठेवलेल्या मूळ ॲसेट्सची एकूण रक्कम परत करते. + +#### शेअर्समध्ये रूपांतरित करा {#convertoshares} + +```solidity +function convertToShares(uint256 assets) public view returns (uint256 shares) +``` + +हे फंक्शन `shares` ची रक्कम परत करते जी प्रदान केलेल्या `assets` च्या रकमेसाठी वॉल्टद्वारे एक्सचेंज केली जाईल. + +#### ॲसेट्समध्ये रूपांतरित करा {#convertoassets} + +```solidity +function convertToAssets(uint256 shares) public view returns (uint256 assets) +``` + +हे फंक्शन `assets` ची रक्कम परत करते जी प्रदान केलेल्या `shares` च्या रकमेसाठी वॉल्टद्वारे एक्सचेंज केली जाईल. + +#### कमाल डिपॉझिट {#maxdeposit} + +```solidity +function maxDeposit(address receiver) public view returns (uint256 maxAssets) +``` + +हे फंक्शन मूळ ॲसेट्सची कमाल रक्कम परत करते जी एकाच [`deposit`](#deposit) कॉलमध्ये जमा केली जाऊ शकते, ज्यात `receiver` साठी शेअर्स मिंट केले जातात. + +#### डिपॉझिटचे पूर्वावलोकन {#previewdeposit} + +```solidity +function previewDeposit(uint256 assets) public view returns (uint256 shares) +``` + +हे फंक्शन वापरकर्त्यांना सध्याच्या ब्लॉकवर त्यांच्या डिपॉझिटच्या परिणामांचे सिम्युलेशन करण्याची परवानगी देते. + +#### डिपॉझिट {#deposit} + +```solidity +function deposit(uint256 assets, address receiver) public returns (uint256 shares) +``` + +हे फंक्शन मूळ टोकनचे `assets` वॉल्टमध्ये जमा करते आणि `receiver` ला `shares` ची मालकी देते. + +#### कमाल मिंट {#maxmint} + +```solidity +function maxMint(address receiver) public view returns (uint256 maxShares) +``` + +हे फंक्शन शेअर्सची कमाल रक्कम परत करते जी एकाच [`mint`](#mint) कॉलमध्ये मिंट केली जाऊ शकते, ज्यात `receiver` साठी शेअर्स मिंट केले जातात. + +#### मिंटचे पूर्वावलोकन {#previewmint} + +```solidity +function previewMint(uint256 shares) public view returns (uint256 assets) +``` + +हे फंक्शन वापरकर्त्यांना सध्याच्या ब्लॉकवर त्यांच्या मिंटच्या परिणामांचे सिम्युलेशन करण्याची परवानगी देते. + +#### मिंट {#mint} + +```solidity +function mint(uint256 shares, address receiver) public returns (uint256 assets) +``` + +हे फंक्शन मूळ टोकनचे `assets` जमा करून `receiver` ला तंतोतंत `shares` वॉल्ट शेअर्स मिंट करते. + +#### कमाल विथड्रॉ {#maxwithdraw} + +```solidity +function maxWithdraw(address owner) public view returns (uint256 maxAssets) +``` + +हे फंक्शन मूळ ॲसेट्सची कमाल रक्कम परत करते जी `owner` च्या बॅलन्समधून एकाच [`withdraw`](#withdraw) कॉलने काढली जाऊ शकते. + +#### विथड्रॉचे पूर्वावलोकन {#previewwithdraw} + +```solidity +function previewWithdraw(uint256 assets) public view returns (uint256 shares) +``` + +हे फंक्शन वापरकर्त्यांना सध्याच्या ब्लॉकवर त्यांच्या विथड्रॉवलच्या परिणामांचे सिम्युलेशन करण्याची परवानगी देते. + +#### विथड्रॉ {#withdraw} + +```solidity +function withdraw(uint256 assets, address receiver, address owner) public returns (uint256 shares) +``` + +हे फंक्शन `owner` कडून `shares` बर्न करते आणि वॉल्टमधून तंतोतंत `assets` टोकन `receiver` ला पाठवते. + +#### कमाल रिडीम {#maxredeem} + +```solidity +function maxRedeem(address owner) public view returns (uint256 maxShares) +``` + +हे फंक्शन शेअर्सची कमाल रक्कम परत करते जी `owner` च्या बॅलन्समधून [`redeem`](#redeem) कॉलद्वारे रिडीम केली जाऊ शकते. + +#### रिडीमचे पूर्वावलोकन {#previewredeem} + +```solidity +function previewRedeem(uint256 shares) public view returns (uint256 assets) +``` + +हे फंक्शन वापरकर्त्यांना सध्याच्या ब्लॉकवर त्यांच्या रिडेम्पशनच्या परिणामांचे सिम्युलेशन करण्याची परवानगी देते. + +#### रिडीम {#redeem} + +```solidity +function redeem(uint256 shares, address receiver, address owner) public returns (uint256 assets) +``` + +हे फंक्शन `owner` कडून विशिष्ट संख्येचे `shares` रिडीम करते आणि वॉल्टमधून `receiver` ला मूळ टोकनचे `assets` पाठवते. + +#### एकूण पुरवठा {#totalsupply} + +```solidity +function totalSupply() public view returns (uint256) +``` + +वापरात असलेल्या, न रिडीम केलेल्या वॉल्ट शेअर्सची एकूण संख्या परत करते. + +#### शिल्लक {#balanceof} + +```solidity +function balanceOf(address owner) public view returns (uint256) +``` + +`owner` कडे सध्या असलेल्या वॉल्ट शेअर्सची एकूण रक्कम परत करते. + +### इंटरफेसचा नकाशा {#mapOfTheInterface} + +![ERC-4626 इंटरफेसचा नकाशा](./map-of-erc-4626.png) + +### इव्हेंट्स {#events} + +#### डिपॉझिट इव्हेंट + +[`mint`](#mint) आणि [`deposit`](#deposit) मेथड्सद्वारे जेव्हा टोकन वॉल्टमध्ये जमा केले जातात तेव्हा **अवश्य** उत्सर्जित केले पाहिजे. + +```solidity +event Deposit( + address indexed sender, + address indexed owner, + uint256 assets, + uint256 shares +) +``` + +जिथे `sender` हा वापरकर्ता आहे ज्याने `shares` साठी `assets` एक्सचेंज केले, आणि ते `shares` `owner` ला हस्तांतरित केले. + +#### विथड्रॉ इव्हेंट + +[`redeem`](#redeem) किंवा [`withdraw`](#withdraw) मेथड्समध्ये जेव्हा ठेवीदाराद्वारे वॉल्टमधून शेअर्स काढले जातात तेव्हा **अवश्य** उत्सर्जित केले पाहिजे. + +```solidity +event Withdraw( + address indexed sender, + address indexed receiver, + address indexed owner, + uint256 assets, + uint256 shares +) +``` + +जिथे `sender` हा वापरकर्ता आहे ज्याने विथड्रॉवल सुरू केले आणि `owner` च्या मालकीचे `shares` `assets` साठी एक्सचेंज केले. `receiver` हा वापरकर्ता आहे ज्याला काढलेले `assets` मिळाले. + +## पुढील वाचन {#further-reading} + +- [EIP-4626: टोकनाइज्ड वॉल्ट स्टँडर्ड](https://eips.ethereum.org/EIPS/eip-4626) +- [ERC-4626: GitHub रेपो](https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC4626.sol) diff --git a/public/content/translations/mr/developers/docs/standards/tokens/erc-721/index.md b/public/content/translations/mr/developers/docs/standards/tokens/erc-721/index.md new file mode 100644 index 00000000000..6c4508c2aa4 --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/erc-721/index.md @@ -0,0 +1,261 @@ +--- +title: "ERC-721 नॉन-फंजिबल टोकन मानक" +description: "ERC-721 बद्दल जाणून घ्या, जे Ethereum वरील युनिक डिजिटल मालमत्तेचे प्रतिनिधित्व करणाऱ्या नॉन-फंजिबल टोकन (NFTs) साठी एक मानक आहे." +lang: mr +--- + +## प्रस्तावना {#introduction} + +**नॉन-फंजिबल टोकन म्हणजे काय?** + +नॉन-फंजिबल टोकन (NFT) हे काहीतरी किंवा कोणालातरी अद्वितीय पद्धतीने ओळखण्यासाठी वापरले जाते. हे टोकन संग्रहणीय वस्तू, ॲक्सेस की, लॉटरीची तिकिटे, कॉन्सर्ट आणि क्रीडा सामन्यांसाठी क्रमांकित जागा इत्यादी देणाऱ्या प्लॅटफॉर्मवर वापरण्यासाठी योग्य आहे. या विशेष प्रकारच्या टोकनमध्ये अद्भूत शक्यता आहेत, त्यामुळे ते एका योग्य मानकास पात्र आहे, आणि ERC-721 +हेच निराकरण करण्यासाठी आले आहे! + +**ERC-721 म्हणजे काय?** + +ERC-721 हे NFT साठी एक मानक सादर करते, दुसऱ्या शब्दांत, या प्रकारचे टोकन अद्वितीय असते आणि त्याचे मूल्य त्याच स्मार्ट कॉन्ट्रॅक्टमधील दुसऱ्या टोकनपेक्षा वेगळे असू शकते, +kदाचित त्याचे वय, दुर्मिळता किंवा अगदी त्याच्या व्हिज्युअलसारख्या इतर गोष्टींमुळे. +थांबा, व्हिज्युअल? + +होय! सर्व NFTs मध्ये `tokenId` नावाचे `uint256` व्हेरिएबल असते, म्हणून कोणत्याही ERC-721 कॉन्ट्रॅक्टसाठी, `contract address, uint256 tokenId` ही जोडी +जागतिक स्तरावर अद्वितीय असणे आवश्यक आहे. असे असले तरी, एका dApp मध्ये एक "कन्व्हर्टर" असू शकतो जो +`tokenId` इनपुट म्हणून वापरतो आणि झोम्बी, शस्त्रे, कौशल्ये किंवा आश्चर्यकारक किटीजसारख्या छान गोष्टीची इमेज आउटपुट करतो! + +## पूर्वतयारी {#prerequisites} + +- [खाती](/developers/docs/accounts/) +- [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) +- [टोकन मानके](/developers/docs/standards/tokens/) + +## मुख्य भाग {#body} + +जानेवारी 2018 मध्ये विल्यम एंट्रिंकन, डायटर शिर्ले, जेकब इव्हान्स, +नास्तासिया सॅक्स यांनी प्रस्तावित केलेले ERC-721 (Ethereum रिक्वेस्ट फॉर कमेंट्स 721), हे एक नॉन-फंजिबल टोकन मानक आहे जे स्मार्ट कॉन्ट्रॅक्ट्समधील टोकन्ससाठी API लागू करते. + +हे एका खात्यातून दुसऱ्या खात्यात टोकन हस्तांतरित करणे, खात्यातील सध्याची टोकन शिल्लक मिळवणे, +एका विशिष्ट टोकनचा मालक मिळवणे आणि नेटवर्कवर उपलब्ध असलेल्या टोकनचा एकूण पुरवठा मिळवणे यासारख्या कार्यक्षमता प्रदान करते. +या व्यतिरिक्त, यात इतर काही कार्यक्षमता आहेत, जसे की एखाद्या खात्यातून टोकनची रक्कम तृतीय-पक्ष खात्याद्वारे +हलवली जाऊ शकते याला मान्यता देणे. + +जर एखादा स्मार्ट कॉन्ट्रॅक्ट खालील पद्धती आणि इव्हेंट्स लागू करत असेल तर त्याला ERC-721 नॉन-फंजिबल टोकन कॉन्ट्रॅक्ट म्हटले जाऊ शकते +आणि, एकदा तैनात केल्यावर, ते Ethereum वर तयार केलेल्या टोकनचा मागोवा ठेवण्यासाठी जबाबदार असेल. + +[EIP-721](https://eips.ethereum.org/EIPS/eip-721) मधून: + +### मेथड्स {#methods} + +```solidity + function balanceOf(address _owner) external view returns (uint256); + function ownerOf(uint256 _tokenId) external view returns (address); + function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable; + function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable; + function transferFrom(address _from, address _to, uint256 _tokenId) external payable; + function approve(address _approved, uint256 _tokenId) external payable; + function setApprovalForAll(address _operator, bool _approved) external; + function getApproved(uint256 _tokenId) external view returns (address); + function isApprovedForAll(address _owner, address _operator) external view returns (bool); +``` + +### इव्हेंट्स {#events} + +```solidity + event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); + event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); + event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); +``` + +### उदाहरणे {#web3py-example} + +Ethereum वरील कोणत्याही ERC-721 टोकन कॉन्ट्रॅक्टची तपासणी करणे आपल्यासाठी सोपे करण्यासाठी एक मानक किती महत्त्वाचे आहे ते पाहूया. +कोणत्याही ERC-721 टोकनसाठी इंटरफेस तयार करण्यासाठी आपल्याला फक्त कॉन्ट्रॅक्ट ॲप्लिकेशन बायनरी इंटरफेस (ABI) ची आवश्यकता आहे. तुम्ही खाली पाहू शकता की आम्ही एक सरलीकृत ABI वापरणार आहोत, जेणेकरून हे एक कमी घर्षणाचे उदाहरण बनेल. + +#### Web3.py उदाहरण {#web3py-example} + +प्रथम, आपण [Web3.py](https://web3py.readthedocs.io/en/stable/quickstart.html#installation) Python लायब्ररी स्थापित केली असल्याची खात्री करा: + +``` +pip install web3 +``` + +```python +from web3 import Web3 +from web3._utils.events import get_event_data + + +w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com")) + +ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # CryptoKitties कॉन्ट्रॅक्ट + +acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # CryptoKitties सेल्स ऑक्शन + +# हे ERC-721 NFT कॉन्ट्रॅक्टचे एक सरलीकृत कॉन्ट्रॅक्ट ॲप्लिकेशन बायनरी इंटरफेस (ABI) आहे. +# हे फक्त balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply() या पद्धती उघड करेल. +simplified_abi = [ + { + 'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}], + 'name': 'balanceOf', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'name', + 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [{'internalType': 'uint256', 'name': 'tokenId', 'type': 'uint256'}], + 'name': 'ownerOf', + 'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'symbol', + 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [], + 'name': 'totalSupply', + 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}], + 'stateMutability': 'view', 'type': 'function', 'constant': True + }, +] + +ck_extra_abi = [ + { + 'inputs': [], + 'name': 'pregnantKitties', + 'outputs': [{'name': '', 'type': 'uint256'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + }, + { + 'inputs': [{'name': '_kittyId', 'type': 'uint256'}], + 'name': 'isPregnant', + 'outputs': [{'name': '', 'type': 'bool'}], + 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True + } +] + +ck_contract = w3.eth.contract(address=w3.to_checksum_address(ck_token_addr), abi=simplified_abi+ck_extra_abi) +name = ck_contract.functions.name().call() +symbol = ck_contract.functions.symbol().call() +kitties_auctions = ck_contract.functions.balanceOf(acc_address).call() +print(f"{name} [{symbol}] NFTs in Auctions: {kitties_auctions}") + +pregnant_kitties = ck_contract.functions.pregnantKitties().call() +print(f"{name} [{symbol}] NFTs Pregnants: {pregnant_kitties}") + +# हस्तांतरित किटीजची माहिती मिळविण्यासाठी ट्रान्सफर इव्हेंट ABI चा वापर करणे. +tx_event_abi = { + 'anonymous': False, + 'inputs': [ + {'indexed': False, 'name': 'from', 'type': 'address'}, + {'indexed': False, 'name': 'to', 'type': 'address'}, + {'indexed': False, 'name': 'tokenId', 'type': 'uint256'}], + 'name': 'Transfer', + 'type': 'event' +} + +# लॉग फिल्टर करण्यासाठी आम्हाला इव्हेंटच्या स्वाक्षरीची आवश्यकता आहे +event_signature = w3.keccak(text="Transfer(address,address,uint256)").hex() + +logs = w3.eth.get_logs({ + "fromBlock": w3.eth.block_number - 120, + "address": w3.to_checksum_address(ck_token_addr), + "topics": [event_signature] +}) + +# टीप: +# - जर कोणताही ट्रान्सफर इव्हेंट परत आला नाही तर ब्लॉकची संख्या 120 पासून वाढवा. +# - जर तुम्हाला कोणताही ट्रान्सफर इव्हेंट आढळला नाही तर तुम्ही येथे tokenId मिळवण्याचा प्रयत्न करू शकता: +# https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events +# इव्हेंटचे लॉग विस्तृत करण्यासाठी क्लिक करा आणि त्याचा "tokenId" युक्तिवाद कॉपी करा +recent_tx = [get_event_data(w3.codec, tx_event_abi, log)["args"] for log in logs] + +if recent_tx: + kitty_id = recent_tx[0]['tokenId'] # वरील लिंकवरून "tokenId" येथे पेस्ट करा + is_pregnant = ck_contract.functions.isPregnant(kitty_id).call() + print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}") +``` + +CryptoKitties कॉन्ट्रॅक्टमध्ये मानक इव्हेंट्स व्यतिरिक्त काही मनोरंजक इव्हेंट्स आहेत. + +चला त्यापैकी `Pregnant` आणि `Birth` हे दोन तपासूया. + +```python +# नवीन किटीजची माहिती मिळविण्यासाठी प्रेग्नंट आणि बर्थ इव्हेंट्स ABI चा वापर करणे. +ck_extra_events_abi = [ + { + 'anonymous': False, + 'inputs': [ + {'indexed': False, 'name': 'owner', 'type': 'address'}, + {'indexed': False, 'name': 'matronId', 'type': 'uint256'}, + {'indexed': False, 'name': 'sireId', 'type': 'uint256'}, + {'indexed': False, 'name': 'cooldownEndBlock', 'type': 'uint256'}], + 'name': 'Pregnant', + 'type': 'event' + }, + { + 'anonymous': False, + 'inputs': [ + {'indexed': False, 'name': 'owner', 'type': 'address'}, + {'indexed': False, 'name': 'kittyId', 'type': 'uint256'}, + {'indexed': False, 'name': 'matronId', 'type': 'uint256'}, + {'indexed': False, 'name': 'sireId', 'type': 'uint256'}, + {'indexed': False, 'name': 'genes', 'type': 'uint256'}], + 'name': 'Birth', + 'type': 'event' + }] + +# लॉग फिल्टर करण्यासाठी आम्हाला इव्हेंटच्या स्वाक्षरीची आवश्यकता आहे +ck_event_signatures = [ + w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(), + w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(), +] + +# येथे एक प्रेग्नंट इव्हेंट आहे: +# - https://etherscan.io/tx/0xc97eb514a41004acc447ac9d0d6a27ea6da305ac8b877dff37e49db42e1f8cef#eventlog +pregnant_logs = w3.eth.get_logs({ + "fromBlock": w3.eth.block_number - 120, + "address": w3.to_checksum_address(ck_token_addr), + "topics": [ck_event_signatures[0]] +}) + +recent_pregnants = [get_event_data(w3.codec, ck_extra_events_abi[0], log)["args"] for log in pregnant_logs] + +# येथे एक बर्थ इव्हेंट आहे: +# - https://etherscan.io/tx/0x3978028e08a25bb4c44f7877eb3573b9644309c044bf087e335397f16356340a +birth_logs = w3.eth.get_logs({ + "fromBlock": w3.eth.block_number - 120, + "address": w3.to_checksum_address(ck_token_addr), + "topics": [ck_event_signatures[1]] +}) + +recent_births = [get_event_data(w3.codec, ck_extra_events_abi[1], log)["args"] for log in birth_logs] +``` + +## लोकप्रिय NFTs {#popular-nfts} + +- [Etherscan NFT Tracker](https://etherscan.io/nft-top-contracts) हस्तांतरण व्हॉल्यूमनुसार Ethereum वरील शीर्ष NFT ची यादी करते. +- [CryptoKitties](https://www.cryptokitties.co/) हा प्रजननक्षम, संग्रहणीय आणि अत्यंत मोहक प्राण्यांभोवती केंद्रित असलेला एक खेळ आहे, + ज्यांना आपण CryptoKitties म्हणतो. +- [Sorare](https://sorare.com/) हा एक जागतिक फँटसी फुटबॉल खेळ आहे जिथे तुम्ही मर्यादित आवृत्तीचे संग्रहणीय वस्तू गोळा करू शकता, + तुमच्या संघांचे व्यवस्थापन करू शकता आणि बक्षिसे मिळवण्यासाठी स्पर्धा करू शकता. +- [The Ethereum Name Service (ENS)](https://ens.domains/) सोप्या, मानवी-वाचनीय नावांचा वापर करून ब्लॉकचेनवर आणि ब्लॉकचेनबाहेर + संसाधनांना संबोधित करण्याचा एक सुरक्षित आणि विकेंद्रित मार्ग प्रदान करते. +- [POAP](https://poap.xyz) जे लोक कार्यक्रमांना उपस्थित राहतात किंवा विशिष्ट क्रिया पूर्ण करतात त्यांना मोफत NFTs वितरीत करते. POAPs तयार करणे आणि वितरित करणे विनामूल्य आहे. +- [Unstoppable Domains](https://unstoppabledomains.com/) ही सॅन फ्रान्सिस्को-स्थित कंपनी आहे जी ब्लॉकचेनवर + डोमेन तयार करत आहे. ब्लॉकचेन डोमेन मानवी-वाचनीय नावांनी क्रिप्टोकरन्सी पत्त्यांची जागा घेतात आणि सेन्सॉरशिप-प्रतिरोधक वेबसाइट्स + सक्षम करण्यासाठी वापरल्या जाऊ शकतात. +- [Gods Unchained Cards](https://godsunchained.com/) हा Ethereum ब्लॉकचेनवरील एक TCG आहे जो इन-गेम मालमत्तेला खरी मालकी + देण्यासाठी NFT's चा वापर करतो. +- [Bored Ape Yacht Club](https://boredapeyachtclub.com) हा 10,000 युनिक NFTs चा संग्रह आहे, जो, एक सिद्ध-दुर्मिळ कलाकृती असण्यासोबतच, क्लबसाठी सदस्यत्व टोकन म्हणून काम करतो, आणि सदस्यांना फायदे आणि लाभ प्रदान करतो जे सामुदायिक प्रयत्नांच्या परिणामी कालांतराने वाढतात. + +## पुढील वाचन {#further-reading} + +- [EIP-721: ERC-721 नॉन-फंजिबल टोकन मानक](https://eips.ethereum.org/EIPS/eip-721) +- [OpenZeppelin - ERC-721 डॉक्स](https://docs.openzeppelin.com/contracts/3.x/erc721) +- [OpenZeppelin - ERC-721 अंमलबजावणी](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol) +- [Alchemy NFT API](https://www.alchemy.com/docs/reference/nft-api-quickstart) diff --git a/public/content/translations/mr/developers/docs/standards/tokens/erc-777/index.md b/public/content/translations/mr/developers/docs/standards/tokens/erc-777/index.md new file mode 100644 index 00000000000..24c1d102703 --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/erc-777/index.md @@ -0,0 +1,45 @@ +--- +title: "ERC-777 टोकन मानक" +description: "ERC-777 बद्दल जाणून घ्या, हुक्ससह एक सुधारित फंजिबल टोकन मानक, जरी सुरक्षेसाठी ERC-20 ची शिफारस केली जाते." +lang: mr +--- + +## चेतावणी {#warning} + +**[वेगवेगळ्या प्रकारच्या हल्ल्यांना बळी पडण्याची शक्यता](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/2620) असल्यामुळे ERC-777 योग्यरित्या लागू करणे कठीण आहे.** **त्याऐवजी [ERC-20](/developers/docs/standards/tokens/erc-20/) वापरण्याची शिफारस केली जाते.** हे पृष्ठ ऐतिहासिक संग्रहण म्हणून ठेवले आहे. + +## परिचय? {#introduction} + +ERC-777 हे एक फंजिबल टोकन मानक आहे जे विद्यमान [ERC-20](/developers/docs/standards/tokens/erc-20/) मानकात सुधारणा करते. + +## पूर्वतयारी {#prerequisites} + +हे पृष्ठ अधिक चांगल्या प्रकारे समजून घेण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [ERC-20](/developers/docs/standards/tokens/erc-20/) बद्दल वाचा. + +## ERC-777, ERC-20 च्या तुलनेत काय सुधारणा प्रस्तावित करते? {#-erc-777-vs-erc-20} + +ERC-777, ERC-20 च्या तुलनेत खालील सुधारणा प्रदान करते. + +### हुक्स {#hooks} + +हुक्स हे स्मार्ट कॉन्ट्रॅक्टच्या कोडमध्ये वर्णन केलेले एक फंक्शन आहे. जेव्हा कॉन्ट्रॅक्टद्वारे टोकन्स पाठवले जातात किंवा प्राप्त केले जातात तेव्हा हुक्स कॉल केले जातात. हे स्मार्ट कॉन्ट्रॅक्टला येणाऱ्या किंवा जाणाऱ्या टोकन्सवर प्रतिक्रिया देण्यास अनुमती देते. + +[ERC-1820](https://eips.ethereum.org/EIPS/eip-1820) मानकाचा वापर करून हुक्सची नोंदणी केली जाते आणि ते शोधले जातात. + +#### हुक्स उत्तम का आहेत? {#why-are-hooks-great} + +1. हुक्स, [ERC-20](https://eips.ethereum.org/EIPS/eip-20) च्या विपरीत, एकाच व्यवहारात कॉन्ट्रॅक्टला टोकन्स पाठवण्याची आणि कॉन्ट्रॅक्टला सूचित करण्याची परवानगी देतात, ज्यासाठी हे साध्य करण्यासाठी दुहेरी कॉल (`approve`/`transferFrom`) आवश्यक असतो. +2. ज्या कॉन्ट्रॅक्ट्सनी हुक्सची नोंदणी केलेली नाही ते ERC-777 शी विसंगत आहेत. जेव्हा प्राप्त करणाऱ्या कॉन्ट्रॅक्टने हुकची नोंदणी केलेली नसते, तेव्हा पाठवणारा कॉन्ट्रॅक्ट व्यवहार रद्द करतो. हे नॉन-ERC-777 स्मार्ट कॉन्ट्रॅक्ट्समध्ये अपघाती हस्तांतरण प्रतिबंधित करते. +3. हुक्स व्यवहार नाकारू शकतात. + +### दशांश {#decimals} + +हे मानक ERC-20 मध्ये `decimals` मुळे निर्माण होणारा गोंधळ देखील सोडवते. ही स्पष्टता डेव्हलपरचा अनुभव सुधारते. + +### ERC-20 सह बॅकवर्ड कंपॅटिबिलिटी {#backwards-compatibility-with-erc-20} + +ERC-777 कॉन्ट्रॅक्ट्ससोबत ERC-20 कॉन्ट्रॅक्ट्सप्रमाणेच संवाद साधला जाऊ शकतो. + +## अधिक वाचन {#further-reading} + +[EIP-777: टोकन मानक](https://eips.ethereum.org/EIPS/eip-777) diff --git a/public/content/translations/mr/developers/docs/standards/tokens/index.md b/public/content/translations/mr/developers/docs/standards/tokens/index.md new file mode 100644 index 00000000000..764c701edd3 --- /dev/null +++ b/public/content/translations/mr/developers/docs/standards/tokens/index.md @@ -0,0 +1,41 @@ +--- +title: "टोकन मानके" +description: "फंजिबल आणि नॉन-फंजिबल टोकनसाठी ERC-20, ERC-721, आणि ERC-1155 सह Ethereum टोकन मानकांचे अन्वेषण करा." +lang: mr +incomplete: true +--- + +## प्रस्तावना {#introduction} + +अनेक Ethereum विकास मानके टोकन इंटरफेसवर लक्ष केंद्रित करतात. ही मानके स्मार्ट कॉन्ट्रॅक्ट्स कंपोजेबल राहतील याची खात्री करण्यास मदत करतात, त्यामुळे जेव्हा एखादा नवीन प्रोजेक्ट टोकन जारी करतो, तेव्हा ते विद्यमान विकेंद्रित एक्सचेंज आणि ॲप्लिकेशन्सशी सुसंगत राहते. + +टोकन मानके संपूर्ण Ethereum इकोसिस्टममध्ये टोकन कसे वागतात आणि संवाद साधतात हे परिभाषित करतात. ते डेव्हलपर्ससाठी पुन्हा नव्याने सुरुवात न करता बिल्ड करणे सोपे करतात, याची खात्री करून की टोकन वॉलेट्स, एक्सचेंजेस आणि DeFi प्लॅटफॉर्मसह अखंडपणे काम करतात. गेमिंग, गव्हर्नन्स किंवा इतर वापराच्या बाबतीत असो, ही मानके सुसंगतता प्रदान करतात आणि Ethereum ला अधिक आंतरकनेक्टेड बनवतात. + +## पूर्वतयारी {#prerequisites} + +- [Ethereum विकास मानके](/developers/docs/standards/) +- [स्मार्ट कॉन्ट्रॅक्ट्स](/developers/docs/smart-contracts/) + +## टोकन मानके {#token-standards} + +Ethereum वरील काही सर्वात लोकप्रिय टोकन मानके येथे आहेत: + +- [ERC-20](/developers/docs/standards/tokens/erc-20/) - फंजिबल (परस्पर बदलण्यायोग्य) टोकनसाठी एक मानक इंटरफेस, जसे की व्होटिंग टोकन, स्टेकिंग टोकन किंवा व्हर्च्युअल चलने. + +### NFT मानके {#nft-standards} + +- [ERC-721](/developers/docs/standards/tokens/erc-721/) - नॉन-फंजिबल टोकनसाठी एक मानक इंटरफेस, जसे की कलाकृती किंवा गाण्यासाठी एक डीड. +- [ERC-1155](/developers/docs/standards/tokens/erc-1155/) - ERC-1155 अधिक कार्यक्षम ट्रेड आणि व्यवहारांचे बंडलिंग करण्यास परवानगी देतो – त्यामुळे खर्चात बचत होते. हे टोकन मानक युटिलिटी टोकन (जसे की $BNB किंवा $BAT) आणि CryptoPunks सारखे नॉन-फंजिबल टोकन दोन्ही तयार करण्यास परवानगी देते. + +[ERC](https://eips.ethereum.org/erc) प्रस्तावांची संपूर्ण यादी. + +## पुढील वाचन {#further-reading} + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित ट्युटोरियल्स {#related-tutorials} + +- [टोकन एकत्रीकरण चेकलिस्ट](/developers/tutorials/token-integration-checklist/) _– टोकनशी संवाद साधताना विचारात घेण्याच्या गोष्टींची एक चेकलिस्ट._ +- [ERC20 टोकन स्मार्ट कॉन्ट्रॅक्ट समजून घ्या](/developers/tutorials/understand-the-erc-20-token-smart-contract/) _– Ethereum टेस्ट नेटवर्कवर तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट तैनात करण्याची ओळख._ +- [Solidity स्मार्ट कॉन्ट्रॅक्टमधून ERC20 टोकन्सचे हस्तांतरण आणि मान्यता](/developers/tutorials/transfers-and-approval-of-erc-20-tokens-from-a-solidity-smart-contract/) _– Solidity भाषेचा वापर करून टोकनशी संवाद साधण्यासाठी स्मार्ट कॉन्ट्रॅक्ट कसा वापरायचा._ +- [ERC721 मार्केटची अंमलबजावणी करणे [एक कसे-करावे मार्गदर्शक]](/developers/tutorials/how-to-implement-an-erc721-market/) _– विकेंद्रित क्लासिफाइड बोर्डवर टोकनाइज्ड वस्तू विक्रीसाठी कशा ठेवायच्या._ diff --git a/public/content/translations/mr/developers/docs/storage/index.md b/public/content/translations/mr/developers/docs/storage/index.md new file mode 100644 index 00000000000..8a8234656fe --- /dev/null +++ b/public/content/translations/mr/developers/docs/storage/index.md @@ -0,0 +1,216 @@ +--- +title: "विकेंद्रित स्टोरेज" +description: "विकेंद्रित स्टोरेज काय आहे आणि ते dapp मध्ये समाकलित करण्यासाठी उपलब्ध असलेल्या साधनांचा आढावा." +lang: mr +--- + +एखाद्या कंपनी किंवा संस्थेद्वारे चालवल्या जाणाऱ्या केंद्रीकृत सर्व्हरच्या विपरीत, विकेंद्रित स्टोरेज सिस्टममध्ये वापरकर्ता-ऑपरेटरच्या पीअर-टू-पीअर नेटवर्कचा समावेश असतो जे एकूण डेटाचा काही भाग धारण करतात, ज्यामुळे एक लवचिक फाइल स्टोरेज शेअरिंग सिस्टम तयार होते. हे ब्लॉकचेन-आधारित ॲप्लिकेशन किंवा कोणत्याही पीअर-टू-पीअर-आधारित नेटवर्कमध्ये असू शकतात. + +Ethereum स्वतः एक विकेंद्रित स्टोरेज सिस्टम म्हणून वापरले जाऊ शकते, आणि जेव्हा सर्व स्मार्ट कॉन्ट्रॅक्ट्समध्ये कोड स्टोरेजचा विचार येतो तेव्हा ते वापरले जाते. तथापि, जेव्हा मोठ्या प्रमाणात डेटा येतो, तेव्हा Ethereum त्यासाठी डिझाइन केलेले नव्हते. चेन सातत्याने वाढत आहे, परंतु हे लिहिण्याच्या वेळी, Ethereum चेन सुमारे 500GB - 1TB आहे ([क्लायंटवर अवलंबून](https://etherscan.io/chartsync/chaindefault)), आणि नेटवर्कवरील प्रत्येक नोडला सर्व डेटा संग्रहित करण्यास सक्षम असणे आवश्यक आहे. जर चेन मोठ्या प्रमाणात डेटापर्यंत (समजा 5TBs) विस्तारली, तर सर्व नोड्ससाठी चालू राहणे व्यवहार्य होणार नाही. तसेच, [gas](/developers/docs/gas) शुल्कामुळे मेननेटवर इतका डेटा तैनात करण्याचा खर्च खूप जास्त असेल. + +या मर्यादांमुळे, मोठ्या प्रमाणात डेटा विकेंद्रित पद्धतीने संग्रहित करण्यासाठी आम्हाला वेगळ्या चेन किंवा पद्धतीची आवश्यकता आहे. + +विकेंद्रित स्टोरेज (dStorage) पर्यायांचा विचार करताना, वापरकर्त्याने काही गोष्टी लक्षात ठेवल्या पाहिजेत. + +- टिकाऊपणाची यंत्रणा / प्रोत्साहन रचना +- डेटा टिकवून ठेवण्याची अंमलबजावणी +- विकेंद्रितता +- एकमत + +## टिकाऊपणाची यंत्रणा / प्रोत्साहन रचना {#persistence-mechanism} + +### ब्लॉकचेन-आधारित {#blockchain-based} + +डेटाचा एखादा तुकडा कायमचा टिकून राहावा यासाठी, आम्हाला एका टिकाऊपणाच्या यंत्रणेचा वापर करणे आवश्यक आहे. उदाहरणार्थ, Ethereum वर, टिकाऊपणाची यंत्रणा अशी आहे की नोड चालवताना संपूर्ण चेनचा हिशोब ठेवणे आवश्यक आहे. डेटाचे नवीन तुकडे चेनच्या शेवटी जोडले जातात आणि ती वाढतच राहते - ज्यामुळे प्रत्येक नोडला सर्व एम्बेड केलेला डेटा प्रतिकृत करणे आवश्यक असते. + +याला **ब्लॉकचेन-आधारित** टिकाऊपणा म्हणून ओळखले जाते. + +ब्लॉकचेन-आधारित टिकाऊपणाची समस्या अशी आहे की चेन सर्व डेटा व्यवहार्यपणे सांभाळण्यासाठी आणि संग्रहित करण्यासाठी खूप मोठी होऊ शकते (उदा., [अनेक स्त्रोत](https://healthit.com.au/how-big-is-the-internet-and-how-do-we-measure-it/) अंदाजानुसार इंटरनेटला 40 झेटाबाईट्स पेक्षा जास्त स्टोरेज क्षमतेची आवश्यकता असेल). + +ब्लॉकचेनमध्ये काही प्रकारची प्रोत्साहन रचना देखील असणे आवश्यक आहे. ब्लॉकचेन-आधारित टिकाऊपणासाठी, व्हॅलिडेटरला पेमेंट केले जाते. जेव्हा डेटा चेनमध्ये जोडला जातो, तेव्हा व्हॅलिडेटर्सना तो डेटा जोडण्यासाठी पैसे दिले जातात. + +ब्लॉकचेन-आधारित टिकाऊपणा असलेले प्लॅटफॉर्म: + +- Ethereum +- [Arweave](https://www.arweave.org/) + +### कॉन्ट्रॅक्ट-आधारित {#contract-based} + +**कॉन्ट्रॅक्ट-आधारित** टिकाऊपणाचा अंतर्ज्ञान असा आहे की डेटा प्रत्येक नोडद्वारे प्रतिकृत केला जाऊ शकत नाही आणि कायमचा संग्रहित केला जाऊ शकत नाही, आणि त्याऐवजी तो कॉन्ट्रॅक्ट करारांद्वारे सांभाळला पाहिजे. हे एकाधिक नोड्ससह केलेले करार आहेत ज्यांनी विशिष्ट कालावधीसाठी डेटाचा एक तुकडा ठेवण्याचे वचन दिले आहे. डेटा टिकवून ठेवण्यासाठी ते संपल्यावर त्यांना परतावा किंवा त्यांचे नूतनीकरण करणे आवश्यक आहे. + +बहुतेक प्रकरणांमध्ये, सर्व डेटा ऑनचेन संग्रहित करण्याऐवजी, डेटा चेनवर कुठे आहे याचा हॅश संग्रहित केला जातो. यामुळे, सर्व डेटा ठेवण्यासाठी संपूर्ण चेनला स्केल करण्याची आवश्यकता नाही. + +कॉन्ट्रॅक्ट-आधारित टिकाऊपणा असलेले प्लॅटफॉर्म: + +- [Filecoin](https://docs.filecoin.io/basics/what-is-filecoin) +- [Skynet](https://sia.tech/) +- [Storj](https://storj.io/) +- [Züs](https://zus.network/) +- [Crust Network](https://crust.network) +- [Swarm](https://www.ethswarm.org/) +- [4EVERLAND](https://www.4everland.org/) + +### अतिरिक्त विचार {#additional-consideration} + +IPFS ही फाईल्स, वेबसाइट्स, ॲप्लिकेशन्स आणि डेटा संग्रहित करण्यासाठी आणि ॲक्सेस करण्यासाठी एक वितरित प्रणाली आहे. यात कोणतीही अंगभूत प्रोत्साहन योजना नाही, परंतु त्याऐवजी दीर्घकालीन टिकाऊपणासाठी वरील कोणत्याही कॉन्ट्रॅक्ट-आधारित प्रोत्साहन उपायांसह याचा वापर केला जाऊ शकतो. IPFS वर डेटा टिकवून ठेवण्याचा दुसरा मार्ग म्हणजे पिनिंग सेवेसह काम करणे, जी तुमच्यासाठी तुमचा डेटा "पिन" करेल. तुम्ही तुमचा स्वतःचा IPFS नोड चालवून तुमचा आणि/किंवा इतरांचा डेटा विनामूल्य टिकवून ठेवण्यासाठी नेटवर्कमध्ये योगदान देऊ शकता! + +- [IPFS](https://docs.ipfs.io/concepts/what-is-ipfs/) +- [Pinata](https://www.pinata.cloud/) _(IPFS पिनिंग सेवा)_ +- [web3.storage](https://web3.storage/) _(IPFS/Filecoin पिनिंग सेवा)_ +- [Infura](https://infura.io/product/ipfs) _(IPFS पिनिंग सेवा)_ +- [IPFS Scan](https://ipfs-scan.io) _(IPFS पिनिंग एक्सप्लोरर)_ +- [4EVERLAND](https://www.4everland.org/)_(IPFS पिनिंग सेवा)_ +- [Filebase](https://filebase.com) _(IPFS पिनिंग सेवा)_ +- [Spheron Network](https://spheron.network/) _(IPFS/Filecoin पिनिंग सेवा)_ + +SWARM हे स्टोरेज प्रोत्साहन प्रणाली आणि स्टोरेज भाडे किंमत ओरॅकल असलेले विकेंद्रित डेटा स्टोरेज आणि वितरण तंत्रज्ञान आहे. + +## डेटा टिकवून ठेवणे {#data-retention} + +डेटा टिकवून ठेवण्यासाठी, सिस्टममध्ये डेटा टिकवून ठेवला गेला आहे याची खात्री करण्यासाठी काही प्रकारची यंत्रणा असणे आवश्यक आहे. + +### चॅलेंज यंत्रणा {#challenge-mechanism} + +डेटा टिकवून ठेवला गेला आहे याची खात्री करण्याचा एक सर्वात लोकप्रिय मार्ग म्हणजे, त्यांच्याकडे अजूनही डेटा आहे याची खात्री करण्यासाठी नोड्सना जारी केलेल्या काही प्रकारच्या क्रिप्टोग्राफिक चॅलेंजचा वापर करणे. एक सोपे उदाहरण म्हणजे Arweave चा प्रूफ-ऑफ-एक्सेस पाहणे. त्यांच्याकडे सर्वात अलीकडील ब्लॉक आणि भूतकाळातील यादृच्छिक ब्लॉक दोन्हीवर डेटा आहे की नाही हे पाहण्यासाठी ते नोड्सना आव्हान देतात. जर नोड उत्तर देऊ शकला नाही, तर त्याला दंड ठोठावला जातो. + +चॅलेंज यंत्रणेसह dStorage चे प्रकार: + +- Züs +- Skynet +- Arweave +- Filecoin +- Crust Network +- 4EVERLAND + +### विकेंद्रितता {#decentrality} + +प्लॅटफॉर्मच्या विकेंद्रीकरणाची पातळी मोजण्यासाठी कोणतीही उत्तम साधने नाहीत, परंतु सर्वसाधारणपणे, तुम्हाला अशी साधने वापरायची असतील ज्यात KYC चे कोणतेही स्वरूप नाही, जेणेकरून ते केंद्रीकृत नाहीत याचा पुरावा देता येईल. + +KYC शिवाय विकेंद्रित साधने: + +- Skynet +- Arweave +- Filecoin +- IPFS +- Ethereum +- Crust Network +- 4EVERLAND + +### Consensus {#consensus} + +यापैकी बहुतेक साधनांची [एकमत यंत्रणेची](/developers/docs/consensus-mechanisms/) स्वतःची आवृत्ती आहे, परंतु सामान्यतः ते [**प्रूफ-ऑफ-वर्क (PoW)**](/developers/docs/consensus-mechanisms/pow/) किंवा [**प्रूफ-ऑफ-स्टेक (PoS)**](/developers/docs/consensus-mechanisms/pos/) यावर आधारित आहेत. + +प्रूफ-ऑफ-वर्क आधारित: + +- Skynet +- Arweave + +प्रूफ-ऑफ-स्टेक आधारित: + +- Ethereum +- Filecoin +- Züs +- Crust Network + +## संबंधित साधने {#related-tools} + +**IPFS - _इंटरप्लॅनेटरी फाइल सिस्टम ही Ethereum साठी एक विकेंद्रित स्टोरेज आणि फाइल संदर्भ प्रणाली आहे._** + +- [Ipfs.io](https://ipfs.io/) +- [दस्तऐवजीकरण](https://docs.ipfs.io/) +- [GitHub](https://github.com/ipfs/ipfs) + +**Storj DCS - _डेव्हलपर्ससाठी सुरक्षित, खाजगी आणि S3-सुसंगत विकेंद्रित क्लाउड ऑब्जेक्ट स्टोरेज._** + +- [Storj.io](https://storj.io/) +- [दस्तऐवजीकरण](https://docs.storj.io/) +- [GitHub](https://github.com/storj/storj) + +**Sia - _खरेदीदार आणि विक्रेत्यांना थेट व्यवहार करण्याची परवानगी देऊन, एक ट्रस्टलेस क्लाउड स्टोरेज मार्केटप्लेस तयार करण्यासाठी क्रिप्टोग्राफीचा उपयोग करते._** + +- [Skynet.net](https://sia.tech/) +- [दस्तऐवजीकरण](https://docs.sia.tech/) +- [GitHub](https://github.com/SiaFoundation/) + +**Filecoin - _Filecoin IPFS च्या मागे असलेल्या त्याच टीमने तयार केले आहे. हा IPFS आदर्शांवर एक प्रोत्साहन स्तर आहे._** + +- [Filecoin.io](https://filecoin.io/) +- [दस्तऐवजीकरण](https://docs.filecoin.io/) +- [GitHub](https://github.com/filecoin-project/) + +**Arweave - _Arweave हे डेटा संग्रहित करण्यासाठी एक dStorage प्लॅटफॉर्म आहे._** + +- [Arweave.org](https://www.arweave.org/) +- [दस्तऐवजीकरण](https://docs.arweave.org/info/) +- [Arweave](https://github.com/ArweaveTeam/arweave/) + +**Züs - _Züs हे शार्डिंग आणि ब्लॉबर्ससह एक प्रूफ-ऑफ-स्टेक dStorage प्लॅटफॉर्म आहे._** + +- [zus.network](https://zus.network/) +- [दस्तऐवजीकरण](https://docs.zus.network/zus-docs/) +- [GitHub](https://github.com/0chain/) + +**Crust Network - _Crust हे IPFS वर एक dStorage प्लॅटफॉर्म आहे._** + +- [Crust.network](https://crust.network) +- [दस्तऐवजीकरण](https://wiki.crust.network) +- [GitHub](https://github.com/crustio) + +**Swarm - _Ethereum web3 स्टॅकसाठी एक वितरित स्टोरेज प्लॅटफॉर्म आणि सामग्री वितरण सेवा._** + +- [EthSwarm.org](https://www.ethswarm.org/) +- [दस्तऐवजीकरण](https://docs.ethswarm.org/) +- [GitHub](https://github.com/ethersphere/) + +**OrbitDB - _IPFS वर एक विकेंद्रित पीअर-टू-पीअर डेटाबेस._** + +- [OrbitDB.org](https://orbitdb.org/) +- [दस्तऐवजीकरण](https://github.com/orbitdb/field-manual/) +- [GitHub](https://github.com/orbitdb/orbit-db/) + +**Aleph.im - _विकेंद्रित क्लाउड प्रकल्प (डेटाबेस, फाइल स्टोरेज, कॉम्प्युटिंग आणि DID). ऑफचेन आणि ऑनचेन पीअर-टू-पीअर तंत्रज्ञानाचे एक अद्वितीय मिश्रण. IPFS आणि मल्टी-चेन सुसंगतता._** + +- [Aleph.im](https://aleph.cloud/) +- [दस्तऐवजीकरण](https://docs.aleph.cloud/) +- [GitHub](https://github.com/aleph-im/) + +**Ceramic - _डेटा-समृद्ध आणि आकर्षक ॲप्लिकेशन्ससाठी वापरकर्ता-नियंत्रित IPFS डेटाबेस स्टोरेज._** + +- [Ceramic.network](https://ceramic.network/) +- [दस्तऐवजीकरण](https://developers.ceramic.network/) +- [GitHub](https://github.com/ceramicnetwork/js-ceramic/) + +**Filebase - _S3-सुसंगत विकेंद्रित स्टोरेज आणि जिओ-रिडंडंट IPFS पिनिंग सेवा. Filebase द्वारे IPFS वर अपलोड केलेल्या सर्व फायली जगभरात 3x प्रतिकृतीसह Filebase पायाभूत सुविधेवर स्वयंचलितपणे पिन केल्या जातात._** + +- [Filebase.com](https://filebase.com/) +- [दस्तऐवजीकरण](https://docs.filebase.com/) +- [GitHub](https://github.com/filebase) + +**4EVERLAND - _एक वेब 3.0 क्लाउड कॉम्प्युटिंग प्लॅटफॉर्म जो स्टोरेज, कॉम्प्युट आणि नेटवर्किंग कोर क्षमतांना एकत्रित करतो, S3 सुसंगत आहे आणि IPFS आणि Arweave सारख्या विकेंद्रित स्टोरेज नेटवर्कवर सिंक्रोनस डेटा स्टोरेज प्रदान करतो._** + +- [4everland.org](https://www.4everland.org/) +- [दस्तऐवजीकरण](https://docs.4everland.org/) +- [GitHub](https://github.com/4everland) + +**Kaleido - _एक ब्लॉकचेन-ॲज-अ-सर्व्हिस प्लॅटफॉर्म ज्यात क्लिक-बटण IPFS नोड्स आहेत_** + +- [Kaleido](https://kaleido.io/) +- [दस्तऐवजीकरण](https://docs.kaleido.io/kaleido-services/ipfs/) +- [GitHub](https://github.com/kaleido-io) + +**Spheron Network - _Spheron हे एक प्लॅटफॉर्म-ॲज-अ-सर्व्हिस (PaaS) आहे जे सर्वोत्तम कामगिरीसह विकेंद्रित पायाभूत सुविधांवर त्यांचे ॲप्लिकेशन्स लॉन्च करू इच्छिणाऱ्या dApps साठी डिझाइन केलेले आहे. हे कॉम्प्युट, विकेंद्रित स्टोरेज, CDN आणि वेब होस्टिंग आउट ऑफ द बॉक्स प्रदान करते._** + +- [spheron.network](https://spheron.network/) +- [दस्तऐवजीकरण](https://docs.spheron.network/) +- [GitHub](https://github.com/spheronFdn) + +## पुढील वाचन {#further-reading} + +- [विकेंद्रित स्टोरेज म्हणजे काय?](https://coinmarketcap.com/academy/article/what-is-decentralized-storage-a-deep-dive-by-filecoin) - _CoinMarketCap_ +- [विकेंद्रित स्टोरेजबद्दलच्या पाच सामान्य मिथकांना दूर करणे](https://www.storj.io/blog/busting-five-common-myths-about-decentralized-storage) - _Storj_ + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [डेव्हलपमेंट फ्रेमवर्क्स](/developers/docs/frameworks/) diff --git a/public/content/translations/mr/developers/docs/transactions/index.md b/public/content/translations/mr/developers/docs/transactions/index.md new file mode 100644 index 00000000000..7b6ab93d7d2 --- /dev/null +++ b/public/content/translations/mr/developers/docs/transactions/index.md @@ -0,0 +1,231 @@ +--- +title: "व्यवहार" +description: "Ethereum व्यवहारांचे विहंगावलोकन – ते कसे कार्य करतात, त्यांची डेटा संरचना, आणि त्यांना ॲप्लिकेशनद्वारे कसे पाठवायचे." +lang: mr +--- + +व्यवहार हे खात्यांमधून क्रिप्टोग्राफिकली स्वाक्षरी केलेल्या सूचना आहेत. एक खाते Ethereum नेटवर्कची स्थिती अद्ययावत करण्यासाठी व्यवहार सुरू करेल. सर्वात सोपा व्यवहार म्हणजे एका खात्यातून दुसऱ्या खात्यात ETH हस्तांतरित करणे. + +## पूर्वतयारी {#prerequisites} + +हे पान तुम्हाला अधिक चांगल्या प्रकारे समजण्यास मदत करण्यासाठी, आम्ही शिफारस करतो की तुम्ही प्रथम [खाती](/developers/docs/accounts/) आणि आमचा [Ethereum चा परिचय](/developers/docs/intro-to-ethereum/) वाचा. + +## व्यवहार म्हणजे काय? {#whats-a-transaction} + +Ethereum व्यवहार म्हणजे बाह्य-मालकीच्या खात्याद्वारे सुरू केलेली क्रिया, दुसऱ्या शब्दांत, मानवाद्वारे व्यवस्थापित केलेले खाते, कराराद्वारे नाही. उदाहरणार्थ, जर बॉबने ॲलिसला १ ETH पाठवले, तर बॉबच्या खात्यातून पैसे वजा केले पाहिजेत आणि ॲलिसच्या खात्यात जमा केले पाहिजेत. ही स्थिती-बदलणारी क्रिया एका व्यवहारामध्ये होते. + +![व्यवहारामुळे स्थितीतील बदल दर्शवणारे रेखाचित्र](./tx.png) +_[Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रुपांतरित रेखाचित्र_ + +व्यवहार, जे EVM ची स्थिती बदलतात, ते संपूर्ण नेटवर्कवर प्रसारित करणे आवश्यक आहे. कोणताही नोड EVM वर व्यवहार कार्यान्वित करण्याची विनंती प्रसारित करू शकतो; हे घडल्यानंतर, एक व्हॅलिडेटर तो व्यवहार कार्यान्वित करेल आणि परिणामी स्थितीतील बदल उर्वरित नेटवर्कमध्ये प्रसारित करेल. + +व्यवहारांसाठी शुल्क आवश्यक आहे आणि त्यांना प्रमाणित ब्लॉकमध्ये समाविष्ट करणे आवश्यक आहे. हे विहंगावलोकन सोपे करण्यासाठी आम्ही गॅस शुल्क आणि प्रमाणीकरण यावर इतरत्र चर्चा करू. + +सादर केलेल्या व्यवहारामध्ये खालील माहिती समाविष्ट असते: + +- `from` – प्रेषकाचा पत्ता, जो व्यवहारावर स्वाक्षरी करेल. हे बाह्य-मालकीचे खाते असेल कारण करार खाती व्यवहार पाठवू शकत नाहीत +- `to` – प्राप्तकर्त्याचा पत्ता (जर बाह्य-मालकीचे खाते असेल, तर व्यवहार मूल्य हस्तांतरित करेल. जर करार खाते असेल तर, व्यवहार करार कोड कार्यान्वित करेल) +- `signature` – प्रेषकाचा ओळखकर्ता. जेव्हा प्रेषकाची खाजगी की व्यवहारावर स्वाक्षरी करते तेव्हा हे तयार केले जाते आणि पुष्टी करते की प्रेषकाने या व्यवहारास अधिकृत केले आहे +- `nonce` - एक क्रमशः वाढणारा काउंटर जो खात्यामधील व्यवहार क्रमांक दर्शवतो +- `value` – प्रेषकाकडून प्राप्तकर्त्याकडे हस्तांतरित करायची ETH ची रक्कम (WEI मध्ये दर्शवलेले, जिथे १ ETH = १e+१८ wei) +- `input data` – ऐच्छिक डेटा समाविष्ट करण्यासाठी वैकल्पिक फील्ड +- `gasLimit` – व्यवहारामुळे वापरल्या जाऊ शकणाऱ्या गॅस युनिट्सची कमाल रक्कम. [EVM](/developers/docs/evm/opcodes) प्रत्येक संगणकीय पायरीसाठी आवश्यक असलेल्या गॅसच्या युनिट्सची माहिती देते +- `maxPriorityFeePerGas` - व्हॅलिडेटरला टीप म्हणून समाविष्ट करण्यासाठी वापरलेल्या गॅसची कमाल किंमत +- `maxFeePerGas` - व्यवहारासाठी प्रति युनिट गॅससाठी देण्यास तयार असलेले कमाल शुल्क (`baseFeePerGas` आणि `maxPriorityFeePerGas` सह) + +गॅस म्हणजे व्हॅलिडेटरद्वारे व्यवहार प्रक्रिया करण्यासाठी आवश्यक असलेल्या गणनेचा संदर्भ. वापरकर्त्यांना या गणनेसाठी शुल्क भरावे लागते. `gasLimit`, आणि `maxPriorityFeePerGas` व्हॅलिडेटरला दिले जाणारे कमाल व्यवहार शुल्क निश्चित करतात. [गॅसवर अधिक](/developers/docs/gas/). + +व्यवहार ऑब्जेक्ट काहीसा असा दिसेल: + +```js +{ + from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8", + to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a", + gasLimit: "21000", + maxFeePerGas: "300", + maxPriorityFeePerGas: "10", + nonce: "0", + value: "10000000000" +} +``` + +परंतु व्यवहार ऑब्जेक्टवर प्रेषकाच्या खाजगी की वापरून स्वाक्षरी करणे आवश्यक आहे. हे सिद्ध करते की व्यवहार केवळ प्रेषकाकडूनच आला आहे आणि तो फसवणुकीने पाठवला गेला नाही. + +Geth सारखा Ethereum क्लायंट ही स्वाक्षरी प्रक्रिया हाताळेल. + +उदाहरण [JSON-RPC](/developers/docs/apis/json-rpc) कॉल: + +```json +{ + "id": 2, + "jsonrpc": "2.0", + "method": "account_signTransaction", + "params": [ + { + "from": "0x1923f626bb8dc025849e00f99c25fe2b2f7fb0db", + "gas": "0x55555", + "maxFeePerGas": "0x1234", + "maxPriorityFeePerGas": "0x1234", + "input": "0xabcd", + "nonce": "0x0", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x1234" + } + ] +} +``` + +उदाहरण प्रतिसाद: + +```json +{ + "jsonrpc": "2.0", + "id": 2, + "result": { + "raw": "0xf88380018203339407a565b7ed7d7a678680a4c162885bedbb695fe080a44401a6e4000000000000000000000000000000000000000000000000000000000000001226a0223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20ea02aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "tx": { + "nonce": "0x0", + "maxFeePerGas": "0x1234", + "maxPriorityFeePerGas": "0x1234", + "gas": "0x55555", + "to": "0x07a565b7ed7d7a678680a4c162885bedbb695fe0", + "value": "0x1234", + "input": "0xabcd", + "v": "0x26", + "r": "0x223a7c9bcf5531c99be5ea7082183816eb20cfe0bbc322e97cc5c7f71ab8b20e", + "s": "0x2aadee6b34b45bb15bc42d9c09de4a6754e7000908da72d48cc7704971491663", + "hash": "0xeba2df809e7a612a0a0d444ccfa5c839624bdc00dd29e3340d46df3870f8a30e" + } + } +} +``` + +- `raw` हे स्वाक्षरी केलेला व्यवहार [रिकर्सिव्ह लेंथ प्रिफिक्स (RLP)](/developers/docs/data-structures-and-encoding/rlp) एन्कोड केलेल्या स्वरूपात आहे +- `tx` हे JSON स्वरूपात स्वाक्षरी केलेला व्यवहार आहे + +स्वाक्षरी हॅशसह, व्यवहार क्रिप्टोग्राफिकली सिद्ध केला जाऊ शकतो की तो प्रेषकाकडून आला आहे आणि नेटवर्कवर सादर केला गेला आहे. + +### डेटा फील्ड {#the-data-field} + +बहुतेक व्यवहार बाह्य-मालकीच्या खात्यातून करारावर प्रवेश करतात. +बहुतेक करार Solidity मध्ये लिहिलेले आहेत आणि ते त्यांच्या डेटा फील्डचा अर्थ [ॲप्लिकेशन बायनरी इंटरफेस (ABI)](/glossary/#abi) नुसार लावतात. + +पहिले चार बाइट्स फंक्शनच्या नावाचा आणि वितर्कांचा हॅश वापरून कोणते फंक्शन कॉल करायचे हे निर्दिष्ट करतात. +[या डेटाबेस](https://www.4byte.directory/signatures/) चा वापर करून तुम्ही सिलेक्टरमधून फंक्शन ओळखू शकता. + +उर्वरित कॉलगडाटा वितर्क आहेत, जे [ABI स्पेसिफिकेशन्समध्ये निर्दिष्ट केल्याप्रमाणे एन्कोड केलेले आहेत](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding). + +उदाहरणार्थ, [या व्यवहारावर](https://etherscan.io/tx/0xd0dcbe007569fcfa1902dae0ab8b4e078efe42e231786312289b1eee5590f6a1) एक नजर टाकूया. +कॉलडाटा पाहण्यासाठी **अधिक पाहण्यासाठी क्लिक करा** वापरा. + +फंक्शन सिलेक्टर `0xa9059cbb` आहे. [या स्वाक्षरीसह अनेक ज्ञात फंक्शन्स](https://www.4byte.directory/signatures/?bytes4_signature=0xa9059cbb) आहेत. +या प्रकरणात, [करार स्रोत कोड](https://etherscan.io/address/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48#code) Etherscan वर अपलोड केला आहे, म्हणून आम्हाला माहित आहे की फंक्शन `transfer(address,uint256)` आहे. + +उर्वरित डेटा आहे: + +``` +0000000000000000000000004f6742badb049791cd9a37ea913f2bac38d01279 +000000000000000000000000000000000000000000000000000000003b0559f4 +``` + +ABI स्पेसिफिकेशन्सनुसार, पूर्णांक मूल्ये (जसे की पत्ते, जे २०-बाइट पूर्णांक आहेत) ABI मध्ये ३२-बाइट शब्दांच्या रूपात दिसतात, ज्यांच्या समोर शून्यांनी पॅडिंग केलेले असते. +म्हणून आम्हाला माहित आहे की `to` पत्ता [`4f6742badb049791cd9a37ea913f2bac38d01279`](https://etherscan.io/address/0x4f6742badb049791cd9a37ea913f2bac38d01279) आहे. +`value` 0x3b0559f4 = ९९०२०६४५२ आहे. + +## व्यवहारांचे प्रकार {#types-of-transactions} + +Ethereum वर काही वेगवेगळ्या प्रकारचे व्यवहार आहेत: + +- नियमित व्यवहार: एका खात्यातून दुसऱ्या खात्यात केलेला व्यवहार. +- करार उपयोजन व्यवहार: 'to' पत्त्याशिवाय केलेला व्यवहार, जिथे डेटा फील्ड करार कोडसाठी वापरले जाते. +- कराराची अंमलबजावणी: उपयोजित स्मार्ट कराराशी संवाद साधणारा व्यवहार. या प्रकरणात, 'to' पत्ता स्मार्ट करार पत्ता आहे. + +### गॅसवर {#on-gas} + +नमूद केल्याप्रमाणे, व्यवहार कार्यान्वित करण्यासाठी [गॅस](/developers/docs/gas/) खर्च येतो. साध्या हस्तांतरण व्यवहारांना २१००० युनिट्स गॅसची आवश्यकता असते. + +म्हणून बॉबला ॲलिसला १ ETH पाठवण्यासाठी १९० gwei च्या `baseFeePerGas` आणि १० gwei च्या `maxPriorityFeePerGas` वर, बॉबला खालील शुल्क भरावे लागेल: + +``` +(१९० + १०) * २१००० = ४,२००,००० gwei +--किंवा-- +०.००४२ ETH +``` + +बॉबच्या खात्यातून **-१.००४२ ETH** डेबिट केले जातील (ॲलिससाठी १ ETH + गॅस शुल्कात ०.००४२ ETH) + +ॲलिसच्या खात्यात **+१.० ETH** जमा केले जातील + +आधार शुल्क **-०.००३९९ ETH** बर्न केले जाईल + +व्हॅलिडेटर **+०.०००२१० ETH** टीप ठेवतो + +![न वापरलेला गॅस कसा परत केला जातो हे दर्शवणारे रेखाचित्र](./gas-tx.png) +_[Ethereum EVM illustrated](https://takenobu-hs.github.io/downloads/ethereum_evm_illustrated.pdf) वरून रुपांतरित रेखाचित्र_ + +व्यवहारात न वापरलेला कोणताही गॅस वापरकर्त्याच्या खात्यात परत केला जातो. + +### स्मार्ट करार संवाद {#smart-contract-interactions} + +स्मार्ट कराराचा समावेश असलेल्या कोणत्याही व्यवहारासाठी गॅस आवश्यक आहे. + +स्मार्ट करारांमध्ये [`view`](https://docs.soliditylang.org/en/latest/contracts.html#view-functions) किंवा [`pure`](https://docs.soliditylang.org/en/latest/contracts.html#pure-functions) म्हणून ओळखले जाणारे फंक्शन्स देखील असू शकतात, जे कराराची स्थिती बदलत नाहीत. त्यामुळे, EOA मधून या फंक्शन्सना कॉल करण्यासाठी कोणत्याही गॅसची आवश्यकता नसते. या परिस्थितीसाठी अंतर्निहित RPC कॉल [`eth_call`](/developers/docs/apis/json-rpc#eth_call) आहे. + +`eth_call` वापरून प्रवेश करण्याच्या विपरीत, हे `view` किंवा `pure` फंक्शन्स सामान्यतः अंतर्गतपणे (म्हणजे, करारातूनच किंवा दुसऱ्या करारातून) कॉल केले जातात, ज्यासाठी गॅस खर्च येतो. + +## व्यवहार जीवनचक्र {#transaction-lifecycle} + +एकदा व्यवहार सादर केल्यावर खालील गोष्टी घडतात: + +1. एक व्यवहार हॅश क्रिप्टोग्राफिकली तयार केला जातो: + `0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017` +2. त्यानंतर व्यवहार नेटवर्कवर प्रसारित केला जातो आणि इतर सर्व प्रलंबित नेटवर्क व्यवहारांचा समावेश असलेल्या व्यवहार पूलमध्ये जोडला जातो. +3. एका व्हॅलिडेटरने तुमचा व्यवहार निवडून तो ब्लॉकमध्ये समाविष्ट करणे आवश्यक आहे जेणेकरून व्यवहार सत्यापित होईल आणि तो "यशस्वी" मानला जाईल. +4. जसजसा वेळ जाईल तसतसे तुमच्या व्यवहाराचा समावेश असलेला ब्लॉक "न्याय्य" आणि नंतर "अंतिम" म्हणून अपग्रेड केला जाईल. हे अपग्रेड्स तुमचा व्यवहार यशस्वी झाल्याची आणि तो कधीही बदलला जाणार नाही याची अधिक खात्री देतात. एकदा एखादा ब्लॉक "अंतिम" झाला की तो फक्त नेटवर्क स्तरावरील हल्ल्यानेच बदलला जाऊ शकतो ज्यासाठी अब्जावधी डॉलर्स खर्च येऊ शकतो. + +## एक दृश्यात्मक डेमो {#a-visual-demo} + +ऑस्टिनला व्यवहार, गॅस आणि मायनिंगमधून तुम्हाला मार्गदर्शन करताना पहा. + + + +## टाइप्ड ट्रान्झॅक्शन एनव्हेलप {#typed-transaction-envelope} + +Ethereum मध्ये मूळतः व्यवहारांसाठी एकच स्वरूप होते. प्रत्येक व्यवहारामध्ये नॉन्स, गॅस प्राइस, गॅस लिमिट, टू ॲड्रेस, व्हॅल्यू, डेटा, v, r आणि s यांचा समावेश होता. हे फील्ड्स [RLP-एन्कोडेड](/developers/docs/data-structures-and-encoding/rlp/) आहेत, जे असे दिसतात: + +`RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])` + +ॲक्सेस लिस्ट्स आणि [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) सारख्या नवीन वैशिष्ट्यांची अंमलबजावणी करण्यासाठी, जुन्या व्यवहार स्वरूपांवर परिणाम न करता, Ethereum आता अनेक प्रकारच्या व्यवहारांना समर्थन देण्यासाठी विकसित झाले आहे. + +[EIP-2718](https://eips.ethereum.org/EIPS/eip-2718) हे या वर्तनास परवानगी देते. व्यवहारांचा अर्थ असा लावला जातो: + +`TransactionType || TransactionPayload` + +जिथे फील्ड्स खालीलप्रमाणे परिभाषित आहेत: + +- `TransactionType` - ० ते ०x७f मधील एक संख्या, एकूण १२८ संभाव्य व्यवहार प्रकारांसाठी. +- `TransactionPayload` - व्यवहार प्रकाराने परिभाषित केलेली एक अनियंत्रित बाइट ॲरे. + +`TransactionType` मूल्यावर आधारित, व्यवहार खालीलप्रमाणे वर्गीकृत केला जाऊ शकतो: + +1. **प्रकार ० (लेगसी) व्यवहार:** Ethereum च्या लाँचपासून वापरले जाणारे मूळ व्यवहार स्वरूप. त्यामध्ये [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) मधील वैशिष्ट्ये जसे की डायनॅमिक गॅस शुल्क गणना किंवा स्मार्ट करारांसाठी ॲक्सेस लिस्ट्स यांचा समावेश नाही. लेगसी व्यवहारांमध्ये त्यांच्या सिरियलाइज्ड स्वरूपात त्यांचा प्रकार दर्शविणारा विशिष्ट उपसर्ग नसतो, [रिकर्सिव्ह लेंथ प्रिफिक्स (RLP)](/developers/docs/data-structures-and-encoding/rlp) एन्कोडिंग वापरताना ते `0xf8` बाइटने सुरू होतात. या व्यवहारांसाठी TransactionType मूल्य `0x0` आहे. + +2. **प्रकार १ व्यवहार:** Ethereum च्या [बर्लिन अपग्रेड](/ethereum-forks/#berlin) चा भाग म्हणून [EIP-2930](https://eips.ethereum.org/EIPS/eip-2930) मध्ये सादर केलेले, या व्यवहारांमध्ये `accessList` पॅरामीटरचा समावेश आहे. ही यादी पत्ते आणि स्टोरेज की निर्दिष्ट करते ज्यावर व्यवहार प्रवेश करण्याची अपेक्षा करतो, ज्यामुळे स्मार्ट करारांचा समावेश असलेल्या जटिल व्यवहारांसाठी [गॅस](/developers/docs/gas/) खर्च कमी होण्यास मदत होते. EIP-1559 शुल्क बाजारातील बदल प्रकार १ व्यवहारांमध्ये समाविष्ट नाहीत. प्रकार १ व्यवहारांमध्ये `yParity` पॅरामीटरचा देखील समावेश असतो, जो `0x0` किंवा `0x1` असू शकतो, जो secp256k1 स्वाक्षरीच्या y-मूल्याची समानता दर्शवतो. ते `0x01` बाइटने सुरू झाल्यामुळे ओळखले जातात आणि त्यांचे TransactionType मूल्य `0x1` आहे. + +3. **प्रकार २ व्यवहार**, सामान्यतः EIP-1559 व्यवहार म्हणून ओळखले जातात, हे Ethereum च्या [लंडन अपग्रेड](/ethereum-forks/#london) मध्ये, [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) मध्ये सादर केलेले व्यवहार आहेत. ते Ethereum नेटवर्कवर मानक व्यवहार प्रकार बनले आहेत. हे व्यवहार एक नवीन शुल्क बाजार यंत्रणा सादर करतात जी व्यवहार शुल्काचे आधार शुल्क आणि प्राधान्य शुल्कामध्ये विभाजन करून अंदाजक्षमता सुधारते. ते `0x02` बाइटने सुरू होतात आणि त्यात `maxPriorityFeePerGas` आणि `maxFeePerGas` सारख्या फील्ड्सचा समावेश असतो. प्रकार २ व्यवहार आता त्यांच्या लवचिकता आणि कार्यक्षमतेमुळे डिफॉल्ट आहेत, विशेषतः उच्च नेटवर्क गर्दीच्या काळात वापरकर्त्यांना व्यवहार शुल्क अधिक अंदाजे व्यवस्थापित करण्यात मदत करण्याच्या त्यांच्या क्षमतेमुळे पसंत केले जातात. या व्यवहारांसाठी TransactionType मूल्य `0x2` आहे. + +4. **प्रकार ३ (ब्लॉब) व्यवहार** Ethereum च्या [डेनकून अपग्रेड](/ethereum-forks/#dencun) चा भाग म्हणून [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844) मध्ये सादर करण्यात आले. हे व्यवहार "ब्लॉब" डेटा (बायनरी लार्ज ऑब्जेक्ट्स) अधिक कार्यक्षमतेने हाताळण्यासाठी डिझाइन केलेले आहेत, विशेषतः लेयर २ रोलअप्सना कमी खर्चात Ethereum नेटवर्कवर डेटा पोस्ट करण्याचा मार्ग प्रदान करून फायदा देतात. ब्लॉब व्यवहारांमध्ये `blobVersionedHashes`, `maxFeePerBlobGas`, आणि `blobGasPrice` सारख्या अतिरिक्त फील्ड्सचा समावेश असतो. ते `0x03` बाइटने सुरू होतात आणि त्यांचे TransactionType मूल्य `0x3` आहे. ब्लॉब व्यवहार Ethereum च्या डेटा उपलब्धता आणि स्केलिंग क्षमतांमध्ये एक महत्त्वपूर्ण सुधारणा दर्शवतात. + +5. **प्रकार ४ व्यवहार** Ethereum च्या [पेक्ट्रा अपग्रेड](/roadmap/pectra/) चा भाग म्हणून [EIP-7702](https://eips.ethereum.org/EIPS/eip-7702) मध्ये सादर करण्यात आले. हे व्यवहार खाते अमूर्ततेसह फॉरवर्ड-कंपॅटिबल होण्यासाठी डिझाइन केलेले आहेत. ते EOAs ला त्यांची मूळ कार्यक्षमता धोक्यात न घालता तात्पुरते स्मार्ट करार खात्यांसारखे वागण्याची परवानगी देतात. त्यामध्ये `authorization_list` पॅरामीटरचा समावेश आहे, जो EOA आपला अधिकार कोणत्या स्मार्ट कराराला सोपवतो हे निर्दिष्ट करतो. व्यवहारानंतर, EOA च्या कोड फील्डमध्ये सोपवलेल्या स्मार्ट कराराचा पत्ता असेल. + +## पुढील वाचन {#further-reading} + +- [EIP-2718: टाइप्ड ट्रान्झॅक्शन एनव्हेलप](https://eips.ethereum.org/EIPS/eip-2718) + +_तुम्हाला मदत केलेल्या सामुदायिक संसाधनाबद्दल माहिती आहे का?_ हे पृष्ठ संपादित करा आणि ते जोडा!_ + +## संबंधित विषय {#related-topics} + +- [खाती](/developers/docs/accounts/) +- [Ethereum व्हर्च्युअल मशीन (EVM)](/developers/docs/evm/) +- [गॅस](/developers/docs/gas/) diff --git a/public/content/translations/mr/developers/docs/web2-vs-web3/index.md b/public/content/translations/mr/developers/docs/web2-vs-web3/index.md new file mode 100644 index 00000000000..5bb571f4f9c --- /dev/null +++ b/public/content/translations/mr/developers/docs/web2-vs-web3/index.md @@ -0,0 +1,62 @@ +--- +title: "Web2 विरुद्ध Web3" +description: "इथेरियम ब्लॉकचेन तंत्रज्ञानावर तयार केलेल्या विकेंद्रित वेब3 ॲप्लिकेशन्सची केंद्रीकृत वेब2 सेवांसोबत तुलना करा." +lang: mr +--- + +वेब2 म्हणजे आज आपल्यापैकी बहुतेकांना माहीत असलेल्या इंटरनेटची आवृत्ती. तुमच्या वैयक्तिक डेटाच्या बदल्यात सेवा पुरवणाऱ्या कंपन्यांचे वर्चस्व असलेले इंटरनेट. इथेरियमच्या संदर्भात, वेब3 म्हणजे ब्लॉकचेनवर चालणारे विकेंद्रित ॲप्स. हे असे ॲप्स आहेत जे कोणालाही त्यांच्या वैयक्तिक डेटाचे मुद्रीकरण न करता सहभागी होण्याची परवानगी देतात. + +अधिक नवशिक्यांसाठी अनुकूल संसाधन शोधत आहात का? आमची [वेब3 ची ओळख](/web3/) पहा. + +## वेब3 चे फायदे {#web3-benefits} + +इथेरियमच्या मूळ विकेंद्रीकरणामुळे अनेक वेब3 डेव्हलपर्सनी dapps तयार करणे निवडले आहे: + +- नेटवर्कवर असलेल्या कोणालाही सेवा वापरण्याची परवानगी आहे – किंवा दुसऱ्या शब्दांत, परवानगीची आवश्यकता नाही. +- कोणीही तुम्हाला ब्लॉक करू शकत नाही किंवा सेवेचा ॲक्सेस नाकारू शकत नाही. +- नेटिव्ह टोकन, इथर (ETH) द्वारे पेमेंट अंतर्भूत आहेत. +- इथेरियम ट्युरिंग-कम्प्लीट आहे, म्हणजे तुम्ही जवळजवळ काहीही प्रोग्राम करू शकता. + +## व्यावहारिक तुलना {#practical-comparisons} + +| वेब2 | Web3 | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | +| ट्विटर कोणतेही खाते किंवा ट्वीट सेन्सॉर करू शकते | वेब3 ट्वीट्स सेन्सॉर करता येणार नाहीत कारण नियंत्रण विकेंद्रित आहे | +| पेमेंट सेवा विशिष्ट प्रकारच्या कामासाठी पेमेंटला परवानगी न देण्याचा निर्णय घेऊ शकते | वेब3 पेमेंट ॲप्सना कोणत्याही वैयक्तिक डेटाची आवश्यकता नसते आणि ते पेमेंट रोखू शकत नाहीत | +| गिग-इकॉनॉमी ॲप्सचे सर्व्हर बंद होऊ शकतात आणि कामगारांच्या उत्पन्नावर परिणाम होऊ शकतो | वेब3 सर्व्हर बंद होऊ शकत नाहीत – ते त्यांच्या बॅकएंड म्हणून इथेरियम, हजारो संगणकांचे विकेंद्रित नेटवर्क वापरतात | + +याचा अर्थ असा नाही की सर्व सेवांचे dapp मध्ये रूपांतर करणे आवश्यक आहे. ही उदाहरणे वेब2 आणि वेब3 सेवांमधील मुख्य फरकांची निदर्शक आहेत. + +## वेब3 च्या मर्यादा {#web3-limitations} + +सध्या वेब3 मध्ये काही मर्यादा आहेत: + +- स्केलेबिलिटी – व्यवहार वेब3 वर धीमे आहेत कारण ते विकेंद्रित आहेत. पेमेंटसारख्या स्टेटमधील बदलांवर नोडद्वारे प्रक्रिया करणे आणि संपूर्ण नेटवर्कमध्ये प्रसारित करणे आवश्यक आहे. +- UX – वेब3 ॲप्लिकेशन्सशी संवाद साधण्यासाठी अतिरिक्त पायऱ्या, सॉफ्टवेअर आणि शिक्षणाची आवश्यकता असू शकते. हे अवलंबण्यात एक अडथळा असू शकतो. +- ॲक्सेसिबिलिटी – आधुनिक वेब ब्राउझरमध्ये एकत्रीकरणाच्या अभावामुळे वेब3 बहुतेक वापरकर्त्यांसाठी कमी ॲक्सेसिबल बनते. +- खर्च – बहुतेक यशस्वी dapps त्यांच्या कोडचा खूप छोटा भाग ब्लॉकचेनवर ठेवतात कारण ते महाग आहे. + +## केंद्रीकरण विरुद्ध विकेंद्रीकरण {#centralization-vs-decentralization} + +खालील तक्त्यामध्ये, आम्ही केंद्रीकृत आणि विकेंद्रित डिजिटल नेटवर्क्सचे काही ढोबळ फायदे आणि तोटे सूचीबद्ध करतो. + +| केंद्रीकृत प्रणाली | विकेंद्रित प्रणाली | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| कमी नेटवर्क व्यास (सर्व सहभागी एका केंद्रीय प्राधिकरणाशी जोडलेले असतात); माहिती त्वरीत प्रसारित होते, कारण प्रसार मोठ्या प्रमाणात संगणकीय संसाधने असलेल्या केंद्रीय प्राधिकरणाद्वारे हाताळला जातो. | नेटवर्कवरील सर्वात दूरचे सहभागी एकमेकांपासून संभाव्यतः अनेक एजेस दूर असू शकतात. नेटवर्कच्या एका बाजूने प्रसारित केलेल्या माहितीला दुसऱ्या बाजूला पोहोचायला बराच वेळ लागू शकतो. | +| सहसा उच्च कार्यक्षमता (उच्च थ्रुपुट, एकूण कमी संगणकीय संसाधने खर्च) आणि अंमलबजावणी करणे सोपे. | सहसा कमी कार्यक्षमता (कमी थ्रुपुट, अधिक एकूण संगणकीय संसाधने खर्च) आणि अंमलबजावणी करणे अधिक क्लिष्ट. | +| परस्परविरोधी डेटाच्या बाबतीत, निराकरण स्पष्ट आणि सोपे आहे: सत्याचा अंतिम स्त्रोत केंद्रीय प्राधिकरण आहे. | ज्या डेटाच्या स्टेटवर सहभागींनी सिंक केलेले असणे अपेक्षित आहे, त्याबद्दल पीअर्स परस्परविरोधी दावे करत असल्यास, विवाद निराकरणासाठी एका प्रोटोकॉलची (बहुतेकदा क्लिष्ट) आवश्यकता असते. | +| अयशस्वी होण्याचा एकच बिंदू: दुर्भावनापूर्ण घटक केंद्रीय प्राधिकरणाला लक्ष्य करून नेटवर्क बंद करू शकतात. | अयशस्वी होण्याचा एकही बिंदू नाही: सहभागींच्या मोठ्या भागावर हल्ला झाला/काढून टाकले तरीही नेटवर्क कार्य करू शकते. | +| नेटवर्क सहभागींमध्ये समन्वय खूप सोपा आहे आणि एका केंद्रीय प्राधिकरणाद्वारे हाताळला जातो. केंद्रीय प्राधिकरण नेटवर्क सहभागींना अगदी कमी घर्षणासह अपग्रेड, प्रोटोकॉल अपडेट्स इत्यादी स्वीकारण्यास भाग पाडू शकते. | समन्वय अनेकदा कठीण असतो, कारण नेटवर्क-स्तरीय निर्णय, प्रोटोकॉल अपग्रेड इत्यादींमध्ये कोणत्याही एका एजंटचा अंतिम निर्णय नसतो. सर्वात वाईट परिस्थितीत, जेव्हा प्रोटोकॉल बदलांबद्दल मतभेद असतात तेव्हा नेटवर्कमध्ये फूट पडण्याची शक्यता असते. | +| केंद्रीय प्राधिकरण डेटा सेन्सॉर करू शकते, संभाव्यतः नेटवर्कच्या काही भागांना उर्वरित नेटवर्कशी संवाद साधण्यापासून तोडू शकते. | सेन्सॉरशिप खूप कठीण आहे, कारण माहितीला नेटवर्कमध्ये प्रसारित होण्याचे अनेक मार्ग आहेत. | +| नेटवर्कमधील सहभाग केंद्रीय प्राधिकरणाद्वारे नियंत्रित केला जातो. | कोणीही नेटवर्कमध्ये सहभागी होऊ शकतो; कोणतेही “गेटकीपर” नाहीत. आदर्शपणे, सहभागाचा खर्च खूप कमी असतो. | + +लक्षात घ्या की हे सामान्य नमुने आहेत जे प्रत्येक नेटवर्कमध्ये खरे ठरतीलच असे नाही. शिवाय, प्रत्यक्षात एखादे नेटवर्क किती प्रमाणात केंद्रीकृत/विकेंद्रित आहे हे एका स्पेक्ट्रमवर अवलंबून असते; कोणतेही नेटवर्क पूर्णपणे केंद्रीकृत किंवा पूर्णपणे विकेंद्रित नसते. + +## पुढील वाचन {#further-reading} + +- [वेब3 काय आहे?](/web3/) - _ethereum.org_ +- [वेब 3.0 ॲप्लिकेशनची रचना](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _प्रीती कासिरेड्डी_ +- [विकेंद्रीकरणाचा अर्थ](https://medium.com/@VitalikButerin/the-meaning-of-decentralization-a0c92b76a274) _6 फेब्रुवारी, 2017 - विटालिक बुटेरिन_ +- [विकेंद्रीकरण का महत्त्वाचे आहे](https://onezero.medium.com/why-decentralization-matters-5e3f79f7638e) _18 फेब्रुवारी, 2018 - ख्रिस डिक्सन_ +- [वेब 3.0 काय आहे आणि ते का महत्त्वाचे आहे](https://medium.com/fabric-ventures/what-is-web-3-0-why-it-matters-934eb07f3d2b) _31 डिसेंबर, 2019 - मॅक्स मर्श आणि रिचर्ड मुइरहेड_ +- [आम्हाला वेब 3.0 ची गरज का आहे](https://gavofyork.medium.com/why-we-need-web-3-0-5da4f2bf95ab) _12 सप्टेंबर, 2018 - गॅविन वुड_ diff --git a/public/content/translations/mr/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md b/public/content/translations/mr/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md new file mode 100644 index 00000000000..7faec1170f9 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/a-developers-guide-to-ethereum-part-one/index.md @@ -0,0 +1,300 @@ +--- +title: "एका Python डेव्हलपरसाठी Ethereum ची ओळख, भाग 1" +description: "Ethereum डेव्हलपमेंटची ओळख, विशेषतः Python प्रोग्रामिंग भाषेचे ज्ञान असलेल्यांसाठी उपयुक्त" +author: Marc Garreau +lang: mr +tags: [ "python", "web3.py" ] +skill: beginner +published: 2020-09-08 +source: Snake charmers +sourceUrl: https://snakecharmers.ethereum.org/a-developers-guide-to-ethereum-pt-1/ +--- + +तर, तुम्ही या Ethereum नावाच्या गोष्टीबद्दल ऐकले आहे आणि या गहन जगात प्रवेश करण्यास तयार आहात का? ही पोस्ट ब्लॉकचेनच्या काही मूलभूत गोष्टींवर पटकन प्रकाश टाकेल, त्यानंतर तुम्हाला एका सिम्युलेटेड Ethereum नोडशी संवाद साधायला लावेल – ब्लॉक डेटा वाचणे, खात्यातील शिल्लक तपासणे आणि व्यवहार पाठवणे. या प्रक्रियेत, ॲप्स बनवण्याच्या पारंपरिक पद्धती आणि हे नवीन विकेंद्रित प्रतिमान (paradigm) यांमधील फरक आम्ही अधोरेखित करू. + +## (अंदाजित) पूर्वतयारी {#soft-prerequisites} + +ही पोस्ट विविध प्रकारच्या डेव्हलपर्ससाठी सोपी आणि सहज समजण्याजोगी असावी अशी आमची इच्छा आहे. [Python टूल्स](/developers/docs/programming-languages/python/) यात सामील असतील, पण ती केवळ कल्पना पोहोचवण्याचे एक माध्यम आहेत - तुम्ही Python डेव्हलपर नसाल तरी काही हरकत नाही. तथापि, तुम्हाला आधीपासून काय माहित आहे याबद्दल मी काही गृहीतके धरणार आहे, जेणेकरून आपण पटकन Ethereum-विशिष्ट भागांकडे जाऊ शकू. + +गृहीतके: + +- तुम्ही टर्मिनलमध्ये काम करू शकता, +- तुम्ही Python कोडच्या काही ओळी लिहिल्या आहेत, +- Python आवृत्ती 3.6 किंवा त्याहून अधिक तुमच्या मशीनवर इंस्टॉल केलेले आहे ([व्हर्च्युअल एन्व्हायर्नमेंट](https://realpython.com/effective-python-environment/#virtual-environments) वापरण्यास जोरदार प्रोत्साहन दिले जाते), आणि +- तुम्ही `pip`, Python चे पॅकेज इंस्टॉलर वापरले आहे. + पुन्हा एकदा, यापैकी काहीही असत्य असल्यास, किंवा तुम्ही या लेखातील कोड पुन्हा वापरण्याची योजना करत नसल्यास, तरीही तुम्ही हे सहजपणे समजून घेऊ शकता. + +## ब्लॉकचेन्स, थोडक्यात {#blockchains-briefly} + +Ethereum चे वर्णन करण्याचे अनेक मार्ग आहेत, पण त्याच्या केंद्रस्थानी एक ब्लॉकचेन आहे. ब्लॉकचेन हे ब्लॉक्सच्या मालिकेपासून बनलेले असतात, चला तर मग तिथूनच सुरुवात करूया. सोप्या भाषेत सांगायचे झाल्यास, Ethereum ब्लॉकचेनवरील प्रत्येक ब्लॉक म्हणजे काही मेटाडेटा आणि व्यवहारांची सूची. JSON फॉरमॅटमध्ये, ते असे काहीतरी दिसते: + +```json +{ + "number": 1234567, + "hash": "0xabc123...", + "parentHash": "0xdef456...", + ..., + "transactions": [...] +} +``` + +प्रत्येक [ब्लॉक](/developers/docs/blocks/) मध्ये त्याच्या आधीच्या ब्लॉकचा संदर्भ असतो; `parentHash` म्हणजे फक्त मागील ब्लॉकचा हॅश. + +टीप: Ethereum ठराविक आकाराची मूल्ये (“हॅश”) तयार करण्यासाठी हॅश फंक्शन्सचा नियमित वापर करते. हॅश Ethereum मध्ये महत्त्वाची भूमिका बजावतात, पण सध्यासाठी तुम्ही त्यांना युनिक आयडी म्हणून समजू शकता. + +![एका ब्लॉकचेनचे चित्र, ज्यात प्रत्येक ब्लॉकच्या आतील डेटा दर्शविला आहे](./blockchain-diagram.png) + +_एक ब्लॉकचेन मूलतः एक लिंक्ड लिस्ट आहे; प्रत्येक ब्लॉकला मागील ब्लॉकचा संदर्भ असतो._ + +ही डेटा स्ट्रक्चर काही नवीन नाही, परंतु नेटवर्कचे संचालन करणारे नियम (म्हणजेच, पीअर-टू-पीअर प्रोटोकॉल) नवीन आहेत. येथे कोणतेही केंद्रीय प्राधिकरण नाही; नेटवर्क टिकवून ठेवण्यासाठी पीअर्सच्या नेटवर्कला एकत्र काम करावे लागते, आणि पुढील ब्लॉकमध्ये कोणते व्यवहार समाविष्ट करायचे हे ठरवण्यासाठी स्पर्धा करावी लागते. म्हणून, जेव्हा तुम्हाला तुमच्या मित्राला काही पैसे पाठवायचे असतील, तेव्हा तुम्हाला तो व्यवहार नेटवर्कवर प्रसारित करावा लागेल, आणि नंतर तो आगामी ब्लॉकमध्ये समाविष्ट होण्याची वाट पाहावी लागेल. + +एका वापरकर्त्याकडून दुसऱ्या वापरकर्त्याकडे पैसे खरोखरच पाठवले गेले आहेत हे पडताळून पाहण्याचा ब्लॉकचेनसाठी एकमेव मार्ग म्हणजे त्या ब्लॉकचेनचे मूळ चलन (म्हणजेच, त्या ब्लॉकचेनद्वारे तयार केलेले आणि शासित) वापरणे. Ethereum मध्ये, या चलनास ईथर म्हणतात, आणि Ethereum ब्लॉकचेनमध्ये खात्यातील शिलकीची एकमेव अधिकृत नोंद असते. + +## एक नवीन प्रतिमान (paradigm) {#a-new-paradigm} + +या नवीन विकेंद्रित टेक स्टॅकने नवीन डेव्हलपर टूल्स तयार केले आहेत. अशी टूल्स अनेक प्रोग्रामिंग भाषांमध्ये अस्तित्वात आहेत, परंतु आपण Python च्या दृष्टिकोनातून पाहणार आहोत. पुन्हा सांगतो: Python तुमची पसंतीची भाषा नसली तरीही, हे समजून घेण्यासाठी जास्त अडचण येऊ नये. + +Ethereum शी संवाद साधू इच्छिणारे Python डेव्हलपर बहुधा [Web3.py](https://web3py.readthedocs.io/) चा वापर करतात. Web3.py ही एक लायब्ररी आहे जी तुम्हाला Ethereum नोडशी जोडण्याची आणि त्यातून डेटा पाठवण्याची आणि प्राप्त करण्याची पद्धत खूप सोपी करते. + +टीप: “Ethereum नोड” आणि “Ethereum क्लायंट” हे शब्द एकमेकांसाठी वापरले जातात. दोन्ही बाबतीत, याचा अर्थ Ethereum नेटवर्कमधील एक सहभागी चालवत असलेले सॉफ्टवेअर असा होतो. हे सॉफ्टवेअर ब्लॉक डेटा वाचू शकते, चेनमध्ये नवीन ब्लॉक जोडल्यावर अपडेट्स मिळवू शकते, नवीन व्यवहार प्रसारित करू शकते आणि बरेच काही. तांत्रिकदृष्ट्या, क्लायंट हे सॉफ्टवेअर आहे, तर नोड हे सॉफ्टवेअर चालवणारा संगणक आहे. + +[Ethereum क्लायंट](/developers/docs/nodes-and-clients/) [IPC](https://wikipedia.org/wiki/Inter-process_communication), HTTP, किंवा Websockets द्वारे पोहोचण्यायोग्य होण्यासाठी कॉन्फिगर केले जाऊ शकतात, म्हणून Web3.py ला हे कॉन्फिगरेशन प्रतिबिंबित करावे लागेल. Web3.py या कनेक्शन पर्यायांना **प्रोव्हायडर्स** म्हणून संबोधते. Web3.py इंस्टन्सला तुमच्या नोडशी जोडण्यासाठी तुम्हाला तीन प्रोव्हायडर्सपैकी एक निवडावा लागेल. + +![तुमचा ॲप्लिकेशन Ethereum नोडशी जोडण्यासाठी web3.py IPC चा कसा वापर करते हे दर्शवणारे एक चित्र](./web3py-and-nodes.png) + +_Ethereum नोड आणि Web3.py ला एकाच प्रोटोकॉलद्वारे संवाद साधण्यासाठी कॉन्फिगर करा, उदा., या चित्रात IPC._ + +एकदा Web3.py योग्यरित्या कॉन्फिगर झाल्यावर, तुम्ही ब्लॉकचेनशी संवाद साधण्यास सुरुवात करू शकता. पुढे काय येणार आहे याची झलक म्हणून येथे Web3.py वापराची काही उदाहरणे आहेत: + +```python +# ब्लॉक डेटा वाचा: +w3.eth.get_block('latest') + +# एक व्यवहार पाठवा: +w3.eth.send_transaction({'from': ..., 'to': ..., 'value': ...}) +``` + +## इन्स्टॉलेशन {#installation} + +या वॉकथ्रूमध्ये, आपण फक्त Python इंटरप्रिटरमध्ये काम करणार आहोत. आपण कोणत्याही डिरेक्टरीज, फाइल्स, क्लासेस किंवा फंक्शन्स तयार करणार नाही. + +टीप: खालील उदाहरणांमध्ये, `$` ने सुरू होणारे कमांड्स टर्मिनलमध्ये चालवण्यासाठी आहेत. ( `$ ` टाइप करू नका, ते फक्त ओळीची सुरुवात दर्शवते.) + +सर्वप्रथम, एक्सप्लोर करण्यासाठी वापरकर्ता-स्नेही वातावरणासाठी [IPython](https://ipython.org/) इंस्टॉल करा. IPython टॅब कंप्लिशनसारख्या इतर वैशिष्ट्यांसह, Web3.py मध्ये काय शक्य आहे हे पाहणे खूप सोपे करते. + +```bash +pip install ipython +``` + +Web3.py `web3` या नावाने प्रकाशित केले आहे. ते असे इंस्टॉल करा: + +```bash +pip install web3 +``` + +आणखी एक गोष्ट - आपण नंतर एक ब्लॉकचेन सिम्युलेट करणार आहोत, ज्यासाठी आणखी काही डिपेन्डन्सीज आवश्यक आहेत. तुम्ही त्या याप्रमाणे इंस्टॉल करू शकता: + +```bash +pip install 'web3[tester]' +``` + +तुम्ही आता पूर्णपणे तयार आहात! + +टीप: `web3[tester]` पॅकेज Python 3.10.xx पर्यंत काम करते. + +## एक सँडबॉक्स सुरू करा {#spin-up-a-sandbox} + +तुमच्या टर्मिनलमध्ये `ipython` रन करून एक नवीन Python एन्व्हायर्नमेंट उघडा. हे `python` रन करण्यासारखेच आहे, परंतु यात अधिक अतिरिक्त वैशिष्ट्ये आहेत. + +```bash +ipython +``` + +हे तुम्ही चालवत असलेल्या Python आणि IPython च्या आवृत्त्यांविषयी काही माहिती प्रिंट करेल, त्यानंतर तुम्हाला इनपुटची वाट पाहणारा एक प्रॉम्प्ट दिसेल: + +```python +In [1]: +``` + +तुम्ही आता एक इंटरॲक्टिव्ह Python शेल पाहत आहात. मूलतः, हे खेळण्यासाठी एक सँडबॉक्स आहे. जर तुम्ही इथपर्यंत पोहोचला असाल, तर आता Web3.py इम्पोर्ट करण्याची वेळ आली आहे: + +```python +In [1]: from web3 import Web3 +``` + +## Web3 मॉड्यूलची ओळख {#introducing-the-web3-module} + +Ethereum चे प्रवेशद्वार असण्याव्यतिरिक्त, [Web3](https://web3py.readthedocs.io/en/stable/overview.html#base-api) मॉड्यूल काही सोयीस्कर फंक्शन्स देखील प्रदान करते. चला काही एक्सप्लोर करूया. + +एका Ethereum ॲप्लिकेशनमध्ये, तुम्हाला सामान्यतः चलनाची परिमाणे (denominations) रूपांतरित करण्याची आवश्यकता असेल. Web3 मॉड्यूल यासाठीच काही हेल्पर मेथड्स पुरवते: [from_wei](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.from_wei) आणि [to_wei](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.to_wei). + + +टीप: संगणक दशांश गणित हाताळण्यात कुप्रसिद्ध आहेत. यावर मात करण्यासाठी, डेव्हलपर्स अनेकदा डॉलरची रक्कम सेंटमध्ये साठवतात. उदाहरणार्थ, $5.99 किंमत असलेली वस्तू डेटाबेसमध्ये 599 म्हणून साठवली जाऊ शकते. + +ईथरमधील व्यवहार हाताळतानाही असाच पॅटर्न वापरला जातो. तथापि, दोन दशांश स्थळांऐवजी, ईथरला 18 आहेत! ईथरच्या सर्वात लहान परिमाणाला wei म्हणतात, म्हणून व्यवहार पाठवताना तेच मूल्य निर्दिष्ट केले जाते. + +1 ईथर = 1000000000000000000 wei + +1 wei = 0.000000000000000001 ईथर + + + +काही मूल्ये wei मध्ये आणि wei मधून रूपांतरित करण्याचा प्रयत्न करा. लक्षात घ्या की ईथर आणि wei मध्ये [अनेक परिमाणांसाठी नावे आहेत](https://web3py.readthedocs.io/en/stable/troubleshooting.html#how-do-i-convert-currency-denominations). त्यापैकी एक अधिक प्रसिद्ध नाव म्हणजे **gwei**, कारण व्यवहार शुल्क अनेकदा यात दर्शवले जाते. + +```python +In [2]: Web3.to_wei(1, 'ether') +Out[2]: 1000000000000000000 + +In [3]: Web3.from_wei(500000000, 'gwei') +Out[3]: Decimal('0.5') +``` + +Web3 मॉड्यूलवरील इतर युटिलिटी मेथड्समध्ये डेटा फॉरमॅट कन्व्हर्टर्स (उदा., [`toHex`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.toHex)), ॲड्रेस हेल्पर्स (उदा., [`isAddress`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.isAddress)), आणि हॅश फंक्शन्स (उदा., [`keccak`](https://web3py.readthedocs.io/en/stable/web3.main.html#web3.Web3.keccak)) यांचा समावेश आहे. यापैकी बऱ्याच गोष्टी या मालिकेत नंतर समाविष्ट केल्या जातील. सर्व उपलब्ध मेथड्स आणि प्रॉपर्टीज पाहण्यासाठी, `Web3` टाइप करून IPython च्या ऑटो-कम्प्लीटचा वापर करा. आणि पीरियडनंतर टॅब की दोनदा दाबा. + +## चेनशी बोला {#talk-to-the-chain} + +सोयीस्कर मेथड्स छान आहेत, पण चला आता ब्लॉकचेनकडे वळूया. पुढील पायरी म्हणजे Ethereum नोडशी संवाद साधण्यासाठी Web3.py कॉन्फिगर करणे. येथे आपल्याकडे IPC, HTTP किंवा Websocket प्रोव्हायडर्स वापरण्याचा पर्याय आहे. + +आपण या मार्गावर जाणार नाही, परंतु HTTP प्रोव्हायडर वापरून संपूर्ण वर्कफ्लोचे उदाहरण असे काहीतरी दिसेल: + +- एक Ethereum नोड डाउनलोड करा, उदा., [Geth](https://geth.ethereum.org/). +- एका टर्मिनल विंडोमध्ये Geth सुरू करा आणि नेटवर्क सिंक होण्याची वाट पाहा. डीफॉल्ट HTTP पोर्ट `8545` आहे, पण ते कॉन्फिगर करता येते. +- `localhost:8545` वर HTTP द्वारे नोडशी कनेक्ट करण्यासाठी Web3.py ला सांगा. + `w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))` +- नोडशी संवाद साधण्यासाठी `w3` इंस्टन्स वापरा. + +हे करण्याची ही एक “वास्तविक” पद्धत असली तरी, सिंक करण्याच्या प्रक्रियेला तास लागतात आणि जर तुम्हाला फक्त एक डेव्हलपमेंट एन्व्हायर्नमेंट हवे असेल तर ते अनावश्यक आहे. Web3.py या उद्देशासाठी चौथा प्रोव्हायडर उपलब्ध करतो, तो म्हणजे **EthereumTesterProvider**. हा टेस्टर प्रोव्हायडर एका सिम्युलेटेड Ethereum नोडला जोडतो, ज्यामध्ये शिथिल परवानग्या आणि खेळण्यासाठी बनावट चलन असते. + +![EthereumTesterProvider तुमच्या web3.py ॲप्लिकेशनला सिम्युलेटेड Ethereum नोडशी जोडत असल्याचे दर्शवणारे एक चित्र](./ethereumtesterprovider.png) + +_EthereumTesterProvider एका सिम्युलेटेड नोडशी कनेक्ट होतो आणि जलद डेव्हलपमेंट एन्व्हायर्नमेंटसाठी उपयुक्त आहे._ + +त्या सिम्युलेटेड नोडला [eth-tester](https://github.com/ethereum/eth-tester) म्हणतात आणि आपण तो `pip install web3[tester]` कमांडचा भाग म्हणून इंस्टॉल केला. या टेस्टर प्रोव्हायडरचा वापर करण्यासाठी Web3.py कॉन्फिगर करणे इतके सोपे आहे: + +```python +In [4]: w3 = Web3(Web3.EthereumTesterProvider()) +``` + +आता तुम्ही चेन सर्फ करण्यास तयार आहात! असं सहसा कोणी म्हणत नाही. मी हे आताच तयार केले. चला एक छोटीशी सफर करूया. + +## छोटीशी सफर {#the-quick-tour} + +सर्वात आधी, एक सॅनिटी चेक: + +```python +In [5]: w3.is_connected() +Out[5]: True +``` + +आपण टेस्टर प्रोव्हायडर वापरत असल्यामुळे, ही चाचणी खूप महत्त्वाची नाही, पण जर ती अयशस्वी झाली, तर शक्यता आहे की `w3` व्हेरिएबल इन्स्टँटिएट करताना तुम्ही काहीतरी चुकीचे टाइप केले असेल. तुम्ही आतील कंस समाविष्ट केले आहेत याची खात्री करा, म्हणजे `Web3.EthereumTesterProvider()`. + +## सफरीचा थांबा #1: [खाती](/developers/docs/accounts/) {#tour-stop-1-accounts} + +सोयीसाठी, टेस्टर प्रोव्हायडरने काही खाती तयार केली आहेत आणि त्यात आधीच चाचणीसाठी ईथर भरलेले आहेत. + +प्रथम, त्या खात्यांची यादी पाहूया: + +```python +In [6]: w3.eth.accounts +Out[6]: ['0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf', + '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF', + '0x6813Eb9362372EEF6200f3b1dbC3f819671cBA69', ...] +``` + +तुम्ही हा कमांड चालवल्यास, तुम्हाला `0x` ने सुरू होणाऱ्या दहा स्ट्रिंगची यादी दिसेल. प्रत्येक एक **पब्लिक ॲड्रेस** आहे आणि काही बाबतीत, तो चेकिंग खात्यावरील खाते क्रमांकासारखा आहे. तुम्हाला ईथर पाठवू इच्छिणाऱ्या व्यक्तीला तुम्ही हा ॲड्रेस द्याल. + +सांगितल्याप्रमाणे, टेस्टर प्रोव्हायडरने या प्रत्येक खात्यात काही चाचणी ईथर आधीच भरलेले आहेत. पहिल्या खात्यात किती शिल्लक आहे ते पाहूया: + +```python +In [7]: w3.eth.get_balance(w3.eth.accounts[0]) +Out[7]: 1000000000000000000000000 +``` + +किती तरी शून्य आहेत! खोट्या बँकेत जाऊन आनंद साजरा करण्यापूर्वी, चलनांच्या परिमाणांबद्दलचा पूर्वीचा धडा आठवा. ईथर मूल्ये सर्वात लहान परिमाण, wei मध्ये दर्शविली जातात. ते ईथरमध्ये रूपांतरित करा: + +```python +In [8]: w3.from_wei(1000000000000000000000000, 'ether') +Out[8]: Decimal('1000000') +``` + +दहा लाख चाचणी ईथर - तरीही वाईट नाही. + +## सफरीचा थांबा #2: ब्लॉक डेटा {#tour-stop-2-block-data} + +या सिम्युलेटेड ब्लॉकचेनच्या स्थितीवर एक नजर टाकूया: + +```python +In [9]: w3.eth.get_block('latest') +Out[9]: AttributeDict({ + 'number': 0, + 'hash': HexBytes('0x9469878...'), + 'parentHash': HexBytes('0x0000000...'), + ... + 'transactions': [] +}) +``` + +एका ब्लॉकबद्दल बरीच माहिती परत मिळते, पण येथे फक्त काही गोष्टी नमूद करायच्या आहेत: + +- ब्लॉक क्रमांक शून्य आहे - तुम्ही टेस्टर प्रोव्हायडर कितीही वेळापूर्वी कॉन्फिगर केले असले तरीही. वास्तविक Ethereum नेटवर्कच्या विपरीत, जे दर 12 सेकंदांनी एक नवीन ब्लॉक जोडते, हे सिम्युलेशन तुम्ही त्याला काही काम देईपर्यंत थांबेल. +- `transactions` ही एक रिकामी यादी आहे, त्याच कारणासाठी: आपण अद्याप काहीही केलेले नाही. हा पहिला ब्लॉक एक **रिकामा ब्लॉक** आहे, फक्त चेन सुरू करण्यासाठी. +- लक्षात घ्या की `parentHash` फक्त रिकाम्या बाइट्सचा एक समूह आहे. हे सूचित करते की हा चेनमधील पहिला ब्लॉक आहे, ज्याला **जेनेसिस ब्लॉक** असेही म्हणतात. + +## सफरीचा थांबा #3: [व्यवहार](/developers/docs/transactions/) {#tour-stop-3-transactions} + +आपण ब्लॉक शून्यवर अडकलो आहोत जोपर्यंत प्रलंबित व्यवहार होत नाही, चला तर मग एक व्यवहार करूया. एका खात्यातून दुसऱ्या खात्यात काही चाचणी ईथर पाठवा: + +```python +In [10]: tx_hash = w3.eth.send_transaction({ + 'from': w3.eth.accounts[0], + 'to': w3.eth.accounts[1], + 'value': w3.to_wei(3, 'ether'), + 'gas': 21000 +}) +``` + +हा सहसा तो क्षण असतो जिथे तुम्ही तुमचा व्यवहार नवीन ब्लॉकमध्ये समाविष्ट होण्यासाठी काही सेकंद वाट पाहता. संपूर्ण प्रक्रिया काहीशी अशी आहे: + +1. एक व्यवहार सबमिट करा आणि व्यवहार हॅश जपून ठेवा. व्यवहार असलेला ब्लॉक तयार आणि प्रसारित होईपर्यंत, व्यवहार “प्रलंबित” असतो. + `tx_hash = w3.eth.send_transaction({ … })` +2. व्यवहार ब्लॉकमध्ये समाविष्ट होण्याची वाट पाहा: + `w3.eth.wait_for_transaction_receipt(tx_hash)` +3. ॲप्लिकेशन लॉजिक सुरू ठेवा. यशस्वी व्यवहार पाहण्यासाठी: + `w3.eth.get_transaction(tx_hash)` + +आमचे सिम्युलेटेड एन्व्हायर्नमेंट व्यवहार तात्काळ एका नवीन ब्लॉकमध्ये जोडेल, त्यामुळे आपण लगेच व्यवहार पाहू शकतो: + +```python +In [11]: w3.eth.get_transaction(tx_hash) +Out[11]: AttributeDict({ + 'hash': HexBytes('0x15e9fb95dc39...'), + 'blockNumber': 1, + 'transactionIndex': 0, + 'from': '0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf', + 'to': '0x2B5AD5c4795c026514f8317c7a215E218DcCD6cF', + 'value': 3000000000000000000, + ... +}) +``` + +तुम्हाला येथे काही ओळखीचे तपशील दिसतील: `from`, `to` आणि `value` फील्ड्स आपल्या `send_transaction` कॉलच्या इनपुटशी जुळले पाहिजेत. दुसरी दिलासादायक गोष्ट म्हणजे हा व्यवहार ब्लॉक क्रमांक 1 मध्ये पहिला व्यवहार (`'transactionIndex': 0`) म्हणून समाविष्ट केला गेला. + +या व्यवहाराची यशस्वीता आपण दोन्ही संबंधित खात्यांमधील शिल्लक तपासून सहज पडताळू शकतो. तीन ईथर एका खात्यातून दुसऱ्या खात्यात हस्तांतरित झाले पाहिजेत. + +```python +In [12]: w3.eth.get_balance(w3.eth.accounts[0]) +Out[12]: 999996999979000000000000 + +In [13]: w3.eth.get_balance(w3.eth.accounts[1]) +Out[13]: 1000003000000000000000000 +``` + +दुसरे बरोबर दिसत आहे! शिल्लक 1,000,000 वरून 1,000,003 ईथर झाली. पण पहिल्या खात्याचे काय झाले? असे दिसते की त्याने तीन ईथरपेक्षा थोडे जास्त गमावले आहेत. अरेरे, जीवनात काहीही विनामूल्य नाही, आणि Ethereum सार्वजनिक नेटवर्क वापरण्यासाठी तुम्हाला तुमच्या पीअर्सना त्यांच्या सहाय्यक भूमिकेसाठी भरपाई देणे आवश्यक आहे. व्यवहार सबमिट करणाऱ्या खात्यातून एक छोटे व्यवहार शुल्क कापले गेले - हे शुल्क म्हणजे गॅसच्या जळलेल्या प्रमाणाला (ETH हस्तांतरणासाठी 21000 गॅस युनिट्स) नेटवर्कच्या क्रियाकलापानुसार बदलणाऱ्या बेस फीने गुणले जाते, अधिक व्यवहाराला ब्लॉकमध्ये समाविष्ट करणाऱ्या व्हॅलिडेटरला जाणारी टीप. + +[गॅस](/developers/docs/gas/#post-london) बद्दल अधिक + +टीप: सार्वजनिक नेटवर्कवर, व्यवहार शुल्क नेटवर्कच्या मागणीनुसार आणि तुम्हाला व्यवहार किती लवकर प्रक्रिया करायचा आहे यावर अवलंबून बदलते. तुम्हाला शुल्क कसे मोजले जाते याच्या तपशिलात स्वारस्य असल्यास, माझी ब्लॉकमध्ये व्यवहार कसे समाविष्ट केले जातात यावरील पूर्वीची पोस्ट पाहा. + +## आणि श्वास घ्या {#and-breathe} + +आपण हे बऱ्याच वेळेपासून करत आहोत, त्यामुळे ब्रेक घेण्यासाठी हे एक चांगले ठिकाण आहे. हे गहन जग पुढेही चालू आहे, आणि आपण या मालिकेच्या दुसऱ्या भागात एक्सप्लोर करणे सुरू ठेवू. येणाऱ्या काही संकल्पना: वास्तविक नोडशी कनेक्ट करणे, स्मार्ट कॉन्ट्रॅक्ट्स आणि टोकन्स. तुमचे काही पुढील प्रश्न आहेत का? मला कळवा! तुमचा अभिप्राय आपण येथून पुढे कुठे जायचे हे ठरवेल. [Twitter](https://twitter.com/wolovim) द्वारे विनंत्यांचे स्वागत आहे. diff --git a/public/content/translations/mr/developers/tutorials/all-you-can-cache/index.md b/public/content/translations/mr/developers/tutorials/all-you-can-cache/index.md new file mode 100644 index 00000000000..74ebf5c1c7b --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/all-you-can-cache/index.md @@ -0,0 +1,867 @@ +--- +title: "तुम्ही कॅशे करू शकता ते सर्व" +description: "स्वस्त रोलअप व्यवहारांसाठी कॅशिंग करार कसा तयार करायचा आणि वापरायचा ते शिका" +author: Ori Pomerantz +tags: [ "स्तर 2", "कॅशिंग", "स्टोरेज" ] +skill: intermediate +published: 2022-09-15 +lang: mr +--- + +रोलअप वापरताना, व्यवहारातील एका बाइटची किंमत स्टोरेज स्लॉटच्या किंमतीपेक्षा खूप जास्त असते. म्हणून, शक्य तितकी माहिती ऑनचेन कॅशे करणे अर्थपूर्ण आहे. + +या लेखात, तुम्ही कॅशिंग करार कसा तयार करायचा आणि वापरायचा हे शिकाल. ज्या पॅरामीटर व्हॅल्यूचा अनेक वेळा वापर होण्याची शक्यता आहे, ती कॅशे केली जाईल आणि (पहिल्या वापरानंतर) कमी बाइट्ससह वापरासाठी उपलब्ध होईल. तसेच, हा कॅशे वापरणारा ऑफचेन कोड कसा लिहायचा हेही शिकाल. + +तुम्हाला हा लेख वगळून थेट सोर्स कोड बघायचा असेल, तर [तो इथे आहे](https://github.com/qbzzt/20220915-all-you-can-cache). डेव्हलपमेंट स्टॅक [Foundry](https://getfoundry.sh/introduction/installation/) आहे. + +## एकूण डिझाइन {#overall-design} + +सोपेपणासाठी, आपण असे गृहीत धरू की सर्व व्यवहार पॅरामीटर्स `uint256` आहेत, ज्यांची लांबी 32 बाइट्स आहे. जेव्हा आपल्याला व्यवहार प्राप्त होतो, तेव्हा आपण प्रत्येक पॅरामीटरचे अशा प्रकारे विश्लेषण करू: + +1. जर पहिला बाइट `0xFF` असेल, तर पुढील 32 बाइट्स पॅरामीटर व्हॅल्यू म्हणून घ्या आणि कॅशेमध्ये लिहा. + +2. जर पहिला बाइट `0xFE` असेल, तर पुढील 32 बाइट्स पॅरामीटर व्हॅल्यू म्हणून घ्या, परंतु कॅशेमध्ये लिहू _नका_. + +3. इतर कोणत्याही व्हॅल्यूसाठी, शीर्ष चार बिट्स अतिरिक्त बाइट्सची संख्या म्हणून घ्या आणि खालचे चार बिट्स कॅशे कीचे सर्वात महत्त्वपूर्ण बिट्स म्हणून घ्या. येथे काही उदाहरणे आहेत: + + | कॉलडेटामधील बाइट्स | कॅशे की | + | :----------------- | -------: | + | 0x0F | 0x0F | + | 0x10,0x10 | 0x10 | + | 0x12,0xAC | 0x02AC | + | 0x2D,0xEA, 0xD6 | 0x0DEAD6 | + +## कॅशे मॅनिप्युलेशन {#cache-manipulation} + +कॅशे [`Cache.sol`](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol) मध्ये इम्प्लिमेंट केले आहे. चला ओळीनुसार पाहूया. + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + + +contract Cache { + + bytes1 public constant INTO_CACHE = 0xFF; + bytes1 public constant DONT_CACHE = 0xFE; +``` + +हे कॉन्स्टंट्स विशेष प्रकरणांचे अर्थ लावण्यासाठी वापरले जातात, जिथे आपण सर्व माहिती प्रदान करतो आणि ती कॅशेमध्ये लिहावी की नाही हे ठरवतो. कॅशेमध्ये लिहिण्यासाठी पूर्वी न वापरलेल्या स्टोरेज स्लॉटमध्ये प्रत्येकी 22100 गॅसच्या दराने दोन [`SSTORE`](https://www.evm.codes/#55) ऑपरेशन्सची आवश्यकता असते, म्हणून आपण ते ऐच्छिक ठेवतो. + +```solidity + + mapping(uint => uint) public val2key; +``` + +व्हॅल्यूज आणि त्यांच्या कीजमधील [मॅपिंग](https://www.geeksforgeeks.org/solidity/solidity-mappings/). तुम्ही व्यवहार पाठवण्यापूर्वी व्हॅल्यूज एन्कोड करण्यासाठी ही माहिती आवश्यक आहे. + +```solidity + // लोकेशन n मध्ये की n+1 साठी व्हॅल्यू आहे, कारण आपल्याला + // शून्य "कॅशेमध्ये नाही" म्हणून जतन करणे आवश्यक आहे. + uint[] public key2val; +``` + +आपण कीज ते व्हॅल्यूजच्या मॅपिंगसाठी ॲरे वापरू शकतो कारण आपण कीज नियुक्त करतो आणि सोपेपणासाठी आपण ते क्रमाने करतो. + +```solidity + function cacheRead(uint _key) public view returns (uint) { + require(_key <= key2val.length, "Reading uninitialize cache entry"); + return key2val[_key-1]; + } // cacheRead +``` + +कॅशेमधून व्हॅल्यू वाचा. + +```solidity + // एखादी व्हॅल्यू कॅशेमध्ये आधीच नसल्यास ती लिहा + // चाचणी काम करण्यासाठी फक्त पब्लिक + function cacheWrite(uint _value) public returns (uint) { + // जर व्हॅल्यू आधीच कॅशेमध्ये असेल, तर सध्याची की परत करा + if (val2key[_value] != 0) { + return val2key[_value]; + } +``` + +एकच व्हॅल्यू एकापेक्षा जास्त वेळा कॅशेमध्ये टाकण्यात काहीच अर्थ नाही. जर व्हॅल्यू आधीच तिथे असेल, तर फक्त अस्तित्वात असलेली की परत करा. + +```solidity + // 0xFE हा एक विशेष केस असल्यामुळे, कॅशेमध्ये ठेवता येणारी सर्वात मोठी की + // 0x0D आणि त्यानंतर 15 0xFF's आहे. जर कॅशेची लांबी आधीच इतकी + // मोठी असेल, तर फेल करा. + // 1 2 3 4 5 6 7 8 9 A B C D E F + require(key2val.length+1 < 0x0DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, + "cache overflow"); +``` + +मला नाही वाटत की आपल्याला इतका मोठा कॅशे कधी मिळेल (अंदाजे 1.8\*1037 नोंदी, ज्यासाठी सुमारे 1027 टीबी स्टोरेज लागेल). तथापि, ["640kB नेहमीच पुरेसे असेल"](https://quoteinvestigator.com/2011/09/08/640k-enough/) हे आठवण्याइतका मी जुना आहे. ही चाचणी खूपच स्वस्त आहे. + +```solidity + // पुढील की वापरून व्हॅल्यू लिहा + val2key[_value] = key2val.length+1; +``` + +रिव्हर्स लुकअप (व्हॅल्यूपासून कीपर्यंत) जोडा. + +```solidity + key2val.push(_value); +``` + +फॉरवर्ड लुकअप (कीपासून व्हॅल्यूपर्यंत) जोडा. कारण आपण व्हॅल्यूज क्रमाने नियुक्त करतो, आपण ते फक्त शेवटच्या ॲरे व्हॅल्यूनंतर जोडू शकतो. + +```solidity + return key2val.length; + } // cacheWrite +``` + +`key2val` ची नवीन लांबी परत करा, जो तो सेल आहे जिथे नवीन व्हॅल्यू संग्रहित केली आहे. + +```solidity + function _calldataVal(uint startByte, uint length) + private pure returns (uint) +``` + +हे फंक्शन कॉलडेटामधून अनियंत्रित लांबीची (32 बाइट्सपर्यंत, वर्ड साइज) व्हॅल्यू वाचते. + +```solidity + { + uint _retVal; + + require(length < 0x21, + "_calldataVal length limit is 32 bytes"); + require(length + startByte <= msg.data.length, + "_calldataVal trying to read beyond calldatasize"); +``` + +हे फंक्शन इंटरनल आहे, त्यामुळे जर उर्वरित कोड योग्यरित्या लिहिला असेल, तर या चाचण्यांची आवश्यकता नाही. तथापि, त्यांची किंमत जास्त नाही म्हणून त्या असण्यात काही हरकत नाही. + +```solidity + assembly { + _retVal := calldataload(startByte) + } +``` + +हा कोड [Yul](https://docs.soliditylang.org/en/v0.8.16/yul.html) मध्ये आहे. हे कॉलडेटामधून 32 बाइट व्हॅल्यू वाचते. जर कॉलडेटा `startByte+32` च्या आधी थांबला तरीही हे कार्य करते कारण EVM मधील अनइनिशियलाइज्ड स्पेस शून्य मानली जाते. + +```solidity + _retVal = _retVal >> (256-length*8); +``` + +आम्हाला 32 बाइट व्हॅल्यूच हवी आहे असे नाही. यामुळे अतिरिक्त बाइट्स काढून टाकले जातात. + +```solidity + return _retVal; + } // _calldataVal + + + // _fromByte पासून सुरू होणाऱ्या कॉलडेटामधून एकच पॅरामीटर वाचा + function _readParam(uint _fromByte) internal + returns (uint _nextByte, uint _parameterValue) + { +``` + +कॉलडेटामधून एकच पॅरामीटर वाचा. लक्षात ठेवा की आम्हाला केवळ आपण वाचलेली व्हॅल्यूच नाही, तर पुढील बाइटचे स्थान देखील परत करणे आवश्यक आहे कारण पॅरामीटर्स 1 बाइट ते 33 बाइट्स लांब असू शकतात. + +```solidity + // पहिला बाइट आपल्याला बाकीच्यांचा अर्थ कसा लावायचा हे सांगतो + uint8 _firstByte; + + _firstByte = uint8(_calldataVal(_fromByte, 1)); +``` + +Solidity संभाव्य धोकादायक [इंप्लिसिट टाइप कन्व्हर्शन्स](https://docs.soliditylang.org/en/v0.8.16/types.html#implicit-conversions) प्रतिबंधित करून बग्सची संख्या कमी करण्याचा प्रयत्न करते. डाउनग्रेड, उदाहरणार्थ 256 बिट्सवरून 8 बिट्सपर्यंत, स्पष्टपणे नमूद करणे आवश्यक आहे. + +```solidity + + // व्हॅल्यू वाचा, पण कॅशेमध्ये लिहू नका + if (_firstByte == uint8(DONT_CACHE)) + return(_fromByte+33, _calldataVal(_fromByte+1, 32)); + + // व्हॅल्यू वाचा आणि कॅशेमध्ये लिहा + if (_firstByte == uint8(INTO_CACHE)) { + uint _param = _calldataVal(_fromByte+1, 32); + cacheWrite(_param); + return(_fromByte+33, _param); + } + + // जर आपण इथे पोहोचलो तर याचा अर्थ आपल्याला कॅशेमधून वाचण्याची गरज आहे + + // वाचण्यासाठी अतिरिक्त बाइट्सची संख्या + uint8 _extraBytes = _firstByte / 16; +``` + +खालचा [निबल](https://en.wikipedia.org/wiki/Nibble) घ्या आणि कॅशेमधून व्हॅल्यू वाचण्यासाठी इतर बाइट्ससह एकत्र करा. + +```solidity + uint _key = (uint256(_firstByte & 0x0F) << (8*_extraBytes)) + + _calldataVal(_fromByte+1, _extraBytes); + + return (_fromByte+_extraBytes+1, cacheRead(_key)); + + } // _readParam + + + // n पॅरामीटर्स वाचा (फंक्शन्सना किती पॅरामीटर्स अपेक्षित आहेत हे माहीत असते) + function _readParams(uint _paramNum) internal returns (uint[] memory) { +``` + +आपण आपल्याकडे असलेल्या पॅरामीटर्सची संख्या कॉलडेटामधूनच मिळवू शकलो असतो, परंतु आपल्याला कॉल करणार्‍या फंक्शन्सना किती पॅरामीटर्स अपेक्षित आहेत हे माहीत असते. त्यांनाच आपल्याला सांगू देणे सोपे आहे. + +```solidity + // आपण वाचलेले पॅरामीटर्स + uint[] memory params = new uint[](_paramNum); + + // पॅरामीटर्स बाइट 4 पासून सुरू होतात, त्याआधी फंक्शन सिग्नेचर असते + uint _atByte = 4; + + for(uint i=0; i<_paramNum; i++) { + (_atByte, params[i]) = _readParam(_atByte); + } +``` + +आपल्याला आवश्यक असलेली संख्या मिळेपर्यंत पॅरामीटर्स वाचा. जर आपण कॉलडेटाच्या पुढे गेलो, तर `_readParams` कॉल रिव्हर्ट करेल. + +```solidity + + return(params); + } // readParams + + // _readParams च्या चाचणीसाठी, चार पॅरामीटर्स वाचण्याची चाचणी + function fourParam() public + returns (uint256,uint256,uint256,uint256) + { + uint[] memory params; + params = _readParams(4); + return (params[0], params[1], params[2], params[3]); + } // fourParam +``` + +Foundry चा एक मोठा फायदा हा आहे की ते Solidity मध्ये चाचण्या लिहिण्याची परवानगी देते ([खालील कॅशेची चाचणी पहा](#testing-the-cache)). यामुळे युनिट टेस्ट्स खूप सोप्या होतात. हे एक फंक्शन आहे जे चार पॅरामीटर्स वाचते आणि त्यांना परत करते जेणेकरून चाचणी ते योग्य होते की नाही हे तपासू शकेल. + +```solidity + // एक व्हॅल्यू मिळवा, असे बाइट्स परत करा जे ते एन्कोड करतील (शक्य असल्यास कॅशे वापरून) + function encodeVal(uint _val) public view returns(bytes memory) { +``` + +`encodeVal` हे एक फंक्शन आहे जे ऑफचेन कोड कॅशे वापरणारा कॉलडेटा तयार करण्यात मदत करण्यासाठी कॉल करते. हे एकच व्हॅल्यू प्राप्त करते आणि ते एन्कोड करणारे बाइट्स परत करते. हे फंक्शन `view` आहे, त्यामुळे त्याला व्यवहाराची आवश्यकता नाही आणि बाहेरून कॉल केल्यावर कोणताही गॅस लागत नाही. + +```solidity + uint _key = val2key[_val]; + + // व्हॅल्यू अजून कॅशेमध्ये नाही, ती जोडा + if (_key == 0) + return bytes.concat(INTO_CACHE, bytes32(_val)); +``` + +[EVM](/developers/docs/evm/) मध्ये सर्व अनइनिशियलाइज्ड स्टोरेज शून्य मानले जाते. त्यामुळे जर आपण अशा व्हॅल्यूसाठी की शोधली जी तिथे नाही, तर आपल्याला शून्य मिळतो. त्या बाबतीत, ते एन्कोड करणारे बाइट्स `INTO_CACHE` (जेणेकरून पुढच्या वेळी ते कॅशे केले जाईल) असतात, त्यानंतर वास्तविक व्हॅल्यू असते. + +```solidity + // जर की <0x10 असेल, तर ती एकच बाइट म्हणून परत करा + if (_key < 0x10) + return bytes.concat(bytes1(uint8(_key))); +``` + +सिंगल बाइट्स सर्वात सोपे आहेत. आपण `bytes` प्रकाराला बाइट ॲरेमध्ये बदलण्यासाठी [`bytes.concat`](https://docs.soliditylang.org/en/v0.8.16/types.html#the-functions-bytes-concat-and-string-concat) वापरतो, ज्याची कोणतीही लांबी असू शकते. नाव असूनही, फक्त एक युक्तिवाद दिल्यावर ते व्यवस्थित काम करते. + +```solidity + // दोन बाइट व्हॅल्यू, 0x1vvv म्हणून एन्कोड केलेली + if (_key < 0x1000) + return bytes.concat(bytes2(uint16(_key) | 0x1000)); +``` + +जेव्हा आपल्याकडे 163 पेक्षा कमी असलेली की असते, तेव्हा आपण ती दोन बाइट्समध्ये व्यक्त करू शकतो. आपण आधी `_key`, जे 256 बिट व्हॅल्यू आहे, ते 16 बिट व्हॅल्यूमध्ये रूपांतरित करतो आणि पहिल्या बाइटमध्ये अतिरिक्त बाइट्सची संख्या जोडण्यासाठी लॉजिकल ऑर वापरतो. मग आपण ते `bytes2` व्हॅल्यूमध्ये टाकतो, जे `bytes` मध्ये रूपांतरित केले जाऊ शकते. + +```solidity + // खालील ओळी लूप म्हणून करण्याचा कदाचित एक हुशार मार्ग आहे, + // पण हे एक व्ह्यू फंक्शन आहे म्हणून मी प्रोग्रामरच्या वेळेसाठी आणि + // सोपेपणासाठी ऑप्टिमाइझ करत आहे. + + if (_key < 16*256**2) + return bytes.concat(bytes3(uint24(_key) | (0x2 * 16 * 256**2))); + if (_key < 16*256**3) + return bytes.concat(bytes4(uint32(_key) | (0x3 * 16 * 256**3))); + . + . + . + if (_key < 16*256**14) + return bytes.concat(bytes15(uint120(_key) | (0xE * 16 * 256**14))); + if (_key < 16*256**15) + return bytes.concat(bytes16(uint128(_key) | (0xF * 16 * 256**15))); +``` + +इतर व्हॅल्यूज (3 बाइट्स, 4 बाइट्स, इत्यादी) त्याच प्रकारे हाताळल्या जातात, फक्त फील्ड आकार भिन्न असतात. + +```solidity + // जर आपण इथे पोहोचलो, तर काहीतरी चुकले आहे. + revert("Error in encodeVal, should not happen"); +``` + +जर आपण इथे पोहोचलो तर याचा अर्थ आपल्याला एक की मिळाली आहे जी 16\*25615 पेक्षा कमी नाही. परंतु `cacheWrite` कीज मर्यादित करते त्यामुळे आपण 14\*25616 पर्यंत पोहोचू शकत नाही (ज्याचा पहिला बाइट 0xFE असेल, म्हणून ते `DONT_CACHE` सारखे दिसेल). परंतु भविष्यात एखादा प्रोग्रामर बग आणल्यास चाचणी जोडण्यासाठी आपल्याला जास्त खर्च येत नाही. + +```solidity + } // encodeVal + +} // Cache +``` + +### कॅशेची चाचणी {#testing-the-cache} + +Foundry चा एक फायदा हा आहे की [ते तुम्हाला Solidity मध्ये चाचण्या लिहिण्याची परवानगी देते](https://getfoundry.sh/forge/tests/overview/), ज्यामुळे युनिट चाचण्या लिहिणे सोपे होते. `Cache` क्लाससाठीच्या चाचण्या [येथे](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/Cache.t.sol) आहेत. कारण चाचणी कोड पुनरावृत्तीचा आहे, जसे चाचण्या असतात, हा लेख फक्त मनोरंजक भाग स्पष्ट करतो. + +```solidity +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import "forge-std/Test.sol"; + + +// कन्सोलसाठी `forge test -vv` चालवणे आवश्यक आहे. +import "forge-std/console.sol"; +``` + +हे फक्त बॉयलरप्लेट आहे जे चाचणी पॅकेज आणि `console.log` वापरण्यासाठी आवश्यक आहे. + +```solidity +import "src/Cache.sol"; +``` + +आपण ज्या कराराची चाचणी घेत आहोत ते आपल्याला माहित असणे आवश्यक आहे. + +```solidity +contract CacheTest is Test { + Cache cache; + + function setUp() public { + cache = new Cache(); + } +``` + +`setUp` फंक्शन प्रत्येक चाचणीपूर्वी कॉल केले जाते. या प्रकरणात आपण फक्त एक नवीन कॅशे तयार करतो, जेणेकरून आपल्या चाचण्या एकमेकांवर परिणाम करणार नाहीत. + +```solidity + function testCaching() public { +``` + +चाचण्या ही अशी फंक्शन्स आहेत ज्यांची नावे `test` ने सुरू होतात. हे फंक्शन मूलभूत कॅशे कार्यक्षमता तपासते, व्हॅल्यूज लिहिणे आणि त्या पुन्हा वाचणे. + +```solidity + for(uint i=1; i<5000; i++) { + cache.cacheWrite(i*i); + } + + for(uint i=1; i<5000; i++) { + assertEq(cache.cacheRead(i), i*i); +``` + +[`assert...` फंक्शन्स](https://getfoundry.sh/reference/forge-std/std-assertions/) वापरून तुम्ही प्रत्यक्ष चाचणी कशी करता हे येथे दिले आहे. या प्रकरणात, आम्ही तपासतो की आम्ही लिहिलेली व्हॅल्यू हीच आम्ही वाचलेली व्हॅल्यू आहे. आपण `cache.cacheWrite` चा निकाल सोडून देऊ शकतो कारण आपल्याला माहित आहे की कॅशे की रेषीयपणे नियुक्त केल्या जातात. + +```solidity + } + } // testCaching + + + // एकाच व्हॅल्यूला अनेक वेळा कॅशे करा, की तीच + // राहील याची खात्री करा + function testRepeatCaching() public { + for(uint i=1; i<100; i++) { + uint _key1 = cache.cacheWrite(i); + uint _key2 = cache.cacheWrite(i); + assertEq(_key1, _key2); + } +``` + +प्रथम आम्ही प्रत्येक व्हॅल्यू कॅशेमध्ये दोनदा लिहितो आणि कीज समान असल्याची खात्री करतो (म्हणजे दुसरे लिखाण खरोखरच झाले नाही). + +```solidity + for(uint i=1; i<100; i+=3) { + uint _key = cache.cacheWrite(i); + assertEq(_key, i); + } + } // testRepeatCaching +``` + +सिद्धांतानुसार, एक बग असू शकतो जो सलग कॅशे लेखनावर परिणाम करत नाही. म्हणून येथे आम्ही काही असे लेखन करतो जे सलग नाहीत आणि पाहतो की व्हॅल्यूज अद्याप पुन्हा लिहिल्या जात नाहीत. + +```solidity + // मेमरी बफरमधून एक uint वाचा (आपण पाठवलेले पॅरामीटर्स + // परत मिळतात याची खात्री करण्यासाठी) + function toUint256(bytes memory _bytes, uint256 _start) internal pure + returns (uint256) +``` + +`bytes memory` बफरमधून 256 बिट वर्ड वाचा. हे युटिलिटी फंक्शन आम्हाला कॅशे वापरणारे फंक्शन कॉल चालवल्यावर योग्य परिणाम मिळतात की नाही हे सत्यापित करू देते. + +```solidity + { + require(_bytes.length >= _start + 32, "toUint256_outOfBounds"); + uint256 tempUint; + + assembly { + tempUint := mload(add(add(_bytes, 0x20), _start)) + } +``` + +Yul `uint256` च्या पलीकडे डेटा स्ट्रक्चर्सला समर्थन देत नाही, म्हणून जेव्हा तुम्ही अधिक अत्याधुनिक डेटा स्ट्रक्चरचा संदर्भ देता, जसे की मेमरी बफर `_bytes`, तेव्हा तुम्हाला त्या स्ट्रक्चरचा ॲड्रेस मिळतो. Solidity `bytes memory` व्हॅल्यूज 32 बाइट वर्ड म्हणून संग्रहित करते ज्यात लांबी असते, त्यानंतर वास्तविक बाइट्स असतात, त्यामुळे बाइट क्रमांक `_start` मिळवण्यासाठी आपल्याला `_bytes+32+_start` मोजणे आवश्यक आहे. + +```solidity + + return tempUint; + } // toUint256 + + // fourParams() साठी फंक्शन सिग्नेचर, सौजन्याने + // https://www.4byte.directory/signatures/?bytes4_signature=0x3edc1e6d + bytes4 constant FOUR_PARAMS = 0x3edc1e6d; + + // आपल्याला योग्य व्हॅल्यूज परत मिळत आहेत हे पाहण्यासाठी फक्त काही कॉन्स्टंट व्हॅल्यूज + uint256 constant VAL_A = 0xDEAD60A7; + uint256 constant VAL_B = 0xBEEF; + uint256 constant VAL_C = 0x600D; + uint256 constant VAL_D = 0x600D60A7; +``` + +चाचणीसाठी आपल्याला आवश्यक असलेले काही कॉन्स्टंट्स. + +```solidity + function testReadParam() public { +``` + +`readParams` वापरणारे फंक्शन `fourParams()` ला कॉल करा, जेणेकरून आपण पॅरामीटर्स योग्यरित्या वाचू शकतो की नाही हे तपासता येईल. + +```solidity + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; +``` + +आपण कॅशे वापरून फंक्शन कॉल करण्यासाठी सामान्य ABI यंत्रणा वापरू शकत नाही, म्हणून आपल्याला निम्न स्तरावरील [`
.call()`](https://docs.soliditylang.org/en/v0.8.16/types.html#members-of-addresses) यंत्रणा वापरण्याची आवश्यकता आहे. ती यंत्रणा इनपुट म्हणून `bytes memory` घेते आणि ते (तसेच बुलियन व्हॅल्यू) आउटपुट म्हणून परत करते. + +```solidity + // पहिला कॉल, कॅशे रिकामा आहे + _callInput = bytes.concat( + FOUR_PARAMS, +``` + +एकाच करारासाठी कॅश्ड फंक्शन्स (थेट व्यवहारांमधून कॉल करण्यासाठी) आणि नॉन-कॅश्ड फंक्शन्स (इतर स्मार्ट करारांमधून कॉल करण्यासाठी) दोन्हीला समर्थन देणे उपयुक्त आहे. हे करण्यासाठी, आपल्याला सर्व काही [एका `fallback` फंक्शनमध्ये](https://docs.soliditylang.org/en/v0.8.16/contracts.html#fallback-function) टाकण्याऐवजी, योग्य फंक्शनला कॉल करण्यासाठी Solidity यंत्रणेवर अवलंबून राहणे आवश्यक आहे. हे केल्याने कंपोझेबिलिटी खूप सोपी होते. बहुतेक प्रकरणांमध्ये फंक्शन ओळखण्यासाठी एकच बाइट पुरेसा असेल, म्हणून आपण तीन बाइट्स (16\*3=48 गॅस) वाया घालवत आहोत. तथापि, मी हे लिहित असताना त्या 48 गॅसची किंमत 0.07 सेंट आहे, जी सोप्या, कमी बग प्रोन कोडसाठी वाजवी किंमत आहे. + +```solidity + // पहिली व्हॅल्यू, ती कॅशेमध्ये जोडा + cache.INTO_CACHE(), + bytes32(VAL_A), +``` + +पहिली व्हॅल्यू: एक फ्लॅग जो सांगतो की ही एक पूर्ण व्हॅल्यू आहे जी कॅशेमध्ये लिहिली पाहिजे, त्यानंतर व्हॅल्यूचे 32 बाइट्स. इतर तीन व्हॅल्यूज सारख्याच आहेत, फक्त `VAL_B` कॅशेमध्ये लिहिलेली नाही आणि `VAL_C` तिसरा आणि चौथा दोन्ही पॅरामीटर आहे. + +```solidity + . + . + . + ); + (_success, _callOutput) = _cacheAddr.call(_callInput); +``` + +येथेच आपण प्रत्यक्षात `Cache` कराराला कॉल करतो. + +```solidity + assertEq(_success, true); +``` + +आम्ही अपेक्षा करतो की कॉल यशस्वी होईल. + +```solidity + assertEq(cache.cacheRead(1), VAL_A); + assertEq(cache.cacheRead(2), VAL_C); +``` + +आपण रिकाम्या कॅशेने सुरुवात करतो आणि नंतर `VAL_A` आणि त्यानंतर `VAL_C` जोडतो. आम्ही अपेक्षा करतो की पहिल्याची की 1 असेल आणि दुसऱ्याची 2 असेल. + +``` + assertEq(toUint256(_callOutput,0), VAL_A); + assertEq(toUint256(_callOutput,32), VAL_B); + assertEq(toUint256(_callOutput,64), VAL_C); + assertEq(toUint256(_callOutput,96), VAL_C); +``` + +आउटपुट हे चार पॅरामीटर्स आहेत. येथे आम्ही ते योग्य असल्याची पडताळणी करतो. + +```solidity + // दुसरा कॉल, आपण कॅशे वापरू शकतो + _callInput = bytes.concat( + FOUR_PARAMS, + + // कॅशेमधील पहिली व्हॅल्यू + bytes1(0x01), +``` + +16 पेक्षा कमी असलेल्या कॅशे की फक्त एक बाइटच्या असतात. + +```solidity + // दुसरी व्हॅल्यू, ती कॅशेमध्ये जोडू नका + cache.DONT_CACHE(), + bytes32(VAL_B), + + // तिसरी आणि चौथी व्हॅल्यू, समान व्हॅल्यू + bytes1(0x02), + bytes1(0x02) + ); + . + . + . + } // testReadParam +``` + +कॉलनंतरच्या चाचण्या पहिल्या कॉलनंतरच्या चाचण्यांसारख्याच आहेत. + +```solidity + function testEncodeVal() public { +``` + +हे फंक्शन `testReadParam` सारखेच आहे, फक्त फरक एवढाच की पॅरामीटर्स स्पष्टपणे लिहिण्याऐवजी आपण `encodeVal()` वापरतो. + +```solidity + . + . + . + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(VAL_A), + cache.encodeVal(VAL_B), + cache.encodeVal(VAL_C), + cache.encodeVal(VAL_D) + ); + . + . + . + assertEq(_callInput.length, 4+1*4); + } // testEncodeVal +``` + +`testEncodeVal()` मधील एकमेव अतिरिक्त चाचणी म्हणजे `_callInput` ची लांबी योग्य आहे की नाही हे तपासणे. पहिल्या कॉलसाठी ते 4+33\*4 आहे. दुसऱ्यासाठी, जिथे प्रत्येक व्हॅल्यू आधीच कॅशेमध्ये आहे, ते 4+1\*4 आहे. + +```solidity + // जेव्हा की एका बाइटपेक्षा जास्त असेल तेव्हा encodeVal ची चाचणी घ्या + // कमाल तीन बाइट्स कारण कॅशे चार बाइट्सपर्यंत भरण्यास + // खूप वेळ लागतो. + function testEncodeValBig() public { + // कॅशेमध्ये अनेक व्हॅल्यूज ठेवा. + // गोष्टी सोप्या ठेवण्यासाठी, व्हॅल्यू n साठी की n वापरा. + for(uint i=1; i<0x1FFF; i++) { + cache.cacheWrite(i); + } +``` + +वरील `testEncodeVal` फंक्शन कॅशेमध्ये फक्त चार व्हॅल्यूज लिहिते, त्यामुळे [फंक्शनचा जो भाग मल्टी-बाइट व्हॅल्यूज हाताळतो](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/Cache.sol#L144-L171) तो तपासला जात नाही. परंतु तो कोड गुंतागुंतीचा आणि त्रुटी-प्रवण आहे. + +या फंक्शनचा पहिला भाग एक लूप आहे जो 1 ते 0x1FFF पर्यंतच्या सर्व व्हॅल्यूज क्रमाने कॅशेमध्ये लिहितो, जेणेकरून आपण त्या व्हॅल्यूज एन्कोड करू शकू आणि त्या कुठे जात आहेत हे जाणून घेऊ शकू. + +```solidity + . + . + . + + _callInput = bytes.concat( + FOUR_PARAMS, + cache.encodeVal(0x000F), // एक बाइट 0x0F + cache.encodeVal(0x0010), // दोन बाइट्स 0x1010 + cache.encodeVal(0x0100), // दोन बाइट्स 0x1100 + cache.encodeVal(0x1000) // तीन बाइट्स 0x201000 + ); +``` + +एक बाइट, दोन बाइट आणि तीन बाइट व्हॅल्यूजची चाचणी घ्या. आम्ही त्यापलीकडे चाचणी करत नाही कारण पुरेशा स्टॅक नोंदी लिहिण्यासाठी खूप वेळ लागेल (किमान 0x10000000, अंदाजे पाव अब्ज). + +```solidity + . + . + . + . + } // testEncodeValBig + + + // अत्यंत लहान बफरमुळे आपल्याला रिव्हर्ट मिळतो की नाही याची चाचणी + function testShortCalldata() public { +``` + +जेव्हा पुरेसे पॅरामीटर्स नसतात तेव्हा असामान्य परिस्थितीत काय होते याची चाचणी घ्या. + +```solidity + . + . + . + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, false); + } // testShortCalldata +``` + +ते रिव्हर्ट होत असल्याने, आपल्याला मिळणारा निकाल `false` असावा. + +``` + // अस्तित्वात नसलेल्या कॅशे कीजसह कॉल करा + function testNoCacheKey() public { + . + . + . + _callInput = bytes.concat( + FOUR_PARAMS, + + // पहिली व्हॅल्यू, ती कॅशेमध्ये जोडा + cache.INTO_CACHE(), + bytes32(VAL_A), + + // दुसरी व्हॅल्यू + bytes1(0x0F), + bytes2(0x1234), + bytes11(0xA10102030405060708090A) + ); +``` + +हे फंक्शन चार पूर्णपणे कायदेशीर पॅरामीटर्स मिळवते, फक्त फरक एवढाच की कॅशे रिकामा आहे त्यामुळे वाचण्यासाठी तेथे कोणतीही व्हॅल्यूज नाहीत. + +```solidity + . + . + . + // अत्यंत लांब बफरसह सर्व काही व्यवस्थित काम करते की नाही याची चाचणी + function testLongCalldata() public { + address _cacheAddr = address(cache); + bool _success; + bytes memory _callInput; + bytes memory _callOutput; + + // पहिला कॉल, कॅशे रिकामा आहे + _callInput = bytes.concat( + FOUR_PARAMS, + + // पहिली व्हॅल्यू, ती कॅशेमध्ये जोडा + cache.INTO_CACHE(), bytes32(VAL_A), + + // दुसरी व्हॅल्यू, ती कॅशेमध्ये जोडा + cache.INTO_CACHE(), bytes32(VAL_B), + + // तिसरी व्हॅल्यू, ती कॅशेमध्ये जोडा + cache.INTO_CACHE(), bytes32(VAL_C), + + // चौथी व्हॅल्यू, ती कॅशेमध्ये जोडा + cache.INTO_CACHE(), bytes32(VAL_D), + + // आणि "गुड लक" साठी आणखी एक व्हॅल्यू + bytes4(0x31112233) + ); +``` + +हे फंक्शन पाच व्हॅल्यूज पाठवते. आम्हाला माहित आहे की पाचवी व्हॅल्यू दुर्लक्षित केली जाते कारण ती वैध कॅशे नोंद नाही, जी समाविष्ट केली नसती तर रिव्हर्ट झाली असती. + +```solidity + (_success, _callOutput) = _cacheAddr.call(_callInput); + assertEq(_success, true); + . + . + . + } // testLongCalldata + +} // CacheTest + +``` + +## एक नमुना ॲप्लिकेशन {#a-sample-app} + +Solidity मध्ये चाचण्या लिहिणे खूप चांगले आहे, पण शेवटी, उपयुक्त होण्यासाठी dapp ला चेनच्या बाहेरून आलेल्या विनंत्यांवर प्रक्रिया करता आली पाहिजे. हा लेख `WORM` सह dapp मध्ये कॅशिंग कसे वापरावे हे दाखवतो, ज्याचा अर्थ "एकदा लिहा, अनेकदा वाचा" असा होतो. जर की अजून लिहिलेली नसेल, तर तुम्ही त्यावर एक व्हॅल्यू लिहू शकता. जर की आधीच लिहिलेली असेल, तर तुम्हाला रिव्हर्ट मिळेल. + +### करार {#the-contract} + +[हा करार आहे](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/src/WORM.sol). हे बहुतेक `Cache` आणि `CacheTest` सह आपण आधीच जे केले आहे त्याचीच पुनरावृत्ती करते, म्हणून आपण फक्त मनोरंजक भाग कव्हर करू. + +```solidity +import "./Cache.sol"; + +contract WORM is Cache { +``` + +`Cache` वापरण्याचा सर्वात सोपा मार्ग म्हणजे तो आपल्या स्वतःच्या करारामध्ये इनहेरिट करणे. + +```solidity + function writeEntryCached() external { + uint[] memory params = _readParams(2); + writeEntry(params[0], params[1]); + } // writeEntryCached +``` + +हे फंक्शन वरील `CacheTest` मधील `fourParam` सारखेच आहे. कारण आपण ABI स्पेसिफिकेशन्सचे पालन करत नाही, त्यामुळे फंक्शनमध्ये कोणतेही पॅरामीटर्स घोषित न करणे चांगले आहे. + +```solidity + // आम्हाला कॉल करणे सोपे करा + // writeEntryCached() साठी फंक्शन सिग्नेचर, सौजन्याने + // https://www.4byte.directory/signatures/?bytes4_signature=0xe4e4f2d3 + bytes4 constant public WRITE_ENTRY_CACHED = 0xe4e4f2d3; +``` + +`writeEntryCached` ला कॉल करणारा बाह्य कोडला `worm.writeEntryCached` वापरण्याऐवजी मॅन्युअली कॉलडेटा तयार करावा लागेल, कारण आम्ही ABI स्पेसिफिकेशन्सचे पालन करत नाही. हे कॉन्स्टंट व्हॅल्यू असल्याने ते लिहिणे सोपे होते. + +लक्षात ठेवा की आम्ही `WRITE_ENTRY_CACHED` ला स्टेट व्हेरिएबल म्हणून परिभाषित केले असले तरी, ते बाहेरून वाचण्यासाठी त्यासाठी गेटर फंक्शन `worm.WRITE_ENTRY_CACHED()` वापरणे आवश्यक आहे. + +```solidity + function readEntry(uint key) public view + returns (uint _value, address _writtenBy, uint _writtenAtBlock) +``` + +रीड फंक्शन `view` आहे, त्यामुळे त्याला व्यवहाराची आवश्यकता नाही आणि गॅस लागत नाही. परिणामी, पॅरामीटरसाठी कॅशे वापरण्याचा कोणताही फायदा नाही. व्ह्यू फंक्शन्ससह, सोपी असलेली मानक यंत्रणा वापरणे सर्वोत्तम आहे. + +### चाचणी कोड {#the-testing-code} + +[हा करारासाठीचा चाचणी कोड आहे](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/test/WORM.t.sol). पुन्हा, आपण फक्त मनोरंजक गोष्टी पाहू. + +```solidity + function testWReadWrite() public { + worm.writeEntry(0xDEAD, 0x60A7); + + vm.expectRevert(bytes("entry already written")); + worm.writeEntry(0xDEAD, 0xBEEF); +``` + +Foundry चाचणीमध्ये पुढील कॉल अयशस्वी व्हावा आणि अयशस्वी होण्याचे नोंदवलेले कारण कसे निर्दिष्ट करावे हे [हे (`vm.expectRevert`)](https://book.getfoundry.sh/cheatcodes/expect-revert#expectrevert) आहे. जेव्हा आपण `.` सिंटॅक्स वापरतो तेव्हा हे लागू होते()` कॉलडेटा तयार करून आणि निम्न-स्तरीय इंटरफेस (`.call()` इत्यादी) वापरून कराराला कॉल करण्याऐवजी. + +```solidity + function testReadWriteCached() public { + uint cacheGoat = worm.cacheWrite(0x60A7); +``` + +येथे आपण या वस्तुस्थितीचा वापर करतो की `cacheWrite` कॅशे की परत करते. हे असे काहीतरी नाही जे आपण उत्पादनात वापरण्याची अपेक्षा करतो, कारण `cacheWrite` स्टेट बदलते आणि म्हणून फक्त व्यवहारादरम्यानच कॉल केले जाऊ शकते. व्यवहारांना रिटर्न व्हॅल्यूज नसतात, जर त्यांचे निकाल असतील तर ते निकाल इव्हेंट म्हणून प्रसारित केले जातात. त्यामुळे `cacheWrite` रिटर्न व्हॅल्यू केवळ ऑनचेन कोडवरूनच ॲक्सेस करता येते आणि ऑनचेन कोडला पॅरामीटर कॅशिंगची आवश्यकता नसते. + +```solidity + (_success,) = address(worm).call(_callInput); +``` + +याद्वारे आपण Solidity ला सांगतो की `.call()` मध्ये दोन रिटर्न व्हॅल्यूज असल्या तरी, आपल्याला फक्त पहिल्याचीच काळजी आहे. + +```solidity + (_success,) = address(worm).call(_callInput); + assertEq(_success, false); +``` + +कारण आपण निम्न-स्तरीय `
.call()` फंक्शन वापरतो, आपण `vm.expectRevert()` वापरू शकत नाही आणि आपल्याला कॉलमधून मिळणाऱ्या बुलियन यश व्हॅल्यूकडे लक्ष द्यावे लागते. + +```solidity + event EntryWritten(uint indexed key, uint indexed value); + + . + . + . + + _callInput = bytes.concat( + worm.WRITE_ENTRY_CACHED(), worm.encodeVal(a), worm.encodeVal(b)); + vm.expectEmit(true, true, false, false); + emit EntryWritten(a, b); + (_success,) = address(worm).call(_callInput); +``` + +Foundry मध्ये कोड [योग्यरित्या इव्हेंट प्रसारित करतो](https://getfoundry.sh/reference/cheatcodes/expect-emit/) की नाही हे तपासण्याचा हा मार्ग आहे. + +### क्लायंट {#the-client} + +Solidity चाचण्यांसोबत एक गोष्ट मिळत नाही ती म्हणजे जावास्क्रिप्ट कोड जो तुम्ही तुमच्या स्वतःच्या ॲप्लिकेशनमध्ये कट आणि पेस्ट करू शकता. तो कोड लिहिण्यासाठी मी WORM ला [Optimism Goerli](https://community.optimism.io/docs/useful-tools/networks/#optimism-goerli) वर तैनात केले, जो [Optimism's](https://www.optimism.io/) नवीन टेस्टनेट आहे. ते [`0xd34335b1d818cee54e3323d3246bd31d94e6a78a`](https://goerli-optimism.etherscan.io/address/0xd34335b1d818cee54e3323d3246bd31d94e6a78a) ॲड्रेसवर आहे. + +[तुम्ही क्लायंटसाठी जावास्क्रिप्ट कोड येथे पाहू शकता](https://github.com/qbzzt/20220915-all-you-can-cache/blob/main/javascript/index.js). ते वापरण्यासाठी: + +1. गिट रिपॉझिटरी क्लोन करा: + + ```sh + git clone https://github.com/qbzzt/20220915-all-you-can-cache.git + ``` + +2. आवश्यक पॅकेजेस स्थापित करा: + + ```sh + cd javascript + yarn + ``` + +3. कॉन्फिगरेशन फाईल कॉपी करा: + + ```sh + cp .env.example .env + ``` + +4. तुमच्या कॉन्फिगरेशनसाठी `.env` संपादित करा: + + | पॅरामीटर | मूल्य | + | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | MNEMONIC | एका खात्यासाठी मेमोनिक ज्यामध्ये व्यवहारासाठी पैसे भरण्यासाठी पुरेसे ETH आहे. [तुम्ही Optimism Goerli नेटवर्कसाठी मोफत ETH येथे मिळवू शकता](https://optimismfaucet.xyz/). | + | OPTIMISM_GOERLI_URL | Optimism Goerli साठी URL. पब्लिक एंडपॉइंट, `https://goerli.optimism.io`, रेट लिमिटेड आहे पण आपल्याला येथे जे हवे आहे त्यासाठी पुरेसा आहे | + +5. `index.js` चालवा. + + ```sh + node index.js + ``` + + हे नमुना ॲप्लिकेशन प्रथम WORM मध्ये एक नोंद लिहिते, कॉलडेटा आणि Etherscan वरील व्यवहाराची लिंक दर्शवते. नंतर ते ती नोंद परत वाचते, आणि ती वापरत असलेली की आणि नोंदीमधील व्हॅल्यूज (व्हॅल्यू, ब्लॉक क्रमांक आणि लेखक) दर्शवते. + +बहुतेक क्लायंट सामान्य Dapp JavaScript आहे. त्यामुळे पुन्हा आपण फक्त मनोरंजक भागांवरच नजर टाकू. + +```javascript +. +. +. +const main = async () => { + const func = await worm.WRITE_ENTRY_CACHED() + + // प्रत्येक वेळी नवीन की आवश्यक आहे + const key = await worm.encodeVal(Number(new Date())) +``` + +दिलेल्या स्लॉटमध्ये फक्त एकदाच लिहिले जाऊ शकते, म्हणून आम्ही स्लॉट पुन्हा वापरत नाही याची खात्री करण्यासाठी टाइमस्टॅम्प वापरतो. + +```javascript +const val = await worm.encodeVal("0x600D") + +// एक नोंद लिहा +const calldata = func + key.slice(2) + val.slice(2) +``` + +Ethers ला कॉल डेटा हेक्स स्ट्रिंग असण्याची अपेक्षा आहे, `0x` नंतर सम संख्येतील हेक्साडेसिमल अंक. `key` आणि `val` दोन्ही `0x` ने सुरू होत असल्याने, आपल्याला ते हेडर काढून टाकणे आवश्यक आहे. + +```javascript +const tx = await worm.populateTransaction.writeEntryCached() +tx.data = calldata + +sentTx = await wallet.sendTransaction(tx) +``` + +Solidity चाचणी कोडप्रमाणे, आपण कॅश्ड फंक्शनला सामान्यपणे कॉल करू शकत नाही. त्याऐवजी, आपल्याला निम्न-स्तरीय यंत्रणा वापरण्याची आवश्यकता आहे. + +```javascript + . + . + . + // नुकतीच लिहिलेली नोंद वाचा + const realKey = '0x' + key.slice(4) // FF फ्लॅग काढा + const entryRead = await worm.readEntry(realKey) + . + . + . +``` + +नोंदी वाचण्यासाठी आपण सामान्य यंत्रणा वापरू शकतो. `view` फंक्शन्ससह पॅरामीटर कॅशिंग वापरण्याची आवश्यकता नाही. + +## निष्कर्ष {#conclusion} + +या लेखातील कोड एक प्रूफ ऑफ कॉन्सेप्ट आहे, उद्देश ही कल्पना समजण्यास सोपी करणे हा आहे. उत्पादनासाठी सज्ज प्रणालीसाठी तुम्ही काही अतिरिक्त कार्यक्षमता लागू करू शकता: + +- `uint256` नसलेल्या व्हॅल्यूज हाताळा. उदाहरणार्थ, स्ट्रिंग्स. +- जागतिक कॅशेऐवजी, कदाचित वापरकर्ते आणि कॅशे यांच्यात मॅपिंग ठेवा. वेगवेगळे वापरकर्ते वेगवेगळ्या व्हॅल्यूज वापरतात. +- ॲड्रेससाठी वापरल्या जाणार्‍या व्हॅल्यूज इतर उद्देशांसाठी वापरल्या जाणार्‍या व्हॅल्यूजपेक्षा वेगळ्या असतात. फक्त ॲड्रेससाठी वेगळा कॅशे असणे अर्थपूर्ण असू शकते. +- सध्या, कॅशे की "प्रथम येणाऱ्यास, सर्वात लहान की" अल्गोरिदमवर आहेत. पहिल्या सोळा व्हॅल्यूज एकाच बाइटमध्ये पाठवल्या जाऊ शकतात. पुढील 4080 व्हॅल्यूज दोन बाइट्समध्ये पाठवल्या जाऊ शकतात. पुढील अंदाजे दहा लाख व्हॅल्यूज तीन बाइट्सच्या आहेत, इत्यादी. एक उत्पादन प्रणालीने कॅशे नोंदींवर वापर काउंटर ठेवावेत आणि त्यांची पुनर्रचना करावी जेणेकरून सोळा _सर्वात सामान्य_ व्हॅल्यूज एक बाइटच्या असतील, पुढील 4080 सर्वात सामान्य व्हॅल्यूज दोन बाइट्सच्या असतील, इत्यादी. + + तथापि, ही एक संभाव्य धोकादायक क्रिया आहे. खालील घटनांचा क्रम कल्पना करा: + + 1. नोआम नेव्ह त्याला टोकन पाठवायचे असलेल्या ॲड्रेसला एन्कोड करण्यासाठी `encodeVal` ला कॉल करतो. तो ॲड्रेस ॲप्लिकेशनवर वापरल्या जाणाऱ्या पहिल्या ॲड्रेसपैकी एक आहे, त्यामुळे एन्कोड केलेली व्हॅल्यू 0x06 आहे. हे एक `view` फंक्शन आहे, व्यवहार नाही, त्यामुळे ते नोआम आणि तो वापरत असलेल्या नोडच्या दरम्यान आहे आणि इतर कोणालाही त्याबद्दल माहिती नाही + + 2. ओवेन ओनर कॅशे पुनर्रचना ऑपरेशन चालवतो. फार कमी लोक प्रत्यक्षात तो ॲड्रेस वापरतात, त्यामुळे तो आता 0x201122 म्हणून एन्कोड केला आहे. एक वेगळी व्हॅल्यू, 1018, 0x06 ला नियुक्त केली आहे. + + 3. नोआम नेव्ह त्याचे टोकन 0x06 वर पाठवतो. ते `0x0000000000000000000000000de0b6b3a7640000` ॲड्रेसवर जातात, आणि त्या ॲड्रेसची प्रायव्हेट की कोणालाच माहीत नसल्याने, ते तिथेच अडकून पडतात. नोआम _खुश नाही_. + + ही समस्या सोडवण्याचे मार्ग आहेत, आणि कॅशे पुनर्रचनेदरम्यान मेमपूलमध्ये असलेल्या व्यवहारांची संबंधित समस्या, पण तुम्हाला त्याबद्दल जागरूक असले पाहिजे. + +मी येथे Optimism सह कॅशिंगचे प्रदर्शन केले आहे, कारण मी Optimism चा कर्मचारी आहे आणि हा रोलअप मला सर्वोत्तम माहीत आहे. परंतु ते कोणत्याही रोलअपसह कार्य केले पाहिजे जे अंतर्गत प्रक्रियेसाठी किमान खर्च आकारते, जेणेकरून तुलनेत L1 वर व्यवहार डेटा लिहिणे हा मोठा खर्च असेल. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). + diff --git a/public/content/translations/mr/developers/tutorials/app-plasma/index.md b/public/content/translations/mr/developers/tutorials/app-plasma/index.md new file mode 100644 index 00000000000..9a26c00004e --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/app-plasma/index.md @@ -0,0 +1,1256 @@ +--- +title: "गोपनीयतेचे संरक्षण करणारा ॲप-विशिष्ट प्लाझ्मा लिहा" +description: "या ट्युटोरिअलमध्ये, आम्ही ठेवींसाठी एक अर्ध-गुप्त बँक तयार करतो. बँक एक केंद्रीकृत घटक आहे; तिला प्रत्येक वापरकर्त्याची शिल्लक माहीत असते. तथापि, ही माहिती ऑनचेन साठवली जात नाही. त्याऐवजी, बँक स्टेटचा हॅश पोस्ट करते. प्रत्येक वेळी व्यवहार होतो तेव्हा, बँक नवीन हॅश पोस्ट करते, यासोबतच एक शून्य-ज्ञान पुरावा देखील देते की तिच्याकडे एक स्वाक्षरी केलेला व्यवहार आहे जो हॅश स्टेटला नवीन स्टेटमध्ये बदलतो. हे ट्युटोरिअल वाचल्यानंतर, तुम्हाला शून्य-ज्ञान पुरावे कसे वापरायचे हे तर समजेलच, पण ते का वापरायचे आणि सुरक्षितपणे कसे वापरायचे हे देखील समजेल." +author: Ori Pomerantz +tags: [ "शून्य-ज्ञान", "सर्व्हर", "ऑफचेन", "गोपनीयता" ] +skill: advanced +lang: mr +published: 2025-10-15 +--- + +## प्रस्तावना {#introduction} + +[रोलअप्स](/developers/docs/scaling/zk-rollups/) च्या तुलनेत, [प्लाझ्मा](/developers/docs/scaling/plasma) अखंडतेसाठी Ethereum मेननेट वापरतात, परंतु उपलब्धतेसाठी नाही. या लेखात, आम्ही एक ॲप्लिकेशन लिहितो जे प्लाझ्मासारखे वागते, ज्यात Ethereum अखंडतेची (अनधिकृत बदल नाहीत) हमी देतो परंतु उपलब्धतेची नाही (एक केंद्रीकृत घटक बंद होऊ शकतो आणि संपूर्ण प्रणाली अक्षम करू शकतो). + +आम्ही येथे जे ॲप्लिकेशन लिहित आहोत ते एक गोपनीयता-संरक्षक बँक आहे. वेगवेगळ्या ॲड्रेसवर शिल्लक असलेली खाती आहेत, आणि ते इतर खात्यांमध्ये पैसे (ETH) पाठवू शकतात. बँक स्टेट (खाती आणि त्यांची शिल्लक) आणि व्यवहारांचे हॅश पोस्ट करते, परंतु वास्तविक शिल्लक ऑफचेन ठेवते जिथे ते खाजगी राहू शकतात. + +## डिझाइन {#design} + +ही प्रोडक्शन-रेडी प्रणाली नाही, तर एक शिकवण्याचे साधन आहे. त्यामुळे, ते अनेक सरलीकरण गृहितकांसह लिहिलेले आहे. + +- निश्चित खाते पूल. खात्यांची एक विशिष्ट संख्या आहे, आणि प्रत्येक खाते एका पूर्वनिश्चित ॲड्रेसचे आहे. यामुळे एक अधिक सोपी प्रणाली तयार होते कारण शून्य-ज्ञान पुराव्यांमध्ये व्हेरिएबल-आकाराच्या डेटा स्ट्रक्चर्स हाताळणे कठीण आहे. प्रोडक्शन-रेडी प्रणालीसाठी, आपण [मर्कल रूट](/developers/tutorials/merkle-proofs-for-offline-data-integrity/) स्टेट हॅश म्हणून वापरू शकतो आणि आवश्यक शिलकेसाठी मर्कल पुरावे देऊ शकतो. + +- मेमरी स्टोरेज. प्रोडक्शन प्रणालीवर, रीस्टार्ट झाल्यास सर्व खात्यांमधील शिल्लक जपून ठेवण्यासाठी आम्हाला त्या डिस्कवर लिहिण्याची आवश्यकता आहे. येथे, माहिती सहज गमावली तरी चालेल. + +- फक्त ट्रान्सफर. प्रोडक्शन प्रणालीला बँकेत मालमत्ता जमा करण्याचा आणि त्या काढण्याचा मार्ग आवश्यक असतो. परंतु येथे उद्देश केवळ संकल्पना स्पष्ट करणे आहे, म्हणून ही बँक केवळ ट्रान्सफरपुरती मर्यादित आहे. + +### शून्य-ज्ञान पुरावे {#zero-knowledge-proofs} + +मूलभूत स्तरावर, एक शून्य-ज्ञान पुरावा दर्शवितो की प्रोव्हरला काही डेटा, _Dataprivate_ माहित आहे, जसे की काही सार्वजनिक डेटा, _Datapublic_, आणि _Dataprivate_ यांच्यात एक संबंध _Relationship_ आहे. व्हेरिफायरला _Relationship_ आणि _Datapublic_ माहीत असते. + +गोपनीयता जपण्यासाठी, आपल्याला स्टेट्स आणि व्यवहार खाजगी ठेवण्याची गरज आहे. पण अखंडता सुनिश्चित करण्यासाठी, आम्हाला स्टेट्सचा [क्रिप्टोग्राफिक हॅश](https://en.wikipedia.org/wiki/Cryptographic_hash_function) सार्वजनिक ठेवण्याची गरज आहे. व्यवहार सबमिट करणाऱ्या लोकांना ते व्यवहार खरोखरच झाले आहेत हे सिद्ध करण्यासाठी, आम्हाला व्यवहार हॅश देखील पोस्ट करण्याची आवश्यकता आहे. + +बहुतेक प्रकरणांमध्ये, _Dataprivate_ हे शून्य-ज्ञान पुरावा प्रोग्रामसाठी इनपुट असते आणि _Datapublic_ हे आउटपुट असते. + +_Dataprivate_ मधील ही फील्ड्स: + +- _Staten_, जुनी स्टेट +- _Staten+1_, नवीन स्टेट +- _Transaction_, एक व्यवहार जो जुन्या स्टेटमधून नवीन स्टेटमध्ये बदलतो. या व्यवहारामध्ये ही फील्ड्स समाविष्ट असणे आवश्यक आहे: + - _गंतव्य ॲड्रेस_ जो ट्रान्सफर प्राप्त करतो + - ट्रान्सफर केली जाणारी _रक्कम_ + - प्रत्येक व्यवहारावर एकदाच प्रक्रिया केली जाऊ शकते हे सुनिश्चित करण्यासाठी _नॉन्स_. + स्त्रोत ॲड्रेस व्यवहारामध्ये असण्याची गरज नाही, कारण तो स्वाक्षरीतून परत मिळवता येतो. +- _स्वाक्षरी_, व्यवहार करण्यासाठी अधिकृत असलेली स्वाक्षरी. आमच्या बाबतीत, व्यवहार करण्यासाठी अधिकृत असलेला एकमेव ॲड्रेस स्त्रोत ॲड्रेस आहे. कारण आमची शून्य-ज्ञान प्रणाली ज्या प्रकारे काम करते, आम्हाला Ethereum स्वाक्षरी व्यतिरिक्त, खात्याची सार्वजनिक की देखील आवश्यक आहे. + +ही _Datapublic_ मधील फील्ड्स आहेत: + +- _Hash(Staten)_ जुन्या स्टेटचा हॅश +- _Hash(Staten+1)_ नवीन स्टेटचा हॅश +- _Hash(Transaction)_ त्या व्यवहाराचा हॅश जो स्टेटला _Staten_ मधून _Staten+1_ मध्ये बदलतो. + +संबंध अनेक अटी तपासतो: + +- सार्वजनिक हॅश खरोखरच खाजगी फील्ड्ससाठी योग्य हॅश आहेत. +- व्यवहार, जुन्या स्टेटवर लागू केल्यावर, नवीन स्टेटमध्ये परिणाम करतो. +- स्वाक्षरी व्यवहाराच्या स्त्रोत ॲड्रेसवरून येते. + +क्रिप्टोग्राफिक हॅश फंक्शन्सच्या गुणधर्मांमुळे, या अटी सिद्ध करणे अखंडता सुनिश्चित करण्यासाठी पुरेसे आहे. + +### डेटा स्ट्रक्चर्स {#data-structures} + +प्राथमिक डेटा स्ट्रक्चर सर्व्हरद्वारे धारण केलेली स्टेट आहे. प्रत्येक खात्यासाठी, सर्व्हर खात्याची शिल्लक आणि एक [नॉन्स](https://en.wikipedia.org/wiki/Cryptographic_nonce) चा मागोवा ठेवतो, जो [रिप्ले अटॅक](https://en.wikipedia.org/wiki/Replay_attack) रोखण्यासाठी वापरला जातो. + +### घटक {#components} + +या प्रणालीला दोन घटक आवश्यक आहेत: + +- _सर्व्हर_ जो व्यवहार स्वीकारतो, त्यावर प्रक्रिया करतो, आणि शून्य-ज्ञान पुराव्यांसह हॅश चेनवर पोस्ट करतो. +- एक _स्मार्ट कॉन्ट्रॅक्ट_ जो हॅश साठवतो आणि स्टेट संक्रमण वैध असल्याची खात्री करण्यासाठी शून्य-ज्ञान पुरावे सत्यापित करतो. + +### डेटा आणि नियंत्रण प्रवाह {#flows} + +एका खात्यातून दुसऱ्या खात्यात हस्तांतरण करण्यासाठी विविध घटक ज्या प्रकारे संवाद साधतात ते खालीलप्रमाणे आहेत. + +1. एक वेब ब्राउझर स्वाक्षरी केलेला व्यवहार सबमिट करतो जो स्वाक्षरीकर्त्याच्या खात्यातून वेगळ्या खात्यात हस्तांतरण करण्याची विनंती करतो. + +2. सर्व्हर सत्यापित करतो की व्यवहार वैध आहे: + + - स्वाक्षरीकर्त्याचे बँकेत पुरेशी शिल्लक असलेले खाते आहे. + - प्राप्तकर्त्याचे बँकेत एक खाते आहे. + +3. सर्व्हर स्वाक्षरीकर्त्याच्या शिलकेतून हस्तांतरित केलेली रक्कम वजा करून आणि ती प्राप्तकर्त्याच्या शिलकेत जोडून नवीन स्टेटची गणना करतो. + +4. सर्व्हर एक शून्य-ज्ञान पुरावा तयार करतो की स्टेट बदल वैध आहे. + +5. सर्व्हर Ethereum ला एक व्यवहार सबमिट करतो ज्यात समाविष्ट आहे: + + - नवीन स्टेट हॅश + - व्यवहार हॅश (जेणेकरून व्यवहार पाठवणाऱ्याला कळेल की त्यावर प्रक्रिया झाली आहे) + - शून्य-ज्ञान पुरावा जो नवीन स्टेटमध्ये संक्रमण वैध असल्याचे सिद्ध करतो + +6. स्मार्ट कॉन्ट्रॅक्ट शून्य-ज्ञान पुरावा सत्यापित करतो. + +7. जर शून्य-ज्ञान पुरावा तपासला गेला, तर स्मार्ट कॉन्ट्रॅक्ट या क्रिया करतो: + - सध्याचा स्टेट हॅश नवीन स्टेट हॅशमध्ये अपडेट करणे + - नवीन स्टेट हॅश आणि व्यवहार हॅशसह एक लॉग नोंदणी प्रसारित करणे + +### साधने {#tools} + +क्लायंट-साइड कोडसाठी, आम्ही [Vite](https://vite.dev/), [React](https://react.dev/), [Viem](https://viem.sh/), आणि [Wagmi](https://wagmi.sh/) वापरणार आहोत. ही उद्योग-मानक साधने आहेत; जर तुम्हाला त्यांच्याशी परिचय नसेल, तर तुम्ही [हे ट्यूटोरियल](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) वापरू शकता. + +सर्व्हरचा बहुतांश भाग [Node](https://nodejs.org/en) वापरून JavaScript मध्ये लिहिलेला आहे. शून्य-ज्ञान भाग [Noir](https://noir-lang.org/) मध्ये लिहिलेला आहे. आम्हाला आवृत्ती `1.0.0-beta.10` आवश्यक आहे, म्हणून तुम्ही [निर्देशानुसार Noir इन्स्टॉल](https://noir-lang.org/docs/getting_started/quick_start) केल्यानंतर, चालवा: + +``` +noirup -v 1.0.0-beta.10 +``` + +आपण जो ब्लॉकचेन वापरतो तो `anvil` आहे, एक स्थानिक चाचणी ब्लॉकचेन जो [Foundry](https://getfoundry.sh/introduction/installation) चा भाग आहे. + +## अंमलबजावणी {#implementation} + +कारण ही एक गुंतागुंतीची प्रणाली आहे, आम्ही ती टप्प्याटप्प्याने लागू करू. + +### टप्पा १ - मॅन्युअल शून्य ज्ञान {#stage-1} + +पहिल्या टप्प्यासाठी, आम्ही ब्राउझरमध्ये एका व्यवहारावर स्वाक्षरी करू आणि नंतर मॅन्युअली शून्य-ज्ञान पुराव्याला माहिती देऊ. शून्य-ज्ञान कोडला ती माहिती `server/noir/Prover.toml` मध्ये मिळण्याची अपेक्षा असते ([येथे](https://noir-lang.org/docs/getting_started/project_breakdown#provertoml-1) दस्तऐवजीकरण केलेले). + +ते कृतीत पाहण्यासाठी: + +1. तुम्ही [Node](https://nodejs.org/en/download) आणि [Noir](https://noir-lang.org/install) इन्स्टॉल केले असल्याची खात्री करा. शक्यतो, ते macOS, Linux, किंवा [WSL](https://learn.microsoft.com/en-us/windows/wsl/install) सारख्या UNIX प्रणालीवर इन्स्टॉल करा. + +2. स्टेज 1 कोड डाउनलोड करा आणि क्लायंट कोड सर्व्ह करण्यासाठी वेब सर्व्हर सुरू करा. + + ```sh + git clone https://github.com/qbzzt/250911-zk-bank.git -b 01-manual-zk + cd 250911-zk-bank + cd client + npm install + npm run dev + ``` + + येथे वेब सर्व्हरची गरज असण्याचे कारण म्हणजे, काही प्रकारची फसवणूक टाळण्यासाठी, अनेक वॉलेट्स (जसे की MetaMask) थेट डिस्कवरून सर्व्ह केलेल्या फाइल्स स्वीकारत नाहीत + +3. वॉलेटसह ब्राउझर उघडा. + +4. वॉलेटमध्ये, एक नवीन पासफ्रेज टाका. लक्षात घ्या की यामुळे तुमचा सध्याचा पासफ्रेज हटवला जाईल, म्हणून _तुमच्याकडे बॅकअप असल्याची खात्री करा_. + + पासफ्रेज `test test test test test test test test test test test junk` आहे, जो anvil साठी डीफॉल्ट चाचणी पासफ्रेज आहे. + +5. [क्लायंट-साइड कोड](http://localhost:5173/) वर ब्राउझ करा. + +6. वॉलेटशी कनेक्ट व्हा आणि तुमचे गंतव्य खाते आणि रक्कम निवडा. + +7. **स्वाक्षरी करा** वर क्लिक करा आणि व्यवहारावर स्वाक्षरी करा. + +8. **Prover.toml** शीर्षकाखाली तुम्हाला मजकूर मिळेल. `server/noir/Prover.toml` त्या मजकूराने बदला. + +9. शून्य-ज्ञान पुरावा कार्यान्वित करा. + + ```sh + cd ../server/noir + nargo execute + ``` + + आउटपुट यासारखे असावे + + ``` + ori@CryptoDocGuy:~/noir/250911-zk-bank/server/noir$ nargo execute + + [zkBank] Circuit witness successfully solved + [zkBank] Witness saved to target/zkBank.gz + [zkBank] Circuit output: (0x199aa62af8c1d562a6ec96e66347bf3240ab2afb5d022c895e6bf6a5e617167b, 0x0cfc0a67cb7308e4e9b254026b54204e34f6c8b041be207e64c5db77d95dd82d, 0x450cf9da6e180d6159290554ae3d8787, 0x6d8bc5a15b9037e52fb59b6b98722a85) + ``` + +10. संदेश योग्यरित्या हॅश झाला आहे की नाही हे पाहण्यासाठी वेब ब्राउझरवर दिसणाऱ्या हॅशशी शेवटच्या दोन मूल्यांची तुलना करा. + +#### `server/noir/Prover.toml` {#server-noir-prover-toml} + +[ही फाइल](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Prover.toml) Noir द्वारे अपेक्षित माहितीचे स्वरूप दर्शवते. + +```toml +message="send 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 500 finney (milliEth) 0 " +``` + +संदेश मजकूर स्वरूपात आहे, ज्यामुळे वापरकर्त्याला समजणे सोपे होते (जे स्वाक्षरी करताना आवश्यक आहे) आणि Noir कोडला पार्स करणे सोपे होते. रक्कम फिनीमध्ये उद्धृत केली आहे जेणेकरून एकीकडे अंशात्मक हस्तांतरण सक्षम होईल आणि दुसरीकडे ते सहज वाचता येईल. शेवटची संख्या [नॉन्स](https://en.wikipedia.org/wiki/Cryptographic_nonce) आहे. + +स्ट्रिंग १०० अक्षरांची आहे. शून्य-ज्ञान पुरावे व्हेरिएबल-आकाराचा डेटा चांगल्या प्रकारे हाताळत नाहीत, त्यामुळे डेटा पॅड करणे अनेकदा आवश्यक असते. + +```toml +pubKeyX=["0x83",...,"0x75"] +pubKeyY=["0x35",...,"0xa5"] +signature=["0xb1",...,"0x0d"] +``` + +हे तीन पॅरामीटर्स निश्चित-आकाराचे बाइट ॲरे आहेत. + +```toml +[[accounts]] +address="0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" +balance=100_000 +nonce=0 + +[[accounts]] +address="0x70997970C51812dc3A010C7d01b50e0d17dc79C8" +balance=100_000 +nonce=0 +``` + +स्ट्रक्चर्सचा ॲरे निर्दिष्ट करण्याचा हा मार्ग आहे. प्रत्येक नोंदीसाठी, आम्ही ॲड्रेस, शिल्लक (milliETH उर्फ [फिनी](https://cryptovalleyjournal.com/glossary/finney/)), आणि पुढील नॉन्स मूल्य निर्दिष्ट करतो. + +#### `client/src/Transfer.tsx` {#client-src-transfer-tsx} + +[ही फाइल](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/client/src/Transfer.tsx) क्लायंट-साइड प्रोसेसिंग लागू करते आणि `server/noir/Prover.toml` फाइल तयार करते (ज्यामध्ये शून्य-ज्ञान पॅरामीटर्स समाविष्ट आहेत). + +येथे अधिक मनोरंजक भागांचे स्पष्टीकरण दिले आहे. + +```tsx +export default attrs => { +``` + +हे फंक्शन `Transfer` React घटक तयार करते, जे इतर फाइल्स आयात करू शकतात. + +```tsx + const accounts = [ + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", + "0x90F79bf6EB2c4f870365E785982E1f101E93b906", + "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", + ] +``` + +हे खाते ॲड्रेस आहेत, जे `test ...` test junk` पासफ्रेजने तयार केलेले ॲड्रेस. तुम्हाला तुमचे स्वतःचे ॲड्रेस वापरायचे असल्यास, फक्त ही व्याख्या सुधारा. + +```tsx + const account = useAccount() + const wallet = createWalletClient({ + transport: custom(window.ethereum!) + }) +``` + +हे [Wagmi हुक्स](https://wagmi.sh/react/api/hooks) आम्हाला [viem](https://viem.sh/) लायब्ररी आणि वॉलेटमध्ये प्रवेश करू देतात. + +```tsx + const message = `send ${toAccount} ${ethAmount*1000} finney (milliEth) ${nonce}`.padEnd(100, " ") +``` + +हा संदेश आहे, जागांनी पॅड केलेला. प्रत्येक वेळी [`useState`](https://react.dev/reference/react/useState) व्हेरिएबल्सपैकी एक बदलतो, घटक पुन्हा काढला जातो आणि `message` अपडेट होतो. + +```tsx + const sign = async () => { +``` + +जेव्हा वापरकर्ता **स्वाक्षरी** बटणावर क्लिक करतो तेव्हा हे फंक्शन कॉल केले जाते. संदेश आपोआप अपडेट होतो, परंतु स्वाक्षरीसाठी वॉलेटमध्ये वापरकर्त्याच्या मंजुरीची आवश्यकता असते आणि गरज नसल्यास आम्ही ती विचारू इच्छित नाही. + +```tsx + const signature = await wallet.signMessage({ + account: fromAccount, + message, + }) +``` + +वॉलेटला [संदेशावर स्वाक्षरी करण्यास](https://viem.sh/docs/accounts/local/signMessage) सांगा. + +```tsx + const hash = hashMessage(message) +``` + +संदेश हॅश मिळवा. डीबगिंगसाठी (Noir कोडच्या) वापरकर्त्याला ते प्रदान करणे उपयुक्त आहे. + +```tsx + const pubKey = await recoverPublicKey({ + hash, + signature + }) +``` + +[सार्वजनिक की मिळवा](https://viem.sh/docs/utilities/recoverPublicKey). [Noir `ecrecover`](https://github.com/colinnielsen/ecrecover-noir) फंक्शनसाठी हे आवश्यक आहे. + +```tsx + setSignature(signature) + setHash(hash) + setPubKey(pubKey) +``` + +स्टेट व्हेरिएबल्स सेट करा. हे केल्याने घटक पुन्हा काढला जातो (`sign` फंक्शन बाहेर पडल्यानंतर) आणि वापरकर्त्याला अपडेट केलेली मूल्ये दर्शवितो. + +```tsx + let proverToml = ` +``` + +`Prover.toml` साठी मजकूर. + +```tsx +message="${message}" + +pubKeyX=${hexToArray(pubKey.slice(4,4+2*32))} +pubKeyY=${hexToArray(pubKey.slice(4+2*32))} +``` + +Viem आम्हाला 65-बाइट हेक्साडेसिमल स्ट्रिंग म्हणून सार्वजनिक की प्रदान करते. पहिला बाइट `0x04` आहे, एक आवृत्ती मार्कर. यानंतर सार्वजनिक कीच्या `x` साठी 32 बाइट्स आणि नंतर सार्वजनिक कीच्या `y` साठी 32 बाइट्स येतात. + +तथापि, Noir ला ही माहिती दोन-बाइट ॲरे म्हणून मिळण्याची अपेक्षा आहे, एक `x` साठी आणि एक `y` साठी. शून्य-ज्ञान पुराव्याचा भाग म्हणून पार्स करण्यापेक्षा येथे क्लायंटवर पार्स करणे सोपे आहे. + +लक्षात घ्या की ही सर्वसाधारणपणे शून्य-ज्ञानामध्ये एक चांगली प्रथा आहे. शून्य-ज्ञान पुराव्याच्या आतील कोड महाग असतो, त्यामुळे शून्य-ज्ञान पुराव्याच्या बाहेर करता येणारे कोणतेही प्रोसेसिंग शून्य-ज्ञान पुराव्याच्या बाहेरच _केले पाहिजे_. + +```tsx +signature=${hexToArray(signature.slice(2,-2))} +``` + +स्वाक्षरी देखील 65-बाइट हेक्साडेसिमल स्ट्रिंग म्हणून प्रदान केली जाते. तथापि, शेवटचा बाइट फक्त सार्वजनिक की पुनर्प्राप्त करण्यासाठी आवश्यक आहे. सार्वजनिक की आधीच Noir कोडला प्रदान केली जाईल, त्यामुळे आम्हाला स्वाक्षरी सत्यापित करण्यासाठी त्याची आवश्यकता नाही आणि Noir कोडला त्याची आवश्यकता नाही. + +```tsx +${accounts.map(accountInProverToml).reduce((a,b) => a+b, "")} +` +``` + +खाते प्रदान करा. + +```tsx + setProverToml(proverToml) + } + + return ( + <> +

Transfer

+``` + +हे घटकाचे HTML (अधिक अचूकपणे, [JSX](https://react.dev/learn/writing-markup-with-jsx)) स्वरूप आहे. + +#### `server/noir/src/main.nr` {#server-noir-src-main-nr} + +[ही फाइल](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/src/main.nr) वास्तविक शून्य-ज्ञान कोड आहे. + +``` +use std::hash::pedersen_hash; +``` + +[पेडरसेन हॅश](https://rya-sge.github.io/access-denied/2024/05/07/pedersen-hash-function/) [Noir मानक लायब्ररी](https://noir-lang.org/docs/noir/standard_library/cryptographic_primitives/hashes#pedersen_hash) सह प्रदान केले आहे. शून्य-ज्ञान पुरावे सामान्यतः हे हॅश फंक्शन वापरतात. मानक हॅश फंक्शन्सच्या तुलनेत [अंकगणित सर्किट्स](https://rareskills.io/post/arithmetic-circuit) मध्ये गणना करणे खूप सोपे आहे. + +``` +use keccak256::keccak256; +use dep::ecrecover; +``` + +ही दोन फंक्शन्स बाह्य लायब्ररी आहेत, जी [`Nargo.toml`](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Nargo.toml) मध्ये परिभाषित आहेत. त्यांची नावे जशी आहेत तशीच त्यांची कार्ये आहेत, एक फंक्शन जे [keccak256 हॅश](https://emn178.github.io/online-tools/keccak_256.html) ची गणना करते आणि एक फंक्शन जे Ethereum स्वाक्षरी सत्यापित करते आणि स्वाक्षरीकर्त्याचा Ethereum ॲड्रेस पुनर्प्राप्त करते. + +``` +global ACCOUNT_NUMBER : u32 = 5; +``` + +Noir [Rust](https://www.rust-lang.org/) पासून प्रेरित आहे. व्हेरिएबल्स, डीफॉल्टनुसार, स्थिर असतात. अशाप्रकारे आम्ही जागतिक कॉन्फिगरेशन स्थिरांक परिभाषित करतो. विशेषतः, `ACCOUNT_NUMBER` ही आम्ही संग्रहित करत असलेल्या खात्यांची संख्या आहे. + +`u` नावाचे डेटा प्रकार त्या संख्येचे बिट्स, अनसाईन्ड आहेत. समर्थित प्रकार फक्त `u8`, `u16`, `u32`, `u64`, आणि `u128` आहेत. + +``` +global FLAT_ACCOUNT_FIELDS : u32 = 2; +``` + +हे व्हेरिएबल खात्यांच्या पेडरसेन हॅशसाठी वापरले जाते, जसे खाली स्पष्ट केले आहे. + +``` +global MESSAGE_LENGTH : u32 = 100; +``` + +वर स्पष्ट केल्याप्रमाणे, संदेशाची लांबी निश्चित आहे. ते येथे निर्दिष्ट केले आहे. + +``` +global ASCII_MESSAGE_LENGTH : [u8; 3] = [0x31, 0x30, 0x30]; +global HASH_BUFFER_SIZE : u32 = 26+3+MESSAGE_LENGTH; +``` + +[EIP-191 स्वाक्षऱ्यां](https://eips.ethereum.org/EIPS/eip-191)ना 26-बाइटच्या प्रिफिक्ससह बफर आवश्यक आहे, त्यानंतर ASCII मध्ये संदेशाची लांबी, आणि शेवटी संदेश स्वतः. + +``` +struct Account { + balance: u128, + address: Field, + nonce: u32, +} +``` + +आम्ही एका खात्याबद्दल जी माहिती संग्रहित करतो. [`Field`](https://noir-lang.org/docs/noir/concepts/data_types/fields) ही एक संख्या आहे, जी साधारणपणे 253 बिट्सपर्यंत असते, जी थेट [अंकगणित सर्किट](https://rareskills.io/post/arithmetic-circuit) मध्ये वापरली जाऊ शकते जे शून्य-ज्ञान पुरावा लागू करते. येथे आपण 160-बिट Ethereum ॲड्रेस संग्रहित करण्यासाठी `Field` वापरतो. + +``` +struct TransferTxn { + from: Field, + to: Field, + amount: u128, + nonce: u32 +} +``` + +हस्तांतरण व्यवहारासाठी आम्ही संग्रहित करत असलेली माहिती. + +``` +fn flatten_account(account: Account) -> [Field; FLAT_ACCOUNT_FIELDS] { +``` + +एक फंक्शनची व्याख्या. पॅरामीटर `Account` माहिती आहे. परिणाम `Field` व्हेरिएबल्सचा ॲरे आहे, ज्याची लांबी `FLAT_ACCOUNT_FIELDS` आहे. + +``` + let flat = [ + account.address, + ((account.balance << 32) + account.nonce.into()).into(), + ]; +``` + +ॲरेमधील पहिले मूल्य खाते ॲड्रेस आहे. दुसऱ्यामध्ये शिल्लक आणि नॉन्स दोन्ही समाविष्ट आहेत. `.into()` कॉल एका संख्येला तिच्या आवश्यक डेटा प्रकारात बदलतात. `account.nonce` हे `u32` मूल्य आहे, परंतु `account.balance « 32`, जे `u128` मूल्य आहे, त्यात जोडण्यासाठी ते `u128` असणे आवश्यक आहे. ते पहिले `.into()` आहे. दुसरे `u128` परिणामाला `Field` मध्ये रूपांतरित करते जेणेकरून ते ॲरेमध्ये बसेल. + +``` + flat +} +``` + +Noir मध्ये, फंक्शन्स फक्त शेवटी एक मूल्य परत करू शकतात (लवकर परतीचा पर्याय नाही). परतीचे मूल्य निर्दिष्ट करण्यासाठी, आपण ते फंक्शनच्या बंद कंसाच्या अगदी आधी मूल्यांकित करता. + +``` +fn flatten_accounts(accounts: [Account; ACCOUNT_NUMBER]) -> [Field; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER] { +``` + +हे फंक्शन खात्यांच्या ॲरेला `Field` ॲरेमध्ये बदलते, जे पीटरसन हॅशच्या इनपुट म्हणून वापरले जाऊ शकते. + +``` + let mut flat: [Field; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER] = [0; FLAT_ACCOUNT_FIELDS*ACCOUNT_NUMBER]; +``` + +अशाप्रकारे आपण एक म्युटेबल व्हेरिएबल निर्दिष्ट करतो, म्हणजे, _स्थिर नाही_. Noir मधील व्हेरिएबल्सचे मूल्य नेहमीच असणे आवश्यक आहे, म्हणून आम्ही या व्हेरिएबलला सर्व शून्यांनी सुरू करतो. + +``` + for i in 0..ACCOUNT_NUMBER { +``` + +हे एक `for` लूप आहे. लक्षात घ्या की सीमा स्थिर आहेत. Noir लूप्सच्या सीमा संकलनाच्या वेळी ज्ञात असणे आवश्यक आहे. याचे कारण म्हणजे अंकगणित सर्किट्स फ्लो कंट्रोलला समर्थन देत नाहीत. `for` लूपची प्रक्रिया करताना, कंपाइलर त्यातील कोडला अनेक वेळा ठेवतो, प्रत्येक पुनरावृत्तीसाठी एकदा. + +``` + let fields = flatten_account(accounts[i]); + for j in 0..FLAT_ACCOUNT_FIELDS { + flat[i*FLAT_ACCOUNT_FIELDS + j] = fields[j]; + } + } + + flat +} + +fn hash_accounts(accounts: [Account; ACCOUNT_NUMBER]) -> Field { + pedersen_hash(flatten_accounts(accounts)) +} +``` + +शेवटी, आम्ही खात्यांच्या ॲरेला हॅश करणाऱ्या फंक्शनवर पोहोचलो. + +``` +fn find_account(accounts: [Account; ACCOUNT_NUMBER], address: Field) -> u32 { + let mut account : u32 = ACCOUNT_NUMBER; + + for i in 0..ACCOUNT_NUMBER { + if accounts[i].address == address { + account = i; + } + } + +``` + +हे फंक्शन विशिष्ट ॲड्रेस असलेले खाते शोधते. हे फंक्शन मानक कोडमध्ये अत्यंत अकार्यक्षम असेल कारण ते ॲड्रेस सापडल्यानंतरही सर्व खात्यांवर पुनरावृत्ती करते. + +तथापि, शून्य-ज्ञान पुराव्यांमध्ये कोणतेही प्रवाह नियंत्रण नसते. जर आपल्याला एखादी अट तपासायची असेल, तर ती प्रत्येक वेळी तपासावी लागेल. + +`if` विधानांसोबतही असेच काहीसे घडते. वरील लूपमधील `if` विधानाचे या गणितीय विधानांमध्ये भाषांतर केले जाते. + +_conditionresult = accounts[i].address == address_ // समान असल्यास एक, अन्यथा शून्य + +_accountnew = conditionresult\*i + (1-conditionresult)\*accountold_ + +```rust + assert (account < ACCOUNT_NUMBER, f"{address} does not have an account"); + + account +} +``` + +[`assert`](https://noir-lang.org/docs/dev/noir/concepts/assert) फंक्शनमुळे दावा खोटा असल्यास शून्य-ज्ञान पुरावा क्रॅश होतो. या प्रकरणात, जर आपल्याला संबंधित ॲड्रेस असलेले खाते सापडले नाही तर. ॲड्रेसची तक्रार करण्यासाठी, आम्ही [फॉर्मॅट स्ट्रिंग](https://noir-lang.org/docs/noir/concepts/data_types/strings#format-strings) वापरतो. + +```rust +fn apply_transfer_txn(accounts: [Account; ACCOUNT_NUMBER], txn: TransferTxn) -> [Account; ACCOUNT_NUMBER] { +``` + +हे फंक्शन हस्तांतरण व्यवहार लागू करते आणि नवीन खात्यांचा ॲरे परत करते. + +```rust + let from = find_account(accounts, txn.from); + let to = find_account(accounts, txn.to); + + let (txnFrom, txnAmount, txnNonce, accountNonce) = + (txn.from, txn.amount, txn.nonce, accounts[from].nonce); +``` + +आम्ही Noir मध्ये स्वरूप स्ट्रिंगमध्ये संरचना घटकांमध्ये प्रवेश करू शकत नाही, म्हणून आम्ही एक वापरण्यायोग्य प्रत तयार करतो. + +```rust + assert (accounts[from].balance >= txn.amount, + f"{txnFrom} does not have {txnAmount} finney"); + + assert (accounts[from].nonce == txn.nonce, + f"Transaction has nonce {txnNonce}, but the account is expected to use {accountNonce}"); +``` + +या दोन अटी आहेत ज्या व्यवहार अवैध करू शकतात. + +```rust + let mut newAccounts = accounts; + + newAccounts[from].balance -= txn.amount; + newAccounts[from].nonce += 1; + newAccounts[to].balance += txn.amount; + + newAccounts +} +``` + +नवीन खात्यांचा ॲरे तयार करा आणि नंतर तो परत करा. + +```rust +fn readAddress(messageBytes: [u8; MESSAGE_LENGTH]) -> Field +``` + +हे फंक्शन संदेशातून ॲड्रेस वाचते. + +```rust +{ + let mut result : Field = 0; + + for i in 7..47 { +``` + +ॲड्रेस नेहमी 20 बाइट्स (उर्फ 40 हेक्साडेसिमल अंक) लांब असतो आणि वर्ण #7 पासून सुरू होतो. + +```rust + result *= 0x10; + if messageBytes[i] >= 48 & messageBytes[i] <= 57 { // 0-9 + result += (messageBytes[i]-48).into(); + } + if messageBytes[i] >= 65 & messageBytes[i] <= 70 { // A-F + result += (messageBytes[i]-65+10).into() + } + if messageBytes[i] >= 97 & messageBytes[i] <= 102 { // a-f + result += (messageBytes[i]-97+10).into() + } + } + + result +} + +fn readAmountAndNonce(messageBytes: [u8; MESSAGE_LENGTH]) -> (u128, u32) +``` + +संदेशातून रक्कम आणि नॉन्स वाचा. + +```rust +{ + let mut amount : u128 = 0; + let mut nonce: u32 = 0; + let mut stillReadingAmount: bool = true; + let mut lookingForNonce: bool = false; + let mut stillReadingNonce: bool = false; +``` + +संदेशात, ॲड्रेस नंतरची पहिली संख्या फिनीची रक्कम आहे (उर्फ हस्तांतरण करण्यासाठी ETH चा हजारावा भाग). दुसरी संख्या नॉन्स आहे. त्यांच्यामधील कोणत्याही मजकूराकडे दुर्लक्ष केले जाते. + +```rust + for i in 48..MESSAGE_LENGTH { + if messageBytes[i] >= 48 & messageBytes[i] <= 57 { // 0-9 + let digit = (messageBytes[i]-48); + + if stillReadingAmount { + amount = amount*10 + digit.into(); + } + + if lookingForNonce { // We just found it + stillReadingNonce = true; + lookingForNonce = false; + } + + if stillReadingNonce { + nonce = nonce*10 + digit.into(); + } + } else { + if stillReadingAmount { + stillReadingAmount = false; + lookingForNonce = true; + } + if stillReadingNonce { + stillReadingNonce = false; + } + } + } + + (amount, nonce) +} +``` + +[ट्यूपल](https://noir-lang.org/docs/noir/concepts/data_types/tuples) परत करणे हा Noir मध्ये फंक्शनमधून अनेक मूल्ये परत करण्याचा मार्ग आहे. + +```rust +fn readTransferTxn(message: str) -> TransferTxn +{ + let mut txn: TransferTxn = TransferTxn { from: 0, to: 0, amount:0, nonce:0 }; + let messageBytes = message.as_bytes(); + + txn.to = readAddress(messageBytes); + let (amount, nonce) = readAmountAndNonce(messageBytes); + txn.amount = amount; + txn.nonce = nonce; + + txn +} +``` + +हे फंक्शन संदेशाला बाइट्समध्ये रूपांतरित करते, नंतर रकमांना `TransferTxn` मध्ये रूपांतरित करते. + +```rust +// Viem च्या hashMessage च्या समतुल्य +// https://viem.sh/docs/utilities/hashMessage#hashmessage +fn hashMessage(message: str) -> [u8;32] { +``` + +आम्ही खात्यांसाठी पेडरसेन हॅश वापरू शकलो कारण ते फक्त शून्य-ज्ञान पुराव्याच्या आत हॅश केले जातात. तथापि, या कोडमध्ये आपल्याला संदेशाची स्वाक्षरी तपासावी लागेल, जी ब्राउझरद्वारे तयार केली जाते. त्यासाठी, आम्हाला [EIP 191](https://eips.ethereum.org/EIPS/eip-191) मधील Ethereum स्वाक्षरी स्वरूपाचे पालन करणे आवश्यक आहे. याचा अर्थ असा की आम्हाला एका मानक प्रिफिक्ससह एक संयुक्त बफर तयार करणे आवश्यक आहे, ASCII मध्ये संदेशाची लांबी, आणि संदेश स्वतः, आणि ते हॅश करण्यासाठी Ethereum मानक keccak256 वापरणे. + +```rust + // ASCII प्रिफिक्स + let prefix_bytes = [ + 0x19, // \x19 + 0x45, // 'E' + 0x74, // 't' + 0x68, // 'h' + 0x65, // 'e' + 0x72, // 'r' + 0x65, // 'e' + 0x75, // 'u' + 0x6D, // 'm' + 0x20, // ' ' + 0x53, // 'S' + 0x69, // 'i' + 0x67, // 'g' + 0x6E, // 'n' + 0x65, // 'e' + 0x64, // 'd' + 0x20, // ' ' + 0x4D, // 'M' + 0x65, // 'e' + 0x73, // 's' + 0x73, // 's' + 0x61, // 'a' + 0x67, // 'g' + 0x65, // 'e' + 0x3A, // ':' + 0x0A // '\n' + ]; +``` + +जेव्हा एखादे ॲप्लिकेशन वापरकर्त्याला असा संदेश स्वाक्षरी करण्यास सांगते जो व्यवहार म्हणून किंवा इतर कोणत्याही हेतूसाठी वापरला जाऊ शकतो अशा प्रकरणांना टाळण्यासाठी, EIP 191 निर्दिष्ट करते की सर्व स्वाक्षरी केलेले संदेश वर्ण 0x19 (वैध ASCII वर्ण नाही) ने सुरू होतात, त्यानंतर `Ethereum Signed Message:` आणि एक नवीन ओळ येते. + +```rust + let mut buffer: [u8; HASH_BUFFER_SIZE] = [0u8; HASH_BUFFER_SIZE]; + for i in 0..26 { + buffer[i] = prefix_bytes[i]; + } + + let messageBytes : [u8; MESSAGE_LENGTH] = message.as_bytes(); + + if MESSAGE_LENGTH <= 9 { + for i in 0..1 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+1] = messageBytes[i]; + } + } + + if MESSAGE_LENGTH >= 10 & MESSAGE_LENGTH <= 99 { + for i in 0..2 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+2] = messageBytes[i]; + } + } + + if MESSAGE_LENGTH >= 100 { + for i in 0..3 { + buffer[i+26] = ASCII_MESSAGE_LENGTH[i]; + } + + for i in 0..MESSAGE_LENGTH { + buffer[i+26+3] = messageBytes[i]; + } + } + + assert(MESSAGE_LENGTH < 1000, "Messages whose length is over three digits are not supported"); +``` + +संदेश लांबी 999 पर्यंत हाताळा आणि जर ती जास्त असेल तर अयशस्वी व्हा. मी हा कोड जोडला आहे, जरी संदेशाची लांबी स्थिर असली तरी, कारण तो बदलणे सोपे करते. उत्पादन प्रणालीवर, तुम्ही कदाचित चांगल्या कामगिरीसाठी `MESSAGE_LENGTH` बदलत नाही असे गृहीत धराल. + +```rust + keccak256::keccak256(buffer, HASH_BUFFER_SIZE) +} +``` + +Ethereum मानक `keccak256` फंक्शन वापरा. + +```rust +fn signatureToAddressAndHash( + message: str, + pubKeyX: [u8; 32], + pubKeyY: [u8; 32], + signature: [u8; 64] + ) -> (Field, Field, Field) // ॲड्रेस, हॅशचे पहिले 16 बाइट्स, हॅशचे शेवटचे 16 बाइट्स +{ +``` + +हे फंक्शन स्वाक्षरी सत्यापित करते, ज्यासाठी संदेश हॅश आवश्यक आहे. नंतर ते आपल्याला स्वाक्षरी केलेला ॲड्रेस आणि संदेश हॅश प्रदान करते. संदेश हॅश दोन `Field` मूल्यांमध्ये पुरवला जातो कारण बाइट ॲरेपेक्षा कार्यक्रमाच्या उर्वरित भागात वापरणे सोपे आहे. + +आम्हाला दोन `Field` मूल्ये वापरण्याची आवश्यकता आहे कारण फील्डची गणना मोठ्या संख्येने [मॉड्युलो](https://en.wikipedia.org/wiki/Modulo) केली जाते, परंतु ती संख्या सामान्यतः 256 बिटपेक्षा कमी असते (अन्यथा EVM मध्ये ती गणना करणे कठीण होईल). + +```rust + let hash = hashMessage(message); + + let mut (hash1, hash2) = (0,0); + + for i in 0..16 { + hash1 = hash1*256 + hash[31-i].into(); + hash2 = hash2*256 + hash[15-i].into(); + } +``` + +`hash1` आणि `hash2` ला बदलण्यायोग्य व्हेरिएबल्स म्हणून निर्दिष्ट करा आणि त्यांच्यामध्ये हॅश बाइट बाय बाइट लिहा. + +```rust + ( + ecrecover::ecrecover(pubKeyX, pubKeyY, signature, hash), +``` + +हे [Solidity च्या `ecrecover`](https://docs.soliditylang.org/en/v0.8.30/cheatsheet.html#mathematical-and-cryptographic-functions) सारखेच आहे, पण त्यात दोन महत्त्वाचे फरक आहेत: + +- जर स्वाक्षरी वैध नसेल, तर कॉल `assert` अयशस्वी करतो आणि प्रोग्राम रद्द केला जातो. +- जरी स्वाक्षरी आणि हॅशमधून सार्वजनिक की पुनर्प्राप्त केली जाऊ शकते, तरीही ही प्रक्रिया बाह्यरित्या केली जाऊ शकते आणि म्हणूनच, शून्य-ज्ञान पुराव्याच्या आत करणे योग्य नाही. जर कोणी येथे आम्हाला फसवण्याचा प्रयत्न केला, तर स्वाक्षरी पडताळणी अयशस्वी होईल. + +```rust + hash1, + hash2 + ) +} + +fn main( + accounts: [Account; ACCOUNT_NUMBER], + message: str, + pubKeyX: [u8; 32], + pubKeyY: [u8; 32], + signature: [u8; 64], + ) -> pub ( + Field, // जुन्या खात्यांच्या ॲरेचा हॅश + Field, // नवीन खात्यांच्या ॲरेचा हॅश + Field, // संदेश हॅशचे पहिले 16 बाइट्स + Field, // संदेश हॅशचे शेवटचे 16 बाइट्स + ) +``` + +शेवटी, आपण `main` फंक्शनवर पोहोचतो. आम्हाला हे सिद्ध करावे लागेल की आमच्याकडे असा व्यवहार आहे जो खात्यांच्या हॅशला जुन्या मूल्यातून नवीन मूल्यात वैधपणे बदलतो. आम्हाला हे देखील सिद्ध करावे लागेल की त्याचा हा विशिष्ट व्यवहार हॅश आहे जेणेकरून पाठवणाऱ्याला कळेल की त्यांच्या व्यवहारावर प्रक्रिया झाली आहे. + +```rust +{ + let mut txn = readTransferTxn(message); +``` + +आम्हाला `txn` बदलण्यायोग्य असणे आवश्यक आहे कारण आम्ही संदेशातून ॲड्रेस वाचत नाही, आम्ही ते स्वाक्षरीतून वाचतो. + +```rust + let (fromAddress, txnHash1, txnHash2) = signatureToAddressAndHash( + message, + pubKeyX, + pubKeyY, + signature); + + txn.from = fromAddress; + + let newAccounts = apply_transfer_txn(accounts, txn); + + ( + hash_accounts(accounts), + hash_accounts(newAccounts), + txnHash1, + txnHash2 + ) +} +``` + +### टप्पा 2 - एक सर्व्हर जोडणे {#stage-2} + +दुसऱ्या टप्प्यात, आम्ही एक सर्व्हर जोडतो जो ब्राउझरकडून हस्तांतरण व्यवहार प्राप्त करतो आणि अंमलात आणतो. + +ते कृतीत पाहण्यासाठी: + +1. Vite चालू असल्यास थांबवा. + +2. सर्व्हर समाविष्ट असलेली शाखा डाउनलोड करा आणि तुमच्याकडे सर्व आवश्यक मॉड्यूल्स असल्याची खात्री करा. + + ```sh + git checkout 02-add-server + cd client + npm install + cd ../server + npm install + ``` + + Noir कोड संकलित करण्याची गरज नाही, तो तुम्ही टप्पा 1 साठी वापरलेल्या कोडसारखाच आहे. + +3. सर्व्हर सुरू करा. + + ```sh + npm run start + ``` + +4. एका वेगळ्या कमांड-लाइन विंडोमध्ये, ब्राउझर कोड सर्व्ह करण्यासाठी Vite चालवा. + + ```sh + cd client + npm run dev + ``` + +5. [http://localhost:5173](http://localhost:5173) वर क्लायंट कोडवर ब्राउझ करा + +6. तुम्ही व्यवहार जारी करण्यापूर्वी, तुम्हाला नॉन्स, तसेच तुम्ही पाठवू शकणारी रक्कम माहित असणे आवश्यक आहे. ही माहिती मिळवण्यासाठी, **खाते डेटा अपडेट करा** वर क्लिक करा आणि संदेशावर स्वाक्षरी करा. + + येथे आपल्यासमोर एक द्विधा मनःस्थिती आहे. एकीकडे, आम्ही असा संदेश स्वाक्षरी करू इच्छित नाही जो पुन्हा वापरला जाऊ शकतो ([रिप्ले अटॅक](https://en.wikipedia.org/wiki/Replay_attack)), म्हणूनच आम्हाला प्रथम नॉन्स हवा आहे. तथापि, आमच्याकडे अद्याप नॉन्स नाही. यावरील उपाय म्हणजे असा नॉन्स निवडणे जो एकदाच वापरला जाऊ शकतो आणि जो आपल्याकडे दोन्ही बाजूंनी आधीच आहे, जसे की सध्याची वेळ. + + या उपायामधील समस्या ही आहे की वेळ कदाचित पूर्णपणे समक्रमित नसेल. त्याऐवजी, आम्ही दर मिनिटाला बदलणाऱ्या मूल्यावर स्वाक्षरी करतो. याचा अर्थ असा की रिप्ले हल्ल्यांना आपली असुरक्षिततेची खिडकी जास्तीत जास्त एक मिनिटाची आहे. उत्पादनामध्ये स्वाक्षरी केलेली विनंती TLS द्वारे संरक्षित केली जाईल, आणि बोगद्याच्या दुसऱ्या बाजूला---सर्व्हर---आधीच शिल्लक आणि नॉन्स उघड करू शकतो (त्याला काम करण्यासाठी ते माहित असणे आवश्यक आहे) हे लक्षात घेता, हा एक स्वीकार्य धोका आहे. + +7. एकदा ब्राउझरला शिल्लक आणि नॉन्स परत मिळाल्यावर, ते हस्तांतरण फॉर्म दर्शवते. गंतव्य ॲड्रेस आणि रक्कम निवडा आणि **हस्तांतरण करा** वर क्लिक करा. या विनंतीवर स्वाक्षरी करा. + +8. हस्तांतरण पाहण्यासाठी, एकतर **खाते डेटा अपडेट करा** किंवा तुम्ही सर्व्हर चालवत असलेल्या विंडोमध्ये पहा. सर्व्हर प्रत्येक वेळी बदलल्यावर स्थिती लॉग करतो. + + ``` + ori@CryptoDocGuy:~/x/250911-zk-bank/server$ npm run start + + > server@1.0.0 start + > node --experimental-json-modules index.mjs + + Listening on port 3000 + Txn send 0x90F79bf6EB2c4f870365E785982E1f101E93b906 36000 finney (milliEth) 0 processed + New state: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 has 64000 (1) + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 has 100000 (0) + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC has 100000 (0) + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 has 136000 (0) + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 has 100000 (0) + Txn send 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 7200 finney (milliEth) 1 processed + New state: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 has 56800 (2) + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 has 107200 (0) + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC has 100000 (0) + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 has 136000 (0) + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 has 100000 (0) + Txn send 0x90F79bf6EB2c4f870365E785982E1f101E93b906 3000 finney (milliEth) 2 processed + New state: + 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 has 53800 (3) + 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 has 107200 (0) + 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC has 100000 (0) + 0x90F79bf6EB2c4f870365E785982E1f101E93b906 has 139000 (0) + 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 has 100000 (0) + ``` + +#### `server/index.mjs` {#server-index-mjs-1} + +[ही फाइल](https://github.com/qbzzt/250911-zk-bank/blob/02-add-server/server/index.mjs) मध्ये सर्व्हर प्रक्रिया आहे, आणि ती [`main.nr`](https://github.com/qbzzt/250911-zk-bank/blob/02-add-server/server/noir/src/main.nr) येथील Noir कोडसह संवाद साधते. येथे मनोरंजक भागांचे स्पष्टीकरण आहे. + +```js +import { Noir } from '@noir-lang/noir_js' +``` + +[noir.js](https://www.npmjs.com/package/@noir-lang/noir_js) लायब्ररी JavaScript कोड आणि Noir कोड दरम्यान संवाद साधते. + +```js +const circuit = JSON.parse(await fs.readFile("./noir/target/zkBank.json")) +const noir = new Noir(circuit) +``` + +अंकगणित सर्किट लोड करा---मागील टप्प्यात आपण तयार केलेला संकलित Noir प्रोग्राम---आणि ते कार्यान्वित करण्याची तयारी करा. + +```js +// आम्ही फक्त स्वाक्षरी केलेल्या विनंतीच्या बदल्यात खाते माहिती प्रदान करतो +const accountInformation = async signature => { + const fromAddress = await recoverAddress({ + hash: hashMessage("Get account data " + Math.floor((new Date().getTime())/60000)), + signature + }) +``` + +खाते माहिती प्रदान करण्यासाठी, आम्हाला फक्त स्वाक्षरीची आवश्यकता आहे. कारण संदेश काय असणार आहे हे आम्हाला आधीच माहित आहे, आणि म्हणून संदेश हॅश देखील. + +```js +const processMessage = async (message, signature) => { +``` + +एका संदेशावर प्रक्रिया करा आणि त्यात एन्कोड केलेला व्यवहार कार्यान्वित करा. + +```js + // Get the public key + const pubKey = await recoverPublicKey({ + hash, + signature + }) +``` + +आता आम्ही सर्व्हरवर JavaScript चालवत असल्याने, आम्ही सार्वजनिक की क्लायंटऐवजी तेथे पुनर्प्राप्त करू शकतो. + +```js + let noirResult + try { + noirResult = await noir.execute({ + message, + signature: signature.slice(2,-2).match(/.{2}/g).map(x => `0x${x}`), + pubKeyX, + pubKeyY, + accounts: Accounts + }) +``` + +`noir.execute` Noir प्रोग्राम चालवते. पॅरामीटर्स [`Prover.toml`](https://github.com/qbzzt/250911-zk-bank/blob/01-manual-zk/server/noir/Prover.toml) मध्ये प्रदान केलेल्या पॅरामीटर्सच्या समतुल्य आहेत. लक्षात घ्या की लांब मूल्ये हेक्साडेसिमल स्ट्रिंगच्या ॲरे म्हणून (`["0x60", "0xA7"]`) प्रदान केली जातात, एकल हेक्साडेसिमल मूल्य (`0x60A7`) म्हणून नाही, जसे Viem करते. + +```js + } catch (err) { + console.log(`Noir error: ${err}`) + throw Error("Invalid transaction, not processed") + } +``` + +जर काही त्रुटी असेल, तर ती पकडा आणि नंतर क्लायंटला एक सरलीकृत आवृत्ती रिले करा. + +```js + Accounts[fromAccountNumber].nonce++ + Accounts[fromAccountNumber].balance -= amount + Accounts[toAccountNumber].balance += amount +``` + +व्यवहार लागू करा. आम्ही ते Noir कोडमध्ये आधीच केले आहे, परंतु तेथून परिणाम काढण्याऐवजी येथे पुन्हा करणे सोपे आहे. + +```js +let Accounts = [ + { + address: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", + balance: 5000, + nonce: 0, + }, +``` + +प्रारंभिक `Accounts` रचना. + +### टप्पा 3 - Ethereum स्मार्ट कॉन्ट्रॅक्ट्स {#stage-3} + +1. सर्व्हर आणि क्लायंट प्रक्रिया थांबवा. + +2. स्मार्ट कॉन्ट्रॅक्ट्स असलेली शाखा डाउनलोड करा आणि तुमच्याकडे सर्व आवश्यक मॉड्यूल्स असल्याची खात्री करा. + + ```sh + git checkout 03-smart-contracts + cd client + npm install + cd ../server + npm install + ``` + +3. एका वेगळ्या कमांड-लाइन विंडोमध्ये `anvil` चालवा. + +4. पडताळणी की आणि सॉलिडिटी व्हेरिफायर तयार करा, नंतर व्हेरिफायर कोड सॉलिडिटी प्रोजेक्टमध्ये कॉपी करा. + + ```sh + cd noir + bb write_vk -b ./target/zkBank.json -o ./target --oracle_hash keccak + bb write_solidity_verifier -k ./target/vk -o ./target/Verifier.sol + cp target/Verifier.sol ../../smart-contracts/src + ``` + +5. स्मार्ट कॉन्ट्रॅक्ट्सवर जा आणि `anvil` ब्लॉकचेन वापरण्यासाठी पर्यावरण व्हेरिएबल्स सेट करा. + + ```sh + cd ../../smart-contracts + export ETH_RPC_URL=http://localhost:8545 + ETH_PRIVATE_KEY=ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 + ``` + +6. `Verifier.sol` तैनात करा आणि ॲड्रेस एका पर्यावरण व्हेरिएबलमध्ये संग्रहित करा. + + ```sh + VERIFIER_ADDRESS=`forge create src/Verifier.sol:HonkVerifier --private-key $ETH_PRIVATE_KEY --optimize --broadcast | awk '/Deployed to:/ {print $3}'` + echo $VERIFIER_ADDRESS + ``` + +7. `ZkBank` कॉन्ट्रॅक्ट तैनात करा. + + ```sh + ZKBANK_ADDRESS=`forge create ZkBank --private-key $ETH_PRIVATE_KEY --broadcast --constructor-args $VERIFIER_ADDRESS 0x199aa62af8c1d562a6ec96e66347bf3240ab2afb5d022c895e6bf6a5e617167b | awk '/Deployed to:/ {print $3}'` + echo $ZKBANK_ADDRESS + ``` + + `0x199..67b` मूल्य `Accounts` च्या प्रारंभिक स्थितीचा पेडरसन हॅश आहे. जर तुम्ही `server/index.mjs` मध्ये ही प्रारंभिक स्थिती बदलली, तर तुम्ही शून्य-ज्ञान पुराव्याद्वारे नोंदवलेला प्रारंभिक हॅश पाहण्यासाठी व्यवहार चालवू शकता. + +8. सर्व्हर चालवा. + + ```sh + cd ../server + npm run start + ``` + +9. एका वेगळ्या कमांड-लाइन विंडोमध्ये क्लायंट चालवा. + + ```sh + cd client + npm run dev + ``` + +10. काही व्यवहार चालवा. + +11. स्थिती ऑनचेन बदलली आहे हे सत्यापित करण्यासाठी, सर्व्हर प्रक्रिया पुन्हा सुरू करा. पहा की `ZkBank` आता व्यवहार स्वीकारत नाही, कारण व्यवहारांमधील मूळ हॅश मूल्य ऑनचेन संग्रहित हॅश मूल्यापेक्षा वेगळे आहे. + + ही अपेक्षित प्रकारची त्रुटी आहे. + + ``` + ori@CryptoDocGuy:~/x/250911-zk-bank/server$ npm run start + + > server@1.0.0 start + > node --experimental-json-modules index.mjs + + Listening on port 3000 + Verification error: ContractFunctionExecutionError: The contract function "processTransaction" reverted with the following reason: + Wrong old state hash + + Contract Call: + address: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 + function: processTransaction(bytes _proof, bytes32[] _publicInputs) + args: (0x0000000000000000000000000000000000000000000000042ab5d6d1986846cf00000000000000000000000000000000000000000000000b75c020998797da7800000000000000000000000000000000000000000000000 + ``` + +#### `server/index.mjs` {#server-index-mjs-2} + +या फाइलमधील बदल बहुतेक करून वास्तविक पुरावा तयार करणे आणि तो ऑनचेन सबमिट करणे यासंबंधी आहेत. + +```js +import { exec } from 'child_process' +import util from 'util' + +const execPromise = util.promisify(exec) +``` + +ऑनचेन पाठवण्यासाठी वास्तविक पुरावा तयार करण्यासाठी आम्हाला [बॅरेटेंबर्ग पॅकेज](https://github.com/AztecProtocol/aztec-packages/tree/next/barretenberg) वापरण्याची आवश्यकता आहे. आम्ही हे पॅकेज कमांड-लाइन इंटरफेस (`bb`) चालवून किंवा [JavaScript लायब्ररी, `bb.js`](https://www.npmjs.com/package/@aztec/bb.js) वापरून वापरू शकतो. JavaScript लायब्ररी मूळ कोड चालवण्यापेक्षा खूपच मंद आहे, म्हणून आम्ही कमांड-लाइन वापरण्यासाठी येथे [`exec`](https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback) वापरतो. + +लक्षात घ्या की जर तुम्ही `bb.js` वापरण्याचा निर्णय घेतला, तर तुम्हाला Noir च्या आवृत्तीशी सुसंगत असलेली आवृत्ती वापरणे आवश्यक आहे. लेखनाच्या वेळी, सध्याची Noir आवृत्ती (1.0.0-beta.11) `bb.js` आवृत्ती 0.87 वापरते. + +```js +const zkBankAddress = process.env.ZKBANK_ADDRESS || "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512" +``` + +येथील ॲड्रेस तो आहे जो तुम्हाला स्वच्छ `anvil` सह सुरुवात केल्यावर आणि वरील निर्देशांचे पालन केल्यावर मिळतो. + +```js +const walletClient = createWalletClient({ + chain: anvil, + transport: http(), + account: privateKeyToAccount("0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6") +}) +``` + +ही खाजगी की `anvil` मधील डीफॉल्ट पूर्व-अनुदानित खात्यांपैकी एक आहे. + +```js +const generateProof = async (witness, fileID) => { +``` + +`bb` एक्झिक्युटेबल वापरून पुरावा तयार करा. + +```js + const fname = `witness-${fileID}.gz` + await fs.writeFile(fname, witness) +``` + +साक्षीदार एका फाईलमध्ये लिहा. + +```js + await execPromise(`bb prove -b ./noir/target/zkBank.json -w ${fname} -o ${fileID} --oracle_hash keccak --output_format fields`) +``` + +प्रत्यक्षात पुरावा तयार करा. या पायरीमुळे सार्वजनिक व्हेरिएबल्ससह एक फाईल देखील तयार होते, परंतु आम्हाला त्याची आवश्यकता नाही. आम्हाला ते व्हेरिएबल्स `noir.execute` मधून आधीच मिळाले आहेत. + +```js + const proof = "0x" + JSON.parse(await fs.readFile(`./${fileID}/proof_fields.json`)).reduce((a,b) => a+b, "").replace(/0x/g, "") +``` + +पुरावा हा `Field` मूल्यांचा एक JSON ॲरे आहे, प्रत्येक हेक्साडेसिमल मूल्य म्हणून दर्शविला जातो. तथापि, आम्हाला ते व्यवहारात एकल `bytes` मूल्य म्हणून पाठवणे आवश्यक आहे, जे Viem मोठ्या हेक्साडेसिमल स्ट्रिंगद्वारे दर्शवते. येथे आम्ही सर्व मूल्यांना एकत्र जोडून, सर्व `0x` काढून टाकून, आणि शेवटी एक जोडून स्वरूप बदलतो. + +```js + await execPromise(`rm -r ${fname} ${fileID}`) + + return proof +} +``` + +स्वच्छता करा आणि पुरावा परत करा. + +```js +const processMessage = async (message, signature) => { + . + . + . + + const publicFields = noirResult.returnValue.map(x=>'0x' + x.slice(2).padStart(64, "0")) +``` + +सार्वजनिक फील्ड 32-बाइट मूल्यांचा ॲरे असणे आवश्यक आहे. तथापि, आम्हाला व्यवहार हॅश दोन `Field` मूल्यांमध्ये विभागण्याची आवश्यकता असल्याने, ते 16-बाइट मूल्य म्हणून दिसते. येथे आम्ही शून्य जोडतो जेणेकरून Viem ला समजेल की ते प्रत्यक्षात 32 बाइट्स आहे. + +```js + const proof = await generateProof(noirResult.witness, `${fromAddress}-${nonce}`) +``` + +प्रत्येक ॲड्रेस प्रत्येक नॉन्स एकदाच वापरतो जेणेकरून आपण साक्षीदार फाईल आणि आउटपुट डिरेक्टरीसाठी एक अद्वितीय ओळखकर्ता म्हणून `fromAddress` आणि `nonce` यांचे संयोजन वापरू शकू. + +```js + try { + await zkBank.write.processTransaction([ + proof, publicFields]) + } catch (err) { + console.log(`Verification error: ${err}`) + throw Error("Can't verify the transaction onchain") + } + . + . + . +} +``` + +व्यवहार चेनवर पाठवा. + +#### `smart-contracts/src/ZkBank.sol` {#smart-contracts-src-zkbank-sol} + +हा ऑनचेन कोड आहे जो व्यवहार प्राप्त करतो. + +```solidity +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.21; + +import {HonkVerifier} from "./Verifier.sol"; + +contract ZkBank { + HonkVerifier immutable myVerifier; + bytes32 currentStateHash; + + constructor(address _verifierAddress, bytes32 _initialStateHash) { + currentStateHash = _initialStateHash; + myVerifier = HonkVerifier(_verifierAddress); + } +``` + +ऑनचेन कोडला दोन व्हेरिएबल्सचा मागोवा ठेवण्याची आवश्यकता आहे: व्हेरिफायर (`nargo` द्वारे तयार केलेला एक वेगळा कॉन्ट्रॅक्ट) आणि वर्तमान स्टेट हॅश. + +```solidity + event TransactionProcessed( + bytes32 indexed transactionHash, + bytes32 oldStateHash, + bytes32 newStateHash + ); +``` + +प्रत्येक वेळी स्थिती बदलल्यावर, आम्ही `TransactionProcessed` इव्हेंट प्रसारित करतो. + +```solidity + function processTransaction( + bytes calldata _proof, + bytes32[] calldata _publicFields + ) public { +``` + +हे फंक्शन व्यवहारांवर प्रक्रिया करते. हे पुरावा (`bytes` म्हणून) आणि सार्वजनिक इनपुट (`bytes32` ॲरे म्हणून) व्हेरिफायरला आवश्यक असलेल्या स्वरूपात मिळवते (ऑनचेन प्रक्रिया आणि त्यामुळे गॅस खर्च कमी करण्यासाठी). + +```solidity + require(_publicInputs[0] == currentStateHash, + "Wrong old state hash"); +``` + +शून्य-ज्ञान पुरावा असा असावा की व्यवहार आमच्या वर्तमान हॅशमधून नवीन हॅशमध्ये बदलतो. + +```solidity + myVerifier.verify(_proof, _publicFields); +``` + +शून्य-ज्ञान पुरावा सत्यापित करण्यासाठी व्हेरिफायर कॉन्ट्रॅक्टला कॉल करा. ही पायरी शून्य-ज्ञान पुरावा चुकीचा असल्यास व्यवहार उलटवते. + +```solidity + currentStateHash = _publicFields[1]; + + emit TransactionProcessed( + _publicFields[2]<<128 | _publicFields[3], + _publicFields[0], + _publicFields[1] + ); + } +} +``` + +जर सर्वकाही ठीक झाले, तर स्टेट हॅशला नवीन मूल्यावर अपडेट करा आणि `TransactionProcessed` इव्हेंट प्रसारित करा. + +## केंद्रीकृत घटकाद्वारे होणारे गैरवापर {#abuses} + +माहिती सुरक्षेमध्ये तीन गुणधर्म आहेत: + +- _गोपनीयता_, वापरकर्ते ज्या माहितीला वाचण्यासाठी अधिकृत नाहीत ती वाचू शकत नाहीत. +- _अखंडता_, अधिकृत वापरकर्त्यांद्वारे अधिकृत पद्धतीनेच माहिती बदलली जाऊ शकते. +- _उपलब्धता_, अधिकृत वापरकर्ते प्रणाली वापरू शकतात. + +या प्रणालीवर, अखंडता शून्य-ज्ञान पुराव्यांद्वारे प्रदान केली जाते. उपलब्धतेची हमी देणे खूपच कठीण आहे, आणि गोपनीयता अशक्य आहे, कारण बँकेला प्रत्येक खात्याची शिल्लक आणि सर्व व्यवहार माहित असणे आवश्यक आहे. माहिती असलेल्या घटकाला ती माहिती शेअर करण्यापासून रोखण्याचा कोणताही मार्ग नाही. + +[स्टेल्थ ॲड्रेस](https://vitalik.eth.limo/general/2023/01/20/stealth.html) वापरून खऱ्या अर्थाने गोपनीय बँक तयार करणे शक्य आहे, परंतु ते या लेखाच्या व्याप्तीबाहेर आहे. + +### खोटी माहिती {#false-info} + +सर्व्हर ज्या प्रकारे अखंडतेचे उल्लंघन करू शकतो त्यापैकी एक म्हणजे [डेटाची विनंती केल्यावर](https://github.com/qbzzt/250911-zk-bank/blob/03-smart-contracts/server/index.mjs#L278-L291) खोटी माहिती प्रदान करणे. + +यावर उपाय म्हणून, आपण एक दुसरा Noir प्रोग्राम लिहू शकतो जो खात्यांना खाजगी इनपुट म्हणून आणि माहितीसाठी विनंती केलेल्या ॲड्रेसला सार्वजनिक इनपुट म्हणून प्राप्त करतो. आउटपुट त्या ॲड्रेसची शिल्लक आणि नॉन्स, आणि खात्यांचा हॅश आहे. + +अर्थात, हा पुरावा ऑनचेन सत्यापित केला जाऊ शकत नाही, कारण आम्हाला ऑनचेन नॉन्स आणि शिल्लक पोस्ट करायची नाही. तथापि, तो ब्राउझरमध्ये चालणाऱ्या क्लायंट कोडद्वारे सत्यापित केला जाऊ शकतो. + +### सक्तीचे व्यवहार {#forced-txns} + +L2s वर उपलब्धता सुनिश्चित करण्यासाठी आणि सेन्सॉरशिप रोखण्यासाठी सामान्य यंत्रणा [सक्तीचे व्यवहार](https://docs.optimism.io/stack/transactions/forced-transaction) आहे. परंतु सक्तीचे व्यवहार शून्य-ज्ञान पुराव्यांसह एकत्रित होत नाहीत. सर्व्हर हा एकमेव घटक आहे जो व्यवहार सत्यापित करू शकतो. + +आम्ही `smart-contracts/src/ZkBank.sol` मध्ये बदल करून सक्तीचे व्यवहार स्वीकारू शकतो आणि सर्व्हरला स्थिती बदलण्यापासून रोखू शकतो जोपर्यंत त्यावर प्रक्रिया होत नाही. तथापि, यामुळे आपल्याला एका सोप्या डिनायल-ऑफ-सर्व्हिस हल्ल्यासाठी उघडे पडते. जर सक्तीचा व्यवहार अवैध असेल आणि त्यामुळे त्यावर प्रक्रिया करणे अशक्य असेल तर काय? + +यावरील उपाय म्हणजे सक्तीचा व्यवहार अवैध असल्याचा शून्य-ज्ञान पुरावा असणे. हे सर्व्हरला तीन पर्याय देते: + +- सक्तीच्या व्यवहारावर प्रक्रिया करणे, त्यावर प्रक्रिया झाल्याचा शून्य-ज्ञान पुरावा आणि नवीन स्थिती हॅश प्रदान करणे. +- सक्तीचा व्यवहार नाकारणे, आणि कॉन्ट्रॅक्टला शून्य-ज्ञान पुरावा प्रदान करणे की व्यवहार अवैध आहे (अज्ञात ॲड्रेस, चुकीचा नॉन्स, किंवा अपुरी शिल्लक). +- सक्तीच्या व्यवहाराकडे दुर्लक्ष करणे. सर्व्हरला प्रत्यक्षात व्यवहारावर प्रक्रिया करण्यास भाग पाडण्याचा कोणताही मार्ग नाही, परंतु याचा अर्थ संपूर्ण प्रणाली अनुपलब्ध आहे. + +#### उपलब्धता बाँड्स {#avail-bonds} + +वास्तविक जीवनातील अंमलबजावणीमध्ये, सर्व्हर चालू ठेवण्यासाठी कदाचित काही प्रकारचा नफ्याचा हेतू असेल. आम्ही या प्रोत्साहनाला बळकट करण्यासाठी सर्व्हरला एक उपलब्धता बाँड पोस्ट करायला लावू शकतो जो कोणीही जाळू शकतो जर सक्तीचा व्यवहार एका विशिष्ट कालावधीत प्रक्रिया केला गेला नाही. + +### खराब Noir कोड {#bad-noir-code} + +सामान्यतः, लोकांना स्मार्ट कॉन्ट्रॅक्टवर विश्वास ठेवण्यासाठी आम्ही स्त्रोत कोड एका [ब्लॉक एक्सप्लोरर](https://eth.blockscout.com/address/0x7D16d2c4e96BCFC8f815E15b771aC847EcbDB48b?tab=contract) वर अपलोड करतो. तथापि, शून्य-ज्ञान पुराव्यांच्या बाबतीत, ते अपुरे आहे. + +`Verifier.sol` मध्ये पडताळणी की असते, जी Noir प्रोग्रामचे एक फंक्शन आहे. तथापि, ती की आपल्याला Noir प्रोग्राम काय होता हे सांगत नाही. खऱ्या अर्थाने विश्वसनीय उपाययोजना करण्यासाठी, तुम्हाला Noir प्रोग्राम (आणि ज्या आवृत्तीने तो तयार केला आहे) अपलोड करणे आवश्यक आहे. अन्यथा, शून्य-ज्ञान पुरावे एका वेगळ्या प्रोग्रामला प्रतिबिंबित करू शकतात, ज्यामध्ये एक बॅक डोअर असेल. + +जोपर्यंत ब्लॉक एक्सप्लोरर्स आम्हाला Noir प्रोग्राम्स अपलोड आणि सत्यापित करण्याची परवानगी देत नाहीत, तोपर्यंत तुम्ही ते स्वतः करावे (शक्यतो [IPFS](/developers/tutorials/ipfs-decentralized-ui/) वर). मग प्रगत वापरकर्ते स्त्रोत कोड डाउनलोड करू शकतील, तो स्वतः संकलित करू शकतील, `Verifier.sol` तयार करू शकतील, आणि तो ऑनचेन असलेल्या कोडसारखाच आहे हे सत्यापित करू शकतील. + +## निष्कर्ष {#conclusion} + +प्लाझ्मा-प्रकारच्या ॲप्लिकेशन्सना माहिती साठवणुकीसाठी एका केंद्रीकृत घटकाची आवश्यकता असते. यामुळे संभाव्य असुरक्षितता निर्माण होते परंतु, बदल्यात, आम्हाला ब्लॉकचेनवरच उपलब्ध नसलेल्या मार्गांनी गोपनीयतेचे संरक्षण करण्यास अनुमती देते. शून्य-ज्ञान पुराव्यांसह आम्ही अखंडता सुनिश्चित करू शकतो आणि शक्यतो केंद्रीकृत घटक चालवणाऱ्या कोणालाही उपलब्धतेची देखभाल करणे आर्थिकदृष्ट्या फायदेशीर बनवू शकतो. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). + +## पोचपावती {#acknowledgements} + +- जोश क्राइट्सने या लेखाचा मसुदा वाचला आणि मला एका काटेरी Noir समस्येवर मदत केली. + +कोणत्याही उर्वरित चुका माझ्या जबाबदारी आहेत. diff --git a/public/content/translations/mr/developers/tutorials/calling-a-smart-contract-from-javascript/index.md b/public/content/translations/mr/developers/tutorials/calling-a-smart-contract-from-javascript/index.md new file mode 100644 index 00000000000..8d7adff8963 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/calling-a-smart-contract-from-javascript/index.md @@ -0,0 +1,131 @@ +--- +title: "JavaScript मधून स्मार्ट कॉन्ट्रॅक्टला कॉल करणे" +description: "Dai टोकनच्या उदाहरणाचा वापर करून JavaScript मधून स्मार्ट कॉन्ट्रॅक्ट फंक्शनला कसे कॉल करावे" +author: jdourlens +tags: [ "व्यवहार", "frontend", "JavaScript", "web3.js" ] +skill: beginner +lang: mr +published: 2020-04-19 +source: EthereumDev +sourceUrl: https://ethereumdev.io/calling-a-smart-contract-from-javascript/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +या ट्युटोरियलमध्ये आपण JavaScript मधून [स्मार्ट कॉन्ट्रॅक्ट](/developers/docs/smart-contracts/) फंक्शनला कसे कॉल करायचे ते पाहू. पहिले म्हणजे स्मार्ट कॉन्ट्रॅक्टची स्थिती वाचणे (उदा., ERC20 धारकाची शिल्लक), त्यानंतर आपण टोकन हस्तांतरण करून ब्लॉकचेनची स्थिती सुधारित करू. तुम्ही आधीच [ब्लॉकचेनशी संवाद साधण्यासाठी JS पर्यावरण सेट करण्याशी](/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/) परिचित असले पाहिजे. + +या उदाहरणासाठी आपण DAI टोकन वापरणार आहोत, चाचणीच्या उद्देशाने आपण ganache-cli वापरून ब्लॉकचेन फोर्क करू आणि असा ॲड्रेस अनलॉक करू ज्यात आधीच खूप DAI आहेत: + +```bash +ganache-cli -f https://mainnet.infura.io/v3/[तुमची इन्फ्युरा की] -d -i 66 1 --unlock 0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81 +``` + +स्मार्ट कॉन्ट्रॅक्टशी संवाद साधण्यासाठी आपल्याला त्याचा ॲड्रेस आणि ABI लागेल: + +```js +const ERC20TransferABI = [ + { + constant: false, + inputs: [ + { + name: "_to", + type: "address", + }, + { + name: "_value", + type: "uint256", + }, + ], + name: "transfer", + outputs: [ + { + name: "", + type: "bool", + }, + ], + payable: false, + stateMutability: "nonpayable", + type: "function", + }, + { + constant: true, + inputs: [ + { + name: "_owner", + type: "address", + }, + ], + name: "balanceOf", + outputs: [ + { + name: "balance", + type: "uint256", + }, + ], + payable: false, + stateMutability: "view", + type: "function", + }, +] + +const DAI_ADDRESS = "0x6b175474e89094c44da98b954eedeac495271d0f" +``` + +या प्रोजेक्टसाठी आम्ही फक्त `balanceOf` आणि `transfer` फंक्शन ठेवण्यासाठी संपूर्ण ERC20 ABI मधून अनावश्यक भाग काढला आहे पण तुम्ही [संपूर्ण ERC20 ABI येथे](https://ethereumdev.io/abi-for-erc20-contract-on-ethereum/) शोधू शकता. + +त्यानंतर आपल्याला आपला स्मार्ट कॉन्ट्रॅक्ट सुरू करण्याची गरज आहे: + +```js +const web3 = new Web3("http://localhost:8545") + +const daiToken = new web3.eth.Contract(ERC20TransferABI, DAI_ADDRESS) +``` + +आपण दोन ॲड्रेस देखील सेट करू: + +- ज्याला हस्तांतरण मिळेल तो आणि +- आपण आधीच अनलॉक केलेला जो ते पाठवेल: + +```js +const senderAddress = "0x4d10ae710Bd8D1C31bd7465c8CBC3add6F279E81" +const receiverAddress = "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +``` + +पुढील भागात आपण दोन्ही ॲड्रेसकडे असलेल्या टोकन्सची सध्याची रक्कम मिळवण्यासाठी `balanceOf` फंक्शनला कॉल करू. + +## कॉल: स्मार्ट कॉन्ट्रॅक्टमधून मूल्य वाचणे {#call-reading-value-from-a-smart-contract} + +पहिले उदाहरण कोणतेही ट्रान्झॅक्शन न पाठवता एक “कॉन्स्टन्ट” मेथड कॉल करेल आणि EVM मध्ये त्याचे स्मार्ट कॉन्ट्रॅक्ट मेथड कार्यान्वित करेल. यासाठी आपण एका ॲड्रेसची ERC20 शिल्लक वाचू. [ERC20 टोकन्सबद्दल आमचा लेख वाचा](/developers/tutorials/understand-the-erc-20-token-smart-contract/). + +तुम्ही `yourContract.methods.methodname` अशाप्रकारे इन्स्टन्शिएट केलेल्या स्मार्ट कॉन्ट्रॅक्टच्या मेथड्समध्ये प्रवेश करू शकता ज्यासाठी तुम्ही ABI प्रदान केले आहे. `call` फंक्शन वापरून तुम्हाला फंक्शन कार्यान्वित केल्याचा परिणाम मिळेल. + +```js +daiToken.methods.balanceOf(senderAddress).call(function (err, res) { + if (err) { + console.log("एक त्रुटी आली", err) + return + } + console.log("शिल्लक आहे: ", res) +}) +``` + +लक्षात ठेवा की DAI ERC20 मध्ये 18 दशांश स्थळे आहेत, याचा अर्थ योग्य रक्कम मिळवण्यासाठी तुम्हाला 18 शून्य काढावे लागतील. JavaScript मोठ्या अंकीय मूल्यांना हाताळू शकत नसल्यामुळे uint256 स्ट्रिंग म्हणून परत केले जातात. तुम्हाला खात्री नसेल तर [JS मध्ये मोठ्या संख्या कशा हाताळायच्या याबद्दल आमचे bignumber.js वरील ट्युटोरियल पहा](https://ethereumdev.io/how-to-deal-with-big-numbers-in-javascript/). + +## पाठवा: स्मार्ट कॉन्ट्रॅक्ट फंक्शनला ट्रान्झॅक्शन पाठवणे {#send-sending-a-transaction-to-a-smart-contract-function} + +दुसऱ्या उदाहरणासाठी, आपण आपल्या दुसऱ्या ॲड्रेसवर 10 DAI पाठवण्यासाठी DAI स्मार्ट कॉन्ट्रॅक्टच्या ट्रान्स्फर फंक्शनला कॉल करू. ट्रान्स्फर फंक्शन दोन पॅरामीटर्स स्वीकारते: प्राप्तकर्त्याचा ॲड्रेस आणि हस्तांतरित करायच्या टोकनची रक्कम: + +```js +daiToken.methods + .transfer(receiverAddress, "100000000000000000000") + .send({ from: senderAddress }, function (err, res) { + if (err) { + console.log("एक त्रुटी आली", err) + return + } + console.log("ट्रान्झॅक्शनचा हॅश: " + res) + }) +``` + +कॉल फंक्शन त्या ट्रान्झॅक्शनचा हॅश परत करतो जे ब्लॉकचेनमध्ये माइन केले जाईल. Ethereum वर, ट्रान्झॅक्शन हॅश अंदाजित असतात - म्हणूनच आपण ट्रान्झॅक्शन कार्यान्वित होण्यापूर्वी त्याचा हॅश मिळवू शकतो ([हॅश कसे मोजले जातात ते येथे शिका](https://ethereum.stackexchange.com/questions/45648/how-to-calculate-the-assigned-txhash-of-a-transaction)). + +हे फंक्शन फक्त ब्लॉकचेनवर ट्रान्झॅक्शन सबमिट करत असल्यामुळे, ते माइन होऊन ब्लॉकचेनमध्ये समाविष्ट होईपर्यंत आपण निकाल पाहू शकत नाही. पुढील ट्युटोरियलमध्ये आपण [ब्लॉकचेनवर ट्रान्झॅक्शन कार्यान्वित होण्याची वाट कशी पाहायची, त्याचा हॅश जाणून घेऊन शिकू](https://ethereumdev.io/waiting-for-a-transaction-to-be-mined-on-ethereum-with-js/). diff --git a/public/content/translations/mr/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md b/public/content/translations/mr/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md new file mode 100644 index 00000000000..36b54d2676b --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/creating-a-wagmi-ui-for-your-contract/index.md @@ -0,0 +1,585 @@ +--- +title: "तुमच्या काँट्रॅक्टसाठी युझर इंटरफेस तयार करणे" +description: "TypeScript, React, Vite आणि Wagmi सारख्या आधुनिक घटकांचा वापर करून, आम्ही एक आधुनिक, पण किमान, युझर इंटरफेस पाहणार आहोत आणि युझर इंटरफेसशी वॉलेट कसे कनेक्ट करावे, माहिती वाचण्यासाठी स्मार्ट काँट्रॅक्टला कॉल कसा करावा, स्मार्ट काँट्रॅक्टला व्यवहार कसा पाठवावा, आणि बदल ओळखण्यासाठी स्मार्ट काँट्रॅक्टमधील इव्हेंटचे निरीक्षण कसे करावे हे शिकणार आहोत." +author: Ori Pomerantz +tags: [ "typescript", "react", "vite", "wagmi", "frontend" ] +skill: beginner +published: 2023-11-01 +lang: mr +sidebarDepth: 3 +--- + +तुम्हाला Ethereum इकोसिस्टीममध्ये एक आवश्यक वैशिष्ट्य आढळले आहे. तुम्ही ते लागू करण्यासाठी स्मार्ट काँट्रॅक्ट्स लिहिले आणि कदाचित ऑफचेन चालणारा काही संबंधित कोड देखील लिहिला असेल. हे उत्तम आहे! दुर्दैवाने, युझर इंटरफेसशिवाय तुम्हाला कोणतेही युझर मिळणार नाहीत, आणि मागच्या वेळी जेव्हा तुम्ही वेबसाइट लिहिली होती तेव्हा लोक डायल-अप मोडेम वापरत होते आणि JavaScript नवीन होते. + +हा लेख तुमच्यासाठी आहे. मी गृहीत धरतो की तुम्हाला प्रोग्रामिंग माहित आहे, आणि कदाचित थोडे JavaScript आणि HTML देखील माहित आहे, परंतु तुमची युझर इंटरफेस कौशल्ये गंजलेली आणि कालबाह्य झाली आहेत. एकत्रितपणे आपण एका सोप्या आधुनिक ऍप्लिकेशनवर नजर टाकू जेणेकरून तुम्हाला दिसेल की आजकाल हे कसे केले जाते. + +## हे महत्त्वाचे का आहे {#why-important} + +सिद्धांतानुसार, तुम्ही लोकांना तुमच्या काँट्रॅक्ट्सशी संवाद साधण्यासाठी फक्त [Etherscan](https://holesky.etherscan.io/address/0x432d810484add7454ddb3b5311f0ac2e95cecea8#writeContract) किंवा [Blockscout](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=write_contract) वापरण्यास सांगू शकता. अनुभवी Ethereans साठी ते उत्तम असेल. परंतु आम्ही [आणखी एक अब्ज लोकांना](https://blog.ethereum.org/2021/05/07/ethereum-for-the-next-billion) सेवा देण्याचा प्रयत्न करत आहोत. एका उत्तम वापरकर्ता अनुभवाशिवाय हे घडणार नाही आणि एक अनुकूल वापरकर्ता इंटरफेस हा त्याचा एक मोठा भाग आहे. + +## Greeter ऍप्लिकेशन {#greeter-app} + +आधुनिक UI कसे कार्य करते यामागे बराच सिद्धांत आहे, आणि [बर्‍याच चांगल्या साइट्स](https://react.dev/learn/thinking-in-react) [आहेत ज्या ते स्पष्ट करतात](https://wagmi.sh/core/getting-started). त्या साइट्सनी केलेले उत्तम काम पुन्हा करण्याऐवजी, मी असे गृहीत धरणार आहे की तुम्ही करून शिकण्यास प्राधान्य देता आणि अशा ऍप्लिकेशनने सुरुवात करता ज्यासोबत तुम्ही खेळू शकता. गोष्टी पूर्ण करण्यासाठी तुम्हाला अजूनही सिद्धांताची आवश्यकता आहे, आणि आम्ही त्यावर येऊ - आम्ही फक्त सोर्स फाइलनुसार जाऊ, आणि गोष्टी जशा येतील तशा त्यावर चर्चा करू. + +### इन्स्टॉलेशन {#installation} + +1. आवश्यक असल्यास, तुमच्या वॉलेटमध्ये [Holesky ब्लॉकचेन](https://chainlist.org/?search=holesky&testnets=true) जोडा आणि [चाचणी ETH मिळवा](https://www.holeskyfaucet.io/). + +2. github रेपॉजिटरी क्लोन करा. + + ```sh + git clone https://github.com/qbzzt/20230801-modern-ui.git + ``` + +3. आवश्यक पॅकेजेस इंस्टॉल करा. + + ```sh + cd 20230801-modern-ui + pnpm install + ``` + +4. ऍप्लिकेशन सुरू करा. + + ```sh + pnpm dev + ``` + +5. ऍप्लिकेशनने दाखवलेल्या URL वर ब्राउझ करा. बहुतेक प्रकरणांमध्ये, ते [http://localhost:5173/](http://localhost:5173/) आहे. + +6. तुम्ही काँट्रॅक्ट सोर्स कोड, Hardhat च्या Greeter ची थोडी सुधारित आवृत्ती, [ब्लॉकचेन एक्सप्लोररवर](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=contract) पाहू शकता. + +### फाइल वॉक थ्रू {#file-walk-through} + +#### `index.html` {#index-html} + +ही फाईल मानक HTML बॉयलरप्लेट आहे, फक्त ही ओळ वगळता, जी स्क्रिप्ट फाइल आयात करते. + +```html + +``` + +#### `src/main.tsx` {#main-tsx} + +फाइल एक्सटेंशन आम्हाला सांगते की ही फाईल [TypeScript](https://www.typescriptlang.org/) मध्ये लिहिलेला एक [React घटक](https://www.w3schools.com/react/react_components.asp) आहे, जो JavaScript चा एक विस्तार आहे जो [टाइप चेकिंग](https://en.wikipedia.org/wiki/Type_system#Type_checking) ला समर्थन देतो. TypeScript हे JavaScript मध्ये संकलित (compiled) केले जाते, म्हणून आम्ही ते क्लायंट-साइड एक्झिक्यूशनसाठी वापरू शकतो. + +```tsx +import '@rainbow-me/rainbowkit/styles.css' +import { RainbowKitProvider } from '@rainbow-me/rainbowkit' +import * as React from 'react' +import * as ReactDOM from 'react-dom/client' +import { WagmiConfig } from 'wagmi' +import { chains, config } from './wagmi' +``` + +आम्हाला आवश्यक असलेला लायब्ररी कोड आयात करा. + +```tsx +import { App } from './App' +``` + +ऍप्लिकेशन लागू करणारा React घटक आयात करा (खाली पहा). + +```tsx +ReactDOM.createRoot(document.getElementById('root')!).render( +``` + +रूट React घटक तयार करा. `render` चा पॅरामीटर [JSX](https://www.w3schools.com/react/react_jsx.asp) आहे, एक विस्तार भाषा जी HTML आणि JavaScript/TypeScript दोन्ही वापरते. येथील उद्गारवाचक चिन्ह TypeScript घटकाला सांगते: "तुम्हाला माहित नाही की `document.getElementById('root')` हे `ReactDOM.createRoot` साठी एक वैध पॅरामीटर असेल, पण काळजी करू नका - मी डेव्हलपर आहे आणि मी तुम्हाला सांगत आहे की ते असेल". + +```tsx + +``` + +ऍप्लिकेशन [एका `React.StrictMode` घटकात](https://react.dev/reference/react/StrictMode) जात आहे. हा घटक React लायब्ररीला अतिरिक्त डीबगिंग तपासण्या घालण्यास सांगतो, जे डेव्हलपमेंट दरम्यान उपयुक्त आहे. + +```tsx + +``` + +ऍप्लिकेशन [एका `WagmiConfig` घटकात](https://wagmi.sh/react/api/WagmiProvider) देखील आहे. [wagmi (we are going to make it) लायब्ररी](https://wagmi.sh/) Ethereum विकेंद्रित ऍप्लिकेशन लिहिण्यासाठी React UI व्याख्यांना [viem लायब्ररीसह](https://viem.sh/) जोडते. + +```tsx + +``` + +आणि शेवटी, [एक `RainbowKitProvider` घटक](https://www.rainbowkit.com/). हा घटक लॉग ऑन करणे आणि वॉलेट आणि ऍप्लिकेशनमधील संवाद हाताळतो. + +```tsx + +``` + +आता आमच्याकडे ऍप्लिकेशनसाठी घटक असू शकतो, जो प्रत्यक्षात UI लागू करतो. घटकाच्या शेवटी असलेले `/>` React ला सांगते की या घटकामध्ये XML मानकानुसार कोणतीही व्याख्या नाही. + +```tsx + + + , +) +``` + +अर्थात, आम्हाला इतर घटक बंद करावे लागतील. + +#### `src/App.tsx` {#app-tsx} + +```tsx +import { ConnectButton } from '@rainbow-me/rainbowkit' +import { useAccount } from 'wagmi' +import { Greeter } from './components/Greeter' + +export function App() { +``` + +React घटक तयार करण्याचा हा मानक मार्ग आहे - एक फंक्शन परिभाषित करा जे प्रत्येक वेळी रेंडर करण्याची आवश्यकता असताना कॉल केले जाते. या फंक्शनमध्ये सामान्यतः शीर्षस्थानी काही TypeScript किंवा JavaScript कोड असतो, त्यानंतर `return` स्टेटमेंट असते जे JSX कोड परत करते. + +```tsx + const { isConnected } = useAccount() +``` + +येथे आपण वॉलेटद्वारे ब्लॉकचेनशी कनेक्ट आहोत की नाही हे तपासण्यासाठी [`useAccount`](https://wagmi.sh/react/api/hooks/useAccount) वापरतो. + +परंपरेनुसार, React मध्ये `use...` नावाची फंक्शन्स [hooks](https://www.w3schools.com/react/react_hooks.asp) असतात जी काही प्रकारचा डेटा परत करतात. जेव्हा तुम्ही असे हुक वापरता, तेव्हा तुमच्या घटकाला केवळ डेटा मिळत नाही, तर जेव्हा तो डेटा बदलतो तेव्हा घटक अद्यतनित माहितीसह पुन्हा रेंडर केला जातो. + +```tsx + return ( + <> +``` + +React घटकाच्या JSX ने एक घटक परत करणे _आवश्यक_ आहे. जेव्हा आमच्याकडे एकापेक्षा जास्त घटक असतात आणि आमच्याकडे "नैसर्गिकरित्या" गुंडाळण्यासाठी काहीही नसते, तेव्हा आम्ही एक रिकामा घटक (`<> ...` वापरतो `) त्यांना एकाच घटकात बनवण्यासाठी. + +```tsx +

Greeter

+ +``` + +आम्हाला RainbowKit कडून [`ConnectButton` घटक](https://www.rainbowkit.com/docs/connect-button) मिळतो. जेव्हा आम्ही कनेक्ट नसतो, तेव्हा ते आम्हाला `Connect Wallet` बटण देते जे एक मोडल उघडते जे वॉलेट्सबद्दल स्पष्ट करते आणि तुम्हाला कोणते वापरायचे आहे ते निवडू देते. जेव्हा आम्ही कनेक्ट असतो, तेव्हा ते आम्ही वापरत असलेले ब्लॉकचेन, आमचा खाते पत्ता आणि आमची ETH शिल्लक दर्शवते. आम्ही नेटवर्क स्विच करण्यासाठी किंवा डिस्कनेक्ट करण्यासाठी हे डिस्प्ले वापरू शकतो. + +```tsx + {isConnected && ( +``` + +जेव्हा आम्हाला JSX मध्ये प्रत्यक्ष JavaScript (किंवा JavaScript मध्ये संकलित केले जाणारे TypeScript) घालण्याची आवश्यकता असते, तेव्हा आम्ही कंस (`{}`) वापरतो. + +`a && b` हे सिंटॅक्स [`a ?` साठी लहान आहे. b : a`](https://www.w3schools.com/react/react_es6_ternary.asp). म्हणजे, जर `a`सत्य असेल तर त्याचे मूल्य`b`होते आणि अन्यथा त्याचे मूल्य`a`होते (जे`false`, `0`, इत्यादी असू शकते). React ला हे सांगण्याचा हा एक सोपा मार्ग आहे की एखादा घटक केवळ तेव्हाच प्रदर्शित केला पाहिजे जेव्हा एखादी विशिष्ट अट पूर्ण होते. + +या प्रकरणात, वापरकर्ता ब्लॉकचेनशी कनेक्ट असल्यास आम्ही फक्त वापरकर्त्याला `Greeter` दाखवू इच्छितो. + +```tsx + + )} + + ) +} +``` + +#### `src/components/Greeter.tsx` {#greeter-tsx} + +या फाइलमध्ये बहुतेक UI कार्यक्षमता आहे. यात अशा व्याख्यांचा समावेश आहे ज्या सामान्यतः एकाधिक फाईल्समध्ये असतील, परंतु हे एक ट्यूटोरियल असल्याने, प्रोग्राम कामगिरी किंवा देखभालीच्या सुलभतेऐवजी पहिल्यांदा समजण्यास सोपे होण्यासाठी ऑप्टिमाइझ केला आहे. + +```tsx +import { useState, ChangeEventHandler } from 'react' +import { useNetwork, + useReadContract, + usePrepareContractWrite, + useContractWrite, + useContractEvent + } from 'wagmi' +``` + +आम्ही ही लायब्ररी फंक्शन्स वापरतो. पुन्हा, ते कुठे वापरले जातात हे खाली स्पष्ट केले आहे. + +```tsx +import { AddressType } from 'abitype' +``` + +[`abitype` लायब्ररी](https://abitype.dev/) आम्हाला विविध Ethereum डेटा प्रकारांसाठी TypeScript व्याख्या प्रदान करते, जसे की [`AddressType`](https://abitype.dev/config#addresstype). + +```tsx +let greeterABI = [ + . + . + . +] as const // greeterABI +``` + +`Greeter` करारासाठी ABI. +जर तुम्ही काँट्रॅक्ट आणि UI एकाच वेळी विकसित करत असाल तर तुम्ही सामान्यतः त्यांना एकाच रेपॉजिटरीमध्ये ठेवाल आणि तुमच्या ऍप्लिकेशनमधील फाइल म्हणून Solidity कंपाइलरद्वारे व्युत्पन्न केलेला ABI वापराल. तथापि, येथे हे आवश्यक नाही कारण करार आधीच विकसित झाला आहे आणि बदलणार नाही. + +```tsx +type AddressPerBlockchainType = { + [key: number]: AddressType +} +``` + +TypeScript स्ट्राँगली टाईप आहे. आम्ही या व्याख्येचा वापर विविध चेन्सवर `Greeter` काँट्रॅक्ट तैनात केलेला पत्ता निर्दिष्ट करण्यासाठी करतो. की ही एक संख्या आहे (chainId), आणि मूल्य एक `AddressType` (एक पत्ता) आहे. + +```tsx +const contractAddrs: AddressPerBlockchainType = { + // Holesky + 17000: '0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8', + + // Sepolia + 11155111: '0x7143d5c190F048C8d19fe325b748b081903E3BF0' +} +``` + +दोन समर्थित नेटवर्क्सवर कराराचा पत्ता: [Holesky](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=contact_code) आणि [Sepolia](https://eth-sepolia.blockscout.com/address/0x7143d5c190F048C8d19fe325b748b081903E3BF0?tab=contact_code). + +टीप: प्रत्यक्षात तिसरी व्याख्या आहे, Redstone Holesky साठी, ती खाली स्पष्ट केली जाईल. + +```tsx +type ShowObjectAttrsType = { + name: string, + object: any +} +``` + +हा प्रकार `ShowObject` घटकासाठी पॅरामीटर म्हणून वापरला जातो (नंतर स्पष्ट केला आहे). यात ऑब्जेक्टचे नाव आणि त्याचे मूल्य समाविष्ट आहे, जे डीबगिंगच्या उद्देशाने प्रदर्शित केले जातात. + +```tsx +type ShowGreetingAttrsType = { + greeting: string | undefined +} +``` + +कोणत्याही क्षणी आम्हाला एकतर अभिवादन काय आहे हे माहित असू शकते (कारण आम्ही ते ब्लॉकचेनवरून वाचले आहे) किंवा माहित नाही (कारण आम्हाला ते अद्याप मिळालेले नाही). म्हणून असा प्रकार असणे उपयुक्त आहे जो एकतर स्ट्रिंग किंवा काहीही असू शकतो. + +##### `Greeter` घटक {#greeter-component} + +```tsx +const Greeter = () => { +``` + +शेवटी, आम्ही घटक परिभाषित करतो. + +```tsx + const { chain } = useNetwork() +``` + +आपण वापरत असलेल्या चेनबद्दल माहिती, [wagmi](https://wagmi.sh/react/hooks/useNetwork) च्या सौजन्याने. +कारण हा एक हुक (`use...`) आहे, प्रत्येक वेळी ही माहिती बदलल्यावर घटक पुन्हा काढला जातो. + +```tsx + const greeterAddr = chain && contractAddrs[chain.id] +``` + +Greeter काँट्रॅक्टचा पत्ता, जो चेननुसार बदलतो (आणि जर आमच्याकडे चेन माहिती नसेल किंवा आम्ही त्या काँट्रॅक्टशिवाय चेनवर असू तर तो `undefined` असतो). + +```tsx + const readResults = useReadContract({ + address: greeterAddr, + abi: greeterABI, + functionName: "greet" , // No arguments + watch: true + }) +``` + +[`useReadContract` हुक](https://wagmi.sh/react/api/hooks/useReadContract) एका काँट्रॅक्टमधून माहिती वाचतो. UI मध्ये `readResults` विस्तारून ते नक्की कोणती माहिती परत करते हे तुम्ही पाहू शकता. या प्रकरणात आम्हाला ते शोधत रहायचे आहे जेणेकरून अभिवादन बदलल्यावर आम्हाला सूचित केले जाईल. + +**टीप:** अभिवादन कधी बदलते हे जाणून घेण्यासाठी आणि त्या मार्गाने अपडेट करण्यासाठी आम्ही [`setGreeting` इव्हेंट](https://eth-holesky.blockscout.com/address/0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8?tab=logs) ऐकू शकतो. तथापि, ते अधिक कार्यक्षम असले तरी, ते सर्व बाबतीत लागू होणार नाही. जेव्हा वापरकर्ता वेगळ्या चेनवर स्विच करतो, तेव्हा अभिवादन देखील बदलते, परंतु त्या बदलासोबत इव्हेंट नसतो. आमच्याकडे कोडचा एक भाग इव्हेंट ऐकत असू शकतो आणि दुसरा चेन बदल ओळखण्यासाठी असू शकतो, परंतु ते फक्त [`watch` पॅरामीटर](https://wagmi.sh/react/api/hooks/useReadContract#watch-optional) सेट करण्यापेक्षा अधिक क्लिष्ट असेल. + +```tsx + const [ newGreeting, setNewGreeting ] = useState("") +``` + +React चा [`useState` हुक](https://www.w3schools.com/react/react_usestate.asp) आम्हाला एक स्टेट व्हेरिएबल निर्दिष्ट करू देतो, ज्याचे मूल्य घटकाच्या एका रेंडरिंगपासून दुसऱ्या रेंडरिंगपर्यंत टिकून राहते. प्रारंभिक मूल्य हे पॅरामीटर आहे, या प्रकरणात रिक्त स्ट्रिंग. + +`useState` हुक दोन मूल्यांसह एक सूची परत करतो: + +1. स्टेट व्हेरिएबलचे वर्तमान मूल्य. +2. आवश्यकतेनुसार स्टेट व्हेरिएबलमध्ये बदल करण्यासाठी एक फंक्शन. हा एक हुक असल्याने, प्रत्येक वेळी तो कॉल केल्यावर घटक पुन्हा रेंडर होतो. + +या प्रकरणात, आम्ही वापरकर्त्याने सेट करू इच्छित असलेल्या नवीन अभिवादनासाठी स्टेट व्हेरिएबल वापरत आहोत. + +```tsx + const greetingChange : ChangeEventHandler = (evt) => + setNewGreeting(evt.target.value) +``` + +नवीन अभिवादन इनपुट फील्ड बदलल्यावर हा इव्हेंट हँडलर आहे. प्रकार, [`ChangeEventHandler`](https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forms_and_events/), निर्दिष्ट करतो की हा HTML इनपुट घटकाच्या मूल्याच्या बदलासाठी हँडलर आहे. `` भाग वापरला जातो कारण हा एक [जेनेरिक प्रकार](https://www.w3schools.com/typescript/typescript_basic_generics.php) आहे. + +```tsx + const preparedTx = usePrepareContractWrite({ + address: greeterAddr, + abi: greeterABI, + functionName: 'setGreeting', + args: [ newGreeting ] + }) + const workingTx = useContractWrite(preparedTx.config) +``` + +क्लायंटच्या दृष्टिकोनातून ब्लॉकचेन व्यवहार सबमिट करण्याची ही प्रक्रिया आहे: + +1. [`eth_estimateGas`](https://docs.alchemy.com/reference/eth-estimategas) वापरून ब्लॉकचेनमधील नोडला व्यवहार पाठवा. +2. नोडकडून प्रतिसादाची प्रतीक्षा करा. +3. जेव्हा प्रतिसाद प्राप्त होतो, तेव्हा वापरकर्त्याला वॉलेटद्वारे व्यवहार साइन करण्यास सांगा. ही पायरी नोड प्रतिसाद मिळाल्यानंतर _घडायलाच हवी_ कारण वापरकर्त्याला साइन करण्यापूर्वी व्यवहाराची गॅस किंमत दर्शविली जाते. +4. वापरकर्त्याच्या मंजुरीची प्रतीक्षा करा. +5. यावेळी [`eth_sendRawTransaction`](https://docs.alchemy.com/reference/eth-sendrawtransaction) वापरून व्यवहार पुन्हा पाठवा. + +पायरी 2 मध्ये लक्षात येण्याजोगा वेळ लागण्याची शक्यता आहे, ज्या दरम्यान वापरकर्त्यांना आश्चर्य वाटेल की त्यांची कमांड खरोखरच युझर इंटरफेसद्वारे प्राप्त झाली आहे की नाही आणि त्यांना आधीच व्यवहार साइन करण्यास का सांगितले जात नाही. त्यामुळे वापरकर्ता अनुभव (UX) वाईट होतो. + +यावरील उपाय म्हणजे [प्रिपेअर हुक्स](https://wagmi.sh/react/prepare-hooks) वापरणे. प्रत्येक वेळी जेव्हा पॅरामीटर बदलतो, तेव्हा लगेच नोडला `eth_estimateGas` विनंती पाठवा. मग, जेव्हा वापरकर्त्याला प्रत्यक्षात व्यवहार पाठवायचा असतो (या प्रकरणात **अपडेट ग्रीटिंग** दाबून), तेव्हा गॅसची किंमत ज्ञात असते आणि वापरकर्ता लगेच वॉलेट पृष्ठ पाहू शकतो. + +```tsx + return ( +``` + +आता आपण शेवटी परत करण्यासाठी वास्तविक HTML तयार करू शकतो. + +```tsx + <> +

Greeter

+ { + !readResults.isError && !readResults.isLoading && + + } +
+``` + +`ShowGreeting` घटक तयार करा (खाली स्पष्ट केले आहे), परंतु फक्त जर अभिवादन ब्लॉकचेनमधून यशस्वीरित्या वाचले गेले असेल तरच. + +```tsx + +``` + +हे इनपुट टेक्स्ट फील्ड आहे जिथे वापरकर्ता नवीन अभिवादन सेट करू शकतो. प्रत्येक वेळी जेव्हा वापरकर्ता की दाबतो, तेव्हा आम्ही `greetingChange` ला कॉल करतो जे `setNewGreeting` ला कॉल करते. `setNewGreeting` हे `useState` हुक मधून येत असल्यामुळे, ते `Greeter` घटकाला पुन्हा रेंडर करण्यास प्रवृत्त करते. याचा अर्थ असा: + +- आम्हाला नवीन अभिवादनाचे मूल्य ठेवण्यासाठी `value` निर्दिष्ट करणे आवश्यक आहे, कारण अन्यथा ते डीफॉल्ट, रिक्त स्ट्रिंगमध्ये परत येईल. +- `usePrepareContractWrite` प्रत्येक वेळी `newGreeting` बदलल्यावर कॉल केले जाते, याचा अर्थ असा की तयार केलेल्या व्यवहारामध्ये नेहमीच नवीनतम `newGreeting` असेल. + +```tsx + +``` + +जर `workingTx.write` नसेल तर आम्ही अद्याप अभिवादन अपडेट पाठवण्यासाठी आवश्यक असलेल्या माहितीची वाट पाहत आहोत, म्हणून बटण अक्षम आहे. जर `workingTx.write` मूल्य असेल तर ते व्यवहार पाठवण्यासाठी कॉल करण्याचे फंक्शन आहे. + +```tsx +
+ + + + + ) +} +``` + +शेवटी, आम्ही काय करत आहोत हे पाहण्यात तुम्हाला मदत करण्यासाठी, आम्ही वापरत असलेल्या तीन वस्तू दाखवा: + +- `readResults` +- `preparedTx` +- `workingTx` + +##### `ShowGreeting` घटक {#showgreeting-component} + +हा घटक दाखवतो + +```tsx +const ShowGreeting = (attrs : ShowGreetingAttrsType) => { +``` + +घटक फंक्शनला घटकाच्या सर्व गुणधर्मांसह एक पॅरामीटर मिळतो. + +```tsx + return {attrs.greeting} +} +``` + +##### `ShowObject` घटक {#showobject-component} + +माहितीच्या उद्देशांसाठी, आम्ही महत्त्वाच्या वस्तू (`readResults` अभिवादन वाचण्यासाठी आणि `preparedTx` आणि `workingTx` आपण तयार केलेल्या व्यवहारांसाठी) दाखवण्यासाठी `ShowObject` घटक वापरतो. + +```tsx +const ShowObject = (attrs: ShowObjectAttrsType ) => { + const keys = Object.keys(attrs.object) + const funs = keys.filter(k => typeof attrs.object[k] == "function") + return <> +
+``` + +आम्हाला सर्व माहितीने UI ला अव्यवस्थित करायचे नाही, म्हणून त्यांना पाहणे किंवा बंद करणे शक्य करण्यासाठी, आम्ही [`details`](https://www.w3schools.com/tags/tag_details.asp) टॅग वापरतो. + +```tsx + {attrs.name} +
+        {JSON.stringify(attrs.object, null, 2)}
+```
+
+बहुतेक फील्ड [`JSON.stringify`](https://www.w3schools.com/js/js_json_stringify.asp) वापरून प्रदर्शित केले जातात.
+
+```tsx
+      
+ { funs.length > 0 && + <> + Functions: +
    +``` + +अपवाद फंक्शन्स आहेत, जे [JSON मानकाचा](https://www.json.org/json-en.html) भाग नाहीत, म्हणून ते स्वतंत्रपणे प्रदर्शित करावे लागतील. + +```tsx + {funs.map((f, i) => +``` + +JSX मध्ये, `{` कर्ली ब्रॅकेट्स `}` मधील कोड JavaScript म्हणून अर्थ लावला जातो. मग, `(` रेग्युलर ब्रॅकेट्स `)` मधील कोडचा पुन्हा JSX म्हणून अर्थ लावला जातो. + +```tsx + (
  • {f}
  • ) + )} +``` + +React ला [DOM ट्री](https://www.w3schools.com/js/js_htmldom.asp) मधील टॅगसाठी वेगळे आयडेंटिफायर असणे आवश्यक आहे. याचा अर्थ असा की एकाच टॅगच्या चाइल्ड्सना (या प्रकरणात, [अनऑर्डर्ड लिस्ट](https://www.w3schools.com/tags/tag_ul.asp)), वेगळ्या `key` अॅट्रिब्युट्सची आवश्यकता असते. + +```tsx +
+ + } +
+ +} +``` + +विविध HTML टॅग्ज संपवा. + +##### अंतिम `export` {#the-final-export} + +```tsx +export { Greeter } +``` + +`Greeter` घटक हा आहे जो आम्हाला ऍप्लिकेशनसाठी निर्यात करणे आवश्यक आहे. + +#### `src/wagmi.ts` {#wagmi-ts} + +शेवटी, WAGMI शी संबंधित विविध व्याख्या `src/wagmi.ts` मध्ये आहेत. मी येथे सर्व काही स्पष्ट करणार नाही, कारण त्यातील बहुतेक बॉयलरप्लेट आहे जी तुम्हाला बदलण्याची शक्यता नाही. + +येथील कोड [github](https://github.com/qbzzt/20230801-modern-ui/blob/main/src/wagmi.ts) वरील कोड सारखाच नाही कारण नंतर लेखात आम्ही आणखी एक चेन ([Redstone Holesky](https://redstone.xyz/docs/network-info)) जोडतो. + +```ts +import { getDefaultWallets } from '@rainbow-me/rainbowkit' +import { configureChains, createConfig } from 'wagmi' +import { holesky, sepolia } from 'wagmi/chains' +``` + +ऍप्लिकेशनला समर्थन देणारे ब्लॉकचेन आयात करा. तुम्ही [viem github](https://github.com/wagmi-dev/viem/tree/main/src/chains/definitions) मध्ये समर्थित चेन्सची सूची पाहू शकता. + +```ts +import { publicProvider } from 'wagmi/providers/public' + +const walletConnectProjectId = 'c96e690bb92b6311e8e9b2a6a22df575' +``` + +[WalletConnect](https://walletconnect.com/) वापरण्यास सक्षम होण्यासाठी तुम्हाला तुमच्या ऍप्लिकेशनसाठी प्रोजेक्ट आयडी आवश्यक आहे. तुम्ही ते [cloud.walletconnect.com](https://cloud.walletconnect.com/sign-in) वर मिळवू शकता. + +```ts +const { chains, publicClient, webSocketPublicClient } = configureChains( + [ holesky, sepolia ], + [ + publicProvider(), + ], +) + +const { connectors } = getDefaultWallets({ + appName: 'My wagmi + RainbowKit App', + chains, + projectId: walletConnectProjectId, +}) + +export const config = createConfig({ + autoConnect: true, + connectors, + publicClient, + webSocketPublicClient, +}) + +export { chains } +``` + +### दुसरे ब्लॉकचेन जोडणे {#add-blockchain} + +आजकाल बरेच [L2 स्केलिंग सोल्यूशन](/layer-2/) आहेत, आणि तुम्ही काहींना समर्थन देऊ इच्छित असाल जे viem अद्याप समर्थन देत नाही. ते करण्यासाठी, तुम्ही `src/wagmi.ts` मध्ये बदल करा. या सूचना [Redstone Holesky](https://redstone.xyz/docs/network-info) कसे जोडायचे हे स्पष्ट करतात. + +1. viem वरून `defineChain` प्रकार आयात करा. + + ```ts + import { defineChain } from 'viem' + ``` + +2. नेटवर्क व्याख्या जोडा. + + ```ts + const redstoneHolesky = defineChain({ + id: 17_001, + name: 'Redstone Holesky', + network: 'redstone-holesky', + nativeCurrency: { + decimals: 18, + name: 'Ether', + symbol: 'ETH', + }, + rpcUrls: { + default: { + http: ['https://rpc.holesky.redstone.xyz'], + webSocket: ['wss://rpc.holesky.redstone.xyz/ws'], + }, + public: { + http: ['https://rpc.holesky.redstone.xyz'], + webSocket: ['wss://rpc.holesky.redstone.xyz/ws'], + }, + }, + blockExplorers: { + default: { name: 'Explorer', url: 'https://explorer.holesky.redstone.xyz' }, + }, + }) + ``` + +3. `configureChains` कॉलमध्ये नवीन चेन जोडा. + + ```ts + const { chains, publicClient, webSocketPublicClient } = configureChains( + [ holesky, sepolia, redstoneHolesky ], + [ publicProvider(), ], + ) + ``` + +4. ऍप्लिकेशनला नवीन नेटवर्कवर तुमच्या काँट्रॅक्ट्सचा पत्ता माहित असल्याची खात्री करा. या प्रकरणात, आम्ही `src/components/Greeter.tsx` मध्ये बदल करतो: + + ```ts + const contractAddrs : AddressPerBlockchainType = { + // Holesky + 17000: '0x432d810484AdD7454ddb3b5311f0Ac2E95CeceA8', + + // Redstone Holesky + 17001: '0x4919517f82a1B89a32392E1BF72ec827ba9986D3', + + // Sepolia + 11155111: '0x7143d5c190F048C8d19fe325b748b081903E3BF0' + } + ``` + +## निष्कर्ष {#conclusion} + +अर्थात, तुम्हाला `Greeter` साठी युझर इंटरफेस प्रदान करण्याची खरोखर काळजी नाही. तुम्हाला तुमच्या स्वतःच्या काँट्रॅक्ट्ससाठी युझर इंटरफेस तयार करायचा आहे. तुमचे स्वतःचे ऍप्लिकेशन तयार करण्यासाठी, या पायऱ्या चालवा: + +1. wagmi ऍप्लिकेशन तयार करण्यासाठी निर्दिष्ट करा. + + ```sh copy + pnpm create wagmi + ``` + +2. ऍप्लिकेशनला नाव द्या. + +3. **React** फ्रेमवर्क निवडा. + +4. **Vite** व्हेरिएंट निवडा. + +5. तुम्ही [Rainbow kit जोडू शकता](https://www.rainbowkit.com/docs/installation#manual-setup). + +आता जा आणि तुमचे काँट्रॅक्ट्स व्यापक जगासाठी वापरण्यायोग्य बनवा. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). + diff --git a/public/content/translations/mr/developers/tutorials/deploying-your-first-smart-contract/index.md b/public/content/translations/mr/developers/tutorials/deploying-your-first-smart-contract/index.md new file mode 100644 index 00000000000..56f0da82b3b --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/deploying-your-first-smart-contract/index.md @@ -0,0 +1,101 @@ +--- +title: "तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट तैनात करणे" +description: "इथेरियम चाचणी नेटवर्कवर तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट तैनात करण्याची ओळख" +author: "jdourlens" +tags: + [ + "स्मार्ट कॉन्ट्रॅक्ट", + "रीमिक्स", + "सॉलिडिटी", + "डिप्लॉयिंग" + ] +skill: beginner +lang: mr +published: 2020-04-03 +source: EthereumDev +sourceUrl: https://ethereumdev.io/deploying-your-first-smart-contract/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +मला वाटते की तुम्ही इथेरियम ब्लॉकचेनवर तुमच्या पहिल्या [स्मार्ट कॉन्ट्रॅक्टसोबत](/developers/docs/smart-contracts/) संवाद साधण्यासाठी आणि [तैनात करण्यासाठी](/developers/docs/smart-contracts/deploying/) आमच्याइतकेच उत्सुक आहात. + +काळजी करू नका, कारण हा आपला पहिला स्मार्ट कॉन्ट्रॅक्ट आहे, आम्ही तो [स्थानिक चाचणी नेटवर्कवर](/developers/docs/networks/) तैनात करू, त्यामुळे तुम्हाला तो तैनात करण्यासाठी आणि त्याच्यासोबत हवा तितका खेळण्यासाठी काहीही खर्च येणार नाही. + +## आपला कॉन्ट्रॅक्ट लिहिणे {#writing-our-contract} + +पहिली पायरी म्हणजे [Remix ला भेट देणे](https://remix.ethereum.org/) आणि एक नवीन फाईल तयार करणे. Remix इंटरफेसच्या वरच्या डाव्या भागात एक नवीन फाईल जोडा आणि तुम्हाला हवं असलेलं फाईल नाव टाका. + +![Remix इंटरफेसमध्ये एक नवीन फाईल जोडणे](./remix.png) + +नवीन फाईलमध्ये, आम्ही खालील कोड पेस्ट करू. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >=0.5.17; + +contract Counter { + + // गणनेची संख्या ठेवण्यासाठी unsigned int प्रकाराचे सार्वजनिक व्हेरिएबल + uint256 public count = 0; + + // आमचा काउंटर वाढवणारे फंक्शन + function increment() public { + count += 1; + } + + // गणनेचे मूल्य मिळवण्यासाठी अनावश्यक गेटर + function getCount() public view returns (uint256) { + return count; + } + +} +``` + +तुम्हाला प्रोग्रामिंगची सवय असल्यास, हा प्रोग्राम काय करतो याचा तुम्ही सहज अंदाज लावू शकता. येथे ओळीनुसार स्पष्टीकरण दिले आहे: + +- ओळ 4: आम्ही `Counter` नावाने एक कॉन्ट्रॅक्ट परिभाषित करतो. +- ओळ 7: आमचा कॉन्ट्रॅक्ट 0 पासून सुरू होणारा `count` नावाचा एक अनसाईंड इंटिजर संग्रहित करतो. +- ओळ 10: पहिले फंक्शन कॉन्ट्रॅक्टच्या स्टेटमध्ये बदल करेल आणि आमचे `count` व्हेरिएबल `increment()` करेल. +- दुसरे फंक्शन फक्त एक गेटर आहे जे स्मार्ट कॉन्ट्रॅक्टच्या बाहेर `count` व्हेरिएबलचे मूल्य वाचण्यास सक्षम करते. लक्षात घ्या की, आम्ही आमचे `count` व्हेरिएबल सार्वजनिक म्हणून परिभाषित केल्यामुळे हे आवश्यक नाही परंतु ते उदाहरण म्हणून दाखवले आहे. + +आमच्या पहिल्या सोप्या स्मार्ट कॉन्ट्रॅक्टसाठी एवढेच आहे. तुम्हाला माहीत असेलच, हे Java किंवा C++ सारख्या OOP (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) भाषांमधील क्लाससारखे दिसते. आता आमच्या कॉन्ट्रॅक्टसोबत खेळण्याची वेळ आली आहे. + +## आपला कॉन्ट्रॅक्ट तैनात करणे {#deploying-our-contract} + +आपण आपला पहिला स्मार्ट कॉन्ट्रॅक्ट लिहिला असल्यामुळे, आता आपण त्याच्यासोबत खेळण्यासाठी तो ब्लॉकचेनवर तैनात करू. + +[ब्लॉकचेनवर स्मार्ट कॉन्ट्रॅक्ट तैनात करणे](/developers/docs/smart-contracts/deploying/) म्हणजे प्रत्यक्षात कोणतेही प्राप्तकर्ते निर्दिष्ट न करता संकलित स्मार्ट कॉन्ट्रॅक्टचा कोड असलेला व्यवहार पाठवणे. + +आपण प्रथम डाव्या बाजूला असलेल्या कंपाइल आयकॉनवर क्लिक करून [कॉन्ट्रॅक्ट कंपाइल करू](/developers/docs/smart-contracts/compiling/): + +![Remix टूलबारमधील कंपाइल आयकॉन](./remix-compile-button.png) + +नंतर कंपाइल बटणावर क्लिक करा: + +![Remix सॉलिडिटी कंपाइलरमधील कंपाइल बटण](./remix-compile.png) + +तुम्ही "ऑटो कंपाइल" पर्याय निवडू शकता जेणेकरून तुम्ही टेक्स्ट एडिटरवर सामग्री सेव्ह करता तेव्हा कॉन्ट्रॅक्ट नेहमी कंपाइल होईल. + +नंतर "तैनात करा आणि व्यवहार चालवा" स्क्रीनवर नेव्हिगेट करा: + +![Remix टूलबारमधील तैनात आयकॉन](./remix-deploy.png) + +एकदा तुम्ही "तैनात करा आणि व्यवहार चालवा" स्क्रीनवर आलात की, तुमच्या कॉन्ट्रॅक्टचे नाव दिसत असल्याची खात्री करा आणि तैनात करा वर क्लिक करा. तुम्ही पृष्ठाच्या शीर्षस्थानी पाहू शकता की, सध्याचे वातावरण "JavaScript VM" आहे, याचा अर्थ असा की जलद आणि कोणत्याही शुल्काशिवाय चाचणी घेण्यासाठी आम्ही स्थानिक चाचणी ब्लॉकचेनवर आपला स्मार्ट कॉन्ट्रॅक्ट तैनात करू आणि त्याच्याशी संवाद साधू. + +![Remix सॉलिडिटी कंपाइलरमधील तैनात बटण](./remix-deploy-button.png) + +एकदा तुम्ही "तैनात करा" बटणावर क्लिक केल्यावर, तुम्हाला तुमचा कॉन्ट्रॅक्ट तळाशी दिसेल. त्याचा विस्तार करण्यासाठी डावीकडील बाणावर क्लिक करा जेणेकरून आम्हाला आमच्या कॉन्ट्रॅक्टची सामग्री दिसेल. हे आमचे व्हेरिएबल `counter`, आमचे `increment()` फंक्शन आणि गेटर `getCounter()` आहे. + +तुम्ही `count` किंवा `getCount` बटणावर क्लिक केल्यास, ते प्रत्यक्षात कॉन्ट्रॅक्टच्या `count` व्हेरिएबलची सामग्री प्राप्त करेल आणि प्रदर्शित करेल. आपण अद्याप `increment` फंक्शनला कॉल केलेला नसल्यामुळे, ते 0 प्रदर्शित करेल. + +![Remix सॉलिडिटी कंपाइलरमधील फंक्शन बटण](./remix-function-button.png) + +आता बटणावर क्लिक करून `increment` फंक्शनला कॉल करूया. तुम्हाला विंडोच्या तळाशी झालेल्या व्यवहारांचे लॉग दिसतील. तुम्ही `increment` बटणाऐवजी डेटा पुनर्प्राप्त करण्यासाठी बटण दाबत असाल तेव्हा लॉग वेगळे असल्याचे तुम्हाला दिसेल. कारण ब्लॉकचेनवर डेटा वाचण्यासाठी कोणत्याही व्यवहारांची (लिखाण) किंवा शुल्काची आवश्यकता नसते. कारण फक्त ब्लॉकचेनच्या स्टेटमध्ये बदल करण्यासाठी व्यवहार करणे आवश्यक आहे: + +![व्यवहारांचा लॉग](./transaction-log.png) + +आपल्या `increment()` फंक्शनला कॉल करण्यासाठी व्यवहार निर्माण करणारे इंक्रीमेंट बटण दाबल्यानंतर, आपण काउंट किंवा गेटकाउंट बटणावर परत क्लिक केल्यास, आपल्याला आपल्या स्मार्ट कॉन्ट्रॅक्टची नवीन अपडेटेड स्टेट वाचायला मिळेल, ज्यात काउंट व्हेरिएबल 0 पेक्षा मोठे असेल. + +![स्मार्ट कॉन्ट्रॅक्टची नवीन अपडेटेड स्टेट](./updated-state.png) + +पुढील ट्युटोरियलमध्ये, आपण [आपल्या स्मार्ट कॉन्ट्रॅक्टमध्ये इव्हेंट्स कसे जोडू शकता](/developers/tutorials/logging-events-smart-contracts/) हे पाहू. लॉगिंग इव्हेंट्स हा तुमचा स्मार्ट कॉन्ट्रॅक्ट डीबग करण्याचा आणि फंक्शन कॉल करताना काय होत आहे हे समजून घेण्याचा एक सोयीस्कर मार्ग आहे. diff --git a/public/content/translations/mr/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md b/public/content/translations/mr/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md new file mode 100644 index 00000000000..5e53eaf3cfc --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/develop-and-test-dapps-with-a-multi-client-local-eth-testnet/index.md @@ -0,0 +1,372 @@ +--- +title: "स्थानिक, मल्टी-क्लायंट टेस्टनेटवर dApp कसे विकसित आणि चाचणी करावे" +description: "हे मार्गदर्शक तुम्हाला dApp तैनात आणि चाचणी करण्यासाठी टेस्टनेट वापरण्यापूर्वी, मल्टी-क्लायंट स्थानिक Ethereum टेस्टनेट कसे इन्स्टॅन्शिएट आणि कॉन्फिगर करावे यासाठी मार्गदर्शन करेल." +author: "Tedi Mitiku" +tags: + [ + "क्लायंट्स", + "नोड्स", + "स्मार्ट कॉन्ट्रॅक्ट", + "कंपोझेबिलिटी", + "कन्सेंसस लेयर", + "एक्झिक्यूशन लेयर", + "चाचणी" + ] +skill: intermediate +lang: mr +published: 2023-04-11 +--- + +## प्रस्तावना {#introduction} + +हे मार्गदर्शक तुम्हाला कॉन्फिगर करण्यायोग्य स्थानिक Ethereum टेस्टनेट इन्स्टॅन्शिएट करणे, त्यावर एक स्मार्ट कॉन्ट्रॅक्ट तैनात करणे आणि तुमच्या dApp विरुद्ध चाचण्या चालवण्यासाठी टेस्टनेट वापरण्याच्या प्रक्रियेत मार्गदर्शन करते. हे मार्गदर्शक अशा dApp डेव्हलपर्ससाठी डिझाइन केले आहे ज्यांना लाइव्ह टेस्टनेट किंवा मेननेटवर तैनात करण्यापूर्वी त्यांचे dApps स्थानिक पातळीवर वेगवेगळ्या नेटवर्क कॉन्फिगरेशनवर विकसित आणि चाचणी करायचे आहेत. + +या मार्गदर्शकामध्ये, तुम्ही हे कराल: + +- [Kurtosis](https://www.kurtosis.com/) वापरून [`eth-network-package`](https://github.com/kurtosis-tech/eth-network-package) सह स्थानिक Ethereum टेस्टनेट इन्स्टॅन्शिएट करा, +- dApp कंपाईल, तैनात आणि चाचणी करण्यासाठी तुमचे Hardhat dApp डेव्हलपमेंट एन्व्हायर्नमेंट स्थानिक टेस्टनेटशी कनेक्ट करा, आणि +- विविध नेटवर्क कॉन्फिगरेशनवर डेव्हलपमेंट आणि टेस्टिंग वर्कफ्लो सक्षम करण्यासाठी, नोड्सची संख्या आणि विशिष्ट EL/CL क्लायंट पेअरिंग्ज यासारख्या पॅरामीटर्ससह स्थानिक टेस्टनेट कॉन्फिगर करा. + +### Kurtosis काय आहे? {#what-is-kurtosis} + +[Kurtosis](https://www.kurtosis.com/) ही मल्टी-कंटेनर चाचणी एन्व्हायर्नमेंट कॉन्फिगर करण्यासाठी डिझाइन केलेली एक कंपोझेबल बिल्ड सिस्टीम आहे. हे विशेषतः डेव्हलपर्सना पुनरुत्पादक एन्व्हायर्नमेंट तयार करण्यास सक्षम करते ज्यांना डायनॅमिक सेटअप लॉजिकची आवश्यकता असते, जसे की ब्लॉकचेन टेस्टनेट्स. + +या मार्गदर्शकामध्ये, Kurtosis eth-network-package [`geth`](https://geth.ethereum.org/) एक्झिक्यूशन लेअर (EL) क्लायंट, तसेच [`teku`](https://consensys.io/teku), [`lighthouse`](https://lighthouse.sigmaprime.io/), आणि [`lodestar`](https://lodestar.chainsafe.io/) कन्सेंसस लेअर (CL) क्लायंट्सच्या सपोर्टसह एक स्थानिक Ethereum टेस्टनेट सुरू करतो. हे पॅकेज Hardhat Network, Ganache, आणि Anvil सारख्या फ्रेमवर्कमधील नेटवर्क्ससाठी एक कॉन्फिगर करण्यायोग्य आणि कंपोझेबल पर्याय म्हणून काम करते. Kurtosis डेव्हलपर्सना ते वापरत असलेल्या टेस्टनेट्सवर अधिक नियंत्रण आणि लवचिकता देते, आणि हे एक प्रमुख कारण आहे की [Ethereum फाउंडेशनने द मर्जची चाचणी घेण्यासाठी Kurtosis चा वापर केला](https://www.kurtosis.com/blog/testing-the-ethereum-merge) आणि नेटवर्क अपग्रेडच्या चाचणीसाठी त्याचा वापर सुरू ठेवला आहे. + +## Kurtosis सेटअप करणे {#setting-up-kurtosis} + +पुढे जाण्यापूर्वी, तुमच्याकडे हे असल्याची खात्री करा: + +- तुमच्या स्थानिक मशीनवर [डॉकर इंजिन इंस्टॉल आणि सुरू केले आहे](https://docs.kurtosis.com/install/#i-install--start-docker) +- [Kurtosis CLI इंस्टॉल केले आहे](https://docs.kurtosis.com/install#ii-install-the-cli) (किंवा तुमच्याकडे आधीच CLI इंस्टॉल असल्यास, ते नवीनतम रिलीझवर अपग्रेड केले आहे) +- [Node.js](https://nodejs.org/en), [yarn](https://classic.yarnpkg.com/lang/en/docs/install/#mac-stable), आणि [npx](https://www.npmjs.com/package/npx) (तुमच्या dApp एन्व्हायर्नमेंटसाठी) इंस्टॉल केले आहे + +## स्थानिक Ethereum टेस्टनेट इन्स्टॅन्शिएट करणे {#instantiate-testnet} + +स्थानिक Ethereum टेस्टनेट सुरू करण्यासाठी, चालवा: + +```python +kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-package +``` + +टीप: ही कमांड `--enclave` फ्लॅग वापरून तुमच्या नेटवर्कला नाव देते: "local-eth-testnet". + +Kurtosis सूचनांचा अर्थ लावणे, प्रमाणित करणे आणि नंतर कार्यान्वित करण्याचे काम करत असताना पडद्यामागे घेत असलेले टप्पे प्रिंट करेल. शेवटी, तुम्हाला खालीलप्रमाणे दिसणारे आउटपुट दिसेल: + +```python +INFO[2023-04-04T18:09:44-04:00] ====================================================== +INFO[2023-04-04T18:09:44-04:00] || Created enclave: local-eth-testnet || +INFO[2023-04-04T18:09:44-04:00] ====================================================== +Name: local-eth-testnet +UUID: 39372d756ae8 +Status: RUNNING +Creation Time: Tue, 04 Apr 2023 18:09:03 EDT + +========================================= Files Artifacts ========================================= +UUID Name +d4085a064230 cl-genesis-data +1c62cb792e4c el-genesis-data +bd60489b73a7 genesis-generation-config-cl +b2e593fe5228 genesis-generation-config-el +d552a54acf78 geth-prefunded-keys +5f7e661eb838 prysm-password +054e7338bb59 validator-keystore-0 + +========================================== User Services ========================================== +UUID Name Ports Status +e20f129ee0c5 cl-client-0-beacon http: 4000/tcp -> RUNNING + metrics: 5054/tcp -> + tcp-discovery: 9000/tcp -> 127.0.0.1:54263 + udp-discovery: 9000/udp -> 127.0.0.1:60470 +a8b6c926cdb4 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:54267 RUNNING + metrics: 5064/tcp -> +d7b802f623e8 el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:54253 RUNNING + rpc: 8545/tcp -> 127.0.0.1:54251 + tcp-discovery: 30303/tcp -> 127.0.0.1:54254 + udp-discovery: 30303/udp -> 127.0.0.1:53834 + ws: 8546/tcp -> 127.0.0.1:54252 +514a829c0a84 prelaunch-data-generator-1680646157905431468 STOPPED +62bd62d0aa7a prelaunch-data-generator-1680646157915424301 STOPPED +05e9619e0e90 prelaunch-data-generator-1680646157922872635 STOPPED + +``` + +अभिनंदन! तुम्ही Docker वर, एका CL (`lighthouse`) आणि EL क्लायंट (`geth`) सह स्थानिक Ethereum टेस्टनेट इन्स्टॅन्शिएट करण्यासाठी Kurtosis वापरले. + +### पुनरावलोकन {#review-instantiate-testnet} + +या विभागात, तुम्ही एक कमांड कार्यान्वित केली जी Kurtosis [Enclave](https://docs.kurtosis.com/advanced-concepts/enclaves/) मध्ये स्थानिक Ethereum टेस्टनेट सुरू करण्यासाठी GitHub वर दूरस्थपणे होस्ट केलेल्या [`eth-network-package`](https://github.com/kurtosis-tech/eth-network-package) चा वापर करण्यास निर्देशित करते. तुमच्या एन्क्लेव्हमध्ये, तुम्हाला "फाइल आर्टिफॅक्ट्स" आणि "यूझर सर्व्हिसेस" दोन्ही आढळतील. + +तुमच्या एन्क्लेव्हमधील [फाइल आर्टिफॅक्ट्स](https://docs.kurtosis.com/advanced-concepts/files-artifacts/) मध्ये EL आणि CL क्लायंट बूटस्ट्रॅप करण्यासाठी तयार केलेला आणि वापरलेला सर्व डेटा समाविष्ट आहे. हा डेटा या [डॉकर इमेज](https://github.com/ethpandaops/ethereum-genesis-generator) पासून बनवलेल्या `prelaunch-data-generator` सेवेचा वापर करून तयार केला गेला आहे. + +यूझर सर्व्हिसेस तुमच्या एन्क्लेव्हमध्ये कार्यरत असलेल्या सर्व कंटेनराइज्ड सेवा प्रदर्शित करतात. तुमच्या लक्षात येईल की एकच नोड, ज्यामध्ये EL क्लायंट आणि CL क्लायंट दोन्ही आहेत, तयार केला गेला आहे. + +## तुमचे dApp डेव्हलपमेंट एन्व्हायर्नमेंट स्थानिक Ethereum टेस्टनेटशी कनेक्ट करा {#connect-your-dapp} + +### dApp डेव्हलपमेंट एन्व्हायर्नमेंट सेटअप करा {#set-up-dapp-env} + +आता तुमच्याकडे एक चालू स्थानिक टेस्टनेट असल्यामुळे, तुम्ही तुमचा स्थानिक टेस्टनेट वापरण्यासाठी तुमचे dApp डेव्हलपमेंट एन्व्हायर्नमेंट कनेक्ट करू शकता. या मार्गदर्शकामध्ये तुमच्या स्थानिक टेस्टनेटवर एक ब्लॅकजॅक dApp तैनात करण्यासाठी Hardhat फ्रेमवर्कचा वापर केला जाईल. + +तुमचे dApp डेव्हलपमेंट एन्व्हायर्नमेंट सेटअप करण्यासाठी, आमचे सॅम्पल dApp असलेल्या रिपॉझिटरीला क्लोन करा आणि त्याच्या डिपेन्डन्सीज इंस्टॉल करा, चालवा: + +```python +git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarn +``` + +येथे वापरलेल्या [smart-contract-example](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example) फोल्डरमध्ये [Hardhat](https://hardhat.org/) फ्रेमवर्क वापरणाऱ्या dApp डेव्हलपरसाठी एक सामान्य सेटअप आहे: + +- [`contracts/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/contracts) मध्ये ब्लॅकजॅक dApp साठी काही सोपे स्मार्ट कॉन्ट्रॅक्ट्स आहेत +- [`scripts/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/scripts) मध्ये तुमच्या स्थानिक Ethereum नेटवर्कवर टोकन कॉन्ट्रॅक्ट तैनात करण्यासाठी एक स्क्रिप्ट आहे +- [`test/`](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/smart-contract-example/test) मध्ये तुमच्या टोकन कॉन्ट्रॅक्टसाठी एक सोपी .js चाचणी आहे, जी निश्चित करते की आमच्या ब्लॅकजॅक dApp मधील प्रत्येक खेळाडूसाठी 1000 मिंट केले आहेत +- [`hardhat.config.ts`](https://github.com/kurtosis-tech/awesome-kurtosis/blob/main/smart-contract-example/hardhat.config.ts) तुमचा Hardhat सेटअप कॉन्फिगर करते + +### स्थानिक टेस्टनेट वापरण्यासाठी Hardhat कॉन्फिगर करा {#configure-hardhat} + +तुमचे dApp डेव्हलपमेंट एन्व्हायर्नमेंट सेटअप झाल्यावर, तुम्ही आता Kurtosis वापरून तयार केलेला स्थानिक Ethereum टेस्टनेट वापरण्यासाठी Hardhat कनेक्ट कराल. हे पूर्ण करण्यासाठी, तुमच्या `hardhat.config.ts` कॉन्फिग फाइलमधील `localnet` स्ट्रक्टमध्ये `<$YOUR_PORT>` च्या जागी कोणत्याही `el-client-` सेवेच्या rpc uri आउटपुटचा पोर्ट टाका. या नमुना केसमध्ये, पोर्ट `64248` असेल. तुमचा पोर्ट वेगळा असेल. + +`hardhat.config.ts` मधील उदाहरण: + +```js +localnet: { +url: 'http://127.0.0.1:<$YOUR_PORT>',// TODO: $YOUR_PORT च्या जागी ETH नेटवर्क KURTOSIS पॅकेजद्वारे तयार केलेल्या नोड URI चा पोर्ट टाका + +// हे eth-network-package द्वारे तयार केलेल्या प्रीफंडेड टेस्ट अकाउंट्सशी संबंधित प्रायव्हेट की आहेत +// +accounts: [ + "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2", + "48fcc39ae27a0e8bf0274021ae6ebd8fe4a0e12623d61464c498900b28feb567", + "7988b3a148716ff800414935b305436493e1f25237a2a03e5eebc343735e2f31", + "b3c409b6b0b3aa5e65ab2dc1930534608239a478106acf6f3d9178e9f9b00b35", + "df9bb6de5d3dc59595bcaa676397d837ff49441d211878c024eabda2cd067c9f", + "7da08f856b5956d40a72968f93396f6acff17193f013e8053f6fbb6c08c194d6", + ], +}, +``` + +एकदा तुम्ही तुमची फाइल सेव्ह केली की, तुमचे Hardhat dApp डेव्हलपमेंट एन्व्हायर्नमेंट आता तुमच्या स्थानिक Ethereum टेस्टनेटशी कनेक्ट झाले आहे! तुम्ही हे चालवून तुमचा टेस्टनेट कार्यरत असल्याची खात्री करू शकता: + +```python +npx hardhat balances --network localnet +``` + +आउटपुट काहीसे असे दिसेल: + +```python +0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 10000000000000000000000000 +0x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 10000000000000000000000000 +0xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 10000000000000000000000000 +0x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 10000000000000000000000000 +0x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 10000000000000000000000000 +0x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000 +``` + +हे निश्चित करते की Hardhat तुमचा स्थानिक टेस्टनेट वापरत आहे आणि `eth-network-package` द्वारे तयार केलेली प्री-फंडेड अकाउंट्स शोधत आहे. + +### तुमचे dApp स्थानिक पातळीवर तैनात आणि चाचणी करा {#deploy-and-test-dapp} + +dApp डेव्हलपमेंट एन्व्हायर्नमेंट स्थानिक Ethereum टेस्टनेटशी पूर्णपणे कनेक्ट झाल्यावर, तुम्ही आता स्थानिक टेस्टनेट वापरून तुमच्या dApp वर डेव्हलपमेंट आणि टेस्टिंग वर्कफ्लो चालवू शकता. + +`ChipToken.sol` स्मार्ट कॉन्ट्रॅक्ट स्थानिक प्रोटोटाइपिंग आणि डेव्हलपमेंटसाठी कंपाईल आणि तैनात करण्यासाठी, चालवा: + +```python +npx hardhat compile +npx hardhat run scripts/deploy.ts --network localnet +``` + +आउटपुट काहीसे असे दिसेल: + +```python +ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d +``` + +आता तुमच्या स्थानिक dApp वर `simple.js` चाचणी चालवून हे निश्चित करा की आमच्या ब्लॅकजॅक dApp मधील प्रत्येक खेळाडूसाठी 1000 मिंट केले आहेत: + +आउटपुट काहीसे असे दिसेल: + +```python +npx hardhat test --network localnet +``` + +आउटपुट काहीसे असे दिसेल: + +```python +ChipToken + mint + ✔ PLAYER ONE साठी 1000 चिप्स मिंट केले पाहिजेत + + 1 उत्तीर्ण (654ms) +``` + +### पुनरावलोकन {#review-dapp-workflows} + +या टप्प्यावर, तुम्ही आता एक dApp डेव्हलपमेंट एन्व्हायर्नमेंट सेटअप केले आहे, ते Kurtosis द्वारे तयार केलेल्या स्थानिक Ethereum नेटवर्कशी कनेक्ट केले आहे, आणि तुमच्या dApp वर एक सोपी चाचणी कंपाईल, तैनात आणि चालवली आहे. + +आता आपण पाहूया की वेगवेगळ्या नेटवर्क कॉन्फिगरेशनमध्ये आमचे dApps चाचणीसाठी तुम्ही मूळ नेटवर्क कसे कॉन्फिगर करू शकता. + +## स्थानिक Ethereum टेस्टनेट कॉन्फिगर करणे {#configure-testnet} + +### क्लायंट कॉन्फिगरेशन आणि नोड्सची संख्या बदलणे {#configure-client-config-and-num-nodes} + +तुमचा स्थानिक Ethereum टेस्टनेट तुम्ही कोणत्या परिस्थितीत आणि कोणत्या विशिष्ट नेटवर्क कॉन्फिगरेशनवर विकसित किंवा चाचणी करू इच्छिता यावर अवलंबून, वेगवेगळे EL आणि CL क्लायंट पेअर्स तसेच वेगवेगळ्या संख्येने नोड्स वापरण्यासाठी कॉन्फिगर केला जाऊ शकतो. याचा अर्थ, एकदा सेटअप झाल्यावर, तुम्ही एक सानुकूलित स्थानिक टेस्टनेट सुरू करू शकता आणि तेच वर्कफ्लो (तैनाती, चाचण्या, इत्यादी) चालवण्यासाठी त्याचा वापर करू शकता. सर्वकाही अपेक्षेप्रमाणे कार्य करते याची खात्री करण्यासाठी विविध नेटवर्क कॉन्फिगरेशन अंतर्गत. तुम्ही सुधारित करू शकता अशा इतर पॅरामीटर्सबद्दल अधिक जाणून घेण्यासाठी, या लिंकला भेट द्या. + +प्रयत्न करून पहा! तुम्ही एका JSON फाइलद्वारे `eth-network-package` ला विविध कॉन्फिगरेशन पर्याय पास करू शकता. ही नेटवर्क पॅराम्स JSON फाइल विशिष्ट कॉन्फिगरेशन्स प्रदान करते जे Kurtosis स्थानिक Ethereum नेटवर्क सेटअप करण्यासाठी वापरेल. + +डीफॉल्ट कॉन्फिगरेशन फाइल घ्या आणि ती वेगवेगळ्या EL/CL पेअर्ससह तीन नोड्स सुरू करण्यासाठी संपादित करा: + +- नोड 1 `geth`/`lighthouse` सह +- नोड 2 `geth`/`lodestar` सह +- नोड 3 `geth`/`teku` सह + +हे कॉन्फिगरेशन तुमच्या dApp च्या चाचणीसाठी Ethereum नोड अंमलबजावणीचे एक विषम नेटवर्क तयार करते. तुमची कॉन्फिगरेशन फाइल आता अशी दिसली पाहिजे: + +```yaml +{ + "participants": + [ + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "lighthouse", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "lodestar", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + { + "el_client_type": "geth", + "el_client_image": "", + "el_client_log_level": "", + "cl_client_type": "teku", + "cl_client_image": "", + "cl_client_log_level": "", + "beacon_extra_params": [], + "el_extra_params": [], + "validator_extra_params": [], + "builder_network_params": null, + }, + ], + "network_params": + { + "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete", + "num_validator_keys_per_node": 64, + "network_id": "3151908", + "deposit_contract_address": "0x4242424242424242424242424242424242424242", + "seconds_per_slot": 12, + "genesis_delay": 120, + "capella_fork_epoch": 5, + }, +} +``` + +प्रत्येक `participants` स्ट्रक्ट नेटवर्कमधील एका नोडला मॅप करतो, म्हणून 3 `participants` स्ट्रक्ट्स Kurtosis ला तुमच्या नेटवर्कमध्ये 3 नोड्स सुरू करण्यास सांगतील. प्रत्येक `participants` स्ट्रक्ट तुम्हाला त्या विशिष्ट नोडसाठी वापरलेली EL आणि CL जोडी निर्दिष्ट करण्याची परवानगी देईल. + +`network_params` स्ट्रक्ट नेटवर्क सेटिंग्ज कॉन्फिगर करतो ज्या प्रत्येक नोडसाठी जेनेसिस फाइल्स तयार करण्यासाठी वापरल्या जातात, तसेच नेटवर्कच्या प्रति स्लॉट सेकंद यासारख्या इतर सेटिंग्ज. + +तुमची संपादित पॅराम्स फाइल तुम्हाला पाहिजे त्या डिरेक्टरीमध्ये सेव्ह करा (खालील उदाहरणात, ती डेस्कटॉपवर सेव्ह केली आहे) आणि नंतर तुमचे Kurtosis पॅकेज चालवण्यासाठी खालील कमांड चालवून त्याचा वापर करा: + +```python +kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package "$(cat ~/eth-network-params.json)" +``` + +टीप: `kurtosis clean -a` कमांड येथे Kurtosis ला नवीन टेस्टनेट सुरू करण्यापूर्वी जुने टेस्टनेट आणि त्यातील सामग्री नष्ट करण्याचा निर्देश देण्यासाठी वापरली आहे. + +पुन्हा, Kurtosis थोडा वेळ काम करेल आणि होत असलेले वैयक्तिक टप्पे प्रिंट करेल. अखेरीस, आउटपुट काहीसे असे दिसेल: + +```python +Starlark कोड यशस्वीरित्या चालला. कोणतेही आउटपुट परत आले नाही. +INFO[2023-04-07T11:43:16-04:00] ========================================================== +INFO[2023-04-07T11:43:16-04:00] || Created enclave: local-eth-testnet || +INFO[2023-04-07T11:43:16-04:00] ========================================================== +Name: local-eth-testnet +UUID: bef8c192008e +Status: RUNNING +Creation Time: Fri, 07 Apr 2023 11:41:58 EDT + +========================================= Files Artifacts ========================================= +UUID Name +cc495a8e364a cl-genesis-data +7033fcdb5471 el-genesis-data +a3aef43fc738 genesis-generation-config-cl +8e968005fc9d genesis-generation-config-el +3182cca9d3cd geth-prefunded-keys +8421166e234f prysm-password +d9e6e8d44d99 validator-keystore-0 +23f5ba517394 validator-keystore-1 +4d28dea40b5c validator-keystore-2 + +========================================== User Services ========================================== +UUID Name Ports Status +485e6fde55ae cl-client-0-beacon http: 4000/tcp -> http://127.0.0.1:65010 RUNNING + metrics: 5054/tcp -> http://127.0.0.1:65011 + tcp-discovery: 9000/tcp -> 127.0.0.1:65012 + udp-discovery: 9000/udp -> 127.0.0.1:54455 +73739bd158b2 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:65016 RUNNING + metrics: 5064/tcp -> http://127.0.0.1:65017 +1b0a233cd011 cl-client-1-beacon http: 4000/tcp -> 127.0.0.1:65021 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65023 + tcp-discovery: 9000/tcp -> 127.0.0.1:65024 + udp-discovery: 9000/udp -> 127.0.0.1:56031 + validator-metrics: 5064/tcp -> 127.0.0.1:65022 +949b8220cd53 cl-client-1-validator http: 4000/tcp -> 127.0.0.1:65028 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65030 + tcp-discovery: 9000/tcp -> 127.0.0.1:65031 + udp-discovery: 9000/udp -> 127.0.0.1:60784 + validator-metrics: 5064/tcp -> 127.0.0.1:65029 +c34417bea5fa cl-client-2 http: 4000/tcp -> 127.0.0.1:65037 RUNNING + metrics: 8008/tcp -> 127.0.0.1:65035 + tcp-discovery: 9000/tcp -> 127.0.0.1:65036 + udp-discovery: 9000/udp -> 127.0.0.1:63581 +e19738e6329d el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:64986 RUNNING + rpc: 8545/tcp -> 127.0.0.1:64988 + tcp-discovery: 30303/tcp -> 127.0.0.1:64987 + udp-discovery: 30303/udp -> 127.0.0.1:55706 + ws: 8546/tcp -> 127.0.0.1:64989 +e904687449d9 el-client-1 engine-rpc: 8551/tcp -> 127.0.0.1:64993 RUNNING + rpc: 8545/tcp -> 127.0.0.1:64995 + tcp-discovery: 30303/tcp -> 127.0.0.1:64994 + udp-discovery: 30303/udp -> 127.0.0.1:58096 + ws: 8546/tcp -> 127.0.0.1:64996 +ad6f401126fa el-client-2 engine-rpc: 8551/tcp -> 127.0.0.1:65003 RUNNING + rpc: 8545/tcp -> 127.0.0.1:65001 + tcp-discovery: 30303/tcp -> 127.0.0.1:65000 + udp-discovery: 30303/udp -> 127.0.0.1:57269 + ws: 8546/tcp -> 127.0.0.1:65002 +12d04a9dbb69 prelaunch-data-generator-1680882122181135513 STOPPED +5b45f9c0504b prelaunch-data-generator-1680882122192182847 STOPPED +3d4aaa75e218 prelaunch-data-generator-1680882122201668972 STOPPED +``` + +अभिनंदन! तुम्ही तुमचे स्थानिक टेस्टनेट 1 ऐवजी 3 नोड्स ठेवण्यासाठी यशस्वीरित्या कॉन्फिगर केले आहे. तुमच्या dApp वर तुम्ही पूर्वी केलेले तेच वर्कफ्लो (तैनात आणि चाचणी) चालवण्यासाठी, तुमच्या `hardhat.config.ts` कॉन्फिग फाइलमधील `localnet` स्ट्रक्टमध्ये `<$YOUR_PORT>` च्या जागी तुमच्या नवीन, 3-नोड स्थानिक टेस्टनेटमधील कोणत्याही `el-client-` सेवेच्या rpc uri आउटपुटचा पोर्ट टाकून आम्ही पूर्वी केलेल्या त्याच क्रिया करा. + +## निष्कर्ष {#conclusion} + +आणि झाले! या छोट्या मार्गदर्शकाचा सारांश, तुम्ही: + +- Kurtosis वापरून Docker वर एक स्थानिक Ethereum टेस्टनेट तयार केले +- तुमचे स्थानिक dApp डेव्हलपमेंट एन्व्हायर्नमेंट स्थानिक Ethereum नेटवर्कशी कनेक्ट केले +- स्थानिक Ethereum नेटवर्कवर एक dApp तैनात केले आणि त्यावर एक सोपी चाचणी चालवली +- मूळ Ethereum नेटवर्कला 3 नोड्स ठेवण्यासाठी कॉन्फिगर केले + +तुमच्यासाठी काय चांगले झाले, काय सुधारले जाऊ शकते, यावर आम्हाला तुमच्याकडून ऐकायला आवडेल, किंवा तुमच्या कोणत्याही प्रश्नांची उत्तरे द्यायला आवडेल. [GitHub](https://github.com/kurtosis-tech/kurtosis/issues/new/choose) द्वारे किंवा [आम्हाला ईमेल करा](mailto:feedback@kurtosistech.com) यावर संपर्क साधण्यास संकोच करू नका! + +### इतर उदाहरणे आणि मार्गदर्शक {#other-examples-guides} + +आम्ही तुम्हाला आमचे [क्विकस्टार्ट](https://docs.kurtosis.com/quickstart) (जिथे तुम्ही एक Postgres डेटाबेस आणि API तयार कराल) आणि आमच्या [awesome-kurtosis रिपॉझिटरी](https://github.com/kurtosis-tech/awesome-kurtosis) मधील आमची इतर उदाहरणे तपासण्यासाठी प्रोत्साहित करतो, जिथे तुम्हाला काही उत्तम उदाहरणे मिळतील, ज्यात यांसाठी पॅकेजेस आहेत: + +- [तेच स्थानिक Ethereum टेस्टनेट सुरू करणे](https://github.com/kurtosis-tech/eth2-package), परंतु ट्रान्झॅक्शन स्पॅमर (ट्रान्झॅक्शन सिम्युलेट करण्यासाठी), एक फोर्क मॉनिटर, आणि एक कनेक्टेड Grafana आणि Prometheus इन्स्टन्स यासारख्या अतिरिक्त सेवा कनेक्ट केलेल्या. +- त्याच स्थानिक Ethereum नेटवर्कवर [सब-नेटवर्किंग चाचणी](https://github.com/kurtosis-tech/awesome-kurtosis/tree/main/ethereum-network-partition-test) करणे diff --git a/public/content/translations/mr/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md b/public/content/translations/mr/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md new file mode 100644 index 00000000000..b45c9e7f91e --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/downsizing-contracts-to-fight-the-contract-size-limit/index.md @@ -0,0 +1,144 @@ +--- +title: "कंत्राटाच्या आकाराच्या मर्यादेला सामोरे जाण्यासाठी कंत्राटे लहान करणे" +description: "तुमचे स्मार्ट कंत्राट खूप मोठे होण्यापासून रोखण्यासाठी तुम्ही काय करू शकता?" +author: Markus Waas +lang: mr +tags: [ "सॉलिडिटी", "स्मार्ट कॉन्ट्रॅक्ट", "स्टोरेज" ] +skill: intermediate +published: 2020-06-26 +source: soliditydeveloper.com +sourceUrl: https://soliditydeveloper.com/max-contract-size +--- + +## मर्यादा का आहे? {#why-is-there-a-limit} + +[22 नोव्हेंबर, 2016](https://blog.ethereum.org/2016/11/18/hard-fork-no-4-spurious-dragon/) रोजी Spurious Dragon हार्ड-फोर्कने [EIP-170](https://eips.ethereum.org/EIPS/eip-170) सादर केले, ज्याने 24.576 kb ची स्मार्ट कंत्राट आकार मर्यादा जोडली. एक Solidity विकसक म्हणून तुमच्यासाठी याचा अर्थ असा आहे की, जेव्हा तुम्ही तुमच्या कंत्राटात अधिकाधिक कार्यक्षमता जोडता, तेव्हा एका क्षणी तुम्ही मर्यादेपर्यंत पोहोचता आणि तैनात करताना तुम्हाला खालील त्रुटी दिसेल: + +`चेतावणी: कंत्राट कोडचा आकार 24576 बाइट्सपेक्षा जास्त आहे (Spurious Dragon मध्ये सादर केलेली मर्यादा). हे कंत्राट कदाचित Mainnet वर तैनात करण्यायोग्य नसेल. ऑप्टिमायझर सक्षम करण्याचा विचार करा (कमी "runs" मूल्यांसह!), रिव्हर्ट स्ट्रिंग बंद करा, किंवा लायब्ररी वापरा.` + +ही मर्यादा डिनायल-ऑफ-सर्व्हिस (DOS) हल्ले रोखण्यासाठी सुरू करण्यात आली. गॅसच्या दृष्टीने कंत्राटाला कोणताही कॉल तुलनेने स्वस्त असतो. तथापि, Ethereum नोड्ससाठी कंत्राट कॉलचा परिणाम, कॉल केलेल्या कंत्राट कोडच्या आकारावर अवलंबून (डिस्कवरून कोड वाचणे, कोडवर पूर्व-प्रक्रिया करणे, मर्केल प्रूफमध्ये डेटा जोडणे) अवाजवी प्रमाणात वाढतो. जेव्हाही अशी परिस्थिती येते की आक्रमणकर्त्याला इतरांसाठी खूप काम निर्माण करण्यासाठी कमी संसाधनांची आवश्यकता असते, तेव्हा DOS हल्ल्यांची शक्यता निर्माण होते. + +मूळतः ही समस्या कमी होती कारण एक नैसर्गिक कंत्राट आकार मर्यादा म्हणजे ब्लॉक गॅस मर्यादा. अर्थात, कंत्राटाचा सर्व बायटकोड असलेल्या व्यवहारामध्ये कंत्राट तैनात करणे आवश्यक आहे. जर तुम्ही तो एकच व्यवहार एका ब्लॉकमध्ये समाविष्ट केला, तर तुम्ही तो सर्व गॅस वापरू शकता, पण तो अमर्याद नाही. [लंडन अपग्रेड](/ethereum-forks/#london) पासून, नेटवर्कच्या मागणीनुसार ब्लॉक गॅस मर्यादा 15M आणि 30M युनिट्स दरम्यान बदलू शकते. + +पुढे आपण त्यांच्या संभाव्य परिणामांनुसार क्रमाने मांडलेल्या काही पद्धती पाहू. याचा विचार वजन कमी करण्याच्या संदर्भात करा. एखाद्याला त्याचे लक्ष्य वजन (आपल्या बाबतीत 24kb) गाठण्यासाठी सर्वोत्तम धोरण म्हणजे प्रथम मोठ्या परिणामांच्या पद्धतींवर लक्ष केंद्रित करणे. बहुतेक प्रकरणांमध्ये फक्त तुमचा आहार सुधारल्याने तुम्ही तिथे पोहोचू शकता, पण कधीकधी तुम्हाला थोडे अधिक काहीतरी करण्याची गरज असते. मग तुम्ही काही व्यायाम (मध्यम परिणाम) किंवा अगदी पूरक आहार (लहान परिणाम) जोडू शकता. + +## मोठा परिणाम {#big-impact} + +### तुमची कंत्राटे वेगळी करा {#separate-your-contracts} + +हा नेहमीच तुमचा पहिला दृष्टिकोन असावा. तुम्ही कंत्राट अनेक लहान कंत्राटांमध्ये कसे वेगळे करू शकता? हे सामान्यतः तुम्हाला तुमच्या कंत्राटांसाठी एक चांगली रचना तयार करण्यास भाग पाडते. कोड वाचनीयतेच्या दृष्टिकोनातून लहान कंत्राटांना नेहमीच प्राधान्य दिले जाते. कंत्राटे विभागण्यासाठी, स्वतःला विचारा: + +- कोणती कार्ये एकत्र आहेत? प्रत्येक कार्यांचा संच त्याच्या स्वतःच्या कंत्राटात सर्वोत्तम असू शकतो. +- कोणत्या कार्यांना कंत्राट स्थिती वाचण्याची किंवा फक्त स्थितीचा एक विशिष्ट उपसंच वाचण्याची आवश्यकता नाही? +- तुम्ही स्टोरेज आणि कार्यक्षमता विभागू शकता का? + +### लायब्ररी {#libraries} + +कार्यक्षमता कोड स्टोरेजपासून दूर हलवण्याचा एक सोपा मार्ग म्हणजे [लायब्ररी](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#libraries) वापरणे. लायब्ररीची कार्ये अंतर्गत म्हणून घोषित करू नका कारण ती संकलनादरम्यान थेट [कंत्राटात जोडली जातील](https://ethereum.stackexchange.com/questions/12975/are-internal-functions-in-libraries-not-covered-by-linking). परंतु जर तुम्ही सार्वजनिक कार्ये वापरली, तर ती प्रत्यक्षात एका वेगळ्या लायब्ररी कंत्राटात असतील. लायब्ररींचा वापर अधिक सोयीस्कर करण्यासाठी [`using for`](https://solidity.readthedocs.io/en/v0.6.10/contracts.html#using-for) चा वापर करण्याचा विचार करा. + +### प्रॉक्सी {#proxies} + +एक अधिक प्रगत धोरण म्हणजे प्रॉक्सी प्रणाली. लायब्ररी पार्श्वभूमीत `DELEGATECALL` वापरतात, जे फक्त कॉल करणाऱ्या कंत्राटाच्या स्थितीसह दुसऱ्या कंत्राटाचे कार्य कार्यान्वित करते. प्रॉक्सी प्रणालींबद्दल अधिक जाणून घेण्यासाठी [हा ब्लॉग पोस्ट](https://hackernoon.com/how-to-make-smart-contracts-upgradable-2612e771d5a2) पहा. त्या तुम्हाला अधिक कार्यक्षमता देतात, उदा., त्या अपग्रेडिबिलिटी सक्षम करतात, परंतु त्या खूप गुंतागुंत देखील वाढवतात. मी त्या फक्त कंत्राटाचा आकार कमी करण्यासाठी जोडणार नाही, जोपर्यंत कोणत्याही कारणास्तव तो तुमचा एकमेव पर्याय नसेल. + +## मध्यम परिणाम {#medium-impact} + +### कार्ये काढा {#remove-functions} + +हे स्पष्ट असले पाहिजे. कार्ये कंत्राटाचा आकार बऱ्यापैकी वाढवतात. + +- **बाह्य**: बऱ्याच वेळा आपण सोयीसाठी अनेक व्ह्यू कार्ये जोडतो. जोपर्यंत तुम्ही आकाराच्या मर्यादेपर्यंत पोहोचत नाही तोपर्यंत ते अगदी ठीक आहे. मग तुम्हाला अत्यंत आवश्यक कार्ये वगळता सर्व काढून टाकण्याचा खरोखर विचार करायला हवा. +- **अंतर्गत**: जोपर्यंत कार्य फक्त एकदाच कॉल केले जाते तोपर्यंत तुम्ही अंतर्गत/खाजगी कार्ये देखील काढू शकता आणि फक्त कोड इनलाइन करू शकता. + +### अतिरिक्त व्हेरिएबल्स टाळा {#avoid-additional-variables} + +```solidity +function get(uint id) returns (address,address) { + MyStruct memory myStruct = myStructs[id]; + return (myStruct.addr1, myStruct.addr2); +} +``` + +```solidity +function get(uint id) returns (address,address) { + return (myStructs[id].addr1, myStructs[id].addr2); +} +``` + +यासारखा एक साधा बदल **0.28kb** चा फरक करतो. तुम्हाला तुमच्या कंत्राटांमध्ये अशा अनेक समान परिस्थिती सापडतील आणि त्या खरोखरच लक्षणीय प्रमाणात भर घालू शकतात. + +### त्रुटी संदेश लहान करा {#shorten-error-message} + +लांब रिव्हर्ट संदेश आणि विशेषतः अनेक भिन्न रिव्हर्ट संदेश कंत्राट फुगवू शकतात. त्याऐवजी लहान त्रुटी कोड वापरा आणि ते तुमच्या कंत्राटात डीकोड करा. एक लांब संदेश खूपच लहान होऊ शकतो: + +```solidity +require(msg.sender == owner, "फक्त या कंत्राटाचा मालक हे कार्य कॉल करू शकतो"); +``` + +```solidity +require(msg.sender == owner, "OW1"); +``` + +### त्रुटी संदेशांऐवजी कस्टम त्रुटी वापरा + +कस्टम त्रुटी [Solidity 0.8.4](https://blog.soliditylang.org/2021/04/21/custom-errors/) मध्ये सादर करण्यात आल्या आहेत. तुमच्या कंत्राटांचा आकार कमी करण्याचा हा एक उत्तम मार्ग आहे, कारण ते निवडक (selectors) म्हणून ABI-एनकोड केलेले आहेत (जसे कार्ये असतात). + +```solidity +error Unauthorized(); + +if (msg.sender != owner) { + revert Unauthorized(); +} +``` + +### ऑप्टिमायझरमध्ये कमी रन मूल्याचा विचार करा {#consider-a-low-run-value-in-the-optimizer} + +तुम्ही ऑप्टिमायझर सेटिंग्ज देखील बदलू शकता. 200 चे डीफॉल्ट मूल्य म्हणजे ते बायटकोडला असे ऑप्टिमाइझ करण्याचा प्रयत्न करत आहे जसे की एखादे कार्य 200 वेळा कॉल केले जाते. जर तुम्ही ते 1 मध्ये बदलले, तर तुम्ही मुळात ऑप्टिमायझरला प्रत्येक कार्य फक्त एकदाच चालवण्याच्या केससाठी ऑप्टिमाइझ करण्यास सांगता. फक्त एकदाच चालण्यासाठी ऑप्टिमाइझ केलेले कार्य म्हणजे ते स्वतःच तैनात करण्यासाठी ऑप्टिमाइझ केलेले आहे. लक्षात ठेवा की **यामुळे कार्ये चालवण्यासाठीचा [गॅस खर्च](/developers/docs/gas/) वाढतो**, त्यामुळे तुम्हाला हे करायचे नसेल. + +## लहान परिणाम {#small-impact} + +### कार्यांना स्ट्रक्ट पास करणे टाळा {#avoid-passing-structs-to-functions} + +जर तुम्ही [ABIEncoderV2](https://solidity.readthedocs.io/en/v0.6.10/layout-of-source-files.html#abiencoderv2) वापरत असाल, तर कार्यांना स्ट्रक्ट पास न करणे उपयुक्त ठरू शकते. पॅरामीटरला स्ट्रक्ट म्हणून पास करण्याऐवजी, आवश्यक पॅरामीटर्स थेट पास करा. या उदाहरणात आपण आणखी **0.1kb** वाचवले. + +```solidity +function get(uint id) returns (address,address) { + return _get(myStruct); +} + +function _get(MyStruct memory myStruct) private view returns(address,address) { + return (myStruct.addr1, myStruct.addr2); +} +``` + +```solidity +function get(uint id) returns(address,address) { + return _get(myStructs[id].addr1, myStructs[id].addr2); +} + +function _get(address addr1, address addr2) private view returns(address,address) { + return (addr1, addr2); +} +``` + +### कार्ये आणि व्हेरिएबल्ससाठी योग्य दृश्यमानता घोषित करा {#declare-correct-visibility-for-functions-and-variables} + +- फक्त बाहेरून कॉल केली जाणारी कार्ये किंवा व्हेरिएबल्स? त्यांना `public` ऐवजी `external` म्हणून घोषित करा. +- फक्त कंत्राटातूनच कॉल केली जाणारी कार्ये किंवा व्हेरिएबल्स? त्यांना `public` ऐवजी `private` किंवा `internal` म्हणून घोषित करा. + +### मॉडिफायर्स काढा {#remove-modifiers} + +मॉडिफायर्स, विशेषतः जेव्हा ते जास्त प्रमाणात वापरले जातात, तेव्हा कंत्राटाच्या आकारावर महत्त्वपूर्ण परिणाम करू शकतात. त्यांना काढण्याचा विचार करा आणि त्याऐवजी कार्ये वापरा. + +```solidity +modifier checkStuff() {} + +function doSomething() checkStuff {} +``` + +```solidity +function checkStuff() private {} + +function doSomething() { checkStuff(); } +``` + +या टिप्स तुम्हाला कंत्राटाचा आकार लक्षणीयरीत्या कमी करण्यास मदत करतील. पुन्हा एकदा, मी हे पुरेसे जोर देऊन सांगू इच्छितो की, सर्वात मोठ्या परिणामासाठी शक्य असल्यास नेहमी कंत्राटे विभागण्यावर लक्ष केंद्रित करा. diff --git a/public/content/translations/mr/developers/tutorials/eip-1271-smart-contract-signatures/index.md b/public/content/translations/mr/developers/tutorials/eip-1271-smart-contract-signatures/index.md new file mode 100644 index 00000000000..29b0329c22d --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/eip-1271-smart-contract-signatures/index.md @@ -0,0 +1,129 @@ +--- +title: "EIP-1271: स्मार्ट कॉन्ट्रॅक्ट सह्यांवर सही करणे आणि त्या सत्यापित करणे" +description: "EIP-1271 सह स्मार्ट कॉन्ट्रॅक्ट सही निर्मिती आणि सत्यापनाचा आढावा. स्मार्ट कॉन्ट्रॅक्ट डेव्हलपर्सना त्यावर आधारित काम करण्यासाठी एक ठोस उदाहरण म्हणून, आम्ही Safe (पूर्वीचे Gnosis Safe) मध्ये वापरलेल्या EIP-1271 अंमलबजावणीचे देखील मार्गदर्शन करतो." +author: Nathan H. Leung +lang: mr +tags: + [ + "eip-1271", + "स्मार्ट कॉन्ट्रॅक्ट", + "सत्यापित करणे", + "सही करणे" + ] +skill: intermediate +published: 2023-01-12 +--- + +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) मानक स्मार्ट कॉन्ट्रॅक्ट्सना सह्या सत्यापित करण्याची परवानगी देते. + +या ट्युटोरियलमध्ये, आम्ही डिजिटल सह्या, EIP-1271 ची पार्श्वभूमी आणि [Safe](https://safe.global/) (पूर्वीचे Gnosis Safe) द्वारे वापरलेल्या EIP-1271 च्या विशिष्ट अंमलबजावणीचा आढावा देतो. एकत्रितपणे, हे तुमच्या स्वतःच्या कॉन्ट्रॅक्टमध्ये EIP-1271 लागू करण्यासाठी एक प्रारंभ बिंदू म्हणून काम करू शकते. + +## सही म्हणजे काय? + +या संदर्भात, सही (अधिक अचूकपणे सांगायचे तर, “डिजिटल सही”) म्हणजे एक संदेश आणि तो संदेश एका विशिष्ट व्यक्ती/प्रेषक/ॲड्रेसकडून आला आहे याचा काही प्रकारचा पुरावा. + +उदाहरणार्थ, डिजिटल सही अशी दिसू शकते: + +1. संदेश: “मला माझ्या Ethereum वॉलेटने या वेबसाइटवर लॉग इन करायचे आहे.” +2. सही करणारा: माझा ॲड्रेस `0x000…` आहे +3. पुरावा: हा काही पुरावा आहे की मी, `0x000…`, हा संपूर्ण संदेश खरोखर तयार केला आहे (हे सहसा काहीतरी क्रिप्टोग्राफिक असते). + +हे लक्षात घेणे महत्त्वाचे आहे की डिजिटल सहीमध्ये "संदेश" आणि "सही" दोन्ही समाविष्ट असतात. + +का? उदाहरणार्थ, जर तुम्ही मला सही करण्यासाठी एखादा कॉन्ट्रॅक्ट दिला आणि मी त्यातील सहीचे पान कापून बाकीच्या कॉन्ट्रॅक्टशिवाय केवळ माझ्या सह्या तुम्हाला परत दिल्या, तर तो कॉन्ट्रॅक्ट वैध ठरणार नाही. + +त्याचप्रमाणे, संबंधित संदेशाशिवाय डिजिटल सहीला काहीही अर्थ नाही! + +## EIP-1271 का अस्तित्वात आहे? + +Ethereum-आधारित ब्लॉकचेनवर वापरण्यासाठी डिजिटल सही तयार करण्याकरिता, तुम्हाला सामान्यतः एका गुप्त प्रायव्हेट की ची आवश्यकता असते, जी इतर कोणालाही माहीत नसते. यामुळेच तुमची सही ही तुमचीच असते (गुप्त की च्या माहितीशिवाय इतर कोणीही तीच सही तयार करू शकत नाही). + +तुमच्या Ethereum अकाउंटशी (म्हणजे, तुमच्या एक्सटर्नली-ओन्ड अकाउंट/EOA) एक प्रायव्हेट की जोडलेली असते, आणि हीच ती प्रायव्हेट की आहे जी सामान्यतः एखादी वेबसाइट किंवा dapp तुम्हाला सहीसाठी विचारते तेव्हा वापरली जाते (उदा., "Ethereum ने लॉग इन करा" साठी). + +एखादे ॲप ethers.js सारख्या थर्ड-पार्टी लायब्ररीचा वापर करून, तुम्ही तयार केलेली [सही सत्यापित करू शकते](https://www.alchemy.com/docs/how-to-verify-a-message-signature-on-ethereum), आणि तेही [तुमची प्रायव्हेट की माहीत नसताना](https://en.wikipedia.org/wiki/Public-key_cryptography), आणि _तुम्हीच_ ती सही तयार केली आहे याची खात्री बाळगू शकते. + +> खरं तर, EOA डिजिटल सह्या पब्लिक-की क्रिप्टोग्राफी वापरत असल्यामुळे, त्या **ऑफचेन** तयार आणि सत्यापित केल्या जाऊ शकतात! गॅसलेस DAO मतदान असेच कार्य करते — ऑनचेन मते सबमिट करण्याऐवजी, क्रिप्टोग्राफिक लायब्ररी वापरून डिजिटल सह्या ऑफचेन तयार आणि सत्यापित केल्या जाऊ शकतात. + +EOA अकाउंट्सकडे प्रायव्हेट की असली तरी, स्मार्ट कॉन्ट्रॅक्ट अकाउंट्सकडे कोणत्याही प्रकारची प्रायव्हेट किंवा गुप्त की नसते (त्यामुळे "Ethereum ने लॉग इन करा", इत्यादी स्मार्ट कॉन्ट्रॅक्ट अकाउंट्ससोबत मूळतः काम करू शकत नाहीत). + +EIP-1271 ज्या समस्येचे निराकरण करण्याचे उद्दिष्ट ठेवते ती ही आहे: जर स्मार्ट कॉन्ट्रॅक्टकडे सहीमध्ये समाविष्ट करण्यासाठी कोणतेही “गुपित” नसेल, तर स्मार्ट कॉन्ट्रॅक्टची सही वैध आहे हे आपण कसे ओळखू शकतो? + +## EIP-1271 कसे कार्य करते? + +स्मार्ट कॉन्ट्रॅक्ट्सकडे प्रायव्हेट की नसतात ज्यांचा वापर संदेशांवर सही करण्यासाठी केला जाऊ शकतो. मग एखादी सही अस्सल आहे की नाही हे आपण कसे ओळखू शकतो? + +तर, एक कल्पना अशी आहे की आपण थेट स्मार्ट कॉन्ट्रॅक्टलाच _विचारू_ शकतो की एखादी सही अस्सल आहे की नाही! + +EIP-1271 हेच करते की, दिलेली सही वैध आहे की नाही हे स्मार्ट कॉन्ट्रॅक्टला “विचारण्याच्या” या कल्पनेला ते प्रमाणित करते. + +EIP-1271 लागू करणाऱ्या कॉन्ट्रॅक्टमध्ये `isValidSignature` नावाचे फंक्शन असणे आवश्यक आहे, जे एक संदेश आणि एक सही इनपुट म्हणून घेते. त्यानंतर कॉन्ट्रॅक्ट काही व्हॅलिडेशन लॉजिक चालवू शकतो (स्पेक येथे काहीही विशिष्ट लागू करत नाही) आणि मग सही वैध आहे की नाही हे दर्शवणारे एक मूल्य परत करू शकतो. + +जर `isValidSignature` ने वैध निकाल परत केला, तर त्याचा अर्थ असा होतो की कॉन्ट्रॅक्ट म्हणत आहे, “होय, मी या सही + संदेशाला मान्यता देतो!” + +### इंटरफेस + +EIP-1271 स्पेक मधील अचूक इंटरफेस येथे आहे (आपण खाली `_hash` पॅरामीटरबद्दल बोलू, पण आतासाठी, त्याचा विचार सत्यापित केला जाणारा संदेश म्हणून करा): + +```jsx +pragma solidity ^0.5.0; + +contract ERC1271 { + + // bytes4(keccak256("isValidSignature(bytes32,bytes)") + bytes4 constant internal MAGICVALUE = 0x1626ba7e; + + /** + * @dev प्रदान केलेली सही, प्रदान केलेल्या हॅशसाठी वैध आहे की नाही हे परत करावे + * @param _hash सही करायच्या डेटाचा हॅश + * @param _signature _hash शी संबंधित सही बाइट ॲरे + * + * फंक्शन पास झाल्यावर bytes4 मॅजिक व्हॅल्यू 0x1626ba7e परत करणे आवश्यक आहे. + * स्टेटमध्ये बदल करणे आवश्यक नाही (solc < 0.5 साठी STATICCALL वापरून, solc > 0.5 साठी व्ह्यू मॉडिफायर वापरून) + * एक्सटर्नल कॉल्सना परवानगी देणे आवश्यक आहे + */ + function isValidSignature( + bytes32 _hash, + bytes memory _signature) + public + view + returns (bytes4 magicValue); +} +``` + +## EIP-1271 अंमलबजावणीचे उदाहरण: Safe + +कॉन्ट्रॅक्ट्स `isValidSignature` अनेक प्रकारे लागू करू शकतात — स्पेक अचूक अंमलबजावणीबद्दल फारसे काही सांगत नाही. + +EIP-1271 लागू करणारा एक उल्लेखनीय कॉन्ट्रॅक्ट म्हणजे Safe (पूर्वीचा Gnosis Safe). + +Safe च्या कोडमध्ये, `isValidSignature` [अंमलात आणले आहे](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol) जेणेकरून सह्या [दोन प्रकारे](https://ethereum.stackexchange.com/questions/122635/signing-messages-as-a-gnosis-safe-eip1271-support) तयार आणि सत्यापित केल्या जाऊ शकतात: + +1. ऑनचेन संदेश + 1. निर्मिती: एक safe मालक संदेशावर “सही” करण्यासाठी एक नवीन safe व्यवहार तयार करतो, आणि संदेशाला डेटा म्हणून त्या व्यवहारात पास करतो. एकदा मल्टिसिग थ्रेशोल्डपर्यंत पोहोचण्यासाठी पुरेसे मालक व्यवहारावर सही करतात, तेव्हा तो व्यवहार प्रसारित केला जातो आणि चालवला जातो. त्या व्यवहारामध्ये, (`signMessage(bytes calldata _data)`) नावाचे एक सेफ फंक्शन आहे जे संदेशाला “मान्यताप्राप्त” संदेशांच्या यादीत जोडते. + 2. सत्यापन: Safe कॉन्ट्रॅक्टवर `isValidSignature` कॉल करा आणि सत्यापित करायचा संदेश हा संदेश पॅरामीटर म्हणून पास करा आणि [सही पॅरामीटरसाठी एक रिकामे मूल्य पास करा](https://github.com/safe-global/safe-contracts/blob/main/contracts/handler/CompatibilityFallbackHandler.sol#L32) (म्हणजे, `0x`). Safe बघेल की सही पॅरामीटर रिकामा आहे आणि सहीचे क्रिप्टोग्राफिकली सत्यापन करण्याऐवजी, तो संदेश “मान्यताप्राप्त” संदेशांच्या यादीत आहे की नाही हे तपासेल. +2. ऑफचेन संदेश: + 1. निर्मिती: एक safe मालक ऑफचेन एक संदेश तयार करतो, आणि मल्टिसिग मान्यता थ्रेशोल्ड पार करण्यासाठी पुरेशा सह्या मिळेपर्यंत इतर safe मालकांकडून त्या संदेशावर वैयक्तिकरित्या सही घेतो. + 2. सत्यापन: `isValidSignature` कॉल करा. संदेश पॅरामीटरमध्ये, सत्यापित करायचा संदेश पास करा. सही पॅरामीटरमध्ये, प्रत्येक safe मालकाच्या वैयक्तिक सह्या एकामागोमाग एक जोडून पास करा. Safe हे तपासेल की थ्रेशोल्ड पूर्ण करण्यासाठी पुरेशा सह्या आहेत **आणि** प्रत्येक सही वैध आहे. तसे असल्यास, ते यशस्वी सही सत्यापनाचे सूचक मूल्य परत करेल. + +## `_hash` पॅरामीटर नेमके काय आहे? संपूर्ण संदेश का पास करू नये? + +तुमच्या लक्षात आले असेल की [EIP-1271 इंटरफेस](https://eips.ethereum.org/EIPS/eip-1271) मधील `isValidSignature` फंक्शन संदेश स्वतः न घेता, त्याऐवजी एक `_hash` पॅरामीटर घेते. याचा अर्थ असा आहे की, `isValidSignature` ला संपूर्ण अनियंत्रित-लांबीचा संदेश पास करण्याऐवजी, आपण त्याऐवजी संदेशाचा ३२-बाइट हॅश (सामान्यतः keccak256) पास करतो. + +calldata च्या प्रत्येक बाइटला — म्हणजे, स्मार्ट कॉन्ट्रॅक्ट फंक्शनला पास केलेल्या फंक्शन पॅरामीटर डेटाला — [१६ गॅस (शून्य बाइट असल्यास ४ गॅस) खर्च येतो](https://eips.ethereum.org/EIPS/eip-2028), त्यामुळे संदेश मोठा असल्यास भरपूर गॅस वाचू शकतो. + +### मागील EIP-1271 स्पेसिफिकेशन्स + +वापरात अशी EIP-1271 स्पेसिफिकेशन्स आहेत ज्यात `isValidSignature` फंक्शन आहे, ज्याचा पहिला पॅरामीटर `bytes` प्रकाराचा (निश्चित-लांबीच्या `bytes32` ऐवजी अनिश्चित-लांबीचा) आहे आणि पॅरामीटरचे नाव `message` आहे. ही EIP-1271 मानकाची [एक जुनी आवृत्ती](https://github.com/safe-global/safe-contracts/issues/391#issuecomment-1075427206) आहे. + +## माझ्या स्वतःच्या कॉन्ट्रॅक्ट्समध्ये EIP-1271 कसे लागू करावे? + +येथे स्पेक खूपच लवचिक आहे. Safe अंमलबजावणीमध्ये काही चांगल्या कल्पना आहेत: + +- तुम्ही कॉन्ट्रॅक्टच्या "मालका"कडून आलेल्या EOA सह्या वैध मानू शकता. +- तुम्ही मान्यताप्राप्त संदेशांची यादी संग्रहित करू शकता आणि केवळ त्यांनाच वैध मानू शकता. + +शेवटी, कॉन्ट्रॅक्ट डेव्हलपर म्हणून हे तुमच्यावर अवलंबून आहे! + +## निष्कर्ष + +[EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) हे एक बहुउपयोगी मानक आहे जे स्मार्ट कॉन्ट्रॅक्ट्सना सह्या सत्यापित करण्याची परवानगी देते. हे स्मार्ट कॉन्ट्रॅक्ट्सना EOA सारखे अधिक वागण्यासाठी मार्ग खुले करते — उदाहरणार्थ, "Ethereum ने लॉग इन करा" ला स्मार्ट कॉन्ट्रॅक्ट्ससोबत काम करण्याचा मार्ग प्रदान करणे — आणि ते अनेक प्रकारे लागू केले जाऊ शकते (Safe कडे विचारात घेण्यासारखी एक गुंतागुंतीची, मनोरंजक अंमलबजावणी आहे). diff --git a/public/content/translations/mr/developers/tutorials/erc-721-vyper-annotated-code/index.md b/public/content/translations/mr/developers/tutorials/erc-721-vyper-annotated-code/index.md new file mode 100644 index 00000000000..e765c3bb84f --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/erc-721-vyper-annotated-code/index.md @@ -0,0 +1,644 @@ +--- +title: "Vyper ERC-721 कॉन्ट्रॅक्ट वॉकथ्रू" +description: "Ryuya Nakamura चे ERC-721 कॉन्ट्रॅक्ट आणि ते कसे कार्य करते" +author: Ori Pomerantz +lang: mr +tags: [ "vyper", "erc-721", "python" ] +skill: beginner +published: 2021-04-01 +--- + +## प्रस्तावना {#introduction} + +[ERC-721](/developers/docs/standards/tokens/erc-721/) मानक हे नॉन-फंजिबल टोकन्स (NFT) ची मालकी ठेवण्यासाठी वापरले जाते. +[ERC-20](/developers/docs/standards/tokens/erc-20/) टोकन्स एका वस्तू (कमोडिटी) सारखे वागतात, कारण वैयक्तिक टोकन्समध्ये काहीही फरक नसतो. +याउलट, ERC-721 टोकन्स अशा मालमत्तेसाठी डिझाइन केलेले आहेत जे समान आहेत परंतु एकसारखे नाहीत, जसे की भिन्न मांजर +कार्टून किंवा रिअल इस्टेटच्या वेगवेगळ्या तुकड्यांची मालकी हक्क. + +या लेखात आपण [Ryuya Nakamura च्या ERC-721 कॉन्ट्रॅक्टचे](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy) विश्लेषण करू. +हे कॉन्ट्रॅक्ट [Vyper](https://vyper.readthedocs.io/en/latest/index.html) मध्ये लिहिलेले आहे, जी एक Python-सारखी कॉन्ट्रॅक्ट भाषा आहे, जी Solidity पेक्षा असुरक्षित कोड लिहिणे अधिक कठीण करण्यासाठी डिझाइन केलेली आहे. + +## कॉन्ट्रॅक्ट {#contract} + +```python +# @dev ERC-721 नॉन-फंजिबल टोकन मानकाची अंमलबजावणी. +# @author Ryuya Nakamura (@nrryuya) +# येथून सुधारित: https://github.com/vyperlang/vyper/blob/de74722bf2d8718cca46902be165f9fe0e3641dd/examples/tokens/ERC721.vy +``` + +Vyper मध्ये, Python प्रमाणेच, कमेंट्स हॅश (`#`) ने सुरू होतात आणि ओळीच्या शेवटपर्यंत चालू राहतात. `@` समाविष्ट असलेल्या कमेंट्स [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) द्वारे मानवासाठी वाचनीय डॉक्युमेंटेशन तयार करण्यासाठी वापरल्या जातात. + +```python +from vyper.interfaces import ERC721 + +implements: ERC721 +``` + +ERC-721 इंटरफेस Vyper भाषेमध्ये अंगभूत आहे. +[तुम्ही कोडची व्याख्या येथे पाहू शकता](https://github.com/vyperlang/vyper/blob/master/vyper/builtin_interfaces/ERC721.py). +इंटरफेसची व्याख्या Vyper ऐवजी Python मध्ये लिहिलेली आहे, कारण इंटरफेस केवळ ब्लॉकचेनमध्येच नव्हे, तर बाह्य क्लायंटकडून ब्लॉकचेनला व्यवहार पाठवताना देखील वापरले जातात, जे Python मध्ये लिहिलेले असू शकतात. + +पहिली ओळ इंटरफेस इम्पोर्ट करते आणि दुसरी ओळ नमूद करते की आम्ही येथे त्याची अंमलबजावणी करत आहोत. + +### ERC721Receiver इंटरफेस {#receiver-interface} + +```python +# safeTransferFrom() द्वारे कॉल केलेल्या कॉन्ट्रॅक्टसाठी इंटरफेस +interface ERC721Receiver: + def onERC721Received( +``` + +ERC-721 दोन प्रकारच्या ट्रान्सफरला समर्थन देते: + +- `transferFrom`, जे प्रेषकाला (sender) कोणतेही डेस्टिनेशन ॲड्रेस निर्दिष्ट करण्याची परवानगी देते आणि हस्तांतरणाची जबाबदारी प्रेषकावर टाकते. याचा अर्थ असा की आपण अवैध ॲड्रेसवर हस्तांतरण करू शकता, अशा परिस्थितीत NFT कायमचा गमावला जातो. +- `safeTransferFrom`, जे डेस्टिनेशन ॲड्रेस हे कॉन्ट्रॅक्ट आहे की नाही हे तपासते. तसे असल्यास, ERC-721 कॉन्ट्रॅक्ट प्राप्त करणाऱ्या कॉन्ट्रॅक्टला विचारतो की त्याला NFT प्राप्त करायचा आहे का. + +`safeTransferFrom` विनंत्यांना उत्तर देण्यासाठी प्राप्त करणाऱ्या कॉन्ट्रॅक्टला `ERC721Receiver` लागू करावे लागते. + +```python + _operator: address, + _from: address, +``` + +`_from` ॲड्रेस हा टोकनचा सध्याचा मालक आहे. `_operator` ॲड्रेस तो आहे ज्याने हस्तांतरणाची विनंती केली (अलाउन्समुळे हे दोघे समान नसतील). + +```python + _tokenId: uint256, +``` + +ERC-721 टोकन आयडी 256 बिटचे असतात. सामान्यतः टोकन ज्याचे प्रतिनिधित्व करते त्याच्या वर्णनाचे हॅशिंग करून ते तयार केले जातात. + +```python + _data: Bytes[1024] +``` + +विनंतीमध्ये 1024 बाइट्सपर्यंत वापरकर्ता डेटा असू शकतो. + +```python + ) -> bytes32: view +``` + +एखादा कॉन्ट्रॅक्ट चुकून हस्तांतरण स्वीकारतो अशा प्रकरणांना टाळण्यासाठी, रिटर्न व्हॅल्यू बुलियन नसते, तर एका विशिष्ट व्हॅल्यूसह 256 बिट्स असते. + +हे फंक्शन एक `view` आहे, याचा अर्थ ते ब्लॉकचेनची स्थिती (state) वाचू शकते, परंतु त्यात बदल करू शकत नाही. + +### इव्हेंट्स {#events} + +[इव्हेंट्स](https://media.consensys.net/technical-introduction-to-events-and-logs-in-ethereum-a074d65dd61e) हे ब्लॉकचेनच्या बाहेरील वापरकर्त्यांना आणि सर्व्हरना इव्हेंट्सबद्दल माहिती देण्यासाठी उत्सर्जित केले जातात. लक्षात घ्या की इव्हेंट्सची सामग्री ब्लॉकचेनवरील कॉन्ट्रॅक्टसाठी उपलब्ध नसते. + +```python +# @dev कोणत्याही NFT ची मालकी कोणत्याही यंत्रणेद्वारे बदलल्यावर उत्सर्जित होते. हा इव्हेंट NFTs +# तयार झाल्यावर (`from` == 0) आणि नष्ट झाल्यावर (`to` == 0) उत्सर्जित होतो. अपवाद: कॉन्ट्रॅक्ट निर्मिती दरम्यान, कितीही +# NFTs ट्रान्सफर उत्सर्जित न करता तयार आणि नियुक्त केले जाऊ शकतात. कोणत्याही +# हस्तांतरणाच्या वेळी, त्या NFT साठी मंजूर केलेला पत्ता (असल्यास) 'काहीही नाही' वर रीसेट केला जातो. +# @param _from NFT चा प्रेषक (पत्ता शून्य असल्यास तो टोकन निर्मिती दर्शवतो). +# @param _to NFT चा प्राप्तकर्ता (पत्ता शून्य असल्यास तो टोकन नष्ट करणे दर्शवतो). +# @param _tokenId हस्तांतरित झालेला NFT. +event Transfer: + sender: indexed(address) + receiver: indexed(address) + tokenId: indexed(uint256) +``` + +हे ERC-20 ट्रान्सफर इव्हेंटसारखेच आहे, फक्त आपण रकमेऐवजी `tokenId` कळवतो. +कोणीही शून्य पत्त्याचा मालक नाही, म्हणून प्रथेनुसार आपण त्याचा वापर टोकनची निर्मिती आणि नाश कळवण्यासाठी करतो. + +```python +# @dev NFT साठी मंजूर केलेला पत्ता बदलला किंवा पुन्हा निश्चित केल्यावर हे उत्सर्जित होते. शून्य +# पत्ता सूचित करतो की कोणताही मंजूर पत्ता नाही. जेव्हा एखादा ट्रान्सफर इव्हेंट उत्सर्जित होतो, तेव्हा हे देखील +# सूचित करते की त्या NFT साठी मंजूर केलेला पत्ता (असल्यास) 'काहीही नाही' वर रीसेट केला जातो. +# @param _owner NFT चा मालक. +# @param _approved आम्ही मंजूर करत असलेला पत्ता. +# @param _tokenId आम्ही मंजूर करत असलेला NFT. +event Approval: + owner: indexed(address) + approved: indexed(address) + tokenId: indexed(uint256) +``` + +ERC-721 मंजुरी ERC-20 अलाउन्स सारखीच आहे. एका विशिष्ट पत्त्याला एक विशिष्ट टोकन हस्तांतरित करण्याची परवानगी दिली जाते. यामुळे करारांना टोकन स्वीकारल्यावर प्रतिसाद देण्यासाठी एक यंत्रणा मिळते. कॉन्ट्रॅक्ट इव्हेंट ऐकू शकत नाहीत, म्हणून जर तुम्ही फक्त त्यांना टोकन हस्तांतरित केले तर त्यांना त्याबद्दल 'माहित' होत नाही. या प्रकारे मालक प्रथम एक मंजुरी सादर करतो आणि नंतर कॉन्ट्रॅक्टला विनंती पाठवतो: 'मी तुम्हाला टोकन X हस्तांतरित करण्यासाठी मंजूर केले आहे, कृपया ... करा'. + +ERC-721 मानकाला ERC-20 मानकासारखे बनवण्यासाठी ही एक डिझाइन निवड आहे. कारण ERC-721 टोकन फंजिबल नाहीत, एक कॉन्ट्रॅक्ट टोकनच्या मालकीकडे पाहून ओळखू शकतो की त्याला एक विशिष्ट टोकन मिळाले आहे. + +```python +# @dev मालकासाठी ऑपरेटर सक्षम किंवा अक्षम केल्यावर हे उत्सर्जित होते. ऑपरेटर +# मालकाच्या सर्व NFTs चे व्यवस्थापन करू शकतो. +# @param _owner NFT चा मालक. +# @param _operator पत्ता ज्यावर आम्ही ऑपरेटर हक्क सेट करत आहोत. +# @param _approved ऑपरेटर हक्कांची स्थिती (ऑपरेटर हक्क दिल्यास 'true' आणि +# रद्द केल्यास 'false'). +event ApprovalForAll: + owner: indexed(address) + operator: indexed(address) + approved: bool +``` + +कधीकधी एक _ऑपरेटर_ असणे उपयुक्त ठरते जो एखाद्या खात्याच्या विशिष्ट प्रकारच्या सर्व टोकनचे व्यवस्थापन करू शकतो (जे विशिष्ट कॉन्ट्रॅक्टद्वारे व्यवस्थापित केले जातात), मुखत्यारपत्राप्रमाणे. उदाहरणार्थ, मला कदाचित अशा कॉन्ट्रॅक्टला अशी शक्ती द्यायची असेल जो तपासतो की मी सहा महिन्यांपासून त्याच्याशी संपर्क साधला आहे की नाही, आणि तसे असल्यास, माझी मालमत्ता माझ्या वारसांना वितरीत करतो (जर त्यापैकी कोणीतरी विचारले, तर कॉन्ट्रॅक्ट व्यवहाराद्वारे कॉल केल्याशिवाय काहीही करू शकत नाहीत). ERC-20 मध्ये आपण फक्त एका वारसा कॉन्ट्रॅक्टला उच्च अलाउन्स देऊ शकतो, परंतु ते ERC-721 साठी काम करत नाही कारण टोकन फंजिबल नाहीत. हे त्याच्या समकक्ष आहे. + +`approved` मूल्य आपल्याला सांगते की इव्हेंट मंजुरीसाठी आहे की मंजुरी मागे घेण्यासाठी आहे. + +### स्टेट व्हेरिएबल्स {#state-vars} + +या व्हेरिएबल्समध्ये टोकनची सध्याची स्थिती असते: कोणते उपलब्ध आहेत आणि त्यांचे मालक कोण आहेत. यापैकी बहुतेक `HashMap` ऑब्जेक्ट्स आहेत, [दोन प्रकारांमध्ये अस्तित्वात असलेले एकदिशीय मॅपिंग](https://vyper.readthedocs.io/en/latest/types.html#mappings). + +```python +# @dev NFT आयडी वरून त्याच्या मालकाच्या पत्त्यावर मॅपिंग. +idToOwner: HashMap[uint256, address] + +# @dev NFT आयडी वरून मंजूर केलेल्या पत्त्यावर मॅपिंग. +idToApprovals: HashMap[uint256, address] +``` + +Ethereum मध्ये वापरकर्ता आणि कॉन्ट्रॅक्ट ओळख 160-बिट पत्त्यांद्वारे दर्शविली जाते. हे दोन व्हेरिएबल्स टोकन आयडी वरून त्यांच्या मालकांना आणि त्यांना हस्तांतरित करण्यास मंजूर असलेल्यांना (प्रत्येकासाठी जास्तीत जास्त एक) मॅप करतात. Ethereum मध्ये, अनइनिशियलाइज्ड डेटा नेहमी शून्य असतो, म्हणून जर मालक किंवा मंजूर हस्तांतरणकर्ता नसेल तर त्या टोकनसाठी मूल्य शून्य असते. + +```python +# @dev मालकाच्या पत्त्यावरून त्याच्या टोकनच्या संख्येवर मॅपिंग. +ownerToNFTokenCount: HashMap[address, uint256] +``` + +हे व्हेरिएबल प्रत्येक मालकासाठी टोकनची संख्या ठेवते. मालकांकडून टोकनपर्यंत कोणतेही मॅपिंग नाही, म्हणून विशिष्ट मालकाचे टोकन ओळखण्याचा एकमेव मार्ग म्हणजे ब्लॉकचेनच्या इव्हेंट इतिहासात मागे पाहणे आणि योग्य `Transfer` इव्हेंट पाहणे. आपल्याकडे सर्व NFTs आहेत आणि आपल्याला वेळेत आणखी मागे पाहण्याची गरज नाही हे जाणून घेण्यासाठी आपण या व्हेरिएबलचा वापर करू शकतो. + +लक्षात घ्या की हा अल्गोरिदम फक्त वापरकर्ता इंटरफेस आणि बाह्य सर्व्हरसाठी काम करतो. ब्लॉकचेनवर चालणारा कोड स्वतः मागील इव्हेंट वाचू शकत नाही. + +```python +# @dev मालकाच्या पत्त्यावरून ऑपरेटर पत्त्यांच्या मॅपिंगवर मॅपिंग. +ownerToOperators: HashMap[address, HashMap[address, bool]] +``` + +एका खात्यात एकापेक्षा जास्त ऑपरेटर असू शकतात. त्यांचा मागोवा ठेवण्यासाठी एक साधे `HashMap` पुरेसे नाही, कारण प्रत्येक की एकाच मूल्याकडे नेते. त्याऐवजी, तुम्ही मूल्य म्हणून `HashMap[address, bool]` वापरू शकता. डीफॉल्टनुसार प्रत्येक पत्त्यासाठी मूल्य `False` असते, याचा अर्थ तो ऑपरेटर नाही. तुम्ही आवश्यकतेनुसार मूल्ये `True` वर सेट करू शकता. + +```python +# @dev मिन्टरचा पत्ता, जो टोकन मिंट करू शकतो +minter: address +``` + +नवीन टोकन कोणत्यातरी प्रकारे तयार करावे लागतात. या कॉन्ट्रॅक्टमध्ये एकच संस्था आहे जिला तसे करण्याची परवानगी आहे, ती म्हणजे `minter`. उदाहरणार्थ, एका खेळासाठी हे पुरेसे असण्याची शक्यता आहे. इतर उद्देशांसाठी, अधिक क्लिष्ट व्यवसाय तर्क तयार करणे आवश्यक असू शकते. + +```python +# @dev इंटरफेस आयडी वरून ते समर्थित आहे की नाही याबद्दलच्या bool वर मॅपिंग +supportedInterfaces: HashMap[bytes32, bool] + +# @dev ERC165 चा ERC165 इंटरफेस आयडी +ERC165_INTERFACE_ID: constant(bytes32) = 0x0000000000000000000000000000000000000000000000000000000001ffc9a7 + +# @dev ERC721 चा ERC165 इंटरफेस आयडी +ERC721_INTERFACE_ID: constant(bytes32) = 0x0000000000000000000000000000000000000000000000000000000080ac58cd +``` + +[ERC-165](https://eips.ethereum.org/EIPS/eip-165) एक यंत्रणा निर्दिष्ट करते ज्याद्वारे कॉन्ट्रॅक्ट उघड करू शकतो की ॲप्लिकेशन्स त्याच्याशी कसे संवाद साधू शकतात, तो कोणत्या ERCs चे पालन करतो. या प्रकरणात, कॉन्ट्रॅक्ट ERC-165 आणि ERC-721 चे पालन करतो. + +### फंक्शन्स {#functions} + +ही ती फंक्शन्स आहेत जी प्रत्यक्षात ERC-721 ची अंमलबजावणी करतात. + +#### कन्स्ट्रक्टर {#constructor} + +```python +@external +def __init__(): +``` + +Vyper मध्ये, Python प्रमाणेच, कन्स्ट्रक्टर फंक्शनला `__init__` म्हणतात. + +```python + """ + @dev कॉन्ट्रॅक्ट कन्स्ट्रक्टर. + """ +``` + +Python मध्ये, आणि Vyper मध्ये, तुम्ही एक मल्टी-लाइन स्ट्रिंग (जी `"""` ने सुरू होते आणि संपते) निर्दिष्ट करून आणि कोणत्याही प्रकारे तिचा वापर न करून देखील एक कमेंट तयार करू शकता. या कमेंट्समध्ये [NatSpec](https://vyper.readthedocs.io/en/latest/natspec.html) देखील समाविष्ट असू शकते. + +```python + self.supportedInterfaces[ERC165_INTERFACE_ID] = True + self.supportedInterfaces[ERC721_INTERFACE_ID] = True + self.minter = msg.sender +``` + +स्टेट व्हेरिएबल्स ऍक्सेस करण्यासाठी तुम्ही `self.` वापरता` (पुन्हा, Python प्रमाणेच). + +#### व्ह्यू फंक्शन्स {#views} + +ही अशी फंक्शन्स आहेत जी ब्लॉकचेनची स्थिती बदलत नाहीत, आणि म्हणून जर त्यांना बाह्यरित्या कॉल केले तर ते विनामूल्य कार्यान्वित केले जाऊ शकतात. जर व्ह्यू फंक्शन्सना कॉन्ट्रॅक्टद्वारे कॉल केले गेले तर त्यांना अजूनही प्रत्येक नोडवर कार्यान्वित करावे लागते आणि म्हणून गॅस खर्च येतो. + +```python +@view +@external +``` + +फंक्शनच्या व्याख्येपूर्वी हे कीवर्ड जे ऍट चिन्हासह (`@`) सुरू होतात, त्यांना _डेकोरेशन्स_ म्हणतात. ते फंक्शन कोणत्या परिस्थितीत कॉल केले जाऊ शकते हे निर्दिष्ट करतात. + +- `@view` निर्दिष्ट करते की हे फंक्शन एक व्ह्यू आहे. +- `@external` निर्दिष्ट करते की हे विशिष्ट फंक्शन व्यवहार आणि इतर कॉन्ट्रॅक्टद्वारे कॉल केले जाऊ शकते. + +```python +def supportsInterface(_interfaceID: bytes32) -> bool: +``` + +Python च्या उलट, Vyper ही एक [स्टॅटिक टाइप केलेली भाषा](https://wikipedia.org/wiki/Type_system#Static_type_checking) आहे. +तुम्ही [डेटा प्रकार](https://vyper.readthedocs.io/en/latest/types.html) ओळखल्याशिवाय व्हेरिएबल किंवा फंक्शन पॅरामीटर घोषित करू शकत नाही. या प्रकरणात इनपुट पॅरामीटर `bytes32` आहे, जे 256-बिट मूल्य आहे (256 बिट्स हे [Ethereum व्हर्च्युअल मशीन](/developers/docs/evm/) चा मूळ शब्द आकार आहे). आउटपुट एक बुलियन मूल्य आहे. प्रथेनुसार, फंक्शन पॅरामीटर्सची नावे अंडरस्कोर (`_`) ने सुरू होतात. + +```python + """ + @dev इंटरफेस ओळख ERC-165 मध्ये निर्दिष्ट आहे. + @param _interfaceID इंटरफेसचा आयडी + """ + return self.supportedInterfaces[_interfaceID] +``` + +`self.supportedInterfaces` HashMap मधून मूल्य परत करा, जे कन्स्ट्रक्टर (`__init__`) मध्ये सेट केलेले आहे. + +```python +### व्ह्यू फंक्शन्स ### + +``` + +ही व्ह्यू फंक्शन्स आहेत जी टोकनबद्दलची माहिती वापरकर्त्यांना आणि इतर कॉन्ट्रॅक्टसना उपलब्ध करून देतात. + +```python +@view +@external +def balanceOf(_owner: address) -> uint256: + """ + @dev `_owner` च्या मालकीच्या NFTs ची संख्या परत करते. + `_owner` शून्य पत्ता असल्यास थ्रो करते. शून्य पत्त्याला नियुक्त केलेले NFTs अवैध मानले जातात. + @param _owner ज्या पत्त्यासाठी बॅलन्सची चौकशी करायची आहे. + """ + assert _owner != ZERO_ADDRESS +``` + +ही ओळ [asserts](https://vyper.readthedocs.io/en/latest/statements.html#assert) करते की `_owner` शून्य नाही. जर ते असेल, तर एक त्रुटी आहे आणि ऑपरेशन परत घेतले जाते. + +```python + return self.ownerToNFTokenCount[_owner] + +@view +@external +def ownerOf(_tokenId: uint256) -> address: + """ + @dev NFT च्या मालकाचा पत्ता परत करते. + `_tokenId` वैध NFT नसल्यास थ्रो करते. + @param _tokenId NFT साठी ओळखकर्ता. + """ + owner: address = self.idToOwner[_tokenId] + # `_tokenId` वैध NFT नसल्यास थ्रो करते + assert owner != ZERO_ADDRESS + return owner +``` + +Ethereum व्हर्च्युअल मशीनमध्ये (evm) कोणतेही स्टोरेज ज्यामध्ये मूल्य संग्रहित नाही ते शून्य असते. +जर `_tokenId` वर कोणतेही टोकन नसेल तर `self.idToOwner[_tokenId]` चे मूल्य शून्य असते. त्या प्रकरणात फंक्शन परत जाते. + +```python +@view +@external +def getApproved(_tokenId: uint256) -> address: + """ + @dev एकाच NFT साठी मंजूर केलेला पत्ता मिळवा. + `_tokenId` वैध NFT नसल्यास थ्रो करते. + @param _tokenId ज्या NFT च्या मंजुरीची चौकशी करायची आहे त्याचा आयडी. + """ + # `_tokenId` वैध NFT नसल्यास थ्रो करते + assert self.idToOwner[_tokenId] != ZERO_ADDRESS + return self.idToApprovals[_tokenId] +``` + +लक्षात घ्या की `getApproved` _शून्य_ परत करू शकते. जर टोकन वैध असेल तर ते `self.idToApprovals[_tokenId]` परत करते. +जर कोणताही मंजूर करणारा नसेल तर ते मूल्य शून्य असते. + +```python +@view +@external +def isApprovedForAll(_owner: address, _operator: address) -> bool: + """ + @dev `_operator` हा `_owner` साठी मंजूर ऑपरेटर आहे की नाही हे तपासते. + @param _owner NFTs चा मालक असलेला पत्ता. + @param _operator मालकाच्या वतीने काम करणारा पत्ता. + """ + return (self.ownerToOperators[_owner])[_operator] +``` + +हे फंक्शन तपासते की `_operator` ला या कॉन्ट्रॅक्टमधील `_owner` च्या सर्व टोकनचे व्यवस्थापन करण्याची परवानगी आहे की नाही. +कारण एकापेक्षा जास्त ऑपरेटर असू शकतात, हे दोन-स्तरीय HashMap आहे. + +#### हस्तांतरण सहाय्यक फंक्शन्स {#transfer-helpers} + +ही फंक्शन्स टोकन हस्तांतरित करण्याच्या किंवा व्यवस्थापित करण्याच्या भागाच्या क्रियांची अंमलबजावणी करतात. + +```python + +### हस्तांतरण फंक्शन सहाय्यक ### + +@view +@internal +``` + +हे डेकोरेशन, `@internal`, याचा अर्थ असा की फंक्शन फक्त त्याच कॉन्ट्रॅक्टमधील इतर फंक्शन्समधूनच ऍक्सेसिबल आहे. प्रथेनुसार, या फंक्शनची नावे देखील अंडरस्कोर (`_`) ने सुरू होतात. + +```python +def _isApprovedOrOwner(_spender: address, _tokenId: uint256) -> bool: + """ + @dev दिलेला स्पेंडर दिलेला टोकन आयडी हस्तांतरित करू शकतो की नाही हे परत करते + @param spender चौकशी करण्यासाठी स्पेंडरचा पत्ता + @param tokenId हस्तांतरित करायच्या टोकनचा uint256 आयडी + @return bool msg.sender दिलेल्या टोकन आयडीसाठी मंजूर आहे की नाही, + मालकाचा ऑपरेटर आहे की नाही, किंवा टोकनचा मालक आहे की नाही + """ + owner: address = self.idToOwner[_tokenId] + spenderIsOwner: bool = owner == _spender + spenderIsApproved: bool = _spender == self.idToApprovals[_tokenId] + spenderIsApprovedForAll: bool = (self.ownerToOperators[owner])[_spender] + return (spenderIsOwner or spenderIsApproved) or spenderIsApprovedForAll +``` + +एका पत्त्याला टोकन हस्तांतरित करण्याची परवानगी देण्याचे तीन मार्ग आहेत: + +1. पत्ता टोकनचा मालक आहे +2. ते टोकन खर्च करण्यासाठी पत्त्याला मंजुरी आहे +3. पत्ता टोकनच्या मालकासाठी एक ऑपरेटर आहे + +वरील फंक्शन एक व्ह्यू असू शकते कारण ते स्थिती बदलत नाही. कार्य खर्च कमी करण्यासाठी, जे कोणतेही फंक्शन _व्ह्यू_ असू शकते ते _व्ह्यू_ असले पाहिजे. + +```python +@internal +def _addTokenTo(_to: address, _tokenId: uint256): + """ + @dev दिलेल्या पत्त्यावर NFT जोडा + `_tokenId` कोणाच्यातरी मालकीचा असल्यास थ्रो करते. + """ + # `_tokenId` कोणाच्यातरी मालकीचा असल्यास थ्रो करते + assert self.idToOwner[_tokenId] == ZERO_ADDRESS + # मालक बदला + self.idToOwner[_tokenId] = _to + # गणना ट्रॅकिंग बदला + self.ownerToNFTokenCount[_to] += 1 + + +@internal +def _removeTokenFrom(_from: address, _tokenId: uint256): + """ + @dev दिलेल्या पत्त्यावरून NFT काढा + `_from` सध्याचा मालक नसल्यास थ्रो करते. + """ + # `_from` सध्याचा मालक नसल्यास थ्रो करते + assert self.idToOwner[_tokenId] == _from + # मालक बदला + self.idToOwner[_tokenId] = ZERO_ADDRESS + # गणना ट्रॅकिंग बदला + self.ownerToNFTokenCount[_from] -= 1 +``` + +जेव्हा हस्तांतरणामध्ये समस्या येते तेव्हा आम्ही कॉल परत घेतो. + +```python +@internal +def _clearApproval(_owner: address, _tokenId: uint256): + """ + @dev दिलेल्या पत्त्याची मंजुरी साफ करा + `_owner` सध्याचा मालक नसल्यास थ्रो करते. + """ + # `_owner` सध्याचा मालक नसल्यास थ्रो करते + assert self.idToOwner[_tokenId] == _owner + if self.idToApprovals[_tokenId] != ZERO_ADDRESS: + # मंजुरी रीसेट करा + self.idToApprovals[_tokenId] = ZERO_ADDRESS +``` + +आवश्यक असल्यास फक्त मूल्य बदला. स्टेट व्हेरिएबल्स स्टोरेजमध्ये राहतात. स्टोरेजमध्ये लिहिणे ही EVM (Ethereum व्हर्च्युअल मशीन) च्या सर्वात महागड्या क्रियांपैकी एक आहे ([gas](/developers/docs/gas/) च्या बाबतीत). म्हणून, ते कमी करणे ही एक चांगली कल्पना आहे, अगदी विद्यमान मूल्य लिहिण्याचा खर्चही जास्त आहे. + +```python +@internal +def _transferFrom(_from: address, _to: address, _tokenId: uint256, _sender: address): + """ + @dev NFT चे हस्तांतरण कार्यान्वित करा. + `msg.sender` सध्याचा मालक, अधिकृत ऑपरेटर किंवा या NFT साठी मंजूर + पत्ता नसल्यास थ्रो करते. (टीप: खाजगी फंक्शनमध्ये `msg.sender` ला परवानगी नाही म्हणून `_sender` पास करा.) + `_to` शून्य पत्ता असल्यास थ्रो करते. + `_from` सध्याचा मालक नसल्यास थ्रो करते. + `_tokenId` वैध NFT नसल्यास थ्रो करते. + """ +``` + +आपल्याकडे हे अंतर्गत फंक्शन आहे कारण टोकन हस्तांतरित करण्याचे दोन मार्ग आहेत (नियमित आणि सुरक्षित), परंतु आम्हाला कोडमध्ये फक्त एकच स्थान हवे आहे जेथे आपण ते करतो जेणेकरून ऑडिट करणे सोपे होईल. + +```python + # आवश्यकता तपासा + assert self._isApprovedOrOwner(_sender, _tokenId) + # `_to` शून्य पत्ता असल्यास थ्रो करते + assert _to != ZERO_ADDRESS + # मंजुरी साफ करा. `_from` सध्याचा मालक नसल्यास थ्रो करते + self._clearApproval(_from, _tokenId) + # NFT काढा. `_tokenId` वैध NFT नसल्यास थ्रो करते + self._removeTokenFrom(_from, _tokenId) + # NFT जोडा + self._addTokenTo(_to, _tokenId) + # हस्तांतरण लॉग करा + log Transfer(_from, _to, _tokenId) +``` + +Vyper मध्ये इव्हेंट उत्सर्जित करण्यासाठी तुम्ही `log` स्टेटमेंट वापरता ([अधिक तपशिलांसाठी येथे पहा](https://vyper.readthedocs.io/en/latest/event-logging.html#event-logging)). + +#### हस्तांतरण फंक्शन्स {#transfer-funs} + +```python + +### हस्तांतरण फंक्शन्स ### + +@external +def transferFrom(_from: address, _to: address, _tokenId: uint256): + """ + @dev `msg.sender` सध्याचा मालक, अधिकृत ऑपरेटर किंवा या NFT साठी मंजूर + पत्ता नसल्यास थ्रो करते. + `_from` सध्याचा मालक नसल्यास थ्रो करते. + `_to` शून्य पत्ता असल्यास थ्रो करते. + `_tokenId` वैध NFT नसल्यास थ्रो करते. + @notice `_to` NFTs प्राप्त करण्यास सक्षम आहे याची पुष्टी करण्याची जबाबदारी कॉलरची आहे अन्यथा + ते कायमचे गमावले जाऊ शकतात. + @param _from NFT चा सध्याचा मालक. + @param _to नवीन मालक. + @param _tokenId हस्तांतरित करायचा NFT. + """ + self._transferFrom(_from, _to, _tokenId, msg.sender) +``` + +हे फंक्शन तुम्हाला एका अनियंत्रित पत्त्यावर हस्तांतरित करण्याची परवानगी देते. जोपर्यंत पत्ता वापरकर्त्याचा किंवा टोकन कसे हस्तांतरित करायचे हे जाणणाऱ्या कॉन्ट्रॅक्टचा नसेल, तोपर्यंत तुम्ही हस्तांतरित केलेले कोणतेही टोकन त्या पत्त्यात अडकून निरुपयोगी होईल. + +```python +@external +def safeTransferFrom( + _from: address, + _to: address, + _tokenId: uint256, + _data: Bytes[1024]=b"" + ): + """ + @dev एका पत्त्यावरून दुसऱ्या पत्त्यावर NFT ची मालकी हस्तांतरित करते. + `msg.sender` सध्याचा मालक, अधिकृत ऑपरेटर किंवा या NFT साठी मंजूर + पत्ता नसल्यास थ्रो करते. + `_from` सध्याचा मालक नसल्यास थ्रो करते. + `_to` शून्य पत्ता असल्यास थ्रो करते. + `_tokenId` वैध NFT नसल्यास थ्रो करते. + जर `_to` एक स्मार्ट कॉन्ट्रॅक्ट असेल, तर ते `_to` वर `onERC721Received` कॉल करते आणि + परत आलेले मूल्य `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` नसल्यास थ्रो करते. + टीप: bytes4 पॅडिंगसह bytes32 द्वारे दर्शविले जाते + @param _from NFT चा सध्याचा मालक. + @param _to नवीन मालक. + @param _tokenId हस्तांतरित करायचा NFT. + @param _data कोणताही निर्दिष्ट स्वरूप नसलेला अतिरिक्त डेटा, `_to` ला कॉलमध्ये पाठवला जातो. + """ + self._transferFrom(_from, _to, _tokenId, msg.sender) +``` + +प्रथम हस्तांतरण करणे ठीक आहे कारण जर काही समस्या आली तर आपण तरीही परत घेणार आहोत, त्यामुळे कॉलमध्ये केलेले सर्वकाही रद्द होईल. + +```python + if _to.is_contract: # `_to` हा कॉन्ट्रॅक्ट पत्ता आहे की नाही हे तपासा +``` + +प्रथम पत्ता कॉन्ट्रॅक्ट आहे की नाही हे तपासा (त्यात कोड आहे का). नसल्यास, तो वापरकर्त्याचा पत्ता आहे असे समजा आणि वापरकर्ता टोकन वापरू शकेल किंवा हस्तांतरित करू शकेल. पण ते तुम्हाला खोट्या सुरक्षिततेच्या भावनेत अडकू देऊ नका. तुम्ही टोकन गमावू शकता, अगदी `safeTransferFrom` सह देखील, जर तुम्ही त्यांना अशा पत्त्यावर हस्तांतरित केले ज्याची खाजगी की कोणालाही माहित नाही. + +```python + returnValue: bytes32 = ERC721Receiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data) +``` + +लक्ष्य कॉन्ट्रॅक्टला ERC-721 टोकन प्राप्त करू शकतो की नाही हे पाहण्यासाठी कॉल करा. + +```python +# हस्तांतरणाचे गंतव्यस्थान असा कॉन्ट्रॅक्ट असल्यास जो 'onERC721Received' लागू करत नाही, तर थ्रो करते + assert returnValue == method_id("onERC721Received(address,address,uint256,bytes)", output_type=bytes32) +``` + +जर गंतव्यस्थान एक कॉन्ट्रॅक्ट असेल, परंतु जो ERC-721 टोकन स्वीकारत नाही (किंवा ज्याने हे विशिष्ट हस्तांतरण न स्वीकारण्याचा निर्णय घेतला आहे), तर परत घ्या. + +```python +@external +def approve(_approved: address, _tokenId: uint256): + """ + @dev NFT साठी मंजूर केलेला पत्ता सेट करा किंवा पुन्हा निश्चित करा. शून्य पत्ता सूचित करतो की कोणताही मंजूर पत्ता नाही. + `msg.sender` सध्याचा NFT मालक किंवा सध्याच्या मालकाचा अधिकृत ऑपरेटर नसल्यास थ्रो करते. + `_tokenId` वैध NFT नसल्यास थ्रो करते. (टीप: हे EIP मध्ये लिहिलेले नाही) + `_approved` सध्याचा मालक असल्यास थ्रो करते. (टीप: हे EIP मध्ये लिहिलेले नाही) + @param _approved दिलेल्या NFT आयडीसाठी मंजूर करायचा पत्ता. + @param _tokenId मंजूर करायच्या टोकनचा आयडी. + """ + owner: address = self.idToOwner[_tokenId] + # `_tokenId` वैध NFT नसल्यास थ्रो करते + assert owner != ZERO_ADDRESS + # `_approved` सध्याचा मालक असल्यास थ्रो करते + assert _approved != owner +``` + +प्रथेनुसार, जर तुम्हाला मंजूर करणारा नको असेल तर तुम्ही शून्य पत्ता नियुक्त करता, स्वतःला नाही. + +```python + # आवश्यकता तपासा + senderIsOwner: bool = self.idToOwner[_tokenId] == msg.sender + senderIsApprovedForAll: bool = (self.ownerToOperators[owner])[msg.sender] + assert (senderIsOwner or senderIsApprovedForAll) +``` + +मंजुरी सेट करण्यासाठी तुम्ही एकतर मालक असू शकता किंवा मालकाने अधिकृत केलेला ऑपरेटर असू शकता. + +```python + # मंजुरी सेट करा + self.idToApprovals[_tokenId] = _approved + log Approval(owner, _approved, _tokenId) + + +@external +def setApprovalForAll(_operator: address, _approved: bool): + """ + @dev तृतीय पक्षासाठी ('ऑपरेटर') `msg.sender` च्या सर्व मालमत्तेचे व्यवस्थापन + करण्यासाठी मंजुरी सक्षम किंवा अक्षम करते. हे ApprovalForAll इव्हेंट देखील उत्सर्जित करते. + `_operator` हा `msg.sender` असल्यास थ्रो करते. (टीप: हे EIP मध्ये लिहिलेले नाही) + @notice प्रेषकाकडे त्यावेळी कोणतेही टोकन नसले तरीही हे काम करते. + @param _operator अधिकृत ऑपरेटर्सच्या सेटमध्ये जोडायचा पत्ता. + @param _approved ऑपरेटर मंजूर असल्यास True, मंजुरी रद्द करण्यासाठी false. + """ + # `_operator` हा `msg.sender` असल्यास थ्रो करते + assert _operator != msg.sender + self.ownerToOperators[msg.sender][_operator] = _approved + log ApprovalForAll(msg.sender, _operator, _approved) +``` + +#### नवीन टोकन मिंट करणे आणि विद्यमान टोकन नष्ट करणे {#mint-burn} + +ज्या खात्याने कॉन्ट्रॅक्ट तयार केले आहे तो `minter` आहे, जो नवीन NFTs मिंट करण्यासाठी अधिकृत सुपर वापरकर्ता आहे. तथापि, त्यालाही विद्यमान टोकन बर्न करण्याची परवानगी नाही. फक्त मालक, किंवा मालकाने अधिकृत केलेली संस्था, ते करू शकते. + +```python +### मिंट आणि बर्न फंक्शन्स ### + +@external +def mint(_to: address, _tokenId: uint256) -> bool: +``` + +हे फंक्शन नेहमी `True` परत करते, कारण जर ऑपरेशन अयशस्वी झाले तर ते परत घेतले जाते. + +```python + """ + @dev टोकन मिंट करण्यासाठी फंक्शन + `msg.sender` मिन्टर नसल्यास थ्रो करते. + `_to` शून्य पत्ता असल्यास थ्रो करते. + `_tokenId` कोणाच्यातरी मालकीचा असल्यास थ्रो करते. + @param _to मिंट केलेले टोकन प्राप्त करणारा पत्ता. + @param _tokenId मिंट करायचा टोकन आयडी. + @return ऑपरेशन यशस्वी झाले की नाही हे दर्शवणारे बुलियन. + """ + # `msg.sender` मिन्टर नसल्यास थ्रो करते + assert msg.sender == self.minter +``` + +फक्त मिन्टर (ज्या खात्याने ERC-721 कॉन्ट्रॅक्ट तयार केले आहे) नवीन टोकन मिंट करू शकतो. भविष्यात जर आपल्याला मिन्टरची ओळख बदलायची असेल तर ही एक समस्या असू शकते. एका प्रोडक्शन कॉन्ट्रॅक्टमध्ये तुम्हाला कदाचित असे फंक्शन हवे असेल जे मिन्टरला मिन्टरचे विशेषाधिकार दुसऱ्या कोणालातरी हस्तांतरित करण्याची परवानगी देईल. + +```python + # `_to` शून्य पत्ता असल्यास थ्रो करते + assert _to != ZERO_ADDRESS + # NFT जोडा. `_tokenId` कोणाच्यातरी मालकीचा असल्यास थ्रो करते + self._addTokenTo(_to, _tokenId) + log Transfer(ZERO_ADDRESS, _to, _tokenId) + return True +``` + +प्रथेनुसार, नवीन टोकनचे मिंटिंग शून्य पत्त्यावरून हस्तांतरण म्हणून गणले जाते. + +```python + +@external +def burn(_tokenId: uint256): + """ + @dev विशिष्ट ERC721 टोकन बर्न करते. + `msg.sender` सध्याचा मालक, अधिकृत ऑपरेटर किंवा या NFT साठी मंजूर + पत्ता नसल्यास थ्रो करते. + `_tokenId` वैध NFT नसल्यास थ्रो करते. + @param _tokenId बर्न करायच्या ERC721 टोकनचा uint256 आयडी. + """ + # आवश्यकता तपासा + assert self._isApprovedOrOwner(msg.sender, _tokenId) + owner: address = self.idToOwner[_tokenId] + # `_tokenId` वैध NFT नसल्यास थ्रो करते + assert owner != ZERO_ADDRESS + self._clearApproval(owner, _tokenId) + self._removeTokenFrom(owner, _tokenId) + log Transfer(owner, ZERO_ADDRESS, _tokenId) +``` + +ज्यालाही टोकन हस्तांतरित करण्याची परवानगी आहे त्याला ते बर्न करण्याची परवानगी आहे. बर्न हे शून्य पत्त्यावर हस्तांतरणासारखे दिसत असले तरी, शून्य पत्त्याला प्रत्यक्षात टोकन मिळत नाही. हे आपल्याला टोकनसाठी वापरलेले सर्व स्टोरेज मोकळे करण्याची परवानगी देते, ज्यामुळे व्यवहाराचा गॅस खर्च कमी होऊ शकतो. + +## हे कॉन्ट्रॅक्ट वापरणे {#using-contract} + +Solidity च्या उलट, Vyper मध्ये इनहेरिटन्स नाही. कोड अधिक स्पष्ट आणि त्यामुळे सुरक्षित करणे सोपे करण्यासाठी ही एक जाणीवपूर्वक केलेली डिझाइन निवड आहे. म्हणून तुमचा स्वतःचा Vyper ERC-721 कॉन्ट्रॅक्ट तयार करण्यासाठी तुम्ही [हा कॉन्ट्रॅक्ट](https://github.com/vyperlang/vyper/blob/master/examples/tokens/ERC721.vy) घ्या आणि तुम्हाला हव्या असलेल्या व्यवसाय तर्काची अंमलबजावणी करण्यासाठी त्यात बदल करा. + +## निष्कर्ष {#conclusion} + +पुनरावलोकनासाठी, या कॉन्ट्रॅक्टमधील काही सर्वात महत्त्वाचे विचार येथे आहेत: + +- सुरक्षित हस्तांतरणासह ERC-721 टोकन प्राप्त करण्यासाठी, कॉन्ट्रॅक्ट्सना `ERC721Receiver` इंटरफेस लागू करावा लागतो. +- तुम्ही सुरक्षित हस्तांतरण वापरत असलात तरीही, टोकन अडकू शकतात जर तुम्ही त्यांना अशा पत्त्यावर पाठवले ज्याची खाजगी की अज्ञात आहे. +- जेव्हा ऑपरेशनमध्ये समस्या येते तेव्हा फक्त अयशस्वी मूल्य परत करण्याऐवजी कॉल `revert` करणे ही एक चांगली कल्पना आहे. +- ERC-721 टोकन तेव्हा अस्तित्वात असतात जेव्हा त्यांचा मालक असतो. +- NFT हस्तांतरित करण्यासाठी अधिकृत होण्याचे तीन मार्ग आहेत. तुम्ही मालक असू शकता, विशिष्ट टोकनसाठी मंजूर असू शकता, किंवा मालकाच्या सर्व टोकनसाठी ऑपरेटर असू शकता. +- मागील इव्हेंट फक्त ब्लॉकचेनच्या बाहेर दिसतात. ब्लॉकचेनच्या आत चालणारा कोड ते पाहू शकत नाही. + +आता जा आणि सुरक्षित Vyper कॉन्ट्रॅक्ट्स लागू करा. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). + diff --git a/public/content/translations/mr/developers/tutorials/erc20-annotated-code/index.md b/public/content/translations/mr/developers/tutorials/erc20-annotated-code/index.md new file mode 100644 index 00000000000..77ded2dfd5c --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/erc20-annotated-code/index.md @@ -0,0 +1,917 @@ +--- +title: "ERC-20 कॉन्ट्रॅक्ट वॉक-थ्रू" +description: "OpenZeppelin ERC-20 कॉन्ट्रॅक्टमध्ये काय आहे आणि ते तिथे का आहे?" +author: Ori Pomerantz +lang: mr +tags: [ "सॉलिडिटी", "erc-20" ] +skill: beginner +published: 2021-03-09 +--- + +## प्रस्तावना {#introduction} + +Ethereum च्या सर्वात सामान्य उपयोगांपैकी एक म्हणजे एखाद्या गटाने एक ट्रेडेबल टोकन तयार करणे, एका अर्थाने त्यांचे स्वतःचे चलन. हे टोकन सामान्यतः एका मानकाचे पालन करतात, +[ERC-20](/developers/docs/standards/tokens/erc-20/). हे मानक लिक्विडिटी पूल आणि वॉलेटसारखी साधने लिहिणे शक्य करते, जे सर्व ERC-20 +टोकनसोबत काम करतात. या लेखात आपण +[OpenZeppelin Solidity ERC20 अंमलबजावणी](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol), तसेच +[इंटरफेस परिभाषा](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) याचे विश्लेषण करू. + +हा भाष्य केलेला सोर्स कोड आहे. तुम्हाला ERC-20 लागू करायचे असल्यास, +[हे ट्यूटोरियल वाचा](https://docs.openzeppelin.com/contracts/2.x/erc20-supply). + +## इंटरफेस {#the-interface} + +ERC-20 सारख्या मानकाचा उद्देश अनेक टोकन अंमलबजावणींना परवानगी देणे आहे जे वॉलेट आणि विकेंद्रित एक्सचेंजेस सारख्या ॲप्लिकेशन्समध्ये इंटरऑपरेबल आहेत. हे साध्य करण्यासाठी, आम्ही एक +[इंटरफेस](https://www.geeksforgeeks.org/solidity/solidity-basics-of-interface/) तयार करतो. ज्या कोणत्याही कोडला टोकन कॉन्ट्रॅक्ट वापरण्याची आवश्यकता आहे, तो +इंटरफेसमधील समान परिभाषा वापरू शकतो आणि ते वापरणाऱ्या सर्व टोकन कॉन्ट्रॅक्टसोबत सुसंगत असू शकतो, मग ते +MetaMask सारखे वॉलेट असो, etherscan.io सारखे dapp असो, किंवा लिक्विडिटी पूल सारखे वेगळे कॉन्ट्रॅक्ट असो. + +![ERC-20 इंटरफेसचे उदाहरण](erc20_interface.png) + +तुम्ही अनुभवी प्रोग्रामर असाल तर, तुम्हाला [Java](https://www.w3schools.com/java/java_interface.asp) मध्ये +किंवा [C हेडर फाइल्स](https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html) मध्ये समान रचना पाहिल्याचे आठवत असेल. + +ही OpenZeppelin कडील [ERC-20 इंटरफेस](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) ची +परिभाषा आहे. हे [मानव वाचनीय मानक](https://eips.ethereum.org/EIPS/eip-20) चे Solidity कोडमधील भाषांतर आहे. अर्थात, इंटरफेस +स्वतः काहीही _कसे_ करायचे हे परिभाषित करत नाही. ते खालील कॉन्ट्रॅक्ट सोर्स कोडमध्ये स्पष्ट केले आहे. + +  + +```solidity +// SPDX-License-Identifier: MIT +``` + +Solidity फाइल्समध्ये परवाना ओळखकर्ता समाविष्ट करणे अपेक्षित आहे. [तुम्ही परवान्यांची यादी येथे पाहू शकता](https://spdx.org/licenses/). तुम्हाला वेगळा परवाना +हवा असल्यास, तो कमेंट्समध्ये स्पष्ट करा. + +  + +```solidity +pragma solidity >=0.6.0 <0.8.0; +``` + +Solidity भाषा अजूनही वेगाने विकसित होत आहे, आणि नवीन आवृत्त्या जुन्या कोडसोबत सुसंगत असू शकत नाहीत +([येथे पहा](https://docs.soliditylang.org/en/v0.7.0/070-breaking-changes.html)). म्हणून, केवळ भाषेची किमान +आवृत्तीच नव्हे, तर कमाल आवृत्ती, ज्या नवीनतम आवृत्तीसह तुम्ही कोडची चाचणी केली आहे, ती देखील निर्दिष्ट करणे एक चांगली कल्पना आहे. + +  + +```solidity +/** + * @dev EIP मध्ये परिभाषित केल्यानुसार ERC20 मानकाचा इंटरफेस. + */ +``` + +कमेंटमधील `@dev` हा [NatSpec फॉरमॅट](https://docs.soliditylang.org/en/develop/natspec-format.html) चा भाग आहे, जो सोर्स कोडमधून +डॉक्युमेंटेशन तयार करण्यासाठी वापरला जातो. + +  + +```solidity +interface IERC20 { +``` + +परंपरेनुसार, इंटरफेसची नावे `I` ने सुरू होतात. + +  + +```solidity + /** + * @dev अस्तित्वात असलेल्या टोकनची संख्या परत करते. + */ + function totalSupply() external view returns (uint256); +``` + +हे फंक्शन `external` आहे, म्हणजे [ते फक्त कॉन्ट्रॅक्टच्या बाहेरूनच कॉल केले जाऊ शकते](https://docs.soliditylang.org/en/v0.7.0/cheatsheet.html#index-2). +ते कॉन्ट्रॅक्टमधील टोकनचा एकूण पुरवठा परत करते. हे मूल्य Ethereum मधील सर्वात सामान्य प्रकार, unsigned 256 bits (256 bits हा EVM चा +नेटिव्ह वर्ड आकार आहे) वापरून परत केले जाते. हे फंक्शन `view` देखील आहे, ज्याचा अर्थ ते स्टेट बदलत नाही, त्यामुळे ते ब्लॉकचेनमधील प्रत्येक +नोडवर चालवण्याऐवजी एकाच नोडवर कार्यान्वित केले जाऊ शकते. या प्रकारचे फंक्शन व्यवहार तयार करत नाही आणि त्याला [gas](/developers/docs/gas/) लागत नाही. + +**टीप:** सैद्धांतिकदृष्ट्या असे दिसू शकते की कॉन्ट्रॅक्टचा निर्माता वास्तविक मूल्यापेक्षा कमी एकूण पुरवठा परत करून फसवणूक करू शकतो, ज्यामुळे प्रत्येक टोकन +प्रत्यक्षात आहे त्यापेक्षा अधिक मौल्यवान दिसेल. तथापि, ती भीती ब्लॉकचेनच्या खऱ्या स्वरूपाकडे दुर्लक्ष करते. ब्लॉकचेनवर जे काही घडते ते प्रत्येक +नोडद्वारे सत्यापित केले जाऊ शकते. हे साध्य करण्यासाठी, प्रत्येक कॉन्ट्रॅक्टचा मशीन लँग्वेज कोड आणि स्टोरेज प्रत्येक नोडवर उपलब्ध आहे. तुम्ही तुमच्या कॉन्ट्रॅक्टसाठी Solidity +कोड प्रकाशित करणे आवश्यक नसले तरी, जोपर्यंत तुम्ही सोर्स कोड आणि ज्या Solidity आवृत्तीसह तो संकलित केला होता ती प्रकाशित करत नाही तोपर्यंत कोणीही तुम्हाला गांभीर्याने घेणार नाही, जेणेकरून +तुम्ही प्रदान केलेल्या मशीन लँग्वेज कोडविरुद्ध ते सत्यापित केले जाऊ शकते. +उदाहरणार्थ, [हा कॉन्ट्रॅक्ट](https://eth.blockscout.com/address/0xa530F85085C6FE2f866E7FdB716849714a89f4CD?tab=contract) पहा. + +  + +```solidity + /** + * @dev `account` च्या मालकीच्या टोकनची संख्या परत करते. + */ + function balanceOf(address account) external view returns (uint256); +``` + +नावाप्रमाणेच, `balanceOf` खात्याची शिल्लक परत करते. Ethereum खाती Solidity मध्ये `address` प्रकार वापरून ओळखली जातात, ज्यात 160 बिट्स असतात. +ते `external` आणि `view` देखील आहे. + +  + +```solidity + /** + * @dev कॉलरच्या खात्यातून `recipient` कडे `amount` टोकन हलवते. + * + * ऑपरेशन यशस्वी झाले की नाही हे दर्शवणारे बुलियन मूल्य परत करते. + * + * एक {Transfer} इव्हेंट उत्सर्जित करते. + */ + function transfer(address recipient, uint256 amount) external returns (bool); +``` + +`transfer` फंक्शन कॉलरकडून दुसऱ्या पत्त्यावर टोकन हस्तांतरित करते. यात स्टेटमध्ये बदल समाविष्ट आहे, म्हणून ते `view` नाही. +जेव्हा वापरकर्ता हे फंक्शन कॉल करतो तेव्हा ते एक व्यवहार तयार करते आणि त्याला गॅस लागतो. ते एक इव्हेंट, `Transfer`, देखील उत्सर्जित करते, ज्यामुळे ब्लॉकचेनवरील +सर्वांना या घटनेची माहिती मिळते. + +फंक्शनमध्ये दोन वेगवेगळ्या प्रकारच्या कॉलर्ससाठी दोन प्रकारचे आउटपुट आहेत: + +- जे वापरकर्ते थेट वापरकर्ता इंटरफेसवरून फंक्शन कॉल करतात. सामान्यतः वापरकर्ता एक व्यवहार + सादर करतो आणि प्रतिसादाची वाट पाहत नाही, ज्याला अनिश्चित कालावधी लागू शकतो. व्यवहाराची पावती (जी व्यवहाराच्या हॅशद्वारे ओळखली जाते) शोधून किंवा + `Transfer` इव्हेंट शोधून वापरकर्ता काय झाले ते पाहू शकतो. +- इतर कॉन्ट्रॅक्ट, जे एकूण व्यवहाराचा भाग म्हणून फंक्शन कॉल करतात. त्या कॉन्ट्रॅक्टना ताबडतोब निकाल मिळतो, + कारण ते त्याच व्यवहारात चालतात, त्यामुळे ते फंक्शन रिटर्न व्हॅल्यू वापरू शकतात. + +कॉन्ट्रॅक्टच्या स्टेटमध्ये बदल करणाऱ्या इतर फंक्शन्सद्वारे समान प्रकारचे आउटपुट तयार केले जाते. + +  + +अलाउन्स एका खात्याला दुसऱ्या मालकाच्या मालकीचे काही टोकन खर्च करण्याची परवानगी देतात. +हे उपयुक्त आहे, उदाहरणार्थ, विक्रेते म्हणून काम करणाऱ्या कॉन्ट्रॅक्टसाठी. कॉन्ट्रॅक्ट इव्हेंट्ससाठी +निरीक्षण करू शकत नाहीत, म्हणून जर खरेदीदाराने थेट विक्रेता कॉन्ट्रॅक्टला टोकन हस्तांतरित केले +तर त्या कॉन्ट्रॅक्टला पैसे भरले गेले आहेत हे कळणार नाही. त्याऐवजी, खरेदीदार विक्रेता +कॉन्ट्रॅक्टला एक निश्चित रक्कम खर्च करण्याची परवानगी देतो, आणि विक्रेता ती रक्कम हस्तांतरित करतो. +हे विक्रेता कॉन्ट्रॅक्ट कॉल करत असलेल्या फंक्शनद्वारे केले जाते, जेणेकरून विक्रेता कॉन्ट्रॅक्टला +ते यशस्वी झाले की नाही हे कळू शकेल. + +```solidity + /** + * @dev `spender` ला {transferFrom} द्वारे `owner` च्या वतीने खर्च करण्याची परवानगी असलेल्या + * टोकनची उर्वरित संख्या परत करते. हे + * डीफॉल्टनुसार शून्य असते. + * + * जेव्हा {approve} किंवा {transferFrom} कॉल केले जाते तेव्हा हे मूल्य बदलते. + */ + function allowance(address owner, address spender) external view returns (uint256); +``` + +`allowance` फंक्शन कोणालाही हे तपासण्याची परवानगी देते की एक +पत्ता (`owner`) दुसऱ्या पत्त्याला (`spender`) किती खर्च करू देतो. + +  + +```solidity + /** + * @dev कॉलरच्या टोकनवर `spender` चा अलाउन्स म्हणून `amount` सेट करते. + * + * ऑपरेशन यशस्वी झाले की नाही हे दर्शवणारे बुलियन मूल्य परत करते. + * + * महत्त्वाचे: सावध रहा की या पद्धतीसह अलाउन्स बदलण्यामुळे + * दुर्दैवी व्यवहार क्रमाने कोणीतरी जुने आणि नवीन दोन्ही अलाउन्स वापरण्याचा धोका + * असतो. या रेस कंडीशनला कमी करण्याचा एक संभाव्य उपाय म्हणजे + * प्रथम स्पेंडरचा अलाउन्स 0 पर्यंत कमी करणे आणि नंतर + * इच्छित मूल्य सेट करणे: + * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 + * + * एक {Approval} इव्हेंट उत्सर्जित करते. + */ + function approve(address spender, uint256 amount) external returns (bool); +``` + +`approve` फंक्शन अलाउन्स तयार करते. त्याचा गैरवापर कसा होऊ शकतो याबद्दलचा +संदेश वाचण्याची खात्री करा. Ethereum मध्ये तुम्ही तुमच्या स्वतःच्या व्यवहारांच्या क्रमावर नियंत्रण ठेवता, +परंतु तुम्ही इतर लोकांचे व्यवहार कोणत्या क्रमाने +पार पाडले जातील यावर नियंत्रण ठेवू शकत नाही, जोपर्यंत तुम्ही दुसऱ्या बाजूचा +व्यवहार झाल्याचे पाहत नाही तोपर्यंत तुम्ही तुमचा स्वतःचा व्यवहार सादर करत नाही. + +  + +```solidity + /** + * @dev अलाउन्स यंत्रणा वापरून `sender` कडून `recipient` कडे `amount` टोकन हलवते. + * `amount` नंतर कॉलरच्या + * अलाउन्स मधून वजा केली जाते. + * + * ऑपरेशन यशस्वी झाले की नाही हे दर्शवणारे बुलियन मूल्य परत करते. + * + * एक {Transfer} इव्हेंट उत्सर्जित करते. + */ + function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); +``` + +शेवटी, `transferFrom` चा वापर स्पेंडरद्वारे अलाउन्स प्रत्यक्षात खर्च करण्यासाठी केला जातो. + +  + +```solidity + + /** + * @dev जेव्हा `value` टोकन एका खात्यातून (`from`) दुसऱ्या खात्यात (`to`) हलवले जातात तेव्हा उत्सर्जित होते. + * + * लक्षात घ्या की `value` शून्य असू शकते. + */ + event Transfer(address indexed from, address indexed to, uint256 value); + + /** + * @dev जेव्हा {approve} ला कॉल करून `owner` साठी `spender` चा अलाउन्स सेट केला जातो तेव्हा उत्सर्जित होते. `value` हा नवीन अलाउन्स आहे. + */ + event Approval(address indexed owner, address indexed spender, uint256 value); +} +``` + +जेव्हा ERC-20 कॉन्ट्रॅक्टची स्टेट बदलते तेव्हा हे इव्हेंट्स उत्सर्जित होतात. + +## वास्तविक कॉन्ट्रॅक्ट {#the-actual-contract} + +हा वास्तविक कॉन्ट्रॅक्ट आहे जो ERC-20 मानकाची अंमलबजावणी करतो, +[येथून घेतला आहे](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol). +तो आहे तसा वापरण्यासाठी नाही, परंतु तुम्ही +त्याचा वापरण्यायोग्य गोष्टीत विस्तार करण्यासाठी त्यातून [इनहेरिट](https://www.tutorialspoint.com/solidity/solidity_inheritance.htm) करू शकता. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.0 <0.8.0; +``` + +  + +### इम्पोर्ट स्टेटमेंट {#import-statements} + +वरील इंटरफेस परिभाषांव्यतिरिक्त, कॉन्ट्रॅक्ट परिभाषा दोन इतर फाइल्स इम्पोर्ट करते: + +```solidity + +import "../../GSN/Context.sol"; +import "./IERC20.sol"; +import "../../math/SafeMath.sol"; +``` + +- `GSN/Context.sol` ही [OpenGSN](https://www.opengsn.org/) वापरण्यासाठी आवश्यक असलेली परिभाषा आहे, ही एक प्रणाली आहे जी इथर नसलेल्या वापरकर्त्यांना + ब्लॉकचेन वापरण्याची परवानगी देते. लक्षात घ्या की ही एक जुनी आवृत्ती आहे, तुम्हाला OpenGSN सोबत एकत्रीकरण करायचे असल्यास + [हे ट्यूटोरियल वापरा](https://docs.opengsn.org/javascript-client/tutorial.html). +- [SafeMath लायब्ररी](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/), जी Solidity आवृत्त्या **<0.8.0** साठी + अंकगणित ओव्हरफ्लो/अंडरफ्लो प्रतिबंधित करते. Solidity ≥0.8.0 मध्ये, अंकगणितीय क्रिया ओव्हरफ्लो/अंडरफ्लोवर आपोआप + रिव्हर्ट होतात, ज्यामुळे SafeMath अनावश्यक बनते. हा कॉन्ट्रॅक्ट जुन्या कंपाइलर आवृत्त्यांसह बॅकवर्ड कंपॅटिबिलिटीसाठी + SafeMath वापरतो. + +  + +ही कमेंट कॉन्ट्रॅक्टचा उद्देश स्पष्ट करते. + +```solidity +/** + * @dev {IERC20} इंटरफेसची अंमलबजावणी. + * + * ही अंमलबजावणी टोकन कसे तयार केले जातात या बाबतीत अनभिज्ञ आहे. याचा अर्थ + * {_mint} वापरून एका साधित कॉन्ट्रॅक्टमध्ये पुरवठा यंत्रणा जोडणे आवश्यक आहे. + * एका सामान्य यंत्रणेसाठी {ERC20PresetMinterPauser} पहा. + * + * टीप: तपशीलवार लेखनासाठी आमचे मार्गदर्शक पहा + * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[पुरवठा + * यंत्रणा कशी लागू करावी]. + * + * आम्ही सामान्य OpenZeppelin मार्गदर्शक तत्त्वांचे पालन केले आहे: अयशस्वी झाल्यास `false` परत करण्याऐवजी + * फंक्शन्स रिव्हर्ट होतात. तरीही हे वर्तन पारंपारिक + * आहे आणि ERC20 ॲप्लिकेशन्सच्या अपेक्षांशी संघर्ष करत नाही. + * + * याव्यतिरिक्त, {transferFrom} ला कॉल केल्यावर एक {Approval} इव्हेंट उत्सर्जित होतो. + * हे ॲप्लिकेशन्सना केवळ उक्त इव्हेंट्स ऐकून सर्व खात्यांसाठी + * अलाउन्सची पुनर्रचना करण्यास अनुमती देते. EIP च्या इतर अंमलबजावणी + * हे इव्हेंट्स उत्सर्जित करू शकत नाहीत, कारण स्पेसिफिकेशननुसार ते आवश्यक नाही. + * + * शेवटी, अलाउन्स सेट करण्याच्या + * सुप्रसिद्ध समस्या कमी करण्यासाठी नॉन-स्टँडर्ड {decreaseAllowance} आणि {increaseAllowance} + * फंक्शन्स जोडले गेले आहेत. {IERC20-approve} पहा. + */ + +``` + +### कॉन्ट्रॅक्ट परिभाषा {#contract-definition} + +```solidity +contract ERC20 is Context, IERC20 { +``` + +ही ओळ इनहेरिटन्स निर्दिष्ट करते, या प्रकरणात वरील `IERC20` आणि OpenGSN साठी `Context` मधून. + +  + +```solidity + + using SafeMath for uint256; + +``` + +ही ओळ `SafeMath` लायब्ररीला `uint256` प्रकाराशी जोडते. तुम्ही ही लायब्ररी +[येथे](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/SafeMath.sol) शोधू शकता. + +### व्हेरिएबल परिभाषा {#variable-definitions} + +या परिभाषा कॉन्ट्रॅक्टचे स्टेट व्हेरिएबल्स निर्दिष्ट करतात. हे व्हेरिएबल्स `private` घोषित केले आहेत, परंतु +त्याचा अर्थ फक्त एवढाच आहे की ब्लॉकचेनवरील इतर कॉन्ट्रॅक्ट ते वाचू शकत नाहीत. _ब्लॉकचेनवर कोणतीही +रहस्ये नाहीत_, प्रत्येक नोडवरील सॉफ्टवेअरमध्ये प्रत्येक ब्लॉकवर प्रत्येक कॉन्ट्रॅक्टची +स्टेट असते. परंपरेनुसार, स्टेट व्हेरिएबल्सना `_` असे नाव दिले जाते. + +पहिले दोन व्हेरिएबल्स [मॅपिंग्स](https://www.tutorialspoint.com/solidity/solidity_mappings.htm) आहेत, +म्हणजे ते साधारणपणे [असोसिएटिव्ह ॲरे](https://wikipedia.org/wiki/Associative_array) सारखेच +वागतात, फक्त कीज संख्यात्मक मूल्ये आहेत. स्टोरेज फक्त त्या नोंदींसाठी वाटप केले जाते ज्यांची मूल्ये डीफॉल्टपेक्षा +(शून्य) वेगळी आहेत. + +```solidity + mapping (address => uint256) private _balances; +``` + +पहिले मॅपिंग, `_balances`, हे पत्ते आणि त्यांचे या टोकनचे संबंधित शिल्लक आहेत. शिल्लक ऍक्सेस करण्यासाठी, +हे सिंटॅक्स वापरा: `_balances[
]`. + +  + +```solidity + mapping (address => mapping (address => uint256)) private _allowances; +``` + +हा व्हेरिएबल, `_allowances`, पूर्वी स्पष्ट केलेले अलाउन्स संग्रहित करतो. पहिला इंडेक्स टोकनचा मालक +आहे, आणि दुसरा अलाउन्स असलेला कॉन्ट्रॅक्ट आहे. पत्ता A पत्ता B च्या खात्यातून किती रक्कम +खर्च करू शकतो हे ऍक्सेस करण्यासाठी, `_allowances[B][A]` वापरा. + +  + +```solidity + uint256 private _totalSupply; +``` + +नावाप्रमाणेच, हा व्हेरिएबल टोकनच्या एकूण पुरवठ्याचा मागोवा ठेवतो. + +  + +```solidity + string private _name; + string private _symbol; + uint8 private _decimals; +``` + +हे तीन व्हेरिएबल्स वाचनीयता सुधारण्यासाठी वापरले जातात. पहिले दोन स्व-स्पष्ट आहेत, परंतु `_decimals` +नाही. + +एकीकडे, Ethereum मध्ये फ्लोटिंग पॉइंट किंवा अपूर्णांक व्हेरिएबल्स नाहीत. दुसरीकडे, +मानवांना टोकन विभाजित करता येणे आवडते. लोकांनी चलनी म्हणून सोन्याचा स्वीकार करण्याचे एक कारण म्हणजे +जेव्हा कोणी गाईच्या मूल्याचे बदक विकत घेऊ इच्छित असेल तेव्हा सुटे पैसे करणे कठीण होते. + +यावर उपाय म्हणजे पूर्णांकांचा मागोवा ठेवणे, परंतु वास्तविक टोकनऐवजी जवळजवळ +निरुपयोगी असलेल्या अपूर्णांक टोकनची गणना करणे. इथरच्या बाबतीत, अपूर्णांक टोकनला wei म्हणतात, आणि 10^18 wei एका +ETH च्या बरोबर आहे. लिहिताना, 10,000,000,000,000 wei अंदाजे एक यूएस किंवा युरो सेंट आहे. + +ॲप्लिकेशन्सना टोकन शिल्लक कशी प्रदर्शित करायची हे माहित असणे आवश्यक आहे. जर वापरकर्त्याकडे 3,141,000,000,000,000,000 wei असतील, तर ते +3.14 ETH आहे का? 31.41 ETH? 3,141 ETH? इथरच्या बाबतीत ते 10^18 wei प्रति ETH असे परिभाषित केले आहे, परंतु तुमच्या +टोकनसाठी तुम्ही वेगळे मूल्य निवडू शकता. जर टोकनचे विभाजन करणे अर्थपूर्ण नसेल, तर तुम्ही +शून्य `_decimals` मूल्य वापरू शकता. तुम्हाला ETH प्रमाणेच मानक वापरायचे असल्यास, **18** हे मूल्य वापरा. + +### कन्स्ट्रक्टर {#the-constructor} + +```solidity + /** + * @dev {name} आणि {symbol} साठी मूल्ये सेट करते, {decimals} ला + * 18 च्या डीफॉल्ट मूल्याने सुरू करते. + * + * {decimals} साठी वेगळे मूल्य निवडण्यासाठी, {_setupDecimals} वापरा. + * + * ही तिन्ही मूल्ये अपरिवर्तनीय आहेत: ती फक्त एकदाच + * बांधकामादरम्यान सेट केली जाऊ शकतात. + */ + constructor (string memory name_, string memory symbol_) public { + // Solidity ≥0.7.0 मध्ये, 'public' अंतर्निहित आहे आणि वगळले जाऊ शकते. + + _name = name_; + _symbol = symbol_; + _decimals = 18; + } +``` + +जेव्हा कॉन्ट्रॅक्ट प्रथम तयार केला जातो तेव्हा कन्स्ट्रक्टर कॉल केला जातो. परंपरेनुसार, फंक्शन पॅरामीटर्सना `_` असे नाव दिले जाते. + +### वापरकर्ता इंटरफेस फंक्शन्स {#user-interface-functions} + +```solidity + /** + * @dev टोकनचे नाव परत करते. + */ + function name() public view returns (string memory) { + return _name; + } + + /** + * @dev टोकनचे चिन्ह परत करते, सहसा नावाचे एक छोटे रूप. + */ + function symbol() public view returns (string memory) { + return _symbol; + } + + /** + * @dev वापरकर्त्याचे प्रतिनिधित्व मिळविण्यासाठी वापरलेल्या दशांशांची संख्या परत करते. + * उदाहरणार्थ, जर `decimals` `2` च्या बरोबर असेल, तर `505` टोकनची शिल्लक वापरकर्त्याला `5,05` (`505 / 10 ** 2`) म्हणून प्रदर्शित केली पाहिजे. + * + * टोकन सहसा 18 चे मूल्य निवडतात, जे इथर आणि wei यांच्यातील संबंधाचे अनुकरण करते. + * हे मूल्य {ERC20} वापरते, जोपर्यंत {_setupDecimals} कॉल केले जात नाही. + * + * टीप: ही माहिती केवळ _प्रदर्शन_ हेतूंसाठी वापरली जाते: ती कोणत्याही प्रकारे कराराच्या अंकगणितावर परिणाम करत नाही, + * {IERC20-balanceOf} आणि {IERC20-transfer} यासह. + */ + function decimals() public view returns (uint8) { + return _decimals; + } +``` + +ही फंक्शन्स, `name`, `symbol`, आणि `decimals` वापरकर्ता इंटरफेसना तुमच्या कॉन्ट्रॅक्टबद्दल माहिती देतात जेणेकरून ते ते योग्यरित्या प्रदर्शित करू शकतील. + +रिटर्न प्रकार `string memory` आहे, म्हणजे मेमरीमध्ये संग्रहित केलेली स्ट्रिंग परत करणे. व्हेरिएबल्स, जसे की +स्ट्रिंग्स, तीन ठिकाणी संग्रहित केले जाऊ शकतात: + +| | आयुष्य | कॉन्ट्रॅक्ट ऍक्सेस | गॅस खर्च | +| ------- | ----------------- | ------------------ | ----------------------------------------------------------------- | +| मेमरी | फंक्शन कॉल | वाचन/लेखन | दहा किंवा शेकडो (उच्च स्थानांसाठी अधिक) | +| कॉलडेटा | फंक्शन कॉल | केवळ वाचनीय | रिटर्न प्रकार म्हणून वापरता येत नाही, केवळ फंक्शन पॅरामीटर प्रकार | +| स्टोरेज | बदलल्या जाईपर्यंत | वाचन/लेखन | उच्च (वाचनासाठी 800, लेखनासाठी 20k) | + +या प्रकरणात, `memory` हा सर्वोत्तम पर्याय आहे. + +### टोकन माहिती वाचा {#read-token-information} + +ही फंक्शन्स आहेत जी टोकनबद्दल माहिती प्रदान करतात, एकतर एकूण पुरवठा किंवा +खात्याची शिल्लक. + +```solidity + /** + * @dev {IERC20-totalSupply} पहा. + */ + function totalSupply() public view override returns (uint256) { + return _totalSupply; + } +``` + +`totalSupply` फंक्शन टोकनचा एकूण पुरवठा परत करते. + +  + +```solidity + /** + * @dev {IERC20-balanceOf} पहा. + */ + function balanceOf(address account) public view override returns (uint256) { + return _balances[account]; + } +``` + +खात्याची शिल्लक वाचा. लक्षात घ्या की कोणालाही दुसऱ्याच्या खात्याची शिल्लक +मिळवण्याची परवानगी आहे. ही माहिती लपवण्याचा प्रयत्न करण्यात काहीच अर्थ नाही, कारण ती प्रत्येक +नोडवर तरीही उपलब्ध आहे. _ब्लॉकचेनवर कोणतीही रहस्ये नाहीत._ + +### टोकन हस्तांतरित करा {#transfer-tokens} + +```solidity + /** + * @dev {IERC20-transfer} पहा. + * + * आवश्यकता: + * + * - `recipient` शून्य पत्ता असू शकत नाही. + * - कॉलरकडे किमान `amount` इतकी शिल्लक असणे आवश्यक आहे. + */ + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { +``` + +`transfer` फंक्शन प्रेषकाच्या खात्यातून दुसऱ्या खात्यात टोकन हस्तांतरित करण्यासाठी कॉल केले जाते. लक्षात +घ्या की ते बुलियन मूल्य परत करत असले तरी, ते मूल्य नेहमी **सत्य** असते. जर हस्तांतरण +अयशस्वी झाले तर कॉन्ट्रॅक्ट कॉलला रिव्हर्ट करते. + +  + +```solidity + _transfer(_msgSender(), recipient, amount); + return true; + } +``` + +`_transfer` फंक्शन वास्तविक काम करते. हे एक खाजगी फंक्शन आहे जे केवळ +इतर कॉन्ट्रॅक्ट फंक्शन्सद्वारे कॉल केले जाऊ शकते. परंपरेनुसार खाजगी फंक्शन्सना `_` असे नाव दिले जाते, जसे की स्टेट +व्हेरिएबल्स. + +सामान्यतः Solidity मध्ये आपण संदेश प्रेषकासाठी `msg.sender` वापरतो. तथापि, ते +[OpenGSN](http://opengsn.org/) तोडते. आपल्याला आपल्या टोकनसह इथरलेस व्यवहारांना परवानगी द्यायची असल्यास, आपल्याला +`_msgSender()` वापरण्याची आवश्यकता आहे. ते सामान्य व्यवहारांसाठी `msg.sender` परत करते, परंतु इथरलेस व्यवहारांसाठी +मूळ स्वाक्षरीकर्ता परत करते आणि संदेश रिले करणाऱ्या कॉन्ट्रॅक्टला नाही. + +### अलाउन्स फंक्शन्स {#allowance-functions} + +ही फंक्शन्स आहेत जी अलाउन्स कार्यक्षमता लागू करतात: `allowance`, `approve`, `transferFrom`, +आणि `_approve`. याव्यतिरिक्त, OpenZeppelin अंमलबजावणी मूलभूत मानकांच्या पलीकडे जाऊन सुरक्षा सुधारणारी काही वैशिष्ट्ये समाविष्ट करते: `increaseAllowance` आणि `decreaseAllowance`. + +#### अलाउन्स फंक्शन {#allowance} + +```solidity + /** + * @dev {IERC20-allowance} पहा. + */ + function allowance(address owner, address spender) public view virtual override returns (uint256) { + return _allowances[owner][spender]; + } +``` + +`allowance` फंक्शन प्रत्येकाला कोणताही अलाउन्स तपासण्याची परवानगी देते. + +#### अप्रूव्ह फंक्शन {#approve} + +```solidity + /** + * @dev {IERC20-approve} पहा. + * + * आवश्यकता: + * + * - `spender` शून्य पत्ता असू शकत नाही. + */ + function approve(address spender, uint256 amount) public virtual override returns (bool) { +``` + +हे फंक्शन अलाउन्स तयार करण्यासाठी कॉल केले जाते. हे वरील `transfer` फंक्शनसारखे आहे: + +- हे फंक्शन फक्त एका अंतर्गत फंक्शनला (या प्रकरणात, `_approve`) कॉल करते जे वास्तविक काम करते. +- हे फंक्शन एकतर `true` (यशस्वी झाल्यास) परत करते किंवा रिव्हर्ट होते (नसल्यास). + +  + +```solidity + _approve(_msgSender(), spender, amount); + return true; + } +``` + +स्टेट बदल होणाऱ्या ठिकाणांची संख्या कमी करण्यासाठी आम्ही अंतर्गत फंक्शन्स वापरतो. स्टेट बदलणारे _कोणतेही_ फंक्शन +एक संभाव्य सुरक्षा धोका आहे ज्याचे सुरक्षेसाठी ऑडिट करणे आवश्यक आहे. यामुळे आम्हाला चूक होण्याची शक्यता कमी होते. + +#### transferFrom फंक्शन {#transferFrom} + +हे फंक्शन आहे जे एक स्पेंडर अलाउन्स खर्च करण्यासाठी कॉल करतो. यासाठी दोन क्रिया आवश्यक आहेत: खर्च केलेली रक्कम +हस्तांतरित करणे आणि त्या रकमेने अलाउन्स कमी करणे. + +```solidity + /** + * @dev {IERC20-transferFrom} पहा. + * + * अद्यतनित अलाउन्स दर्शवणारा एक {Approval} इव्हेंट उत्सर्जित करते. हे + * EIP द्वारे आवश्यक नाही. {ERC20} च्या सुरुवातीला टीप पहा. + * + * आवश्यकता: + * + * - `sender` आणि `recipient` शून्य पत्ता असू शकत नाहीत. + * - `sender` कडे किमान `amount` इतकी शिल्लक असणे आवश्यक आहे. + * - कॉलरकडे किमान + * `amount` च्या ``sender``'च्या टोकनसाठी अलाउन्स असणे आवश्यक आहे. + */ + function transferFrom(address sender, address recipient, uint256 amount) public virtual + override returns (bool) { + _transfer(sender, recipient, amount); +``` + +  + +`a.sub(b, "message")` फंक्शन कॉल दोन गोष्टी करतो. प्रथम, ते `a-b` ची गणना करते, जो नवीन अलाउन्स आहे. +दुसरे, ते तपासते की हा परिणाम नकारात्मक नाही. जर तो नकारात्मक असेल तर कॉल प्रदान केलेल्या संदेशासह रिव्हर्ट होतो. लक्षात घ्या की जेव्हा एखादा कॉल रिव्हर्ट होतो तेव्हा त्या कॉलदरम्यान पूर्वी केलेले कोणतेही प्रक्रिया दुर्लक्षित केले जाते त्यामुळे आम्हाला `_transfer` +पूर्ववत करण्याची आवश्यकता नाही. + +```solidity + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, + "ERC20: transfer amount exceeds allowance")); + return true; + } +``` + +#### OpenZeppelin सुरक्षा जोडणी {#openzeppelin-safety-additions} + +शून्य-नसलेला अलाउन्स दुसऱ्या शून्य-नसलेल्या मूल्यावर सेट करणे धोकादायक आहे, +कारण तुम्ही फक्त तुमच्या स्वतःच्या व्यवहारांच्या क्रमावर नियंत्रण ठेवता, इतर कोणाच्याही नाही. कल्पना करा की तुमच्याकडे +दोन वापरकर्ते आहेत, एलिस जी भोळी आहे आणि बिल जो अप्रामाणिक आहे. एलिसला बिलकडून काही सेवा हवी आहे, जी तिला वाटते की पाच टोकन खर्च करते - म्हणून ती बिलला पाच टोकनचा अलाउन्स देते. + +नंतर काहीतरी बदलते आणि बिलची किंमत दहा टोकनपर्यंत वाढते. एलिस, जिला अजूनही सेवा हवी आहे, +एक व्यवहार पाठवते जो बिलचा अलाउन्स दहावर सेट करतो. ज्या क्षणी बिलला हा नवीन व्यवहार +व्यवहार पूलमध्‍ये दिसतो, तो एलिसचे पाच टोकन खर्च करणारा एक व्यवहार पाठवतो आणि त्याची गॅस किंमत खूप जास्त असते जेणेकरून तो जलद माइन होईल. अशाप्रकारे बिल प्रथम पाच टोकन खर्च करू शकतो आणि नंतर, एकदा एलिसचा नवीन अलाउन्स माइन झाल्यावर, पंधरा टोकनच्या एकूण किंमतीसाठी आणखी दहा खर्च करू शकतो, जे एलिसने +अधिकृत करू इच्छिलेल्या रकमेपेक्षा जास्त आहे. या तंत्राला +[फ्रंट-रनिंग](https://consensysdiligence.github.io/smart-contract-best-practices/attacks/#front-running) म्हणतात + +| एलिस व्यवहार | एलिस नॉन्स | बिल व्यवहार | बिल नॉन्स | बिलचा अलाउन्स | एलिसकडून बिलचे एकूण उत्पन्न | +| ------------------------------------ | ---------- | ------------------------------------------------ | --------- | ------------- | --------------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | +| approve(Bill, 10) | 11 | | | 10 | 5 | +| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 15 | + +ही समस्या टाळण्यासाठी, ही दोन फंक्शन्स (`increaseAllowance` आणि `decreaseAllowance`) तुम्हाला +एका विशिष्ट रकमेने अलाउन्समध्ये बदल करण्याची परवानगी देतात. त्यामुळे जर बिलने आधीच पाच टोकन खर्च केले असतील, तर तो फक्त +आणखी पाच खर्च करू शकेल. वेळेनुसार, हे काम करण्याचे दोन मार्ग आहेत, जे दोन्ही +बिलला फक्त दहा टोकन मिळवून संपतात: + +अ: + +| एलिस व्यवहार | एलिस नॉन्स | बिल व्यवहार | बिल नॉन्स | बिलचा अलाउन्स | एलिसकडून बिलचे एकूण उत्पन्न | +| --------------------------------------------- | ---------: | ----------------------------------------------- | --------: | ------------: | --------------------------- | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| | | transferFrom(Alice, Bill, 5) | 10,123 | 0 | 5 | +| increaseAllowance(Bill, 5) | 11 | | | 0+5 = 5 | 5 | +| | | transferFrom(Alice, Bill, 5) | 10,124 | 0 | 10 | + +ब: + +| एलिस व्यवहार | एलिस नॉन्स | बिल व्यवहार | बिल नॉन्स | बिलचा अलाउन्स | एलिसकडून बिलचे एकूण उत्पन्न | +| --------------------------------------------- | ---------: | ------------------------------------------------ | --------: | ------------: | --------------------------: | +| approve(Bill, 5) | 10 | | | 5 | 0 | +| increaseAllowance(Bill, 5) | 11 | | | 5+5 = 10 | 0 | +| | | transferFrom(Alice, Bill, 10) | 10,124 | 0 | 10 | + +```solidity + /** + * @dev कॉलरद्वारे `spender` ला दिलेला अलाउन्स अणुप्रायपणे वाढवते. + * + * हा {approve} चा एक पर्याय आहे जो {IERC20-approve} मध्ये वर्णन केलेल्या समस्यांसाठी + * एक कमी करण्याच्या उपायांप्रमाणे वापरला जाऊ शकतो. + * + * अद्यतनित अलाउन्स दर्शवणारा एक {Approval} इव्हेंट उत्सर्जित करते. + * + * आवश्यकता: + * + * - `spender` शून्य पत्ता असू शकत नाही. + */ + function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); + return true; + } +``` + +`a.add(b)` फंक्शन एक सुरक्षित बेरीज आहे. असंभाव्य परिस्थितीत की `a`+`b`>=`2^256` असेल तर ते सामान्य बेरीजप्रमाणे +रॅप अराउंड होत नाही. + +```solidity + + /** + * @dev कॉलरद्वारे `spender` ला दिलेला अलाउन्स अणुप्रायपणे कमी करते. + * + * हा {approve} चा एक पर्याय आहे जो {IERC20-approve} मध्ये वर्णन केलेल्या समस्यांसाठी + * एक कमी करण्याच्या उपायांप्रमाणे वापरला जाऊ शकतो. + * + * अद्यतनित अलाउन्स दर्शवणारा एक {Approval} इव्हेंट उत्सर्जित करते. + * + * आवश्यकता: + * + * - `spender` शून्य पत्ता असू शकत नाही. + * - `spender` कडे किमान `subtractedValue` + * इतका कॉलरसाठी अलाउन्स असणे आवश्यक आहे. + */ + function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { + _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, + "ERC20: decreased allowance below zero")); + return true; + } +``` + +### टोकन माहितीमध्ये बदल करणारी फंक्शन्स {#functions-that-modify-token-information} + +ही चार फंक्शन्स आहेत जी वास्तविक काम करतात: `_transfer`, `_mint`, `_burn`, आणि `_approve`. + +#### _transfer फंक्शन {#_transfer} + +```solidity + /** + * @dev `sender` कडून `recipient` कडे `amount` टोकन हलवते. + * + * हे अंतर्गत फंक्शन {transfer} च्या समकक्ष आहे, आणि उदाहरणार्थ, स्वयंचलित टोकन शुल्क, स्लॅशिंग यंत्रणा, इत्यादी लागू करण्यासाठी वापरले जाऊ शकते. + * + * एक {Transfer} इव्हेंट उत्सर्जित करते. + * + * आवश्यकता: + * + * - `sender` शून्य पत्ता असू शकत नाही. + * - `recipient` शून्य पत्ता असू शकत नाही. + * - `sender` कडे किमान `amount` इतकी शिल्लक असणे आवश्यक आहे. + */ + function _transfer(address sender, address recipient, uint256 amount) internal virtual { +``` + +हे फंक्शन, `_transfer`, एका खात्यातून दुसऱ्या खात्यात टोकन हस्तांतरित करते. ते `transfer` (प्रेषकाच्या स्वतःच्या खात्यातून हस्तांतरणासाठी) आणि `transferFrom` (दुसऱ्याच्या खात्यातून +हस्तांतरणासाठी अलाउन्स वापरण्यासाठी) दोन्हीद्वारे कॉल केले जाते. + +  + +```solidity + require(sender != address(0), "ERC20: transfer from the zero address"); + require(recipient != address(0), "ERC20: transfer to the zero address"); +``` + +Ethereum मध्ये शून्य पत्त्याची मालकी कोणाकडेही नाही (म्हणजेच, कोणालाही अशी खाजगी की माहित नाही जिची जुळणारी सार्वजनिक की +शून्य पत्त्यात रूपांतरित होते). जेव्हा लोक तो पत्ता वापरतात, तेव्हा ती सहसा एक सॉफ्टवेअर बग असते - म्हणून आम्ही +शून्य पत्ता प्रेषक किंवा प्राप्तकर्ता म्हणून वापरल्यास अयशस्वी होतो. + +  + +```solidity + _beforeTokenTransfer(sender, recipient, amount); + +``` + +हा कॉन्ट्रॅक्ट वापरण्याचे दोन मार्ग आहेत: + +1. तुमच्या स्वतःच्या कोडसाठी टेम्पलेट म्हणून वापरा +2. [त्यातून इनहेरिट करा](https://www.bitdegree.org/learn/solidity-inheritance), आणि फक्त त्या फंक्शन्सना ओव्हरराइड करा ज्यात तुम्हाला बदल करायचा आहे + +दुसरी पद्धत खूपच चांगली आहे कारण OpenZeppelin ERC-20 कोडचे आधीच ऑडिट केले गेले आहे आणि ते सुरक्षित असल्याचे दर्शविले आहे. जेव्हा तुम्ही इनहेरिटन्स +वापरता तेव्हा तुम्ही कोणत्या फंक्शन्समध्ये बदल करता हे स्पष्ट होते, आणि तुमच्या कॉन्ट्रॅक्टवर विश्वास ठेवण्यासाठी लोकांना फक्त त्या विशिष्ट फंक्शन्सचे ऑडिट करण्याची आवश्यकता असते. + +जेव्हा जेव्हा टोकनची देवाणघेवाण होते तेव्हा प्रत्येक वेळी एक फंक्शन करणे अनेकदा उपयुक्त ठरते. तथापि, `_transfer` हे एक अत्यंत महत्त्वाचे फंक्शन आहे आणि ते +असुरक्षितपणे लिहिणे शक्य आहे (खाली पहा), म्हणून ते ओव्हरराइड न करणे सर्वोत्तम आहे. यावर उपाय म्हणजे `_beforeTokenTransfer`, एक +[हुक फंक्शन](https://wikipedia.org/wiki/Hooking). तुम्ही हे फंक्शन ओव्हरराइड करू शकता, आणि ते प्रत्येक हस्तांतरणावर कॉल केले जाईल. + +  + +```solidity + _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); + _balances[recipient] = _balances[recipient].add(amount); +``` + +या ओळी आहेत ज्या प्रत्यक्षात हस्तांतरण करतात. लक्षात घ्या की त्यांच्यामध्ये **काहीही नाही**, आणि आम्ही +हस्तांतरित रक्कम प्राप्तकर्त्याला जोडण्यापूर्वी प्रेषकाकडून वजा करतो. हे महत्त्वाचे आहे कारण जर मध्ये दुसऱ्या कॉन्ट्रॅक्टला कॉल +असता, तर त्याचा वापर या कॉन्ट्रॅक्टला फसवण्यासाठी केला गेला असता. अशा प्रकारे हस्तांतरण +अणुप्राय (atomic) आहे, त्याच्यामध्ये काहीही होऊ शकत नाही. + +  + +```solidity + emit Transfer(sender, recipient, amount); + } +``` + +शेवटी, एक `Transfer` इव्हेंट उत्सर्जित करा. इव्हेंट्स स्मार्ट कॉन्ट्रॅक्ट्सना ऍक्सेस करता येत नाहीत, परंतु ब्लॉकचेनच्या +बाहेर चालणारा कोड इव्हेंट्स ऐकू शकतो आणि त्यावर प्रतिक्रिया देऊ शकतो. उदाहरणार्थ, वॉलेट मालकाला अधिक टोकन कधी मिळतात याचा मागोवा ठेवू शकते. + +#### _mint आणि _burn फंक्शन्स {#_mint-and-_burn} + +ही दोन फंक्शन्स (`_mint` आणि `_burn`) टोकनच्या एकूण पुरवठ्यात बदल करतात. +ती इंटरनल आहेत आणि या कॉन्ट्रॅक्टमध्ये त्यांना कॉल करणारे कोणतेही फंक्शन नाही, +त्यामुळे तुम्ही कॉन्ट्रॅक्टमधून इनहेरिट केल्यास आणि नवीन टोकन कोणत्या परिस्थितीत मिंट करायचे किंवा +अस्तित्वात असलेले बर्न करायचे हे ठरवण्यासाठी तुमचा स्वतःचा +लॉजिक जोडल्यासच ते उपयुक्त आहेत. + +**टीप:** प्रत्येक ERC-20 टोकनचा स्वतःचा व्यवसाय लॉजिक असतो जो टोकन व्यवस्थापन ठरवतो. +उदाहरणार्थ, एक निश्चित पुरवठा कॉन्ट्रॅक्ट कदाचित फक्त कन्स्ट्रक्टरमध्ये `_mint` ला कॉल करेल आणि `_burn` ला कधीही कॉल करणार नाही. टोकन विकणारा कॉन्ट्रॅक्ट +पैसे भरल्यावर `_mint` ला कॉल करेल, आणि संभाव्यतः अनियंत्रित चलनवाढ टाळण्यासाठी काही टप्प्यावर `_burn` ला कॉल करेल. + +```solidity + /** @dev `amount` टोकन तयार करते आणि ते `account` ला नियुक्त करते, ज्यामुळे + * एकूण पुरवठा वाढतो. + * + * `from` शून्य पत्त्यावर सेट करून एक {Transfer} इव्हेंट उत्सर्जित करते. + * + * आवश्यकता: + * + * - `to` शून्य पत्ता असू शकत नाही. + */ + function _mint(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: mint to the zero address"); + _beforeTokenTransfer(address(0), account, amount); + _totalSupply = _totalSupply.add(amount); + _balances[account] = _balances[account].add(amount); + emit Transfer(address(0), account, amount); + } +``` + +जेव्हा टोकनची एकूण संख्या बदलते तेव्हा `_totalSupply` अद्यतनित करण्याची खात्री करा. + +  + +```solidity + /** + * @dev `account` मधून `amount` टोकन नष्ट करते, ज्यामुळे + * एकूण पुरवठा कमी होतो. + * + * `to` शून्य पत्त्यावर सेट करून एक {Transfer} इव्हेंट उत्सर्जित करते. + * + * आवश्यकता: + * + * - `account` शून्य पत्ता असू शकत नाही. + * - `account` कडे किमान `amount` टोकन असणे आवश्यक आहे. + */ + function _burn(address account, uint256 amount) internal virtual { + require(account != address(0), "ERC20: burn from the zero address"); + + _beforeTokenTransfer(account, address(0), amount); + + _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); + _totalSupply = _totalSupply.sub(amount); + emit Transfer(account, address(0), amount); + } +``` + +`_burn` फंक्शन जवळजवळ `_mint` सारखेच आहे, फक्त ते उलट दिशेने जाते. + +#### _approve फंक्शन {#_approve} + +हे फंक्शन आहे जे प्रत्यक्षात अलाउन्स निर्दिष्ट करते. लक्षात घ्या की ते एका मालकाला +मालकाच्या वर्तमान शिलकेपेक्षा जास्त असलेला अलाउन्स निर्दिष्ट करण्याची परवानगी देते. हे ठीक आहे कारण शिल्लक +हस्तांतरणाच्या वेळी तपासली जाते, जेव्हा ती अलाउन्स तयार केल्यावरच्या शिलकेपेक्षा वेगळी असू शकते. + +```solidity + /** + * @dev `owner` च्या टोकनवर `spender` चा अलाउन्स म्हणून `amount` सेट करते. + * + * हे अंतर्गत फंक्शन `approve` च्या समकक्ष आहे, आणि उदाहरणार्थ, विशिष्ट सबसिस्टमसाठी स्वयंचलित अलाउन्स सेट करण्यासाठी वापरले जाऊ शकते. + * + * एक {Approval} इव्हेंट उत्सर्जित करते. + * + * आवश्यकता: + * + * - `owner` शून्य पत्ता असू शकत नाही. + * - `spender` शून्य पत्ता असू शकत नाही. + */ + function _approve(address owner, address spender, uint256 amount) internal virtual { + require(owner != address(0), "ERC20: approve from the zero address"); + require(spender != address(0), "ERC20: approve to the zero address"); + + _allowances[owner][spender] = amount; +``` + +  + +एक `Approval` इव्हेंट उत्सर्जित करा. ॲप्लिकेशन कसे लिहिले आहे यावर अवलंबून, स्पेंडर कॉन्ट्रॅक्टला +अप्रूव्हलबद्दल मालकाद्वारे किंवा हे इव्हेंट्स ऐकणाऱ्या सर्व्हरद्वारे सांगितले जाऊ शकते. + +```solidity + emit Approval(owner, spender, amount); + } + +``` + +### दशांश व्हेरिएबलमध्ये बदल करा {#modify-the-decimals-variable} + +```solidity + + + /** + * @dev {decimals} ला 18 च्या डीफॉल्ट मूल्याव्यतिरिक्त दुसऱ्या मूल्यावर सेट करते. + * + * चेतावणी: हे फंक्शन केवळ कन्स्ट्रक्टरमधून कॉल केले पाहिजे. टोकन + * कॉन्ट्रॅक्टशी संवाद साधणारे बहुतेक ॲप्लिकेशन्स {decimals} कधीही बदलतील अशी + * अपेक्षा करणार नाहीत, आणि जर बदलले तर ते चुकीच्या पद्धतीने काम करू शकतात. + */ + function _setupDecimals(uint8 decimals_) internal { + _decimals = decimals_; + } +``` + +हे फंक्शन `_decimals` व्हेरिएबलमध्ये बदल करते जे वापरकर्ता इंटरफेसना रक्कम कशी इंटरप्रेट करायची हे सांगण्यासाठी वापरले जाते. +तुम्ही ते कन्स्ट्रक्टरमधून कॉल केले पाहिजे. त्यानंतरच्या कोणत्याही टप्प्यावर ते कॉल करणे अप्रामाणिक ठरेल, आणि ॲप्लिकेशन्स +ते हाताळण्यासाठी डिझाइन केलेले नाहीत. + +### हुक्स {#hooks} + +```solidity + + /** + * @dev टोकनच्या कोणत्याही हस्तांतरणापूर्वी कॉल केला जाणारा हुक. यामध्ये + * मिंटिंग आणि बर्निंगचा समावेश आहे. + * + * कॉलिंग अटी: + * + * - जेव्हा `from` आणि `to` दोन्ही शून्य-नसलेले असतात, तेव्हा ``from`` च्या टोकनची `amount` + * `to` ला हस्तांतरित केली जाईल. + * - जेव्हा `from` शून्य असेल, तेव्हा `to` साठी `amount` टोकन मिंट केले जातील. + * - जेव्हा `to` शून्य असेल, तेव्हा ``from`` च्या टोकनची `amount` बर्न केली जाईल. + * - `from` आणि `to` दोन्ही कधीही शून्य नसतात. + * + * हुकबद्दल अधिक जाणून घेण्यासाठी, xref:ROOT:extending-contracts.adoc#using-hooks[हुक वापरणे] येथे जा. + */ + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } +} +``` + +हे हस्तांतरणादरम्यान कॉल केले जाणारे हुक फंक्शन आहे. हे येथे रिकामे आहे, परंतु तुम्हाला +त्याला काहीतरी करायला लावायचे असल्यास तुम्ही फक्त ते ओव्हरराइड करा. + +## निष्कर्ष {#conclusion} + +पुनरावलोकनासाठी, या कॉन्ट्रॅक्टमधील काही सर्वात महत्त्वाच्या कल्पना येथे आहेत (माझ्या मते, तुमची मते भिन्न असू शकतात): + +- _ब्लॉकचेनवर कोणतीही गुपिते नाहीत_. स्मार्ट कॉन्ट्रॅक्ट ऍक्सेस करू शकणारी कोणतीही माहिती + संपूर्ण जगासाठी उपलब्ध आहे. +- तुम्ही तुमच्या स्वतःच्या व्यवहारांच्या क्रमावर नियंत्रण ठेवू शकता, परंतु इतर लोकांचे व्यवहार + कधी होतात यावर नाही. हेच कारण आहे की अलाउन्स बदलणे धोकादायक असू शकते, कारण ते + स्पेंडरला दोन्ही अलाउन्सची बेरीज खर्च करू देते. +- `uint256` प्रकाराची मूल्ये रॅप अराउंड होतात. दुसऱ्या शब्दांत, _0-1=2^256-1_. जर ते इच्छित + वर्तन नसेल, तर तुम्हाला ते तपासावे लागेल (किंवा SafeMath लायब्ररी वापरा जी तुमच्यासाठी ते करते). लक्षात घ्या की हे + [Solidity 0.8.0](https://docs.soliditylang.org/en/breaking/080-breaking-changes.html) मध्ये बदलले आहे. +- एका विशिष्ट प्रकारातील सर्व स्टेट बदल एका विशिष्ट ठिकाणी करा, कारण यामुळे ऑडिटिंग सोपे होते. + हेच कारण आहे की आमच्याकडे, उदाहरणार्थ, `_approve` आहे, जे `approve`, `transferFrom`, + `increaseAllowance`, आणि `decreaseAllowance` द्वारे कॉल केले जाते +- स्टेट बदल अणुप्राय (atomic) असावेत, त्यांच्यामध्ये इतर कोणतीही क्रिया नसावी (जसे तुम्ही + `_transfer` मध्ये पाहू शकता). याचे कारण असे की स्टेट बदलादरम्यान तुमच्याकडे एक विसंगत स्टेट असते. उदाहरणार्थ, + तुम्ही प्रेषकाच्या शिलकीतून वजा करता आणि प्राप्तकर्त्याच्या शिलकीत जोडता या वेळेदरम्यान अस्तित्त्वात + असलेले टोकन आवश्यकतेपेक्षा कमी असतात. जर त्यांच्यामध्ये + ऑपरेशन्स असतील तर याचा संभाव्य गैरवापर होऊ शकतो, विशेषतः वेगळ्या कॉन्ट्रॅक्टला केलेले कॉल. + +आता तुम्ही पाहिले आहे की OpenZeppelin ERC-20 कॉन्ट्रॅक्ट कसे लिहिले आहे, आणि विशेषतः ते कसे अधिक +सुरक्षित बनवले आहे, आता जा आणि तुमचे स्वतःचे सुरक्षित कॉन्ट्रॅक्ट आणि ॲप्लिकेशन्स लिहा. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/erc20-with-safety-rails/index.md b/public/content/translations/mr/developers/tutorials/erc20-with-safety-rails/index.md new file mode 100644 index 00000000000..467daa6b667 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/erc20-with-safety-rails/index.md @@ -0,0 +1,217 @@ +--- +title: "ERC-20 सुरक्षा रेल्ससह" +description: "लोकांना मूर्ख चुका टाळण्यास कशी मदत करावी" +author: Ori Pomerantz +lang: mr +tags: [ "erc-20" ] +skill: beginner +published: 2022-08-15 +--- + +## प्रस्तावना {#introduction} + +Ethereum बद्दल एक मोठी चांगली गोष्ट म्हणजे अशी कोणतीही केंद्रीय सत्ता नाही जी तुमचे व्यवहार बदलू किंवा पूर्ववत करू शकेल. Ethereum मधील एक मोठी समस्या अशी आहे की वापरकर्त्याच्या चुका किंवा अवैध व्यवहार पूर्ववत करण्याची शक्ती असलेली कोणतीही केंद्रीय सत्ता नाही. या लेखात तुम्ही [ERC-20](/developers/docs/standards/tokens/erc-20/) टोकन्ससह वापरकर्ते करत असलेल्या काही सामान्य चुकांबद्दल शिकाल, तसेच अशा ERC-20 कॉन्ट्रॅक्ट्स कसे तयार करावे जे वापरकर्त्यांना त्या चुका टाळण्यास मदत करतात, किंवा जे केंद्रीय सत्तेला काही अधिकार देतात (उदाहरणार्थ, खाती फ्रीझ करणे). + +लक्षात घ्या की आम्ही [OpenZeppelin ERC-20 टोकन कॉन्ट्रॅक्ट](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20) वापरणार असलो तरी, हा लेख त्याचे तपशीलवार स्पष्टीकरण देत नाही. तुम्ही ही माहिती [येथे](/developers/tutorials/erc20-annotated-code) शोधू शकता. + +तुम्हाला संपूर्ण सोर्स कोड पहायचा असल्यास: + +1. [Remix IDE](https://remix.ethereum.org/) उघडा. +2. क्लोन गिटहब आयकॉनवर क्लिक करा (![clone github icon](icon-clone.png)). +3. गिटहब रिपॉझिटरी `https://github.com/qbzzt/20220815-erc20-safety-rails` क्लोन करा. +4. **contracts > erc20-safety-rails.sol** उघडा. + +## ERC-20 कॉन्ट्रॅक्ट तयार करणे {#creating-an-erc-20-contract} + +आपण सुरक्षा रेलची कार्यक्षमता जोडण्यापूर्वी, आपल्याला एका ERC-20 कॉन्ट्रॅक्टची आवश्यकता आहे. या लेखात आम्ही [OpenZeppelin Contracts Wizard](https://docs.openzeppelin.com/contracts/5.x/wizard) वापरणार आहोत. ते दुसऱ्या ब्राउझरमध्ये उघडा आणि या सूचनांचे पालन करा: + +1. **ERC20** निवडा. + +2. या सेटिंग्ज प्रविष्ट करा: + + | पॅरामीटर | मूल्य | + | -------------- | ----------------------------------------------------------------------------------- | + | नाव | SafetyRailsToken | + | चिन्ह | SAFE | + | Premint | आम्हाला प्रति टोकन जोडीसाठी एकापेक्षा जास्त लिक्विडिटी पूल नको आहे. | + | वैशिष्ट्ये | काहीही नाही | + | ॲक्सेस कंट्रोल | Ownable | + | अपग्रेडेबिलिटी | काहीही नाही | + +3. वर स्क्रोल करा आणि भिन्न पर्यावरण वापरण्यासाठी **Open in Remix** (Remix साठी) किंवा **Download** वर क्लिक करा. मी असे गृहीत धरतो की तुम्ही Remix वापरत आहात, तुम्ही दुसरे काही वापरल्यास, योग्य बदल करा. + +4. आमच्याकडे आता पूर्णपणे कार्यरत ERC-20 कॉन्ट्रॅक्ट आहे. इम्पोर्ट केलेला कोड पाहण्यासाठी तुम्ही `.deps` > `npm` चा विस्तार करू शकता. + +5. ते ERC-20 कॉन्ट्रॅक्ट म्हणून कार्य करते हे पाहण्यासाठी कॉन्ट्रॅक्ट कंपाईल करा, उपयोजित करा आणि त्याच्याशी खेळा. तुम्हाला Remix कसे वापरावे हे शिकायचे असल्यास, [हे ट्यूटोरियल वापरा](https://remix.ethereum.org/?#activate=udapp,solidity,LearnEth). + +## सामान्य चुका {#common-mistakes} + +### चुका {#the-mistakes} + +वापरकर्ते कधीकधी चुकीच्या पत्त्यावर टोकन पाठवतात. त्यांना काय करायचे होते हे जाणून घेण्यासाठी आम्ही त्यांचे मन वाचू शकत नसलो तरी, दोन प्रकारच्या त्रुटी आहेत ज्या खूप वेळा घडतात आणि ओळखण्यास सोप्या आहेत: + +1. टोकन कॉन्ट्रॅक्टच्या स्वतःच्या पत्त्यावर पाठवणे. उदाहरणार्थ, [Optimism's OP token](https://optimism.mirror.xyz/qvd0WfuLKnePm1Gxb9dpGchPf5uDz5NSMEFdgirDS4c) ने दोन महिन्यांपेक्षा कमी कालावधीत [120,000 पेक्षा जास्त](https://optimism.blockscout.com/address/0x4200000000000000000000000000000000000042) OP टोकन जमा केले. हे मोठ्या प्रमाणात संपत्ती दर्शवते जी लोकांनी कदाचित गमावली आहे. + +2. टोकन रिकाम्या पत्त्यावर पाठवणे, जो [बाह्य मालकीच्या खात्याशी](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) किंवा [स्मार्ट कॉन्ट्रॅक्टशी](/developers/docs/smart-contracts) संबंधित नाही. हे किती वेळा घडते याची माझ्याकडे आकडेवारी नसली तरी, [एका घटनेत 20,000,000 टोकन खर्च होऊ शकले असते](https://gov.optimism.io/t/message-to-optimism-community-from-wintermute/2595). + +### हस्तांतरण प्रतिबंधित करणे {#preventing-transfers} + +OpenZeppelin ERC-20 कॉन्ट्रॅक्टमध्ये [एक हुक, `_beforeTokenTransfer`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol#L364-L368) समाविष्ट आहे, जो टोकन हस्तांतरित होण्यापूर्वी कॉल केला जातो. डीफॉल्टनुसार हा हुक काहीही करत नाही, परंतु आम्ही त्यावर आमची स्वतःची कार्यक्षमता टांगू शकतो, जसे की समस्या असल्यास उलटणारे तपास. + +हुक वापरण्यासाठी, कन्स्ट्रक्टरनंतर हे फंक्शन जोडा: + +```solidity + function _beforeTokenTransfer(address from, address to, uint256 amount) + internal virtual + override(ERC20) + { + super._beforeTokenTransfer(from, to, amount); + } +``` + +जर तुम्ही Solidity शी फारसे परिचित नसाल तर या फंक्शनचे काही भाग नवीन असू शकतात: + +```solidity + internal virtual +``` + +`virtual` कीवर्डचा अर्थ असा आहे की जसे आम्ही `ERC20` कडून कार्यक्षमता मिळवली आणि हे फंक्शन ओव्हरराइड केले, त्याचप्रमाणे इतर कॉन्ट्रॅक्ट्स आमच्याकडून वारसा घेऊ शकतात आणि हे फंक्शन ओव्हरराइड करू शकतात. + +```solidity + override(ERC20) +``` + +आम्हाला स्पष्टपणे नमूद करावे लागेल की आम्ही `_beforeTokenTransfer` ची ERC20 टोकन व्याख्या [ओव्हरराइड](https://docs.soliditylang.org/en/v0.8.15/contracts.html#function-overriding) करत आहोत. सर्वसाधारणपणे, सुरक्षिततेच्या दृष्टिकोनातून, स्पष्ट व्याख्या अंतर्निहित व्याख्यांपेक्षा खूपच चांगल्या आहेत - तुम्ही तुमच्या समोर काहीतरी केले असल्यास ते विसरू शकत नाही. हेच कारण आहे की आम्हाला कोणत्या सुपरक्लासचा `_beforeTokenTransfer` ओव्हरराइड करत आहोत हे निर्दिष्ट करणे आवश्यक आहे. + +```solidity + super._beforeTokenTransfer(from, to, amount); +``` + +ही ओळ कॉन्ट्रॅक्ट किंवा कॉन्ट्रॅक्ट्सच्या `_beforeTokenTransfer` फंक्शनला कॉल करते ज्यांच्याकडून आम्ही वारसा घेतला आहे. या प्रकरणात, ते फक्त `ERC20` आहे, `Ownable` कडे हा हुक नाही. सध्या `ERC20._beforeTokenTransfer` काहीही करत नसले तरी, भविष्यात कार्यक्षमता जोडल्यास आम्ही ते कॉल करतो (आणि मग आम्ही कॉन्ट्रॅक्ट पुन्हा तैनात करण्याचा निर्णय घेतो, कारण उपयोजनानंतर कॉन्ट्रॅक्ट बदलत नाहीत). + +### आवश्यकतांचे कोडिंग करणे {#coding-the-requirements} + +आम्ही फंक्शनमध्ये या आवश्यकता जोडू इच्छितो: + +- `to` पत्ता `address(this)` च्या बरोबर असू शकत नाही, जो ERC-20 कॉन्ट्रॅक्टचा स्वतःचा पत्ता आहे. +- `to` पत्ता रिकामा असू शकत नाही, तो यापैकी एक असावा: + - बाह्य मालकीचे खाते (EOA). एखादा पत्ता थेट EOA आहे की नाही हे आम्ही तपासू शकत नाही, परंतु आम्ही पत्त्याची ETH शिल्लक तपासू शकतो. EOAs मध्ये जवळजवळ नेहमीच शिल्लक असते, जरी ते आता वापरले जात नसले तरीही - शेवटच्या wei पर्यंत ते साफ करणे कठीण आहे. + - एक स्मार्ट कॉन्ट्रॅक्ट. एखादा पत्ता स्मार्ट कॉन्ट्रॅक्ट आहे की नाही हे तपासणे थोडे कठीण आहे. बाह्य कोडची लांबी तपासणारा एक ऑपकोड आहे, ज्याला [`EXTCODESIZE`](https://www.evm.codes/#3b) म्हणतात, परंतु तो थेट Solidity मध्ये उपलब्ध नाही. त्यासाठी आम्हाला [Yul](https://docs.soliditylang.org/en/v0.8.15/yul.html) वापरावे लागेल, जे EVM असेंब्ली आहे. Solidity मधून आम्ही वापरू शकणारी इतर मूल्ये आहेत ([`
.code` आणि `
.codehash`](https://docs.soliditylang.org/en/v0.8.15/units-and-global-variables.html#members-of-address-types)), पण ती अधिक महाग आहेत. + +चला नवीन कोड ओळीने ओळ पाहूया: + +```solidity + require(to != address(this), "कॉन्ट्रॅक्ट पत्त्यावर टोकन पाठवू शकत नाही"); +``` + +ही पहिली आवश्यकता आहे, `to` आणि `this(address)` समान नाहीत हे तपासा. + +```solidity + bool isToContract; + assembly { + isToContract := gt(extcodesize(to), 0) + } +``` + +अशा प्रकारे आम्ही पत्ता कॉन्ट्रॅक्ट आहे की नाही हे तपासतो. आम्ही Yul कडून थेट आउटपुट प्राप्त करू शकत नाही, म्हणून त्याऐवजी आम्ही परिणाम ठेवण्यासाठी एक व्हेरिएबल परिभाषित करतो (या प्रकरणात `isToContract`). Yul ज्या प्रकारे कार्य करते ते असे आहे की प्रत्येक ऑपकोड एक फंक्शन मानला जातो. म्हणून प्रथम आम्ही कॉन्ट्रॅक्टचा आकार मिळविण्यासाठी [`EXTCODESIZE`](https://www.evm.codes/#3b) कॉल करतो आणि नंतर ते शून्य नाही हे तपासण्यासाठी [`GT`](https://www.evm.codes/#11) वापरतो (आम्ही अनसाईंड इंटीजर्ससह काम करत आहोत, म्हणून अर्थातच ते नकारात्मक असू शकत नाही). त्यानंतर आम्ही निकाल `isToContract` मध्ये लिहितो. + +```solidity + require(to.balance != 0 || isToContract, "रिकाम्या पत्त्यावर टोकन पाठवू शकत नाही"); +``` + +आणि शेवटी, आमच्याकडे रिकाम्या पत्त्यांसाठी वास्तविक तपासणी आहे. + +## प्रशासकीय प्रवेश {#admin-access} + +कधीकधी चुका पूर्ववत करू शकणारा प्रशासक असणे उपयुक्त ठरते. गैरवापराची शक्यता कमी करण्यासाठी, हा प्रशासक एक [multisig](https://blog.logrocket.com/security-choices-multi-signature-wallets/) असू शकतो जेणेकरून एका कृतीवर अनेक लोकांना सहमत व्हावे लागेल. या लेखात आमच्याकडे दोन प्रशासकीय वैशिष्ट्ये असतील: + +1. खाती फ्रीझ करणे आणि अनफ्रीझ करणे. हे उपयुक्त असू शकते, उदाहरणार्थ, जेव्हा एखादे खाते धोक्यात आले असेल. +2. मालमत्ता स्वच्छता. + + कधीकधी फसवणूक करणारे वैधता मिळविण्यासाठी वास्तविक टोकनच्या कॉन्ट्रॅक्टवर बनावट टोकन पाठवतात. उदाहरणार्थ, [येथे पहा](https://optimism.blockscout.com/token/0x2348B1a1228DDCd2dB668c3d30207c3E1852fBbe?tab=holders). कायदेशीर ERC-20 कॉन्ट्रॅक्ट [0x4200....0042](https://optimism.blockscout.com/token/0x4200000000000000000000000000000000000042) आहे. त्याचा बहाणा करणारा घोटाळा [0x234....bbe](https://optimism.blockscout.com/token/0x2348B1a1228DDCd2dB668c3d30207c3E1852fBbe) आहे. + + हे देखील शक्य आहे की लोक चुकून आमच्या कॉन्ट्रॅक्टवर कायदेशीर ERC-20 टोकन पाठवतात, जे त्यांना बाहेर काढण्याचा मार्ग हवा असण्याचे आणखी एक कारण आहे. + +OpenZeppelin प्रशासकीय प्रवेश सक्षम करण्यासाठी दोन यंत्रणा प्रदान करते: + +- [`Ownable`](https://docs.openzeppelin.com/contracts/5.x/access-control#ownership-and-ownable) कॉन्ट्रॅक्ट्सचा एकच मालक असतो. `onlyOwner` [modifier](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) असलेले फंक्शन्स फक्त त्या मालकाद्वारे कॉल केले जाऊ शकतात. मालक मालकी दुसऱ्या कोणाला हस्तांतरित करू शकतात किंवा पूर्णपणे सोडून देऊ शकतात. इतर सर्व खात्यांचे अधिकार सामान्यतः समान असतात. +- [`AccessControl`](https://docs.openzeppelin.com/contracts/5.x/access-control#role-based-access-control) कॉन्ट्रॅक्ट्समध्ये [भूमिका-आधारित प्रवेश नियंत्रण (RBAC)](https://en.wikipedia.org/wiki/Role-based_access_control) असते. + +साधेपणासाठी, या लेखात आम्ही `Ownable` वापरतो. + +### कॉन्ट्रॅक्ट्स फ्रीझ करणे आणि थॉ करणे {#freezing-and-thawing-contracts} + +कॉन्ट्रॅक्ट्स फ्रीझ करणे आणि थॉ करण्यासाठी अनेक बदलांची आवश्यकता आहे: + +- कोणते पत्ते फ्रीझ केले आहेत याचा मागोवा ठेवण्यासाठी पत्त्यांवरून [booleans](https://en.wikipedia.org/wiki/Boolean_data_type) पर्यंतचे [mapping](https://www.tutorialspoint.com/solidity/solidity_mappings.htm). सर्व मूल्ये सुरुवातीला शून्य असतात, ज्याचा अर्थ बुलियन मूल्यांसाठी असत्य (false) असा लावला जातो. हेच आम्हाला हवे आहे कारण डीफॉल्टनुसार खाती फ्रीझ केलेली नसतात. + + ```solidity + mapping(address => bool) public frozenAccounts; + ``` + +- एखादे खाते फ्रीझ किंवा थॉ झाल्यावर कोणालाही माहिती देण्यासाठी [Events](https://www.tutorialspoint.com/solidity/solidity_events.htm). तांत्रिकदृष्ट्या या क्रियांसाठी इव्हेंट्स आवश्यक नाहीत, परंतु ते ऑफचेन कोडला या इव्हेंट्स ऐकण्यास आणि काय होत आहे हे जाणून घेण्यास मदत करते. स्मार्ट कॉन्ट्रॅक्टसाठी जेव्हा दुसऱ्या कोणासाठी संबंधित काहीतरी घडते तेव्हा ते उत्सर्जित करणे चांगले शिष्टाचार मानले जाते. + + इव्हेंट्स अनुक्रमित केले जातात जेणेकरून खाते किती वेळा फ्रीझ किंवा थॉ केले गेले आहे हे शोधणे शक्य होईल. + + ```solidity + // जेव्हा खाती फ्रीझ किंवा अनफ्रीझ केली जातात + event AccountFrozen(address indexed _addr); + event AccountThawed(address indexed _addr); + ``` + +- खाती फ्रीझ आणि थॉ करण्यासाठी फंक्शन्स. ही दोन फंक्शन्स जवळजवळ सारखीच आहेत, म्हणून आपण फक्त फ्रीझ फंक्शन पाहू. + + ```solidity + function freezeAccount(address addr) + public + onlyOwner + ``` + + [`public`](https://www.tutorialspoint.com/solidity/solidity_contracts.htm) म्हणून चिन्हांकित केलेली फंक्शन्स इतर स्मार्ट कॉन्ट्रॅक्ट्समधून किंवा थेट व्यवहाराद्वारे कॉल केली जाऊ शकतात. + + ```solidity + { + require(!frozenAccounts[addr], "खाते आधीच फ्रीझ आहे"); + frozenAccounts[addr] = true; + emit AccountFrozen(addr); + } // freezeAccount + ``` + + जर खाते आधीच फ्रीझ असेल, तर उलट करा. अन्यथा, ते फ्रीझ करा आणि एक इव्हेंट `emit` करा. + +- फ्रीझ केलेल्या खात्यातून पैसे हलवण्यापासून रोखण्यासाठी `_beforeTokenTransfer` बदला. लक्षात घ्या की फ्रीझ केलेल्या खात्यात अजूनही पैसे हस्तांतरित केले जाऊ शकतात. + + ```solidity + require(!frozenAccounts[from], "खाते फ्रीझ आहे"); + ``` + +### मालमत्ता स्वच्छता {#asset-cleanup} + +या कॉन्ट्रॅक्टद्वारे ठेवलेले ERC-20 टोकन सोडण्यासाठी, आम्हाला त्यांच्या टोकन कॉन्ट्रॅक्टवर [`transfer`](https://eips.ethereum.org/EIPS/eip-20#transfer) किंवा [`approve`](https://eips.ethereum.org/EIPS/eip-20#approve) फंक्शन कॉल करणे आवश्यक आहे. या प्रकरणात भत्त्यांवर गॅस वाया घालवण्यात काही अर्थ नाही, आपण थेट हस्तांतरण करणेच बरे. + +```solidity + function cleanupERC20( + address erc20, + address dest + ) + public + onlyOwner + { + IERC20 token = IERC20(erc20); +``` + +जेव्हा आम्हाला पत्ता मिळतो तेव्हा कॉन्ट्रॅक्टसाठी ऑब्जेक्ट तयार करण्यासाठी हे सिंटॅक्स आहे. आपण हे करू शकतो कारण आमच्याकडे सोर्स कोडचा भाग म्हणून ERC20 टोकनची व्याख्या आहे (ओळ 4 पहा), आणि त्या फाईलमध्ये [IERC20 साठीची व्याख्या](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) समाविष्ट आहे, जो OpenZeppelin ERC-20 कॉन्ट्रॅक्टचा इंटरफेस आहे. + +```solidity + uint balance = token.balanceOf(address(this)); + token.transfer(dest, balance); + } +``` + +हे एक स्वच्छता फंक्शन आहे, म्हणून आम्ही कोणतेही टोकन सोडू इच्छित नाही असे गृहीत धरले जाते. वापरकर्त्याकडून मॅन्युअली शिल्लक मिळवण्याऐवजी, आपण प्रक्रिया स्वयंचलित करणेच बरे. + +## निष्कर्ष {#conclusion} + +हा एक परिपूर्ण उपाय नाही - "वापरकर्त्याने चूक केली" या समस्येवर कोणताही परिपूर्ण उपाय नाही. तथापि, या प्रकारच्या तपासण्या वापरून किमान काही चुका टाळता येतात. खाती फ्रीझ करण्याची क्षमता, धोकादायक असली तरी, हॅकरला चोरलेले फंड नाकारून काही हॅक्सचे नुकसान मर्यादित करण्यासाठी वापरली जाऊ शकते. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/ethereum-for-web2-auth/index.md b/public/content/translations/mr/developers/tutorials/ethereum-for-web2-auth/index.md new file mode 100644 index 00000000000..57fbf468676 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/ethereum-for-web2-auth/index.md @@ -0,0 +1,886 @@ +--- +title: "web2 प्रमाणीकरणासाठी Ethereum वापरणे" +description: "हे ट्युटोरियल वाचल्यानंतर, एक डेव्हलपर Ethereum लॉगिन (web3) ला SAML लॉगिन सोबत इंटिग्रेट करू शकेल, जे web2 मध्ये सिंगल साइन-ऑन आणि इतर संबंधित सेवा प्रदान करण्यासाठी वापरले जाणारे एक स्टँडर्ड आहे. हे web2 रिसोर्सेसना Ethereum सिग्नेचर्सद्वारे ऑथेंटिकेट करण्याची परवानगी देते, ज्यात वापरकर्त्याचे अ‍ॅट्रिब्यूट्स अटेस्टेशन्समधून येतात." +author: Ori Pomerantz +tags: [ "web2", "प्रमाणीकरण", "eas" ] +skill: beginner +lang: mr +published: 2025-04-30 +--- + +## परिचय + +[SAML](https://www.onelogin.com/learn/saml) हे web2 वर वापरले जाणारे एक स्टँडर्ड आहे जे [आयडेंटिटी प्रोव्हायडर (IdP)](https://en.wikipedia.org/wiki/Identity_provider#SAML_identity_provider) ला [सर्व्हिस प्रोव्हायडर्स (SP)](https://en.wikipedia.org/wiki/Service_provider_\(SAML\)) साठी वापरकर्त्याची माहिती प्रदान करण्याची परवानगी देते. + +या ट्युटोरियलमध्ये तुम्ही Ethereum सिग्नेचरला SAML सोबत कसे समाकलित करायचे ते शिकाल जेणेकरून वापरकर्ते त्यांचे Ethereum वॉलेट वापरून स्वतःला web2 सेवांमध्ये प्रमाणित करू शकतील जे अद्याप मूळतः Ethereum ला सपोर्ट करत नाहीत. + +लक्षात घ्या की हे ट्युटोरियल दोन स्वतंत्र श्रोत्यांसाठी लिहिलेले आहे: + +- Ethereum चे लोक ज्यांना Ethereum समजते आणि ज्यांना SAML शिकण्याची गरज आहे +- Web2 चे लोक ज्यांना SAML आणि web2 प्रमाणीकरण समजते आणि ज्यांना Ethereum शिकण्याची गरज आहे + +परिणामी, यात बरीच प्रास्ताविक माहिती असणार आहे जी तुम्हाला आधीच माहित आहे. ते वगळण्यास मोकळ्या मनाने. + +### Ethereum च्या लोकांसाठी SAML + +SAML हा एक सेंट्रलाइज्ड प्रोटोकॉल आहे. एक सर्व्हिस प्रोव्हायडर (SP) केवळ आयडेंटिटी प्रोव्हायडर (IdP) कडून अझर्शन्स (जसे की "हा माझा वापरकर्ता जॉन आहे, त्याला A, B आणि C करण्याची परवानगी असावी") स्वीकारतो, जर त्याचा त्याच्याशी किंवा त्या IdP च्या प्रमाणपत्रावर सही करणाऱ्या [सर्टिफिकेट अथॉरिटी](https://www.ssl.com/article/what-is-a-certificate-authority-ca/) शी पूर्व-अस्तित्वात असलेला विश्वासाचा संबंध असेल. + +उदाहरणार्थ, SP ही कंपन्यांना प्रवास सेवा पुरवणारी ट्रॅव्हल एजन्सी असू शकते आणि IdP ही कंपनीची अंतर्गत वेबसाईट असू शकते. जेव्हा कर्मचाऱ्यांना व्यवसायासाठी प्रवास बुक करण्याची आवश्यकता असते, तेव्हा ट्रॅव्हल एजन्सी त्यांना प्रवास बुक करण्याची परवानगी देण्यापूर्वी कंपनीद्वारे प्रमाणीकरणासाठी पाठवते. + +![स्टेप बाय स्टेप SAML प्रक्रिया](./fig-01-saml.png) + +हा तो मार्ग आहे ज्याद्वारे तीन घटक, ब्राउझर, SP आणि IdP, प्रवेशासाठी वाटाघाटी करतात. SP ला ब्राउझर वापरणाऱ्या वापरकर्त्याबद्दल आगाऊ काहीही जाणून घेण्याची आवश्यकता नाही, फक्त IdP वर विश्वास ठेवणे आवश्यक आहे. + +### SAML च्या लोकांसाठी Ethereum + +Ethereum ही एक विकेंद्रित प्रणाली आहे. + +![Ethereum लॉगऑन](./fig-02-eth-logon.png) + +वापरकर्त्यांकडे एक प्रायव्हेट की असते (सामान्यतः ब्राउझर एक्स्टेंशनमध्ये ठेवली जाते). प्रायव्हेट की मधून तुम्ही पब्लिक की मिळवू शकता, आणि त्यातून एक 20-बाईट अ‍ॅड्रेस. जेव्हा वापरकर्त्यांना सिस्टीममध्ये लॉग इन करण्याची आवश्यकता असते, तेव्हा त्यांना एका नॉन्स (एकल-वापर मूल्य) सह मेसेजवर सही करण्याची विनंती केली जाते. सर्व्हर त्या अ‍ॅड्रेसद्वारे सिग्नेचर तयार केली गेली होती हे सत्यापित करू शकतो. + +![अटेस्टेशन्समधून अतिरिक्त डेटा मिळवणे](./fig-03-eas-data.png) + +सिग्नेचर केवळ Ethereum अ‍ॅड्रेसची पडताळणी करते. इतर वापरकर्ता अ‍ॅट्रिब्युट्स मिळवण्यासाठी, तुम्ही सामान्यतः [अटेस्टेशन्स](https://attest.org/) वापरता. अटेस्टेशनमध्ये सामान्यतः हे फिल्ड्स असतात: + +- **अटेस्टॉर**, ज्या अ‍ॅड्रेसने अटेस्टेशन केले +- **प्राप्तकर्ता**, ज्या अ‍ॅड्रेसवर अटेस्टेशन लागू होते +- **डेटा**, अटेस्ट केला जाणारा डेटा, जसे की नाव, परवानग्या इ. +- **स्कीमा**, डेटाचा अर्थ लावण्यासाठी वापरल्या जाणार्‍या स्कीमाचा ID. + +Ethereum च्या विकेंद्रित स्वरूपामुळे, कोणताही वापरकर्ता अटेस्टेशन्स करू शकतो. आपण कोणती अटेस्टेशन्स विश्वसनीय मानतो हे ओळखण्यासाठी अटेस्टॉरची ओळख महत्त्वाची आहे. + +## सेटअप + +पहिली पायरी म्हणजे SAML SP आणि SAML IdP एकमेकांशी संवाद साधत असणे. + +1. सॉफ्टवेअर डाऊनलोड करा. या लेखासाठी नमुना सॉफ्टवेअर [github वर](https://github.com/qbzzt/250420-saml-ethereum) आहे. वेगवेगळे टप्पे वेगवेगळ्या शाखांमध्ये संग्रहित केले आहेत, या टप्प्यासाठी तुम्हाला `saml-only` पाहिजे. + + ```sh + git clone https://github.com/qbzzt/250420-saml-ethereum -b saml-only + cd 250420-saml-ethereum + pnpm install + ``` + +2. स्व-स्वाक्षरी केलेल्या प्रमाणपत्रांसह की तयार करा. याचा अर्थ की ही की स्वतःच एक प्रमाणपत्र प्राधिकरण आहे आणि सेवा प्रदात्याकडे व्यक्तिचलितरित्या आयात करणे आवश्यक आहे. अधिक माहितीसाठी [OpenSSL डॉक्स](https://docs.openssl.org/master/man1/openssl-req/) पहा. + + ```sh + mkdir keys + cd keys + openssl req -new -x509 -days 365 -nodes -sha256 -out saml-sp.crt -keyout saml-sp.pem -subj /CN=sp/ + openssl req -new -x509 -days 365 -nodes -sha256 -out saml-idp.crt -keyout saml-idp.pem -subj /CN=idp/ + cd .. + ``` + +3. सर्व्हर (SP आणि IdP दोन्ही) सुरू करा + + ```sh + pnpm start + ``` + +4. URL [http://localhost:3000/](http://localhost:3000/) वर SP वर ब्राउझ करा आणि IdP (पोर्ट 3001) वर पुनर्निर्देशित होण्यासाठी बटणावर क्लिक करा. + +5. IdP ला तुमचा ईमेल अ‍ॅड्रेस द्या आणि **सर्व्हिस प्रोव्हायडरमध्ये लॉगिन करा** वर क्लिक करा. तुम्ही सर्व्हिस प्रोव्हायडर (पोर्ट 3000) वर परत पुनर्निर्देशित झाल्याचे आणि ते तुम्हाला तुमच्या ईमेल अ‍ॅड्रेसने ओळखत असल्याचे पहा. + +### तपशीलवार स्पष्टीकरण + +हे काय घडते, ते टप्प्याटप्प्याने येथे दिले आहे: + +![Ethereum शिवाय सामान्य SAML लॉगऑन](./fig-04-saml-no-eth.png) + +#### src/config.mts + +या फाईलमध्ये आयडेंटिटी प्रोव्हायडर आणि सर्व्हिस प्रोव्हायडर दोन्हीसाठी कॉन्फिगरेशन आहे. सामान्यतः हे दोन वेगळे घटक असतील, परंतु येथे आपण साधेपणासाठी कोड शेअर करू शकतो. + +```typescript +const fs = await import("fs") + +const protocol="http" +``` + +सध्या आम्ही फक्त चाचणी करत आहोत, त्यामुळे HTTP वापरणे ठीक आहे. + +```typescript +export const spCert = fs.readFileSync("keys/saml-sp.crt").toString() +export const idpCert = fs.readFileSync("keys/saml-idp.crt").toString() +``` + +पब्लिक की वाचा, ज्या सामान्यतः दोन्ही घटकांसाठी उपलब्ध असतात (आणि एकतर थेट विश्वासार्ह असतात, किंवा विश्वासार्ह प्रमाणपत्र प्राधिकरणाद्वारे स्वाक्षरी केलेल्या असतात). + +```typescript +export const spPort = 3000 +export const spHostname = "localhost" +export const spDir = "sp" + +export const idpPort = 3001 +export const idpHostname = "localhost" +export const idpDir = "idp" + +export const spUrl = `${protocol}://${spHostname}:${spPort}/${spDir}` +export const idpUrl = `${protocol}://${idpHostname}:${idpPort}/${idpDir}` +``` + +दोन्ही घटकांसाठी URLs. + +```typescript +export const spPublicData = { +``` + +सर्व्हिस प्रोव्हायडरसाठी सार्वजनिक डेटा. + +```typescript + entityID: `${spUrl}/metadata`, +``` + +प्रथेनुसार, SAML मध्ये `entityID` ही URL असते जिथे घटकाचा मेटाडेटा उपलब्ध असतो. हा मेटाडेटा येथील सार्वजनिक डेटाशी संबंधित आहे, फक्त तो XML स्वरूपात आहे. + +```typescript + wantAssertionsSigned: true, + authnRequestsSigned: false, + signingCert: spCert, + allowCreate: true, + assertionConsumerService: [{ + Binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST', + Location: `${spUrl}/assertion`, + }] + } +``` + +आमच्या उद्देशांसाठी सर्वात महत्त्वाची व्याख्या `assertionConsumerServer` आहे. याचा अर्थ असा की सर्व्हिस प्रोव्हायडरला काहीतरी ठामपणे सांगण्यासाठी (उदाहरणार्थ, "तुम्हाला ही माहिती पाठवणारा वापरकर्ता somebody@example.com आहे") आम्हाला `http://localhost:3000/sp/assertion` या URL वर [HTTP POST](https://www.w3schools.com/tags/ref_httpmethods.asp) वापरण्याची आवश्यकता आहे. + +```typescript +export const idpPublicData = { + entityID: `${idpUrl}/metadata`, + signingCert: idpCert, + wantAuthnRequestsSigned: false, + singleSignOnService: [{ + Binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + Location: `${idpUrl}/login` + }], + singleLogoutService: [{ + Binding: "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST", + Location: `${idpUrl}/logout` + }], + } +``` + +आयडेंटिटी प्रोव्हायडरसाठी सार्वजनिक डेटा समान आहे. यात नमूद केले आहे की वापरकर्त्याला लॉग इन करण्यासाठी तुम्ही `http://localhost:3001/idp/login` वर POST करा आणि वापरकर्त्याला लॉग आउट करण्यासाठी तुम्ही `http://localhost:3001/idp/logout` वर POST करा. + +#### src/sp.mts + +हा कोड सर्व्हिस प्रोव्हायडरची अंमलबजावणी करतो. + +```typescript +import * as config from "./config.mts" +const fs = await import("fs") +const saml = await import("samlify") +``` + +आम्ही SAML लागू करण्यासाठी [`samlify`](https://www.npmjs.com/package/samlify) लायब्ररी वापरतो. + +```typescript +import * as validator from "@authenio/samlify-node-xmllint" +saml.setSchemaValidator(validator) +``` + +`samlify` लायब्ररीला एक पॅकेज हवे असते जे XML योग्य आहे, अपेक्षित पब्लिक की ने स्वाक्षरी केलेले आहे इत्यादीची पडताळणी करते. आम्ही या उद्देशासाठी [`@authenio/samlify-node-xmllint`](https://www.npmjs.com/package/@authenio/samlify-node-xmllint) वापरतो. + +```typescript +const express = (await import("express")).default +const spRouter = express.Router() +const app = express() +``` + +एक [`express`](https://expressjs.com/) [`Router`](https://expressjs.com/en/5x/api.html#router) ही एक "मिनी वेब साईट" आहे जी वेबसाईटच्या आत माउंट केली जाऊ शकते. या प्रकरणात, आम्ही सर्व सर्व्हिस प्रोव्हायडर व्याख्या एकत्र गटबद्ध करण्यासाठी याचा वापर करतो. + +```typescript +const spPrivateKey = fs.readFileSync("keys/saml-sp.pem").toString() + +const sp = saml.ServiceProvider({ + privateKey: spPrivateKey, + ...config.spPublicData +}) +``` + +सर्व्हिस प्रोव्हायडरचे स्वतःचे प्रतिनिधित्व म्हणजे सर्व सार्वजनिक डेटा आणि माहितीवर स्वाक्षरी करण्यासाठी वापरली जाणारी प्रायव्हेट की. + +```typescript +const idp = saml.IdentityProvider(config.idpPublicData); +``` + +सार्वजनिक डेटामध्ये सर्व्हिस प्रोव्हायडरला आयडेंटिटी प्रोव्हायडरबद्दल माहित असणे आवश्यक असलेली प्रत्येक गोष्ट असते. + +```typescript +spRouter.get(`/metadata`, + (req, res) => res.header("Content-Type", "text/xml").send(sp.getMetadata()) +) +``` + +इतर SAML घटकांसह आंतरकार्यक्षमता सक्षम करण्यासाठी, सेवा आणि ओळख प्रदात्यांनी त्यांचा सार्वजनिक डेटा (मेटाडेटा म्हणतात) `/metadata` मध्ये XML स्वरूपात उपलब्ध करून दिला पाहिजे. + +```typescript +spRouter.post(`/assertion`, +``` + +हे ब्राउझरद्वारे स्वतःची ओळख पटवण्यासाठी अ‍ॅक्सेस केलेले पेज आहे. असर्शनमध्ये वापरकर्ता ओळखकर्ता (येथे आम्ही ईमेल अ‍ॅड्रेस वापरतो) समाविष्ट असतो आणि त्यात अतिरिक्त अ‍ॅट्रिब्यूट्स समाविष्ट असू शकतात. हे वरील क्रम आकृतीमधील पायरी 7 साठी हँडलर आहे. + +```typescript + async (req, res) => { + // console.log(`SAML response:\n${Buffer.from(req.body.SAMLResponse, 'base64').toString('utf-8')}`) +``` + +तुम्ही अझर्शनमध्ये प्रदान केलेला XML डेटा पाहण्यासाठी टिप्पणी केलेला कमांड वापरू शकता. ते [base64 एन्कोड केलेले](https://en.wikipedia.org/wiki/Base64) आहे. + +```typescript + try { + const loginResponse = await sp.parseLoginResponse(idp, 'post', req); +``` + +आयडेंटिटी सर्व्हरवरून लॉगिन विनंती पार्स करा. + +```typescript + res.send(` + + +

Hello ${loginResponse.extract.nameID}

+ + + `) + res.send(); +``` + +वापरकर्त्याला दाखवण्यासाठी की आम्हाला लॉगिन मिळाले आहे, एक HTML प्रतिसाद पाठवा. + +```typescript + } catch (err) { + console.error('Error processing SAML response:', err); + res.status(400).send('SAML authentication failed'); + } + } +) +``` + +अयशस्वी झाल्यास वापरकर्त्याला कळवा. + +```typescript +spRouter.get('/login', +``` + +जेव्हा ब्राउझर हे पृष्ठ मिळवण्याचा प्रयत्न करतो तेव्हा एक लॉगिन विनंती तयार करा. हे वरील क्रम आकृतीमधील पायरी 1 साठी हँडलर आहे. + +```typescript + async (req, res) => { + const loginRequest = await sp.createLoginRequest(idp, "post") +``` + +लॉगिन विनंती पोस्ट करण्यासाठी माहिती मिळवा. + +```typescript + res.send(` + + + +``` + +हे पृष्ठ फॉर्म (खाली पहा) आपोआप सबमिट करते. यामुळे वापरकर्त्याला पुनर्निर्देशित होण्यासाठी काहीही करण्याची गरज नाही. हे वरील क्रम आकृतीमधील पायरी 2 आहे. + +```typescript +
+``` + +`loginRequest.entityEndpoint` (आयडेंटिटी प्रोव्हायडर एंडपॉईंटची URL) वर पोस्ट करा. + +```typescript + +``` + +इनपुट नाव `loginRequest.type` (`SAMLRequest`) आहे. त्या फिल्डमधील मजकूर `loginRequest.context` आहे, जो पुन्हा base64 एन्कोड केलेला XML आहे. + +```typescript +
+ + + `) + } +) + +app.use(express.urlencoded({extended: true})) +``` + +[हे मिडलवेअर](https://expressjs.com/en/5x/api.html#express.urlencoded) [HTTP विनंती](https://www.tutorialspoint.com/http/http_requests.htm) चा मुख्य भाग वाचतो. डीफॉल्टनुसार एक्सप्रेस त्याकडे दुर्लक्ष करते, कारण बहुतेक विनंत्यांसाठी त्याची आवश्यकता नसते. आम्हाला त्याची आवश्यकता आहे कारण POST मुख्य भाग वापरतो. + +```typescript +app.use(`/${config.spDir}`, spRouter) +``` + +सर्व्हिस प्रोव्हायडर डिरेक्टरी (`/sp`) मध्ये राउटर माउंट करा. + +```typescript +app.get("/", (req, res) => { + res.send(` + + + + + + `) +}) +``` + +जर ब्राउझरला रूट डिरेक्टरी मिळवण्याचा प्रयत्न केल्यास, त्याला लॉगिन पेजची लिंक द्या. + +```typescript +app.listen(config.spPort, () => { + console.log(`service provider is running on http://${config.spHostname}:${config.spPort}`) +}) +``` + +या एक्सप्रेस ॲप्लिकेशनसह `spPort` ऐका. + +#### src/idp.mts + +हा आयडेंटिटी प्रोव्हायडर आहे. हे सर्व्हिस प्रोव्हायडरसारखेच आहे, खालील स्पष्टीकरण वेगळ्या भागांसाठी आहेत. + +```typescript +const xmlParser = new (await import("fast-xml-parser")).XMLParser( + { + ignoreAttributes: false, // Preserve attributes + attributeNamePrefix: "@_", // Prefix for attributes + } +) +``` + +आम्हाला सर्व्हिस प्रोव्हायडरकडून मिळालेली XML विनंती वाचणे आणि समजून घेणे आवश्यक आहे. + +```typescript +const getLoginPage = requestId => ` +``` + +हे फंक्शन वरील क्रम आकृतीमधील पायरी 4 मध्ये परत आलेल्या स्वयंचलित-सबमिट केलेल्या फॉर्मसह पृष्ठ तयार करते. + +```typescript + + + Login page + + +

Login page

+
+ + Email address: +
+ +``` + +आम्ही सर्व्हिस प्रोव्हायडरला दोन फिल्ड्स पाठवतो: + +1. ज्या `requestId` ला आम्ही प्रतिसाद देत आहोत. +2. वापरकर्ता ओळखकर्ता (आम्ही वापरकर्त्याने आतासाठी प्रदान केलेला ईमेल अ‍ॅड्रेस वापरतो). + +```typescript +
+ + + +const idpRouter = express.Router() + +idpRouter.post("/loginSubmitted", async (req, res) => { + const loginResponse = await idp.createLoginResponse( +``` + +हे वरील क्रम आकृतीमधील पायरी 5 साठी हँडलर आहे. [`idp.createLoginResponse`](https://github.com/tngan/samlify/blob/master/src/entity-idp.ts#L73-L125) लॉगिन प्रतिसाद तयार करते. + +```typescript + sp, + { + authnContextClassRef: 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport', + audience: sp.entityID, +``` + +श्रोता सर्व्हिस प्रोव्हायडर आहे. + +```typescript + extract: { + request: { + id: req.body.requestId + } + }, +``` + +विनंतीमधून काढलेली माहिती. विनंतीमधील आपल्याला महत्त्वाचा असलेला एक पॅरामीटर म्हणजे requestId, जो सर्व्हिस प्रोव्हायडरला विनंत्या आणि त्यांचे प्रतिसाद जुळवू देतो. + +```typescript + signingKey: { privateKey: idpPrivateKey, publicKey: config.idpCert } // Ensure signing +``` + +प्रतिसादावर स्वाक्षरी करण्यासाठी डेटा मिळवण्यासाठी आम्हाला `signingKey` ची आवश्यकता आहे. सर्व्हिस प्रोव्हायडर स्वाक्षरी नसलेल्या विनंत्यांवर विश्वास ठेवत नाही. + +```typescript + }, + "post", + { + email: req.body.email +``` + +हे फिल्ड आम्ही सर्व्हिस प्रोव्हायडरला परत पाठवत असलेल्या वापरकर्ता माहितीसह आहे. + +```typescript + } + ); + + res.send(` + + + + +
+ +
+ + + `) +}) +``` + +पुन्हा, स्वयंचलित-सबमिट केलेला फॉर्म वापरा. हे वरील क्रम आकृतीमधील पायरी 6 आहे. + +```typescript + +// IdP endpoint for login requests +idpRouter.post(`/login`, +``` + +हा एंडपॉईंट आहे जो सर्व्हिस प्रोव्हायडरकडून लॉगिन विनंती प्राप्त करतो. हे वरील क्रम आकृतीमधील पायरी 3 साठी हँडलर आहे. + +```typescript + async (req, res) => { + try { + // Workaround because I couldn't get parseLoginRequest to work. + // const loginRequest = await idp.parseLoginRequest(sp, 'post', req) + const samlRequest = xmlParser.parse(Buffer.from(req.body.SAMLRequest, 'base64').toString('utf-8')) + res.send(getLoginPage(samlRequest["samlp:AuthnRequest"]["@_ID"])) +``` + +आपण प्रमाणीकरण विनंतीचा आयडी वाचण्यासाठी [`idp.parseLoginRequest`](https://github.com/tngan/samlify/blob/master/src/entity-idp.ts#L127-L144) वापरू शकले पाहिजे. तथापि, मला ते काम करायला जमले नाही आणि त्यावर जास्त वेळ घालवणे योग्य नव्हते म्हणून मी फक्त एक [सामान्य-उद्देशीय XML पार्सर](https://www.npmjs.com/package/fast-xml-parser) वापरतो. आम्हाला आवश्यक असलेली माहिती `` टॅगमधील `ID` विशेषता आहे, जी XML च्या शीर्ष स्तरावर आहे. + +## Ethereum सिग्नेचर वापरणे + +आता आपण सर्व्हिस प्रोव्हायडरला वापरकर्त्याची ओळख पाठवू शकतो, पुढील पायरी म्हणजे विश्वसनीय पद्धतीने वापरकर्त्याची ओळख मिळवणे. Viem आपल्याला वॉलेटमधून वापरकर्त्याचा अ‍ॅड्रेस विचारण्याची परवानगी देतो, पण याचा अर्थ ब्राउझरकडून माहिती विचारणे आहे. आपण ब्राउझरवर नियंत्रण ठेवत नाही, त्यामुळे आपण त्यातून मिळणाऱ्या प्रतिसादावर आपोआप विश्वास ठेवू शकत नाही. + +त्याऐवजी, IdP ब्राउझरला स्वाक्षरी करण्यासाठी एक स्ट्रिंग पाठवेल. जर ब्राउझरमधील वॉलेट या स्ट्रिंगवर स्वाक्षरी करत असेल, तर याचा अर्थ तो खरोखरच तो अ‍ॅड्रेस आहे (म्हणजेच, त्याला अ‍ॅड्रेसशी संबंधित असलेली प्रायव्हेट की माहित आहे). + +हे कृतीत पाहण्यासाठी, विद्यमान IdP आणि SP थांबवा आणि हे कमांड चालवा: + +```sh +git checkout eth-signatures +pnpm install +pnpm start +``` + +नंतर [SP वर](http://localhost:3000) ब्राउझ करा आणि निर्देशांचे पालन करा. + +लक्षात ठेवा की या टप्प्यावर आम्हाला Ethereum अ‍ॅड्रेसवरून ईमेल अ‍ॅड्रेस कसा मिळवायचा हे माहित नाही, म्हणून त्याऐवजी आम्ही SP ला `@bad.email.address` असे रिपोर्ट करतो. + +### तपशीलवार स्पष्टीकरण + +बदल मागील आकृतीमधील पायरी 4-5 मध्ये आहेत. + +![Ethereum सिग्नेचरसह SAML](./fig-05-saml-w-signature.png) + +आम्ही बदललेली एकमेव फाईल `idp.mts` आहे. येथे बदललेले भाग आहेत. + +```typescript +import { v4 as uuidv4 } from 'uuid' +import { verifyMessage } from 'viem' +``` + +आम्हाला या दोन अतिरिक्त लायब्ररींची गरज आहे. आम्ही [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce) व्हॅल्यू तयार करण्यासाठी [`uuid`](https://www.npmjs.com/package/uuid) वापरतो. मूल्य स्वतः महत्त्वाचे नाही, फक्त ते एकदाच वापरले जाते हे महत्त्वाचे आहे. + +[`viem`](https://viem.sh/) लायब्ररी आम्हाला Ethereum डेफिनेशन्स वापरण्याची परवानगी देते. येथे आम्हाला स्वाक्षरी खरोखरच वैध आहे की नाही हे तपासण्यासाठी त्याची आवश्यकता आहे. + +```typescript +const loginPrompt = "To access the service provider, sign this nonce: " +``` + +वॉलेट वापरकर्त्याला मेसेजवर स्वाक्षरी करण्याची परवानगी विचारते. फक्त एक नॉन्स असलेला संदेश वापरकर्त्यांना गोंधळात टाकू शकतो, म्हणून आम्ही हा प्रॉम्प्ट समाविष्ट करतो. + +```typescript +// Keep requestIDs here +let nonces = {} +``` + +आम्हाला त्याला प्रतिसाद देण्यासाठी विनंती माहितीची आवश्यकता आहे. आपण ते विनंतीसह पाठवू शकतो (पायरी 4), आणि ते परत मिळवू शकतो (पायरी 5). तथापि, आपण ब्राउझरकडून मिळणाऱ्या माहितीवर विश्वास ठेवू शकत नाही, जो संभाव्यतः शत्रुत्वापूर्ण वापरकर्त्याच्या नियंत्रणाखाली असतो. त्यामुळे ते येथे संग्रहित करणे चांगले आहे, नॉन्सला की म्हणून वापरून. + +लक्षात घ्या की आम्ही हे साधेपणासाठी येथे व्हेरिएबल म्हणून करत आहोत. तथापि, याचे अनेक तोटे आहेत: + +- आपण डिनायल ऑफ सर्व्हिस हल्ल्यासाठी असुरक्षित आहोत. एक दुर्भावनापूर्ण वापरकर्ता अनेक वेळा लॉग ऑन करण्याचा प्रयत्न करू शकतो, ज्यामुळे आमची मेमरी भरली जाईल. +- जर IdP प्रक्रिया पुन्हा सुरू करण्याची आवश्यकता असेल, तर आम्ही विद्यमान मूल्ये गमावतो. +- आपण अनेक प्रक्रिया ओलांडून लोड बॅलन्स करू शकत नाही, कारण प्रत्येकाचे स्वतःचे व्हेरिएबल असेल. + +उत्पादन प्रणालीवर आपण डेटाबेस वापरू आणि काही प्रकारची समाप्ती यंत्रणा लागू करू. + +```typescript +const getSignaturePage = requestId => { + const nonce = uuidv4() + nonces[nonce] = requestId +``` + +एक नॉन्स तयार करा आणि भविष्यातील वापरासाठी `requestId` संग्रहित करा. + +```typescript + return ` + + + + + +

Please sign

+ +
+ + + +` +} +``` + +उरलेले फक्त स्टँडर्ड HTML आहे. + +```typescript +idpRouter.get("/signature/:nonce/:account/:signature", async (req, res) => { +``` + +हे क्रम आकृतीमधील पायरी 5 साठी हँडलर आहे. + +```typescript + const requestId = nonces[req.params.nonce] + if (requestId === undefined) { + res.send("Bad nonce") + return ; + } + + nonces[req.params.nonce] = undefined +``` + +रिक्वेस्ट आयडी मिळवा, आणि `nonces` मधून नॉन्स हटवा जेणेकरून त्याचा पुन्हा वापर होणार नाही याची खात्री करा. + +```typescript + try { +``` + +सिग्नेचर अवैध असण्याचे अनेक मार्ग असल्यामुळे, आपण हे `try ...` मध्ये गुंडाळतो. कोणत्याही फेकलेल्या त्रुटी पकडण्यासाठी `catch` ब्लॉक. + +```typescript + const validSignature = await verifyMessage({ + address: req.params.account, + message: `${loginPrompt}${req.params.nonce}`, + signature: req.params.signature + }) +``` + +क्रम आकृतीमधील पायरी 5.5 लागू करण्यासाठी [`verifyMessage`](https://viem.sh/docs/actions/public/verifyMessage#verifymessage) वापरा. + +```typescript + if (!validSignature) + throw("Bad signature") + } catch (err) { + res.send("Error:" + err) + return ; + } +``` + +हँडलरचा उर्वरित भाग एका लहान बदलाशिवाय, आपण पूर्वी `/loginSubmitted` हँडलरमध्ये जे केले आहे त्याच्या समतुल्य आहे. + +```typescript + const loginResponse = await idp.createLoginResponse( + . + . + . + { + email: req.params.account + "@bad.email.address" + } + ); +``` + +आमच्याकडे खरा ईमेल अ‍ॅड्रेस नाही (तो आम्हाला पुढील विभागात मिळेल), म्हणून आतासाठी आम्ही Ethereum अ‍ॅड्रेस परत करतो आणि तो ईमेल अ‍ॅड्रेस नाही असे स्पष्टपणे चिन्हांकित करतो. + +```typescript +// IdP endpoint for login requests +idpRouter.post(`/login`, + async (req, res) => { + try { + // Workaround because I couldn't get parseLoginRequest to work. + // const loginRequest = await idp.parseLoginRequest(sp, 'post', req) + const samlRequest = xmlParser.parse(Buffer.from(req.body.SAMLRequest, 'base64').toString('utf-8')) + res.send(getSignaturePage(samlRequest["samlp:AuthnRequest"]["@_ID"])) + } catch (err) { + console.error('Error processing SAML response:', err); + res.status(400).send('SAML authentication failed'); + } + } +) +``` + +`getLoginPage` ऐवजी, आता पायरी 3 हँडलरमध्ये `getSignaturePage` वापरा. + +## ईमेल अ‍ॅड्रेस मिळवणे + +पुढील पायरी ईमेल अ‍ॅड्रेस मिळवणे आहे, जो सर्व्हिस प्रोव्हायडरने मागितलेला ओळखकर्ता आहे. ते करण्यासाठी, आम्ही [Ethereum Attestation Service (EAS)](https://attest.org/) वापरतो. + +अटेस्टेशन्स मिळवण्याचा सर्वात सोपा मार्ग म्हणजे [GraphQL API](https://docs.attest.org/docs/developer-tools/api) वापरणे. आम्ही ही क्वेरी वापरतो: + +``` +query GetAttestationsByRecipient { + attestations( + where: { + recipient: { equals: "${getAddress(ethAddr)}" } + schemaId: { equals: "0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977" } + } + take: 1 + ) { + data + id + attester + } +} +``` + +या [`schemaId`](https://optimism.easscan.org/schema/view/0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977) मध्ये फक्त एक ई-मेल अ‍ॅड्रेस समाविष्ट आहे. ही क्वेरी या स्कीमाच्या अटेस्टेशन्ससाठी विचारते. अटेस्टेशनच्या विषयाला `recipient` म्हणतात. तो नेहमी एक Ethereum अ‍ॅड्रेस असतो. + +चेतावणी: आपण येथे अटेस्टेशन्स मिळवत असलेल्या पद्धतीत दोन सुरक्षा समस्या आहेत. + +- आपण API एंडपॉईंट, `https://optimism.easscan.org/graphql` वर जात आहोत, जो एक सेंट्रलाइज्ड घटक आहे. आपण `id` अ‍ॅट्रिब्यूट मिळवू शकतो आणि नंतर अटेस्टेशन वास्तविक आहे की नाही हे तपासण्यासाठी ऑनचेन तपासणी करू शकतो, परंतु API एंडपॉईंट अजूनही अटेस्टेशन्सबद्दल न सांगता सेन्सॉर करू शकतो. + + ही समस्या सोडवणे अशक्य नाही, आपण स्वतःचा GraphQL एंडपॉईंट चालवू शकतो आणि चेन लॉगमधून अटेस्टेशन्स मिळवू शकतो, परंतु ते आमच्या उद्देशांसाठी जास्त आहे. + +- आपण अटेस्टॉरच्या ओळखीकडे पाहत नाही. कोणीही आम्हाला खोटी माहिती देऊ शकतो. वास्तविक जगातील अंमलबजावणीमध्ये आमच्याकडे विश्वासार्ह अटेस्टॉरचा एक सेट असेल आणि आम्ही फक्त त्यांच्या अटेस्टेशन्स पाहू. + +हे कृतीत पाहण्यासाठी, विद्यमान IdP आणि SP थांबवा आणि हे कमांड चालवा: + +```sh +git checkout email-address +pnpm install +pnpm start +``` + +नंतर तुमचा ई-मेल अ‍ॅड्रेस द्या. तुमच्याकडे ते करण्याचे दोन मार्ग आहेत: + +- प्रायव्हेट की वापरून वॉलेट आयात करा आणि चाचणीसाठी `0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80` ही प्रायव्हेट की वापरा. + +- तुमच्या स्वतःच्या ई-मेल अ‍ॅड्रेससाठी एक अटेस्टेशन जोडा: + + 1. [अटेस्टेशन एक्सप्लोररमधील स्कीमावर](https://optimism.easscan.org/schema/view/0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977) ब्राउझ करा. + + 2. **स्कीमासह अटेस्ट करा** वर क्लिक करा. + + 3. प्राप्तकर्ता म्हणून तुमचा Ethereum अ‍ॅड्रेस, ईमेल अ‍ॅड्रेस म्हणून तुमचा ई-मेल अ‍ॅड्रेस टाका आणि **ऑनचेन** निवडा. नंतर **अटेस्टेशन तयार करा** वर क्लिक करा. + + 4. तुमच्या वॉलेटमध्ये व्यवहाराला मंजुरी द्या. गॅससाठी पैसे देण्यासाठी तुम्हाला [Optimism Blockchain](https://app.optimism.io/bridge/deposit) वर काही ETH ची आवश्यकता असेल. + +एकतर, तुम्ही हे केल्यानंतर [http://localhost:3000](http://localhost:3000) वर ब्राउझ करा आणि निर्देशांचे पालन करा. जर तुम्ही चाचणीची प्रायव्हेट की आयात केली असेल, तर तुम्हाला मिळणारा ई-मेल `test_addr_0@example.com` आहे. जर तुम्ही तुमचा स्वतःचा अ‍ॅड्रेस वापरला असेल, तर तो तुम्ही अटेस्ट केलेला असावा. + +### तपशीलवार स्पष्टीकरण + +![Ethereum अ‍ॅड्रेसवरून ई-मेल मिळवणे](./fig-06-saml-sig-n-email.png) + +नवीन पायऱ्या GraphQL कम्युनिकेशन, पायऱ्या 5.6 आणि 5.7 आहेत. + +पुन्हा, येथे `idp.mts` चे बदललेले भाग आहेत. + +```typescript +import { GraphQLClient } from 'graphql-request' +import { SchemaEncoder } from '@ethereum-attestation-service/eas-sdk' +``` + +आपल्याला आवश्यक असलेल्या लायब्ररी आयात करा. + +```typescript +const graphqlEndpointUrl = "https://optimism.easscan.org/graphql" +``` + +[प्रत्येक ब्लॉकचेनसाठी एक वेगळा एंडपॉईंट](https://docs.attest.org/docs/developer-tools/api) आहे. + +```typescript +const graphqlClient = new GraphQLClient(graphqlEndpointUrl, { fetch }) +``` + +एक नवीन `GraphQLClient` क्लायंट तयार करा जो आपण एंडपॉईंटवर क्वेरी करण्यासाठी वापरू शकतो. + +```typescript +const graphqlSchema = 'string emailAddress' +const graphqlEncoder = new SchemaEncoder(graphqlSchema) +``` + +GraphQL आपल्याला फक्त बाइट्ससह एक अपारदर्शक डेटा ऑब्जेक्ट देतो. ते समजून घेण्यासाठी आपल्याला स्कीमाची आवश्यकता आहे. + +```typescript +const ethereumAddressToEmail = async ethAddr => { +``` + +Ethereum अ‍ॅड्रेसवरून ई-मेल अ‍ॅड्रेसवर जाण्यासाठी एक फंक्शन. + +```typescript + const query = ` + query GetAttestationsByRecipient { +``` + +ही एक GraphQL क्वेरी आहे. + +```typescript + attestations( +``` + +आम्ही अटेस्टेशन्स शोधत आहोत. + +```typescript + where: { + recipient: { equals: "${getAddress(ethAddr)}" } + schemaId: { equals: "0xfa2eff59a916e3cc3246f9aec5e0ca00874ae9d09e4678e5016006f07622f977" } + } +``` + +आम्हाला हवी असलेली अटेस्टेशन्स आमच्या स्कीमामध्ये आहेत, जिथे प्राप्तकर्ता `getAddress(ethAddr)` आहे. [`getAddress`](https://viem.sh/docs/utilities/getAddress#getaddress) फंक्शन खात्री करते की आमच्या अ‍ॅड्रेसमध्ये योग्य [चेकसम](https://github.com/ethereum/ercs/blob/master/ERCS/erc-55.md) आहे. हे आवश्यक आहे कारण GraphQL केस-सिग्निफिकेंट आहे. "0xBAD060A7", "0xBad060A7", आणि "0xbad060a7" ही वेगवेगळी मूल्ये आहेत. + +```typescript + take: 1 +``` + +आपल्याला कितीही अटेस्टेशन्स सापडले तरी, आम्हाला फक्त पहिलेच हवे आहे. + +```typescript + ) { + data + id + attester + } + }` +``` + +आम्हाला मिळवायचे असलेले फिल्ड्स. + +- `attester`: ज्या अ‍ॅड्रेसने अटेस्टेशन सादर केले. सामान्यतः याचा वापर अटेस्टेशनवर विश्वास ठेवायचा की नाही हे ठरवण्यासाठी केला जातो. +- `id`: अटेस्टेशन आयडी. तुम्ही GraphQL क्वेरीमधून मिळालेली माहिती योग्य आहे की नाही हे तपासण्यासाठी [अटेस्टेशन ऑनचेन वाचण्यासाठी](https://optimism.blockscout.com/address/0x4200000000000000000000000000000000000021?tab=read_proxy&source_address=0x4E0275Ea5a89e7a3c1B58411379D1a0eDdc5b088#0xa3112a64) हे मूल्य वापरू शकता. +- `data`: स्कीमा डेटा (या प्रकरणात, ई-मेल अ‍ॅड्रेस). + +```typescript + const queryResult = await graphqlClient.request(query) + + if (queryResult.attestations.length == 0) + return "no_address@available.is" +``` + +जर अटेस्टेशन नसेल, तर एक असे मूल्य परत करा जे स्पष्टपणे चुकीचे आहे, परंतु सर्व्हिस प्रोव्हायडरला ते वैध वाटेल. + +```typescript + const attestationDataFields = graphqlEncoder.decodeData(queryResult.attestations[0].data) + return attestationDataFields[0].value.value +} +``` + +जर मूल्य असेल, तर डेटा डीकोड करण्यासाठी `decodeData` वापरा. आम्हाला ते प्रदान करत असलेला मेटाडेटा नको, फक्त मूल्यच हवे आहे. + +```typescript + const loginResponse = await idp.createLoginResponse( + sp, + { + . + . + . + }, + "post", + { + email: await ethereumAddressToEmail(req.params.account) + } + ); +``` + +ई-मेल अ‍ॅड्रेस मिळवण्यासाठी नवीन फंक्शन वापरा. + +## विकेंद्रीकरणाचे काय? + +या कॉन्फिगरेशनमध्ये वापरकर्ते स्वतःला दुसरे कोणीतरी असल्याचे भासवू शकत नाहीत, जोपर्यंत आपण Ethereum ते ई-मेल अ‍ॅड्रेस मॅपिंगसाठी विश्वासार्ह अटेस्टर्सवर अवलंबून आहोत. तथापि, आमचा ओळख प्रदाता अजूनही एक केंद्रीकृत घटक आहे. ज्याच्याकडे आयडेंटिटी प्रोव्हायडरची प्रायव्हेट की आहे तो सर्व्हिस प्रोव्हायडरला खोटी माहिती पाठवू शकतो. + +[मल्टी-पार्टी कम्प्युटेशन (MPC)](https://en.wikipedia.org/wiki/Secure_multi-party_computation) वापरून एक उपाय असू शकतो. मी भविष्यातील ट्युटोरियलमध्ये त्याबद्दल लिहिण्याची आशा करतो. + +## निष्कर्ष + +लॉग ऑन स्टँडर्डचा अवलंब, जसे की Ethereum सिग्नेचर, कोंबडी आणि अंड्याच्या समस्येला सामोरे जातो. सर्व्हिस प्रोव्हायडर शक्य तितक्या विस्तृत बाजारपेठेत आवाहन करू इच्छितात. वापरकर्ते त्यांच्या लॉग ऑन स्टँडर्डला सपोर्ट करण्याची चिंता न करता सेवांमध्ये प्रवेश करू इच्छितात. +अ‍ॅडॉप्टर्स तयार करणे, जसे की Ethereum IdP, आपल्याला या अडथळ्यावर मात करण्यास मदत करू शकते. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md b/public/content/translations/mr/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md new file mode 100644 index 00000000000..30aa0f8a9a5 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/getting-started-with-ethereum-development-using-alchemy/index.md @@ -0,0 +1,156 @@ +--- +title: "Ethereum डेव्हलपमेंटसोबत सुरुवात करणे" +description: "हे Ethereum डेव्हलपमेंटची सुरुवात करण्यासाठी नवशिक्यांचे मार्गदर्शक आहे. आम्ही तुम्हाला API एंडपॉइंट तयार करण्यापासून, कमांड लाइन रिक्वेस्ट करण्यापर्यंत, ते तुमचे पहिले web3 स्क्रिप्ट लिहिण्यापर्यंत घेऊन जाऊ! ब्लॉकचेन डेव्हलपमेंट अनुभवाची आवश्यकता नाही!" +author: "Elan Halpern" +tags: + [ + "javascript", + "ethers.js", + "नोड्स", + "querying", + "alchemy" + ] +skill: beginner +lang: mr +published: 2020-10-30 +source: Medium +sourceUrl: https://medium.com/alchemy-api/getting-started-with-ethereum-development-using-alchemy-c3d6a45c567f +--- + +![Ethereum आणि Alchemy चे लोगो](./ethereum-alchemy.png) + +हे Ethereum डेव्हलपमेंटची सुरुवात करण्यासाठी नवशिक्यांचे मार्गदर्शक आहे. या ट्युटोरियलसाठी आम्ही [Alchemy](https://alchemyapi.io/) वापरणार आहोत, जे Maker, 0x, MyEtherWallet, Dharma आणि Kyber सह 70% आघाडीच्या ब्लॉकचेन ॲप्समधील लाखो वापरकर्त्यांना सामर्थ्य देणारे, अग्रगण्य ब्लॉकचेन डेव्हलपर प्लॅटफॉर्म आहे. Alchemy आम्हाला Ethereum चेनवर एका API एंडपॉइंटमध्ये प्रवेश देईल जेणेकरून आम्ही व्यवहार (transactions) वाचू आणि लिहू शकू. + +आम्ही तुम्हाला Alchemy वर साइन अप करण्यापासून ते तुमचे पहिले web3 स्क्रिप्ट लिहिण्यापर्यंत घेऊन जाऊ! ब्लॉकचेन डेव्हलपमेंट अनुभवाची आवश्यकता नाही! + +## १. मोफत Alchemy खात्यासाठी साइन अप करा {#sign-up-for-a-free-alchemy-account} + +Alchemy वर खाते तयार करणे सोपे आहे, [येथे विनामूल्य साइन अप करा](https://auth.alchemy.com/). + +## २. Alchemy ॲप तयार करा {#create-an-alchemy-app} + +Ethereum चेनशी संवाद साधण्यासाठी आणि Alchemy ची उत्पादने वापरण्यासाठी, तुमच्या रिक्वेस्ट प्रमाणित करण्याकरिता तुम्हाला एका API की ची आवश्यकता आहे. + +तुम्ही [डॅशबोर्डवरून API की तयार करू शकता](https://dashboard.alchemy.com/). नवीन की तयार करण्यासाठी, खाली दर्शविल्याप्रमाणे “ॲप तयार करा” (Create App) वर नेव्हिगेट करा: + +[_ShapeShift_](https://shapeshift.com/) _यांचे त्यांचा डॅशबोर्ड दाखवण्याची परवानगी दिल्याबद्दल विशेष आभार!_ + +![Alchemy डॅशबोर्ड](./alchemy-dashboard.png) + +तुमची नवीन की मिळवण्यासाठी “ॲप तयार करा” (Create App) अंतर्गत तपशील भरा. तुम्ही पूर्वी तयार केलेले ॲप्स आणि तुमच्या टीमने बनवलेले ॲप्स देखील येथे पाहू शकता. कोणत्याही ॲपसाठी विद्यमान की मिळवण्यासाठी “की पाहा” (View Key) वर क्लिक करा. + +![Alchemy सह ॲप तयार करा स्क्रीनशॉट](./create-app.png) + +तुम्ही “ॲप्स” (Apps) वर फिरवून आणि एक निवडून विद्यमान API की देखील मिळवू शकता. तुम्ही येथे “की पाहा” (View Key) करू शकता, तसेच विशिष्ट डोमेन व्हाइटलिस्ट करण्यासाठी, अनेक डेव्हलपर टूल्स पाहण्यासाठी, आणि ॲनालिटिक्स पाहण्यासाठी “ॲप संपादित करा” (Edit App) देखील वापरू शकता. + +![API की कशा मिळवायच्या हे वापरकर्त्याला दाखवणारी Gif](./pull-api-keys.gif) + +## ३. कमांड लाइनवरून रिक्वेस्ट करा {#make-a-request-from-the-command-line} + +JSON-RPC आणि curl वापरून Alchemy द्वारे Ethereum ब्लॉकचेनशी संवाद साधा. + +मॅन्युअल रिक्वेस्टसाठी, आम्ही `POST` रिक्वेस्टद्वारे `JSON-RPC` शी संवाद साधण्याची शिफारस करतो. फक्त `Content-Type: application/json` हेडर आणि तुमची क्वेरी `POST` बॉडी म्हणून खालील फील्डसह पास करा: + +- `jsonrpc`: JSON-RPC आवृत्ती—सध्या, फक्त `2.0` समर्थित आहे. +- `method`: ETH API पद्धत. [API संदर्भ पाहा.](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc) +- `params`: पद्धतीला पास करण्यासाठी पॅरामीटर्सची यादी. +- `id`: तुमच्या रिक्वेस्टचा ID. हे प्रतिसादाद्वारे परत केले जाईल जेणेकरून प्रतिसाद कोणत्या रिक्वेस्टचा आहे याचा तुम्ही मागोवा ठेवू शकाल. + +सध्याची गॅस किंमत मिळवण्यासाठी तुम्ही कमांड लाइनवरून चालवू शकता असे एक उदाहरण येथे आहे: + +```bash +curl https://eth-mainnet.alchemyapi.io/v2/demo \ +-X POST \ +-H "Content-Type: application/json" \ +-d '{"jsonrpc":"2.0","method":"eth_gasPrice","params":[],"id":73}' +``` + +_**टीप:** [https://eth-mainnet.alchemyapi.io/v2/demo](https://eth-mainnet.alchemyapi.io/jsonrpc/demo) ला तुमच्या स्वतःच्या API की `https://eth-mainnet.alchemyapi.io/v2/**your-api-key` ने बदला._ + +**परिणाम:** + +```json +{ "id": 73,"jsonrpc": "2.0","result": "0x09184e72a000" // 10000000000000 } +``` + +## ४. तुमचा Web3 क्लायंट सेट अप करा {#set-up-your-web3-client} + +**तुमच्याकडे विद्यमान क्लायंट असल्यास,** तुमचा सध्याचा नोड प्रोव्हायडर URL तुमच्या API की सह Alchemy URL मध्ये बदला: `“https://eth-mainnet.alchemyapi.io/v2/your-api-key"` + +**_टीप:_** खालील स्क्रिप्ट्स **नोड संदर्भात** चालवणे किंवा **फाईलमध्ये सेव्ह करणे** आवश्यक आहे, कमांड लाइनवरून चालवू नये. तुमच्याकडे आधीपासून Node किंवा npm इंस्टॉल केलेले नसल्यास, मॅकसाठी हे द्रुत [सेट-अप मार्गदर्शक](https://app.gitbook.com/@alchemyapi/s/alchemy/guides/alchemy-for-macs) पाहा. + +अशा अनेक [Web3 लायब्ररीज](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) आहेत ज्या तुम्ही Alchemy सह समाकलित करू शकता, तथापि, आम्ही [Alchemy Web3](https://docs.alchemy.com/reference/api-overview) वापरण्याची शिफारस करतो, जे web3.js साठी एक ड्रॉप-इन रिप्लेसमेंट आहे, आणि जे Alchemy सोबत अखंडपणे काम करण्यासाठी तयार आणि कॉन्फिगर केले आहे. हे स्वयंचलित पुन्हा प्रयत्न (automatic retries) आणि मजबूत WebSocket समर्थन यासारखे अनेक फायदे प्रदान करते. + +AlchemyWeb3.js इंस्टॉल करण्यासाठी, **तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये नेव्हिगेट करा** आणि चालवा: + +**Yarn सह:** + +``` +yarn add @alch/alchemy-web3 +``` + +**NPM सह:** + +``` +npm install @alch/alchemy-web3 +``` + +Alchemy च्या नोड इन्फ्रास्ट्रक्चरशी संवाद साधण्यासाठी, NodeJS मध्ये चालवा किंवा हे जावास्क्रिप्ट फाईलमध्ये जोडा: + +```js +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3( + "https://eth-mainnet.alchemyapi.io/v2/your-api-key" +) +``` + +## ५. तुमची पहिली Web3 स्क्रिप्ट लिहा! {#write-your-first-web3-script} + +आता थोडे web3 प्रोग्रामिंग करून पाहण्यासाठी, आपण Ethereum मेननेटवरून नवीनतम ब्लॉक नंबर प्रिंट करणारी एक साधी स्क्रिप्ट लिहूया. + +**१.** **तुम्ही आधीच केले नसेल तर, तुमच्या टर्मिनलमध्ये एक नवीन प्रोजेक्ट डिरेक्टरी तयार करा आणि त्यात cd करा:** + +``` +mkdir web3-example +cd web3-example +``` + +**२.** **तुम्ही आधीच केली नसेल तर तुमच्या प्रोजेक्टमध्ये Alchemy web3 (किंवा कोणतीही web3) डिपेन्डन्सी इंस्टॉल करा:** + +``` +npm install @alch/alchemy-web3 +``` + +**३.** **`index.js` नावाची फाईल तयार करा आणि खालील सामग्री जोडा:** + +> तुम्ही शेवटी `demo` ला तुमच्या Alchemy HTTP API की ने बदलले पाहिजे. + +```js +async function main() { + const { createAlchemyWeb3 } = require("@alch/alchemy-web3") + const web3 = createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/v2/demo") + const blockNumber = await web3.eth.getBlockNumber() + console.log("नवीनतम ब्लॉक नंबर आहे " + blockNumber) +} +main() +``` + +async गोष्टींशी अपरिचित आहात? ही [मीडियम पोस्ट](https://medium.com/better-programming/understanding-async-await-in-javascript-1d81bb079b2c) पाहा. + +\*\*4. **node वापरून ते तुमच्या टर्मिनलमध्ये चालवा** + +``` +node index.js +``` + +\*\*5. **तुम्हाला आता तुमच्या कन्सोलमध्ये नवीनतम ब्लॉक नंबर आउटपुट दिसेल!** + +``` +नवीनतम ब्लॉक नंबर आहे 11043912 +``` + +**व्वा!** अभिनंदन! **तुम्ही Alchemy वापरून तुमची पहिली web3 स्क्रिप्ट नुकतीच लिहिली आहे 🎉** + +पुढे काय करायचे याची खात्री नाही? आमच्या [हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट मार्गदर्शक](https://www.alchemy.com/docs/hello-world-smart-contract) मध्ये तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट तैनात (deploy) करून आणि काही solidity प्रोग्रामिंग करून पाहा, किंवा [डॅशबोर्ड डेमो ॲप](https://docs.alchemyapi.io/tutorials/demo-app) सह तुमचे डॅशबोर्ड ज्ञान तपासा! + +_[Alchemy सह विनामूल्य साइन अप करा](https://auth.alchemy.com/), आमचे [दस्तऐवजीकरण](https://www.alchemy.com/docs/) पाहा, आणि नवीनतम बातम्यांसाठी, आम्हाला [Twitter](https://twitter.com/AlchemyPlatform) वर फॉलो करा_. diff --git a/public/content/translations/mr/developers/tutorials/guide-to-smart-contract-security-tools/index.md b/public/content/translations/mr/developers/tutorials/guide-to-smart-contract-security-tools/index.md new file mode 100644 index 00000000000..075df7fff4b --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/guide-to-smart-contract-security-tools/index.md @@ -0,0 +1,102 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट सुरक्षा साधनांसाठी मार्गदर्शक" +description: "तीन वेगवेगळ्या चाचणी आणि प्रोग्राम विश्लेषण तंत्रांचे अवलोकन" +author: "Trailofbits" +lang: mr +tags: [ "सॉलिडिटी", "स्मार्ट कॉन्ट्रॅक्ट", "सुरक्षा" ] +skill: intermediate +published: 2020-09-07 +source: Building secure contracts +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis +--- + +आम्ही तीन विशिष्ट चाचणी आणि प्रोग्राम विश्लेषण तंत्र वापरणार आहोत: + +- **[Slither](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) सह स्थिर विश्लेषण.** प्रोग्रामचे सर्व मार्ग एकाच वेळी अंदाजित आणि विश्लेषित केले जातात, वेगवेगळ्या प्रोग्राम प्रस्तुतीकरणाद्वारे (उदा., कंट्रोल-फ्लो-ग्राफ) +- **[Echidna](/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/) सह फझिंग.** व्यवहारांच्या छद्म-यादृच्छिक निर्मितीसह कोड कार्यान्वित केला जातो. फझर दिलेल्या गुणधर्माचे उल्लंघन करण्यासाठी व्यवहारांचा क्रम शोधण्याचा प्रयत्न करेल. +- **[Manticore](/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/) सह प्रतीकात्मक अंमलबजावणी.** एक औपचारिक पडताळणी तंत्र, जे प्रत्येक अंमलबजावणी मार्गाला गणितीय सूत्रात अनुवादित करते, ज्यावर मर्यादा तपासल्या जाऊ शकतात. + +प्रत्येक तंत्राचे फायदे आणि तोटे आहेत, आणि ते [विशिष्ट प्रकरणांमध्ये](#determining-security-properties) उपयुक्त ठरेल: + +| तंत्र | टूल | वापर | वेग | चुकलेले बग्स | खोटे अलार्म | +| ---------------------- | --------- | -------------------------------- | ------ | ------------- | ----------- | +| स्थिर विश्लेषण | Slither | CLI आणि स्क्रिप्ट्स | सेकंद | मध्यम | कमी | +| फझिंग | Echidna | Solidity गुणधर्म | मिनिटे | कमी | काहीही नाही | +| प्रतीकात्मक अंमलबजावणी | Manticore | Solidity गुणधर्म आणि स्क्रिप्ट्स | तास | काहीही नाही\* | काहीही नाही | + +\* जर सर्व मार्ग टाइमआउटशिवाय शोधले गेले तर + +**Slither** काही सेकंदात कॉन्ट्रॅक्ट्सचे विश्लेषण करते, तथापि, स्थिर विश्लेषणामुळे खोटे अलार्म येऊ शकतात आणि ते जटिल तपासणीसाठी (उदा., अंकगणितीय तपासणी) कमी योग्य असेल. अंगभूत डिटेक्टरमध्ये पुश-बटण प्रवेशासाठी API द्वारे Slither चालवा किंवा वापरकर्ता-परिभाषित तपासणीसाठी API द्वारे चालवा. + +**Echidna** ला चालण्यासाठी काही मिनिटे लागतात आणि ते फक्त खरे सकारात्मक परिणाम देईल. Echidna वापरकर्त्याने प्रदान केलेले सुरक्षा गुणधर्म तपासते, जे Solidity मध्ये लिहिलेले आहेत. हे यादृच्छिक शोधावर आधारित असल्यामुळे बग्स चुकवू शकते. + +**Manticore** सर्वात "जड" विश्लेषण करते. Echidna प्रमाणेच, Manticore वापरकर्त्याने प्रदान केलेले गुणधर्म सत्यापित करते. त्याला चालण्यासाठी जास्त वेळ लागेल, पण ते एका गुणधर्माची वैधता सिद्ध करू शकते आणि खोटे अलार्म कळवणार नाही. + +## सुचवलेले कार्यप्रवाह {#suggested-workflow} + +आता कोणतेही सोपे बग्स नाहीत किंवा नंतर येणार नाहीत याची खात्री करण्यासाठी Slither च्या अंगभूत डिटेक्टरने सुरुवात करा. वारसा, व्हेरिएबल अवलंबित्व आणि संरचनात्मक समस्यांशी संबंधित गुणधर्म तपासण्यासाठी Slither वापरा. जसजसा कोडबेस वाढेल, तसतसे स्टेट मशीनचे अधिक जटिल गुणधर्म तपासण्यासाठी Echidna वापरा. Solidity कडून अनुपलब्ध संरक्षणांसाठी सानुकूल तपासणी विकसित करण्यासाठी Slither ला पुन्हा भेट द्या, जसे की फंक्शन ओव्हरराइड होण्यापासून संरक्षण. शेवटी, महत्त्वपूर्ण सुरक्षा गुणधर्मांची लक्ष्यित पडताळणी करण्यासाठी Manticore वापरा, उदा., अंकगणितीय ऑपरेशन्स. + +- सामान्य समस्या शोधण्यासाठी Slither चा CLI वापरा +- आपल्या कॉन्ट्रॅक्टच्या उच्च-स्तरीय सुरक्षा गुणधर्मांची चाचणी करण्यासाठी Echidna वापरा +- सानुकूल स्थिर तपासणी लिहिण्यासाठी Slither वापरा +- जेव्हा तुम्हाला महत्त्वपूर्ण सुरक्षा गुणधर्मांची सखोल खात्री हवी असेल तेव्हा Manticore वापरा + +**युनिट चाचण्यांवर एक टीप**. उच्च-गुणवत्तेचे सॉफ्टवेअर तयार करण्यासाठी युनिट चाचण्या आवश्यक आहेत. तथापि, ही तंत्रे सुरक्षा त्रुटी शोधण्यासाठी सर्वात योग्य नाहीत. ते सामान्यतः कोडच्या सकारात्मक वर्तनाची चाचणी करण्यासाठी वापरले जातात (म्हणजे, कोड सामान्य संदर्भात अपेक्षेप्रमाणे कार्य करतो), तर सुरक्षा त्रुटी विकसकांनी विचारात न घेतलेल्या एज केसेसमध्ये असतात. आमच्या डझनभर स्मार्ट कॉन्ट्रॅक्ट सुरक्षा पुनरावलोकनांच्या अभ्यासात, [युनिट टेस्ट कव्हरेजचा आमच्या क्लायंटच्या कोडमध्ये आढळलेल्या सुरक्षा त्रुटींच्या संख्येवर किंवा तीव्रतेवर कोणताही परिणाम झाला नाही](https://blog.trailofbits.com/2019/08/08/246-findings-from-our-smart-contract-audits-an-executive-summary/). + +## सुरक्षा गुणधर्म निश्चित करणे {#determining-security-properties} + +आपल्या कोडची प्रभावीपणे चाचणी आणि पडताळणी करण्यासाठी, आपण लक्ष देण्याची आवश्यकता असलेली क्षेत्रे ओळखली पाहिजेत. तुमची सुरक्षेवर खर्च होणारी संसाधने मर्यादित असल्याने, तुमच्या प्रयत्नांना अनुकूल करण्यासाठी तुमच्या कोडबेसमधील कमकुवत किंवा उच्च-मूल्य असलेल्या भागांची व्याप्ती करणे महत्त्वाचे आहे. थ्रेट मॉडेलिंग मदत करू शकते. पुनरावलोकन करण्याचा विचार करा: + +- [रॅपिड रिस्क असेसमेंट्स](https://infosec.mozilla.org/guidelines/risk/rapid_risk_assessment.html) (वेळ कमी असताना आमचा प्राधान्याचा दृष्टिकोन) +- [डेटा-सेंट्रिक सिस्टम थ्रेट मॉडेलिंगसाठी मार्गदर्शक](https://csrc.nist.gov/pubs/sp/800/154/ipd) (उर्फ NIST 800-154) +- [शोस्टॅक थ्रेट मॉडेलिंग](https://www.amazon.com/Threat-Modeling-Designing-Adam-Shostack/dp/1118809998) +- [STRIDE](https://wikipedia.org/wiki/STRIDE_\(security\)) / [DREAD](https://wikipedia.org/wiki/DREAD_\(risk_assessment_model\)) +- [PASTA](https://wikipedia.org/wiki/Threat_model#P.A.S.T.A.) +- [असर्शन्सचा वापर](https://blog.regehr.org/archives/1091) + +### घटक {#components} + +तुम्हाला काय तपासायचे आहे हे जाणून घेतल्याने तुम्हाला योग्य साधन निवडण्यातही मदत होईल. + +स्मार्ट कॉन्ट्रॅक्टसाठी वारंवार संबंधित असलेल्या व्यापक क्षेत्रांमध्ये यांचा समावेश आहे: + +- **स्टेट मशीन.** बहुतेक कॉन्ट्रॅक्ट्स स्टेट मशीन म्हणून सादर केले जाऊ शकतात. हे तपासण्याचा विचार करा की (१) कोणतीही अवैध स्थिती गाठली जाऊ शकत नाही, (२) जर एखादी स्थिती वैध असेल तर ती गाठली जाऊ शकते, आणि (३) कोणतीही स्थिती कॉन्ट्रॅक्टला अडकवत नाही. + + - स्टेट-मशीन स्पेसिफिकेशन्सची चाचणी घेण्यासाठी Echidna आणि Manticore ही पसंतीची साधने आहेत. + +- **प्रवेश नियंत्रणे.** जर तुमच्या सिस्टममध्ये विशेषाधिकार असलेले वापरकर्ते असतील (उदा., मालक, नियंत्रक, ...) तुम्ही हे सुनिश्चित केले पाहिजे की (१) प्रत्येक वापरकर्ता केवळ अधिकृत कृती करू शकतो आणि (२) कोणताही वापरकर्ता अधिक विशेषाधिकार असलेल्या वापरकर्त्याच्या कृतींना ब्लॉक करू शकत नाही. + + - Slither, Echidna आणि Manticore योग्य प्रवेश नियंत्रणे तपासू शकतात. उदाहरणार्थ, Slither हे तपासू शकते की केवळ व्हाइटलिस्ट केलेल्या फंक्शन्समध्ये onlyOwner मॉडिफायरची कमतरता आहे. Echidna आणि Manticore अधिक जटिल प्रवेश नियंत्रणासाठी उपयुक्त आहेत, जसे की कॉन्ट्रॅक्टने विशिष्ट स्थितीत पोहोचल्यास दिलेली परवानगी. + +- **अंकगणितीय ऑपरेशन्स.** अंकगणितीय ऑपरेशन्सची सुदृढता तपासणे महत्त्वाचे आहे. ओव्हरफ्लो/अंडरफ्लो टाळण्यासाठी सर्वत्र `SafeMath` वापरणे हे एक चांगले पाऊल आहे, तथापि, आपण तरीही इतर अंकगणितीय त्रुटींचा विचार केला पाहिजे, ज्यात राउंडिंग समस्या आणि कॉन्ट्रॅक्टला अडकवणाऱ्या त्रुटींचा समावेश आहे. + + - Manticore येथे सर्वोत्तम पर्याय आहे. जर अंकगणित SMT सॉल्व्हरच्या कार्यक्षेत्राबाहेर असेल तर Echidna वापरला जाऊ शकतो. + +- **वारसा अचूकता.** Solidity कॉन्ट्रॅक्ट्स मोठ्या प्रमाणावर एकाधिक वारसावर अवलंबून असतात. शॅडोइंग फंक्शनमध्ये `super` कॉल चुकणे आणि c3 लिनिअरायझेशन क्रमाचा चुकीचा अर्थ लावणे यासारख्या चुका सहजपणे येऊ शकतात. + + - या समस्या शोधण्याची खात्री करण्यासाठी Slither हे साधन आहे. + +- **बाह्य संवाद.** कॉन्ट्रॅक्ट्स एकमेकांशी संवाद साधतात, आणि काही बाह्य कॉन्ट्रॅक्ट्सवर विश्वास ठेवला जाऊ नये. उदाहरणार्थ, जर तुमचा कॉन्ट्रॅक्ट बाह्य ऑरेकल्सवर अवलंबून असेल, तर उपलब्ध ऑरेकल्सपैकी अर्धे जरी तडजोड केले गेले तरी तो सुरक्षित राहील का? + + - तुमच्या कॉन्ट्रॅक्ट्ससह बाह्य संवादांची चाचणी करण्यासाठी Manticore आणि Echidna सर्वोत्तम पर्याय आहेत. Manticore मध्ये बाह्य कॉन्ट्रॅक्ट्सना स्टब करण्यासाठी एक अंगभूत यंत्रणा आहे. + +- **मानक अनुरूपता.** Ethereum मानकांच्या (उदा., ERC20) डिझाइनमध्ये त्रुटींचा इतिहास आहे. तुम्ही ज्या मानकावर तयार करत आहात त्याच्या मर्यादांबद्दल जागरूक रहा. + - Slither, Echidna, आणि Manticore तुम्हाला दिलेल्या मानकापासून विचलन शोधण्यात मदत करतील. + +### साधन निवड चीटशीट {#tool-selection-cheatsheet} + +| घटक | साधने | उदाहरणे | +| ------------------ | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| स्टेट मशीन | Echidna, Manticore | | +| प्रवेश नियंत्रण | Slither, Echidna, Manticore | [Slither व्यायाम 2](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise2.md), [Echidna व्यायाम 2](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-2.md) | +| अंकगणितीय ऑपरेशन्स | Manticore, Echidna | [Echidna व्यायाम 1](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/exercises/Exercise-1.md), [Manticore व्यायाम 1 - 3](https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore/exercises) | +| वारसा अचूकता | Slither | [Slither व्यायाम 1](https://github.com/crytic/slither/blob/7f54c8b948c34fb35e1d61adaa1bd568ca733253/docs/src/tutorials/exercise1.md) | +| बाह्य संवाद | Manticore, Echidna | | +| मानक अनुरूपता | Slither, Echidna, Manticore | [`slither-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) | + +तुमच्या ध्येयांनुसार इतर क्षेत्रांची तपासणी करणे आवश्यक असेल, परंतु लक्ष केंद्रित करण्याची ही स्थूल-दाणेदार क्षेत्रे कोणत्याही स्मार्ट कॉन्ट्रॅक्ट सिस्टमसाठी एक चांगली सुरुवात आहेत. + +आमच्या सार्वजनिक ऑडिटमध्ये सत्यापित किंवा चाचणी केलेल्या गुणधर्मांची उदाहरणे आहेत. वास्तविक-जगातील सुरक्षा गुणधर्मांचे पुनरावलोकन करण्यासाठी खालील अहवालांमधील `स्वयंचलित चाचणी आणि पडताळणी` विभाग वाचण्याचा विचार करा: + +- [0x](https://github.com/trailofbits/publications/blob/master/reviews/0x-protocol.pdf) +- [Balancer](https://github.com/trailofbits/publications/blob/master/reviews/BalancerCore.pdf) diff --git a/public/content/translations/mr/developers/tutorials/hello-world-smart-contract-fullstack/index.md b/public/content/translations/mr/developers/tutorials/hello-world-smart-contract-fullstack/index.md new file mode 100644 index 00000000000..70432814ee9 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/hello-world-smart-contract-fullstack/index.md @@ -0,0 +1,1540 @@ +--- +title: "नवशिक्यांसाठी हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट - फुलस्टॅक" +description: "Ethereum वर एक साधे स्मार्ट कॉन्ट्रॅक्ट लिहिण्यावर आणि उपयोजित करण्यावर एक प्रास्ताविक ट्युटोरियल." +author: "nstrike2" +tags: + [ + "सॉलिडिटी", + "hardhat", + "alchemy", + "स्मार्ट कॉन्ट्रॅक्ट", + "डिप्लॉयिंग", + "ब्लॉक एक्सप्लोरर", + "frontend", + "व्यवहार" + ] +skill: beginner +lang: mr +published: 2021-10-25 +--- + +तुम्ही ब्लॉकचेन डेव्हलपमेंटसाठी नवीन असाल आणि तुम्हाला कोठून सुरुवात करावी किंवा स्मार्ट कॉन्ट्रॅक्ट कसे तैनात करावे आणि त्यांच्याशी संवाद कसा साधावा हे माहित नसेल, तर हे मार्गदर्शक तुमच्यासाठी आहे. आम्ही [MetaMask](https://metamask.io), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org), आणि [Alchemy](https://alchemy.com/eth) वापरून Goerli टेस्ट नेटवर्कवर एक साधे, स्मार्ट कॉन्ट्रॅक्ट तयार करणे आणि तैनात करण्याच्या प्रक्रियेतून जाऊ. + +हे ट्युटोरियल पूर्ण करण्यासाठी तुम्हाला Alchemy खात्याची आवश्यकता असेल. [विनामूल्य खात्यासाठी साइन अप करा](https://www.alchemy.com/). + +तुम्हाला कोणत्याही क्षणी प्रश्न असल्यास, [Alchemy Discord](https://discord.gg/gWuC7zB) मध्ये संपर्क साधा! + +## भाग १ - Hardhat वापरून तुमचे स्मार्ट कॉन्ट्रॅक्ट तयार करा आणि तैनात करा {#part-1} + +### Ethereum नेटवर्कशी कनेक्ट करा {#connect-to-the-ethereum-network} + +Ethereum चेनला विनंत्या करण्याचे अनेक मार्ग आहेत. साधेपणासाठी, आम्ही Alchemy वर एक विनामूल्य खाते वापरू, जे एक ब्लॉकचेन डेव्हलपर प्लॅटफॉर्म आणि API आहे, जे आम्हाला स्वतः नोड न चालवता Ethereum चेनशी संवाद साधण्याची परवानगी देते. Alchemy मध्ये देखरेख आणि विश्लेषणासाठी डेव्हलपर टूल्स देखील आहेत; आम्ही या ट्युटोरियलमध्ये आमच्या स्मार्ट कॉन्ट्रॅक्ट तैनातीमध्ये काय चालले आहे हे समजून घेण्यासाठी त्यांचा फायदा घेऊ. + +### तुमचे ॲप आणि API की तयार करा {#create-your-app-and-api-key} + +एकदा तुम्ही Alchemy खाते तयार केल्यावर, तुम्ही ॲप तयार करून API की तयार करू शकता. यामुळे तुम्हाला Goerli टेस्टनेटवर विनंत्या करण्याची परवानगी मिळेल. तुम्ही टेस्टनेटशी परिचित नसल्यास, तुम्ही [नेटवर्क निवडण्याबाबत Alchemy चे मार्गदर्शक](https://www.alchemy.com/docs/choosing-a-web3-network) वाचू शकता. + +Alchemy डॅशबोर्डवर, नेव्हिगेशन बारमधील **ॲप्स** ड्रॉपडाउन शोधा आणि **ॲप तयार करा** वर क्लिक करा. + +![हॅलो वर्ल्ड ॲप तयार करा](./hello-world-create-app.png) + +तुमच्या ॲपला '_Hello World_' असे नाव द्या आणि एक लहान वर्णन लिहा. तुमचे पर्यावरण म्हणून **स्टेजिंग** आणि तुमचे नेटवर्क म्हणून **Goerli** निवडा. + +![ॲप व्ह्यू हॅलो वर्ल्ड तयार करा](./create-app-view-hello-world.png) + +_टीप: **Goerli** निवडण्याची खात्री करा, अन्यथा हे ट्युटोरियल कार्य करणार नाही._ + +**ॲप तयार करा** वर क्लिक करा. तुमचे ॲप खालील टेबलमध्ये दिसेल. + +### एक Ethereum खाते तयार करा {#create-an-ethereum-account} + +तुम्हाला व्यवहार पाठवण्यासाठी आणि प्राप्त करण्यासाठी Ethereum खात्याची आवश्यकता आहे. आम्ही MetaMask वापरू, जो ब्राउझरमधील एक व्हर्च्युअल वॉलेट आहे, जो वापरकर्त्यांना त्यांच्या Ethereum खात्याचा पत्ता व्यवस्थापित करू देतो. + +तुम्ही [येथे](https://metamask.io/download) विनामूल्य MetaMask खाते डाउनलोड आणि तयार करू शकता. तुम्ही खाते तयार करत असताना, किंवा तुमच्याकडे आधीपासूनच खाते असल्यास, वरच्या उजवीकडील “Goerli टेस्ट नेटवर्क” वर स्विच करण्याची खात्री करा (जेणेकरून आपण खऱ्या पैशांशी व्यवहार करत नाही आहोत). + +### पायरी ४: फॉसेटमधून इथर जोडा {#step-4-add-ether-from-a-faucet} + +तुमचे स्मार्ट कॉन्ट्रॅक्ट टेस्ट नेटवर्कवर तैनात करण्यासाठी, तुम्हाला काही बनावट ETH ची आवश्यकता असेल. Goerli नेटवर्कवर ETH मिळवण्यासाठी, Goerli फॉसेटवर जा आणि तुमच्या Goerli खात्याचा पत्ता प्रविष्ट करा. लक्षात ठेवा की Goerli फॉसेट अलीकडे थोडे अविश्वसनीय असू शकतात - प्रयत्न करण्यासाठी पर्यायांची सूची पाहण्यासाठी [टेस्ट नेटवर्क पृष्ठ](/developers/docs/networks/#goerli) पहा: + +_टीप: नेटवर्कमधील गर्दीमुळे, यास थोडा वेळ लागू शकतो._ +`` + +### पायरी 5: तुमची शिल्लक तपासा {#step-5-check-your-balance} + +तुमच्या वॉलेटमध्ये ETH आहे की नाही हे पुन्हा तपासण्यासाठी, चला [Alchemy च्या कंपोझर टूल](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) वापरून [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) विनंती करूया. हे आमच्या वॉलेटमधील ETH ची रक्कम परत करेल. अधिक जाणून घेण्यासाठी [कंपोझर टूल कसे वापरावे यावरील Alchemy चे छोटे ट्युटोरियल](https://youtu.be/r6sjRxBZJuU) पहा. + +तुमचा MetaMask खात्याचा पत्ता इनपुट करा आणि **विनंती पाठवा** वर क्लिक करा. तुम्हाला खालील कोड स्निपेटसारखा प्रतिसाद दिसेल. + +```json +{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } +``` + +> _टीप: हा निकाल ETH मध्ये नाही, तर wei मध्ये आहे. Wei चा वापर इथरच्या सर्वात लहान मूल्यांकनासाठी केला जातो._ + +हुश्श! आपले बनावट पैसे तिथे आहेत. + +### पायरी 6: आपला प्रकल्प सुरू करा {#step-6-initialize-our-project} + +प्रथम, आपल्याला आपल्या प्रकल्पासाठी एक फोल्डर तयार करण्याची आवश्यकता असेल. तुमच्या कमांड लाइनवर नेव्हिगेट करा आणि खालील इनपुट करा. + +``` +mkdir hello-world +cd hello-world +``` + +आता आपण आपल्या प्रोजेक्ट फोल्डरमध्ये आहोत, आपण प्रोजेक्ट सुरू करण्यासाठी `npm init` वापरू. + +> तुमच्याकडे अद्याप npm इंस्टॉल केलेले नसल्यास, [Node.js आणि npm इंस्टॉल करण्यासाठी या सूचनांचे](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) पालन करा. + +या ट्युटोरियलच्या उद्देशासाठी, तुम्ही आरंभीकरणाच्या प्रश्नांची उत्तरे कशी देता याने काही फरक पडत नाही. संदर्भासाठी आम्ही ते कसे केले ते येथे आहे: + +``` +पॅकेजचे नाव: (hello-world) +आवृत्ती: (1.0.0) +वर्णन: हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट +एंट्री पॉइंट: (index.js) +चाचणी कमांड: +git रेपॉजिटरी: +कीवर्ड: +लेखक: +परवाना: (ISC) + +/Users/.../.../.../hello-world/package.json मध्ये लिहिणार आहात: + +{ + "name": "hello-world", + "version": "1.0.0", + "description": "हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC" +} +``` + +package.json ला मंजूर करा आणि आपण पुढे जाण्यास तयार आहोत! + +### पायरी 7: Hardhat डाउनलोड करा {#step-7-download-hardhat} + +Hardhat हे तुमचे Ethereum सॉफ्टवेअर संकलित (compile), उपयोजित (deploy), चाचणी (test) आणि डीबग (debug) करण्यासाठी एक विकास वातावरण आहे. हे डेव्हलपर्सना थेट चेनवर उपयोजित करण्यापूर्वी स्थानिक पातळीवर स्मार्ट कॉन्ट्रॅक्ट्स आणि dApps तयार करताना मदत करते. + +आपल्या `hello-world` प्रोजेक्टमध्ये चालवा: + +``` +npm install --save-dev hardhat +``` + +[इन्स्टॉलेशन सूचनांविषयी](https://hardhat.org/getting-started/#overview) अधिक तपशीलांसाठी हे पेज पहा. + +### पायरी 8: Hardhat प्रकल्प तयार करा {#step-8-create-hardhat-project} + +आमच्या `hello-world` प्रकल्प फोल्डरमध्ये, चालवा: + +``` +npx hardhat +``` + +त्यानंतर तुम्हाला एक स्वागत संदेश आणि तुम्हाला काय करायचे आहे यासाठी पर्याय दिसेल. “create an empty hardhat.config.js” निवडा: + +``` +888 888 888 888 888 +888 888 888 888 888 +888 888 888 888 888 +8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 +888 888 "88b 888P" d88" 888 888 "88b "88b 888 +888 888 .d888888 888 888 888 888 888 .d888888 888 +888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. +888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 + +👷 Hardhat v2.0.11 मध्ये आपले स्वागत आहे 👷‍ + +तुम्ही काय करू इच्छिता? … +एक नमुना प्रकल्प तयार करा +❯ एक रिक्त hardhat.config.js तयार करा +बाहेर पडा +``` + +हे प्रकल्पात `hardhat.config.js` फाइल तयार करेल. आपण हे नंतर ट्युटोरियलमध्ये आपल्या प्रकल्पासाठी सेटअप निर्दिष्ट करण्यासाठी वापरू. + +### पायरी 9: प्रकल्प फोल्डर जोडा {#step-9-add-project-folders} + +प्रकल्प संघटित ठेवण्यासाठी, चला दोन नवीन फोल्डर तयार करूया. कमांड लाइनमध्ये, तुमच्या `hello-world` प्रकल्पाच्या रूट डिरेक्टरीमध्ये नेव्हिगेट करा आणि टाइप करा: + +``` +mkdir contracts +mkdir scripts +``` + +- `contracts/` मध्ये आपण आपली हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट कोड फाईल ठेवू +- `scripts/` मध्ये आपण आपले कॉन्ट्रॅक्ट उपयोजित करण्यासाठी आणि त्याच्याशी संवाद साधण्यासाठी स्क्रिप्ट्स ठेवू + +### पायरी 10: आमचे कॉन्ट्रॅक्ट लिहा {#step-10-write-our-contract} + +तुम्ही स्वतःला विचारत असाल की, आपण कोड कधी लिहिणार आहोत? वेळ झाली आहे! + +तुमच्या आवडत्या एडिटरमध्ये हॅलो-वर्ल्ड प्रकल्प उघडा. स्मार्ट कॉन्ट्रॅक्ट सामान्यतः Solidity मध्ये लिहिले जातात, जे आपण आपले स्मार्ट कॉन्ट्रॅक्ट लिहिण्यासाठी वापरू.‌ + +1. `contracts` फोल्डरवर नेव्हिगेट करा आणि `HelloWorld.sol` नावाची नवीन फाइल तयार करा +2. खाली एक नमुना हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट आहे जो आपण या ट्युटोरियलसाठी वापरणार आहोत. खालील मजकूर `HelloWorld.sol` फाइलमध्ये कॉपी करा. + +_टीप: हे कॉन्ट्रॅक्ट काय करते हे समजून घेण्यासाठी टिप्पण्या वाचण्याची खात्री करा._ + +``` +// सिमेंटिक व्हर्जनिंग वापरून, Solidity ची आवृत्ती निर्दिष्ट करते. +// अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity >=0.7.3; + +// `HelloWorld` नावाचे एक कॉन्ट्रॅक्ट परिभाषित करते. +// एक कॉन्ट्रॅक्ट म्हणजे फंक्शन्स आणि डेटा (त्याची स्थिती) यांचा संग्रह. एकदा तैनात झाल्यावर, एक कॉन्ट्रॅक्ट Ethereum ब्लॉकचेनवर एका विशिष्ट पत्त्यावर राहते. अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + //जेव्हा अपडेट फंक्शन कॉल केले जाते तेव्हा उत्सर्जित होते + //स्मार्ट कॉन्ट्रॅक्ट इव्हेंट्स हे तुमच्या कॉन्ट्रॅक्टसाठी तुमच्या ॲपच्या फ्रंट-एंडला ब्लॉकचेनवर काहीतरी घडल्याचे कळवण्याचा एक मार्ग आहे, जे काही विशिष्ट इव्हेंट्ससाठी 'ऐकत' असू शकते आणि ते घडल्यावर कारवाई करू शकते. + event UpdatedMessages(string oldStr, string newStr); + + // `string` प्रकारचा `message` नावाचा एक स्टेट व्हेरिएबल घोषित करते. + // स्टेट व्हेरिएबल्स असे व्हेरिएबल्स आहेत ज्यांची मूल्ये कॉन्ट्रॅक्ट स्टोरेजमध्ये कायमस्वरूपी संग्रहित केली जातात. `public` कीवर्ड व्हेरिएबल्सला कॉन्ट्रॅक्टच्या बाहेरून प्रवेशयोग्य बनवतो आणि एक फंक्शन तयार करतो ज्याला इतर कॉन्ट्रॅक्ट्स किंवा क्लायंट मूल्यामध्ये प्रवेश करण्यासाठी कॉल करू शकतात. + string public message; + + // अनेक वर्ग-आधारित ऑब्जेक्ट-ओरिएंटेड भाषांप्रमाणे, कंस्ट्रक्टर एक विशेष फंक्शन आहे जे फक्त कॉन्ट्रॅक्ट निर्मितीवर कार्यान्वित होते. + // कंस्ट्रक्टरचा वापर कॉन्ट्रॅक्टचा डेटा सुरू करण्यासाठी केला जातो. अधिक जाणून घ्या:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // एक स्ट्रिंग युक्तिवाद `initMessage` स्वीकारते आणि कॉन्ट्रॅक्टच्या `message` स्टोरेज व्हेरिएबलमध्ये मूल्य सेट करते). + message = initMessage; + } + + // एक सार्वजनिक फंक्शन जे स्ट्रिंग युक्तिवाद स्वीकारते आणि `message` स्टोरेज व्हेरिएबल अपडेट करते. + function update(string memory newMessage) public { + string memory oldMsg = message; + message = newMessage; + emit UpdatedMessages(oldMsg, newMessage); + } +} +``` + +हे एक मूलभूत स्मार्ट कॉन्ट्रॅक्ट आहे जे निर्मितीच्या वेळी एक संदेश संग्रहित करते. `update` फंक्शनला कॉल करून ते अपडेट केले जाऊ शकते. + +### पायरी 11: MetaMask आणि Alchemy ला तुमच्या प्रकल्पाशी कनेक्ट करा {#step-11-connect-metamask-alchemy-to-your-project} + +आपण MetaMask वॉलेट, Alchemy खाते तयार केले आहे आणि आपले स्मार्ट कॉन्ट्रॅक्ट लिहिले आहे, आता या तिन्हीना जोडण्याची वेळ आली आहे. + +तुमच्या वॉलेटमधून पाठवलेल्या प्रत्येक व्यवहारासाठी तुमच्या युनिक खाजगी की वापरून स्वाक्षरी आवश्यक असते. आमच्या प्रोग्रामला ही परवानगी देण्यासाठी, आम्ही आमची खाजगी की एका पर्यावरण फाइलमध्ये सुरक्षितपणे संग्रहित करू शकतो. आम्ही येथे Alchemy साठी एक API की देखील संग्रहित करू. + +> व्यवहार पाठवण्याबद्दल अधिक जाणून घेण्यासाठी, वेब3 वापरून व्यवहार पाठवण्यावरील [हे ट्युटोरियल](https://www.alchemy.com/docs/hello-world-smart-contract#step-11-connect-metamask--alchemy-to-your-project) पहा. + +प्रथम, तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये dotenv पॅकेज इंस्टॉल करा: + +``` +npm install dotenv --save +``` + +मग, प्रकल्पाच्या रूट डिरेक्टरीमध्ये `.env` फाइल तयार करा. तुमची MetaMask खाजगी की आणि HTTP Alchemy API URL त्यात जोडा. + +तुमच्या पर्यावरण फाइलचे नाव `.env` असणे आवश्यक आहे अन्यथा ती पर्यावरण फाइल म्हणून ओळखली जाणार नाही. + +त्याला `process.env` किंवा `.env-custom` किंवा दुसरे काहीही नाव देऊ नका. + +- तुमची खाजगी की निर्यात करण्यासाठी [या सूचनांचे](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) पालन करा +- HTTP Alchemy API URL मिळवण्यासाठी खाली पहा + +![](./get-alchemy-api-key.gif) + +तुमचे `.env` असे दिसले पाहिजे: + +``` +API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" +PRIVATE_KEY = "your-metamask-private-key" +``` + +हे प्रत्यक्षात आपल्या कोडशी जोडण्यासाठी, आपण या व्हेरिएबल्सचा संदर्भ आपल्या `hardhat.config.js` फाईलमध्ये पायरी १३ वर देऊ. + +### पायरी १२: Ethers.js इंस्टॉल करा {#step-12-install-ethersjs} + +Ethers.js ही एक लायब्ररी आहे जी अधिक वापरकर्ता-अनुकूल पद्धतींसह [मानक JSON-RPC पद्धती](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc) रॅप करून Ethereum शी संवाद साधणे आणि विनंत्या करणे सोपे करते. + +Hardhat आम्हाला अतिरिक्त टूलिंग आणि विस्तारित कार्यक्षमतेसाठी [प्लगइन्स](https://hardhat.org/plugins/) समाकलित करण्याची परवानगी देतो. आम्ही कॉन्ट्रॅक्ट उपयोजनासाठी [Ethers प्लगइन](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) चा फायदा घेऊ. + +आपल्या प्रोजेक्ट डिरेक्टरीमध्ये टाइप करा: + +```bash +npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" +``` + +### पायरी 13: hardhat.config.js अपडेट करा {#step-13-update-hardhat-configjs} + +आतापर्यंत आपण अनेक डिपेंडेंसी आणि प्लगइन जोडले आहेत, आता आपल्याला `hardhat.config.js` अद्यतनित करण्याची आवश्यकता आहे जेणेकरून आपल्या प्रोजेक्टला त्या सर्वांबद्दल माहिती मिळेल. + +तुमचे `hardhat.config.js` याप्रमाणे दिसण्यासाठी अद्यतनित करा: + +```javascript +/** + * @type import('hardhat/config').HardhatUserConfig + */ + +require("dotenv").config() +require("@nomiclabs/hardhat-ethers") + +const { API_URL, PRIVATE_KEY } = process.env + +module.exports = { + solidity: "0.7.3", + defaultNetwork: "goerli", + networks: { + hardhat: {}, + goerli: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`], + }, + }, +} +``` + +### पायरी 14: आमचे कॉन्ट्रॅक्ट कंपाईल करा {#step-14-compile-our-contract} + +आतापर्यंत सर्व काही कार्यरत आहे याची खात्री करण्यासाठी, चला आमचा कॉन्ट्रॅक्ट संकलित करूया. `compile` कार्य हे बिल्ट-इन हार्डहॅट कार्यांपैकी एक आहे. + +कमांड लाइनमधून चालवा: + +```bash +npx hardhat compile +``` + +तुम्हाला `SPDX license identifier not provided in source file` बद्दल चेतावणी मिळू शकते, परंतु त्याबद्दल काळजी करण्याची गरज नाही — आशा आहे की इतर सर्व काही चांगले दिसेल! नसल्यास, तुम्ही नेहमी [Alchemy discord](https://discord.gg/u72VCg3) मध्ये संदेश पाठवू शकता. + +### पायरी 15: आमची उपयोजन स्क्रिप्ट लिहा {#step-15-write-our-deploy-script} + +आता आमचा कॉन्ट्रॅक्ट लिहिला आहे आणि आमची कॉन्फिगरेशन फाइल तयार आहे, आता आमच्या कॉन्ट्रॅक्टची उपयोजन स्क्रिप्ट लिहिण्याची वेळ आली आहे. + +`scripts/` फोल्डरवर नेव्हिगेट करा आणि `deploy.js` नावाची एक नवीन फाइल तयार करा, त्यात खालील सामग्री जोडा: + +```javascript +async function main() { + const HelloWorld = await ethers.getContractFactory("HelloWorld") + + // उपयोजन सुरू करा, एक प्रॉमिस परत करा जे कॉन्ट्रॅक्ट ऑब्जेक्टमध्ये निराकरण करते + const hello_world = await HelloWorld.deploy("Hello World!") + console.log("Contract deployed to address:", hello_world.address) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) +``` + +Hardhat त्यांच्या [कॉन्ट्रॅक्ट्स ट्यूटोरियल](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) मध्ये या प्रत्येक कोड ओळी काय करते हे आश्चर्यकारकपणे स्पष्ट करते, आम्ही त्यांचे स्पष्टीकरण येथे स्वीकारले आहे. + +```javascript +const HelloWorld = await ethers.getContractFactory("HelloWorld") +``` + +ethers.js मधील `ContractFactory` हे नवीन स्मार्ट कॉन्ट्रॅक्ट्स तैनात करण्यासाठी वापरले जाणारे एक ॲबस्ट्रॅक्शन आहे, म्हणून येथे `HelloWorld` हे आमच्या हॅलो वर्ल्ड कॉन्ट्रॅक्टच्या उदाहरणांसाठी एक [फॅक्टरी](https://en.wikipedia.org/wiki/Factory_\(object-oriented_programming\)) आहे. `hardhat-ethers` प्लगइन वापरताना `ContractFactory` आणि `Contract`, उदाहरणे डीफॉल्टनुसार पहिल्या स्वाक्षरीकर्त्याशी (मालक) जोडलेली असतात. + +```javascript +const hello_world = await HelloWorld.deploy() +``` + +`ContractFactory` वर `deploy()` कॉल केल्याने उपयोजन सुरू होईल आणि एक `Promise` परत येईल जो `Contract` ऑब्जेक्टमध्ये निराकरण करतो. हे ते ऑब्जेक्ट आहे ज्यामध्ये आमच्या प्रत्येक स्मार्ट कॉन्ट्रॅक्ट फंक्शनसाठी एक पद्धत आहे. + +### पायरी १६: आपले कॉन्ट्रॅक्ट उपयोजित करा {#step-16-deploy-our-contract} + +आम्ही अखेरीस आमचा स्मार्ट कॉन्ट्रॅक्ट उपयोजित करण्यास तयार आहोत! कमांड लाइनवर नेव्हिगेट करा आणि चालवा: + +```bash +npx hardhat run scripts/deploy.js --network goerli +``` + +तुम्हाला त्यानंतर असे काहीतरी दिसेल: + +```bash +Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 +``` + +**कृपया हा पत्ता सेव्ह करा**. आम्ही ट्युटोरियलमध्ये नंतर याचा वापर करू. + +जर आपण [Goerli etherscan](https://goerli.etherscan.io) वर गेलो आणि आपला कॉन्ट्रॅक्ट पत्ता शोधला तर आपण पाहू शकू की ते यशस्वीरित्या तैनात केले गेले आहे. व्यवहार असा काहीतरी दिसेल: + +![](./etherscan-contract.png) + +`From` पत्ता तुमच्या MetaMask खात्याच्या पत्त्याशी जुळला पाहिजे आणि `To` पत्त्यावर **कॉन्ट्रॅक्ट निर्मिती** असे लिहिलेले असेल. जर आपण व्यवहारात क्लिक केले तर आपल्याला `To` फील्डमध्ये आपला कॉन्ट्रॅक्ट पत्ता दिसेल. + +![](./etherscan-transaction.png) + +अभिनंदन! तुम्ही नुकतेच Ethereum टेस्टनेटवर एक स्मार्ट कॉन्ट्रॅक्ट तैनात केले आहे. + +पडद्यामागे काय चालले आहे हे समजून घेण्यासाठी, चला आपल्या [Alchemy डॅशबोर्ड](https://dashboard.alchemy.com/explorer) मधील एक्सप्लोरर टॅबवर नेव्हिगेट करूया. तुमच्याकडे एकापेक्षा जास्त Alchemy ॲप्स असल्यास ॲपनुसार फिल्टर करा आणि **Hello World** निवडा. + +![](./hello-world-explorer.png) + +येथे तुम्हाला काही JSON-RPC पद्धती दिसतील ज्या Hardhat/Ethers ने `.deploy()` फंक्शन कॉल केल्यावर आपल्यासाठी पडद्यामागे बनवल्या आहेत. येथे दोन महत्त्वाच्या पद्धती आहेत [`eth_sendRawTransaction`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction), जे आमचे कॉन्ट्रॅक्ट Goerli चेनवर लिहिण्याची विनंती आहे, आणि [`eth_getTransactionByHash`](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_gettransactionbyhash), जे हॅश दिल्यावर आमच्या व्यवहाराबद्दल माहिती वाचण्याची विनंती आहे. व्यवहार पाठवण्याबद्दल अधिक जाणून घेण्यासाठी, [Web3 वापरून व्यवहार पाठवण्यावरील आमचे ट्युटोरियल](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) पहा. + +## भाग २: तुमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधा {#part-2-interact-with-your-smart-contract} + +आता आपण यशस्वीरित्या Goerli नेटवर्कवर एक स्मार्ट कॉन्ट्रॅक्ट तैनात केले आहे, चला त्याच्याशी संवाद कसा साधायचा हे शिकूया. + +### एक interact.js फाइल तयार करा {#create-a-interactjs-file} + +ही ती फाईल आहे जिथे आपण आपली संवाद स्क्रिप्ट लिहू. आम्ही Ethers.js लायब्ररी वापरणार आहोत जी तुम्ही आधी भाग १ मध्ये इन्स्टॉल केली होती. + +`scripts/` फोल्डरमध्ये, `interact.js` नावाची नवीन फाइल तयार करा आणि खालील कोड जोडा: + +```javascript +// interact.js + +const API_KEY = process.env.API_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY +const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS +``` + +### तुमची .env फाईल अपडेट करा {#update-your-env-file} + +आम्ही नवीन पर्यावरण व्हेरिएबल्स वापरणार आहोत, म्हणून आम्हाला त्यांना `.env` फाइलमध्ये परिभाषित करणे आवश्यक आहे जी [आम्ही आधी तयार केली होती](#step-11-connect-metamask-&-alchemy-to-your-project). + +आम्हाला आमच्या Alchemy `API_KEY` आणि `CONTRACT_ADDRESS` साठी एक परिभाषा जोडावी लागेल जिथे तुमचे स्मार्ट कॉन्ट्रॅक्ट तैनात केले होते. + +तुमची `.env` फाइल अशी काहीतरी दिसली पाहिजे: + +```bash +# .env + +API_URL = "https://eth-goerli.alchemyapi.io/v2/" +API_KEY = "" +PRIVATE_KEY = "" +CONTRACT_ADDRESS = "0x" +``` + +### तुमचे कॉन्ट्रॅक्ट ABI मिळवा {#grab-your-contract-ABI} + +आमचे कॉन्ट्रॅक्ट [ABI (ॲप्लिकेशन बायनरी इंटरफेस)](/glossary/#abi) आमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधण्यासाठी इंटरफेस आहे. Hardhat आपोआप एक ABI तयार करतो आणि ते `HelloWorld.json` मध्ये सेव्ह करतो. ABI वापरण्यासाठी, आम्हाला आमच्या `interact.js` फाइलमध्ये खालील कोडच्या ओळी जोडून सामग्री पार्स करणे आवश्यक आहे: + +```javascript +// interact.js +const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") +``` + +जर तुम्हाला ABI पाहायचा असेल तर तुम्ही ते तुमच्या कन्सोलवर प्रिंट करू शकता: + +```javascript +console.log(JSON.stringify(contract.abi)) +``` + +तुमचे ABI कन्सोलवर छापलेले पाहण्यासाठी, तुमच्या टर्मिनलवर नेव्हिगेट करा आणि चालवा: + +```bash +npx hardhat run scripts/interact.js +``` + +### तुमच्या कॉन्ट्रॅक्टचे एक उदाहरण तयार करा {#create-an-instance-of-your-contract} + +आमच्या कॉन्ट्रॅक्टशी संवाद साधण्यासाठी, आम्हाला आमच्या कोडमध्ये एक कॉन्ट्रॅक्ट उदाहरण तयार करणे आवश्यक आहे. Ethers.js सह असे करण्यासाठी, आम्हाला तीन संकल्पनांवर काम करावे लागेल: + +1. प्रदाता - एक नोड प्रदाता जो तुम्हाला ब्लॉकचेनवर वाचण्याचा आणि लिहिण्याचा प्रवेश देतो +2. स्वाक्षरीकर्ता - एक Ethereum खाते जे व्यवहारांवर स्वाक्षरी करू शकते +3. कॉन्ट्रॅक्ट - ऑनचेन तैनात केलेल्या विशिष्ट कॉन्ट्रॅक्टचे प्रतिनिधित्व करणारा एक Ethers.js ऑब्जेक्ट + +आम्ही कॉन्ट्रॅक्टचे उदाहरण तयार करण्यासाठी मागील पायरीमधील कॉन्ट्रॅक्ट ABI वापरू: + +```javascript +// interact.js + +// प्रदाता +const alchemyProvider = new ethers.providers.AlchemyProvider( + (network = "goerli"), + API_KEY +) + +// स्वाक्षरीकर्ता +const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) + +// कॉन्ट्रॅक्ट +const helloWorldContract = new ethers.Contract( + CONTRACT_ADDRESS, + contract.abi, + signer +) +``` + +[ethers.js माहिती](https://docs.ethers.io/v5/) मध्ये प्रदाते, स्वाक्षरीकर्ते आणि कॉन्ट्रॅक्ट्सबद्दल अधिक जाणून घ्या. + +### आरंभिक संदेश वाचा {#read-the-init-message} + +लक्षात आहे का आपण आपले कॉन्ट्रॅक्ट `initMessage = "Hello world!"` सह तैनात केले होते? आम्ही आता आमच्या स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला तो संदेश वाचणार आहोत आणि तो कन्सोलवर प्रिंट करणार आहोत. + +जावास्क्रिप्टमध्ये, नेटवर्कशी संवाद साधताना असिंक्रोनस फंक्शन्स वापरली जातात. असिंक्रोनस फंक्शन्सबद्दल अधिक जाणून घेण्यासाठी, [हा मीडियम लेख](https://blog.bitsrc.io/understanding-asynchronous-javascript-the-event-loop-74cd408419ff) वाचा. + +आमच्या स्मार्ट कॉन्ट्रॅक्टमधील `message` फंक्शनला कॉल करण्यासाठी आणि आरंभिक संदेश वाचण्यासाठी खालील कोड वापरा: + +```javascript +// interact.js + +// ... + +async function main() { + const message = await helloWorldContract.message() + console.log("The message is: " + message) +} +main() +``` + +टर्मिनलमध्ये `npx hardhat run scripts/interact.js` वापरून फाइल चालवल्यानंतर आम्हाला हा प्रतिसाद दिसला पाहिजे: + +``` +The message is: Hello world! +``` + +अभिनंदन! तुम्ही नुकतेच Ethereum ब्लॉकचेनवरून स्मार्ट कॉन्ट्रॅक्ट डेटा यशस्वीरित्या वाचला आहे, छान काम! + +### संदेश अपडेट करा {#update-the-message} + +फक्त संदेश वाचण्याऐवजी, आम्ही `update` फंक्शन वापरून आमच्या स्मार्ट कॉन्ट्रॅक्टमध्ये सेव्ह केलेला संदेश देखील अपडेट करू शकतो! छान आहे, नाही का? + +संदेश अपडेट करण्यासाठी, आम्ही थेट आमच्या इन्स्टँटिएटेड कॉन्ट्रॅक्ट ऑब्जेक्टवर `update` फंक्शन कॉल करू शकतो: + +```javascript +// interact.js + +// ... + +async function main() { + const message = await helloWorldContract.message() + console.log("The message is: " + message) + + console.log("Updating the message...") + const tx = await helloWorldContract.update("This is the new message.") + await tx.wait() +} +main() +``` + +लक्षात घ्या की ओळ ११ वर, आम्ही परत आलेल्या व्यवहार ऑब्जेक्टवर `.wait()` ला कॉल करतो. हे सुनिश्चित करते की आमची स्क्रिप्ट फंक्शनमधून बाहेर पडण्यापूर्वी ब्लॉकचेनवर व्यवहार माइन होण्याची वाट पाहते. जर `.wait()` कॉल समाविष्ट नसेल, तर स्क्रिप्टला कॉन्ट्रॅक्टमधील अपडेट केलेले `message` मूल्य दिसणार नाही. + +### नवीन संदेश वाचा {#read-the-new-message} + +अपडेट केलेले `message` मूल्य वाचण्यासाठी तुम्ही [मागील पायरी](#read-the-init-message) पुन्हा करू शकाल. थोडा वेळ घ्या आणि बघा की तुम्ही ते नवीन मूल्य प्रिंट करण्यासाठी आवश्यक बदल करू शकता का! + +तुम्हाला इशारा हवा असल्यास, तुमची `interact.js` फाइल या टप्प्यावर कशी दिसली पाहिजे ते येथे आहे: + +```javascript +// interact.js + +const API_KEY = process.env.API_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY +const CONTRACT_ADDRESS = process.env.CONTRACT_ADDRESS + +const contract = require("../artifacts/contracts/HelloWorld.sol/HelloWorld.json") + +// प्रदाता - Alchemy +const alchemyProvider = new ethers.providers.AlchemyProvider( + (network = "goerli"), + API_KEY +) + +// स्वाक्षरीकर्ता - तुम्ही +const signer = new ethers.Wallet(PRIVATE_KEY, alchemyProvider) + +// कॉन्ट्रॅक्ट उदाहरण +const helloWorldContract = new ethers.Contract( + CONTRACT_ADDRESS, + contract.abi, + signer +) + +async function main() { + const message = await helloWorldContract.message() + console.log("The message is: " + message) + + console.log("Updating the message...") + const tx = await helloWorldContract.update("this is the new message") + await tx.wait() + + const newMessage = await helloWorldContract.message() + console.log("The new message is: " + newMessage) +} + +main() +``` + +आता फक्त स्क्रिप्ट चालवा आणि तुम्हाला जुना संदेश, अपडेटिंग स्थिती आणि नवीन संदेश तुमच्या टर्मिनलवर छापलेला दिसेल! + +`npx hardhat run scripts/interact.js --network goerli` + +``` +The message is: Hello World! +Updating the message... +The new message is: This is the new message. +``` + +ती स्क्रिप्ट चालवताना, तुम्हाला कदाचित लक्षात येईल की नवीन संदेश लोड होण्यापूर्वी `Updating the message...` पायरी लोड होण्यास थोडा वेळ लागतो. हे मायनिंग प्रक्रियेमुळे आहे; जर तुम्हाला व्यवहार माइन होत असताना त्यांचा मागोवा घेण्यास उत्सुकता असेल, तर व्यवहाराची स्थिती पाहण्यासाठी [Alchemy मेमपूल](https://dashboard.alchemyapi.io/mempool) ला भेट द्या. जर व्यवहार ड्रॉप झाला, तर [Goerli Etherscan](https://goerli.etherscan.io) तपासणे आणि तुमच्या व्यवहार हॅशसाठी शोधणे देखील उपयुक्त आहे. + +## भाग ३: तुमचे स्मार्ट कॉन्ट्रॅक्ट Etherscan वर प्रकाशित करा {#part-3-publish-your-smart-contract-to-etherscan} + +तुम्ही तुमच्या स्मार्ट कॉन्ट्रॅक्टला जीवदान देण्यासाठी सर्व कठोर परिश्रम केले; आता ते जगासोबत शेअर करण्याची वेळ आली आहे! + +Etherscan वर तुमचे स्मार्ट कॉन्ट्रॅक्ट सत्यापित करून, कोणीही तुमचा सोर्स कोड पाहू शकतो आणि तुमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधू शकतो. चला सुरू करूया! + +### पायरी १: तुमच्या Etherscan खात्यावर एक API की तयार करा {#step-1-generate-an-api-key-on-your-etherscan-account} + +तुम्ही जे स्मार्ट कॉन्ट्रॅक्ट प्रकाशित करण्याचा प्रयत्न करत आहात त्याचे तुम्ही मालक आहात हे सत्यापित करण्यासाठी Etherscan API की आवश्यक आहे. + +तुमच्याकडे आधीपासून Etherscan खाते नसल्यास, [खात्यासाठी साइन अप करा](https://etherscan.io/register). + +एकदा लॉग इन केल्यावर, नेव्हिगेशन बारमध्ये तुमचे वापरकर्तानाव शोधा, त्यावर होव्हर करा आणि **माझे प्रोफाइल** बटण निवडा. + +तुमच्या प्रोफाइल पेजवर, तुम्हाला एक साइड नेव्हिगेशन बार दिसेल. साइड नेव्हिगेशन बारमधून, **API की** निवडा. पुढे, नवीन API की तयार करण्यासाठी "जोडा" बटण दाबा, तुमच्या ॲपला **hello-world** नाव द्या आणि **नवीन API की तयार करा** बटण दाबा. + +तुमची नवीन API की API की टेबलमध्ये दिसेल. API की तुमच्या क्लिपबोर्डवर कॉपी करा. + +पुढे, आम्हाला आमच्या `.env` फाइलमध्ये Etherscan API की जोडण्याची आवश्यकता आहे. + +ते जोडल्यानंतर, तुमची `.env` फाइल अशी दिसेल: + +```javascript +API_URL = "https://eth-goerli.alchemyapi.io/v2/your-api-key" +PUBLIC_KEY = "your-public-account-address" +PRIVATE_KEY = "your-private-account-address" +CONTRACT_ADDRESS = "your-contract-address" +ETHERSCAN_API_KEY = "your-etherscan-key" +``` + +### Hardhat-तैनात स्मार्ट कॉन्ट्रॅक्ट {#hardhat-deployed-smart-contracts} + +#### hardhat-etherscan इन्स्टॉल करा {#install-hardhat-etherscan} + +Hardhat वापरून तुमचे कॉन्ट्रॅक्ट Etherscan वर प्रकाशित करणे सोपे आहे. सुरुवात करण्यासाठी तुम्हाला प्रथम `hardhat-etherscan` प्लगइन इन्स्टॉल करावे लागेल. `hardhat-etherscan` आपोआप स्मार्ट कॉन्ट्रॅक्टचा सोर्स कोड आणि ABI Etherscan वर सत्यापित करेल. हे जोडण्यासाठी, `hello-world` डिरेक्टरीमध्ये चालवा: + +```text +npm install --save-dev @nomiclabs/hardhat-etherscan +``` + +एकदा इन्स्टॉल झाल्यावर, तुमच्या `hardhat.config.js` च्या शीर्षस्थानी खालील विधान समाविष्ट करा, आणि Etherscan कॉन्फिग पर्याय जोडा: + +```javascript +// hardhat.config.js + +require("dotenv").config() +require("@nomiclabs/hardhat-ethers") +require("@nomiclabs/hardhat-etherscan") + +const { API_URL, PRIVATE_KEY, ETHERSCAN_API_KEY } = process.env + +module.exports = { + solidity: "0.7.3", + defaultNetwork: "goerli", + networks: { + hardhat: {}, + goerli: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`], + }, + }, + etherscan: { + // Etherscan साठी तुमची API की + // https://etherscan.io/ वर एक मिळवा + apiKey: ETHERSCAN_API_KEY, + }, +} +``` + +#### Etherscan वर तुमचे स्मार्ट कॉन्ट्रॅक्ट सत्यापित करा {#verify-your-smart-contract-on-etherscan} + +सर्व फायली सेव्ह झाल्या आहेत आणि सर्व `.env` व्हेरिएबल्स योग्यरित्या कॉन्फिगर केले आहेत याची खात्री करा. + +`verify` टास्क चालवा, कॉन्ट्रॅक्ट पत्ता आणि ज्या नेटवर्कवर ते तैनात आहे ते पास करा: + +```text +npx hardhat verify --network goerli DEPLOYED_CONTRACT_ADDRESS 'Hello World!' +``` + +खात्री करा की `DEPLOYED_CONTRACT_ADDRESS` हे Goerli टेस्ट नेटवर्कवर तुमच्या तैनात केलेल्या स्मार्ट कॉन्ट्रॅक्टचा पत्ता आहे. तसेच, अंतिम युक्तिवाद (`'Hello World!'`) हा भाग १ मधील [तैनाती पायरी दरम्यान](#write-our-deploy-script) वापरलेल्या समान स्ट्रिंग मूल्याचा असावा. + +जर सर्व काही ठीक झाले, तर तुम्हाला तुमच्या टर्मिनलमध्ये खालील संदेश दिसेल: + +```text +Successfully submitted source code for contract +contracts/HelloWorld.sol:HelloWorld at 0xdeployed-contract-address +for verification on Etherscan. Waiting for verification result... + + +Successfully verified contract HelloWorld on Etherscan. +https://goerli.etherscan.io/address/#contracts +``` + +अभिनंदन! तुमचा स्मार्ट कॉन्ट्रॅक्ट कोड Etherscan वर आहे! + +### Etherscan वर तुमचे स्मार्ट कॉन्ट्रॅक्ट तपासा! {#check-out-your-smart-contract-on-etherscan} + +जेव्हा तुम्ही तुमच्या टर्मिनलमध्ये दिलेल्या लिंकवर नेव्हिगेट करता, तेव्हा तुम्हाला तुमचा स्मार्ट कॉन्ट्रॅक्ट कोड आणि ABI Etherscan वर प्रकाशित केलेला दिसेल! + +**व्वा - तुम्ही ते केले चॅम्प! आता कोणीही तुमच्या स्मार्ट कॉन्ट्रॅक्टला कॉल किंवा लिहू शकतो! तुम्ही पुढे काय तयार करता हे पाहण्यासाठी आम्ही उत्सुक आहोत!** + +## भाग ४ - तुमचे स्मार्ट कॉन्ट्रॅक्ट फ्रंटएंडसह एकत्रित करणे {#part-4-integrating-your-smart-contract-with-the-frontend} + +या ट्युटोरियलच्या अखेरीस, तुम्हाला कळेल की कसे: + +- तुमच्या डॅपला MetaMask वॉलेट कनेक्ट करा +- [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) API वापरून तुमच्या स्मार्ट कॉन्ट्रॅक्टमधून डेटा वाचा +- MetaMask वापरून Ethereum व्यवहारांवर स्वाक्षरी करा + +या डॅपसाठी, आम्ही आमच्या फ्रंटएंड फ्रेमवर्क म्हणून [React](https://react.dev/) वापरणार आहोत; तथापि, हे लक्षात घेणे महत्त्वाचे आहे की आम्ही त्याच्या मूलभूत गोष्टींचे विश्लेषण करण्यात जास्त वेळ घालवणार नाही, कारण आम्ही मुख्यतः आमच्या प्रकल्पात Web3 कार्यक्षमता आणण्यावर लक्ष केंद्रित करणार आहोत. + +एक पूर्वअट म्हणून, तुम्हाला React चे नवशिक्या-स्तराचे ज्ञान असले पाहिजे. नसल्यास, आम्ही अधिकृत [React चा परिचय ट्युटोरियल](https://react.dev/learn) पूर्ण करण्याची शिफारस करतो. + +### स्टार्टर फाइल्स क्लोन करा {#clone-the-starter-files} + +प्रथम, या प्रकल्पासाठी स्टार्टर फायली मिळवण्यासाठी [hello-world-part-four GitHub रेपॉजिटरी](https://github.com/alchemyplatform/hello-world-part-four-tutorial) वर जा आणि ही रेपॉजिटरी तुमच्या स्थानिक मशीनवर क्लोन करा. + +क्लोन केलेली रेपॉजिटरी स्थानिकरित्या उघडा. लक्षात घ्या की त्यात दोन फोल्डर आहेत: `starter-files` आणि `completed`. + +- `starter-files`- **आम्ही या डिरेक्टरीमध्ये काम करणार आहोत**, आम्ही UI ला तुमच्या Ethereum वॉलेटशी आणि आम्ही [भाग ३](#part-3) मध्ये Etherscan वर प्रकाशित केलेल्या स्मार्ट कॉन्ट्रॅक्टशी कनेक्ट करू. +- `completed` मध्ये संपूर्ण पूर्ण ट्युटोरियल आहे आणि तुम्ही अडकल्यास केवळ संदर्भ म्हणून वापरले पाहिजे. + +पुढे, तुमची `starter-files` ची प्रत तुमच्या आवडत्या कोड एडिटरमध्ये उघडा आणि नंतर `src` फोल्डरमध्ये नेव्हिगेट करा. + +आपण लिहिणार असलेला सर्व कोड `src` फोल्डरखाली असेल. आमच्या प्रकल्पाला Web3 कार्यक्षमता देण्यासाठी आम्ही `HelloWorld.js` घटक आणि `util/interact.js` जावास्क्रिप्ट फायली संपादित करणार आहोत. + +### स्टार्टर फायली तपासा {#check-out-the-starter-files} + +आम्ही कोडिंग सुरू करण्यापूर्वी, चला स्टार्टर फायलींमध्ये आम्हाला काय प्रदान केले आहे ते पाहूया. + +#### तुमचा react प्रोजेक्ट चालू करा {#get-your-react-project-running} + +चला आपल्या ब्राउझरमध्ये React प्रोजेक्ट चालवून सुरुवात करूया. React चे सौंदर्य हे आहे की एकदा आपला प्रोजेक्ट आपल्या ब्राउझरमध्ये चालू झाला की, आपण केलेले कोणतेही बदल आपल्या ब्राउझरमध्ये थेट अपडेट केले जातील. + +प्रकल्प चालू करण्यासाठी, `starter-files` फोल्डरच्या रूट डिरेक्टरीवर नेव्हिगेट करा, आणि प्रकल्पाच्या अवलंबित्वे स्थापित करण्यासाठी तुमच्या टर्मिनलमध्ये `npm install` चालवा: + +```bash +cd starter-files +npm install +``` + +एकदा ते इन्स्टॉल झाल्यावर, तुमच्या टर्मिनलमध्ये `npm start` चालवा: + +```bash +npm start +``` + +असे केल्याने तुमच्या ब्राउझरमध्ये [http://localhost:3000/](http://localhost:3000/) उघडले पाहिजे, जिथे तुम्हाला आमच्या प्रकल्पासाठी फ्रंटएंड दिसेल. त्यात एक फील्ड (तुमच्या स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश अपडेट करण्यासाठी एक जागा), एक "वॉलेट कनेक्ट करा" बटण आणि एक "अपडेट करा" बटण असले पाहिजे. + +तुम्ही कोणतेही बटण क्लिक करण्याचा प्रयत्न केल्यास, तुम्हाला लक्षात येईल की ते कार्य करत नाहीत—कारण आम्हाला अजूनही त्यांची कार्यक्षमता प्रोग्राम करायची आहे. + +#### `HelloWorld.js` घटक {#the-helloworld-js-component} + +चला आमच्या एडिटरमधील `src` फोल्डरमध्ये परत जाऊया आणि `HelloWorld.js` फाइल उघडूया. या फाईलमधील सर्व काही समजून घेणे खूप महत्त्वाचे आहे, कारण हा प्राथमिक React घटक आहे ज्यावर आपण काम करणार आहोत. + +या फाइलच्या शीर्षस्थानी, तुम्हाला दिसेल की आमच्याकडे अनेक आयात विधाने आहेत जी आमचा प्रकल्प चालू करण्यासाठी आवश्यक आहेत, ज्यात React लायब्ररी, useEffect आणि useState हुक्स, `./util/interact.js` मधील काही आयटम (आम्ही त्यांना लवकरच अधिक तपशीलवार वर्णन करू!) आणि Alchemy लोगो समाविष्ट आहेत. + +```javascript +// HelloWorld.js + +import React from "react" +import { useEffect, useState } from "react" +import { + helloWorldContract, + connectWallet, + updateMessage, + loadCurrentMessage, + getCurrentWalletConnected, +} from "./util/interact.js" + +import alchemylogo from "./alchemylogo.svg" +``` + +पुढे, आमच्याकडे आमचे स्टेट व्हेरिएबल्स आहेत जे आम्ही विशिष्ट इव्हेंटनंतर अपडेट करू. + +```javascript +// HelloWorld.js + +//स्टेट व्हेरिएबल्स +const [walletAddress, setWallet] = useState("") +const [status, setStatus] = useState("") +const [message, setMessage] = useState("नेटवर्कशी कोणतेही कनेक्शन नाही.") +const [newMessage, setNewMessage] = useState("") +``` + +प्रत्येक व्हेरिएबल काय दर्शवते ते येथे आहे: + +- `walletAddress` - वापरकर्त्याचा वॉलेट ॲड्रेस साठवणारी एक स्ट्रिंग +- `status`- एक स्ट्रिंग जी वापरकर्त्याला डॅपशी कसे संवाद साधावा याबद्दल मार्गदर्शन करणारा उपयुक्त संदेश संग्रहित करते +- `message` - एक स्ट्रिंग जी स्मार्ट कॉन्ट्रॅक्टमधील सध्याचा संदेश संग्रहित करते +- `newMessage` - एक स्ट्रिंग जी स्मार्ट कॉन्ट्रॅक्टमध्ये लिहिला जाणारा नवीन संदेश संग्रहित करते + +स्टेट व्हेरिएबल्सनंतर, तुम्हाला पाच अंमलबजावणी न केलेली फंक्शन्स दिसतील: `useEffect`, `addSmartContractListener`, `addWalletListener`, `connectWalletPressed`, आणि `onUpdatePressed`. ते काय करतात ते आम्ही खाली स्पष्ट करू: + +```javascript +// HelloWorld.js + +//केवळ एकदाच कॉल केले जाते +useEffect(async () => { + //TODO: अंमलबजावणी करा +}, []) + +function addSmartContractListener() { + //TODO: अंमलबजावणी करा +} + +function addWalletListener() { + //TODO: अंमलबजावणी करा +} + +const connectWalletPressed = async () => { + //TODO: अंमलबजावणी करा +} + +const onUpdatePressed = async () => { + //TODO: अंमलबजावणी करा +} +``` + +- [`useEffect`](https://legacy.reactjs.org/docs/hooks-effect.html)- हा एक React हुक आहे जो तुमचा घटक प्रस्तुत झाल्यानंतर कॉल केला जातो. कारण त्यात एक रिकामा ॲरे `[]` प्रॉप पास केला आहे (ओळ ४ पहा), तो फक्त घटकाच्या _पहिल्या_ रेंडरवर कॉल केला जाईल. येथे आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला सध्याचा संदेश लोड करू, आमचे स्मार्ट कॉन्ट्रॅक्ट आणि वॉलेट श्रोत्यांना कॉल करू, आणि वॉलेट आधीच कनेक्ट केलेले आहे की नाही हे दर्शविण्यासाठी आमचे UI अपडेट करू. +- `addSmartContractListener`- हे फंक्शन एक श्रोता सेट करते जो आमच्या HelloWorld कॉन्ट्रॅक्टच्या `UpdatedMessages` इव्हेंटवर लक्ष ठेवेल आणि आमच्या स्मार्ट कॉन्ट्रॅक्टमधील संदेश बदलल्यावर आमचे UI अपडेट करेल. +- `addWalletListener`- हे फंक्शन एक श्रोता सेट करते जो वापरकर्त्याच्या MetaMask वॉलेटच्या स्थितीत बदल ओळखतो, जसे की वापरकर्ता त्यांचे वॉलेट डिस्कनेक्ट करतो किंवा पत्ते बदलतो. +- `connectWalletPressed`- हे फंक्शन वापरकर्त्याचे MetaMask वॉलेट आमच्या डॅपशी कनेक्ट करण्यासाठी कॉल केले जाईल. +- `onUpdatePressed` - हे फंक्शन तेव्हा कॉल केले जाईल जेव्हा वापरकर्त्याला स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश अपडेट करायचा असेल. + +या फाइलच्या शेवटी, आमच्याकडे आमच्या घटकाचा UI आहे. + +```javascript +// HelloWorld.js + +//आमच्या घटकाचे UI +return ( +
+ + + +

Current Message:

+

{message}

+ +

New Message:

+ +
+ setNewMessage(e.target.value)} + value={newMessage} + /> +

{status}

+ + +
+ +
+) +``` + +तुम्ही हा कोड काळजीपूर्वक स्कॅन केल्यास, तुम्हाला दिसेल की आम्ही आमच्या UI मध्ये आमचे विविध स्टेट व्हेरिएबल्स कुठे वापरतो: + +- ओळी ६-१२ वर, जर वापरकर्त्याचे वॉलेट कनेक्ट केलेले असेल (म्हणजे, `walletAddress.length > 0`), तर आम्ही "walletButton" आयडी असलेल्या बटणामध्ये वापरकर्त्याच्या `walletAddress` ची एक संक्षिप्त आवृत्ती प्रदर्शित करतो; अन्यथा ते फक्त "वॉलेट कनेक्ट करा" असे म्हणते. +- ओळ १७ वर, आम्ही स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला सध्याचा संदेश प्रदर्शित करतो, जो `message` स्ट्रिंगमध्ये कॅप्चर केला जातो. +- ओळी २३-२६ वर, टेक्स्ट फील्डमधील इनपुट बदलल्यावर आमचे `newMessage` स्टेट व्हेरिएबल अपडेट करण्यासाठी आम्ही [नियंत्रित घटक](https://legacy.reactjs.org/docs/forms.html#controlled-components) वापरतो. + +आमच्या स्टेट व्हेरिएबल्स व्यतिरिक्त, तुम्हाला दिसेल की `publishButton` आणि `walletButton` आयडी असलेली बटणे क्लिक केल्यावर अनुक्रमे `connectWalletPressed` आणि `onUpdatePressed` फंक्शन्स कॉल केली जातात. + +शेवटी, चला पाहूया की हा `HelloWorld.js` घटक कुठे जोडला आहे. + +तुम्ही `App.js` फाइलवर गेल्यास, जी React मधील मुख्य घटक आहे जी इतर सर्व घटकांसाठी कंटेनर म्हणून काम करते, तुम्हाला दिसेल की आमचा `HelloWorld.js` घटक ओळ ७ वर इंजेक्ट केला आहे. + +शेवटचे पण महत्त्वाचे, चला तुमच्यासाठी प्रदान केलेली आणखी एक फाइल पाहूया, `interact.js` फाइल. + +#### `interact.js` फाइल {#the-interact-js-file} + +कारण आम्हाला [M-V-C](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) पॅराडाइमचे पालन करायचे आहे, आम्हाला एक वेगळी फाइल हवी आहे ज्यात आमच्या डॅपच्या तर्कशास्त्र, डेटा आणि नियमांचे व्यवस्थापन करण्यासाठी आमची सर्व फंक्शन्स असतील, आणि नंतर ती फंक्शन्स आमच्या फ्रंटएंडवर (आमचा `HelloWorld.js` घटक) निर्यात करता येतील. + +👆🏽हाच आमच्या `interact.js` फाइलचा नेमका उद्देश आहे! + +तुमच्या `src` डिरेक्टरीमधील `util` फोल्डरवर नेव्हिगेट करा, आणि तुम्हाला दिसेल की आम्ही `interact.js` नावाची फाइल समाविष्ट केली आहे ज्यात आमची सर्व स्मार्ट कॉन्ट्रॅक्ट संवाद आणि वॉलेट फंक्शन्स आणि व्हेरिएबल्स असतील. + +```javascript +// interact.js + +//export const helloWorldContract; + +export const loadCurrentMessage = async () => {} + +export const connectWallet = async () => {} + +const getCurrentWalletConnected = async () => {} + +export const updateMessage = async (message) => {} +``` + +तुम्हाला फाइलच्या शीर्षस्थानी दिसेल की आम्ही `helloWorldContract` ऑब्जेक्टवर टिप्पणी केली आहे. नंतर या ट्युटोरियलमध्ये, आम्ही या ऑब्जेक्टवरील टिप्पणी काढून टाकू आणि या व्हेरिएबलमध्ये आमचे स्मार्ट कॉन्ट्रॅक्ट इन्स्टँटिएट करू, जे आम्ही नंतर आमच्या `HelloWorld.js` घटकामध्ये निर्यात करू. + +आमच्या `helloWorldContract` ऑब्जेक्टनंतरची चार अंमलबजावणी न केलेली फंक्शन्स खालीलप्रमाणे करतात: + +- `loadCurrentMessage` - हे फंक्शन स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला सध्याचा संदेश लोड करण्याच्या तर्कशास्त्राचे व्यवस्थापन करते. ते [Alchemy Web3 API](https://github.com/alchemyplatform/alchemy-web3) वापरून हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्टला _वाचण्याचा_ कॉल करेल. +- `connectWallet` - हे फंक्शन वापरकर्त्याचे MetaMask आमच्या डॅपशी कनेक्ट करेल. +- `getCurrentWalletConnected` - हे फंक्शन तपासेल की Ethereum खाते आधीपासूनच आमच्या डॅपशी पेज लोडवर कनेक्ट केलेले आहे की नाही आणि त्यानुसार आमचे UI अपडेट करेल. +- `updateMessage` - हे फंक्शन स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश अपडेट करेल. हे हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्टला _लिहिण्याचा_ कॉल करेल, त्यामुळे वापरकर्त्याच्या MetaMask वॉलेटला संदेश अपडेट करण्यासाठी Ethereum व्यवहारावर स्वाक्षरी करावी लागेल. + +आता आम्हाला समजले आहे की आम्ही कशावर काम करत आहोत, चला पाहूया की आमच्या स्मार्ट कॉन्ट्रॅक्टमधून कसे वाचायचे! + +### पायरी ३: तुमच्या स्मार्ट कॉन्ट्रॅक्टमधून वाचा {#step-3-read-from-your-smart-contract} + +तुमच्या स्मार्ट कॉन्ट्रॅक्टमधून वाचण्यासाठी, तुम्हाला यशस्वीरित्या सेट अप करावे लागेल: + +- Ethereum चेनशी एक API कनेक्शन +- तुमच्या स्मार्ट कॉन्ट्रॅक्टचे एक लोड केलेले उदाहरण +- तुमच्या स्मार्ट कॉन्ट्रॅक्ट फंक्शनला कॉल करण्यासाठी एक फंक्शन +- तुम्ही स्मार्ट कॉन्ट्रॅक्टमधून वाचत असलेल्या डेटामध्ये बदल झाल्यावर अपडेट्ससाठी पाहण्यासाठी एक श्रोता + +हे खूप पायऱ्या वाटू शकतात, पण काळजी करू नका! आम्ही तुम्हाला त्या प्रत्येक पायरीतून कसे जायचे हे टप्प्याटप्प्याने सांगू! :\) + +#### Ethereum चेनशी एक API कनेक्शन स्थापित करा {#establish-an-api-connection-to-the-ethereum-chain} + +तर लक्षात आहे का, या ट्युटोरियलच्या भाग २ मध्ये, आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टमधून वाचण्यासाठी आमची [Alchemy Web3 की वापरली होती](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract/interacting-with-a-smart-contract#step-1-install-web3-library)? तुमच्या डॅपमध्ये चेनवरून वाचण्यासाठी तुम्हाला Alchemy Web3 की ची देखील आवश्यकता असेल. + +तुमच्याकडे आधीपासून नसल्यास, प्रथम [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) इन्स्टॉल करा, तुमच्या `starter-files` च्या रूट डिरेक्टरीवर नेव्हिगेट करून आणि तुमच्या टर्मिनलमध्ये खालील चालवून: + +```text +npm install @alch/alchemy-web3 +``` + +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) हे [Web3.js](https://docs.web3js.org/) च्या सभोवतालचे एक रॅपर आहे, जे एक वेब3 डेव्हलपर म्हणून तुमचे जीवन सोपे करण्यासाठी वर्धित API पद्धती आणि इतर महत्त्वपूर्ण फायदे प्रदान करते. हे कमीत कमी कॉन्फिगरेशन आवश्यक करण्यासाठी डिझाइन केलेले आहे जेणेकरून आपण आपल्या ॲपमध्ये लगेचच त्याचा वापर सुरू करू शकता! + +मग, तुमच्या प्रकल्प डिरेक्टरीमध्ये [dotenv](https://www.npmjs.com/package/dotenv) पॅकेज इन्स्टॉल करा, जेणेकरून आम्ही आमची API की मिळवल्यानंतर ती संग्रहित करण्यासाठी आमच्याकडे एक सुरक्षित जागा असेल. + +```text +npm install dotenv --save +``` + +आमच्या डॅपसाठी, **आम्ही आमची HTTP API की ऐवजी आमची Websockets API की वापरणार आहोत**, कारण ते आम्हाला एक श्रोता सेट करण्याची परवानगी देईल जो स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश बदलल्यावर ओळखतो. + +एकदा तुमच्याकडे तुमची API की आल्यावर, तुमच्या रूट डिरेक्टरीमध्ये `.env` फाइल तयार करा आणि त्यात तुमची Alchemy Websockets url जोडा. त्यानंतर, तुमची `.env` फाइल अशी दिसेल: + +```javascript +REACT_APP_ALCHEMY_KEY = wss://eth-goerli.ws.alchemyapi.io/v2/ +``` + +आता, आम्ही आमच्या डॅपमध्ये आमचा Alchemy Web3 एंडपॉइंट सेट करण्यासाठी तयार आहोत! चला आमच्या `util` फोल्डरमध्ये असलेल्या आमच्या `interact.js` फाइलवर परत जाऊया आणि फाइलच्या शीर्षस्थानी खालील कोड जोडूया: + +```javascript +// interact.js + +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +//export const helloWorldContract; +``` + +वर, आम्ही प्रथम आमच्या `.env` फाइलमधून Alchemy की आयात केली आणि नंतर आमचा Alchemy Web3 एंडपॉइंट स्थापित करण्यासाठी आमची `alchemyKey` `createAlchemyWeb3` ला पास केली. + +हा एंडपॉइंट तयार झाल्यावर, आमचे स्मार्ट कॉन्ट्रॅक्ट लोड करण्याची वेळ आली आहे! + +#### तुमचे हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट लोड करत आहे {#loading-your-hello-world-smart-contract} + +तुमचे हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट लोड करण्यासाठी, तुम्हाला त्याचा कॉन्ट्रॅक्ट पत्ता आणि ABI आवश्यक असेल, जे दोन्ही Etherscan वर आढळू शकतात जर तुम्ही [या ट्युटोरियलचा भाग ३ पूर्ण केला असेल.](/developers/tutorials/hello-world-smart-contract-fullstack/#part-3-publish-your-smart-contract-to-etherscan-part-3-publish-your-smart-contract-to-etherscan) + +#### Etherscan वरून तुमचे कॉन्ट्रॅक्ट ABI कसे मिळवायचे {#how-to-get-your-contract-abi-from-etherscan} + +तुम्ही या ट्युटोरियलचा भाग ३ वगळल्यास, तुम्ही [0x6f3f635A9762B47954229Ea479b4541eAF402A6A](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code) पत्त्यासह HelloWorld कॉन्ट्रॅक्ट वापरू शकता. त्याचे ABI [येथे](https://goerli.etherscan.io/address/0x6f3f635a9762b47954229ea479b4541eaf402a6a#code) आढळू शकते. + +एक कॉन्ट्रॅक्ट ABI हे निर्दिष्ट करण्यासाठी आवश्यक आहे की कॉन्ट्रॅक्ट कोणते फंक्शन कॉल करेल तसेच फंक्शन तुमच्या अपेक्षित स्वरूपात डेटा परत करेल याची खात्री करण्यासाठी. एकदा आम्ही आमचे कॉन्ट्रॅक्ट ABI कॉपी केल्यावर, चला ते तुमच्या `src` डिरेक्टरीमध्ये `contract-abi.json` नावाची JSON फाइल म्हणून सेव्ह करूया. + +तुमची contract-abi.json तुमच्या src फोल्डरमध्ये संग्रहित केली पाहिजे. + +आमच्या कॉन्ट्रॅक्ट पत्ता, ABI, आणि Alchemy Web3 एंडपॉइंटसह सज्ज, आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टचे एक उदाहरण लोड करण्यासाठी [कॉन्ट्रॅक्ट पद्धत](https://docs.web3js.org/api/web3-eth-contract/class/Contract) वापरू शकतो. तुमचे कॉन्ट्रॅक्ट ABI `interact.js` फाइलमध्ये आयात करा आणि तुमचा कॉन्ट्रॅक्ट पत्ता जोडा. + +```javascript +// interact.js + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" +``` + +आम्ही आता अखेरीस आमच्या `helloWorldContract` व्हेरिएबलवरील टिप्पणी काढून टाकू शकतो, आणि आमचा AlchemyWeb3 एंडपॉइंट वापरून स्मार्ट कॉन्ट्रॅक्ट लोड करू शकतो: + +```javascript +// interact.js +export const helloWorldContract = new web3.eth.Contract( + contractABI, + contractAddress +) +``` + +रिकॅप करण्यासाठी, तुमच्या `interact.js` च्या पहिल्या १२ ओळी आता अशा दिसल्या पाहिजेत: + +```javascript +// interact.js + +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x6f3f635A9762B47954229Ea479b4541eAF402A6A" + +export const helloWorldContract = new web3.eth.Contract( + contractABI, + contractAddress +) +``` + +आता आमचे कॉन्ट्रॅक्ट लोड झाले आहे, आम्ही आमचे `loadCurrentMessage` फंक्शन अंमलात आणू शकतो! + +#### तुमच्या `interact.js` फाइलमध्ये `loadCurrentMessage` अंमलात आणणे {#implementing-loadCurrentMessage-in-your-interact-js-file} + +हे फंक्शन खूप सोपे आहे. आम्ही आमच्या कॉन्ट्रॅक्टमधून वाचण्यासाठी एक साधा असिंक वेब3 कॉल करणार आहोत. आमचे फंक्शन स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश परत करेल: + +तुमच्या `interact.js` फाइलमधील `loadCurrentMessage` खालीलप्रमाणे अपडेट करा: + +```javascript +// interact.js + +export const loadCurrentMessage = async () => { + const message = await helloWorldContract.methods.message().call() + return message +} +``` + +आम्हाला हा स्मार्ट कॉन्ट्रॅक्ट आमच्या UI मध्ये प्रदर्शित करायचा असल्याने, चला आमच्या `HelloWorld.js` घटकामधील `useEffect` फंक्शन खालीलप्रमाणे अपडेट करूया: + +```javascript +// HelloWorld.js + +//केवळ एकदाच कॉल केले जाते +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) +}, []) +``` + +लक्षात घ्या, आम्हाला आमचे `loadCurrentMessage` फक्त घटकाच्या पहिल्या रेंडर दरम्यान एकदाच कॉल करायचे आहे. स्मार्ट कॉन्ट्रॅक्टमधील संदेश बदलल्यानंतर UI आपोआप अपडेट करण्यासाठी आम्ही लवकरच `addSmartContractListener` अंमलात आणू. + +आमच्या श्रोत्यामध्ये जाण्यापूर्वी, चला पाहूया की आतापर्यंत आमच्याकडे काय आहे! तुमच्या `HelloWorld.js` आणि `interact.js` फायली सेव्ह करा, आणि नंतर [http://localhost:3000/](http://localhost:3000/) वर जा + +तुम्हाला दिसेल की सध्याचा संदेश आता "नेटवर्कशी कोणतेही कनेक्शन नाही" असे म्हणत नाही. त्याऐवजी ते स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश दर्शवते. छान! + +#### तुमचे UI आता स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश दर्शवला पाहिजे {#your-UI-should-now-reflect-the-message-stored-in-the-smart-contract} + +आता त्या श्रोत्याबद्दल बोलूया... + +#### `addSmartContractListener` अंमलात आणा {#implement-addsmartcontractlistener} + +जर तुम्ही या ट्युटोरियल मालिकेच्या [भाग १](https://docs.alchemy.com/alchemy/tutorials/hello-world-smart-contract#step-10-write-our-contract) मध्ये लिहिलेली `HelloWorld.sol` फाइल आठवत असाल, तर तुम्हाला आठवेल की `UpdatedMessages` नावाचा एक स्मार्ट कॉन्ट्रॅक्ट इव्हेंट आहे जो आमच्या स्मार्ट कॉन्ट्रॅक्टच्या `update` फंक्शनला कॉल केल्यानंतर उत्सर्जित होतो (ओळी ९ आणि २७ पहा): + +```javascript +// HelloWorld.sol + +// सिमेंटिक व्हर्जनिंग वापरून, Solidity ची आवृत्ती निर्दिष्ट करते. +// अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.7.3; + +// `HelloWorld` नावाचे एक कॉन्ट्रॅक्ट परिभाषित करते. +// एक कॉन्ट्रॅक्ट म्हणजे फंक्शन्स आणि डेटा (त्याची स्थिती) यांचा संग्रह. एकदा तैनात झाल्यावर, एक कॉन्ट्रॅक्ट Ethereum ब्लॉकचेनवर एका विशिष्ट पत्त्यावर राहते. अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + //जेव्हा अपडेट फंक्शन कॉल केले जाते तेव्हा उत्सर्जित होते + //स्मार्ट कॉन्ट्रॅक्ट इव्हेंट्स हे तुमच्या कॉन्ट्रॅक्टसाठी तुमच्या ॲपच्या फ्रंट-एंडला ब्लॉकचेनवर काहीतरी घडल्याचे कळवण्याचा एक मार्ग आहे, जे काही विशिष्ट इव्हेंट्ससाठी 'ऐकत' असू शकते आणि ते घडल्यावर कारवाई करू शकते. + event UpdatedMessages(string oldStr, string newStr); + + // `string` प्रकारचा `message` नावाचा एक स्टेट व्हेरिएबल घोषित करते. + // स्टेट व्हेरिएबल्स असे व्हेरिएबल्स आहेत ज्यांची मूल्ये कॉन्ट्रॅक्ट स्टोरेजमध्ये कायमस्वरूपी संग्रहित केली जातात. `public` कीवर्ड व्हेरिएबल्सला कॉन्ट्रॅक्टच्या बाहेरून प्रवेशयोग्य बनवतो आणि एक फंक्शन तयार करतो ज्याला इतर कॉन्ट्रॅक्ट्स किंवा क्लायंट मूल्यामध्ये प्रवेश करण्यासाठी कॉल करू शकतात. + string public message; + + // अनेक वर्ग-आधारित ऑब्जेक्ट-ओरिएंटेड भाषांप्रमाणे, कंस्ट्रक्टर एक विशेष फंक्शन आहे जे फक्त कॉन्ट्रॅक्ट निर्मितीवर कार्यान्वित होते. + // कंस्ट्रक्टरचा वापर कॉन्ट्रॅक्टचा डेटा सुरू करण्यासाठी केला जातो. अधिक जाणून घ्या:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // एक स्ट्रिंग युक्तिवाद `initMessage` स्वीकारते आणि कॉन्ट्रॅक्टच्या `message` स्टोरेज व्हेरिएबलमध्ये मूल्य सेट करते). + message = initMessage; + } + + // एक सार्वजनिक फंक्शन जे स्ट्रिंग युक्तिवाद स्वीकारते आणि `message` स्टोरेज व्हेरिएबल अपडेट करते. + function update(string memory newMessage) public { + string memory oldMsg = message; + message = newMessage; + emit UpdatedMessages(oldMsg, newMessage); + } +} +``` + +स्मार्ट कॉन्ट्रॅक्ट इव्हेंट्स हे तुमच्या कॉन्ट्रॅक्टसाठी तुमच्या फ्रंट-एंड ॲप्लिकेशनला ब्लॉकचेनवर काहीतरी घडल्याचे (म्हणजे, एक _इव्हेंट_ होता) कळवण्याचा एक मार्ग आहे, जे विशिष्ट इव्हेंटसाठी 'ऐकत' असू शकते आणि ते घडल्यावर कारवाई करू शकते. + +`addSmartContractListener` फंक्शन विशेषतः आमच्या हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्टच्या `UpdatedMessages` इव्हेंटसाठी ऐकेल, आणि नवीन संदेश प्रदर्शित करण्यासाठी आमचे UI अपडेट करेल. + +`addSmartContractListener` खालीलप्रमाणे सुधारित करा: + +```javascript +// HelloWorld.js + +function addSmartContractListener() { + helloWorldContract.events.UpdatedMessages({}, (error, data) => { + if (error) { + setStatus("😥 " + error.message) + } else { + setMessage(data.returnValues[1]) + setNewMessage("") + setStatus("🎉 तुमचा संदेश अपडेट झाला आहे!") + } + }) +} +``` + +चला पाहूया की श्रोता इव्हेंट ओळखल्यावर काय होते: + +- इव्हेंट उत्सर्जित झाल्यावर त्रुटी आढळल्यास, ते आमच्या `status` स्टेट व्हेरिएबलद्वारे UI मध्ये दिसेल. +- अन्यथा, आम्ही परत आलेला `data` ऑब्जेक्ट वापरू. `data.returnValues` हा एक ॲरे आहे जो शून्यावर अनुक्रमित आहे जिथे ॲरेमधील पहिला घटक मागील संदेश आणि दुसरा घटक अपडेट केलेला संदेश संग्रहित करतो. एकत्रितपणे, यशस्वी इव्हेंटवर आम्ही आमची `message` स्ट्रिंग अपडेट केलेल्या संदेशावर सेट करू, `newMessage` स्ट्रिंग साफ करू, आणि आमच्या स्मार्ट कॉन्ट्रॅक्टवर नवीन संदेश प्रकाशित झाला आहे हे दर्शविण्यासाठी आमची `status` स्टेट व्हेरिएबल अपडेट करू. + +शेवटी, चला आमच्या `useEffect` फंक्शनमध्ये आमच्या श्रोत्याला कॉल करूया जेणेकरून ते `HelloWorld.js` घटकाच्या पहिल्या रेंडरवर सुरू होईल. एकत्रितपणे, तुमचे `useEffect` फंक्शन असे दिसले पाहिजे: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() +}, []) +``` + +आता आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टमधून वाचू शकतो, त्यावर कसे लिहायचे हे शोधणे छान होईल! तथापि, आमच्या डॅपवर लिहिण्यासाठी, आमच्याकडे प्रथम एक Ethereum वॉलेट कनेक्ट केलेले असणे आवश्यक आहे. + +तर, पुढे आम्ही आमचे Ethereum वॉलेट (MetaMask) सेट अप करू आणि नंतर ते आमच्या डॅपशी कनेक्ट करू! + +### पायरी ४: तुमचे Ethereum वॉलेट सेट करा {#step-4-set-up-your-ethereum-wallet} + +Ethereum चेनवर काहीही लिहिण्यासाठी, वापरकर्त्यांना त्यांच्या व्हर्च्युअल वॉलेटच्या खाजगी की वापरून व्यवहारांवर स्वाक्षरी करावी लागेल. या ट्युटोरियलसाठी, आम्ही [MetaMask](https://metamask.io/) वापरू, जो ब्राउझरमधील एक व्हर्च्युअल वॉलेट आहे जो तुमच्या Ethereum खात्याचा पत्ता व्यवस्थापित करण्यासाठी वापरला जातो, कारण तो अंतिम-वापरकर्त्यासाठी हे व्यवहार स्वाक्षरी करणे खूप सोपे करतो. + +तुम्हाला Ethereum वरील व्यवहार कसे कार्य करतात याबद्दल अधिक समजून घ्यायचे असल्यास, Ethereum फाउंडेशनचे [हे पेज](/developers/docs/transactions/) पहा. + +#### MetaMask डाउनलोड करा {#download-metamask} + +तुम्ही [येथे](https://metamask.io/download) विनामूल्य MetaMask खाते डाउनलोड आणि तयार करू शकता. तुम्ही खाते तयार करत असताना, किंवा तुमच्याकडे आधीपासूनच खाते असल्यास, वरच्या उजवीकडील “Goerli टेस्ट नेटवर्क” वर स्विच करण्याची खात्री करा (जेणेकरून आपण खऱ्या पैशांशी व्यवहार करत नाही आहोत). + +#### फॉसेटमधून इथर जोडा {#add-ether-from-a-faucet} + +Ethereum ब्लॉकचेनवर व्यवहारावर स्वाक्षरी करण्यासाठी, आम्हाला काही बनावट Eth ची आवश्यकता असेल. Eth मिळवण्यासाठी तुम्ही [FaucETH](https://fauceth.komputing.org) वर जाऊन तुमचा Goerli खात्याचा पत्ता प्रविष्ट करू शकता, “निधीची विनंती करा” वर क्लिक करा, नंतर ड्रॉपडाउनमध्ये “Ethereum टेस्टनेट Goerli” निवडा आणि शेवटी पुन्हा “निधीची विनंती करा” बटणावर क्लिक करा. त्यानंतर लगेचच तुम्हाला तुमच्या MetaMask खात्यात Eth दिसेल! + +#### तुमची शिल्लक तपासा {#check-your-balance} + +आमची शिल्लक आहे की नाही हे पुन्हा तपासण्यासाठी, चला [Alchemy’s composer tool](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) वापरून एक [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) विनंती करूया. हे आमच्या वॉलेटमधील Eth ची रक्कम परत करेल. तुम्ही तुमच्या MetaMask खात्याचा पत्ता इनपुट केल्यानंतर आणि “Send Request” वर क्लिक केल्यानंतर, तुम्हाला असा प्रतिसाद दिसेल: + +```text +{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} +``` + +**सूचना:** हा निकाल eth मध्ये नसून wei मध्ये आहे. Wei हे इथरचे सर्वात लहान एकक म्हणून वापरले जाते. wei चे eth मध्ये रूपांतर: 1 eth = 10¹⁸ wei. म्हणून जर आपण 0xde0b6b3a7640000 ला दशांश मध्ये रूपांतरित केले तर आपल्याला 1\*10¹⁸ मिळते, जे 1 eth च्या बरोबर आहे. + +हुश्श! आपले बनावट पैसे तिथेच आहेत! 🤑 + +### पायरी ५: MetaMask ला तुमच्या UI शी कनेक्ट करा {#step-5-connect-metamask-to-your-UI} + +आता आपले MetaMask वॉलेट सेट झाले आहे, चला आपला dapp त्याच्याशी कनेक्ट करूया! + +#### `connectWallet` फंक्शन {#the-connectWallet-function} + +आमच्या `interact.js` फाइलमध्ये, चला `connectWallet` फंक्शन अंमलात आणूया, जे आम्ही नंतर आमच्या `HelloWorld.js` घटकामध्ये कॉल करू शकतो. + +चला `connectWallet` खालीलप्रमाणे सुधारित करूया: + +```javascript +// interact.js + +export const connectWallet = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_requestAccounts", + }) + const obj = { + status: "👆🏽 वरील टेक्स्ट-फील्डमध्ये एक संदेश लिहा.", + address: addressArray[0], + } + return obj + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + तुम्ही तुमच्या ब्राउझरमध्ये MetaMask, एक व्हर्च्युअल Ethereum वॉलेट, इंस्टॉल करणे आवश्यक आहे. + +

+
+ ), + } + } +} +``` + +तर या मोठ्या कोड ब्लॉकचा नेमका काय उपयोग आहे? + +बरं, प्रथम, ते तुमच्या ब्राउझरमध्ये `window.ethereum` सक्षम आहे की नाही हे तपासते. + +`window.ethereum` हे MetaMask आणि इतर वॉलेट प्रदात्यांद्वारे इंजेक्ट केलेले एक ग्लोबल API आहे जे वेबसाइट्सना वापरकर्त्यांच्या Ethereum खात्यांची विनंती करण्याची परवानगी देते. मंजूर झाल्यास, ते वापरकर्ता कनेक्ट केलेल्या ब्लॉकचेनमधून डेटा वाचू शकते, आणि वापरकर्त्याला संदेश आणि व्यवहारांवर स्वाक्षरी करण्याचे सुचवू शकते. अधिक माहितीसाठी [MetaMask डॉक्स](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) तपासा! + +जर `window.ethereum` उपस्थित _नसेल_, तर याचा अर्थ MetaMask स्थापित नाही. यामुळे एक JSON ऑब्जेक्ट परत येतो, जिथे परत केलेला `address` एक रिकामा स्ट्रिंग असतो आणि `status` JSX ऑब्जेक्ट वापरकर्त्याला MetaMask स्थापित करणे आवश्यक असल्याचे सांगतो. + +आता जर `window.ethereum` उपस्थित _असेल_, तर गोष्टी मनोरंजक होतात. + +try/catch लूप वापरून, आम्ही [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts) कॉल करून MetaMask शी कनेक्ट करण्याचा प्रयत्न करू. हे फंक्शन कॉल केल्याने ब्राउझरमध्ये MetaMask उघडेल, जिथे वापरकर्त्याला त्यांचे वॉलेट तुमच्या dapp शी कनेक्ट करण्यास सांगितले जाईल. + +- जर वापरकर्त्याने कनेक्ट करणे निवडले, तर `method: "eth_requestAccounts"` एक ॲरे परत करेल ज्यात डॅपशी कनेक्ट केलेल्या वापरकर्त्याच्या सर्व खात्यांचे पत्ते असतील. एकूणच, आमचे `connectWallet` फंक्शन एक JSON ऑब्जेक्ट परत करेल ज्यात या ॲरेमधील _पहिला_ `address` (ओळ 9 पहा) आणि एक `status` संदेश असेल जो वापरकर्त्याला स्मार्ट कॉन्ट्रॅक्टला संदेश लिहिण्यास सांगेल. +- जर वापरकर्त्याने कनेक्शन नाकारले, तर JSON ऑब्जेक्टमध्ये परत केलेल्या `address` साठी एक रिकामा स्ट्रिंग आणि एक `status` संदेश असेल जो वापरकर्त्याने कनेक्शन नाकारले असल्याचे दर्शवेल. + +आता आम्ही हे `connectWallet` फंक्शन लिहिले आहे, पुढची पायरी म्हणजे ते आमच्या `HelloWorld.js` घटकामध्ये कॉल करणे. + +#### `connectWallet` फंक्शन तुमच्या `HelloWorld.js` UI घटकामध्ये जोडा {#add-the-connectWallet-function-to-your-HelloWorld-js-ui-component} + +`HelloWorld.js` मधील `connectWalletPressed` फंक्शनवर नेव्हिगेट करा, आणि ते खालीलप्रमाणे अपडेट करा: + +```javascript +// HelloWorld.js + +const connectWalletPressed = async () => { + const walletResponse = await connectWallet() + setStatus(walletResponse.status) + setWallet(walletResponse.address) +} +``` + +आमच्या `HelloWorld.js` घटकामधून `interact.js` फाइलमधून आमची बहुतेक कार्यक्षमता कशी दूर केली जाते हे लक्षात घ्या? हे असे आहे की आम्ही M-V-C पॅराडाइमचे पालन करतो! + +`connectWalletPressed` मध्ये, आम्ही फक्त आमच्या आयात केलेल्या `connectWallet` फंक्शनला एक await कॉल करतो आणि त्याच्या प्रतिसादाचा वापर करून, आम्ही आमचे `status` आणि `walletAddress` व्हेरिएबल्स त्यांच्या स्टेट हुक्सद्वारे अपडेट करतो. + +आता, चला दोन्ही फायली (`HelloWorld.js` आणि `interact.js`) सेव्ह करूया आणि आतापर्यंत आमच्या UI ची चाचणी घेऊया. + +तुमचा ब्राउझर [http://localhost:3000/](http://localhost:3000/) पेजवर उघडा, आणि पेजच्या वरच्या उजवीकडील "वॉलेट कनेक्ट करा" बटण दाबा. + +तुमच्याकडे MetaMask स्थापित असल्यास, तुम्हाला तुमचे वॉलेट तुमच्या dapp शी जोडण्यास सांगितले जाईल. कनेक्ट करण्याची आमंत्रणे स्वीकारा. + +तुम्हाला दिसेल की वॉलेट बटण आता तुमचा पत्ता कनेक्ट झाला आहे हे दर्शवते! व्वा 🔥 + +पुढे, पृष्ठ रिफ्रेश करण्याचा प्रयत्न करा... हे विचित्र आहे. आमचे वॉलेट बटण आम्हाला MetaMask कनेक्ट करण्यास सांगत आहे, जरी ते आधीच कनेक्ट केलेले असले तरी... + +तथापि, घाबरू नका! आम्ही ते सहजपणे सोडवू शकतो (समजले?) `getCurrentWalletConnected` अंमलात आणून, जे तपासेल की पत्ता आधीपासूनच आमच्या डॅपशी कनेक्ट केलेला आहे की नाही आणि त्यानुसार आमचे UI अपडेट करेल! + +#### `getCurrentWalletConnected` फंक्शन {#the-getcurrentwalletconnected-function} + +`interact.js` फाइलमधील तुमचे `getCurrentWalletConnected` फंक्शन खालीलप्रमाणे अपडेट करा: + +```javascript +// interact.js + +export const getCurrentWalletConnected = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_accounts", + }) + if (addressArray.length > 0) { + return { + address: addressArray[0], + status: "👆🏽 वरील टेक्स्ट-फील्डमध्ये एक संदेश लिहा.", + } + } else { + return { + address: "", + status: "🦊 वरच्या उजव्या बटणाचा वापर करून MetaMask शी कनेक्ट करा.", + } + } + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + तुम्ही तुमच्या ब्राउझरमध्ये MetaMask, एक व्हर्च्युअल Ethereum वॉलेट, इंस्टॉल करणे आवश्यक आहे. + +

+
+ ), + } + } +} +``` + +हा कोड आम्ही मागील पायरीमध्ये लिहिलेल्या `connectWallet` फंक्शनसारखाच _खूप_ आहे. + +मुख्य फरक असा आहे की `eth_requestAccounts` या पद्धतीला कॉल करण्याऐवजी, जे वापरकर्त्याला त्यांचे वॉलेट कनेक्ट करण्यासाठी MetaMask उघडते, येथे आपण `eth_accounts` ही पद्धत कॉल करतो, जी सध्या आपल्या dapp शी कनेक्ट केलेल्या MetaMask ॲड्रेसची एक ॲरे परत करते. + +हे फंक्शन कृतीत पाहण्यासाठी, चला ते आमच्या `HelloWorld.js` घटकाच्या `useEffect` फंक्शनमध्ये कॉल करूया: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() + + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) +}, []) +``` + +लक्षात घ्या, आम्ही आमच्या `getCurrentWalletConnected` च्या कॉलच्या प्रतिसादाचा वापर आमचे `walletAddress` आणि `status` स्टेट व्हेरिएबल्स अपडेट करण्यासाठी करतो. + +आता तुम्ही हा कोड जोडला आहे, चला आमचे ब्राउझर विंडो रिफ्रेश करून पाहूया. + +छान! बटण तुम्हाला कनेक्ट झाल्याचे सांगेल आणि तुमच्या कनेक्ट केलेल्या वॉलेटच्या ॲड्रेसचे पूर्वावलोकन दाखवेल - जरी तुम्ही रिफ्रेश केले तरी! + +#### `addWalletListener` अंमलात आणा {#implement-addwalletlistener} + +आमच्या dapp वॉलेट सेटअपमधील शेवटची पायरी म्हणजे वॉलेट लिसनर लागू करणे जेणेकरून आमच्या वॉलेटची स्थिती बदलल्यावर आमचे UI अपडेट होईल, जसे की वापरकर्ता डिस्कनेक्ट झाल्यावर किंवा खाती बदलल्यावर. + +तुमच्या `HelloWorld.js` फाइलमध्ये, तुमचे `addWalletListener` फंक्शन खालीलप्रमाणे सुधारित करा: + +```javascript +// HelloWorld.js + +function addWalletListener() { + if (window.ethereum) { + window.ethereum.on("accountsChanged", (accounts) => { + if (accounts.length > 0) { + setWallet(accounts[0]) + setStatus("👆🏽 वरील टेक्स्ट-फील्डमध्ये एक संदेश लिहा.") + } else { + setWallet("") + setStatus("🦊 वरच्या उजव्या बटणाचा वापर करून MetaMask शी कनेक्ट करा.") + } + }) + } else { + setStatus( +

+ {" "} + 🦊 + तुम्ही तुमच्या ब्राउझरमध्ये MetaMask, एक व्हर्च्युअल Ethereum वॉलेट, इंस्टॉल करणे आवश्यक आहे. + +

+ ) + } +} +``` + +मला खात्री आहे की तुम्हाला या टप्प्यावर काय चालले आहे हे समजून घेण्यासाठी आमच्या मदतीची गरज नाही, परंतु संपूर्णतेच्या उद्देशाने, चला ते पटकन पाहूया: + +- प्रथम, आमचे फंक्शन तपासते की `window.ethereum` सक्षम आहे का (म्हणजे MetaMask स्थापित आहे का). + - जर ते नसेल, तर आम्ही फक्त आमचे `status` स्टेट व्हेरिएबल एका JSX स्ट्रिंगवर सेट करतो जे वापरकर्त्याला MetaMask स्थापित करण्यास सांगते. + - जर ते सक्षम असेल, तर आम्ही ओळ 3 वर `window.ethereum.on("accountsChanged")` हा लिसनर सेट करतो जो MetaMask वॉलेटमधील स्टेट बदलांसाठी ऐकतो, ज्यात वापरकर्ता dapp शी अतिरिक्त खाते जोडतो, खाती बदलतो किंवा खाते डिस्कनेक्ट करतो. जर किमान एक खाते कनेक्ट केलेले असेल, तर `walletAddress` स्टेट व्हेरिएबल लिसनरद्वारे परत केलेल्या `accounts` ॲरेमधील पहिले खाते म्हणून अपडेट केले जाते. अन्यथा, `walletAddress` एक रिकामा स्ट्रिंग म्हणून सेट केला जातो. + +शेवटचे पण महत्त्वाचे, आम्ही ते आमच्या `useEffect` फंक्शनमध्ये कॉल करणे आवश्यक आहे: + +```javascript +// HelloWorld.js + +useEffect(async () => { + const message = await loadCurrentMessage() + setMessage(message) + addSmartContractListener() + + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) + + addWalletListener() +}, []) +``` + +आणि झाले! आम्ही आमच्या सर्व वॉलेट कार्यक्षमतेचे प्रोग्रामिंग यशस्वीरित्या पूर्ण केले आहे! आता आमच्या शेवटच्या कार्याकडे: आमच्या स्मार्ट कॉन्ट्रॅक्टमध्ये संग्रहित केलेला संदेश अपडेट करणे! + +### पायरी ६: `updateMessage` फंक्शन अंमलात आणा {#step-6-implement-the-updateMessage-function} + +ठीक आहे मित्रांनो, आपण अंतिम टप्प्यात आलो आहोत! तुमच्या `interact.js` फाइलच्या `updateMessage` मध्ये, आम्ही खालील गोष्टी करणार आहोत: + +1. आम्हाला आमच्या स्मार्ट संपर्कात प्रकाशित करायचा असलेला संदेश वैध असल्याची खात्री करा +2. MetaMask वापरून आमच्या व्यवहारावर स्वाक्षरी करा +3. या फंक्शनला आमच्या `HelloWorld.js` फ्रंटएंड घटकामधून कॉल करा + +याला जास्त वेळ लागणार नाही; चला हा डॅप पूर्ण करूया! + +#### इनपुट एरर हाताळणी {#input-error-handling} + +स्वाभाविकच, फंक्शनच्या सुरुवातीला काही प्रकारचे इनपुट त्रुटी हाताळणी असणे अर्थपूर्ण आहे. + +आम्ही इच्छितो की जर MetaMask विस्तार स्थापित नसेल, कोणतेही वॉलेट कनेक्ट केलेले नसेल (म्हणजे, पास केलेला `address` एक रिकामा स्ट्रिंग आहे), किंवा `message` एक रिकामा स्ट्रिंग असेल तर आमचे फंक्शन लवकर परत यावे. चला `updateMessage` मध्ये खालील त्रुटी हाताळणी जोडूया: + +```javascript +// interact.js + +export const updateMessage = async (address, message) => { + if (!window.ethereum || address === null) { + return { + status: + "💡 ब्लॉकचेनवरील संदेश अपडेट करण्यासाठी तुमचे MetaMask वॉलेट कनेक्ट करा.", + } + } + + if (message.trim() === "") { + return { + status: "❌ तुमचा संदेश रिकामा स्ट्रिंग असू शकत नाही.", + } + } +} +``` + +आता त्यात योग्य इनपुट त्रुटी हाताळणी आहे, MetaMask द्वारे व्यवहारावर स्वाक्षरी करण्याची वेळ आली आहे! + +#### आमच्या व्यवहारावर स्वाक्षरी करणे {#signing-our-transaction} + +तुम्ही आधीपासूनच पारंपरिक वेब3 Ethereum व्यवहारांशी परिचित असाल, तर आम्ही पुढे लिहिणारा कोड खूप परिचित असेल. तुमच्या इनपुट त्रुटी हाताळणी कोडच्या खाली, `updateMessage` मध्ये खालील जोडा: + +```javascript +// interact.js + +//व्यवहार पॅरामीटर्स सेट करा +const transactionParameters = { + to: contractAddress, // कॉन्ट्रॅक्ट प्रकाशनांशिवाय आवश्यक. + from: address, // वापरकर्त्याच्या सक्रिय पत्त्याशी जुळले पाहिजे. + data: helloWorldContract.methods.update(message).encodeABI(), +} + +//व्यवहारावर स्वाक्षरी करा +try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + status: ( + + ✅{" "} + + Etherscan वर तुमच्या व्यवहाराची स्थिती पहा! + +
+ ℹ️ एकदा नेटवर्कद्वारे व्यवहाराची पडताळणी झाल्यावर, संदेश आपोआप अपडेट होईल. +
+ ), + } +} catch (error) { + return { + status: "😥 " + error.message, + } +} +``` + +चला पाहूया की काय चालले आहे. प्रथम, आम्ही आमचे व्यवहार पॅरामीटर्स सेट करतो, जिथे: + +- `to` प्राप्तकर्ता ॲड्रेस (आमचा स्मार्ट कॉन्ट्रॅक्ट) निर्दिष्ट करतो +- `from` व्यवहाराच्या स्वाक्षरीकर्त्याला निर्दिष्ट करते, आम्ही आमच्या फंक्शनमध्ये पास केलेला `address` व्हेरिएबल +- `data` मध्ये आमच्या हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्टच्या `update` पद्धतीचा कॉल आहे, जो आमचा `message` स्ट्रिंग व्हेरिएबल इनपुट म्हणून घेतो + +मग, आम्ही एक await कॉल करतो, `window.ethereum.request`, जिथे आम्ही MetaMask ला व्यवहारावर स्वाक्षरी करण्यास सांगतो. लक्षात घ्या, ओळी ११ आणि १२ वर, आम्ही आमची eth पद्धत, `eth_sendTransaction` निर्दिष्ट करत आहोत आणि आमचे `transactionParameters` पास करत आहोत. + +या टप्प्यावर, MetaMask ब्राउझरमध्ये उघडेल आणि वापरकर्त्याला व्यवहारावर सही करण्यास किंवा नाकारण्यास सांगेल. + +- जर व्यवहार यशस्वी झाला, तर फंक्शन एक JSON ऑब्जेक्ट परत करेल जिथे `status` JSX स्ट्रिंग वापरकर्त्याला त्यांच्या व्यवहाराबद्दल अधिक माहितीसाठी Etherscan तपासण्यास सांगते. +- जर व्यवहार अयशस्वी झाला, तर फंक्शन एक JSON ऑब्जेक्ट परत करेल जिथे `status` स्ट्रिंग त्रुटी संदेश प्रसारित करते. + +एकत्रितपणे, आमचे `updateMessage` फंक्शन असे दिसले पाहिजे: + +```javascript +// interact.js + +export const updateMessage = async (address, message) => { + //इनपुट त्रुटी हाताळणी + if (!window.ethereum || address === null) { + return { + status: + "💡 ब्लॉकचेनवरील संदेश अपडेट करण्यासाठी तुमचे MetaMask वॉलेट कनेक्ट करा.", + } + } + + if (message.trim() === "") { + return { + status: "❌ तुमचा संदेश रिकामा स्ट्रिंग असू शकत नाही.", + } + } + + //व्यवहार पॅरामीटर्स सेट करा + const transactionParameters = { + to: contractAddress, // कॉन्ट्रॅक्ट प्रकाशनांशिवाय आवश्यक. + from: address, // वापरकर्त्याच्या सक्रिय पत्त्याशी जुळले पाहिजे. + data: helloWorldContract.methods.update(message).encodeABI(), + } + + //व्यवहारावर स्वाक्षरी करा + try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + status: ( + + ✅{" "} + + Etherscan वर तुमच्या व्यवहाराची स्थिती पहा! + +
+ ℹ️ एकदा नेटवर्कद्वारे व्यवहाराची पडताळणी झाल्यावर, संदेश आपोआप अपडेट होईल. +
+ ), + } + } catch (error) { + return { + status: "😥 " + error.message, + } + } +} +``` + +शेवटचे पण महत्त्वाचे, आम्हाला आमचे `updateMessage` फंक्शन आमच्या `HelloWorld.js` घटकाशी कनेक्ट करणे आवश्यक आहे. + +#### `updateMessage` ला `HelloWorld.js` फ्रंटएंडशी कनेक्ट करा {#connect-updatemessage-to-the-helloworld-js-frontend} + +आमच्या `onUpdatePressed` फंक्शनने आयात केलेल्या `updateMessage` फंक्शनला एक await कॉल करावा आणि आमचा व्यवहार यशस्वी झाला की अयशस्वी हे दर्शविण्यासाठी `status` स्टेट व्हेरिएबल सुधारित करावे: + +```javascript +// HelloWorld.js + +const onUpdatePressed = async () => { + const { status } = await updateMessage(walletAddress, newMessage) + setStatus(status) +} +``` + +हे खूप स्वच्छ आणि सोपे आहे. आणि अंदाज लावा... तुमचा डॅप पूर्ण झाला आहे!!! + +पुढे जा आणि **अपडेट** बटणाची चाचणी घ्या! + +### तुमचा स्वतःचा सानुकूल डॅप बनवा {#make-your-own-custom-dapp} + +व्वा, तुम्ही ट्युटोरियलच्या शेवटपर्यंत पोहोचलात! रिकॅप करण्यासाठी, तुम्ही शिकलात की कसे: + +- तुमच्या डॅप प्रकल्पाला MetaMask वॉलेट कनेक्ट करा +- [Alchemy Web3](https://docs.alchemy.com/alchemy/documentation/alchemy-web3) API वापरून तुमच्या स्मार्ट कॉन्ट्रॅक्टमधून डेटा वाचा +- MetaMask वापरून Ethereum व्यवहारांवर स्वाक्षरी करा + +आता तुम्ही तुमचा स्वतःचा सानुकूल डॅप प्रकल्प तयार करण्यासाठी या ट्युटोरियलमधील कौशल्ये लागू करण्यासाठी पूर्णपणे सुसज्ज आहात! नेहमीप्रमाणे, तुम्हाला काही प्रश्न असल्यास, [Alchemy Discord](https://discord.gg/gWuC7zB) मध्ये मदतीसाठी आमच्याशी संपर्क साधण्यास अजिबात संकोच करू नका. 🧙‍♂️ + +एकदा तुम्ही हे ट्युटोरियल पूर्ण केल्यावर, आम्हाला Twitter [@alchemyplatform](https://twitter.com/AlchemyPlatform) वर टॅग करून तुमचा अनुभव कसा होता किंवा तुमचा काही अभिप्राय असल्यास आम्हाला कळवा! diff --git a/public/content/translations/mr/developers/tutorials/hello-world-smart-contract/index.md b/public/content/translations/mr/developers/tutorials/hello-world-smart-contract/index.md new file mode 100644 index 00000000000..637ec6384c2 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/hello-world-smart-contract/index.md @@ -0,0 +1,366 @@ +--- +title: "नवशिक्यांसाठी हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट" +description: "Ethereum वर एक साधे स्मार्ट कॉन्ट्रॅक्ट लिहिण्यावर आणि उपयोजित करण्यावर एक प्रास्ताविक ट्युटोरियल." +author: "elanh" +tags: + [ + "सॉलिडिटी", + "hardhat", + "alchemy", + "स्मार्ट कॉन्ट्रॅक्ट", + "डिप्लॉयिंग" + ] +skill: beginner +lang: mr +published: 2021-03-31 +--- + +जर तुम्ही ब्लॉकचेन डेव्हलपमेंटमध्ये नवीन असाल आणि कुठून सुरुवात करावी हे माहित नसेल, किंवा जर तुम्हाला फक्त स्मार्ट कॉन्ट्रॅक्ट कसे उपयोजित करायचे आणि त्यांच्याशी संवाद कसा साधायचा हे समजून घ्यायचे असेल, तर हा मार्गदर्शक तुमच्यासाठी आहे. आपण व्हर्च्युअल वॉलेट [MetaMask](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/), आणि [Alchemy](https://www.alchemy.com/eth) वापरून सेपोलिया टेस्ट नेटवर्कवर एक साधे स्मार्ट कॉन्ट्रॅक्ट तयार करण्याची आणि उपयोजित करण्याची प्रक्रिया पाहू (यापैकी कशाचाही अर्थ तुम्हाला अजून समजत नसेल, तर काळजी करू नका, आम्ही ते स्पष्ट करू). + +या ट्युटोरियलच्या [भाग २](https://docs.alchemy.com/docs/interacting-with-a-smart-contract) मध्ये, एकदा आपले स्मार्ट कॉन्ट्रॅक्ट येथे उपयोजित झाल्यावर आपण त्याच्याशी संवाद कसा साधू शकतो हे पाहू, आणि [भाग ३](https.www.alchemy.com/docs/submitting-your-smart-contract-to-etherscan) मध्ये आपण ते Etherscan वर कसे प्रकाशित करायचे हे पाहू. + +तुम्हाला कोणत्याही वेळी प्रश्न पडल्यास [Alchemy Discord](https://discord.gg/gWuC7zB) मध्ये मोकळेपणाने संपर्क साधा! + +## पायरी १: Ethereum नेटवर्कशी कनेक्ट करा {#step-1} + +Ethereum चेनला विनंत्या करण्याचे अनेक मार्ग आहेत. सोपेपणासाठी, आपण Alchemy वर एक विनामूल्य खाते वापरू, जो एक ब्लॉकचेन डेव्हलपर प्लॅटफॉर्म आणि API आहे, ज्यामुळे आपल्याला आपले स्वतःचे नोड्स चालवल्याशिवाय Ethereum चेनशी संवाद साधता येतो. या प्लॅटफॉर्ममध्ये मॉनिटरिंग आणि ॲनालिटिक्ससाठी डेव्हलपर साधने देखील आहेत, ज्यांचा आपण या ट्युटोरियलमध्ये फायदा घेऊ, जेणेकरून आपल्या स्मार्ट कॉन्ट्रॅक्टच्या उपयोजनात पडद्यामागे काय चालले आहे हे समजेल. जर तुमचे आधीच Alchemy खाते नसेल, तर [तुम्ही येथे विनामूल्य साइन अप करू शकता](https://dashboard.alchemy.com/signup). + +## पायरी २: तुमचे ॲप (आणि API की) तयार करा {#step-2} + +एकदा तुम्ही Alchemy खाते तयार केल्यावर, तुम्ही ॲप तयार करून API की तयार करू शकता. हे आम्हाला Sepolia चाचणी नेटवर्कवर विनंत्या करण्याची परवानगी देईल. जर तुम्ही टेस्टनेटशी परिचित नसाल, तर [हे पृष्ठ](/developers/docs/networks/) पहा. + +1. तुमच्या Alchemy डॅशबोर्डमधील "Create new app" पृष्ठावर जाण्यासाठी नेव्ह बारमध्ये "Select an app" निवडा आणि "Create new app" वर क्लिक करा. + +![हॅलो वर्ल्ड ॲप तयार करा](./hello-world-create-app.png) + +2. तुमच्या ॲपला “Hello World” असे नाव द्या, एक छोटे वर्णन द्या, आणि एक उपयोग-केस निवडा, उदा., "Infra & Tooling." पुढे, "Ethereum" साठी शोधा आणि नेटवर्क निवडा. + +![ॲप व्ह्यू हॅलो वर्ल्ड तयार करा](./create-app-view-hello-world.png) + +3. पुढे जाण्यासाठी "Next" वर क्लिक करा, नंतर “Create app” आणि बस्स! तुमचे ॲप नेव्ह बार ड्रॉपडाउन मेन्यूमध्ये दिसले पाहिजे, जिथे कॉपी करण्यासाठी API की उपलब्ध असेल. + +## पायरी ३: एक Ethereum खाते (पत्ता) तयार करा {#step-3} + +आम्हाला व्यवहार पाठवण्यासाठी आणि प्राप्त करण्यासाठी Ethereum खात्याची आवश्यकता आहे. या ट्यूटोरियलसाठी, आम्ही MetaMask वापरू, जे ब्राउझरमधील एक व्हर्च्युअल वॉलेट आहे, जे तुमचा Ethereum खाते पत्ता व्यवस्थापित करण्यासाठी वापरले जाते. [व्यवहारांविषयी](/developers/docs/transactions/) अधिक. + +तुम्ही MetaMask डाउनलोड करू शकता आणि [येथे](https://metamask.io/download) विनामूल्य Ethereum खाते तयार करू शकता. तुम्ही खाते तयार करत असताना, किंवा तुमचे खाते आधीच असल्यास, नेटवर्क ड्रॉपडाउन मेनू वापरून "Sepolia" टेस्ट नेटवर्कवर स्विच केल्याची खात्री करा (जेणेकरून आपण खऱ्या पैशांशी व्यवहार करणार नाही). + +जर तुम्हाला Sepolia सूचीबद्ध दिसत नसेल, तर मेन्यूमध्ये जा, नंतर Advanced मध्ये जाऊन खाली स्क्रोल करा आणि "Show test networks" चालू करण्यासाठी टॉगल करा. नेटवर्क निवड मेन्यूमध्ये, टेस्टनेटची सूची शोधण्यासाठी "Custom" टॅब निवडा आणि "Sepolia" निवडा. + +![metamask sepolia उदाहरण](./metamask-sepolia-example.png) + +## पायरी ४: फॉसेटमधून इथर मिळवा {#step-4} + +आपले स्मार्ट कॉन्ट्रॅक्ट टेस्ट नेटवर्कवर उपयोजित करण्यासाठी, आपल्याला काही बनावट Eth ची आवश्यकता असेल. Sepolia ETH मिळवण्यासाठी, विविध फॉसेटची सूची पाहण्यासाठी तुम्ही [Sepolia नेटवर्क तपशील](/developers/docs/networks/#sepolia) वर जाऊ शकता. एक काम करत नसल्यास, दुसरा प्रयत्न करा, कारण ते कधीकधी रिकामे होऊ शकतात. नेटवर्क ट्रॅफिकमुळे तुमचा बनावट ETH मिळण्यास थोडा वेळ लागू शकतो. त्यानंतर लवकरच तुमच्या Metamask खात्यात ETH दिसेल! + +## पायरी ५: तुमची शिल्लक तपासा {#step-5} + +आपली शिल्लक आहे की नाही, हे पुन्हा तपासण्यासाठी, चला [Alchemy च्या कंपोझर टूल](https://sandbox.alchemy.com/?network=ETH_SEPOLIA&method=eth_getBalance&body.id=1&body.jsonrpc=2.0&body.method=eth_getBalance&body.params%5B0%5D=&body.params%5B1%5D=latest) वापरून एक [eth_getBalance](/developers/docs/apis/json-rpc/#eth_getbalance) विनंती करूया. हे आमच्या वॉलेटमधील ETH ची रक्कम परत करेल. तुम्ही तुमच्या MetaMask खात्याचा पत्ता इनपुट केल्यानंतर आणि “Send Request” वर क्लिक केल्यानंतर, तुम्हाला असा प्रतिसाद दिसेल: + +```json +{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" } +``` + +> **टीप:** हा निकाल ETH मध्ये नसून wei मध्ये आहे. Wei हे इथरचे सर्वात लहान एकक म्हणून वापरले जाते. wei चे ETH मध्ये रूपांतर असे आहे: 1 eth = 1018 wei. म्हणून जर आपण 0x2B5E3AF16B1880000 चे दशांश मध्ये रूपांतर केले, तर आपल्याला 5\*10¹⁸ मिळतात जे 5 ETH च्या बरोबर आहे. +> +> हुश्श! आपले बनावट पैसे पूर्णपणे तिथे आहेत . + +## पायरी ६: आपला प्रकल्प सुरू करा {#step-6} + +प्रथम, आपल्याला आपल्या प्रोजेक्टसाठी एक फोल्डर तयार करण्याची आवश्यकता असेल. तुमच्या कमांड लाइनवर नेव्हिगेट करा आणि टाइप करा: + +``` +mkdir hello-world +cd hello-world +``` + +आता आपण आपल्या प्रोजेक्ट फोल्डरमध्ये आहोत, आपण प्रोजेक्ट सुरू करण्यासाठी `npm init` वापरू. जर तुमच्याकडे आधीपासून npm इंस्टॉल केलेले नसेल, तर [या सूचनांचे](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) पालन करा (आपल्याला Node.js ची देखील आवश्यकता असेल, म्हणून ते देखील डाउनलोड करा!). + +``` +npm init +``` + +तुम्ही इन्स्टॉलेशनच्या प्रश्नांची उत्तरे कशी देता हे खरोखर महत्त्वाचे नाही, संदर्भासाठी आम्ही ते कसे केले ते येथे आहे: + +``` +package name: (hello-world) +version: (1.0.0) +description: hello world smart contract +entry point: (index.js) +test command: +git repository: +keywords: +author: +license: (ISC) +About to write to /Users/.../.../.../hello-world/package.json: + +{ + "name": "hello-world", + "version": "1.0.0", + "description": "hello world smart contract", + "main": "index.js", + "scripts": { + "test": "echo \\"Error: no test specified\\" && exit 1" + }, + "author": "", + "license": "ISC" +} +``` + +package.json ला मंजूर करा आणि आपण पुढे जाण्यास तयार आहोत! + +## पायरी ७: [Hardhat](https://hardhat.org/getting-started/#overview) डाउनलोड करा {#step-7} + +Hardhat हे तुमचे Ethereum सॉफ्टवेअर संकलित (compile), उपयोजित (deploy), चाचणी (test) आणि डीबग (debug) करण्यासाठी एक विकास वातावरण आहे. हे डेव्हलपर्सना थेट चेनवर उपयोजित करण्यापूर्वी स्थानिक पातळीवर स्मार्ट कॉन्ट्रॅक्ट्स आणि dApps तयार करताना मदत करते. + +आपल्या `hello-world` प्रोजेक्टमध्ये चालवा: + +``` +npm install --save-dev hardhat +``` + +[इन्स्टॉलेशन सूचनांविषयी](https://hardhat.org/getting-started/#overview) अधिक तपशीलांसाठी हे पेज पहा. + +## पायरी ८: Hardhat प्रोजेक्ट तयार करा {#step-8} + +आपल्या प्रोजेक्ट फोल्डरमध्ये चालवा: + +``` +npx hardhat +``` + +त्यानंतर तुम्हाला एक स्वागत संदेश आणि तुम्हाला काय करायचे आहे यासाठी पर्याय दिसेल. “create an empty hardhat.config.js” निवडा: + +``` +888 888 888 888 888 +888 888 888 888 888 +888 888 888 888 888 +8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 +888 888 "88b 888P" d88" 888 888 "88b "88b 888 +888 888 .d888888 888 888 888 888 888 .d888888 888 +888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. +888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 + +👷 Welcome to Hardhat v2.0.11 👷‍? + +What do you want to do? … +Create a sample project +❯ Create an empty hardhat.config.js +Quit +``` + +यामुळे आपल्यासाठी `hardhat.config.js` फाईल तयार होईल, जिथे आपण आपल्या प्रोजेक्टसाठी सर्व सेटअप निर्दिष्ट करू (पायरी १३ वर). + +## पायरी ९: प्रोजेक्ट फोल्डर्स जोडा {#step-9} + +आपला प्रोजेक्ट सुव्यवस्थित ठेवण्यासाठी आपण दोन नवीन फोल्डर्स तयार करू. तुमच्या कमांड लाइनमधील प्रोजेक्टच्या मूळ डिरेक्टरीवर नेव्हिगेट करा आणि टाइप करा: + +``` +mkdir contracts +mkdir scripts +``` + +- `contracts/` मध्ये आपण आपली हॅलो वर्ल्ड स्मार्ट कॉन्ट्रॅक्ट कोड फाईल ठेवू +- `scripts/` मध्ये आपण आपले कॉन्ट्रॅक्ट उपयोजित करण्यासाठी आणि त्याच्याशी संवाद साधण्यासाठी स्क्रिप्ट्स ठेवू + +## पायरी १०: आपले कॉन्ट्रॅक्ट लिहा {#step-10} + +तुम्ही स्वतःला विचारत असाल, की आपण कोड कधी लिहिणार आहोत?? तर, आपण पायरी १० वर आलो आहोत. + +hello-world प्रोजेक्ट तुमच्या आवडत्या एडिटरमध्ये उघडा (आम्हाला [VSCode](https://code.visualstudio.com/) आवडते). स्मार्ट कॉन्ट्रॅक्ट्स Solidity नावाच्या भाषेत लिहिले जातात, जी आपण आपले HelloWorld.sol स्मार्ट कॉन्ट्रॅक्ट लिहिण्यासाठी वापरू.‌ + +1. "contracts" फोल्डरमध्ये नेव्हिगेट करा आणि HelloWorld.sol नावाची नवीन फाईल तयार करा +2. खाली Ethereum फाउंडेशनकडून एक नमुना Hello World स्मार्ट कॉन्ट्रॅक्ट आहे, जो आपण या ट्युटोरियलसाठी वापरणार आहोत. खालील मजकूर तुमच्या HelloWorld.sol फाईलमध्ये कॉपी आणि पेस्ट करा, आणि हे कॉन्ट्रॅक्ट काय करते हे समजून घेण्यासाठी कमेंट्स नक्की वाचा: + +```solidity +// सिमेंटिक व्हर्जनिंग वापरून सॉलिडिटीची आवृत्ती निर्दिष्ट करते. +// अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma +pragma solidity ^0.7.0; + +// `HelloWorld` नावाचे एक कॉन्ट्रॅक्ट परिभाषित करते. +// कॉन्ट्रॅक्ट हे फंक्शन्स आणि डेटा (त्याची स्थिती) यांचा संग्रह आहे. एकदा उपयोजित झाल्यावर, कॉन्ट्रॅक्ट Ethereum ब्लॉकचेनवर एका विशिष्ट पत्त्यावर राहते. अधिक जाणून घ्या: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html +contract HelloWorld { + + // `string` प्रकाराचे एक स्टेट व्हेरिएबल `message` घोषित करते. + // स्टेट व्हेरिएबल्स असे व्हेरिएबल्स आहेत ज्यांची मूल्ये कॉन्ट्रॅक्ट स्टोरेजमध्ये कायमची संग्रहित केली जातात. `public` कीवर्ड व्हेरिएबल्सना कॉन्ट्रॅक्टच्या बाहेरून ॲक्सेस करण्यायोग्य बनवतो आणि एक फंक्शन तयार करतो ज्याला इतर कॉन्ट्रॅक्ट्स किंवा क्लायंट्स मूल्य ॲक्सेस करण्यासाठी कॉल करू शकतात. + string public message; + + // अनेक क्लास-आधारित ऑब्जेक्ट-ओरिएंटेड भाषांप्रमाणे, कन्स्ट्रक्टर हे एक विशेष फंक्शन आहे जे फक्त कॉन्ट्रॅक्ट तयार झाल्यावर कार्यान्वित होते. + // कन्स्ट्रक्टरचा वापर कॉन्ट्रॅक्टचा डेटा सुरू करण्यासाठी केला जातो. अधिक जाणून घ्या:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors + constructor(string memory initMessage) { + + // एक स्ट्रिंग युक्तिवाद `initMessage` स्वीकारतो आणि कॉन्ट्रॅक्टच्या `message` स्टोरेज व्हेरिएबलमध्ये मूल्य सेट करतो). + message = initMessage; + } + + // एक पब्लिक फंक्शन जे एक स्ट्रिंग युक्तिवाद स्वीकारते आणि `message` स्टोरेज व्हेरिएबल अपडेट करते. + function update(string memory newMessage) public { + message = newMessage; + } +} +``` + +हे एक अत्यंत सोपे स्मार्ट कॉन्ट्रॅक्ट आहे जे तयार झाल्यावर एक संदेश संग्रहित करते आणि `update` फंक्शनला कॉल करून अपडेट केले जाऊ शकते. + +## पायरी ११: तुमच्या प्रोजेक्टला MetaMask आणि Alchemy कनेक्ट करा {#step-11} + +आपण MetaMask वॉलेट, Alchemy खाते तयार केले आहे आणि आपले स्मार्ट कॉन्ट्रॅक्ट लिहिले आहे, आता या तिन्हीना जोडण्याची वेळ आली आहे. + +तुमच्या व्हर्च्युअल वॉलेटमधून पाठवलेल्या प्रत्येक व्यवहारासाठी तुमच्या युनिक प्रायव्हेट की वापरून स्वाक्षरी आवश्यक आहे. आमच्या प्रोग्रामला ही परवानगी देण्यासाठी, आम्ही आमची प्रायव्हेट की (आणि Alchemy API की) एका एन्व्हायर्नमेंट फाइलमध्ये सुरक्षितपणे संग्रहित करू शकतो. + +> व्यवहार पाठवण्याबद्दल अधिक जाणून घेण्यासाठी, वेब3 वापरून व्यवहार पाठवण्यावरील [हे ट्यूटोरियल](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) पहा. + +प्रथम, तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये dotenv पॅकेज इंस्टॉल करा: + +``` +npm install dotenv --save +``` + +त्यानंतर, आमच्या प्रोजेक्टच्या रूट डिरेक्टरीमध्ये एक `.env` फाइल तयार करा आणि त्यात तुमची MetaMask प्रायव्हेट की आणि HTTP Alchemy API URL जोडा. + +- तुमची प्रायव्हेट की एक्सपोर्ट करण्यासाठी [या सूचनांचे](https://support.metamask.io/configure/accounts/how-to-export-an-accounts-private-key/) पालन करा +- HTTP Alchemy API URL मिळवण्यासाठी खाली पहा + +![अल्केमी एपीआय की मिळवा](./get-alchemy-api-key.png) + +Alchemy API URL कॉपी करा + +तुमचे `.env` असे दिसले पाहिजे: + +``` +API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key" +PRIVATE_KEY = "your-metamask-private-key" +``` + +हे प्रत्यक्षात आपल्या कोडशी जोडण्यासाठी, आपण या व्हेरिएबल्सचा संदर्भ आपल्या `hardhat.config.js` फाईलमध्ये पायरी १३ वर देऊ. + + + + +.env कमिट करू नका! कृपया तुमची .env फाईल कोणासोबतही शेअर किंवा उघड करू नका, कारण असे केल्याने तुम्ही तुमची गुपिते धोक्यात आणत आहात याची खात्री करा. जर तुम्ही व्हर्जन कंट्रोल वापरत असाल, तर तुमची .env फाईल gitignore फाईलमध्ये जोडा. + + + + +## पायरी १२: Ethers.js इंस्टॉल करा {#step-12-install-ethersjs} + +Ethers.js ही एक लायब्ररी आहे जी अधिक वापरकर्ता-अनुकूल पद्धतींसह [प्रमाणित JSON-RPC पद्धती](/developers/docs/apis/json-rpc/) गुंडाळून Ethereum शी संवाद साधणे आणि विनंत्या करणे सोपे करते. + +Hardhat अतिरिक्त टूलिंग आणि विस्तारित कार्यक्षमतेसाठी [प्लगइन्स](https://hardhat.org/plugins/) समाकलित करणे खूप सोपे करते. आम्ही कॉन्ट्रॅक्ट डिप्लॉयमेंटसाठी [Ethers प्लगइन](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) चा फायदा घेणार आहोत ([Ethers.js](https://github.com/ethers-io/ethers.js/) मध्ये काही अत्यंत स्वच्छ कॉन्ट्रॅक्ट डिप्लॉयमेंट पद्धती आहेत). + +आपल्या प्रोजेक्ट डिरेक्टरीमध्ये टाइप करा: + +``` +npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0" +``` + +आपण पुढील पायरीमध्ये आपल्या `hardhat.config.js` मध्ये ethers ची आवश्यकता देखील दर्शवू. + +## पायरी १३: hardhat.config.js अद्ययावत करा {#step-13-update-hardhatconfigjs} + +आतापर्यंत आपण अनेक डिपेंडेंसी आणि प्लगइन जोडले आहेत, आता आपल्याला `hardhat.config.js` अद्यतनित करण्याची आवश्यकता आहे जेणेकरून आपल्या प्रोजेक्टला त्या सर्वांबद्दल माहिती मिळेल. + +तुमचे `hardhat.config.js` याप्रमाणे दिसण्यासाठी अद्यतनित करा: + +``` +require('dotenv').config(); + +require("@nomiclabs/hardhat-ethers"); +const { API_URL, PRIVATE_KEY } = process.env; + +/** +* @type import('hardhat/config').HardhatUserConfig +*/ +module.exports = { + solidity: "0.7.3", + defaultNetwork: "sepolia", + networks: { + hardhat: {}, + sepolia: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`] + } + }, +} +``` + +## पायरी १४: आपले कॉन्ट्रॅक्ट कंपाईल करा {#step-14-compile-our-contracts} + +आतापर्यंत सर्व काही कार्यरत आहे याची खात्री करण्यासाठी, चला आमचा कॉन्ट्रॅक्ट संकलित करूया. `compile` कार्य हे बिल्ट-इन हार्डहॅट कार्यांपैकी एक आहे. + +कमांड लाइनमधून चालवा: + +``` +npx hardhat compile +``` + +तुम्हाला `SPDX license identifier not provided in source file` बद्दल एक चेतावणी मिळू शकते, परंतु त्याबद्दल काळजी करण्याची गरज नाही — आशा आहे की इतर सर्व काही ठीक दिसेल! नसल्यास, तुम्ही नेहमी [Alchemy discord](https://discord.gg/u72VCg3) मध्ये संदेश पाठवू शकता. + +## पायरी १५: आमची डिप्लॉय स्क्रिप्ट लिहा {#step-15-write-our-deploy-scripts} + +आता आमचा कॉन्ट्रॅक्ट लिहिला आहे आणि आमची कॉन्फिगरेशन फाइल तयार आहे, आता आमच्या कॉन्ट्रॅक्टची उपयोजन स्क्रिप्ट लिहिण्याची वेळ आली आहे. + +`scripts/` फोल्डरवर नेव्हिगेट करा आणि `deploy.js` नावाची एक नवीन फाइल तयार करा, त्यात खालील सामग्री जोडा: + +``` +async function main() { + const HelloWorld = await ethers.getContractFactory("HelloWorld"); + + // उपयोजन सुरू करा, जे एक प्रॉमिस परत करते जे कॉन्ट्रॅक्ट ऑब्जेक्टमध्ये रूपांतरित होते + const hello_world = await HelloWorld.deploy("Hello World!"); + console.log("Contract deployed to address:", hello_world.address);} + +main() + .then(() => process.exit(0)) + .catch(error => { + console.error(error); + process.exit(1); + }); +``` + +Hardhat त्यांच्या [कॉन्ट्रॅक्ट्स ट्यूटोरियल](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) मध्ये या प्रत्येक कोड ओळी काय करते हे आश्चर्यकारकपणे स्पष्ट करते, आम्ही त्यांचे स्पष्टीकरण येथे स्वीकारले आहे. + +``` +const HelloWorld = await ethers.getContractFactory("HelloWorld"); +``` + +ethers.js मधील `ContractFactory` हे नवीन स्मार्ट कॉन्ट्रॅक्ट उपयोजित करण्यासाठी वापरले जाणारे एक ॲब्स्ट्रॅक्शन आहे, म्हणून येथे `HelloWorld` हे आपल्या हॅलो वर्ल्ड कॉन्ट्रॅक्टच्या इन्स्टन्ससाठी एक फॅक्टरी आहे. `hardhat-ethers` प्लगइन वापरताना `ContractFactory` आणि `Contract` इन्स्टन्स डीफॉल्टनुसार पहिल्या स्वाक्षरीकर्त्याशी जोडलेले असतात. + +``` +const hello_world = await HelloWorld.deploy(); +``` + +`ContractFactory` वर `deploy()` कॉल केल्याने उपयोजन सुरू होईल, आणि एक `Promise` परत येईल जो `Contract` मध्ये रिझॉल्व्ह होईल. हे ते ऑब्जेक्ट आहे ज्यामध्ये आमच्या प्रत्येक स्मार्ट कॉन्ट्रॅक्ट फंक्शनसाठी एक पद्धत आहे. + +## पायरी १६: आपले कॉन्ट्रॅक्ट उपयोजित करा {#step-16-deploy-our-contract} + +आम्ही अखेरीस आमचा स्मार्ट कॉन्ट्रॅक्ट उपयोजित करण्यास तयार आहोत! कमांड लाइनवर नेव्हिगेट करा आणि चालवा: + +``` +npx hardhat run scripts/deploy.js --network sepolia +``` + +तुम्हाला त्यानंतर असे काहीतरी दिसेल: + +``` +Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570 +``` + +जर आपण [Sepolia etherscan](https://sepolia.etherscan.io/) वर गेलो आणि आपल्या कॉन्ट्रॅक्ट पत्त्यासाठी शोधले तर ते यशस्वीरित्या उपयोजित झाले आहे हे आपण पाहू शकू. व्यवहार असा काहीतरी दिसेल: + +![etherscan कॉन्ट्रॅक्ट](./etherscan-contract.png) + +`From` पत्ता तुमच्या MetaMask खात्याच्या पत्त्याशी जुळला पाहिजे आणि To पत्त्यावर “Contract Creation” असे दिसेल, परंतु जर आपण व्यवहारात क्लिक केले तर आपल्याला `To` फील्डमध्ये आपला कॉन्ट्रॅक्ट पत्ता दिसेल: + +![एथरस्कॅन व्यवहार](./etherscan-transaction.png) + +अभिनंदन! तुम्ही नुकतेच Ethereum चेनवर एक स्मार्ट कॉन्ट्रॅक्ट उपयोजित केले आहे 🎉 + +पडद्यामागे काय चालले आहे हे समजून घेण्यासाठी, चला आमच्या [Alchemy dashboard](https://dashboard.alchemyapi.io/explorer) मधील Explorer टॅबवर नेव्हिगेट करूया. तुमच्याकडे अनेक Alchemy ॲप्स असल्यास, ॲपनुसार फिल्टर केल्याची खात्री करा आणि “Hello World” निवडा. +![हॅलो वर्ल्ड एक्सप्लोरर](./hello-world-explorer.png) + +येथे तुम्हाला मुठभर JSON-RPC कॉल्स दिसतील जे Hardhat/Ethers ने `.deploy()` फंक्शन कॉल केल्यावर पडद्याआड आपल्यासाठी केले. येथे दोन महत्त्वाचे मुद्दे म्हणजे [`eth_sendRawTransaction`](https://www.alchemy.com/docs/node/abstract/abstract-api-endpoints/eth-send-raw-transaction), जे प्रत्यक्षात सेपोलिया चेनवर आपले कॉन्ट्रॅक्ट लिहिण्याची विनंती आहे, आणि [`eth_getTransactionByHash`](https://www.alchemy.com/docs/node/abstract/abstract-api-endpoints/eth-get-transaction-by-hash) जे हॅश दिल्यावर आपल्या व्यवहाराबद्दल माहिती वाचण्याची विनंती आहे (व्यवहार करताना एक सामान्य नमुना). व्यवहार पाठविण्याबद्दल अधिक जाणून घेण्यासाठी, [Web3 आणि Alchemy वापरून व्यवहार पाठविण्यावरील](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) हे ट्युटोरियल पहा. + +या ट्युटोरियलच्या भाग १ साठी एवढेच, भाग २ मध्ये आपण आपला सुरुवातीचा संदेश अपडेट करून [आपल्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधू](https://www.alchemy.com/docs/interacting-with-a-smart-contract) आणि भाग ३ मध्ये आपण [आपले स्मार्ट कॉन्ट्रॅक्ट Etherscan वर प्रकाशित करू](https://www.alchemy.com/docs/submitting-your-smart-contract-to-etherscan) जेणेकरून प्रत्येकाला त्याच्याशी संवाद कसा साधायचा हे कळेल. + +\*\*Alchemy बद्दल अधिक जाणून घ्यायचे आहे? आमची [वेबसाइट](https://www.alchemy.com/eth) तपासा. एकही अपडेट चुकवायचे नाही? [येथे](https://www.alchemy.com/newsletter) आमच्या वृत्तपत्राची सदस्यता घ्या! आमच्या [Discord](https://discord.gg/u72VCg3) मध्ये सामील होण्याची खात्री करा. \*\* diff --git a/public/content/translations/mr/developers/tutorials/how-to-implement-an-erc721-market/index.md b/public/content/translations/mr/developers/tutorials/how-to-implement-an-erc721-market/index.md new file mode 100644 index 00000000000..8997ff14d37 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-implement-an-erc721-market/index.md @@ -0,0 +1,151 @@ +--- +title: "ERC-721 मार्केट कसे लागू करावे" +description: "विकेंद्रीकृत क्लासिफाइड्स बोर्डवर टोकनाइज्ड वस्तू विक्रीसाठी कशा ठेवायच्या" +author: "Alberto Cuesta Cañada" +tags: + [ + "स्मार्ट कॉन्ट्रॅक्ट", + "erc-721", + "सॉलिडिटी", + "tokens" + ] +skill: intermediate +lang: mr +published: 2020-03-19 +source: Hackernoon +sourceUrl: https://hackernoon.com/how-to-implement-an-erc721-market-1e1a32j9 +--- + +या लेखात, मी तुम्हाला Ethereum blockchain साठी Craigslist कसे कोड करायचे हे दाखवणार आहे. + +Gumtree, Ebay आणि Craigslist पूर्वी, क्लासिफाइड्स बोर्ड बहुतेक कॉर्क किंवा कागदाचे बनलेले होते. शाळेच्या कॉरिडॉरमध्ये, वर्तमानपत्रांमध्ये, रस्त्यावरील दिव्यांवर, दुकानांच्या दर्शनी भागात क्लासिफाइड्स बोर्ड होते. + +इंटरनेटमुळे हे सर्व बदलले. एखादा विशिष्ट क्लासिफाइड्स बोर्ड पाहू शकणाऱ्या लोकांची संख्या अनेक पटींनी वाढली. त्यामुळे, ते ज्या बाजारांचे प्रतिनिधित्व करतात ते अधिक कार्यक्षम बनले आणि जागतिक स्तरावर विस्तारले. Ebay हा एक मोठा व्यवसाय आहे ज्याची मुळे या भौतिक क्लासिफाइड्स बोर्डांमध्ये आहेत. + +Blockchain मुळे हे बाजार पुन्हा एकदा बदलणार आहेत, मी तुम्हाला दाखवतो कसे. + +## कमाई {#monetization} + +सार्वजनिक blockchain क्लासिफाइड्स बोर्डचे व्यवसाय मॉडेल Ebay आणि कंपनीच्या मॉडेलपेक्षा वेगळे असणे आवश्यक आहे. + +प्रथम, [विकेंद्रीकरणाचा दृष्टिकोन](/developers/docs/web2-vs-web3/) आहे. विद्यमान प्लॅटफॉर्मला त्यांचे स्वतःचे सर्व्हर सांभाळावे लागतात. एक विकेंद्रित प्लॅटफॉर्म त्याच्या वापरकर्त्यांद्वारे सांभाळला जातो, त्यामुळे प्लॅटफॉर्म मालकासाठी मूळ प्लॅटफॉर्म चालवण्याचा खर्च शून्यावर येतो. + +त्यानंतर फ्रंट एंड आहे, म्हणजेच वेबसाइट किंवा इंटरफेस जो प्लॅटफॉर्मवर प्रवेश देतो. येथे अनेक पर्याय आहेत. प्लॅटफॉर्मचे मालक प्रवेश प्रतिबंधित करू शकतात आणि प्रत्येकाला त्यांचा इंटरफेस वापरण्यास भाग पाडू शकतात, त्यासाठी शुल्क आकारू शकतात. प्लॅटफॉर्मचे मालक प्रवेश खुला करण्याचा निर्णय घेऊ शकतात (पॉवर टू द पीपल!) आणि कोणालाही प्लॅटफॉर्मसाठी इंटरफेस तयार करण्याची परवानगी देऊ शकतात. किंवा मालक या दोन टोकांच्या मधला कोणताही दृष्टिकोन ठरवू शकतात. + +_माझ्यापेक्षा अधिक दूरदृष्टी असलेले व्यावसायिक नेते यातून कमाई कशी करायची हे जाणतील._ _मला फक्त एवढेच दिसते की हे सध्याच्या स्थितीपेक्षा वेगळे आहे आणि कदाचित फायदेशीर आहे._ + +शिवाय, ऑटोमेशन आणि पेमेंट्सचा दृष्टिकोन आहे. काही गोष्टी खूप [प्रभावीपणे टोकनाइज्ड](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com) केल्या जाऊ शकतात आणि क्लासिफाइड्स बोर्डमध्ये त्यांचा व्यापार केला जाऊ शकतो. टोकनाइज्ड मालमत्ता blockchain मध्ये सहजपणे हस्तांतरित केल्या जातात. अत्यंत गुंतागुंतीच्या पेमेंट पद्धती blockchain मध्ये सहजपणे लागू केल्या जाऊ शकतात. + +मला येथे फक्त व्यवसायाच्या संधीचा वास येत आहे. कोणत्याही चालू खर्चाशिवाय क्लासिफाइड्स बोर्ड सहजपणे लागू केला जाऊ शकतो, ज्यामध्ये प्रत्येक व्यवहारात गुंतागुंतीचे पेमेंट मार्ग समाविष्ट असतील. मला खात्री आहे की याचा उपयोग कशासाठी करायचा याबद्दल कोणालातरी कल्पना सुचेल. + +मी फक्त ते तयार करण्यात आनंदी आहे. चला कोडवर एक नजर टाकूया. + +## अंमलबजावणी {#implementation} + +काही काळापूर्वी आम्ही बिझनेस केसच्या उदाहरणांच्या अंमलबजावणी आणि इतर चांगल्या गोष्टींसह एक [ओपन सोर्स रिपॉझिटरी](https://github.com/HQ20/contracts?ref=hackernoon.com) सुरू केली आहे, कृपया एक नजर टाका. + +या [Ethereum Classifieds Board](https://github.com/HQ20/contracts/tree/master/contracts/classifieds?ref=hackernoon.com) साठीचा कोड तिथे आहे, कृपया त्याचा वापर करा आणि त्याचा भरपूर वापर करा. फक्त हे लक्षात ठेवा की कोडचे ऑडिट केलेले नाही आणि त्यात पैसे गुंतवण्यापूर्वी तुम्हाला स्वतःची योग्य तपासणी करणे आवश्यक आहे. + +बोर्डच्या मूलभूत गोष्टी गुंतागुंतीच्या नाहीत. बोर्डमधील सर्व जाहिराती फक्त काही फील्ड्ससह एक struct असतील: + +```solidity +struct Trade { + address poster; + uint256 item; + uint256 price; + bytes32 status; // उघडा, कार्यान्वित, रद्द +} +``` + +म्हणजे जाहिरात पोस्ट करणारी कोणीतरी व्यक्ती आहे. विक्रीसाठी एक वस्तू. वस्तूसाठी एक किंमत. व्यापाराची स्थिती जी उघडी, कार्यान्वित किंवा रद्द केली जाऊ शकते. + +हे सर्व व्यवहार एका मॅपिंगमध्ये ठेवले जातील. कारण Solidity मध्ये सर्व काही मॅपिंगच असल्याचे दिसते. तसेच ते सोयीचे असल्यामुळे. + +```solidity +mapping(uint256 => Trade) public trades; +``` + +मॅपिंग वापरण्याचा अर्थ असा आहे की प्रत्येक जाहिरात पोस्ट करण्यापूर्वी आपल्याला त्यासाठी एक आयडी तयार करावा लागेल, आणि त्यावर प्रक्रिया करण्यापूर्वी आपल्याला त्या जाहिरातीचा आयडी माहित असणे आवश्यक असेल. स्मार्ट कॉन्ट्रॅक्टमध्ये किंवा फ्रंट-एंडमध्ये यावर काम करण्याचे अनेक मार्ग आहेत. तुम्हाला काही सूचना हव्या असल्यास कृपया विचारा. + +पुढे प्रश्न येतो की आपण ज्या वस्तूंचा व्यवहार करतो त्या कोणत्या आहेत आणि व्यवहारासाठी पैसे देण्यासाठी वापरले जाणारे चलन कोणते आहे. + +वस्तूंसाठी, आम्ही फक्त त्यांना [ERC-721](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol?ref=hackernoon.com) इंटरफेस लागू करण्यास सांगणार आहोत, जो वास्तविक जगातील वस्तू blockchain मध्ये दर्शविण्याचा एक मार्ग आहे, जरी ते [डिजिटल मालमत्तेसह सर्वोत्तम कार्य करते](https://hackernoon.com/tokenization-of-digital-assets-g0ffk3v8s?ref=hackernoon.com). आम्ही कन्स्ट्रक्टरमध्ये आमचा स्वतःचा ERC721 कॉन्ट्रॅक्ट निर्दिष्ट करणार आहोत, याचा अर्थ आमच्या क्लासिफाइड्स बोर्डमधील कोणत्याही मालमत्तेचे आधीच टोकनायझेशन करणे आवश्यक आहे. + +पेमेंट्ससाठी, आम्ही असेच काहीतरी करणार आहोत. बहुतेक blockchain प्रकल्प स्वतःची [ERC-20](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol?ref=hackernoon.com) क्रिप्टोकरन्सी परिभाषित करतात. काहीजण DAI सारखे मुख्य प्रवाहातील चलन वापरण्यास प्राधान्य देतात. या क्लासिफाइड्स बोर्डमध्ये, तुम्हाला फक्त निर्मितीच्या वेळी ठरवायचे आहे की तुमचे चलन कोणते असेल. सोपे. + +```solidity +constructor ( + address _currencyTokenAddress, address _itemTokenAddress +) public { + currencyToken = IERC20(_currencyTokenAddress); + itemToken = IERC721(_itemTokenAddress); + tradeCounter = 0; +} +``` + +आपण तिथे पोहोचत आहोत. आपल्याकडे जाहिराती, व्यापारासाठी वस्तू आणि पेमेंटसाठी चलन आहे. जाहिरात तयार करणे म्हणजे तुमच्याकडे ती वस्तू आहे आणि तुम्ही ती दोनदा पोस्ट केलेली नाही, शक्यतो वेगळ्या बोर्डवर, हे दाखवण्यासाठी ती वस्तू एस्क्रोमध्ये ठेवणे. + +खालील कोड नेमके तेच करतो. वस्तू एस्क्रोमध्ये ठेवतो, जाहिरात तयार करतो, काही हाउसकीपिंगची कामे करतो. + +```solidity +function openTrade(uint256 _item, uint256 _price) + public +{ + itemToken.transferFrom(msg.sender, address(this), _item); + trades[tradeCounter] = Trade({ + poster: msg.sender, + item: _item, + price: _price, + status: "Open" + }); + tradeCounter += 1; + emit TradeStatusChange(tradeCounter - 1, "Open"); +} +``` + +व्यापार स्वीकारणे म्हणजे एक जाहिरात (व्यापार) निवडणे, किंमत भरणे, वस्तू मिळवणे. खालील कोड एक व्यापार पुनर्प्राप्त करतो. तो उपलब्ध आहे का ते तपासतो. वस्तूसाठी पैसे देतो. वस्तू परत मिळवतो. जाहिरात अपडेट करतो. + +```solidity +function executeTrade(uint256 _trade) + public +{ + Trade memory trade = trades[_trade]; + require(trade.status == "Open", "व्यापार खुला नाही."); + currencyToken.transferFrom(msg.sender, trade.poster, trade.price); + itemToken.transferFrom(address(this), msg.sender, trade.item); + trades[_trade].status = "Executed"; + emit TradeStatusChange(_trade, "Executed"); +} +``` + +शेवटी, विक्रेत्यांसाठी खरेदीदाराने व्यापार स्वीकारण्यापूर्वी त्यातून बाहेर पडण्याचा पर्याय आहे. काही मॉडेल्समध्ये, जाहिराती कालबाह्य होण्यापूर्वी काही कालावधीसाठी थेट (live) राहतील. तुमच्या बाजाराच्या डिझाइनवर अवलंबून, ही तुमची निवड आहे. + +हा कोड व्यापार कार्यान्वित करण्यासाठी वापरलेल्या कोडसारखाच आहे, फक्त यात चलनाची देवाणघेवाण होत नाही आणि वस्तू जाहिरात पोस्ट करणाऱ्याकडे परत जाते. + +```solidity +function cancelTrade(uint256 _trade) + public +{ + Trade memory trade = trades[_trade]; + require( + msg.sender == trade.poster, + "व्यापार फक्त पोस्ट करणाऱ्याद्वारे रद्द केला जाऊ शकतो." + ); + require(trade.status == "Open", "व्यापार खुला नाही."); + itemToken.transferFrom(address(this), trade.poster, trade.item); + trades[_trade].status = "Cancelled"; + emit TradeStatusChange(_trade, "Cancelled"); +} +``` + +बस इतकेच. तुम्ही अंमलबजावणीच्या शेवटपर्यंत पोहोचला आहात. काही व्यावसायिक संकल्पना कोडमध्ये व्यक्त केल्यावर किती संक्षिप्त असतात हे आश्चर्यकारक आहे, आणि हे त्यापैकीच एक उदाहरण आहे. संपूर्ण कॉन्ट्रॅक्ट [आमच्या रेपॉजिटरीमध्ये](https://github.com/HQ20/contracts/blob/master/contracts/classifieds/Classifieds.sol) तपासा. + +## निष्कर्ष {#conclusion} + +क्लासिफाइड्स बोर्ड हे एक सामान्य बाजारपेठेचे स्वरूप आहे जे इंटरनेटमुळे मोठ्या प्रमाणावर विस्तारले, आणि काही मक्तेदारी विजेत्यांसह एक प्रचंड लोकप्रिय व्यवसाय मॉडेल बनले. + +क्लासिफाइड्स बोर्ड हे blockchain वातावरणात प्रतिकृती बनवण्यासाठी एक सोपे साधन आहे, ज्यात खूप विशिष्ट वैशिष्ट्ये आहेत जी विद्यमान दिग्गजांना आव्हान देणे शक्य करतील. + +या लेखात, मी क्लासिफाइड्स बोर्ड व्यवसायाच्या व्यावसायिक वास्तवाला तांत्रिक अंमलबजावणीशी जोडण्याचा प्रयत्न केला आहे. जर तुमच्याकडे योग्य कौशल्ये असतील तर हे ज्ञान तुम्हाला अंमलबजावणीसाठी एक दूरदृष्टी आणि रोडमॅप तयार करण्यास मदत करेल. + +नेहमीप्रमाणे, जर तुम्ही काहीतरी मजेदार तयार करत असाल आणि तुम्हाला काही सल्ला हवा असेल, तर कृपया [मला संपर्क साधा](https://albertocuesta.es/)! मला मदत करायला नेहमीच आनंद होतो. diff --git a/public/content/translations/mr/developers/tutorials/how-to-mint-an-nft/index.md b/public/content/translations/mr/developers/tutorials/how-to-mint-an-nft/index.md new file mode 100644 index 00000000000..62ec6d3a132 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-mint-an-nft/index.md @@ -0,0 +1,335 @@ +--- +title: "NFT कसे मिंट करावे (NFT ट्युटोरियल मालिकेचा भाग 2/3)" +description: "हे ट्युटोरियल आमचा स्मार्ट कॉन्ट्रॅक्ट आणि Web3 वापरून Ethereum ब्लॉकचेनवर NFT कसे मिंट करायचे याचे वर्णन करते." +author: "Sumi Mudgil" +tags: + [ + "ERC-721", + "alchemy", + "सॉलिडिटी", + "स्मार्ट कॉन्ट्रॅक्ट" + ] +skill: beginner +lang: mr +published: 2021-04-22 +--- + +[बीपल](https://www.nytimes.com/2021/03/11/arts/design/nft-auction-christies-beeple.html): $69 दशलक्ष +[3LAU](https://www.forbes.com/sites/abrambrown/2021/03/03/3lau-nft-nonfungible-tokens-justin-blau/?sh=5f72ef64643b): $11 दशलक्ष +[ग्राइम्स](https://www.theguardian.com/music/2021/mar/02/grimes-sells-digital-art-collection-non-fungible-tokens): $6 दशलक्ष + +त्या सर्वांनी Alchemy च्या शक्तिशाली API चा वापर करून त्यांचे NFTs मिंट केले. या ट्युटोरियलमध्ये, आम्ही तुम्हाला \<10 मिनिटांत तेच कसे करायचे हे शिकवू. + +"NFT मिंट करणे" म्हणजे ब्लॉकचेनवर तुमच्या ERC-721 टोकनची एक अद्वितीय प्रत प्रकाशित करण्याची क्रिया. [या NFT ट्युटोरियल मालिकेच्या भाग १](/developers/tutorials/how-to-write-and-deploy-an-nft/) मधील आमचा स्मार्ट कॉन्ट्रॅक्ट वापरून, चला आपले Web3 कौशल्य दाखवूया आणि एक NFT मिंट करूया. या ट्युटोरियलच्या शेवटी, तुम्ही तुमच्या मनाला (आणि वॉलेटला) हवे तितके NFTs मिंट करू शकाल! + +चला सुरू करूया! + +## पायरी १: Web3 इंस्टॉल करा {#install-web3} + +जर तुम्ही तुमचा NFT स्मार्ट कॉन्ट्रॅक्ट तयार करण्यावरील पहिले ट्युटोरियल फॉलो केले असेल, तर तुम्हाला Ethers.js वापरण्याचा अनुभव आधीच आहे. Web3 हे Ethers सारखेच आहे, कारण ही एक लायब्ररी आहे जी Ethereum ब्लॉकचेनला विनंत्या करणे सोपे करण्यासाठी वापरली जाते. या ट्युटोरियलमध्ये आपण [Alchemy Web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3) वापरणार आहोत, जी एक वर्धित Web3 लायब्ररी आहे जी स्वयंचलित पुनर्प्रयत्न आणि मजबूत WebSocket सपोर्ट देते. + +तुमच्या प्रोजेक्ट होम डिरेक्टरीमध्ये चालवा: + +``` +npm install @alch/alchemy-web3 +``` + +## पायरी २: `mint-nft.js` फाईल तयार करा {#create-mintnftjs} + +तुमच्या स्क्रिप्ट्स डिरेक्टरीमध्ये, `mint-nft.js` फाईल तयार करा आणि कोडच्या खालील ओळी जोडा: + +```js +require("dotenv").config() +const API_URL = process.env.API_URL +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(API_URL) +``` + +## पायरी ३: तुमचा कॉन्ट्रॅक्ट ABI मिळवा {#contract-abi} + +आमचा कॉन्ट्रॅक्ट ABI (ऍप्लिकेशन बायनरी इंटरफेस) हा आमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधण्यासाठी इंटरफेस आहे. तुम्ही कॉन्ट्रॅक्ट ABI बद्दल अधिक माहिती [येथे](https://docs.alchemyapi.io/alchemy/guides/eth_getlogs#what-are-ab-is) मिळवू शकता. Hardhat आमच्यासाठी आपोआप एक ABI तयार करते आणि ते `MyNFT.json` फाईलमध्ये सेव्ह करते. हे वापरण्यासाठी, आपल्याला आपल्या `mint-nft.js` फाईलमध्ये कोडच्या खालील ओळी जोडून मजकूर पार्स करणे आवश्यक आहे: + +```js +const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json") +``` + +जर तुम्हाला ABI पाहायचा असेल तर तुम्ही ते तुमच्या कन्सोलवर प्रिंट करू शकता: + +```js +console.log(JSON.stringify(contract.abi)) +``` + +`mint-nft.js` चालवण्यासाठी आणि तुमचा ABI कन्सोलवर प्रिंट झालेला पाहण्यासाठी तुमच्या टर्मिनलवर नेव्हिगेट करा आणि चालवा: + +```js +node scripts/mint-nft.js +``` + +## पायरी ४: IPFS वापरून तुमच्या NFT साठी मेटाडेटा कॉन्फिगर करा {#config-meta} + +तुम्हाला भाग 1 मधील आमच्या ट्युटोरियलमधून आठवत असेल तर, आमचे `mintNFT` स्मार्ट कॉन्ट्रॅक्ट फंक्शन एक tokenURI पॅरामीटर घेते जे NFT च्या मेटाडेटाचे वर्णन करणाऱ्या JSON डॉक्युमेंटमध्ये रिझॉल्व्ह झाले पाहिजे — जे खरोखर NFT ला जिवंत करते, त्याला नाव, वर्णन, प्रतिमा आणि इतर गुणधर्मांसारखे कॉन्फिगर करण्यायोग्य गुणधर्म ठेवण्याची परवानगी देते. + +> _इंटरप्लॅनेटरी फाईल सिस्टम (IPFS) हा एक विकेंद्रित प्रोटोकॉल आणि पीअर-टू-पीअर नेटवर्क आहे, जो वितरित फाईल सिस्टममध्ये डेटा संग्रहित आणि शेअर करण्यासाठी आहे._ + +आपला NFT खरोखर विकेंद्रित आहे याची खात्री करण्यासाठी, आपण आपली NFT मालमत्ता आणि मेटाडेटा संग्रहित करण्यासाठी Pinata, एक सोयीस्कर IPFS API आणि टूलकिट वापरणार आहोत. तुमचे Pinata खाते नसल्यास, [येथे](https://app.pinata.cloud) विनामूल्य खात्यासाठी साइन अप करा आणि तुमचा ईमेल सत्यापित करण्यासाठी पायऱ्या पूर्ण करा. + +एकदा तुम्ही खाते तयार केल्यानंतर: + +- "फाईल्स" पेजवर नेव्हिगेट करा आणि पेजच्या वरच्या-डाव्या कोपऱ्यात असलेल्या निळ्या "अपलोड" बटणावर क्लिक करा. + +- Pinata वर एक प्रतिमा अपलोड करा — ही तुमच्या NFT साठी प्रतिमा मालमत्ता असेल. मालमत्तेला तुम्हाला हवे ते नाव देण्यास मोकळे आहात + +- तुम्ही अपलोड केल्यानंतर, तुम्हाला "फाईल्स" पेजवरील टेबलमध्ये फाईलची माहिती दिसेल. तुम्हाला एक CID स्तंभ देखील दिसेल. तुम्ही त्याच्या पुढील कॉपी बटणावर क्लिक करून CID कॉपी करू शकता. तुम्ही तुमचे अपलोड येथे पाहू शकता: `https://gateway.pinata.cloud/ipfs/`. उदाहरणार्थ, आम्ही IPFS वर वापरलेली प्रतिमा तुम्ही [येथे](https://gateway.pinata.cloud/ipfs/QmZdd5KYdCFApWn7eTZJ1qgJu18urJrP9Yh1TZcZrZxxB5) शोधू शकता. + +अधिक दृष्य शिकणाऱ्यांसाठी, वरील पायऱ्या येथे सारांशित केल्या आहेत: + +![तुमची प्रतिमा Pinata वर कशी अपलोड करावी](./instructionsPinata.gif) + +आता, आम्हाला Pinata वर आणखी एक दस्तऐवज अपलोड करायचा आहे. पण ते करण्यापूर्वी, आपल्याला ते तयार करणे आवश्यक आहे! + +तुमच्या रूट डिरेक्टरीमध्ये, `nft-metadata.json` नावाची एक नवीन फाईल बनवा आणि खालील json कोड जोडा: + +```json +{ + "attributes": [ + { + "trait_type": "जात", + "value": "Maltipoo" + }, + { + "trait_type": "डोळ्यांचा रंग", + "value": "Mocha" + } + ], + "description": "जगातील सर्वात मोहक आणि संवेदनशील पिल्लू.", + "image": "ipfs://QmWmvTJmJU3pozR9ZHFmQC2DNDwi2XJtf3QGyYiiagFSWb", + "name": "Ramses" +} +``` + +json मधील डेटा बदलण्यास मोकळे आहात. तुम्ही ऍट्रिब्युट्स विभागातून काढू किंवा त्यात भर घालू शकता. सर्वात महत्त्वाचे म्हणजे, इमेज फील्ड तुमच्या IPFS प्रतिमेच्या स्थानाकडे निर्देश करते याची खात्री करा — अन्यथा, तुमच्या NFT मध्ये एका (खूप गोंडस!) कुत्र्याचा फोटो समाविष्ट असेल. + +एकदा तुम्ही JSON फाईल संपादित करणे पूर्ण केले की, ती सेव्ह करा आणि प्रतिमा अपलोड करण्यासाठी आम्ही केलेल्या त्याच पायऱ्यांचे अनुसरण करून Pinata वर अपलोड करा. + +![तुमचे nft-metadata.json Pinata वर कसे अपलोड करायचे](./uploadPinata.gif) + +## पायरी ५: तुमच्या कॉन्ट्रॅक्टची एक प्रत तयार करा {#instance-contract} + +आता, आमच्या कॉन्ट्रॅक्टशी संवाद साधण्यासाठी, आपल्याला आमच्या कोडमध्ये त्याची एक प्रत तयार करणे आवश्यक आहे. असे करण्यासाठी आम्हाला आमच्या कॉन्ट्रॅक्ट ॲड्रेसची आवश्यकता असेल, जो आपण डिप्लॉयमेंटमधून किंवा [Blockscout](https://eth-sepolia.blockscout.com/) वरून तुम्ही कॉन्ट्रॅक्ट डिप्लॉय करण्यासाठी वापरलेला ॲड्रेस शोधून मिळवू शकतो. + +![Etherscan वर तुमचा कॉन्ट्रॅक्ट ॲड्रेस पहा](./view-contract-etherscan.png) + +वरील उदाहरणात, आमचा कॉन्ट्रॅक्ट ॲड्रेस 0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778 आहे. + +पुढे आपण ABI आणि ॲड्रेस वापरून आपला कॉन्ट्रॅक्ट तयार करण्यासाठी Web3 [कॉन्ट्रॅक्ट पद्धत](https://docs.web3js.org/api/web3-eth-contract/class/Contract) वापरू. तुमच्या `mint-nft.js` फाईलमध्ये, खालील गोष्टी जोडा: + +```js +const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" + +const nftContract = new web3.eth.Contract(contract.abi, contractAddress) +``` + +## पायरी ६: `.env` फाईल अपडेट करा {#update-env} + +आता, Ethereum चेनवर व्यवहार तयार करण्यासाठी आणि पाठवण्यासाठी, आम्ही खाते नॉन्स (खाली स्पष्ट करू) मिळवण्यासाठी तुमचा सार्वजनिक Ethereum खाते ॲड्रेस वापरू. + +तुमची सार्वजनिक की तुमच्या `.env` फाईलमध्ये जोडा — जर तुम्ही ट्युटोरियलचा भाग १ पूर्ण केला असेल, तर आमची `.env` फाईल आता अशी दिसेल: + +```js +API_URL = "https://eth-sepolia.g.alchemy.com/v2/तुमची-api-की" +PRIVATE_KEY = "तुमचा-खाजगी-खाते-ॲड्रेस" +PUBLIC_KEY = "तुमचा-सार्वजनिक-खाते-ॲड्रेस" +``` + +## पायरी ७: तुमचा व्यवहार तयार करा {#create-txn} + +प्रथम, `mintNFT(tokenData)` नावाचे एक फंक्शन परिभाषित करूया आणि खालील गोष्टी करून आपला व्यवहार तयार करूया: + +1. `.env` फाईलमधून तुमची _PRIVATE_KEY_ आणि _PUBLIC_KEY_ मिळवा. + +2. पुढे, आपल्याला खाते नॉन्स शोधण्याची आवश्यकता असेल. नॉन्स स्पेसिफिकेशनचा वापर तुमच्या ॲड्रेसवरून पाठवलेल्या व्यवहारांच्या संख्येचा मागोवा ठेवण्यासाठी केला जातो — ज्याची आम्हाला सुरक्षिततेच्या उद्देशाने आणि [रिप्ले हल्ले](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce) टाळण्यासाठी आवश्यकता आहे. तुमच्या ॲड्रेसवरून पाठवलेल्या व्यवहारांची संख्या मिळवण्यासाठी, आम्ही [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount) वापरतो. + +3. शेवटी आम्ही खालील माहितीसह आमचा व्यवहार सेट करू: + +- `'from': PUBLIC_KEY` — आमच्या व्यवहाराचा उगम आमचा सार्वजनिक ॲड्रेस आहे + +- `'to': contractAddress` — ज्या कॉन्ट्रॅक्टशी आम्ही संवाद साधू आणि व्यवहार पाठवू इच्छितो + +- `'nonce': nonce` — आमच्या ॲड्रेसवरून पाठवलेल्या व्यवहारांच्या संख्येसह खाते नॉन्स + +- `'gas': estimatedGas` — व्यवहार पूर्ण करण्यासाठी लागणारा अंदाजित गॅस + +- `'data': nftContract.methods.mintNFT(PUBLIC_KEY, md).encodeABI()` — या व्यवहारामध्ये आपण जी गणना करू इच्छितो — जी या प्रकरणात NFT मिंट करणे आहे + +तुमची `mint-nft.js` फाईल आता अशी दिसेल: + +```js + require('dotenv').config(); + const API_URL = process.env.API_URL; + const PUBLIC_KEY = process.env.PUBLIC_KEY; + const PRIVATE_KEY = process.env.PRIVATE_KEY; + + const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); + const web3 = createAlchemyWeb3(API_URL); + + const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json"); + const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778"; + const nftContract = new web3.eth.Contract(contract.abi, contractAddress); + + async function mintNFT(tokenURI) { + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, 'latest'); //नवीनतम नॉन्स मिळवा + + //व्यवहार + const tx = { + 'from': PUBLIC_KEY, + 'to': contractAddress, + 'nonce': nonce, + 'gas': 500000, + 'data': nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI() + }; + }​ +``` + +## पायरी ८: व्यवहारावर सही करा {#sign-txn} + +आता आपण आपला व्यवहार तयार केला आहे, तो पाठवण्यासाठी आपल्याला त्यावर सही करणे आवश्यक आहे. येथे आपण आपली खाजगी की वापरू. + +`web3.eth.sendSignedTransaction` आपल्याला व्यवहाराचा हॅश देईल, ज्याचा वापर आपण आपला व्यवहार माइन झाला आहे आणि नेटवर्कद्वारे तो ड्रॉप झाला नाही याची खात्री करण्यासाठी करू शकतो. तुमच्या लक्षात येईल की व्यवहार स्वाक्षरी विभागात, आम्ही काही त्रुटी तपासणी जोडली आहे जेणेकरून आपला व्यवहार यशस्वीरित्या पार पडला की नाही हे आपल्याला कळेल. + +```js +require("dotenv").config() +const API_URL = process.env.API_URL +const PUBLIC_KEY = process.env.PUBLIC_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY + +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(API_URL) + +const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json") +const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" +const nftContract = new web3.eth.Contract(contract.abi, contractAddress) + +async function mintNFT(tokenURI) { + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //नवीनतम नॉन्स मिळवा + + //व्यवहार + const tx = { + from: PUBLIC_KEY, + to: contractAddress, + nonce: nonce, + gas: 500000, + data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(), + } + + const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY) + signPromise + .then((signedTx) => { + web3.eth.sendSignedTransaction( + signedTx.rawTransaction, + function (err, hash) { + if (!err) { + console.log( + "तुमच्या व्यवहाराचा हॅश आहे: ", + hash, + "\nतुमच्या व्यवहाराची स्थिती पाहण्यासाठी Alchemy's Mempool तपासा!" + ) + } else { + console.log( + "तुमचा व्यवहार सबमिट करताना काहीतरी चूक झाली:", + err + ) + } + } + ) + }) + .catch((err) => { + console.log(" Promise अयशस्वी झाले:", err) + }) +} +``` + +## पायरी ९: `mintNFT` ला कॉल करा आणि नोड `mint-nft.js` चालवा {#call-mintnft-fn} + +तुम्ही Pinata वर अपलोड केलेली `metadata.json` आठवते का? Pinata वरून त्याचा हॅशकोड मिळवा आणि `mintNFT` फंक्शनला पॅरामीटर म्हणून `https://gateway.pinata.cloud/ipfs/<मेटाडेटा-हॅश-कोड>` पास करा + +हॅशकोड कसा मिळवायचा ते येथे आहे: + +![Pinata वर तुमच्या nft मेटाडेटाचा हॅशकोड कसा मिळवायचा](./metadataPinata.gif)_Pinata वर तुमच्या nft मेटाडेटाचा हॅशकोड कसा मिळवायचा_ + +> स्वतंत्र विंडोमध्ये `https://gateway.pinata.cloud/ipfs/<मेटाडेटा-हॅश-कोड>` लोड करून तुम्ही कॉपी केलेला हॅशकोड तुमच्या **metadata.json** शी लिंक आहे का हे पुन्हा तपासा. हे पेज खालील स्क्रीनशॉटसारखे दिसावे: + +![तुमच्या पेजवर json मेटाडेटा प्रदर्शित झाला पाहिजे](./metadataJSON.png)_तुमच्या पेजवर json मेटाडेटा प्रदर्शित झाला पाहिजे_ + +एकूण, तुमचा कोड काहीसा असा दिसेल: + +```js +require("dotenv").config() +const API_URL = process.env.API_URL +const PUBLIC_KEY = process.env.PUBLIC_KEY +const PRIVATE_KEY = process.env.PRIVATE_KEY + +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(API_URL) + +const contract = require("../artifacts/contracts/MyNFT.sol/MyNFT.json") +const contractAddress = "0x5a738a5c5fe46a1fd5ee7dd7e38f722e2aef7778" +const nftContract = new web3.eth.Contract(contract.abi, contractAddress) + +async function mintNFT(tokenURI) { + const nonce = await web3.eth.getTransactionCount(PUBLIC_KEY, "latest") //नवीनतम नॉन्स मिळवा + + //व्यवहार + const tx = { + from: PUBLIC_KEY, + to: contractAddress, + nonce: nonce, + gas: 500000, + data: nftContract.methods.mintNFT(PUBLIC_KEY, tokenURI).encodeABI(), + } + + const signPromise = web3.eth.accounts.signTransaction(tx, PRIVATE_KEY) + signPromise + .then((signedTx) => { + web3.eth.sendSignedTransaction( + signedTx.rawTransaction, + function (err, hash) { + if (!err) { + console.log( + "तुमच्या व्यवहाराचा हॅश आहे: ", + hash, + "\nतुमच्या व्यवहाराची स्थिती पाहण्यासाठी Alchemy's Mempool तपासा!" + ) + } else { + console.log( + "तुमचा व्यवहार सबमिट करताना काहीतरी चूक झाली:", + err + ) + } + } + ) + }) + .catch((err) => { + console.log("Promise अयशस्वी झाले:", err) + }) +} + +mintNFT("ipfs://QmYueiuRNmL4MiA2GwtVMm6ZagknXnSpQnB3z2gWbz36hP") +``` + +आता, तुमचा NFT डिप्लॉय करण्यासाठी `node scripts/mint-nft.js` चालवा. काही सेकंदांनंतर, तुम्हाला तुमच्या टर्मिनलमध्ये असा प्रतिसाद दिसेल: + + ``` + तुमच्या व्यवहाराचा हॅश आहे: 0x301791fdf492001fcd9d5e5b12f3aa1bbbea9a88ed24993a8ab2cdae2d06e1e8 + + तुमच्या व्यवहाराची स्थिती पाहण्यासाठी Alchemy's Mempool तपासा! + ``` + +पुढे, तुमच्या व्यवहाराची स्थिती (तो प्रलंबित आहे, माइन झाला आहे, किंवा नेटवर्कद्वारे ड्रॉप झाला आहे) पाहण्यासाठी तुमच्या [Alchemy mempool](https://dashboard.alchemyapi.io/mempool) ला भेट द्या. तुमचा व्यवहार ड्रॉप झाला असल्यास, [Blockscout](https://eth-sepolia.blockscout.com/) तपासणे आणि तुमच्या व्यवहाराचा हॅश शोधणे देखील उपयुक्त आहे. + +![Etherscan वर तुमचा NFT व्यवहाराचा हॅश पहा](./view-nft-etherscan.png)_Etherscan वर तुमचा NFT व्यवहाराचा हॅश पहा_ + +आणि बस्स! तुम्ही आता Ethereum ब्लॉकचेनवर एक NFT डिप्लॉय आणि मिंट केला आहे + +`mint-nft.js` वापरून तुम्ही तुमच्या मनाला (आणि वॉलेटला) हवे तितके NFTs मिंट करू शकता! फक्त NFT च्या मेटाडेटाचे वर्णन करणारा एक नवीन tokenURI पास करण्याची खात्री करा (अन्यथा, तुम्ही फक्त वेगवेगळ्या आयडीसह सारख्याच अनेक प्रती तयार कराल). + +साहजिकच, तुम्हाला तुमच्या वॉलेटमध्ये तुमचा NFT दाखवायला आवडेल — म्हणून [भाग ३: तुमच्या वॉलेटमध्ये तुमचा NFT कसा पाहावा](/developers/tutorials/how-to-view-nft-in-metamask/) नक्की पहा! diff --git a/public/content/translations/mr/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md b/public/content/translations/mr/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md new file mode 100644 index 00000000000..5faf8882a82 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-mock-solidity-contracts-for-testing/index.md @@ -0,0 +1,108 @@ +--- +title: "चाचणीसाठी Solidity स्मार्ट कॉन्ट्रॅक्ट्सना मॉक कसे करावे" +description: "चाचणी करताना तुम्ही तुमच्या कॉन्ट्रॅक्ट्सची गंमत का करावी" +author: Markus Waas +lang: mr +tags: + [ + "सॉलिडिटी", + "स्मार्ट कॉन्ट्रॅक्ट", + "चाचणी", + "मॉक करणे" + ] +skill: intermediate +published: 2020-05-02 +source: soliditydeveloper.com +sourceUrl: https://soliditydeveloper.com/mocking-contracts +--- + +[मॉक ऑब्जेक्ट्स](https://wikipedia.org/wiki/Mock_object) हे ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंगमधील एक सामान्य डिझाइन पॅटर्न आहे. जुन्या फ्रेंच शब्द 'mocquer' ज्याचा अर्थ 'गमतीचा विषय बनवणे' आहे, त्यापासून विकसित होऊन त्याचा अर्थ 'खऱ्या गोष्टीची नक्कल करणे' असा झाला, जे आपण प्रोग्रामिंगमध्ये प्रत्यक्षात करत आहोत. तुम्हाला हवे असल्यास कृपया तुमच्या स्मार्ट कॉन्ट्रॅक्ट्सची गंमत करा, परंतु जेव्हा शक्य असेल तेव्हा त्यांना मॉक करा. हे तुमचे जीवन सोपे करते. + +## मॉकसह कॉन्ट्रॅक्ट्सची युनिट-चाचणी {#unit-testing-contracts-with-mocks} + +कॉन्ट्रॅक्ट मॉक करणे म्हणजे मूलतः त्या कॉन्ट्रॅक्टची दुसरी आवृत्ती तयार करणे जी मूळ आवृत्तीसारखीच वागते, परंतु अशा प्रकारे की डेव्हलपरद्वारे ती सहजपणे नियंत्रित केली जाऊ शकते. तुमच्याकडे अनेकदा गुंतागुंतीचे कॉन्ट्रॅक्ट्स असतात जिथे तुम्हाला फक्त [कॉन्ट्रॅक्टच्या छोट्या भागांची युनिट-चाचणी](/developers/docs/smart-contracts/testing/) करायची असते. समस्या ही आहे की, जर या छोट्या भागाची चाचणी करण्यासाठी एका विशिष्ट कॉन्ट्रॅक्ट स्थितीची आवश्यकता असेल ज्यात पोहोचणे कठीण आहे, तर काय? + +तुम्ही प्रत्येक वेळी गुंतागुंतीचे चाचणी सेटअप लॉजिक लिहू शकता जे कॉन्ट्रॅक्टला आवश्यक स्थितीत आणेल किंवा तुम्ही मॉक लिहू शकता. इनहेरिटन्ससह कॉन्ट्रॅक्ट मॉक करणे सोपे आहे. फक्त एक दुसरा मॉक कॉन्ट्रॅक्ट तयार करा जो मूळ कॉन्ट्रॅक्टमधून इनहेरिट करतो. आता तुम्ही तुमच्या मॉकसाठी फंक्शन्स ओव्हरराइड करू शकता. चला एका उदाहरणासह पाहूया. + +## उदाहरण: प्रायव्हेट ERC20 {#example-private-erc20} + +आपण एका उदाहरणादाखल ERC-20 कॉन्ट्रॅक्टचा वापर करतो ज्यामध्ये सुरुवातीला एक खाजगी वेळ असतो. मालक खाजगी वापरकर्त्यांना व्यवस्थापित करू शकतो आणि सुरुवातीला फक्त त्यांनाच टोकन मिळवण्याची परवानगी असेल. एकदा ठराविक वेळ निघून गेल्यावर, प्रत्येकाला टोकन वापरण्याची परवानगी दिली जाईल. तुम्हाला उत्सुकता असल्यास, आम्ही नवीन OpenZeppelin contracts v3 मधून [`_beforeTokenTransfer`](https://docs.openzeppelin.com/contracts/5.x/extending-contracts#using-hooks) हुक वापरत आहोत. + +```solidity +pragma solidity ^0.6.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract PrivateERC20 is ERC20, Ownable { + mapping (address => bool) public isPrivateUser; + uint256 private publicAfterTime; + + constructor(uint256 privateERC20timeInSec) ERC20("PrivateERC20", "PRIV") public { + publicAfterTime = now + privateERC20timeInSec; + } + + function addUser(address user) external onlyOwner { + isPrivateUser[user] = true; + } + + function isPublic() public view returns (bool) { + return now >= publicAfterTime; + } + + function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { + super._beforeTokenTransfer(from, to, amount); + + require(_validRecipient(to), "PrivateERC20: invalid recipient"); + } + + function _validRecipient(address to) private view returns (bool) { + if (isPublic()) { + return true; + } + + return isPrivateUser[to]; + } +} +``` + +आणि आता आपण ते मॉक करूया. + +```solidity +pragma solidity ^0.6.0; +import "../PrivateERC20.sol"; + +contract PrivateERC20Mock is PrivateERC20 { + bool isPublicConfig; + + constructor() public PrivateERC20(0) {} + + function setIsPublic(bool isPublic) external { + isPublicConfig = isPublic; + } + + function isPublic() public view returns (bool) { + return isPublicConfig; + } +} +``` + +तुम्हाला खालीलपैकी एक त्रुटी संदेश मिळेल: + +- `PrivateERC20Mock.sol: TypeError: Overriding function is missing "override" specifier.` +- `PrivateERC20.sol: TypeError: Trying to override non-virtual function. Did you forget to add "virtual"?.` + +आपण नवीन Solidity आवृत्ती 0.6 वापरत असल्यामुळे, ओव्हरराइड केल्या जाऊ शकणार्‍या फंक्शन्ससाठी `virtual` कीवर्ड आणि ओव्हरराइडिंग फंक्शनसाठी `override` कीवर्ड जोडावा लागेल. तर चला, हे दोन्ही `isPublic` फंक्शन्समध्ये जोडूया. + +आता तुमच्या युनिट चाचण्यांमध्ये, तुम्ही त्याऐवजी `PrivateERC20Mock` वापरू शकता. जेव्हा तुम्हाला खाजगी वापराच्या वेळेतील वर्तनाची चाचणी करायची असेल, तेव्हा `setIsPublic(false)` वापरा आणि त्याचप्रमाणे सार्वजनिक वापराच्या वेळेची चाचणी करण्यासाठी `setIsPublic(true)` वापरा. अर्थातच आपल्या उदाहरणात, आपण वेळ बदलण्यासाठी [टाइम हेल्पर्स](https://docs.openzeppelin.com/test-helpers/0.5/api#increase) देखील वापरू शकलो असतो. पण आता मॉक करण्याची कल्पना स्पष्ट झाली असेल आणि तुम्ही अशा परिस्थितीची कल्पना करू शकता जिथे फक्त वेळ पुढे नेण्याइतके सोपे नसते. + +## अनेक कॉन्ट्रॅक्ट्सना मॉक करणे {#mocking-many-contracts} + +प्रत्येक मॉकसाठी तुम्हाला दुसरा कॉन्ट्रॅक्ट तयार करावा लागल्यास ते गोंधळात टाकणारे असू शकते. जर तुम्हाला याचा त्रास होत असेल, तर तुम्ही [MockContract](https://github.com/gnosis/mock-contract) लायब्ररी पाहू शकता. हे तुम्हाला कॉन्ट्रॅक्ट्सचे वर्तन त्वरित ओव्हरराइड आणि बदलण्याची परवानगी देते. तथापि, हे फक्त दुसऱ्या कॉन्ट्रॅक्टला कॉल मॉक करण्यासाठी कार्य करते, त्यामुळे ते आपल्या उदाहरणासाठी कार्य करणार नाही. + +## मॉक करणे आणखी शक्तिशाली असू शकते {#mocking-can-be-even-more-powerful} + +मॉक करण्याची शक्ती इथेच संपत नाही. + +- फंक्शन्स जोडणे: केवळ एखादे विशिष्ट फंक्शन ओव्हरराइड करणेच उपयुक्त नाही, तर अतिरिक्त फंक्शन्स जोडणे देखील उपयुक्त आहे. टोकन्ससाठी एक चांगले उदाहरण म्हणजे फक्त एक अतिरिक्त `mint` फंक्शन असणे जे कोणत्याही वापरकर्त्याला विनामूल्य नवीन टोकन मिळविण्याची परवानगी देते. +- टेस्टनेटमध्ये वापर: जेव्हा तुम्ही तुमच्या dApp सह टेस्टनेटवर तुमचे कॉन्ट्रॅक्ट्स तैनात आणि चाचणी करता, तेव्हा मॉक केलेली आवृत्ती वापरण्याचा विचार करा. खरोखरच गरज असल्याशिवाय फंक्शन्स ओव्हरराइड करणे टाळा. शेवटी, तुम्हाला खऱ्या लॉजिकची चाचणी करायची आहे. परंतु उदाहरणार्थ, रीसेट फंक्शन जोडणे उपयुक्त ठरू शकते जे फक्त कॉन्ट्रॅक्टची स्थिती सुरुवातीला रीसेट करते, नवीन तैनातीची आवश्यकता नाही. अर्थातच तुम्हाला Mainnet कॉन्ट्रॅक्टमध्ये ते नको असेल. diff --git a/public/content/translations/mr/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md b/public/content/translations/mr/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md new file mode 100644 index 00000000000..c8ed9c7deff --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-use-echidna-to-test-smart-contracts/index.md @@ -0,0 +1,708 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट्सची चाचणी घेण्यासाठी Echidna चा वापर कसा करावा" +description: "स्मार्ट कॉन्ट्रॅक्ट्सची आपोआप चाचणी घेण्यासाठी Echidna चा वापर कसा करावा" +author: "Trailofbits" +lang: mr +tags: + [ + "सॉलिडिटी", + "स्मार्ट कॉन्ट्रॅक्ट", + "सुरक्षा", + "चाचणी", + "fuzzing" + ] +skill: advanced +published: 2020-04-10 +source: Building secure contracts +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/echidna +--- + +## इन्स्टॉलेशन {#installation} + +Echidna डॉकरद्वारे किंवा प्री-कंपाइल बायनरी वापरून इन्स्टॉल केले जाऊ शकते. + +### डॉकरद्वारे Echidna {#echidna-through-docker} + +```bash +docker pull trailofbits/eth-security-toolbox +docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox +``` + +_शेवटचा कमांड तुमच्या सध्याच्या डिरेक्टरीमध्ये ऍक्सेस असलेल्या docker मध्ये eth-security-toolbox चालवतो. तुम्ही तुमच्या होस्टमधून फाइल्स बदलू शकता, आणि docker मधून फाइल्सवर टूल्स चालवू शकता_ + +डॉकरमध्ये, चालवा : + +```bash +solc-select 0.5.11 +cd /home/training +``` + +### बायनरी {#binary} + +[https://github.com/crytic/echidna/releases/tag/v1.4.0.0](https://github.com/crytic/echidna/releases/tag/v1.4.0.0) + +## प्रॉपर्टी-आधारित फझिंगची ओळख {#introduction-to-property-based-fuzzing} + +Echidna एक प्रॉपर्टी-आधारित फझर आहे, ज्याचे वर्णन आम्ही आमच्या मागील ब्लॉगपोस्टमध्ये केले आहे ([1](https://blog.trailofbits.com/2018/03/09/echidna-a-smart-fuzzer-for-ethereum/), [2](https://blog.trailofbits.com/2018/05/03/state-machine-testing-with-echidna/), [3](https://blog.trailofbits.com/2020/03/30/an-echidna-for-all-seasons/)). + +### फझिंग {#fuzzing} + +[Fuzzing](https://wikipedia.org/wiki/Fuzzing) हे सुरक्षा समुदायामध्ये एक सुप्रसिद्ध तंत्र आहे. यात प्रोग्राममधील बग शोधण्यासाठी कमी-अधिक प्रमाणात यादृच्छिक इनपुट तयार करणे समाविष्ट आहे. पारंपारिक सॉफ्टवेअरसाठी फझर्स (जसे की [AFL](http://lcamtuf.coredump.cx/afl/) किंवा [LibFuzzer](https://llvm.org/docs/LibFuzzer.html)) बग शोधण्यासाठी कार्यक्षम साधने म्हणून ओळखले जातात. + +केवळ यादृच्छिक इनपुट तयार करण्यापलीकडे, चांगले इनपुट तयार करण्यासाठी अनेक तंत्रे आणि धोरणे आहेत, ज्यात खालील गोष्टींचा समावेश आहे: + +- प्रत्येक अंमलबजावणीतून अभिप्राय मिळवा आणि त्याचा वापर करून पिढीला मार्गदर्शन करा. उदाहरणार्थ, जर नवीन तयार केलेल्या इनपुटमुळे नवीन मार्ग सापडला, तर त्याच्या जवळ नवीन इनपुट तयार करणे अर्थपूर्ण ठरू शकते. +- रचनात्मक मर्यादांचा आदर करून इनपुट तयार करणे. उदाहरणार्थ, जर तुमच्या इनपुटमध्ये चेकसमसह हेडर असेल, तर फझरला चेकसम प्रमाणित करणारे इनपुट तयार करू देणे अर्थपूर्ण ठरेल. +- नवीन इनपुट तयार करण्यासाठी ज्ञात इनपुट वापरणे: जर तुमच्याकडे वैध इनपुटच्या मोठ्या डेटासेटमध्ये प्रवेश असेल, तर तुमचा फझर सुरवातीपासून त्याची निर्मिती सुरू करण्याऐवजी त्यातून नवीन इनपुट तयार करू शकतो. यांना सहसा _seeds_ म्हटले जाते. + +### प्रॉपर्टी-आधारित फझिंग {#property-based-fuzzing} + +Echidna फझरच्या एका विशिष्ट कुटुंबाशी संबंधित आहे: [QuickCheck](https://wikipedia.org/wiki/QuickCheck) द्वारे मोठ्या प्रमाणावर प्रेरित प्रॉपर्टी-आधारित फझिंग. क्रॅश शोधण्याचा प्रयत्न करणाऱ्या क्लासिक फझरच्या विपरीत, Echidna वापरकर्ता-परिभाषित इनव्हेरियंट्स तोडण्याचा प्रयत्न करेल. + +स्मार्ट कॉन्ट्रॅक्ट्समध्ये, इनव्हेरियंट्स हे Solidity फंक्शन्स असतात, जे कॉन्ट्रॅक्ट पोहोचू शकणाऱ्या कोणत्याही चुकीच्या किंवा अवैध स्थितीचे प्रतिनिधित्व करू शकतात, ज्यात खालील गोष्टींचा समावेश आहे: + +- चुकीचे प्रवेश नियंत्रण: आक्रमणकर्ता कॉन्ट्रॅक्टचा मालक बनला. +- चुकीचे स्टेट मशीन: कॉन्ट्रॅक्ट थांबवलेले असताना टोकन हस्तांतरित केले जाऊ शकतात. +- चुकीचे अंकगणित: वापरकर्ता त्याचे शिल्लक कमी करू शकतो आणि अमर्यादित विनामूल्य टोकन मिळवू शकतो. + +### Echidna सह प्रॉपर्टीची चाचणी करणे {#testing-a-property-with-echidna} + +आम्ही Echidna सह स्मार्ट कॉन्ट्रॅक्टची चाचणी कशी करायची ते पाहू. लक्ष्य खालील स्मार्ट कॉन्ट्रॅक्ट आहे [`token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol): + +```solidity +contract Token{ + mapping(address => uint) public balances; + function airdrop() public{ + balances[msg.sender] = 1000; + } + function consume() public{ + require(balances[msg.sender]>0); + balances[msg.sender] -= 1; + } + function backdoor() public{ + balances[msg.sender] += 1; + } +} +``` + +आम्ही असे गृहीत धरू की या टोकनमध्ये खालील गुणधर्म असणे आवश्यक आहे: + +- कोणाकडेही जास्तीत जास्त 1000 टोकन असू शकतात +- टोकन हस्तांतरित केले जाऊ शकत नाही (ते ERC20 टोकन नाही) + +### एक प्रॉपर्टी लिहा {#write-a-property} + +Echidna प्रॉपर्टीज या Solidity फंक्शन्स आहेत. एका प्रॉपर्टीमध्ये हे असणे आवश्यक आहे: + +- कोणतेही आर्ग्युमेंट नसावे +- यशस्वी झाल्यास `true` परत करा +- त्याचे नाव `echidna` ने सुरू झाले पाहिजे + +Echidna हे करेल: + +- प्रॉपर्टीची चाचणी घेण्यासाठी आपोआप अनियंत्रित व्यवहार तयार करा. +- एखाद्या प्रॉपर्टीला `false` परत करण्यास किंवा त्रुटी निर्माण करण्यास कारणीभूत ठरलेल्या कोणत्याही व्यवहारांची तक्रार करा. +- प्रॉपर्टी कॉल करताना साईड-इफेक्ट टाळा (म्हणजे, जर प्रॉपर्टी स्टेट व्हेरिएबल बदलत असेल, तर चाचणीनंतर ते टाकून दिले जाते) + +खालील प्रॉपर्टी तपासते की कॉलरकडे 1000 पेक्षा जास्त टोकन नाहीत: + +```solidity +function echidna_balance_under_1000() public view returns(bool){ + return balances[msg.sender] <= 1000; +} +``` + +तुमच्या कॉन्ट्रॅक्टला तुमच्या प्रॉपर्टीजपासून वेगळे करण्यासाठी इनहेरिटन्स वापरा: + +```solidity +contract TestToken is Token{ + function echidna_balance_under_1000() public view returns(bool){ + return balances[msg.sender] <= 1000; + } + } +``` + +[`token.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/token.sol) प्रॉपर्टी लागू करते आणि टोकनमधून इनहेरिट करते. + +### एक कॉन्ट्रॅक्ट सुरू करा {#initiate-a-contract} + +Echidna ला आर्ग्युमेंटशिवाय [constructor](/developers/docs/smart-contracts/anatomy/#constructor-functions) ची आवश्यकता आहे. जर तुमच्या कॉन्ट्रॅक्टला विशिष्ट इनिशिएलायझेशनची आवश्यकता असेल, तर तुम्हाला ते कन्स्ट्रक्टरमध्ये करावे लागेल. + +Echidna मध्ये काही विशिष्ट ॲड्रेसेस आहेत: + +- `0x00a329c0648769A73afAc7F9381E08FB43dBEA72` जे कन्स्ट्रक्टरला कॉल करते. +- `0x10000`, `0x20000`, आणि `0x00a329C0648769a73afAC7F9381e08fb43DBEA70` जे यादृच्छिकपणे इतर फंक्शन्सना कॉल करतात. + +आमच्या सध्याच्या उदाहरणात आम्हाला कोणत्याही विशिष्ट इनिशिएलायझेशनची आवश्यकता नाही, परिणामी आमचा कन्स्ट्रक्टर रिकामा आहे. + +### Echidna चालवा {#run-echidna} + +Echidna यासह लॉन्च केले जाते: + +```bash +echidna-test contract.sol +``` + +जर contract.sol मध्ये अनेक कॉन्ट्रॅक्ट्स असतील, तर तुम्ही लक्ष्य निर्दिष्ट करू शकता: + +```bash +echidna-test contract.sol --contract MyContract +``` + +### सारांश: एका प्रॉपर्टीची चाचणी करणे {#summary-testing-a-property} + +खालील आमच्या उदाहरणावरील Echidna च्या रनचा सारांश देते: + +```solidity +contract TestToken is Token{ + constructor() public {} + function echidna_balance_under_1000() public view returns(bool){ + return balances[msg.sender] <= 1000; + } + } +``` + +```bash +echidna-test testtoken.sol --contract TestToken +... + +echidna_balance_under_1000: failed!💥 + Call sequence, shrinking (1205/5000): + airdrop() + backdoor() + +... +``` + +Echidna ला आढळले की जर `backdoor` कॉल केला तर प्रॉपर्टीचे उल्लंघन होते. + +## फझिंग मोहिमेदरम्यान कॉल करण्यासाठी फंक्शन्स फिल्टर करणे {#filtering-functions-to-call-during-a-fuzzing-campaign} + +आम्ही फझ करण्यासाठी फंक्शन्स कसे फिल्टर करायचे ते पाहू. +लक्ष्य खालील स्मार्ट कॉन्ट्रॅक्ट आहे: + +```solidity +contract C { + bool state1 = false; + bool state2 = false; + bool state3 = false; + bool state4 = false; + + function f(uint x) public { + require(x == 12); + state1 = true; + } + + function g(uint x) public { + require(state1); + require(x == 8); + state2 = true; + } + + function h(uint x) public { + require(state2); + require(x == 42); + state3 = true; + } + + function i() public { + require(state3); + state4 = true; + } + + function reset1() public { + state1 = false; + state2 = false; + state3 = false; + return; + } + + function reset2() public { + state1 = false; + state2 = false; + state3 = false; + return; + } + + function echidna_state4() public returns (bool) { + return (!state4); + } +} +``` + +हे लहान उदाहरण Echidna ला स्टेट व्हेरिएबल बदलण्यासाठी व्यवहारांचा एक विशिष्ट क्रम शोधण्यास भाग पाडते. +हे फझरसाठी कठीण आहे (यासाठी [Manticore](https://github.com/trailofbits/manticore) सारखे सिम्बॉलिक एक्झिक्युशन टूल वापरण्याची शिफारस केली जाते). +हे तपासण्यासाठी आपण Echidna चालवू शकतो: + +```bash +echidna-test multi.sol +... +echidna_state4: passed! 🎉 +Seed: -3684648582249875403 +``` + +### फिल्टरिंग फंक्शन्स {#filtering-functions} + +Echidna ला या कॉन्ट्रॅक्टची चाचणी घेण्यासाठी योग्य क्रम शोधण्यात अडचण येत आहे कारण दोन रीसेट फंक्शन्स (`reset1` आणि `reset2`) सर्व स्टेट व्हेरिएबल्स `false` वर सेट करतील. +तथापि, आपण एक विशेष Echidna वैशिष्ट्य वापरू शकतो, एकतर रीसेट फंक्शनला ब्लॅकलिस्ट करण्यासाठी किंवा फक्त `f`, `g`, +`h` आणि `i` फंक्शन्सना व्हाइटलिस्ट करण्यासाठी. + +फंक्शन्स ब्लॅकलिस्ट करण्यासाठी, आम्ही ही कॉन्फिगरेशन फाइल वापरू शकतो: + +```yaml +filterBlacklist: true +filterFunctions: ["reset1", "reset2"] +``` + +फंक्शन्स फिल्टर करण्याचा दुसरा दृष्टिकोन म्हणजे व्हाइटलिस्ट केलेल्या फंक्शन्सची यादी करणे. ते करण्यासाठी, आम्ही ही कॉन्फिगरेशन फाइल वापरू शकतो: + +```yaml +filterBlacklist: false +filterFunctions: ["f", "g", "h", "i"] +``` + +- `filterBlacklist` हे डीफॉल्टनुसार `true` असते. +- फिल्टरिंग केवळ नावाने केले जाईल (पॅरामीटर्सशिवाय). जर तुमच्याकडे `f()` आणि `f(uint256)` असेल, तर `"f"` फिल्टर दोन्ही फंक्शन्सना जुळेल. + +### Echidna चालवा {#run-echidna-1} + +`blacklist.yaml` कॉन्फिगरेशन फाइलसह Echidna चालवण्यासाठी: + +```bash +echidna-test multi.sol --config blacklist.yaml +... +echidna_state4: failed!💥 + Call sequence: + f(12) + g(8) + h(42) + i() +``` + +Echidna जवळजवळ त्वरित प्रॉपर्टीला खोटे ठरवण्यासाठी व्यवहारांचा क्रम शोधेल. + +### सारांश: फिल्टरिंग फंक्शन्स {#summary-filtering-functions} + +Echidna फझिंग मोहिमेदरम्यान कॉल करण्यासाठी फंक्शन्स ब्लॅकलिस्ट किंवा व्हाइटलिस्ट करू शकते: + +```yaml +filterBlacklist: true +filterFunctions: ["f1", "f2", "f3"] +``` + +```bash +echidna-test contract.sol --config config.yaml +... +``` + +`filterBlacklist` बुलियनच्या मूल्यांनुसार Echidna `f1`, `f2` आणि `f3` ला ब्लॅकलिस्ट करून किंवा फक्त त्यांना कॉल करून फझिंग मोहीम सुरू करते. + +## Echidna सह Solidity's assert ची चाचणी कशी करावी {#how-to-test-soliditys-assert-with-echidna} + +या लहान ट्युटोरियलमध्ये, आम्ही कॉन्ट्रॅक्ट्समध्ये अॅसर्शन चेकिंगची चाचणी घेण्यासाठी Echidna चा वापर कसा करायचा हे दाखवणार आहोत. समजा आपल्याकडे यासारखा एक कॉन्ट्रॅक्ट आहे: + +```solidity +contract Incrementor { + uint private counter = 2**200; + + function inc(uint val) public returns (uint){ + uint tmp = counter; + counter += val; + // tmp <= counter + return (counter - tmp); + } +} +``` + +### एक अॅसर्शन लिहा {#write-an-assertion} + +त्यातील फरक परत केल्यानंतर `tmp` हे `counter` पेक्षा कमी किंवा समान आहे याची आम्ही खात्री करू इच्छितो. आपण Echidna +प्रॉपर्टी लिहू शकतो, पण आपल्याला `tmp` मूल्य कुठेतरी साठवावे लागेल. त्याऐवजी, आपण यासारखे अॅसर्शन वापरू शकतो: + +```solidity +contract Incrementor { + uint private counter = 2**200; + + function inc(uint val) public returns (uint){ + uint tmp = counter; + counter += val; + assert (tmp <= counter); + return (counter - tmp); + } +} +``` + +### Echidna चालवा {#run-echidna-2} + +अॅसर्शन अयशस्वी चाचणी सक्षम करण्यासाठी, एक [Echidna कॉन्फिगरेशन फाइल](https://github.com/crytic/echidna/wiki/Config) `config.yaml` तयार करा: + +```yaml +checkAsserts: true +``` + +जेव्हा आपण Echidna मध्ये हा कॉन्ट्रॅक्ट चालवतो, तेव्हा आपल्याला अपेक्षित परिणाम मिळतात: + +```bash +echidna-test assert.sol --config config.yaml +Analyzing contract: assert.sol:Incrementor +assertion in inc: failed!💥 + Call sequence, shrinking (2596/5000): + inc(21711016731996786641919559689128982722488122124807605757398297001483711807488) + inc(7237005577332262213973186563042994240829374041602535252466099000494570602496) + inc(86844066927987146567678238756515930889952488499230423029593188005934847229952) + +Seed: 1806480648350826486 +``` + +तुम्ही बघू शकता, Echidna `inc` फंक्शनमध्ये काही अॅसर्शन अयशस्वी झाल्याची तक्रार करते. प्रत्येक फंक्शनमध्ये एकापेक्षा जास्त अॅसर्शन जोडणे शक्य आहे, परंतु कोणते अॅसर्शन अयशस्वी झाले हे Echidna सांगू शकत नाही. + +### अॅसर्शन्स केव्हा आणि कसे वापरावे {#when-and-how-use-assertions} + +अॅसर्शन्स स्पष्ट प्रॉपर्टीजसाठी पर्याय म्हणून वापरले जाऊ शकतात, विशेषतः जर तपासण्याची परिस्थिती थेट काही ऑपरेशन `f` च्या योग्य वापराशी संबंधित असेल. काही कोडनंतर अॅसर्शन्स जोडल्याने हे सुनिश्चित होईल की तपासणी त्याच्या अंमलबजावणीनंतर लगेच होईल: + +```solidity +function f(..) public { + // काही जटिल कोड + ... + assert (condition); + ... +} + +``` + +याउलट, स्पष्ट Echidna प्रॉपर्टी वापरल्याने व्यवहार यादृच्छिकपणे अंमलात येतील आणि ते केव्हा तपासले जाईल हे लागू करण्याचा कोणताही सोपा मार्ग नाही. हा वर्कअराउंड करणे अजूनही शक्य आहे: + +```solidity +function echidna_assert_after_f() public returns (bool) { + f(..); + return(condition); +} +``` + +तथापि, काही समस्या आहेत: + +- जर `f` हे `internal` किंवा `external` म्हणून घोषित केले असेल तर ते अयशस्वी होते. +- `f` ला कॉल करण्यासाठी कोणते आर्ग्युमेंट्स वापरावे हे अस्पष्ट आहे. +- जर `f` रिव्हर्ट झाले, तर प्रॉपर्टी अयशस्वी होईल. + +सर्वसाधारणपणे, आम्ही अॅसर्शन्स कसे वापरावे यावर [जॉन रेगेहर यांच्या शिफारसीचे](https://blog.regehr.org/archives/1091) पालन करण्याची शिफारस करतो: + +- अॅसर्शन तपासणी दरम्यान कोणताही साईड इफेक्ट जबरदस्तीने करू नका. उदाहरणार्थ: `assert(ChangeStateAndReturn() == 1)` +- स्पष्ट विधाने निश्चित करू नका. उदाहरणार्थ, `assert(var >= 0)` जेथे `var` हे `uint` म्हणून घोषित केले आहे. + +शेवटी, कृपया `assert` ऐवजी `require` **वापरू नका**, कारण Echidna ते शोधू शकणार नाही (परंतु कॉन्ट्रॅक्ट तरीही रिव्हर्ट होईल). + +### सारांश: अॅसर्शन चेकिंग {#summary-assertion-checking} + +खालील आमच्या उदाहरणावरील Echidna च्या रनचा सारांश देते: + +```solidity +contract Incrementor { + uint private counter = 2**200; + + function inc(uint val) public returns (uint){ + uint tmp = counter; + counter += val; + assert (tmp <= counter); + return (counter - tmp); + } +} +``` + +```bash +echidna-test assert.sol --config config.yaml +Analyzing contract: assert.sol:Incrementor +assertion in inc: failed!💥 + Call sequence, shrinking (2596/5000): + inc(21711016731996786641919559689128982722488122124807605757398297001483711807488) + inc(7237005577332262213973186563042994240829374041602535252466099000494570602496) + inc(86844066927987146567678238756515930889952488499230423029593188005934847229952) + +Seed: 1806480648350826486 +``` + +Echidna ला आढळले की `inc` मधील अॅसर्शन अयशस्वी होऊ शकते जर हे फंक्शन मोठ्या आर्ग्युमेंट्ससह अनेक वेळा कॉल केले गेले. + +## Echidna कॉर्पस गोळा करणे आणि त्यात बदल करणे {#collecting-and-modifying-an-echidna-corpus} + +आम्ही Echidna सह व्यवहारांचा कॉर्पस कसा गोळा करायचा आणि वापरायचा ते पाहू. लक्ष्य खालील स्मार्ट कॉन्ट्रॅक्ट आहे [`magic.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/echidna/example/magic.sol): + +```solidity +contract C { + bool value_found = false; + function magic(uint magic_1, uint magic_2, uint magic_3, uint magic_4) public { + require(magic_1 == 42); + require(magic_2 == 129); + require(magic_3 == magic_4+333); + value_found = true; + return; + } + + function echidna_magic_values() public returns (bool) { + return !value_found; + } + +} +``` + +हे लहान उदाहरण Echidna ला स्टेट व्हेरिएबल बदलण्यासाठी काही विशिष्ट मूल्ये शोधण्यास भाग पाडते. हे फझरसाठी कठीण आहे +(यासाठी [Manticore](https://github.com/trailofbits/manticore) सारखे सिम्बॉलिक एक्झिक्युशन टूल वापरण्याची शिफारस केली जाते). +हे तपासण्यासाठी आपण Echidna चालवू शकतो: + +```bash +echidna-test magic.sol +... + +echidna_magic_values: passed! 🎉 + +Seed: 2221503356319272685 +``` + +तथापि, ही फझिंग मोहीम चालवताना कॉर्पस गोळा करण्यासाठी आम्ही अजूनही Echidna वापरू शकतो. + +### कॉर्पस गोळा करणे {#collecting-a-corpus} + +कॉर्पस संकलन सक्षम करण्यासाठी, एक कॉर्पस डिरेक्टरी तयार करा: + +```bash +mkdir corpus-magic +``` + +आणि एक [Echidna कॉन्फिगरेशन फाइल](https://github.com/crytic/echidna/wiki/Config) `config.yaml`: + +```yaml +coverage: true +corpusDir: "corpus-magic" +``` + +आता आपण आपले टूल चालवू शकतो आणि गोळा केलेला कॉर्पस तपासू शकतो: + +```bash +echidna-test magic.sol --config config.yaml +``` + +Echidna अजूनही योग्य मॅजिक व्हॅल्यूज शोधू शकत नाही, परंतु आपण त्याने गोळा केलेल्या कॉर्पसवर एक नजर टाकू शकतो. +उदाहरणार्थ, यापैकी एक फाइल होती: + +```json +[ + { + "_gas'": "0xffffffff", + "_delay": ["0x13647", "0xccf6"], + "_src": "00a329c0648769a73afac7f9381e08fb43dbea70", + "_dst": "00a329c0648769a73afac7f9381e08fb43dbea72", + "_value": "0x0", + "_call": { + "tag": "SolCall", + "contents": [ + "magic", + [ + { + "contents": [ + 256, + "93723985220345906694500679277863898678726808528711107336895287282192244575836" + ], + "tag": "AbiUInt" + }, + { + "contents": [256, "334"], + "tag": "AbiUInt" + }, + { + "contents": [ + 256, + "68093943901352437066264791224433559271778087297543421781073458233697135179558" + ], + "tag": "AbiUInt" + }, + { + "tag": "AbiUInt", + "contents": [256, "332"] + } + ] + ] + }, + "_gasprice'": "0xa904461f1" + } +] +``` + +स्पष्टपणे, हे इनपुट आमच्या प्रॉपर्टीमध्ये अपयश आणणार नाही. तथापि, पुढील चरणात, आम्ही त्यासाठी त्यात कसे बदल करायचे ते पाहू. + +### कॉर्पस सीडिंग करणे {#seeding-a-corpus} + +`magic` फंक्शन हाताळण्यासाठी Echidna ला काही मदतीची गरज आहे. आम्ही इनपुट कॉपी करणार आहोत आणि त्यासाठी योग्य +पॅरामीटर्स वापरण्यासाठी त्यात बदल करणार आहोत: + +```bash +cp corpus/2712688662897926208.txt corpus/new.txt +``` + +आम्ही `magic(42,129,333,0)` ला कॉल करण्यासाठी `new.txt` मध्ये बदल करू. आता, आपण Echidna पुन्हा चालवू शकतो: + +```bash +echidna-test magic.sol --config config.yaml +... +echidna_magic_values: failed!💥 + Call sequence: + magic(42,129,333,0) + + +Unique instructions: 142 +Unique codehashes: 1 +Seed: -7293830866560616537 + +``` + +यावेळी, त्याला आढळले की प्रॉपर्टीचे त्वरित उल्लंघन झाले आहे. + +## उच्च गॅस वापरासह व्यवहार शोधणे {#finding-transactions-with-high-gas-consumption} + +आम्ही Echidna सह उच्च गॅस वापरासह व्यवहार कसे शोधायचे ते पाहू. लक्ष्य खालील स्मार्ट कॉन्ट्रॅक्ट आहे: + +```solidity +contract C { + uint state; + + function expensive(uint8 times) internal { + for(uint8 i=0; i < times; i++) + state = state + i; + } + + function f(uint x, uint y, uint8 times) public { + if (x == 42 && y == 123) + expensive(times); + else + state = 0; + } + + function echidna_test() public returns (bool) { + return true; + } + +} +``` + +येथे `expensive` मध्ये मोठा गॅस वापर असू शकतो. + +सध्या, Echidna ला नेहमी चाचणीसाठी एक प्रॉपर्टीची आवश्यकता असते: येथे `echidna_test` नेहमी `true` परत करते. +हे तपासण्यासाठी आपण Echidna चालवू शकतो: + +``` +echidna-test gas.sol +... +echidna_test: passed! 🎉 + +Seed: 2320549945714142710 +``` + +### गॅस वापर मोजणे {#measuring-gas-consumption} + +Echidna सह गॅस वापर सक्षम करण्यासाठी, एक कॉन्फिगरेशन फाइल `config.yaml` तयार करा: + +```yaml +estimateGas: true +``` + +या उदाहरणात, आम्ही परिणाम समजण्यास सोपे करण्यासाठी व्यवहार क्रमाचा आकार देखील कमी करू: + +```yaml +seqLen: 2 +estimateGas: true +``` + +### Echidna चालवा {#run-echidna-3} + +एकदा आम्ही कॉन्फिगरेशन फाइल तयार केल्यावर, आम्ही Echidna याप्रमाणे चालवू शकतो: + +```bash +echidna-test gas.sol --config config.yaml +... +echidna_test: passed! 🎉 + +f used a maximum of 1333608 gas + Call sequence: + f(42,123,249) Gas price: 0x10d5733f0a Time delay: 0x495e5 Block delay: 0x88b2 + +Unique instructions: 157 +Unique codehashes: 1 +Seed: -325611019680165325 + +``` + +- दाखवलेला गॅस हा [HEVM](https://github.com/dapphub/dapptools/tree/master/src/hevm#hevm-) द्वारे प्रदान केलेला एक अंदाज आहे. + +### गॅस-कमी करणारे कॉल्स फिल्टर करणे {#filtering-out-gas-reducing-calls} + +वरील **फझिंग मोहिमेदरम्यान कॉल करण्यासाठी फंक्शन्स फिल्टर करणे** यावरील ट्युटोरियल तुमच्या चाचणीमधून काही फंक्शन्स कसे काढायचे हे दाखवते. +अचूक गॅस अंदाज मिळवण्यासाठी हे महत्त्वपूर्ण असू शकते. +खालील उदाहरण विचारात घ्या: + +```solidity +contract C { + address [] addrs; + function push(address a) public { + addrs.push(a); + } + function pop() public { + addrs.pop(); + } + function clear() public{ + addrs.length = 0; + } + function check() public{ + for(uint256 i = 0; i < addrs.length; i++) + for(uint256 j = i+1; j < addrs.length; j++) + if (addrs[i] == addrs[j]) + addrs[j] = address(0x0); + } + function echidna_test() public returns (bool) { + return true; + } +} +``` + +जर Echidna सर्व फंक्शन्सना कॉल करू शकत असेल, तर त्याला उच्च गॅस खर्चासह व्यवहार सहज सापडणार नाहीत: + +``` +echidna-test pushpop.sol --config config.yaml +... +pop used a maximum of 10746 gas +... +check used a maximum of 23730 gas +... +clear used a maximum of 35916 gas +... +push used a maximum of 40839 gas +``` + +कारण खर्च `addrs` च्या आकारावर अवलंबून असतो आणि यादृच्छिक कॉल्समुळे ॲरे जवळजवळ रिकामा राहतो. +तथापि, `pop` आणि `clear` ला ब्लॅकलिस्ट केल्याने आम्हाला बरेच चांगले परिणाम मिळतात: + +```yaml +filterBlacklist: true +filterFunctions: ["pop", "clear"] +``` + +``` +echidna-test pushpop.sol --config config.yaml +... +push used a maximum of 40839 gas +... +check used a maximum of 1484472 gas +``` + +### सारांश: उच्च गॅस वापरासह व्यवहार शोधणे {#summary-finding-transactions-with-high-gas-consumption} + +`estimateGas` कॉन्फिगरेशन पर्याय वापरून Echidna उच्च गॅस वापरासह व्यवहार शोधू शकते: + +```yaml +estimateGas: true +``` + +```bash +echidna-test contract.sol --config config.yaml +... +``` + +एकदा फझिंग मोहीम संपली की, Echidna प्रत्येक फंक्शनसाठी कमाल गॅस वापरासह एक क्रम नोंदवेल. diff --git a/public/content/translations/mr/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md b/public/content/translations/mr/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md new file mode 100644 index 00000000000..54448b9f1c4 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-use-manticore-to-find-smart-contract-bugs/index.md @@ -0,0 +1,525 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट्समधील बग शोधण्यासाठी Manticore चा वापर कसा करायचा" +description: "स्मार्ट कॉन्ट्रॅक्ट्समधील बग आपोआप शोधण्यासाठी Manticore चा वापर कसा करायचा" +author: Trailofbits +lang: mr +tags: + [ + "सॉलिडिटी", + "स्मार्ट कॉन्ट्रॅक्ट", + "सुरक्षा", + "चाचणी", + "औपचारिक पडताळणी" + ] +skill: advanced +published: 2020-01-13 +source: Building secure contracts +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/manticore +--- + +स्मार्ट कॉन्ट्रॅक्ट्समधील बग आपोआप शोधण्यासाठी Manticore चा वापर कसा करायचा हे दाखवणे या ट्युटोरियलचे उद्दिष्ट आहे. + +## इन्स्टॉलेशन {#installation} + +Manticore साठी >= python 3.6 आवश्यक आहे. हे pip द्वारे किंवा docker वापरून इंस्टॉल केले जाऊ शकते. + +### docker द्वारे Manticore {#manticore-through-docker} + +```bash +docker pull trailofbits/eth-security-toolbox +docker run -it -v "$PWD":/home/training trailofbits/eth-security-toolbox +``` + +_शेवटचा कमांड तुमच्या सध्याच्या डिरेक्टरीमध्ये ऍक्सेस असलेल्या docker मध्ये eth-security-toolbox चालवतो. तुम्ही तुमच्या होस्टमधून फाइल्स बदलू शकता, आणि docker मधून फाइल्सवर टूल्स चालवू शकता_ + +docker मध्ये, चालवा: + +```bash +solc-select 0.5.11 +cd /home/trufflecon/ +``` + +### pip द्वारे Manticore {#manticore-through-pip} + +```bash +pip3 install --user manticore +``` + +solc 0.5.11 ची शिफारस केली जाते. + +### स्क्रिप्ट चालवणे {#running-a-script} + +python 3 सह python स्क्रिप्ट चालवण्यासाठी: + +```bash +python3 script.py +``` + +## डायनॅमिक सिम्बॉलिक एक्झिक्युशनची ओळख {#introduction-to-dynamic-symbolic-execution} + +### थोडक्यात डायनॅमिक सिम्बॉलिक एक्झिक्युशन {#dynamic-symbolic-execution-in-a-nutshell} + +डायनॅमिक सिम्बॉलिक एक्झिक्युशन (DSE) हे एक प्रोग्राम विश्लेषण तंत्र आहे जे उच्च स्तरीय सिमेंटिक जागरुकतेसह स्टेट स्पेस एक्सप्लोर करते. हे तंत्र "प्रोग्राम पाथ्स" च्या शोधावर आधारित आहे, जे `path predicates` नावाच्या गणितीय सूत्रांद्वारे दर्शविले जातात. संकल्पनात्मकदृष्ट्या, हे तंत्र दोन टप्प्यांमध्ये पाथ प्रेडिकेट्सवर कार्य करते: + +1. ते प्रोग्रामच्या इनपुटवरील मर्यादा वापरून तयार केले जातात. +2. त्यांचा वापर प्रोग्राम इनपुट तयार करण्यासाठी केला जातो ज्यामुळे संबंधित पाथ्स कार्यान्वित होतील. + +या दृष्टिकोनामुळे कोणतेही फॉल्स पॉझिटिव्ह तयार होत नाहीत कारण सर्व ओळखलेले प्रोग्राम स्टेट्स ठोस अंमलबजावणी दरम्यान ट्रिगर केले जाऊ शकतात. उदाहरणार्थ, जर विश्लेषणात एखादा इंटीजर ओव्हरफ्लो आढळला, तर तो पुनरुत्पादित होण्याची हमी आहे. + +### पाथ प्रेडिकेट उदाहरण {#path-predicate-example} + +DSE कसे कार्य करते याची कल्पना येण्यासाठी, खालील उदाहरण विचारात घ्या: + +```solidity +function f(uint a){ + + if (a == 65) { + // एक बग आहे + } + +} +``` + +`f()` मध्ये दोन पाथ असल्याने, DSE दोन भिन्न पाथ प्रेडिकेट्स तयार करेल: + +- पाथ 1: `a == 65` +- पाथ 2: `Not (a == 65)` + +प्रत्येक पाथ प्रेडिकेट हे एक गणितीय सूत्र आहे जे [SMT solver](https://wikipedia.org/wiki/Satisfiability_modulo_theories) नावाच्या सॉल्व्हरला दिले जाऊ शकते, जो समीकरण सोडवण्याचा प्रयत्न करेल. `पाथ 1` साठी, सॉल्व्हर सांगेल की पाथ `a = 65` सह एक्सप्लोर केला जाऊ शकतो. `पाथ 2` साठी, सॉल्व्हर `a` ला 65 व्यतिरिक्त कोणतेही मूल्य देऊ शकतो, उदाहरणार्थ `a = 0`. + +### गुणधर्मांची पडताळणी करणे {#verifying-properties} + +Manticore प्रत्येक पाथच्या सर्व एक्झिक्युशनवर पूर्ण नियंत्रण ठेवण्यास परवानगी देतो. परिणामी, हे तुम्हाला जवळजवळ कोणत्याही गोष्टीवर अनियंत्रित मर्यादा घालण्याची परवानगी देते. हे नियंत्रण कॉन्ट्रॅक्टवर गुणधर्म तयार करण्यास अनुमती देते. + +खालील उदाहरण विचारात घ्या: + +```solidity +function unsafe_add(uint a, uint b) returns(uint c){ + c = a + b; // ओव्हरफ्लो संरक्षण नाही + return c; +} +``` + +येथे फंक्शनमध्ये एक्सप्लोर करण्यासाठी फक्त एकच पाथ आहे: + +- पाथ 1: `c = a + b` + +Manticore वापरून, तुम्ही ओव्हरफ्लो तपासू शकता, आणि पाथ प्रेडिकेटमध्ये मर्यादा घालू शकता: + +- `c = a + b AND (c < a OR c < b)` + +जर `a` आणि `b` साठी असे मूल्यमापन शोधणे शक्य असेल ज्यासाठी वरील पाथ प्रेडिकेट व्यवहार्य आहे, तर याचा अर्थ तुम्हाला ओव्हरफ्लो आढळला आहे. उदाहरणार्थ सॉल्व्हर `a = 10 , b = MAXUINT256` हे इनपुट तयार करू शकतो. + +तुम्ही एक निश्चित आवृत्ती विचारात घेतल्यास: + +```solidity +function safe_add(uint a, uint b) returns(uint c){ + c = a + b; + require(c>=a); + require(c>=b); + return c; +} +``` + +ओव्हरफ्लो तपासणीसह संबंधित सूत्र असेल: + +- `c = a + b AND (c >= a) AND (c=>b) AND (c < a OR c < b)` + +हे सूत्र सोडवले जाऊ शकत नाही; दुसऱ्या शब्दांत, हा एक **पुरावा** आहे की `safe_add` मध्ये, `c` नेहमी वाढेल. + +त्यामुळे DSE हे एक शक्तिशाली साधन आहे, जे तुमच्या कोडवर अनियंत्रित मर्यादांची पडताळणी करू शकते. + +## Manticore अंतर्गत चालवणे {#running-under-manticore} + +Manticore API सह स्मार्ट कॉन्ट्रॅक्ट कसे एक्सप्लोर करायचे ते आपण पाहू. लक्ष्य खालील स्मार्ट कॉन्ट्रॅक्ट [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol) आहे: + +```solidity +pragma solidity >=0.4.24 <0.6.0; + +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +``` + +### स्वतंत्र एक्सप्लोरेशन चालवा {#run-a-standalone-exploration} + +तुम्ही खालील कमांडद्वारे थेट स्मार्ट कॉन्ट्रॅक्टवर Manticore चालवू शकता (`project` एक Solidity फाइल, किंवा प्रोजेक्ट डिरेक्टरी असू शकते): + +```bash +$ manticore project +``` + +तुम्हाला यासारख्या टेस्टकेसचे आउटपुट मिळेल (क्रम बदलू शकतो): + +``` +... +... m.c.manticore:INFO: Generated testcase No. 0 - STOP +... m.c.manticore:INFO: Generated testcase No. 1 - REVERT +... m.c.manticore:INFO: Generated testcase No. 2 - RETURN +... m.c.manticore:INFO: Generated testcase No. 3 - REVERT +... m.c.manticore:INFO: Generated testcase No. 4 - STOP +... m.c.manticore:INFO: Generated testcase No. 5 - REVERT +... m.c.manticore:INFO: Generated testcase No. 6 - REVERT +... m.c.manticore:INFO: Results in /home/ethsec/workshops/Automated Smart Contracts Audit - TruffleCon 2018/manticore/examples/mcore_t6vi6ij3 +... +``` + +अतिरिक्त माहितीशिवाय, Manticore नवीन सिम्बॉलिक +ट्रान्झॅक्शनसह कॉन्ट्रॅक्ट एक्सप्लोर करेल जोपर्यंत तो कॉन्ट्रॅक्टवर नवीन पाथ्स एक्सप्लोर करत नाही. Manticore अयशस्वी ट्रान्झॅक्शननंतर (उदा: रिव्हर्टनंतर) नवीन ट्रान्झॅक्शन चालवत नाही. + +Manticore `mcore_*` डिरेक्टरीमध्ये माहिती आउटपुट करेल. इतर गोष्टींबरोबरच, तुम्हाला या डिरेक्टरीमध्ये आढळेल: + +- `global.summary`: कव्हरेज आणि कंपाइलर चेतावणी +- `test_XXXXX.summary`: कव्हरेज, शेवटची सूचना, प्रति टेस्ट केस अकाउंट बॅलन्स +- `test_XXXXX.tx`: प्रति टेस्ट केस ट्रान्झॅक्शनची तपशीलवार यादी + +येथे Manticore ला 7 टेस्ट केसेस आढळल्या, ज्या खालीलप्रमाणे आहेत (फाईल नावाचा क्रम बदलू शकतो): + +| | ट्रान्झॅक्शन 0 | ट्रान्झॅक्शन 1 | ट्रान्झॅक्शन 2 | परिणाम | +| :-------------------------------------------------------: | :------------------: | :------------------------: | -------------------------- | :----: | +| **test_00000000.tx** | कॉन्ट्रॅक्ट निर्मिती | f(!=65) | f(!=65) | STOP | +| **test_00000001.tx** | कॉन्ट्रॅक्ट निर्मिती | फॉलबॅक फंक्शन | | REVERT | +| **test_00000002.tx** | कॉन्ट्रॅक्ट निर्मिती | | | RETURN | +| **test_00000003.tx** | कॉन्ट्रॅक्ट निर्मिती | f(65) | | REVERT | +| **test_00000004.tx** | कॉन्ट्रॅक्ट निर्मिती | f(!=65) | | STOP | +| **test_00000005.tx** | कॉन्ट्रॅक्ट निर्मिती | f(!=65) | f(65) | REVERT | +| **test_00000006.tx** | कॉन्ट्रॅक्ट निर्मिती | f(!=65) | फॉलबॅक फंक्शन | REVERT | + +_एक्सप्लोरेशन सारांश f(!=65) हे दर्शवते की f ला 65 पेक्षा भिन्न कोणत्याही मूल्याने कॉल केले आहे._ + +तुम्ही पाहू शकता, Manticore प्रत्येक यशस्वी किंवा रिव्हर्ट केलेल्या ट्रान्झॅक्शनसाठी एक युनिक टेस्ट केस तयार करतो. + +जर तुम्हाला जलद कोड एक्सप्लोरेशन हवे असेल तर `--quick-mode` फ्लॅग वापरा (तो बग डिटेक्टर, गॅस गणना, ... अक्षम करतो) + +### API द्वारे स्मार्ट कॉन्ट्रॅक्टमध्ये फेरफार करणे {#manipulate-a-smart-contract-through-the-api} + +हा विभाग Manticore Python API द्वारे स्मार्ट कॉन्ट्रॅक्टमध्ये कसे फेरफार करायचे याचे तपशील वर्णन करतो. तुम्ही `*.py` या python एक्सटेंशनसह नवीन फाइल तयार करू शकता आणि या फाइलमध्ये API कमांड्स (ज्यांचे मूलभूत वर्णन खाली केले जाईल) जोडून आवश्यक कोड लिहू शकता आणि नंतर `$ python3 *.py` या कमांडने चालवू शकता. तसेच तुम्ही खालील कमांड थेट python कंसोलमध्ये कार्यान्वित करू शकता, कंसोल चालवण्यासाठी `$ python3` कमांड वापरा. + +### अकाउंट्स तयार करणे {#creating-accounts} + +पहिली गोष्ट जी तुम्ही केली पाहिजे ती म्हणजे खालील कमांडसह नवीन ब्लॉकचेन सुरू करणे: + +```python +from manticore.ethereum import ManticoreEVM + +m = ManticoreEVM() +``` + +एक नॉन-कॉन्ट्रॅक्ट अकाउंट [m.create_account](https://manticore.readthedocs.io/en/latest/evm.html?highlight=create_account#manticore.ethereum.ManticoreEVM.create_account) वापरून तयार केले जाते: + +```python +user_account = m.create_account(balance=1000) +``` + +एक Solidity कॉन्ट्रॅक्ट [m.solidity_create_contract](https://manticore.readthedocs.io/en/latest/evm.html?highlight=solidity_create#manticore.ethereum.ManticoreEVM.create_contract) वापरून तैनात केले जाऊ शकते: + +```solidity +source_code = ''' +pragma solidity >=0.4.24 <0.6.0; +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +''' +# कॉन्ट्रॅक्ट सुरू करा +contract_account = m.solidity_create_contract(source_code, owner=user_account) +``` + +#### सारांश {#summary} + +- तुम्ही [m.create_account](https://manticore.readthedocs.io/en/latest/evm.html?highlight=create_account#manticore.ethereum.ManticoreEVM.create_account) आणि [m.solidity_create_contract](https://manticore.readthedocs.io/en/latest/evm.html?highlight=solidity_create#manticore.ethereum.ManticoreEVM.create_contract) सह युझर आणि कॉन्ट्रॅक्ट अकाउंट्स तयार करू शकता. + +### ट्रान्झॅक्शन कार्यान्वित करणे {#executing-transactions} + +Manticore दोन प्रकारच्या ट्रान्झॅक्शनना समर्थन देतो: + +- रॉ ट्रान्झॅक्शन: सर्व फंक्शन्स एक्सप्लोर केली जातात +- नेम्ड ट्रान्झॅक्शन: फक्त एकच फंक्शन एक्सप्लोर केले जाते + +#### रॉ ट्रान्झॅक्शन {#raw-transaction} + +एक रॉ ट्रान्झॅक्शन [m.transaction](https://manticore.readthedocs.io/en/latest/evm.html?highlight=transaction#manticore.ethereum.ManticoreEVM.transaction) वापरून कार्यान्वित केले जाते: + +```python +m.transaction(caller=user_account, + address=contract_account, + data=data, + value=value) +``` + +कॉलर, ॲड्रेस, डेटा, किंवा ट्रान्झॅक्शनचे मूल्य ठोस किंवा सिम्बॉलिक असू शकते: + +- [m.make_symbolic_value](https://manticore.readthedocs.io/en/latest/evm.html?highlight=make_symbolic_value#manticore.ethereum.ManticoreEVM.make_symbolic_value) एक सिम्बॉलिक मूल्य तयार करते. +- [m.make_symbolic_buffer(size)](https://manticore.readthedocs.io/en/latest/evm.html?highlight=make_symbolic_buffer#manticore.ethereum.ManticoreEVM.make_symbolic_buffer) एक सिम्बॉलिक बाईट ॲरे तयार करते. + +उदाहरणार्थ: + +```python +symbolic_value = m.make_symbolic_value() +symbolic_data = m.make_symbolic_buffer(320) +m.transaction(caller=user_account, + address=contract_address, + data=symbolic_data, + value=symbolic_value) +``` + +जर डेटा सिम्बॉलिक असेल, तर Manticore ट्रान्झॅक्शन एक्झिक्युशन दरम्यान कॉन्ट्रॅक्टची सर्व फंक्शन्स एक्सप्लोर करेल. फंक्शन सिलेक्शन कसे कार्य करते हे समजून घेण्यासाठी [Hands on the Ethernaut CTF](https://blog.trailofbits.com/2017/11/06/hands-on-the-ethernaut-ctf/) लेखातील फॉलबॅक फंक्शनचे स्पष्टीकरण पाहणे उपयुक्त ठरेल. + +#### नेम्ड ट्रान्झॅक्शन {#named-transaction} + +फंक्शन्स त्यांच्या नावाद्वारे कार्यान्वित केले जाऊ शकतात. +`f(uint var)` ला सिम्बॉलिक मूल्याने, user_account मधून, आणि 0 ईथरसह कार्यान्वित करण्यासाठी, वापरा: + +```python +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var, caller=user_account, value=0) +``` + +जर ट्रान्झॅक्शनचे `value` निर्दिष्ट केले नसेल, तर ते डिफॉल्टनुसार 0 असते. + +#### सारांश {#summary-1} + +- ट्रान्झॅक्शनचे वितर्क ठोस किंवा सिम्बॉलिक असू शकतात +- एक रॉ ट्रान्झॅक्शन सर्व फंक्शन्स एक्सप्लोर करेल +- फंक्शनला त्यांच्या नावाने कॉल केले जाऊ शकते + +### वर्कस्पेस {#workspace} + +`m.workspace` ही तयार केलेल्या सर्व फाइल्ससाठी आउटपुट डिरेक्टरी म्हणून वापरली जाणारी डिरेक्टरी आहे: + +```python +print("निकाल {} मध्ये आहेत".format(m.workspace)) +``` + +### एक्सप्लोरेशन समाप्त करा {#terminate-the-exploration} + +एक्सप्लोरेशन थांबवण्यासाठी [m.finalize()](https://manticore.readthedocs.io/en/latest/evm.html?highlight=finalize#manticore.ethereum.ManticoreEVM.finalize) वापरा. एकदा ही पद्धत कॉल केल्यावर कोणतेही पुढील ट्रान्झॅक्शन पाठवले जाऊ नयेत आणि Manticore एक्सप्लोर केलेल्या प्रत्येक पाथसाठी टेस्ट केसेस तयार करतो. + +### सारांश: Manticore अंतर्गत चालवणे {#summary-running-under-manticore} + +मागील सर्व पायऱ्या एकत्र ठेवल्यास, आपल्याला मिळते: + +```python +from manticore.ethereum import ManticoreEVM + +m = ManticoreEVM() + +with open('example.sol') as f: + source_code = f.read() + +user_account = m.create_account(balance=1000) +contract_account = m.solidity_create_contract(source_code, owner=user_account) + +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var) + +print("निकाल {} मध्ये आहेत".format(m.workspace)) +m.finalize() # एक्सप्लोरेशन थांबवा +``` + +वरील सर्व कोड तुम्हाला [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) मध्ये मिळेल + +## थ्रोइंग पाथ्स मिळवणे {#getting-throwing-paths} + +आता आपण `f()` मध्ये अपवाद निर्माण करणाऱ्या पाथसाठी विशिष्ट इनपुट तयार करू. लक्ष्य अजूनही खालील स्मार्ट कॉन्ट्रॅक्ट [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol) आहे: + +```solidity +pragma solidity >=0.4.24 <0.6.0; +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +``` + +### स्टेट माहिती वापरणे {#using-state-information} + +कार्यान्वित केलेल्या प्रत्येक पाथची ब्लॉकचेनची स्वतःची स्टेट असते. एक स्टेट एकतर तयार असते किंवा ती किल्ड होते, याचा अर्थ ती THROW किंवा REVERT सूचनेपर्यंत पोहोचते: + +- [m.ready_states](https://manticore.readthedocs.io/en/latest/states.html#accessing): तयार असलेल्या स्टेट्सची यादी (त्यांनी REVERT/INVALID कार्यान्वित केलेले नाही) +- [m.killed_states](https://manticore.readthedocs.io/en/latest/states.html#accessings): किल्ड झालेल्या स्टेट्सची यादी +- [m.all_states](https://manticore.readthedocs.io/en/latest/states.html#accessings): सर्व स्टेट्स + +```python +for state in m.all_states: + # स्टेटसह काहीतरी करा +``` + +तुम्ही स्टेट माहिती ऍक्सेस करू शकता. उदाहरणार्थ: + +- `state.platform.get_balance(account.address)`: अकाउंटचा बॅलन्स +- `state.platform.transactions`: ट्रान्झॅक्शनची यादी +- `state.platform.transactions[-1].return_data`: शेवटच्या ट्रान्झॅक्शनद्वारे परत केलेला डेटा + +शेवटच्या ट्रान्झॅक्शनद्वारे परत केलेला डेटा एक ॲरे आहे, जो ABI.deserialize सह एका मूल्यात रूपांतरित केला जाऊ शकतो, उदाहरणार्थ: + +```python +data = state.platform.transactions[0].return_data +data = ABI.deserialize("uint", data) +``` + +### टेस्टकेस कसे तयार करावे {#how-to-generate-testcase} + +टेस्टकेस तयार करण्यासाठी [m.generate_testcase(state, name)](https://manticore.readthedocs.io/en/latest/evm.html?highlight=generate_testcase#manticore.ethereum.ManticoreEVM.generate_testcase) वापरा: + +```python +m.generate_testcase(state, 'BugFound') +``` + +### सारांश {#summary-2} + +- तुम्ही m.all_states सह स्टेटवर पुनरावृत्ती करू शकता +- `state.platform.get_balance(account.address)` अकाउंटचा बॅलन्स परत करतो +- `state.platform.transactions` ट्रान्झॅक्शनची यादी परत करतो +- `transaction.return_data` हा परत केलेला डेटा आहे +- `m.generate_testcase(state, name)` स्टेटसाठी इनपुट तयार करते + +### सारांश: थ्रोइंग पाथ मिळवणे {#summary-getting-throwing-path} + +```python +from manticore.ethereum import ManticoreEVM + +m = ManticoreEVM() + +with open('example.sol') as f: + source_code = f.read() + +user_account = m.create_account(balance=1000) +contract_account = m.solidity_create_contract(source_code, owner=user_account) + +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var) + +## एक्झिक्युशन REVERT किंवा INVALID ने संपते का ते तपासा + +for state in m.terminated_states: + last_tx = state.platform.transactions[-1] + if last_tx.result in ['REVERT', 'INVALID']: + print('थ्रो आढळला {}'.format(m.workspace)) + m.generate_testcase(state, 'ThrowFound') +``` + +वरील सर्व कोड तुम्हाला [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) मध्ये मिळेल + +_टीप: आम्ही एक अधिक सोपी स्क्रिप्ट तयार करू शकलो असतो, कारण terminated_state द्वारे परत केलेल्या सर्व स्टेट्सच्या निकालात REVERT किंवा INVALID आहे: हे उदाहरण फक्त API मध्ये कसे फेरफार करायचे हे दाखवण्यासाठी होते._ + +## मर्यादा जोडणे {#adding-constraints} + +आपण एक्सप्लोरेशनवर कसे बंधन घालायचे ते पाहू. आम्ही असे गृहीत धरू की `f()` च्या डॉक्युमेंटेशनमध्ये असे म्हटले आहे की फंक्शनला `a == 65` सह कधीही कॉल केले जात नाही, त्यामुळे `a == 65` सह कोणताही बग खरा बग नाही. लक्ष्य अजूनही खालील स्मार्ट कॉन्ट्रॅक्ट [`example.sol`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example.sol) आहे: + +```solidity +pragma solidity >=0.4.24 <0.6.0; +contract Simple { + function f(uint a) payable public{ + if (a == 65) { + revert(); + } + } +} +``` + +### ऑपरेटर्स {#operators} + +[ऑपरेटर्स](https://github.com/trailofbits/manticore/blob/master/manticore/core/smtlib/operators.py) मॉड्यूल मर्यादांच्या हाताळणीला सुलभ करते, इतर गोष्टींबरोबरच ते प्रदान करते: + +- Operators.AND, +- Operators.OR, +- Operators.UGT (unsigned greater than), +- Operators.UGE (unsigned greater than or equal to), +- Operators.ULT (unsigned lower than), +- Operators.ULE (unsigned lower than or equal to). + +मॉड्यूल इम्पोर्ट करण्यासाठी खालील वापरा: + +```python +from manticore.core.smtlib import Operators +``` + +`Operators.CONCAT` चा वापर ॲरेला मूल्याशी जोडण्यासाठी केला जातो. उदाहरणार्थ, ट्रान्झॅक्शनच्या return_data ला एका मूल्यात बदलण्याची आवश्यकता आहे जेणेकरून ते दुसऱ्या मूल्याशी तपासले जाईल: + +```python +last_return = Operators.CONCAT(256, *last_return) +``` + +### मर्यादा {#state-constraint} + +तुम्ही जागतिक स्तरावर किंवा विशिष्ट स्टेटसाठी मर्यादा वापरू शकता. + +#### जागतिक मर्यादा {#state-constraint} + +जागतिक मर्यादा जोडण्यासाठी `m.constrain(constraint)` वापरा. +उदाहरणार्थ, तुम्ही एका सिम्बॉलिक ॲड्रेसवरून कॉन्ट्रॅक्टला कॉल करू शकता, आणि या ॲड्रेसला विशिष्ट मूल्यांवर मर्यादित करू शकता: + +```python +symbolic_address = m.make_symbolic_value() +m.constraint(Operators.OR(symbolic == 0x41, symbolic_address == 0x42)) +m.transaction(caller=user_account, + address=contract_account, + data=m.make_symbolic_buffer(320), + value=0) +``` + +#### स्टेट मर्यादा {#state-constraint} + +एका विशिष्ट स्टेटला मर्यादा जोडण्यासाठी [state.constrain(constraint)](https://manticore.readthedocs.io/en/latest/states.html?highlight=StateBase#manticore.core.state.StateBase.constrain) वापरा. +त्याच्या एक्सप्लोरेशननंतर स्टेटवर काही गुणधर्म तपासण्यासाठी मर्यादा घालण्यासाठी याचा वापर केला जाऊ शकतो. + +### मर्यादा तपासणे {#checking-constraint} + +एक मर्यादा अजूनही व्यवहार्य आहे की नाही हे जाणून घेण्यासाठी `solver.check(state.constraints)` वापरा. +उदाहरणार्थ, खालील symbolic_value ला 65 पेक्षा वेगळे ठेवेल आणि स्टेट अजूनही व्यवहार्य आहे की नाही हे तपासेल: + +```python +state.constrain(symbolic_var != 65) +if solver.check(state.constraints): + # स्टेट व्यवहार्य आहे +``` + +### सारांश: मर्यादा जोडणे {#summary-adding-constraints} + +मागील कोडमध्ये मर्यादा जोडल्यास, आपल्याला मिळते: + +```python +from manticore.ethereum import ManticoreEVM +from manticore.core.smtlib.solver import Z3Solver + +solver = Z3Solver.instance() + +m = ManticoreEVM() + +with open("example.sol") as f: + source_code = f.read() + +user_account = m.create_account(balance=1000) +contract_account = m.solidity_create_contract(source_code, owner=user_account) + +symbolic_var = m.make_symbolic_value() +contract_account.f(symbolic_var) + +no_bug_found = True + +## एक्झिक्युशन REVERT किंवा INVALID ने संपते का ते तपासा + +for state in m.terminated_states: + last_tx = state.platform.transactions[-1] + if last_tx.result in ['REVERT', 'INVALID']: + # आम्ही a == 65 असलेला पाथ विचारात घेत नाही + condition = symbolic_var != 65 + if m.generate_testcase(state, name="BugFound", only_if=condition): + print(f'बग आढळला, निकाल {m.workspace} मध्ये आहेत') + no_bug_found = False + +if no_bug_found: + print(f'कोणताही बग आढळला नाही') +``` + +वरील सर्व कोड तुम्हाला [`example_run.py`](https://github.com/crytic/building-secure-contracts/blob/master/program-analysis/manticore/examples/example_run.py) मध्ये मिळेल diff --git a/public/content/translations/mr/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md b/public/content/translations/mr/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md new file mode 100644 index 00000000000..687270ad2fe --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/index.md @@ -0,0 +1,233 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट बग शोधण्यासाठी स्लिदर कसे वापरावे" +description: "स्मार्ट कॉन्ट्रॅक्ट्समध्ये आपोआप बग शोधण्यासाठी स्लिदर कसे वापरावे" +author: Trailofbits +lang: mr +tags: [ "सॉलिडिटी", "स्मार्ट कॉन्ट्रॅक्ट", "सुरक्षा", "चाचणी" ] +skill: advanced +published: 2020-06-09 +source: Building secure contracts +sourceUrl: https://github.com/crytic/building-secure-contracts/tree/master/program-analysis/slither +--- + +## स्लिदर कसे वापरावे {#how-to-use-slither} + +या ट्यूटोरियलचा उद्देश स्मार्ट कॉन्ट्रॅक्ट्समध्ये आपोआप बग शोधण्यासाठी स्लिदर कसे वापरावे हे दर्शविणे आहे. + +- [इन्स्टॉलेशन](#installation) +- [कमांड लाईन वापर](#command-line) +- [स्टॅटिक विश्लेषणाची ओळख](#static-analysis): स्टॅटिक विश्लेषणाची संक्षिप्त ओळख +- [API](#api-basics): Python API वर्णन + +## इन्स्टॉलेशन {#installation} + +स्लिदरसाठी Python >= 3.6 आवश्यक आहे. हे pip द्वारे किंवा docker वापरून इंस्टॉल केले जाऊ शकते. + +pip द्वारे स्लिदर: + +```bash +pip3 install --user slither-analyzer +``` + +docker द्वारे स्लिदर: + +```bash +docker pull trailofbits/eth-security-toolbox +docker run -it -v "$PWD":/home/trufflecon trailofbits/eth-security-toolbox +``` + +_शेवटचा कमांड तुमच्या सध्याच्या डिरेक्टरीमध्ये ऍक्सेस असलेल्या docker मध्ये eth-security-toolbox चालवतो. तुम्ही तुमच्या होस्टमधून फाइल्स बदलू शकता, आणि docker मधून फाइल्सवर टूल्स चालवू शकता_ + +docker मध्ये, चालवा: + +```bash +solc-select 0.5.11 +cd /home/trufflecon/ +``` + +### स्क्रिप्ट चालवणे {#running-a-script} + +python 3 सह python स्क्रिप्ट चालवण्यासाठी: + +```bash +python3 script.py +``` + +### कमांड लाईन {#command-line} + +**कमांड लाइन विरुद्ध युजर-डिफाइंड स्क्रिप्ट्स.** स्लिदर पूर्वनिर्धारित डिटेक्टरच्या सेटसह येते जे अनेक सामान्य बग शोधतात. कमांड लाइनवरून स्लिदरला कॉल केल्यास सर्व डिटेक्टर चालतील, स्टॅटिक विश्लेषणाच्या तपशीलवार ज्ञानाची आवश्यकता नाही: + +```bash +slither project_paths +``` + +डिटेक्टर्स व्यतिरिक्त, स्लिदरमध्ये त्याच्या [प्रिंटर्स](https://github.com/crytic/slither#printers) आणि [टूल्स](https://github.com/crytic/slither#tools) द्वारे कोड पुनरावलोकन क्षमता आहेत. + +प्रायव्हेट डिटेक्टर आणि GitHub इंटिग्रेशनमध्ये प्रवेश मिळविण्यासाठी [crytic.io](https://github.com/crytic) वापरा. + +## स्थिर विश्लेषण {#static-analysis} + +स्लिदर स्टॅटिक अ‍ॅनालिसिस फ्रेमवर्कची क्षमता आणि डिझाइन ब्लॉग पोस्ट्समध्ये ([1](https://blog.trailofbits.com/2018/10/19/slither-a-solidity-static-analysis-framework/), [2](https://blog.trailofbits.com/2019/05/27/slither-the-leading-static-analyzer-for-smart-contracts/)) आणि एका [अकॅडमिक पेपरमध्ये](https://github.com/trailofbits/publications/blob/master/papers/wetseb19.pdf) वर्णन केले आहे. + +स्टॅटिक विश्लेषण विविध प्रकारांमध्ये अस्तित्वात आहे. तुम्हाला कदाचित याची जाणीव असेल की [clang](https://clang-analyzer.llvm.org/) आणि [gcc](https://lwn.net/Articles/806099/) सारखे कंपाइलर या संशोधन तंत्रांवर अवलंबून असतात, परंतु ते [Infer](https://fbinfer.com/), [CodeClimate](https://codeclimate.com/), [FindBugs](http://findbugs.sourceforge.net/) आणि [Frama-C](https://frama-c.com/) आणि [Polyspace](https://www.mathworks.com/products/polyspace.html) सारख्या औपचारिक पद्धतींवर आधारित टूल्सला देखील आधार देते. + +आम्ही येथे स्टॅटिक विश्लेषण तंत्र आणि संशोधकाचे संपूर्ण पुनरावलोकन करणार नाही. त्याऐवजी, स्लिदर कसे कार्य करते हे समजून घेण्यासाठी काय आवश्यक आहे यावर आम्ही लक्ष केंद्रित करू जेणेकरून आपण बग शोधण्यासाठी आणि कोड समजून घेण्यासाठी अधिक प्रभावीपणे त्याचा वापर करू शकाल. + +- [कोड रिप्रेझेंटेशन](#code-representation) +- [कोड विश्लेषण](#analysis) +- [इंटरमीडिएट रिप्रेझेंटेशन](#intermediate-representation) + +### कोड रिप्रेझेंटेशन {#code-representation} + +डायनॅमिक विश्लेषणाच्या विपरीत, जे एकाच एक्झिक्युशन पाथबद्दल तर्क करते, स्टॅटिक विश्लेषण एकाच वेळी सर्व पाथबद्दल तर्क करते. असे करण्यासाठी, ते एका वेगळ्या कोड रिप्रेझेंटेशनवर अवलंबून असते. यातील दोन सर्वात सामान्य म्हणजे अ‍ॅबस्ट्रॅक्ट सिंटॅक्स ट्री (AST) आणि कंट्रोल फ्लो ग्राफ (CFG). + +### अ‍ॅबस्ट्रॅक्ट सिंटॅक्स ट्री (AST) {#abstract-syntax-trees-ast} + +जेव्हाही कंपाइलर कोड पार्स करतो तेव्हा AST वापरले जातात. ही कदाचित सर्वात मूलभूत रचना आहे ज्यावर स्टॅटिक विश्लेषण केले जाऊ शकते. + +थोडक्यात सांगायचे झाल्यास, AST एक संरचित ट्री आहे जिथे, सामान्यतः, प्रत्येक लीफमध्ये एक व्हेरिएबल किंवा एक कॉन्स्टंट असते आणि इंटरनल नोड्स ऑपरेंड किंवा कंट्रोल फ्लो ऑपरेशन्स असतात. पुढील कोड विचारात घ्या: + +```solidity +function safeAdd(uint a, uint b) pure internal returns(uint){ + if(a + b <= a){ + revert(); + } + return a + b; +} +``` + +संबंधित AST यात दर्शविले आहे: + +![AST](./ast.png) + +स्लिदर solc द्वारे एक्सपोर्ट केलेले AST वापरते. + +तयार करण्यास सोपे असले तरी, AST एक नेस्टेड रचना आहे. काहीवेळा, विश्लेषण करणे हे सर्वात सोपे नसते. उदाहरणार्थ, `a + b <= a` या एक्सप्रेशनद्वारे वापरल्या जाणार्‍या ऑपरेशन्स ओळखण्यासाठी, तुम्हाला प्रथम `<=` आणि नंतर `+` चे विश्लेषण करणे आवश्यक आहे. एक सामान्य दृष्टिकोन म्हणजे तथाकथित व्हिजिटर पॅटर्न वापरणे, जे रिकर्सिव्हली ट्रीमधून नेव्हिगेट करते. स्लिदरमध्ये [`ExpressionVisitor`](https://github.com/crytic/slither/blob/master/slither/visitors/expression/expression.py) मध्ये एक जेनेरिक व्हिजिटर आहे. + +पुढील कोड एक्सप्रेशनमध्ये अ‍ॅडिशन आहे की नाही हे शोधण्यासाठी `ExpressionVisitor` वापरतो: + +```python +from slither.visitors.expression.expression import ExpressionVisitor +from slither.core.expressions.binary_operation import BinaryOperationType + +class HasAddition(ExpressionVisitor): + + def result(self): + return self._result + + def _post_binary_operation(self, expression): + if expression.type == BinaryOperationType.ADDITION: + self._result = True + +visitor = HasAddition(expression) # expression is the expression to be tested +print(f'The expression {expression} has a addition: {visitor.result()}') +``` + +### कंट्रोल फ्लो ग्राफ (CFG) {#control-flow-graph-cfg} + +दुसरे सर्वात सामान्य कोड रिप्रेझेंटेशन म्हणजे कंट्रोल फ्लो ग्राफ (CFG). त्याच्या नावाप्रमाणेच, हे ग्राफ-आधारित रिप्रेझेंटेशन आहे जे सर्व एक्झिक्युशन पाथ उघड करते. प्रत्येक नोडमध्ये एक किंवा अनेक सूचना असतात. ग्राफमधील एजेस कंट्रोल फ्लो ऑपरेशन्स (if/then/else, लूप, इत्यादी) दर्शवतात. आमच्या मागील उदाहरणाचा CFG आहे: + +![CFG](./cfg.png) + +CFG हे असे रिप्रेझेंटेशन आहे ज्यावर बहुतेक विश्लेषणे तयार केली जातात. + +इतर अनेक कोड रिप्रेझेंटेशन्स अस्तित्वात आहेत. तुम्ही करू इच्छित असलेल्या विश्लेषणानुसार प्रत्येक रिप्रेझेंटेशनचे फायदे आणि तोटे आहेत. + +### विश्लेषण {#analysis} + +स्लिदरसह तुम्ही करू शकता असे सर्वात सोपे प्रकारचे विश्लेषण म्हणजे सिंटॅक्टिक विश्लेषण. + +### सिंटॅक्स विश्लेषण {#syntax-analysis} + +स्लिदर पॅटर्न मॅचिंग सारखा दृष्टीकोन वापरून विसंगती आणि दोष शोधण्यासाठी कोडच्या विविध घटकांमधून आणि त्यांच्या रिप्रेझेंटेशनमधून नेव्हिगेट करू शकते. + +उदाहरणार्थ, खालील डिटेक्टर सिंटॅक्स-संबंधित समस्या शोधतात: + +- [स्टेट व्हेरिएबल शॅडोइंग](https://github.com/crytic/slither/wiki/Detector-Documentation#state-variable-shadowing): सर्व स्टेट व्हेरिएबल्सवर पुनरावृत्ती करते आणि तपासते की इनहेरिटेड कॉन्ट्रॅक्टमधील व्हेरिएबलला कोणताही शॅडो करतो का ([state.py#L51-L62](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/shadowing/state.py#L51-L62)) + +- [अयोग्य ERC20 इंटरफेस](https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-erc20-interface): अयोग्य ERC20 फंक्शन सिग्ननेचर शोधा ([incorrect_erc20_interface.py#L34-L55](https://github.com/crytic/slither/blob/0441338e055ab7151b30ca69258561a5a793f8ba/slither/detectors/erc/incorrect_erc20_interface.py#L34-L55)) + +### सिमॅंटिक विश्लेषण {#semantic-analysis} + +सिंटॅक्स विश्लेषणाच्या विपरीत, सिमॅंटिक विश्लेषण अधिक खोलवर जाईल आणि कोडचा “अर्थ” विश्लेषण करेल. या फॅमिलीमध्ये काही व्यापक प्रकारचे विश्लेषण समाविष्ट आहेत. ते अधिक शक्तिशाली आणि उपयुक्त परिणामांकडे नेतात, परंतु लिहिण्यासही अधिक क्लिष्ट आहेत. + +सर्वात प्रगत व्हल्नरेबिलिटी डिटेक्शनसाठी सिमॅंटिक विश्लेषण वापरले जाते. + +#### डेटा डिपेंडन्सी विश्लेषण {#fixed-point-computation} + +एखादे व्हेरिएबल `variable_a` हे `variable_b` वर डेटा-डिपेंडंट आहे असे म्हटले जाते, जर असा एखादा मार्ग असेल ज्यासाठी `variable_a` चे मूल्य `variable_b` द्वारे प्रभावित होते. + +पुढील कोडमध्ये, `variable_a` हे `variable_b` वर अवलंबून आहे: + +```solidity +// ... +variable_a = variable_b + 1; +``` + +स्लिदर अंगभूत [डेटा डिपेंडन्सी](https://github.com/crytic/slither/wiki/data-dependency) क्षमतेसह येते, त्याच्या इंटरमीडिएट रिप्रेझेंटेशनमुळे (नंतरच्या विभागात चर्चा केली आहे). + +डेटा डिपेंडन्सी वापराचे उदाहरण [डेंजरस स्ट्रिक्ट इक्वलिटी डिटेक्टर](https://github.com/crytic/slither/wiki/Detector-Documentation#dangerous-strict-equalities) मध्ये आढळू शकते. येथे स्लिदर एका धोकादायक मूल्याशी स्ट्रिक्ट इक्वलिटी कंपॅरिझन शोधेल ([incorrect_strict_equality.py#L86-L87](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L86-L87)), आणि वापरकर्त्याला सूचित करेल की त्याने `>=` किंवा `<=` ऐवजी `==` वापरावे, जेणेकरून अटॅकरला कॉन्ट्रॅक्टमध्ये अडकवण्यापासून रोखता येईल. इतर गोष्टींबरोबरच, डिटेक्टर `balanceOf(address)` ([incorrect_strict_equality.py#L63-L64](https://github.com/crytic/slither/blob/6d86220a53603476f9567c3358524ea4db07fb25/slither/detectors/statements/incorrect_strict_equality.py#L63-L64)) ला केलेल्या कॉलचे रिटर्न व्हॅल्यू धोकादायक मानेल आणि त्याचा वापर ट्रॅक करण्यासाठी डेटा डिपेंडन्सी इंजिन वापरेल. + +#### फिक्स्ड-पॉइंट संगणन {#fixed-point-computation} + +जर तुमचे विश्लेषण CFG मधून नेव्हिगेट करत असेल आणि एजेसचे अनुसरण करत असेल, तर तुम्हाला आधीच भेट दिलेले नोड्स दिसण्याची शक्यता आहे. उदाहरणार्थ, जर एखादे लूप खाली दर्शविल्याप्रमाणे सादर केले असेल तर: + +```solidity +for(uint i; i < range; ++){ + variable_a += 1 +} +``` + +तुमच्या विश्लेषणाला केव्हा थांबायचे हे माहित असणे आवश्यक आहे. येथे दोन मुख्य धोरणे आहेत: (1) प्रत्येक नोडवर मर्यादित वेळा पुनरावृत्ती करणे, (2) तथाकथित _फिक्सपॉइंट_ मोजणे. फिक्सपॉइंटचा मुळात अर्थ असा आहे की या नोडचे विश्लेषण केल्याने कोणतीही अर्थपूर्ण माहिती मिळत नाही. + +फिक्सपॉइंट वापराचे उदाहरण रीएन्ट्रन्सी डिटेक्टरमध्ये आढळू शकते: स्लिदर नोड्स एक्सप्लोर करते, आणि एक्सटर्नल कॉल्स, स्टोरेजमध्ये लिहिणे आणि वाचणे शोधते. एकदा ते फिक्सपॉइंटवर पोहोचले की ([reentrancy.py#L125-L131](https://github.com/crytic/slither/blob/master/slither/detectors/reentrancy/reentrancy.py#L125-L131)), ते एक्सप्लोरेशन थांबवते, आणि रीएन्ट्रन्सी आहे की नाही हे पाहण्यासाठी परिणामांचे विश्लेषण करते, वेगवेगळ्या रीएन्ट्रन्सी पॅटर्नद्वारे ([reentrancy_benign.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_benign.py), [reentrancy_read_before_write.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_read_before_write.py), [reentrancy_eth.py](https://github.com/crytic/slither/blob/b275bcc824b1b932310cf03b6bfb1a1fef0ebae1/slither/detectors/reentrancy/reentrancy_eth.py)). + +कार्यक्षम फिक्स्ड पॉइंट संगणन वापरून विश्लेषण लिहिण्यासाठी विश्लेषण त्याची माहिती कशी प्रसारित करते याची चांगली समज आवश्यक आहे. + +### इंटरमीडिएट रिप्रेझेंटेशन {#intermediate-representation} + +इंटरमीडिएट रिप्रेझेंटेशन (IR) ही मूळ भाषेपेक्षा स्टॅटिक विश्लेषणासाठी अधिक सोयीची अशी भाषा आहे. स्लिदर Solidity चे स्वतःच्या IR मध्ये भाषांतर करते: [SlithIR](https://github.com/crytic/slither/wiki/SlithIR). + +जर तुम्हाला फक्त मूलभूत तपासण्या लिहायच्या असतील तर SlithIR समजून घेणे आवश्यक नाही. तथापि, जर तुम्ही प्रगत सिमॅंटिक विश्लेषण लिहिण्याची योजना आखत असाल तर ते उपयोगी पडेल. [SlithIR](https://github.com/crytic/slither/wiki/Printer-documentation#slithir) आणि [SSA](https://github.com/crytic/slither/wiki/Printer-documentation#slithir-ssa) प्रिंटर तुम्हाला कोडचे भाषांतर कसे केले जाते हे समजण्यास मदत करतील. + +## API बेसिक्स {#api-basics} + +स्लिदरकडे एक API आहे जे तुम्हाला कॉन्ट्रॅक्ट आणि त्याच्या फंक्शन्सचे मूलभूत गुणधर्म एक्सप्लोर करू देते. + +कोडबेस लोड करण्यासाठी: + +```python +from slither import Slither +slither = Slither('/path/to/project') + +``` + +### कॉन्ट्रॅक्ट्स आणि फंक्शन्स एक्सप्लोर करणे {#exploring-contracts-and-functions} + +`Slither` ऑब्जेक्टमध्ये आहे: + +- `contracts (list(Contract)`: कॉन्ट्रॅक्ट्सची सूची +- `contracts_derived (list(Contract)`: दुसऱ्या कॉन्ट्रॅक्टद्वारे वारसा न मिळालेल्या कॉन्ट्रॅक्ट्सची सूची (कॉन्ट्रॅक्ट्सचा उपसंच) +- `get_contract_from_name (str)`: त्याच्या नावावरून एक कॉन्ट्रॅक्ट परत करा + +`Contract` ऑब्जेक्टमध्ये आहे: + +- `name (str)`: कॉन्ट्रॅक्टचे नाव +- `functions (list(Function))`: फंक्शन्सची सूची +- `modifiers (list(Modifier))`: फंक्शन्सची सूची +- `all_functions_called (list(Function/Modifier))`: कॉन्ट्रॅक्टद्वारे पोहोचता येणाऱ्या सर्व अंतर्गत फंक्शन्सची सूची +- `inheritance (list(Contract))`: इनहेरिटेड कॉन्ट्रॅक्ट्सची सूची +- `get_function_from_signature (str)`: त्याच्या सिग्ननेचरवरून एक फंक्शन परत करा +- `get_modifier_from_signature (str)`: त्याच्या सिग्ननेचरवरून एक मॉडिफायर परत करा +- `get_state_variable_from_name (str)`: त्याच्या नावावरून एक स्टेटव्हेरिएबल परत करा + +`Function` किंवा `Modifier` ऑब्जेक्टमध्ये आहे: + +- `name (str)`: फंक्शनचे नाव +- `contract (contract)`: कॉन्ट्रॅक्ट जिथे फंक्शन घोषित केले आहे +- `nodes (list(Node))`: फंक्शन/मॉडिफायरच्या CFG ची रचना करणाऱ्या नोड्सची सूची +- `entry_point (Node)`: CFG चा एंट्री पॉइंट +- `variables_read (list(Variable))`: वाचलेल्या व्हेरिएबल्सची सूची +- `variables_written (list(Variable))`: लिहिलेल्या व्हेरिएबल्सची सूची +- `state_variables_read (list(StateVariable))`: वाचलेल्या स्टेट व्हेरिएबल्सची सूची (व्हेरिएबल्स`read चा उपसंच) +- `state_variables_written (list(StateVariable))`: लिहिलेल्या स्टेट व्हेरिएबल्सची सूची (व्हेरिएबल्स`written चा उपसंच) diff --git a/public/content/translations/mr/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md b/public/content/translations/mr/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md new file mode 100644 index 00000000000..bf402dc60fb --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-use-tellor-as-your-oracle/index.md @@ -0,0 +1,81 @@ +--- +title: "तुमचा ओरॅकल म्हणून टेलर कसा सेट अप करायचा" +description: "तुमच्या प्रोटोकॉलमध्ये टेलर ओरॅकलला एकत्रित करून सुरुवात करण्यासाठी एक मार्गदर्शक" +author: "Tellor" +lang: mr +tags: [ "सॉलिडिटी", "स्मार्ट कॉन्ट्रॅक्ट", "ओरॅकल्स" ] +skill: beginner +published: 2021-06-29 +source: Tellor Docs +sourceUrl: https://docs.tellor.io/tellor/ +--- + +पॉप क्विझ: तुमचा प्रोटोकॉल जवळजवळ पूर्ण झाला आहे, परंतु त्याला ऑफचेन डेटामध्ये प्रवेश मिळवण्यासाठी एका ओरॅकलची आवश्यकता आहे...तुम्ही काय कराल? + +## (सॉफ्ट) पूर्व-आवश्यकता {#soft-prerequisites} + +या पोस्टचा उद्देश ओरॅकल फीडमध्ये प्रवेश करणे शक्य तितके सोपे आणि सरळ बनवणे आहे. असे असले तरी, ओरॅकलच्या पैलूवर लक्ष केंद्रित करण्यासाठी आम्ही तुमच्या कोडिंग कौशल्य-स्तराबद्दल खालील गोष्टी गृहीत धरत आहोत. + +गृहीतके: + +- तुम्ही टर्मिनल नेव्हिगेट करू शकता +- तुमच्याकडे npm स्थापित आहे +- डिपेंडेंसी व्यवस्थापित करण्यासाठी npm कसे वापरावे हे तुम्हाला माहीत आहे + +टेलर हे एक लाइव्ह आणि ओपन-सोर्स ओरॅकल आहे जे अंमलबजावणीसाठी तयार आहे. हे नवशिक्यांसाठीचे मार्गदर्शक आहे जे हे दर्शवते की टेलरचा वापर करून किती सहजपणे सुरुवात करता येते, जे तुमच्या प्रोजेक्टला पूर्णपणे विकेंद्रित आणि सेन्सॉरशिप-प्रतिरोधक ओरॅकल प्रदान करते. + +## आढावा {#overview} + +टेलर ही एक ओरॅकल प्रणाली आहे जिथे पक्ष ऑफचेन डेटा पॉइंटच्या (उदा. BTC/USD) मूल्याची विनंती करू शकतात आणि रिपोर्टर्स हे मूल्य ऑनचेन डेटा-बँकेत जोडण्यासाठी स्पर्धा करतात, जे सर्व इथेरियम स्मार्ट कॉन्ट्रॅक्ट्सद्वारे प्रवेशयोग्य असते. या डेटा-बँकेतील इनपुट स्टेक केलेल्या रिपोर्टर्सच्या नेटवर्कद्वारे सुरक्षित केले जातात. टेलर क्रिप्टो-इकॉनॉमिक प्रोत्साहन यंत्रणेचा वापर करते, रिपोर्टर्सद्वारे प्रामाणिक डेटा सबमिशनला पुरस्कृत करते आणि टेलरचे टोकन, ट्रिब्यूट्स (TRB), जारी करून आणि विवाद यंत्रणेद्वारे वाईट काम करणाऱ्यांना शिक्षा देते. + +या ट्युटोरियलमध्ये आपण पाहणार आहोत: + +- सुरू करण्यासाठी तुम्हाला आवश्यक असलेले प्रारंभिक टूलकिट सेट करणे. +- एका सोप्या उदाहरणाचे अवलोकन करणे. +- तुम्ही सध्या टेलरची चाचणी करू शकता अशा नेटवर्क्सच्या टेस्टनेट पत्त्यांची यादी करणे. + +## UsingTellor {#usingtellor} + +सर्वात आधी, तुम्हाला टेलरला तुमचा ओरॅकल म्हणून वापरण्यासाठी आवश्यक असलेली मूलभूत साधने स्थापित करावी लागतील. टेलर वापरकर्ता कॉन्ट्रॅक्ट्स स्थापित करण्यासाठी [हे पॅकेज](https://github.com/tellor-io/usingtellor) वापरा: + +`npm install usingtellor` + +एकदा स्थापित झाल्यावर, हे तुमच्या कॉन्ट्रॅक्ट्सना 'UsingTellor' कॉन्ट्रॅक्टमधून फंक्शन्स वारसा हक्काने मिळवण्याची परवानगी देईल. + +उत्तम! आता तुमची साधने तयार आहेत, चला एक सोपा व्यायाम करूया जिथे आपण बिटकॉइनची किंमत मिळवू: + +### BTC/USD उदाहरण {#btcusd-example} + +UsingTellor कॉन्ट्रॅक्ट वारसा हक्काने मिळवा, कंस्ट्रक्टर आर्ग्युमेंट म्हणून टेलर पत्ता पास करून: + +येथे एक उदाहरण आहे: + +```solidity +import "usingtellor/contracts/UsingTellor.sol"; + +contract PriceContract is UsingTellor { + uint256 public btcPrice; + + //या कॉन्ट्रॅक्टला आता UsingTellor मधील सर्व फंक्शन्सचा ऍक्सेस आहे + +constructor(address payable _tellorAddress) UsingTellor(_tellorAddress) public {} + +function setBtcPrice() public { + bytes memory _b = abi.encode("SpotPrice",abi.encode("btc","usd")); + bytes32 _queryId = keccak256(_b); + + uint256 _timestamp; + bytes _value; + + (_value, _timestamp) = getDataBefore(_queryId, block.timestamp - 15 minutes); + + btcPrice = abi.decode(_value,(uint256)); + } +} +``` + +कॉन्ट्रॅक्ट पत्त्यांच्या संपूर्ण यादीसाठी [येथे](https://docs.tellor.io/tellor/the-basics/contracts-reference) पहा. + +वापराच्या सुलभतेसाठी, UsingTellor रेपो [Tellor Playground](https://github.com/tellor-io/TellorPlayground) कॉन्ट्रॅक्टच्या आवृत्तीसह येतो, ज्यामुळे एकीकरण सोपे होते. उपयुक्त फंक्शन्सच्या यादीसाठी [येथे](https://github.com/tellor-io/sampleUsingTellor#tellor-playground) पहा. + +टेलर ओरॅकलच्या अधिक मजबूत अंमलबजावणीसाठी, उपलब्ध फंक्शन्सची संपूर्ण यादी [येथे](https://github.com/tellor-io/usingtellor/blob/master/README.md) पहा. diff --git a/public/content/translations/mr/developers/tutorials/how-to-view-nft-in-metamask/index.md b/public/content/translations/mr/developers/tutorials/how-to-view-nft-in-metamask/index.md new file mode 100644 index 00000000000..54d3256a61e --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-view-nft-in-metamask/index.md @@ -0,0 +1,33 @@ +--- +title: "तुमच्या वॉलेटमध्ये तुमचा NFT कसा पहायचा (NFT ट्युटोरियल मालिकेचा भाग ३/३)" +description: "हे ट्युटोरियल MetaMask वर विद्यमान NFT कसे पहावे याचे वर्णन करते!" +author: "Sumi Mudgil" +tags: [ "ERC-721", "Alchemy", "Solidity" ] +skill: beginner +lang: mr +published: 2021-04-22 +--- + +हे ट्युटोरियल NFT ट्युटोरियल मालिकेतील भाग ३/३ आहे, जिथे आपण आपला नुकताच मिंट केलेला NFT पाहणार आहोत. तथापि, तुम्ही Mainnet किंवा कोणत्याही टेस्टनेटसह, MetaMask वापरून कोणत्याही ERC-721 टोकनसाठी हे सामान्य ट्युटोरियल वापरू शकता. जर तुम्हाला Ethereum वर तुमचा स्वतःचा NFT कसा मिंट करायचा हे शिकायचे असेल, तर तुम्ही [भाग १: NFT स्मार्ट कॉन्ट्रॅक्ट कसे लिहावे आणि उपयोजित करावे](/developers/tutorials/how-to-write-and-deploy-an-nft) हे नक्की पहा! + +अभिनंदन! तुम्ही आमच्या NFT ट्युटोरियल मालिकेच्या सर्वात लहान आणि सोप्या भागापर्यंत पोहोचला आहात — तुमचा नुकताच मिंट केलेला NFT व्हर्च्युअल वॉलेटवर कसा पहायचा. आम्ही या उदाहरणासाठी MetaMask वापरणार आहोत, कारण मागील दोन भागांमध्ये आम्ही तेच वापरले आहे. + +पूर्व-अट म्हणून, तुमच्या मोबाइलवर आधीपासूनच MetaMask इन्स्टॉल केलेले असावे, आणि त्यात ते अकाऊंट असावे ज्यावर तुम्ही तुमचा NFT मिंट केला आहे — तुम्ही हे ॲप [iOS](https://apps.apple.com/us/app/metamask-blockchain-wallet/id1438144202) किंवा [Android](https://play.google.com/store/apps/details?id=io.metamask&hl=en_US&gl=US) वर विनामूल्य मिळवू शकता. + +## पायरी १: तुमचे नेटवर्क Sepolia वर सेट करा {#set-network-to-sepolia} + +ॲपच्या शीर्षस्थानी, “वॉलेट” बटण दाबा, त्यानंतर तुम्हाला नेटवर्क निवडण्यास सांगितले जाईल. आपला NFT Sepolia नेटवर्कवर मिंट केला गेल्यामुळे, तुम्हाला Sepolia हे तुमचे नेटवर्क म्हणून निवडावे लागेल. + +![MetaMask मोबाइलवर Sepolia हे तुमचे नेटवर्क कसे सेट करावे](./goerliMetamask.gif) + +## पायरी २: तुमचा संग्रहणीय MetaMask मध्ये जोडा {#add-nft-to-metamask} + +एकदा तुम्ही Sepolia नेटवर्कवर आलात की, उजवीकडील “Collectibles” टॅब निवडा आणि तुमच्या NFT चा स्मार्ट कॉन्ट्रॅक्ट ॲड्रेस आणि ERC-721 टोकन आयडी जोडा — जे तुम्हाला आमच्या ट्युटोरियलच्या भाग २ मध्ये उपयोजित केलेल्या तुमच्या NFT च्या ट्रान्झॅक्शन हॅशच्या आधारे Etherscan वर सापडेल. + +![तुमचा ट्रान्झॅक्शन हॅश आणि ERC-721 टोकन आयडी कसा शोधायचा](./findNFTEtherscan.png) + +तुमचा NFT पाहण्यासाठी तुम्हाला काही वेळा रिफ्रेश करावे लागेल — पण तो तिथे नक्कीच दिसेल ! + +![तुमचा NFT MetaMask वर कसा अपलोड करायचा](./findNFTMetamask.gif) + +अभिनंदन! तुम्ही यशस्वीरित्या एक NFT मिंट केला आहे, आणि तुम्ही आता तो पाहू शकता! तुम्ही NFT जगात कसा धुमाकूळ घालता हे पाहण्यासाठी आम्ही उत्सुक आहोत! diff --git a/public/content/translations/mr/developers/tutorials/how-to-write-and-deploy-an-nft/index.md b/public/content/translations/mr/developers/tutorials/how-to-write-and-deploy-an-nft/index.md new file mode 100644 index 00000000000..b52fbd182e2 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/how-to-write-and-deploy-an-nft/index.md @@ -0,0 +1,386 @@ +--- +title: "NFT कसे लिहावे आणि उपयोजित करावे (NFT ट्यूटोरियल मालिकेचा भाग 1/3)" +description: "हे ट्यूटोरियल NFTs वरील मालिकेचा भाग १ आहे, जे तुम्हाला Ethereum आणि इंटर प्लॅनेटरी फाइल सिस्टम (IPFS) वापरून नॉन-फंजिबल टोकन (ERC-721 टोकन) स्मार्ट कॉन्ट्रॅक्ट कसे लिहायचे आणि उपयोजित करायचे यावर टप्प्याटप्प्याने मार्गदर्शन करेल." +author: "Sumi Mudgil" +tags: + [ + "ERC-721", + "Alchemy", + "Solidity", + "स्मार्ट कॉन्ट्रॅक्ट" + ] +skill: beginner +lang: mr +published: 2021-04-22 +--- + +NFTs ब्लॉकचेनला लोकांच्या नजरेत आणत असल्याने, आता Ethereum ब्लॉकचेनवर तुमचे स्वतःचे NFT कॉन्ट्रॅक्ट (ERC-721 टोकन) प्रकाशित करून ही क्रेझ स्वतः समजून घेण्याची एक उत्तम संधी आहे! + +Alchemy ला NFT क्षेत्रातील सर्वात मोठ्या नावांना, ज्यात Makersplace (ज्याने अलीकडेच क्रिस्टीजमध्ये $69 दशलक्षमध्ये डिजिटल कलाकृती विक्रीचा विक्रम केला), Dapper Labs (NBA टॉप शॉट आणि क्रिप्टो किटीजचे निर्माते), OpenSea (जगातील सर्वात मोठे NFT मार्केटप्लेस), Zora, Super Rare, NFTfi, Foundation, Enjin, Origin Protocol, Immutable आणि बरेच काही समाविष्ट आहेत, त्यांना सामर्थ्य देण्याचा प्रचंड अभिमान आहे. + +या ट्यूटोरियलमध्ये, आम्ही [MetaMask](https://metamask.io/), [Solidity](https://docs.soliditylang.org/en/v0.8.0/), [Hardhat](https://hardhat.org/), [Pinata](https://pinata.cloud/) आणि [Alchemy](https://alchemy.com/signup/eth) वापरून Sepolia चाचणी नेटवर्कवर ERC-721 स्मार्ट कॉन्ट्रॅक्ट तयार आणि उपयोजित करण्याच्या प्रक्रियेतून जाऊ (जर तुम्हाला यापैकी कशाचाही अर्थ अजून समजला नसेल तर काळजी करू नका - आम्ही ते समजावून सांगू!). + +या ट्यूटोरियलच्या भाग २ मध्ये आपण NFT मिंट करण्यासाठी आपल्या स्मार्ट कॉन्ट्रॅक्टचा कसा वापर करू शकतो हे पाहू आणि भाग ३ मध्ये आपण MetaMask वर तुमचा NFT कसा पाहायचा हे समजावून सांगू. + +आणि अर्थातच, कोणत्याही क्षणी तुम्हाला प्रश्न असल्यास, [Alchemy Discord](https://discord.gg/gWuC7zB) मध्ये संपर्क साधण्यास किंवा [Alchemy's NFT API docs](https://docs.alchemy.com/alchemy/enhanced-apis/nft-api) ला भेट देण्यास अजिबात संकोच करू नका! + +## पायरी १: Ethereum नेटवर्कशी कनेक्ट करा {#connect-to-ethereum} + +Ethereum ब्लॉकचेनला विनंत्या करण्याचे बरेच मार्ग आहेत, पण गोष्टी सोप्या करण्यासाठी, आम्ही [Alchemy](https://alchemy.com/signup/eth) वर एक विनामूल्य खाते वापरू, जे एक ब्लॉकचेन डेव्हलपर प्लॅटफॉर्म आणि API आहे, जे आम्हाला स्वतःचे नोड न चालवता Ethereum चेनशी संवाद साधण्याची परवानगी देते. + +या ट्यूटोरियलमध्ये, आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टच्या उपयोजनामध्ये काय चालले आहे हे समजून घेण्यासाठी देखरेख आणि विश्लेषणासाठी Alchemy च्या डेव्हलपर साधनांचाही फायदा घेऊ. तुमच्याकडे आधीपासून Alchemy खाते नसल्यास, तुम्ही [येथे](https://alchemy.com/signup/eth) विनामूल्य साइन अप करू शकता. + +## पायरी २: तुमचे ॲप (आणि API की) तयार करा {#make-api-key} + +एकदा तुम्ही Alchemy खाते तयार केल्यावर, तुम्ही ॲप तयार करून API की तयार करू शकता. हे आम्हाला Sepolia चाचणी नेटवर्कवर विनंत्या करण्याची परवानगी देईल. जर तुम्ही चाचणी नेटवर्क्सबद्दल अधिक जाणून घेण्यास उत्सुक असाल तर [हे मार्गदर्शक](https://docs.alchemyapi.io/guides/choosing-a-network) पहा. + +1. तुमच्या Alchemy डॅशबोर्डवरील “ॲप तयार करा” पेजवर जाण्यासाठी, नॅव्ह बारमधील “ॲप्स” वर होव्हर करा आणि “ॲप तयार करा” वर क्लिक करा. + +![तुमचे ॲप तयार करा](./create-your-app.png) + +2. तुमच्या ॲपला नाव द्या (आम्ही “माझे पहिले NFT!” निवडले आहे), एक छोटे वर्णन द्या, चेनसाठी “Ethereum” निवडा आणि तुमच्या नेटवर्कसाठी “Sepolia” निवडा. मर्ज झाल्यापासून इतर टेस्टनेट रद्द करण्यात आले आहेत. + +![तुमचे ॲप कॉन्फिगर करा आणि प्रकाशित करा](./alchemy-explorer-sepolia.png) + +3. “ॲप तयार करा” वर क्लिक करा आणि झाले! तुमचे ॲप खालील टेबलमध्ये दिसावे. + +## पायरी ३: Ethereum खाते (पत्ता) तयार करा {#create-eth-address} + +आम्हाला व्यवहार पाठवण्यासाठी आणि प्राप्त करण्यासाठी Ethereum खात्याची आवश्यकता आहे. या ट्यूटोरियलसाठी, आम्ही MetaMask वापरू, जे ब्राउझरमधील एक व्हर्च्युअल वॉलेट आहे, जे तुमचा Ethereum खाते पत्ता व्यवस्थापित करण्यासाठी वापरले जाते. तुम्हाला Ethereum वरील व्यवहार कसे कार्य करतात याबद्दल अधिक समजून घ्यायचे असल्यास, Ethereum फाउंडेशनचे [हे पेज](/developers/docs/transactions/) पहा. + +तुम्ही [येथे](https://metamask.io/download) विनामूल्य MetaMask खाते डाउनलोड आणि तयार करू शकता. तुम्ही खाते तयार करत असताना, किंवा तुमच्याकडे आधीपासूनच खाते असल्यास, वरच्या उजवीकडे “Sepolia चाचणी नेटवर्क” वर स्विच केल्याची खात्री करा (जेणेकरून आपण खऱ्या पैशांशी व्यवहार करणार नाही). + +![Sepolia ला तुमचे नेटवर्क म्हणून सेट करा](./metamask-goerli.png) + +## पायरी ४: फॉसेटमधून इथर जोडा {#step-4-add-ether-from-a-faucet} + +आपला स्मार्ट कॉन्ट्रॅक्ट चाचणी नेटवर्कवर उपयोजित करण्यासाठी, आम्हाला काही बनावट ETH ची आवश्यकता असेल. ETH मिळविण्यासाठी तुम्ही Alchemy द्वारा होस्ट केलेल्या [Sepolia Faucet](https://sepoliafaucet.com/) वर जाऊ शकता, लॉग इन करा आणि तुमच्या खात्याचा पत्ता प्रविष्ट करा, “Send Me ETH” वर क्लिक करा. लवकरच तुम्हाला तुमच्या MetaMask खात्यात ETH दिसेल! + +## पायरी ५: तुमची शिल्लक तपासा {#check-balance} + +आपली शिल्लक आहे की नाही हे पुन्हा तपासण्यासाठी, चला [Alchemy’s composer tool](https://composer.alchemyapi.io?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) वापरून [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) विनंती करूया. हे आमच्या वॉलेटमधील ETH ची रक्कम परत करेल. तुम्ही तुमच्या MetaMask खात्याचा पत्ता इनपुट केल्यानंतर आणि “Send Request” वर क्लिक केल्यानंतर, तुम्हाला असा प्रतिसाद दिसेल: + + ``` + `{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"}` + ``` + +> **टीप** हा निकाल ETH मध्ये नाही, तर wei मध्ये आहे. Wei हे इथरचे सर्वात लहान एकक म्हणून वापरले जाते. wei चे ETH मध्ये रूपांतरण 1 eth = 1018 wei असे आहे. म्हणून जर आपण 0xde0b6b3a7640000 हे दशांश मध्ये रूपांतरित केले तर आपल्याला 1\*1018 wei मिळतील, जे 1 ETH च्या बरोबर आहे. + +हुश्श! आपले बनावट पैसे तिथे आहेत. + +## पायरी ६: आपला प्रोजेक्ट सुरू करा {#initialize-project} + +प्रथम, आपल्याला आपल्या प्रोजेक्टसाठी एक फोल्डर तयार करण्याची आवश्यकता असेल. तुमच्या कमांड लाइनवर नेव्हिगेट करा आणि टाइप करा: + + ``` + mkdir my-nft + cd my-nft + ``` + +आता आपण आपल्या प्रोजेक्ट फोल्डरमध्ये आहोत, आपण प्रोजेक्ट सुरू करण्यासाठी npm init वापरू. तुमच्याकडे आधीपासून npm इंस्टॉल केलेले नसल्यास, [या सूचनांचे](https://docs.alchemyapi.io/alchemy/guides/alchemy-for-macs#1-install-nodejs-and-npm) पालन करा (आम्हाला [Node.js](https://nodejs.org/en/download/) ची देखील आवश्यकता असेल, म्हणून ते देखील डाउनलोड करा!). + + ``` + npm init + ``` + +तुम्ही इन्स्टॉलेशन प्रश्नांची उत्तरे कशी देता हे खरोखर महत्त्वाचे नाही; आम्ही ते संदर्भासाठी कसे केले ते येथे आहे: + +```json + पॅकेजचे नाव: (my-nft) + आवृत्ती: (1.0.0) + वर्णन: माझे पहिले NFT! + एंट्री पॉइंट: (index.js) + चाचणी कमांड: + git रेपॉजिटरी: + कीवर्ड: + लेखक: + परवाना: (ISC) + /Users/thesuperb1/Desktop/my-nft/package.json मध्ये लिहिणार आहात: + + { + "name": "my-nft", + "version": "1.0.0", + "description": "माझे पहिले NFT!", + "main": "index.js", + "scripts": { + "test": "echo \"त्रुटी: कोणतीही चाचणी निर्दिष्ट केलेली नाही\" && exit 1" + }, + "author": "", + "license": "ISC" + } +``` + +package.json ला मान्यता द्या, आणि आपण पुढे जाण्यासाठी तयार आहोत! + +## पायरी ७: [Hardhat](https://hardhat.org/getting-started/#overview) इंस्टॉल करा {#install-hardhat} + +Hardhat हे तुमचे Ethereum सॉफ्टवेअर संकलित (compile), उपयोजित (deploy), चाचणी (test) आणि डीबग (debug) करण्यासाठी एक विकास वातावरण आहे. हे डेव्हलपर्सना थेट चेनवर उपयोजित करण्यापूर्वी स्थानिक पातळीवर स्मार्ट कॉन्ट्रॅक्ट्स आणि dApps तयार करताना मदत करते. + +आपल्या my-nft प्रोजेक्टमध्ये चालवा: + + ``` + npm install --save-dev hardhat + ``` + +[इन्स्टॉलेशन सूचनांविषयी](https://hardhat.org/getting-started/#overview) अधिक तपशीलांसाठी हे पेज पहा. + +## पायरी ८: Hardhat प्रोजेक्ट तयार करा {#create-hardhat-project} + +आपल्या प्रोजेक्ट फोल्डरमध्ये चालवा: + + ``` + npx hardhat + ``` + +त्यानंतर तुम्हाला एक स्वागत संदेश आणि तुम्हाला काय करायचे आहे यासाठी पर्याय दिसेल. “create an empty hardhat.config.js” निवडा: + + ``` + 888 888 888 888 888 + 888 888 888 888 888 + 888 888 888 888 888 + 8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888 + 888 888 "88b 888P" d88" 888 888 "88b "88b 888 + 888 888 .d888888 888 888 888 888 888 .d888888 888 + 888 888 888 888 888 Y88b 888 888 888 888 888 Y88b. + 888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888 + 👷 Hardhat v2.0.11 मध्ये स्वागत आहे 👷‍ + ? तुम्हाला काय करायचे आहे? … + एक नमुना प्रोजेक्ट तयार करा + ❯ एक रिक्त hardhat.config.js तयार करा + बाहेर पडा + ``` + +हे आमच्यासाठी एक hardhat.config.js फाइल तयार करेल जिथे आम्ही आमच्या प्रोजेक्टसाठी सर्व सेटअप निर्दिष्ट करू (पायरी 13 वर). + +## पायरी ९: प्रोजेक्ट फोल्डर्स जोडा {#add-project-folders} + +आपला प्रोजेक्ट संघटित ठेवण्यासाठी, आम्ही दोन नवीन फोल्डर्स तयार करू. तुमच्या कमांड लाइनमधील प्रोजेक्टच्या मूळ डिरेक्टरीवर नेव्हिगेट करा आणि टाइप करा: + + ``` + mkdir contracts + mkdir scripts + ``` + +- contracts/ मध्ये आम्ही आमच्या NFT स्मार्ट कॉन्ट्रॅक्टचा कोड ठेवू. + +- scripts/ मध्ये आम्ही आमचे स्मार्ट कॉन्ट्रॅक्ट उपयोजित करण्यासाठी आणि त्याच्याशी संवाद साधण्यासाठी स्क्रिप्ट्स ठेवू. + +## पायरी १०: आमचा कॉन्ट्रॅक्ट लिहा {#write-contract} + +आता आमचे वातावरण सेट झाले आहे, चला अधिक रोमांचक गोष्टींकडे वळूया: _आमच्या स्मार्ट कॉन्ट्रॅक्टचा कोड लिहिणे!_ + +तुमच्या आवडत्या एडिटरमध्ये my-nft प्रोजेक्ट उघडा (आम्हाला [VSCode](https://code.visualstudio.com/) आवडते). स्मार्ट कॉन्ट्रॅक्ट्स Solidity नावाच्या भाषेत लिहिले जातात, जी आम्ही आमचे MyNFT.sol स्मार्ट कॉन्ट्रॅक्ट लिहिण्यासाठी वापरू. + +1. `contracts` फोल्डरवर नेव्हिगेट करा आणि MyNFT.sol नावाची एक नवीन फाइल तयार करा. + +2. खाली आमच्या NFT स्मार्ट कॉन्ट्रॅक्टचा कोड आहे, जो आम्ही [OpenZeppelin](https://docs.openzeppelin.com/contracts/3.x/erc721) लायब्ररीच्या ERC-721 अंमलबजावणीवर आधारित आहे. खालील सामग्री कॉपी करा आणि तुमच्या MyNFT.sol फाइलमध्ये पेस्ट करा. + + ```solidity + //कॉन्ट्रॅक्ट [https://docs.openzeppelin.com/contracts/3.x/erc721](https://docs.openzeppelin.com/contracts/3.x/erc721) वर आधारित + // SPDX-License-Identifier: MIT + pragma solidity ^0.8.0; + + import "@openzeppelin/contracts/token/ERC721/ERC721.sol"; + import "@openzeppelin/contracts/utils/Counters.sol"; + import "@openzeppelin/contracts/access/Ownable.sol"; + import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; + + contract MyNFT is ERC721URIStorage, Ownable { + using Counters for Counters.Counter; + Counters.Counter private _tokenIds; + + constructor() ERC721("MyNFT", "NFT") {} + + function mintNFT(address recipient, string memory tokenURI) + public onlyOwner + returns (uint256) + { + _tokenIds.increment(); + + uint256 newItemId = _tokenIds.current(); + _mint(recipient, newItemId); + _setTokenURI(newItemId, tokenURI); + + return newItemId; + } + } + ``` + +3. कारण आम्ही OpenZeppelin कॉन्ट्रॅक्ट्स लायब्ररीमधून क्लासेस घेत आहोत, तुमच्या कमांड लाइनमध्ये `npm install @openzeppelin/contracts^4.0.0` चालवून ती लायब्ररी आमच्या फोल्डरमध्ये इंस्टॉल करा. + +तर, हा कोड नक्की _काय_ करतो? चला, ओळी-ओळीने ते समजून घेऊया. + +आपल्या स्मार्ट कॉन्ट्रॅक्टच्या शीर्षस्थानी, आम्ही तीन [OpenZeppelin](https://openzeppelin.com/) स्मार्ट कॉन्ट्रॅक्ट क्लासेस इम्पोर्ट करतो: + +- @openzeppelin/contracts/token/ERC721/ERC721.sol मध्ये ERC-721 मानकाची अंमलबजावणी आहे, जी आमचा NFT स्मार्ट कॉन्ट्रॅक्ट इनहेरिट करेल. (एक वैध NFT होण्यासाठी, तुमच्या स्मार्ट कॉन्ट्रॅक्टने ERC-721 मानकाच्या सर्व पद्धती लागू केल्या पाहिजेत.) इनहेरिटेड ERC-721 फंक्शन्सबद्दल अधिक जाणून घेण्यासाठी, [येथे](https://eips.ethereum.org/EIPS/eip-721) इंटरफेसची व्याख्या पहा. + +- @openzeppelin/contracts/utils/Counters.sol असे काउंटर्स प्रदान करते जे फक्त एकाने वाढवले ​​किंवा कमी केले जाऊ शकतात. आमचा स्मार्ट कॉन्ट्रॅक्ट मिंट केलेल्या एकूण NFTs चा मागोवा ठेवण्यासाठी आणि आमच्या नवीन NFT वर युनिक आयडी सेट करण्यासाठी काउंटर वापरतो. (स्मार्ट कॉन्ट्रॅक्ट वापरून मिंट केलेल्या प्रत्येक NFT ला एक युनिक आयडी नियुक्त करणे आवश्यक आहे - येथे आमचा युनिक आयडी फक्त अस्तित्वात असलेल्या एकूण NFTs च्या संख्येवरून निर्धारित केला जातो. उदाहरणार्थ, आम्ही आमच्या स्मार्ट कॉन्ट्रॅक्टसह मिंट केलेल्या पहिल्या NFT चा आयडी "1" आहे, आमच्या दुसऱ्या NFT चा आयडी "2" आहे, इत्यादी.) + +- @openzeppelin/contracts/access/Ownable.sol आमच्या स्मार्ट कॉन्ट्रॅक्टवर [ॲक्सेस कंट्रोल](https://docs.openzeppelin.com/contracts/3.x/access-control) सेट करते, त्यामुळे फक्त स्मार्ट कॉन्ट्रॅक्टचा मालक (तुम्ही) NFTs मिंट करू शकतो. (लक्षात घ्या, ॲक्सेस कंट्रोल समाविष्ट करणे ही पूर्णपणे एक पसंती आहे. जर तुम्हाला तुमच्या स्मार्ट कॉन्ट्रॅक्टचा वापर करून कोणालाही NFT मिंट करण्याची परवानगी द्यायची असेल, तर ओळ १० वरील Ownable शब्द आणि ओळ १७ वरील onlyOwner काढून टाका.) + +आमच्या इम्पोर्ट स्टेटमेंटनंतर, आमचा कस्टम NFT स्मार्ट कॉन्ट्रॅक्ट आहे, जो आश्चर्यकारकपणे लहान आहे — त्यात फक्त एक काउंटर, एक कन्स्ट्रक्टर आणि एकच फंक्शन आहे! हे आमच्या इनहेरिटेड OpenZeppelin कॉन्ट्रॅक्ट्समुळे शक्य झाले आहे, जे NFT तयार करण्यासाठी आवश्यक असलेल्या बहुतेक पद्धती लागू करतात, जसे की `ownerOf` जे NFT चा मालक परत करते, आणि `transferFrom`, जे NFT ची मालकी एका खात्यातून दुसऱ्या खात्यात हस्तांतरित करते. + +आमच्या ERC-721 कन्स्ट्रक्टरमध्ये, तुमच्या लक्षात येईल की आम्ही 2 स्ट्रिंग्स, “MyNFT” आणि “NFT” पास करतो. पहिले व्हेरिएबल स्मार्ट कॉन्ट्रॅक्टचे नाव आहे, आणि दुसरे त्याचे चिन्ह आहे. तुम्ही या प्रत्येक व्हेरिएबलला तुम्हाला हवे ते नाव देऊ शकता! + +शेवटी, आमच्याकडे `mintNFT(address recipient, string memory tokenURI)` हे फंक्शन आहे जे आम्हाला NFT मिंट करण्याची परवानगी देते! तुमच्या लक्षात येईल की हे फंक्शन दोन व्हेरिएबल्स घेते: + +- `address recipient` तो पत्ता निर्दिष्ट करतो जो तुमचा नव्याने मिंट केलेला NFT प्राप्त करेल. + +- `string memory tokenURI` ही एक स्ट्रिंग आहे जी NFT च्या मेटाडेटाचे वर्णन करणाऱ्या JSON डॉक्युमेंटमध्ये रिझॉल्व झाली पाहिजे. NFT चा मेटाडेटाच त्याला जिवंत करतो, ज्यामुळे त्यात नाव, वर्णन, प्रतिमा आणि इतर गुणधर्मांसारखे कॉन्फिगर करण्यायोग्य गुणधर्म असू शकतात. या ट्यूटोरियलच्या भाग २ मध्ये, आम्ही हा मेटाडेटा कसा कॉन्फिगर करायचा याचे वर्णन करू. + +`mintNFT` इनहेरिटेड ERC-721 लायब्ररीमधून काही पद्धती कॉल करते आणि शेवटी एक संख्या परत करते जी नव्याने मिंट केलेल्या NFT चा आयडी दर्शवते. + +## पायरी ११: MetaMask आणि Alchemy ला तुमच्या प्रोजेक्टशी कनेक्ट करा {#connect-metamask-and-alchemy} + +आता आम्ही MetaMask वॉलेट, Alchemy खाते तयार केले आहे आणि आमचा स्मार्ट कॉन्ट्रॅक्ट लिहिला आहे, आता तिन्ही कनेक्ट करण्याची वेळ आली आहे. + +तुमच्या व्हर्च्युअल वॉलेटमधून पाठवलेल्या प्रत्येक व्यवहारासाठी तुमच्या युनिक प्रायव्हेट की वापरून स्वाक्षरी आवश्यक आहे. आमच्या प्रोग्रामला ही परवानगी देण्यासाठी, आम्ही आमची प्रायव्हेट की (आणि Alchemy API की) एका एन्व्हायर्नमेंट फाइलमध्ये सुरक्षितपणे संग्रहित करू शकतो. + +व्यवहार पाठवण्याबद्दल अधिक जाणून घेण्यासाठी, वेब3 वापरून व्यवहार पाठवण्यावरील [हे ट्यूटोरियल](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) पहा. + +प्रथम, तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये dotenv पॅकेज इंस्टॉल करा: + + ``` + npm install dotenv --save + ``` + +त्यानंतर, आमच्या प्रोजेक्टच्या रूट डिरेक्टरीमध्ये एक `.env` फाइल तयार करा आणि त्यात तुमची MetaMask प्रायव्हेट की आणि HTTP Alchemy API URL जोडा. + +- MetaMask मधून तुमची प्रायव्हेट की एक्सपोर्ट करण्यासाठी [या सूचनांचे](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) पालन करा. + +- HTTP Alchemy API URL मिळविण्यासाठी खाली पहा आणि ती तुमच्या क्लिपबोर्डवर कॉपी करा. + +![तुमची Alchemy API URL कॉपी करा](./copy-alchemy-api-url.gif) + +तुमची `.env` आता अशी दिसावी: + + ``` + API_URL="https://eth-sepolia.g.alchemy.com/v2/your-api-key" + PRIVATE_KEY="your-metamask-private-key" + ``` + +यांना प्रत्यक्षात आमच्या कोडशी जोडण्यासाठी, आम्ही या व्हेरिएबल्सचा संदर्भ आमच्या hardhat.config.js फाइलमध्ये पायरी १३ मध्ये देऊ. + + + +## पायरी १२: Ethers.js इंस्टॉल करा {#install-ethers} + +Ethers.js ही एक लायब्ररी आहे जी अधिक वापरकर्ता-अनुकूल पद्धतींसह [प्रमाणित JSON-RPC पद्धती](/developers/docs/apis/json-rpc/) गुंडाळून Ethereum शी संवाद साधणे आणि विनंत्या करणे सोपे करते. + +Hardhat अतिरिक्त टूलिंग आणि विस्तारित कार्यक्षमतेसाठी [प्लगइन्स](https://hardhat.org/plugins/) समाकलित करणे खूप सोपे करते. आम्ही कॉन्ट्रॅक्ट डिप्लॉयमेंटसाठी [Ethers प्लगइन](https://hardhat.org/docs/plugins/official-plugins#hardhat-ethers) चा फायदा घेणार आहोत ([Ethers.js](https://github.com/ethers-io/ethers.js/) मध्ये काही अत्यंत स्वच्छ कॉन्ट्रॅक्ट डिप्लॉयमेंट पद्धती आहेत). + +आपल्या प्रोजेक्ट डिरेक्टरीमध्ये टाइप करा: + + ``` + npm install --save-dev @nomiclabs/hardhat-ethers ethers@^5.0.0 + ``` + +आम्ही आमच्या hardhat.config.js मध्ये पुढील पायरीवर ethers ची आवश्यकता देखील भासवू. + +## पायरी १३: hardhat.config.js अपडेट करा {#update-hardhat-config} + +आम्ही आतापर्यंत अनेक अवलंबित्व आणि प्लगइन्स जोडले आहेत, आता आम्हाला hardhat.config.js अपडेट करण्याची आवश्यकता आहे जेणेकरून आमच्या प्रोजेक्टला त्या सर्वांबद्दल माहिती असेल. + +तुमचे hardhat.config.js असे दिसण्यासाठी अपडेट करा: + +```js + /** + * @type import('hardhat/config').HardhatUserConfig + */ + require('dotenv').config(); + require("@nomiclabs/hardhat-ethers"); + const { API_URL, PRIVATE_KEY } = process.env; + module.exports = { + solidity: "0.8.1", + defaultNetwork: "sepolia", + networks: { + hardhat: {}, + sepolia: { + url: API_URL, + accounts: [`0x${PRIVATE_KEY}`] + } + }, + } +``` + +## पायरी १४: आमचा कॉन्ट्रॅक्ट संकलित करा {#compile-contract} + +आतापर्यंत सर्व काही कार्यरत आहे याची खात्री करण्यासाठी, चला आमचा कॉन्ट्रॅक्ट संकलित करूया. संकलित करण्याचे काम हे बिल्ट-इन हार्डहॅट कामांपैकी एक आहे. + +कमांड लाइनमधून चालवा: + + ``` + npx hardhat compile + ``` + +तुम्हाला कदाचित स्त्रोत फाइलमध्ये SPDX परवाना अभिज्ञापक प्रदान न केल्याबद्दल चेतावणी मिळू शकते, परंतु त्याबद्दल काळजी करण्याची गरज नाही — आशा आहे की इतर सर्व काही ठीक दिसेल! नसल्यास, तुम्ही नेहमी [Alchemy discord](https://discord.gg/u72VCg3) मध्ये संदेश पाठवू शकता. + +## पायरी १५: आमची उपयोजन स्क्रिप्ट लिहा {#write-deploy} + +आता आमचा कॉन्ट्रॅक्ट लिहिला आहे आणि आमची कॉन्फिगरेशन फाइल तयार आहे, आता आमच्या कॉन्ट्रॅक्टची उपयोजन स्क्रिप्ट लिहिण्याची वेळ आली आहे. + +`scripts/` फोल्डरवर नेव्हिगेट करा आणि `deploy.js` नावाची एक नवीन फाइल तयार करा, त्यात खालील सामग्री जोडा: + +```js +async function main() { + const MyNFT = await ethers.getContractFactory("MyNFT") + + // उपयोजन सुरू करा, एक प्रॉमिस परत करा जे कॉन्ट्रॅक्ट ऑब्जेक्टमध्ये रूपांतरित होईल + const myNFT = await MyNFT.deploy() + await myNFT.deployed() + console.log("कॉन्ट्रॅक्ट या पत्त्यावर उपयोजित केले आहे:", myNFT.address) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) +``` + +Hardhat त्यांच्या [कॉन्ट्रॅक्ट्स ट्यूटोरियल](https://hardhat.org/tutorial/testing-contracts.html#writing-tests) मध्ये या प्रत्येक कोड ओळी काय करते हे आश्चर्यकारकपणे स्पष्ट करते, आम्ही त्यांचे स्पष्टीकरण येथे स्वीकारले आहे. + + ``` + const MyNFT = await ethers.getContractFactory("MyNFT"); + ``` + +ethers.js मधील ContractFactory हे नवीन स्मार्ट कॉन्ट्रॅक्ट्स उपयोजित करण्यासाठी वापरले जाणारे एक ॲब्स्ट्रॅक्शन आहे, म्हणून MyNFT येथे आमच्या NFT कॉन्ट्रॅक्टच्या उदाहरणांसाठी एक फॅक्टरी आहे. hardhat-ethers प्लगइन वापरताना ContractFactory आणि Contract उदाहरणे डीफॉल्टनुसार पहिल्या स्वाक्षरीकर्त्याशी जोडलेली असतात. + + ``` + const myNFT = await MyNFT.deploy(); + ``` + +ContractFactory वर deploy() कॉल केल्याने उपयोजन सुरू होईल, आणि एक Promise परत करेल जो Contract मध्ये रिझॉल्व्ह होतो. हे ते ऑब्जेक्ट आहे ज्यामध्ये आमच्या प्रत्येक स्मार्ट कॉन्ट्रॅक्ट फंक्शनसाठी एक पद्धत आहे. + +## पायरी १६: आमचा कॉन्ट्रॅक्ट उपयोजित करा {#deploy-contract} + +आम्ही अखेरीस आमचा स्मार्ट कॉन्ट्रॅक्ट उपयोजित करण्यास तयार आहोत! तुमच्या प्रोजेक्ट डिरेक्टरीच्या रूटवर परत नेव्हिगेट करा आणि कमांड लाइनमध्ये चालवा: + + ``` + npx hardhat --network sepolia run scripts/deploy.js + ``` + +तुम्हाला त्यानंतर असे काहीतरी दिसेल: + + ``` + कॉन्ट्रॅक्ट या पत्त्यावर उपयोजित केले आहे: 0x4C5266cCc4b3F426965d2f51b6D910325a0E7650 + ``` + +जर आपण [Sepolia etherscan](https://sepolia.etherscan.io/) वर गेलो आणि आमच्या कॉन्ट्रॅक्ट पत्त्यासाठी शोधले तर आपल्याला ते यशस्वीरित्या उपयोजित झाल्याचे दिसेल. जर तुम्हाला ते लगेच दिसत नसेल, तर कृपया थोडा वेळ थांबा कारण यास काही वेळ लागू शकतो. व्यवहार असा काहीतरी दिसेल: + +![Etherscan वर तुमचा व्यवहार पत्ता पहा](./etherscan-sepoila-contract-creation.png) + +From पत्ता तुमच्या MetaMask खाते पत्त्याशी जुळला पाहिजे आणि To पत्त्यावर “Contract Creation” दिसेल. जर आपण व्यवहारात क्लिक केले तर, आपल्याला To फील्डमध्ये आमचा कॉन्ट्रॅक्ट पत्ता दिसेल: + +![Etherscan वर तुमचा कॉन्ट्रॅक्ट पत्ता पहा](./etherscan-sepolia-tx-details.png) + +व्वा! तुम्ही नुकताच तुमचा NFT स्मार्ट कॉन्ट्रॅक्ट Ethereum (टेस्टनेट) चेनवर उपयोजित केला आहे! + +पडद्यामागे काय चालले आहे हे समजून घेण्यासाठी, चला आमच्या [Alchemy dashboard](https://dashboard.alchemyapi.io/explorer) मधील Explorer टॅबवर नेव्हिगेट करूया. तुमच्याकडे अनेक Alchemy ॲप्स असल्यास, ॲपनुसार फिल्टर केल्याची खात्री करा आणि “MyNFT” निवडा. + +![Alchemy's Explorer डॅशबोर्डसह पडद्यामागे केलेले कॉल पहा](./alchemy-explorer-goerli.png) + +येथे तुम्हाला काही JSON-RPC कॉल्स दिसतील जे Hardhat/Ethers ने आमच्यासाठी पडद्यामागे केले होते जेव्हा आम्ही .deploy() फंक्शन कॉल केले होते. येथे दोन महत्त्वाचे कॉल म्हणजे [eth_sendRawTransaction](/developers/docs/apis/json-rpc/#eth_sendrawtransaction), जी प्रत्यक्षात आमचा स्मार्ट कॉन्ट्रॅक्ट Sepolia चेनवर लिहिण्याची विनंती आहे, आणि [eth_getTransactionByHash](/developers/docs/apis/json-rpc/#eth_gettransactionbyhash) जी हॅश दिल्यावर आमच्या व्यवहाराबद्दल माहिती वाचण्याची विनंती आहे (व्यवहार पाठवताना एक सामान्य नमुना). व्यवहार पाठवण्याबद्दल अधिक जाणून घेण्यासाठी, [Web3 वापरून व्यवहार पाठवण्यावरील](/developers/tutorials/sending-transactions-using-web3-and-alchemy/) हे ट्यूटोरियल पहा. + +या ट्यूटोरियलच्या भाग १ साठी एवढेच. [भाग २ मध्ये, आपण प्रत्यक्षात NFT मिंट करून आमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधू](/developers/tutorials/how-to-mint-an-nft/), आणि [भाग ३ मध्ये आम्ही तुम्हाला तुमच्या Ethereum वॉलेटमध्ये तुमचा NFT कसा पाहायचा हे दाखवू](/developers/tutorials/how-to-view-nft-in-metamask/)! diff --git a/public/content/translations/mr/developers/tutorials/interact-with-other-contracts-from-solidity/index.md b/public/content/translations/mr/developers/tutorials/interact-with-other-contracts-from-solidity/index.md new file mode 100644 index 00000000000..07feff64953 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/interact-with-other-contracts-from-solidity/index.md @@ -0,0 +1,179 @@ +--- +title: "Solidity मधून इतर कॉन्ट्रॅक्ट्सशी संवाद साधा" +description: "विद्यमान कॉन्ट्रॅक्टमधून स्मार्ट कॉन्ट्रॅक्ट कसे डिप्लॉय करावे आणि त्याच्याशी संवाद कसा साधावा" +author: "jdourlens" +tags: + [ + "स्मार्ट कॉन्ट्रॅक्ट", + "सॉलिडिटी", + "रीमिक्स", + "डिप्लॉयिंग", + "कंपोझेबिलिटी" + ] +skill: advanced +lang: mr +published: 2020-04-05 +source: EthereumDev +sourceUrl: https://ethereumdev.io/interact-with-other-contracts-from-solidity/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +मागील ट्यूटोरियल्समध्ये आपण बरेच काही शिकलो [तुमचा पहिला स्मार्ट कॉन्ट्रॅक्ट कसा डिप्लॉय करायचा](/developers/tutorials/deploying-your-first-smart-contract/) आणि त्यात काही वैशिष्ट्ये कशी जोडायची जसे की [मॉडिफायर्ससह ऍक्सेस नियंत्रित करणे](https://ethereumdev.io/organize-your-code-and-control-access-to-your-smart-contract-with-modifiers/) किंवा [Solidity मध्ये त्रुटी हाताळणे](https://ethereumdev.io/handle-errors-in-solidity-with-require-and-revert/). या ट्यूटोरियलमध्ये, आपण विद्यमान कॉन्ट्रॅक्टमधून स्मार्ट कॉन्ट्रॅक्ट कसे डिप्लॉय करावे आणि त्याच्याशी संवाद कसा साधावा हे शिकू. + +आम्ही एक कॉन्ट्रॅक्ट बनवू जो कोणालाही त्याचा स्वतःचा `Counter` स्मार्ट कॉन्ट्रॅक्ट तयार करण्यास सक्षम करेल, त्यासाठी एक फॅक्टरी तयार करून, त्याचे नाव `CounterFactory` असेल. सर्वप्रथम, आमच्या सुरुवातीच्या `Counter` स्मार्ट कॉन्ट्रॅक्टचा कोड येथे आहे: + +```solidity +pragma solidity 0.5.17; + +contract Counter { + + uint256 private _count; + address private _owner; + address private _factory; + + + modifier onlyOwner(address caller) { + require(caller == _owner, "You're not the owner of the contract"); + _; + } + + modifier onlyFactory() { + require(msg.sender == _factory, "You need to use the factory"); + _; + } + + constructor(address owner) public { + _owner = owner; + _factory = msg.sender; + } + + function getCount() public view returns (uint256) { + return _count; + } + + function increment(address caller) public onlyFactory onlyOwner(caller) { + _count++; + } + +} +``` + +लक्षात घ्या की फॅक्टरीचा ॲड्रेस आणि कॉन्ट्रॅक्ट मालकाचा ॲड्रेस यांचा मागोवा ठेवण्यासाठी आम्ही कॉन्ट्रॅक्ट कोडमध्ये थोडा बदल केला आहे. जेव्हा तुम्ही दुसऱ्या कॉन्ट्रॅक्टमधून कॉन्ट्रॅक्ट कोडला कॉल करता, तेव्हा msg.sender आमच्या कॉन्ट्रॅक्ट फॅक्टरीच्या ॲड्रेसचा संदर्भ देईल. हा **समजून घेण्यासाठी एक खरोखर महत्त्वाचा मुद्दा आहे** कारण इतर कॉन्ट्रॅक्ट्सशी संवाद साधण्यासाठी कॉन्ट्रॅक्ट वापरणे ही एक सामान्य प्रथा आहे. त्यामुळे, गुंतागुंतीच्या प्रकरणांमध्ये सेंडर कोण आहे याची आपण काळजी घेतली पाहिजे. + +यासाठी आम्ही एक `onlyFactory` मॉडिफायर देखील जोडला आहे जो हे सुनिश्चित करतो की स्टेट बदलणारे फंक्शन फक्त फॅक्टरीद्वारे कॉल केले जाऊ शकते, जे मूळ कॉलरला पॅरामीटर म्हणून पास करेल. + +आमच्या नवीन `CounterFactory` च्या आत, जे इतर सर्व काउंटर्स व्यवस्थापित करेल, आम्ही एक मॅपिंग जोडू जे मालकाला त्याच्या काउंटर कॉन्ट्रॅक्टच्या ॲड्रेसशी जोडेल: + +```solidity +mapping(address => Counter) _counters; +``` + +Ethereum मध्ये, मॅपिंग हे javascript मधील ऑब्जेक्ट्सच्या समतुल्य आहेत, ते A प्रकारच्या की ला B प्रकारच्या व्हॅल्यूवर मॅप करण्यास सक्षम करतात. या प्रकरणात आपण मालकाच्या ॲड्रेसला त्याच्या काउंटरच्या इन्स्टन्ससह मॅप करतो. + +कोणासाठीही नवीन काउंटर सुरू करणे असे दिसेल: + +```solidity + function createCounter() public { + require (_counters[msg.sender] == Counter(0)); + _counters[msg.sender] = new Counter(msg.sender); + } +``` + +आम्ही प्रथम तपासतो की त्या व्यक्तीकडे आधीपासूनच काउंटर आहे की नाही. जर त्याच्याकडे काउंटर नसेल, तर आम्ही त्याचा ॲड्रेस `Counter` कन्स्ट्रक्टरला पास करून एक नवीन काउंटर सुरू करतो आणि नव्याने तयार केलेला इन्स्टन्स मॅपिंगला नियुक्त करतो. + +विशिष्ट काउंटरची गणना मिळविण्यासाठी ते असे दिसेल: + +```solidity +function getCount(address account) public view returns (uint256) { + require (_counters[account] != Counter(0)); + return (_counters[account].getCount()); +} + +function getMyCount() public view returns (uint256) { + return (getCount(msg.sender)); +} +``` + +पहिले फंक्शन तपासते की दिलेल्या ॲड्रेससाठी काउंटर कॉन्ट्रॅक्ट अस्तित्वात आहे की नाही आणि नंतर इन्स्टन्समधून `getCount` पद्धत कॉल करते. दुसरे फंक्शन: `getMyCount` हे `getCount` फंक्शनला थेट msg.sender पास करण्यासाठी एक छोटा मार्ग आहे. + +`increment` फंक्शन बऱ्यापैकी समान आहे परंतु मूळ ट्रान्झॅक्शन सेंडरला `Counter` कॉन्ट्रॅक्टकडे पास करते: + +```solidity +function increment() public { + require (_counters[msg.sender] != Counter(0)); + Counter(_counters[msg.sender]).increment(msg.sender); + } +``` + +लक्षात घ्या की जर खूप वेळा कॉल केला गेला, तर आमचा काउंटर संभाव्यतः ओव्हरफ्लोचा बळी ठरू शकतो. या संभाव्य प्रकरणापासून संरक्षण करण्यासाठी आपण शक्य तितके [SafeMath लायब्ररी](https://ethereumdev.io/using-safe-math-library-to-prevent-from-overflows/) वापरली पाहिजे. + +आमचा कॉन्ट्रॅक्ट डिप्लॉय करण्यासाठी, तुम्हाला `CounterFactory` आणि `Counter` या दोन्हीचा कोड प्रदान करणे आवश्यक असेल. उदाहरणार्थ Remix मध्ये डिप्लॉय करताना तुम्हाला CounterFactory निवडण्याची आवश्यकता असेल. + +येथे संपूर्ण कोड आहे: + +```solidity +pragma solidity 0.5.17; + +contract Counter { + + uint256 private _count; + address private _owner; + address private _factory; + + + modifier onlyOwner(address caller) { + require(caller == _owner, "You're not the owner of the contract"); + _; + } + + modifier onlyFactory() { + require(msg.sender == _factory, "You need to use the factory"); + _; + } + + constructor(address owner) public { + _owner = owner; + _factory = msg.sender; + } + + function getCount() public view returns (uint256) { + return _count; + } + + function increment(address caller) public onlyFactory onlyOwner(caller) { + _count++; + } + +} + +contract CounterFactory { + + mapping(address => Counter) _counters; + + function createCounter() public { + require (_counters[msg.sender] == Counter(0)); + _counters[msg.sender] = new Counter(msg.sender); + } + + function increment() public { + require (_counters[msg.sender] != Counter(0)); + Counter(_counters[msg.sender]).increment(msg.sender); + } + + function getCount(address account) public view returns (uint256) { + require (_counters[account] != Counter(0)); + return (_counters[account].getCount()); + } + + function getMyCount() public view returns (uint256) { + return (getCount(msg.sender)); + } + +} +``` + +कम्पाइल केल्यानंतर, Remix डिप्लॉय विभागात तुम्ही डिप्लॉय करण्यासाठी फॅक्टरी निवडाल: + +![Remix मध्ये डिप्लॉय करण्यासाठी फॅक्टरी निवडणे](./counterfactory-deploy.png) + +त्यानंतर तुम्ही तुमच्या कॉन्ट्रॅक्ट फॅक्टरीसोबत खेळू शकता आणि बदलणारे मूल्य तपासू शकता. तुम्हाला स्मार्ट कॉन्ट्रॅक्टला वेगळ्या ॲड्रेसवरून कॉल करायचा असल्यास, तुम्हाला Remix च्या अकाउंट निवडीमध्ये ॲड्रेस बदलावा लागेल. diff --git a/public/content/translations/mr/developers/tutorials/ipfs-decentralized-ui/index.md b/public/content/translations/mr/developers/tutorials/ipfs-decentralized-ui/index.md new file mode 100644 index 00000000000..ad740cb5e49 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/ipfs-decentralized-ui/index.md @@ -0,0 +1,73 @@ +--- +title: "विकेंद्रित वापरकर्ता इंटरफेससाठी IPFS" +description: "हे ट्यूटोरियल वाचकांना dapp साठी वापरकर्ता इंटरफेस संग्रहित करण्यासाठी IPFS कसे वापरावे हे शिकवते. ॲप्लिकेशनचा डेटा आणि व्यावसायिक तर्क विकेंद्रित असले तरी, सेन्सॉरशिप प्रतिरोधक वापरकर्ता इंटरफेसशिवाय वापरकर्ते तरीही त्याचा ॲक्सेस गमावू शकतात." +author: Ori Pomerantz +tags: [ "ipfs" ] +skill: beginner +lang: mr +published: 2024-06-29 +--- + +तुम्ही एक अविश्वसनीय नवीन dapp लिहिले आहे. तुम्ही त्यासाठी एक [वापरकर्ता इंटरफेस](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) सुद्धा लिहिला आहे. पण आता तुम्हाला भीती वाटते की कोणीतरी तुमचा वापरकर्ता इंटरफेस बंद करून ते सेन्सॉर करण्याचा प्रयत्न करेल, जो क्लाउडमध्ये फक्त एक सर्व्हर आहे. या ट्यूटोरियलमध्ये तुम्ही तुमचा वापरकर्ता इंटरफेस **[इंटरप्लॅनेटरी फाइल सिस्टम (IPFS)](https://ipfs.tech/developers/)** वर टाकून सेन्सॉरशिप कशी टाळावी हे शिकाल, जेणेकरून भविष्यातील ॲक्सेससाठी कोणताही इच्छुक व्यक्ती ते सर्व्हरवर पिन करू शकेल. + +सर्व काम करण्यासाठी तुम्ही [Fleek](https://resources.fleek.xyz/docs/) सारखी तृतीय-पक्ष सेवा वापरू शकता. हे ट्यूटोरियल त्या लोकांसाठी आहे ज्यांना ते काय करत आहेत हे समजून घेण्यासाठी पुरेसे काम करायचे आहे, जरी ते अधिक काम असले तरी. + +## स्थानिक पातळीवर प्रारंभ करणे {#getting-started-locally} + +अनेक [तृतीय-पक्ष IPFS प्रदाते](https://docs.ipfs.tech/how-to/work-with-pinning-services/#use-a-third-party-pinning-service) आहेत, परंतु चाचणीसाठी स्थानिक पातळीवर IPFS चालवून प्रारंभ करणे सर्वोत्तम आहे. + +1. [IPFS वापरकर्ता इंटरफेस](https://docs.ipfs.tech/install/ipfs-desktop/#install-instructions) स्थापित करा. + +2. आपल्या वेबसाइटसह एक डिरेक्टरी तयार करा. जर तुम्ही [Vite](https://vite.dev/) वापरत असाल, तर हा कमांड वापरा: + + ```sh + pnpm vite build + ``` + +3. IPFS डेस्कटॉपमध्ये, **इम्पोर्ट > फोल्डर** वर क्लिक करा आणि मागील चरणात तयार केलेली डिरेक्टरी निवडा. + +4. तुम्ही नुकतेच अपलोड केलेले फोल्डर निवडा आणि **रि-नेम** वर क्लिक करा. त्याला अधिक अर्थपूर्ण नाव द्या. + +5. ते पुन्हा निवडा आणि **शेअर लिंक** वर क्लिक करा. URL क्लिपबोर्डवर कॉपी करा. लिंक `https://ipfs.io/ipfs/QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ` सारखी असेल. + +6. **स्टेटस** वर क्लिक करा. गेटवे ॲड्रेस पाहण्यासाठी **ॲडव्हान्स्ड** टॅब विस्तृत करा. उदाहरणार्थ, माझ्या सिस्टमवर ॲड्रेस `http://127.0.0.1:8080` आहे. + +7. तुमचा ॲड्रेस शोधण्यासाठी लिंक स्टेपमधील पाथ गेटवे ॲड्रेससह एकत्र करा. उदाहरणार्थ, वरील उदाहरणासाठी, URL `http://127.0.0.1:8080/ipfs/QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ` आहे. तुमची साइट पाहण्यासाठी ती URL ब्राउझरमध्ये उघडा. + +## अपलोड करणे {#uploading} + +तर आता तुम्ही स्थानिक पातळीवर फाइल्स सर्व्ह करण्यासाठी IPFS वापरू शकता, जे फार रोमांचक नाही. पुढील पायरी म्हणजे तुम्ही ऑफलाइन असताना त्यांना जगासाठी उपलब्ध करणे. + +अनेक सुप्रसिद्ध [पिनिंग सेवा](https://docs.ipfs.tech/concepts/persistence/#pinning-services) आहेत. त्यापैकी एक निवडा. तुम्ही कोणतीही सेवा वापरत असाल, तुम्हाला एक खाते तयार करणे आणि तुमच्या IPFS डेस्कटॉपमधील **कंटेंट आयडेंटिफायर (CID)** प्रदान करणे आवश्यक आहे. + +वैयक्तिकरित्या, मला [4EVERLAND](https://docs.4everland.org/storage/4ever-pin/guides) वापरण्यास सर्वात सोपे आढळले. त्यासाठी येथे दिशानिर्देश आहेत: + +1. [डॅशबोर्ड](https://dashboard.4everland.org/overview) वर ब्राउझ करा आणि आपल्या वॉलेटने लॉगिन करा. + +2. डाव्या साइडबारमध्ये **स्टोरेज > 4EVER पिन** वर क्लिक करा. + +3. **अपलोड > निवडलेला CID** वर क्लिक करा. तुमच्या कंटेंटला एक नाव द्या आणि IPFS डेस्कटॉपमधून CID द्या. सध्या CID ही एक स्ट्रिंग आहे जी `Qm` ने सुरू होते आणि त्यानंतर ४४ अक्षरे आणि अंक येतात जे [बेस-58 एन्कोडेड](https://medium.com/bootdotdev/base64-vs-base58-encoding-c25553ff4524) हॅश दर्शवतात, जसे की `QmaCuQ7yN6iyBjLmLGe8YiFuCwnePoKfVu6ue8vLBsLJQJ`, परंतु [ते बदलण्याची शक्यता आहे](https://docs.ipfs.tech/concepts/content-addressing/#version-1-v1). + +4. प्रारंभिक स्थिती **Queued** आहे. ते **Pinned** मध्ये बदलेपर्यंत रीलोड करा. + +5. लिंक मिळवण्यासाठी तुमच्या CID वर क्लिक करा. तुम्ही माझे ॲप्लिकेशन [येथे](https://bafybeifqka2odrne5b6l5guthqvbxu4pujko2i6rx2zslvr3qxs6u5o7im/) पाहू शकता. + +6. ते एका महिन्यापेक्षा जास्त काळ पिन करण्यासाठी तुम्हाला तुमचे खाते सक्रिय करण्याची आवश्यकता असू शकते. खाते सक्रिय करण्यासाठी सुमारे $1 खर्च येतो. जर तुम्ही ते बंद केले असेल, तर पुन्हा सक्रिय करण्यास सांगितले जाण्यासाठी लॉग आउट करा आणि पुन्हा लॉग इन करा. + +## IPFS मधून वापरणे {#using-from-ipfs} + +या क्षणी तुमच्याकडे एका केंद्रीकृत गेटवेची लिंक आहे जो तुमचा IPFS कंटेंट सर्व्ह करतो. थोडक्यात, तुमचा वापरकर्ता इंटरफेस थोडा सुरक्षित असू शकतो परंतु तो अजूनही सेन्सॉरशिप प्रतिरोधक नाही. खऱ्या सेन्सॉरशिप प्रतिकारासाठी, वापरकर्त्यांना IPFS [थेट ब्राउझरमधून](https://docs.ipfs.tech/install/ipfs-companion/#prerequisites) वापरणे आवश्यक आहे. + +एकदा तुम्ही ते स्थापित केले (आणि डेस्कटॉप IPFS कार्यरत आहे), की तुम्ही कोणत्याही साइटवर [/ipfs/``](https://any.site/ipfs/bafybeifqka2odrne5b6l5guthqvbxu4pujko2i6rx2zslvr3qxs6u5o7im) वर जाऊ शकता आणि तुम्हाला तो कंटेंट विकेंद्रित पद्धतीने मिळेल. + +## तोटे {#drawbacks} + +तुम्ही IPFS फाइल्स विश्वसनीयरित्या हटवू शकत नाही, त्यामुळे जोपर्यंत तुम्ही तुमचा वापरकर्ता इंटरफेस सुधारित करत आहात, तोपर्यंत तो एकतर केंद्रीकृत ठेवणे, किंवा [इंटरप्लॅनेटरी नेम सिस्टम (IPNS)](https://docs.ipfs.tech/concepts/ipns/#mutability-in-ipfs), जी IPFS च्या वर म्युटेबिलिटी प्रदान करते, वापरणे कदाचित सर्वोत्तम आहे. अर्थात, म्युटेबल असलेली कोणतीही गोष्ट सेन्सॉर केली जाऊ शकते, IPNS च्या बाबतीत, ज्या व्यक्तीकडे संबंधित खासगी की आहे त्यावर दबाव टाकून. + +याव्यतिरिक्त, काही पॅकेजेसना IPFS सह समस्या आहे, त्यामुळे जर तुमची वेबसाइट खूप गुंतागुंतीची असेल तर हा एक चांगला उपाय असू शकत नाही. आणि अर्थातच, सर्व्हर इंटिग्रेशनवर अवलंबून असलेली कोणतीही गोष्ट फक्त क्लायंट साइड IPFS वर ठेवून विकेंद्रित केली जाऊ शकत नाही. + +## निष्कर्ष {#conclusion} + +जसे Ethereum तुम्हाला तुमच्या dapp चे डेटाबेस आणि व्यावसायिक तर्काचे पैलू विकेंद्रित करू देते, तसेच IPFS तुम्हाला वापरकर्ता इंटरफेस विकेंद्रित करू देते. हे तुम्हाला तुमच्या dapp विरुद्ध आणखी एक हल्ला वेक्टर बंद करू देते. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md b/public/content/translations/mr/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md new file mode 100644 index 00000000000..9a39cf0437f --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/index.md @@ -0,0 +1,111 @@ +--- +title: "create-eth-app सह तुमच्या dapp फ्रंटएंड डेव्हलपमेंटला सुरुवात करा" +description: "create-eth-app कसे वापरावे आणि त्याची वैशिष्ट्ये याचा आढावा" +author: "Markus Waas" +tags: + [ + "frontend", + "javascript", + "ethers.js", + "द ग्राफ", + "defi" + ] +skill: beginner +lang: mr +published: 2020-04-27 +source: soliditydeveloper.com +sourceUrl: https://soliditydeveloper.com/create-eth-app +--- + +मागील वेळी आपण [Solidity च्या मोठ्या चित्राकडे](https://soliditydeveloper.com/solidity-overview-2020) पाहिले आणि [create-eth-app](https://github.com/PaulRBerg/create-eth-app) चा आधीच उल्लेख केला आहे. आता तुम्हाला ते कसे वापरावे, कोणती वैशिष्ट्ये एकत्रित केली आहेत आणि त्यावर विस्तार कसा करावा याबद्दल अतिरिक्त कल्पना कळतील. [Sablier](http://sablier.com/) चे संस्थापक, पॉल रझवान बर्ग यांनी सुरू केलेले, हे ॲप तुमच्या फ्रंटएंड डेव्हलपमेंटला सुरुवात करेल आणि निवडण्यासाठी अनेक पर्यायी इंटिग्रेशन्ससह येते. + +## इन्स्टॉलेशन {#installation} + +इन्स्टॉलेशनसाठी Yarn 0.25 किंवा उच्च (`npm install yarn --global`) आवश्यक आहे. हे चालवण्याइतके सोपे आहे: + +```bash +yarn create eth-app my-eth-app +cd my-eth-app +yarn react-app:start +``` + +हे पडद्यामागे [create-react-app](https://github.com/facebook/create-react-app) वापरत आहे. तुमचे ॲप पाहण्यासाठी, `http://localhost:3000/` उघडा. जेव्हा तुम्ही प्रोडक्शनमध्ये तैनात (deploy) करण्यास तयार असाल, तेव्हा yarn build सह एक मिनिफाइड बंडल तयार करा. हे होस्ट करण्याचा एक सोपा मार्ग म्हणजे [Netlify](https://www.netlify.com/). तुम्ही एक GitHub रेपो तयार करू शकता, ते Netlify मध्ये जोडू शकता, बिल्ड कमांड सेटअप करू शकता आणि तुमचे काम झाले! तुमचे ॲप होस्ट केले जाईल आणि सर्वांसाठी वापरण्यायोग्य असेल. आणि हे सर्व विनामूल्य. + +## वैशिष्ट्ये {#features} + +### React आणि create-react-app {#react--create-react-app} + +सर्वप्रथम ॲपचे हृदय: React आणि _create-react-app_ सह येणारी सर्व अतिरिक्त वैशिष्ट्ये. जर तुम्हाला Ethereum एकत्रित करायचे नसेल तर फक्त याचा वापर करणे हा एक उत्तम पर्याय आहे. [React](https://react.dev/) स्वतः इंटरॲक्टिव्ह UI तयार करणे खूप सोपे करते. हे [Vue](https://vuejs.org/) इतके नवशिक्यांसाठी सोपे नसेल, परंतु ते अजूनही बहुतेक वापरले जाते, त्यात अधिक वैशिष्ट्ये आहेत आणि सर्वात महत्त्वाचे म्हणजे निवडण्यासाठी हजारो अतिरिक्त लायब्ररी आहेत. _create-react-app_ सह सुरुवात करणे देखील खूप सोपे होते आणि त्यात समाविष्ट आहे: + +- React, JSX, ES6, TypeScript, Flow सिंटॅक्स सपोर्ट. +- ES6 च्या पलीकडे भाषेतील अतिरिक्त गोष्टी जसे की ऑब्जेक्ट स्प्रेड ऑपरेटर. +- ऑटोप्रिफिक्स्ड CSS, त्यामुळे तुम्हाला -webkit- किंवा इतर प्रिफिक्सेसची गरज नाही. +- कव्हरेज रिपोर्टिंगसाठी अंगभूत सपोर्टसह एक जलद इंटरॲक्टिव्ह युनिट टेस्ट रनर. +- एक लाइव्ह डेव्हलपमेंट सर्व्हर जो सामान्य चुकांबद्दल चेतावणी देतो. +- प्रोडक्शनसाठी JS, CSS आणि इमेजेस बंडल करण्यासाठी हॅश आणि सोर्समॅपसह एक बिल्ड स्क्रिप्ट. + +विशेषतः _create-eth-app_ नवीन [hooks effects](https://legacy.reactjs.org/docs/hooks-effect.html) चा वापर करत आहे. शक्तिशाली, तरीही खूप लहान तथाकथित फंक्शनल कंपोनेंट्स लिहिण्याची एक पद्धत. _create-eth-app_ मध्ये ते कसे वापरले जातात यासाठी Apollo बद्दल खालील विभाग पहा. + +### Yarn Workspaces {#yarn-workspaces} + +[Yarn Workspaces](https://classic.yarnpkg.com/en/docs/workspaces/) तुम्हाला अनेक पॅकेजेस ठेवण्याची परवानगी देतात, परंतु त्या सर्वांना रूट फोल्डरमधून व्यवस्थापित करणे आणि `yarn install` वापरून एकाच वेळी सर्वांसाठी डिपेंडन्सीज इन्स्टॉल करणे शक्य होते. हे विशेषतः लहान अतिरिक्त पॅकेजेससाठी अर्थपूर्ण आहे, जसे की स्मार्ट कॉन्ट्रॅक्ट्स ॲड्रेस/ABI व्यवस्थापन (तुम्ही कोणते स्मार्ट कॉन्ट्रॅक्ट्स कुठे तैनात केले आणि त्यांच्याशी कसे संवाद साधावा याबद्दलची माहिती) किंवा ग्राफ इंटिग्रेशन, दोन्ही `create-eth-app` चे भाग आहेत. + +### ethers.js {#ethersjs} + +जरी [Web3](https://docs.web3js.org/) अजूनही बहुतेक वापरले जात असले तरी, [ethers.js](https://docs.ethers.io/) ला गेल्या वर्षात एक पर्याय म्हणून खूप अधिक पसंती मिळत आहे आणि तेच _create-eth-app_ मध्ये एकत्रित केलेले आहे. तुम्ही यासोबत काम करू शकता, ते Web3 मध्ये बदलू शकता किंवा [ethers.js v5](https://docs.ethers.org/v5/) वर अपग्रेड करण्याचा विचार करू शकता जे जवळजवळ बीटाच्या बाहेर आहे. + +### द ग्राफ {#the-graph} + +[Restful API](https://restfulapi.net/) च्या तुलनेत [GraphQL](https://graphql.org/) डेटा हाताळण्याचा एक पर्यायी मार्ग आहे. Restful Apis च्या तुलनेत त्याचे अनेक फायदे आहेत, विशेषतः विकेंद्रित ब्लॉकचेन डेटासाठी. जर तुम्हाला यामागील कारणांमध्ये स्वारस्य असेल, तर [GraphQL Will Power the Decentralized Web](https://medium.com/graphprotocol/graphql-will-power-the-decentralized-web-d7443a69c69a) पहा. + +सामान्यतः तुम्ही थेट तुमच्या स्मार्ट कॉन्ट्रॅक्टमधून डेटा मिळवता. सर्वात नवीन व्यापाराची (trade) वेळ वाचायची आहे का? फक्त `MyContract.methods.latestTradeTime().call()` कॉल करा, जे Ethereum नोडमधून तुमच्या dapp मध्ये डेटा आणते. पण जर तुम्हाला शेकडो वेगवेगळ्या डेटा पॉइंट्सची गरज असेल तर? यामुळे नोडवर शेकडो डेटा फेचेस होतील, प्रत्येक वेळी [RTT](https://wikipedia.org/wiki/Round-trip_delay_time) ची आवश्यकता असेल, ज्यामुळे तुमचा dapp मंद आणि अकार्यक्षम होईल. एक पर्याय तुमच्या कॉन्ट्रॅक्टमधील एक फेचर कॉल फंक्शन असू शकते जे एकाच वेळी अनेक डेटा परत करते. तरीही, हे नेहमीच आदर्श नसते. + +आणि मग तुम्हाला ऐतिहासिक डेटामध्ये देखील स्वारस्य असू शकते. तुम्हाला केवळ शेवटच्या व्यापाराची (trade) वेळच नाही, तर तुम्ही स्वतः केलेल्या सर्व व्यापारांच्या वेळा देखील जाणून घ्यायच्या आहेत. _create-eth-app_ सबग्राफ पॅकेज वापरा, [डॉक्युमेंटेशन](https://thegraph.com/docs/en/subgraphs/developing/creating/starting-your-subgraph) वाचा आणि ते तुमच्या स्वतःच्या कॉन्ट्रॅक्ट्सनुसार जुळवून घ्या. जर तुम्ही लोकप्रिय स्मार्ट कॉन्ट्रॅक्ट्स शोधत असाल, तर कदाचित आधीपासूनच एक सबग्राफ उपलब्ध असेल. [सबग्राफ एक्सप्लोरर](https://thegraph.com/explorer/) पहा. + +एकदा तुमच्याकडे सबग्राफ आला की, तो तुम्हाला तुमच्या dapp मध्ये एक साधी क्वेरी लिहिण्याची परवानगी देतो जी तुम्हाला आवश्यक असलेला सर्व महत्त्वाचा ब्लॉकचेन डेटा, ऐतिहासिक डेटासह, मिळवते, फक्त एकच फेच आवश्यक आहे. + +### Apollo {#apollo} + +[Apollo Boost](https://www.apollographql.com/docs/react/get-started/) इंटिग्रेशनमुळे तुम्ही तुमच्या React dapp मध्ये ग्राफ सहजपणे एकत्रित करू शकता. विशेषतः [React hooks आणि Apollo](https://www.apollographql.com/blog/apollo-client-now-with-react-hooks) वापरताना, डेटा मिळवणे हे तुमच्या कंपोनेंटमध्ये एकच GraphQL क्वेरी लिहिण्याइतके सोपे आहे: + +```js +const { loading, error, data } = useQuery(myGraphQlQuery) + +React.useEffect(() => { + if (!loading && !error && data) { + console.log({ data }) + } +}, [loading, error, data]) +``` + +## टेम्प्लेट्स {#templates} + +याव्यतिरिक्त, तुम्ही अनेक वेगवेगळ्या टेम्प्लेट्समधून निवडू शकता. आतापर्यंत तुम्ही Aave, Compound, UniSwap किंवा sablier इंटिग्रेशन वापरू शकता. ते सर्व महत्त्वाचे सेवा स्मार्ट कॉन्ट्रॅक्ट ॲड्रेसेस आणि तयार सबग्राफ इंटिग्रेशन्स जोडतात. फक्त क्रिएशन कमांडमध्ये `yarn create eth-app my-eth-app --with-template aave` याप्रमाणे टेम्पलेट जोडा. + +### Aave {#aave} + +[Aave](https://aave.com/) हे एक विकेंद्रित पैसे कर्ज देणारे मार्केट आहे. ठेवीदार निष्क्रिय उत्पन्न मिळवण्यासाठी मार्केटला तरलता प्रदान करतात, तर कर्जदार तारणाचा वापर करून कर्ज घेऊ शकतात. Aave चे एक अद्वितीय वैशिष्ट्य म्हणजे [फ्लॅश लोन्स](https://aave.com/docs/developers/flash-loans) जे तुम्हाला कोणत्याही तारणाशिवाय पैसे कर्ज घेण्याची परवानगी देतात, जोपर्यंत तुम्ही एकाच ट्रांजेक्शनमध्ये कर्ज परत करता. हे उपयुक्त ठरू शकते, उदाहरणार्थ, आर्बिट्रेज ट्रेडिंगवर अतिरिक्त रोख रक्कम मिळवण्यासाठी. + +ट्रेड केलेले टोकन जे तुम्हाला व्याज मिळवून देतात त्यांना _aTokens_ म्हणतात. + +जेव्हा तुम्ही _create-eth-app_ सह Aave एकत्रित करणे निवडता, तेव्हा तुम्हाला एक [सबग्राफ इंटिग्रेशन](https://docs.aave.com/developers/getting-started/using-graphql) मिळेल. Aave 'The Graph' वापरते आणि तुम्हाला [Ropsten](https://thegraph.com/explorer/subgraph/aave/protocol-ropsten) आणि [Mainnet](https://thegraph.com/explorer/subgraph/aave/protocol) वर [रॉ](https://thegraph.com/explorer/subgraph/aave/protocol-raw) किंवा [फॉर्मेटेड](https://thegraph.com/explorer/subgraph/aave/protocol) स्वरूपात अनेक वापरण्यास-तयार सबग्राफ्स आधीच प्रदान करते. + +![Aave फ्लॅश लोन मीम – \"हो, जर मी माझे फ्लॅश लोन 1 ट्रांजेक्शनपेक्षा जास्त काळ ठेवू शकलो असतो, तर ते उत्तम झाले असते\"](./flashloan-meme.png) + +### Compound {#compound} + +[Compound](https://compound.finance/) हे Aave सारखेच आहे. या इंटिग्रेशनमध्ये नवीन [Compound v2 Subgraph](https://medium.com/graphprotocol/https-medium-com-graphprotocol-compound-v2-subgraph-highlight-a5f38f094195) आधीच समाविष्ट आहे. येथे व्याज मिळवणारे टोकन आश्चर्यकारकपणे _cTokens_ म्हणून ओळखले जातात. + +### Uniswap {#uniswap} + +[Uniswap](https://uniswap.exchange/) हे एक विकेंद्रित एक्सचेंज (DEX) आहे. तरलता प्रदाते (Liquidity providers) व्यापाराच्या दोन्ही बाजूंसाठी आवश्यक टोकन किंवा ईथर प्रदान करून शुल्क मिळवू शकतात. हे मोठ्या प्रमाणावर वापरले जाते आणि त्यामुळे त्यात टोकनच्या विस्तृत श्रेणीसाठी सर्वाधिक तरलता आहे. तुम्ही ते तुमच्या dapp मध्ये सहजपणे एकत्रित करू शकता, उदाहरणार्थ, वापरकर्त्यांना त्यांचे ETH, DAI साठी स्वॅप (swap) करण्याची परवानगी देण्यासाठी. + +दुर्दैवाने, हे लिहिण्याच्या वेळी इंटिग्रेशन केवळ Uniswap v1 साठी आहे आणि नुकत्याच रिलीज झालेल्या [v2](https://uniswap.org/blog/uniswap-v2/) साठी नाही. + +### Sablier {#sablier} + +[Sablier](https://sablier.com/) वापरकर्त्यांना स्ट्रीमिंग मनी पेमेंट्सची परवानगी देते. एकाच पगाराच्या दिवसाऐवजी, तुम्हाला प्राथमिक सेटअप नंतर पुढील प्रशासनाशिवाय तुमचे पैसे सतत मिळतात. या इंटिग्रेशनमध्ये त्याचा [स्वतःचा सबग्राफ](https://thegraph.com/explorer/subgraph/sablierhq/sablier) समाविष्ट आहे. + +## पुढे काय? {#whats-next} + +जर तुम्हाला _create-eth-app_ बद्दल प्रश्न असतील, तर [Sablier कम्युनिटी सर्व्हर](https://discord.gg/bsS8T47) वर जा, जिथे तुम्ही _create-eth-app_ च्या लेखकांशी संपर्क साधू शकता. पुढील काही पहिल्या पायऱ्या म्हणून तुम्ही [Material UI](https://mui.com/material-ui/) सारखे UI फ्रेमवर्क एकत्रित करू शकता, तुम्हाला खरोखर आवश्यक असलेल्या डेटासाठी GraphQL क्वेरी लिहू शकता आणि डिप्लॉयमेंट सेटअप करू शकता. diff --git a/public/content/translations/mr/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md b/public/content/translations/mr/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md new file mode 100644 index 00000000000..4ecebda98fe --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/learn-foundational-ethereum-topics-with-sql/index.md @@ -0,0 +1,269 @@ +--- +title: "SQL सह Ethereum चे मूलभूत विषय शिका" +description: "हे ट्युटोरियल वाचकांना स्ट्रक्चर्ड क्वेरी लँग्वेज (SQL) सह ऑनचेन डेटा क्वेरी करून व्यवहार, ब्लॉक्स आणि गॅस यासह मूलभूत Ethereum संकल्पना समजून घेण्यास मदत करते." +author: "Paul Apivat" +tags: [ "SQL", "क्वेरी करणे", "व्यवहार" ] +skill: beginner +lang: mr +published: 2021-05-11 +source: paulapivat.com +sourceUrl: https://paulapivat.com/post/query_ethereum/ +--- + +बरेच Ethereum ट्युटोरिअल्स डेव्हलपर्ससाठी असतात, परंतु डेटा विश्लेषकांसाठी किंवा क्लायंट किंवा नोड न चालवता ऑनचेन डेटा पाहू इच्छिणाऱ्या लोकांसाठी शैक्षणिक संसाधनांची कमतरता आहे. + +हे ट्युटोरियल वाचकांना [Dune Analytics](https://dune.com/) द्वारे प्रदान केलेल्या इंटरफेसद्वारे स्ट्रक्चर्ड क्वेरी लँग्वेज (SQL) सह ऑनचेन डेटा क्वेरी करून व्यवहार, ब्लॉक्स आणि गॅस यासह मूलभूत Ethereum संकल्पना समजून घेण्यास मदत करते. + +ऑनचेन डेटा आपल्याला Ethereum, नेटवर्क आणि कंप्यूटिंग पॉवरसाठी एक अर्थव्यवस्था म्हणून समजून घेण्यास मदत करू शकतो आणि आज Ethereum समोर असलेल्या आव्हानांना (उदा., वाढत्या गॅस किमती) आणि अधिक महत्त्वाचे म्हणजे, स्केलिंग सोल्यूशन्सच्या आसपासच्या चर्चा समजून घेण्यासाठी आधार म्हणून काम केले पाहिजे. + +### व्यवहार {#transactions} + +Ethereum वरील वापरकर्त्याचा प्रवास वापरकर्ता-नियंत्रित खाते किंवा ETH बॅलन्स असलेल्या एंटिटीच्या आरंभीकरणाने सुरू होतो. दोन प्रकारचे खाते आहेत - वापरकर्ता-नियंत्रित किंवा स्मार्ट कॉन्ट्रॅक्ट ([ethereum.org](/developers/docs/accounts/) पहा). + +कोणतेही खाते [Etherscan](https://etherscan.io/) किंवा [Blockscout](https://eth.blockscout.com/) सारख्या ब्लॉक एक्सप्लोररवर पाहिले जाऊ शकते. ब्लॉक एक्सप्लोरर हे Ethereum च्या डेटासाठी एक पोर्टल आहेत. ते रिअल-टाइममध्ये ब्लॉक्स, व्यवहार, मायनर्स, खाती आणि इतर ऑनचेन अ‍ॅक्टिव्हिटीवरील डेटा प्रदर्शित करतात ([येथे](/developers/docs/data-and-analytics/block-explorers/) पहा). + +तथापि, बाह्य ब्लॉक एक्सप्लोरर्सद्वारे प्रदान केलेल्या माहितीचा ताळमेळ साधण्यासाठी वापरकर्ता थेट डेटा क्वेरी करू शकतो. [Dune Analytics](https://dune.com/) SQL चे काही ज्ञान असलेल्या कोणालाही ही क्षमता प्रदान करते. + +संदर्भासाठी, Ethereum फाउंडेशन (EF) साठी स्मार्ट कॉन्ट्रॅक्ट खाते [Blockscout](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) वर पाहिले जाऊ शकते. + +एक गोष्ट लक्षात घेण्यासारखी आहे की EF च्या खात्यासह सर्व खात्यांचा एक सार्वजनिक पत्ता असतो जो व्यवहार पाठवण्यासाठी आणि प्राप्त करण्यासाठी वापरला जाऊ शकतो. + +Etherscan वरील खाते बॅलन्समध्ये नियमित व्यवहार आणि अंतर्गत व्यवहार समाविष्ट आहेत. अंतर्गत व्यवहार, नावाप्रमाणे, _वास्तविक_ व्यवहार नाहीत जे चेनची स्थिती बदलतात. ते एका कॉन्ट्रॅक्टची अंमलबजावणी करून सुरू केलेले मूल्य हस्तांतरण आहेत ([स्त्रोत](https://ethereum.stackexchange.com/questions/3417/how-to-get-contract-internal-transactions)). अंतर्गत व्यवहारांना सही नसल्यामुळे, ते ब्लॉकचेनवर **समाविष्ट** केले जात नाहीत आणि Dune Analytics सह क्वेरी केले जाऊ शकत नाहीत. + +म्हणून, हे ट्युटोरियल नियमित व्यवहारांवर लक्ष केंद्रित करेल. हे अशा प्रकारे क्वेरी केले जाऊ शकते: + +```sql +WITH temp_table AS ( +SELECT + hash, + block_number, + block_time, + "from", + "to", + value / 1e18 AS ether, + gas_used, + gas_price / 1e9 AS gas_price_gwei +FROM ethereum."transactions" +WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' +ORDER BY block_time DESC +) +SELECT + hash, + block_number, + block_time, + "from", + "to", + ether, + (gas_used * gas_price_gwei) / 1e9 AS txn_fee +FROM temp_table +``` + +हे Etherscan च्या व्यवहार पृष्ठावर प्रदान केलेल्या माहितीसारखीच माहिती देईल. तुलनेसाठी, येथे दोन स्रोत आहेत: + +#### Etherscan {#etherscan} + +![](./etherscan_view.png) + +[Blockscout वर EF चे कॉन्ट्रॅक्ट पृष्ठ.](https://eth.blockscout.com/address/0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe) + +#### ड्युन अॅनालिटिक्स {#dune-analytics} + +![](./dune_view.png) + +आपण डॅशबोर्ड [येथे](https://dune.com/paulapivat/Learn-Ethereum) शोधू शकता. क्वेरी पाहण्यासाठी टेबलवर क्लिक करा (वर देखील पहा). + +### व्यवहारांचे विघटन {#breaking_down_transactions} + +सबमिट केलेल्या व्यवहारामध्ये अनेक माहितीचे तुकडे समाविष्ट असतात, ज्यात ([स्त्रोत](/developers/docs/transactions/)) खालील गोष्टींचा समावेश आहे: + +- **प्राप्तकर्ता**: प्राप्त करणारा पत्ता ("to" म्हणून क्वेरी केलेला) +- **सही**: प्रेषकाची खाजगी की व्यवहारावर सही करत असली तरी, आपण SQL सह जो क्वेरी करू शकतो तो म्हणजे प्रेषकाचा सार्वजनिक पत्ता ("from"). +- **मूल्य**: ही हस्तांतरित ETH ची रक्कम आहे (`ether` स्तंभ पहा). +- **डेटा**: हा हॅश केलेला अनियंत्रित डेटा आहे (`data` स्तंभ पहा) +- **gasLimit** – व्यवहाराद्वारे वापरल्या जाऊ शकणाऱ्या गॅस युनिट्सची कमाल रक्कम. गॅसची युनिट्स संगणकीय पायऱ्या दर्शवतात +- **maxPriorityFeePerGas** - मायनरला टिप म्हणून समाविष्ट करण्यासाठी गॅसची कमाल रक्कम +- **maxFeePerGas** - व्यवहारासाठी देय करण्यास इच्छुक असलेल्या गॅसची कमाल रक्कम (baseFeePerGas आणि maxPriorityFeePerGas सह) + +आपण Ethereum फाउंडेशनच्या सार्वजनिक पत्त्यावर झालेल्या व्यवहारांसाठी या विशिष्ट माहितीचे तुकडे क्वेरी करू शकतो: + +```sql +SELECT + "to", + "from", + value / 1e18 AS ether, + data, + gas_limit, + gas_price / 1e9 AS gas_price_gwei, + gas_used, + ROUND(((gas_used / gas_limit) * 100),2) AS gas_used_pct +FROM ethereum."transactions" +WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' +ORDER BY block_time DESC +``` + +### ब्लॉक्स {#blocks} + +प्रत्येक व्यवहार Ethereum व्हर्च्युअल मशीनची ([EVM](/developers/docs/evm/)) स्थिती बदलेल ([स्त्रोत](/developers/docs/transactions/)). व्यवहार नेटवर्कवर प्रसारित केले जातात जेणेकरून ते सत्यापित केले जातील आणि ब्लॉकमध्ये समाविष्ट केले जातील. प्रत्येक व्यवहार एका ब्लॉक क्रमांकाशी संबंधित असतो. डेटा पाहण्यासाठी, आपण एक विशिष्ट ब्लॉक क्रमांक क्वेरी करू शकतो: 12396854 (हे लिहित असताना Ethereum फाउंडेशनच्या व्यवहारांमधील सर्वात अलीकडील ब्लॉक, 11/5/21). + +शिवाय, जेव्हा आपण पुढील दोन ब्लॉक्सची क्वेरी करतो, तेव्हा आपण पाहू शकतो की प्रत्येक ब्लॉकमध्ये मागील ब्लॉकचा हॅश असतो (म्हणजे, पॅरेंट हॅश), जे ब्लॉकचेन कसे तयार होते हे दर्शवते. + +प्रत्येक ब्लॉकमध्ये त्याच्या पॅरेंट ब्लॉकचा संदर्भ असतो. हे खाली `hash` आणि `parent_hash` स्तंभांदरम्यान दर्शविले आहे ([स्त्रोत](/developers/docs/blocks/)): + +![parent_hash](./parent_hash.png) + +Dune Analytics वरील [क्वेरी](https://dune.com/queries/44856/88292) येथे आहे: + +```sql +SELECT + time, + number, + hash, + parent_hash, + nonce +FROM ethereum."blocks" +WHERE "number" = 12396854 OR "number" = 12396855 OR "number" = 12396856 +LIMIT 10 +``` + +आपण वेळ, ब्लॉक क्रमांक, डिफिकल्टी, हॅश, पॅरेंट हॅश आणि नॉन्स क्वेरी करून ब्लॉकची तपासणी करू शकतो. + +ही क्वेरी केवळ _व्यवहारांची सूची_ कव्हर करत नाही, ज्यासाठी खाली स्वतंत्र क्वेरी आणि _स्टेट रूट_ आवश्यक आहे. एक पूर्ण किंवा आकाईव्हल नोड सर्व व्यवहार आणि स्टेट ट्रान्झिशन्स संग्रहित करेल, ज्यामुळे क्लायंट्सना कोणत्याही वेळी चेनची स्थिती क्वेरी करण्याची परवानगी मिळते. यासाठी मोठ्या स्टोरेज जागेची आवश्यकता असल्याने, आपण चेन डेटा स्टेट डेटामधून वेगळा करू शकतो: + +- चेन डेटा (ब्लॉक्सची, व्यवहारांची सूची) +- स्टेट डेटा (प्रत्येक व्यवहाराच्या स्टेट ट्रान्झिशनचा परिणाम) + +स्टेट रूट नंतरच्या प्रकारात येते आणि तो _गर्भित_ डेटा आहे (ऑनचेन संग्रहित नाही), तर चेन डेटा स्पष्ट असतो आणि तो स्वतः चेनवर संग्रहित असतो ([स्त्रोत](https://ethereum.stackexchange.com/questions/359/where-is-the-state-data-stored)). + +या ट्युटोरियलसाठी, आपण Dune Analytics द्वारे SQL सह क्वेरी _केल्या जाऊ शकणाऱ्या_ ऑनचेन डेटावर लक्ष केंद्रित करणार आहोत. + +वर सांगितल्याप्रमाणे, प्रत्येक ब्लॉकमध्ये व्यवहारांची सूची असते, आपण एका विशिष्ट ब्लॉकसाठी फिल्टर करून हे क्वेरी करू शकतो. आपण सर्वात अलीकडील ब्लॉक, 12396854, वापरून पाहू: + +```sql +SELECT * FROM ethereum."transactions" +WHERE block_number = 12396854 +ORDER BY block_time DESC` +``` + +Dune वरील SQL आउटपुट येथे आहे: + +![](./list_of_txn.png) + +चेनमध्ये हा एकच ब्लॉक जोडल्याने Ethereum व्हर्च्युअल मशीनची ([EVM](/developers/docs/evm/)) स्थिती बदलते. कधीकधी डझनभर, तर कधी शेकडो व्यवहार एकाच वेळी सत्यापित केले जातात. या विशिष्ट बाबतीत, 222 व्यवहार समाविष्ट केले गेले होते. + +प्रत्यक्षात किती यशस्वी झाले हे पाहण्यासाठी, यशस्वी व्यवहार मोजण्यासाठी आपण आणखी एक फिल्टर जोडू: + +```sql +WITH temp_table AS ( + SELECT * FROM ethereum."transactions" + WHERE block_number = 12396854 AND success = true + ORDER BY block_time DESC +) +SELECT + COUNT(success) AS num_successful_txn +FROM temp_table +``` + +ब्लॉक 12396854 साठी, एकूण 222 व्यवहारांपैकी, 204 यशस्वीरित्या सत्यापित केले गेले: + +![](./successful_txn.png) + +व्यवहारांच्या विनंत्या प्रति सेकंद डझनभर वेळा येतात, परंतु ब्लॉक्स अंदाजे दर 15 सेकंदांनी एकदा कमिट केले जातात ([स्त्रोत](/developers/docs/blocks/)). + +अंदाजे दर 15 सेकंदांनी एक ब्लॉक तयार होतो हे पाहण्यासाठी, आपण एका दिवसातील सेकंदांची संख्या (86400) 15 ने भागू शकतो जेणेकरून प्रति दिन तयार होणाऱ्या ब्लॉक्सची अंदाजे सरासरी संख्या (~ 5760) मिळेल. + +प्रति दिन तयार झालेल्या Ethereum ब्लॉक्सचा चार्ट (2016 - आतापर्यंत) आहे: + +![](./daily_blocks.png) + +या कालावधीत दररोज तयार होणाऱ्या ब्लॉक्सची सरासरी संख्या ~5,874 आहे: + +![](./avg_daily_blocks.png) + +क्वेरीज आहेत: + +```sql +# 2016 पासून दररोज तयार झालेल्या ब्लॉक्सची संख्या व्हिज्युअलाइझ करण्यासाठी क्वेरी + +SELECT + DATE_TRUNC('day', time) AS dt, + COUNT(*) AS block_count +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 + +# प्रति दिन तयार झालेल्या ब्लॉक्सची सरासरी संख्या + +WITH temp_table AS ( +SELECT + DATE_TRUNC('day', time) AS dt, + COUNT(*) AS block_count +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 +) +SELECT + AVG(block_count) AS avg_block_count +FROM temp_table +``` + +2016 पासून प्रति दिन तयार होणाऱ्या ब्लॉक्सची सरासरी संख्या 5,874 आहे, जी त्या संख्येपेक्षा थोडी जास्त आहे. पर्यायाने, 86400 सेकंदांना 5874 सरासरी ब्लॉक्सने भागल्यास 14.7 सेकंद किंवा अंदाजे दर 15 सेकंदांनी एक ब्लॉक येतो. + +### गॅस {#gas} + +ब्लॉक्स आकारात मर्यादित असतात. कमाल ब्लॉक आकार डायनॅमिक आहे आणि नेटवर्कच्या मागणीनुसार 12,500,000 आणि 25,000,000 युनिट्स दरम्यान बदलतो. डिस्क स्पेस आणि गती आवश्यकतांच्या बाबतीत पूर्ण नोड्सवर ताण टाकणाऱ्या अनियंत्रित मोठ्या ब्लॉक आकारांना प्रतिबंधित करण्यासाठी मर्यादा आवश्यक आहेत ([स्त्रोत](/developers/docs/blocks/)). + +ब्लॉक गॅस मर्यादेची संकल्पना मांडण्याचा एक मार्ग म्हणजे त्याला व्यवहारांना बॅच करण्यासाठी उपलब्ध ब्लॉक स्पेसचा **पुरवठा** म्हणून विचार करणे. ब्लॉक गॅस मर्यादा 2016 पासून आजपर्यंत क्वेरी आणि व्हिज्युअलाइझ केली जाऊ शकते: + +![](./avg_gas_limit.png) + +```sql +SELECT + DATE_TRUNC('day', time) AS dt, + AVG(gas_limit) AS avg_block_gas_limit +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 +``` + +नंतर Ethereum चेनवर केलेल्या कंप्यूटिंगसाठी (उदा., व्यवहार पाठवणे, स्मार्ट कॉन्ट्रॅक्ट कॉल करणे, NFT मिंट करणे) दररोज वापरलेला वास्तविक गॅस आहे. ही उपलब्ध Ethereum ब्लॉक स्पेसची **मागणी** आहे: + +![](./daily_gas_used.png) + +```sql +SELECT + DATE_TRUNC('day', time) AS dt, + AVG(gas_used) AS avg_block_gas_used +FROM ethereum."blocks" +GROUP BY dt +OFFSET 1 +``` + +**मागणी आणि पुरवठा** कसे जुळतात हे पाहण्यासाठी आपण हे दोन चार्ट एकत्र ठेवू शकतो: + +![gas_demand_supply](./gas_demand_supply.png) + +म्हणून आपण उपलब्ध पुरवठ्याच्या तुलनेत Ethereum ब्लॉक स्पेसच्या मागणीचे एक कार्य म्हणून गॅस किमती समजू शकतो. + +शेवटी, आपण Ethereum चेनसाठी सरासरी दैनिक गॅस किमती क्वेरी करू इच्छितो, तथापि, असे केल्याने क्वेरीला विशेषतः जास्त वेळ लागेल, म्हणून आपण Ethereum फाउंडेशनद्वारे प्रति व्यवहारासाठी भरलेल्या गॅसच्या सरासरी रकमेसाठी आपली क्वेरी फिल्टर करू. + +![](./ef_daily_gas.png) + +आपण गेल्या काही वर्षांपासून Ethereum फाउंडेशनच्या पत्त्यावर केलेल्या सर्व व्यवहारांसाठी भरलेल्या गॅस किमती पाहू शकतो. येथे क्वेरी आहे: + +```sql +SELECT + block_time, + gas_price / 1e9 AS gas_price_gwei, + value / 1e18 AS eth_sent +FROM ethereum."transactions" +WHERE "to" = '\xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe' +ORDER BY block_time DESC +``` + +### सारांश {#summary} + +या ट्युटोरियलद्वारे, आपण मूलभूत Ethereum संकल्पना आणि Ethereum ब्लॉकचेन कसे कार्य करते हे ऑनचेन डेटा क्वेरी करून आणि त्याची अनुभूती घेऊन समजून घेतो. + +या ट्युटोरियलमध्ये वापरलेला सर्व कोड असलेला डॅशबोर्ड [येथे](https://dune.com/paulapivat/Learn-Ethereum) आढळू शकतो. + +web3 एक्सप्लोर करण्यासाठी डेटाच्या अधिक वापरासाठी [मला Twitter वर शोधा](https://twitter.com/paulapivat). diff --git a/public/content/translations/mr/developers/tutorials/logging-events-smart-contracts/index.md b/public/content/translations/mr/developers/tutorials/logging-events-smart-contracts/index.md new file mode 100644 index 00000000000..e6fd515cb0d --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/logging-events-smart-contracts/index.md @@ -0,0 +1,68 @@ +--- +title: "इव्हेंटसह स्मार्ट कॉन्ट्रॅक्टमधून डेटा लॉग करणे" +description: "स्मार्ट कॉन्ट्रॅक्ट इव्हेंटचा परिचय आणि डेटा लॉग करण्यासाठी तुम्ही त्यांचा कसा वापर करावा" +author: "jdourlens" +tags: + [ + "स्मार्ट कॉन्ट्रॅक्ट", + "रीमिक्स", + "सॉलिडिटी", + "इव्हेंट्स" + ] +skill: intermediate +lang: mr +published: 2020-04-03 +source: EthereumDev +sourceUrl: https://ethereumdev.io/logging-data-with-events/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +Solidity मध्ये, [इव्हेंट्स](/developers/docs/smart-contracts/anatomy/#events-and-logs) हे पाठवलेले सिग्नल आहेत जे स्मार्ट कॉन्ट्रॅक्ट्स फायर करू शकतात. Dapps, किंवा इथेरियम JSON-RPC API शी जोडलेली कोणतीही गोष्ट, हे इव्हेंट्स ऐकू शकते आणि त्यानुसार कार्य करू शकते. एखाद्या इव्हेंटला इंडेक्स देखील केले जाऊ शकते जेणेकरून इव्हेंटचा इतिहास नंतर शोधण्यायोग्य होईल. + +## इव्हेंट्स {#events} + +हा लेख लिहिण्याच्या वेळी इथेरियम ब्लॉकचेनवरील सर्वात सामान्य इव्हेंट म्हणजे ट्रान्सफर इव्हेंट जो ERC20 टोकन्सद्वारे उत्सर्जित केला जातो जेव्हा कोणी टोकन ट्रान्सफर करतो. + +```solidity +event Transfer(address indexed from, address indexed to, uint256 value); +``` + +इव्हेंट सिग्नेचर कॉन्ट्रॅक्ट कोडमध्ये घोषित केले जाते आणि emit कीवर्डसह उत्सर्जित केले जाऊ शकते. उदाहरणार्थ, ट्रान्सफर इव्हेंट लॉग करतो की कोणी ट्रान्सफर पाठवले (_from_), कोणाला (_to_) आणि किती टोकन ट्रान्सफर केले गेले (_value_). + +आता आपण आपल्या काउंटर स्मार्ट कॉन्ट्रॅक्टवर परत येऊ आणि प्रत्येक वेळी मूल्य बदलल्यावर लॉग करण्याचे ठरवू. हा कॉन्ट्रॅक्ट डिप्लॉय करण्यासाठी नसून, तो विस्तारित करून दुसरा कॉन्ट्रॅक्ट तयार करण्यासाठी आधार म्हणून काम करतो: याला अ‍ॅबस्ट्रॅक्ट कॉन्ट्रॅक्ट म्हणतात. आपल्या काउंटरच्या उदाहरणात, ते असे दिसेल: + +```solidity +pragma solidity 0.5.17; + +contract Counter { + + event ValueChanged(uint oldValue, uint256 newValue); + + // गणनेची संख्या ठेवण्यासाठी अनसाईन्ड इंट प्रकारातील खाजगी व्हेरिएबल + uint256 private count = 0; + + // आमच्या काउंटरमध्ये वाढ करणारे फंक्शन + function increment() public { + count += 1; + emit ValueChanged(count - 1, count); + } + + // गणनेचे मूल्य मिळवण्यासाठी गेटर + function getCount() public view returns (uint256) { + return count; + } + +} +``` + +हे लक्षात घ्या: + +- **ओळ ५**: आपण आपला इव्हेंट आणि त्यात काय आहे, म्हणजे जुने मूल्य आणि नवीन मूल्य, हे घोषित करतो. + +- **ओळ १३**: जेव्हा आपण आपल्या count व्हेरिएबलमध्ये वाढ करतो, तेव्हा आपण इव्हेंट उत्सर्जित करतो. + +जर आपण आता कॉन्ट्रॅक्ट डिप्लॉय केला आणि इन्क्रिमेंट फंक्शनला कॉल केला, तर आपल्याला दिसेल की, जर तुम्ही लॉग नावाच्या अ‍ॅरेमधील नवीन ट्रान्झॅक्शनवर क्लिक केले तर Remix ते आपोआप प्रदर्शित करेल. + +![Remix स्क्रीनशॉट](./remix-screenshot.png) + +तुमचे स्मार्ट कॉन्ट्रॅक्ट डीबग करण्यासाठी लॉग खूप उपयुक्त आहेत, पण ते तेव्हाही महत्त्वाचे आहेत जेव्हा तुम्ही वेगवेगळ्या लोकांद्वारे वापरले जाणारे ॲप्लिकेशन्स तयार करता आणि त्यांच्यामुळे तुमचा स्मार्ट कॉन्ट्रॅक्ट कसा वापरला जातो हे ट्रॅक करून समजून घेण्यासाठी विश्लेषण करणे सोपे होते. ट्रान्झॅक्शनद्वारे तयार केलेले लॉग लोकप्रिय ब्लॉक एक्सप्लोररमध्ये प्रदर्शित केले जातात आणि तुम्ही उदाहरणार्थ, विशिष्ट इव्हेंट्स ऐकण्यासाठी आणि ते घडल्यावर कारवाई करण्यासाठी ऑफचेन स्क्रिप्ट्स तयार करण्याकरिता त्यांचा वापर करू शकता. diff --git a/public/content/translations/mr/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md b/public/content/translations/mr/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md new file mode 100644 index 00000000000..a452168879c --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/merkle-proofs-for-offline-data-integrity/index.md @@ -0,0 +1,246 @@ +--- +title: "ऑफलाइन डेटा अखंडतेसाठी मर्कल प्रुफ्स" +description: "जो डेटा मुख्यतः ऑफचेन संग्रहित केला जातो, त्या डेटाची ऑनचेन अखंडता सुनिश्चित करणे" +author: Ori Pomerantz +tags: [ "स्टोरेज" ] +skill: advanced +lang: mr +published: 2021-12-30 +--- + +## प्रस्तावना {#introduction} + +आदर्शपणे, आम्ही सर्वकाही इथेरियम स्टोरेजमध्ये संग्रहित करू इच्छितो, जे हजारो संगणकांवर संग्रहित आहे आणि त्यात अत्यंत उच्च उपलब्धता (डेटा सेन्सॉर केला जाऊ शकत नाही) आणि अखंडता (डेटा अनधिकृतपणे सुधारित केला जाऊ शकत नाही) आहे, परंतु ३२-बाईटचा शब्द संग्रहित करण्यासाठी साधारणपणे २०,००० गॅस खर्च येतो. मी हे लिहित असताना, तो खर्च $६.६० च्या बरोबरीचा आहे. प्रति बाइट २१ सेंट्स दराने हे अनेक उपयोगांसाठी खूप महाग आहे. + +ही समस्या सोडवण्यासाठी इथेरियम इकोसिस्टमने [विकेंद्रित पद्धतीने डेटा संग्रहित करण्याचे अनेक पर्यायी मार्ग](/developers/docs/storage/) विकसित केले आहेत. सहसा त्यात उपलब्धता आणि किंमत यांच्यात तडजोड असते. तथापि, अखंडतेची सहसा खात्री दिली जाते. + +या लेखात तुम्ही [मर्कल प्रुफ्स](https://computersciencewiki.org/index.php/Merkle_proof) वापरून, ब्लॉकचेनवर डेटा संग्रहित न करता डेटाची अखंडता **कशी** सुनिश्चित करायची हे शिकाल. + +## हे कसे कार्य करते? {#how-does-it-work} + +सिद्धांतानुसार, आपण फक्त डेटाचा हॅश ऑनचेन संग्रहित करू शकतो आणि आवश्यक असलेल्या व्यवहारांमध्ये सर्व डेटा पाठवू शकतो. तथापि, हे अजूनही खूप महाग आहे. एका व्यवहारात एका बाइट डेटासाठी सुमारे १६ गॅस खर्च येतो, जे सध्या सुमारे अर्धा सेंट किंवा प्रति किलोबाइट सुमारे $५ आहे. $५००० प्रति मेगाबाइट दराने, डेटा हॅश करण्याच्या अतिरिक्त खर्चाशिवायही, हे अनेक उपयोगांसाठी अजूनही खूप महाग आहे. + +यावर उपाय म्हणजे डेटाच्या वेगवेगळ्या उपसंचांना वारंवार हॅश करणे, म्हणजे ज्या डेटाची तुम्हाला पाठवण्याची गरज नाही त्यासाठी तुम्ही फक्त एक हॅश पाठवू शकता. तुम्ही हे मर्कल ट्री वापरून करता, ही एक ट्री डेटा संरचना आहे जिथे प्रत्येक नोड त्याच्या खालील नोड्सचा हॅश असतो: + +![मर्कल ट्री](tree.png) + +रूट हॅश हा एकमेव भाग आहे जो ऑनचेन संग्रहित करणे आवश्यक आहे. एखादे विशिष्ट मूल्य सिद्ध करण्यासाठी, तुम्ही ते सर्व हॅश प्रदान करता जे रूट मिळवण्यासाठी त्याच्यासोबत एकत्र करणे आवश्यक आहे. उदाहरणार्थ, `C` सिद्ध करण्यासाठी तुम्ही `D`, `H(A-B)`, आणि `H(E-H)` प्रदान करता. + +![C च्या मूल्याचा पुरावा](proof-c.png) + +## अंमलबजावणी {#implementation} + +[नमुना कोड येथे प्रदान केला आहे](https://github.com/qbzzt/merkle-proofs-for-offline-data-integrity). + +### ऑफचेन कोड {#offchain-code} + +या लेखात आम्ही ऑफचेन गणनेसाठी JavaScript वापरतो. बहुतेक विकेंद्रित ऍप्लिकेशन्समध्ये त्यांचा ऑफचेन घटक JavaScript मध्ये असतो. + +#### मर्कल रूट तयार करणे {#creating-the-merkle-root} + +प्रथम, आपल्याला चेनला मर्कल रूट प्रदान करणे आवश्यक आहे. + +```javascript +const ethers = require("ethers") +``` + +[आम्ही इथर्स पॅकेजमधील हॅश फंक्शन वापरतो](https://docs.ethers.io/v5/api/utils/hashing/#utils-keccak256). + +```javascript +// कच्चा डेटा ज्याची अखंडता आपल्याला तपासायची आहे. पहिले दोन बाइट्स +// हे एक वापरकर्ता ओळखकर्ता आहेत, आणि शेवटचे दोन बाइट्स सध्या वापरकर्त्याच्या मालकीच्या +// टोकन्सची रक्कम आहेत. +const dataArray = [ + 0x0bad0010, 0x60a70020, 0xbeef0030, 0xdead0040, 0xca110050, 0x0e660060, + 0xface0070, 0xbad00080, 0x060d0091, +] +``` + +प्रत्येक एंट्रीला एकाच २५६-बिट पूर्णांकामध्ये एन्कोड केल्याने, उदाहरणार्थ JSON वापरण्यापेक्षा कमी वाचनीय कोड तयार होतो. तथापि, याचा अर्थ कॉन्ट्रॅक्टमध्ये डेटा पुनर्प्राप्त करण्यासाठी खूपच कमी प्रक्रिया करावी लागते, ज्यामुळे गॅस खर्च खूपच कमी होतो. [तुम्ही ऑनचेन JSON वाचू शकता](https://github.com/chrisdotn/jsmnSol), पण टाळता येत असल्यास ही एक वाईट कल्पना आहे. + +```javascript +// BigInts म्हणून हॅश मूल्यांचा ॲरे +const hashArray = dataArray +``` + +या प्रकरणात आमचा डेटा सुरुवातीलाच २५६-बिट मूल्यांचा आहे, त्यामुळे कोणत्याही प्रक्रियेची आवश्यकता नाही. जर आपण स्ट्रिंगसारखी अधिक गुंतागुंतीची डेटा संरचना वापरली, तर हॅशचा ॲरे मिळवण्यासाठी आपल्याला आधी डेटा हॅश करण्याची खात्री करावी लागेल. लक्षात घ्या की हे असे आहे कारण वापरकर्त्यांना इतर वापरकर्त्यांची माहिती कळली तरी आम्हाला काही फरक पडत नाही. अन्यथा आम्हाला हॅश करावे लागले असते जेणेकरून वापरकर्ता १ ला वापरकर्ता ० चे मूल्य कळणार नाही, वापरकर्ता २ ला वापरकर्ता ३ चे मूल्य कळणार नाही, इत्यादी. + +```javascript +// हॅश फंक्शनला अपेक्षित असलेली स्ट्रिंग आणि आपण इतरत्र वापरत असलेला +// BigInt यांच्यात रूपांतरित करा. +const hash = (x) => + BigInt(ethers.utils.keccak256("0x" + x.toString(16).padStart(64, 0))) +``` + +इथर्स हॅश फंक्शनला हेक्साडेसिमल संख्येसह, जसे की `0x60A7`, JavaScript स्ट्रिंग मिळण्याची अपेक्षा असते, आणि ते त्याच संरचनेसह दुसऱ्या स्ट्रिंगसह प्रतिसाद देते. तथापि, उर्वरित कोडसाठी `BigInt` वापरणे सोपे आहे, म्हणून आम्ही हेक्साडेसिमल स्ट्रिंगमध्ये रूपांतरित करून पुन्हा परत येतो. + +```javascript +// एका जोडीचा सिमेट्रिकल हॅश जेणेकरून क्रम उलटला तरी आपल्याला फरक पडणार नाही. +const pairHash = (a, b) => hash(hash(a) ^ hash(b)) +``` + +हे फंक्शन सिमेट्रिकल आहे (a [xor](https://en.wikipedia.org/wiki/Exclusive_or) b चा हॅश). याचा अर्थ असा की जेव्हा आपण मर्कल प्रूफ तपासतो, तेव्हा प्रूफमधील मूल्य गणन केलेल्या मूल्याच्या आधी किंवा नंतर ठेवायचे की नाही याची काळजी करण्याची आपल्याला गरज नाही. मर्कल प्रूफची तपासणी ऑनचेन केली जाते, त्यामुळे तिथे आपल्याला जितके कमी काम करावे लागेल तितके चांगले. + +चेतावणी: +क्रिप्टोग्राफी दिसते त्यापेक्षा कठीण आहे. +या लेखाच्या सुरुवातीच्या आवृत्तीत `hash(a^b)` हे हॅश फंक्शन होते. +ती एक **वाईट** कल्पना होती कारण याचा अर्थ असा होता की जर तुम्हाला `a` आणि `b` ची वैध मूल्ये माहित असतील, तर तुम्ही कोणतेही इच्छित `a'` मूल्य सिद्ध करण्यासाठी `b' = a^b^a'` वापरू शकता. +या फंक्शनसह, तुम्हाला `b'` असे गणन करावे लागेल की `hash(a') ^ hash(b')` हे एका ज्ञात मूल्याच्या (रूटच्या मार्गावरील पुढील शाखा) बरोबर असेल, जे खूप कठीण आहे. + +```javascript +// एखादी विशिष्ट शाखा रिकामी आहे, त्यात मूल्य नाही हे दर्शविणारे +// मूल्य +const empty = 0n +``` + +जेव्हा मूल्यांची संख्या दोनाचा पूर्णांक घात नसते, तेव्हा आपल्याला रिकाम्या शाखा हाताळण्याची आवश्यकता असते. हा प्रोग्राम हे करण्यासाठी शून्य प्लेसहोल्डर म्हणून ठेवतो. + +![शाखा नसलेली मर्कल ट्री](merkle-empty-hash.png) + +```javascript +// प्रत्येक जोडीचा क्रमाने हॅश घेऊन हॅश ॲरेच्या ट्रीमध्ये एक स्तर वर गणना +// करा +const oneLevelUp = (inputArray) => { + var result = [] + var inp = [...inputArray] // इनपुट ओव्हरराइट करणे टाळण्यासाठी // आवश्यक असल्यास एक रिक्त मूल्य जोडा (आम्हाला सर्व लीफ्सची // जोडी बनवणे आवश्यक आहे) + + if (inp.length % 2 === 1) inp.push(empty) + + for (var i = 0; i < inp.length; i += 2) + result.push(pairHash(inp[i], inp[i + 1])) + + return result +} // वनलेव्हलअप +``` + +हे फंक्शन चालू लेअरवरील मूल्यांच्या जोड्या हॅश करून मर्कल ट्रीमध्ये एक स्तर "वर चढते". लक्षात घ्या की ही सर्वात कार्यक्षम अंमलबजावणी नाही, आपण इनपुट कॉपी करणे टाळून लूपमध्ये योग्य ठिकाणी `hashEmpty` जोडू शकलो असतो, परंतु हा कोड वाचनीयतेसाठी ऑप्टिमाइझ केलेला आहे. + +```javascript +const getMerkleRoot = (inputArray) => { + var result + + result = [...inputArray] // जोपर्यंत फक्त एक मूल्य शिल्लक राहत नाही तोपर्यंत ट्रीमध्ये वर चढा, तो // रूट आहे. // // जर लेअरमध्ये विषम संख्येने नोंदी असतील तर // oneLevelUp मधील कोड एक रिक्त मूल्य जोडतो, म्हणून जर आपल्याकडे, उदाहरणार्थ, // १० लीफ्स असतील तर दुसऱ्या लेअरमध्ये ५ शाखा, तिसऱ्यात ३ // शाखा, चौथ्यात २ आणि रूट पाचवा असेल + + while (result.length > 1) result = oneLevelUp(result) + + return result[0] +} +``` + +रूट मिळवण्यासाठी, जोपर्यंत फक्त एकच मूल्य शिल्लक राहत नाही तोपर्यंत वर चढा. + +#### मर्कल प्रूफ तयार करणे {#creating-a-merkle-proof} + +मर्कल रूट परत मिळवण्यासाठी, सिद्ध केल्या जात असलेल्या मूल्यासोबत हॅश करावयाची मूल्ये म्हणजे मर्कल प्रूफ. सिद्ध करण्याचे मूल्य अनेकदा इतर डेटावरून उपलब्ध असते, म्हणून मी ते कोडचा भाग म्हणून देण्याऐवजी स्वतंत्रपणे देणे पसंत करतो. + +```javascript +// मर्कल प्रूफमध्ये ज्या नोंदींच्या सूचीसोबत +// हॅश करायचे आहे त्यांचे मूल्य असते. कारण आपण एक सिमेट्रिकल हॅश फंक्शन वापरतो, आपल्याला प्रूफ सत्यापित करण्यासाठी आयटमच्या स्थानाची +// गरज नाही, फक्त ते तयार करण्यासाठी गरज आहे +const getMerkleProof = (inputArray, n) => { +    var result = [], currentLayer = [...inputArray], currentN = n + +    // जोपर्यंत आपण शीर्षावर पोहोचत नाही +    while (currentLayer.length > 1) { +        // विषम लांबीचे लेअर्स नाहीत +        if (currentLayer.length % 2) +            currentLayer.push(empty) + +        result.push(currentN % 2 +               // जर currentN विषम असेल, तर प्रूफमध्ये त्याच्या आधीचे मूल्य जोडा +            ? currentLayer[currentN-1] +               // जर ते सम असेल, तर त्याच्या नंतरचे मूल्य जोडा +            : currentLayer[currentN+1]) + +``` + +आपण `(v[0],v[1])`, `(v[2],v[3])`, इत्यादींना हॅश करतो. म्हणून सम मूल्यांसाठी आपल्याला पुढील मूल्य आणि विषम मूल्यांसाठी मागील मूल्य आवश्यक आहे. + +```javascript +        // पुढील वरच्या लेअरवर जा +        currentN = Math.floor(currentN/2) +        currentLayer = oneLevelUp(currentLayer) +    }   // जोपर्यंत currentLayer.length > 1 + +    return result +}   // गेटमर्कलप्रूफ +``` + +### ऑनचेन कोड {#onchain-code} + +शेवटी, आपल्याकडे प्रूफ तपासणारा कोड आहे. ऑनचेन कोड [Solidity](https://docs.soliditylang.org/en/v0.8.11/) मध्ये लिहिलेला आहे. येथे ऑप्टिमायझेशन अधिक महत्त्वाचे आहे कारण गॅस तुलनेने महाग असतो. + +```solidity +//SPDX-License-Identifier: Public Domain +pragma solidity ^0.8.0; + +import "hardhat/console.sol"; +``` + +मी हे [Hardhat डेव्हलपमेंट एन्व्हायर्नमेंट](https://hardhat.org/) वापरून लिहिले आहे, जे आपल्याला डेव्हलपमेंट करताना [Solidity मधून कन्सोल आउटपुट](https://hardhat.org/docs/cookbook/debug-logs) मिळविण्याची परवानगी देते. + +```solidity + +contract MerkleProof { +    uint merkleRoot; + +    function getRoot() public view returns (uint) { +      return merkleRoot; +    } + +    // अत्यंत असुरक्षित, प्रोडक्शन कोडमध्ये या फंक्शनचा ऍक्सेस +    // कठोरपणे मर्यादित असणे आवश्यक आहे, शक्यतो एका +    // मालकापुरता +    function setRoot(uint _merkleRoot) external { +      merkleRoot = _merkleRoot; +    }   // सेट रूट +``` + +मर्कल रूटसाठी सेट आणि गेट फंक्शन्स. प्रोडक्शन सिस्टममध्ये प्रत्येकाला मर्कल रूट अपडेट करू देणे ही एक _अत्यंत वाईट कल्पना_ आहे. नमुना कोड सोपा राहावा यासाठी मी येथे असे करत आहे. **ज्या सिस्टममध्ये डेटा अखंडता खरोखरच महत्त्वाची आहे तिथे असे करू नका**. + +```solidity +    function hash(uint _a) internal pure returns(uint) { +      return uint(keccak256(abi.encode(_a))); +    } + +    function pairHash(uint _a, uint _b) internal pure returns(uint) { +      return hash(hash(_a) ^ hash(_b)); +    } +``` + +हे फंक्शन एक पेअर हॅश तयार करते. हे `hash` आणि `pairHash` साठीच्या JavaScript कोडचे फक्त Solidity भाषांतर आहे. + +**टीप:** हे वाचनीयतेसाठी ऑप्टिमायझेशनचे आणखी एक उदाहरण आहे. [फंक्शनच्या व्याख्येनुसार](https://www.tutorialspoint.com/solidity/solidity_cryptographic_functions.htm), डेटा [`bytes32`](https://docs.soliditylang.org/en/v0.5.3/types.html#fixed-size-byte-arrays) मूल्य म्हणून संग्रहित करणे आणि रूपांतरणे टाळणे शक्य होऊ शकते. + +```solidity +    // एक मर्कल प्रूफ सत्यापित करा +    function verifyProof(uint _value, uint[] calldata _proof) +        public view returns (bool) { +      uint temp = _value; +      uint i; + +      for(i=0; i<_proof.length; i++) { +        temp = pairHash(temp, _proof[i]); +      } + +      return temp == merkleRoot; +    } + +}  // मार्कलप्रूफ +``` + +गणितीय नोटेशनमध्ये मर्कल प्रूफ पडताळणी अशी दिसते: `H(proof_n, H(proof_n-1, H(proof_n-2, ...` H(proof_1, H(proof_0, value))...)))`. हा कोड त्याची अंमलबजावणी करतो. + +## मर्कल प्रूफ आणि रोलअप्स एकत्र बसत नाहीत {#merkle-proofs-and-rollups} + +मर्कल प्रूफ्स [रोलअप्स](/developers/docs/scaling/#rollups) सह चांगले काम करत नाहीत. याचे कारण असे आहे की रोलअप्स सर्व व्यवहार डेटा L1 वर लिहितात, परंतु L2 वर प्रक्रिया करतात. एका व्यवहारासोबत मर्कल प्रूफ पाठवण्याचा खर्च प्रति लेअर सरासरी ६३८ गॅस येतो (सध्या कॉल डेटामधील बाइट शून्य नसल्यास १६ गॅस आणि शून्य असल्यास ४ गॅस खर्च येतो). जर आपल्याकडे १०२४ शब्दांचा डेटा असेल, तर मर्कल प्रूफसाठी दहा लेअर्स लागतात, किंवा एकूण ६३८० गॅस लागतो. + +उदाहरणार्थ [Optimism](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m) कडे पाहिल्यास, L1 गॅस लिहिण्याचा खर्च सुमारे १०० gwei आणि L2 गॅसचा खर्च ०.००१ gwei येतो (ही सामान्य किंमत आहे, गर्दीनुसार ती वाढू शकते). म्हणजे एका L1 गॅसच्या खर्चात आपण L2 प्रक्रियेवर एक लाख गॅस खर्च करू शकतो. आपण स्टोरेज ओव्हरराइट करत नाही असे गृहीत धरल्यास, याचा अर्थ असा की एका L1 गॅसच्या किमतीत आपण L2 वर स्टोरेजमध्ये सुमारे पाच शब्द लिहू शकतो. एकाच मर्कल प्रूफसाठी आपण संपूर्ण १०२४ शब्द स्टोरेजमध्ये लिहू शकतो (सुरुवातीला ते व्यवहारात प्रदान करण्याऐवजी ऑनचेन गणन केले जाऊ शकतात असे गृहीत धरून) आणि तरीही बहुतेक गॅस शिल्लक राहील. + +## निष्कर्ष {#conclusion} + +वास्तविक जीवनात तुम्ही कदाचित स्वतःहून मर्कल ट्री कधीही लागू करणार नाही. अशा सुप्रसिद्ध आणि ऑडिट केलेल्या लायब्ररीज आहेत ज्या तुम्ही वापरू शकता आणि सर्वसाधारणपणे, क्रिप्टोग्राफिक प्रिमिटिव्ह स्वतःहून लागू न करणेच उत्तम आहे. पण मला आशा आहे की आता तुम्हाला मर्कल प्रूफ्स अधिक चांगल्या प्रकारे समजले असतील आणि ते केव्हा वापरण्यायोग्य आहेत हे तुम्ही ठरवू शकाल. + +लक्षात घ्या की मर्कल प्रूफ्स _अखंडता_ जपतात, पण ते _उपलब्धता_ जपत नाहीत. जर डेटा स्टोरेजने प्रवेश नाकारण्याचा निर्णय घेतला आणि तुम्ही त्यांना ऍक्सेस करण्यासाठी मर्कल ट्री तयार करू शकत नसाल, तर तुमची मालमत्ता इतर कोणीही घेऊ शकत नाही हे जाणून घेणे हे एक छोटेसे सांत्वन आहे. त्यामुळे IPFS सारख्या काही प्रकारच्या विकेंद्रित स्टोरेजसोबत मर्कल ट्री वापरणे उत्तम आहे. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md b/public/content/translations/mr/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md new file mode 100644 index 00000000000..4fd6d93a088 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/monitoring-geth-with-influxdb-and-grafana/index.md @@ -0,0 +1,151 @@ +--- +title: "InfluxDB आणि Grafana वापरून Geth चे निरीक्षण करणे" +description: "कार्यप्रदर्शनाचा मागोवा घेण्यासाठी आणि समस्या ओळखण्यासाठी InfluxDB आणि Grafana वापरून तुमच्या Geth नोडसाठी देखरेख प्रणाली सेट करा." +author: "Mario Havel" +tags: [ "क्लायंट्स", "नोड्स" ] +skill: intermediate +lang: mr +published: 2021-01-13 +--- + +हे ट्युटोरियल तुम्हाला तुमच्या Geth नोडसाठी देखरेख प्रणाली सेट करण्यात मदत करेल जेणेकरून तुम्ही त्याच्या कार्यप्रदर्शनास अधिक चांगल्या प्रकारे समजू शकाल आणि संभाव्य समस्या ओळखू शकाल. + +## पूर्वतयारी {#prerequisites} + +- तुम्ही आधीपासूनच Geth चे एक इन्स्टन्स चालवत असले पाहिजे. +- बहुतेक पायऱ्या आणि उदाहरणे लिनक्स वातावरणासाठी आहेत, मूलभूत टर्मिनल ज्ञान उपयुक्त ठरेल. +- Geth च्या मेट्रिक्सच्या संचाचा हा व्हिडिओ आढावा पहा: [पीटर सिझिलागी द्वारे इथेरियम इन्फ्रास्ट्रक्चरचे निरीक्षण](https://www.youtube.com/watch?v=cOBab8IJMYI). + +## निरीक्षण स्टॅक {#monitoring-stack} + +एक इथेरियम क्लायंट खूप डेटा गोळा करतो जो कालानुक्रमे डेटाबेसच्या स्वरूपात वाचला जाऊ शकतो. निरीक्षण सोपे करण्यासाठी, तुम्ही हे डेटा व्हिज्युअलायझेशन सॉफ्टवेअरमध्ये फीड करू शकता. अनेक पर्याय उपलब्ध आहेत: + +- [Prometheus](https://prometheus.io/) (पुल मॉडेल) +- [InfluxDB](https://www.influxdata.com/get-influxdb/) (पुश मॉडेल) +- [Telegraf](https://www.influxdata.com/get-influxdb/) +- [Grafana](https://www.grafana.com/) +- [Datadog](https://www.datadoghq.com/) +- [Chronograf](https://www.influxdata.com/time-series-platform/chronograf/) + +[Geth Prometheus Exporter](https://github.com/hunterlong/gethexporter) हा देखील एक पर्याय आहे, जो InfluxDB आणि Grafana सह पूर्व-कॉन्फिगर केलेला आहे. + +या ट्युटोरियलमध्ये, आम्ही तुमचा Geth क्लायंट डेटाबेस तयार करण्यासाठी InfluxDB वर डेटा पुश करण्यासाठी आणि डेटाचे ग्राफ व्हिज्युअलायझेशन तयार करण्यासाठी Grafana सेट करू. हे स्वतः केल्याने तुम्हाला प्रक्रिया अधिक चांगल्या प्रकारे समजून घेण्यास, त्यात बदल करण्यास आणि वेगवेगळ्या वातावरणात तैनात करण्यास मदत होईल. + +## InfluxDB सेट करणे {#setting-up-influxdb} + +प्रथम, InfluxDB डाउनलोड आणि इन्स्टॉल करूया. [Influxdata रिलीज पेज](https://portal.influxdata.com/downloads/) वर विविध डाउनलोड पर्याय आढळू शकतात. तुमच्या वातावरणास अनुकूल असलेला पर्याय निवडा. +तुम्ही ते [रिपॉझिटरी](https://repos.influxdata.com/) मधून देखील इन्स्टॉल करू शकता. उदाहरणार्थ, डेबियन आधारित डिस्ट्रिब्युशनमध्ये: + +``` +curl -tlsv1.3 --proto =https -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add +source /etc/lsb-release +echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list +sudo apt update +sudo apt install influxdb -y +sudo systemctl enable influxdb +sudo systemctl start influxdb +sudo apt install influxdb-client +``` + +InfluxDB यशस्वीरित्या इन्स्टॉल केल्यानंतर, ते बॅकग्राउंडमध्ये चालू असल्याची खात्री करा. डीफॉल्टनुसार, ते `localhost:8086` वर उपलब्ध आहे. +`influx` क्लायंट वापरण्यापूर्वी, तुम्हाला प्रशासकीय अधिकारांसह नवीन वापरकर्ता तयार करावा लागेल. हा वापरकर्ता उच्च-स्तरीय व्यवस्थापन, डेटाबेस आणि वापरकर्ते तयार करण्यासाठी काम करेल. + +``` +curl -XPOST "http://localhost:8086/query" --data-urlencode "q=CREATE USER username WITH PASSWORD 'password' WITH ALL PRIVILEGES" +``` + +आता तुम्ही या वापरकर्त्यासह [InfluxDB शेल](https://docs.influxdata.com/influxdb/v1.8/tools/shell/) मध्ये प्रवेश करण्यासाठी influx क्लायंट वापरू शकता. + +``` +influx -username 'username' -password 'password' +``` + +त्याच्या शेलमध्ये InfluxDB शी थेट संवाद साधून, तुम्ही geth मेट्रिक्ससाठी डेटाबेस आणि वापरकर्ता तयार करू शकता. + +``` +create database geth +create user geth with password choosepassword +``` + +तयार केलेल्या नोंदी सत्यापित करा: + +``` +show databases +show users +``` + +InfluxDB शेलमधून बाहेर पडा. + +``` +exit +``` + +InfluxDB चालू आहे आणि Geth मधील मेट्रिक्स संग्रहित करण्यासाठी कॉन्फिगर केलेले आहे. + +## Geth तयार करणे {#preparing-geth} + +डेटाबेस सेट केल्यानंतर, आम्हाला Geth मध्ये मेट्रिक्स संकलन सक्षम करणे आवश्यक आहे. `geth --help` मधील `METRICS AND STATS OPTIONS` कडे लक्ष द्या. तेथे अनेक पर्याय आढळू शकतात, या प्रकरणात आम्हाला Geth ने InfluxDB मध्ये डेटा पुश करावा असे वाटते. +मूलभूत सेटअपमध्ये एंडपॉइंट निर्दिष्ट केला जातो जिथे InfluxDB पोहोचू शकते आणि डेटाबेससाठी ऑथेंटिकेशन निर्दिष्ट केले जाते. + +``` +geth --metrics --metrics.influxdb --metrics.influxdb.endpoint "http://0.0.0.0:8086" --metrics.influxdb.username "geth" --metrics.influxdb.password "chosenpassword" +``` + +हे फ्लॅग्स क्लायंट सुरू करणाऱ्या कमांडला जोडले जाऊ शकतात किंवा कॉन्फिगरेशन फाईलमध्ये सेव्ह केले जाऊ शकतात. + +Geth यशस्वीरित्या डेटा पुश करत आहे हे तुम्ही सत्यापित करू शकता, उदाहरणार्थ डेटाबेसमध्ये मेट्रिक्सची यादी करून. InfluxDB शेलमध्ये: + +``` +use geth +show measurements +``` + +## Grafana सेट करणे {#setting-up-grafana} + +पुढील पायरी म्हणजे Grafana इन्स्टॉल करणे, जे डेटाचे ग्राफिकली विश्लेषण करेल. Grafana डॉक्युमेंटेशनमध्ये तुमच्या वातावरणासाठी इन्स्टॉलेशन प्रक्रिया फॉलो करा. तुम्हाला अन्यथा नको असल्यास OSS आवृत्ती इन्स्टॉल केल्याची खात्री करा. +रिपॉझिटरी वापरून डेबियन डिस्ट्रिब्युशनसाठी उदाहरणादाखल इन्स्टॉलेशन पायऱ्या: + +``` +curl -tlsv1.3 --proto =https -sL https://packages.grafana.com/gpg.key | sudo apt-key add - +echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list +sudo apt update +sudo apt install grafana +sudo systemctl enable grafana-server +sudo systemctl start grafana-server +``` + +जेव्हा तुम्ही Grafana चालू कराल, तेव्हा ते `localhost:3000` वर उपलब्ध असले पाहिजे. +या मार्गावर प्रवेश करण्यासाठी तुमचा पसंतीचा ब्राउझर वापरा, नंतर डीफॉल्ट क्रेडेन्शियलसह लॉग इन करा (वापरकर्ता: `admin` आणि पासवर्ड: `admin`). सूचित केल्यावर, डीफॉल्ट पासवर्ड बदला आणि सेव्ह करा. + +![](./grafana1.png) + +तुम्हाला Grafana होम पेजवर पुनर्निर्देशित केले जाईल. प्रथम, तुमचा स्त्रोत डेटा सेट करा. डाव्या पट्टीतील कॉन्फिगरेशन आयकॉनवर क्लिक करा आणि "Data sources" निवडा. + +![](./grafana2.png) + +अद्याप कोणताही डेटा स्रोत तयार केलेला नाही, एक परिभाषित करण्यासाठी "Add data source" वर क्लिक करा. + +![](./grafana3.png) + +या सेटअपसाठी, "InfluxDB" निवडा आणि पुढे जा. + +![](./grafana4.png) + +जर तुम्ही एकाच मशीनवर साधने चालवत असाल तर डेटा स्रोत कॉन्फिगरेशन अगदी सोपे आहे. तुम्हाला InfluxDB पत्ता आणि डेटाबेसमध्ये प्रवेश करण्यासाठी तपशील सेट करणे आवश्यक आहे. खालील चित्राचा संदर्भ घ्या. + +![](./grafana5.png) + +जर सर्व काही पूर्ण झाले असेल आणि InfluxDB पोहोचण्यायोग्य असेल, तर "Save and test" वर क्लिक करा आणि पुष्टीकरण पॉप अप होण्याची प्रतीक्षा करा. + +![](./grafana6.png) + +Grafana आता InfluxDB मधून डेटा वाचण्यासाठी सेट केले आहे. आता तुम्हाला एक डॅशबोर्ड तयार करण्याची आवश्यकता आहे जो त्याचे विश्लेषण करेल आणि प्रदर्शित करेल. डॅशबोर्डचे गुणधर्म JSON फाईल्समध्ये एन्कोड केलेले आहेत जे कोणीही तयार करू शकतात आणि सहजपणे आयात करू शकतात. डाव्या पट्टीवर, "Create and Import" वर क्लिक करा. + +![](./grafana7.png) + +Geth मॉनिटरिंग डॅशबोर्डसाठी, [या डॅशबोर्डचा](https://grafana.com/grafana/dashboards/13877/) ID कॉपी करा आणि तो Grafana मधील "Import page" मध्ये पेस्ट करा. डॅशबोर्ड सेव्ह केल्यानंतर, तो असा दिसला पाहिजे: + +![](./grafana8.png) + +तुम्ही तुमचे डॅशबोर्ड सुधारित करू शकता. प्रत्येक पॅनेल संपादित, हलवले, काढले किंवा जोडले जाऊ शकते. तुम्ही तुमची कॉन्फिगरेशन बदलू शकता. हे तुमच्यावर अवलंबून आहे! डॅशबोर्ड कसे कार्य करतात याबद्दल अधिक जाणून घेण्यासाठी, [Grafana च्या डॉक्युमेंटेशनचा](https://grafana.com/docs/grafana/latest/dashboards/) संदर्भ घ्या. +तुम्हाला [Alerting](https://grafana.com/docs/grafana/latest/alerting/) मध्ये देखील स्वारस्य असू शकते. हे तुम्हाला मेट्रिक्स विशिष्ट मूल्यांपर्यंत पोहोचल्यावर अलर्ट सूचना सेट करण्याची परवानगी देते. विविध संप्रेषण चॅनेल समर्थित आहेत. diff --git a/public/content/translations/mr/developers/tutorials/nft-minter/index.md b/public/content/translations/mr/developers/tutorials/nft-minter/index.md new file mode 100644 index 00000000000..3bbed4977e0 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/nft-minter/index.md @@ -0,0 +1,874 @@ +--- +title: "NFT मिंटर ट्यूटोरियल" +description: "या ट्युटोरियलमध्ये, तुम्ही एक NFT मिंटर तयार कराल आणि MetaMask व Web3 टूल्स वापरून तुमच्या स्मार्ट कॉन्ट्रॅक्टला React फ्रंटएंडशी कसे जोडायचे हे शिकून एक संपूर्ण स्टॅक dapp तयार कराल." +author: "smudgil" +tags: + [ + "सॉलिडिटी", + "NFT", + "alchemy", + "स्मार्ट कॉन्ट्रॅक्ट", + "frontend", + "Pinata" + ] +skill: intermediate +lang: mr +published: 2021-10-06 +--- + +Web2 पार्श्वभूमीतून येणाऱ्या डेव्हलपर्ससाठी सर्वात मोठे आव्हान म्हणजे तुमच्या स्मार्ट कॉन्ट्रॅक्टला फ्रंटएंड प्रोजेक्टशी कसे जोडायचे आणि त्याच्याशी कसे संवाद साधायचा हे शोधणे. + +एक NFT मिंटर तयार करून — एक सोपा UI जिथे तुम्ही तुमच्या डिजिटल मालमत्तेची लिंक, एक शीर्षक आणि वर्णन टाकू शकता — तुम्ही शिकाल: + +- तुमच्या फ्रंटएंड प्रोजेक्टद्वारे MetaMask शी कनेक्ट करा +- तुमच्या फ्रंटएंडवरून स्मार्ट कॉन्ट्रॅक्ट पद्धती कॉल करा +- MetaMask वापरून व्यवहारांवर सही करा + +या ट्युटोरियलमध्ये, आपण आपल्या फ्रंटएंड फ्रेमवर्क म्हणून [React](https://react.dev/) वापरणार आहोत. हे ट्युटोरियल प्रामुख्याने Web3 डेव्हलपमेंटवर केंद्रित असल्यामुळे, आपण React च्या मूलभूत गोष्टींचे विश्लेषण करण्यात जास्त वेळ घालवणार नाही. त्याऐवजी, आपण आपल्या प्रोजेक्टमध्ये कार्यक्षमता आणण्यावर लक्ष केंद्रित करणार आहोत. + +एक पूर्वअट म्हणून, तुम्हाला React ची नवशिक्या-स्तरावरील समज असणे आवश्यक आहे—घटक, प्रॉप्स, useState/useEffect आणि मूलभूत फंक्शन कॉलिंग कसे कार्य करते हे माहित असले पाहिजे. जर तुम्ही यापैकी कोणत्याही संज्ञा यापूर्वी ऐकल्या नसतील, तर तुम्ही हे [React ट्युटोरियलची ओळख](https://react.dev/learn/tutorial-tic-tac-toe) पाहू शकता. अधिक दृकश्राव्य शिकणाऱ्यांसाठी, आम्ही नेट निंजा द्वारे या उत्कृष्ट [संपूर्ण आधुनिक React ट्युटोरियल](https://www.youtube.com/playlist?list=PL4cUxeGkcC9gZD-Tvwfod2gaISzfRiP9d) व्हिडिओ मालिकेची शिफारस करतो. + +आणि जर तुम्ही आधीच केले नसेल, तर हे ट्युटोरियल पूर्ण करण्यासाठी तसेच ब्लॉकचेनवर काहीही तयार करण्यासाठी तुम्हाला नक्कीच Alchemy खात्याची आवश्यकता असेल. [येथे](https://alchemy.com/) विनामूल्य खात्यासाठी साइन अप करा. + +चला तर मग, अधिक वेळ न घालवता सुरुवात करूया! + +## NFTs बनवणे 101 {#making-nfts-101} + +आपण कोणताही कोड पाहण्यास सुरुवात करण्यापूर्वी, NFT बनवणे कसे कार्य करते हे समजून घेणे महत्त्वाचे आहे. यात दोन पायऱ्या आहेत: + +### Ethereum ब्लॉकचेनवर एक NFT स्मार्ट कॉन्ट्रॅक्ट प्रकाशित करा {#publish-nft} + +दोन NFT स्मार्ट कॉन्ट्रॅक्ट मानकांमधील सर्वात मोठा फरक हा आहे की ERC-1155 हे एक मल्टी-टोकन मानक आहे आणि त्यात बॅच कार्यक्षमता समाविष्ट आहे, तर ERC-721 हे सिंगल-टोकन मानक आहे आणि त्यामुळे एका वेळी फक्त एक टोकन हस्तांतरित करण्यास समर्थन देते. + +### मिंटिंग फंक्शन कॉल करा {#minting-function} + +सहसा, या मिंटिंग फंक्शनसाठी तुम्हाला पॅरामीटर्स म्हणून दोन व्हेरिएबल्स पास करणे आवश्यक असते, पहिले `recipient`, जे तुमचा नवीन मिंट केलेला NFT प्राप्त करणारा ॲड्रेस निर्दिष्ट करते आणि दुसरे NFT चा `tokenURI`, एक स्ट्रिंग जी NFT च्या मेटाडेटाचे वर्णन करणाऱ्या JSON डॉक्युमेंटमध्ये रूपांतरित होते. + +एका NFT चा मेटाडेटाच त्याला जिवंत करतो, ज्यामुळे त्याला नाव, वर्णन, प्रतिमा (किंवा वेगळी डिजिटल मालमत्ता) आणि इतर गुणधर्म यांसारखे गुणधर्म मिळतात. येथे [tokenURI चे एक उदाहरण](https://gateway.pinata.cloud/ipfs/QmSvBcb4tjdFpajGJhbFAWeK3JAxCdNQLQtr6ZdiSi42V2) आहे, ज्यामध्ये NFT चा मेटाडेटा आहे. + +या ट्युटोरियलमध्ये, आम्ही भाग 2 वर लक्ष केंद्रित करणार आहोत, आमच्या React UI वापरून विद्यमान NFT च्या स्मार्ट कॉन्ट्रॅक्ट मिंटिंग फंक्शनला कॉल करणे. + +[येथे](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE) ERC-721 NFT स्मार्ट कॉन्ट्रॅक्टची लिंक आहे ज्याला आपण या ट्युटोरियलमध्ये कॉल करणार आहोत. जर तुम्हाला हे कसे बनवले हे शिकायचे असेल, तर आम्ही तुम्हाला आमचे दुसरे ट्युटोरियल, ["NFT कसे तयार करावे"](https://www.alchemy.com/docs/how-to-create-an-nft) पाहण्याची शिफारस करतो. + +छान, आता आपल्याला NFT बनवणे कसे कार्य करते हे समजले आहे, चला आपल्या स्टार्टर फाइल्स क्लोन करूया! + +## स्टार्टर फाइल्स क्लोन करा {#clone-the-starter-files} + +प्रथम, या प्रोजेक्टसाठी स्टार्टर फाइल्स मिळवण्यासाठी [nft-minter-tutorial GitHub रिपॉझिटरी](https://github.com/alchemyplatform/nft-minter-tutorial) वर जा. ही रिपॉझिटरी तुमच्या स्थानिक वातावरणात क्लोन करा. + +जेव्हा तुम्ही ही क्लोन केलेली `nft-minter-tutorial` रिपॉझिटरी उघडता, तेव्हा तुम्हाला दिसेल की त्यात दोन फोल्डर्स आहेत: `minter-starter-files` आणि `nft-minter`. + +- `minter-starter-files` मध्ये या प्रोजेक्टसाठी स्टार्टर फाइल्स (मूलतः React UI) आहेत. या ट्युटोरियलमध्ये, **आपण या डिरेक्टरीमध्ये काम करणार आहोत**, कारण तुम्ही हे UI तुमच्या Ethereum वॉलेट आणि NFT स्मार्ट कॉन्ट्रॅक्टशी जोडून त्याला जिवंत करायला शिकाल. +- `nft-minter` मध्ये संपूर्ण पूर्ण झालेले ट्युटोरियल आहे आणि **जर तुम्ही कुठे अडकलात तर** तुमच्यासाठी **संदर्भ** म्हणून आहे. + +पुढे, तुमच्या कोड एडिटरमध्ये `minter-starter-files` ची तुमची प्रत उघडा, आणि नंतर तुमच्या `src` फोल्डरमध्ये नेव्हिगेट करा. + +आपण लिहिणार असलेला सर्व कोड `src` फोल्डरखाली असेल. आपण `Minter.js` घटक संपादित करू आणि आपल्या प्रोजेक्टला Web3 कार्यक्षमता देण्यासाठी अतिरिक्त javascript फाइल्स लिहू. + +## पायरी 2: आमच्या स्टार्टर फाइल्स तपासा {#step-2-check-out-our-starter-files} + +कोडिंग सुरू करण्यापूर्वी, स्टार्टर फाइल्समध्ये आधीच काय दिले आहे हे तपासणे महत्त्वाचे आहे. + +### तुमचा react प्रोजेक्ट चालू करा {#get-your-react-project-running} + +चला आपल्या ब्राउझरमध्ये React प्रोजेक्ट चालवून सुरुवात करूया. React चे सौंदर्य हे आहे की एकदा आपला प्रोजेक्ट आपल्या ब्राउझरमध्ये चालू झाला की, आपण केलेले कोणतेही बदल आपल्या ब्राउझरमध्ये थेट अपडेट केले जातील. + +प्रोजेक्ट चालू करण्यासाठी, `minter-starter-files` फोल्डरच्या रूट डिरेक्टरीवर नेव्हिगेट करा, आणि प्रोजेक्टच्या अवलंबित्व स्थापित करण्यासाठी तुमच्या टर्मिनलमध्ये `npm install` चालवा: + +```bash +cd minter-starter-files +npm install +``` + +एकदा ते इन्स्टॉल झाल्यावर, तुमच्या टर्मिनलमध्ये `npm start` चालवा: + +```bash +npm start +``` + +असे केल्याने तुमच्या ब्राउझरमध्ये http://localhost:3000/ उघडले पाहिजे, जिथे तुम्हाला आमच्या प्रोजेक्टचे फ्रंटएंड दिसेल. यात 3 फील्ड्स असाव्यात: तुमच्या NFT च्या मालमत्तेची लिंक टाकण्याची जागा, तुमच्या NFT चे नाव प्रविष्ट करण्याची जागा आणि वर्णन देण्याची जागा. + +तुम्ही "Connect Wallet" किंवा "Mint NFT" बटणे क्लिक करण्याचा प्रयत्न केल्यास, तुम्हाला दिसेल की ते काम करत नाहीत—कारण आपल्याला अजूनही त्यांची कार्यक्षमता प्रोग्राम करायची आहे! :\) + +### Minter.js घटक {#minter-js} + +**सूचना:** तुम्ही `nft-minter` फोल्डरमध्ये नसून `minter-starter-files` फोल्डरमध्ये आहात याची खात्री करा! + +चला आपल्या एडिटरमधील `src` फोल्डरमध्ये परत जाऊ आणि `Minter.js` फाइल उघडू. या फाईलमधील सर्व काही समजून घेणे खूप महत्त्वाचे आहे, कारण हा प्राथमिक React घटक आहे ज्यावर आपण काम करणार आहोत. + +या फाइलच्या शीर्षस्थानी, आमच्याकडे आमचे स्टेट व्हेरिएबल्स आहेत जे आम्ही विशिष्ट इव्हेंट्सनंतर अपडेट करू. + +```javascript +//स्टेट व्हेरिएबल्स +const [walletAddress, setWallet] = useState("") +const [status, setStatus] = useState("") +const [name, setName] = useState("") +const [description, setDescription] = useState("") +const [url, setURL] = useState("") +``` + +React स्टेट व्हेरिएबल्स किंवा स्टेट हुक्सबद्दल कधी ऐकले नाही? [हे](https://legacy.reactjs.org/docs/hooks-state.html) डॉक्स तपासा. + +प्रत्येक व्हेरिएबल काय दर्शवते ते येथे आहे: + +- `walletAddress` - वापरकर्त्याचा वॉलेट ॲड्रेस साठवणारी एक स्ट्रिंग +- `status` - UI च्या तळाशी प्रदर्शित करण्यासाठी संदेश असलेली एक स्ट्रिंग +- `name` - NFT चे नाव साठवणारी एक स्ट्रिंग +- `description` - NFT चे वर्णन साठवणारी एक स्ट्रिंग +- `url` - NFT च्या डिजिटल मालमत्तेची लिंक असलेली एक स्ट्रिंग + +स्टेट व्हेरिएबल्सनंतर, तुम्हाला तीन अमलात न आणलेली फंक्शन्स दिसतील: `useEffect`, `connectWalletPressed` आणि `onMintPressed`. तुम्हाला दिसेल की ही सर्व फंक्शन्स `async` आहेत, कारण आपण त्यांच्यात असिंक्रोनस API कॉल्स करणार आहोत! त्यांची नावे त्यांच्या कार्यक्षमतेनुसार आहेत: + +```javascript +useEffect(async () => { + //TODO: अंमलबजावणी करा +}, []) + +const connectWalletPressed = async () => { + //TODO: अंमलबजावणी करा +} + +const onMintPressed = async () => { + //TODO: अंमलबजावणी करा +} +``` + +- [`useEffect`](https://legacy.reactjs.org/docs/hooks-effect.html) - हा एक React हुक आहे जो तुमचा घटक रेंडर झाल्यानंतर कॉल केला जातो. कारण त्यात एक रिकामा अरे `[]` प्रॉप पास केला आहे (ओळ 3 पहा), तो फक्त घटकाच्या _पहिल्या_ रेंडरवर कॉल केला जाईल. येथे आपण आपला वॉलेट लिसनर आणि दुसरे वॉलेट फंक्शन कॉल करू जेणेकरून वॉलेट आधीच कनेक्ट केलेले आहे की नाही हे दर्शवण्यासाठी आपले UI अपडेट होईल. +- `connectWalletPressed` - हे फंक्शन वापरकर्त्याचे MetaMask वॉलेट आमच्या dapp शी जोडण्यासाठी कॉल केले जाईल. +- `onMintPressed` - हे फंक्शन वापरकर्त्याचा NFT मिंट करण्यासाठी कॉल केले जाईल. + +या फाइलच्या शेवटी, आमच्याकडे आमच्या घटकाचा UI आहे. तुम्ही हा कोड काळजीपूर्वक स्कॅन केल्यास, तुम्हाला दिसेल की जेव्हा त्यांच्या संबंधित टेक्स्ट फील्डमधील इनपुट बदलते तेव्हा आम्ही आमचे `url`, `name` आणि `description` स्टेट व्हेरिएबल्स अपडेट करतो. + +तुम्हाला हे देखील दिसेल की `connectWalletPressed` आणि `onMintPressed` अनुक्रमे `mintButton` आणि `walletButton` आयडी असलेल्या बटणांवर क्लिक केल्यावर कॉल केले जातात. + +```javascript +//आमच्या घटकाचे UI +return ( +
+ + +

+

🧙‍♂️ Alchemy NFT Minter

+

+ फक्त तुमच्या मालमत्तेची लिंक, नाव आणि वर्णन जोडा, नंतर "Mint." दाबा +

+
+

🖼 मालमत्तेची लिंक:

+ setURL(event.target.value)} + /> +

🤔 नाव:

+ setName(event.target.value)} + /> +

✍️ वर्णन:

+ setDescription(event.target.value)} + /> +
+ +

{status}

+
+) +``` + +शेवटी, हा Minter घटक कोठे जोडला आहे हे पाहूया. + +तुम्ही `App.js` फाइलवर गेल्यास, जो React मधील मुख्य घटक आहे आणि इतर सर्व घटकांसाठी कंटेनर म्हणून काम करतो, तुम्हाला दिसेल की आमचा Minter घटक ओळ 7 वर इंजेक्ट केलेला आहे. + +**या ट्युटोरियलमध्ये, आपण फक्त `Minter.js` फाइल संपादित करणार आहोत आणि आपल्या `src` फोल्डरमध्ये फाइल्स जोडणार आहोत.** + +आता आपल्याला समजले आहे की आपण कशावर काम करत आहोत, चला आपले Ethereum वॉलेट सेट करूया! + +## तुमचे Ethereum वॉलेट सेट करा {#set-up-your-ethereum-wallet} + +वापरकर्त्यांना तुमच्या स्मार्ट कॉन्ट्रॅक्टशी संवाद साधता यावा यासाठी त्यांना त्यांचे Ethereum वॉलेट तुमच्या dapp शी कनेक्ट करणे आवश्यक असेल. + +### MetaMask डाउनलोड करा {#download-metamask} + +या ट्यूटोरियलसाठी, आम्ही MetaMask वापरू, जे ब्राउझरमधील एक व्हर्च्युअल वॉलेट आहे, जे तुमचा Ethereum खाते पत्ता व्यवस्थापित करण्यासाठी वापरले जाते. तुम्हाला Ethereum वरील व्यवहार कसे कार्य करतात याबद्दल अधिक समजून घ्यायचे असल्यास, [हे पृष्ठ](/developers/docs/transactions/) तपासा. + +तुम्ही [येथे](https://metamask.io/download) विनामूल्य MetaMask खाते डाउनलोड आणि तयार करू शकता. तुम्ही खाते तयार करत असताना, किंवा तुमच्याकडे आधीपासूनच खाते असल्यास, वरच्या उजवीकडे असलेल्या “Ropsten Test Network” वर स्विच करण्याचे सुनिश्चित करा (जेणेकरून आपण खऱ्या पैशांशी व्यवहार करणार नाही). + +### एका Faucet मधून इथर जोडा {#add-ether-from-faucet} + +आमचे NFTs मिंट करण्यासाठी (किंवा Ethereum ब्लॉकचेनवरील कोणत्याही व्यवहारांवर सही करण्यासाठी), आम्हाला काही बनावट Eth लागेल. Eth मिळवण्यासाठी तुम्ही [Ropsten faucet](https://faucet.ropsten.be/) वर जाऊन तुमचा Ropsten खाते ॲड्रेस टाकू शकता, आणि नंतर “Send Ropsten Eth” वर क्लिक करू शकता. त्यानंतर लगेचच तुम्हाला तुमच्या MetaMask खात्यात Eth दिसेल! + +### तुमची शिल्लक तपासा {#check-your-balance} + +आमची शिल्लक आहे की नाही हे पुन्हा तपासण्यासाठी, चला [Alchemy’s composer tool](https://composer.alchemyapi.io/?composer_state=%7B%22network%22%3A0%2C%22methodName%22%3A%22eth_getBalance%22%2C%22paramValues%22%3A%5B%22%22%2C%22latest%22%5D%7D) वापरून एक [eth_getBalance](https://docs.alchemyapi.io/alchemy/documentation/alchemy-api-reference/json-rpc#eth_getbalance) विनंती करूया. हे आमच्या वॉलेटमधील Eth ची रक्कम परत करेल. तुम्ही तुमच्या MetaMask खात्याचा पत्ता इनपुट केल्यानंतर आणि “Send Request” वर क्लिक केल्यानंतर, तुम्हाला असा प्रतिसाद दिसेल: + +```text +{"jsonrpc": "2.0", "id": 0, "result": "0xde0b6b3a7640000"} +``` + +**सूचना:** हा निकाल eth मध्ये नसून wei मध्ये आहे. Wei हे इथरचे सर्वात लहान एकक म्हणून वापरले जाते. wei चे eth मध्ये रूपांतर: 1 eth = 10¹⁸ wei. म्हणून जर आपण 0xde0b6b3a7640000 ला दशांश मध्ये रूपांतरित केले तर आपल्याला 1\*10¹⁸ मिळते, जे 1 eth च्या बरोबर आहे. + +हुश्श! आपले बनावट पैसे तिथेच आहेत! + +## MetaMask ला तुमच्या UI शी कनेक्ट करा {#connect-metamask-to-your-UI} + +आता आपले MetaMask वॉलेट सेट झाले आहे, चला आपला dapp त्याच्याशी कनेक्ट करूया! + +कारण आम्ही [MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) पॅराडाइमचे पालन करू इच्छितो, आम्ही एक स्वतंत्र फाईल तयार करणार आहोत ज्यात आमच्या dapp चे लॉजिक, डेटा आणि नियम व्यवस्थापित करण्यासाठी आमची फंक्शन्स असतील आणि नंतर ती फंक्शन्स आमच्या फ्रंटएंडला (आमच्या Minter.js घटकाला) पास करू. + +### `connectWallet` फंक्शन {#connect-wallet-function} + +असे करण्यासाठी, तुमच्या `src` डिरेक्टरीमध्ये `utils` नावाचा एक नवीन फोल्डर तयार करूया आणि त्यात `interact.js` नावाची एक फाईल जोडू, ज्यामध्ये आमची सर्व वॉलेट आणि स्मार्ट कॉन्ट्रॅक्ट संवाद फंक्शन्स असतील. + +आमच्या `interact.js` फाइलमध्ये, आम्ही एक `connectWallet` फंक्शन लिहू, जे आम्ही नंतर आमच्या `Minter.js` घटकामध्ये इम्पोर्ट आणि कॉल करू. + +तुमच्या `interact.js` फाइलमध्ये, खालील गोष्टी जोडा + +```javascript +export const connectWallet = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_requestAccounts", + }) + const obj = { + status: "👆🏽 वरील टेक्स्ट-फील्डमध्ये एक संदेश लिहा.", + address: addressArray[0], + } + return obj + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + तुम्हाला तुमच्या ब्राउझरमध्ये MetaMask, एक आभासी Ethereum वॉलेट, स्थापित करणे आवश्यक आहे. + +

+
+ ), + } + } +} +``` + +चला हा कोड काय करतो ते पाहूया: + +प्रथम, आमचे फंक्शन तपासते की तुमच्या ब्राउझरमध्ये `window.ethereum` सक्षम आहे का. + +`window.ethereum` हे MetaMask आणि इतर वॉलेट प्रदात्यांद्वारे इंजेक्ट केलेले एक ग्लोबल API आहे जे वेबसाइट्सना वापरकर्त्यांच्या Ethereum खात्यांची विनंती करण्याची परवानगी देते. मंजूर झाल्यास, ते वापरकर्ता ज्या ब्लॉकचेनशी कनेक्ट आहे त्यावरील डेटा वाचू शकते आणि वापरकर्त्याला संदेश आणि व्यवहारांवर स्वाक्षरी करण्यास सुचवू शकते. अधिक माहितीसाठी [MetaMask डॉक्स](https://docs.metamask.io/guide/ethereum-provider.html#table-of-contents) तपासा! + +जर `window.ethereum` उपस्थित _नसेल_, तर याचा अर्थ MetaMask स्थापित नाही. यामुळे एक JSON ऑब्जेक्ट परत येतो, जिथे परत केलेला `address` एक रिकामा स्ट्रिंग असतो आणि `status` JSX ऑब्जेक्ट वापरकर्त्याला MetaMask स्थापित करणे आवश्यक असल्याचे सांगतो. + +**आपण लिहित असलेली बहुतेक फंक्शन्स JSON ऑब्जेक्ट्स परत करतील ज्याचा वापर आपण आपले स्टेट व्हेरिएबल्स आणि UI अपडेट करण्यासाठी करू शकतो.** + +आता जर `window.ethereum` उपस्थित _असेल_, तर गोष्टी मनोरंजक होतात. + +try/catch लूप वापरून, आम्ही [`window.ethereum.request({ method: "eth_requestAccounts" });`](https://docs.metamask.io/guide/rpc-api.html#eth-requestaccounts) कॉल करून MetaMask शी कनेक्ट करण्याचा प्रयत्न करू. हे फंक्शन कॉल केल्याने ब्राउझरमध्ये MetaMask उघडेल, जिथे वापरकर्त्याला त्यांचे वॉलेट तुमच्या dapp शी कनेक्ट करण्यास सांगितले जाईल. + +- जर वापरकर्त्याने कनेक्ट करणे निवडले, तर `method: "eth_requestAccounts"` एक ॲरे परत करेल ज्यामध्ये dapp शी कनेक्ट केलेल्या वापरकर्त्याच्या सर्व खात्यांचे ॲड्रेस असतील. एकूणच, आमचे `connectWallet` फंक्शन एक JSON ऑब्जेक्ट परत करेल ज्यात या ॲरेमधील _पहिला_ `address` (ओळ 9 पहा) आणि एक `status` संदेश असेल जो वापरकर्त्याला स्मार्ट कॉन्ट्रॅक्टला संदेश लिहिण्यास सांगेल. +- जर वापरकर्त्याने कनेक्शन नाकारले, तर JSON ऑब्जेक्टमध्ये परत केलेल्या `address` साठी एक रिकामा स्ट्रिंग आणि एक `status` संदेश असेल जो वापरकर्त्याने कनेक्शन नाकारले असल्याचे दर्शवेल. + +### connectWallet फंक्शन तुमच्या Minter.js UI घटकामध्ये जोडा {#add-connect-wallet} + +आता आपण हे `connectWallet` फंक्शन लिहिले आहे, चला ते आमच्या `Minter.js` घटकाशी जोडूया. + +प्रथम, आपल्याला `Minter.js` फाइलच्या शीर्षस्थानी `import { connectWallet } from "./utils/interact.js";` जोडून आमचे फंक्शन आमच्या `Minter.js` फाइलमध्ये इम्पोर्ट करावे लागेल. तुमच्या `Minter.js` च्या पहिल्या 11 ओळी आता अशा दिसल्या पाहिजेत: + +```javascript +import { useEffect, useState } from "react"; +import { connectWallet } from "./utils/interact.js"; + +const Minter = (props) => { + + //स्टेट व्हेरिएबल्स + const [walletAddress, setWallet] = useState(""); + const [status, setStatus] = useState(""); + const [name, setName] = useState(""); + const [description, setDescription] = useState(""); + const [url, setURL] = useState(""); +``` + +नंतर, आमच्या `connectWalletPressed` फंक्शनमध्ये, आम्ही आमचे इम्पोर्ट केलेले `connectWallet` फंक्शन कॉल करू, जसे की: + +```javascript +const connectWalletPressed = async () => { + const walletResponse = await connectWallet() + setStatus(walletResponse.status) + setWallet(walletResponse.address) +} +``` + +आमच्या `Minter.js` घटकामधून `interact.js` फाइलमधून आमची बहुतेक कार्यक्षमता कशी दूर केली आहे हे लक्षात घ्या? हे असे आहे की आम्ही M-V-C पॅराडाइमचे पालन करतो! + +`connectWalletPressed` मध्ये, आम्ही फक्त आमच्या आयात केलेल्या `connectWallet` फंक्शनला एक await कॉल करतो आणि त्याच्या प्रतिसादाचा वापर करून, आम्ही आमचे `status` आणि `walletAddress` व्हेरिएबल्स त्यांच्या स्टेट हुक्सद्वारे अपडेट करतो. + +आता, चला `Minter.js` आणि `interact.js` या दोन्ही फाईल्स सेव्ह करू आणि आतापर्यंतच्या आमच्या UI ची चाचणी घेऊया. + +तुमच्या ब्राउझरमध्ये localhost:3000 उघडा आणि पृष्ठाच्या वरच्या उजव्या बाजूला असलेल्या "Connect Wallet" बटणावर दाबा. + +तुमच्याकडे MetaMask स्थापित असल्यास, तुम्हाला तुमचे वॉलेट तुमच्या dapp शी जोडण्यास सांगितले जाईल. कनेक्ट करण्याची आमंत्रणे स्वीकारा. + +तुम्हाला दिसेल की वॉलेट बटण आता तुमचा ॲड्रेस कनेक्ट झाल्याचे दर्शवत आहे. + +पुढे, पृष्ठ रिफ्रेश करण्याचा प्रयत्न करा... हे विचित्र आहे. आमचे वॉलेट बटण आम्हाला MetaMask कनेक्ट करण्यास सांगत आहे, जरी ते आधीच कनेक्ट केलेले असले तरी... + +पण काळजी करू नका! आम्ही `getCurrentWalletConnected` नावाचे फंक्शन लागू करून हे सहजपणे दुरुस्त करू शकतो, जे आमच्या dapp शी एखादा ॲड्रेस आधीच कनेक्ट केलेला आहे का हे तपासेल आणि त्यानुसार आमचे UI अपडेट करेल! + +### getCurrentWalletConnected फंक्शन {#get-current-wallet} + +तुमच्या `interact.js` फाइलमध्ये, खालील `getCurrentWalletConnected` फंक्शन जोडा: + +```javascript +export const getCurrentWalletConnected = async () => { + if (window.ethereum) { + try { + const addressArray = await window.ethereum.request({ + method: "eth_accounts", + }) + if (addressArray.length > 0) { + return { + address: addressArray[0], + status: "👆🏽 वरील टेक्स्ट-फील्डमध्ये एक संदेश लिहा.", + } + } else { + return { + address: "", + status: "🦊 वरच्या उजव्या बटणाचा वापर करून MetaMask शी कनेक्ट करा.", + } + } + } catch (err) { + return { + address: "", + status: "😥 " + err.message, + } + } + } else { + return { + address: "", + status: ( + +

+ {" "} + 🦊 + तुम्हाला तुमच्या ब्राउझरमध्ये MetaMask, एक आभासी Ethereum वॉलेट, स्थापित करणे आवश्यक आहे. + +

+
+ ), + } + } +} +``` + +हा कोड आपण नुकत्याच लिहिलेल्या `connectWallet` फंक्शनसारखाच आहे. + +मुख्य फरक असा आहे की `eth_requestAccounts` या पद्धतीला कॉल करण्याऐवजी, जे वापरकर्त्याला त्यांचे वॉलेट कनेक्ट करण्यासाठी MetaMask उघडते, येथे आपण `eth_accounts` ही पद्धत कॉल करतो, जी सध्या आपल्या dapp शी कनेक्ट केलेल्या MetaMask ॲड्रेसची एक ॲरे परत करते. + +हे फंक्शन कृतीत पाहण्यासाठी, चला ते आमच्या `Minter.js` घटकाच्या `useEffect` फंक्शनमध्ये कॉल करूया. + +जसे आपण `connectWallet` साठी केले, तसेच आपल्याला हे फंक्शन आमच्या `interact.js` फाइलमधून आमच्या `Minter.js` फाइलमध्ये इम्पोर्ट करावे लागेल, जसे की: + +```javascript +import { useEffect, useState } from "react" +import { + connectWallet, + getCurrentWalletConnected, //येथे इम्पोर्ट करा +} from "./utils/interact.js" +``` + +आता, आपण फक्त ते आमच्या `useEffect` फंक्शनमध्ये कॉल करू: + +```javascript +useEffect(async () => { + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) +}, []) +``` + +लक्षात घ्या, आम्ही आमच्या `getCurrentWalletConnected` च्या कॉलच्या प्रतिसादाचा वापर आमचे `walletAddress` आणि `status` स्टेट व्हेरिएबल्स अपडेट करण्यासाठी करतो. + +एकदा तुम्ही हा कोड जोडला की, आमचे ब्राउझर विंडो रिफ्रेश करून पहा. बटण तुम्हाला कनेक्ट झाल्याचे सांगेल आणि तुमच्या कनेक्ट केलेल्या वॉलेटच्या ॲड्रेसचे पूर्वावलोकन दाखवेल - जरी तुम्ही रिफ्रेश केले तरी! + +### addWalletListener लागू करा {#implement-add-wallet-listener} + +आमच्या dapp वॉलेट सेटअपमधील शेवटची पायरी म्हणजे वॉलेट लिसनर लागू करणे जेणेकरून आमच्या वॉलेटची स्थिती बदलल्यावर आमचे UI अपडेट होईल, जसे की वापरकर्ता डिस्कनेक्ट झाल्यावर किंवा खाती बदलल्यावर. + +तुमच्या `Minter.js` फाइलमध्ये, `addWalletListener` नावाचे फंक्शन जोडा जे खालीलप्रमाणे दिसेल: + +```javascript +function addWalletListener() { + if (window.ethereum) { + window.ethereum.on("accountsChanged", (accounts) => { + if (accounts.length > 0) { + setWallet(accounts[0]) + setStatus("👆🏽 वरील टेक्स्ट-फील्डमध्ये एक संदेश लिहा.") + } else { + setWallet("") + setStatus("🦊 वरच्या उजव्या बटणाचा वापर करून MetaMask शी कनेक्ट करा.") + } + }) + } else { + setStatus( +

+ {" "} + 🦊 + तुम्हाला तुमच्या ब्राउझरमध्ये MetaMask, एक आभासी Ethereum वॉलेट, स्थापित करणे आवश्यक आहे. + +

+ ) + } +} +``` + +चला येथे काय होत आहे ते पटकन पाहूया: + +- प्रथम, आमचे फंक्शन तपासते की `window.ethereum` सक्षम आहे का (म्हणजे MetaMask स्थापित आहे का). + - जर ते नसेल, तर आम्ही फक्त आमचे `status` स्टेट व्हेरिएबल एका JSX स्ट्रिंगवर सेट करतो जे वापरकर्त्याला MetaMask स्थापित करण्यास सांगते. + - जर ते सक्षम असेल, तर आम्ही ओळ 3 वर `window.ethereum.on("accountsChanged")` हा लिसनर सेट करतो जो MetaMask वॉलेटमधील स्टेट बदलांसाठी ऐकतो, ज्यात वापरकर्ता dapp शी अतिरिक्त खाते जोडतो, खाती बदलतो किंवा खाते डिस्कनेक्ट करतो. जर किमान एक खाते कनेक्ट केलेले असेल, तर `walletAddress` स्टेट व्हेरिएबल लिसनरद्वारे परत केलेल्या `accounts` ॲरेमधील पहिले खाते म्हणून अपडेट केले जाते. अन्यथा, `walletAddress` एक रिकामा स्ट्रिंग म्हणून सेट केला जातो. + +शेवटी, आपण ते आमच्या `useEffect` फंक्शनमध्ये कॉल करणे आवश्यक आहे: + +```javascript +useEffect(async () => { + const { address, status } = await getCurrentWalletConnected() + setWallet(address) + setStatus(status) + + addWalletListener() +}, []) +``` + +आणि झालेच! आपण आपल्या वॉलेटची सर्व कार्यक्षमता प्रोग्रामिंग पूर्ण केली आहे! आता आपले वॉलेट सेट झाले आहे, चला आपला NFT कसा मिंट करायचा ते शोधूया! + +## NFT मेटाडेटा 101 {#nft-metadata-101} + +तर, या ट्युटोरियलच्या पायरी 0 मध्ये आपण ज्या NFT मेटाडेटाबद्दल बोललो होतो ते आठवते का - ते NFT ला जिवंत करते, ज्यामुळे त्याला डिजिटल मालमत्ता, नाव, वर्णन आणि इतर गुणधर्म यासारखे गुणधर्म मिळतात. + +आम्हाला हा मेटाडेटा JSON ऑब्जेक्ट म्हणून कॉन्फिगर करून साठवावा लागेल, जेणेकरून आम्ही तो आमच्या स्मार्ट कॉन्ट्रॅक्टच्या `mintNFT` फंक्शनला कॉल करताना `tokenURI` पॅरामीटर म्हणून पास करू शकू. + +"Link to Asset", "Name", "Description" फील्डमधील मजकूर आमच्या NFT च्या मेटाडेटाचे वेगवेगळे गुणधर्म तयार करेल. आम्ही हा मेटाडेटा JSON ऑब्जेक्ट म्हणून फॉरमॅट करू, परंतु आम्ही हा JSON ऑब्जेक्ट कुठे साठवू शकतो यासाठी काही पर्याय आहेत: + +- आपण ते Ethereum ब्लॉकचेनवर साठवू शकतो; तथापि, असे करणे खूप महाग होईल. +- आपण ते AWS किंवा Firebase सारख्या केंद्रीकृत सर्व्हरवर साठवू शकतो. परंतु ते आमच्या विकेंद्रीकरणाच्या सिद्धांताला हरवेल. +- आपण IPFS वापरू शकतो, जो वितरित फाईल सिस्टममध्ये डेटा साठवण्यासाठी आणि शेअर करण्यासाठी एक विकेंद्रीकृत प्रोटोकॉल आणि पीअर-टू-पीअर नेटवर्क आहे. हा प्रोटोकॉल विकेंद्रीकृत आणि विनामूल्य असल्याने, हा आपला सर्वोत्तम पर्याय आहे! + +आपला मेटाडेटा IPFS वर साठवण्यासाठी, आपण [Pinata](https://pinata.cloud/) वापरू, जो एक सोयीस्कर IPFS API आणि टूलकिट आहे. पुढील पायरीमध्ये, आम्ही हे नक्की कसे करायचे ते स्पष्ट करू! + +## तुमचा मेटाडेटा IPFS वर पिन करण्यासाठी Pinata वापरा {#use-pinata-to-pin-your-metadata-to-IPFS} + +तुमच्याकडे [Pinata](https://pinata.cloud/) खाते नसल्यास, [येथे](https://app.pinata.cloud/auth/signup) विनामूल्य खात्यासाठी साइन अप करा आणि तुमचा ईमेल आणि खाते सत्यापित करण्यासाठीच्या पायऱ्या पूर्ण करा. + +### तुमची Pinata API की तयार करा {#create-pinata-api-key} + +[https://pinata.cloud/keys](https://pinata.cloud/keys) पृष्ठावर नेव्हिगेट करा, नंतर शीर्षस्थानी असलेले "New Key" बटण निवडा, Admin विजेट सक्षम म्हणून सेट करा आणि तुमच्या की ला नाव द्या. + +त्यानंतर तुम्हाला तुमच्या API माहितीसह एक पॉपअप दाखवला जाईल. हे कुठेतरी सुरक्षित ठिकाणी ठेवण्याची खात्री करा. + +आता आपली की सेट झाली आहे, चला ती आपल्या प्रोजेक्टमध्ये जोडूया जेणेकरून आपण ती वापरू शकू. + +### एक .env फाइल तयार करा {#create-a-env} + +आपण आपली Pinata की आणि सिक्रेट एका एनव्हायरमेंट फाईलमध्ये सुरक्षितपणे साठवू शकतो. चला तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये [dotenv पॅकेज](https://www.npmjs.com/package/dotenv) स्थापित करूया. + +तुमच्या टर्मिनलमध्ये एक नवीन टॅब उघडा (जो लोकल होस्ट चालवत आहे त्यापासून वेगळा) आणि तुम्ही `minter-starter-files` फोल्डरमध्ये आहात याची खात्री करा, नंतर तुमच्या टर्मिनलमध्ये खालील कमांड चालवा: + +```text +npm install dotenv --save +``` + +पुढे, तुमच्या कमांड लाइनवर खालीलप्रमाणे टाकून तुमच्या `minter-starter-files` च्या रूट डिरेक्टरीमध्ये एक `.env` फाइल तयार करा: + +```javascript +vim.env +``` + +हे तुमची `.env` फाइल vim (एक टेक्स्ट एडिटर) मध्ये उघडेल. ते सेव्ह करण्यासाठी तुमच्या कीबोर्डवर "esc" + ":" + "q" या क्रमाने दाबा. + +पुढे, VSCode मध्ये, तुमच्या `.env` फाइलवर नेव्हिगेट करा आणि त्यात तुमची Pinata API की आणि API सिक्रेट जोडा, जसे की: + +```text +REACT_APP_PINATA_KEY = +REACT_APP_PINATA_SECRET = +``` + +फाईल सेव्ह करा, आणि मग तुम्ही तुमचा JSON मेटाडेटा IPFS वर अपलोड करण्यासाठी फंक्शन लिहिण्यास तयार आहात! + +### pinJSONToIPFS लागू करा {#pin-json-to-ipfs} + +सुदैवाने, Pinata कडे [JSON डेटा IPFS वर अपलोड करण्यासाठी एक विशेष API](https://docs.pinata.cloud/api-reference/endpoint/ipfs/pin-json-to-ipfs#pin-json) आणि axios सह एक सोयीस्कर JavaScript उदाहरण आहे जे आपण काही किरकोळ बदलांसह वापरू शकतो. + +तुमच्या `utils` फोल्डरमध्ये, चला `pinata.js` नावाची दुसरी फाईल तयार करू आणि नंतर .env फाईलमधून आमची Pinata सिक्रेट आणि की इम्पोर्ट करू, जसे की: + +```javascript +require("dotenv").config() +const key = process.env.REACT_APP_PINATA_KEY +const secret = process.env.REACT_APP_PINATA_SECRET +``` + +पुढे, खालील अतिरिक्त कोड तुमच्या `pinata.js` फाईलमध्ये पेस्ट करा. काळजी करू नका, आम्ही सर्वकाही काय आहे ते समजावून सांगू! + +```javascript +require("dotenv").config() +const key = process.env.REACT_APP_PINATA_KEY +const secret = process.env.REACT_APP_PINATA_SECRET + +const axios = require("axios") + +export const pinJSONToIPFS = async (JSONBody) => { + const url = `https://api.pinata.cloud/pinning/pinJSONToIPFS` + //axios POST विनंती Pinata ला करणे ⬇️ + return axios + .post(url, JSONBody, { + headers: { + pinata_api_key: key, + pinata_secret_api_key: secret, + }, + }) + .then(function (response) { + return { + success: true, + pinataUrl: + "https://gateway.pinata.cloud/ipfs/" + response.data.IpfsHash, + } + }) + .catch(function (error) { + console.log(error) + return { + success: false, + message: error.message, + } + }) +} +``` + +तर हा कोड नक्की काय करतो? + +प्रथम, ते [axios](https://www.npmjs.com/package/axios) आयात करते, जे ब्राउझर आणि node.js साठी एक वचन-आधारित HTTP क्लायंट आहे, ज्याचा वापर आपण Pinata ला विनंती करण्यासाठी करू. + +त्यानंतर आमच्याकडे आमचे असिंक्रोनस फंक्शन `pinJSONToIPFS` आहे, जे इनपुट म्हणून `JSONBody` घेते आणि त्याच्या हेडरमध्ये Pinata api की आणि सिक्रेट घेते, हे सर्व त्यांच्या `pinJSONToIPFS` API ला POST विनंती करण्यासाठी. + +- जर ही POST विनंती यशस्वी झाली, तर आमचे फंक्शन एक JSON ऑब्जेक्ट परत करते ज्यामध्ये `success` बूलियन सत्य असते आणि `pinataUrl` जेथे आमचा मेटाडेटा पिन केला गेला होता. आम्ही परत केलेला हा `pinataUrl` आमच्या स्मार्ट कॉन्ट्रॅक्टच्या मिंट फंक्शनला `tokenURI` इनपुट म्हणून वापरू. +- जर ही पोस्ट विनंती अयशस्वी झाली, तर आमचे फंक्शन एक JSON ऑब्जेक्ट परत करते ज्यामध्ये `success` बूलियन असत्य असते आणि एक `message` स्ट्रिंग जी आमची त्रुटी सांगते. + +आमच्या `connectWallet` फंक्शन रिटर्न प्रकारांप्रमाणेच, आम्ही JSON ऑब्जेक्ट्स परत करत आहोत जेणेकरून आम्ही त्यांचे पॅरामीटर्स आमचे स्टेट व्हेरिएबल्स आणि UI अपडेट करण्यासाठी वापरू शकू. + +## तुमचा स्मार्ट कॉन्ट्रॅक्ट लोड करा {#load-your-smart-contract} + +आता आपल्याकडे `pinJSONToIPFS` फंक्शनद्वारे आपला NFT मेटाडेटा IPFS वर अपलोड करण्याचा एक मार्ग आहे, आपल्याला आपला स्मार्ट कॉन्ट्रॅक्टचा एक इन्स्टन्स लोड करण्याचा एक मार्ग लागेल जेणेकरून आपण त्याचे `mintNFT` फंक्शन कॉल करू शकू. + +जसे आम्ही आधी नमूद केले आहे, या ट्युटोरियलमध्ये आम्ही [या विद्यमान NFT स्मार्ट कॉन्ट्रॅक्टचा](https://ropsten.etherscan.io/address/0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE) वापर करणार आहोत; तथापि, जर तुम्हाला हे कसे बनवले हे शिकायचे असेल, किंवा स्वतः एक बनवायचे असेल, तर आम्ही तुम्हाला आमचे दुसरे ट्युटोरियल, ["NFT कसे तयार करावे"](https://www.alchemy.com/docs/how-to-create-an-nft) पाहण्याची शिफारस करतो. + +### कॉन्ट्रॅक्ट ABI {#contract-abi} + +जर तुम्ही आमच्या फाइल्सचे बारकाईने परीक्षण केले असेल, तर तुम्हाला लक्षात आले असेल की आमच्या `src` डिरेक्टरीमध्ये, `contract-abi.json` नावाची एक फाइल आहे. एक कॉन्ट्रॅक्ट कोणते फंक्शन कॉल करेल हे निर्दिष्ट करण्यासाठी तसेच फंक्शन तुमच्या अपेक्षित फॉरमॅटमध्ये डेटा परत करेल याची खात्री करण्यासाठी ABI आवश्यक आहे. + +Ethereum ब्लॉकचेनशी कनेक्ट होण्यासाठी आणि आमचा स्मार्ट कॉन्ट्रॅक्ट लोड करण्यासाठी आम्हाला Alchemy API की आणि Alchemy Web3 API ची देखील आवश्यकता असेल. + +### तुमची Alchemy API की तयार करा {#create-alchemy-api} + +तुमच्याकडे आधीपासूनच Alchemy खाते नसल्यास, [येथे विनामूल्य साइन अप करा.](https://alchemy.com/?a=eth-org-nft-minter) + +एकदा तुम्ही Alchemy खाते तयार केल्यावर, तुम्ही ॲप तयार करून API की तयार करू शकता. हे आम्हाला Ropsten चाचणी नेटवर्कला विनंत्या करण्याची परवानगी देईल. + +तुमच्या Alchemy डॅशबोर्डमधील “Create App” पृष्ठावर नेव्हिगेट करण्यासाठी nav बारमधील “Apps” वर फिरवून “Create App” वर क्लिक करा. + +तुमच्या ॲपला नाव द्या, आम्ही "My First NFT!" निवडले, एक लहान वर्णन द्या, तुमच्या ॲपच्या बुककीपिंगसाठी वापरल्या जाणार्‍या वातावरणासाठी “Staging” निवडा आणि तुमच्या नेटवर्कसाठी “Ropsten” निवडा. + +“ॲप तयार करा” वर क्लिक करा आणि झाले! तुमचे ॲप खालील टेबलमध्ये दिसावे. + +छान, तर आता आपण आपला HTTP Alchemy API URL तयार केला आहे, तो तुमच्या क्लिपबोर्डवर कॉपी करा... + +…आणि मग चला ते आमच्या `.env` फाइलमध्ये जोडूया. एकूणच, तुमची .env फाईल अशी दिसली पाहिजे: + +```text +REACT_APP_PINATA_KEY = +REACT_APP_PINATA_SECRET = +REACT_APP_ALCHEMY_KEY = https://eth-ropsten.alchemyapi.io/v2/ +``` + +आता आपल्याकडे आमचा कॉन्ट्रॅक्ट ABI आणि आमची Alchemy API की आहे, आम्ही [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) वापरून आमचा स्मार्ट कॉन्ट्रॅक्ट लोड करण्यास तयार आहोत. + +### तुमचा Alchemy Web3 एंडपॉईंट आणि कॉन्ट्रॅक्ट सेट करा {#setup-alchemy-endpoint} + +प्रथम, तुमच्याकडे आधीपासून नसल्यास, तुम्हाला [Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) स्थापित करणे आवश्यक आहे, यासाठी टर्मिनलमध्ये होम डिरेक्टरी: `nft-minter-tutorial` वर नेव्हिगेट करा: + +```text +cd .. +npm install @alch/alchemy-web3 +``` + +पुढे चला आपल्या `interact.js` फाइलवर परत जाऊया. फाईलच्या शीर्षस्थानी, तुमच्या .env फाईलमधून तुमची Alchemy की आयात करण्यासाठी आणि तुमचा Alchemy Web3 एंडपॉईंट सेट करण्यासाठी खालील कोड जोडा: + +```javascript +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) +``` + +[Alchemy Web3](https://github.com/alchemyplatform/alchemy-web3) हे [Web3.js](https://docs.web3js.org/) च्या सभोवतालचे एक रॅपर आहे, जे एक वेब3 डेव्हलपर म्हणून तुमचे जीवन सोपे करण्यासाठी वर्धित API पद्धती आणि इतर महत्त्वपूर्ण फायदे प्रदान करते. हे कमीत कमी कॉन्फिगरेशन आवश्यक करण्यासाठी डिझाइन केलेले आहे जेणेकरून आपण आपल्या ॲपमध्ये लगेचच त्याचा वापर सुरू करू शकता! + +पुढे, चला आपला कॉन्ट्रॅक्ट ABI आणि कॉन्ट्रॅक्ट ॲड्रेस आपल्या फाईलमध्ये जोडूया. + +```javascript +require("dotenv").config() +const alchemyKey = process.env.REACT_APP_ALCHEMY_KEY +const { createAlchemyWeb3 } = require("@alch/alchemy-web3") +const web3 = createAlchemyWeb3(alchemyKey) + +const contractABI = require("../contract-abi.json") +const contractAddress = "0x4C4a07F737Bf57F6632B6CAB089B78f62385aCaE" +``` + +एकदा आपल्याकडे हे दोन्ही असले की, आपण आपले मिंट फंक्शन कोडिंग सुरू करण्यास तयार आहोत! + +## मिंटएनएफटी (mintNFT) फंक्शनची अंमलबजावणी करा {#implement-the-mintnft-function} + +तुमच्या `interact.js` फाईलच्या आत, चला आपले फंक्शन, `mintNFT` परिभाषित करू, जे त्याच्या नावानुसारच आपले NFT मिंट करेल. + +कारण आपण अनेक असिंक्रोनस कॉल्स करणार आहोत (आपला मेटाडेटा IPFS वर पिन करण्यासाठी Pinata ला, आपला स्मार्ट कॉन्ट्रॅक्ट लोड करण्यासाठी Alchemy Web3 ला आणि आपले व्यवहार साइन करण्यासाठी MetaMask ला), आपले फंक्शन देखील असिंक्रोनस असेल. + +आमच्या फंक्शनसाठी तीन इनपुट्स असतील: आपल्या डिजिटल मालमत्तेचा `url`, `name` आणि `description`. `connectWallet` फंक्शनखाली खालील फंक्शन सिग्नेचर जोडा: + +```javascript +export const mintNFT = async (url, name, description) => {} +``` + +### इनपुट एरर हाताळणी {#input-error-handling} + +नैसर्गिकरित्या, फंक्शनच्या सुरुवातीला काहीतरी इनपुट एरर हाताळणी असणे अर्थपूर्ण आहे, जेणेकरून आपले इनपुट पॅरामीटर्स योग्य नसल्यास आपण या फंक्शनमधून बाहेर पडू. आमच्या फंक्शनच्या आत, चला खालील कोड जोडूया: + +```javascript +export const mintNFT = async (url, name, description) => { + //त्रुटी हाताळणी + if (url.trim() == "" || name.trim() == "" || description.trim() == "") { + return { + success: false, + status: "❗मिंट करण्यापूर्वी कृपया सर्व फील्ड्स पूर्ण झाल्याची खात्री करा.", + } + } +} +``` + +मूलतः, जर कोणतेही इनपुट पॅरामीटर एक रिकामा स्ट्रिंग असेल, तर आम्ही एक JSON ऑब्जेक्ट परत करतो जिथे `success` बूलियन असत्य असते आणि `status` स्ट्रिंग सांगते की आमच्या UI मधील सर्व फील्ड पूर्ण असणे आवश्यक आहे. + +### मेटाडेटा IPFS वर अपलोड करा {#upload-metadata-to-ipfs} + +एकदा आम्हाला माहित झाले की आमचा मेटाडेटा योग्यरित्या फॉरमॅट झाला आहे, तर पुढची पायरी म्हणजे त्याला JSON ऑब्जेक्टमध्ये गुंडाळणे आणि आपण लिहिलेल्या `pinJSONToIPFS` द्वारे ते IPFS वर अपलोड करणे! + +असे करण्यासाठी, आम्हाला प्रथम `pinJSONToIPFS` फंक्शन आमच्या `interact.js` फाईलमध्ये इम्पोर्ट करावे लागेल. `interact.js` च्या अगदी सुरुवातीला, चला जोडूया: + +```javascript +import { pinJSONToIPFS } from "./pinata.js" +``` + +आठवा की `pinJSONToIPFS` एक JSON बॉडी घेते. म्हणून आपण त्याला कॉल करण्यापूर्वी, आम्हाला आपले `url`, `name` आणि `description` पॅरामीटर्स एका JSON ऑब्जेक्टमध्ये फॉरमॅट करावे लागतील. + +चला `metadata` नावाचा एक JSON ऑब्जेक्ट तयार करण्यासाठी आपला कोड अपडेट करूया आणि नंतर या `metadata` पॅरामीटरसह `pinJSONToIPFS` ला कॉल करूया: + +```javascript +export const mintNFT = async (url, name, description) => { + //त्रुटी हाताळणी + if (url.trim() == "" || name.trim() == "" || description.trim() == "") { + return { + success: false, + status: "❗मिंट करण्यापूर्वी कृपया सर्व फील्ड्स पूर्ण झाल्याची खात्री करा.", + } + } + + //मेटाडेटा बनवा + const metadata = new Object() + metadata.name = name + metadata.image = url + metadata.description = description + + //pinata कॉल करा + const pinataResponse = await pinJSONToIPFS(metadata) + if (!pinataResponse.success) { + return { + success: false, + status: "😢 तुमचा tokenURI अपलोड करताना काहीतरी चूक झाली.", + } + } + const tokenURI = pinataResponse.pinataUrl +} +``` + +लक्षात घ्या, आम्ही `pinJSONToIPFS(metadata)` च्या कॉलचा प्रतिसाद `pinataResponse` ऑब्जेक्टमध्ये साठवतो. त्यानंतर, आम्ही कोणत्याही त्रुटींसाठी या ऑब्जेक्टचे पार्सिंग करतो. + +जर एखादी त्रुटी असेल, तर आम्ही एक JSON ऑब्जेक्ट परत करतो जिथे `success` बूलियन असत्य असते आणि आमची `status` स्ट्रिंग सांगते की आमचा कॉल अयशस्वी झाला. अन्यथा, आम्ही `pinataResponse` मधून `pinataURL` काढतो आणि तो आमचा `tokenURI` व्हेरिएबल म्हणून साठवतो. + +आता आमच्या फाईलच्या शीर्षस्थानी आपण सुरू केलेल्या Alchemy Web3 API चा वापर करून आमचा स्मार्ट कॉन्ट्रॅक्ट लोड करण्याची वेळ आली आहे. `mintNFT` फंक्शनच्या तळाशी `window.contract` ग्लोबल व्हेरिएबलवर कॉन्ट्रॅक्ट सेट करण्यासाठी खालील कोडची ओळ जोडा: + +```javascript +window.contract = await new web3.eth.Contract(contractABI, contractAddress) +``` + +आमच्या `mintNFT` फंक्शनमध्ये जोडण्याची शेवटची गोष्ट म्हणजे आमचा Ethereum व्यवहार: + +```javascript +//तुमचा Ethereum व्यवहार सेट करा +const transactionParameters = { + to: contractAddress, // कॉन्ट्रॅक्ट प्रकाशनाव्यतिरिक्त आवश्यक. + from: window.ethereum.selectedAddress, // वापरकर्त्याच्या सक्रिय ॲड्रेसशी जुळले पाहिजे. + data: window.contract.methods + .mintNFT(window.ethereum.selectedAddress, tokenURI) + .encodeABI(), //NFT स्मार्ट कॉन्ट्रॅक्टला कॉल करा +} + +//MetaMask द्वारे व्यवहारावर सही करा +try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + success: true, + status: + "✅ Etherscan वर तुमचा व्यवहार तपासा: https://ropsten.etherscan.io/tx/" + + txHash, + } +} catch (error) { + return { + success: false, + status: "😥 काहीतरी चूक झाली: " + error.message, + } +} +``` + +जर तुम्ही आधीच Ethereum व्यवहारांशी परिचित असाल, तर तुम्हाला लक्षात येईल की रचना तुम्ही पाहिलेल्या गोष्टींसारखीच आहे. + +- प्रथम, आम्ही आमचे व्यवहार पॅरामीटर्स सेट करतो. + - `to` प्राप्तकर्ता ॲड्रेस (आमचा स्मार्ट कॉन्ट्रॅक्ट) निर्दिष्ट करतो + - `from` व्यवहारावर सही करणाऱ्याला निर्दिष्ट करतो (वापरकर्त्याचा MetaMask शी कनेक्ट केलेला ॲड्रेस: `window.ethereum.selectedAddress`) + - `data` मध्ये आमच्या स्मार्ट कॉन्ट्रॅक्ट `mintNFT` पद्धतीचा कॉल असतो, जो आमचा `tokenURI` आणि वापरकर्त्याचा वॉलेट ॲड्रेस, `window.ethereum.selectedAddress`, इनपुट म्हणून प्राप्त करतो +- त्यानंतर, आम्ही एक await कॉल करतो, `window.ethereum.request,` जिथे आम्ही MetaMask ला व्यवहारावर सही करण्यास सांगतो. लक्षात घ्या, या विनंतीमध्ये, आम्ही आमची eth पद्धत (eth_SentTransaction) निर्दिष्ट करत आहोत आणि आमचे `transactionParameters` पास करत आहोत. या टप्प्यावर, MetaMask ब्राउझरमध्ये उघडेल आणि वापरकर्त्याला व्यवहारावर सही करण्यास किंवा नाकारण्यास सांगेल. + - जर व्यवहार यशस्वी झाला, तर फंक्शन एक JSON ऑब्जेक्ट परत करेल जिथे `success` बूलियन सत्य सेट केले आहे आणि `status` स्ट्रिंग वापरकर्त्याला त्यांच्या व्यवहाराबद्दल अधिक माहितीसाठी Etherscan तपासण्यास सांगते. + - जर व्यवहार अयशस्वी झाला, तर फंक्शन एक JSON ऑब्जेक्ट परत करेल जिथे `success` बूलियन असत्य सेट केले आहे आणि `status` स्ट्रिंग त्रुटीचा संदेश सांगते. + +एकूणच, आमचे `mintNFT` फंक्शन असे दिसले पाहिजे: + +```javascript +export const mintNFT = async (url, name, description) => { + //त्रुटी हाताळणी + if (url.trim() == "" || name.trim() == "" || description.trim() == "") { + return { + success: false, + status: "❗मिंट करण्यापूर्वी कृपया सर्व फील्ड्स पूर्ण झाल्याची खात्री करा.", + } + } + + //मेटाडेटा बनवा + const metadata = new Object() + metadata.name = name + metadata.image = url + metadata.description = description + + //pinata पिन विनंती + const pinataResponse = await pinJSONToIPFS(metadata) + if (!pinataResponse.success) { + return { + success: false, + status: "😢 तुमचा tokenURI अपलोड करताना काहीतरी चूक झाली.", + } + } + const tokenURI = pinataResponse.pinataUrl + + //स्मार्ट कॉन्ट्रॅक्ट लोड करा + window.contract = await new web3.eth.Contract(contractABI, contractAddress) //loadContract(); + + //तुमचा Ethereum व्यवहार सेट करा + const transactionParameters = { + to: contractAddress, // कॉन्ट्रॅक्ट प्रकाशनाव्यतिरिक्त आवश्यक. + from: window.ethereum.selectedAddress, // वापरकर्त्याच्या सक्रिय ॲड्रेसशी जुळले पाहिजे. + data: window.contract.methods + .mintNFT(window.ethereum.selectedAddress, tokenURI) + .encodeABI(), //NFT स्मार्ट कॉन्ट्रॅक्टला कॉल करा + } + + //MetaMask द्वारे व्यवहारावर सही करा + try { + const txHash = await window.ethereum.request({ + method: "eth_sendTransaction", + params: [transactionParameters], + }) + return { + success: true, + status: + "✅ Etherscan वर तुमचा व्यवहार तपासा: https://ropsten.etherscan.io/tx/" + + txHash, + } + } catch (error) { + return { + success: false, + status: "😥 काहीतरी चूक झाली: " + error.message, + } + } +} +``` + +हे एक मोठे फंक्शन आहे! आता, आपल्याला फक्त आमचे `mintNFT` फंक्शन आमच्या `Minter.js` घटकाशी जोडायचे आहे... + +## mintNFT ला आमच्या Minter.js फ्रंटएंडशी कनेक्ट करा {#connect-our-frontend} + +तुमची `Minter.js` फाईल उघडा आणि शीर्षस्थानी असलेली `import { connectWallet, getCurrentWalletConnected } from "./utils/interact.js";` ही ओळ अपडेट करा: + +```javascript +import { + connectWallet, + getCurrentWalletConnected, + mintNFT, +} from "./utils/interact.js" +``` + +शेवटी, `onMintPressed` फंक्शनची अंमलबजावणी करा जेणेकरून तुमच्या आयात केलेल्या `mintNFT` फंक्शनला एक await कॉल केला जाईल आणि आपला व्यवहार यशस्वी झाला की अयशस्वी हे दर्शवण्यासाठी `status` स्टेट व्हेरिएबल अपडेट केले जाईल: + +```javascript +const onMintPressed = async () => { + const { status } = await mintNFT(url, name, description) + setStatus(status) +} +``` + +## तुमचे NFT एका लाईव्ह वेबसाइटवर तैनात करा {#deploy-your-NFT} + +वापरकर्त्यांना संवाद साधण्यासाठी तुमचा प्रोजेक्ट लाईव्ह नेण्यास तयार आहात? तुमचा मिंटर एका लाईव्ह वेबसाइटवर तैनात करण्यासाठी [हे ट्युटोरियल](https://docs.alchemy.com/alchemy/tutorials/nft-minter/how-do-i-deploy-nfts-online) तपासा. + +एक शेवटची पायरी... + +## ब्लॉकचेनच्या जगात धुमाकूळ घाला {#take-the-blockchain-world-by-storm} + +मस्करी करत होतो, तुम्ही ट्युटोरियलच्या शेवटापर्यंत पोहोचलात! + +पुनरावलोकन करण्यासाठी, एक NFT मिंटर तयार करून, तुम्ही यशस्वीरित्या शिकलात की: + +- तुमच्या फ्रंटएंड प्रोजेक्टद्वारे MetaMask शी कनेक्ट करा +- तुमच्या फ्रंटएंडवरून स्मार्ट कॉन्ट्रॅक्ट पद्धती कॉल करा +- MetaMask वापरून व्यवहारांवर सही करा + +संभाव्यतः, तुम्हाला तुमच्या dapp द्वारे मिंट केलेले NFTs तुमच्या वॉलेटमध्ये दाखवायला आवडेल — त्यामुळे आमचे छोटे ट्युटोरियल [तुमचे NFT तुमच्या वॉलेटमध्ये कसे पहावे](https://www.alchemy.com/docs/how-to-view-your-nft-in-your-mobile-wallet) नक्की तपासा! + +आणि, नेहमीप्रमाणे, जर तुम्हाला काही प्रश्न असतील, तर आम्ही [Alchemy Discord](https://discord.gg/gWuC7zB) मध्ये मदत करण्यासाठी आहोत. तुम्ही या ट्युटोरियलमधील संकल्पना तुमच्या भविष्यातील प्रोजेक्ट्समध्ये कशा लागू करता हे पाहण्यासाठी आम्ही उत्सुक आहोत! diff --git a/public/content/translations/mr/developers/tutorials/optimism-std-bridge-annotated-code/index.md b/public/content/translations/mr/developers/tutorials/optimism-std-bridge-annotated-code/index.md new file mode 100644 index 00000000000..8d5dd5b6c11 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/optimism-std-bridge-annotated-code/index.md @@ -0,0 +1,1357 @@ +--- +title: "Optimism स्टँडर्ड ब्रिज कॉन्ट्रॅक्ट वॉकथ्रू" +description: "Optimism साठी स्टँडर्ड ब्रिज कसे काम करते? ते अशा प्रकारे का काम करते?" +author: Ori Pomerantz +tags: [ "सॉलिडिटी", "ब्रिज", "स्तर 2" ] +skill: intermediate +published: 2022-03-30 +lang: mr +--- + +[Optimism](https://www.optimism.io/) हा एक [Optimistic Rollup](/developers/docs/scaling/optimistic-rollups/) आहे. +ऑप्टिमिस्टिक रोलअप्स Ethereum मेननेटपेक्षा (ज्याला लेयर 1 किंवा L1 असेही म्हणतात) खूपच कमी किमतीत ट्रान्झॅक्शन्सवर प्रक्रिया करू शकतात कारण ट्रान्झॅक्शन्सवर नेटवर्कवरील प्रत्येक नोडऐवजी फक्त काही नोड्सद्वारे प्रक्रिया केली जाते. +त्याच वेळी, सर्व डेटा L1 वर लिहिला जातो जेणेकरून मेननेटच्या सर्व इंटिग्रिटी आणि उपलब्धतेच्या हमीसह सर्वकाही सिद्ध आणि पुनर्रचना करता येईल. + +Optimism वर (किंवा इतर कोणत्याही L2 वर) L1 मालमत्ता वापरण्यासाठी, मालमत्ता [ब्रिज](/bridges/#prerequisites) करणे आवश्यक आहे. +हे साध्य करण्याचा एक मार्ग म्हणजे वापरकर्त्यांनी L1 वर मालमत्ता (ETH आणि [ERC-20 टोकन](/developers/docs/standards/tokens/erc-20/) हे सर्वात सामान्य आहेत) लॉक करणे आणि L2 वर वापरण्यासाठी समतुल्य मालमत्ता प्राप्त करणे. +शेवटी, ज्या कोणाकडे ते असतील, त्यांना ते L1 वर परत ब्रिज करायचे असतील. +असे करताना, मालमत्ता L2 वर बर्न केली जाते आणि नंतर L1 वर वापरकर्त्याला परत दिली जाते. + +[Optimism स्टँडर्ड ब्रिज](https://docs.optimism.io/app-developers/bridging/standard-bridge) अशा प्रकारे काम करते. +या लेखात आम्ही त्या ब्रिजच्या सोर्स कोडचा आढावा घेऊ आणि ते कसे काम करते हे पाहू आणि चांगल्या प्रकारे लिहिलेल्या Solidity कोडचे उदाहरण म्हणून त्याचा अभ्यास करू. + +## कंट्रोल फ्लो {#control-flows} + +ब्रिजमध्ये दोन मुख्य फ्लो आहेत: + +- डिपॉझिट (L1 पासून L2 पर्यंत) +- विड्रॉवल (L2 पासून L1 पर्यंत) + +### डिपॉझिट फ्लो {#deposit-flow} + +#### लेयर 1 {#deposit-flow-layer-1} + +1. जर ERC-20 डिपॉझिट करत असाल, तर डिपॉझिटर ब्रिजला डिपॉझिट होणारी रक्कम खर्च करण्याची परवानगी देतो. +2. डिपॉझिटर L1 ब्रिजला कॉल करतो (`depositERC20`, `depositERC20To`, `depositETH`, किंवा `depositETHTo`) +3. L1 ब्रिज ब्रिज केलेल्या मालमत्तेचा ताबा घेतो + - ETH: मालमत्ता डिपॉझिटरद्वारे कॉलचा भाग म्हणून हस्तांतरित केली जाते + - ERC-20: मालमत्ता ब्रिजद्वारे स्वतःकडे हस्तांतरित केली जाते, डिपॉझिटरने दिलेल्या परवानगीचा वापर करून +4. L1 ब्रिज L2 ब्रिजवर `finalizeDeposit` कॉल करण्यासाठी क्रॉस-डोमेन मेसेज मेकॅनिझम वापरतो + +#### लेयर 2 {#deposit-flow-layer-2} + +5. L2 ब्रिज `finalizeDeposit` साठी केलेला कॉल वैध आहे की नाही हे तपासतो: + - क्रॉस डोमेन मेसेज कॉन्ट्रॅक्टमधून आला आहे + - मूळतः L1 वरील ब्रिजमधून होता +6. L2 ब्रिज L2 वरील ERC-20 टोकन कॉन्ट्रॅक्ट योग्य आहे की नाही हे तपासतो: + - L2 कॉन्ट्रॅक्ट रिपोर्ट करतो की त्याचा L1 समकक्ष L1 वरून आलेल्या टोकनसारखाच आहे + - L2 कॉन्ट्रॅक्ट रिपोर्ट करतो की तो योग्य इंटरफेस ([ERC-165 वापरून](https://eips.ethereum.org/EIPS/eip-165)) सपोर्ट करतो. +7. जर L2 कॉन्ट्रॅक्ट योग्य असेल, तर योग्य ऍड्रेसवर योग्य संख्येने टोकन मिंट करण्यासाठी त्याला कॉल करा. जर नसेल, तर वापरकर्त्याला L1 वर टोकन क्लेम करण्याची परवानगी देण्यासाठी विड्रॉवल प्रक्रिया सुरू करा. + +### विड्रॉवल फ्लो {#withdrawal-flow} + +#### लेयर 2 {#withdrawal-flow-layer-2} + +1. विड्रॉवर L2 ब्रिजला कॉल करतो (`withdraw` किंवा `withdrawTo`) +2. L2 ब्रिज `msg.sender` शी संबंधित योग्य संख्येने टोकन बर्न करतो +3. L2 ब्रिज L1 ब्रिजवर `finalizeETHWithdrawal` किंवा `finalizeERC20Withdrawal` कॉल करण्यासाठी क्रॉस-डोमेन मेसेज मेकॅनिझम वापरतो + +#### लेयर 1 {#withdrawal-flow-layer-1} + +4. L1 ब्रिज `finalizeETHWithdrawal` किंवा `finalizeERC20Withdrawal` साठी केलेला कॉल वैध आहे की नाही हे तपासतो: + - क्रॉस डोमेन मेसेज मेकॅनिझममधून आला आहे + - मूळतः L2 वरील ब्रिजमधून होता +5. L1 ब्रिज योग्य मालमत्ता (ETH किंवा ERC-20) योग्य ऍड्रेसवर हस्तांतरित करतो + +## लेयर 1 कोड {#layer-1-code} + +हा कोड L1, Ethereum मेननेटवर चालतो. + +### IL1ERC20Bridge {#IL1ERC20Bridge} + +[हा इंटरफेस येथे परिभाषित केला आहे](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1ERC20Bridge.sol). +यात ERC-20 टोकन्स ब्रिज करण्यासाठी आवश्यक फंक्शन्स आणि परिभाषा समाविष्ट आहेत. + +```solidity +// SPDX-License-Identifier: MIT +``` + +[Optimism चा बहुतेक कोड MIT परवान्याअंतर्गत प्रसिद्ध केला जातो](https://help.optimism.io/hc/en-us/articles/4411908707995-What-software-license-does-Optimism-use-). + +```solidity +pragma solidity >0.5.0 <0.9.0; +``` + +लिहिताना Solidity ची नवीनतम आवृत्ती 0.8.12 आहे. +आवृत्ती 0.9.0 प्रसिद्ध होईपर्यंत, आम्हाला माहित नाही की हा कोड त्याच्याशी सुसंगत आहे की नाही. + +```solidity +/** + * @title IL1ERC20Bridge + */ +interface IL1ERC20Bridge { + /********** + * Events * + **********/ + + event ERC20DepositInitiated( +``` + +Optimism ब्रिजच्या परिभाषेत _deposit_ म्हणजे L1 पासून L2 मध्ये हस्तांतरण, आणि _withdrawal_ म्हणजे L2 पासून L1 मध्ये हस्तांतरण. + +```solidity + address indexed _l1Token, + address indexed _l2Token, +``` + +बहुतेक प्रकरणांमध्ये L1 वरील ERC-20 चा ऍड्रेस L2 वरील समतुल्य ERC-20 च्या ऍड्रेस सारखा नसतो. +[तुम्ही येथे टोकन ऍड्रेसची सूची पाहू शकता](https://static.optimism.io/optimism.tokenlist.json). +`chainId` 1 असलेला ऍड्रेस L1 (मेननेट) वर आहे आणि `chainId` 10 असलेला ऍड्रेस L2 (Optimism) वर आहे. +इतर दोन `chainId` मूल्ये Kovan चाचणी नेटवर्क (42) आणि ऑप्टिमिस्टिक Kovan चाचणी नेटवर्क (69) साठी आहेत. + +```solidity + address indexed _from, + address _to, + uint256 _amount, + bytes _data + ); +``` + +हस्तांतरणांमध्ये नोट्स जोडणे शक्य आहे, अशावेळी त्या रिपोर्ट करणाऱ्या इव्हेंट्समध्ये जोडल्या जातात. + +```solidity + event ERC20WithdrawalFinalized( + address indexed _l1Token, + address indexed _l2Token, + address indexed _from, + address _to, + uint256 _amount, + bytes _data + ); +``` + +समान ब्रिज कॉन्ट्रॅक्ट दोन्ही दिशांना हस्तांतरण हाताळतो. +L1 ब्रिजच्या बाबतीत, याचा अर्थ डिपॉझिटची सुरुवात आणि विड्रॉवलचे अंतिमकरण. + +```solidity + + /******************** + * Public Functions * + ********************/ + + /** + * @dev get the address of the corresponding L2 bridge contract. + * @return Address of the corresponding L2 bridge contract. + */ + function l2TokenBridge() external returns (address); +``` + +या फंक्शनची खरोखर गरज नाही, कारण L2 वर तो एक प्रीडिप्लॉयड कॉन्ट्रॅक्ट आहे, त्यामुळे तो नेहमी `0x4200000000000000000000000000000000000010` या ऍड्रेसवर असतो. +हे L2 ब्रिजसोबत सममितीसाठी येथे आहे, कारण L1 ब्रिजचा ऍड्रेस जाणून घेणे सोपे _नाही_. + +```solidity + /** + * @dev deposit an amount of the ERC20 to the caller's balance on L2. + * @param _l1Token Address of the L1 ERC20 we are depositing + * @param _l2Token Address of the L1 respective L2 ERC20 + * @param _amount Amount of the ERC20 to deposit + * @param _l2Gas Gas limit required to complete the deposit on L2. + * @param _data Optional data to forward to L2. This data is provided + * solely as a convenience for external contracts. Aside from enforcing a maximum + * length, these contracts provide no guarantees about its content. + */ + function depositERC20( + address _l1Token, + address _l2Token, + uint256 _amount, + uint32 _l2Gas, + bytes calldata _data + ) external; +``` + +`_l2Gas` पॅरामीटर हे L2 गॅसची रक्कम आहे जी ट्रान्झॅक्शन खर्च करू शकते. +[एका विशिष्ट (उच्च) मर्यादेपर्यंत, हे विनामूल्य आहे](https://community.optimism.io/docs/developers/bridge/messaging/#for-l1-%E2%87%92-l2-transactions-2), त्यामुळे जोपर्यंत ERC-20 कॉन्ट्रॅक्ट मिंटिंग करताना काहीतरी विचित्र करत नाही, तोपर्यंत ही समस्या नसावी. +हे फंक्शन सामान्य परिस्थितीची काळजी घेते, जिथे वापरकर्ता वेगळ्या ब्लॉकचेनवर समान ऍड्रेसवर मालमत्ता ब्रिज करतो. + +```solidity + /** + * @dev deposit an amount of ERC20 to a recipient's balance on L2. + * @param _l1Token Address of the L1 ERC20 we are depositing + * @param _l2Token Address of the L1 respective L2 ERC20 + * @param _to L2 address to credit the withdrawal to. + * @param _amount Amount of the ERC20 to deposit. + * @param _l2Gas Gas limit required to complete the deposit on L2. + * @param _data Optional data to forward to L2. This data is provided + * solely as a convenience for external contracts. Aside from enforcing a maximum + * length, these contracts provide no guarantees about its content. + */ + function depositERC20To( + address _l1Token, + address _l2Token, + address _to, + uint256 _amount, + uint32 _l2Gas, + bytes calldata _data + ) external; +``` + +हे फंक्शन `depositERC20` शी जवळजवळ समान आहे, परंतु ते तुम्हाला ERC-20 वेगळ्या ऍड्रेसवर पाठवू देते. + +```solidity + /************************* + * Cross-chain Functions * + *************************/ + + /** + * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the + * L1 ERC20 token. + * This call will fail if the initialized withdrawal from L2 has not been finalized. + * + * @param _l1Token Address of L1 token to finalizeWithdrawal for. + * @param _l2Token Address of L2 token where withdrawal was initiated. + * @param _from L2 address initiating the transfer. + * @param _to L1 address to credit the withdrawal to. + * @param _amount Amount of the ERC20 to deposit. + * @param _data Data provided by the sender on L2. This data is provided + * solely as a convenience for external contracts. Aside from enforcing a maximum + * length, these contracts provide no guarantees about its content. + */ + function finalizeERC20Withdrawal( + address _l1Token, + address _l2Token, + address _from, + address _to, + uint256 _amount, + bytes calldata _data + ) external; +} +``` + +Optimism मध्ये विड्रॉवल (आणि L2 पासून L1 पर्यंतचे इतर मेसेजेस) ही दोन टप्प्यांची प्रक्रिया आहे: + +1. L2 वर एक आरंभिक ट्रान्झॅक्शन. +2. L1 वर एक अंतिम किंवा क्लेमिंग ट्रान्झॅक्शन. + L2 ट्रान्झॅक्शनसाठी [फॉल्ट चॅलेंज कालावधी](https://community.optimism.io/docs/how-optimism-works/#fault-proofs) संपल्यानंतर हा ट्रान्झॅक्शन होणे आवश्यक आहे. + +### IL1StandardBridge {#il1standardbridge} + +[हा इंटरफेस येथे परिभाषित केला आहे](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/IL1StandardBridge.sol). +या फाइलमध्ये ETH साठी इव्हेंट आणि फंक्शन परिभाषा आहेत. +या परिभाषा वरील `IL1ERC20Bridge` मध्ये ERC-20 साठी परिभाषित केलेल्या परिभाषांशी खूप सारख्या आहेत. + +ब्रिज इंटरफेस दोन फाइल्समध्ये विभागलेला आहे कारण काही ERC-20 टोकन्सना सानुकूल प्रक्रिया आवश्यक असते आणि ते स्टँडर्ड ब्रिजद्वारे हाताळले जाऊ शकत नाहीत. +अशा प्रकारे असा टोकन हाताळणारा सानुकूल ब्रिज `IL1ERC20Bridge` लागू करू शकतो आणि त्याला ETH ब्रिज करण्याची गरज नाही. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0 <0.9.0; + +import "./IL1ERC20Bridge.sol"; + +/** + * @title IL1StandardBridge + */ +interface IL1StandardBridge is IL1ERC20Bridge { + /********** + * Events * + **********/ + event ETHDepositInitiated( + address indexed _from, + address indexed _to, + uint256 _amount, + bytes _data + ); +``` + +हा इव्हेंट ERC-20 आवृत्ती (`ERC20DepositInitiated`) शी जवळजवळ समान आहे, फक्त L1 आणि L2 टोकन ऍड्रेस वगळता. +इतर इव्हेंट्स आणि फंक्शन्ससाठीही हेच सत्य आहे. + +```solidity + event ETHWithdrawalFinalized( + . + . + . + ); + + /******************** + * Public Functions * + ********************/ + + /** + * @dev Deposit an amount of the ETH to the caller's balance on L2. + . + . + . + */ + function depositETH(uint32 _l2Gas, bytes calldata _data) external payable; + + /** + * @dev Deposit an amount of ETH to a recipient's balance on L2. + . + . + . + */ + function depositETHTo( + address _to, + uint32 _l2Gas, + bytes calldata _data + ) external payable; + + /************************* + * Cross-chain Functions * + *************************/ + + /** + * @dev Complete a withdrawal from L2 to L1, and credit funds to the recipient's balance of the + * L1 ETH token. Since only the xDomainMessenger can call this function, it will never be called + * before the withdrawal is finalized. + . + . + . + */ + function finalizeETHWithdrawal( + address _from, + address _to, + uint256 _amount, + bytes calldata _data + ) external; +} +``` + +### CrossDomainEnabled {#crossdomainenabled} + +[हा कॉन्ट्रॅक्ट](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/CrossDomainEnabled.sol) दोन्ही ब्रिजेस ([L1](#the-l1-bridge-contract) आणि [L2](#the-l2-bridge-contract)) द्वारे दुसऱ्या लेयरवर मेसेज पाठवण्यासाठी वारसा म्हणून मिळतो. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity >0.5.0 <0.9.0; + +/* Interface Imports */ +import { ICrossDomainMessenger } from "./ICrossDomainMessenger.sol"; +``` + +[हा इंटरफेस](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/bridge/ICrossDomainMessenger.sol) क्रॉस डोमेन मेसेंजरचा वापर करून दुसऱ्या लेयरवर मेसेज कसे पाठवायचे हे कॉन्ट्रॅक्टला सांगतो. +हा क्रॉस डोमेन मेसेंजर एक संपूर्ण वेगळी प्रणाली आहे, आणि त्याला स्वतःचा लेख आवश्यक आहे, जो मी भविष्यात लिहिण्याची आशा करतो. + +```solidity +/** + * @title CrossDomainEnabled + * @dev Helper contract for contracts performing cross-domain communications + * + * Compiler used: defined by inheriting contract + */ +contract CrossDomainEnabled { + /************* + * Variables * + *************/ + + // Messenger contract used to send and receive messages from the other domain. + address public messenger; + + /*************** + * Constructor * + ***************/ + + /** + * @param _messenger Address of the CrossDomainMessenger on the current layer. + */ + constructor(address _messenger) { + messenger = _messenger; + } +``` + +कॉन्ट्रॅक्टला माहित असणे आवश्यक असलेले एक पॅरामीटर, या लेयरवरील क्रॉस डोमेन मेसेंजरचा ऍड्रेस. +हे पॅरामीटर कन्स्ट्रक्टरमध्ये एकदाच सेट केले जाते आणि कधीही बदलत नाही. + +```solidity + + /********************** + * Function Modifiers * + **********************/ + + /** + * Enforces that the modified function is only callable by a specific cross-domain account. + * @param _sourceDomainAccount The only account on the originating domain which is + * authenticated to call this function. + */ + modifier onlyFromCrossDomainAccount(address _sourceDomainAccount) { +``` + +क्रॉस डोमेन मेसेजिंग ज्या ब्लॉकचेनवर चालू आहे (Ethereum मेननेट किंवा Optimism) त्यावरील कोणत्याही कॉन्ट्रॅक्टद्वारे उपलब्ध आहे. +परंतु आम्हाला प्रत्येक बाजूच्या ब्रिजला _फक्त_ विशिष्ट मेसेजेवर विश्वास ठेवण्याची गरज आहे जर ते दुसऱ्या बाजूच्या ब्रिजवरून आले असतील. + +```solidity + require( + msg.sender == address(getCrossDomainMessenger()), + "OVM_XCHAIN: messenger contract unauthenticated" + ); +``` + +केवळ योग्य क्रॉस डोमेन मेसेंजर (`messenger`, जसे आपण खाली पाहता) कडून आलेल्या मेसेजेवर विश्वास ठेवला जाऊ शकतो. + +```solidity + + require( + getCrossDomainMessenger().xDomainMessageSender() == _sourceDomainAccount, + "OVM_XCHAIN: wrong sender of cross-domain message" + ); +``` + +क्रॉस डोमेन मेसेंजर दुसऱ्या लेयरवर मेसेज पाठवणाऱ्या ऍड्रेसला देण्याचा मार्ग म्हणजे [`.xDomainMessageSender()` फंक्शन](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1CrossDomainMessenger.sol#L122-L128). +जोपर्यंत मेसेजद्वारे सुरू केलेल्या ट्रान्झॅक्शनमध्ये तो कॉल केला जातो तोपर्यंत तो ही माहिती देऊ शकतो. + +आम्हाला मिळालेला मेसेज दुसऱ्या ब्रिजवरून आला आहे याची खात्री करणे आवश्यक आहे. + +```solidity + + _; + } + + /********************** + * Internal Functions * + **********************/ + + /** + * Gets the messenger, usually from storage. This function is exposed in case a child contract + * needs to override. + * @return The address of the cross-domain messenger contract which should be used. + */ + function getCrossDomainMessenger() internal virtual returns (ICrossDomainMessenger) { + return ICrossDomainMessenger(messenger); + } +``` + +हे फंक्शन क्रॉस डोमेन मेसेंजर परत करते. +आपण `messenger` व्हेरिएबलऐवजी फंक्शन वापरतो कारण यातून वारसा घेणाऱ्या कॉन्ट्रॅक्ट्सना कोणता क्रॉस डोमेन मेसेंजर वापरायचा हे निर्दिष्ट करण्यासाठी एक अल्गोरिदम वापरण्याची परवानगी मिळते. + +```solidity + + /** + * Sends a message to an account on another domain + * @param _crossDomainTarget The intended recipient on the destination domain + * @param _message The data to send to the target (usually calldata to a function with + * `onlyFromCrossDomainAccount()`) + * @param _gasLimit The gasLimit for the receipt of the message on the target domain. + */ + function sendCrossDomainMessage( + address _crossDomainTarget, + uint32 _gasLimit, + bytes memory _message +``` + +शेवटी, दुसऱ्या लेयरवर मेसेज पाठवणारे फंक्शन. + +```solidity + ) internal { + // slither-disable-next-line reentrancy-events, reentrancy-benign +``` + +[स्लिथर](https://github.com/crytic/slither) हा एक स्टॅटिक अॅनालाइझर आहे जो Optimism प्रत्येक कॉन्ट्रॅक्टवर असुरक्षितता आणि इतर संभाव्य समस्या शोधण्यासाठी चालवतो. +या प्रकरणात, खालील ओळ दोन असुरक्षितता दर्शवते: + +1. [पुनर्प्रवेश इव्हेंट्स](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-3) +2. [सौम्य पुनर्प्रवेश](https://github.com/crytic/slither/wiki/Detector-Documentation#reentrancy-vulnerabilities-2) + +```solidity + getCrossDomainMessenger().sendMessage(_crossDomainTarget, _message, _gasLimit); + } +} +``` + +या प्रकरणात आम्हाला पुनर्प्रवेशाची चिंता नाही, आम्हाला माहित आहे की `getCrossDomainMessenger()` एक विश्वासार्ह ऍड्रेस परत करतो, जरी स्लिथरला हे माहित नसले तरी. + +### L1 ब्रिज कॉन्ट्रॅक्ट {#the-l1-bridge-contract} + +[या कॉन्ट्रॅक्टचा सोर्स कोड येथे आहे](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L1/messaging/L1StandardBridge.sol). + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; +``` + +हे इंटरफेस इतर कॉन्ट्रॅक्ट्सचा भाग असू शकतात, त्यामुळे त्यांना Solidity च्या विस्तृत आवृत्त्यांना समर्थन द्यावे लागते. +परंतु ब्रिज स्वतः आमचा कॉन्ट्रॅक्ट आहे, आणि आम्ही ते कोणती Solidity आवृत्ती वापरते याबद्दल कठोर असू शकतो. + +```solidity +/* Interface Imports */ +import { IL1StandardBridge } from "./IL1StandardBridge.sol"; +import { IL1ERC20Bridge } from "./IL1ERC20Bridge.sol"; +``` + +[IL1ERC20Bridge](#IL1ERC20Bridge) आणि [IL1StandardBridge](#IL1StandardBridge) वर स्पष्ट केले आहेत. + +```solidity +import { IL2ERC20Bridge } from "../../L2/messaging/IL2ERC20Bridge.sol"; +``` + +[हा इंटरफेस](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) आम्हाला L2 वरील स्टँडर्ड ब्रिज नियंत्रित करण्यासाठी मेसेज तयार करण्याची परवानगी देतो. + +```solidity +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +``` + +[हा इंटरफेस](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) आम्हाला ERC-20 कॉन्ट्रॅक्ट नियंत्रित करण्याची परवानगी देतो. +[तुम्ही याबद्दल येथे अधिक वाचू शकता](/developers/tutorials/erc20-annotated-code/#the-interface). + +```solidity +/* Library Imports */ +import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.sol"; +``` + +[वर स्पष्ट केल्याप्रमाणे](#crossdomainenabled), हा कॉन्ट्रॅक्ट इंटरलेअर मेसेजिंगसाठी वापरला जातो. + +```solidity +import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol"; +``` + +[`Lib_PredeployAddresses`](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/libraries/constants/Lib_PredeployAddresses.sol) मध्ये L2 कॉन्ट्रॅक्ट्सचे ऍड्रेस आहेत ज्यांचे ऍड्रेस नेहमी समान असतात. यात L2 वरील स्टँडर्ड ब्रिजचा समावेश आहे. + +```solidity +import { Address } from "@openzeppelin/contracts/utils/Address.sol"; +``` + +[OpenZeppelin's Address युटिलिटीज](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol). हे कॉन्ट्रॅक्ट ऍड्रेस आणि बाह्य मालकीच्या खात्यांशी (EOA) संबंधित ऍड्रेसमध्ये फरक करण्यासाठी वापरले जाते. + +लक्षात ठेवा की हे एक परिपूर्ण समाधान नाही, कारण थेट कॉल आणि कॉन्ट्रॅक्टच्या कन्स्ट्रक्टरमधून केलेल्या कॉलमध्ये फरक करण्याचा कोणताही मार्ग नाही, परंतु किमान हे आम्हाला काही सामान्य वापरकर्त्याच्या चुका ओळखण्यास आणि टाळण्यास मदत करते. + +```solidity +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +``` + +[ERC-20 स्टँडर्ड](https://eips.ethereum.org/EIPS/eip-20) कॉन्ट्रॅक्टला अपयश कळवण्यासाठी दोन मार्गांना समर्थन देते: + +1. रिव्हर्ट +2. `false` परत करणे + +दोन्ही प्रकरणे हाताळल्याने आमचा कोड अधिक क्लिष्ट होईल, म्हणून त्याऐवजी आम्ही [OpenZeppelin's `SafeERC20`](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol) वापरतो, जे [सर्व अपयशांचे परिणाम रिव्हर्टमध्ये होतील याची खात्री करते](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/utils/SafeERC20.sol#L96). + +```solidity +/** + * @title L1StandardBridge + * @dev The L1 ETH and ERC20 Bridge is a contract which stores deposited L1 funds and standard + * tokens that are in use on L2. It synchronizes a corresponding L2 Bridge, informing it of deposits + * and listening to it for newly finalized withdrawals. + * + */ +contract L1StandardBridge is IL1StandardBridge, CrossDomainEnabled { + using SafeERC20 for IERC20; +``` + +ही ओळ आम्ही प्रत्येक वेळी `IERC20` इंटरफेस वापरताना `SafeERC20` रॅपर वापरण्याचे कसे निर्दिष्ट करतो हे दर्शवते. + +```solidity + + /******************************** + * External Contract References * + ********************************/ + + address public l2TokenBridge; +``` + +[L2StandardBridge](#the-l2-bridge-contract) चा ऍड्रेस. + +```solidity + + // Maps L1 token to L2 token to balance of the L1 token deposited + mapping(address => mapping(address => uint256)) public deposits; +``` + +अशा प्रकारची दुहेरी [मॅपिंग](https://www.tutorialspoint.com/solidity/solidity_mappings.htm) [द्विमितीय विरळ अ‍ॅरे](https://en.wikipedia.org/wiki/Sparse_matrix) परिभाषित करण्याचा एक मार्ग आहे. +या डेटा स्ट्रक्चरमधील मूल्ये `deposit[L1 token addr][L2 token addr]` म्हणून ओळखली जातात. +डीफॉल्ट मूल्य शून्य आहे. +फक्त ज्या सेल्स वेगळ्या मूल्यावर सेट केल्या आहेत त्या स्टोरेजमध्ये लिहिल्या जातात. + +```solidity + + /*************** + * Constructor * + ***************/ + + // This contract lives behind a proxy, so the constructor parameters will go unused. + constructor() CrossDomainEnabled(address(0)) {} +``` + +स्टोरेजमधील सर्व व्हेरिएबल्स कॉपी न करता हा कॉन्ट्रॅक्ट अपग्रेड करण्याची इच्छा आहे. +हे करण्यासाठी आम्ही एक [`Proxy`](https://docs.openzeppelin.com/contracts/3.x/api/proxy) वापरतो, जो एका वेगळ्या कॉन्ट्रॅक्टवर कॉल हस्तांतरित करण्यासाठी [`delegatecall`](https://solidity-by-example.org/delegatecall/) वापरतो, ज्याचा ऍड्रेस प्रॉक्सी कॉन्ट्रॅक्टद्वारे संग्रहित केला जातो (तुम्ही अपग्रेड करता तेव्हा तुम्ही प्रॉक्सीला तो ऍड्रेस बदलण्यास सांगता). +तुम्ही `delegatecall` वापरता तेव्हा स्टोरेज _कॉलिंग_ कॉन्ट्रॅक्टचाच राहतो, त्यामुळे सर्व कॉन्ट्रॅक्ट स्थिती व्हेरिएबल्सच्या मूल्यांवर कोणताही परिणाम होत नाही. + +या पॅटर्नचा एक परिणाम असा आहे की `delegatecall` चा _कॉल केलेला_ कॉन्ट्रॅक्टचा स्टोरेज वापरला जात नाही आणि त्यामुळे त्याला पास केलेले कन्स्ट्रक्टर मूल्ये महत्त्वाची नसतात. +हेच कारण आहे की आम्ही `CrossDomainEnabled` कन्स्ट्रक्टरला एक निरर्थक मूल्य देऊ शकतो. +हेच कारण आहे की खालील इनिशियलायझेशन कन्स्ट्रक्टरपासून वेगळे आहे. + +```solidity + /****************** + * Initialization * + ******************/ + + /** + * @param _l1messenger L1 Messenger address being used for cross-chain communications. + * @param _l2TokenBridge L2 standard bridge address. + */ + // slither-disable-next-line external-function +``` + +ही [स्लिथर टेस्ट](https://github.com/crytic/slither/wiki/Detector-Documentation#public-function-that-could-be-declared-external) अशी फंक्शन्स ओळखते जी कॉन्ट्रॅक्ट कोडमधून कॉल केली जात नाहीत आणि त्यामुळे `public` ऐवजी `external` घोषित केली जाऊ शकतात. +`external` फंक्शन्सची गॅस किंमत कमी असू शकते, कारण त्यांना कॉलडेटा मध्ये पॅरामीटर्स दिले जाऊ शकतात. +`public` म्हणून घोषित केलेली फंक्शन्स कॉन्ट्रॅक्टमधून प्रवेश करण्यायोग्य असणे आवश्यक आहे. +कॉन्ट्रॅक्ट्स स्वतःचे कॉलडेटा बदलू शकत नाहीत, म्हणून पॅरामीटर्स मेमरीमध्ये असणे आवश्यक आहे. +जेव्हा असे फंक्शन बाहेरून कॉल केले जाते, तेव्हा कॉलडेटा मेमरीमध्ये कॉपी करणे आवश्यक असते, ज्याला गॅस लागतो. +या प्रकरणात फंक्शन फक्त एकदाच कॉल केले जाते, त्यामुळे अकार्यक्षमतेचा आम्हाला फरक पडत नाही. + +```solidity + function initialize(address _l1messenger, address _l2TokenBridge) public { + require(messenger == address(0), "Contract has already been initialized."); +``` + +`initialize` फंक्शन फक्त एकदाच कॉल केले पाहिजे. +जर L1 क्रॉस डोमेन मेसेंजर किंवा L2 टोकन ब्रिजचा ऍड्रेस बदलला, तर आम्ही एक नवीन प्रॉक्सी आणि एक नवीन ब्रिज तयार करतो जो त्याला कॉल करतो. +संपूर्ण प्रणाली अपग्रेड केल्याशिवाय हे घडण्याची शक्यता नाही, जी एक खूप दुर्मिळ घटना आहे. + +लक्षात ठेवा की या फंक्शनमध्ये अशी कोणतीही यंत्रणा नाही जी _कोण_ कॉल करू शकतो यावर निर्बंध घालते. +याचा अर्थ असा की सैद्धांतिकदृष्ट्या एक आक्रमणकर्ता आम्ही प्रॉक्सी आणि ब्रिजची पहिली आवृत्ती तैनात करेपर्यंत थांबू शकतो आणि नंतर वैध वापरकर्त्यापूर्वी `initialize` फंक्शनवर पोहोचण्यासाठी [फ्रंट-रन](https://solidity-by-example.org/hacks/front-running/) करू शकतो. परंतु हे टाळण्यासाठी दोन पद्धती आहेत: + +1. जर कॉन्ट्रॅक्ट्स थेट EOA द्वारे तैनात न करता [दुसऱ्या कॉन्ट्रॅक्टने त्यांना तयार करणाऱ्या ट्रान्झॅक्शनमध्ये](https://medium.com/upstate-interactive/creating-a-contract-with-a-smart-contract-bdb67c5c8595) तैनात केले गेले, तर संपूर्ण प्रक्रिया अणु असू शकते, आणि इतर कोणताही ट्रान्झॅक्शन कार्यान्वित होण्यापूर्वी पूर्ण होऊ शकते. +2. जर `initialize` साठीचा वैध कॉल अयशस्वी झाला, तर नवीन तयार केलेला प्रॉक्सी आणि ब्रिज दुर्लक्षित करणे आणि नवीन तयार करणे नेहमीच शक्य आहे. + +```solidity + messenger = _l1messenger; + l2TokenBridge = _l2TokenBridge; + } +``` + +हे दोन पॅरामीटर्स आहेत जे ब्रिजला माहित असणे आवश्यक आहे. + +```solidity + + /************** + * Depositing * + **************/ + + /** @dev Modifier requiring sender to be EOA. This check could be bypassed by a malicious + * contract via initcode, but it takes care of the user error we want to avoid. + */ + modifier onlyEOA() { + // Used to stop deposits from contracts (avoid accidentally lost tokens) + require(!Address.isContract(msg.sender), "Account not EOA"); + _; + } +``` + +हेच कारण आहे की आम्हाला OpenZeppelin च्या `Address` युटिलिटीजची आवश्यकता होती. + +```solidity + /** + * @dev This function can be called with no data + * to deposit an amount of ETH to the caller's balance on L2. + * Since the receive function doesn't take data, a conservative + * default amount is forwarded to L2. + */ + receive() external payable onlyEOA { + _initiateETHDeposit(msg.sender, msg.sender, 200_000, bytes("")); + } +``` + +हे फंक्शन चाचणी उद्देशांसाठी अस्तित्वात आहे. +लक्षात घ्या की ते इंटरफेस परिभाषांमध्ये दिसत नाही - ते सामान्य वापरासाठी नाही. + +```solidity + /** + * @inheritdoc IL1StandardBridge + */ + function depositETH(uint32 _l2Gas, bytes calldata _data) external payable onlyEOA { + _initiateETHDeposit(msg.sender, msg.sender, _l2Gas, _data); + } + + /** + * @inheritdoc IL1StandardBridge + */ + function depositETHTo( + address _to, + uint32 _l2Gas, + bytes calldata _data + ) external payable { + _initiateETHDeposit(msg.sender, _to, _l2Gas, _data); + } +``` + +ही दोन फंक्शन्स `_initiateETHDeposit` या फंक्शनच्या भोवती रॅपर्स आहेत, जे प्रत्यक्ष ETH डिपॉझिट हाताळते. + +```solidity + /** + * @dev Performs the logic for deposits by storing the ETH and informing the L2 ETH Gateway of + * the deposit. + * @param _from Account to pull the deposit from on L1. + * @param _to Account to give the deposit to on L2. + * @param _l2Gas Gas limit required to complete the deposit on L2. + * @param _data Optional data to forward to L2. This data is provided + * solely as a convenience for external contracts. Aside from enforcing a maximum + * length, these contracts provide no guarantees about its content. + */ + function _initiateETHDeposit( + address _from, + address _to, + uint32 _l2Gas, + bytes memory _data + ) internal { + // Construct calldata for finalizeDeposit call + bytes memory message = abi.encodeWithSelector( +``` + +क्रॉस डोमेन मेसेजेस ज्या प्रकारे काम करतात ते म्हणजे डेस्टिनेशन कॉन्ट्रॅक्टला त्याच्या कॉलडेटा म्हणून मेसेजसह कॉल केले जाते. +Solidity कॉन्ट्रॅक्ट्स नेहमी त्यांच्या कॉलडेटाचा अर्थ +[ABI स्पेसिफिकेशन्स](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html) नुसार लावतात. +Solidity फंक्शन [`abi.encodeWithSelector`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#abi-encoding-and-decoding-functions) तो कॉलडेटा तयार करते. + +```solidity + IL2ERC20Bridge.finalizeDeposit.selector, + address(0), + Lib_PredeployAddresses.OVM_ETH, + _from, + _to, + msg.value, + _data + ); +``` + +येथे मेसेज म्हणजे या पॅरामीटर्ससह [the `finalizeDeposit` function](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol#L141-L148) कॉल करणे: + +| पॅरामीटर | मूल्य | अर्थ | +| ------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| \_l1Token | address(0) | ETH (जे ERC-20 टोकन नाही) साठी L1 वर उभे राहण्यासाठी विशेष मूल्य | +| \_l2Token | Lib_PredeployAddresses.OVM_ETH | Optimism वर ETH व्यवस्थापित करणारा L2 कॉन्ट्रॅक्ट, `0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000` (हा कॉन्ट्रॅक्ट फक्त अंतर्गत Optimism वापरासाठी आहे) | +| \_from | \_from | L1 वर ETH पाठवणारा ऍड्रेस | +| \_to | \_to | L2 वर ETH प्राप्त करणारा ऍड्रेस | +| रक्कम | msg.value | पाठवलेली wei ची रक्कम (जी आधीच ब्रिजला पाठवली गेली आहे) | +| \_data | \_data | डिपॉझिटला जोडण्यासाठी अतिरिक्त डेटा | + +```solidity + // Send calldata into L2 + // slither-disable-next-line reentrancy-events + sendCrossDomainMessage(l2TokenBridge, _l2Gas, message); +``` + +क्रॉस डोमेन मेसेंजरद्वारे मेसेज पाठवा. + +```solidity + // slither-disable-next-line reentrancy-events + emit ETHDepositInitiated(_from, _to, msg.value, _data); + } +``` + +या हस्तांतरणाची माहिती ऐकणाऱ्या कोणत्याही विकेंद्रित ऍप्लिकेशनला कळवण्यासाठी एक इव्हेंट उत्सर्जित करा. + +```solidity + /** + * @inheritdoc IL1ERC20Bridge + */ + function depositERC20( + . + . + . + ) external virtual onlyEOA { + _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, msg.sender, _amount, _l2Gas, _data); + } + + /** + * @inheritdoc IL1ERC20Bridge + */ + function depositERC20To( + . + . + . + ) external virtual { + _initiateERC20Deposit(_l1Token, _l2Token, msg.sender, _to, _amount, _l2Gas, _data); + } +``` + +ही दोन फंक्शन्स `_initiateERC20Deposit` या फंक्शनच्या भोवती रॅपर्स आहेत, जे प्रत्यक्ष ERC-20 डिपॉझिट हाताळते. + +```solidity + /** + * @dev Performs the logic for deposits by informing the L2 Deposited Token + * contract of the deposit and calling a handler to lock the L1 funds. (e.g., transferFrom) + * + * @param _l1Token Address of the L1 ERC20 we are depositing + * @param _l2Token Address of the L1 respective L2 ERC20 + * @param _from Account to pull the deposit from on L1 + * @param _to Account to give the deposit to on L2 + * @param _amount Amount of the ERC20 to deposit. + * @param _l2Gas Gas limit required to complete the deposit on L2. + * @param _data Optional data to forward to L2. This data is provided + * solely as a convenience for external contracts. Aside from enforcing a maximum + * length, these contracts provide no guarantees about its content. + */ + function _initiateERC20Deposit( + address _l1Token, + address _l2Token, + address _from, + address _to, + uint256 _amount, + uint32 _l2Gas, + bytes calldata _data + ) internal { +``` + +हे फंक्शन वरील `_initiateETHDeposit` शी सारखे आहे, काही महत्त्वाच्या फरकांसह. +पहिला फरक म्हणजे हे फंक्शन टोकन ऍड्रेस आणि हस्तांतरित करण्याची रक्कम पॅरामीटर्स म्हणून प्राप्त करते. +ETH च्या बाबतीत ब्रिजवर केलेल्या कॉलमध्ये ब्रिज खात्यावर मालमत्तेचे हस्तांतरण (`msg.value`) आधीच समाविष्ट असते. + +```solidity + // When a deposit is initiated on L1, the L1 Bridge transfers the funds to itself for future + // withdrawals. safeTransferFrom also checks if the contract has code, so this will fail if + // _from is an EOA or address(0). + // slither-disable-next-line reentrancy-events, reentrancy-benign + IERC20(_l1Token).safeTransferFrom(_from, address(this), _amount); +``` + +ERC-20 टोकन हस्तांतरण ETH पासून वेगळ्या प्रक्रियेचे पालन करते: + +1. वापरकर्ता (`_from`) योग्य टोकन हस्तांतरित करण्यासाठी ब्रिजला परवानगी देतो. +2. वापरकर्ता टोकन कॉन्ट्रॅक्टच्या ऍड्रेस, रक्कम इत्यादीसह ब्रिजला कॉल करतो. +3. ब्रिज डिपॉझिट प्रक्रियेचा भाग म्हणून टोकन (स्वतःला) हस्तांतरित करतो. + +पहिला टप्पा शेवटच्या दोन टप्प्यांपासून वेगळ्या ट्रान्झॅक्शनमध्ये होऊ शकतो. +तथापि, फ्रंट-रनिंग ही समस्या नाही कारण `_initiateERC20Deposit` ला कॉल करणारी दोन फंक्शन्स (`depositERC20` आणि `depositERC20To`) या फंक्शनला फक्त `_from` पॅरामीटर म्हणून `msg.sender` सह कॉल करतात. + +```solidity + // Construct calldata for _l2Token.finalizeDeposit(_to, _amount) + bytes memory message = abi.encodeWithSelector( + IL2ERC20Bridge.finalizeDeposit.selector, + _l1Token, + _l2Token, + _from, + _to, + _amount, + _data + ); + + // Send calldata into L2 + // slither-disable-next-line reentrancy-events, reentrancy-benign + sendCrossDomainMessage(l2TokenBridge, _l2Gas, message); + + // slither-disable-next-line reentrancy-benign + deposits[_l1Token][_l2Token] = deposits[_l1Token][_l2Token] + _amount; +``` + +डिपॉझिट केलेल्या टोकन्सची रक्कम `deposits` डेटा स्ट्रक्चरमध्ये जोडा. +L2 वर एकाच L1 ERC-20 टोकनला संबंधित अनेक ऍड्रेस असू शकतात, त्यामुळे डिपॉझिटचा मागोवा ठेवण्यासाठी ब्रिजच्या L1 ERC-20 टोकनच्या बॅलन्सचा वापर करणे पुरेसे नाही. + +```solidity + + // slither-disable-next-line reentrancy-events + emit ERC20DepositInitiated(_l1Token, _l2Token, _from, _to, _amount, _data); + } + + /************************* + * Cross-chain Functions * + *************************/ + + /** + * @inheritdoc IL1StandardBridge + */ + function finalizeETHWithdrawal( + address _from, + address _to, + uint256 _amount, + bytes calldata _data +``` + +L2 ब्रिज L2 क्रॉस डोमेन मेसेंजरला एक मेसेज पाठवतो ज्यामुळे L1 क्रॉस डोमेन मेसेंजर या फंक्शनला कॉल करतो (एकदा L1 वर [मेसेज अंतिम करणारा ट्रान्झॅक्शन](https://community.optimism.io/docs/developers/bridge/messaging/#fees-for-l2-%E2%87%92-l1-transactions) सबमिट झाला की). + +```solidity + ) external onlyFromCrossDomainAccount(l2TokenBridge) { +``` + +हा एक _वैध_ मेसेज आहे याची खात्री करा, जो क्रॉस डोमेन मेसेंजरवरून येत आहे आणि L2 टोकन ब्रिजपासून सुरू होत आहे. +हे फंक्शन ब्रिजमधून ETH काढण्यासाठी वापरले जाते, त्यामुळे आम्हाला खात्री करावी लागेल की ते फक्त अधिकृत कॉलरद्वारेच कॉल केले जाईल. + +```solidity + // slither-disable-next-line reentrancy-events + (bool success, ) = _to.call{ value: _amount }(new bytes(0)); +``` + +ETH हस्तांतरित करण्याचा मार्ग म्हणजे `msg.value` मध्ये wei च्या रकमेसह प्राप्तकर्त्याला कॉल करणे. + +```solidity + require(success, "TransferHelper::safeTransferETH: ETH transfer failed"); + + // slither-disable-next-line reentrancy-events + emit ETHWithdrawalFinalized(_from, _to, _amount, _data); +``` + +विड्रॉवलबद्दल एक इव्हेंट उत्सर्जित करा. + +```solidity + } + + /** + * @inheritdoc IL1ERC20Bridge + */ + function finalizeERC20Withdrawal( + address _l1Token, + address _l2Token, + address _from, + address _to, + uint256 _amount, + bytes calldata _data + ) external onlyFromCrossDomainAccount(l2TokenBridge) { +``` + +हे फंक्शन वरील `finalizeETHWithdrawal` शी सारखे आहे, ERC-20 टोकनसाठी आवश्यक बदलांसह. + +```solidity + deposits[_l1Token][_l2Token] = deposits[_l1Token][_l2Token] - _amount; +``` + +`deposits` डेटा स्ट्रक्चर अपडेट करा. + +```solidity + + // When a withdrawal is finalized on L1, the L1 Bridge transfers the funds to the withdrawer + // slither-disable-next-line reentrancy-events + IERC20(_l1Token).safeTransfer(_to, _amount); + + // slither-disable-next-line reentrancy-events + emit ERC20WithdrawalFinalized(_l1Token, _l2Token, _from, _to, _amount, _data); + } + + + /***************************** + * Temporary - Migrating ETH * + *****************************/ + + /** + * @dev Adds ETH balance to the account. This is meant to allow for ETH + * to be migrated from an old gateway to a new gateway. + * NOTE: This is left for one upgrade only so we are able to receive the migrated ETH from the + * old contract + */ + function donateETH() external payable {} +} +``` + +ब्रिजची पूर्वीची अंमलबजावणी होती. +जेव्हा आम्ही त्या अंमलबजावणीवरून यावर आलो, तेव्हा आम्हाला सर्व मालमत्ता हलवावी लागली. +ERC-20 टोकन फक्त हलवले जाऊ शकतात. +तथापि, एका कॉन्ट्रॅक्टवर ETH हस्तांतरित करण्यासाठी तुम्हाला त्या कॉन्ट्रॅक्टची मंजुरी आवश्यक आहे, जी `donateETH` आपल्याला प्रदान करते. + +## L2 वरील ERC-20 टोकन्स {#erc-20-tokens-on-l2} + +एखाद्या ERC-20 टोकनला स्टँडर्ड ब्रिजमध्ये बसण्यासाठी, त्याला स्टँडर्ड ब्रिजला, आणि _फक्त_ स्टँडर्ड ब्रिजला, टोकन मिंट करण्याची परवानगी देणे आवश्यक आहे. +हे आवश्यक आहे कारण ब्रिजेसना हे सुनिश्चित करणे आवश्यक आहे की Optimism वर फिरणाऱ्या टोकन्सची संख्या L1 ब्रिज कॉन्ट्रॅक्टमध्ये लॉक केलेल्या टोकन्सच्या संख्येइतकी आहे. +जर L2 वर खूप जास्त टोकन असतील तर काही वापरकर्ते त्यांची मालमत्ता L1 वर परत ब्रिज करू शकणार नाहीत. +एका विश्वासार्ह ब्रिजऐवजी, आम्ही मूलतः [फ्रॅक्शनल रिझर्व्ह बँकिंग](https://www.investopedia.com/terms/f/fractionalreservebanking.asp) पुन्हा तयार करू. +जर L1 वर खूप जास्त टोकन असतील, तर त्यापैकी काही टोकन ब्रिज कॉन्ट्रॅक्टमध्ये कायमचे लॉक राहतील कारण L2 टोकन बर्न केल्याशिवाय त्यांना रिलीज करण्याचा कोणताही मार्ग नाही. + +### IL2StandardERC20 {#il2standarderc20} + +L2 वरील प्रत्येक ERC-20 टोकन जो स्टँडर्ड ब्रिज वापरतो, त्याला [हा इंटरफेस](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/IL2StandardERC20.sol) प्रदान करणे आवश्यक आहे, ज्यात स्टँडर्ड ब्रिजला आवश्यक असलेली फंक्शन्स आणि इव्हेंट्स आहेत. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +``` + +[The standard ERC-20 interface](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol) मध्ये `mint` आणि `burn` फंक्शन्स समाविष्ट नाहीत. +त्या पद्धती [the ERC-20 standard](https://eips.ethereum.org/EIPS/eip-20) द्वारे आवश्यक नाहीत, जे टोकन तयार आणि नष्ट करण्याच्या यंत्रणा अनिर्दिष्ट ठेवते. + +```solidity +import { IERC165 } from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; +``` + +[The ERC-165 interface](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol) एक कॉन्ट्रॅक्ट कोणती फंक्शन्स प्रदान करतो हे निर्दिष्ट करण्यासाठी वापरले जाते. +[तुम्ही येथे स्टँडर्ड वाचू शकता](https://eips.ethereum.org/EIPS/eip-165). + +```solidity +interface IL2StandardERC20 is IERC20, IERC165 { + function l1Token() external returns (address); +``` + +हे फंक्शन या कॉन्ट्रॅक्टवर ब्रिज केलेल्या L1 टोकनचा ऍड्रेस प्रदान करते. +लक्षात घ्या की आमच्याकडे उलट दिशेने समान फंक्शन नाही. +आम्हाला कोणताही L1 टोकन ब्रिज करण्याची क्षमता आवश्यक आहे, मग ते लागू करताना L2 सपोर्टची योजना होती की नाही. + +```solidity + + function mint(address _to, uint256 _amount) external; + + function burn(address _from, uint256 _amount) external; + + event Mint(address indexed _account, uint256 _amount); + event Burn(address indexed _account, uint256 _amount); +} +``` + +टोकन मिंट (तयार करणे) आणि बर्न (नष्ट करणे) करण्यासाठी फंक्शन्स आणि इव्हेंट्स. +ब्रिज ही एकमेव संस्था असावी जी ही फंक्शन्स चालवू शकेल जेणेकरून टोकन्सची संख्या योग्य असेल (L1 वर लॉक केलेल्या टोकन्सच्या संख्येइतकी). + +### L2StandardERC20 {#L2StandardERC20} + +[ही `IL2StandardERC20` इंटरफेसची आमची अंमलबजावणी आहे](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/standards/L2StandardERC20.sol). +तुम्हाला काही प्रकारच्या सानुकूल तर्काची आवश्यकता नसल्यास, तुम्ही हे वापरावे. + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +``` + +[The OpenZeppelin ERC-20 contract](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol). +Optimism चाक पुन्हा शोधण्यावर विश्वास ठेवत नाही, विशेषतः जेव्हा चाक चांगले ऑडिट केलेले असते आणि मालमत्ता ठेवण्यासाठी पुरेसे विश्वासार्ह असणे आवश्यक असते. + +```solidity +import "./IL2StandardERC20.sol"; + +contract L2StandardERC20 is IL2StandardERC20, ERC20 { + address public l1Token; + address public l2Bridge; +``` + +हे दोन अतिरिक्त कॉन्फिगरेशन पॅरामीटर्स आहेत ज्यांची आम्हाला आवश्यकता आहे आणि ERC-20 ला सामान्यतः नसते. + +```solidity + + /** + * @param _l2Bridge Address of the L2 standard bridge. + * @param _l1Token Address of the corresponding L1 token. + * @param _name ERC20 name. + * @param _symbol ERC20 symbol. + */ + constructor( + address _l2Bridge, + address _l1Token, + string memory _name, + string memory _symbol + ) ERC20(_name, _symbol) { + l1Token = _l1Token; + l2Bridge = _l2Bridge; + } +``` + +प्रथम ज्या कॉन्ट्रॅक्टमधून आपण वारसा घेतो त्याच्या कन्स्ट्रक्टरला कॉल करा (`ERC20(_name, _symbol)`) आणि नंतर आमचे स्वतःचे व्हेरिएबल्स सेट करा. + +```solidity + + modifier onlyL2Bridge() { + require(msg.sender == l2Bridge, "Only L2 Bridge can mint and burn"); + _; + } + + + // slither-disable-next-line external-function + function supportsInterface(bytes4 _interfaceId) public pure returns (bool) { + bytes4 firstSupportedInterface = bytes4(keccak256("supportsInterface(bytes4)")); // ERC165 + bytes4 secondSupportedInterface = IL2StandardERC20.l1Token.selector ^ + IL2StandardERC20.mint.selector ^ + IL2StandardERC20.burn.selector; + return _interfaceId == firstSupportedInterface || _interfaceId == secondSupportedInterface; + } +``` + +[ERC-165](https://eips.ethereum.org/EIPS/eip-165) अशा प्रकारे काम करते. +प्रत्येक इंटरफेस समर्थित फंक्शन्सची संख्या आहे आणि त्या फंक्शन्सच्या [ABI फंक्शन सिलेक्टर्स](https://docs.soliditylang.org/en/v0.8.12/abi-spec.html#function-selector) चा [exclusive or](https://en.wikipedia.org/wiki/Exclusive_or) म्हणून ओळखला जातो. + +L2 ब्रिज ERC-165 चा वापर सॅनिटि चेक म्हणून करतो की ज्या ERC-20 कॉन्ट्रॅक्टला तो मालमत्ता पाठवतो तो `IL2StandardERC20` आहे याची खात्री करण्यासाठी. + +**टीप:** दुष्ट कॉन्ट्रॅक्टला `supportsInterface` ला चुकीची उत्तरे देण्यापासून रोखण्यासाठी काहीही नाही, म्हणून ही एक सॅनिटि चेक यंत्रणा आहे, _सुरक्षा_ यंत्रणा नाही. + +```solidity + // slither-disable-next-line external-function + function mint(address _to, uint256 _amount) public virtual onlyL2Bridge { + _mint(_to, _amount); + + emit Mint(_to, _amount); + } + + // slither-disable-next-line external-function + function burn(address _from, uint256 _amount) public virtual onlyL2Bridge { + _burn(_from, _amount); + + emit Burn(_from, _amount); + } +} +``` + +फक्त L2 ब्रिजला मालमत्ता मिंट आणि बर्न करण्याची परवानगी आहे. + +`_mint` आणि `_burn` प्रत्यक्षात [OpenZeppelin ERC-20 कॉन्ट्रॅक्ट](/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn) मध्ये परिभाषित आहेत. +तो कॉन्ट्रॅक्ट त्यांना बाहेरून उघड करत नाही, कारण टोकन मिंट आणि बर्न करण्याच्या अटी ERC-20 वापरण्याच्या विविध मार्गांइतक्याच विविध आहेत. + +## L2 ब्रिज कोड {#l2-bridge-code} + +हा कोड Optimism वर ब्रिज चालवतो. +[या कॉन्ट्रॅक्टचा सोर्स येथे आहे](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/L2StandardBridge.sol). + +```solidity +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.9; + +/* Interface Imports */ +import { IL1StandardBridge } from "../../L1/messaging/IL1StandardBridge.sol"; +import { IL1ERC20Bridge } from "../../L1/messaging/IL1ERC20Bridge.sol"; +import { IL2ERC20Bridge } from "./IL2ERC20Bridge.sol"; +``` + +[IL2ERC20Bridge](https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts/contracts/L2/messaging/IL2ERC20Bridge.sol) इंटरफेस वरील [L1 समकक्ष](#IL1ERC20Bridge) शी खूप सारखा आहे. +दोन महत्त्वपूर्ण फरक आहेत: + +1. L1 वर तुम्ही डिपॉझिट सुरू करता आणि विड्रॉवल अंतिम करता. + येथे तुम्ही विड्रॉवल सुरू करता आणि डिपॉझिट अंतिम करता. +2. L1 वर ETH आणि ERC-20 टोकनमध्ये फरक करणे आवश्यक आहे. + L2 वर आपण दोघांसाठी समान फंक्शन्स वापरू शकतो कारण अंतर्गतपणे Optimism वरील ETH बॅलन्स ERC-20 टोकन म्हणून [0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000](https://explorer.optimism.io/address/0xDeadDeAddeAddEAddeadDEaDDEAdDeaDDeAD0000) ऍड्रेससह हाताळले जातात. + +```solidity +/* Library Imports */ +import { ERC165Checker } from "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; +import { CrossDomainEnabled } from "../../libraries/bridge/CrossDomainEnabled.sol"; +import { Lib_PredeployAddresses } from "../../libraries/constants/Lib_PredeployAddresses.sol"; + +/* Contract Imports */ +import { IL2StandardERC20 } from "../../standards/IL2StandardERC20.sol"; + +/** + * @title L2StandardBridge + * @dev The L2 Standard bridge is a contract which works together with the L1 Standard bridge to + * enable ETH and ERC20 transitions between L1 and L2. + * This contract acts as a minter for new tokens when it hears about deposits into the L1 Standard + * bridge. + * This contract also acts as a burner of the tokens intended for withdrawal, informing the L1 + * bridge to release L1 funds. + */ +contract L2StandardBridge is IL2ERC20Bridge, CrossDomainEnabled { + /******************************** + * External Contract References * + ********************************/ + + address public l1TokenBridge; +``` + +L1 ब्रिजच्या ऍड्रेसचा मागोवा ठेवा. +लक्षात घ्या की L1 समकक्षाच्या उलट, येथे आम्हाला _आवश्यक_ हे व्हेरिएबल आहे. +L1 ब्रिजचा ऍड्रेस आगाऊ माहित नसतो. + +```solidity + + /*************** + * Constructor * + ***************/ + + /** + * @param _l2CrossDomainMessenger Cross-domain messenger used by this contract. + * @param _l1TokenBridge Address of the L1 bridge deployed to the main chain. + */ + constructor(address _l2CrossDomainMessenger, address _l1TokenBridge) + CrossDomainEnabled(_l2CrossDomainMessenger) + { + l1TokenBridge = _l1TokenBridge; + } + + /*************** + * Withdrawing * + ***************/ + + /** + * @inheritdoc IL2ERC20Bridge + */ + function withdraw( + address _l2Token, + uint256 _amount, + uint32 _l1Gas, + bytes calldata _data + ) external virtual { + _initiateWithdrawal(_l2Token, msg.sender, msg.sender, _amount, _l1Gas, _data); + } + + /** + * @inheritdoc IL2ERC20Bridge + */ + function withdrawTo( + address _l2Token, + address _to, + uint256 _amount, + uint32 _l1Gas, + bytes calldata _data + ) external virtual { + _initiateWithdrawal(_l2Token, msg.sender, _to, _amount, _l1Gas, _data); + } +``` + +ही दोन फंक्शन्स विड्रॉवल सुरू करतात. +लक्षात घ्या की L1 टोकन ऍड्रेस निर्दिष्ट करण्याची गरज नाही. +L2 टोकन्सनी आम्हाला L1 समकक्षाचा ऍड्रेस सांगावा अशी अपेक्षा आहे. + +```solidity + + /** + * @dev Performs the logic for withdrawals by burning the token and informing + * the L1 token Gateway of the withdrawal. + * @param _l2Token Address of L2 token where withdrawal is initiated. + * @param _from Account to pull the withdrawal from on L2. + * @param _to Account to give the withdrawal to on L1. + * @param _amount Amount of the token to withdraw. + * @param _l1Gas Unused, but included for potential forward compatibility considerations. + * @param _data Optional data to forward to L1. This data is provided + * solely as a convenience for external contracts. Aside from enforcing a maximum + * length, these contracts provide no guarantees about its content. + */ + function _initiateWithdrawal( + address _l2Token, + address _from, + address _to, + uint256 _amount, + uint32 _l1Gas, + bytes calldata _data + ) internal { + // When a withdrawal is initiated, we burn the withdrawer's funds to prevent subsequent L2 + // usage + // slither-disable-next-line reentrancy-events + IL2StandardERC20(_l2Token).burn(msg.sender, _amount); +``` + +लक्षात घ्या की आम्ही `_from` पॅरामीटरवर अवलंबून नाही तर `msg.sender` वर आहोत जे खोटे करणे खूप कठीण आहे (मला माहित आहे तोपर्यंत अशक्य). + +```solidity + + // Construct calldata for l1TokenBridge.finalizeERC20Withdrawal(_to, _amount) + // slither-disable-next-line reentrancy-events + address l1Token = IL2StandardERC20(_l2Token).l1Token(); + bytes memory message; + + if (_l2Token == Lib_PredeployAddresses.OVM_ETH) { +``` + +L1 वर ETH आणि ERC-20 मध्ये फरक करणे आवश्यक आहे. + +```solidity + message = abi.encodeWithSelector( + IL1StandardBridge.finalizeETHWithdrawal.selector, + _from, + _to, + _amount, + _data + ); + } else { + message = abi.encodeWithSelector( + IL1ERC20Bridge.finalizeERC20Withdrawal.selector, + l1Token, + _l2Token, + _from, + _to, + _amount, + _data + ); + } + + // Send message up to L1 bridge + // slither-disable-next-line reentrancy-events + sendCrossDomainMessage(l1TokenBridge, _l1Gas, message); + + // slither-disable-next-line reentrancy-events + emit WithdrawalInitiated(l1Token, _l2Token, msg.sender, _to, _amount, _data); + } + + /************************************ + * Cross-chain Function: Depositing * + ************************************/ + + /** + * @inheritdoc IL2ERC20Bridge + */ + function finalizeDeposit( + address _l1Token, + address _l2Token, + address _from, + address _to, + uint256 _amount, + bytes calldata _data +``` + +हे फंक्शन `L1StandardBridge` द्वारे कॉल केले जाते. + +```solidity + ) external virtual onlyFromCrossDomainAccount(l1TokenBridge) { +``` + +मेसेजचा स्त्रोत वैध आहे याची खात्री करा. +हे महत्त्वाचे आहे कारण हे फंक्शन `_mint` ला कॉल करते आणि ब्रिजच्या L1 वरील टोकनने कव्हर न केलेल्या टोकन देण्यासाठी वापरले जाऊ शकते. + +```solidity + // Check the target token is compliant and + // verify the deposited token on L1 matches the L2 deposited token representation here + if ( + // slither-disable-next-line reentrancy-events + ERC165Checker.supportsInterface(_l2Token, 0x1d1d8b63) && + _l1Token == IL2StandardERC20(_l2Token).l1Token() +``` + +सॅनिटि चेक्स: + +1. योग्य इंटरफेस समर्थित आहे +2. L2 ERC-20 कॉन्ट्रॅक्टचा L1 ऍड्रेस टोकनच्या L1 स्त्रोताशी जुळतो + +```solidity + ) { + // When a deposit is finalized, we credit the account on L2 with the same amount of + // tokens. + // slither-disable-next-line reentrancy-events + IL2StandardERC20(_l2Token).mint(_to, _amount); + // slither-disable-next-line reentrancy-events + emit DepositFinalized(_l1Token, _l2Token, _from, _to, _amount, _data); +``` + +जर सॅनिटि चेक्स पास झाले, तर डिपॉझिट अंतिम करा: + +1. टोकन मिंट करा +2. योग्य इव्हेंट उत्सर्जित करा + +```solidity + } else { + // Either the L2 token which is being deposited-into disagrees about the correct address + // of its L1 token, or does not support the correct interface. + // This should only happen if there is a malicious L2 token, or if a user somehow + // specified the wrong L2 token address to deposit into. + // In either case, we stop the process here and construct a withdrawal + // message so that users can get their funds out in some cases. + // There is no way to prevent malicious token contracts altogether, but this does limit + // user error and mitigate some forms of malicious contract behavior. +``` + +जर वापरकर्त्याने चुकीचा L2 टोकन ऍड्रेस वापरून ओळखता येणारी चूक केली असेल, तर आम्ही डिपॉझिट रद्द करून L1 वर टोकन परत करू इच्छितो. +L2 वरून हे करण्याचा एकमेव मार्ग म्हणजे एक मेसेज पाठवणे ज्याला फॉल्ट चॅलेंज कालावधीची वाट पाहावी लागेल, परंतु वापरकर्त्यासाठी टोकन कायमचे गमावण्यापेक्षा ते बरेच चांगले आहे. + +```solidity + bytes memory message = abi.encodeWithSelector( + IL1ERC20Bridge.finalizeERC20Withdrawal.selector, + _l1Token, + _l2Token, + _to, // switched the _to and _from here to bounce back the deposit to the sender + _from, + _amount, + _data + ); + + // Send message up to L1 bridge + // slither-disable-next-line reentrancy-events + sendCrossDomainMessage(l1TokenBridge, 0, message); + // slither-disable-next-line reentrancy-events + emit DepositFailed(_l1Token, _l2Token, _from, _to, _amount, _data); + } + } +} +``` + +## निष्कर्ष {#conclusion} + +स्टँडर्ड ब्रिज मालमत्ता हस्तांतरणासाठी सर्वात लवचिक यंत्रणा आहे. +तथापि, ते इतके सामान्य असल्यामुळे ते वापरण्यास नेहमीच सोपे नसते. +विशेषतः विड्रॉवलसाठी, बहुतेक वापरकर्ते [तृतीय पक्ष ब्रिज](https://optimism.io/apps#bridge) वापरण्यास प्राधान्य देतात जे चॅलेंज कालावधीची वाट पाहत नाहीत आणि विड्रॉवल अंतिम करण्यासाठी मर्केल प्रूफची आवश्यकता नसते. + +हे ब्रिज सामान्यतः L1 वर मालमत्ता ठेवून काम करतात, जे ते थोड्या शुल्कासाठी त्वरित प्रदान करतात (अनेकदा स्टँडर्ड ब्रिज विड्रॉवलसाठी गॅसच्या खर्चापेक्षा कमी). +जेव्हा ब्रिज (किंवा ते चालवणारे लोक) L1 मालमत्तेची कमतरता भासेल अशी अपेक्षा करतात तेव्हा ते L2 वरून पुरेशी मालमत्ता हस्तांतरित करतात. हे खूप मोठे विड्रॉवल असल्याने, विड्रॉवल खर्च मोठ्या रकमेवर वितरित केला जातो आणि तो खूपच लहान टक्केवारी असतो. + +आशा आहे की या लेखामुळे तुम्हाला लेयर 2 कसे काम करते, आणि स्पष्ट आणि सुरक्षित Solidity कोड कसा लिहायचा याबद्दल अधिक समजण्यास मदत झाली असेल. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/reverse-engineering-a-contract/index.md b/public/content/translations/mr/developers/tutorials/reverse-engineering-a-contract/index.md new file mode 100644 index 00000000000..d50b6890488 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/reverse-engineering-a-contract/index.md @@ -0,0 +1,744 @@ +--- +title: "कॉन्ट्रॅक्टचे रिव्हर्स इंजिनिअरिंग" +description: "जेव्हा तुमच्याकडे सोर्स कोड नसतो तेव्हा कॉन्ट्रॅक्ट कसे समजून घ्यावे" +author: Ori Pomerantz +lang: mr +tags: [ "evm", "ऑपकोड्स" ] +skill: advanced +published: 2021-12-30 +--- + +## प्रस्तावना {#introduction} + +_ब्लॉकचेनवर कोणतीही गुपिते नाहीत_, जे काही घडते ते सुसंगत, पडताळणीयोग्य आणि सार्वजनिकरित्या उपलब्ध असते. आदर्शपणे, [कॉन्ट्रॅक्ट्सचा सोर्स कोड इथरस्कॅनवर प्रकाशित आणि सत्यापित केला गेला पाहिजे](https://etherscan.io/address/0xb8901acb165ed027e32754e0ffe830802919727f#code). तथापि, [ते नेहमीच असे नसते](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#code). या लेखात आपण सोर्स कोडशिवाय कॉन्ट्रॅक्टचे रिव्हर्स इंजिनिअर कसे करायचे हे शिकाल, [`0x2510c039cc3b061d79e564b38836da87e31b342f`](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f) या कॉन्ट्रॅक्टवर नजर टाकून. + +रिव्हर्स कंपाइलर्स आहेत, परंतु ते नेहमीच [वापरण्यायोग्य परिणाम](https://etherscan.io/bytecode-decompiler?a=0x2510c039cc3b061d79e564b38836da87e31b342f) देत नाहीत. या लेखात आपण [ऑपकोड्स](https://github.com/wolflo/evm-opcodes) वरून कॉन्ट्रॅक्टचे मॅन्युअली रिव्हर्स इंजिनिअरिंग करून ते कसे समजून घ्यावे, तसेच डीकंपाइलरच्या परिणामांचा अर्थ कसा लावावा हे शिकाल. + +हा लेख समजून घेण्यासाठी तुम्हाला EVM च्या मूलभूत गोष्टी आधीच माहित असल्या पाहिजेत आणि EVM असेंबलरशी किमान काही प्रमाणात परिचित असले पाहिजे. [तुम्ही या विषयांबद्दल येथे वाचू शकता](https://medium.com/mycrypto/the-ethereum-virtual-machine-how-does-it-work-9abac2b7c9e). + +## एक्झिक्यूटेबल कोड तयार करा {#prepare-the-executable-code} + +कॉन्ट्रॅक्टसाठी Etherscan वर जाऊन, **Contract** टॅबवर क्लिक करून आणि नंतर **Switch to Opcodes View** वर क्लिक करून तुम्ही ऑपकोड्स मिळवू शकता. तुम्हाला एक व्ह्यू मिळेल जो प्रति ओळ एक ऑपकोड असेल. + +![Etherscan मधून ऑपकोड व्ह्यू](opcode-view.png) + +तथापि, जंप्स समजून घेण्यासाठी, प्रत्येक ऑपकोड कोडमध्ये कुठे आहे हे तुम्हाला माहित असणे आवश्यक आहे. ते करण्यासाठी, एक मार्ग म्हणजे Google स्प्रेडशीट उघडून स्तंभ C मध्ये ऑपकोड पेस्ट करणे. [तुम्ही या आधीच तयार केलेल्या स्प्रेडशीटची प्रत बनवून पुढील पायऱ्या वगळू शकता](https://docs.google.com/spreadsheets/d/1tKmTJiNjUwHbW64wCKOSJxHjmh0bAUapt6btUYE7kDA/edit?usp=sharing). + +पुढील पायरी म्हणजे योग्य कोड लोकेशन्स मिळवणे जेणेकरून आपण जंप्स समजून घेऊ शकू. आपण स्तंभ B मध्ये ऑपकोडचा आकार आणि स्तंभ A मध्ये स्थान (हेक्साडेसिमलमध्ये) ठेवू. `B1` सेलमध्ये हे फंक्शन टाइप करा आणि नंतर ते कोडच्या शेवटपर्यंत स्तंभ B च्या उर्वरित भागासाठी कॉपी आणि पेस्ट करा. हे केल्यानंतर तुम्ही स्तंभ B लपवू शकता. + +``` +=1+IF(REGEXMATCH(C1,"PUSH"),REGEXEXTRACT(C1,"PUSH(\d+)"),0) +``` + +प्रथम हे फंक्शन स्वतः ऑपकोडसाठी एक बाइट जोडते, आणि नंतर `PUSH` शोधते. पुश ऑपकोड्स विशेष आहेत कारण त्यांना पुश केल्या जाणाऱ्या व्हॅल्यूसाठी अतिरिक्त बाइट्सची आवश्यकता असते. जर ऑपकोड `PUSH` असेल, तर आपण बाइट्सची संख्या काढतो आणि ती जोडतो. + +`A1` मध्ये पहिला ऑफसेट, शून्य टाका. नंतर, `A2` मध्ये, हे फंक्शन टाका आणि पुन्हा स्तंभ A च्या उर्वरित भागासाठी कॉपी आणि पेस्ट करा: + +``` +=dec2hex(hex2dec(A1)+B1) +``` + +आम्हाला हेक्साडेसिमल व्हॅल्यू मिळवण्यासाठी या फंक्शनची आवश्यकता आहे कारण जंप्स (`JUMP` आणि `JUMPI`) पूर्वी पुश केलेल्या व्हॅल्यूज आम्हाला हेक्साडेसिमलमध्ये दिल्या जातात. + +## एंट्री पॉइंट (0x00) {#the-entry-point-0x00} + +कॉन्ट्रॅक्ट्स नेहमी पहिल्या बाइटपासून एक्झिक्यूट केले जातात. हा कोडचा प्रारंभिक भाग आहे: + +| ऑफसेट | ऑपकोड | स्टॅक (ऑपकोडनंतर) | +| ----: | ------------ | ---------------------------------------------- | +| 0 | PUSH1 0x80 | 0x80 | +| 2 | PUSH1 0x40 | 0x40, 0x80 | +| 4 | MSTORE | रिकामे | +| 5 | PUSH1 0x04 | 0x04 | +| 7 | CALLDATASIZE | CALLDATASIZE 0x04 | +| 8 | LT | CALLDATASIZE\<4 | +| 9 | PUSH2 0x005e | 0x5E CALLDATASIZE\<4 | +| C | JUMPI | रिकामे | + +हा कोड दोन गोष्टी करतो: + +1. मेमरी लोकेशन्स 0x40-0x5F मध्ये 32 बाइट व्हॅल्यू म्हणून 0x80 लिहा (0x80 हे 0x5F मध्ये साठवले जाते, आणि 0x40-0x5E सर्व शून्य आहेत). +2. कॉलडेटाचा आकार वाचा. सामान्यतः इथेरियम कॉन्ट्रॅक्टसाठी कॉल डेटा [ABI (ॲप्लिकेशन बायनरी इंटरफेस)](https://docs.soliditylang.org/en/v0.8.10/abi-spec.html) चे पालन करतो, ज्यासाठी फंक्शन सिलेक्टरसाठी किमान चार बाइट्सची आवश्यकता असते. जर कॉल डेटाचा आकार चार पेक्षा कमी असेल, तर 0x5E वर जंप करा. + +![या भागासाठी फ्लोचार्ट](flowchart-entry.png) + +### 0x5E वरील हँडलर (नॉन-ABI कॉल डेटासाठी) {#the-handler-at-0x5e-for-non-abi-call-data} + +| ऑफसेट | ऑपकोड | +| ----: | ------------ | +| 5E | JUMPDEST | +| 5F | CALLDATASIZE | +| 60 | PUSH2 0x007c | +| 63 | JUMPI | + +हा स्निपेट `JUMPDEST` ने सुरू होतो. EVM (इथेरियम व्हर्च्युअल मशीन) प्रोग्राम्स `JUMPDEST` नसलेल्या ऑपकोडवर जंप केल्यास अपवाद टाकतात. मग ते CALLDATASIZE पाहते, आणि जर ते "true" असेल (म्हणजे शून्य नसेल) तर 0x7C वर जंप करते. आपण खाली त्यावर येऊ. + +| ऑफसेट | ऑपकोड | स्टॅक (ऑपकोडनंतर) | +| ----: | ---------- | ----------------------------------------------------------------------------------------------------- | +| 64 | CALLVALUE | कॉलद्वारे प्रदान केलेले [Wei](/glossary/#wei). Solidity मध्ये `msg.value` म्हटले जाते | +| 65 | PUSH1 0x06 | 6 CALLVALUE | +| 67 | PUSH1 0x00 | 0 6 CALLVALUE | +| 69 | DUP3 | CALLVALUE 0 6 CALLVALUE | +| 6A | DUP3 | 6 CALLVALUE 0 6 CALLVALUE | +| 6B | SLOAD | स्टोरेज[6] CALLVALUE 0 6 CALLVALUE | + +म्हणून जेव्हा कोणताही कॉल डेटा नसतो तेव्हा आपण स्टोरेज[6] चे व्हॅल्यू वाचतो. हे व्हॅल्यू काय आहे हे आम्हाला अद्याप माहित नाही, परंतु आम्ही कॉन्ट्रॅक्टला कोणताही कॉल डेटा नसताना मिळालेल्या व्यवहारांसाठी पाहू शकतो. ज्या व्यवहारांमध्ये फक्त ETH हस्तांतरित केले जाते आणि कोणताही कॉल डेटा नसतो (आणि म्हणून कोणतीही पद्धत नाही) त्यामध्ये Etherscan मध्ये `Transfer` ही पद्धत असते. खरं तर, [कॉन्ट्रॅक्टला मिळालेला पहिला व्यवहार](https://etherscan.io/tx/0xeec75287a583c36bcc7ca87685ab41603494516a0f5986d18de96c8e630762e7) एक हस्तांतरण आहे. + +जर आपण त्या व्यवहारात पाहिले आणि **अधिक पाहण्यासाठी क्लिक करा** वर क्लिक केले, तर आपल्याला दिसेल की कॉल डेटा, ज्याला इनपुट डेटा म्हणतात, खरोखरच रिकामा आहे (`0x`). हे देखील लक्षात घ्या की व्हॅल्यू 1.559 ETH आहे, जे नंतर संबंधित असेल. + +![कॉल डेटा रिकामा आहे](calldata-empty.png) + +पुढे, **स्टेट** टॅबवर क्लिक करा आणि आपण रिव्हर्स इंजिनिअरिंग करत असलेल्या कॉन्ट्रॅक्टचा विस्तार करा (0x2510...). तुम्ही पाहू शकता की व्यवहारादरम्यान `स्टोरेज[6]` बदलले आहे, आणि जर तुम्ही हेक्स (Hex) बदलून **नंबर** (Number) केले, तर तुम्हाला दिसेल की ते 1,559,000,000,000,000,000 झाले आहे, जे wei मध्ये हस्तांतरित केलेले मूल्य आहे (मी स्पष्टतेसाठी स्वल्पविराम जोडले आहेत), जे पुढील कॉन्ट्रॅक्ट मूल्याशी संबंधित आहे. + +![स्टोरेज[6] मधील बदल](storage6.png) + +जर आपण त्याच कालावधीतील [इतर `Transfer` व्यवहारांमुळे](https://etherscan.io/tx/0xf708d306de39c422472f43cb975d97b66fd5d6a6863db627067167cbf93d84d1#statechange) झालेल्या स्टेट बदलांकडे पाहिले तर आपल्याला दिसेल की `स्टोरेज[6]` ने काही काळासाठी कॉन्ट्रॅक्टच्या मूल्याचा मागोवा घेतला. आतासाठी आपण त्याला `Value*` म्हणू. तारका चिन्ह (`*`) आपल्याला आठवण करून देते की हे व्हेरिएबल काय करते हे आपल्याला अद्याप _माहीत_ नाही, परंतु ते फक्त कॉन्ट्रॅक्ट व्हॅल्यूचा मागोवा घेण्यासाठी असू शकत नाही कारण स्टोरेज वापरण्याची गरज नाही, जे खूप महाग आहे, जेव्हा तुम्ही `ADDRESS BALANCE` वापरून तुमच्या खात्यातील शिल्लक मिळवू शकता. पहिला ऑपकोड कॉन्ट्रॅक्टचा स्वतःचा पत्ता पुश करतो. दुसरा एक स्टॅकच्या शीर्षस्थानी असलेला पत्ता वाचतो आणि त्या पत्त्याच्या शिलकेसह बदलतो. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ------------------------------------------- | +| 6C | PUSH2 0x0075 | 0x75 Value\* CALLVALUE 0 6 CALLVALUE | +| 6F | SWAP2 | CALLVALUE Value\* 0x75 0 6 CALLVALUE | +| 70 | SWAP1 | Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 71 | PUSH2 0x01a7 | 0x01A7 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 74 | JUMP | | + +आपण जंप डेस्टिनेशनवर या कोडचा मागोवा घेणे सुरू ठेवू. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | ----------------------------------------------------------- | +| 1A7 | JUMPDEST | Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1A8 | PUSH1 0x00 | 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AA | DUP3 | CALLVALUE 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AB | NOT | 2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | + +`NOT` बिटवाईज आहे, म्हणून ते कॉल व्हॅल्यूमधील प्रत्येक बिटची व्हॅल्यू उलटते. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ------------------------------------------------------------------------------------------------------ | +| 1AC | DUP3 | Value\* 2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AD | GT | Value\*>2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AE | ISZERO | Value\*\<=2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1AF | PUSH2 0x01df | 0x01DF Value\*\<=2^256-CALLVALUE-1 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1B2 | JUMPI | | + +जर `Value*` 2^256-CALLVALUE-1 पेक्षा लहान असेल किंवा त्याच्या समान असेल तर आपण जंप करतो. हे ओव्हरफ्लो टाळण्यासाठी तर्कशास्त्र असल्यासारखे दिसते. आणि खरंच, आपण पाहतो की काही निरर्थक ऑपरेशन्सनंतर (उदाहरणार्थ, मेमरीमध्ये लिहिणे हटवले जाणार आहे) ऑफसेट 0x01DE वर ओव्हरफ्लो आढळल्यास कॉन्ट्रॅक्ट परत येतो, जे सामान्य वर्तन आहे. + +लक्षात घ्या की असा ओव्हरफ्लो अत्यंत अशक्य आहे, कारण त्यासाठी कॉल व्हॅल्यू आणि `Value*` ची बेरीज 2^256 wei, म्हणजे सुमारे 10^59 ETH च्या तुलनेने असावी लागेल. [एकूण ETH पुरवठा, लिहिण्याच्या वेळी, दोनशे दशलक्षांपेक्षा कमी आहे](https://etherscan.io/stat/supply). + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | -------- | ----------------------------------------- | +| 1DF | JUMPDEST | 0x00 Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1E0 | POP | Value\* CALLVALUE 0x75 0 6 CALLVALUE | +| 1E1 | ADD | Value\*+CALLVALUE 0x75 0 6 CALLVALUE | +| 1E2 | SWAP1 | 0x75 Value\*+CALLVALUE 0 6 CALLVALUE | +| 1E3 | JUMP | | + +जर आपण येथे आलो, तर `Value* + CALLVALUE` मिळवा आणि ऑफसेट 0x75 वर जंप करा. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | -------- | ------------------------------- | +| 75 | JUMPDEST | Value\*+CALLVALUE 0 6 CALLVALUE | +| 76 | SWAP1 | 0 Value\*+CALLVALUE 6 CALLVALUE | +| 77 | SWAP2 | 6 Value\*+CALLVALUE 0 CALLVALUE | +| 78 | SSTORE | 0 CALLVALUE | + +जर आपण येथे आलो (ज्यासाठी कॉल डेटा रिकामा असणे आवश्यक आहे) तर आपण `Value*` मध्ये कॉल व्हॅल्यू जोडतो. हे आपण `Transfer` व्यवहार काय करतात याच्याशी सुसंगत आहे. + +| ऑफसेट | ऑपकोड | +| ----: | ----- | +| 79 | POP | +| 7A | POP | +| 7B | STOP | + +शेवटी, स्टॅक साफ करा (जे आवश्यक नाही) आणि व्यवहाराचा यशस्वी शेवट सूचित करा. + +थोडक्यात सांगायचे तर, सुरुवातीच्या कोडसाठी येथे एक फ्लोचार्ट आहे. + +![एंट्री पॉइंट फ्लोचार्ट](flowchart-entry.png) + +## 0x7C वरील हँडलर {#the-handler-at-0x7c} + +मी मुद्दाम हेडिंगमध्ये हे हँडलर काय करते हे टाकले नाही. मुद्दा हा विशिष्ट कॉन्ट्रॅक्ट कसा काम करतो हे शिकवण्याचा नाही, तर कॉन्ट्रॅक्ट्सचे रिव्हर्स इंजिनिअरिंग कसे करावे हे शिकवण्याचा आहे. तुम्ही ते काय करते हे त्याच प्रकारे शिकाल जसे मी शिकलो, कोडचे अनुसरण करून. + +आपण येथे अनेक ठिकाणांहून येतो: + +- जर 1, 2, किंवा 3 बाइट्सचा कॉल डेटा असेल (ऑफसेट 0x63 पासून) +- जर मेथड सिग्नेचर अज्ञात असेल (ऑफसेट 0x42 आणि 0x5D पासून) + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ------------------------------------------------------------------------ | +| 7C | JUMPDEST | | +| 7D | PUSH1 0x00 | 0x00 | +| 7F | PUSH2 0x009d | 0x9D 0x00 | +| 82 | PUSH1 0x03 | 0x03 0x9D 0x00 | +| 84 | SLOAD | स्टोरेज[3] 0x9D 0x00 | + +हा आणखी एक स्टोरेज सेल आहे, जो मला कोणत्याही व्यवहारात सापडला नाही, त्यामुळे त्याचा अर्थ काय आहे हे जाणून घेणे अधिक कठीण आहे. खालील कोड ते अधिक स्पष्ट करेल. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| 85 | PUSH20 0xffffffffffffffffffffffffffffffffffffffff | 0xff....ff स्टोरेज[3] 0x9D 0x00 | +| 9A | AND | स्टोरेज[3]-as-address 0x9D 0x00 | + +हे ऑपकोड्स आम्ही स्टोरेज[3] मधून वाचलेले व्हॅल्यू 160 बिट्सपर्यंत कमी करतात, जे इथेरियम पत्त्याची लांबी आहे. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ----- | ----------------------------------------------------------------------------------- | +| 9B | SWAP1 | 0x9D स्टोरेज[3]-as-address 0x00 | +| 9C | JUMP | स्टोरेज[3]-as-address 0x00 | + +ही जंप अनावश्यक आहे, कारण आपण पुढील ऑपकोडवर जात आहोत. हा कोड गॅस-कार्यक्षमतेच्या बाबतीत जितका असू शकला असता तितका नाही. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- | +| 9D | JUMPDEST | स्टोरेज[3]-as-address 0x00 | +| 9E | SWAP1 | 0x00 स्टोरेज[3]-as-address | +| 9F | POP | स्टोरेज[3]-as-address | +| A0 | PUSH1 0x40 | 0x40 स्टोरेज[3]-as-address | +| A2 | MLOAD | Mem[0x40] स्टोरेज[3]-as-address | + +कोडच्या अगदी सुरुवातीला आम्ही Mem[0x40] हे 0x80 वर सेट केले. जर आपण नंतर 0x40 शोधले, तर आपल्याला दिसेल की आपण ते बदलत नाही - म्हणून आपण ते 0x80 आहे असे गृहीत धरू शकतो. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ----------------------------------------------------------------------------------------------------- | +| A3 | CALLDATASIZE | CALLDATASIZE 0x80 स्टोरेज[3]-as-address | +| A4 | PUSH1 0x00 | 0x00 CALLDATASIZE 0x80 स्टोरेज[3]-as-address | +| A6 | DUP3 | 0x80 0x00 CALLDATASIZE 0x80 स्टोरेज[3]-as-address | +| A7 | CALLDATACOPY | 0x80 स्टोरेज[3]-as-address | + +सर्व कॉल डेटा मेमरीमध्ये कॉपी करा, 0x80 पासून सुरू करून. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| A8 | PUSH1 0x00 | 0x00 0x80 स्टोरेज[3]-as-address | +| AA | DUP1 | 0x00 0x00 0x80 स्टोरेज[3]-as-address | +| AB | CALLDATASIZE | CALLDATASIZE 0x00 0x00 0x80 स्टोरेज[3]-as-address | +| AC | DUP4 | 0x80 CALLDATASIZE 0x00 0x00 0x80 स्टोरेज[3]-as-address | +| AD | DUP6 | स्टोरेज[3]-as-address 0x80 CALLDATASIZE 0x00 0x00 0x80 स्टोरेज[3]-as-address | +| AE | GAS | GAS स्टोरेज[3]-as-address 0x80 CALLDATASIZE 0x00 0x00 0x80 स्टोरेज[3]-as-address | +| AF | DELEGATE_CALL | | + +आता गोष्टी अधिक स्पष्ट झाल्या आहेत. हा कॉन्ट्रॅक्ट [प्रॉक्सी](https://blog.openzeppelin.com/proxy-patterns/) म्हणून काम करू शकतो, खरे काम करण्यासाठी स्टोरेज[3] मधील पत्त्यावर कॉल करून. `DELEGATE_CALL` एका वेगळ्या कॉन्ट्रॅक्टला कॉल करतो, परंतु त्याच स्टोरेजमध्ये राहतो. याचा अर्थ असा की डेलीगेटेड कॉन्ट्रॅक्ट, ज्यासाठी आम्ही प्रॉक्सी आहोत, त्याच स्टोरेज स्पेसमध्ये प्रवेश करतो. कॉलसाठी पॅरामीटर्स आहेत: + +- _Gas_: उर्वरित सर्व गॅस +- _कॉल केलेला पत्ता_: स्टोरेज[3]-as-address +- _कॉल डेटा_: 0x80 पासून सुरू होणारे CALLDATASIZE बाइट्स, जिथे आम्ही मूळ कॉल डेटा ठेवला +- _रिटर्न डेटा_: काहीही नाही (0x00 - 0x00) आम्ही इतर मार्गांनी रिटर्न डेटा मिळवू (खाली पहा) + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| B0 | RETURNDATASIZE | RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| B1 | DUP1 | RETURNDATASIZE RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| B2 | PUSH1 0x00 | 0x00 RETURNDATASIZE RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| B4 | DUP5 | 0x80 0x00 RETURNDATASIZE RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| B5 | RETURNDATACOPY | RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | + +येथे आम्ही सर्व रिटर्न डेटा 0x80 पासून सुरू होणाऱ्या मेमरी बफरमध्ये कॉपी करतो. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| B6 | DUP2 | (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| B7 | DUP1 | (((कॉल यशस्वी/अयशस्वी))) (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| B8 | ISZERO | (((कॉल अयशस्वी झाला का))) (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| B9 | PUSH2 0x00c0 | 0xC0 (((कॉल अयशस्वी झाला का))) (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| BC | JUMPI | (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| BD | DUP2 | RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| BE | DUP5 | 0x80 RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| BF | RETURN | | + +म्हणून कॉल नंतर आम्ही रिटर्न डेटा 0x80 - 0x80+RETURNDATASIZE बफरमध्ये कॉपी करतो, आणि जर कॉल यशस्वी झाला तर आम्ही त्याच बफरसह `RETURN` करतो. + +### DELEGATECALL अयशस्वी {#delegatecall-failed} + +जर आपण येथे, 0xC0 वर आलो, तर याचा अर्थ असा की आम्ही कॉल केलेला कॉन्ट्रॅक्ट रिव्हर्ट झाला. आम्ही त्या कॉन्ट्रॅक्टसाठी फक्त एक प्रॉक्सी असल्याने, आम्हाला समान डेटा परत करायचा आहे आणि रिव्हर्ट देखील करायचा आहे. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| C0 | JUMPDEST | (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| C1 | DUP2 | RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| C2 | DUP5 | 0x80 RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) RETURNDATASIZE (((कॉल यशस्वी/अयशस्वी))) 0x80 स्टोरेज[3]-as-address | +| C3 | REVERT | | + +म्हणून आम्ही पूर्वी `RETURN` साठी वापरलेल्या त्याच बफरसह `REVERT` करतो: 0x80 - 0x80+RETURNDATASIZE + +![प्रॉक्सी फ्लोचार्टवर कॉल करा](flowchart-proxy.png) + +## ABI कॉल्स {#abi-calls} + +जर कॉल डेटाचा आकार चार बाइट्स किंवा अधिक असेल तर हा एक वैध ABI कॉल असू शकतो. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ------------------------------------------------------------------------------------------------------------------------ | +| D | PUSH1 0x00 | 0x00 | +| F | CALLDATALOAD | (((कॉल डेटाचा पहिला शब्द (256 बिट्स)))) | +| 10 | PUSH1 0xe0 | 0xE0 (((कॉल डेटाचा पहिला शब्द (256 बिट्स)))) | +| 12 | SHR | (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) | + +Etherscan आम्हाला सांगतो की `1C` एक अज्ञात ऑपकोड आहे, कारण [हे Etherscan ने हे फिचर लिहिल्यानंतर जोडले होते](https://eips.ethereum.org/EIPS/eip-145) आणि त्यांनी ते अपडेट केलेले नाही. एक [अद्ययावत ऑपकोड टेबल](https://github.com/wolflo/evm-opcodes) आम्हाला दर्शविते की हे उजवीकडे शिफ्ट आहे + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 13 | DUP1 | (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) | +| 14 | PUSH4 0x3cd8045e | 0x3CD8045E (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) | +| 19 | GT | 0x3CD8045E>कॉल-डेटा-चे-पहिले-32-बिट्स (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) | +| 1A | PUSH2 0x0043 | 0x43 0x3CD8045E>कॉल-डेटा-चे-पहिले-32-बिट्स (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) | +| 1D | JUMPI | (((कॉल डेटाचे पहिले 32 बिट्स (4 बाइट्स)))) | + +मेथड सिग्नेचर मॅचिंग टेस्ट्स अशा प्रकारे दोन भागात विभागल्याने सरासरी अर्ध्या टेस्ट्स वाचतात. या नंतरचा कोड आणि 0x43 मधील कोड समान पॅटर्नचे अनुसरण करतो: कॉल डेटाचे पहिले 32 बिट्स `DUP1` करा, `PUSH4 (((मेथड सिग्नेचर>`, समानतेची तपासणी करण्यासाठी `EQ` चालवा, आणि नंतर मेथड सिग्नेचर जुळल्यास `JUMPI` करा. येथे मेथड सिग्नेचर्स, त्यांचे पत्ते आणि शक्य असल्यास [संबंधित मेथड डेफिनेशन](https://www.4byte.directory/) दिले आहेत: + +| मेथड | मेथड सिग्नेचर | जंप करण्यासाठी ऑफसेट | +| --------------------------------------------------------------------------------------------------------- | ------------- | -------------------- | +| [splitter()](https://www.4byte.directory/signatures/?bytes4_signature=0x3cd8045e) | 0x3cd8045e | 0x0103 | +| ??? | 0x81e580d3 | 0x0138 | +| [currentWindow()](https://www.4byte.directory/signatures/?bytes4_signature=0xba0bafb4) | 0xba0bafb4 | 0x0158 | +| ??? | 0x1f135823 | 0x00C4 | +| [merkleRoot()](https://www.4byte.directory/signatures/?bytes4_signature=0x2eb4a7ab) | 0x2eb4a7ab | 0x00ED | + +जर जुळणारे काही सापडले नाही, तर कोड [0x7C येथील प्रॉक्सी हँडलर](#the-handler-at-0x7c) वर जंप करतो, या आशेने की ज्या कॉन्ट्रॅक्टसाठी आपण प्रॉक्सी आहोत त्याच्याकडे जुळणारे काहीतरी असेल. + +![ABI कॉल्स फ्लोचार्ट](flowchart-abi.png) + +## splitter() {#splitter} + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ----------------------------- | +| 103 | JUMPDEST | | +| 104 | CALLVALUE | CALLVALUE | +| 105 | DUP1 | CALLVALUE CALLVALUE | +| 106 | ISZERO | CALLVALUE==0 CALLVALUE | +| 107 | PUSH2 0x010f | 0x010F CALLVALUE==0 CALLVALUE | +| 10A | JUMPI | CALLVALUE | +| 10B | PUSH1 0x00 | 0x00 CALLVALUE | +| 10D | DUP1 | 0x00 0x00 CALLVALUE | +| 10E | REVERT | | + +हे फंक्शन प्रथम तपासते की कॉलने कोणताही ETH पाठवला नाही. हे फंक्शन [`payable`](https://solidity-by-example.org/payable/) नाही. जर कोणी आम्हाला ETH पाठवले असेल तर ती चूक असावी आणि आम्ही `REVERT` करू इच्छितो जेणेकरून ते ETH अशा ठिकाणी राहणार नाही जिथे ते परत मिळवू शकत नाहीत. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 10F | JUMPDEST | | +| 110 | POP | | +| 111 | PUSH1 0x03 | 0x03 | +| 113 | SLOAD | (((स्टोरेज[3] म्हणजेच ज्या कॉन्ट्रॅक्टसाठी आम्ही प्रॉक्सी आहोत))) | +| 114 | PUSH1 0x40 | 0x40 (((स्टोरेज[3] म्हणजेच ज्या कॉन्ट्रॅक्टसाठी आम्ही प्रॉक्सी आहोत))) | +| 116 | MLOAD | 0x80 (((स्टोरेज[3] म्हणजेच ज्या कॉन्ट्रॅक्टसाठी आम्ही प्रॉक्सी आहोत))) | +| 117 | PUSH20 0xffffffffffffffffffffffffffffffffffffffff | 0xFF...FF 0x80 (((स्टोरेज[3] म्हणजेच ज्या कॉन्ट्रॅक्टसाठी आम्ही प्रॉक्सी आहोत))) | +| 12C | SWAP1 | 0x80 0xFF...FF (((स्टोरेज[3] म्हणजेच ज्या कॉन्ट्रॅक्टसाठी आम्ही प्रॉक्सी आहोत))) | +| 12D | SWAP2 | (((स्टोरेज[3] म्हणजेच ज्या कॉन्ट्रॅक्टसाठी आम्ही प्रॉक्सी आहोत))) 0xFF...FF 0x80 | +| 12E | AND | ProxyAddr 0x80 | +| 12F | DUP2 | 0x80 ProxyAddr 0x80 | +| 130 | MSTORE | 0x80 | + +आणि 0x80 मध्ये आता प्रॉक्सी पत्ता आहे + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | --------- | +| 131 | PUSH1 0x20 | 0x20 0x80 | +| 133 | ADD | 0xA0 | +| 134 | PUSH2 0x00e4 | 0xE4 0xA0 | +| 137 | JUMP | 0xA0 | + +### E4 कोड {#the-e4-code} + +ही ओळी आपण पहिल्यांदाच पाहत आहोत, परंतु त्या इतर मेथड्ससह शेअर केल्या आहेत (खाली पहा). म्हणून आम्ही स्टॅकमधील व्हॅल्यूला X म्हणू, आणि फक्त लक्षात ठेवा की `splitter()` मध्ये या X चे व्हॅल्यू 0xA0 आहे. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | ----------- | +| E4 | JUMPDEST | X | +| E5 | PUSH1 0x40 | 0x40 X | +| E7 | MLOAD | 0x80 X | +| E8 | DUP1 | 0x80 0x80 X | +| E9 | SWAP2 | X 0x80 0x80 | +| EA | SUB | X-0x80 0x80 | +| EB | SWAP1 | 0x80 X-0x80 | +| EC | RETURN | | + +म्हणून हा कोड स्टॅकमध्ये एक मेमरी पॉइंटर (X) प्राप्त करतो, आणि कॉन्ट्रॅक्टला 0x80 - X असलेल्या बफरसह `RETURN` करण्यास कारणीभूत ठरतो. + +`splitter()` च्या बाबतीत, हे तो पत्ता परत करते ज्यासाठी आपण प्रॉक्सी आहोत. `RETURN` 0x80-0x9F मधील बफर परत करते, जिथे आपण हा डेटा लिहिला होता (वरील ऑफसेट 0x130). + +## currentWindow() {#currentwindow} + +0x158-0x163 ऑफसेटमधील कोड `splitter()` मध्ये 0x103-0x10E मध्ये पाहिलेल्या कोडसारखाच आहे (`JUMPI` डेस्टिनेशन वगळता), म्हणून आम्हाला माहित आहे की `currentWindow()` देखील `payable` नाही. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ------------------------------------------------------------------------ | +| 164 | JUMPDEST | | +| 165 | POP | | +| 166 | PUSH2 0x00da | 0xDA | +| 169 | PUSH1 0x01 | 0x01 0xDA | +| 16B | SLOAD | स्टोरेज[1] 0xDA | +| 16C | DUP2 | 0xDA स्टोरेज[1] 0xDA | +| 16D | JUMP | स्टोरेज[1] 0xDA | + +### DA कोड {#the-da-code} + +हा कोड इतर मेथड्ससह देखील शेअर केला जातो. म्हणून आपण स्टॅकमधील व्हॅल्यूला Y म्हणू, आणि फक्त लक्षात ठेवा की `currentWindow()` मध्ये या Y चे व्हॅल्यू Storage[1] आहे. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | ---------------- | +| DA | JUMPDEST | Y 0xDA | +| DB | PUSH1 0x40 | 0x40 Y 0xDA | +| DD | MLOAD | 0x80 Y 0xDA | +| DE | SWAP1 | Y 0x80 0xDA | +| DF | DUP2 | 0x80 Y 0x80 0xDA | +| E0 | MSTORE | 0x80 0xDA | + +Y ला 0x80-0x9F मध्ये लिहा. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | -------------- | +| E1 | PUSH1 0x20 | 0x20 0x80 0xDA | +| E3 | ADD | 0xA0 0xDA | + +आणि बाकीचे आधीच [वर](#the-e4-code) स्पष्ट केले आहे. म्हणून 0xDA वर जंप केल्याने स्टॅक टॉप (Y) 0x80-0x9F मध्ये लिहिला जातो आणि ते व्हॅल्यू परत केले जाते. `currentWindow()` च्या बाबतीत, ते स्टोरेज[1] परत करते. + +## merkleRoot() {#merkleroot} + +0xED-0xF8 ऑफसेटमधील कोड `splitter()` मध्ये 0x103-0x10E मध्ये पाहिलेल्या कोडसारखाच आहे (`JUMPI` डेस्टिनेशन वगळता), म्हणून आम्हाला माहित आहे की `merkleRoot()` देखील `payable` नाही. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ------------------------------------------------------------------------ | +| F9 | JUMPDEST | | +| FA | POP | | +| FB | PUSH2 0x00da | 0xDA | +| FE | PUSH1 0x00 | 0x00 0xDA | +| 100 | SLOAD | स्टोरेज[0] 0xDA | +| 101 | DUP2 | 0xDA स्टोरेज[0] 0xDA | +| 102 | JUMP | स्टोरेज[0] 0xDA | + +जंप नंतर काय होते [ते आपण आधीच शोधले आहे](#the-da-code). म्हणून `merkleRoot()` स्टोरेज[0] परत करते. + +## 0x81e580d3 {#0x81e580d3} + +0x138-0x143 ऑफसेटमधील कोड `splitter()` मध्ये 0x103-0x10E मध्ये पाहिलेल्या कोडसारखाच आहे (`JUMPI` डेस्टिनेशन वगळता), म्हणून आम्हाला माहित आहे की हे फंक्शन देखील `payable` नाही. + +| ऑफसेट | ऑपकोड | स्टॅक | +| -------------------------------------------------------------------------: | ------------ | ------------------------------------------------------------------------------- | +| 99.63+40\*1.1018 = 143.702 | JUMPDEST | | +| 145 | POP | | +| 146 | PUSH2 0x00da | 0xDA | +| 149 | PUSH2 0x0153 | 0x0153 0xDA | +| 14C | CALLDATASIZE | CALLDATASIZE 0x0153 0xDA | +| 14D | PUSH1 0x04 | 0x04 CALLDATASIZE 0x0153 0xDA | +| 14F | PUSH2 0x018f | 0x018F 0x04 CALLDATASIZE 0x0153 0xDA | +| 152 | JUMP | 0x04 CALLDATASIZE 0x0153 0xDA | +| 18F | JUMPDEST | 0x04 CALLDATASIZE 0x0153 0xDA | +| १९० | PUSH1 0x00 | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 192 | PUSH1 0x20 | 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 194 | DUP3 | 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 195 | DUP5 | CALLDATASIZE 0x04 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| \_mintFee | SUB | CALLDATASIZE-4 0x20 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 197 | SLT | CALLDATASIZE-4\<32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 198 | ISZERO | CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 199 | PUSH2 0x01a0 | 0x01A0 CALLDATASIZE-4>=32 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 19C | JUMPI | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | + +असे दिसते की हे फंक्शन किमान 32 बाइट्स (एक शब्द) कॉल डेटा घेते. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------ | -------------------------------------------- | +| 19D | DUP1 | 0x00 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 19E | DUP2 | 0x00 0x00 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 19F | REVERT | | + +जर त्याला कॉल डेटा मिळाला नाही तर व्यवहार कोणत्याही रिटर्न डेटाशिवाय रिव्हर्ट होतो. + +चला पाहूया की जर फंक्शनला आवश्यक असलेला कॉल डेटा _मिळाला_ तर काय होते. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ----------------------------------------------------------- | +| 1A0 | JUMPDEST | 0x00 0x04 CALLDATASIZE 0x0153 0xDA | +| 1A1 | POP | 0x04 CALLDATASIZE 0x0153 0xDA | +| 1A2 | CALLDATALOAD | calldataload(4) CALLDATASIZE 0x0153 0xDA | + +`calldataload(4)` हा मेथड सिग्नेचर_नंतरचा_ कॉल डेटाचा पहिला शब्द आहे + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 1A3 | SWAP2 | 0x0153 CALLDATASIZE calldataload(4) 0xDA | +| 1A4 | SWAP1 | CALLDATASIZE 0x0153 calldataload(4) 0xDA | +| 1A5 | POP | 0x0153 calldataload(4) 0xDA | +| 1A6 | JUMP | calldataload(4) 0xDA | +| 153 | JUMPDEST | calldataload(4) 0xDA | +| 154 | PUSH2 0x016e | 0x016E calldataload(4) 0xDA | +| 157 | JUMP | calldataload(4) 0xDA | +| 16E | JUMPDEST | calldataload(4) 0xDA | +| 16F | PUSH1 0x04 | 0x04 calldataload(4) 0xDA | +| 171 | DUP2 | calldataload(4) 0x04 calldataload(4) 0xDA | +| 172 | DUP2 | 0x04 calldataload(4) 0x04 calldataload(4) 0xDA | +| 173 | SLOAD | स्टोरेज[4] calldataload(4) 0x04 calldataload(4) 0xDA | +| 174 | DUP2 | calldataload(4) स्टोरेज[4] calldataload(4) 0x04 calldataload(4) 0xDA | +| 175 | LT | calldataload(4)\<स्टोरेज[4] calldataload(4) 0x04 calldataload(4) 0xDA | +| 176 | PUSH2 0x017e | 0x017EC calldataload(4)\<स्टोरेज[4] calldataload(4) 0x04 calldataload(4) 0xDA | +| 179 | JUMPI | calldataload(4) 0x04 calldataload(4) 0xDA | + +जर पहिला शब्द स्टोरेज[4] पेक्षा कमी नसेल, तर फंक्शन अयशस्वी होते. ते कोणत्याही परत केलेल्या व्हॅल्यूशिवाय रिव्हर्ट होते: + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | ------------------------------------------------------------- | +| 17A | PUSH1 0x00 | 0x00 ... | +| 17C | DUP1 | 0x00 0x00 ... | +| 17D | REVERT | | + +जर calldataload(4) स्टोरेज[4] पेक्षा कमी असेल, तर आम्हाला हा कोड मिळतो: + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | ----------------------------------------------------------------------------------------- | +| 17E | JUMPDEST | calldataload(4) 0x04 calldataload(4) 0xDA | +| 17F | PUSH1 0x00 | 0x00 calldataload(4) 0x04 calldataload(4) 0xDA | +| 181 | SWAP2 | 0x04 calldataload(4) 0x00 calldataload(4) 0xDA | +| 182 | DUP3 | 0x00 0x04 calldataload(4) 0x00 calldataload(4) 0xDA | +| 183 | MSTORE | calldataload(4) 0x00 calldataload(4) 0xDA | + +आणि मेमरी लोकेशन्स 0x00-0x1F मध्ये आता डेटा 0x04 आहे (0x00-0x1E सर्व शून्य आहेत, 0x1F चार आहे) + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 184 | PUSH1 0x20 | 0x20 calldataload(4) 0x00 calldataload(4) 0xDA | +| 186 | SWAP1 | calldataload(4) 0x20 0x00 calldataload(4) 0xDA | +| 187 | SWAP2 | 0x00 0x20 calldataload(4) calldataload(4) 0xDA | +| 188 | SHA3 | (((0x00-0x1F चे SHA3))) calldataload(4) calldataload(4) 0xDA | +| 189 | ADD | (((0x00-0x1F चे SHA3)))+calldataload(4) calldataload(4) 0xDA | +| 18A | SLOAD | स्टोरेज[(((0x00-0x1F चे SHA3))) + calldataload(4)] calldataload(4) 0xDA | + +म्हणून स्टोरेजमध्ये एक लुकअप टेबल आहे, जे 0x000...0004 च्या SHA3 पासून सुरू होते आणि प्रत्येक वैध कॉल डेटा व्हॅल्यूसाठी (स्टोरेज[4] पेक्षा कमी व्हॅल्यू) एक एंट्री आहे. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 18B | SWAP1 | calldataload(4) स्टोरेज[(((0x00-0x1F चे SHA3))) + calldataload(4)] 0xDA | +| 18C | POP | स्टोरेज[(((0x00-0x1F चे SHA3))) + calldataload(4)] 0xDA | +| 18D | DUP2 | 0xDA स्टोरेज[(((0x00-0x1F चे SHA3))) + calldataload(4)] 0xDA | +| 18E | JUMP | स्टोरेज[(((0x00-0x1F चे SHA3))) + calldataload(4)] 0xDA | + +आपल्याला आधीच माहित आहे की [ऑफसेट 0xDA येथील कोड](#the-da-code) काय करतो, ते स्टॅक टॉप व्हॅल्यू कॉलरला परत करते. म्हणून हे फंक्शन लुकअप टेबलमधून व्हॅल्यू कॉलरला परत करते. + +## 0x1f135823 {#0x1f135823} + +0xC4-0xCF ऑफसेटमधील कोड `splitter()` मध्ये 0x103-0x10E मध्ये पाहिलेल्या कोडसारखाच आहे (`JUMPI` डेस्टिनेशन वगळता), म्हणून आम्हाला माहित आहे की हे फंक्शन देखील `payable` नाही. + +| ऑफसेट | ऑपकोड | स्टॅक | +| ----: | ------------ | ----------------- | +| D0 | JUMPDEST | | +| D1 | POP | | +| D2 | PUSH2 0x00da | 0xDA | +| D5 | PUSH1 0x06 | 0x06 0xDA | +| D7 | SLOAD | Value\* 0xDA | +| D8 | DUP2 | 0xDA Value\* 0xDA | +| D9 | JUMP | Value\* 0xDA | + +आपल्याला आधीच माहित आहे की [ऑफसेट 0xDA येथील कोड](#the-da-code) काय करतो, ते स्टॅक टॉप व्हॅल्यू कॉलरला परत करते. म्हणून हे फंक्शन `Value*` परत करते. + +### मेथड सारांश {#method-summary} + +तुम्हाला असे वाटते का की तुम्हाला या क्षणी कॉन्ट्रॅक्ट समजला आहे? मला नाही. आतापर्यंत आमच्याकडे या मेथड्स आहेत: + +| मेथड | अर्थ | +| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | +| हस्तांतरण | कॉलद्वारे प्रदान केलेले व्हॅल्यू स्वीकारा आणि त्या रकमेने `Value*` वाढवा | +| [splitter()](#splitter) | स्टोरेज[3] परत करा, प्रॉक्सी पत्ता | +| [currentWindow()](#currentwindow) | स्टोरेज[1] परत करा | +| [merkleRoot()](#merkeroot) | स्टोरेज[0] परत करा | +| [0x81e580d3](#0x81e580d3) | पॅरामीटर स्टोरेज[4] पेक्षा कमी असल्यास, लुकअप टेबलमधून व्हॅल्यू परत करा | +| [0x1f135823](#0x1f135823) | स्टोरेज[6] परत करा, म्हणजेच Value\* | + +परंतु आम्हाला माहित आहे की इतर कोणतीही कार्यक्षमता स्टोरेज[3] मधील कॉन्ट्रॅक्टद्वारे प्रदान केली जाते. कदाचित जर आम्हाला माहित असेल की तो कॉन्ट्रॅक्ट काय आहे तर आम्हाला काहीतरी सुगावा लागेल. सुदैवाने, हे ब्लॉकचेन आहे आणि सर्व काही ज्ञात आहे, किमान सिद्धांतानुसार. आम्ही स्टोरेज[3] सेट करणाऱ्या कोणत्याही मेथड्स पाहिल्या नाहीत, म्हणून ते कन्स्ट्रक्टरद्वारे सेट केले गेले असावे. + +## कन्स्ट्रक्टर {#the-constructor} + +जेव्हा आपण [एका कॉन्ट्रॅक्टकडे पाहतो](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f) तेव्हा आपण तो तयार करणारा व्यवहार देखील पाहू शकतो. + +![तयार केलेल्या व्यवहारावर क्लिक करा](create-tx.png) + +जर आपण त्या व्यवहारावर क्लिक केले, आणि नंतर **स्टेट** टॅबवर, तर आपण पॅरामीटर्सची प्रारंभिक व्हॅल्यू पाहू शकतो. विशेषतः, आपण पाहू शकतो की स्टोरेज[3] मध्ये [0x2f81e57ff4f4d83b40a9f719fd892d8e806e0761](https://etherscan.io/address/0x2f81e57ff4f4d83b40a9f719fd892d8e806e0761) आहे. त्या कॉन्ट्रॅक्टमध्ये गहाळ कार्यक्षमता असली पाहिजे. आपण ज्या कॉन्ट्रॅक्टची तपासणी करत आहोत त्यासाठी वापरलेल्या त्याच साधनांचा वापर करून आपण ते समजू शकतो. + +## प्रॉक्सी कॉन्ट्रॅक्ट {#the-proxy-contract} + +वर दिलेल्या मूळ कॉन्ट्रॅक्टसाठी वापरलेल्या त्याच तंत्रांचा वापर करून आपण पाहू शकतो की कॉन्ट्रॅक्ट परत येतो जर: + +- कॉलसोबत कोणताही ETH जोडलेला असेल (0x05-0x0F) +- कॉल डेटाचा आकार चार पेक्षा कमी असेल (0x10-0x19 आणि 0xBE-0xC2) + +आणि ते समर्थन देत असलेल्या मेथड्स आहेत: + +| मेथड | मेथड सिग्नेचर | जंप करण्यासाठी ऑफसेट | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | -------------------- | +| [scaleAmountByPercentage(uint256,uint256)](https://www.4byte.directory/signatures/?bytes4_signature=0x8ffb5c97) | 0x8ffb5c97 | 0x0135 | +| [isClaimed(uint256,address)](https://www.4byte.directory/signatures/?bytes4_signature=0xd2ef0795) | 0xd2ef0795 | 0x0151 | +| [claim(uint256,address,uint256,bytes32[])](https://www.4byte.directory/signatures/?bytes4_signature=0x2e7ba6ef) | 0x2e7ba6ef | 0x00F4 | +| [incrementWindow()](https://www.4byte.directory/signatures/?bytes4_signature=0x338b1d31) | 0x338b1d31 | 0x0110 | +| ??? | 0x3f26479e | 0x0118 | +| ??? | 0x1e7df9d3 | 0x00C3 | +| [currentWindow()](https://www.4byte.directory/signatures/?bytes4_signature=0xba0bafb4) | [0xba0bafb4](#currentwindow) | 0x0148 | +| [merkleRoot()](https://www.4byte.directory/signatures/?bytes4_signature=0x2eb4a7ab) | [0x2eb4a7ab](#merkleroot) | 0x0107 | +| ??? | [0x81e580d3](#0x81e580d3) | 0x0122 | +| ??? | [0x1f135823](#0x1f135823) | 0x00D8 | + +आपण खालील चार मेथड्स दुर्लक्षित करू शकतो कारण आपण त्यांच्यापर्यंत कधीच पोहोचणार नाही. त्यांचे सिग्नेचर्स असे आहेत की आपला मूळ कॉन्ट्रॅक्ट स्वतः त्यांची काळजी घेतो (तुम्ही वरील तपशील पाहण्यासाठी सिग्नेचर्सवर क्लिक करू शकता), म्हणून त्या [ओव्हरराइड केलेल्या मेथड्स](https://medium.com/upstate-interactive/solidity-override-vs-virtual-functions-c0a5dfb83aaf) असाव्यात. + +उर्वरित मेथड्सपैकी एक `claim()` आहे आणि दुसरी `isClaimed()` आहे, म्हणून तो एअरड्रॉप कॉन्ट्रॅक्टसारखा दिसतो. बाकीचे ऑपकोड बाय ऑपकोड तपासण्याऐवजी, आपण [डीकंपाइलरचा प्रयत्न करू शकतो](https://etherscan.io/bytecode-decompiler?a=0x2f81e57ff4f4d83b40a9f719fd892d8e806e0761), जो या कॉन्ट्रॅक्टमधून तीन फंक्शन्ससाठी वापरण्यायोग्य परिणाम देतो. इतरांचे रिव्हर्स इंजिनिअरिंग वाचकांसाठी अभ्यास म्हणून सोडले आहे. + +### scaleAmountByPercentage {#scaleamountbypercentage} + +या फंक्शनसाठी डीकंपाइलर आपल्याला हे देतो: + +```python +def unknown8ffb5c97(uint256 _param1, uint256 _param2) payable: + require calldata.size - 4 >=′ 64 + if _param1 and _param2 > -1 / _param1: + revert with 0, 17 + return (_param1 * _param2 / 100 * 10^6) +``` + +पहिले `require` तपासते की कॉल डेटामध्ये, फंक्शन सिग्नेचरच्या चार बाइट्स व्यतिरिक्त, किमान 64 बाइट्स आहेत, जे दोन पॅरामीटर्ससाठी पुरेसे आहेत. जर नसेल तर अर्थातच काहीतरी चूक आहे. + +`if` स्टेटमेंट असे दिसते की `_param1` शून्य नाही आणि `_param1 * _param2` ऋण नाही हे तपासते. हे कदाचित रॅप अराउंडचे प्रकार टाळण्यासाठी आहे. + +शेवटी, फंक्शन एक स्केल्ड व्हॅल्यू परत करते. + +### claim {#claim} + +डीकंपाइलर तयार करत असलेला कोड गुंतागुंतीचा आहे आणि त्यापैकी सर्वच आपल्यासाठी संबंधित नाहीत. मी उपयुक्त माहिती पुरवतात असे मला वाटणाऱ्या ओळींवर लक्ष केंद्रित करण्यासाठी त्यापैकी काही वगळणार आहे + +```python +def unknown2e7ba6ef(uint256 _param1, uint256 _param2, uint256 _param3, array _param4) payable: + ... + require _param2 == addr(_param2) + ... + if currentWindow <= _param1: + revert with 0, 'cannot claim for a future window' +``` + +येथे आपण दोन महत्त्वाच्या गोष्टी पाहतो: + +- `_param2`, जरी ते `uint256` म्हणून घोषित केले असले तरी, प्रत्यक्षात एक पत्ता आहे +- `_param1` ही दावा केलेली विंडो आहे, जी `currentWindow` किंवा त्यापूर्वीची असावी. + +```python + ... + if stor5[_claimWindow][addr(_claimFor)]: + revert with 0, 'Account already claimed the given window' +``` + +तर आता आपल्याला माहित आहे की स्टोरेज[5] हे विंडोज आणि पत्त्यांचे अॅरे आहे आणि पत्त्याने त्या विंडोसाठी बक्षीस दावा केला आहे की नाही हे दर्शवते. + +```python + ... + idx = 0 + s = 0 + while idx < _param4.length: + ... + if s + sha3(mem[(32 * _param4.length) + 328 len mem[(32 * _param4.length) + 296]]) > mem[(32 * idx) + 296]: + mem[mem[64] + 32] = mem[(32 * idx) + 296] + ... + s = sha3(mem[_62 + 32 len mem[_62]]) + continue + ... + s = sha3(mem[_66 + 32 len mem[_66]]) + continue + if unknown2eb4a7ab != s: + revert with 0, 'Invalid proof' +``` + +आम्हाला माहित आहे की `unknown2eb4a7ab` प्रत्यक्षात `merkleRoot()` फंक्शन आहे, म्हणून हा कोड [मर्कल प्रूफ](https://medium.com/crypto-0-nite/merkle-proofs-explained-6dd429623dc5) पडताळणी करत असल्यासारखा दिसतो. याचा अर्थ `_param4` हा एक मर्कल प्रूफ आहे. + +```python + call addr(_param2) with: + value unknown81e580d3[_param1] * _param3 / 100 * 10^6 wei + gas 30000 wei +``` + +एक कॉन्ट्रॅक्ट स्वतःचा ETH दुसऱ्या पत्त्यावर (कॉन्ट्रॅक्ट किंवा बाह्य मालकीचा) कसा हस्तांतरित करतो हे असे आहे. ते हस्तांतरित करायच्या रकमेच्या व्हॅल्यूने त्याला कॉल करते. तर असे दिसते की हा ETH चा एअरड्रॉप आहे. + +```python + if not return_data.size: + if not ext_call.success: + require ext_code.size(stor2) + call stor2.deposit() with: + value unknown81e580d3[_param1] * _param3 / 100 * 10^6 wei +``` + +खालील दोन ओळी आपल्याला सांगतात की स्टोरेज[2] हा देखील एक कॉन्ट्रॅक्ट आहे ज्याला आपण कॉल करतो. जर आपण [कन्स्ट्रक्टर व्यवहाराकडे पाहिले](https://etherscan.io/tx/0xa1ea0549fb349eb7d3aff90e1d6ce7469fdfdcd59a2fd9b8d1f5e420c0d05b58#statechange) तर आपल्याला दिसेल की हा कॉन्ट्रॅक्ट [0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2) आहे, एक रॅप्ड इथर कॉन्ट्रॅक्ट [ज्याचा सोर्स कोड Etherscan वर अपलोड केला गेला आहे](https://etherscan.io/address/0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2#code). + +तर असे दिसते की कॉन्ट्रॅक्ट्स `_param2` ला ETH पाठवण्याचा प्रयत्न करतात. जर ते करू शकले, तर छान. जर नाही, तर ते [WETH](https://weth.tkn.eth.limo/) पाठवण्याचा प्रयत्न करते. जर `_param2` एक बाह्य मालकीचे खाते (EOA) असेल तर ते नेहमी ETH प्राप्त करू शकते, परंतु कॉन्ट्रॅक्ट्स ETH प्राप्त करण्यास नकार देऊ शकतात. तथापि, WETH हे ERC-20 आहे आणि कॉन्ट्रॅक्ट्स ते स्वीकारण्यास नकार देऊ शकत नाहीत. + +```python + ... + log 0xdbd5389f: addr(_param2), unknown81e580d3[_param1] * _param3 / 100 * 10^6, bool(ext_call.success) +``` + +फंक्शनच्या शेवटी आपण एक लॉग एंट्री तयार होताना पाहतो. [तयार झालेल्या लॉग एंट्रीज पहा](https://etherscan.io/address/0x2510c039cc3b061d79e564b38836da87e31b342f#events) आणि `0xdbd5...` ने सुरू होणाऱ्या टॉपिकवर फिल्टर करा. जर आपण [अशी एंट्री तयार करणाऱ्या व्यवहारांपैकी एकावर क्लिक केले](https://etherscan.io/tx/0xe7d3b7e00f645af17dfbbd010478ef4af235896c65b6548def1fe95b3b7d2274) तर आपल्याला दिसेल की खरोखरच तो एक दावा असल्यासारखा दिसतो - खात्याने आपण रिव्हर्स इंजिनिअरिंग करत असलेल्या कॉन्ट्रॅक्टला एक संदेश पाठवला, आणि बदल्यात त्याला ETH मिळाले. + +![एक दावा व्यवहार](claim-tx.png) + +### 1e7df9d3 {#1e7df9d3} + +हे फंक्शन वरील [`claim`](#claim) सारखेच आहे. ते देखील मर्कल प्रूफ तपासते, पहिल्याला ETH हस्तांतरित करण्याचा प्रयत्न करते, आणि त्याच प्रकारची लॉग एंट्री तयार करते. + +```python +def unknown1e7df9d3(uint256 _param1, uint256 _param2, array _param3) payable: + ... + idx = 0 + s = 0 + while idx < _param3.length: + if idx >= mem[96]: + revert with 0, 50 + _55 = mem[(32 * idx) + 128] + if s + sha3(mem[(32 * _param3.length) + 160 len mem[(32 * _param3.length) + 128]]) > mem[(32 * idx) + 128]: + ... + s = sha3(mem[_58 + 32 len mem[_58]]) + continue + mem[mem[64] + 32] = s + sha3(mem[(32 * _param3.length) + 160 len mem[(32 * _param3.length) + 128]]) + ... + if unknown2eb4a7ab != s: + revert with 0, 'Invalid proof' + ... + call addr(_param1) with: + value s wei + gas 30000 wei + if not return_data.size: + if not ext_call.success: + require ext_code.size(stor2) + call stor2.deposit() with: + value s wei + gas gas_remaining wei + ... + log 0xdbd5389f: addr(_param1), s, bool(ext_call.success) +``` + +मुख्य फरक असा आहे की पहिला पॅरामीटर, काढण्यासाठीची विंडो, तेथे नाही. त्याऐवजी, दावा करता येणाऱ्या सर्व विंडोजवर एक लूप आहे. + +```python + idx = 0 + s = 0 + while idx < currentWindow: + ... + if stor5[mem[0]]: + if idx == -1: + revert with 0, 17 + idx = idx + 1 + s = s + continue + ... + stor5[idx][addr(_param1)] = 1 + if idx >= unknown81e580d3.length: + revert with 0, 50 + mem[0] = 4 + if unknown81e580d3[idx] and _param2 > -1 / unknown81e580d3[idx]: + revert with 0, 17 + if s > !(unknown81e580d3[idx] * _param2 / 100 * 10^6): + revert with 0, 17 + if idx == -1: + revert with 0, 17 + idx = idx + 1 + s = s + (unknown81e580d3[idx] * _param2 / 100 * 10^6) + continue +``` + +तर ते `claim` चे एक प्रकार वाटते जे सर्व विंडोजचा दावा करते. + +## निष्कर्ष {#conclusion} + +आतापर्यंत तुम्हाला माहित झाले असेल की ज्या कॉन्ट्रॅक्ट्सचा सोर्स कोड उपलब्ध नाही ते कसे समजून घ्यायचे, एकतर ऑपकोड्स वापरून किंवा (जेव्हा ते काम करते) डीकंपाइलर वापरून. या लेखाच्या लांबीवरून हे स्पष्ट होते की कॉन्ट्रॅक्टचे रिव्हर्स इंजिनिअरिंग करणे सोपे नाही, परंतु ज्या सिस्टीममध्ये सुरक्षितता आवश्यक आहे तेथे कॉन्ट्रॅक्ट्स वचन दिल्याप्रमाणे काम करतात याची पडताळणी करण्याची क्षमता असणे हे एक महत्त्वाचे कौशल्य आहे. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/run-node-raspberry-pi/index.md b/public/content/translations/mr/developers/tutorials/run-node-raspberry-pi/index.md new file mode 100644 index 00000000000..1bc89541855 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/run-node-raspberry-pi/index.md @@ -0,0 +1,190 @@ +--- +title: "Raspeberry Pi 4 वर एक Ethereum नोड चालवा" +description: "तुमचा Raspberry Pi 4 फ्लॅश करा, एक इथरनेट केबल लावा, SSD डिस्क कनेक्ट करा आणि Raspberry Pi 4 ला एका पूर्ण Ethereum नोड + व्हॅलिडेटरमध्ये रूपांतरित करण्यासाठी डिव्हाइसला पॉवर द्या." +author: "EthereumOnArm" +tags: + [ + "क्लायंट्स", + "एक्झिक्यूशन लेयर", + "कन्सेंसस लेयर", + "नोड्स" + ] +lang: mr +skill: intermediate +published: 2022-06-10 +source: Ethereum on ARM +sourceUrl: https://ethereum-on-arm-documentation.readthedocs.io/en/latest/ +--- + +**Ethereum on Arm ही एक कस्टम Linux इमेज आहे जी Raspberry Pi ला Ethereum नोडमध्ये बदलू शकते.** + +Ethereum on Arm वापरून Raspberry Pi ला Ethereum नोडमध्ये बदलण्यासाठी, खालील हार्डवेअरची शिफारस केली जाते: + +- Raspberry 4 (model B 8GB), Odroid M1 किंवा Rock 5B (8GB/16GB RAM) बोर्ड +- MicroSD कार्ड (किमान 16 GB वर्ग 10) +- किमान 2 TB SSD USB 3.0 डिस्क किंवा USB ते SATA केस असलेली SSD. +- पॉवर सप्लाय +- इथरनेट केबल +- पोर्ट फॉरवर्डिंग (अधिक माहितीसाठी क्लायंट्स पहा) +- हीटसिंक आणि फॅनसह एक केस +- USB कीबोर्ड, मॉनिटर आणि HDMI केबल (मायक्रो-HDMI) (पर्यायी) + +## Ethereum on ARM का चालवावे? {#why-run-ethereum-on-arm} + +ARM बोर्ड खूप स्वस्त, लवचिक, लहान संगणक आहेत. ते Ethereum नोड चालवण्यासाठी चांगले पर्याय आहेत कारण ते स्वस्तात विकत घेता येतात, त्यांची सर्व संसाधने फक्त नोडवर केंद्रित होतील अशा प्रकारे कॉन्फिगर केलेले आहेत, ज्यामुळे ते कार्यक्षम बनतात, ते कमी प्रमाणात वीज वापरतात आणि भौतिकदृष्ट्या लहान आहेत त्यामुळे ते कोणत्याही घरात सहजपणे बसू शकतात. नोड सुरू करणे देखील खूप सोपे आहे कारण Raspberry Pi चे MicroSD फक्त एका प्रीबिल्ट इमेजसह फ्लॅश केले जाऊ शकते, कोणतेही सॉफ्टवेअर डाउनलोड किंवा तयार करण्याची आवश्यकता नाही. + +## हे कसे कार्य करते? {#how-does-it-work} + +Raspberry Pi चे मेमरी कार्ड एका प्रीबिल्ट इमेजसह फ्लॅश केले जाते. या इमेजमध्ये Ethereum नोड चालवण्यासाठी आवश्यक असलेली प्रत्येक गोष्ट आहे. फ्लॅश केलेल्या कार्डसह, वापरकर्त्याला फक्त Raspberry Pi पॉवर-ऑन करायचे आहे. नोड चालवण्यासाठी आवश्यक असलेल्या सर्व प्रक्रिया आपोआप सुरू होतात. हे कार्य करते कारण मेमरी कार्डमध्ये Linux-आधारित ऑपरेटिंग सिस्टम (OS) आहे, ज्याच्या वर सिस्टम-स्तरीय प्रक्रिया आपोआप चालवल्या जातात ज्या युनिटला Ethereum नोडमध्ये बदलतात. + +लोकप्रिय Raspberry Pi Linux OS "Raspbian" वापरून Ethereum चालवता येत नाही कारण Raspbian अजूनही 32-बिट आर्किटेक्चर वापरते ज्यामुळे Ethereum वापरकर्त्यांना मेमरी समस्या येतात आणि कन्सेन्सस क्लायंट 32-बिट बायनरींना सपोर्ट करत नाहीत. यावर मात करण्यासाठी, Ethereum on Arm टीमने "Armbian" नावाच्या नेटिव्ह 64-बिट OS वर स्थलांतर केले. + +**इमेजेस सर्व आवश्यक पायऱ्यांची काळजी घेतात**, पर्यावरण सेट करण्यापासून आणि SSD डिस्क फॉरमॅट करण्यापासून ते Ethereum सॉफ्टवेअर इंस्टॉल आणि रन करण्यापर्यंत तसेच ब्लॉकचेन सिंक्रोनाइझेशन सुरू करण्यापर्यंत. + +## एक्सिक्युशन आणि कन्सेन्सस क्लायंट्सवर टीप {#note-on-execution-and-consensus-clients} + +Ethereum on Arm इमेजमध्ये सेवा म्हणून प्रीबिल्ट एक्सिक्युशन आणि कन्सेन्सस क्लायंट्सचा समावेश आहे. Ethereum नोडला दोन्ही क्लायंट सिंक केलेले आणि चालू असणे आवश्यक आहे. तुम्हाला फक्त इमेज डाउनलोड आणि फ्लॅश करणे आणि नंतर सेवा सुरू करणे आवश्यक आहे. इमेजमध्ये खालील एक्सिक्युशन क्लायंट्स प्रीलोड केलेले आहेत: + +- Geth +- Nethermind +- Besu + +आणि खालील कन्सेन्सस क्लायंट्स: + +- लाइटहाऊस +- निंबस +- Prysm +- Teku + +तुम्ही चालवण्यासाठी प्रत्येकी एक निवडला पाहिजे - सर्व एक्सिक्युशन क्लायंट्स सर्व कन्सेन्सस क्लायंट्ससोबत सुसंगत आहेत. तुम्ही स्पष्टपणे क्लायंट निवडत नसल्यास, नोड त्याच्या डीफॉल्टवर परत जाईल - Geth आणि Lighthouse - आणि बोर्ड पॉवर अप झाल्यावर ते आपोआप चालवेल. तुम्ही तुमच्या राउटरवर पोर्ट 30303 उघडले पाहिजे जेणेकरून Geth पिअर्स शोधू शकेल आणि त्यांच्याशी कनेक्ट होऊ शकेल. + +## इमेज डाउनलोड करणे {#downloading-the-image} + +Raspberry Pi 4 Ethereum इमेज ही एक "प्लग अँड प्ले" इमेज आहे जी एक्सिक्युशन आणि कन्सेन्सस दोन्ही क्लायंट्स आपोआप इंस्टॉल आणि सेट करते, त्यांना एकमेकांशी बोलण्यासाठी आणि Ethereum नेटवर्कशी कनेक्ट करण्यासाठी कॉन्फिगर करते. वापरकर्त्याला फक्त एक साधी कमांड वापरून त्यांची प्रक्रिया सुरू करायची आहे. + +[Ethereum on Arm](https://ethereumonarm-my.sharepoint.com/:u:/p/dlosada/Ec_VmUvr80VFjf3RYSU-NzkBmj2JOteDECj8Bibde929Gw?download=1) वरून Raspberry Pi इमेज डाउनलोड करा आणि SHA256 हॅश सत्यापित करा: + +```sh +# डाउनलोड केलेली इमेज असलेल्या डिरेक्टरीमधून +shasum -a 256 ethonarm_22.04.00.img.zip +# हॅश आउटपुट असे असावे: fb497e8f8a7388b62d6e1efbc406b9558bee7ef46ec7e53083630029c117444f +``` + +लक्षात घ्या की Rock 5B आणि Odroid M1 बोर्डसाठी इमेजेस Ethereum-on-Arm [डाउनलोड पेज](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/quick-guide/download-and-install.html) वर उपलब्ध आहेत. + +## MicroSD फ्लॅश करणे {#flashing-the-microsd} + +Raspberry Pi साठी वापरले जाणारे MicroSD कार्ड प्रथम डेस्कटॉप किंवा लॅपटॉपमध्ये घातले पाहिजे जेणेकरून ते फ्लॅश करता येईल. नंतर, खालील टर्मिनल कमांड्स डाउनलोड केलेली इमेज SD कार्डवर फ्लॅश करतील: + +```shell +# MicroSD कार्डचे नाव तपासा +sudo fdisk -l + +>> sdxxx +``` + +नाव बरोबर मिळवणे खूप महत्त्वाचे आहे कारण पुढील कमांडमध्ये `dd` समाविष्ट आहे, जे त्यावर इमेज टाकण्यापूर्वी कार्डवरील विद्यमान सामग्री पूर्णपणे पुसून टाकते. पुढे जाण्यासाठी, झिप केलेली इमेज असलेल्या डिरेक्टरीवर नेव्हिगेट करा: + +```shell +# इमेज अनझिप करा आणि फ्लॅश करा +unzip ethonarm_22.04.00.img.zip +sudo dd bs=1M if=ethonarm_22.04.00.img of=/dev/ conv=fdatasync status=progress +``` + +कार्ड आता फ्लॅश झाले आहे, त्यामुळे ते Raspberry Pi मध्ये घालता येते. + +## नोड सुरू करा {#start-the-node} + +Raspberry Pi मध्ये SD कार्ड घातल्यावर, इथरनेट केबल आणि SSD कनेक्ट करा आणि नंतर पॉवर चालू करा. OS बूट होईल आणि क्लायंट सॉफ्टवेअर इंस्टॉल आणि तयार करण्यासह, Raspberry Pi ला Ethereum नोडमध्ये बदलणारी प्रीकॉन्फिगर केलेली कार्ये आपोआप करण्यास प्रारंभ करेल. यासाठी कदाचित 10-15 मिनिटे लागतील. + +एकदा सर्वकाही इंस्टॉल आणि कॉन्फिगर झाले की, ssh कनेक्शनद्वारे डिव्हाइसमध्ये लॉग इन करा किंवा बोर्डला मॉनिटर आणि कीबोर्ड जोडलेले असल्यास थेट टर्मिनल वापरा. लॉग इन करण्यासाठी `ethereum` खाते वापरा, कारण त्यात नोड सुरू करण्यासाठी आवश्यक परवानग्या आहेत. + +```shell +वापरकर्ता: ethereum +पासवर्ड: ethereum +``` + +डीफॉल्ट एक्सिक्युशन क्लायंट, Geth, आपोआप सुरू होईल. तुम्ही खालील टर्मिनल कमांड वापरून लॉग तपासून याची पुष्टी करू शकता: + +```sh +sudo journalctl -u geth -f +``` + +कन्सेन्सस क्लायंट स्पष्टपणे सुरू करणे आवश्यक आहे. हे करण्यासाठी, प्रथम तुमच्या राउटरवर पोर्ट 9000 उघडा जेणेकरून Lighthouse पिअर्स शोधू शकेल आणि त्यांच्याशी कनेक्ट होऊ शकेल. नंतर lighthouse सेवा सक्षम करा आणि सुरू करा: + +```sh +sudo systemctl enable lighthouse-beacon +sudo systemctl start lighthouse-beacon +``` + +लॉग वापरून क्लायंट तपासा: + +```sh +sudo journalctl -u lighthouse-beacon +``` + +लक्षात घ्या की कन्सेन्सस क्लायंट काही मिनिटांत सिंक होईल कारण ते चेकपॉइंट सिंक वापरते. एक्सिक्युशन क्लायंटला जास्त वेळ लागेल - संभाव्यतः अनेक तास, आणि कन्सेन्सस क्लायंट सिंक होईपर्यंत ते सुरू होणार नाही (कारण एक्सिक्युशन क्लायंटला सिंक करण्यासाठी लक्ष्याची आवश्यकता असते, जे सिंक केलेला कन्सेन्सस क्लायंट प्रदान करतो). + +Geth आणि Lighthouse सेवा चालू आणि सिंक झाल्यावर, तुमचा Raspberry Pi आता एक Ethereum नोड आहे! Geth च्या Javascript कन्सोलचा वापर करून Ethereum नेटवर्कशी संवाद साधणे सर्वात सामान्य आहे, जो पोर्ट 8545 वर Geth क्लायंटशी जोडला जाऊ शकतो. Curl सारख्या विनंती साधनांचा वापर करून JSON ऑब्जेक्ट्स म्हणून फॉरमॅट केलेल्या कमांड्स सबमिट करणे देखील शक्य आहे. [Geth माहिती](https://geth.ethereum.org/) मध्ये अधिक पहा. + +Geth मेट्रिक्स Grafana डॅशबोर्डवर रिपोर्ट करण्यासाठी प्रीकॉन्फिगर केलेले आहे जे ब्राउझरमध्ये पाहिले जाऊ शकते. अधिक प्रगत वापरकर्ते `ipaddress:3000` वर नेव्हिगेट करून, `user: admin` आणि `passwd: ethereum` पास करून त्यांच्या नोडच्या आरोग्यावर लक्ष ठेवण्यासाठी हे वैशिष्ट्य वापरू शकतात. + +## व्हॅलिडेटर्स {#validators} + +एक व्हॅलिडेटर देखील पर्यायीपणे कन्सेन्सस क्लायंटमध्ये जोडला जाऊ शकतो. व्हॅलिडेटर सॉफ्टवेअर तुमच्या नोडला कन्सेन्ससमध्ये सक्रियपणे सहभागी होण्याची परवानगी देतो आणि नेटवर्कला क्रिप्टोकॉनॉमिक सुरक्षा प्रदान करतो. तुम्हाला या कामासाठी ETH मध्ये बक्षीस मिळते. व्हॅलिडेटर चालवण्यासाठी, तुमच्याकडे प्रथम 32 ETH असणे आवश्यक आहे, जे डिपॉझिट कॉन्ट्रॅक्टमध्ये जमा करणे आवश्यक आहे. [Launchpad](https://launchpad.ethereum.org/) वरील चरण-दर-चरण मार्गदर्शकाचे अनुसरण करून डिपॉझिट केले जाऊ शकते. हे डेस्कटॉप/लॅपटॉपवर करा, परंतु की (keys) तयार करू नका — हे थेट Raspberry Pi वर केले जाऊ शकते. + +Raspberry Pi वर एक टर्मिनल उघडा आणि डिपॉझिट की (keys) तयार करण्यासाठी खालील कमांड चालवा: + +``` +sudo apt-get update +sudo apt-get install staking-deposit-cli +cd && deposit new-mnemonic --num_validators 1 +``` + +(किंवा एअरगॅप मशीनवर चालवण्यासाठी [staking-deposit-cli](https://github.com/ethereum/staking-deposit-cli) डाउनलोड करा, आणि `deposit new-mnemnonic` कमांड चालवा) + +मेमोनिक वाक्यांश सुरक्षित ठेवा! वरील कमांडने नोडच्या कीस्टोअरमध्ये दोन फाईल्स तयार केल्या: व्हॅलिडेटर की आणि एक डिपॉझिट डेटा फाईल. डिपॉझिट डेटा लॉन्चपॅडमध्ये अपलोड करणे आवश्यक आहे, म्हणून तो Raspberry Pi वरून डेस्कटॉप/लॅपटॉपवर कॉपी करणे आवश्यक आहे. हे ssh कनेक्शन वापरून किंवा इतर कोणत्याही कॉपी/पेस्ट पद्धतीने केले जाऊ शकते. + +एकदा डिपॉझिट डेटा फाईल लॉन्चपॅड चालवणाऱ्या संगणकावर उपलब्ध झाली की, ती लॉन्चपॅड स्क्रीनवरील `+` वर ड्रॅग आणि ड्रॉप केली जाऊ शकते. डिपॉझिट कॉन्ट्रॅक्टला व्यवहार पाठवण्यासाठी स्क्रीनवरील सूचनांचे अनुसरण करा. + +Raspberry Pi वर परत, एक व्हॅलिडेटर सुरू केला जाऊ शकतो. यासाठी व्हॅलिडेटर की इम्पोर्ट करणे, बक्षिसे गोळा करण्यासाठी ॲड्रेस सेट करणे आणि नंतर प्रीकॉन्फिगर केलेली व्हॅलिडेटर प्रक्रिया सुरू करणे आवश्यक आहे. खालील उदाहरण Lighthouse साठी आहे—इतर कन्सेन्सस क्लायंटसाठी सूचना [Ethereum on Arm डॉक्स](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/) वर उपलब्ध आहेत: + +```shell +# व्हॅलिडेटर की इम्पोर्ट करा +lighthouse account validator import --directory=/home/ethereum/validator_keys + +# रिवॉर्ड ॲड्रेस सेट करा +sudo sed -i 's/' /etc/ethereum/lighthouse-validator.conf + +# व्हॅलिडेटर सुरू करा +sudo systemctl start lighthouse-validator +``` + +अभिनंदन, आता तुमच्याकडे Raspberry Pi वर चालणारा एक पूर्ण Ethereum नोड आणि व्हॅलिडेटर आहे! + +## अधिक तपशील {#more-details} + +या पानावर Raspberry Pi वापरून Geth-Lighthouse नोड आणि व्हॅलिडेटर कसे सेट करावे याचा आढावा दिला आहे. अधिक तपशीलवार सूचना [Ethereum-on-Arm वेबसाइट](https://ethereum-on-arm-documentation.readthedocs.io/en/latest/index.html) वर उपलब्ध आहेत. + +## अभिप्रायाचे कौतुक आहे {#feedback-appreciated} + +आम्हाला माहित आहे की Raspberry Pi चा एक मोठा वापरकर्ता वर्ग आहे ज्याचा Ethereum नेटवर्कच्या आरोग्यावर खूप सकारात्मक परिणाम होऊ शकतो. +कृपया या ट्यूटोरियलमधील तपशीलांचा अभ्यास करा, टेस्टनेटवर चालवून पहा, Ethereum on Arm GitHub पहा, अभिप्राय द्या, समस्या आणि पुल रिक्वेस्ट्स मांडा आणि तंत्रज्ञान आणि माहिती पुढे नेण्यास मदत करा! + +## संदर्भ {#references} + +1. https://ubuntu.com/download/raspberry-pi +2. https://wikipedia.org/wiki/Port_forwarding +3. https://prometheus.io +4. https://grafana.com +5. https://forum.armbian.com/topic/5565-zram-vs-swap/ +6. https://geth.ethereum.org +7. https://nethermind.io +8. https://www.hyperledger.org/projects/besu +9. https://github.com/prysmaticlabs/prysm +10. https://lighthouse.sigmaprime.io +11. https://ethersphere.github.io/swarm-home +12. https://raiden.network +13. https://ipfs.io +14. https://status.im +15. https://vipnode.org diff --git a/public/content/translations/mr/developers/tutorials/scam-token-tricks/index.md b/public/content/translations/mr/developers/tutorials/scam-token-tricks/index.md new file mode 100644 index 00000000000..eb21095a14f --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/scam-token-tricks/index.md @@ -0,0 +1,470 @@ +--- +title: "स्कॅम टोकन्सद्वारे वापरल्या जाणाऱ्या काही युक्त्या आणि त्या कशा ओळखाव्यात" +description: "या ट्युटोरियलमध्ये आपण एका स्कॅम टोकनचे विश्लेषण करू, ज्यामध्ये स्कॅमर्स वापरत असलेल्या काही युक्त्या, त्या कशा लागू केल्या जातात, आणि त्या कशा ओळखाव्यात हे पाहू." +author: Ori Pomerantz +tags: + [ + "स्कॅम", + "सॉलिडिटी", + "erc-20", + "javascript", + "typescript" + ] +skill: intermediate +published: 2023-09-15 +lang: mr +--- + +या ट्युटोरियलमध्ये आपण [एका स्कॅम टोकनचे](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code) विश्लेषण करू, ज्यामध्ये स्कॅमर्स वापरत असलेल्या काही युक्त्या आणि त्या कशा लागू केल्या जातात हे पाहू. या ट्युटोरियलच्या शेवटी तुम्हाला ERC-20 टोकन कॉन्ट्रॅक्ट्स, त्यांची क्षमता, आणि संशय घेणे का आवश्यक आहे याबद्दल अधिक व्यापक दृष्टिकोन मिळेल. त्यानंतर आपण त्या स्कॅम टोकनद्वारे उत्सर्जित केलेल्या इव्हेंट्सकडे पाहू आणि ते स्वयंचलितपणे कायदेशीर नाही हे कसे ओळखता येईल ते पाहू. + +## स्कॅम टोकन्स - ते काय आहेत, लोक ते का करतात, आणि ते कसे टाळावे {#scam-tokens} + +Ethereum च्या सर्वात सामान्य उपयोगांपैकी एक म्हणजे एखाद्या गटाने एक ट्रेडेबल टोकन तयार करणे, एका अर्थाने त्यांचे स्वतःचे चलन. तथापि, जिथे कुठे मूल्य आणणारी वैध उपयोग-प्रकरणे आहेत, तिथे असे गुन्हेगार देखील आहेत जे ते मूल्य स्वतःसाठी चोरण्याचा प्रयत्न करतात. + +आपण या विषयाबद्दल अधिक माहिती वापरकर्त्याच्या दृष्टिकोनातून [ethereum.org वर इतरत्र](/guides/how-to-id-scam-tokens/) वाचू शकता. हे ट्युटोरियल एका स्कॅम टोकनचे विश्लेषण करण्यावर लक्ष केंद्रित करते, जेणेकरून ते कसे केले जाते आणि ते कसे ओळखले जाऊ शकते हे पाहता येईल. + +### मला कसे कळेल की wARB एक स्कॅम आहे? {#warb-scam} + +आपण ज्या टोकनचे विश्लेषण करत आहोत ते [wARB](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code) आहे, जे कायदेशीर [ARB टोकनच्या](https://etherscan.io/token/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1) समकक्ष असल्याचे भासवते. + +कोणते टोकन कायदेशीर आहे हे जाणून घेण्याचा सर्वात सोपा मार्ग म्हणजे मूळ संस्था, [Arbitrum](https://arbitrum.foundation/) पाहणे. कायदेशीर ऍड्रेस [त्यांच्या डॉक्युमेंटेशनमध्ये](https://docs.arbitrum.foundation/deployment-addresses#token) निर्दिष्ट केले आहेत. + +### सोर्स कोड का उपलब्ध आहे? {#why-source} + +साधारणपणे, इतरांना फसवण्याचा प्रयत्न करणारे लोक गुप्त राहतील अशी अपेक्षा असते, आणि खरंच अनेक स्कॅम टोकन्सचा कोड उपलब्ध नसतो (उदाहरणार्थ, [हा](https://optimistic.etherscan.io/token/0x15992f382d8c46d667b10dc8456dc36651af1452#code) आणि [हा](https://optimistic.etherscan.io/token/0x026b623eb4aada7de37ef25256854f9235207178#code)). + +तथापि, कायदेशीर टोकन्स सामान्यतः त्यांचा सोर्स कोड प्रकाशित करतात, म्हणून कायदेशीर दिसण्यासाठी स्कॅम टोकन्सचे लेखक कधीकधी तेच करतात. [wARB](https://etherscan.io/token/0xb047c8032b99841713b8e3872f06cf32beb27b82#code) हे त्या टोकन्सपैकी एक आहे ज्याचा सोर्स कोड उपलब्ध आहे, ज्यामुळे ते समजणे सोपे होते. + +कॉन्ट्रॅक्ट डिप्लॉयर्स सोर्स कोड प्रकाशित करायचा की नाही हे निवडू शकत असले तरी, ते चुकीचा सोर्स कोड प्रकाशित _करू शकत नाहीत_. ब्लॉक एक्सप्लोरर प्रदान केलेला सोर्स कोड स्वतंत्रपणे कंपाइल करतो, आणि जर त्याला तंतोतंत तोच बायटकोड मिळाला नाही, तर तो तो सोर्स कोड नाकारतो. [आपण याबद्दल अधिक माहिती Etherscan साइटवर वाचू शकता](https://etherscan.io/verifyContract). + +## कायदेशीर ERC-20 टोकन्सशी तुलना {#compare-legit-erc20} + +आपण या टोकनची कायदेशीर ERC-20 टोकन्सशी तुलना करणार आहोत. जर तुम्हाला कायदेशीर ERC-20 टोकन्स सामान्यतः कसे लिहिले जातात याबद्दल माहिती नसेल, तर [हे ट्युटोरियल पहा](/developers/tutorials/erc20-annotated-code/). + +### विशेषाधिकारप्राप्त ऍड्रेससाठी कॉन्स्टंट्स {#constants-for-privileged-addresses} + +कॉन्ट्रॅक्ट्सना कधीकधी विशेषाधिकारप्राप्त ऍड्रेसची आवश्यकता असते. दीर्घकालीन वापरासाठी डिझाइन केलेले कॉन्ट्रॅक्ट्स काही विशेषाधिकारप्राप्त ऍड्रेसना ते ऍड्रेस बदलण्याची परवानगी देतात, उदाहरणार्थ नवीन मल्टीसिग कॉन्ट्रॅक्टचा वापर सक्षम करण्यासाठी. हे करण्याचे अनेक मार्ग आहेत. + +[`HOP` टोकन कॉन्ट्रॅक्ट](https://etherscan.io/address/0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc#code) [`Ownable`](https://docs.openzeppelin.com/contracts/2.x/access-control#ownership-and-ownable) पॅटर्न वापरतो. विशेषाधिकारप्राप्त ऍड्रेस स्टोरेजमध्ये `_owner` नावाच्या फील्डमध्ये ठेवला जातो (तिसरी फाईल `Ownable.sol` पहा). + +```solidity +abstract contract Ownable is Context { + address private _owner; + . + . + . +} +``` + +[`ARB` टोकन कॉन्ट्रॅक्टमध्ये](https://etherscan.io/address/0xad0c361ef902a7d9851ca7dcc85535da2d3c6fc7#code) थेट विशेषाधिकारप्राप्त ऍड्रेस नाही. तथापि, त्याला त्याची गरज नाही. ते [ऍड्रेस `0xb50721bcf8d664c30412cfbc6cf7a15145234ad1`](https://etherscan.io/address/0xb50721bcf8d664c30412cfbc6cf7a15145234ad1#code) येथे एका [`प्रॉक्सी`](https://docs.openzeppelin.com/contracts/5.x/api/proxy) मागे आहे. त्या कॉन्ट्रॅक्टमध्ये एक विशेषाधिकारप्राप्त ऍड्रेस आहे (चौथी फाईल, `ERC1967Upgrade.sol` पहा) जो अपग्रेडसाठी वापरला जाऊ शकतो. + +```solidity + /** + * @dev EIP1967 ऍडमिन स्लॉटमध्ये नवीन ऍड्रेस संग्रहित करतो. + */ + function _setAdmin(address newAdmin) private { + require(newAdmin != address(0), "ERC1967: नवीन ऍडमिन शून्य ऍड्रेस आहे"); + StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin; + } +``` + +याउलट, `wARB` कॉन्ट्रॅक्टमध्ये हार्ड कोडेड `contract_owner` आहे. + +```solidity +contract WrappedArbitrum is Context, IERC20 { + . + . + . + address deployer = 0xB50721BCf8d664c30412Cfbc6cf7a15145234ad1; + address public contract_owner = 0xb40dE7b1beE84Ff2dc22B70a049A07A13a411A33; + . + . + . +} +``` + +[हा कॉन्ट्रॅक्ट मालक](https://etherscan.io/address/0xb40dE7b1beE84Ff2dc22B70a049A07A13a411A33) असा कॉन्ट्रॅक्ट नाही जो वेगवेगळ्या वेळी वेगवेगळ्या खात्यांद्वारे नियंत्रित केला जाऊ शकतो, तर तो एक [बाह्य मालकीचे खाते](/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) आहे. याचा अर्थ असा आहे की ते बहुधा एखाद्या व्यक्तीद्वारे अल्पकालीन वापरासाठी डिझाइन केलेले आहे, जे मौल्यवान राहील अशा ERC-20 नियंत्रित करण्यासाठी दीर्घकालीन उपाय म्हणून नाही. + +आणि खरंच, जर आपण Etherscan मध्ये पाहिले तर आपल्याला दिसेल की स्कॅमरने हा कॉन्ट्रॅक्ट 19 मे 2023 रोजी फक्त 12 तासांसाठी वापरला होता ([पहिला व्यवहार](https://etherscan.io/tx/0xf49136198c3f925fcb401870a669d43cecb537bde36eb8b41df77f06d5f6fbc2) ते [शेवटचा व्यवहार](https://etherscan.io/tx/0xdfd6e717157354e64bbd5d6adf16761e5a5b3f914b1948d3545d39633244d47b)). + +### खोटे `_transfer` फंक्शन {#the-fake-transfer-function} + +[अंतर्गत `_transfer` फंक्शन](/developers/tutorials/erc20-annotated-code/#the-_transfer-function-_transfer) वापरून प्रत्यक्ष हस्तांतरण करणे हे मानक आहे. + +`wARB` मध्ये हे फंक्शन जवळपास कायदेशीर दिसते: + +```solidity + function _transfer(address sender, address recipient, uint256 amount) internal virtual{ + require(sender != address(0), "ERC20: शून्य ऍड्रेसवरून हस्तांतरण"); + require(recipient != address(0), "ERC20: शून्य ऍड्रेसवर हस्तांतरण"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: हस्तांतरण रक्कम शिलकीपेक्षा जास्त आहे"); + _balances[recipient] = _balances[recipient].add(amount); + if (sender == contract_owner){ + sender = deployer; + } + emit Transfer(sender, recipient, amount); + } +``` + +संशयास्पद भाग आहे: + +```solidity + if (sender == contract_owner){ + sender = deployer; + } + emit Transfer(sender, recipient, amount); +``` + +जर कॉन्ट्रॅक्ट मालक टोकन्स पाठवत असेल, तर `Transfer` इव्हेंट ते `deployer` कडून आल्याचे का दाखवतो? + +तथापि, एक अधिक महत्त्वाचा मुद्दा आहे. हे `_transfer` फंक्शन कोण कॉल करते? ते बाहेरून कॉल केले जाऊ शकत नाही, ते `internal` म्हणून चिन्हांकित आहे. आणि आपल्याकडे असलेल्या कोडमध्ये `_transfer` ला कोणतेही कॉल समाविष्ट नाहीत. स्पष्टपणे, ते येथे एक दिशाभूल करण्यासाठी आहे. + +```solidity + function transfer(address recipient, uint256 amount) public virtual override returns (bool) { + _f_(_msgSender(), recipient, amount); + return true; + } + + function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { + _f_(sender, recipient, amount); + _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: हस्तांतरण रक्कम परवानगीपेक्षा जास्त आहे")); + return true; + } +``` + +जेव्हा आपण टोकन्स हस्तांतरित करण्यासाठी कॉल केलेल्या फंक्शन्स, `transfer` आणि `transferFrom` पाहतो, तेव्हा आपल्याला दिसते की ते `_f_` नावाचे पूर्णपणे वेगळे फंक्शन कॉल करतात. + +### वास्तविक `_f_` फंक्शन {#the-real-f-function} + +```solidity + function _f_(address sender, address recipient, uint256 amount) internal _mod_(sender,recipient,amount) virtual { + require(sender != address(0), "ERC20: शून्य ऍड्रेसवरून हस्तांतरण"); + require(recipient != address(0), "ERC20: शून्य ऍड्रेसवर हस्तांतरण"); + + _beforeTokenTransfer(sender, recipient, amount); + + _balances[sender] = _balances[sender].sub(amount, "ERC20: हस्तांतरण रक्कम शिलकीपेक्षा जास्त आहे"); + _balances[recipient] = _balances[recipient].add(amount); + if (sender == contract_owner){ + + sender = deployer; + } + emit Transfer(sender, recipient, amount); + } +``` + +या फंक्शनमध्ये दोन संभाव्य धोक्याचे संकेत आहेत. + +- [फंक्शन मॉडिफायर](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) `_mod_` चा वापर. तथापि, जेव्हा आपण सोर्स कोडमध्ये पाहतो तेव्हा आपल्याला दिसते की `_mod_` प्रत्यक्षात निरुपद्रवी आहे. + + ```solidity + modifier _mod_(address sender, address recipient, uint256 amount){ + _; + } + ``` + +- `_transfer` मध्ये आपण पाहिलेला तोच मुद्दा, म्हणजे जेव्हा `contract_owner` टोकन्स पाठवतो तेव्हा ते `deployer` कडून आल्याचे दिसतात. + +### खोटे इव्हेंट्स फंक्शन `dropNewTokens` {#the-fake-events-function-dropNewTokens} + +आता आपण अशा गोष्टीकडे येतो जी प्रत्यक्ष स्कॅमसारखी दिसते. मी वाचनीयतेसाठी फंक्शनमध्ये थोडा बदल केला आहे, परंतु ते कार्यात्मकदृष्ट्या समतुल्य आहे. + +```solidity +function dropNewTokens(address uPool, + address[] memory eReceiver, + uint256[] memory eAmounts) public auth() +``` + +या फंक्शनमध्ये `auth()` मॉडिफायर आहे, याचा अर्थ ते फक्त कॉन्ट्रॅक्ट मालकाद्वारेच कॉल केले जाऊ शकते. + +```solidity +modifier auth() { + require(msg.sender == contract_owner, "संवाद साधण्याची परवानगी नाही"); + _; +} +``` + +हे बंधन पूर्णपणे योग्य आहे, कारण आम्हाला नको की कोणतीही यादृच्छिक खाती टोकन्स वितरित करतील. तथापि, फंक्शनचा उर्वरित भाग संशयास्पद आहे. + +```solidity +{ + for (uint256 i = 0; i < eReceiver.length; i++) { + emit Transfer(uPool, eReceiver[i], eAmounts[i]); + } +} +``` + +एका पूल खात्यातून रिसीव्हर्सच्या अॅरेला रकमेच्या अॅरेमध्ये हस्तांतरित करण्याचे फंक्शन पूर्णपणे योग्य आहे. असे अनेक उपयोग आहेत ज्यात आपल्याला एकाच स्त्रोतावरून अनेक ठिकाणी टोकन्स वितरित करायचे असतील, जसे की वेतन, एअरड्रॉप्स, इत्यादी. एकाच व्यवहाराचा भाग म्हणून एका वेगळ्या कॉन्ट्रॅक्टमधून ERC-20 ला अनेक वेळा कॉल करण्याऐवजी किंवा अनेक व्यवहार करण्याऐवजी एकाच व्यवहारात करणे (गॅसमध्ये) स्वस्त आहे. + +तथापि, `dropNewTokens` तसे करत नाही. ते [`Transfer` इव्हेंट्स](https://eips.ethereum.org/EIPS/eip-20#transfer-1) उत्सर्जित करते, परंतु प्रत्यक्षात कोणतेही टोकन हस्तांतरित करत नाही. प्रत्यक्षात न झालेल्या हस्तांतरणाबद्दल सांगून ऑफचेन ऍप्लिकेशन्सना गोंधळात टाकण्याचे कोणतेही कायदेशीर कारण नाही. + +### बर्निंग `Approve` फंक्शन {#the-burning-approve-function} + +ERC-20 कॉन्ट्रॅक्ट्समध्ये परवानगीसाठी [एक `approve` फंक्शन](/developers/tutorials/erc20-annotated-code/#approve) असणे अपेक्षित आहे, आणि खरंच आमच्या स्कॅम टोकनमध्ये असे फंक्शन आहे, आणि ते योग्य देखील आहे. तथापि, Solidity C मधून आलेली असल्यामुळे ती केस-महत्त्वपूर्ण (case significant) आहे. "Approve" आणि "approve" या वेगवेगळ्या स्ट्रिंग्स आहेत. + +तसेच, कार्यक्षमता `approve` शी संबंधित नाही. + +```solidity + function Approve( + address[] memory holders) +``` + +हे फंक्शन टोकन धारकांच्या ऍड्रेसच्या अॅरेसह कॉल केले जाते. + +```solidity + public approver() { +``` + +`approver()` मॉडिफायर हे सुनिश्चित करतो की फक्त `contract_owner` ला हे फंक्शन कॉल करण्याची परवानगी आहे (खाली पहा). + +```solidity + for (uint256 i = 0; i < holders.length; i++) { + uint256 amount = _balances[holders[i]]; + _beforeTokenTransfer(holders[i], 0x0000000000000000000000000000000000000001, amount); + _balances[holders[i]] = _balances[holders[i]].sub(amount, + "ERC20: बर्न रक्कम शिलकीपेक्षा जास्त आहे"); + _balances[0x0000000000000000000000000000000000000001] = + _balances[0x0000000000000000000000000000000000000001].add(amount); + } + } + +``` + +प्रत्येक धारकाच्या ऍड्रेससाठी हे फंक्शन धारकाची संपूर्ण शिल्लक `0x00...01` ऍड्रेसवर हलवते, प्रभावीपणे ते बर्न करते (मानकातील वास्तविक `burn` एकूण पुरवठा देखील बदलते, आणि टोकन्स `0x00...00` वर हस्तांतरित करते). याचा अर्थ `contract_owner` कोणत्याही वापरकर्त्याची मालमत्ता काढून टाकू शकतो. हे गव्हर्नन्स टोकनमध्ये अपेक्षित असलेले वैशिष्ट्य वाटत नाही. + +### कोड गुणवत्ता समस्या {#code-quality-issues} + +या कोड गुणवत्ता समस्या हे _सिद्ध करत नाहीत_ की हा कोड एक स्कॅम आहे, परंतु त्या त्याला संशयास्पद बनवतात. Arbitrum सारख्या संघटित कंपन्या सहसा इतका खराब कोड प्रसिद्ध करत नाहीत. + +#### `mount` फंक्शन {#the-mount-function} + +[मानकामध्ये](https://eips.ethereum.org/EIPS/eip-20) निर्दिष्ट नसले तरी, सामान्यतः नवीन टोकन्स तयार करणाऱ्या फंक्शनला [`mint`](https://ethereum.org/el/developers/tutorials/erc20-annotated-code/#the-_mint-and-_burn-functions-_mint-and-_burn) म्हणतात. + +`wARB` कंस्ट्रक्टरमध्ये पाहिल्यास, आपल्याला दिसते की मिंट फंक्शनचे नाव काही कारणास्तव `mount` असे ठेवले आहे, आणि कार्यक्षमतेसाठी संपूर्ण रकमेसाठी एकदा कॉल करण्याऐवजी प्रारंभिक पुरवठ्याच्या पाचव्या भागासह पाच वेळा कॉल केले आहे. + +```solidity + constructor () public { + + _name = "Wrapped Arbitrum"; + _symbol = "wARB"; + _decimals = 18; + uint256 initialSupply = 1000000000000; + + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + mount(deployer, initialSupply*(10**18)/5); + } +``` + +`mount` फंक्शन स्वतःच संशयास्पद आहे. + +```solidity + function mount(address account, uint256 amount) public { + require(msg.sender == contract_owner, "ERC20: शून्य ऍड्रेसवर मिंट करा"); +``` + +`require` पाहिल्यावर, आपल्याला दिसते की फक्त कॉन्ट्रॅक्ट मालकालाच मिंट करण्याची परवानगी आहे. ते कायदेशीर आहे. परंतु एरर मेसेज _फक्त मालकाला मिंट करण्याची परवानगी आहे_ किंवा असे काहीतरी असायला हवे होते. त्याऐवजी, तो असंबंधित _ERC20: शून्य ऍड्रेसवर मिंट करा_ आहे. शून्य ऍड्रेसवर मिंट करण्यासाठी योग्य चाचणी `require(account != address(0), "")` आहे, जी कॉन्ट्रॅक्ट कधीही तपासण्याची तसदी घेत नाही. + +```solidity + _totalSupply = _totalSupply.add(amount); + _balances[contract_owner] = _balances[contract_owner].add(amount); + emit Transfer(address(0), account, amount); + } +``` + +मिंटिंगशी थेट संबंधित आणखी दोन संशयास्पद तथ्ये आहेत: + +- एक `account` पॅरामीटर आहे, जे बहुधा ते खाते आहे ज्याला मिंट केलेली रक्कम मिळायला हवी. परंतु जी शिल्लक वाढते ती प्रत्यक्षात `contract_owner`ची आहे. + +- `contract_owner` ची शिल्लक वाढली असली तरी, उत्सर्जित केलेला इव्हेंट `account` ला हस्तांतरण दाखवतो. + +### `auth` आणि `approver` दोन्ही का? काहीही न करणारा `mod` का? {#why-both-autho-and-approver-why-the-mod-that-does-nothing} + +या कॉन्ट्रॅक्टमध्ये तीन मॉडिफायर्स आहेत: `_mod_`, `auth`, आणि `approver`. + +```solidity + modifier _mod_(address sender, address recipient, uint256 amount){ + _; + } +``` + +`_mod_` तीन पॅरामीटर्स घेते आणि त्यांच्यासोबत काहीही करत नाही. ते का आहे? + +```solidity + modifier auth() { + require(msg.sender == contract_owner, "संवाद साधण्याची परवानगी नाही"); + _; + } + + modifier approver() { + require(msg.sender == contract_owner, "संवाद साधण्याची परवानगी नाही"); + _; + } +``` + +`auth` आणि `approver` अधिक अर्थपूर्ण आहेत, कारण ते तपासतात की कॉन्ट्रॅक्ट `contract_owner` द्वारे कॉल केला गेला होता. आम्ही अपेक्षा करतो की मिंटिंगसारख्या काही विशेषाधिकारप्राप्त क्रिया त्या खात्यापुरत्या मर्यादित असतील. तथापि, _तंतोतंत तेच काम_ करणारी दोन वेगळी फंक्शन्स ठेवण्याचा काय उपयोग आहे? + +## आपण स्वयंचलितपणे काय ओळखू शकतो? {#what-can-we-detect-automatically} + +Etherscan मध्ये पाहून आपण पाहू शकतो की `wARB` हे एक स्कॅम टोकन आहे. तथापि, तो एक केंद्रीकृत उपाय आहे. सिद्धांतानुसार, Etherscan ला उलथवून टाकले जाऊ शकते किंवा हॅक केले जाऊ शकते. एखादे टोकन कायदेशीर आहे की नाही हे स्वतंत्रपणे ठरवता येणे चांगले आहे. + +काही युक्त्या आहेत ज्यांचा वापर करून आपण ERC-20 टोकन संशयास्पद आहे की नाही हे ओळखू शकतो (एकतर स्कॅम किंवा खूप वाईट लिहिलेले), ते उत्सर्जित करत असलेल्या इव्हेंट्सकडे पाहून. + +## संशयास्पद `Approval` इव्हेंट्स {#suspicious-approval-events} + +[`Approval` इव्हेंट्स](https://eips.ethereum.org/EIPS/eip-20#approval) फक्त थेट विनंतीनेच व्हायला पाहिजेत ([`Transfer` इव्हेंट्स](https://eips.ethereum.org/EIPS/eip-20#transfer-1) च्या विरोधात जे परवानगीच्या परिणामी होऊ शकतात). या समस्येच्या तपशीलवार स्पष्टीकरणासाठी आणि विनंत्या कॉन्ट्रॅक्टद्वारे मध्यस्थी करण्याऐवजी थेट का असाव्यात यासाठी [Solidity डॉक्स पहा](https://docs.soliditylang.org/en/v0.8.20/security-considerations.html#tx-origin). + +याचा अर्थ असा आहे की [बाह्य मालकीच्या खात्यातून](/developers/docs/accounts/#types-of-account) खर्च मंजूर करणारे `Approval` इव्हेंट्स त्या खात्यात उगम पावलेल्या व्यवहारांमधून यायला हवेत, आणि ज्यांचे गंतव्यस्थान ERC-20 कॉन्ट्रॅक्ट आहे. बाह्य मालकीच्या खात्यातून कोणत्याही इतर प्रकारची मंजुरी संशयास्पद आहे. + +[viem](https://viem.sh/) आणि [TypeScript](https://www.typescriptlang.org/docs/), टाइप सुरक्षिततेसह जावास्क्रिप्टचा एक प्रकार, वापरून [या प्रकारचा इव्हेंट ओळखणारा एक प्रोग्राम](https://github.com/qbzzt/20230915-scam-token-detection) येथे आहे. ते चालवण्यासाठी: + +1. `.env.example` ची प्रत `.env` मध्ये बनवा. +2. Ethereum मेननेट नोडचा URL देण्यासाठी `.env` संपादित करा. +3. आवश्यक पॅकेजेस इंस्टॉल करण्यासाठी `pnpm install` चालवा. +4. संशयास्पद मंजुरी शोधण्यासाठी `pnpm susApproval` चालवा. + +येथे ओळी-ओळीने स्पष्टीकरण दिले आहे: + +```typescript +import { + Address, + TransactionReceipt, + createPublicClient, + http, + parseAbiItem, +} from "viem" +import { mainnet } from "viem/chains" +``` + +`viem` मधून टाइप व्याख्या, फंक्शन्स आणि चेन व्याख्या आयात करा. + +```typescript +import { config } from "dotenv" +config() +``` + +URL मिळवण्यासाठी `.env` वाचा. + +```typescript +const client = createPublicClient({ + chain: mainnet, + transport: http(process.env.URL), +}) +``` + +एक Viem क्लायंट तयार करा. आम्हाला फक्त ब्लॉकचेनवरून वाचण्याची गरज आहे, म्हणून या क्लायंटला खाजगी की (private key) ची गरज नाही. + +```typescript +const testedAddress = "0xb047c8032b99841713b8e3872f06cf32beb27b82" +const fromBlock = 16859812n +const toBlock = 16873372n +``` + +संशयास्पद ERC-20 कॉन्ट्रॅक्टचा ऍड्रेस आणि ज्या ब्लॉक्समध्ये आपण इव्हेंट्स शोधू. नोड प्रदाते सामान्यतः इव्हेंट्स वाचण्याची आमची क्षमता मर्यादित करतात कारण बँडविड्थ महाग होऊ शकते. सुदैवाने `wARB` अठरा तासांच्या कालावधीसाठी वापरात नव्हते, म्हणून आपण सर्व इव्हेंट्स शोधू शकतो (एकूण फक्त 13 होते). + +```typescript +const approvalEvents = await client.getLogs({ + address: testedAddress, + fromBlock, + toBlock, + event: parseAbiItem( + "event Approval(address indexed _owner, address indexed _spender, uint256 _value)" + ), +}) +``` + +Viem कडून इव्हेंट माहिती मागण्याचा हा मार्ग आहे. जेव्हा आपण त्याला फील्ड नावांसह अचूक इव्हेंट सिग्नेचर देतो, तेव्हा ते आमच्यासाठी इव्हेंट पार्स करते. + +```typescript +const isContract = async (addr: Address): boolean => + await client.getBytecode({ address: addr }) +``` + +आमचा अल्गोरिदम फक्त बाह्य मालकीच्या खात्यांसाठी लागू होतो. `client.getBytecode` द्वारे कोणताही बायटकोड परत आल्यास याचा अर्थ असा की हा एक कॉन्ट्रॅक्ट आहे आणि आपण तो वगळला पाहिजे. + +जर तुम्ही यापूर्वी TypeScript वापरले नसेल, तर फंक्शनची व्याख्या थोडी विचित्र वाटू शकते. आपण फक्त पहिला (आणि एकमेव) पॅरामीटर `addr` आहे असे सांगत नाही, तर तो `Address` प्रकारचा आहे असेही सांगतो. त्याचप्रमाणे, `: boolean` भाग TypeScript ला सांगतो की फंक्शनचे रिटर्न व्हॅल्यू बुलियन आहे. + +```typescript +const getEventTxn = async (ev: Event): TransactionReceipt => + await client.getTransactionReceipt({ hash: ev.transactionHash }) +``` + +हे फंक्शन इव्हेंटमधून व्यवहार पावती (transaction receipt) मिळवते. व्यवहाराचे गंतव्यस्थान काय होते हे सुनिश्चित करण्यासाठी आम्हाला पावतीची आवश्यकता आहे. + +```typescript +const suspiciousApprovalEvent = async (ev : Event) : (Event | null) => { +``` + +हे सर्वात महत्त्वाचे फंक्शन आहे, जे प्रत्यक्षात ठरवते की इव्हेंट संशयास्पद आहे की नाही. रिटर्न प्रकार, `(Event | null)`, TypeScript ला सांगतो की हे फंक्शन `Event` किंवा `null` परत करू शकते. जर इव्हेंट संशयास्पद नसेल तर आपण `null` परत करतो. + +```typescript +const owner = ev.args._owner +``` + +Viem कडे फील्ड नावे आहेत, म्हणून त्याने आमच्यासाठी इव्हेंट पार्स केला. `_owner` खर्च करायच्या टोकन्सचा मालक आहे. + +```typescript +// कॉन्ट्रॅक्ट्सद्वारे केलेल्या मंजुरी संशयास्पद नाहीत +if (await isContract(owner)) return null +``` + +जर मालक कॉन्ट्रॅक्ट असेल, तर ही मंजुरी संशयास्पद नाही असे समजा. कॉन्ट्रॅक्टची मंजुरी संशयास्पद आहे की नाही हे तपासण्यासाठी, आपल्याला व्यवहाराच्या संपूर्ण अंमलबजावणीचा मागोवा घ्यावा लागेल की ते कधी मालक कॉन्ट्रॅक्टपर्यंत पोहोचले का, आणि त्या कॉन्ट्रॅक्टने थेट ERC-20 कॉन्ट्रॅक्टला कॉल केला का. हे करण्यापेक्षा खूप जास्त संसाधन-खर्चिक आहे. + +```typescript +const txn = await getEventTxn(ev) +``` + +जर मंजुरी बाह्य मालकीच्या खात्यातून आली असेल, तर ज्या व्यवहारामुळे ती झाली तो मिळवा. + +```typescript +// जर मंजुरी EOA मालकाकडून आली असेल जो व्यवहाराचा `from` नाही तर ती संशयास्पद आहे +if (owner.toLowerCase() != txn.from.toLowerCase()) return ev +``` + +आपण फक्त स्ट्रिंग समानतेसाठी तपासणी करू शकत नाही कारण ऍड्रेस हेक्साडेसिमल आहेत, त्यामुळे त्यात अक्षरे असतात. कधीकधी, उदाहरणार्थ `txn.from` मध्ये, ती अक्षरे सर्व लोअरकेसमध्ये असतात. इतर प्रकरणांमध्ये, जसे की `ev.args._owner`, ऍड्रेस [एरर ओळखण्यासाठी मिश्र-केसमध्ये](https://eips.ethereum.org/EIPS/eip-55) असतो. + +परंतु जर व्यवहार मालकाकडून नसेल, आणि तो मालक बाह्य मालकीचा असेल, तर आपल्याकडे एक संशयास्पद व्यवहार आहे. + +```typescript +// जर व्यवहाराचे गंतव्यस्थान आपण तपासत असलेला ERC-20 कॉन्ट्रॅक्ट नसेल तर ते देखील संशयास्पद आहे +// investigating +if (txn.to.toLowerCase() != testedAddress) return ev +``` + +त्याचप्रमाणे, जर व्यवहाराचा `to` ऍड्रेस, पहिला कॉल केलेला कॉन्ट्रॅक्ट, तपासाखालील ERC-20 कॉन्ट्रॅक्ट नसेल तर ते संशयास्पद आहे. + +```typescript + // संशय घेण्याचे कोणतेही कारण नसल्यास, null परत करा. + return null +} +``` + +जर दोन्हीपैकी कोणतीही अट सत्य नसेल तर `Approval` इव्हेंट संशयास्पद नाही. + +```typescript +const testPromises = approvalEvents.map((ev) => suspiciousApprovalEvent(ev)) +const testResults = (await Promise.all(testPromises)).filter((x) => x != null) + +console.log(testResults) +``` + +[एक `async` फंक्शन](https://www.w3schools.com/js/js_async.asp) एक `Promise` ऑब्जेक्ट परत करते. सामान्य सिंटॅक्ससह, `await x()`, आम्ही प्रक्रिया सुरू ठेवण्यापूर्वी त्या `Promise` च्या पूर्ततेची प्रतीक्षा करतो. हे प्रोग्राम करण्यास आणि फॉलो करण्यास सोपे आहे, परंतु ते अकार्यक्षम देखील आहे. एका विशिष्ट इव्हेंटसाठी `Promise` पूर्ण होण्याची वाट पाहत असताना आपण पुढील इव्हेंटवर काम सुरू करू शकतो. + +येथे आपण `Promise` ऑब्जेक्ट्सची अॅरे तयार करण्यासाठी [`map`](https://www.w3schools.com/jsref/jsref_map.asp) वापरतो. मग आम्ही त्या सर्व प्रॉमिसेसच्या निराकरणासाठी प्रतीक्षा करण्यासाठी [`Promise.all`](https://www.javascripttutorial.net/es6/javascript-promise-all/) वापरतो. नंतर आम्ही त्या परिणामांना [`filter`](https://www.w3schools.com/jsref/jsref_filter.asp) करून असंशयास्पद इव्हेंट्स काढून टाकतो. + +### संशयास्पद `Transfer` इव्हेंट्स {#suspicious-transfer-events} + +स्कॅम टोकन्स ओळखण्याचा आणखी एक संभाव्य मार्ग म्हणजे त्यांच्यात कोणतेही संशयास्पद हस्तांतरण आहे का ते पाहणे. उदाहरणार्थ, ज्या खात्यांमध्ये तितके टोकन्स नाहीत अशा खात्यांमधून हस्तांतरण. तुम्ही [ही चाचणी कशी अंमलात आणायची हे पाहू शकता](https://github.com/qbzzt/20230915-scam-token-detection/blob/main/susTransfer.ts), पण `wARB` मध्ये ही समस्या नाही. + +## निष्कर्ष {#conclusion} + +ERC-20 स्कॅमचे स्वयंचलित शोध [फॉल्स निगेटिव्ह](https://en.wikipedia.org/wiki/False_positives_and_false_negatives#False_negative_error) पासून ग्रस्त आहे, कारण स्कॅम एक पूर्णपणे सामान्य ERC-20 टोकन कॉन्ट्रॅक्ट वापरू शकतो जो फक्त काहीही वास्तविक दर्शवत नाही. म्हणून तुम्ही नेहमी _विश्वसनीय स्त्रोताकडून टोकन ऍड्रेस मिळवण्याचा_ प्रयत्न केला पाहिजे. + +स्वयंचलित शोध काही प्रकरणांमध्ये मदत करू शकतो, जसे की DeFi चे भाग, जिथे अनेक टोकन्स आहेत आणि त्यांना स्वयंचलितपणे हाताळले जाणे आवश्यक आहे. पण नेहमीप्रमाणे [केव्हिएट एम्प्टर](https://www.investopedia.com/terms/c/caveatemptor.asp), तुम्ही स्वतःचे संशोधन करा आणि तुमच्या वापरकर्त्यांनाही तसे करण्यास प्रोत्साहित करा. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/secret-state/index.md b/public/content/translations/mr/developers/tutorials/secret-state/index.md new file mode 100644 index 00000000000..f54524c25f1 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/secret-state/index.md @@ -0,0 +1,741 @@ +--- +title: "गुप्त स्टेटसाठी शून्य-ज्ञानाचा वापर करणे" +description: "ऑनचेन गेम्स मर्यादित आहेत कारण ते कोणतीही छुपी माहिती ठेवू शकत नाहीत. हे ट्युटोरियल वाचल्यानंतर, वाचक शून्य-ज्ञान पुरावे आणि सर्व्हर घटक एकत्र करून गुप्त स्टेट, ऑफचेन, घटकांसह सत्यापित करण्यायोग्य गेम्स तयार करू शकतील. हे करण्याचे तंत्र माइनस्वीपर गेम तयार करून दाखवले जाईल." +author: Ori Pomerantz +tags: + [ + "सर्व्हर", + "ऑफचेन", + "केंद्रीकृत", + "शून्य-ज्ञान", + "zokrates", + "mud" + ] +skill: advanced +lang: mr +published: 2025-03-15 +--- + +_ब्लॉकचेनवर कोणतीही गुपिते नाहीत_. ब्लॉकचेनवर पोस्ट केलेली प्रत्येक गोष्ट प्रत्येकासाठी वाचायला खुली असते. हे आवश्यक आहे, कारण ब्लॉकचेन कोणीही सत्यापित करू शकेल यावर आधारित आहे. तथापि, गेम्स अनेकदा गुप्त स्टेटवर अवलंबून असतात. उदाहरणार्थ, [minesweeper](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)) या गेमचा काहीच अर्थ नाही, जर तुम्ही फक्त ब्लॉकचेन एक्सप्लोररवर जाऊन नकाशा पाहू शकत असाल. + +गुप्त स्टेट ठेवण्यासाठी [सर्व्हर घटक](/developers/tutorials/server-components/) वापरणे हा सर्वात सोपा उपाय आहे. तथापि, आपण ब्लॉकचेन वापरण्याचे कारण म्हणजे गेम डेव्हलपरकडून होणारी फसवणूक टाळणे. आपल्याला सर्व्हर घटकाच्या प्रामाणिकपणाची खात्री करणे आवश्यक आहे. सर्व्हर स्टेटचा हॅश देऊ शकतो आणि एका मूव्हचा निकाल काढण्यासाठी वापरलेली स्टेट योग्य आहे हे सिद्ध करण्यासाठी [शून्य-ज्ञान पुरावे](/zero-knowledge-proofs/#why-zero-knowledge-proofs-are-important) वापरू शकतो. + +हा लेख वाचल्यानंतर, तुम्हाला अशा प्रकारचा गुप्त स्टेट धारण करणारा सर्व्हर, स्टेट दाखवण्यासाठी एक क्लायंट आणि दोघांमधील संवादासाठी एक ऑनचेन घटक कसा तयार करायचा हे कळेल. आपण वापरणार असलेली मुख्य साधने असतील: + +| टूल | उद्देश | आवृत्तीवर सत्यापित | +| --------------------------------------------- | -------------------------------------------------- | --------------------------------------: | +| [Zokrates](https://zokrates.github.io/) | शून्य-ज्ञान पुरावे आणि त्यांची पडताळणी | 1.1.9 | +| [Typescript](https://www.typescriptlang.org/) | सर्व्हर आणि क्लायंट या दोघांसाठी प्रोग्रामिंग भाषा | 5.4.2 | +| [Node](https://nodejs.org/en) | सर्व्हर चालवणे | 20.18.2 | +| [Viem](https://viem.sh/) | ब्लॉकचेनसह संवाद | 2.9.20 | +| [MUD](https://mud.dev/) | ऑनचेन डेटा व्यवस्थापन | 2.0.12 | +| [React](https://react.dev/) | क्लायंट वापरकर्ता इंटरफेस | 18.2.0 | +| [Vite](https://vitejs.dev/) | क्लायंट कोड सर्व्ह करणे | 4.2.1 | + +## माइनस्वीपर उदाहरण {#minesweeper} + +[Minesweeper](https://en.wikipedia.org/wiki/Minesweeper_\(video_game\)) हा एक गेम आहे ज्यात माइनफिल्ड असलेला गुप्त नकाशा असतो. खेळाडू एका विशिष्ट ठिकाणी खोदणे निवडतो. जर त्या ठिकाणी माइन असेल, तर खेळ संपतो. अन्यथा, खेळाडूला त्या जागेच्या सभोवतालच्या आठ चौकोनांमधील माइन्सची संख्या मिळते. + +हे ॲप्लिकेशन [MUD](https://mud.dev/) वापरून लिहिलेले आहे, जे एक फ्रेमवर्क आहे जे आपल्याला [की-व्हॅल्यू डेटाबेस](https://aws.amazon.com/nosql/key-value/) वापरून ऑनचेन डेटा संग्रहित करण्यास आणि तो डेटा ऑफचेन घटकांसह आपोआप सिंक्रोनाइझ करण्यास अनुमती देते. सिंक्रोनाइझेशन व्यतिरिक्त, MUD ॲक्सेस कंट्रोल प्रदान करणे सोपे करते, आणि इतर वापरकर्त्यांना परवानगीशिवाय आमच्या ॲप्लिकेशनचा [विस्तार](https://mud.dev/guides/extending-a-world) करण्यास सोपे करते. + +### माइनस्वीपर उदाहरण चालवणे {#running-minesweeper-example} + +माइनस्वीपर उदाहरण चालवण्यासाठी: + +1. तुम्ही [पूर्व-आवश्यकता स्थापित केल्या आहेत](https://mud.dev/quickstart#prerequisites) याची खात्री करा: [Node](https://mud.dev/quickstart#prerequisites), [Foundry](https://book.getfoundry.sh/getting-started/installation), [`git`](https://git-scm.com/downloads), [`pnpm`](https://git-scm.com/downloads), आणि [`mprocs`](https://github.com/pvolok/mprocs). + +2. रिपॉझिटरी क्लोन करा. + + ```sh copy + git clone https://github.com/qbzzt/20240901-secret-state.git + ``` + +3. पॅकेजेस स्थापित करा. + + ```sh copy + cd 20240901-secret-state/ + pnpm install + npm install -g mprocs + ``` + + जर `pnpm install` चा भाग म्हणून Foundry स्थापित केले असेल, तर तुम्हाला कमांड-लाइन शेल रीस्टार्ट करणे आवश्यक आहे. + +4. कॉन्ट्रॅक्ट्स कंपाईल करा + + ```sh copy + cd packages/contracts + forge build + cd ../.. + ``` + +5. प्रोग्राम सुरू करा ([anvil](https://book.getfoundry.sh/anvil/) ब्लॉकचेनसह) आणि प्रतीक्षा करा. + + ```sh copy + mprocs + ``` + + लक्षात घ्या की स्टार्टअपला बराच वेळ लागतो. प्रगती पाहण्यासाठी, प्रथम _contracts_ टॅबवर स्क्रोल करण्यासाठी डाउन ॲरो वापरा आणि MUD कॉन्ट्रॅक्ट्स तैनात होत असल्याचे पहा. जेव्हा तुम्हाला _Waiting for file changes…_ हा संदेश मिळेल, तेव्हा कॉन्ट्रॅक्ट्स तैनात होतील आणि पुढील प्रगती _server_ टॅबमध्ये होईल. तेथे, तुम्हाला _Verifier address: 0x...._ हा संदेश मिळेपर्यंत तुम्ही प्रतीक्षा करा. + + जर ही पायरी यशस्वी झाली, तर तुम्हाला `mprocs` स्क्रीन दिसेल, ज्यामध्ये डावीकडे विविध प्रक्रिया आणि उजवीकडे सध्या निवडलेल्या प्रक्रियेसाठी कन्सोल आउटपुट असेल. + + ![mprocs स्क्रीन](./mprocs.png) + + जर `mprocs` मध्ये काही समस्या असेल, तर तुम्ही चार प्रक्रिया मॅन्युअली चालवू शकता, प्रत्येक तिच्या स्वतःच्या कमांड लाइन विंडोमध्ये: + + - **Anvil** + + ```sh + cd packages/contracts + anvil --base-fee 0 --block-time 2 + ``` + + - **कॉन्ट्रॅक्ट्स** + + ```sh + cd packages/contracts + pnpm mud dev-contracts --rpc http://127.0.0.1:8545 + ``` + + - **सर्व्हर** + + ```sh + cd packages/server + pnpm start + ``` + + - **क्लायंट** + + ```sh + cd packages/client + pnpm run dev + ``` + +6. आता तुम्ही [क्लायंट](http://localhost:3000) वर ब्राउझ करू शकता, **New Game** वर क्लिक करा आणि खेळायला सुरुवात करू शकता. + +### टेबल्स {#tables} + +आम्हाला ऑनचेन [अनेक टेबल्स](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts) आवश्यक आहेत. + +- `Configuration`: हे टेबल एक सिंगलेटन आहे, यात की नाही आणि एकच रेकॉर्ड आहे. हे गेम कॉन्फिगरेशन माहिती ठेवण्यासाठी वापरले जाते: + - `height`: माइनफिल्डची उंची + - `width`: माइनफिल्डची रुंदी + - `numberOfBombs`: प्रत्येक माइनफिल्डमधील बॉम्बची संख्या + +- `VerifierAddress`: हे टेबल देखील एक सिंगलेटन आहे. हे कॉन्फिगरेशनचा एक भाग, व्हेरिफायर कॉन्ट्रॅक्टचा ॲड्रेस (`verifier`) ठेवण्यासाठी वापरले जाते. आम्ही ही माहिती `Configuration` टेबलमध्ये ठेवू शकलो असतो, परंतु ती एका वेगळ्या घटकाद्वारे, सर्व्हरद्वारे सेट केली जाते, म्हणून ती वेगळ्या टेबलमध्ये ठेवणे सोपे आहे. + +- `PlayerGame`: की खेळाडूचा ॲड्रेस आहे. डेटा असा आहे: + + - `gameId`: 32-बाईट व्हॅल्यू जे खेळाडू ज्या नकाशावर खेळत आहे त्याचा हॅश आहे (गेम ओळखकर्ता). + - `win`: एक बूलियन जो खेळाडू गेम जिंकला की नाही हे दर्शवितो. + - `lose`: एक बूलियन जो खेळाडू गेम हरला की नाही हे दर्शवितो. + - `digNumber`: गेममधील यशस्वी खोदकामांची संख्या. + +- `GamePlayer`: हे टेबल `gameId` पासून प्लेयर ॲड्रेसपर्यंतचे रिव्हर्स मॅपिंग ठेवते. + +- `Map`: की तीन व्हॅल्यूजचा एक टपल आहे: + + - `gameId`: 32-बाईट व्हॅल्यू जे खेळाडू ज्या नकाशावर खेळत आहे त्याचा हॅश आहे (गेम ओळखकर्ता). + - `x` कोऑर्डिनेट + - `y` कोऑर्डिनेट + + व्हॅल्यू एकच संख्या आहे. जर बॉम्ब सापडला तर ते 255 आहे. अन्यथा, ते त्या स्थानाच्या आसपासच्या बॉम्बची संख्या अधिक एक आहे. आपण फक्त बॉम्बची संख्या वापरू शकत नाही, कारण डीफॉल्टनुसार EVM मधील सर्व स्टोरेज आणि MUD मधील सर्व रो व्हॅल्यू शून्य असतात. आपल्याला "खेळाडूने येथे अद्याप खोदले नाही" आणि "खेळाडूने येथे खोदले, आणि त्याला आढळले की आसपास शून्य बॉम्ब आहेत" यामध्ये फरक करणे आवश्यक आहे. + +याव्यतिरिक्त, क्लायंट आणि सर्व्हरमधील संवाद ऑनचेन घटकाद्वारे होतो. हे देखील टेबल्स वापरून अंमलात आणले जाते. + +- `PendingGame`: नवीन गेम सुरू करण्यासाठी न पुरवलेल्या विनंत्या. +- `PendingDig`: एका विशिष्ट गेममध्ये एका विशिष्ट ठिकाणी खोदण्यासाठी न पुरवलेल्या विनंत्या. हे एक [ऑफचेन टेबल](https://mud.dev/store/tables#types-of-tables) आहे, याचा अर्थ ते EVM स्टोरेजमध्ये लिहिले जात नाही, ते फक्त इव्हेंट्स वापरून ऑफचेन वाचता येते. + +### एक्झिक्युशन आणि डेटा फ्लो {#execution-data-flows} + +हे फ्लो क्लायंट, ऑनचेन घटक आणि सर्व्हर यांच्यातील अंमलबजावणीचे समन्वय साधतात. + +#### इनिशिएलायझेशन {#initialization-flow} + +जेव्हा तुम्ही `mprocs` चालवता, तेव्हा ह्या पायऱ्या घडतात: + +1. [`mprocs`](https://github.com/pvolok/mprocs) चार घटक चालवते: + + - [Anvil](https://book.getfoundry.sh/anvil/), जे स्थानिक ब्लॉकचेन चालवते + - [Contracts](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/contracts), जे MUD साठी कॉन्ट्रॅक्ट्स कंपाईल करते (गरज असल्यास) आणि तैनात करते + - [Client](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/client), जे वेब ब्राउझरना UI आणि क्लायंट कोड सर्व्ह करण्यासाठी [Vite](https://vitejs.dev/) चालवते. + - [Server](https://github.com/qbzzt/20240901-secret-state/tree/main/packages/server), जे सर्व्हर क्रिया करते + +2. `contracts` पॅकेज MUD कॉन्ट्रॅक्ट्स तैनात करते आणि नंतर [ `PostDeploy.s.sol` स्क्रिप्ट](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol) चालवते. ही स्क्रिप्ट कॉन्फिगरेशन सेट करते. github वरील कोड [10x5 माइनफिल्डमध्ये आठ माइन्स असल्याचे](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/script/PostDeploy.s.sol#L23) निर्दिष्ट करतो. + +3. [सर्व्हर](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts) [MUD सेटअप करून](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L6) सुरू होतो. इतर गोष्टींबरोबरच, हे डेटा सिंक्रोनाइझेशन सक्रिय करते, जेणेकरून संबंधित टेबल्सची एक प्रत सर्व्हरच्या मेमरीमध्ये अस्तित्वात असेल. + +4. सर्व्हर [जेव्हा `Configuration` टेबल बदलते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L23) तेव्हा कार्यान्वित होण्यासाठी एका फंक्शनची सदस्यता घेतो. `PostDeploy.s.sol` कार्यान्वित झाल्यावर आणि टेबलमध्ये बदल केल्यावर [हे फंक्शन](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L24-L168) कॉल केले जाते. + +5. जेव्हा सर्व्हर इनिशिएलायझेशन फंक्शनमध्ये कॉन्फिगरेशन असते, तेव्हा ते [सर्व्हरच्या शून्य-ज्ञान भागाला](#using-zokrates-from-typescript) इनिशिएलाइझ करण्यासाठी [`zkFunctions`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L34-L35) ला कॉल करते. आपल्याला कॉन्फिगरेशन मिळेपर्यंत हे होऊ शकत नाही कारण शून्य-ज्ञान फंक्शन्सना माइनफिल्डची रुंदी आणि उंची स्थिर मूल्ये म्हणून असणे आवश्यक आहे. + +6. सर्व्हरचा शून्य-ज्ञान भाग सुरू झाल्यानंतर, पुढची पायरी म्हणजे [शून्य-ज्ञान पडताळणी कॉन्ट्रॅक्ट ब्लॉकचेनवर तैनात करणे](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L42-L53) आणि MUD मध्ये व्हेरिफायचा ॲड्रेस सेट करणे. + +7. शेवटी, आम्ही अद्यतनांसाठी सदस्यता घेतो जेणेकरून खेळाडू [नवीन गेम सुरू करण्याची विनंती](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71) करतो किंवा [विद्यमान गेममध्ये खोदकाम करण्याची विनंती](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73-L108) करतो तेव्हा आम्हाला कळेल. + +#### नवीन गेम {#new-game-flow} + +खेळाडू नवीन गेमची विनंती करतो तेव्हा हे घडते. + +1. जर या खेळाडूसाठी कोणताही गेम प्रगतीपथावर नसेल, किंवा एक असेल पण शून्य gameId सह, तर क्लायंट [नवीन गेम बटण](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175) दाखवते. जेव्हा वापरकर्ता हे बटण दाबतो, तेव्हा [React `newGame` फंक्शन चालवते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L96). + +2. [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L43-L46) हे `System` कॉल आहे. MUD मध्ये सर्व कॉल्स `World` कॉन्ट्रॅक्टद्वारे राउट केले जातात आणि बहुतेक प्रकरणांमध्ये तुम्ही `__` कॉल करता. या प्रकरणात, कॉल `app__newGame` ला आहे, ज्याला MUD नंतर [`GameSystem` मधील `newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L16-L22) कडे राउट करते. + +3. ऑनचेन फंक्शन तपासते की खेळाडूकडे प्रगतीपथावर असलेला गेम नाही, आणि जर नसेल तर [`PendingGame` टेबलमध्ये विनंती जोडते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L21). + +4. सर्व्हर `PendingGame` मधील बदल ओळखतो आणि [सबस्क्राइब केलेले फंक्शन चालवतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L55-L71). हे फंक्शन [`newGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L110-L114) ला कॉल करते, जे नंतर [`createGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L116-L144) ला कॉल करते. + +5. `createGame` पहिली गोष्ट [योग्य संख्येने माइन्स असलेला यादृच्छिक नकाशा तयार करते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L120-L135). नंतर, ते रिकाम्या किनारी असलेला नकाशा तयार करण्यासाठी [`makeMapBorders`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L147-L166) ला कॉल करते, जे Zokrates साठी आवश्यक आहे. शेवटी, `createGame` [`calculateMapHash`](#calculateMapHash) ला कॉल करते, नकाशाचा हॅश मिळवण्यासाठी, जो गेम आयडी म्हणून वापरला जातो. + +6. `newGame` फंक्शन नवीन गेम `gamesInProgress` मध्ये जोडते. + +7. सर्व्हर शेवटची गोष्ट [`app__newGameResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L38-L43) ला कॉल करते, जे ऑनचेन आहे. हे फंक्शन एका वेगळ्या `System` मध्ये आहे, [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol), जेणेकरून ॲक्सेस कंट्रोल सक्षम करता येईल. ॲक्सेस कंट्रोल [MUD कॉन्फिगरेशन फाईल](https://mud.dev/config), [`mud.config.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/mud.config.ts#L67-L72) मध्ये परिभाषित केले आहे. + + ॲक्सेस लिस्ट फक्त एकाच ॲड्रेसला `System` कॉल करण्याची परवानगी देते. हे सर्व्हर फंक्शन्सचा ॲक्सेस एकाच ॲड्रेसपुरता मर्यादित करते, त्यामुळे कोणीही सर्व्हरची नक्कल करू शकत नाही. + +8. ऑनचेन घटक संबंधित टेबल्स अद्यतनित करतो: + + - `PlayerGame` मध्ये गेम तयार करा. + - `GamePlayer` मध्ये रिव्हर्स मॅपिंग सेट करा. + - `PendingGame` मधून विनंती काढा. + +9. सर्व्हर `PendingGame` मधील बदल ओळखतो, परंतु [`wantsGame`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L58-L60) असत्य असल्यामुळे काहीही करत नाही. + +10. क्लायंटवर [`gameRecord`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L143-L148) खेळाडूच्या ॲड्रेससाठी `PlayerGame` एंट्रीवर सेट केले जाते. जेव्हा `PlayerGame` बदलते, तेव्हा `gameRecord` देखील बदलते. + +11. जर `gameRecord` मध्ये व्हॅल्यू असेल, आणि गेम जिंकला किंवा हरला नसेल, तर क्लायंट [नकाशा दाखवतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190). + +#### खोदणे {#dig-flow} + +1. खेळाडू [नकाशा सेलच्या बटणावर क्लिक करतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L188), जे [`dig` फंक्शन](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/mud/createSystemCalls.ts#L33-L36) कॉल करते. हे फंक्शन [ऑनचेन `dig` ला कॉल करते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L24-L32). + +2. ऑनचेन घटक [अनेक सॅनिटी तपासण्या करतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L25-L30), आणि यशस्वी झाल्यास खोदण्याची विनंती [`PendingDig`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/GameSystem.sol#L31) मध्ये जोडतो. + +3. सर्व्हर [`PendingDig` मधील बदल ओळखतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L73). [जर ते वैध असेल तर](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L75-L84), ते [शून्य-ज्ञान कोडला कॉल करते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L86-L95) (खाली स्पष्ट केलेले) निकाल आणि तो वैध असल्याचा पुरावा तयार करण्यासाठी. + +4. [सर्व्हर](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L97-L107) ऑनचेन [`digResponse`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L45-L64) ला कॉल करते. + +5. `digResponse` दोन गोष्टी करते. प्रथम, ते [शून्य ज्ञान पुरावा तपासते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L47-L61). नंतर, जर पुरावा तपासला गेला, तर ते निकालावर प्रक्रिया करण्यासाठी [`processDigResult`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L67-L86) ला कॉल करते. + +6. `processDigResult` गेम [हरला आहे की नाही](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L76-L78) किंवा [जिंकला आहे की नाही](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L83-L86) हे तपासते, आणि [`Map`, ऑनचेन नकाशा अद्यतनित करते](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol#L80). + +7. क्लायंट अद्यतने आपोआप उचलतो आणि [खेळाडूला दाखवलेला नकाशा अद्यतनित करतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/client/src/App.tsx#L175-L190), आणि लागू असल्यास खेळाडूला सांगतो की तो जिंकला आहे की हरला आहे. + +## Zokrates वापरणे {#using-zokrates} + +वर स्पष्ट केलेल्या प्रवाहांमध्ये आम्ही शून्य-ज्ञान भागांना वगळले, त्यांना एक काळा बॉक्स मानले. आता ते उघडून पाहूया आणि तो कोड कसा लिहिला आहे ते पाहूया. + +### नकाशा हॅश करणे {#hashing-map} + +आपण [हा JavaScript कोड](https://github.com/ZK-Plus/ICBC24_Tutorial_Compute-Offchain-Verify-onchain/tree/solutions/exercise) वापरून [Poseidon](https://www.poseidon-hash.info) अंमलात आणू शकतो, जो आपण वापरत असलेला Zokrates हॅश फंक्शन आहे. तथापि, हे जलद असले तरी, Zokrates हॅश फंक्शन वापरण्यापेक्षा हे अधिक क्लिष्ट असेल. हे एक ट्युटोरियल आहे, आणि म्हणून कोड साधेपणासाठी ऑप्टिमाइझ केला आहे, कार्यक्षमतेसाठी नाही. म्हणून, आम्हाला दोन भिन्न Zokrates प्रोग्राम्सची आवश्यकता आहे, एक नकाशाचा हॅश (`hash`) मोजण्यासाठी आणि दुसरा नकाशावरील स्थानावरील खोदण्याच्या परिणामाचा शून्य-ज्ञान पुरावा (`dig`) तयार करण्यासाठी. + +### हॅश फंक्शन {#hash-function} + +हे फंक्शन आहे जे नकाशाचा हॅश मोजते. आपण या कोडची ओळ-दर-ओळ पाहणी करू. + +``` +import "hashes/poseidon/poseidon.zok" as poseidon; +import "utils/pack/bool/pack128.zok" as pack128; +``` + +या दोन ओळी [Zokrates स्टँडर्ड लायब्ररी](https://zokrates.github.io/toolbox/stdlib.html) मधून दोन फंक्शन्स आयात करतात. [पहिले फंक्शन](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/hashes/poseidon/poseidon.zok) [Poseidon हॅश](https://www.poseidon-hash.info/) आहे. ते [`field` घटकांची](https://zokrates.github.io/language/types.html#field) एक ॲरे घेते आणि `field` परत करते. + +Zokrates मधील फील्ड घटक सामान्यतः 256 बिट्सपेक्षा कमी असतो, परंतु जास्त नाही. कोड सुलभ करण्यासाठी, आम्ही नकाशा 512 बिट्सपर्यंत मर्यादित ठेवतो, आणि चार फील्ड्सच्या ॲरेचा हॅश करतो, आणि प्रत्येक फील्डमध्ये आम्ही फक्त 128 बिट्स वापरतो. [`pack128` फंक्शन](https://github.com/Zokrates/ZoKrates/blob/latest/zokrates_stdlib/stdlib/utils/pack/bool/pack128.zok) या उद्देशासाठी 128 बिट्सच्या ॲरेला `field` मध्ये बदलते. + +``` + def hashMap(bool[${width+2}][${height+2}] map) -> field { +``` + +ही ओळ फंक्शनची व्याख्या सुरू करते. `hashMap` ला `map` नावाचा एकच पॅरामीटर मिळतो, जो दोन-मितीय `bool`(ean) ॲरे आहे. नकाशाचा आकार `width+2` बाय `height+2` आहे, ज्याची कारणे [खाली स्पष्ट केली आहेत](#why-map-border). + +आपण `${width+2}` आणि `${height+2}` वापरू शकतो कारण Zokrates प्रोग्राम्स या ॲप्लिकेशनमध्ये [टेम्पलेट स्ट्रिंग्स](https://www.w3schools.com/js/js_string_templates.asp) म्हणून संग्रहित आहेत. `${` आणि `}` मधील कोड JavaScript द्वारे मूल्यांकन केला जातो आणि अशा प्रकारे प्रोग्राम वेगवेगळ्या नकाशा आकारांसाठी वापरला जाऊ शकतो. मॅप पॅरामीटरच्या सभोवताली एक स्थान रुंद बॉम्ब नसलेली सीमा आहे, ज्यामुळे आपल्याला रुंदी आणि उंचीमध्ये दोन जोडण्याची गरज आहे. + +रिटर्न व्हॅल्यू एक `field` आहे ज्यात हॅश असतो. + +``` + bool[512] mut map1d = [false; 512]; +``` + +नकाशा दोन-मितीय आहे. तथापि, `pack128` फंक्शन दोन-मितीय ॲरेसह कार्य करत नाही. म्हणून आपण प्रथम नकाशाला 512-बाईट ॲरेमध्ये, `map1d` वापरून सपाट करतो. डीफॉल्टनुसार Zokrates व्हेरिएबल्स स्थिर असतात, परंतु आपल्याला या ॲरेला लूपमध्ये मूल्ये नियुक्त करण्याची आवश्यकता आहे, म्हणून आपण ते [`mut`](https://zokrates.github.io/language/variables.html#mutability) म्हणून परिभाषित करतो. + +आपल्याला ॲरेला इनिशिएलाइझ करण्याची आवश्यकता आहे कारण Zokrates मध्ये `undefined` नाही. `[false; 512]` अभिव्यक्तीचा अर्थ [512 `false` मूल्यांची एक ॲरे](https://zokrates.github.io/language/types.html#declaration-and-initialization) आहे. + +``` + u32 mut counter = 0; +``` + +आपण `map1d` मध्ये आधीच भरलेल्या बिट्स आणि न भरलेल्या बिट्समध्ये फरक करण्यासाठी एका काउंटरची देखील आवश्यकता आहे. + +``` + for u32 x in 0..${width+2} { +``` + +हे तुम्ही Zokrates मध्ये [`for` लूप](https://zokrates.github.io/language/control_flow.html#for-loops) कसे घोषित करता ते आहे. Zokrates `for` लूपला निश्चित मर्यादा असणे आवश्यक आहे, कारण ते लूपसारखे दिसत असले तरी, कंपायलर प्रत्यक्षात ते "अनरोल" करतो. अभिव्यक्ती `${width+2}` एक कंपाइल टाइम कॉन्स्टंट आहे कारण `width` TypeScript कोड कंपायलरला कॉल करण्यापूर्वी सेट करते. + +``` + for u32 y in 0..${height+2} { + map1d[counter] = map[x][y]; + counter = counter+1; + } + } +``` + +नकाशातील प्रत्येक स्थानासाठी, ते मूल्य `map1d` ॲरेमध्ये ठेवा आणि काउंटर वाढवा. + +``` + field[4] hashMe = [ + pack128(map1d[0..128]), + pack128(map1d[128..256]), + pack128(map1d[256..384]), + pack128(map1d[384..512]) + ]; +``` + +`pack128` `map1d` मधून चार `field` मूल्यांची ॲरे तयार करण्यासाठी. Zokrates मध्ये `array[a..b]` म्हणजे ॲरेचा तो तुकडा जो `a` पासून सुरू होतो आणि `b-1` वर संपतो. + +``` + return poseidon(hashMe); +} +``` + +या ॲरेला हॅशमध्ये रूपांतरित करण्यासाठी `poseidon` वापरा. + +### हॅश प्रोग्राम {#hash-program} + +सर्व्हरला गेम ओळखकर्ते तयार करण्यासाठी थेट `hashMap` कॉल करण्याची आवश्यकता आहे. तथापि, Zokrates प्रोग्राम सुरू करण्यासाठी फक्त `main` फंक्शन कॉल करू शकतो, म्हणून आम्ही एक प्रोग्राम तयार करतो ज्यात `main` हॅश फंक्शनला कॉल करतो. + +``` +${hashFragment} + +def main(bool[${width+2}][${height+2}] map) -> field { + return hashMap(map); +} +``` + +### खोदण्याचा प्रोग्राम {#dig-program} + +हे ॲप्लिकेशनच्या शून्य-ज्ञान भागाचे हृदय आहे, जिथे आम्ही खोदण्याच्या परिणामांची पडताळणी करण्यासाठी वापरले जाणारे पुरावे तयार करतो. + +``` +${hashFragment} + +// The number of mines in location (x,y) +def map2mineCount(bool[${width+2}][${height+2}] map, u32 x, u32 y) -> u8 { + return if map[x+1][y+1] { 1 } else { 0 }; +} +``` + +#### नकाशाची सीमा का {#why-map-border} + +शून्य-ज्ञान पुरावे [अंकगणित सर्किट्स](https://medium.com/web3studio/simple-explanations-of-arithmetic-circuits-and-zero-knowledge-proofs-806e59a79785) वापरतात, ज्यात `if` स्टेटमेंटचा सोपा पर्याय नसतो. त्याऐवजी, ते [कंडिशनल ऑपरेटर](https://en.wikipedia.org/wiki/Ternary_conditional_operator) च्या समतुल्य वापरतात. जर `a` शून्य किंवा एक असू शकते, तर तुम्ही `if a { b } else { c }` हे `ab+(1-a)c` म्हणून मोजू शकता. + +यामुळे, Zokrates `if` स्टेटमेंट नेहमी दोन्ही शाखांचे मूल्यांकन करते. उदाहरणार्थ, जर तुमच्याकडे हा कोड असेल: + +``` +bool[5] arr = [false; 5]; +u32 index=10; +return if index>4 { 0 } else { arr[index] } +``` + +ते त्रुटी देईल, कारण त्याला `arr[10]` मोजण्याची आवश्यकता आहे, जरी ते मूल्य नंतर शून्याने गुणले जाईल. + +या कारणामुळे आम्हाला नकाशाच्या सभोवताली एक स्थान रुंद सीमा आवश्यक आहे. आम्हाला एका स्थानाच्या सभोवतालच्या एकूण माइन्सची संख्या मोजण्याची आवश्यकता आहे, आणि याचा अर्थ असा आहे की आम्हाला जिथे खोदकाम करत आहोत त्या स्थानाच्या वर आणि खाली, डावीकडे आणि उजवीकडे एक पंक्ती पाहण्याची आवश्यकता आहे. याचा अर्थ असा आहे की ते स्थान Zokrates ला प्रदान केलेल्या नकाशा ॲरेमध्ये अस्तित्वात असले पाहिजे. + +``` +def main(private bool[${width+2}][${height+2}] map, u32 x, u32 y) -> (field, u8) { +``` + +डीफॉल्टनुसार Zokrates पुरावे त्यांचे इनपुट समाविष्ट करतात. एका जागेच्या आसपास पाच माइन्स आहेत हे जाणून घेण्याचा काही उपयोग नाही जोपर्यंत तुम्हाला ती जागा कोणती आहे हे माहित नसेल (आणि तुम्ही फक्त तुमच्या विनंतीशी जुळवू शकत नाही, कारण मग प्रोव्हर वेगवेगळी मूल्ये वापरू शकतो आणि तुम्हाला त्याबद्दल सांगू शकत नाही). तथापि, आपल्याला नकाशा गुप्त ठेवण्याची गरज आहे, तो Zokrates ला पुरवताना. उपाय म्हणजे `private` पॅरामीटर वापरणे, जो पुराव्याद्वारे उघड होत _नाही_. + +यामुळे गैरवापराचा आणखी एक मार्ग खुला होतो. प्रोव्हर योग्य कोऑर्डिनेट्स वापरू शकतो, परंतु जागेच्या आसपास कितीही माइन्स असलेला नकाशा तयार करू शकतो, आणि शक्यतो जागेवरच. या गैरवापराला प्रतिबंध करण्यासाठी, आम्ही शून्य ज्ञान पुराव्यामध्ये नकाशाचा हॅश समाविष्ट करतो, जो गेम ओळखकर्ता आहे. + +``` + return (hashMap(map), +``` + +येथे रिटर्न व्हॅल्यू एक टपल आहे ज्यात नकाशा हॅश ॲरे तसेच खोदण्याचा परिणाम समाविष्ट आहे. + +``` + if map2mineCount(map, x, y) > 0 { 0xFF } else { +``` + +जर जागेवरच बॉम्ब असेल तर आम्ही 255 एक विशेष मूल्य म्हणून वापरतो. + +``` + map2mineCount(map, x-1, y-1) + map2mineCount(map, x, y-1) + map2mineCount(map, x+1, y-1) + + map2mineCount(map, x-1, y) + map2mineCount(map, x+1, y) + + map2mineCount(map, x-1, y+1) + map2mineCount(map, x, y+1) + map2mineCount(map, x+1, y+1) + } + ); +} +``` + +जर खेळाडूने माइनवर आघात केला नसेल, तर जागेच्या सभोवतालच्या क्षेत्रासाठी माइन संख्या जोडा आणि ते परत करा. + +### TypeScript मधून Zokrates वापरणे {#using-zokrates-from-typescript} + +Zokrates चा कमांड लाइन इंटरफेस आहे, परंतु या प्रोग्राममध्ये आपण तो [TypeScript कोड](https://zokrates.github.io/toolbox/zokrates_js.html) मध्ये वापरतो. + +Zokrates व्याख्या असलेली लायब्ररी [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) आहे. + +```typescript +import { initialize as zokratesInitialize } from "zokrates-js" +``` + +[Zokrates JavaScript बाइंडिंग्ज](https://zokrates.github.io/toolbox/zokrates_js.html) आयात करा. आम्हाला फक्त [`initialize`](https://zokrates.github.io/toolbox/zokrates_js.html#initialize) फंक्शनची आवश्यकता आहे कारण ते सर्व Zokrates व्याख्यांवर निराकरण करणारे एक वचन परत करते. + +```typescript +export const zkFunctions = async (width: number, height: number) : Promise => { +``` + +Zokrates प्रमाणेच, आम्ही फक्त एकच फंक्शन निर्यात करतो, जे [असिंक्रोनस](https://www.w3schools.com/js/js_async.asp) आहे. जेव्हा ते शेवटी परत येते, तेव्हा ते खाली पाहिल्याप्रमाणे अनेक फंक्शन्स प्रदान करते. + +```typescript +const zokrates = await zokratesInitialize() +``` + +Zokrates सुरू करा, लायब्ररीमधून आपल्याला आवश्यक असलेले सर्व मिळवा. + +```typescript +const hashFragment = ` + import "utils/pack/bool/pack128.zok" as pack128; + import "hashes/poseidon/poseidon.zok" as poseidon; + . + . + . + } + ` + +const hashProgram = ` + ${hashFragment} + . + . + . + ` + +const digProgram = ` + ${hashFragment} + . + . + . + ` +``` + +पुढे आपल्याकडे हॅश फंक्शन आणि दोन Zokrates प्रोग्राम आहेत जे आपण वर पाहिले. + +```typescript +const digCompiled = zokrates.compile(digProgram) +const hashCompiled = zokrates.compile(hashProgram) +``` + +येथे आम्ही ते प्रोग्राम संकलित करतो. + +```typescript +// Create the keys for zero knowledge verification. +// On a production system you'd want to use a setup ceremony. +// (https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony). +const keySetupResults = zokrates.setup(digCompiled.program, "") +const verifierKey = keySetupResults.vk +const proverKey = keySetupResults.pk +``` + +उत्पादन प्रणालीवर आपण अधिक गुंतागुंतीचा [सेटअप समारंभ](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) वापरू शकतो, परंतु प्रात्यक्षिकासाठी हे पुरेसे आहे. वापरकर्त्यांना प्रोव्हर की माहित असणे ही समस्या नाही - ते अजूनही ती गोष्टी सिद्ध करण्यासाठी वापरू शकत नाहीत जोपर्यंत त्या खऱ्या नसतील. कारण आपण एन्ट्रॉपी (दुसरा पॅरामीटर, `""`) निर्दिष्ट करतो, परिणाम नेहमी सारखेच असतील. + +**टीप:** Zokrates प्रोग्राम्सचे संकलन आणि की निर्मिती ही मंद प्रक्रिया आहे. प्रत्येक वेळी ती पुनरावृत्ती करण्याची गरज नाही, फक्त नकाशाचा आकार बदलल्यावर. उत्पादन प्रणालीवर तुम्ही ते एकदा कराल आणि नंतर आउटपुट संग्रहित कराल. मी येथे हे फक्त साधेपणासाठी करत आहे. + +#### `calculateMapHash` {#calculateMapHash} + +```typescript +const calculateMapHash = function (hashMe: boolean[][]): string { + return ( + "0x" + + BigInt(zokrates.computeWitness(hashCompiled, [hashMe]).output.slice(1, -1)) + .toString(16) + .padStart(64, "0") + ) +} +``` + +[`computeWitness`](https://zokrates.github.io/toolbox/zokrates_js.html#computewitnessartifacts-args-options) फंक्शन प्रत्यक्षात Zokrates प्रोग्राम चालवते. ते दोन फील्ड्ससह एक रचना परत करते: `output`, जे प्रोग्रामचे आउटपुट JSON स्ट्रिंग म्हणून आहे, आणि `witness`, जे निकालाचा शून्य ज्ञान पुरावा तयार करण्यासाठी आवश्यक माहिती आहे. येथे आम्हाला फक्त आउटपुटची आवश्यकता आहे. + +आउटपुट `"31337"` स्वरूपात एक स्ट्रिंग आहे, जी अवतरण चिन्हांमध्ये बंद केलेली एक दशांश संख्या आहे. परंतु `viem` साठी आम्हाला आवश्यक असलेले आउटपुट `0x60A7` स्वरूपातील एक हेक्साडेसिमल संख्या आहे. म्हणून आपण अवतरण चिन्ह काढून टाकण्यासाठी `.slice(1,-1)` वापरतो आणि नंतर उर्वरित स्ट्रिंग, जी एक दशांश संख्या आहे, [`BigInt`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) मध्ये चालवण्यासाठी `BigInt` वापरतो. `.toString(16)` हे `BigInt` ला हेक्साडेसिमल स्ट्रिंगमध्ये रूपांतरित करते, आणि `"0x"+` हेक्साडेसिमल संख्यांसाठी मार्कर जोडते. + +```typescript +// Dig and return a zero knowledge proof of the result +// (server-side code) +``` + +शून्य ज्ञान पुराव्यामध्ये सार्वजनिक इनपुट (`x` आणि `y`) आणि निकाल (नकाशाचा हॅश आणि बॉम्बची संख्या) समाविष्ट आहेत. + +```typescript + const zkDig = function(map: boolean[][], x: number, y: number) : any { + if (x<0 || x>=width || y<0 || y>=height) + throw new Error("Trying to dig outside the map") +``` + +Zokrates मध्ये निर्देशांक मर्यादेबाहेर आहे की नाही हे तपासणे एक समस्या आहे, म्हणून आपण ते येथे करतो. + +```typescript +const runResults = zokrates.computeWitness(digCompiled, [map, `${x}`, `${y}`]) +``` + +खोदण्याचा प्रोग्राम कार्यान्वित करा. + +```typescript + const proof = zokrates.generateProof( + digCompiled.program, + runResults.witness, + proverKey) + + return proof + } +``` + +[`generateProof`](https://zokrates.github.io/toolbox/zokrates_js.html#generateproofprogram-witness-provingkey-entropy) वापरा आणि पुरावा परत करा. + +```typescript +const solidityVerifier = ` + // Map size: ${width} x ${height} + \n${zokrates.exportSolidityVerifier(verifierKey)} + ` +``` + +एक Solidity व्हेरिफायर, एक स्मार्ट कॉन्ट्रॅक्ट जो आपण ब्लॉकचेनवर तैनात करू शकतो आणि `digCompiled.program` द्वारे व्युत्पन्न केलेल्या पुराव्यांची पडताळणी करण्यासाठी वापरू शकतो. + +```typescript + return { + zkDig, + calculateMapHash, + solidityVerifier, + } +} +``` + +शेवटी, इतर कोडला आवश्यक असलेली प्रत्येक गोष्ट परत करा. + +## सुरक्षा चाचण्या {#security-tests} + +सुरक्षा चाचण्या महत्त्वाच्या आहेत कारण कार्यक्षमतेतील एक बग अखेरीस स्वतःला प्रकट करेल. परंतु जर ॲप्लिकेशन असुरक्षित असेल, तर ते बराच काळ लपून राहण्याची शक्यता आहे, जोपर्यंत कोणीतरी फसवणूक करून इतरांच्या संसाधनांवर ताबा मिळवून ते उघड करत नाही. + +### परवानग्या {#permissions} + +या गेममध्ये एक विशेषाधिकारप्राप्त संस्था आहे, सर्व्हर. तो एकमेव वापरकर्ता आहे ज्याला [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) मधील फंक्शन्स कॉल करण्याची परवानगी आहे. आपण [`cast`](https://book.getfoundry.sh/cast/) वापरून परवानगी असलेल्या फंक्शन्सचे कॉल्स फक्त सर्व्हर खात्याप्रमाणेच परवानगी आहेत याची पडताळणी करू शकतो. + +[सर्व्हरची खाजगी की `setupNetwork.ts` मध्ये आहे](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/mud/setupNetwork.ts#L52). + +1. `anvil` (ब्लॉकचेन) चालवणाऱ्या संगणकावर, हे पर्यावरण व्हेरिएबल्स सेट करा. + + ```sh copy + WORLD_ADDRESS=0x8d8b6b8414e1e3dcfd4168561b9be6bd3bf6ec4b + UNAUTHORIZED_KEY=0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a + AUTHORIZED_KEY=0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d + ``` + +2. व्हेरिफायर ॲड्रेस एक अनधिकृत ॲड्रेस म्हणून सेट करण्याचा प्रयत्न करण्यासाठी `cast` वापरा. + + ```sh copy + cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $UNAUTHORIZED_KEY + ``` + + `cast` केवळ अपयश नोंदवत नाही, तर तुम्ही ब्राउझरवरील गेममध्ये **MUD Dev Tools** उघडू शकता, **Tables** वर क्लिक करू शकता आणि **app\_\_VerifierAddress** निवडू शकता. ॲड्रेस शून्य नाही हे पहा. + +3. व्हेरिफायर ॲड्रेस सर्व्हरचा ॲड्रेस म्हणून सेट करा. + + ```sh copy + cast send $WORLD_ADDRESS 'app__setVerifier(address)' `cast address-zero` --private-key $AUTHORIZED_KEY + ``` + + **app\_\_VerifiedAddress** मधील ॲड्रेस आता शून्य असावा. + +एकाच `System` मधील सर्व MUD फंक्शन्स एकाच ॲक्सेस कंट्रोलमधून जातात, म्हणून मी ही चाचणी पुरेशी मानतो. जर तुम्ही मानत नसाल, तर तुम्ही [`ServerSystem`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/contracts/src/systems/ServerSystem.sol) मधील इतर फंक्शन्स तपासू शकता. + +### शून्य-ज्ञान गैरवापर {#zero-knowledge-abuses} + +Zokrates ची पडताळणी करण्याचे गणित या ट्युटोरियलच्या कक्षेबाहेर आहे (आणि माझ्या क्षमतेबाहेर). तथापि, आपण शून्य-ज्ञान कोडवर विविध तपासण्या चालवू शकतो हे सत्यापित करण्यासाठी की जर ते योग्यरित्या केले नाही तर ते अयशस्वी होते. या सर्व चाचण्यांसाठी आम्हाला [`zero-knowledge.ts`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts) मध्ये बदल करणे आणि संपूर्ण ॲप्लिकेशन पुन्हा सुरू करणे आवश्यक असेल. सर्व्हर प्रक्रिया पुन्हा सुरू करणे पुरेसे नाही, कारण ते ॲप्लिकेशनला एका अशक्य स्थितीत टाकते (खेळाडूचा गेम प्रगतीपथावर आहे, परंतु गेम आता सर्व्हरला उपलब्ध नाही). + +#### चुकीचे उत्तर {#wrong-answer} + +सर्वात सोपी शक्यता म्हणजे शून्य-ज्ञान पुराव्यामध्ये चुकीचे उत्तर देणे. ते करण्यासाठी, आम्ही `zkDig` मध्ये जातो आणि [ओळ 91 मध्ये बदल करतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L91): + +```ts +proof.inputs[3] = "0x" + "1".padStart(64, "0") +``` + +याचा अर्थ असा आहे की आपण नेहमीच दावा करू की एक बॉम्ब आहे, योग्य उत्तराची पर्वा न करता. या आवृत्तीसह खेळण्याचा प्रयत्न करा, आणि तुम्हाला `pnpm dev` स्क्रीनच्या **सर्व्हर** टॅबमध्ये ही त्रुटी दिसेल: + +``` + cause: { + code: 3, + message: 'execution reverted: revert: Zero knowledge verification fail', + data: '0x08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000 +000000000000000000000000000000000000000000000000205a65726f206b6e6f776c6564676520766572696669636174696f6 +e206661696c' + }, +``` + +त्यामुळे या प्रकारची फसवणूक अयशस्वी होते. + +#### चुकीचा पुरावा {#wrong-proof} + +जर आपण योग्य माहिती दिली, पण फक्त चुकीचा पुरावा डेटा दिला तर काय होईल? आता, ओळ 91 याने बदला: + +```ts +proof.proof = { + a: ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], + b: [ + ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], + ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], + ], + c: ["0x" + "1".padStart(64, "0"), "0x" + "2".padStart(64, "0")], +} +``` + +ते अजूनही अयशस्वी होते, पण आता ते कारणाशिवाय अयशस्वी होते कारण ते व्हेरिफायर कॉल दरम्यान होते. + +### वापरकर्ता शून्य-विश्वास कोड कसा सत्यापित करू शकतो? {#user-verify-zero-trust} + +स्मार्ट कॉन्ट्रॅक्ट्स सत्यापित करणे तुलनेने सोपे आहे. सामान्यतः, डेव्हलपर ब्लॉक एक्सप्लोररवर सोर्स कोड प्रकाशित करतो आणि ब्लॉक एक्सप्लोरर हे सत्यापित करतो की सोर्स कोड [कॉन्ट्रॅक्ट डिप्लोयमेंट ट्रान्झॅक्शन](/developers/docs/smart-contracts/deploying/) मधील कोडवर कंपाईल होतो. MUD `System` च्या बाबतीत हे [थोडं अधिक क्लिष्ट](https://mud.dev/cli/verify) आहे, पण जास्त नाही. + +शून्य-ज्ञानासह हे अधिक कठीण आहे. व्हेरिफायरमध्ये काही स्थिर मूल्ये असतात आणि त्यांच्यावर काही गणना चालवते. यावरून काय सिद्ध होत आहे हे कळत नाही. + +```solidity + function verifyingKey() pure internal returns (VerifyingKey memory vk) { + vk.alpha = Pairing.G1Point(uint256(0x0f43f4fe7b5c2326fed4ac6ed2f4003ab9ab4ea6f667c2bdd77afb068617ee16), uint256(0x25a77832283f9726935219b5f4678842cda465631e72dbb24708a97ba5d0ce6f)); + vk.beta = Pairing.G2Point([uint256(0x2cebd0fbd21aca01910581537b21ae4fed46bc0e524c055059aa164ba0a6b62b), uint256(0x18fd4a7bc386cf03a95af7163d5359165acc4e7961cb46519e6d9ee4a1e2b7e9)], [uint256(0x11449dee0199ef6d8eebfe43b548e875c69e7ce37705ee9a00c81fe52f11a009), uint256(0x066d0c83b32800d3f335bb9e8ed5e2924cf00e77e6ec28178592eac9898e1a00)]); +``` + +उपाय, किमान ब्लॉक एक्सप्लोरर्स त्यांच्या वापरकर्ता इंटरफेसमध्ये Zokrates पडताळणी जोडेपर्यंत, ॲप्लिकेशन डेव्हलपर्सनी Zokrates प्रोग्राम्स उपलब्ध करून देणे, आणि किमान काही वापरकर्त्यांनी ते स्वतः योग्य पडताळणी कीसह संकलित करणे हा आहे. + +असे करण्यासाठी: + +1. [Zokrates स्थापित करा](https://zokrates.github.io/gettingstarted.html). + +2. एक फाईल तयार करा, `dig.zok`, Zokrates प्रोग्रामसह. खालील कोड गृहीत धरतो की तुम्ही मूळ नकाशाचा आकार, 10x5, ठेवला आहे. + + ```zokrates + import "utils/pack/bool/pack128.zok" as pack128; + import "hashes/poseidon/poseidon.zok" as poseidon; + + def hashMap(bool[12][7] map) -> field { + bool[512] mut map1d = [false; 512]; + u32 mut counter = 0; + + for u32 x in 0..12 { + for u32 y in 0..7 { + map1d[counter] = map[x][y]; + counter = counter+1; + } + } + + field[4] hashMe = [ + pack128(map1d[0..128]), + pack128(map1d[128..256]), + pack128(map1d[256..384]), + pack128(map1d[384..512]) + ]; + + return poseidon(hashMe); + } + + + // The number of mines in location (x,y) + def map2mineCount(bool[12][7] map, u32 x, u32 y) -> u8 { + return if map[x+1][y+1] { 1 } else { 0 }; + } + + def main(private bool[12][7] map, u32 x, u32 y) -> (field, u8) { + return (hashMap(map) , + if map2mineCount(map, x, y) > 0 { 0xFF } else { + map2mineCount(map, x-1, y-1) + map2mineCount(map, x, y-1) + map2mineCount(map, x+1, y-1) + + map2mineCount(map, x-1, y) + map2mineCount(map, x+1, y) + + map2mineCount(map, x-1, y+1) + map2mineCount(map, x, y+1) + map2mineCount(map, x+1, y+1) + } + ); + } + ``` + +3. Zokrates कोड संकलित करा आणि पडताळणी की तयार करा. पडताळणी की मूळ सर्व्हरमध्ये वापरलेल्या त्याच एन्ट्रॉपीसह तयार करणे आवश्यक आहे, [या प्रकरणात एक रिक्त स्ट्रिंग](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L67). + + ```sh copy + zokrates compile --input dig.zok + zokrates setup -e "" + ``` + +4. तुमचा स्वतःचा Solidity व्हेरिफायर तयार करा, आणि पडताळणी करा की तो ब्लॉकचेनवरील व्हेरिफायरशी कार्यात्मकदृष्ट्या समान आहे (सर्व्हर एक टिप्पणी जोडतो, पण ते महत्त्वाचे नाही). + + ```sh copy + zokrates export-verifier + diff verifier.sol ~/20240901-secret-state/packages/contracts/src/verifier.sol + ``` + +## डिझाइन निर्णय {#design} + +कोणत्याही पुरेसे गुंतागुंतीच्या ॲप्लिकेशनमध्ये स्पर्धात्मक डिझाइन उद्दिष्ट्ये असतात ज्यांना तडजोड करावी लागते. चला काही तडजोडी पाहू आणि सध्याचा उपाय इतर पर्यायांपेक्षा का श्रेयस्कर आहे ते पाहू. + +### शून्य-ज्ञान का {#why-zero-knowledge} + +माइनस्वीपरसाठी तुम्हाला खरोखर शून्य-ज्ञानाची गरज नाही. सर्व्हर नेहमी नकाशा ठेवू शकतो, आणि नंतर खेळ संपल्यावर तो पूर्ण उघड करू शकतो. नंतर, खेळाच्या शेवटी, स्मार्ट कॉन्ट्रॅक्ट नकाशा हॅशची गणना करू शकतो, तो जुळतो की नाही हे सत्यापित करू शकतो, आणि जर न जुळल्यास सर्व्हरला दंड आकारू शकतो किंवा खेळ पूर्णपणे दुर्लक्षित करू शकतो. + +मी हा सोपा उपाय वापरला नाही कारण तो फक्त चांगल्या प्रकारे परिभाषित शेवटच्या स्थितीसह लहान खेळांसाठी कार्य करतो. जेव्हा एखादा खेळ संभाव्यतः अनंत असतो ([स्वायत्त जगाच्या](https://0xparc.org/blog/autonomous-worlds) बाबतीत), तेव्हा तुम्हाला एक उपाय आवश्यक असतो जो स्थिती _उघड न करता_ सिद्ध करतो. + +एक ट्युटोरियल म्हणून या लेखाला एक लहान खेळ हवा होता जो समजण्यास सोपा असेल, परंतु हे तंत्र लांब खेळांसाठी सर्वात उपयुक्त आहे. + +### Zokrates का? {#why-zokrates} + +[Zokrates](https://zokrates.github.io/) ही एकमेव शून्य-ज्ञान लायब्ररी उपलब्ध नाही, परंतु ती सामान्य, [इम्परेटिव्ह](https://en.wikipedia.org/wiki/Imperative_programming) प्रोग्रामिंग भाषेसारखी आहे आणि बूलियन व्हेरिएबल्सना समर्थन देते. + +तुमच्या ॲप्लिकेशनसाठी, वेगवेगळ्या आवश्यकतांसह, तुम्ही [Circum](https://docs.circom.io/getting-started/installation/) किंवा [Cairo](https://www.cairo-lang.org/tutorials/getting-started-with-cairo/) वापरणे पसंत करू शकता. + +### Zokrates कधी संकलित करावे {#when-compile-zokrates} + +या प्रोग्राममध्ये आपण [प्रत्येक वेळी सर्व्हर सुरू झाल्यावर](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L60-L61) Zokrates प्रोग्राम संकलित करतो. हे स्पष्टपणे संसाधनांचा अपव्यय आहे, परंतु हे एक ट्युटोरियल आहे, जे साधेपणासाठी ऑप्टिमाइझ केलेले आहे. + +जर मी उत्पादन-स्तरीय ॲप्लिकेशन लिहित असतो, तर मी तपासले असते की माझ्याकडे या माइनफिल्ड आकारासाठी संकलित Zokrates प्रोग्राम्सची फाईल आहे का, आणि असल्यास ती वापरली असती. तेच ऑनचेन व्हेरिफायर कॉन्ट्रॅक्ट तैनात करण्याबाबत खरे आहे. + +### व्हेरिफायर आणि प्रोव्हर की तयार करणे {#key-creation} + +[की निर्मिती](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L63-L69) ही आणखी एक शुद्ध गणना आहे जी दिलेल्या माइनफिल्ड आकारासाठी एकापेक्षा जास्त वेळा करण्याची गरज नाही. पुन्हा, हे फक्त साधेपणासाठी एकदाच केले जाते. + +याव्यतिरिक्त, आपण [एक सेटअप समारंभ](https://zokrates.github.io/toolbox/trusted_setup.html#initializing-a-phase-2-ceremony) वापरू शकतो. सेटअप समारंभाचा फायदा असा आहे की शून्य-ज्ञान पुराव्यावर फसवणूक करण्यासाठी तुम्हाला प्रत्येक सहभागीकडून एन्ट्रॉपी किंवा काही मध्यवर्ती निकालाची आवश्यकता असते. जर किमान एक समारंभ सहभागी प्रामाणिक असेल आणि ती माहिती हटवत असेल, तर शून्य-ज्ञान पुरावे विशिष्ट हल्ल्यांपासून सुरक्षित असतात. तथापि, माहिती सर्वत्र हटवली गेली आहे हे सत्यापित करण्यासाठी _कोणतीही यंत्रणा नाही_. जर शून्य-ज्ञान पुरावे अत्यंत महत्त्वाचे असतील, तर तुम्हाला सेटअप समारंभात भाग घ्यायचा आहे. + +येथे आम्ही [टाऊच्या शाश्वत शक्तींवर](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) अवलंबून आहोत, ज्यात डझनभर सहभागी होते. हे कदाचित पुरेसे सुरक्षित आहे आणि बरेच सोपे आहे. आम्ही की निर्मितीदरम्यान एन्ट्रॉपी देखील जोडत नाही, ज्यामुळे वापरकर्त्यांना [शून्य-ज्ञान कॉन्फिगरेशन सत्यापित करणे](#user-verify-zero-trust) सोपे होते. + +### कुठे पडताळणी करावी {#where-verification} + +आपण शून्य-ज्ञान पुरावे ऑनचेन (ज्यासाठी गॅस खर्च होतो) किंवा क्लायंटमध्ये ([`verify`](https://zokrates.github.io/toolbox/zokrates_js.html#verifyverificationkey-proof) वापरून) सत्यापित करू शकतो. मी पहिले निवडले, कारण यामुळे तुम्हाला एकदा [व्हेरिफायर सत्यापित करण्याची](#user-verify-zero-trust) आणि नंतर विश्वास ठेवण्याची परवानगी मिळते की जोपर्यंत त्याचा कॉन्ट्रॅक्ट ॲड्रेस तोच राहतो तोपर्यंत तो बदलत नाही. जर पडताळणी क्लायंटवर केली गेली असती, तर तुम्हाला प्रत्येक वेळी क्लायंट डाउनलोड केल्यावर मिळणाऱ्या कोडची पडताळणी करावी लागली असती. + +तसेच, हा खेळ एक-खेळाडूचा असला तरी, बरेच ब्लॉकचेन खेळ बहु-खेळाडूंचे असतात. ऑनचेन पडताळणी म्हणजे तुम्ही फक्त एकदाच शून्य-ज्ञान पुरावा सत्यापित करता. क्लायंटमध्ये हे केल्यास प्रत्येक क्लायंटला स्वतंत्रपणे पडताळणी करावी लागेल. + +### नकाशा TypeScript मध्ये सपाट करायचा की Zokrates मध्ये? {#where-flatten} + +सर्वसाधारणपणे, जेव्हा प्रक्रिया TypeScript किंवा Zokrates मध्ये केली जाऊ शकते, तेव्हा ते TypeScript मध्ये करणे चांगले आहे, जे खूप जलद आहे आणि शून्य-ज्ञान पुराव्यांची आवश्यकता नाही. हेच कारण आहे, उदाहरणार्थ, की आम्ही Zokrates ला हॅश प्रदान करत नाही आणि ते बरोबर आहे की नाही हे सत्यापित करायला लावत नाही. हॅशिंग Zokrates मध्ये करणे आवश्यक आहे, परंतु परत आलेल्या हॅश आणि ऑनचेन हॅशमधील जुळणी त्याच्या बाहेर होऊ शकते. + +तथापि, आम्ही अजूनही [Zokrates मध्ये नकाशा सपाट करतो](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L15-L20), तर आपण ते TypeScript मध्ये करू शकलो असतो. कारण असे आहे की इतर पर्याय, माझ्या मते, वाईट आहेत. + +- Zokrates कोडला बूलियनची एक-मितीय ॲरे प्रदान करा आणि दोन-मितीय नकाशा मिळवण्यासाठी `x*(height+2) + +y` सारखी अभिव्यक्ती वापरा. यामुळे [कोड](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/zero-knowledge.ts#L44-L47) थोडा अधिक गुंतागुंतीचा झाला असता, म्हणून मी ठरवले की ट्युटोरियलसाठी कार्यक्षमतेतील वाढ योग्य नाही. + +- Zokrates ला एक-मितीय ॲरे आणि दोन-मितीय ॲरे दोन्ही पाठवा. तथापि, या उपायाने आपल्याला काहीही मिळत नाही. Zokrates कोडला हे सत्यापित करावे लागेल की त्याला प्रदान केलेली एक-मितीय ॲरे खरोखरच दोन-मितीय ॲरेचे योग्य प्रतिनिधित्व आहे. त्यामुळे कार्यक्षमतेत कोणतीही वाढ होणार नाही. + +- Zokrates मध्ये दोन-मितीय ॲरे सपाट करा. हा सर्वात सोपा पर्याय आहे, म्हणून मी तो निवडला. + +### नकाशे कुठे संग्रहित करायचे {#where-store-maps} + +या ॲप्लिकेशनमध्ये [`gamesInProgress`](https://github.com/qbzzt/20240901-secret-state/blob/main/packages/server/src/app.ts#L20) फक्त मेमरीमधील एक व्हेरिएबल आहे. याचा अर्थ असा आहे की जर तुमचा सर्व्हर बंद पडला आणि पुन्हा सुरू करण्याची गरज पडली, तर त्याने संग्रहित केलेली सर्व माहिती नष्ट होईल. खेळाडू केवळ आपला खेळ सुरू ठेवू शकत नाहीत, तर ते नवीन खेळ देखील सुरू करू शकत नाहीत कारण ऑनचेन घटकाला वाटते की त्यांचा खेळ अजूनही प्रगतीपथावर आहे. + +उत्पादन प्रणालीसाठी हे स्पष्टपणे वाईट डिझाइन आहे, ज्यात तुम्ही ही माहिती डेटाबेसमध्ये संग्रहित कराल. मी येथे व्हेरिएबल वापरण्याचे एकमेव कारण म्हणजे हे एक ट्युटोरियल आहे आणि साधेपणा ही मुख्य बाब आहे. + +## निष्कर्ष: कोणत्या परिस्थितीत हे योग्य तंत्र आहे? {#conclusion} + +तर, आता तुम्हाला माहित आहे की एक सर्व्हरसह एक गेम कसा लिहायचा जो ऑनचेन नसलेली गुप्त स्थिती संग्रहित करतो. पण कोणत्या परिस्थितीत तुम्ही ते करावे? दोन मुख्य विचार आहेत. + +- _लांब चालणारा खेळ_: [वर उल्लेख केल्याप्रमाणे](#why-zero-knowledge), एका लहान खेळात तुम्ही खेळ संपल्यावर फक्त स्थिती प्रकाशित करू शकता आणि नंतर सर्वकाही सत्यापित करू शकता. परंतु जेव्हा खेळ लांब किंवा अनिश्चित काळ चालतो, आणि स्थिती गुप्त ठेवण्याची गरज असते, तेव्हा तो पर्याय नाही. + +- _काही केंद्रीकरण स्वीकार्य_: शून्य-ज्ञान पुरावे अखंडता सत्यापित करू शकतात, की एक संस्था निकाल खोटे ठरवत नाही. ते जे करू शकत नाहीत ते हे सुनिश्चित करणे आहे की संस्था अजूनही उपलब्ध असेल आणि संदेशांना उत्तर देईल. ज्या परिस्थितीत उपलब्धता देखील विकेंद्रित करणे आवश्यक आहे, तेथे शून्य-ज्ञान पुरावे पुरेसे उपाय नाहीत, आणि तुम्हाला [बहु-पक्षीय गणना](https://en.wikipedia.org/wiki/Secure_multi-party_computation) आवश्यक आहे. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). + +### पोचपावती {#acknowledgements} + +- अल्वारो अलोन्सो यांनी या लेखाचा मसुदा वाचला आणि Zokrates बद्दलच्या माझ्या काही गैरसमजुती दूर केल्या. + +कोणत्याही उर्वरित चुका माझ्या जबाबदारी आहेत. diff --git a/public/content/translations/mr/developers/tutorials/secure-development-workflow/index.md b/public/content/translations/mr/developers/tutorials/secure-development-workflow/index.md new file mode 100644 index 00000000000..d1deb805892 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/secure-development-workflow/index.md @@ -0,0 +1,52 @@ +--- +title: "Smart contract सुरक्षा तपासणीसूची" +description: "सुरक्षित smart contracts लिहिण्यासाठी एक सुचवलेला कार्यप्रवाह" +author: "Trailofbits" +tags: [ "स्मार्ट कॉन्ट्रॅक्ट", "सुरक्षा", "सॉलिडिटी" ] +skill: intermediate +lang: mr +published: 2020-09-07 +source: Building secure contracts +sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/workflow.md +--- + +## Smart contract विकास तपासणीसूची {#smart-contract-development-checklist} + +तुम्ही तुमचे smart contracts लिहित असताना आम्ही खालील उच्च-स्तरीय प्रक्रियेचे पालन करण्याची शिफारस करतो. + +ज्ञात सुरक्षा समस्यांसाठी तपासा: + +- [Slither](https://github.com/crytic/slither) सह तुमच्या contracts चे पुनरावलोकन करा. त्यात सामान्य असुरक्षिततांसाठी 40 पेक्षा जास्त अंगभूत डिटेक्टर्स आहेत. नवीन code सह प्रत्येक चेक-इनवर ते चालवा आणि खात्री करा की त्याला स्वच्छ अहवाल मिळेल (किंवा विशिष्ट समस्या शांत करण्यासाठी ट्रायज मोड वापरा). +- [Crytic](https://crytic.io/) सह तुमच्या contracts चे पुनरावलोकन करा. हे अशा 50 समस्या तपासते ज्या Slither तपासत नाही. GitHub वरील Pull Requests मध्ये सुरक्षा समस्या सहजपणे समोर आणून, Crytic तुमच्या टीमला एकमेकांच्या कामावर लक्ष ठेवण्यास देखील मदत करू शकते. + +तुमच्या contract च्या विशेष वैशिष्ट्यांचा विचार करा: + +- तुमचे contracts अपग्रेड करण्यायोग्य आहेत का? [`slither-check-upgradeability`](https://github.com/crytic/slither/wiki/Upgradeability-Checks) किंवा [Crytic](https://blog.trailofbits.com/2020/06/12/upgradeable-contracts-made-safer-with-crytic/) सह तुमच्या अपग्रेडेबिलिटी code मधील त्रुटींचे पुनरावलोकन करा. आम्ही 17 मार्ग दस्तऐवजीकरण केले आहेत ज्यामुळे अपग्रेड्समध्ये समस्या येऊ शकतात. +- तुमचे contracts ERCs चे पालन करण्याचा दावा करतात का? [`slither-check-erc`](https://github.com/crytic/slither/wiki/ERC-Conformance) सह ते तपासा. हे टूल सहा सामान्य स्पेसिफिकेशन्समधील विचलन त्वरित ओळखते. +- तुम्ही थर्ड पार्टी tokens सह इंटिग्रेट करता का? बाह्य contracts वर अवलंबून राहण्यापूर्वी आमची [token इंटिग्रेशन तपासणीसूची](/developers/tutorials/token-integration-checklist/) तपासा. + +तुमच्या code ची महत्त्वपूर्ण सुरक्षा वैशिष्ट्ये दृष्यदृष्ट्या तपासा: + +- Slither च्या [inheritance-graph](https://github.com/trailofbits/slither/wiki/Printer-documentation#inheritance-graph) प्रिंटरचे पुनरावलोकन करा. अनावधानाने होणारे शॅडोइंग आणि C3 लिनियरायझेशन समस्या टाळा. +- Slither च्या [function-summary](https://github.com/trailofbits/slither/wiki/Printer-documentation#function-summary) प्रिंटरचे पुनरावलोकन करा. ते फंक्शन व्हिजिबिलिटी आणि ऍक्सेस कंट्रोल्सचा अहवाल देते. +- Slither च्या [vars-and-auth](https://github.com/trailofbits/slither/wiki/Printer-documentation#variables-written-and-authorization) प्रिंटरचे पुनरावलोकन करा. ते स्टेट व्हेरिएबल्सवरील ऍक्सेस कंट्रोल्सचा अहवाल देते. + +महत्वपूर्ण सुरक्षा गुणधर्मांचे दस्तऐवजीकरण करा आणि त्यांचे मूल्यांकन करण्यासाठी स्वयंचलित चाचणी जनरेटर वापरा: + +- [तुमच्या code साठी सुरक्षा गुणधर्म कसे दस्तऐवजीकरण करायचे ते शिका](/developers/tutorials/guide-to-smart-contract-security-tools/). सुरुवातीला ते कठीण आहे, परंतु चांगले परिणाम मिळवण्यासाठी ही सर्वात महत्त्वाची क्रिया आहे. या ट्युटोरियलमधील कोणतेही प्रगत तंत्र वापरण्यासाठी ही एक पूर्वअट देखील आहे. +- [Echidna](https://github.com/crytic/echidna) आणि [Manticore](https://manticore.readthedocs.io/en/latest/verifier.html) सह वापरण्यासाठी Solidity मध्ये सुरक्षा गुणधर्म परिभाषित करा. तुमच्या स्टेट मशीन, ऍक्सेस कंट्रोल्स, अंकगणितीय ऑपरेशन्स, बाह्य इंटरॅक्शन्स आणि मानकांच्या पालनावर लक्ष केंद्रित करा. +- [Slither च्या Python API](/developers/tutorials/how-to-use-slither-to-find-smart-contract-bugs/) सह सुरक्षा गुणधर्म परिभाषित करा. इनहेरिटन्स, व्हेरिएबल डिपेंडेंसीज, ऍक्सेस कंट्रोल्स आणि इतर संरचनात्मक समस्यांवर लक्ष केंद्रित करा. +- प्रत्येक कमिटवर तुमच्या प्रॉपर्टी चाचण्या [Crytic](https://crytic.io) सह चालवा. Crytic सुरक्षा प्रॉपर्टी चाचण्या घेऊ शकते आणि त्यांचे मूल्यांकन करू शकते, जेणेकरून तुमच्या टीममधील प्रत्येकजण सहजपणे पाहू शकेल की त्या GitHub वर पास होतात. अयशस्वी चाचण्या कमिट्स ब्लॉक करू शकतात. + +शेवटी, अशा समस्यांबद्दल जागरूक रहा ज्या स्वयंचलित टूल्स सहजपणे शोधू शकत नाहीत: + +- गोपनीयतेचा अभाव: जेव्हा तुमचे व्यवहार पूलमध्ये रांगेत असतात तेव्हा इतर प्रत्येकजण ते पाहू शकतो +- फ्रंट रनिंग व्यवहार +- क्रिप्टोग्राफिक ऑपरेशन्स +- बाह्य DeFi घटकांसह जोखमीचे इंटरॅक्शन्स + +## मदतीसाठी विचारा {#ask-for-help} + +[Ethereum ऑफिस अवर्स](https://calendly.com/dan-trailofbits/office-hours) दर मंगळवारी दुपारी चालतात. ही 1-तासाची, 1-ऑन-1 सत्रे तुम्हाला सुरक्षेबद्दल असलेले कोणतेही प्रश्न विचारण्याची, आमची टूल्स वापरून समस्यांचे निवारण करण्याची, आणि तुमच्या सध्याच्या दृष्टिकोनाबद्दल तज्ञांकडून अभिप्राय मिळवण्याची संधी आहे. आम्ही तुम्हाला या मार्गदर्शिकेवर काम करण्यास मदत करू. + +आमच्या Slack मध्ये सामील व्हा: [Empire Hacking](https://join.slack.com/t/empirehacking/shared_invite/zt-h97bbrj8-1jwuiU33nnzg67JcvIciUw). जर तुम्हाला काही प्रश्न असतील तर आम्ही #crytic आणि #ethereum चॅनेलमध्ये नेहमी उपलब्ध असतो. diff --git a/public/content/translations/mr/developers/tutorials/send-token-ethersjs/index.md b/public/content/translations/mr/developers/tutorials/send-token-ethersjs/index.md new file mode 100644 index 00000000000..a0f8cf62486 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/send-token-ethersjs/index.md @@ -0,0 +1,210 @@ +--- +title: "ethers.js वापरून टोकन पाठवणे" +description: "ethers.js वापरून टोकन पाठवण्यासाठी नवशिक्यांसाठी सोपे मार्गदर्शक." +author: Kim YongJun +tags: [ "ETHERS.JS", "ERC-20", "टोकन्स" ] +skill: beginner +lang: mr +published: 2021-04-06 +--- + +## ethers.js(5.0) वापरून टोकन पाठवा {#send-token} + +### या ट्यूटोरियलमध्ये तुम्ही काय शिकाल {#you-learn-about} + +- ethers.js आयात करा +- टोकन हस्तांतरित करा +- नेटवर्क ट्रॅफिकच्या परिस्थितीनुसार गॅसची किंमत सेट करा + +### सुरुवात करण्यासाठी {#to-get-started} + +सुरुवात करण्यासाठी, आपण प्रथम आपल्या जावास्क्रिप्टमध्ये ethers.js लायब्ररी आयात करणे आवश्यक आहे +ethers.js(5.0) समाविष्ट करा + +### इंस्टॉल करणे {#install-ethersjs} + +```shell +/home/ricmoo> npm install --save ethers +``` + +ब्राउझरमध्ये ES6 + +```html + +``` + +ब्राउझरमध्ये ES3(UMD) + +```html + +``` + +### पॅरामीटर्स {#param} + +1. **`contract_address`**: टोकन करार पत्ता (जेव्हा तुम्हाला हस्तांतरित करायचे असलेले टोकन इथर नसेल तेव्हा करार पत्त्याची आवश्यकता असते) +2. **`send_token_amount`**: प्राप्तकर्त्याला पाठवायची असलेली रक्कम +3. **`to_address`**: प्राप्तकर्त्याचा पत्ता +4. **`send_account`**: प्रेषकाचा पत्ता +5. **`private_key`**: व्यवहारावर स्वाक्षरी करण्यासाठी आणि प्रत्यक्षात टोकन हस्तांतरित करण्यासाठी प्रेषकाची खाजगी की + +## सूचना {#notice} + +`signTransaction(tx)` काढून टाकले आहे कारण `sendTransaction()` ते आंतरिकरित्या करते. + +## पाठवण्याची प्रक्रिया {#procedure} + +### १. नेटवर्कशी कनेक्ट करा (टेस्टनेट) {#connect-to-network} + +#### प्रदाता सेट करा (Infura) {#set-provider} + +Ropsten टेस्टनेटशी कनेक्ट करा + +```javascript +window.ethersProvider = new ethers.providers.InfuraProvider("ropsten") +``` + +### २. वॉलेट तयार करा {#create-wallet} + +```javascript +let wallet = new ethers.Wallet(private_key) +``` + +### ३. वॉलेट नेटशी कनेक्ट करा {#connect-wallet-to-net} + +```javascript +let walletSigner = wallet.connect(window.ethersProvider) +``` + +### ४. सध्याची गॅस किंमत मिळवा {#get-gas} + +```javascript +window.ethersProvider.getGasPrice() // gasPrice +``` + +### ५. व्यवहार परिभाषित करा {#define-transaction} + +खाली परिभाषित केलेले हे व्हेरिएबल्स `send_token()` वर अवलंबून आहेत + +### व्यवहार पॅरामीटर्स {#transaction-params} + +1. **`send_account`**: टोकन प्रेषकाचा पत्ता +2. **`to_address`**: टोकन प्राप्तकर्त्याचा पत्ता +3. **`send_token_amount`**: पाठवायच्या टोकनची रक्कम +4. **`gas_limit`**: गॅस मर्यादा +5. **`gas_price`**: गॅस किंमत + +[कसे वापरावे यासाठी खाली पहा](#how-to-use) + +```javascript +const tx = { + from: send_account, + to: to_address, + value: ethers.utils.parseEther(send_token_amount), + nonce: window.ethersProvider.getTransactionCount(send_account, "latest"), + gasLimit: ethers.utils.hexlify(gas_limit), // 100000 + gasPrice: gas_price, +} +``` + +### 6. हस्तांतरण {#transfer} + +```javascript +walletSigner.sendTransaction(tx).then((transaction) => { + console.dir(transaction) + alert("पाठवणे पूर्ण झाले!") +}) +``` + +## ते कसे वापरावे {#how-to-use} + +```javascript +let private_key = + "41559d28e936dc92104ff30691519693fc753ffbee6251a611b9aa1878f12a4d" +let send_token_amount = "1" +let to_address = "0x4c10D2734Fb76D3236E522509181CC3Ba8DE0e80" +let send_address = "0xda27a282B5B6c5229699891CfA6b900A716539E6" +let gas_limit = "0x100000" +let wallet = new ethers.Wallet(private_key) +let walletSigner = wallet.connect(window.ethersProvider) +let contract_address = "" +window.ethersProvider = new ethers.providers.InfuraProvider("ropsten") + +send_token( + contract_address, + send_token_amount, + to_address, + send_address, + private_key +) +``` + +### यशस्वी! {#success} + +![यशस्वीरित्या पूर्ण झालेल्या व्यवहाराची प्रतिमा](./successful-transaction.png) + +## send_token() {#send-token-method} + +```javascript +function send_token( + contract_address, + send_token_amount, + to_address, + send_account, + private_key +) { + let wallet = new ethers.Wallet(private_key) + let walletSigner = wallet.connect(window.ethersProvider) + + window.ethersProvider.getGasPrice().then((currentGasPrice) => { + let gas_price = ethers.utils.hexlify(parseInt(currentGasPrice)) + console.log(`gas_price: ${gas_price}`) + + if (contract_address) { + // सामान्य टोकन पाठवणे + let contract = new ethers.Contract( + contract_address, + send_abi, + walletSigner + ) + + // किती टोकन्स? + let numberOfTokens = ethers.utils.parseUnits(send_token_amount, 18) + console.log(`numberOfTokens: ${numberOfTokens}`) + + // टोकन्स पाठवा + contract.transfer(to_address, numberOfTokens).then((transferResult) => { + console.dir(transferResult) + alert("टोकन पाठवले") + }) + } // इथर पाठवणे + else { + const tx = { + from: send_account, + to: to_address, + value: ethers.utils.parseEther(send_token_amount), + nonce: window.ethersProvider.getTransactionCount( + send_account, + "latest" + ), + gasLimit: ethers.utils.hexlify(gas_limit), // 100000 + gasPrice: gas_price, + } + console.dir(tx) + try { + walletSigner.sendTransaction(tx).then((transaction) => { + console.dir(transaction) + alert("पाठवणे पूर्ण झाले!") + }) + } catch (error) { + alert("पाठवण्यात अयशस्वी!!") + } + } + }) +} +``` diff --git a/public/content/translations/mr/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md b/public/content/translations/mr/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md new file mode 100644 index 00000000000..03ab576cec3 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/sending-transactions-using-web3-and-alchemy/index.md @@ -0,0 +1,208 @@ +--- +title: "Web3 वापरून व्यवहार पाठवणे" +description: "Web3 वापरून Ethereum व्यवहार पाठवण्यासाठी ही एक नवशिक्यांसाठी सोपी मार्गदर्शक पुस्तिका आहे. Ethereum ब्लॉकचेनवर व्यवहार पाठवण्यासाठी तीन मुख्य पायऱ्या आहेत: तयार करणे, स्वाक्षरी करणे आणि प्रसारित करणे. आपण या तिन्ही पायऱ्या पाहू." +author: "Elan Halpern" +tags: [ "व्यवहार", "web3.js", "alchemy" ] +skill: beginner +lang: mr +published: 2020-11-04 +source: Alchemy docs +sourceUrl: https://www.alchemy.com/docs/how-to-send-transactions-on-ethereum +--- + +Web3 वापरून Ethereum व्यवहार पाठवण्यासाठी ही एक नवशिक्यांसाठी सोपी मार्गदर्शक पुस्तिका आहे. Ethereum ब्लॉकचेनवर व्यवहार पाठवण्यासाठी तीन मुख्य पायऱ्या आहेत: तयार करणे, स्वाक्षरी करणे आणि प्रसारित करणे. आपण या तिन्ही पायऱ्या पाहू, आणि आशा आहे की तुमच्या मनात असलेले कोणतेही प्रश्न सुटतील! या ट्युटोरियलमध्ये, आपण आपले व्यवहार Ethereum चेनवर पाठवण्यासाठी [Alchemy](https://www.alchemy.com/) वापरणार आहोत. तुम्ही [येथे एक विनामूल्य Alchemy खाते तयार करू शकता](https://auth.alchemyapi.io/signup). + +**टीप:** ही मार्गदर्शक पुस्तिका तुमच्या ॲपसाठी _बॅकएंडवर_ तुमचे व्यवहार साइन करण्यासाठी आहे. जर तुम्हाला तुमच्या व्यवहारांवर फ्रंटएंडवर स्वाक्षरी करायची असेल, तर [ब्राउझर प्रोव्हायडरसह Web3](https://docs.alchemy.com/reference/api-overview#with-a-browser-provider) एकत्रित करणे तपासा. + +## मूलभूत गोष्टी {#the-basics} + +बहुतेक ब्लॉकचेन डेव्हलपर्सप्रमाणे, जेव्हा ते प्रथम सुरुवात करतात, तेव्हा तुम्ही व्यवहार कसा पाठवायचा (जी गोष्ट खूप सोपी असावी) यावर काही संशोधन केले असेल आणि तुम्हाला अनेक मार्गदर्शक पुस्तिका मिळाल्या असतील, प्रत्येक वेगळी गोष्ट सांगत असेल आणि तुम्हाला थोडे भारावून टाकले असेल आणि गोंधळात पाडले असेल. जर तुम्हीही याच स्थितीत असाल, तर काळजी करू नका; आम्ही सर्वजण कधी ना कधी यातून गेलो आहोत! तर, आपण सुरू करण्यापूर्वी, काही गोष्टी स्पष्ट करूया: + +### १. Alchemy तुमच्या प्रायव्हेट की (private keys) संग्रहित करत नाही {#alchemy-does-not-store-your-private-keys} + +- याचा अर्थ असा की Alchemy तुमच्या वतीने व्यवहार साइन करून पाठवू शकत नाही. याचे कारण सुरक्षिततेच्या उद्देशाने आहे. Alchemy तुम्हाला तुमची प्रायव्हेट की शेअर करण्यास कधीही सांगणार नाही, आणि तुम्ही तुमची प्रायव्हेट की कधीही होस्टेड नोडसोबत (किंवा कोणासोबतही) शेअर करू नये. +- तुम्ही Alchemy च्या कोअर API चा वापर करून ब्लॉकचेनवरून वाचू शकता, परंतु त्यावर लिहिण्यासाठी तुम्हाला तुमचे व्यवहार Alchemy द्वारे पाठवण्यापूर्वी साइन करण्यासाठी दुसरे काहीतरी वापरावे लागेल (हे इतर कोणत्याही [नोड सेवेसाठी](/developers/docs/nodes-and-clients/nodes-as-a-service/) सारखेच आहे). + +### २. “साइनर” (signer) म्हणजे काय? {#what-is-a-signer} + +- साइनर्स तुमच्यासाठी तुमची प्रायव्हेट की वापरून व्यवहार साइन करतील. या ट्युटोरियलमध्ये आपण आपला व्यवहार साइन करण्यासाठी [Alchemy web3](https://docs.alchemyapi.io/alchemy/documentation/alchemy-web3) वापरणार आहोत, परंतु तुम्ही इतर कोणतीही web3 लायब्ररी देखील वापरू शकता. +- फ्रंटएंडवर, साइनरचे एक चांगले उदाहरण [MetaMask](https://metamask.io/) आहे, जे तुमच्या वतीने व्यवहार साइन करून पाठवते. + +### ३. मला माझे व्यवहार साइन करण्याची गरज का आहे? {#why-do-i-need-to-sign-my-transactions} + +- Ethereum नेटवर्कवर व्यवहार पाठवू इच्छिणाऱ्या प्रत्येक वापरकर्त्याला व्यवहारावर (त्यांची प्रायव्हेट की वापरून) स्वाक्षरी करणे आवश्यक आहे, जेणेकरून व्यवहाराचा उगम तोच आहे ज्याचा दावा केला जात आहे, हे प्रमाणित करता येईल. +- या प्रायव्हेट कीचे संरक्षण करणे अत्यंत महत्त्वाचे आहे, कारण तिचा ॲक्सेस मिळाल्यास तुमच्या Ethereum खात्यावर पूर्ण नियंत्रण मिळते, ज्यामुळे तुम्ही (किंवा ॲक्सेस असलेली कोणतीही व्यक्ती) तुमच्या वतीने व्यवहार करू शकता. + +### ४. मी माझ्या प्रायव्हेट कीचे संरक्षण कसे करू? {#how-do-i-protect-my-private-key} + +- तुमची प्रायव्हेट की संरक्षित करण्याचे आणि व्यवहार पाठवण्यासाठी ती वापरण्याचे अनेक मार्ग आहेत. या ट्युटोरियलमध्ये आपण `.env` फाईल वापरणार आहोत. तथापि, तुम्ही प्रायव्हेट की संग्रहित करणारा वेगळा प्रोव्हायडर, कीस्टोअर फाईल किंवा इतर पर्याय देखील वापरू शकता. + +### ५. `eth_sendTransaction` आणि `eth_sendRawTransaction` मध्ये काय फरक आहे? {#difference-between-send-and-send-raw} + +`eth_sendTransaction` आणि `eth_sendRawTransaction` ही दोन्ही Ethereum API फंक्शन्स आहेत जी Ethereum नेटवर्कवर व्यवहार प्रसारित करतात जेणेकरून तो भविष्यातील ब्लॉकमध्ये जोडला जाईल. ते व्यवहारांच्या साइनिंगला कसे हाताळतात यात ते भिन्न आहेत. + +- [`eth_sendTransaction`](https://docs.web3js.org/api/web3-eth/function/sendTransaction) चा वापर _साइन न केलेले_ व्यवहार पाठवण्यासाठी केला जातो, याचा अर्थ तुम्ही ज्या नोडला पाठवत आहात त्याने तुमची प्रायव्हेट की व्यवस्थापित केली पाहिजे जेणेकरून तो चेनवर प्रसारित करण्यापूर्वी व्यवहारावर साइन करू शकेल. Alchemy वापरकर्त्यांच्या प्रायव्हेट की ठेवत नसल्यामुळे, ते या पद्धतीला समर्थन देत नाहीत. +- [`eth_sendRawTransaction`](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_sendrawtransaction) चा वापर आधीच साइन केलेल्या व्यवहारांना प्रसारित करण्यासाठी केला जातो. याचा अर्थ तुम्हाला प्रथम [`signTransaction(tx, private_key)`](https://docs.web3js.org/api/web3-eth-accounts/function/signTransaction) वापरावे लागेल, आणि नंतर परिणाम `eth_sendRawTransaction` मध्ये पास करावा लागेल. + +web3 वापरताना, `eth_sendRawTransaction` [web3.eth.sendSignedTransaction](https://docs.web3js.org/api/web3-eth/function/sendSignedTransaction) फंक्शनला कॉल करून ॲक्सेस केले जाते. + +या ट्युटोरियलमध्ये आपण हेच वापरणार आहोत. + +### ६. web3 लायब्ररी म्हणजे काय? {#what-is-the-web3-library} + +- Web3.js ही मानक JSON-RPC कॉल्सभोवती एक रॅपर लायब्ररी आहे जी Ethereum डेव्हलपमेंटमध्ये वापरणे अगदी सामान्य आहे. +- वेगवेगळ्या भाषांसाठी अनेक web3 लायब्ररी आहेत. या ट्युटोरियलमध्ये आपण [Alchemy Web3](https://docs.alchemy.com/reference/api-overview) वापरणार आहोत जी JavaScript मध्ये लिहिलेली आहे. तुम्ही [येथे](https://docs.alchemyapi.io/guides/getting-started#other-web3-libraries) [ethers.js](https://docs.ethers.org/v5/) सारखे इतर पर्याय पाहू शकता. + +ठीक आहे, आता आपण यापैकी काही प्रश्न बाजूला ठेवले आहेत, चला ट्युटोरियलकडे वळूया. Alchemy [discord](https://discord.gg/gWuC7zB) मध्ये कधीही प्रश्न विचारण्यास मोकळ्या मनाने विचारा! + +### ७. सुरक्षित, गॅस-ऑप्टिमाइझ केलेले आणि खाजगी व्यवहार कसे पाठवायचे? {#how-to-send-secure-gas-optimized-and-private-transactions} + +- [Alchemy कडे Transact APIs चा एक संच आहे](https://docs.alchemy.com/reference/transact-api-quickstart). तुम्ही याचा वापर रीइन्फोर्स्ड व्यवहार पाठवण्यासाठी, व्यवहार घडण्यापूर्वी त्यांचे सिम्युलेशन करण्यासाठी, खाजगी व्यवहार पाठवण्यासाठी आणि गॅस-ऑप्टिमाइझ केलेले व्यवहार पाठवण्यासाठी करू शकता. +- तुमचा व्यवहार मेमपूलमधून काढला जातो आणि चेनमध्ये जोडला जातो तेव्हा सूचित होण्यासाठी तुम्ही [Notify API](https://docs.alchemy.com/docs/alchemy-notify) चा देखील वापर करू शकता. + +**टीप:** या मार्गदर्शक पुस्तिकेसाठी एक Alchemy खाते, एक Ethereum ॲड्रेस किंवा MetaMask वॉलेट, NodeJs आणि npm इंस्टॉल केलेले असणे आवश्यक आहे. जर नसेल, तर या पायऱ्या फॉलो करा: + +1. [एक विनामूल्य Alchemy खाते तयार करा](https://auth.alchemyapi.io/signup) +2. [MetaMask खाते तयार करा](https://metamask.io/) (किंवा एक Ethereum ॲड्रेस मिळवा) +3. [NodeJs आणि NPM इंस्टॉल करण्यासाठी या पायऱ्या फॉलो करा](https://docs.alchemy.com/alchemy/guides/alchemy-for-macs) + +## तुमचा व्यवहार पाठवण्याच्या पायऱ्या {#steps-to-sending-your-transaction} + +### १. Sepolia टेस्टनेटवर एक Alchemy ॲप तयार करा {#create-an-alchemy-app-on-the-sepolia-testnet} + +तुमच्या [Alchemy Dashboard](https://dashboard.alchemyapi.io/) वर नेव्हिगेट करा आणि एक नवीन ॲप तयार करा, तुमच्या नेटवर्कसाठी Sepolia (किंवा इतर कोणताही टेस्टनेट) निवडा. + +### २. Sepolia फॉसेटमधून ETH ची विनंती करा {#request-eth-from-sepolia-faucet} + +ETH मिळवण्यासाठी [Alchemy Sepolia faucet](https://www.sepoliafaucet.com/) वरील सूचनांचे पालन करा. तुमचा **Sepolia** Ethereum ॲड्रेस (MetaMask मधून) समाविष्ट केल्याची खात्री करा आणि दुसरे नेटवर्क नाही. सूचनांचे पालन केल्यानंतर, तुम्हाला तुमच्या वॉलेटमध्ये ETH मिळाल्याची पुन्हा खात्री करा. + +### ३. एक नवीन प्रोजेक्ट डिरेक्टरी तयार करा आणि त्यात `cd` करा {#create-a-new-project-direction} + +कमांड लाइनवरून (macs साठी टर्मिनल) एक नवीन प्रोजेक्ट डिरेक्टरी तयार करा आणि त्यात नेव्हिगेट करा: + +``` +mkdir sendtx-example +cd sendtx-example +``` + +### ४. Alchemy Web3 (किंवा कोणतीही web3 लायब्ररी) इंस्टॉल करा {#install-alchemy-web3} + +[Alchemy Web3](https://docs.alchemy.com/reference/api-overview) इंस्टॉल करण्यासाठी तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये खालील कमांड चालवा: + +टीप, जर तुम्हाला ethers.js लायब्ररी वापरायची असेल, तर [येथील सूचनांचे पालन करा](https://docs.alchemy.com/docs/how-to-send-transactions-on-ethereum). + +``` +npm install @alch/alchemy-web3 +``` + +### ५. dotenv इंस्टॉल करा {#install-dotenv} + +आपण आपली API की आणि प्रायव्हेट की सुरक्षितपणे संग्रहित करण्यासाठी `.env` फाईल वापरू. + +``` +npm install dotenv --save +``` + +### ६. `.env` फाईल तयार करा {#create-the-dotenv-file} + +तुमच्या प्रोजेक्ट डिरेक्टरीमध्ये `.env` फाईल तयार करा आणि खालील गोष्टी जोडा (\"`your-api-url`\" आणि \"`your-private-key`\" बदलून) + +- तुमचा Alchemy API URL शोधण्यासाठी, तुमच्या डॅशबोर्डवर तुम्ही नुकतेच तयार केलेल्या ॲपच्या तपशील पृष्ठावर नेव्हिगेट करा, वरच्या उजव्या कोपऱ्यात \"View Key\" वर क्लिक करा आणि HTTP URL मिळवा. +- MetaMask वापरून तुमची प्रायव्हेट की शोधण्यासाठी, ही [मार्गदर्शिका](https://metamask.zendesk.com/hc/en-us/articles/360015289632-How-to-Export-an-Account-Private-Key) तपासा. + +``` +API_URL = "your-api-url" +PRIVATE_KEY = "your-private-key" +``` + + + + +.env कमिट करू नका! कृपया तुमची .env फाईल कोणासोबतही शेअर किंवा उघड करू नका, कारण असे केल्याने तुम्ही तुमची गुपिते धोक्यात आणत आहात याची खात्री करा. जर तुम्ही व्हर्जन कंट्रोल वापरत असाल, तर तुमची .env फाईल gitignore फाईलमध्ये जोडा. + + + + +### ७. `sendTx.js` फाईल तयार करा {#create-sendtx-js} + +छान, आता आपला संवेदनशील डेटा `.env` फाईलमध्ये संरक्षित झाला आहे, चला कोडिंग सुरू करूया. आपल्या व्यवहार पाठवण्याच्या उदाहरणासाठी, आपण Sepolia फॉसेटला ETH परत पाठवणार आहोत. + +`sendTx.js` फाईल तयार करा, जिथे आपण आपला उदाहरणातील व्यवहार कॉन्फिगर करू आणि पाठवू, आणि त्यात कोडच्या खालील ओळी जोडा: + +``` +async function main() { + require('dotenv').config(); + const { API_URL, PRIVATE_KEY } = process.env; + const { createAlchemyWeb3 } = require("@alch/alchemy-web3"); + const web3 = createAlchemyWeb3(API_URL); + const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: हा ॲड्रेस तुमच्या स्वतःच्या सार्वजनिक ॲड्रेसने बदला + + const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // नॉन्सची गणना 0 पासून सुरू होते + + const transaction = { + 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // eth परत करण्यासाठी फॉसेट ॲड्रेस + 'value': 1000000000000000000, // 1 ETH + 'gas': 30000, + 'nonce': nonce, + // मेसेज पाठवण्यासाठी किंवा स्मार्ट कॉन्ट्रॅक्ट कार्यान्वित करण्यासाठी वैकल्पिक डेटा फील्ड + }; + + const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY); + + web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) { + if (!error) { + console.log("🎉 तुमच्या व्यवहाराचा हॅश आहे: ", hash, "\n तुमच्या व्यवहाराची स्थिती पाहण्यासाठी Alchemy's Mempool तपासा!"); + } else { + console.log("❗तुमचा व्यवहार सबमिट करताना काहीतरी चूक झाली:", error) + } + }); +} + +main(); +``` + +**ओळ ६** वरील ॲड्रेस तुमच्या स्वतःच्या सार्वजनिक ॲड्रेसने बदलण्याची खात्री करा. + +आता, हा कोड चालवण्यापूर्वी, येथील काही घटकांबद्दल बोलूया. + +- `nonce` : नॉन्स स्पेसिफिकेशनचा वापर तुमच्या ॲड्रेसवरून पाठवलेल्या व्यवहारांच्या संख्येचा मागोवा ठेवण्यासाठी केला जातो. सुरक्षिततेच्या उद्देशाने आणि [रिप्ले हल्ले](https://docs.alchemyapi.io/resources/blockchain-glossary#account-nonce) टाळण्यासाठी आपल्याला याची आवश्यकता आहे. तुमच्या ॲड्रेसवरून पाठवलेल्या व्यवहारांची संख्या मिळवण्यासाठी आम्ही [getTransactionCount](https://docs.alchemyapi.io/documentation/alchemy-api-reference/json-rpc#eth_gettransactioncount) वापरतो. +- `transaction`: व्यवहार ऑब्जेक्टमध्ये काही पैलू आहेत जे आपल्याला निर्दिष्ट करणे आवश्यक आहे + - `to`: हा तो ॲड्रेस आहे जिथे आपल्याला ETH पाठवायचा आहे. या प्रकरणात, आपण ज्या [Sepolia faucet](https://sepoliafaucet.com/) कडून सुरुवातीला विनंती केली होती, त्याला ETH परत पाठवत आहोत. + - `value`: ही रक्कम आहे जी आपण पाठवू इच्छितो, Wei मध्ये निर्दिष्ट केली आहे जिथे 10^18 Wei = 1 ETH + - `gas`: तुमच्या व्यवहारामध्ये समाविष्ट करण्यासाठी गॅसची योग्य रक्कम निश्चित करण्याचे अनेक मार्ग आहेत. Alchemy कडे एक [गॅस किंमत वेबहुक](https://docs.alchemyapi.io/guides/alchemy-notify#address-activity-1) देखील आहे जो गॅसची किंमत एका विशिष्ट मर्यादेत आल्यावर तुम्हाला सूचित करतो. Mainnet व्यवहारांसाठी, [ETH Gas Station](https://ethgasstation.info/) सारख्या गॅस एस्टिमेटरला तपासून समाविष्ट करण्यासाठी गॅसची योग्य रक्कम निश्चित करणे ही एक चांगली प्रथा आहे. 21000 ही Ethereum वरील ऑपरेशनसाठी लागणारी किमान गॅसची रक्कम आहे, म्हणून आपला व्यवहार कार्यान्वित होईल याची खात्री करण्यासाठी आम्ही येथे 30000 ठेवले आहे. + - `nonce`: वरील नॉन्सची व्याख्या पहा. नॉन्सची गणना शून्यापासून सुरू होते. + - [पर्यायी] डेटा: तुमच्या ट्रान्सफरसोबत अतिरिक्त माहिती पाठवण्यासाठी किंवा स्मार्ट कॉन्ट्रॅक्टला कॉल करण्यासाठी वापरले जाते, बॅलन्स ट्रान्सफरसाठी आवश्यक नाही, खालील टीप पहा. +- `signedTx`: आपला व्यवहार ऑब्जेक्ट साइन करण्यासाठी आपण `signTransaction` पद्धत आपल्या `PRIVATE_KEY` सोबत वापरू. +- `sendSignedTransaction`: एकदा आपल्याकडे साइन केलेला व्यवहार आला की, आपण `sendSignedTransaction` वापरून तो पुढील ब्लॉकमध्ये समाविष्ट करण्यासाठी पाठवू शकतो. + +**डेटावर एक टीप** +Ethereum मध्ये दोन मुख्य प्रकारचे व्यवहार पाठवले जाऊ शकतात. + +- बॅलन्स ट्रान्सफर: एका ॲड्रेसवरून दुसऱ्या ॲड्रेसवर ETH पाठवा. डेटा फील्ड आवश्यक नाही, तथापि, जर तुम्हाला तुमच्या व्यवहार सोबत अतिरिक्त माहिती पाठवायची असेल, तर तुम्ही ती माहिती या फील्डमध्ये HEX फॉरमॅटमध्ये समाविष्ट करू शकता. + - उदाहरणार्थ, समजा आपल्याला एका IPFS डॉक्युमेंटचा हॅश Ethereum चेनवर लिहायचा आहे जेणेकरून त्याला एक अपरिवर्तनीय टाइमस्टॅम्प मिळेल. मग आपले डेटा फील्ड असे दिसले पाहिजे: `web3.utils.toHex(‘IPFS hash‘)`. आणि आता कोणीही चेनची क्वेरी करू शकतो आणि ते डॉक्युमेंट केव्हा जोडले गेले ते पाहू शकतो. +- स्मार्ट कॉन्ट्रॅक्ट व्यवहार: चेनवर काही स्मार्ट कॉन्ट्रॅक्ट कोड कार्यान्वित करा. या प्रकरणात, डेटा फील्डमध्ये तुम्ही कार्यान्वित करू इच्छित असलेले स्मार्ट फंक्शन, कोणत्याही पॅरामीटर्ससह असले पाहिजे. + - व्यावहारिक उदाहरणासाठी, या [हॅलो वर्ल्ड ट्युटोरियल](https://docs.alchemyapi.io/alchemy/tutorials/hello-world-smart-contract#step-8-create-the-transaction) मधील पायरी 8 तपासा. + +### ८. `node sendTx.js` वापरून कोड चालवा {#run-the-code-using-node-sendtx-js} + +तुमच्या टर्मिनल किंवा कमांड लाइनवर परत नेव्हिगेट करा आणि चालवा: + +``` +node sendTx.js +``` + +### ९. तुमचा व्यवहार Mempool मध्ये पहा {#see-your-transaction-in-the-mempool} + +तुमच्या Alchemy डॅशबोर्डमध्ये [Mempool पृष्ठ](https://dashboard.alchemyapi.io/mempool) उघडा आणि तुमचा व्यवहार शोधण्यासाठी तुम्ही तयार केलेल्या ॲपनुसार फिल्टर करा. येथे आपण आपला व्यवहार प्रलंबित स्थितीतून माइन केलेल्या स्थितीत (यशस्वी झाल्यास) किंवा ड्रॉप केलेल्या स्थितीत (अयशस्वी झाल्यास) संक्रमण होताना पाहू शकतो. याला \"All\" वर ठेवण्याची खात्री करा जेणेकरून तुम्ही \"mined\", \"pending\", आणि \"dropped\" व्यवहार कॅप्चर करू शकाल. तुम्ही `0x31b98d14007bdee637298086988a0bbd31184523` या ॲड्रेसवर पाठवलेले व्यवहार शोधून तुमचा व्यवहार शोधू शकता. + +तुमचा व्यवहार सापडल्यावर त्याचे तपशील पाहण्यासाठी, tx हॅश निवडा, जो तुम्हाला अशा दिसणाऱ्या दृश्याकडे घेऊन जाईल: + +![Mempool वॉचर स्क्रीनशॉट](./mempool.png) + +तिथून तुम्ही लाल रंगात गोल केलेल्या आयकॉनवर क्लिक करून तुमचा व्यवहार Etherscan वर पाहू शकता! + +**यिप्पी!** तुम्ही नुकताच Alchemy वापरून तुमचा पहिला Ethereum व्यवहार पाठवला आहे 🎉 + +_या मार्गदर्शक पुस्तिकेबद्दल अभिप्राय आणि सूचनांसाठी, कृपया Alchemy च्या [Discord](https://discord.gg/A39JVCM) वर एलानला मेसेज करा!_ + +_मूळतः येथे प्रकाशित [https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy](https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy)_ diff --git a/public/content/translations/mr/developers/tutorials/server-components/index.md b/public/content/translations/mr/developers/tutorials/server-components/index.md new file mode 100644 index 00000000000..7a22ebc756e --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/server-components/index.md @@ -0,0 +1,295 @@ +--- +title: "वेब3 ॲप्ससाठी सर्व्हर घटक आणि एजंट" +description: "हे ट्यूटोरियल वाचल्यानंतर, तुम्ही TypeScript सर्व्हर लिहिण्यास सक्षम व्हाल जे ब्लॉकचेनवरील इव्हेंट ऐकतात आणि त्यानुसार त्यांच्या स्वतःच्या व्यवहारांसह प्रतिसाद देतात. हे तुम्हाला केंद्रीकृत ॲप्लिकेशन्स (कारण सर्व्हर एक अयशस्वी होण्याचा बिंदू आहे) लिहिण्यास सक्षम करेल, परंतु ते वेब3 घटकांशी संवाद साधू शकतात. हेच तंत्र मानवी हस्तक्षेपाशिवाय ऑनचेन इव्हेंटला प्रतिसाद देणारा एजंट लिहिण्यासाठी देखील वापरले जाऊ शकते." + +author: Ori Pomerantz +lang: mr +tags: [ "एजंट", "सर्व्हर", "ऑफचेन" ] +skill: beginner +published: 2024-07-15 +--- + +## प्रस्तावना {#introduction} + +बहुतेक प्रकरणांमध्ये, विकेंद्रित ॲप सॉफ्टवेअर वितरित करण्यासाठी सर्व्हर वापरतो, परंतु सर्व वास्तविक संवाद क्लायंट (सामान्यतः, वेब ब्राउझर) आणि ब्लॉकचेन दरम्यान होतो. + +![वेब सर्व्हर, क्लायंट आणि ब्लॉकचेनमधील सामान्य संवाद](./fig-1.svg) + +तथापि, अशी काही प्रकरणे आहेत जिथे ॲप्लिकेशनला स्वतंत्रपणे चालणाऱ्या सर्व्हर घटकाचा फायदा होईल. असा सर्व्हर इव्हेंटला आणि API सारख्या इतर स्त्रोतांकडून येणाऱ्या विनंत्यांना व्यवहार जारी करून प्रतिसाद देण्यास सक्षम असेल. + +![सर्व्हरच्या समावेशासह संवाद](./fig-2.svg) + +अशी अनेक संभाव्य कार्ये आहेत जी असा सर्व्हर पूर्ण करू शकतो. + +- गुप्त स्थितीचा धारक. गेमिंगमध्ये हे बऱ्याचदा उपयुक्त असते की गेमला माहित असलेली सर्व माहिती खेळाडूंसाठी उपलब्ध नसावी. तथापि, _ब्लॉकचेनवर कोणतीही रहस्ये नसतात_, ब्लॉकचेनमध्ये असलेली कोणतीही माहिती कोणालाही समजणे सोपे आहे. म्हणून, जर खेळाच्या स्थितीचा काही भाग गुप्त ठेवायचा असेल, तर तो इतरत्र संग्रहित करावा लागेल (आणि शक्यतो त्या स्थितीचे परिणाम [झिरो-नॉलेज प्रुफ्स](/zero-knowledge-proofs) वापरून सत्यापित करावे लागतील). + +- केंद्रीकृत ओरॅकल. जर स्टेक (दाव) पुरेसा कमी असेल, तर ऑनलाइन काही माहिती वाचून ती चेनवर पोस्ट करणारा बाह्य सर्व्हर [ओरॅकल](/developers/docs/oracles/) म्हणून वापरण्यासाठी पुरेसा चांगला असू शकतो. + +- एजंट. त्याला सक्रिय करण्यासाठी व्यवहाराशिवाय ब्लॉकचेनवर काहीही घडत नाही. जेव्हा संधी मिळेल तेव्हा एक सर्व्हर वापरकर्त्याच्या वतीने [आर्बिट्राज](/developers/docs/mev/#mev-examples-dex-arbitrage) सारख्या क्रिया करण्यासाठी कार्य करू शकतो. + +## नमुना कार्यक्रम {#sample-program} + +तुम्ही एक नमुना सर्व्हर [github वर](https://github.com/qbzzt/20240715-server-component) पाहू शकता. हा सर्व्हर [या करारावरून](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=contract_code) येणारे इव्हेंट ऐकतो, जी Hardhat च्या Greeter ची सुधारित आवृत्ती आहे. जेव्हा ग्रीटिंग बदलले जाते, तेव्हा ते पुन्हा पूर्ववत करते. + +ते चालवण्यासाठी: + +1. रिपॉझिटरी क्लोन करा. + + ```sh copy + git clone https://github.com/qbzzt/20240715-server-component.git + cd 20240715-server-component + ``` + +2. आवश्यक पॅकेजेस इंस्टॉल करा. जर तुमच्याकडे आधीपासून नसेल, तर [प्रथम Node इन्स्टॉल करा](https://nodejs.org/en/download/package-manager). + + ```sh copy + npm install + ``` + +3. Holesky टेस्टनेटवर ETH असलेल्या खात्याची खाजगी की निर्दिष्ट करण्यासाठी `.env` संपादित करा. जर तुमच्याकडे Holesky वर ETH नसेल, तर तुम्ही [हा फॉसेट वापरू शकता](https://holesky-faucet.pk910.de/). + + ```sh filename=".env" copy + PRIVATE_KEY=0x + ``` + +4. सर्व्हर सुरू करा. + + ```sh copy + npm start + ``` + +5. [ब्लॉक एक्सप्लोररवर](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract) जा, आणि खाजगी की असलेल्या पत्त्यापेक्षा वेगळा पत्ता वापरून ग्रीटिंगमध्ये बदल करा. पहा की ग्रीटिंग आपोआप पूर्ववत होते. + +### हे कसे कार्य करते? {#how-it-works} + +सर्व्हर घटक कसा लिहायचा हे समजून घेण्याचा सर्वात सोपा मार्ग म्हणजे नमुन्याचा ओळीनुसार अभ्यास करणे. + +#### `src/app.ts` {#src-app-ts} + +कार्यक्रमाचा बहुतांश भाग [`src/app.ts`](https://github.com/qbzzt/20240715-server-component/blob/main/src/app.ts) मध्ये समाविष्ट आहे. + +##### पूर्वापेक्षित ऑब्जेक्ट्स तयार करणे + +```typescript +import { + createPublicClient, + createWalletClient, + getContract, + http, + Address, +} from "viem" +``` + +हे आपल्याला आवश्यक असलेले [Viem](https://viem.sh/) घटक आहेत, फंक्शन्स आणि [`Address` प्रकार](https://viem.sh/docs/glossary/types#address). हा सर्व्हर [TypeScript](https://www.typescriptlang.org/) मध्ये लिहिला आहे, जो JavaScript चा एक विस्तार आहे आणि त्याला [स्ट्रॉंगली टाइप्ड](https://en.wikipedia.org/wiki/Strong_and_weak_typing) बनवतो. + +```typescript +import { privateKeyToAccount } from "viem/accounts" +``` + +[हे फंक्शन](https://viem.sh/docs/accounts/privateKey) आपल्याला खाजगी की शी संबंधित वॉलेट माहिती, पत्त्यासह, तयार करू देते. + +```typescript +import { holesky } from "viem/chains" +``` + +Viem मध्ये ब्लॉकचेन वापरण्यासाठी, तुम्हाला त्याची व्याख्या आयात करणे आवश्यक आहे. या प्रकरणात, आम्हाला [Holesky](https://github.com/eth-clients/holesky) चाचणी ब्लॉकचेनशी कनेक्ट करायचे आहे. + +```typescript +// .env मधील व्याख्या process.env मध्ये जोडण्याची ही पद्धत आहे. +import * as dotenv from "dotenv" +dotenv.config() +``` + +या प्रकारे आपण `.env` एन्व्हायरमेंटमध्ये वाचतो. खाजगी की साठी आपल्याला याची गरज आहे (पुढे पहा). + +```typescript +const greeterAddress : Address = "0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6" +const greeterABI = [ + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + . + . + . + { + "inputs": [ + { + "internalType": "string", + "name": "_greeting", + "type": "string" + } + ], + "name": "setGreeting", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } +] as const +``` + +एखादा करार वापरण्यासाठी आपल्याला त्याचा पत्ता आणि त्यासाठी [ABI](/glossary/#abi) आवश्यक आहे. आम्ही येथे दोन्ही प्रदान करतो. + +JavaScript (आणि त्यामुळे TypeScript) मध्ये, तुम्ही एका कॉन्स्टंटला नवीन मूल्य देऊ शकत नाही, परंतु तुम्ही त्यात संग्रहित ऑब्जेक्टमध्ये _बदल_ करू शकता. `as const` प्रत्यय वापरून, आपण TypeScript ला सांगत आहोत की ही यादी स्वतःच स्थिर आहे आणि ती बदलली जाऊ शकत नाही. + +```typescript +const publicClient = createPublicClient({ + chain: holesky, + transport: http(), +}) +``` + +एक Viem [पब्लिक क्लायंट](https://viem.sh/docs/clients/public.html) तयार करा. पब्लिक क्लायंटकडे संलग्न खाजगी की नसते, आणि म्हणून ते व्यवहार पाठवू शकत नाहीत. ते [`view` फंक्शन्स](https://www.tutorialspoint.com/solidity/solidity_view_functions.htm) कॉल करू शकतात, खात्यातील शिल्लक वाचू शकतात, इत्यादी. + +```typescript +const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`) +``` + +एन्व्हायरमेंट व्हेरिएबल्स [`process.env`](https://www.totaltypescript.com/how-to-strongly-type-process-env) मध्ये उपलब्ध आहेत. तथापि, TypeScript स्ट्रॉंगली टाइप्ड आहे. एक एन्व्हायरमेंट व्हेरिएबल कोणतीही स्ट्रिंग किंवा रिक्त असू शकते, म्हणून एन्व्हायरमेंट व्हेरिएबलसाठी प्रकार `string | undefined` आहे. तथापि, Viem मध्ये की `0x${string}` (`0x` नंतर एक स्ट्रिंग) म्हणून परिभाषित केली आहे. येथे आपण TypeScript ला सांगतो की `PRIVATE_KEY` एन्व्हायरमेंट व्हेरिएबल त्या प्रकारचा असेल. जर तो तसा नसेल, तर आपल्याला रनटाइम त्रुटी मिळेल. + +[`privateKeyToAccount`](https://viem.sh/docs/accounts/privateKey) फंक्शन नंतर या खाजगी की चा वापर करून एक पूर्ण खाते ऑब्जेक्ट तयार करते. + +```typescript +const walletClient = createWalletClient({ + account, + chain: holesky, + transport: http(), +}) +``` + +पुढे, आपण खाते ऑब्जेक्टचा वापर करून [वॉलेट क्लायंट](https://viem.sh/docs/clients/wallet) तयार करतो. या क्लायंटकडे एक खाजगी की आणि एक पत्ता आहे, म्हणून त्याचा उपयोग व्यवहार पाठवण्यासाठी केला जाऊ शकतो. + +```typescript +const greeter = getContract({ + address: greeterAddress, + abi: greeterABI, + client: { public: publicClient, wallet: walletClient }, +}) +``` + +आता आपल्याकडे सर्व पूर्वतयारी असल्याने, आपण अखेरीस [करार उदाहरण](https://viem.sh/docs/contract/getContract) तयार करू शकतो. आम्ही या करार उदाहरणाचा उपयोग ऑनचेन कराराशी संवाद साधण्यासाठी करू. + +##### ब्लॉकचेनवरून वाचणे + +```typescript +console.log(`Current greeting:`, await greeter.read.greet()) +``` + +फक्त वाचता येणारी करार फंक्शन्स ([`view`](https://www.tutorialspoint.com/solidity/solidity_view_functions.htm) आणि [`pure`](https://www.tutorialspoint.com/solidity/solidity_pure_functions.htm)) `read` अंतर्गत उपलब्ध आहेत. या प्रकरणात, आम्ही ते [`greet`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=read_contract#cfae3217) फंक्शनमध्ये प्रवेश करण्यासाठी वापरतो, जे ग्रीटिंग परत करते. + +JavaScript सिंगल-थ्रेडेड आहे, म्हणून जेव्हा आपण एक दीर्घ चालणारी प्रक्रिया सुरू करतो, तेव्हा आपल्याला [ती एसिंक्रोनसपणे करत आहोत हे निर्दिष्ट करणे](https://eloquentjavascript.net/11_async.html#h-XvLsfAhtsE) आवश्यक आहे. ब्लॉकचेनला कॉल करणे, जरी ते फक्त वाचन ऑपरेशनसाठी असले तरी, संगणक आणि ब्लॉकचेन नोड यांच्यात एक फेरी-ट्रिप आवश्यक असते. याच कारणास्तव आम्ही येथे निर्दिष्ट करतो की कोडला निकालाची `await` (प्रतीक्षा) करणे आवश्यक आहे. + +जर तुम्हाला हे कसे कार्य करते यात स्वारस्य असेल तर तुम्ही [येथे त्याबद्दल वाचू शकता](https://www.w3schools.com/js/js_promise.asp), परंतु व्यावहारिकदृष्ट्या तुम्हाला फक्त एवढेच माहित असणे आवश्यक आहे की जर तुम्ही दीर्घकाळ चालणारी क्रिया सुरू केली तर तुम्ही परिणामांसाठी `await` करता, आणि असे करणारे कोणतेही फंक्शन `async` म्हणून घोषित केले पाहिजे. + +##### व्यवहार जारी करणे + +```typescript +const setGreeting = async (greeting: string): Promise => { +``` + +ग्रीटिंग बदलणाऱ्या व्यवहाराला जारी करण्यासाठी तुम्ही हे फंक्शन कॉल करता. कारण ही एक दीर्घ क्रिया आहे, त्यामुळे हे फंक्शन `async` म्हणून घोषित केले आहे. अंतर्गत अंमलबजावणीमुळे, कोणत्याही `async` फंक्शनला `Promise` ऑब्जेक्ट परत करणे आवश्यक आहे. या प्रकरणात, `Promise` म्हणजे आपण `Promise` मध्ये नेमके काय परत येईल हे निर्दिष्ट करत नाही. + +```typescript +const txHash = await greeter.write.setGreeting([greeting]) +``` + +करार उदाहरणाच्या `write` फील्डमध्ये ब्लॉकचेनच्या स्थितीमध्ये लिहिणारी सर्व फंक्शन्स आहेत (ज्यांना व्यवहार पाठवणे आवश्यक आहे), जसे की [`setGreeting`](https://eth-holesky.blockscout.com/address/0xB8f6460Dc30c44401Be26B0d6eD250873d8a50A6?tab=write_contract#a4136862). पॅरामीटर्स, जर असतील तर, एका यादीच्या स्वरूपात प्रदान केले जातात, आणि फंक्शन व्यवहाराचा हॅश परत करते. + +```typescript + console.log(`Working on a fix, see https://eth-holesky.blockscout.com/tx/${txHash}`) + + return txHash +} +``` + +व्यवहाराचा हॅश (तो पाहण्यासाठी ब्लॉक एक्सप्लोररच्या URL चा एक भाग म्हणून) कळवा आणि तो परत करा. + +##### इव्हेंटला प्रतिसाद देणे + +```typescript +greeter.watchEvent.SetGreeting({ +``` + +[`watchEvent` फंक्शन](https://viem.sh/docs/actions/public/watchEvent) तुम्हाला हे निर्दिष्ट करू देते की एखादा इव्हेंट उत्सर्जित झाल्यावर एक फंक्शन चालवले जाईल. जर तुम्हाला फक्त एकाच प्रकारच्या इव्हेंटची (या प्रकरणात, `SetGreeting`) काळजी असेल, तर तुम्ही स्वतःला त्या इव्हेंट प्रकारापुरते मर्यादित ठेवण्यासाठी या सिंटॅक्सचा वापर करू शकता. + +```typescript + onLogs: logs => { +``` + +जेव्हा लॉग नोंदी असतात तेव्हा `onLogs` फंक्शन कॉल केले जाते. Ethereum मध्ये 'लॉग' आणि 'इव्हेंट' सहसा एकमेकांऐवजी वापरले जातात. + +```typescript +console.log( + `Address ${logs[0].args.sender} changed the greeting to ${logs[0].args.greeting}` +) +``` + +अनेक इव्हेंट असू शकतात, परंतु साधेपणासाठी आम्ही फक्त पहिल्याची काळजी घेतो. `logs[0].args` हे इव्हेंटचे आर्ग्युमेंट आहेत, या प्रकरणात `sender` आणि `greeting`. + +```typescript + if (logs[0].args.sender != account.address) + setGreeting(`${account.address} insists on it being Hello!`) + } +}) +``` + +जर प्रेषक _हा_ सर्व्हर नसेल, तर ग्रीटिंग बदलण्यासाठी `setGreeting` वापरा. + +#### `package.json` {#package-json} + +[ही फाइल](https://github.com/qbzzt/20240715-server-component/blob/main/package.json) [Node.js](https://nodejs.org/en) कॉन्फिगरेशन नियंत्रित करते. हा लेख फक्त महत्त्वाच्या व्याख्या स्पष्ट करतो. + +```json +{ + "main": "dist/index.js", +``` + +ही व्याख्या कोणती JavaScript फाइल चालवायची हे निर्दिष्ट करते. + +```json + "scripts": { + "start": "tsc && node dist/app.js", + }, +``` + +स्क्रिप्ट्स विविध ॲप्लिकेशन क्रिया आहेत. या प्रकरणात, आपल्याकडे फक्त `start` आहे, जे सर्व्हरला संकलित करते आणि नंतर चालवते. `tsc` कमांड `typescript` पॅकेजचा भाग आहे आणि TypeScript ला JavaScript मध्ये संकलित करते. जर तुम्हाला ते मॅन्युअली चालवायचे असेल, तर ते `node_modules/.bin` मध्ये स्थित आहे. दुसरी कमांड सर्व्हर चालवते. + +```json + "type": "module", +``` + +JavaScript नोड ॲप्लिकेशन्सचे अनेक प्रकार आहेत. `module` प्रकार आपल्याला टॉप लेव्हल कोडमध्ये `await` वापरण्याची परवानगी देतो, जे तुम्ही धीम्या (आणि त्यामुळे एसिंक्रोनस) क्रिया करत असताना महत्त्वाचे असते. + +```json + "devDependencies": { + "@types/node": "^20.14.2", + "typescript": "^5.4.5" + }, +``` + +हे पॅकेजेस आहेत जे केवळ डेव्हलपमेंटसाठी आवश्यक आहेत. येथे आपल्याला `typescript` ची गरज आहे आणि कारण आपण ते Node.js सोबत वापरत आहोत, त्यामुळे आपल्याला नोड व्हेरिएबल्स आणि `process` सारख्या ऑब्जेक्ट्सचे प्रकार देखील मिळत आहेत. [`^` नोटेशन](https://github.com/npm/node-semver?tab=readme-ov-file#caret-ranges-123-025-004) म्हणजे ती आवृत्ती किंवा त्याहून उच्च आवृत्ती ज्यात ब्रेकिंग बदल नाहीत. आवृत्ती क्रमांकांच्या अर्थाबद्दल अधिक माहितीसाठी [येथे](https://semver.org) पहा. + +```json + "dependencies": { + "dotenv": "^16.4.5", + "viem": "2.14.1" + } +} +``` + +हे पॅकेजेस आहेत जे रनटाइमवेळी, `dist/app.js` चालवताना आवश्यक आहेत. + +## निष्कर्ष {#conclusion} + +आम्ही येथे तयार केलेला केंद्रीकृत सर्व्हर त्याचे काम करतो, जे वापरकर्त्यासाठी एजंट म्हणून काम करणे आहे. इतर कोणीही ज्याला डॅप (dapp) कार्यरत ठेवायचे आहे आणि गॅस खर्च करण्यास इच्छुक आहे, तो सर्व्हरची नवीन इन्स्टन्स स्वतःच्या पत्त्यासह चालवू शकतो. + +तथापि, हे तेव्हाच कार्य करते जेव्हा केंद्रीकृत सर्व्हरच्या क्रिया सहजपणे सत्यापित केल्या जाऊ शकतात. जर केंद्रीकृत सर्व्हरकडे कोणतीही गुप्त स्थिती माहिती असेल किंवा तो कठीण गणना करत असेल, तर तो एक केंद्रीकृत घटक आहे ज्यावर ॲप्लिकेशन वापरण्यासाठी तुम्हाला विश्वास ठेवण्याची गरज आहे, जे नेमके ब्लॉकचेन टाळण्याचा प्रयत्न करतात. भविष्यातील लेखात, मी या समस्येवर मात करण्यासाठी [झिरो-नॉलेज प्रुफ्स](/zero-knowledge-proofs) कसे वापरावे हे दाखवण्याची योजना आखत आहे. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). diff --git a/public/content/translations/mr/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md b/public/content/translations/mr/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md new file mode 100644 index 00000000000..f555694c011 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/set-up-web3js-to-use-ethereum-in-javascript/index.md @@ -0,0 +1,92 @@ +--- +title: "जावास्क्रिप्टमध्ये इथेरियम ब्लॉकचेन वापरण्यासाठी web3.js सेट अप करा" +description: "जावास्क्रिप्ट अॅप्लिकेशन्सवरून इथेरियम ब्लॉकचेनसोबत संवाद साधण्यासाठी web3.js लायब्ररी कशी सेट अप आणि कॉन्फिगर करायची ते शिका." +author: "jdourlens" +tags: [ "web3.js", "javascript" ] +skill: beginner +lang: mr +published: 2020-04-11 +source: EthereumDev +sourceUrl: https://ethereumdev.io/setup-web3js-to-use-the-ethereum-blockchain-in-javascript/ +address: "0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE" +--- + +या ट्युटोरियलमध्ये, आपण इथेरियम ब्लॉकचेनसोबत संवाद साधण्यासाठी [web3.js](https://web3js.readthedocs.io/) सोबत सुरुवात कशी करायची ते पाहू. Web3.js चा वापर ब्लॉकचेनमधून डेटा वाचण्यासाठी किंवा व्यवहार करण्यासाठी आणि स्मार्ट कॉन्ट्रॅक्ट्स तैनात करण्यासाठी सुद्धा फ्रंटएंड आणि बॅकएंड दोन्हीमध्ये केला जाऊ शकतो. + +तुमच्या प्रोजेक्टमध्ये web3.js समाविष्ट करणे ही पहिली पायरी आहे. वेब पेजमध्ये वापरण्यासाठी, तुम्ही JSDeliver सारख्या CDN चा वापर करून थेट लायब्ररी आयात करू शकता. + +```html + +``` + +जर तुम्ही तुमच्या बॅकएंडमध्ये किंवा बिल्ड वापरणाऱ्या फ्रंटएंड प्रोजेक्टमध्ये वापरण्यासाठी लायब्ररी इन्स्टॉल करण्यास प्राधान्य देत असाल तर तुम्ही ते npm वापरून इन्स्टॉल करू शकता: + +```bash +npm install web3 --save +``` + +मग Node.js स्क्रिप्ट किंवा Browserify फ्रंटएंड प्रोजेक्टमध्ये Web3.js आयात करण्यासाठी, तुम्ही जावास्क्रिप्टची खालील ओळ वापरू शकता: + +```js +const Web3 = require("web3") +``` + +आता आपण लायब्ररी प्रोजेक्टमध्ये समाविष्ट केली असल्यामुळे, आपल्याला ती सुरू करणे आवश्यक आहे. तुमचा प्रोजेक्ट ब्लॉकचेनसोबत संवाद साधण्यास सक्षम असणे आवश्यक आहे. बहुतेक इथेरियम लायब्ररी RPC कॉल्सद्वारे [नोड](/developers/docs/nodes-and-clients/) सोबत संवाद साधतात. आमचा Web3 प्रदाता सुरू करण्यासाठी, आम्ही कन्स्ट्रक्टरला प्रदात्याचा URL पास करून एक Web3 इन्स्टन्स तयार करू. जर तुमच्या संगणकावर नोड किंवा [गनाश इन्स्टन्स चालू असेल](https://ethereumdev.io/testing-your-smart-contract-with-existing-protocols-ganache-fork/), तर ते असे दिसेल: + +```js +const web3 = new Web3("http://localhost:8545") +``` + +तुम्हाला होस्ट केलेल्या नोडवर थेट प्रवेश करायचा असल्यास, तुम्ही [नोड्स अॅज अ सर्व्हिस](/developers/docs/nodes-and-clients/nodes-as-a-service) वर पर्याय शोधू शकता. + +```js +const web3 = new Web3("https://cloudflare-eth.com") +``` + +आपण आपला Web3 इन्स्टन्स योग्यरित्या कॉन्फिगर केला आहे की नाही हे तपासण्यासाठी, आपण `getBlockNumber` फंक्शन वापरून नवीनतम ब्लॉक नंबर मिळवण्याचा प्रयत्न करू. हे फंक्शन पॅरामीटर म्हणून कॉलबॅक स्वीकारते आणि ब्लॉक नंबर पूर्णांक म्हणून परत करते. + +```js +var Web3 = require("web3") +const web3 = new Web3("https://cloudflare-eth.com") + +web3.eth.getBlockNumber(function (error, result) { + console.log(result) +}) +``` + +जर तुम्ही हा प्रोग्राम कार्यान्वित केला, तर तो फक्त नवीनतम ब्लॉक नंबर प्रिंट करेल: ब्लॉकचेनचा सर्वात वरचा भाग. तुमच्या कोडमध्ये कॉलबॅकचे नेस्टिंग टाळण्यासाठी तुम्ही `await/async` फंक्शन कॉल्स देखील वापरू शकता: + +```js +async function getBlockNumber() { + const latestBlockNumber = await web3.eth.getBlockNumber() + console.log(latestBlockNumber) + return latestBlockNumber +} + +getBlockNumber() +``` + +तुम्ही Web3 इन्स्टन्सवर उपलब्ध असलेली सर्व फंक्शन्स [अधिकृत web3.js डॉक्युमेंटेशन](https://docs.web3js.org/) मध्ये पाहू शकता. + +बहुतेक Web3 लायब्ररी असिंक्रोनस आहेत कारण बॅकग्राउंडमध्ये लायब्ररी नोडला JSON-RPC कॉल्स करते, जो निकाल परत पाठवतो. + + + +जर तुम्ही ब्राउझरमध्ये काम करत असाल, तर काही वॉलेट्स थेट Web3 इन्स्टन्स इंजेक्ट करतात आणि शक्य असेल तेव्हा तुम्ही ते वापरण्याचा प्रयत्न केला पाहिजे, विशेषतः जर तुम्ही व्यवहार करण्यासाठी वापरकर्त्याच्या इथेरियम अॅड्रेससोबत संवाद साधण्याची योजना करत असाल. + +MetaMask वॉलेट उपलब्ध आहे की नाही हे शोधण्यासाठी आणि असल्यास ते सक्षम करण्याचा प्रयत्न करण्यासाठी येथे स्निपेट आहे. हे तुम्हाला नंतर वापरकर्त्याची शिल्लक वाचण्याची परवानगी देईल आणि त्यांना इथेरियम ब्लॉकचेनवर तुम्ही त्यांच्याकडून करून घेऊ इच्छिणारे व्यवहार प्रमाणित करण्यास सक्षम करेल: + +```js +if (window.ethereum != null) { + state.web3 = new Web3(window.ethereum) + try { + // आवश्यक असल्यास खात्याच्या प्रवेशाची विनंती करा + await window.ethereum.enable() + // खाती आता उघड झाली आहेत + } catch (error) { + // वापरकर्त्याने खात्याचा प्रवेश नाकारला... + } +} +``` + +[Ethers.js](https://docs.ethers.io/) सारखे web3.js चे पर्याय अस्तित्वात आहेत आणि ते सामान्यतः वापरले जातात. पुढील ट्युटोरियलमध्ये आपण [ब्लॉकचेनवरील नवीन येणारे ब्लॉक्स सहजपणे कसे ऐकायचे आणि त्यात काय आहे ते कसे पाहायचे](https://ethereumdev.io/listening-to-new-transactions-happening-on-the-blockchain/) हे पाहू. diff --git a/public/content/translations/mr/developers/tutorials/short-abi/index.md b/public/content/translations/mr/developers/tutorials/short-abi/index.md new file mode 100644 index 00000000000..5c32c7c8482 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/short-abi/index.md @@ -0,0 +1,585 @@ +--- +title: "कॉलडेटा ऑप्टिमायझेशनसाठी लहान ABI" +description: "ऑप्टिमिस्टिक रोलअपसाठी स्मार्ट कॉन्ट्रॅक्ट्स ऑप्टिमाइझ करणे" +author: Ori Pomerantz +lang: mr +tags: [ "स्तर 2" ] +skill: intermediate +published: 2022-04-01 +--- + +## प्रस्तावना {#introduction} + +या लेखात, आपण [optimistic rollups](/developers/docs/scaling/optimistic-rollups) बद्दल शिकाल, त्यावरील व्यवहारांची किंमत, आणि ती वेगळी किंमत संरचना Ethereum मेननेटपेक्षा आपल्याला वेगवेगळ्या गोष्टींसाठी ऑप्टिमाइझ करण्याची आवश्यकता कशी निर्माण करते. +हे ऑप्टिमायझेशन कसे लागू करायचे हे देखील आपण शिकाल. + +### संपूर्ण प्रकटीकरण {#full-disclosure} + +मी एक पूर्णवेळ [Optimism](https://www.optimism.io/) कर्मचारी आहे, त्यामुळे या लेखातील उदाहरणे Optimism वर चालतील. +तथापि, येथे स्पष्ट केलेले तंत्र इतर रोलअपसाठी देखील तितकेच चांगले कार्य करेल. + +### परिभाषा {#terminology} + +रोलअपवर चर्चा करताना, 'स्तर 1' (L1) ही संज्ञा मेननेटसाठी वापरली जाते, जे उत्पादन Ethereum नेटवर्क आहे. +'स्तर 2' (L2) ही संज्ञा रोलअप किंवा इतर कोणत्याही प्रणालीसाठी वापरली जाते जी सुरक्षिततेसाठी L1 वर अवलंबून असते परंतु तिची बहुतेक प्रक्रिया ऑफचेन करते. + +## आपण L2 व्यवहारांची किंमत आणखी कशी कमी करू शकतो? {#how-can-we-further-reduce-the-cost-of-L2-transactions} + +[ऑप्टिमिस्टिक रोलअप्सना](/developers/docs/scaling/optimistic-rollups) प्रत्येक ऐतिहासिक व्यवहाराचा रेकॉर्ड जतन करावा लागतो जेणेकरून कोणीही त्यातून जाऊन सध्याची स्थिती योग्य आहे हे सत्यापित करू शकेल. +Ethereum मेननेटमध्ये डेटा मिळवण्याचा सर्वात स्वस्त मार्ग म्हणजे तो कॅलडेटा म्हणून लिहिणे. +हे समाधान [Optimism](https://help.optimism.io/hc/en-us/articles/4413163242779-What-is-a-rollup-) आणि [Arbitrum](https://developer.offchainlabs.com/docs/rollup_basics#intro-to-rollups) या दोघांनी निवडले होते. + +### L2 व्यवहारांची किंमत {#cost-of-l2-transactions} + +L2 व्यवहारांच्या किंमतीत दोन घटक असतात: + +1. L2 प्रक्रिया, जी सहसा अत्यंत स्वस्त असते +2. L1 स्टोरेज, जे मेननेट गॅस खर्चाशी जोडलेले आहे + +मी हे लिहित असताना, Optimism वर L2 गॅसची किंमत 0.001 [Gwei](/developers/docs/gas/#pre-london) आहे. +दुसरीकडे, L1 गॅसची किंमत अंदाजे 40 gwei आहे. +[आपण सध्याच्या किमती येथे पाहू शकता](https://public-grafana.optimism.io/d/9hkhMxn7z/public-dashboard?orgId=1&refresh=5m). + +कॅलडेटाच्या एका बाइटला एकतर 4 गॅस (जर तो शून्य असेल तर) किंवा 16 गॅस (जर ते इतर कोणतेही मूल्य असेल तर) लागतात. +EVM वरील सर्वात महागड्या क्रियांपैकी एक म्हणजे स्टोरेजमध्ये लिहिणे. +L2 वर स्टोरेजमध्ये 32-बाइट शब्द लिहिण्याची कमाल किंमत 22100 गॅस आहे. सध्या, हे 22.1 gwei आहे. +म्हणून जर आपण कॅलडेटाचा एक शून्य बाइट वाचवू शकलो, तर आपण स्टोरेजमध्ये सुमारे 200 बाइट्स लिहू शकू आणि तरीही फायद्यात राहू. + +### ABI {#the-abi} + +बहुतेक व्यवहार बाह्य-मालकीच्या खात्यातून करारावर प्रवेश करतात. +बहुतेक कॉन्ट्रॅक्ट्स Solidity मध्ये लिहिलेले आहेत आणि [ऍप्लिकेशन बायनरी इंटरफेस (ABI)](https://docs.soliditylang.org/en/latest/abi-spec.html#formal-specification-of-the-encoding) नुसार त्यांचे डेटा फील्ड इंटरप्रिट करतात. + +तथापि, ABI हे L1 साठी डिझाइन केले होते, जिथे कॅलडेटाच्या एका बाइटची किंमत अंदाजे चार अंकगणितीय क्रियांइतकी असते, L2 साठी नाही, जिथे कॅलडेटाच्या एका बाइटची किंमत हजारहून अधिक अंकगणितीय क्रियांइतकी असते. +कॅलडेटा खालीलप्रमाणे विभागलेला आहे: + +| विभाग | लांबी | बाइट्स | वाया गेलेले बाइट्स | वाया गेलेला गॅस | आवश्यक बाइट्स | आवश्यक गॅस | +| --------------- | ----: | -----: | -----------------: | --------------: | ------------: | ---------: | +| फंक्शन सिलेक्टर | 4 | 0-3 | 3 | 48 | 1 | 16 | +| शून्य | 12 | 4-15 | 12 | 48 | 0 | 0 | +| गंतव्य पत्ता | 20 | 16-35 | 0 | 0 | 20 | 320 | +| रक्कम | 32 | 36-67 | 17 | 64 | 15 | 240 | +| एकूण | 68 | | | 160 | | 576 | + +स्पष्टीकरण: + +- **फंक्शन सिलेक्टर**: कॉन्ट्रॅक्टमध्ये 256 पेक्षा कमी फंक्शन्स आहेत, त्यामुळे आपण त्यांना एका बाइटने वेगळे करू शकतो. + हे बाइट्स सहसा गैर-शून्य असतात आणि त्यामुळे [सोळा गॅस खर्च येतो](https://eips.ethereum.org/EIPS/eip-2028). +- **शून्य**: हे बाइट्स नेहमी शून्य असतात कारण वीस-बाइट पत्त्याला ठेवण्यासाठी बत्तीस-बाइट शब्दाची आवश्यकता नसते. + शून्य धारण करणार्‍या बाइट्सना चार गॅस खर्च येतो ([पिवळे पेपर पहा](https://ethereum.github.io/yellowpaper/paper.pdf), परिशिष्ट G, + पृ. 27, `G``txdatazero` चे मूल्य). +- **रक्कम**: जर आपण असे गृहीत धरले की या कॉन्ट्रॅक्टमध्ये `decimals` अठरा आहे (सामान्य मूल्य) आणि आपण हस्तांतरित करत असलेल्या टोकन्सची कमाल रक्कम 1018 असेल, तर आपल्याला 1036 ची कमाल रक्कम मिळते. + 25615 > 1036, म्हणून पंधरा बाइट्स पुरेसे आहेत. + +L1 वर 160 गॅसचा अपव्यय सहसा नगण्य असतो. एका व्यवहाराला किमान [21,000 गॅस](https://yakkomajuri.medium.com/blockchain-definition-of-the-week-ethereum-gas-2f976af774ed) खर्च येतो, त्यामुळे अतिरिक्त 0.8% ने काही फरक पडत नाही. +तथापि, L2 वर, गोष्टी वेगळ्या आहेत. व्यवहाराचा जवळजवळ संपूर्ण खर्च तो L1 वर लिहिण्याचा असतो. +व्यवहार कॅलडेटा व्यतिरिक्त, 109 बाइट्सचे व्यवहार हेडर (गंतव्य पत्ता, स्वाक्षरी, इ.) आहे. +म्हणून एकूण खर्च `109*16+576+160=2480` आहे, आणि आपण त्यापैकी सुमारे 6.5% वाया घालवत आहोत. + +## जेव्हा आपण गंतव्यस्थानावर नियंत्रण ठेवत नाही तेव्हा खर्च कमी करणे {#reducing-costs-when-you-dont-control-the-destination} + +आपले गंतव्य कॉन्ट्रॅक्टवर नियंत्रण नाही असे गृहीत धरून, आपण तरीही [यासारखा](https://github.com/qbzzt/ethereum.org-20220330-shortABI) उपाय वापरू शकता. +चला संबंधित फाइल्स पाहूया. + +### Token.sol {#token-sol} + +[हे गंतव्य कॉन्ट्रॅक्ट आहे](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/Token.sol). +हे एक मानक ERC-20 कॉन्ट्रॅक्ट आहे, ज्यात एक अतिरिक्त वैशिष्ट्य आहे. +हे `faucet` फंक्शन कोणत्याही वापरकर्त्याला वापरण्यासाठी काही टोकन मिळवू देते. +हे एका उत्पादन ERC-20 कॉन्ट्रॅक्टला निरुपयोगी बनवेल, परंतु जेव्हा एखादे ERC-20 केवळ चाचणी सुलभ करण्यासाठी अस्तित्वात असते तेव्हा ते जीवन सोपे करते. + +```solidity + /** + * @dev कॉलरला खेळण्यासाठी 1000 टोकन देते + */ + function faucet() external { + _mint(msg.sender, 1000); + } // फंक्शन फॉसेट +``` + +### CalldataInterpreter.sol {#calldatainterpreter-sol} + +[हे ते कॉन्ट्रॅक्ट आहे ज्याला व्यवहारांनी लहान कॅलडेटासह कॉल करणे अपेक्षित आहे](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/contracts/CalldataInterpreter.sol). +चला ओळीनुसार पाहूया. + +```solidity +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + + +import { OrisUselessToken } from "./Token.sol"; +``` + +त्याला कसे कॉल करायचे हे जाणून घेण्यासाठी आम्हाला टोकन फंक्शनची आवश्यकता आहे. + +```solidity +contract CalldataInterpreter { + + OrisUselessToken public immutable token; +``` + +ज्या टोकनसाठी आम्ही प्रॉक्सी आहोत त्याचा पत्ता. + +```solidity + + /** + * @dev टोकनचा पत्ता निर्दिष्ट करा + * @param tokenAddr_ ERC-20 कॉन्ट्रॅक्टचा पत्ता + */ + constructor( + address tokenAddr_ + ) { + token = OrisUselessToken(tokenAddr_); + } // कन्स्ट्रक्टर +``` + +आम्हाला निर्दिष्ट करण्याची आवश्यकता असलेला टोकन पत्ता हा एकमेव पॅरामीटर आहे. + +```solidity + function calldataVal(uint startByte, uint length) + private pure returns (uint) { +``` + +कॅलडेटा मधून मूल्य वाचा. + +```solidity + uint _retVal; + + require(length < 0x21, + "calldataVal लांबीची मर्यादा 32 बाइट्स आहे"); + + require(length + startByte <= msg.data.length, + "calldataVal calldatasize च्या पलीकडे वाचण्याचा प्रयत्न करत आहे"); +``` + +आपण मेमरीमध्ये एकच 32-बाइट (256-बिट) शब्द लोड करणार आहोत आणि जे बाइट्स आपल्याला हव्या असलेल्या फील्डचा भाग नाहीत ते काढून टाकणार आहोत. +हे अल्गोरिदम 32 बाइटपेक्षा जास्त लांबीच्या मूल्यांसाठी कार्य करत नाही, आणि अर्थातच आपण कॅलडेटाच्या शेवटाच्या पुढे वाचू शकत नाही. +L1 वर गॅस वाचवण्यासाठी या चाचण्या वगळणे आवश्यक असू शकते, परंतु L2 वर गॅस अत्यंत स्वस्त आहे, ज्यामुळे आपण विचार करू शकणाऱ्या कोणत्याही सॅनिटी तपासण्या शक्य होतात. + +```solidity + assembly { + _retVal := calldataload(startByte) + } +``` + +आपण `fallback()` (खाली पहा) च्या कॉलमधून डेटा कॉपी करू शकलो असतो, परंतु EVM ची असेंब्ली भाषा [Yul](https://docs.soliditylang.org/en/v0.8.12/yul.html) वापरणे सोपे आहे. + +येथे आपण स्टॅकमध्ये `startByte` ते `startByte+31` बाइट्स वाचण्यासाठी [CALLDATALOAD ऑपकोड](https://www.evm.codes/#35) वापरतो. +सर्वसाधारणपणे, Yul मधील ऑपकोडचे सिंटॅक्स `(,...)` असे आहे. + +```solidity + + _retVal = _retVal >> (256-length*8); +``` + +केवळ सर्वात लक्षणीय `length` बाइट्स फील्डचा भाग आहेत, म्हणून आपण इतर मूल्ये काढून टाकण्यासाठी [राइट-शिफ्ट](https://en.wikipedia.org/wiki/Logical_shift) करतो. +याचा अतिरिक्त फायदा असा आहे की ते मूल्य फील्डच्या उजवीकडे हलवते, त्यामुळे ते मूल्य स्वतःच आहे, 256something पट मूल्य नाही. + +```solidity + + return _retVal; + } + + + fallback() external { +``` + +जेव्हा Solidity कॉन्ट्रॅक्टला केलेला कॉल कोणत्याही फंक्शन सिग्नेचरशी जुळत नाही, तेव्हा ते (एक आहे असे गृहीत धरून) [`fallback()` फंक्शन](https://docs.soliditylang.org/en/v0.8.12/contracts.html#fallback-function) कॉल करते. +`CalldataInterpreter` च्या बाबतीत, _कोणताही_ कॉल येथे येतो कारण इतर कोणतेही `external` किंवा `public` फंक्शन्स नाहीत. + +```solidity + uint _func; + + _func = calldataVal(0, 1); +``` + +कॅलडेटाचा पहिला बाइट वाचा, जो आपल्याला फंक्शन सांगतो. +येथे एखादे फंक्शन उपलब्ध नसण्याची दोन कारणे आहेत: + +1. `pure` किंवा `view` असणारी फंक्शन्स स्थिती बदलत नाहीत आणि त्यांना गॅस लागत नाही (जेव्हा ऑफचेन कॉल केले जाते). + त्यांचा गॅस खर्च कमी करण्याचा प्रयत्न करण्यात काही अर्थ नाही. +2. [`msg.sender`](https://docs.soliditylang.org/en/v0.8.12/units-and-global-variables.html#block-and-transaction-properties) वर अवलंबून असलेली फंक्शन्स. + `msg.sender` चे मूल्य `CalldataInterpreter` चा पत्ता असेल, कॉलरचा नाही. + +दुर्दैवाने, [ERC-20 स्पेसिफिकेशन्स पाहिल्यास](https://eips.ethereum.org/EIPS/eip-20), फक्त एकच फंक्शन उरते, `transfer`. +यामुळे आपल्याकडे फक्त दोन फंक्शन्स उरतात: `transfer` (कारण आपण `transferFrom` कॉल करू शकतो) आणि `faucet` (कारण आपण ज्याने आपल्याला कॉल केला आहे त्याला टोकन परत हस्तांतरित करू शकतो). + +```solidity + + // कॅलडेटामधील माहिती वापरून टोकनच्या स्थिती बदलणाऱ्या पद्धतींना कॉल करा + // + + // फॉसेट + if (_func == 1) { +``` + +`faucet()` ला कॉल, ज्यामध्ये पॅरामीटर्स नाहीत. + +```solidity + token.faucet(); + token.transfer(msg.sender, + token.balanceOf(address(this))); + } +``` + +आपण `token.faucet()` कॉल केल्यावर आपल्याला टोकन्स मिळतात. तथापि, प्रॉक्सी कॉन्ट्रॅक्ट म्हणून, आम्हाला टोकनची **गरज** नाही. +आपल्याला कॉल करणार्‍या EOA (बाह्य मालकीच्या खात्याला) किंवा कॉन्ट्रॅक्टला गरज आहे. +म्हणून आम्ही आमचे सर्व टोकन ज्याने आम्हाला कॉल केला आहे त्याला हस्तांतरित करतो. + +```solidity + // हस्तांतरण (आपल्याकडे त्यासाठी भत्ता आहे असे गृहीत धरा) + if (_func == 2) { +``` + +टोकन हस्तांतरित करण्यासाठी दोन पॅरामीटर्स आवश्यक आहेत: गंतव्य पत्ता आणि रक्कम. + +```solidity + token.transferFrom( + msg.sender, +``` + +आम्ही फक्त कॉल करणाऱ्यांना त्यांच्या मालकीचे टोकन हस्तांतरित करण्याची परवानगी देतो + +```solidity + address(uint160(calldataVal(1, 20))), +``` + +गंतव्य पत्ता बाइट #1 पासून सुरू होतो (बाइट #0 हे फंक्शन आहे). +एक पत्ता म्हणून, तो 20-बाइट लांब आहे. + +```solidity + calldataVal(21, 2) +``` + +या विशिष्ट कॉन्ट्रॅक्टसाठी आपण असे गृहीत धरतो की कोणीही हस्तांतरित करू इच्छित असलेल्या टोकनची कमाल संख्या दोन बाइटमध्ये (65536 पेक्षा कमी) बसते. + +```solidity + ); + } +``` + +एकंदरीत, हस्तांतरणासाठी 35 बाइट्सचा कॅलडेटा लागतो: + +| विभाग | लांबी | बाइट्स | +| --------------- | ----: | -----: | +| फंक्शन सिलेक्टर | 1 | 0 | +| गंतव्य पत्ता | 32 | 1-32 | +| रक्कम | 2 | 33-34 | + +```solidity + } // फॉलबॅक + +} // कॉन्ट्रॅक्ट CalldataInterpreter +``` + +### test.js {#test-js} + +[हे JavaScript युनिट टेस्ट](https://github.com/qbzzt/ethereum.org-20220330-shortABI/blob/master/test/test.js) आपल्याला हे तंत्र कसे वापरावे (आणि ते योग्यरित्या कार्य करते की नाही हे कसे सत्यापित करावे) हे दाखवते. +मी असे गृहीत धरणार आहे की तुम्हाला [chai](https://www.chaijs.com/) आणि [ethers](https://docs.ethers.io/v5/) समजतात आणि केवळ कॉन्ट्रॅक्टवर विशेषतः लागू होणारे भाग स्पष्ट करणार आहे. + +```js +const { expect } = require("chai"); + +describe("CalldataInterpreter", function () { + it("Should let us use tokens", async function () { + const Token = await ethers.getContractFactory("OrisUselessToken") + const token = await Token.deploy() + await token.deployed() + console.log("Token addr:", token.address) + + const Cdi = await ethers.getContractFactory("CalldataInterpreter") + const cdi = await Cdi.deploy(token.address) + await cdi.deployed() + console.log("CalldataInterpreter addr:", cdi.address) + + const signer = await ethers.getSigner() +``` + +आपण दोन्ही कॉन्ट्रॅक्ट्स तैनात करून सुरुवात करतो. + +```javascript + // खेळण्यासाठी टोकन मिळवा + const faucetTx = { +``` + +आम्ही व्यवहार तयार करण्यासाठी सामान्यतः वापरत असलेली उच्च-स्तरीय फंक्शन्स (जसे की `token.faucet()`) वापरू शकत नाही, कारण आम्ही ABI चे पालन करत नाही. +त्याऐवजी, आपल्याला स्वतः व्यवहार तयार करून तो पाठवावा लागेल. + +```javascript + to: cdi.address, + data: "0x01" +``` + +व्यवहारासाठी आपल्याला दोन पॅरामीटर्स द्यावे लागतील: + +1. `to`, गंतव्य पत्ता. + हा कॅलडेटा इंटरप्रिटर कॉन्ट्रॅक्ट आहे. +2. `data`, पाठवण्यासाठी कॅलडेटा. + फॉसेट कॉलच्या बाबतीत, डेटा एकच बाइट आहे, `0x01`. + +```javascript + + } + await (await signer.sendTransaction(faucetTx)).wait() +``` + +आम्ही [साईनरच्या `sendTransaction` पद्धतीला](https://docs.ethers.io/v5/api/signer/#Signer-sendTransaction) कॉल करतो कारण आम्ही आधीच गंतव्य (`faucetTx.to`) निर्दिष्ट केले आहे आणि आम्हाला व्यवहार स्वाक्षरी केलेला हवा आहे. + +```javascript +// फॉसेट टोकन योग्यरित्या पुरवतो का ते तपासा +expect(await token.balanceOf(signer.address)).to.equal(1000) +``` + +येथे आपण शिल्लक तपासतो. +`view` फंक्शन्सवर गॅस वाचवण्याची गरज नाही, म्हणून आपण त्यांना सामान्यपणे चालवतो. + +```javascript +// CDI ला भत्ता द्या (मंजुरी प्रॉक्सी केली जाऊ शकत नाही) +const approveTX = await token.approve(cdi.address, 10000) +await approveTX.wait() +expect(await token.allowance(signer.address, cdi.address)).to.equal(10000) +``` + +हस्तांतरण करण्यासाठी कॅलडेटा इंटरप्रिटरला भत्ता द्या. + +```javascript +// टोकन हस्तांतरित करा +const destAddr = "0xf5a6ead936fb47f342bb63e676479bddf26ebe1d" +const transferTx = { + to: cdi.address, + data: "0x02" + destAddr.slice(2, 42) + "0100", +} +``` + +एक हस्तांतरण व्यवहार तयार करा. पहिला बाइट "0x02" आहे, त्यानंतर गंतव्य पत्ता आणि शेवटी रक्कम (0x0100, जे दशांश मध्ये 256 आहे). + +```javascript + await (await signer.sendTransaction(transferTx)).wait() + + // तपासा की आपल्याकडे 256 टोकन कमी आहेत + expect (await token.balanceOf(signer.address)).to.equal(1000-256) + + // आणि ते आपल्या गंतव्यस्थानाला मिळाले आहेत + expect (await token.balanceOf(destAddr)).to.equal(256) + }) // ते +}) // वर्णन करा +``` + +## जेव्हा तुम्ही गंतव्य कॉन्ट्रॅक्टवर नियंत्रण ठेवता तेव्हा खर्च कमी करणे {#reducing-the-cost-when-you-do-control-the-destination-contract} + +जर तुमचे गंतव्य कॉन्ट्रॅक्टवर नियंत्रण असेल तर तुम्ही अशी फंक्शन्स तयार करू शकता जी `msg.sender` तपासण्यांना बायपास करतात कारण ते कॅलडेटा इंटरप्रिटरवर विश्वास ठेवतात. +[हे कसे कार्य करते याचे उदाहरण तुम्ही येथे पाहू शकता, `control-contract` शाखेत](https://github.com/qbzzt/ethereum.org-20220330-shortABI/tree/control-contract). + +जर कॉन्ट्रॅक्ट केवळ बाह्य व्यवहारांना प्रतिसाद देत असेल, तर आपण फक्त एका कॉन्ट्रॅक्टने काम चालवू शकलो असतो. +तथापि, ते [कंपोझिबिलिटी](/developers/docs/smart-contracts/composability/) खंडित करेल. +सामान्य ERC-20 कॉल्सला प्रतिसाद देणारा एक कॉन्ट्रॅक्ट आणि लहान कॉल डेटासह व्यवहारांना प्रतिसाद देणारा दुसरा कॉन्ट्रॅक्ट असणे खूप चांगले आहे. + +### Token.sol {#token-sol-2} + +या उदाहरणात आपण `Token.sol` मध्ये बदल करू शकतो. +हे आपल्याला अनेक फंक्शन्स ठेवण्याची परवानगी देते जे फक्त प्रॉक्सी कॉल करू शकते. +हे नवीन भाग आहेत: + +```solidity + // CalldataInterpreter पत्ता निर्दिष्ट करण्याची परवानगी असलेला एकमेव पत्ता + address owner; + + // CalldataInterpreter पत्ता + address proxy = address(0); +``` + +ERC-20 कॉन्ट्रॅक्टला अधिकृत प्रॉक्सीची ओळख माहित असणे आवश्यक आहे. +तथापि, आपण हे व्हेरिएबल कन्स्ट्रक्टरमध्ये सेट करू शकत नाही, कारण आपल्याला अद्याप मूल्य माहित नाही. +हा कॉन्ट्रॅक्ट प्रथम इन्स्टंटिएट केला जातो कारण प्रॉक्सीला त्याच्या कन्स्ट्रक्टरमध्ये टोकनच्या पत्त्याची अपेक्षा असते. + +```solidity + /** + * @dev ERC20 कन्स्ट्रक्टरला कॉल करते. + */ + constructor( + ) ERC20("Oris useless token-2", "OUT-2") { + owner = msg.sender; + } +``` + +निर्मात्याचा पत्ता (ज्याला `owner` म्हणतात) येथे संग्रहित केला जातो कारण प्रॉक्सी सेट करण्याची परवानगी असलेला तो एकमेव पत्ता आहे. + +```solidity + /** + * @dev प्रॉक्सीसाठी (CalldataInterpreter) पत्ता सेट करा. + * मालकाद्वारे फक्त एकदाच कॉल केले जाऊ शकते + */ + function setProxy(address _proxy) external { + require(msg.sender == owner, "फक्त मालकाद्वारे कॉल केले जाऊ शकते"); + require(proxy == address(0), "प्रॉक्सी आधीच सेट आहे"); + + proxy = _proxy; + } // फंक्शन setProxy +``` + +प्रॉक्सीला विशेषाधिकारित प्रवेश आहे, कारण ते सुरक्षा तपासण्या बायपास करू शकते. +आपण प्रॉक्सीवर विश्वास ठेवू शकतो याची खात्री करण्यासाठी, आम्ही फक्त `owner` ला हे फंक्शन कॉल करू देतो, आणि फक्त एकदाच. +एकदा `proxy` चे वास्तविक मूल्य (शून्य नाही) आले की, ते मूल्य बदलू शकत नाही, त्यामुळे मालकाने बदमाश होण्याचा निर्णय घेतला तरी, किंवा त्यासाठीचा मेमोनिक उघड झाला तरी, आपण तरीही सुरक्षित आहोत. + +```solidity + /** + * @dev काही फंक्शन्स फक्त प्रॉक्सीद्वारे कॉल केली जाऊ शकतात. + */ + modifier onlyProxy { +``` + +हे एक [`modifier` फंक्शन](https://www.tutorialspoint.com/solidity/solidity_function_modifiers.htm) आहे, ते इतर फंक्शन्सच्या कार्यपद्धतीत बदल करते. + +```solidity + require(msg.sender == proxy); +``` + +प्रथम, सत्यापित करा की आपल्याला प्रॉक्सीने आणि इतर कोणीही कॉल केलेला नाही. +नसल्यास, `revert` करा. + +```solidity + _; + } +``` + +तसे असल्यास, आपण सुधारित करत असलेले फंक्शन चालवा. + +```solidity + /* फंक्शन्स जे प्रॉक्सीला खात्यांसाठी प्रत्यक्षात प्रॉक्सी करण्याची परवानगी देतात */ + + function transferProxy(address from, address to, uint256 amount) + public virtual onlyProxy() returns (bool) + { + _transfer(from, to, amount); + return true; + } + + function approveProxy(address from, address spender, uint256 amount) + public virtual onlyProxy() returns (bool) + { + _approve(from, spender, amount); + return true; + } + + function transferFromProxy( + address spender, + address from, + address to, + uint256 amount + ) public virtual onlyProxy() returns (bool) + { + _spendAllowance(from, spender, amount); + _transfer(from, to, amount); + return true; + } +``` + +या तीन क्रिया आहेत ज्यांना सामान्यतः टोकन हस्तांतरित करणाऱ्या किंवा भत्ता मंजूर करणाऱ्या घटकाकडून थेट संदेश येण्याची आवश्यकता असते. +येथे आमच्याकडे या ऑपरेशन्सची प्रॉक्सी आवृत्ती आहे जी: + +1. `onlyProxy()` द्वारे सुधारित केले आहे जेणेकरून इतर कोणालाही त्यांना नियंत्रित करण्याची परवानगी नाही. +2. जो पत्ता सामान्यतः `msg.sender` असतो तो अतिरिक्त पॅरामीटर म्हणून मिळवतो. + +### CalldataInterpreter.sol {#calldatainterpreter-sol-2} + +कॅलडेटा इंटरप्रिटर वरील इंटरप्रिटरसारखाच आहे, फक्त प्रॉक्सी केलेल्या फंक्शन्सना `msg.sender` पॅरामीटर मिळतो आणि `transfer` साठी भत्त्याची गरज नसते. + +```solidity + // हस्तांतरण (भत्त्याची गरज नाही) + if (_func == 2) { + token.transferProxy( + msg.sender, + address(uint160(calldataVal(1, 20))), + calldataVal(21, 2) + ); + } + + // मंजूर करा + if (_func == 3) { + token.approveProxy( + msg.sender, + address(uint160(calldataVal(1, 20))), + calldataVal(21, 2) + ); + } + + // transferFrom + if (_func == 4) { + token.transferFromProxy( + msg.sender, + address(uint160(calldataVal( 1, 20))), + address(uint160(calldataVal(21, 20))), + calldataVal(41, 2) + ); + } +``` + +### Test.js {#test-js-2} + +मागील टेस्टिंग कोड आणि या कोडमध्ये काही बदल आहेत. + +```js +const Cdi = await ethers.getContractFactory("CalldataInterpreter") +const cdi = await Cdi.deploy(token.address) +await cdi.deployed() +await token.setProxy(cdi.address) +``` + +आम्हाला ERC-20 कॉन्ट्रॅक्टला कोणत्या प्रॉक्सीवर विश्वास ठेवावा हे सांगावे लागेल + +```js +console.log("CalldataInterpreter addr:", cdi.address) + +// भत्ते तपासण्यासाठी दोन स्वाक्षरीकर्त्यांची आवश्यकता आहे +const signers = await ethers.getSigners() +const signer = signers[0] +const poorSigner = signers[1] +``` + +`approve()` आणि `transferFrom()` तपासण्यासाठी आम्हाला दुसऱ्या स्वाक्षरीकर्त्याची आवश्यकता आहे. +आम्ही त्याला `poorSigner` म्हणतो कारण त्याला आमचे कोणतेही टोकन मिळत नाहीत (अर्थात, त्याच्याकडे ETH असणे आवश्यक आहे). + +```js +// टोकन हस्तांतरित करा +const destAddr = "0xf5a6ead936fb47f342bb63e676479bddf26ebe1d" +const transferTx = { + to: cdi.address, + data: "0x02" + destAddr.slice(2, 42) + "0100", +} +await (await signer.sendTransaction(transferTx)).wait() +``` + +कारण ERC-20 कॉन्ट्रॅक्ट प्रॉक्सी (`cdi`) वर विश्वास ठेवतो, आम्हाला हस्तांतरण रिले करण्यासाठी भत्त्याची गरज नाही. + +```js +// मंजूरी आणि transferFrom +const approveTx = { + to: cdi.address, + data: "0x03" + poorSigner.address.slice(2, 42) + "00FF", +} +await (await signer.sendTransaction(approveTx)).wait() + +const destAddr2 = "0xE1165C689C0c3e9642cA7606F5287e708d846206" + +const transferFromTx = { + to: cdi.address, + data: "0x04" + signer.address.slice(2, 42) + destAddr2.slice(2, 42) + "00FF", +} +await (await poorSigner.sendTransaction(transferFromTx)).wait() + +// approve / transferFrom कॉम्बो योग्यरित्या केले होते की नाही हे तपासा +expect(await token.balanceOf(destAddr2)).to.equal(255) +``` + +दोन नवीन फंक्शन्सची चाचणी घ्या. +लक्षात घ्या की `transferFromTx` ला दोन पत्ता पॅरामीटर्स आवश्यक आहेत: भत्त्याचा दाता आणि स्वीकारकर्ता. + +## निष्कर्ष {#conclusion} + +दोन्ही [Optimism](https://medium.com/ethereum-optimism/the-road-to-sub-dollar-transactions-part-2-compression-edition-6bb2890e3e92) आणि [Arbitrum](https://developer.offchainlabs.com/docs/special_features) L1 वर लिहिलेल्या कॅलडेटाचा आकार आणि त्यामुळे व्यवहारांची किंमत कमी करण्याचे मार्ग शोधत आहेत. +तथापि, सामान्य उपायांचा शोध घेणारे पायाभूत सुविधा प्रदाते म्हणून, आमच्या क्षमता मर्यादित आहेत. +dapp डेव्हलपर म्हणून, आपल्याकडे अनुप्रयोगा-विशिष्ट ज्ञान आहे, जे आपल्याला सामान्य समाधानापेक्षा आपले कॅलडेटा अधिक चांगल्या प्रकारे ऑप्टिमाइझ करू देते. +आशा आहे की, हा लेख आपल्याला आपल्या गरजांसाठी आदर्श समाधान शोधण्यात मदत करेल. + +[माझ्या कामाबद्दल अधिक माहितीसाठी येथे पहा](https://cryptodocguy.pro/). + diff --git a/public/content/translations/mr/developers/tutorials/smart-contract-security-guidelines/index.md b/public/content/translations/mr/developers/tutorials/smart-contract-security-guidelines/index.md new file mode 100644 index 00000000000..4a0a076996e --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/smart-contract-security-guidelines/index.md @@ -0,0 +1,91 @@ +--- +title: "स्मार्ट कॉन्ट्रॅक्ट सुरक्षा मार्गदर्शक तत्त्वे" +description: "तुमचे डॅप तयार करताना विचारात घेण्यासाठी सुरक्षा मार्गदर्शक तत्त्वांची तपासणी सूची" +author: "Trailofbits" +tags: [ "सॉलिडिटी", "स्मार्ट कॉन्ट्रॅक्ट", "सुरक्षा" ] +skill: intermediate +lang: mr +published: 2020-09-06 +source: Building secure contracts +sourceUrl: https://github.com/crytic/building-secure-contracts/blob/master/development-guidelines/guidelines.md +--- + +अधिक सुरक्षित स्मार्ट कॉन्ट्रॅक्ट तयार करण्यासाठी या उच्च-स्तरीय शिफारशींचे अनुसरण करा. + +## डिझाइन मार्गदर्शक तत्त्वे {#design-guidelines} + +कोडची कोणतीही ओळ लिहिण्यापूर्वी कॉन्ट्रॅक्टच्या डिझाइनवर वेळेपूर्वी चर्चा केली पाहिजे. + +### दस्तऐवजीकरण आणि विशिष्टता {#documentation-and-specifications} + +दस्तऐवजीकरण वेगवेगळ्या स्तरांवर लिहिले जाऊ शकते आणि कॉन्ट्रॅक्ट्सची अंमलबजावणी करताना ते अपडेट केले पाहिजे: + +- **सिस्टमचे सोपे इंग्रजी वर्णन**, जे कॉन्ट्रॅक्ट्स काय करतात आणि कोडबेसवरील कोणतीही गृहितके यांचे वर्णन करते. +- **स्कीमा आणि आर्किटेक्चरल डायग्राम**, ज्यात कॉन्ट्रॅक्टमधील परस्परसंवाद आणि सिस्टमचे स्टेट मशीन समाविष्ट आहे. [स्लिदर प्रिंटर्स](https://github.com/crytic/slither/wiki/Printer-documentation) हे स्कीमा तयार करण्यासाठी मदत करू शकतात. +- **संपूर्ण कोड दस्तऐवजीकरण**, सॉलिडिटीसाठी [Natspec फॉरमॅट](https://docs.soliditylang.org/en/develop/natspec-format.html) वापरला जाऊ शकतो. + +### ऑनचेन विरुद्ध ऑफचेन गणना {#onchain-vs-offchain-computation} + +- **तुम्ही शक्य तितका कोड ऑफचेन ठेवा.** ऑनचेन लेयर लहान ठेवा. ऑफचेन कोडसह डेटावर अशा प्रकारे पूर्व-प्रक्रिया करा की ऑनचेन पडताळणी सोपी होईल. तुम्हाला क्रमबद्ध यादीची आवश्यकता आहे का? यादी ऑफचेन लावा, मग फक्त तिचा क्रम ऑनचेन तपासा. + +### अपग्रेडेबिलिटी {#upgradeability} + +आम्ही [आमच्या ब्लॉगपोस्टमध्ये](https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/) वेगवेगळ्या अपग्रेडेबिलिटी सोल्यूशन्सवर चर्चा केली आहे. कोणताही कोड लिहिण्यापूर्वी अपग्रेडेबिलिटीला सपोर्ट करायचा की नाही, याची हेतुपुरस्सर निवड करा. तुम्ही तुमचा कोड कसा संरचित करता यावर हा निर्णय प्रभाव टाकेल. सर्वसाधारणपणे, आम्ही शिफारस करतो: + +- **अपग्रेडेबिलिटीपेक्षा [कॉन्ट्रॅक्ट मायग्रेशनला](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/) प्राधान्य द्या.** मायग्रेशन सिस्टम्समध्ये अपग्रेड करण्यायोग्य सिस्टमसारखेच अनेक फायदे आहेत, पण त्यांचे तोटे नाहीत. +- **डेलिगेट कॉल प्रॉक्सी पॅटर्नपेक्षा डेटा सेपरेशन पॅटर्न वापरा.** जर तुमच्या प्रोजेक्टमध्ये स्पष्ट ॲब्स्ट्रॅक्शन सेपरेशन असेल, तर डेटा सेपरेशन वापरून अपग्रेडेबिलिटीसाठी फक्त काही समायोजन आवश्यक असतील. डेलिगेट कॉल प्रॉक्सीसाठी EVM तज्ञतेची आवश्यकता असते आणि ते खूप त्रुटी-प्रवण आहे. +- **डिप्लॉयमेंट करण्यापूर्वी मायग्रेशन/अपग्रेड प्रक्रिया डॉक्युमेंट करा.** जर तुम्हाला कोणत्याही मार्गदर्शक तत्त्वांशिवाय तणावाखाली प्रतिक्रिया द्यावी लागली, तर तुम्ही चुका कराल. अनुसरण्याची प्रक्रिया वेळेपूर्वीच लिहा. त्यात समाविष्ट असावे: + - नवीन कॉन्ट्रॅक्ट्स सुरू करणारे कॉल्स + - कीज कुठे साठवल्या आहेत आणि त्या कशा ऍक्सेस करायच्या + - डिप्लॉयमेंट कशी तपासावी! डिप्लॉयमेंट-नंतरची स्क्रिप्ट विकसित करा आणि तपासा. + +## अंमलबजावणीची मार्गदर्शक तत्त्वे {#implementation-guidelines} + +**साधेपणासाठी प्रयत्न करा.** नेहमी सर्वात सोपा उपाय वापरा जो तुमच्या उद्देशाला अनुकूल असेल. तुमच्या टीममधील कोणत्याही सदस्याला तुमचा उपाय समजू शकला पाहिजे. + +### फंक्शन कंपोझिशन {#function-composition} + +तुमच्या कोडबेसचे आर्किटेक्चर असे असावे की ज्यामुळे तुमचा कोड तपासणे सोपे होईल. असे आर्किटेक्चरल पर्याय टाळा जे त्याच्या अचूकतेबद्दल तर्क करण्याची क्षमता कमी करतात. + +- **तुमच्या सिस्टमच्या लॉजिकचे विभाजन करा**, एकतर अनेक कॉन्ट्रॅक्ट्सद्वारे किंवा समान फंक्शन्स एकत्र गटबद्ध करून (उदाहरणार्थ, ऑथेंटिकेशन, अंकगणित, ...). +- **स्पष्ट उद्देशाने लहान फंक्शन्स लिहा.** यामुळे पुनरावलोकन सोपे होईल आणि वैयक्तिक घटकांची चाचणी घेता येईल. + +### इनहेरिटन्स {#inheritance} + +- **इनहेरिटन्स व्यवस्थापनीय ठेवा.** लॉजिकचे विभाजन करण्यासाठी इनहेरिटन्सचा वापर केला पाहिजे, तथापि, तुमच्या प्रोजेक्टने इनहेरिटन्स ट्रीची खोली आणि रुंदी कमी करण्याचे ध्येय ठेवले पाहिजे. +- **कॉन्ट्रॅक्ट्सची हायरार्की तपासण्यासाठी स्लिदरचा [इनहेरिटन्स प्रिंटर](https://github.com/crytic/slither/wiki/Printer-documentation#inheritance-graph) वापरा.** इनहेरिटन्स प्रिंटर तुम्हाला हायरार्कीचा आकार तपासण्यात मदत करेल. + +### इव्हेंट्स {#events} + +- **सर्व महत्त्वाच्या ऑपरेशन्स लॉग करा.** इव्हेंट्स डेव्हलपमेंट दरम्यान कॉन्ट्रॅक्ट डीबग करण्यास आणि डिप्लॉयमेंटनंतर त्यावर लक्ष ठेवण्यास मदत करतील. + +### ज्ञात धोके टाळा {#avoid-known-pitfalls} + +- **सर्वात सामान्य सुरक्षा समस्यांबद्दल जागरूक रहा.** सामान्य समस्यांबद्दल जाणून घेण्यासाठी अनेक ऑनलाइन संसाधने आहेत, जसे की [Ethernaut CTF](https://ethernaut.openzeppelin.com/), [कॅप्चर द इथर](https://capturetheether.com/), किंवा [नॉट सो स्मार्ट कॉन्ट्रॅक्ट्स](https://github.com/crytic/not-so-smart-contracts/). +- **[Solidity दस्तऐवजीकरणामधील](https://docs.soliditylang.org/en/latest/) चेतावणी विभागांबद्दल जागरूक रहा.** चेतावणी विभाग तुम्हाला भाषेच्या अस्पष्ट वर्तनाबद्दल माहिती देतील. + +### डिपेंडन्सीज {#dependencies} + +- **चांगल्या प्रकारे तपासलेल्या लायब्ररी वापरा.** चांगल्या प्रकारे तपासलेल्या लायब्ररीमधून कोड इम्पोर्ट केल्याने तुम्ही सदोष कोड लिहिण्याची शक्यता कमी होईल. जर तुम्हाला ERC20 कॉन्ट्रॅक्ट लिहायचा असेल, तर [OpenZeppelin](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master/contracts/token/ERC20) वापरा. +- **डिपेंडन्सी मॅनेजर वापरा; कोड कॉपी-पेस्ट करणे टाळा.** जर तुम्ही बाह्य स्त्रोतावर अवलंबून असाल, तर तुम्ही ते मूळ स्त्रोतासह अद्ययावत ठेवले पाहिजे. + +### चाचणी आणि पडताळणी {#testing-and-verification} + +- **संपूर्ण युनिट-टेस्ट्स लिहा.** उच्च-गुणवत्तेचे सॉफ्टवेअर तयार करण्यासाठी एक विस्तृत टेस्ट सूट महत्त्वपूर्ण आहे. +- **[स्लिदर](https://github.com/crytic/slither), [एकिडना](https://github.com/crytic/echidna) आणि [मॅन्टिकोर](https://github.com/trailofbits/manticore) कस्टम चेक्स आणि प्रॉपर्टीज लिहा.** स्वयंचलित टूल्स तुमचा कॉन्ट्रॅक्ट सुरक्षित असल्याची खात्री करण्यास मदत करतील. कार्यक्षम चेक्स आणि प्रॉपर्टीज कसे लिहायचे हे जाणून घेण्यासाठी या मार्गदर्शकाचा उर्वरित भाग तपासा. +- **[crytic.io](https://crytic.io/) वापरा.** क्रिटिक GitHub सह समाकलित होते, खाजगी स्लिदर डिटेक्टरना ऍक्सेस प्रदान करते, आणि एकिडनामधून कस्टम प्रॉपर्टी चेक्स चालवते. + +### Solidity {#solidity} + +- **0.4 आणि 0.6 पेक्षा सॉलिडिटी 0.5 ला प्राधान्य द्या.** आमच्या मते, सॉलिडिटी 0.5 अधिक सुरक्षित आहे आणि 0.4 पेक्षा त्यात अधिक चांगल्या बिल्ट-इन पद्धती आहेत. सॉलिडिटी 0.6 उत्पादनासाठी खूपच अस्थिर सिद्ध झाले आहे आणि त्याला परिपक्व होण्यासाठी वेळ लागेल. +- **कंपाइल करण्यासाठी स्थिर रिलीझ वापरा; चेतावणी तपासण्यासाठी नवीनतम रिलीझ वापरा.** नवीनतम कंपाइलर आवृत्तीसह तुमच्या कोडमध्ये कोणतीही नोंदवलेली समस्या नाही याची खात्री करा. तथापि, सॉलिडिटीचे रिलीझ चक्र वेगवान आहे आणि त्यात कंपाइलर बग्सचा इतिहास आहे, म्हणून आम्ही डिप्लॉयमेंटसाठी नवीनतम आवृत्तीची शिफारस करत नाही (स्लिदरची [solc आवृत्ती शिफारस](https://github.com/crytic/slither/wiki/Detector-Documentation#recommendation-33) पहा). +- **इनलाइन असेंब्ली वापरू नका.** असेंब्लीसाठी EVM तज्ञतेची आवश्यकता असते. जर तुम्ही यलो पेपरवर _प्रभुत्व_ मिळवले नसेल तर EVM कोड लिहू नका. + +## डिप्लॉयमेंट मार्गदर्शक तत्त्वे {#deployment-guidelines} + +एकदा कॉन्ट्रॅक्ट विकसित आणि डिप्लॉय झाल्यानंतर: + +- **तुमच्या कॉन्ट्रॅक्ट्सवर लक्ष ठेवा.** लॉग्स पहा आणि कॉन्ट्रॅक्ट किंवा वॉलेटशी तडजोड झाल्यास प्रतिक्रिया देण्यासाठी तयार रहा. +- **तुमची संपर्क माहिती [ब्लॉकचेन-सुरक्षा-संपर्क](https://github.com/crytic/blockchain-security-contacts) मध्ये जोडा.** जर एखादी सुरक्षा त्रुटी आढळल्यास ही यादी तृतीय-पक्षांना तुमच्याशी संपर्क साधण्यास मदत करते. +- **विशेषाधिकार असलेल्या वापरकर्त्यांचे वॉलेट्स सुरक्षित करा.** जर तुम्ही हार्डवेअर वॉलेट्समध्ये कीज साठवत असाल तर आमच्या [सर्वोत्तम पद्धतींचे](https://blog.trailofbits.com/2018/11/27/10-rules-for-the-secure-use-of-cryptocurrency-hardware-wallets/) अनुसरण करा. +- **घटनेला प्रतिसाद देण्यासाठी एक योजना तयार ठेवा.** तुमचे स्मार्ट कॉन्ट्रॅक्ट्स धोक्यात येऊ शकतात याचा विचार करा. जरी तुमचे कॉन्ट्रॅक्ट्स बग-मुक्त असले तरी, एक हल्लेखोर कॉन्ट्रॅक्ट मालकाच्या कीजचा ताबा घेऊ शकतो. diff --git a/public/content/translations/mr/developers/tutorials/stealth-addr/index.md b/public/content/translations/mr/developers/tutorials/stealth-addr/index.md new file mode 100644 index 00000000000..1c3b5e5ff16 --- /dev/null +++ b/public/content/translations/mr/developers/tutorials/stealth-addr/index.md @@ -0,0 +1,436 @@ +--- +title: "गुप्त पत्त्यांचा वापर" +description: "गुप्त पत्ते वापरकर्त्यांना अज्ञातपणे मालमत्ता हस्तांतरित करण्याची परवानगी देतात. हा लेख वाचल्यानंतर, तुम्ही हे करू शकाल: गुप्त पत्ते काय आहेत आणि ते कसे कार्य करतात हे स्पष्ट करू शकाल, अनामिकता जपणाऱ्या पद्धतीने गुप्त पत्त्यांचा वापर कसा करायचा हे समजू शकाल, आणि गुप्त पत्त्यांचा वापर करणारे वेब-आधारित ॲप्लिकेशन लिहू शकाल." +author: Ori Pomerantz +tags: [ "गुप्त पत्ता", "गोपनीयता", "कूटलेखन", "rust", "wasm" ] +skill: intermediate +published: 2025-11-30 +lang: mr +sidebarDepth: 3 +--- + +तुम्ही बिल आहात. ज्या कारणांमध्ये आपण जाणार नाही, त्या कारणास्तव, तुम्हाला "Alice for Queen of the World" मोहिमेसाठी देणगी द्यायची आहे आणि तुम्ही देणगी दिली आहे हे ॲलिसला कळावे असे तुम्हाला वाटते, जेणेकरून ती जिंकल्यास तुम्हाला बक्षीस देईल. दुर्दैवाने, तिचा विजय निश्चित नाही. एक प्रतिस्पर्धी मोहीम आहे, "Carol for Empress of the Solar System". जर कॅरोल जिंकली आणि तिला कळले की तुम्ही ॲलिसला देणगी दिली आहे, तर तुम्ही अडचणीत याल. म्हणून तुम्ही तुमच्या खात्यातून ॲलिसच्या खात्यात फक्त 200 ETH हस्तांतरित करू शकत नाही. + +[ERC-5564](https://eips.ethereum.org/EIPS/eip-5564) मध्ये याचे समाधान आहे. हे ERC अज्ञात हस्तांतरणासाठी [गुप्त पत्त्यांचा](https://nerolation.github.io/stealth-utils) वापर कसा करायचा हे स्पष्ट करते. + +**चेतावणी**: गुप्त पत्त्यांमागील कूटलेखन, आमच्या माहितीनुसार, सुरक्षित आहे. तथापि, संभाव्य साइड-चॅनल हल्ले होऊ शकतात. [खाली](#go-wrong), हा धोका कमी करण्यासाठी तुम्ही काय करू शकता ते तुम्हाला दिसेल. + +## गुप्त पत्ते कसे कार्य करतात {#how} + +हा लेख गुप्त पत्ते दोन प्रकारे स्पष्ट करण्याचा प्रयत्न करेल. पहिले म्हणजे [त्यांचा वापर कसा करायचा](#how-use). लेखाचा उर्वरित भाग समजून घेण्यासाठी हा भाग पुरेसा आहे. त्यानंतर, [त्यामागील गणिताचे स्पष्टीकरण](#how-math) आहे. जर तुम्हाला कूटलेखनात रस असेल, तर हा भाग देखील वाचा. + +### साधी आवृत्ती (गुप्त पत्त्यांचा वापर कसा करायचा) {#how-use} + +ॲलिस दोन खाजगी की तयार करते आणि संबंधित सार्वजनिक की प्रकाशित करते (ज्या एकाच दुप्पट-लांबीच्या मेटा-पत्त्यामध्ये एकत्र केल्या जाऊ शकतात). बिल देखील एक खाजगी की तयार करतो आणि संबंधित सार्वजनिक की प्रकाशित करतो. + +एका पक्षाची सार्वजनिक की आणि दुसऱ्याची खाजगी की वापरून, तुम्ही एक सामायिक गुप्त (shared secret) मिळवू शकता जे केवळ ॲलिस आणि बिल यांनाच माहीत आहे (ते केवळ सार्वजनिक कीमधून मिळवता येत नाही). हे सामायिक गुप्त वापरून, बिलला गुप्त पत्ता मिळतो आणि तो त्यावर मालमत्ता पाठवू शकतो. + +ॲलिसला सामायिक गुप्तानंतर पत्ता मिळतो, परंतु तिने प्रकाशित केलेल्या सार्वजनिक कींच्या खाजगी की तिला माहीत असल्यामुळे, तिला त्या पत्त्यावरून पैसे काढण्यासाठी खाजगी की देखील मिळू शकते. + +### गणित (गुप्त पत्ते असे का कार्य करतात) {#how-math} + +मानक गुप्त पत्ते [एलिप्टिक-कर्व्ह क्रिप्टोग्राफी (ECC)](https://blog.cloudflare.com/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography/#elliptic-curves-building-blocks-of-a-better-trapdoor) वापरतात ज्यामुळे कमी की बिट्ससह चांगली कामगिरी मिळते, आणि त्याच वेळी सुरक्षेची पातळी कायम राहते. परंतु बहुतेक वेळा आपण त्याकडे दुर्लक्ष करू शकतो आणि आपण नियमित अंकगणित वापरत आहोत असे भासवू शकतो. + +एक संख्या आहे जी प्रत्येकाला माहीत आहे, _G_. तुम्ही _G_ ने गुणू शकता. परंतु ECC च्या स्वरूपामुळे, _G_ ने भागणे व्यावहारिकदृष्ट्या अशक्य आहे. Ethereum मध्ये सार्वजनिक की कूटलेखन सामान्यतः ज्या प्रकारे कार्य करते ते म्हणजे, तुम्ही व्यवहार स्वाक्षरी करण्यासाठी एक खाजगी की, _Ppriv_ वापरू शकता, जे नंतर सार्वजनिक की, _Ppub = GPpriv_ द्वारे सत्यापित केले जातात. + +ॲलिस दोन खाजगी की तयार करते, _Kpriv_ आणि _Vpriv_. _Kpriv_ चा वापर गुप्त पत्त्यामधून पैसे खर्च करण्यासाठी केला जाईल, आणि _Vpriv_ चा वापर ॲलिसच्या मालकीचे पत्ते पाहण्यासाठी केला जाईल. त्यानंतर ॲलिस सार्वजनिक की प्रकाशित करते: _Kpub = GKpriv_ आणि _Vpub = GVpriv_ + +बिल तिसरी खाजगी की, _Rpriv_ तयार करतो, आणि _Rpub = GRpriv_ एका केंद्रीय नोंदणीमध्ये प्रकाशित करतो (बिलने ते ॲलिसला देखील पाठवले असते, परंतु आम्ही असे गृहीत धरतो की कॅरोल ऐकत आहे). + +बिल _RprivVpub = GRprivVpriv_ ची गणना करतो, जे ॲलिसला देखील माहीत असेल अशी त्याला अपेक्षा आहे (खाली स्पष्ट केले आहे). या मूल्याला _S_, म्हणजेच सामायिक गुप्त (shared secret) म्हणतात. यामुळे बिलला एक सार्वजनिक की मिळते, _Ppub = Kpub+G\*hash(S)_. या सार्वजनिक कीमधून, तो एक पत्ता मोजू शकतो आणि त्याला हवी असलेली कोणतीही संसाधने त्यावर पाठवू शकतो. भविष्यात, जर ॲलिस जिंकली, तर बिल तिला _Rpriv_ सांगून संसाधने त्याच्याकडून आली आहेत हे सिद्ध करू शकतो. + +ॲलिस _RpubVpriv = GRprivVpriv_ ची गणना करते. यामुळे तिला तेच सामायिक गुप्त, _S_ मिळते. तिला खाजगी की, _Kpriv_ माहीत असल्यामुळे, ती _Ppriv = Kpriv+hash(S)_ ची गणना करू शकते. ही की तिला _Ppub = GPpriv = GKpriv+G\*hash(S) = Kpub+G\*hash(S)_ मधून मिळणाऱ्या पत्त्यातील मालमत्तांमध्ये प्रवेश करू देते. + +आमच्याकडे एक वेगळी व्ह्यूइंग की (viewing key) आहे, जी ॲलिसला डेव्हच्या वर्ल्ड डॉमिनेशन कॅम्पेन सर्व्हिसेसला उपकंत्राट देण्यास अनुमती देते. ॲलिस डेव्हला सार्वजनिक पत्ते कळवण्यास आणि अधिक पैसे उपलब्ध झाल्यावर तिला माहिती देण्यास तयार आहे, परंतु तिने तिच्या मोहिमेचे पैसे खर्च करावेत असे तिला वाटत नाही. + +पाहणे आणि खर्च करणे यासाठी स्वतंत्र की वापरल्या जातात, त्यामुळे ॲलिस डेव्हला _Vpriv_ देऊ शकते. त्यानंतर डेव्ह _S = RpubVpriv = GRprivVpriv_ ची गणना करू शकतो आणि त्याद्वारे सार्वजनिक की (_Ppub = Kpub+G\*hash(S)_) मिळवू शकतो. परंतु _Kpriv_ शिवाय डेव्ह खाजगी की मिळवू शकत नाही. + +सारांश, ही मूल्ये विविध सहभागींना ज्ञात आहेत. + +| ॲलिस | प्रकाशित | बिल | डेव्ह | | +| ------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------------------- | --------------------------------------------- | +| G | G | G | G | | +| _Kpriv_ | - | - | - | | +| _Vpriv_ | - | - | _Vpriv_ | | +| _Kpub = GKpriv_ | _Kpub_ | _Kpub_ | _Kpub_ | | +| _Vpub = GVpriv_ | _Vpub_ | _Vpub_ | _Vpub_ | | +| - | - | _Rpriv_ | - | | +| _Rpub_ | _Rpub_ | _Rpub = GRpriv_ | _Rpub_ | | +| _S = RpubVpriv = GRprivVpriv_ | - | _S = RprivVpub = GRprivVpriv_ | _S = _RpubVpriv_ = GRprivVpriv_ | | +| _Ppub = Kpub+G\*hash(S)_ | - | _Ppub = Kpub+G\*hash(S)_ | _Ppub = Kpub+G\*hash(S)_ | | +| _पत्ता=f(Ppub)_ | - | _पत्ता=f(Ppub)_ | _पत्ता=f(Ppub)_ | _पत्ता=f(Ppub)_ | +| _Ppriv = Kpriv+hash(S)_ | - | - | - | | + +## जेव्हा गुप्त पत्ते चुकीचे ठरतात {#go-wrong} + +_ब्लॉकचेनवर कोणतीही रहस्ये नसतात_. जरी गुप्त पत्ते तुम्हाला गोपनीयता देऊ शकतात, तरीही ती गोपनीयता ट्रॅफिक विश्लेषणासाठी असुरक्षित असते. एक सोपे उदाहरण घ्यायचे झाल्यास, कल्पना करा की बिल एका पत्त्याला निधी देतो आणि लगेच _Rpub_ मूल्य प्रकाशित करण्यासाठी एक व्यवहार पाठवतो. ॲलिसच्या _Vpriv_ शिवाय, हा एक गुप्त पत्ता आहे याची खात्री आपण करू शकत नाही, परंतु तसा अंदाज लावता येतो. त्यानंतर, आम्हाला आणखी एक व्यवहार दिसतो जो त्या पत्त्यावरून सर्व ETH ॲलिसच्या मोहीम निधी पत्त्यावर हस्तांतरित करतो. आम्ही ते सिद्ध करू शकत नाही, परंतु बहुधा बिलने नुकतीच ॲलिसच्या मोहिमेला देणगी दिली आहे. कॅरोलला नक्कीच असे वाटेल. + +बिलसाठी _Rpub_ चे प्रकाशन आणि गुप्त पत्त्यासाठी निधी देणे हे वेगळे करणे सोपे आहे (हे वेगवेगळ्या वेळी, वेगवेगळ्या पत्त्यांवरून करा). तथापि, ते पुरेसे नाही. कॅरोल जो पॅटर्न शोधते तो असा आहे की बिल एका पत्त्याला निधी देतो, आणि नंतर ॲलिसचा मोहीम निधी त्यातून पैसे काढतो. + +एक उपाय म्हणजे ॲलिसच्या मोहिमेने थेट पैसे काढू नये, तर ते तिसऱ्या पक्षाला पैसे देण्यासाठी वापरावे. जर ॲलिसची मोहीम डेव्हच्या वर्ल्ड डॉमिनेशन कॅम्पेन सर्व्हिसेसला 10 ETH पाठवते, तर कॅरोलला फक्त एवढेच कळते की बिलने डेव्हच्या एका ग्राहकाला देणगी दिली आहे. जर डेव्हकडे पुरेसे ग्राहक असतील, तर कॅरोलला हे कळू शकणार नाही की बिलने तिच्याशी स्पर्धा करणाऱ्या ॲलिसला देणगी दिली की ॲडम, अल्बर्ट किंवा ॲबिगेल यांना, ज्यांची कॅरोलला पर्वा नाही. ॲलिस पेमेंटसोबत एक हॅश केलेले मूल्य समाविष्ट करू शकते, आणि नंतर डेव्हला प्रीइमेज देऊ शकते, हे सिद्ध करण्यासाठी की ती तिची देणगी होती. वैकल्पिकरित्या, वर नमूद केल्याप्रमाणे, जर ॲलिसने डेव्हला तिची _Vpriv_ दिली, तर त्याला आधीच कळते की पेमेंट कोणाकडून आले आहे. + +या उपायातील मुख्य समस्या अशी आहे की, जेव्हा ती गुप्तता बिलच्या फायद्याची असते तेव्हा ॲलिसने गुप्ततेची काळजी घेणे आवश्यक असते. ॲलिसला तिची प्रतिष्ठा टिकवून ठेवायची असेल, जेणेकरून बिलचा मित्र बॉब देखील तिला देणगी देईल. परंतु हे देखील शक्य आहे की तिला बिलला उघड करण्यास हरकत नसेल, कारण मग कॅरोल जिंकल्यास काय होईल याची त्याला भीती वाटेल. बिल कदाचित ॲलिसला आणखी जास्त पाठिंबा देऊ शकेल. + +### अनेक गुप्त स्तरांचा वापर करणे {#multi-layer} + +बिलची गोपनीयता जपण्यासाठी ॲलिसवर अवलंबून राहण्याऐवजी, बिल ते स्वतः करू शकतो. तो बॉब आणि बेला या काल्पनिक लोकांसाठी अनेक मेटा-पत्ते तयार करू शकतो. बिल नंतर बॉबला ETH पाठवतो, आणि "बॉब" (जो खरं तर बिल आहे) ते बेलाला पाठवतो. "बेला" (जो बिलच आहे) ते ॲलिसला पाठवते. + +कॅरोल तरीही ट्रॅफिक विश्लेषण करू शकते आणि बिल-ते-बॉब-ते-बेला-ते-ॲलिस पाइपलाइन पाहू शकते. तथापि, जर "बॉब" आणि "बेला" देखील इतर कारणांसाठी ETH वापरत असतील, तर असे दिसणार नाही की बिलने ॲलिसला काही हस्तांतरित केले आहे, जरी ॲलिसने गुप्त पत्त्यावरून तिच्या ज्ञात मोहीम पत्त्यावर त्वरित पैसे काढले तरीही. + +## एक गुप्त-पत्ता ॲप्लिकेशन लिहिणे {#write-app} + +हा लेख [GitHub वर उपलब्ध](https://github.com/qbzzt/251022-stealth-addresses.git) असलेल्या गुप्त-पत्ता ॲप्लिकेशनबद्दल स्पष्ट करतो. + +### साधने {#tools} + +एक [टाइपस्क्रिप्ट गुप्त पत्ता लायब्ररी](https://github.com/ScopeLift/stealth-address-sdk) आहे जी आपण वापरू शकतो. तथापि, कूटलेखन ऑपरेशन्स CPU-केंद्रित असू शकतात. मी त्यांना [Rust](https://rust-lang.org/) सारख्या संकलित भाषेत कार्यान्वित करण्यास प्राधान्य देतो, आणि ब्राउझरमध्ये कोड चालवण्यासाठी [WASM](https://webassembly.org/) वापरतो. + +आम्ही [Vite](https://vite.dev/) आणि [React](https://react.dev/) वापरणार आहोत. ही उद्योग-मानक साधने आहेत; जर तुम्हाला त्यांच्याशी परिचय नसेल, तर तुम्ही [हे ट्यूटोरियल](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) वापरू शकता. Vite वापरण्यासाठी, आम्हाला Node ची आवश्यकता आहे. + +### गुप्त पत्ते प्रत्यक्षात पहा {#in-action} + +1. आवश्यक साधने स्थापित करा: [Rust](https://rust-lang.org/tools/install/) आणि [Node](https://nodejs.org/en/download). + +2. GitHub रिपॉझिटरी क्लोन करा. + + ```sh + git clone https://github.com/qbzzt/251022-stealth-addresses.git + cd 251022-stealth-addresses + ``` + +3. पूर्वापेक्षित गोष्टी स्थापित करा आणि Rust कोड संकलित करा. + + ```sh + cd src/rust-wasm + rustup target add wasm32-unknown-unknown + cargo install wasm-pack + wasm-pack build --target web + ``` + +4. वेब सर्व्हर सुरू करा. + + ```sh + cd ../.. + npm install + npm run dev + ``` + +5. [ॲप्लिकेशन](http://localhost:5173/) वर ब्राउझ करा. या ॲप्लिकेशन पृष्ठावर दोन फ्रेम आहेत: एक ॲलिसच्या वापरकर्ता इंटरफेससाठी आणि दुसरी बिलच्या. दोन फ्रेम संवाद साधत नाहीत; त्या फक्त सोयीसाठी एकाच पृष्ठावर आहेत. + +6. ॲलिस म्हणून, **एक गुप्त मेटा-पत्ता तयार करा** वर क्लिक करा. हे नवीन गुप्त पत्ता आणि संबंधित खाजगी की प्रदर्शित करेल. गुप्त मेटा-पत्ता क्लिपबोर्डवर कॉपी करा. + +7. बिल म्हणून, नवीन गुप्त मेटा-पत्ता पेस्ट करा आणि **एक पत्ता तयार करा** वर क्लिक करा. हे तुम्हाला ॲलिससाठी निधी देण्यासाठी पत्ता देते. + +8. पत्ता आणि बिलची सार्वजनिक की कॉपी करा आणि त्यांना ॲलिसच्या वापरकर्ता इंटरफेसच्या "बिलद्वारे तयार केलेल्या पत्त्यासाठी खाजगी की" क्षेत्रात पेस्ट करा. एकदा ती क्षेत्रे भरली की, तुम्हाला त्या पत्त्यावरील मालमत्तांमध्ये प्रवेश करण्यासाठी खाजगी की दिसेल. + +9. खाजगी की पत्त्याशी जुळते याची खात्री करण्यासाठी तुम्ही [एक ऑनलाइन कॅल्क्युलेटर](https://iancoleman.net/ethereum-private-key-to-address/) वापरू शकता. + +### प्रोग्राम कसा कार्य करतो {#how-the-program-works} + +#### WASM घटक {#wasm} + +WASM मध्ये संकलित होणारा स्त्रोत कोड [Rust](https://rust-lang.org/) मध्ये लिहिलेला आहे. तुम्ही ते [`src/rust_wasm/src/lib.rs`](https://github.com/qbzzt/251022-stealth-addresses/blob/main/src/rust-wasm/src/lib.rs) मध्ये पाहू शकता. हा कोड प्रामुख्याने JavaScript कोड आणि [`eth-stealth-addresses` लायब्ररी](https://github.com/kassandraoftroy/eth-stealth-addresses) यांच्यातील इंटरफेस आहे. + +**`Cargo.toml`** + +Rust मधील [`Cargo.toml`](https://doc.rust-lang.org/cargo/reference/manifest.html) हे JavaScript मधील [`package.json`](https://docs.npmjs.com/cli/v9/configuring-npm/package-json) प्रमाणेच आहे. यात पॅकेज माहिती, अवलंबित्व घोषणा इत्यादींचा समावेश आहे. + +```toml +[package] +name = "rust-wasm" +version = "0.1.0" +edition = "2024" + +[dependencies] +eth-stealth-addresses = "0.1.0" +hex = "0.4.3" +wasm-bindgen = "0.2.104" +getrandom = { version = "0.2", features = ["js"] } +``` + +[`getrandom`](https://docs.rs/getrandom/latest/getrandom/) पॅकेजला यादृच्छिक मूल्ये तयार करण्याची आवश्यकता आहे. हे केवळ अल्गोरिदमिक माध्यमांनी केले जाऊ शकत नाही; त्याला एंट्रॉपीचा स्त्रोत म्हणून भौतिक प्रक्रियेत प्रवेश आवश्यक आहे. ही व्याख्या निर्दिष्ट करते की आम्ही ज्या ब्राउझरमध्ये चालवत आहोत त्याला विचारून आम्ही ती एंट्रॉपी मिळवू. + +```toml +console_error_panic_hook = "0.1.7" +``` + +[ही लायब्ररी](https://docs.rs/console_error_panic_hook/latest/console_error_panic_hook/) आम्हाला अधिक अर्थपूर्ण त्रुटी संदेश देते जेव्हा WASM कोड पॅनिक होतो आणि पुढे चालू शकत नाही. + +```toml +[lib] +crate-type = ["cdylib", "rlib"] +``` + +WASM कोड तयार करण्यासाठी आवश्यक असलेला आउटपुट प्रकार. + +**`lib.rs`** + +हा खरा Rust कोड आहे. + +```rust +use wasm_bindgen::prelude::*; +``` + +Rust मधून WASM पॅकेज तयार करण्याच्या व्याख्या. ते [येथे](https://wasm-bindgen.github.io/wasm-bindgen/reference/attributes/index.html) दस्तऐवजीकरण केलेले आहेत. + +```rust +use eth_stealth_addresses::{ + generate_stealth_meta_address, + generate_stealth_address, + compute_stealth_key +}; +``` + +आम्हाला [`eth-stealth-addresses` लायब्ररी](https://github.com/kassandraoftroy/eth-stealth-addresses) मधून आवश्यक असलेली फंक्शन्स. + +```rust +use hex::{decode,encode}; +``` + +Rust सामान्यतः मूल्यांसाठी बाइट [अॅरे](https://doc.rust-lang.org/std/primitive.array.html) (`[u8; ]`) वापरते. परंतु JavaScript मध्ये, आम्ही सामान्यतः हेक्साडेसिमल स्ट्रिंग वापरतो. [`hex` लायब्ररी](https://docs.rs/hex/latest/hex/) आमच्यासाठी एका प्रतिनिधित्वातून दुसऱ्यामध्ये भाषांतर करते. + +```rust +#[wasm_bindgen] +``` + +JavaScript मधून हे फंक्शन कॉल करण्यासाठी WASM बाइंडिंग तयार करा. + +```rust +pub fn wasm_generate_stealth_meta_address() -> String { +``` + +अनेक फील्ड असलेले ऑब्जेक्ट परत करण्याचा सर्वात सोपा मार्ग म्हणजे JSON स्ट्रिंग परत करणे. + +```rust + let (address, spend_private_key, view_private_key) = + generate_stealth_meta_address(); +``` + +[`generate_stealth_meta_address`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.generate_stealth_meta_address.html) तीन फील्ड परत करते: + +- मेटा-पत्ता (_Kpub_ आणि _Vpub_) +- पाहण्याची खाजगी की (_Vpriv_) +- खर्च करण्याची खाजगी की (_Kpriv_) + +[टपल](https://doc.rust-lang.org/std/primitive.tuple.html) सिंटॅक्स आम्हाला ती मूल्ये पुन्हा वेगळी करू देतो. + +```rust + format!("{{\"address\":\"{}\",\"view_private_key\":\"{}\",\"spend_private_key\":\"{}\"}}", + encode(address), + encode(view_private_key), + encode(spend_private_key) + ) +} +``` + +JSON-एनकोडेड स्ट्रिंग तयार करण्यासाठी [`format!`](https://doc.rust-lang.org/std/fmt/index.html) मॅक्रो वापरा. अॅरेला हेक्स स्ट्रिंगमध्ये बदलण्यासाठी [`hex::encode`](https://docs.rs/hex/latest/hex/fn.encode.html) वापरा. + +```rust +fn str_to_array(s: &str) -> Option<[u8; N]> { +``` + +हे फंक्शन हेक्स स्ट्रिंगला (JavaScript द्वारे प्रदान केलेले) बाइट अॅरेमध्ये बदलते. आम्ही JavaScript कोडद्वारे प्रदान केलेली मूल्ये पार्स करण्यासाठी याचा वापर करतो. Rust अॅरे आणि व्हेक्टर कसे हाताळते त्यामुळे हे फंक्शन क्लिष्ट आहे. + +`` अभिव्यक्तीला [जेनेरिक](https://doc.rust-lang.org/book/ch10-01-syntax.html) म्हणतात. `N` हे एक पॅरामीटर आहे जे परत केलेल्या अॅरेच्या लांबीवर नियंत्रण ठेवते. फंक्शनला प्रत्यक्षात `str_to_array::` असे म्हणतात, जिथे `n` ही अॅरेची लांबी आहे. + +परत केलेले मूल्य `Option<[u8; N]>` आहे, याचा अर्थ परत केलेला अॅरे [पर्यायी](https://doc.rust-lang.org/std/option/) आहे. Rust मध्ये अयशस्वी होऊ शकणाऱ्या फंक्शन्ससाठी हा एक सामान्य नमुना आहे. + +उदाहरणार्थ, जर आपण `str_to_array::10("bad060a7")` कॉल केले, तर फंक्शनने दहा-मूल्यांची अॅरे परत करणे अपेक्षित आहे, परंतु इनपुट फक्त चार बाइट्सचे आहे. फंक्शन अयशस्वी होणे आवश्यक आहे, आणि ते `None` परत करून तसे करते. `str_to_array::4("bad060a7")` साठी परत केलेले मूल्य `Some<[0xba, 0xd0, 0x60, 0xa7]>` असेल. + +```rust + // decode returns Result, _> + let vec = decode(s).ok()?; +``` + +[`hex::decode`](https://docs.rs/hex/latest/hex/fn.decode.html) फंक्शन `Result, FromHexError>` परत करते. [`Result`](https://doc.rust-lang.org/std/result/) प्रकारात एकतर यशस्वी परिणाम (`Ok(value)`) किंवा एक त्रुटी (`Err(error)`) असू शकते. + +`.ok()` पद्धत `Result` ला `Option` मध्ये रूपांतरित करते, ज्याचे मूल्य यशस्वी झाल्यास `Ok()` मूल्य किंवा अयशस्वी झाल्यास `None` असते. शेवटी, [प्रश्नचिन्ह ऑपरेटर](https://doc.rust-lang.org/std/option/#the-question-mark-operator-) `Option` रिक्त असल्यास वर्तमान फंक्शन रद्द करतो आणि `None` परत करतो. अन्यथा, ते मूल्य अनरॅप करते आणि ते परत करते (या प्रकरणात, `vec` ला मूल्य नियुक्त करण्यासाठी). + +त्रुटी हाताळण्याची ही एक विचित्र गुंतागुंतीची पद्धत वाटते, परंतु `Result` आणि `Option` हे सुनिश्चित करतात की सर्व त्रुटी, एका ना कोणत्या मार्गाने हाताळल्या जातात. + +```rust + if vec.len() != N { return None; } +``` + +जर बाइट्सची संख्या चुकीची असेल, तर ते अपयश आहे, आणि आम्ही `None` परत करतो. + +```rust + // try_into consumes vec and attempts to make [u8; N] + let array: [u8; N] = vec.try_into().ok()?; +``` + +Rust मध्ये दोन अॅरे प्रकार आहेत. [अॅरे](https://doc.rust-lang.org/std/primitive.array.html) चा आकार निश्चित असतो. [व्हेक्टर](https://doc.rust-lang.org/std/vec/index.html) वाढू आणि लहान होऊ शकतात. `hex::decode` एक व्हेक्टर परत करतो, परंतु `eth_stealth_addresses` लायब्ररीला अॅरे प्राप्त करायचे आहेत. [`.try_into()`](https://doc.rust-lang.org/std/convert/trait.TryInto.html#required-methods) एका मूल्याला दुसऱ्या प्रकारात रूपांतरित करते, उदाहरणार्थ, व्हेक्टरला अॅरेमध्ये. + +```rust + Some(array) +} +``` + +Rust तुम्हाला फंक्शनच्या शेवटी मूल्य परत करताना [`return`](https://doc.rust-lang.org/std/keyword.return.html) कीवर्ड वापरण्याची आवश्यकता नाही. + +```rust +#[wasm_bindgen] +pub fn wasm_generate_stealth_address(stealth_address: &str) -> Option { +``` + +हे फंक्शन एक सार्वजनिक मेटा-पत्ता प्राप्त करते, ज्यात _Vpub_ आणि _Kpub_ दोन्ही समाविष्ट आहेत. ते गुप्त पत्ता, प्रकाशित करण्यासाठी सार्वजनिक की (_Rpub_), आणि एक-बाइट स्कॅन मूल्य परत करते जे ॲलिसच्या मालकीचे कोणते प्रकाशित पत्ते असू शकतात हे ओळखण्यास गती देते. + +स्कॅन मूल्य सामायिक गुप्त (_S = GRprivVpriv_) चा भाग आहे. हे मूल्य ॲलिससाठी उपलब्ध आहे, आणि ते तपासणे _f(Kpub+G\*hash(S))_ प्रकाशित पत्त्याच्या बरोबर आहे की नाही हे तपासण्यापेक्षा खूप वेगवान आहे. + +```rust + let (address, r_pub, scan) = + generate_stealth_address(&str_to_array::<66>(stealth_address)?); +``` + +आम्ही लायब्ररीचे [`generate_stealth_address`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.generate_stealth_address.html) वापरतो. + +```rust + format!("{{\"address\":\"{}\",\"rPub\":\"{}\",\"scan\":\"{}\"}}", + encode(address), + encode(r_pub), + encode(&[scan]) + ).into() +} +``` + +JSON-एनकोडेड आउटपुट स्ट्रिंग तयार करा. + +```rust +#[wasm_bindgen] +pub fn wasm_compute_stealth_key( + address: &str, + bill_pub_key: &str, + view_private_key: &str, + spend_private_key: &str +) -> Option { + . + . + . +} +``` + +हे फंक्शन पत्त्यावरून (_Rpriv_) पैसे काढण्यासाठी खाजगी की मोजण्यासाठी लायब्ररीच्या [`compute_stealth_key`](https://docs.rs/eth-stealth-addresses/latest/eth_stealth_addresses/fn.compute_stealth_key.html) चा वापर करते. या गणनेसाठी ही मूल्ये आवश्यक आहेत: + +- पत्ता (_पत्ता=f(Ppub)_) +- बिलद्वारे तयार केलेली सार्वजनिक की (_Rpub_) +- पाहण्याची खाजगी की (_Vpriv_) +- खर्च करण्याची खाजगी की (_Kpriv_) + +```rust +#[wasm_bindgen(start)] +``` + +[`#[wasm_bindgen(start)]`](https://wasm-bindgen.github.io/wasm-bindgen/reference/attributes/on-rust-exports/start.html) निर्दिष्ट करते की WASM कोड सुरू झाल्यावर फंक्शन कार्यान्वित केले जाते. + +```rust +pub fn main() { + console_error_panic_hook::set_once(); +} +``` + +हा कोड निर्दिष्ट करतो की पॅनिक आउटपुट JavaScript कन्सोलवर पाठवले जावे. ते प्रत्यक्षात पाहण्यासाठी, ॲप्लिकेशन वापरा आणि बिलला एक अवैध मेटा-पत्ता द्या (फक्त एक हेक्साडेसिमल अंक बदला). तुम्हाला JavaScript कन्सोलमध्ये ही त्रुटी दिसेल: + +``` +rust_wasm.js:236 panicked at /home/ori/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/subtle-2.6.1/src/lib.rs:701:9: +assertion `left == right` failed + left: 0 + right: 1 +``` + +त्यानंतर स्टॅक ट्रेस येईल. नंतर बिलला वैध मेटा-पत्ता द्या, आणि ॲलिसला एकतर अवैध पत्ता किंवा अवैध सार्वजनिक की द्या. तुम्हाला ही त्रुटी दिसेल: + +``` +rust_wasm.js:236 panicked at /home/ori/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eth-stealth-addresses-0.1.0/src/lib.rs:78:9: +keys do not generate stealth address +``` + +पुन्हा, त्यानंतर स्टॅक ट्रेस येईल. + +#### वापरकर्ता इंटरफेस {#ui} + +वापरकर्ता इंटरफेस [React](https://react.dev/) वापरून लिहिलेला आहे आणि [Vite](https://vite.dev/) द्वारे सर्व्ह केला जातो. तुम्ही [या ट्यूटोरियल](/developers/tutorials/creating-a-wagmi-ui-for-your-contract/) चा वापर करून त्यांच्याबद्दल शिकू शकता. येथे [WAGMI](https://wagmi.sh/) ची गरज नाही कारण आम्ही थेट ब्लॉकचेन किंवा वॉलेटशी संवाद साधत नाही. + +वापरकर्ता इंटरफेसचा एकमेव अस्पष्ट भाग म्हणजे WASM कनेक्टिव्हिटी. हे कसे कार्य करते ते येथे आहे. + +**`vite.config.js`** + +या फाइलमध्ये [Vite कॉन्फिगरेशन](https://vite.dev/config/) आहे. + +```js +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import wasm from "vite-plugin-wasm"; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react(), wasm()], +}) +``` + +आम्हाला दोन Vite प्लगइनची आवश्यकता आहे: [react](https://www.npmjs.com/package/@vitejs/plugin-react) आणि [wasm](https://github.com/Menci/vite-plugin-wasm#readme). + +**`App.jsx`** + +ही फाइल ॲप्लिकेशनचा मुख्य घटक आहे. हे एक कंटेनर आहे ज्यात दोन घटक आहेत: `Alice` आणि `Bill`, त्या वापरकर्त्यांसाठी वापरकर्ता इंटरफेस. WASM साठी संबंधित भाग म्हणजे इनिशियलायझेशन कोड. + +```jsx +import init from './rust-wasm/pkg/rust_wasm.js' +``` + +जेव्हा आपण [`wasm-pack`](https://rustwasm.github.io/docs/wasm-pack/) वापरतो, तेव्हा ते दोन फाइल्स तयार करते ज्या आपण येथे वापरतो: प्रत्यक्ष कोड असलेली एक wasm फाइल (येथे, `src/rust-wasm/pkg/rust_wasm_bg.wasm`) आणि ते वापरण्यासाठी व्याख्या असलेली एक JavaScript फाइल (येथे, `src/rust_wasm/pkg/rust_wasm.js`). त्या JavaScript फाइलचा डीफॉल्ट एक्सपोर्ट हा कोड आहे जो WASM सुरू करण्यासाठी चालवणे आवश्यक आहे. + +```jsx +function App() { + . + . + . + useEffect(() => { + const loadWasm = async () => { + try { + await init(); + setWasmReady(true) + } catch (err) { + console.error('Error loading wasm:', err) + alert("Wasm error: " + err) + } + } + + loadWasm() + }, [] + ) +``` + +[`useEffect` हुक](https://react.dev/reference/react/useEffect) तुम्हाला एक फंक्शन निर्दिष्ट करू देतो जे स्टेट व्हेरिएबल्स बदलल्यावर कार्यान्वित होते. येथे, स्टेट व्हेरिएबल्सची सूची रिकामी (`[]`) आहे, त्यामुळे हे फंक्शन पृष्ठ लोड झाल्यावर फक्त एकदाच कार्यान्वित होते. + +इफेक्ट फंक्शन त्वरित परत आले पाहिजे. असिंक्रोनस कोड वापरण्यासाठी, जसे की WASM `init` (ज्याला `.wasm` फाइल लोड करावी लागते आणि त्यामुळे वेळ लागतो) आम्ही एक अंतर्गत [`async`](https://en.wikipedia.org/wiki/Async/await) फंक्शन परिभाषित करतो आणि ते `await` शिवाय चालवतो. + +**`Bill.jsx`** + +हा बिलसाठी वापरकर्ता इंटरफेस आहे. त्यात एकच क्रिया आहे, ॲलिसने प्रदान केलेल्या गुप्त मेटा-पत्त्यावर आधारित पत्ता तयार करणे. + +```jsx +import { wasm_generate_stealth_address } from './rust-wasm/pkg/rust_wasm.js' +``` + +डीफॉल्ट एक्सपोर्ट व्यतिरिक्त, `wasm-pack` द्वारे तयार केलेला JavaScript कोड WASM कोडमधील प्रत्येक फंक्शनसाठी एक फंक्शन एक्सपोर्ट करतो. + +```jsx +