सार्वजनिक testnet
सार्वजनिक testnet अपनी ही chain id के तहत mainnet के consensus नियम ढोता है, इसलिए वह जो मापता है वह mainnet का व्यवहार है, अपना नहीं। उसके कॉइन का कोई मूल्य नहीं है और यही मंशा है।
यह क्या है#
zcd genesis --testnet
network zycord-testnet
chain id 2
params hash 0xc4a670f04575ac3aa6e670888e1a42ec877779fda8e5519e2637f4df93815b57
launch commit 0x83aeb709b14b43a0296666f006d99378049064f3e30d8191e074e09d485e2ff7
genesis id 0x81094507a4a083d01e24af21bddbf4d7eb496472a69c4b5dfb0d7a27c6b03b55
state root 0x4f45e604e1fd7ccf066e20e5fd41105373a0ba0d28aea8fc825b8795e880384f
genesis time 1791158400
cells written 6
allocations 0
इस पृष्ठ पर भरोसा करने से पहले वह कमांड चलाएँ। जो बिल्ड कोई और
genesis id छापे वह किसी और चेन का बिल्ड है, और वह इससे जुड़ेगा नहीं —
हैंडशेक किसी ब्लॉक के मूल्यांकन से पहले ही मना कर देता है। allocations 0 ही premine का दावा है,
जो वादे के बजाय जाँचने योग्य है।
genesis 2026-10-05T00:00:00Z (unix 1791158400) को हुआ था, mainnet से दो दिन पहले: testnet ने उसी बाइनरी और उसी प्रक्रिया से लॉन्च का पूर्वाभ्यास किया। अब यह वह जगह है जहाँ Era 1 सबसे पहले चलता है — cEVM, sequencers, intents और fills, directory और forced path यहाँ ऊँचाई 2,880 से, यानी इसके पहले ही दिन से, सक्रिय हैं, जबकि mainnet उसी द्वार पर ऊँचाई 80,640 पर पहुँचता है। आप चेन को testnet.zycord.com पर देख सकते हैं।
यह mainnet से केवल दस मानों में अलग है, और कहीं नहीं#
name, chain_id, genesis_target, max_target, genesis_time, randomx_key_interval, h1_bond, h1_vm, coinbase_maturity और launch_commit। सक्रियण ऊँचाइयाँ यहाँ जानबूझकर कम हैं: testnet उन तक अपने पहले ही दिन पहुँच गया, इसलिए mainnet के उसी द्वार पर पहुँचने से पहले हफ़्तों तक मशीन का अभ्यास होता है। h1_bond h1_vm के साथ चलता है और किसी भी नेटवर्क पर कुछ नहीं खोलता: bonding Era 1 का हिस्सा नहीं है। लॉन्च प्रतिबद्धता testnet की अपनी है, इसलिए उसका ब्लॉक 1 mainnet की प्रतिबद्धता प्रकट किए बिना mainnet के लॉन्च का पूर्वाभ्यास करता है। बाक़ी सब कुछ — undo_depth, target_block_seconds, सब्सिडी का बँटवारा, और पूरा gas शेड्यूल — जानबूझकर mainnet का ही है। gas शेड्यूल ख़ास तौर पर, क्योंकि वही यहाँ मापे गए base-fee व्यवहार को इस नेटवर्क का अपना नहीं, बल्कि mainnet का बनाता है। अपने ही gas शेड्यूल पर चलने वाला testnet एक अलग चेन को मापता है।
| पैरामीटर | सार्वजनिक testnet | Mainnet |
|---|---|---|
name | zycord-testnet | zycord |
chain_id | 2 | 1 |
genesis_time | 1791158400 — 2026-10-05T00:00:00Z | 1791331200 — 2026-10-07T00:00:00Z |
randomx_key_interval | 512 ब्लॉक | 2048 ब्लॉक |
h1_bond, h1_vm | 2,880 — लगभग दिन 1 | 80,640 — लगभग दिन 28 |
coinbase_maturity | 100 ब्लॉक | 240 ब्लॉक |
target_block_seconds | 30 — समान | |
epoch_length | 2880 ब्लॉक, लगभग एक दिन — समान | |
ttl_max | 240 ब्लॉक, लगभग दो घंटे — समान | |
emission_ramp_blocks | 86,400, 30-दिन का इनाम ramp — समान | |
founder_share, treasury_share_bps | 94% माइनर, 3% संस्थापक, समाप्ति ऊँचाई 3,153,600, 3% treasury — समान | |
किसी testnet को genesis से रीसेट किया जा सकता है। जब ऐसा होता है, उसके कॉइन, उसका इतिहास और उसकी पीयर सूचियाँ चली जाती हैं, नेटवर्क एक नई chain id ले लेता है, और पुरानी चेन रखने वाली डेटा डायरेक्टरी को चुपचाप मिलाने के बजाय शुरुआत में ही अस्वीकार कर दिया जाता है। दोनों नेटवर्क हैंडशेक पर भी अलग हो जाते हैं, इसलिए कुछ भी चुपके से आगे नहीं जाता।
जुड़ना#
make build-randomx # the testnet is randomx-v2; see below
# -> bin/zcd-randomx, bin/zycordd-randomx
./bin/zycordd-randomx --testnet --dir ./testnet
make build-randomx, न कि make build। testnet का
pow_engine है randomx-v2, वही work फ़ंक्शन जो mainnet का है। बिना टैग के
बनी बाइनरी विकास इंजन पर लौटने के बजाय इसके विरुद्ध शुरू होने से मना कर देती है, क्योंकि वह इंजन हर देखे गए
हेडर के लिए एक अकेले BLAKE3 पास को proof of work मान लेता।
टैग वाली बाइनरी अपने नामों में टैग ढोती हैं, ताकि दोनों बनाने पर दोनों डिस्क पर रहें और
फ़ाइल का नाम बता दे कि उसके भीतर कौन-सा इंजन है। इन पृष्ठों पर और जगह संक्षेप के लिए कमांड zcd
और zycordd लिखे गए हैं; इस नेटवर्क पर वे -randomx वाली जोड़ी हैं।
बूटस्ट्रैप#
बाइनरी में testnet के seeds शामिल हैं: पोर्ट 19421 पर seed1.zycord.com से
seed4.zycord.com तक। mainnet के seeds वही होस्ट हैं, पोर्ट
9421 पर, और दोनों नेटवर्क handshake पर एक-दूसरे को मना कर देते हैं, इसलिए कुछ भी नहीं मिलता। जो
पुरानी बाइनरी testnet.zycord.com को अपना seed बताती है उसके इर्द-गिर्द रास्ता निकालने के बजाय
उसे बदल देना चाहिए। इसके बजाय, या इसके साथ, दूसरे peers देने के लिए:
zycordd --testnet --dir ./testnet --peers-file peers.txt
zycordd --testnet --dir ./testnet --peers host:19421,otherhost:19421
zycordd --testnet --dir ./testnet --no-seeds --peers-file peers.txt
अगर हो सके तो dialable बनें#
Zycord NAT traversal नहीं करता। जिस नोड पर --listen किसी पहुँच-योग्य पोर्ट पर हो वह ऐसी जगह
है जहाँ से दूसरे बूटस्ट्रैप कर सकें, और ऐसे नोड का अनुपात ही वह मिथ्याकरणीय शर्त है जिस पर
traversal न करने का पूरा निर्णय टिका है — इसे मापा जाता है, मान नहीं लिया जाता।
zycordd --testnet --dir ./testnet \
--listen 0.0.0.0:9421 --advertise <public-address>:9421
अगर आप कोई पोर्ट फ़ॉरवर्ड नहीं कर सकते, तो --listen बंद रहने दें और परिधि पर रहें। भाग लेने का
यह भी एक बिलकुल अच्छा तरीक़ा है। आप कौन-से हैं यह curl -s
localhost:9420/network से जाँचें — कुछ मिनटों के बाद listening: true के साथ
inbound: 0 का मतलब है कि पोर्ट वास्तव में पहुँच-योग्य नहीं है।
कॉइन पाना#
दो रास्ते, और दूसरा वही है जिसके इर्द-गिर्द यह नेटवर्क डिज़ाइन किया गया था।
faucet#
testnet explorer एक faucet चलाता है। वह आपके दिए किसी भी पते पर थोड़ी रक़म भेजता है, ताकि पहले RandomX को दो गिबिबाइट दिए बिना ही भेजना, रिफ़ंड और स्वीप अभ्यास में किए जा सकें। वह क्या है और उसे इस तरह क्यों बनाया गया है इस पर अपना एक अलग पृष्ठ है।
यह इस नेटवर्क पर मौजूद है और किसी अन्य पर नहीं। faucet explorer की एक सुविधा है
जो डिफ़ॉल्ट रूप से बंद है, और इसे चालू करने के लिए एक नेटवर्क का नाम देना पड़ता है — और वह नाम उस चेन
के विरुद्ध जाँचा जाता है जिसे वह explorer वास्तव में इंडेक्स कर रहा है, जिसमें mainnet सिरे से
अस्वीकृत है। mainnet पर न faucet है, न premine, और यह किसी नीति के बजाय बाइनरी में मौजूद एक जाँच है
जिसे किसी को याद रखना नहीं पड़ता।
इसके लिए कुछ भी नया नहीं गढ़ा जाता। faucet एक साधारण कुंजी रखता है, उसी wallet/session के
ज़रिए एक साधारण हस्तांतरण पर हस्ताक्षर करता है जिसे कमांड लाइन इस्तेमाल करती है, और प्रति ब्लॉक एक दावा चुकाता
है, क्योंकि एक सर्टिफिकेट वह स्टेट ढोता है जो उसने पढ़ा और अपने cell की एक ही पठन पर बने दो सर्टिफिकेट आपस में
दौड़ लगाते। उसका शेष माइनिंग से आता है, इसलिए ख़ाली faucet तब तक ख़ाली रहता है जब तक कोई उसे दोबारा न भरे।
ख़ुद माइनिंग करना#
वह रास्ता जिसमें न क़तार है न ऑपरेटर, और वही वितरण जो mainnet को मिलता है:
zcd wallet new --out miner.json
zycordd --testnet --dir ./testnet \
--mine --payout $(zcd wallet address --key miner.json | awk '/^persistent/ {print $3}')
भुगतान पता persistent (0x02) होना चाहिए —
zcd wallet address की persistent पंक्ति, जो अगला one-shot address भी
छापता है — और zycordd चेतावनी देने के बजाय किसी और को मना कर देता है। क्यों।
coinbase_maturity 100 है, इसलिए आपके पहले इनाम के बाद लगभग पहले सौ ब्लॉकों तक केवल माइनर ही
लेन-देन कर सकते हैं। वह ढलान mainnet की है और इस नेटवर्क के अभ्यास का हिस्सा है — और यही वजह है कि
faucet यहाँ मौजूद है और वहाँ मौजूद नहीं हो सकता: faucet उस व्यक्ति के लिए ढलान छोटी करता है जो वॉलेट
आज़माना चाहता है, ठीक उसी एक नेटवर्क पर जहाँ उसे छोटा करने की कोई क़ीमत नहीं।
माइनिंग RandomX dataset आवंटित करती है — लगभग 2 GiB, और साथ में प्रति रखे गए key epoch ~256 MiB। जो मशीन आराम से सत्यापन कर सकती है वह ज़रूरी नहीं कि माइन भी कर सके; बजट माइनिंग के तहत हैं।
testnet कॉइन का कोई मूल्य नहीं है#
यह डिज़ाइन से है, और स्थायी रूप से। नेटवर्क को genesis से रीसेट किया जा सकता है, जिसके लिए ही testnet होता है। जो कोई इन्हें खरीदने या बेचने की पेशकश करे, वह एक ऐसा घोटाला चला रहा है जिसे कोई कहानी तक नहीं चाहिए।
यह नेटवर्क क्या माप रहा है#
यह कोई डेमो नहीं है। चार चीज़ें जिनके लिए आँकड़े जुटाने को यह मौजूद है:
- कुंजी बदलने पर लगने वाला ठहराव। 512 ब्लॉक पर RandomX की दोबारा कुंजी mainnet के सत्रह घंटों के बजाय लगभग हर चार घंटे में आती है, इसलिए dataset का पुनर्निर्माण इतनी बार अभ्यास में आता है कि उस पर सिद्धांत गढ़ने के बजाय उसे मापा जा सके।
- mainnet के gas शेड्यूल के तहत base-fee का व्यवहार, यही वजह है कि यहाँ शेड्यूल में फेरबदल नहीं किया गया।
- dialable नोड का अनुपात, जो NAT traversal न करने के निर्णय को दोबारा खोलने की पहली शर्त है।
- वास्तविक भार के तहत Era 1: एक जीवित नेटवर्क पर sequencers, fills और forced path, mainnet के अपने द्वार तक पहुँचने से हफ़्तों पहले।
जब कुछ ग़लत लगे#
नोड चलाना में उस नोड के लिए निदान मार्ग है जो sync नहीं होता, और उस डेटा डायरेक्टरी के लिए मरम्मत कमांड है जिसके विरुद्ध वह शुरू होने से इनकार करता है। निष्कर्ष और पुनरुत्पादन issue ट्रैकर में जाते हैं; परियोजना संदेह का लाभ पाने के बजाय रिपोर्ट पाना पसंद करेगी।