• v1.41.0 c0c4ae5f90

    v1.41.0
    All checks were successful
    CI / Rust clippy (push) Successful in 2m28s
    CI / Rust fmt (push) Successful in 1m34s
    CI / Rust test (push) Successful in 7m53s
    CI / UI (SvelteKit) (push) Successful in 1m41s
    CI / Shell scripts (push) Successful in 26s
    CI / Security Audit (push) Successful in 1m33s
    CI / WarpTune Desktop (Windows x86_64) (push) Successful in 8m29s
    docs / build (push) Successful in 43s
    Release / Docker Multi-Arch (push) Successful in 27m54s
    Release / Binary aarch64-unknown-linux-gnu (push) Successful in 18m3s
    Release / Binary x86_64-unknown-linux-gnu (push) Successful in 13m39s
    Release / WarpTune Desktop (Windows x86_64) (push) Successful in 8m32s
    Release / Linux .deb + .rpm (amd64) (push) Successful in 5m30s
    Release / Linux .deb + .rpm (arm64) (push) Successful in 5m19s
    Release / Linux AppImage (aarch64) (push) Successful in 36s
    Release / Linux AppImage (x86_64) (push) Successful in 36s
    Release / Cosign sign artifacts (push) Successful in 35s
    Release / Forgejo Release (push) Successful in 47s
    Stable

    Ghost released this 2026-10-17 07:21:55 +00:00 | 2 commits to main since this release

    Added

    • WarpTune: the calibration no longer needs a pool. The share
      verdict that judges every voltage comes from the miner's own counters
      (sharesAccepted × poolDifficulty, each share at the difficulty in
      force, reject reasons where the firmware gives them) on whatever pool
      the miner mines; a coupled dvb-WarpPool's worker row stays preferred.
      The regulator weighed those counters already; only the calibration's
      availability was tied to sidecar.pool_api and pool = true. The
      calibration dialog says where the verdict comes from (pool row, the
      miner's counters, the miner's counters without reject reasons — then
      every reject counts and the reject window is 150 shares instead of
      40). A firmware without poolDifficulty gets no_share_diff on the
      card and a refused start. All limits unchanged.
    • WarpTune: the hand-point comparison without a pool. Where no
      worker row matches, the comparison takes the miner's own counters from
      the journal — shares and shares × difficulty per calendar minute from
      consecutive samples, a counter reset and a gap over 15 minutes
      skipped — through the same yield table as the pool's minute buckets;
      the card names the source.
    • WarpTune: the savings in kWh and money per year. Under the
      comparison line each mode's watts become kWh per year at 24/7 and,
      with an electricity price, money — in words, not signs ("Eco saves
      48 kWh/year ≈ 13,20 €", "Max costs 9 kWh/year ≈ 2,47 € more"; an
      estimate keeps its "≈"): the pool's single rate and currency
      (/api/energy now carries default_rate_per_kwh), or WarpTune
      Desktop's new electricity-price form ([energy] price_per_kwh +
      currency, a display setting that asks for no apply; the browser
      region only suggests the currency). Always the grid price, no default
      and no guess from the location; without a price the kWh show with a
      hint. Formatted in the reader's locale with the setting's currency.
    • WarpTune Desktop: the launcher's dialogs speak the system
      language
      — the login-item and service-update questions, the
      port-busy and start-failure notes, in the page's eight languages
      (DVB_WARPTUNE_LANG, macOS AppleLocale, Windows UI language, LANG).

    Changed

    • Pool: [mining.electricity] default_rate_eur_kwh is
      default_rate_per_kwh — the currency is a setting, the key no longer
      says EUR. The old key still loads. Note for a downgrade: once the
      admin saves the rate, the file carries the new key only, and a daemon
      older than 1.41 reads no tariff (0) from it until the key is renamed
      back by hand.
    • WarpTune Desktop: the pool texts say what a pool adds (reject reasons,
      the wallet badge) instead of "no calibration without a pool".
    • UI (de): one word per thing on the WarpTune cards — "Arbeitsmodus",
      "Kurzprüfung", "feste Herstellerstufen".

    Fixed

    • WarpTune: a coupled pool without a worker row no longer blocks the
      share verdict.
      When the pool is coupled for tariff and badge but the
      miner mines elsewhere (or the row went idle, or the feed is stale),
      the counters were nulled and the card said the firmware reports no
      share difficulty; the firmware's own counters stand in now, the pool
      row stays preferred, and a change of source starts the share windows
      over (never mixed inside one).
    • WarpTune: a start is refused when the shares come too slowly. At a
      high fixed difficulty on a foreign pool the confirmation window's
      shares would take longer than the stage's timeout (difficulty 65536
      at 1.2 TH/s: 26 h against 4 h); the miner sat pinned for four hours and
      the stage ended in a timeout. The refusal names the numbers.
    • WarpTune: a firmware whose reject-reason list is still empty (no
      reject yet: WarpAxe, ESP-Miner ≥ 2.9, Forge-OS) counted as one without
      reasons — the 150-share reject window and "the miner's counters
      without reject reasons" on the card; an empty list is a list now.
    • WarpTune: the hand-point comparison without a pool credited a point's
      first minute to the point before it when the change fell inside a
      calendar minute (LAN test: the hand point showed 6 shares it never
      earned, the point the device sat on lost them); a window's first bucket
      now starts with the window.
    • WarpTune: the stall guard waits for the vote's ten-minute gate. It
      ended a calibration stage as stalled when two windows of shares were
      in before the regulator's time gate on the voltage had opened — a
      miner on a low fixed difficulty would have hit it (found by the new
      end-to-end replay on the firmware's counters).
    • WarpTune Desktop: a section the page added to a file that had none
      ([energy] for the price) landed above the file's header comment; the
      header now stays on top.
    • WarpTune Desktop: on a phone, upright or sideways, the page header no
      longer sticks: three rows of it covered the page title after the
      first scroll. Desktops keep the sticky header.
    • WarpTune: the hand-point comparison without a pool weighs each
      interval's shares at the earlier sample's difficulty, as the regulator
      does; a heartbeat over 7.5 minutes no longer leaves every sample pair
      out (two heartbeats count as one stay); a CRLF file keeps its header
      comment split as an LF file does.
    • WarpTune Desktop (macOS): the launcher's dialogs answer with a token,
      not with the button's label — without a UTF-8 locale osascript
      printed a non-ASCII label as ? and "yes" read as "not now"; Linux's
      zenity question no longer interprets markup in the service path.
    • Pool devices page: a visitor without a tariff reads that the operator
      set none, not "enter your electricity price"; the price form on the
      Desktop checks a typed currency whatever the price, shows the rate in
      the reader's number format and takes four-digit tariffs.

    dvb-WarpPool v1.41.0 — Downloads

    Docker

    git.warppool.org/dvb-projekt/dvb-warppool:v1.41.0 (multi-arch amd64+arm64, ohne v-Präfix)

    Native packages

    • Linux .deb: amd64 + arm64 → apt install ./dvb-warppool_*.deb
    • Linux .rpm: amd64 + arm64 → dnf install ./dvb-warppool-*.rpm
    • Linux AppImage: x86_64 + aarch64 portable
    • Linux tarballs: x86_64 + aarch64 for manual installs
    • WarpTune only: dvb-warppool-tune-<tag>-<target>.tar.gz (Linux x86_64 + aarch64; macOS added with the .dmg) for running the tuner next to a pool on Umbrel or Docker — see the README inside
    • macOS .dmg: added shortly after publish (built separately) — or build from source
    • Windows .msi (the pool): paused since the forge migration (no Windows runner yet)

    WarpTune Desktop (the regulator with its own page, no pool needed)

    • macOS: WarpTune-Desktop-<tag>-{aarch64,x86_64}.dmg — added shortly after publish, with the .dmg above
    • Linux: dvb-warptune_*.deb (amd64 + arm64) or WarpTune-Desktop-<tag>-{x86_64,aarch64}.AppImage
    • Windows: WarpTune-Desktop-<tag>-x86_64-setup.exe (per-user installer, no admin) or the portable …-x86_64-windows.zip; runs on Windows-on-ARM through emulation
    • Not signed with a paid certificate: macOS Gatekeeper and Windows SmartScreen ask once — see the "open anyway" guide in scripts/warptune-setup.md; verify the download with SHA256SUMS + cosign below (the macOS .dmg lines are added when those assets are, with a re-signed SHA256SUMS)

    Signatures

    • SHA256SUMS + cosign bundle (SHA256SUMS.bundle, project key)
    • SBOM (SPDX) for all dependencies

    Verify (project public key cosign.pub in the repo root):

    cosign verify-blob \
      --key cosign.pub \
      --bundle SHA256SUMS.bundle \
      SHA256SUMS
    sha256sum --check SHA256SUMS
    

    First-time setup: run dvb-warppool-setup for the first-run wizard.

    Downloads