XCHPool · Присоединиться к пулу · NanoFarmer · Обозреватель блокчейна Chia · My Farm · News · FAQ

Как работает NanoFarmer

Как работает NanoFarmer

XCHPool NanoFarmer · Технические детали

Что работает на вашем компьютере, что запускает XCHPool, какие сообщения передаются между ними и что защищает ваши ключи и награды. Для фермеров, которые хотят знать подробности.

Фармер и харвестер Chia 2.7.4

Протокол пулинга v1, plot NFT

Одно исходящее WebSocket-соединение

Что делает полная нода и что меняет NanoFarmer

Для фарминга Chia нужны три программы, которые работают вместе. Официальное приложение Chia запускает все три на вашем компьютере. NanoFarmer оставляет две из них на вашем компьютере, а третью запускает XCHPool.

Харвестер

Читает ваши плоты. Для каждого signage point применяет фильтр плотов, который пропускает лишь малую долю плотов (в mainnet сейчас 1 из 256), и ищет доказательства пространства в плотах, прошедших фильтр.

Фармер

Передаёт каждый signage point харвестеру и получает от него доказательства. Доказательство, которое удовлетворяет сложности вашего пула, становится партиалом для пула; доказательство, достаточно хорошее для выигрыша блока, уходит полной ноде. Вместе с харвестером фармер подписывает партиалы и блоки.

Полная нода

Хранит копию всего блокчейна (намного больше 100 ГБ) и синхронизируется с сетью. Выдаёт новый signage point примерно каждые 9.4 секунды, а когда ваше доказательство выигрывает, собирает блок и рассылает его в сеть.

NanoFarmer запускает на вашем компьютере собственные фармер и харвестер Chia без изменений и заменяет полную ноду одним соединением с XCHPool. Полные ноды XCHPool присылают signage points и собирают блок, когда вы выигрываете. Ничего не нужно скачивать или синхронизировать, а ключи остаются у вас.

Официальное приложение Chia

Ваш компьютер, со всем блокчейном

Полные ноды XCHPool, через gateway

Не входит: импортируйте свои слова в Sage или кошелёк Chia, чтобы видеть награды

Компоненты

Что делает каждая часть, где она работает и на чём построена.

Приложение NanoFarmer

Приложение может запускаться при входе в систему: через запись автозапуска для пользователя в Windows, LaunchAgent в macOS, пользовательскую службу systemd в Linux. Без прав администратора. В Windows значок в области уведомлений снова открывает окно после его закрытия и завершает работу NanoFarmer.

Одна программа на каждую систему. Она работает как фоновый агент: следит за движком, запускает uplink, обслуживает локальный интерфейс и устанавливает обновления.

На macOS окно нативное, а на Windows и Linux это окно приложения Edge или Chrome (или вашего браузера по умолчанию). Закрытие окна не останавливает фарминг.

Командная строка с теми же функциями, поэтому NanoFarmer работает и без экрана, по SSH, например на Raspberry Pi.

Uplink

Если соединение обрывается, он сам переподключается с паузой, которая растёт от 1 до 30 секунд.

Заменитель полной ноды на 127.0.0.1. Фармер Chia подключается к нему точно так же, как к настоящей полной ноде, по TLS 1.3 с собственным сертификатом движка.

Он копирует сообщения Chia байт в байт в одно WebSocket-соединение с gateway. Дополнительно идут только несколько собственных текстовых сообщений gateway (приветствие, предупреждения, статистика); до фармера они не доходят, а предупреждения показываются в приложении.

Его защита подписей проверяет те немногие сообщения, от которых зависят ваши награды (см. «Ключи и доверие»).

Gateway

Пересылает только доказательства от plot NFT, которые фармят в XCHPool. Ограничивает число подключений с одного интернет-адреса и в целом, а при отказе сообщает приложению причину.

Часть сервера NanoFarmer, построенная на собственном сетевом коде Chia 2.7.4. Для вашего фармера это полная нода; для полных нод XCHPool это фармер.

