ZYCORD दस्तावेज़
हिन्दी
Zycordदस्तावेज़इंस्टॉलेशन

इंस्टॉलेशन

फ़ाइलों को मशीन तक पहुँचाना और यह जानना कि आपको क्या मिला। नोड को असल में चलाना नोड चलाना है; यह पृष्ठ इंस्टॉल के बारे में है।

Zycord दो कमांड-लाइन प्रोग्राम और एक डेस्कटॉप एप्लिकेशन है:

नामयह क्या है
zcdकमांड-लाइन टूल: कुंजियाँ, वॉलेट, genesis, golden vectors, और zcd ui।
zycorddनोड: सत्यापन करता है, माइन करता है, पीयर्स को सेवा देता है, केवल-पठन RPC का उत्तर देता है।
Zycord Walletउसी वॉलेट इंटरफ़ेस के इर्द-गिर्द एक डेस्कटॉप विंडो जिसे zcd ui परोसता है।
परियोजना आज कहाँ है

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

स्रोत से बिल्ड करें#

Go संस्करण go1.26.2 है, और वह स्रोत का हिस्सा है। दो Go रिलीज़ एक ही पैकेज को अलग मशीन कोड में कंपाइल करती हैं, इसलिए बाइनरी जितनी किसी रिपॉज़िटरी की उपज है उतनी ही किसी कंपाइलर की — अलग Go से किया गया पुनर्निर्माण एक जैसे पेड़ से भी अलग फ़ाइल देता है। इसलिए make build उसे पिन करता है (Makefile में GOTOOLCHAIN=go1.26.2) और किसी और के तहत बिल्ड करने से मना कर देता है, बजाय इसके कि आपको ऐसी बाइनरी थमा दे जिसका हैश मेल नहीं खाएगा और कारण कहीं नहीं मिलेगा।

git clone https://gitlab.com/zycord-group/zycord-node.git
cd zycord-node
make build

अगर आपके पास go1.26.2 नहीं है तो उसे ढूँढ़ने जाना ज़रूरी नहीं: पिन के कारण go कमांड पहली बार उपयोग पर ठीक वही toolchain लाती है और उसे Go के अपने चेकसम डेटाबेस से जाँचती है। इस पूरे बिल्ड में केवल यही एक चीज़ नेटवर्क को छूती है।

कौन-सी बाइनरी नेटवर्क से जुड़ सकती है#

यह इस पृष्ठ का सबसे महत्वपूर्ण अनुच्छेद है। RandomX एक build tag के पीछे कंपाइल होता है, इसलिए दो बिल्ड होते हैं और उनमें से केवल एक ही किसी RandomX नेटवर्क से बात कर सकता है — यानी mainnet और सार्वजनिक testnet दोनों से।

# Default: no cgo, no C toolchain, development engine only.
# Byte-for-byte reproducible. Runs a local devnet and nothing else.
make build           #  -> bin/zcd, bin/zycordd

# The network binary. cgo, so not reproducible.
make build-randomx   #  -> bin/zcd-randomx, bin/zycordd-randomx

दोनों बिल्ड जानबूझकर अलग फ़ाइलें लिखते हैं। पहले वे वही दो पथ लिखते थे, इसलिए जो बाद में चलता वह दूसरे की जगह ले लेता और नाम से यह पता ही नहीं चलता कि उसके भीतर कौन-सा इंजन है। जहाँ नेटवर्क RandomX है वहाँ zcd-randomx चलाएँ और जहाँ नहीं है वहाँ zcd; दोनों बनाने के बाद दोनों मौजूद रहते हैं।

बिना tag के बनी बाइनरी ऐसे नेटवर्क पर शुरू होने से मना कर देती है जिसका pow_engine वह गणना नहीं कर सकती। वही इनकार असल बात है: विकास वाले के अलावा कोई इंजन बचा न होने पर ऐसा नोड हर देखे गए हेडर के लिए एक अकेले BLAKE3 पास को proof of work मान लेता — हर जालसाज़ी valid, हर fork भारहीन, और लॉग में कुछ नहीं। उल्टा सममित नहीं है: tag वाली बाइनरी दोनों इंजन ढोती है और devnet ठीक से चलाती है।

