Testnet public
Le testnet public applique les règles de consensus du mainnet sous son propre identifiant de chaîne ; ce qu'il mesure est donc le comportement du mainnet et non le sien. Ses pièces ne valent rien, et c'est voulu.
Ce que c'est#
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
Exécutez cette commande avant de faire confiance à cette page. Un build qui affiche un
identifiant de genèse différent est un build sur une autre chaîne, et il ne se connectera pas à celle-ci — la
poignée de main est refusée avant qu'un bloc ne soit évalué. allocations 0 est l'affirmation sur le premine,
vérifiable plutôt que promise.
La genèse a eu lieu à 2026-10-05T00:00:00Z (unix 1791158400), deux jours avant
celle du mainnet : le testnet a répété le lancement avec le même binaire et la même procédure. Il est désormais
l'endroit où l'Ère 1 tourne en premier — le cEVM, les séquenceurs, les intents et les fills,
l'annuaire et le chemin forcé y sont actifs depuis la hauteur 2 880, son premier jour, tandis que le
mainnet atteint la même porte à la hauteur 80 640. Vous pouvez suivre la chaîne sur
testnet.zycord.com.
Il diffère du mainnet par dix valeurs, et nulle part ailleurs#
name, chain_id, genesis_target, max_target,
genesis_time, randomx_key_interval, h1_bond,
h1_vm, coinbase_maturity et launch_commit. Les hauteurs
d'activation sont ici plus basses à dessein : le testnet les a atteintes dès son premier jour, si bien que la machine est
éprouvée pendant des semaines avant que le mainnet n'arrive à la même porte. h1_bond évolue avec
h1_vm et n'ouvre rien sur aucun des deux réseaux : le bonding ne fait pas partie de l'Ère 1. L'engagement de lancement est
propre au testnet, de sorte que son bloc 1 répète le lancement du mainnet sans révéler celui du mainnet. Tout
le reste — undo_depth, target_block_seconds, la répartition de la subvention et
tout le barème de gas — est celui du mainnet, à dessein. Le barème de gas
surtout, parce que c'est lui qui fait que le comportement des frais de base mesuré ici est celui du mainnet plutôt que
celui de ce réseau. Un testnet doté de son propre barème de gas mesure une autre chaîne.
| Paramètre | Testnet public | 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 blocs | 2048 blocs |
h1_bond, h1_vm | 2 880 — vers le jour 1 | 80 640 — vers le jour 28 |
coinbase_maturity | 100 blocs | 240 blocs |
target_block_seconds | 30 — identique | |
epoch_length | 2880 blocs, environ une journée — identique | |
ttl_max | 240 blocs, environ deux heures — identique | |
emission_ramp_blocks | 86 400, la montée progressive de la récompense sur 30 jours — identique | |
founder_share, treasury_share_bps | 94 % au mineur, 3 % au fondateur jusqu'à 3 153 600, 3 % à la trésorerie — identique | |
Un testnet peut être réinitialisé depuis la genèse. Quand il l'est, ses pièces, son historique et ses listes de pairs disparaissent, le réseau prend un nouvel identifiant de chaîne, et un répertoire de données contenant l'ancienne chaîne est refusé au démarrage plutôt que mélangé en silence. Les deux réseaux se déconnectent aussi à la poignée de main, rien ne se reporte donc discrètement.
Rejoindre le réseau#
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, pas make build. Le
pow_engine du testnet est randomx-v2, la même fonction de travail que le mainnet. Un binaire
compilé sans le tag refuse de démarrer contre lui plutôt que de retomber sur le moteur de
développement, qui accepterait une seule passe BLAKE3 comme preuve de travail pour chaque en-tête rencontré.
Les binaires taggés portent le tag dans leur nom, de sorte que compiler les deux laisse
les deux sur le disque et que le nom de fichier dise quel moteur s'y trouve. Ailleurs dans ces pages, les
commandes sont écrites zcd et zycordd par concision ; sur ce réseau, ce sont
les versions -randomx.
Amorçage#
Le binaire porte les seeds du testnet : seed1.zycord.com à
seed4.zycord.com sur le port 19421. Les seeds du mainnet sont les mêmes hôtes sur
9421, et les deux réseaux se refusent mutuellement dès le handshake, si bien que rien ne se mélange. Un
binaire plus ancien qui désigne testnet.zycord.com comme seed doit être remplacé plutôt que
contourné. Pour fournir d'autres pairs à la place, ou en plus :
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
Soyez joignable si vous le pouvez#
Zycord ne fait pas de traversée de NAT. Un nœud avec --listen sur un port atteignable est
un endroit depuis lequel d'autres peuvent s'amorcer, et la proportion de tels nœuds est la condition
falsifiable sur laquelle repose toute la décision de ne pas traverser les NAT — elle est mesurée, non supposée.
zycordd --testnet --dir ./testnet \
--listen 0.0.0.0:9421 --advertise <public-address>:9421
Si vous ne pouvez pas rediriger de port, laissez --listen de côté et restez en périphérie. C'est une
manière parfaitement valable de participer. Vérifiez laquelle est la vôtre avec curl -s
localhost:9420/network — listening: true avec inbound: 0
après quelques minutes signifie que le port n'est en fait pas atteignable.
Obtenir des pièces#
Deux voies, et la seconde est celle autour de laquelle ce réseau a été conçu.
Le faucet#
L'explorateur testnet en fait tourner un. Il verse une petite somme à toute adresse que vous lui donnez, afin qu'un envoi, un remboursement et un balayage puissent être répétés sans allouer d'abord deux gibioctets à RandomX. Ce qu'il est et pourquoi il est construit ainsi fait l'objet d'une page à part.
Il existe sur ce réseau et sur aucun autre. Le faucet est une fonction de
l'explorateur désactivée par défaut, et l'activer exige de nommer un réseau — un nom comparé
à la chaîne que cet explorateur indexe réellement, avec mainnet refusé d'emblée.
Le mainnet n'a ni faucet ni premine, et c'est une vérification dans le binaire plutôt qu'une politique
que quelqu'un doit se rappeler.
Rien n'est frappé pour lui. Le faucet détient une clé ordinaire, signe un transfert ordinaire à travers
la même wallet/session qu'utilise la ligne de commande, et paie une demande par bloc parce qu'un
certificat porte l'état qu'il a lu et que deux certificats construits sur une même lecture de sa cellule entreraient en course.
Son solde vient du minage, un faucet vide reste donc vide jusqu'à ce que quelqu'un le remplisse.
Auto-minage#
La voie sans file d'attente et sans opérateur, et la même distribution que celle du mainnet :
zcd wallet new --out miner.json
zycordd --testnet --dir ./testnet \
--mine --payout $(zcd wallet address --key miner.json | awk '/^persistent/ {print $3}')
L'adresse de paiement doit être une adresse persistante (0x02) — la
ligne persistent de zcd wallet address, qui imprime aussi la prochaine adresse
à usage unique — et zycordd refuse toute autre chose plutôt que d'avertir. Pourquoi.
coinbase_maturity vaut 100, si bien que pendant à peu près les cent premiers blocs suivant votre première
récompense, seuls les mineurs peuvent transiger. Cette montée en charge est celle du mainnet et fait partie de ce que ce réseau
répète — et c'est la raison pour laquelle le faucet existe ici et ne peut pas exister là-bas : le faucet
raccourcit la montée en charge pour qui veut exercer un portefeuille, sur le seul réseau où la raccourcir
ne coûte rien.
Le minage alloue le jeu de données RandomX — environ 2 Gio, plus ~256 Mio par époque de clé conservée. Une machine qui vérifie confortablement ne peut pas nécessairement miner ; les budgets sont sous Minage.
Les pièces du testnet ne valent rien#
Par conception, et définitivement. Le réseau peut être réinitialisé depuis la genèse, ce à quoi sert un testnet. Quiconque propose de les acheter ou de les vendre monte une arnaque qui n'a même pas besoin d'une histoire.
Ce que ce réseau mesure#
Ce n'est pas une démonstration. Quatre choses pour lesquelles il existe afin de produire des chiffres :
- La pause de changement de clé. À 512 blocs, le renouvellement de clé RandomX survient à peu près toutes les quatre heures au lieu des dix-sept du mainnet ; la reconstruction du jeu de données est ainsi répétée assez souvent pour être mesurée plutôt que théorisée.
- Le comportement des frais de base sous le barème de gas du mainnet, raison pour laquelle ce barème n'est pas ajusté ici.
- La proportion de nœuds joignables, qui est la première condition de réouverture de la décision de ne pas faire de traversée de NAT.
- L'Ère 1 sous charge réelle : séquenceurs, fills et chemin forcé sur un réseau en service, des semaines avant que le mainnet n'atteigne sa porte.
Quand quelque chose semble anormal#
Faire tourner un nœud contient le chemin de diagnostic pour un nœud qui ne se synchronise pas, et la commande de réparation pour un répertoire de données contre lequel il refuse de démarrer. Les constats et les reproductions vont dans le gestionnaire de tickets ; le projet préfère le rapport au bénéfice du doute.