Отправляет каждый новый signage point по одному разу каждому подключённому NanoFarmer, а последний из них сразу после вашего подключения.

Точно проверяет каждое объявленное доказательство, прежде чем его увидит полная нода: настоящий signage point, плот plot NFT, корректное доказательство, которое действительно выигрывает, совпадающие подписи, отсутствие повторов.

Сервер NanoFarmer

REST-сервис по адресу https://pool.xchpool.org, созданный для приложения. Браузер читает из него только публичные файлы релизов и манифесты обновлений, как это делает страница NanoFarmer для своих загрузок.

Находит ваши plot NFT, готовит создание и подключение за счёт пула и раздаёт релизы и подписанные манифесты обновлений.

Оплачивает новые plot NFT и комиссии за подключение из собственного платёжного кошелька, отдельного от кошельков пула.

Пул

Тот же XCHPool, с которым фармит каждый участник, по стандартному протоколу пулинга v1.

Ваш фармер сам регистрируется и отправляет свои партиалы прямо в пул, а не через gateway. Очки и выплаты работают так же, как у всех остальных участников.

Chain API

Публичный API блокчейна от XCHPool, отдельный от сервера NanoFarmer сервис.

С его помощью приложение находит монету plot NFT в блокчейне, прежде чем доверять ему, а перед подключением из режима self-pooling проверяет, не ждут ли на plot NFT ещё не полученные награды.

Обозреватель и My Farm

«Открыть My Farm» в приложении выполняет вход по ссылке входа в пул вашего plot NFT.

Каждая установка NanoFarmer в My Farm выглядит как отдельный харвестер. Вскоре после того как пул принял её первый партиал, приложение называет его по устройству (марка, модель и система; никогда не имя компьютера и не имя пользователя). Переименовать его можно в приложении или в My Farm.

Карточка времени ответа партиалов показывает, как быстро отвечает каждый харвестер.

От signage point до партиала или блока

Что происходит примерно каждые 9.4 секунды, с названиями сообщений, которые использует Chia.

Новый signage point

Полные ноды XCHPool отправляют каждый signage point на gateway, а он передаёт его по одному разу каждому подключённому NanoFarmer.

Проверка и передача

Uplink проверяет, что хеши signage point совпадают с данными, отправленными вместе с ним, и передаёт его фармеру.

Фильтр плотов и поиск

Харвестер применяет фильтр плотов, ищет доказательства в плотах, прошедших фильтр, и возвращает все найденные доказательства.

Партиал в пул

Доказательство, которое удовлетворяет сложности вашего пула, становится партиалом. Харвестер подписывает его ключом плота, фармер добавляет свою подпись и отправляет партиал прямо в пул по HTTPS. Пул проверяет его, начисляет очки и записывает время ответа.

Объявление

Доказательство, достаточно хорошее для блока, объявляется. Uplink требует, чтобы в нём был ваш собственный адрес для наград, и запрашивает данные, стоящие за хешами, которые его потом попросят подписать. Gateway проверяет доказательство и то, что оно действительно выигрывает, и передаёт его полным нодам. Из-за невыигрышного доказательства полная нода разорвала бы соединение с gateway, поэтому gateway проверяет так строго.

Подписание

Полная нода собирает блок и запрашивает для него подписи. Uplink пропускает этот запрос, только если блок выплачивает награду фармера на ваш адрес. Харвестер подписывает, и подписи возвращаются тем же путём.

Рассылка

Полная нода завершает блок и рассылает его. Награда фармера (0.125 XCH плюс комиссии блока) идёт на ваш адрес для наград; доля пула идёт на пуловый адрес вашего plot NFT, откуда её забирает XCHPool.

Ключи и доверие

Ваши ключи остаются на вашем компьютере. Здесь описано, что это значит на практике, что NanoFarmer подписывает и чего не подписывает и что сторона XCHPool может и чего не может.