किसी बाइनरी से पूछें कि आपके पास कौन-सी है:

zcd version
इस परियोजना के लिए कोई go install नहीं है

और यह कोई चूक नहीं है। go install मॉड्यूल पथ को मॉड्यूल प्रॉक्सी से हल करता है, और मूल मॉड्यूल का नाम zycord है — न कोई होस्ट, न पहले पथ-अंश में कोई बिंदु, जिसे toolchain सिरे से अस्वीकार कर देता है। यह नाम जानबूझकर है: go.mod किसी होस्ट का दावा नहीं करता, क्योंकि होस्ट एक पहचान-सतह है। ऊपर दिया गया clone ही Go-toolchain वाला रास्ता है, और वह वैसे भी मज़बूत रास्ता है — आप उस टैग को बिल्ड करते हैं जिसे आपने चेकआउट किया, न कि उसे जो कोई प्रॉक्सी परोस दे।

आश्वासन की दो श्रेणियाँ, संकेत के बजाय स्पष्ट रूप से#

जब रिलीज़ मौजूद होंगी तब आर्काइव के दो समुच्चय होंगे, और वे असंयुक्त समुच्चय हैं। कौन-सा लेना है यह तय करने से पहले पढ़ने लायक तालिका यही है।

कलाकृतिपुनरुत्पाद्य?mainnet से जुड़ता है?क्यों
zcd, zycordd — make build से स्रोत से बनाहाँ, बाइट-दर-बाइट समाननहींशुद्ध Go, CGO_ENABLED=0, -trimpath, कोई build id नहीं — और इसीलिए कोई RandomX इंजन नहीं। अब डाउनलोड के रूप में नहीं भेजा जाता; SHA256SUMS.binaries प्रकाशित है ताकि आप उसे बनाकर मिलान कर सकें।
zcd, zycordd — -randomx आर्काइवनहींहाँcgo: RandomX C++ में है, इसलिए आउटपुट में सिस्टम का C toolchain आ जाता है
Zycord Wallet, Linux और macOSनहींलागू नहींcgo: आउटपुट में सिस्टम का C toolchain और एक प्लेटफ़ॉर्म SDK आ जाते हैं
Zycord Wallet, Windows परहाँ, बाइट-दर-बाइट समानलागू नहींकोई cgo नहीं: Wails शुद्ध Go के ज़रिए WebView2 तक पहुँचता है

रिलीज़ केवल -randomx आर्काइव भेजती हैं — जो रिलीज़ ऐसा आर्काइव बाँटे जो किसी नेटवर्क से जुड़ ही न सके, वह रिलीज़ अपने पैर पर कुल्हाड़ी बाँट रही है। उनका चेकसम SHA256SUMS.randomx में है और वे जानबूझकर SHA256SUMS.binaries में नहीं हैं, क्योंकि cgo बिल्ड ऐसा बिल्ड है जिसे कोई बाइट-दर-बाइट दोबारा नहीं बना सकता। SHA256SUMS.binaries बताता है कि आपके ख़ुद बनाए बिल्ड का हैश क्या होना चाहिए। यह बताने का मक़सद यही है कि यह आपका निर्णय हो, आपके लिए मान ली गई कोई बात नहीं।

आपका ऑपरेटिंग सिस्टम आपको चेतावनी क्यों देगा, और कोई प्रमाणपत्र क्यों नहीं है#

बिना हस्ताक्षर वाला executable Windows पर SmartScreen और macOS पर Gatekeeper रोक देता है। इसका सामान्य उपाय कोड-साइनिंग प्रमाणपत्र है। वह उपाय यहाँ बजट की कमी से नहीं, बल्कि रचना से ही उपलब्ध नहीं है, और कुछ भी इंस्टॉल करने से पहले इसका कारण समझने लायक है — जो उपयोगकर्ता जानता है कि चेतावनी क्यों आती है उसे नक़ली इंस्टॉलर से फँसाना कहीं ज़्यादा मुश्किल है।

