Testnet pública
A testnet pública carrega as regras de consenso da mainnet sob seu próprio chain id, de modo que o que ela mede é o comportamento da mainnet e não o dela mesma. Suas moedas não valem nada, e é essa a intenção.
O que ela é#
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
Execute esse comando antes de confiar nesta página. Um build que imprime um id de
gênese diferente é um build em outra cadeia, e não vai se conectar a esta — o
handshake recusa antes que um bloco seja avaliado. allocations 0 é a alegação sobre premine,
verificável em vez de prometida.
A gênese foi 2026-10-05T00:00:00Z (unix 1791158400), dois dias antes da
gênese da mainnet: a testnet ensaiou o lançamento com o mesmo binário e o mesmo procedimento. Agora ela é
onde a Era 1 roda primeiro — a cEVM, os sequenciadores, os intents e fills, o
diretório e o caminho forçado estão ativos aqui desde a altura 2.880, seu primeiro dia, enquanto
a mainnet chega ao mesmo portão na altura 80.640. Você pode acompanhar a cadeia em
testnet.zycord.com.
Ela difere da mainnet em dez valores e em nada mais#
name, chain_id, genesis_target, max_target,
genesis_time, randomx_key_interval, h1_bond,
h1_vm, coinbase_maturity e launch_commit. As alturas de
ativação são menores aqui de propósito: a testnet chegou a elas no primeiro dia, então a máquina é
exercitada por semanas antes de a mainnet chegar ao mesmo portão. O h1_bond acompanha o
h1_vm e não abre nada em nenhuma das redes: o bonding não faz parte da Era 1. O compromisso de lançamento é
próprio da testnet, então o bloco 1 dela ensaia o lançamento da mainnet sem revelar o da mainnet. Todo o
resto — undo_depth, target_block_seconds, a divisão do subsídio e
toda a tabela de gas — é o da mainnet, de propósito. A tabela de gas
principalmente, porque é ela que faz o comportamento da taxa base medido aqui ser o da mainnet, e não o
desta rede. Uma testnet com tabela de gas própria mede outra cadeia.
| Parâmetro | Testnet pública | 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 blocos | 2048 blocos |
h1_bond, h1_vm | 2.880 — por volta do dia 1 | 80.640 — por volta do dia 28 |
coinbase_maturity | 100 blocos | 240 blocos |
target_block_seconds | 30 — idêntico | |
epoch_length | 2880 blocos, cerca de um dia — idêntico | |
ttl_max | 240 blocos, cerca de duas horas — idêntico | |
emission_ramp_blocks | 86.400, a rampa de recompensa de 30 dias — idêntico | |
founder_share, treasury_share_bps | 94% minerador, 3% fundador até 3.153.600, 3% tesouraria — idêntico | |
Uma testnet pode ser reiniciada a partir da gênese. Quando isso ocorre, suas moedas, seu histórico e suas listas de pares desaparecem, a rede recebe um chain id novo, e um diretório de dados contendo a cadeia antiga é recusado na inicialização em vez de silenciosamente misturado. As duas redes também se desconectam no handshake, então nada se transfere sem alarde.
Participando#
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, não make build. O
pow_engine da testnet é randomx-v2, a mesma função de trabalho da mainnet. Um binário
construído sem a tag se recusa a iniciar contra ela em vez de recorrer ao motor de desenvolvimento,
que aceitaria uma única passagem BLAKE3 como proof of work para todo cabeçalho que já visse.
Os binários com a tag carregam a tag em seus nomes, de modo que construir ambos deixa
os dois em disco e o nome do arquivo diz qual motor está dentro dele. Em outras partes destas páginas os
comandos são escritos zcd e zycordd por brevidade; nesta rede esses
são o par -randomx.
Bootstrap#
O binário traz os seeds da testnet: de seed1.zycord.com a
seed4.zycord.com na porta 19421. Os seeds da mainnet são os mesmos hosts na
9421, e as duas redes recusam uma à outra no handshake, então nada se mistura. Um
binário mais antigo que indique testnet.zycord.com como seed deve ser substituído, e não
contornado. Para fornecer outros pares em vez disso, ou além deles:
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
Seja discável se puder#
O Zycord não faz travessia de NAT. Um nó com --listen em uma porta alcançável é
um lugar de onde outros podem fazer bootstrap, e a proporção de nós assim é a condição
falseável sobre a qual repousa toda a decisão de não fazer travessia — ela é medida, não presumida.
zycordd --testnet --dir ./testnet \
--listen 0.0.0.0:9421 --advertise <public-address>:9421
Se você não conseguir encaminhar uma porta, deixe o --listen desligado e seja periferia. Essa é uma
forma perfeitamente boa de participar. Verifique qual é o seu caso com curl -s
localhost:9420/network — listening: true com inbound: 0
depois de alguns minutos significa que a porta não está de fato alcançável.
Conseguindo moedas#
Dois caminhos, e o segundo é aquele em torno do qual esta rede foi projetada.
O faucet#
O explorador da testnet mantém um. Ele paga uma quantia pequena para qualquer endereço que você lhe der, para que um envio, um reembolso e uma varredura possam ser ensaiados sem alocar dois gibibytes ao RandomX primeiro. O que ele é e por que é construído dessa forma é uma página à parte.
Ele existe nesta rede e em nenhuma outra. O faucet é um recurso do
explorador que fica desligado por padrão, e habilitá-lo exige nomear uma rede — um nome conferido
contra a cadeia que aquele explorador está de fato indexando, com mainnet recusado de saída.
A mainnet não tem faucet nem premine, e isso é uma verificação no binário em vez de uma política que
alguém precise lembrar.
Nada é emitido para ele. O faucet guarda uma chave comum, assina uma transferência comum através
da mesma wallet/session que a linha de comando usa, e paga uma solicitação por bloco porque um
certificado carrega o estado que leu e dois construídos sobre uma mesma leitura de sua célula disputariam.
Seu saldo vem da mineração, então um faucet vazio continua vazio até que alguém o reabasteça.
Automineração#
O caminho sem fila e sem operador, e a mesma distribuição que a mainnet recebe:
zcd wallet new --out miner.json
zycordd --testnet --dir ./testnet \
--mine --payout $(zcd wallet address --key miner.json | awk '/^persistent/ {print $3}')
O pagamento precisa ser para um endereço persistente (0x02) — a linha
persistent do zcd wallet address, que também imprime o próximo endereço
de uso único — e o zycordd recusa qualquer outro em vez de avisar. Por quê.
O coinbase_maturity é 100, então por aproximadamente os primeiros cem blocos após sua primeira
recompensa apenas mineradores podem transacionar. Essa rampa é a da mainnet e faz parte do que esta rede está
ensaiando — e é a razão pela qual o faucet existe aqui e não pode existir lá: o faucet
encurta a rampa para quem quer exercitar uma carteira, na única rede onde encurtá-la
não custa nada.
Minerar aloca o dataset do RandomX — cerca de 2 GiB, mais ~256 MiB por época de chave mantida. Uma máquina que consegue verificar confortavelmente não consegue necessariamente minerar; os orçamentos estão em Mineração.
As moedas da testnet não valem nada#
Por design, e permanentemente. A rede pode ser reiniciada a partir da gênese, que é para isso que serve uma testnet. Qualquer um que ofereça comprar ou vender essas moedas está aplicando um golpe que nem precisa de uma história.
O que esta rede está medindo#
Não é uma demonstração. Quatro coisas para as quais ela existe para produzir números:
- A pausa de troca de chave. Com 512 blocos, a retroca do RandomX acontece a cada quatro horas aproximadamente, em vez das dezessete da mainnet, de modo que a reconstrução do dataset é ensaiada com frequência suficiente para ser medida em vez de teorizada.
- O comportamento da taxa base sob a tabela de gas da mainnet, que é a razão de a tabela não ser ajustada aqui.
- A proporção de nós acessíveis, que é a primeira condição para reabrir a decisão de não fazer travessia de NAT.
- A Era 1 sob carga real: sequenciadores, fills e o caminho forçado em uma rede ativa, semanas antes de a mainnet chegar ao seu portão.
Quando algo parece errado#
Rodando um nó tem o caminho de diagnóstico para um nó que não sincroniza, e o comando de reparo para um diretório de dados contra o qual ele se recusa a iniciar. Achados e reproduções pertencem ao rastreador de issues; o projeto prefere ter o relato a ter o benefício da dúvida.