Где хранится ваш ключ

В настройках можно снова показать слова, чтобы записать их на бумаге: только после вашего подтверждения, с парольной фразой, если она задана, без кнопки копирования, и через минуту они снова скрываются.

NanoFarmer создаёт новый ключ из 24 слов или импортирует ваш и хранит его в собственной связке ключей Chia, в собственной папке данных и никогда в папке ключей официального приложения Chia.

Фармер берёт из этой связки свои ключи: ключ фармера, ключ входа в пул и ключ владельца plot NFT. Слова никогда не покидают ваш компьютер и никогда не записываются в журнал.

Необязательная парольная фраза (не менее 8 символов) шифрует связку ключей. NanoFarmer хранит её в хранилище учётных данных вашей системы, чтобы фарминг запускался сам; если такого хранилища нет, он запрашивает парольную фразу после каждого запуска.

Что NanoFarmer подписывает и от чего отказывается

Параметры пула: URL пула, целевой адрес пула, высота блокировки и время задержки встроены в приложение. Оно отказывается создавать, подключать или подписывать всё, что от них отличается, что бы ни говорил сервер.

Траты plot NFT: помощник заново собирает каждую трату, которую предлагает сервер, из собственного кода пазлов Chia, сверяет её со встроенными в приложение параметрами пула и только потом подписывает. Он никогда не подписывает хеш, который не может воспроизвести.

Блоки: фармер Chia подписывает хеши блоков, не видя, что за ними стоит, а полная нода берёт адрес для наград фармера из неподписанного поля. Поэтому защита подписей в uplink пропускает запрос на подпись, только если вместе с ним приходят данные блока, они совпадают с хешами и выплачивают награду фармера на адрес, который настроил NanoFarmer.

Signage points: ключ плота, который подписывает signage points, подписывает и блоки. Защита пропускает только те signage points, чьи хеши являются хешами их собственных исходных данных, а это никогда не могут быть данные блока, и не более чем в несколько раз чаще, чем их выдаёт сам блокчейн.

Что сторона XCHPool может и чего не может

Правила консенсуса Chia направляют долю пула от каждого блока на пуловый адрес вашего plot NFT, как и в любом пуле.

Gateway и полные ноды XCHPool могли бы придержать или испортить выигранный вами блок, как могла бы любая полная нода, на которую вы полагаетесь. Но они не могут заставить NanoFarmer подписать блок, который выплачивает вашу награду фармера кому-то другому.

Выдуманные signage points (протокол фармера Chia не передаёт доказательства времени) лишь стоили бы вашему харвестеру нескольких поисков, число которых ограничивает защита, и никогда не дали бы подписи, подходящей для блока.

Что отправляет приложение

В обозреватель: имя вашего харвестера, составленное из марки, модели и системы устройства.

На gateway: сообщения фармера Chia (ваши доказательства и подписи), а также версию приложения и движка, тип вашей системы и случайный ID установки.

В пул: ваши партиалы и регистрацию вашей фермы, как это делает любой фармер Chia.

На сервер NanoFarmer: публичные ключи, чтобы найти и создать ваш plot NFT, и plot NFT, который вы подключаете. Никогда не закрытый ключ и никогда не ваши слова.

Локальный интерфейс

Окно и командная строка общаются с приложением только через 127.0.0.1, со случайным токеном, новым при каждом запуске, строгой проверкой хоста и источника (origin) и строгой политикой безопасности контента, поэтому веб-страницы не могут им воспользоваться.

Plot NFT: создание и подключение

NanoFarmer фармит плоты plot NFT по протоколу пулинга v1. На шаге 2 в приложении он ищет plot NFT под первыми 20 ключами владельца вашего ключа, затем использует, подключает или создаёт один.

Plot NFT, который фармит в XCHPool

Используется как есть, после того как приложение проверило в блокчейне, что он принадлежит вашему ключу.

Plot NFT в режиме self-pooling

