ZYCORD docs
Português
ZycordDocumentaçãoTestnet pública

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âmetroTestnet públicaMainnet
namezycord-testnetzycord
chain_id21
genesis_time1791158400 — 2026-10-05T00:00:00Z1791331200 — 2026-10-07T00:00:00Z
randomx_key_interval512 blocos2048 blocos
h1_bond, h1_vm2.880 — por volta do dia 180.640 — por volta do dia 28
coinbase_maturity100 blocos240 blocos
target_block_seconds30 — idêntico
epoch_length2880 blocos, cerca de um dia — idêntico
ttl_max240 blocos, cerca de duas horas — idêntico
emission_ramp_blocks86.400, a rampa de recompensa de 30 dias — idêntico
founder_share, treasury_share_bps94% minerador, 3% fundador até 3.153.600, 3% tesouraria — idêntico
Apague seu diretório de dados antes de entrar numa rede reiniciada

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.