Перейти к основному содержимому

Запустить локальную сеть

Это руководство создаёт приватный узел usernet, два кошелька и майнер на одной машине. mainnet не используется.

Сначала соберите три бинарника: собрать бинарники.

Зачем usernet​

СетьФлагP2P портAPI портИспользование
Mainnetнет34143413Реальное значение. См. подключение к mainnet
Floonet--floonet1341413413Тестовая сеть без публичного сида
Usernet--usernet2341423413Приватная цепочка на локальной машине

Используйте usernet. Он не требует сид-пиров и работает как приватная цепочка на вашей машине. Справочник CLI содержит полные смещения для каждой сети.

DNS-сид Floonet не резолвится, и ни один публичный узел не запущен, поэтому узел floonet не находит пиров на высоте блока 0, если не настроить пиры вручную.

Ни одна из тестовых сетей не производит блоки самостоятельно. Для этого и нужен майнер.

Сначала структура​

Расположение файлов здесь важнее обычного, потому что оба бинарника разрешают свою конфигурацию из текущего рабочего каталога, прежде чем обратиться к ~/.epic/<network>. Каталог, из которого выполняется запуск, является селектором экземпляра — именно это позволяет одному бинарнику кошелька управлять несколькими кошельками.

Рабочая структура каталогов:

epic-local/
.epic/user/ node data, the three binaries,
epic-server.toml and epic-miner.toml
wallet_alice/ epic-wallet.toml and wallet_data/, no binary
wallet_bob/ same

Узел и майнер безопасно разделяют один каталог, поскольку имена их файлов конфигурации различаются. Держите по одному кошельку в каждом каталоге и запускайте общий бинарник epic-wallet из каталога того кошелька, с которым хотите работать.

1. Настроить и запустить узел​

Сгенерируйте конфигурацию из каталога цепочки, чтобы пути указывали туда:

epic --usernet server config

Затем внесите четыре изменения. only_randomx меняет консенсус, поэтому комментарий в блоке является частью инструкции:

.epic/user/epic-server.toml
[server]
# Изменяет консенсус. Если задать это на цепочке, в которой уже есть блоки, удалите
# chain_data: блоки, намайненные по старой политике, не пройдут валидацию по новой.
only_randomx = true

[server.p2p_config]
peer_min_preferred_outbound_count = 0

[server.stratum_mining_config]
enable_stratum_server = true

[logging]
log_to_file = true

Каждое из них обязательно.

only_randomx = true принудительно устанавливает политику 100% RandomX. Epic обычно назначает каждой высоте один из нескольких алгоритмов, а одиночный CPU-майнер может отвечать только на RandomX-задачи. В реальной сети остальные задачи закрывают другие майнеры; в вашей собственной цепочке этого нет, поэтому без этого флага майнер простаивает на большинстве высот. См. политику блоков.

peer_min_preferred_outbound_count = 0 не записывается в сгенерированный файл, поэтому добавьте строку вручную. Узел ниже этого порога сообщает о себе как о синхронизирующемся бесконечно, а синхронизирующийся узел отказывается выдавать задачи для майнинга. Usernet не имеет пиров по замыслу, поэтому он никогда не достигнет значения по умолчанию равного 4.

enable_stratum_server = true включает порт майнинга. По умолчанию он отключён в каждой сети, включая usernet.

log_to_file = true — потому что лог понадобится, когда что-то не будет майниться.

Пока не трогайте burn_reward = false и wallet_listener_url. Сгенерированная конфигурация usernet уже указывает на порт 23415, который будет принадлежать Alice.

epic --usernet server run

No peers available, can not sync в логе — это нужное состояние, а не ошибка. Оно означает, что узел прекратил ожидание пиров, что и позволяет ему обслуживать задачи для майнинга.

2. Создать два кошелька​

Каждый в своём каталоге, с использованием -w, чтобы кошелёк был создан там, а не в ~/.epic/user:

cd wallet_alice && epic-wallet --usernet init -w
cd ../wallet_bob && epic-wallet --usernet init -w

-w не принимает значения. Он указывается только в init, поэтому последующие команды используют --current_dir <path>, либо их выполняют из каталога кошелька.

Запишите обе фразы восстановления. Здесь они бесполезны, но привычка — нет.

Два кошелька на одной машине конфликтуют по двум портам, поэтому отредактируйте конфигурацию Bob:

wallet_bob/epic-wallet.toml
api_listen_port = 23425 # Foreign API. У Алисы остаётся 23415
owner_api_listen_port = 3421 # Owner API, см. ниже

[tor]
use_tor_listener = false