Одна трата для подключения. Награды, ещё ожидающие на plot NFT, сначала выводятся вам.

Две траты: выход сейчас и подключение, когда пройдёт высота блокировки другого пула. Вы подписываете обе сразу; вторую сервер отправляет, когда подойдёт срок.

Для вас создаётся новый plot NFT. Он готов после 3 подтверждений, обычно в течение нескольких минут.

Пул платит 1 моджо и комиссию

Монета пула выплачивает 1 моджо на ваш собственный адрес, и ваш ключ в той же транзакции превращает этот моджо в launcher plot NFT. Поэтому plot NFT с самого начала ваш: кошелёк Chia его находит, и вы можете уйти из XCHPool стандартными средствами.

Бесплатное создание доступно не чаще одного раза на интернет-адрес за 24 часа и одного раза на ключ.

Приложение записывает plot NFT в настройки пула движка; затем фармер сам регистрируется в пуле.

Сервер готовит траты; помощник заново собирает каждую собственным кодом Chia и подписывает её, только если она заканчивается в XCHPool с вашим собственным ключом владельца.

Приложение считает подключение завершённым, только когда его видно в блокчейне, что бы ни сообщал сервер.

Подключение, которое могло бы пройти не раньше чем примерно через сутки (большая высота блокировки в старом пуле), отклоняется до того, как что-либо подписано. У оплачиваемой пулом комиссии за вступление свои лимиты; сверх них вступление всё равно проходит, но без комиссии от пула.

Параметры пула, встроенные в приложение

100 блоков, около получаса: ожидание, когда plot NFT уходит из XCHPool

7 дней (604 800 секунд): награды, которые пул не забрал за это время, можно вернуть на ваш адрес

Обновления и безопасность релизов

Приложение и движок обновляются отдельно. Новый движок скачивается, пока вы фармите, и включается, когда не выполняется ни одна задача с plot NFT; если он не запускается, возвращается предыдущий движок. Новая версия приложения используется со следующего запуска приложения или сразу, если вы обновляете из приложения.

Приложение проверяет обновления при запуске и каждые 6 часов по манифесту, подписанному ключом Ed25519. Встроены два публичных ключа, поэтому ключ подписи можно заменить.

Манифест перечисляет каждый файл с его размером и SHA-256, через некоторое время истекает, может задавать минимальную версию и никогда не возвращает приложение или движок к более старой версии.

Два канала: стабильный и бета. Новая версия может сначала дойти до части установок, выбранной по хешу случайного ID установки.

Предыдущая версия каждого из них остаётся на диске для отката.

Ключ подписи хранится офлайн на одной машине, никогда на сервере или в конвейере сборки.

Файл контрольных сумм каждого релиза тоже подписан, для первой загрузки, а на странице NanoFarmer указан SHA-256 каждого файла.

Программы пока не подписаны сертификатами Apple или Microsoft, поэтому система попросит вас подтвердить первый запуск.

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

Платформы и требования

Установщик (для пользователя) или портативный zip

macOS 15 или новее, Apple silicon

Linux x86-64, glibc 2.28 или новее

Linux ARM64, glibc 2.28 или новее (Raspberry Pi 4 и 5 с 64-битной системой)

tar.gz со скриптом установки и пользовательской службой systemd

Диск

Около 1 ГБ свободного места для приложения, движка, предыдущей версии каждого из них и журналов. Без блокчейна.

Сеть

Локальные порты

Движок использует собственные порты рядом со стандартными портами Chia: демон 55410, фармер 8457, uplink 8454, RPC фармера 8569, RPC харвестера 8570. Если один из них занят, весь набор сдвигается на 100 вверх.

Тайминги и время ответа

Фарминг Chia идёт по часам. Вот числа, которые имеют значение.

Партиалы не проходят через gateway. Только signage point идёт от полных нод XCHPool через gateway к вам; фармер отправляет партиал прямо в пул.

64 signage points в каждом 10-минутном субслоте

