Публичный testnet
Публичный testnet несёт правила консенсуса mainnet под собственным идентификатором цепочки, так что измеряет он поведение 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
Выполните эту команду, прежде чем доверять этой странице. Сборка, печатающая другой
идентификатор генезис-блока, — это сборка на другой цепочке, и она к этой не подключится —
рукопожатие откажет ещё до оценки блока. allocations 0 — это утверждение об отсутствии премайна,
проверяемое, а не обещанное.
Генезис был 2026-10-05T00:00:00Z (unix 1791158400), за два дня до генезиса mainnet: testnet репетировал запуск с тем же бинарником и по той же процедуре. Теперь это место, где Era 1 запускается первой — cEVM, секвенсоры, интенты и fill, каталог и принудительный путь активны здесь с высоты 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 и ни в одной из сетей ничего не открывает: внесение залога не входит в Era 1. Стартовое сообщение у testnet своё, так что его блок 1 репетирует запуск mainnet, не раскрывая стартового сообщения mainnet. Всё остальное — undo_depth, target_block_seconds, распределение субсидии и вся тарифная сетка gas — намеренно взято из mainnet. Тарифная сетка gas — особенно, потому что именно она делает измеряемое здесь поведение базовой комиссии поведением mainnet, а не собственным поведением этой сети. Testnet со своей тарифной сеткой gas измеряет другую цепочку.
| Параметр | Публичный 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-дневный разгон вознаграждения — идентично | |
founder_share, treasury_share_bps | 94% майнеру, 3% основателю до 3 153 600, 3% казне — идентично | |
Testnet может быть сброшен от генезис-блока. Когда это происходит, его монеты, его история и его списки пиров исчезают, сеть получает новый идентификатор цепочки, а каталог данных со старой цепочкой отвергается при запуске, а не смешивается молча. Две сети к тому же разъединяются на рукопожатии, так что ничего не переносится незаметно.
Подключение#
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, та же рабочая функция, что и в mainnet. Бинарник,
собранный без этого тега, откажется запускаться против неё, а не откатится к отладочному
движку, который принимал бы один проход BLAKE3 как доказательство работы для любого встреченного заголовка.
Бинарники с тегом несут этот тег в своих именах, так что сборка обоих оставляет
оба на диске, а имя файла говорит, какой движок внутри. В других местах этих страниц команды
записаны как zcd и zycordd для краткости; в этой сети это
пара с суффиксом -randomx.
Начальная загрузка#
Бинарник содержит сиды testnet: с seed1.zycord.com по
seed4.zycord.com на порту 19421. Сиды mainnet — те же хосты на
9421, и две сети отвергают друг друга при рукопожатии, так что ничего не смешивается.
Старый бинарник, в котором сидом указан testnet.zycord.com, следует заменить, а не обходить
это. Чтобы указать другие пиры вместо них или в дополнение к ним:
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
Будьте доступны для входящих, если можете#
Zycord не занимается обходом NAT. Узел с --listen на достижимом порту — это
место, откуда другие могут начать загрузку, а доля таких узлов — фальсифицируемое
условие, на котором держится всё решение отказаться от обхода NAT — она измеряется, а не предполагается.
zycordd --testnet --dir ./testnet \
--listen 0.0.0.0:9421 --advertise <public-address>:9421
Если пробросить порт не получается, не указывайте --listen и будьте периферией. Это
вполне достойный способ участвовать. Проверить, кто вы, можно командой curl -s
localhost:9420/network — listening: true при inbound: 0
спустя несколько минут означает, что порт на деле недостижим.
Как получить монеты#
Два пути, и второй — тот, вокруг которого эта сеть и проектировалась.
Кран#
Обозреватель testnet держит его. Он выплачивает небольшую сумму на любой указанный вами адрес, чтобы отправку, возврат и подметание можно было отрепетировать, не выделяя предварительно два гибибайта под RandomX. Что это и почему устроено именно так — отдельная страница.
Он существует в этой сети и ни в какой другой. Кран — функция
обозревателя, выключенная по умолчанию, а её включение требует назвать сеть — имя сверяется
с цепочкой, которую этот обозреватель действительно индексирует, причём mainnet отвергается сразу.
В mainnet нет ни крана, ни премайна, и это проверка в бинарнике, а не правило, которое кто-то
должен помнить.
Для него ничего не выпускается. Кран держит обычный ключ, подписывает обычный перевод через
ту же wallet/session, что и командная строка, и выдаёт одну заявку на блок, потому что
сертификат несёт прочитанное им состояние, и два сертификата, построенных на одном чтении своей ячейки, столкнулись бы.
Его баланс берётся из майнинга, так что пустой кран останется пустым, пока кто-нибудь его не пополнит.
Самостоятельный майнинг#
Путь без очереди и без оператора, с тем же распределением, что и в mainnet:
zcd wallet new --out miner.json
zycordd --testnet --dir ./testnet \
--mine --payout $(zcd wallet address --key miner.json | awk '/^persistent/ {print $3}')
Адрес выплат обязан быть постоянным (0x02) — строка
persistent в выводе zcd wallet address, который печатает и следующий одноразовый
адрес, — а zycordd отвергает любой другой, а не предупреждает. Почему.
coinbase_maturity равно 100, поэтому примерно первую сотню блоков после вашего первого
вознаграждения транзакции доступны только майнерам. Этот разгон взят из mainnet и составляет часть того, что эта сеть
репетирует — и именно поэтому кран существует здесь и не может существовать там: кран
сокращает разгон тому, кто хочет опробовать кошелёк, в той единственной сети, где сокращение
ничего не стоит.
Майнинг выделяет набор данных RandomX — около 2 ГиБ, плюс ~256 МиБ на каждую удерживаемую эпоху ключа. Машина, способная спокойно проверять, не обязательно способна майнить; бюджеты приведены в разделе Майнинг.
Монеты testnet ничего не стоят#
По замыслу и навсегда. Сеть может быть сброшена от генезис-блока, для чего testnet и существует. Любой, кто предлагает купить или продать их, ведёт мошенничество, которому не нужна даже легенда.
Что измеряет эта сеть#
Это не демонстрация. Четыре вещи, ради чисел о которых она существует:
- Пауза при смене ключа. При 512 блоках повторное задание ключа RandomX случается примерно раз в четыре часа вместо семнадцати в mainnet, так что перестроение набора данных репетируется достаточно часто, чтобы его измерять, а не рассуждать о нём.
- Поведение базовой комиссии при тарифной сетке gas от mainnet, из-за чего сетка здесь и не правится.
- Доля узлов, доступных для входящих подключений — первое условие пересмотра решения об отказе от обхода NAT.
- Era 1 под реальной нагрузкой: секвенсоры, fill и принудительный путь в живой сети, за недели до того, как mainnet достигнет своего рубежа.
Когда что-то выглядит не так#
В разделе Запуск узла описан путь диагностики для узла, который не синхронизируется, и команда починки для каталога данных, против которого он отказывается стартовать. Находки и способы воспроизведения — в трекере задач; проекту нужен отчёт, а не презумпция невиновности.