Запустить локальную сеть
Это руководство создаёт приватный узел usernet, два кошелька и майнер на одной машине. mainnet не используется.
Сначала соберите три бинарника: собрать бинарники.
Зачем usernet
| Сеть | Флаг | P2P порт | API порт | Использование |
|---|---|---|---|---|
| Mainnet | нет | 3414 | 3413 | Реальное значение. См. подключение к mainnet |
| Floonet | --floonet | 13414 | 13413 | Тестовая сеть без публичного сида |
| Usernet | --usernet | 23414 | 23413 | Приватная цепочка на локальной машине |
Используйте 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 меняет консенсус, поэтому комментарий в блоке является частью
инструкции:
[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:
- Linux и macOS
- Windows
cd wallet_alice && epic-wallet --usernet init -w
cd ../wallet_bob && epic-wallet --usernet init -w
Set-Location wallet_alice; epic-wallet --usernet init -w
Set-Location ..\wallet_bob; epic-wallet --usernet init -w
-w не принимает значения. Он указывается только в init, поэтому последующие команды используют
--current_dir <path>, либо их выполняют из каталога кошелька.
Запишите обе фразы восстановления. Здесь они бесполезны, но привычка — нет.
Два кошелька на одной машине конфликтуют по двум портам, поэтому отредактируйте конфигурацию Bob:
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-релей.
~/.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:
[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. Отделить майнинг от кошельков
Когда у Алисы появятся монеты, остановить майнер и задать:
[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 wait | peer_min_preferred_outbound_count равно 4 |
Логи майнера 0 hps и algo from job progpow | only_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 Cuckoo15 | run_test_miner включён где-то. Он производит только доказательства Cuckoo, которые политика RandomX отклоняет |
| Команда кошелька действует на неверный кошелёк | Запустить из каталога этого кошелька или передать --current_dir <path> |
Сброс
Удалите chain_data для получения чистой цепочки. После этого базы данных кошельков будут расходиться с
ней, поэтому удалите каждый wallet_data и выполните повторную инициализацию либо смиритесь с неверными
балансами. Удаление всего дерева и пересборка по этой странице занимает несколько минут.