v0.4.7

ПОСЛЕДНЕЕ
2026-06-02

Пул-майнинг на Mac теперь запускается мгновенно, без загрузки ноды и без синхронизации.

Главное здесь это скорость. В режиме пула easyBTX больше не загружает и не запускает полную ноду BTX. Пул-майнингу она никогда не была нужна, а из-за неё появлялась загрузка в несколько гигабайт, долгие синхронизации с "догоном" цепочки и иногда сбои. Теперь вы открываете приложение, ваш адрес выплаты уже заполнен, и ваш Mac сразу начинает майнить. Если у вас уже был easyBTX, ваш прежний адрес выплаты переносится автоматически, поэтому ничего настраивать заново не нужно.

Изменено

  • Пул-майнинг на Mac работает без полной ноды BTX: он запускается мгновенно, без блокчейна для загрузки, без синхронизации и без ноды, которая может упасть. Соло-майнинг на Mac пока приостановлен, чтобы мы могли сосредоточиться на пул-майнинге; он вернётся.
  • Ваш адрес выплаты заполняется автоматически из вашей прежней настройки, поэтому после обновления поле никогда не остаётся пустым.
  • Скорость майнинга теперь отображается в N/s, той же единице, что использует пул, поэтому число в приложении совпадает с вашим дашбордом пула.
  • Приложение всегда открывается в высокой раскладке, которая подходит для любого экрана.

Добавлено

  • Зелёная кнопка "Get the BTX Wallet" в разделе Транзакции и в настройках выплаты, ведущая на отдельный кошелёк BTX.
  • Опциональное действие, чтобы освободить место на диске, удалив старые данные ноды, которые больше не нужны в режиме пула. Ваши кошельки при этом никогда не затрагиваются.

v0.4.6

2026-06-01

Пул-майнинг на Mac снова работает, плюс панель статистики GPU в реальном времени.

Главное здесь это исправление. Пул-майнинг на Mac, который сломался в 0.4.5, снова работает. Изменение, сделанное при переносе easyBTX на Windows, направило Mac к неправильному помощнику майнинга, из-за чего майнинг не запускался. Это его восстанавливает. Если вы обновились до 0.4.5 и не могли запустить майнинг, это исправляет проблему, и Mac ведёт себя точно так же, как в 0.4.4.

Исправлено

  • Пул-майнинг снова работает на Mac. Изменение из 0.4.5 для версии под Windows направило движок майнинга Mac к неправильному помощнику, из-за чего майнинг не запускался. Восстановлено до того, как это работало в 0.4.4.

Добавлено

  • Панель статистики GPU в реальном времени на экране "О программе": использование, частоты, мощность, температура, память и вентилятор, обновляемые, пока панель открыта. Mac показывает использование, мощность и температуру; Windows показывает полный набор, считанный с вашей карты NVIDIA.

vWindows 0.4.4

2026-05-31

easyBTX приходит на Windows.

Это первый релиз для Windows. Теперь easyBTX майнит BTX на Windows-PC с видеокартой NVIDIA RTX серии 30 или новее, используя тот же подход «одно приложение, один клик, самостоятельное хранение», что и версия для Mac. Вы берёте видеокарту NVIDIA, выбираете адрес выплат, и ваш GPU подключается к пулу. Версия для Mac (Apple Silicon, Metal, соло или в пуле) осталась без изменений.

v0.4.4

2026-05-30

Отправка снова работает, ваша личная статистика майнинга и более крупные, спокойные окна.

Точечное продолжение 0.4.3. Главное здесь это исправление: отправка BTX из приложения снова работает после того, как в недавней сборке отправка могла завершиться ошибкой с вводящим в заблуждение сообщением. Вместе с этим экран "О программе" теперь показывает вашу собственную статистику майнинга, всплывающие окна открываются в одной просторной форме, а скопировать ссылку на транзакцию в обозревателе можно одним нажатием.

Добавлено

  • Ваш майнинг: приватная панель статистики в разделе "О программе", показывающая, сколько всего времени вы майнили, вашу среднюю скорость, ваши принятые шеры и день, когда вы начали. Она хранится только на вашем Mac и никогда никуда не загружается.
  • Кнопка "Скопировать ссылку" у каждой транзакции, чтобы вы могли скопировать её ссылку в обозревателе блоков и вставить куда угодно.

Изменено

  • "О программе", Настройки, Транзакции и информационные окна теперь открываются в одном более крупном, едином окне, которое легче читается.
  • У Настроек более чистое боковое меню. Раздел "Ссылки" теперь ведёт на официальный сайт протокола BTX и, отдельно, на сайт с актуальной ценой (сторонний сервис; это не финансовый совет, и easyBTX от него не зависит).

Исправлено

  • Отправка BTX из приложения снова работает. Недавняя сборка могла отклонить отправку с вводящим в заблуждение сообщением "проверьте адрес", даже когда с адресом всё было в порядке; это исправлено, и сообщения об ошибках теперь описывают настоящую причину.

v0.4.3

2026-05-30

Пауза и продолжение, более спокойный перезапуск, больше приватности и ваш Mac на дашборде пула.

