Мы привыкли к тому, что блокчейн работает как швейцарские часы. Но пользователи зачастую не догадываются, сколько на самом деле усилий уходит на поддержание и улучшение сети. Для этого даже приходится создавать тестовый дубликат — Testnet.

Что такое Mainnet

Mainnet (с английского: «основная сеть») — это полностью разработанный и функциональный блокчейн, который служит основной инфраструктурой для определенной криптовалюты.

Когда пользователь инициирует транзакцию в Mainnet, информация об операции транслируется на узлы сети. Затем майнеры или валидаторы подхватывают транзакцию и включают ее в блок, получая вознаграждение в криптовалюте. То есть в основной сети присутствует полноценный технический и экономический уровни, участники имеют реальные материальные выгоды и действуют в соответствии с правилами, продиктованными техническим устройством блокчейна.

Таким образом, термин Mainnet используется для описания полностью разработанного и развернутого на блокчейне продукта. То есть, когда мы говорим, например, о блокчейне Биткоина, мы имеем в виду именно Mainnet.

По сути, это живой, полностью функционирующий блокчейн, который позволяет пользователям делать то, что они ожидают от криптовалюты: от отправки и получения монет до разработки децентрализованных приложений и создания смарт-контрактов.

Что такое Testnet

Прежде чем блокчейн-проект достигнет стадии Mainnet, он обычно проходит тестировочную фазу, для которой разворачивается Testnet (с английского: «тестовая сеть»). После запуска Mainnet тестовая сеть обычно остается существовать параллельно основной, чтобы разработчики могли проверять новые изменения протокола или продукты на базе основного блокчейна.

Такая сеть предоставляет собой контролируемую среду, где разработчики могут опробовывать новый код, настраивать логику и экспериментировать, не влияя на живой Mainnet. Как только код проходит проверку качества в Testnet, он интегрируется в Mainnet и становится доступным для публики.

Таким образом, Testnet — это, как правило, «дубликат основного блокчейна», используемый для проверок и экспериментов. Его часто описывают как песочницу (sandbox), в которой разработчики могут опробовать новые функции и обновления без риска потери криптовалюты и без опасности навредить основной сети. Testnet нужна также для выявления и устранения потенциальных проблем и уязвимостей перед внедрением изменений в живую сеть.

Обычно Testnet разрабатывается таким образом, чтобы во всем имитировать Mainnet. При этом тестовые сети открыты для всех желающих. Каждый может присоединиться к Testnet, настроив соответствующий узел или даже просто при помощи кошелька. При этом у тестовых сетей есть свои особенности.

Чем тестовая сеть отличается от основной

Несмотря на то, что тестовые сети обычно создают по строгому подобию основных, разница все же присутствует. Рассмотрим на примере тестовой сети Биткоина:

  • Тестовая сеть – это песочница для тестирования, тогда как основная сеть — это рабочий блокчейн Биткоина. То есть назначение совершенно разное.
  • Из этого вытекает разница в экономическом смысле монет внутри сетей. В Testnet токены не имеют никакой реальной ценности, как и комиссии за транзакции. Поэтому стоимость транзакций в основной сети измеряется в реальной криптовалюте, а в тестовой для оплаты комиссии применяют ничего не стоящий токен Testnet. Очень часто разработчики могут получить монеты в тестовых сетях, просто попросив об этом.
  • Различаются значения ADDRESSVERSION. В Mainnet это 0x00, а в Testnet — 0x6F. Это сделано для того, чтобы адрес тестовой сети не мог быть валидным для основной.
  • Генезис блок, первый блок блокчейна, в Testnet, разумеется, отличается от генезис-блока Mainnet.
  • Mainnet и Testnet используют разные порты.
  • В тестовой сети меньше транзакций и узлов, чем в основной.
  • Сложность добычи блока в тестовой сети несколько иная. При этом в остальном механика майнинга тестовых монет не отличается от механики основной сети.
  • Проверка IsStandard() отключена, чтобы разработчики могли экспериментировать с нестандартными транзакциями.

Как можно убедиться, разница есть. Она нужна в основном для того, чтобы сделать сети сходными по правилам работы, но при этом не взаимопроникаемыми.