Authenticode प्रमाणपत्र एक प्रमाणपत्र प्राधिकारी होता है जो किसी सत्यापित क़ानूनी पहचान की गवाही देता है। यही उसका पूरा काम है; उसका कोई ऐसा रूप नहीं जिसमें क़ानूनी नाम न हो। Apple Developer ID वही समस्या है, बस विक्रेता अलग है। Zycord छद्मनाम से प्रकाशित होता है, और प्रमाणपत्र ख़रीदना उसे तुरंत मिटा देता।

इसलिए छद्मनाम बनाए रखा गया है। यह भरोसे की कहानी में छेद नहीं है; यह एक अलग कहानी चुनता है, और इस परियोजना के लिए एक मज़बूत कहानी:

प्रमाणपत्र यह दावा करता है कि "यह इकाई X से आया है।"
पुनरुत्पाद्य बिल्ड यह दावा करता है कि "यह इस स्रोत से आया है, और कोई भी जाँच सकता है।"

किसी गुमनाम नेटवर्क के लिए दूसरा ही वह तर्क है जो वज़न रखता है, और वह कोई नारा नहीं है: CI main पर हर push और हर टैग पर zcd को दो बार बनाता है, और अगर दोनों बाइनरी एक बाइट भी अलग हों तो विफल हो जाता है। आपको उस पर भरोसा नहीं करना पड़ता जिसने आपकी डाउनलोड की हुई बाइनरी बनाई। आप उसे ख़ुद बनाकर हैश मिला सकते हैं — और अगर वे मेल खाते हैं, तो यह प्रश्न मायने रखना बंद कर देता है कि उसे बनाया किसने। वह प्रक्रिया है डाउनलोड का सत्यापन।

पैकेज प्रबंधक#

SmartScreen और Gatekeeper से लड़ने के बजाय परियोजना उसी दरवाज़े से जाती है जो वे खुला छोड़ते हैं। पैकेज प्रबंधक एक URL और एक हैश से इंस्टॉल करता है, उसे किसी हस्ताक्षर की ज़रूरत नहीं, और वह इनमें से कोई चेतावनी नहीं छेड़ता। मैनिफ़ेस्ट रिपॉज़िटरी में हैं (packaging/) और अभी समीक्षा योग्य हैं; उन्हें परोसने वाले tap पहली रिलीज़ के साथ प्रकाशित होंगे।

Windows — Scoop#

Scoop mark of the web हटाता नहीं; वह निशान पहले लगता ही नहीं। Mark-of-the-web ब्राउज़र और Windows की attachment-execution shell API लगाते हैं, कच्चे HTTP क्लाइंट नहीं, और Scoop [Net.HttpWebRequest] या aria2 से डाउनलोड करता है। SmartScreen की एप्लिकेशन-साख जाँच उन निशान लगी फ़ाइलों पर चलती है जो Explorer से खोली जाएँ; जिस फ़ाइल पर निशान लगा ही नहीं और जो टर्मिनल से एक shim के ज़रिए चली, वह उस रास्ते तक पहुँचती ही नहीं। मैनिफ़ेस्ट रिलीज़ URL और SHA-256 पिन करता है, इसलिए Scoop इंस्टॉल करने से पहले डाउनलोड सत्यापित करता है।

Scoop जो इंस्टॉल करता है वह --devnet चलाता है और mainnet तथा सार्वजनिक testnet को मना कर देता है — ऊपर दी गई दो-श्रेणी वाली तालिका देखें। Windows पर किसी नेटवर्क से जुड़ने के लिए डाउनलोड पृष्ठ से x86-64 का -randomx zip लें; Windows on ARM के लिए ऐसा कोई बिल्ड नहीं है और वह केवल devnet तक सीमित है। zcd version बताता है कि बाइनरी कौन-सा इंजन ढोती है।

बिना Scoop के Windows