Этот релиз развивает редизайн 0.4.0 пакетом улучшений повседневного удобства. Остановка теперь сохраняет ноду прогретой и предлагает зелёную кнопку "Продолжить", долгое ожидание "подготовки" после перезапуска объясняет само себя, а не выглядит зависшим, и вы можете скрыть свой баланс одним нажатием. Майнеры в пуле теперь могут показывать живые данные GPU своего Mac и выбранное имя на дашборде minebtx.

Добавлено

  • Пауза и продолжение. Элемент управления читается как "Пауза" во время майнинга, а потом как зелёная кнопка "Продолжить" вместо холодного "Старт". Нода между этим остаётся прогретой, поэтому можно сразу же продолжить с того же места.
  • Глазок приватности рядом с балансом скрывает его за точками, пока вы его не раскроете, удобно при демонстрации экрана или на людях. Ваш выбор запоминается.
  • Знаки после запятой в балансе: показывайте все 8 знаков или более короткие 3 для быстрого взгляда. Это меняет только отображение, но никогда не то, что вы храните или отправляете.
  • Понятный живой статус, пока нода готовится после перезапуска. Вместо застывшего "Работаю...", он объясняет, что пересобирает ваш приватный индекс баланса, показывает оценку и прошедшее время и отмечает, что блокчейн уже актуален.
  • Проверки CPU, GPU и режима пул-или-соло на экране майнинга, чтобы с одного взгляда видеть, что ваш Mac майнит на GPU и подключён так, как вы ожидаете.
  • Живые показания GPU для дашборда пула minebtx. easyBTX сообщает пулу использование GPU и мощность вашего Mac (права администратора не нужны), поэтому ваш воркер может показывать реальные числа вместо пустых полей, а заданное в Настройках имя обозначает вашу машину.
  • Тихая фоновая уборка, которая убирает старые остатки ремонта на установках, проработавших долгое время, чтобы они не накапливались на диске.

Изменено

  • Настройки теперь открываются в вашей текущей теме. Раньше они всегда показывались в светлой, теперь они соответствуют приложению, поэтому в тёмном приложении Настройки тоже остаются тёмными.
  • У Настроек более чистая раскладка боковой панели, с карточками тем и выбором "любимая раскладка при запуске".
  • Информационные окна ("Как работает майнинг" и остальные) теперь соответствуют стилю Настроек: более просторное и спокойное окно, которое легче читается.

Исправлено

  • Панель Upstream-источников в Настройках больше не показывает "Последняя версия недоступна" в каждой строке. Она снова получает реальные последние версии.

v0.4.0

2026-05-29

Новый дизайн, и пул-майнинг теперь выплачивает награды на ваш внешний кошелёк.

easyBTX получил новый дизайн. По умолчанию открывается широкое окно в стиле "центра управления": всё распределено по трём спокойным колонкам, и ничего не обрезается снизу, когда нода заполнена живой информацией. Появился новый переключатель тем: Тёмная остаётся по умолчанию, Светлая доступна на ваше усмотрение, а Системная следует настройкам вашего Mac и переключается автоматически. Пул-майнинг теперь учитывает ваш внешний адрес выплат, так же как уже делал соло-майнинг, поэтому можно майнить на ноутбуке, на котором никогда не хранятся ключи от ваших монет.

Добавлено

  • Новая широкая раскладка "центр управления", теперь по умолчанию: статус-экран слева, отображение майнинга, мощность и кошелёк по центру, живые данные сети и пула справа. Старые раскладки Высокая, Компактная и Мини по-прежнему доступны в один клик.
  • Темы Тёмная, Светлая и Системная. Тёмная остаётся по умолчанию. Выберите Светлую, если предпочитаете её, или Системную, чтобы следовать настройкам Mac и переключаться автоматически. Выбор сохраняется.
  • Кнопки быстрого перехода в Настройках для каждого раздела (Нода, Майнинг, Внешний вид, Расположение данных, Кошельки, Выплата, Резервная копия, Обновления, Обслуживание, Новый аккаунт, Upstream, Ссылки). Нажмите одну, чтобы сразу перейти к нужному разделу.

Изменено

  • Пул-майнинг теперь отправляет награды на ваш внешний адрес выплат, если он задан. Раньше это работало только для соло-майнинга. В обоих случаях монеты никогда не касаются кошелька на этом Mac, поэтому скомпрометированный ноутбук никогда не имел ключей.
  • Комиссия инструмента easyBTX теперь составляет 4,99% от намайненных наград (было 3,5%). Она по-прежнему начисляется временными отрезками и раскрывается заранее, а собственная комиссия пула (2,5%) не изменилась, поэтому суммарно пул-майнинг составляет около 7,5%. Всё остальное идёт в ваш кошелёк.
  • Настройки оформлены в виде аккуратных плиток, расположенных рядом при наличии места, и хорошо выглядят как в Светлой, так и в Тёмной теме.
  • "Аудит / Обзор" теперь называется просто "Транзакции".
  • Контрольный список настройки стал понятнее. Каждый шаг становится зелёной галочкой с простой подписью о том, что произошло ("Нода и цепочка BTX загружены", "Нода синхронизирована до последних блоков", "Майнинг"), вместо того чтобы оставаться оранжевым пунктом задачи.
  • Логотип easyBTX в шапке стал немного крупнее, в чуть более тонкой полосе.