Тестовые сети Биткоина

Любопытно, что актуальная версия Testnet Биткоина — третья. Две предыдущие были по разным причинам заброшены. Так как Testnet это тоже блокчейн, с ним могут происходить события, усложняющие или компрометирующие работу тестовой сети.

Первую версию тестовой сети Биткоина, Testnet1, создали в 2010 году, но вскоре от нее пришлось отказаться. Помимо того, что в ней скопилось много мусора, мешающего тестам, так еще монеты этой сети люди стали пытаться обменивать на реальные деньги.

Поэтому в 2012 тесты перешли на Testnet2, а в 2013 году, с переходом на Bitcoin Core версии 0.7, была запущена Testnet3, которая остается актуальной по сей день. Все эти версии, разумеется, имеют разные генезис-блоки.

Testnet в Ethereum

В тестовых сетях Эфириума сложилась довольно интересная картина. Так как блокчейн довольно часто обновляется, порой очень радикально, как это случилось при переходе на PoS, тестовых сетей в нем было очень много.

Основные сети для PoW: Olympic, Morden, Ropsten и Sepolia, которая впоследствии перешла вслед за основной сетью на PoS (правда, с закрытым пулом валидаторов).

В феврале 2017 года сеть Ropsten подверглась крупной DOS-атаке. Для повышения безопасности некоторые последующие тестовые сети были запущены на базе алгоритма консенсуса Proof-of-Authority, который жертвовал децентрализацией в пользу безопасности. Это делалось за счет закрытого пула проверенных валидаторов в сети. В числе первых таких сетей можно назвать Kovan и Rinkeby.

Сейчас есть две основные поддерживаемые тестовые сети: Sepolia и Holešky (на базе Goerli). Sepolia — это сеть с ограниченным количеством валидаторов, в которой разработчики контрактов и приложений могут тестировать свои наработки. Сеть Holešky позволяет разработчикам протоколов проверять обновления протокола, стейкинг и валидацию транзакций.

История тестовых сетей в Ethereum представляется показательной, так как демонстрирует, что и они уязвимы для атак. При этом реакция на происшествия демонстрирует, что можно создавать тестовые сети с несколько измененным по сравнению с основной алгоритмом консенсуса.

Devnet

Помимо тестовых сетей, которые по сути представляют собой полноценный блокчейн, существуют и более легкая среда для тестов. Ее часто называют Devnet, и она не требуют подключения к тестовой сети и может быть запущена локально на устройстве разработчика. Это сильно упрощает первоначальную разработку, например, смарт-контрактов, — за счет того, что первые тесты можно проводить и без разворачивания контракта на тестовом блокчейне, просто симулировав поведение на единичном компьютере.

Devnet — это локальная среда разработки, которая используется для быстрого создания смарт-контрактов. С помощью Devnet смарт-контракт может взаимодействовать со смоделированными объектами блокчейна (майнеры, узлы, блоки).

Терминологическая путаница

Стоит отметить, что существует и альтернативное словоупотребление. Например, в сети Solana Devnet функционирует как песочница для тех, кто хочет поработать с протоколом в качестве пользователя, держателя токенов, разработчика приложений или валидатора сети. А вот Testnet блокчейна Solana служит средой, в которой тестируются последние обновления протокола.

То есть Devnet существует для тестирования продуктов на базе текущего протокола, а Testnet — для обкатки обновлений этого протокола.

Словоупотребление может сильно меняться от проекта к проекту. Более того, для описания тестовых сред могут даже быть другие термины: Simnet или Betanet.

Комбинаторику значений, которые могут все эти термины принимать, будет довольно сложно передать, не создав при этом большой путаницы. Поэтому может оказаться лучшим уточнять характеристики тестовой среды в документации.

Вывод

Взаимодействие между основной и тестовой сетью является неотъемлемой частью экосистемы любого серьезного блокчейна. В мире криптовалют существует довольно широкое разнообразие тестовых сред, на которых разработчики могут опробовать свои решения перед реализацией в основной сети. При этом в разных проектах такие среды могут быть разными по своим характеристикам и иметь отличающиеся названия: testnet, devnet, simnet, betanet.