सार्वजनिक testnet
सार्वजनिक testnet अपनी ही chain id के तहत mainnet के consensus नियम ढोता है, इसलिए वह जो मापता है वह mainnet का व्यवहार है, अपना नहीं। उसके कॉइन का कोई मूल्य नहीं है और यही मंशा है।
यह क्या है#
zcd genesis --testnet
network zycord-testnet
chain id 2
params hash 0x0b732489dee8fd2bcb5fa37b513b2ea10edc616bd664ba5b55c69952f63e2c1b
genesis id 0xc1b21b079b3dfe781c40a187326bb8dbbcf0fb97164d6fdf7a7d6a536c74705b
state root 0x6974f84b8088039ab721fd6be6ac72b73845e5dc93f0b5625b4e9c564ccf73e3
genesis time 1789430400
cells written 6
allocations 0
इस पृष्ठ पर भरोसा करने से पहले वह कमांड चलाएँ। जो बिल्ड कोई और
genesis id छापे वह किसी और चेन का बिल्ड है, और वह इससे जुड़ेगा नहीं —
हैंडशेक किसी ब्लॉक के मूल्यांकन से पहले ही मना कर देता है। allocations 0 ही premine का दावा है,
जो वादे के बजाय जाँचने योग्य है।
Genesis 2026-09-15T00:00:00Z था (unix 1789430400)। आप चेन को
testnet.zycord.com पर देख सकते हैं।
यह mainnet से आठ मानों में अलग है और कहीं नहीं#
name, chain_id, genesis_target, max_target,
genesis_time, randomx_key_interval, h1_bond और
h1_vm। आख़िरी दो सक्रियण ऊँचाइयाँ हैं, और यहाँ जानबूझकर कम रखी गई हैं:
testnet इन तक अपने पहले और तीसरे दिन पहुँच जाता है, इसलिए mainnet के उन्हीं द्वारों तक पहुँचने से हफ़्तों पहले
मशीन को आज़मा लिया जाता है। बाक़ी सब कुछ —
undo_depth, target_block_seconds, coinbase_maturity, और
पूरा gas शेड्यूल — जानबूझकर mainnet का ही है। ख़ासकर gas शेड्यूल,
क्योंकि यही यहाँ मापे गए base-fee व्यवहार को इस नेटवर्क के बजाय mainnet का बनाता है।
अपने ही gas शेड्यूल पर चलने वाला testnet किसी और चेन को मापता है।
| पैरामीटर | सार्वजनिक testnet | Mainnet |
|---|---|---|
name | zycord-testnet | zycord |
chain_id | 2 | 1 |
genesis_time | 1789430400 — 2026-09-15T00:00:00Z | 1790812800 — 2026-10-01T00:00:00Z |
randomx_key_interval | 512 ब्लॉक | 2048 ब्लॉक |
h1_bond | 2,880 — लगभग दिन 1 | 40,320 — लगभग दिन 14 |
h1_vm | 8,640 — लगभग दिन 3 | 80,640 — लगभग दिन 28 |
target_block_seconds | 30 — समान | |
coinbase_maturity | 100 — समान | |
epoch_length | 2880 ब्लॉक, लगभग एक दिन — समान | |
ttl_max | 240 ब्लॉक, लगभग दो घंटे — समान | |
treasury_share_bps | 300, यानी 3% — समान | |
किसी testnet को genesis से रीसेट किया जा सकता है। जब ऐसा होता है, उसके कॉइन, उसका इतिहास और उसकी पीयर सूचियाँ चली जाती हैं, नेटवर्क एक नई chain id ले लेता है, और पुरानी चेन रखने वाली डेटा डायरेक्टरी को चुपचाप मिलाने के बजाय शुरुआत में ही अस्वीकार कर दिया जाता है। दोनों नेटवर्क हैंडशेक पर भी अलग हो जाते हैं, इसलिए कुछ भी चुपके से आगे नहीं जाता।
जुड़ना#
make build-randomx # the testnet is randomx-v1; see below
# -> bin/zcd-randomx, bin/zycordd-randomx
./bin/zycordd-randomx --testnet --dir ./testnet
make build-randomx, न कि make build। testnet का
pow_engine है randomx-v1, वही work फ़ंक्शन जो mainnet का है। बिना टैग के
बनी बाइनरी विकास इंजन पर लौटने के बजाय इसके विरुद्ध शुरू होने से मना कर देती है, क्योंकि वह इंजन हर देखे गए
हेडर के लिए एक अकेले BLAKE3 पास को proof of work मान लेता।
टैग वाली बाइनरी अपने नामों में टैग ढोती हैं, ताकि दोनों बनाने पर दोनों डिस्क पर रहें और
फ़ाइल का नाम बता दे कि उसके भीतर कौन-सा इंजन है। इन पृष्ठों पर और जगह संक्षेप के लिए कमांड zcd
और zycordd लिखे गए हैं; इस नेटवर्क पर वे -randomx वाली जोड़ी हैं।
बूटस्ट्रैप#
बाइनरी इस नेटवर्क के लिए एक seed पता ढोती है, और किसी अन्य के लिए कुछ नहीं। शुरू करने से पहले आपको कोई पीयर ढूँढ़ना नहीं पड़ता — ऊपर दी गई कमांड अंतर्निहित seed से जुड़ जाती है। इसके बजाय, या इसके साथ, अपना पता देने के लिए:
zycordd --testnet --dir ./testnet --peers-file peers.txt
zycordd --testnet --dir ./testnet --peers host:9421,host2:9421
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)
चाहें तो नेटवर्क खुलने से पहले ही इसे शुरू कर दें — इसका इस्तेमाल इसी तरह करने की मंशा है। जिस नोड की घड़ी उस सबसे पुरानी टाइमस्टैम्प तक नहीं पहुँची जो अगला ब्लॉक ढो सकता है, वह ब्लॉक बनाने से मना कर देता है, बताता है कि कितना इंतज़ार बाक़ी है, और समय आने पर ख़ुद माइनिंग शुरू कर देता है। न कुछ शेड्यूल करना है, न कुछ दोबारा शुरू करना, और इंतज़ार के पूरे समय वह पीयर बनाता और सिंक करता रहता है।
भुगतान पता persistent (0x02) होना चाहिए —
zcd wallet 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 न करने के निर्णय को दोबारा खोलने की पहली शर्त है।
- genesis से पहले का इंतज़ार, और क्या ईमानदारी से जल्दी की गई शुरुआत वाक़ई समय पर हुई शुरुआत बन जाती है, बिना कुछ दोबारा शुरू किए।
जब कुछ ग़लत लगे#
नोड चलाना में उस नोड के लिए निदान मार्ग है जो sync नहीं होता, और उस डेटा डायरेक्टरी के लिए मरम्मत कमांड है जिसके विरुद्ध वह शुरू होने से इनकार करता है। निष्कर्ष और पुनरुत्पादन issue ट्रैकर में जाते हैं; परियोजना संदेह का लाभ पाने के बजाय रिपोर्ट पाना पसंद करेगी।