Исправлено

  • "Освободить место на диске" теперь сообщает реальное количество освобождённого места, включая большой одноразовый снапшот, вместо того чтобы занижать его и тихо освобождать остаток при следующем запуске.
  • Нода больше не выглядит так, будто сброшена до "блок 0 из 0" после освобождения места на диске или перезапуска. Она запоминает, где находилась, и показывает это во время подтверждения, а не выглядит как свежая синхронизация с нуля.
  • Возвращающаяся, уже синхронизированная нода больше не застревает в долгом ожидании при запуске после восстановления или перезапуска.

v0.3.1

2026-05-29

Нода никогда не выглядит сломанной, пока догоняет цепочку. После того как easyBTX был закрыт на некоторое время или завершился некорректно (сбой, принудительное завершение или замена приложения во время работы), ноде иногда требуется несколько минут, чтобы наверстать упущенное при следующем открытии. Раньше easyBTX мог принять это время наверстания за настоящую проблему и показать ошибку. Теперь он спокойно ждёт, сообщает, что происходит, и оставляет ваш кошелёк и монеты нетронутыми. Ремонт никогда не будет предложен, пока нода просто догоняет цепочку. Вам ничего не нужно делать.

Исправлено

  • easyBTX больше не показывает ошибку при запуске, когда нода просто догоняет цепочку. Теперь он различает ноду, которая ещё обрабатывает данные, и ноду, которая действительно остановилась.
  • Деструктивное действие "Починить ноду" больше не предлагается, пока нода догоняет цепочку. Оно появляется только при наличии реального сигнала о повреждении или когда процесс ноды действительно завершился.
  • Больше нет фантомного шага "Загрузить ноду и цепочку BTX", пока восстановленная нода просто прогревается при уже имеющейся на диске цепочке, так что контрольный список соответствует реальности.
  • Удалён фиксированный лимит времени, который мог оборвать здоровую ноду. Нода, демонстрирующая реальный прогресс, теперь получает столько времени, сколько нужно для завершения.

Улучшено

  • Более чёткое и спокойное сообщение, пока нода догоняет цепочку, чтобы обычное ожидание в несколько минут не выглядело как сбой.
  • Ваш кошелёк и ваши монеты никогда не затрагиваются при запуске или восстановлении. easyBTX восстанавливает данные цепочки из сохранённого снапшота, но никогда не трогает ваши ключи.

Под капотом

Когда нода перезапускается после отключения на некоторое время или после некорректного завершения, она пересобирает часть внутреннего состояния перед тем, как начать обрабатывать запросы. В этот период нода активна и работает, но отвечает статусом "всё ещё прогревается" (RPC-код -28, возвращается с HTTP 500). Предыдущая версия расценивала это как жёсткий сбой и останавливалась после фиксированного лимита в 360 секунд, что переводило полностью здоровую ноду на экран ошибки, где ещё и болталась кнопка деструктивного ремонта. 0.3.1 классифицирует каждый зондирующий запрос при запуске на три состояния: готова, прогревается или недоступна. Прогревающаяся нода (статус -28 или лог ноды, показывающий пересборку) трактуется как "продолжать ожидание" и получает щедрый запас времени для завершения. Нода, которая вообще не отвечает, по-прежнему останавливается по разумному лимиту. Путь деструктивного ремонта по-прежнему заблокирован за тем же сигналом подтверждённого повреждения, что и всегда, так что он может сработать только при реальной проблеме, но никогда из-за медленного запуска. Все правила безопасности восстановления не изменились: ваш кошелёк всегда сохраняется, повреждённые данные архивируются, а не удаляются, восстановление запускается не более одного раза за сеанс и отказывает, если диск заполнен.

Доставка

Автоматически доставлено на существующие установки 0.3.0 через встроенный обновлятель. Собрано и опубликовано локально. Неподписанная инди-сборка, нотаризация Apple запланирована.

v0.3.0

2026-05-28

Релиз "соответствие пулу и прозрачность". Пул dexbtx от shib перешёл на v5 2026-05-27 с обязательным шлюзом возможностей pre_hash_block_tier_v18 и новым словарём расширений mining.subscribe, содержащим session_id и аппаратный отпечаток каждого рига. easyBTX v0.2.0 отправлял только два из трёх обязательных полей, из-за чего Mac-воркеры подключались к пулу, но никогда не появлялись в дашборде воркеров. v0.3.0 реализует полное рукопожатие v0.3.x, добавляет heartbeat worker.report_metrics, который открывает живые строки дашборда для каждого рига, и показывает каноническое имя, которое пул присваивает каждому ригу, чтобы пользователи могли сопоставить свой Mac с его строкой в /stats. Помимо этого, первая опциональная функция самостоятельного хранения средств: соло-намайненные награды теперь можно направлять на внешний BTX-адрес, ключ от которого не хранится на этом Mac. А также много UX-работы, о которой просила аудитория v0.2.0 в Telegram. cargo test: 195/195. tsc --noEmit: чисто. cargo build --release + npm run build: оба зелёные.