Харвестер Chia предупреждает, если поиск в плоте длится дольше

от signage point до инфузии блока: доказательство, блок и его подписи должны быть готовы до этого момента

время, которое gateway даёт вашему фармеру, чтобы вернуть подписи блока

Пул измеряет время ответа каждого партиала: от момента, когда signage point дошёл до пула, до момента, когда пришёл ваш партиал. Партиал, пришедший после лимита времени пула, отклоняется как опоздавший и ничего не приносит.

My Farm показывает время ответа по каждому харвестеру: медиану, 95-й перцентиль и ваш запас до лимита, а сам лимит нарисован красной пунктирной линией. Для фермы NanoFarmer время включает пересылку через gateway; обычные причины медленных ответов: медленные или спящие диски, плоты на сетевом хранилище и загруженный компьютер.

Чего NanoFarmer не делает

Никакой полной ноды: он не скачивает, не хранит и не синхронизирует блокчейн.

Никакого кошелька: чтобы видеть или отправлять награды, импортируйте свои слова в Sage или кошелёк Chia.

Никаких OG-плотов: плоты, созданные с публичным ключом пула (-p), пропускаются, а приложение показывает их список, чтобы вы знали, какие это.

Никакого плоттинга: приложение объясняет плоттеры и заполняет команду, но само плоты не создаёт.

Пока никаких других пулов: он фармит plot NFT только в XCHPool.

Никаких плотов выше C7 и никаких сжатых плотов Gigahorse, плотов NoSSD или DrPlotter: Chia 2.7.4 не умеет их фармить.

Пока никаких плотов Proof of Space 2: для них нужна версия Chia 3.0, на которую движок может перейти собственным обновлением.

Никакого проброса портов: все соединения идут от вашего компьютера наружу.

Проектные решения

WebSocket вместо пирингового порта Chia

Никакого нового протокола фарминга

WebSocket передаёт собственные сообщения протокола фармера Chia байт в байт. Фармер — это стандартный Chia, и он не может отличить, что общается не с настоящей полной нодой.

Математика ключей только в коде Chia

Chia выводит свои ключи по-своему, и другая библиотека могла бы вычислить их неправильно так, что никто бы этого не заметил. Поэтому каждый вывод ключей Chia и каждую подпись выполняет собственный код Chia в движке; приложение на Go не делает ничего из этого.

Приложение и движок отдельно

Приложение на Go остаётся небольшим, а движок может перейти на новую версию Chia по собственному графику, например на Chia 3.0 до форка Proof of Space 2.

Вопросы и ответы

Может ли XCHPool перенаправить мою награду за блок?

Награду фармера — нет: NanoFarmer подписывает только блок, который выплачивает её на ваш адрес. Доля пула по правилам Chia идёт на пуловый адрес вашего plot NFT, как и в любом пуле. Сторона XCHPool может лишь придержать выигранный вами блок, как могла бы любая полная нода, на которую вы полагаетесь.

Что будет, если пропадёт подключение к интернету?

Uplink сам переподключается с паузой, которая растёт от 1 до 30 секунд, а фармер Chia переподключается к uplink. Если соединение оборвётся между выигрышным доказательством и запросом на подпись, gateway отправит запрос на ваше новое соединение.

Можно ли запустить NanoFarmer на нескольких компьютерах с одним ключом?

Да. Каждая установка создаёт собственные сертификаты харвестера, поэтому каждый компьютер отображается в My Farm как отдельный харвестер со своим именем.

Можно ли уйти из XCHPool?

Да. Plot NFT принадлежит вам, и кошелёк Chia может перевести его в другой пул или в режим self-pooling. Высота блокировки XCHPool — 100 блоков, около получаса.

Почему приложение не отправляет партиалы через gateway?

В этом нет необходимости. Партиалы используют стандартный протокол пулинга поверх HTTPS, точно так же, как у фармера с полной нодой. В XCHPool перенесена только работа полной ноды.