पोर्टेबल zip जानबूझकर है: न कोई .exe इंस्टॉलर है, न कोई MSI, क्योंकि बिना हस्ताक्षर वाला इंस्टॉलर ठीक वही चीज़ है जो SmartScreen का सबसे बुरा रास्ता खोलती है — पूरी स्क्रीन वाला "Windows protected your PC" अवरोध। निकाली गई फ़ाइलें टर्मिनल से बिना उसके चलती हैं। डेस्कटॉप वॉलेट को WebView2 runtime चाहिए, जो Windows 11 और मौजूदा Windows 10 पर पहले से स्थापित होता है; अगर वह न हो तो विंडो खुलेगी नहीं और ब्राउज़र में zcd ui ही उसका उपाय है।

macOS — Homebrew#

दोनों पैकेज formulae हैं, cask नहीं, और यही पूरी तरकीब है: formula आपकी मशीन पर स्रोत से बिल्ड करता है, इसलिए बाइनरी कोई डाउनलोड की गई फ़ाइल नहीं है और उस पर quarantine गुण नहीं होता। Gatekeeper उसे कभी देखता ही नहीं। इसका मतलब यह भी है कि आप परियोजना के बिल्ड पर बिलकुल भरोसा नहीं कर रहे — Homebrew स्रोत tarball लाता है, उसका SHA-256 जाँचता है, और उसे आपके अपने toolchain से कंपाइल करता है।

formula शुद्ध-Go बाइनरी बनाता है, इसलिए वह जो इंस्टॉल करता है वह --devnet चलाता है और mainnet तथा सार्वजनिक testnet को मना कर देता है। macOS पर किसी नेटवर्क से जुड़ने के लिए अपनी आर्किटेक्चर का -randomx आर्काइव लें, या उसे make build-randomx से ख़ुद बनाएँ।

cask इसका उल्टा है और यह परियोजना कोई cask नहीं भेजती: एक डाउनलोड किया गया, quarantine में पड़ा .app जिस पर कोई हस्ताक्षर नहीं, और जो तभी चलता है जब लोगों से एक सुरक्षा सुविधा बंद करने को कहा जाए। Homebrew उस रास्ते को जानबूझकर बंद कर रहा है — Homebrew 5.x में --no-quarantine पदावनत है।

रिलीज़ zip से macOS

उसके भीतर का .app quarantine में है और macOS उसे खोलने से मना कर देगा। फिर भी खोलने के लिए: उस पर डबल-क्लिक करें और इनकार बंद करें; System Settings → Privacy & Security में जाएँ, Security तक स्क्रॉल करें; "Zycord Wallet was blocked" के बगल में Open Anyway पर क्लिक करें; पुष्टि करें और प्रमाणीकरण करें।

Control-क्लिक करके Open चुनने वाली पुरानी सलाह पर न चलें

macOS 15 (Sequoia) ने वह शॉर्टकट हटा दिया है। Control-क्लिक अब Gatekeeper को नहीं लाँघता, और अब System Settings ही इकलौता रास्ता है।

कमांड-लाइन tarball के साथ ऐसी कोई समस्या नहीं है: zcd और zycordd टर्मिनल से चलाए जाते हैं, जहाँ xattr -d com.apple.quarantine एक ही कमांड में पहली-बार वाली जाँच हटा देता है।

Linux#

किसी भी तरह का कोई gatekeeper नहीं। पहले चेकसम और हस्ताक्षर सत्यापित करें — डाउनलोड का सत्यापन देखें — फिर:

tar xzf zycord-<version>-linux-amd64-randomx.tar.gz
sudo install -m755 zycord-<version>-linux-amd64-randomx/zcd      /usr/local/bin/
sudo install -m755 zycord-<version>-linux-amd64-randomx/zycordd  /usr/local/bin/
zcd version    # must name randomx-v1

रिलीज़ केवल यही नोड आर्काइव भेजती है; अब भूल से चुन लेने के लिए कोई सादा वाला बचा ही नहीं। Debian और Ubuntu पर .deb फ़ाइलें हटाने-रखने से ज़्यादा करता है — वह एक systemd unit और एक बिना-विशेषाधिकार वाला खाता भी लाता है — और दोनों रास्ते, इंस्टॉलर स्क्रिप्ट सहित, डाउनलोड पृष्ठ पर रखे हैं। Linux पर डेस्कटॉप वॉलेट AppImage के रूप में आता है, क्योंकि libwebkit2gtk का हर डिस्ट्रीब्यूशन पर अलग पैकेज नाम है।