Критические исправления

  • Регистрация в пуле dexbtx восстановлена для Mac-воркеров. mining.subscribe теперь отправляет полный словарь расширений v0.3.x: protocol_compliant: ["pre_hash_block_tier_v18"], существующий аппаратный отпечаток (расширенный solver_env: {BTX_MATMUL_BACKEND: "metal"}), и session_id для каждой сессии (32 шестнадцатеричных символа в нижнем регистре, соответствующих форме uuid.uuid4().hex эталонного майнера, построенных из SHA256("easybtx-session:" || nanos || pid || counter), чтобы последовательные сессии никогда не совпадали). Без session_id пул v5 молча исключал Mac-воркеры из дашборда и из /stats Telegram-бота. mining.set_canonical_name теперь обрабатывается, а назначение сохраняется в ~/.easybtx/canonical_names.json, чтобы присвоенная пулом метка (например, M2_PRO-BRAVO-1) переживала переподключения. Строка "Воркер этой машины:" в интерфейсе теперь показывает эту метку сразу после её поступления.
  • Обновления ноды больше не занимают 8 минут. NodeController::stop проверяет Child::try_wait до 90 секунд перед переходом к SIGKILL. Раньше мгновенный kill попадал посреди сброса в LevelDB шилдед-состояния btx1z, оставляя маркер незавершённой мутации, который при следующем запуске вызывал EnsureShieldedStateInitialized: rebuilding full shielded state from chain (зафиксировано в живых условиях как 7 м 57 с). Чистый выход не оставляет маркера, и запуск снова занимает около одной секунды.
  • Карантины Repair Node больше не засоряют гигабайты навсегда. Новая функция prune_old_quarantines удаляет директории _corrupt-* и _preserve-* старше 7 дней, сохраняя по одной самой новой из каждого шаблона для криминалистики. Запускается при старте приложения (обнаруживает устаревшие карантины из прошлых сеансов) и в конце каждого repair_node (обнаруживает устаревшие карантины из предыдущих ремонтов). Один устаревший _corrupt-* удерживал 42 ГБ на машине мейнтейнера. Включает 6 новых юнит-тестов для логики хранения.

Внешняя выплата (опциональное самохранение средств)

  • Соло-намайненные награды теперь можно выплачивать на внешний BTX-адрес, ключ от которого не хранится на этом Mac. Новый раздел Настройки → Выплата за майнинг: оставьте настройку по умолчанию (награды поступают в локальный кошелёк на этом Mac) или перенаправьте их на адрес, которым вы управляете в другом месте: аппаратный кошелёк, мобильный кошелёк, холодный адрес. Суть в самостоятельном хранении средств. Реальная угроза для майнинговой машины это исполнение кода тем же пользователем (AMOS-подобный стилер, на который пользователь попался), а машина, работающая в режиме майнинга 24/7, часто старый ноутбук, переделанный именно для этого, является лёгкой мишенью. Направление наград на внешний адрес означает, что накопленные монеты никогда не имели ключа на майнинговой машине. Вставляемые адреса проверяются на формат на границе IPC (bech32, принимает постквантовый префикс btx1z...; обнаруживает вставку из неверной сети, ведущие и конечные пробелы, а также омоглифы вроде b/i/o), с живой кнопкой "Проверить формат". RPC-метод ноды validateaddress выполняет полную проверку контрольной суммы при её доступности.
  • Раскрытая комиссия разработчика в 3,5% не изменилась. Механизм выплат был обобщён от старого бинарного FeeAccrual пользователь/разработчик до N-получательского взвешенного round-robin (PayoutScheduler), где комиссия разработчика является одним обязательным получателем. Юнит-тест доказывает, что реализованная доля разработчика по-прежнему сходится к 3,5% за 1000-2000 фрагментов вне зависимости от конфигурации пользователя, так что добавление внешней выплаты никогда не сдвигает разделение.
  • Только соло в этом релизе, и приложение явно об этом сообщает. v0.3.0 направляет внешнюю выплату только для соло-намайненного coinbase. Награды пула по-прежнему попадают в локальный кошелёк (внешняя выплата пула появится в v0.3.2). Если внешняя выплата настроена и вы находитесь в режиме пула, красный баннер на главном экране прямо об этом говорит, а диалог переключения Соло в Пул повторяет предупреждение, поэтому заботящийся о безопасности пользователь никогда не сможет тихо предположить, что его доходы от пула покидают машину.
  • Выбор "Локальный кошелёк" полностью отменяет изменения. Выбор стандартного переключателя теперь очищает сохранённое разделение (clear_payout_split), а не просто скрывает форму, поэтому майнинг немедленно возвращается к локальному кошельку вместо того, чтобы тихо продолжать платить на ранее установленный внешний адрес.