Foreign-порт определяется сетью, поэтому usernet уже сместил его относительно mainnet. Owner-порт не смещается в зависимости от сети. Он равен 3420 везде, поэтому второй кошелёк на той же машине всегда конфликтует с ним вне зависимости от цепочки. Установите use_tor_listener = false в обоих кошельках согласно отключить слушатель Tor. Обоим кошелькам также необходим раздел [epicbox], прежде чем транспорт epicbox заработает в этой цепочке; это настраивается в запустить локальный epicbox-релей.

Wallets outside ~/.epic get their own API secret, and that is fine

Поскольку -w создал каждый кошелёк в собственном каталоге, каждый сгенерировал собственный .api_secret, а не использовал общий с узлом. Это не имеет значения: кошелёк передаёт этот секрет только для поиска onion-адреса Tor, а все остальные запросы к узлу направляются к поверхностям, не требующим учётных данных. См. учётные данные, которые кошелёк передаёт узлу.

Не комментируйте api_secret_path в epic-server.toml ради упрощения. Без секрета узел отвечает 401 на /v1 и /v2/owner всем, включая вас с -u, вместо того чтобы открыть их.

3. Майнить монеты в кошелёк Alice​

Сервер Stratum запрашивает у слушателя кошелька сборку каждого coinbase, поэтому Алиса должна быть в режиме прослушивания, прежде чем блоки приобретут какую-либо ценность.

# в wallet_alice
epic-wallet --usernet listen -n

Затем запустить майнер из каталога цепочки, разместив рядом epic-miner.toml:

.epic/user/epic-miner.toml
[mining]
algorithm = "RandomX"
stratum_server_addr = "127.0.0.1:23416"
miner_plugin_config = []

[mining.randomx_config]
threads = 3
jit = true

miner_plugin_config обязателен даже для RandomX и должен располагаться внутри [mining] выше любой подтаблицы, иначе TOML привяжет его к неправильной таблице и майнер завершится с missing field 'miner_plugin_config'.

epic-miner

Успешный результат выглядит так:

INFO Mining: RandomX at 475 hps (hashes per second)
INFO Block Found!!
INFO Share Accepted!!

Наблюдайте, как растёт баланс Алисы. Каждый блок приносит 14.5792 EPIC на эре 1 — это базовая награда 16 EPIC за вычетом сбора фонда в размере 8.88%:

epic-wallet --usernet info

Зрелость coinbase на usernet составляет 3 блока (USER_TESTING_COINBASE_MATURITY), тогда как на mainnet — 1,440. См. тайминг эмиссии. Собственный порог подтверждений кошелька задаётся отдельно, поэтому передавайте --min_conf 3 в send и info здесь; см. прочитать то, что знает кошелёк.

4. Отделить майнинг от кошельков​

Когда у Алисы появятся монеты, остановить майнер и задать:

.epic/user/epic-server.toml
[server.stratum_mining_config]
burn_reward = true

Перезапустить узел и майнер. Награды теперь отбрасываются. При burn_reward = false и отсутствующем слушателе узел не может собрать coinbase и полностью прекращает производство блоков, что связывает производство блоков с наличием активного кошелька. Алиса сохраняет уже намайненные монеты.

Теперь можно остановить слушатель Алисы. Блоки продолжают поступать, поэтому транзакции продолжают получать подтверждения.

5. Проверить установку​

epic --usernet client status # высота растёт
epic-wallet --usernet info # из каталога каждого кошелька

У Alice должен отображаться баланс, доступный к трате, у Bob — нулевой. Это исходное состояние для вашего первого перевода.

Если что-то пошло не так​

СимптомПричина
Логи майнера Node is syncing - Please waitpeer_min_preferred_outbound_count равно 4
Логи майнера 0 hps и algo from job progpowonly_randomx не задан
Лог узла заполняется Share ... submitted too lateТот же простаивающий майнер продолжает отправлять задание предыдущей высоты
Узел перестаёт производить блокиburn_reward = false без активного слушателя кошелька — coinbase не может быть построен
Узел зацикливается на CoinbaseSumMismatch на высоте 1440, и его API становится недоступенПервая граница фондового сбора — один день блоков. Наблюдается с burn_reward = true. Установите enable_stratum_server = false, чтобы вернуть доступ к API и читать цепочку; считайте 1440 потолком для цепочки со сжигаемой наградой
Кошелёк получает 401 от узлаforeign_api_secret_path задан в epic-server.toml, с которым кошелёк не может работать, либо узел старше кошелька. См. учётные данные, которые кошелёк предъявляет узлу
Баланс отображается, но Currently Spendable равен нулюЗрелость coinbase, или значение по умолчанию --min_conf равное 10
Блоки отклонены с InvalidSortAlgo, или Block rejected с Expected RandomX got Cuckoo15run_test_miner включён где-то. Он производит только доказательства Cuckoo, которые политика RandomX отклоняет
Команда кошелька действует на неверный кошелёкЗапустить из каталога этого кошелька или передать --current_dir <path>

Сброс​

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

Далее​