सर्वर पर#

कभी curl | sh न करें

बिना सत्यापित स्क्रिप्ट को shell में उड़ेल देना ऐसे सॉफ़्टवेयर के लिए ग़लत रवैया है जो पैसा थामता है, और यह तब भी ग़लत रवैया है जब स्क्रिप्ट इसी परियोजना की हो — इस पूरे पृष्ठ का तर्क ही यह है कि आपको प्रकाशक पर भरोसा नहीं करना पड़ना चाहिए। packaging/install.sh डाउनलोड करती है, चेकसम और हस्ताक्षर सत्यापित करती है, और उसके बाद ही इंस्टॉल करती है। उसे लाएँ, पढ़ें, फिर चलाएँ।

install.sh अनुप्रमाणित आर्काइव इंस्टॉल करती है — यानी शुद्ध-Go वाला — क्योंकि उसकी चेकसम-और-हस्ताक्षर वाली चाल उसी श्रेणी के बारे में है, और जो स्क्रिप्ट हस्ताक्षर सत्यापित करके कुछ और इंस्टॉल कर दे वह नाटक होगी। इसलिए वह /usr/local/bin में जो बाइनरी रखती है वे mainnet और सार्वजनिक testnet को मना कर देती हैं, और स्क्रिप्ट आख़िर में यही छापती है। जिस सर्वर को नेटवर्क से जुड़ना है, उसके लिए -randomx आर्काइव हाथ से खोलें।

सर्वर पर वॉलेट इंटरफ़ेस इस्तेमाल करने के लिए कोई पोर्ट उजागर न करें। zcd ui loopback से बँधता है और बाक़ी सब मना कर देता है; उसे ssh पर फ़ॉरवर्ड करें। प्रक्रिया नोड चलाना के तहत है।

यह सब आपको किससे नहीं बचाता#

साफ़ शब्दों में, क्योंकि जो सुरक्षा पृष्ठ केवल अपनी ख़ूबियाँ गिनाता है वह एक विज्ञापन है।

  • एक दुर्भावनापूर्ण रिपॉज़िटरी। पुनरुत्पाद्य बिल्ड यह सिद्ध करते हैं कि बाइनरी अपने स्रोत से मेल खाती है। वे इस बारे में कुछ नहीं कहते कि स्रोत ईमानदार है या नहीं। उसे पढ़ें — और जिस बाइनरी पर आप भरोसा करने जा रहे हैं, उस पर golden vectors चलाएँ।
  • एक नक़ली रिलीज़ पृष्ठ। अगर कोई भरोसेमंद दिखने वाली नक़ल खड़ी कर दे और आप कभी कोई हस्ताक्षर सत्यापित न करें, तो उसी पृष्ठ की अपनी चेकसम फ़ाइल से हैश मिल जाना कुछ भी सिद्ध नहीं करता। परियोजना कुंजी का फ़िंगरप्रिंट E724 39CE DD85 11F9 D607 550B 87FD 60D5 EB4A 0B29 ही लंगर है।
  • एक समझौता हो चुकी मशीन। वॉलेट ऐसे होस्ट की रक्षा नहीं कर सकता जो पहले ही हाथ से निकल चुका है।
  • एक झूठ बोलता नोड। zcd और वॉलेट पूर्ण नोड नहीं हैं; वे वही मानते हैं जो कोई नोड उन्हें बताता है। इसीलिए वॉलेट ऐसे नोड को मना कर देता है जिसकी chain id आपके घोषित नेटवर्क से असहमत हो, और इसीलिए --confirm-rpc मौजूद है — वॉलेट देखें।
  • जो कोई आपको ZCD बेच रहा हो। अभी कोई mainnet कॉइन है ही नहीं। Genesis हुआ ही नहीं है।