Пул / протокол майнинга

  • Heartbeat worker.report_metrics каждые 60 секунд. Новая ветка tokio::time::interval в цикле выбора stratum отправляет {session_id, timestamp, cpu_util_pct, ram_gb_used, gpus: [{gpu_uuid, util_pct, power_w, temp_c}], solver_nps, shares_session_total}, чтобы дашборд пула мог отображать счётчики CPU/RAM/шер для каждого рига. CPU% и использование RAM берутся из одного вызова top -l 1 -n 0, выполняемого на асинхронном подпроцессе с реальным tokio::time::timeout в 4 секунды, чтобы зависший top никогда не мог заблокировать считыватель stratum, управление дочерним солвером или отправку в пул. Утилизация GPU, мощность и температура на macOS передаются как JSON null, потому что powermetrics требует root-доступа (согласно замечанию shib о метриках macOS). Строка в дашборде всё равно появляется, только поля живых инструментов показывают прочерк.
  • Кнопка "Открыть эту машину в дашборде пула" в один клик. Существующая кнопка дашборда пула теперь добавляет ?worker=<canonical_name> в URL в тот момент, когда пул присваивает каноническое имя. Дашборд сейчас является SPA, поэтому параметр запроса совместим с будущим. Если dexbtx позже добавит маршрутизацию по воркеру, это начнёт работать без обновления приложения.
  • solver_env: {BTX_MATMUL_BACKEND: "metal"} в аппаратном отпечатке, чтобы движок рекомендаций пула знал, что не нужно предлагать Mac-ригам только CUDA-настройки (BTX_MATMUL_GPU_INPUTS, BTX_MATMUL_SOLVE_BATCH_SIZE и др.). Совместимость с будущим: пул вносит ключи в белый список на стороне сервера, поэтому текущее объявление только для Metal безопасно.

UX

  • Обновления теперь невозможно не заметить. Заметный оранжевый баннер в верхней части дашборда появляется в тот момент, когда проверка обновлений при запуске находит более новую версию, в дополнение к существующей подсказке в углу. Нажатие "Установить" показывает единственный вопрос: "Также автоматически устанавливать будущие обновления при запуске?" Вопрос в момент наибольшей готовности работает намного лучше, чем флажок в Настройках, куда никто не заходит. Флаг easybtx-autoupdate-asked гарантирует, что повтор вопроса никогда не последует, если пользователь отказался. Проверка обновлений при запуске теперь выполняется до first_run_setup, чтобы баннер мог появиться примерно за 300 мс, а не после медленного запуска ноды.
  • easyBTX явно сообщает, что в комплект входит собственная нода BTX. Telegram-пользователь, видевший "Прогресс синхронизации 98,5%", всё равно спросил в канале "как настроить ноду?". Три небольших точки контакта теперь отвечают на вопрос до того, как он будет задан: модальное окно "Как работает майнинг" открывается с текстом "easyBTX запускает полную ноду BTX за вас, отдельная настройка не нужна". Контрольный список этапов настройки теперь читается как "Загрузить ноду и цепочку BTX" / "Синхронизировать ноду до последних блоков". Раздел Настройки → Статус ноды начинается с "это живые данные этой ноды, а не удалённого сервиса."
  • Мягкое напоминание о резервной копии кошелька. Постоянный янтарный баннер над балансом появляется в тот момент, когда вы действительно намайнили немного BTX и при этом ещё не создали резервную копию. "Сохранить сейчас" открывает Настройки и прокручивает до "Сохранить файл восстановления". "Позже" скрывает его только на текущий сеанс (напоминание вернётся при следующем запуске, потому что потеря кошелька из-за однократного отклонения напоминания недопустима). Отдельно от существующего одноразового шлюза при настройке, который срабатывал до того, как пользователю было что терять.
  • Слайдер мощности майнинга в одной строке. Метка, слайдер, кнопка MAX и живое значение объединены из двухстрочной раскладки в одну строку flex. Экономит около 28 пикселей по вертикали. Тот же биткоин-оранжевый акцент.
  • "Последняя шера" обновляется в реальном времени. setInterval с интервалом 1 секунда перерисовывает относительное время на счётчике шер, вместо того чтобы зависать между 3-секундными опросами статуса. Пропускается при document.hidden, чтобы приложение, запущенное в фоне, не тратило заряд батареи на невидимые обновления.
  • Панель Настройки → Upstream-источники. Перечисляет компоненты с открытым кодом, на которых построен easyBTX (нода BTX btxchain/btx, закреплённая на v0.30.1, MineBTX dexbtx/minebtx, Tauri v2, публичный репозиторий EasyBTX-releases). Каждая строка показывает закреплённую версию по сравнению с последним тегом, полученным в реальном времени из GitHub API, плюс значок "Актуально / Доступно обновление". Дашборд мейнтейнера для отслеживания того, когда апстримы обгоняют нас. Кешируется на 5 минут. Кнопка "Обновить" обходит кеш.
  • Сигналы сообщества в модальном окне "О программе". Живые плитки для установок easyBTX (сумма количества загрузок ассетов GitHub Releases), майнеров пула онлайн прямо сейчас, блоков, найденных за последние 24 ч, и скорости сети. Обновляется при открытии модального окна, кешируется на 60 с. Честное представление: плитка "майнеры онлайн" помечена как "включая easyBTX + другие клиенты", потому что API пула пока не разделяет воркеров по miner_version.

Бренд

  • easyBTX теперь последовательно пишется строчными буквами в прозе. 17 замен в README, CHANGELOG, NOTICE и папке docs/. URL-пути (MendeMatthias/EasyBTX-releases), тип Rust EasyBtxState и имена артефактов конвейера релизов (EasyBTX.dmg, EasyBTX.app) намеренно сохранены.

Обслуживание

  • Баннер предупреждения о нехватке места на диске. Опрашивает свободное место каждые 3 с в том же цикле обновления статуса, который управляет остальным интерфейсом. При объёме ниже 1 ГБ показывается янтарное уведомление, ниже 500 МБ красное с более частым миганием. Оба отображаются даже когда RPC недоступен, что именно тогда и нужно (btxd только что упал из-за Fatal LevelDB error: No space left on device, RPC недоступен, пользователь не понимает причины).
  • Настройки → Обслуживание → Освободить место на диске. Освобождение в один клик: удаляет неиспользуемые индексы btxd blockfilter/coinstats, снапшот assumeutxo после загрузки и обрезает debug.log, если он превысил 50 МБ. Для случаев, когда нужно вернуть место, но вы пока не готовы переместить datadir на внешний диск.

Закалка перед релизом

  • Сбор данных worker.report_metrics является асинхронным. Синхронный std::process::Command::output() (без таймаута, блокирует воркер tokio-рантайма на всё время работы top) заменён на tokio::process::Command с реальным tokio::time::timeout в 4 секунды. Зависший top больше не блокирует считыватель stratum, управление дочерним солвером и отправку в пул.
  • Единственное чтение под охраной статуса пула в тике метрик. Двухэтапная блокировка/разблокировка status.lock().await свёрнута в один охраняемый блок, чтобы shares_accepted и hashps всегда наблюдались в рамках одного и того же поколения тика статуса.

Документация

  • docs/2026-05-28-btx-qid-self-custody.md. Исследование и план из 4 фаз для укоренения постквантового самохраняемого "qID" (passkey с разделением 2-из-3 по Shamir/MPC) в BTX-сиде, чтобы внешний адрес выплат выше позже мог быть тем, который пользователь держит на телефоне/passkey, а не ещё одним горячим кошельком. Перспективное планирование для страницы bonuz HQ. Никакой код приложения от этого не зависит.

v0.2.0

2026-05-28

Релиз полировки "мега-аудит". Аудит безопасности /cso и функциональный аудит ошибок с 3 агентами обнаружили 4 КРИТИЧЕСКИХ, 10 ВЫСОКИХ, 13 СРЕДНИХ и несколько НИЗКИХ проблем в v0.1.13. Этот релиз закрывает все их за один проход. cargo test: 149/149. tsc --noEmit: чисто. Ни одного публичного IPC не удалено, но send_btx получил явный параметр subtract_fee: bool (кнопка Max во фронтенде передаёт его). EasyBtxState получил три поля #[serde(default)] (старые файлы состояния по-прежнему загружаются).

Критические исправления (потеря данных / осиротевшие процессы / принудительная ресинхронизация)

  • Удаление нескольких кошельков блокируется при перемещении datadir. relocate_datadir теперь перечисляет все кошельки в src (любой каталог, содержащий wallet.dat) и завершается с ошибкой, если КАЖДЫЙ не присутствует и не является непустым в dest до запуска remove_dir_all(src). Предыдущая проверка размера 97% только проверяла miner/wallet.dat, что допускало тихую потерю меньшего вторичного кошелька.
  • Пул и Metal-солвер теперь корректно завершаются при выходе из приложения. stop_node_blocking сигнализирует pool_stop, ждёт pool_handle с таймаутом 3 секунды (прерывает JoinHandle по истечении) и очищает статус пула. Команда солвера получила .kill_on_drop(true), чтобы брошенный JoinHandle подбирал подпроцесс, а не оставлял его на 100% GPU после выхода.
  • Snapshot.dat больше не удаляется до того, как loadtxoutset действительно завершится успехом. Новый сохранённый флаг EasyBtxState.snapshot_loaded устанавливается ТОЛЬКО при успехе loadtxoutset (или когда getchainstates уже сообщает о снапшот-цепочке). Все вызывающие disk::reclaim_disk теперь читают этот правдивый флаг вместо setup_complete (который срабатывает при привязке RPC, до фоновой загрузки снапшота). Закрытие приложения во время загрузки больше не стирает снапшот и не вынуждает делать полную ресинхронизацию с генезиса.
  • Охрана вывода солвера предотвращает коллапс курсора nonce. solve_next_nonce теперь продвигается только при tries_used > 0 И nonce64_end >= solve_next_nonce (монотонно). Вырожденный {"found":false} с отсутствующим nonce64_end раньше сбрасывал курсор на 1, что приводило к дублированию отправки шер (код 22).

Высокоприоритетные исправления

  • repair_node больше не переключает вас тихо на кошелёк "miner". Теперь он читает state.active_wallet (зеркалируя шаблон reclaim_disk_now) перед пересборкой wallet_rpc. Это исправление H1 из PR #12, которое ещё не было применено здесь.
  • move_datadir_to отклоняет тома exFAT/FAT. Предупреждение list_external_volumes теперь применяется на границе перемещения, а не только показывается как подсказка.
  • apply_node_update действительно переключается на новый бинарник btxd. Раньше это была пустышка (новая установка никогда не переиспользовалась). Теперь он сохраняет новый тег (EasyBtxState.btx_release_tag), останавливает работающий контроллер и перезапускает его против новых бинарников. check_node_update/get_node_status учитывают сохранённый тег, поэтому баннер обновления перестаёт залипать.
  • Изменение ntime посреди решения сбрасывает курсор nonce. Когда нечистое уведомление изменяет ntime или merkleroot, следующее решение перезапускается с начала нашего окна nonce (вместо продвижения мимо низких nonce нового заголовка).
  • clean_jobs=true больше не гонится с только что завершившимся солвером за устаревшей отправкой. Путь clean-kill очищает stdout мёртвого дочернего процесса и удаляет solving_job, чтобы запоздалый на микросекунду результат солвера не прошёл через шлюз отправки.
  • Коллизия архива _corrupt-<ts> больше не может жёстко удалить цепочку. Временные метки с субмикросекундной точностью и счётчик -N предотвращают коллизию. При ошибке переименования архива теперь возвращается Err и src остаётся на месте (раньше резервный remove_dir_all(src) безвозвратно удалял повреждённую цепочку, нарушая обещание "никогда не удалять жёстко").
  • Учёт комиссий пула соответствует дисциплине соло. Границы stop/clean-kill/deadline больше не засчитывают истёкшее время kill как dev mined_secs. Начисление теперь происходит только в ветке ожидания солвера при разбираемом выводе с tries_used > 0. Доля разработчика в 3,5% больше не может ползти вверх при частых остановках.
  • Потеря шеры при отключении отображается в интерфейсе. Ошибка записи mining.submit теперь устанавливает last_event = "share lost (disconnect)..." и увеличивает счётчик устаревших шер перед возвратом в цикл переподключения.
  • Нестабильная сеть больше не может оставить "developer fee window..." зависшим. Ограничение накопленного времени попыток (300 с) переводит следующую сессию на выплату пользователю, если одно окно комиссии постоянно не может подключиться.
  • При запуске выполняется откат к стандартному datadir, когда указатель на внешний диск ведёт в никуда. Раньше отключённый диск между записью указателя и удалением src оставлял приложение застрявшим на несуществующем пути.

Корректность майнинга и пула

  • Ошибки subscribe/authorize теперь логируются и отображаются в last_event (раньше тихо игнорировались: изменение схемы на стороне пула могло отключить весь пул-майнинг без обратной связи в интерфейсе).
  • submit_id инициализируется из эпохальных микросекунд при подключении, чтобы идентификаторы не повторялись при переподключениях.
  • Соло: после тика Paused следующая итерация пропускает burst комиссии и майнит для пользователя (дефицит наверстается в следующем непаузированном тике). Предотвращает попадание одного соло-блока на dev-адрес во время флаппинга паузы синхронизации.
  • Идемпотентность снапшота теперь проверяет SHA любого существующего snapshot.dat, чья размер случайно совпадает (раньше файл с неверным содержимым, но точного нужного размера, принимался без проверки).

Кошелёк / отправка / полировка аудита

  • Стабильный адрес получения для каждого кошелька. EasyBtxState.wallet_addresses запоминает адрес каждого кошелька. do_switch_wallet повторно использует его через address_is_mine вместо чеканки нового при каждом переключении.
  • Экспорт аудита/CSV до 10 000 транзакций. (Предыдущий лимит в 1 000 тихо отбрасывал более старые записи долго работающих майнеров.)
  • Отправка "Max" теперь является явным флагом, а не эвристикой допуска sat. Фронтенд отслеживает нажатие Max. Backend send_btx(.., subtract_fee) учитывает его. Отправка точно вашего баланса вручную больше не уменьшается тихо.
  • Backend send_btx проверяет сумму и отклоняет перерасходы. Не-конечные, нулевые, отрицательные значения и amount > spendable отклоняются на границе IPC (а не только в btxd).
  • backup_wallet_cmd отклоняет пути, которые не может канонизировать, и отвергает любой путь, содержащий компоненты ... Прежний пробел "пропустить при ошибке канонизации" закрыт.
  • Европейские десятичные запятые при отправке. parseFloat предваряется replace(/,/g, ".") в обоих местах вызова Send. 1,5 BTX теперь разбирается как 1.5, а не 1.
  • Проверка префикса btx1 для ссылок на обозреватель. addrExplorerUrl теперь соответствует регулярному выражению ввода отправки (^btx1[a-z0-9]{20,90}$/i), чтобы строки аудита не могли ссылаться на несуществующие страницы обозревателя.
  • Выплата пула повторно проверяет кешированный адрес с помощью address_is_mine перед передачей в stratum. При несоответствии чеканится новый.
  • Задача пула корректно останавливается во время repair_node и relocate_datadir (раньше продолжала отправлять шеры против удалённой или перемещаемой цепочки).
  • persist_active_wallet заблокирован. Новый STATE_FILE_LOCK сериализует последовательность загрузка-мутация-сохранение, чтобы двойной клик не мог потерять обновления.

Безопасность (аудит /cso)

  • Лог пула перемещён из /tmp и защищён. Логи теперь хранятся в $HOME/.easybtx/pool.log (резерв /tmp, если HOME не задан), открываются с mode(0o600) и O_NOFOLLOW. Поверхность для чтения всеми и подмены символическими ссылками закрыта.
  • gpu_uuid, отправляемый в пул, теперь является солёным SHA-256, а не сырым IOPlatformUUID. Хеш стабилен для каждой установки (корреляция воркеров пула по-прежнему работает), но сырой аппаратный идентификатор больше не покидает машину.
  • RpcClient::for_wallet кодирует имя кошелька в URL в путь. Сейчас безопасно по соглашению (все вызывающие проверяют данные). Теперь применяется на уровне функции, а не по дисциплине ревьюера.

Внутреннее / технические задачи

  • Версия: 0.1.13 до 0.2.0 (package.json, tauri.conf.json, Cargo.toml).
  • EasyBtxState получил snapshot_loaded, btx_release_tag и wallet_addresses (все #[serde(default)]; устаревшие файлы состояния продолжают загружаться).
  • STATE_FILE_LOCK введён в state.rs для сериализации шаблона загрузка-мутация-сохранение. Записи состояния в reset_account/restore_wallet/first_run_setup теперь проходят через него.
  • Один известный устаревший TODO-комментарий TODO(H3-followup) в apply_node_update, указывающий на плавное внутрисессионное переподключение RPC (путь с сохранённым тегом и перезапуском поставлен. Ожидание cookie внутри сессии является следующим шагом).

v0.1.13

2026-05-28

Добавлено

  • Строка входящего баланса. Поступившая выплата, которая ещё не подтверждена (untrusted_pending), теперь отображается как чёткая строка "Входящий... подтверждается" вместо того, чтобы выглядеть потерявшейся до подтверждения. Доступный баланс остаётся только доверенным, поэтому Отправка никогда не может уйти в минус.
  • Ссылки на обозреватель блоков. Идентификаторы транзакций и адреса в разделах Отправка, Получение и Аудит/Обзор открываются на explorer.minebtx.com (сокращённые, с кнопками копирования и открытия). Экран подтверждения отправки показывает полный адрес получателя, чтобы вы могли его проверить.
  • Отправка: кнопка "Max" и безопасная полная отправка. Кнопка Max заполняет ваш полный доступный баланс, а полная отправка баланса теперь вычитает сетевую комиссию из суммы вместо того, чтобы завершаться ошибкой "недостаточно средств". Адрес получателя также проверяется перед шагом подтверждения.
  • Освобождение места. Кнопка Настройки → Хранилище (и автоматический проход при запуске) освобождает место на диске, удаляя неиспользуемые blockfilterindex/coinstatsindex, снапшот assumeutxo после загрузки и разросшийся debug.log. Блокчейн и ваш кошелёк никогда не затрагиваются.

Пул

  • Всплывающее окно с информацией о выплатах пула теперь показывает реальную политику (еженедельно по пятницам в 18:00 UTC, минимум 0,0001 BTX, комиссия пула 2,5%) вместо расплывчатых формулировок.
  • easyBTX теперь представляется пулу как easybtx/<version>, чтобы пул мог сегментировать майнеров eBTX для статистики. Аппаратная информация даёт вашему воркеру каноническое имя в дашборде.

Исправлено

  • Предхеш уровня блока пула pre_hash. Metal-солвер шер теперь применяет шлюз предхеша уровня блока (sigma <= block_target << epsilon) вместо обхода его для шер, чтобы шеры уровня блока были корректными блоками и submitblock пула перестал завершаться с ошибкой "matmul phase2 proof of work failed". easyBTX объявляет возможность pre_hash_block_tier_v18 в mining.subscribe. (Изменение солвера находится в btx-main. Смотрите docs/patches/btx-prehash-block-tier.patch.)

Изменено

  • Мощность майнинга теперь является живым слайдером в верхней части карточки статистики. Он разогревается от зелёного к оранжево-красному по мере продвижения (шаги 5%, кнопка Max) и остаётся синхронизированным со слайдером в Настройках. Старые строки показателей скорости и мощности убраны, так что карточка стала короче. Иконка с информацией на слайдере объясняет лучшие практики (около 50% для лёгкой работы поддерживает Mac прохладным и тихим, 100% быстрее всего, но горячо и разряжает батарею).
  • Активный кошелёк теперь берётся исключительно из backend (единственный источник истины). Фронтенд больше не применяет кошелёк из localStorage, поэтому чип кошелька и адрес не могут на мгновение расходиться.
  • Карточка доходов пула стала короче: пояснение о выплатах переехало во всплывающее окно рядом с "Принятые шеры", а воркер теперь расположен рядом со ссылкой "Открыть дашборд пула", чтобы они читались как пара.