Skip to content

Releases: chopperbriano/DigiAssetWindows

DigiAsset for Windows — v0.3.0-win.74

Choose a tag to compare

@chopperbriano chopperbriano released this 04 Jul 14:24

DigiAsset for Windows — v0.3.0-win.74

The install experience is now genuinely one-command and newbie-proof: a fresh Windows box goes from nothing to a running, self-healing node in minutes instead of a week, with a fast-sync that pre-loads the blockchain, a node that supervises itself, and a pool map that shows everyone.

Install / update in one line

Open PowerShell as Administrator and paste:

iwr https://raw.githubusercontent.com/chopperbriano/DigiAssetWindows/master/setup-digiasset.ps1 -OutFile "$env:TEMP\setup-digiasset.ps1" -UseBasicParsing; powershell -ExecutionPolicy Bypass -File "$env:TEMP\setup-digiasset.ps1"

It asks only for your DGB payout address, then installs and configures the whole stack. Full walkthrough: NODE-SETUP.md. Running a pool? POOL-SETUP.md.

What's new since win.60

Fast-sync — skip the multi-day blockchain download

  • The installer pulls a pre-synced DigiByte blockchain and DigiAsset chain.db from a hosted snapshot and extracts them before first launch, so a new node catches up in the recent delta instead of syncing from genesis.
  • Downloads are resumable (BITS) with a live %/speed/ETA bar, and extraction shows a "heavy disk activity — not frozen" heartbeat so a huge extract never looks hung.
  • New standalone seed-digibyte.ps1 fast-syncs any DigiByte Core wallet from the same snapshot (install DigiByte, close it, run the script).

A node that stays up on its own

  • The node now launches in a visible dashboard window and is kept alive by a session-long supervisor that waits patiently for the freshly-seeded wallet to finish verifying (RPC can take a while), then restarts the node if it ever exits — with clear PID/uptime logging.
  • Fixes the Could not generate new PSP payout address CRITICAL: the config now sets the local pool's payout address, so the node no longer needs to mint one from a wallet that may not exist yet.

Installer polish

  • The install window stays open at the end (success and error) and writes logs\INSTALL-COMPLETE.txt as durable proof — no more vanishing window.
  • A prominent final reminder to create, encrypt, and back up your wallet.
  • The payout-address prompt retries on a typo instead of aborting, and guides users who don't have an address yet.
  • Maintenance no longer falsely reinstalls IPFS Desktop every 6 hours (it's a per-user app; the SYSTEM task was looking in the wrong profile).

Pool

  • The world map now shows co-located nodes (a node running on the pool box) at the pool's own location instead of leaving them off the map. (Requires the updated DigiAssetPoolServer.exe.)

Downloads

File What it is
DigiAssetWindows.exe The node (run this)
DigiAssetWindows-cli.exe Command-line client
DigiAssetPoolServer.exe Pool server (operators only)
setup-digiasset.ps1 The installer
seed-digibyte.ps1 Fast-sync any DigiByte wallet
update-binaries.ps1 Pull latest binaries
monitor-node.ps1 / stop-node.ps1 Status / stop-remove helpers

Requirements: Windows 10/11 x64. The installer handles the VC++ runtime, DigiByte Core, and IPFS Desktop for you.

Windows port of DigiAsset Core by mctrivia.

DigiAsset for Windows win.60 (v0.3.0-win.60)

Choose a tag to compare

@chopperbriano chopperbriano released this 03 Jul 18:42

DigiAsset for Windows — v0.3.0-win.60

The first release since win.42, and a big one: a true one-command install, a native Windows desktop experience, and durability fixes so a node survives the multi-day initial DigiByte sync.

Install / update in one line

Open PowerShell as Administrator and paste:

iwr https://raw.githubusercontent.com/chopperbriano/DigiAssetWindows/master/setup-digiasset.ps1 -OutFile "$env:TEMP\setup-digiasset.ps1" -UseBasicParsing; powershell -ExecutionPolicy Bypass -File "$env:TEMP\setup-digiasset.ps1"

It asks only for your DGB payout address, then installs and configures the whole stack. Full walkthrough: NODE-SETUP.md. Running a pool? POOL-SETUP.md.

What's new

Native GUI desktop experience

  • Installs the DigiByte Core GUI wallet, IPFS Desktop (tray icon), and the DigiAsset node dashboard — real apps in your taskbar/tray, auto-starting at logon.
  • Installs the Visual C++ x64 runtime automatically (fixes MSVCP140.dll not found).
  • Pre-approves apps in the Windows Firewall and warns about the UAC/firewall popups.
  • Points you at Sysinternals Autologon for an always-on box that comes back after a reboot.
  • A background maintenance task keeps things updated and re-checks health.

Reliability — survives the long first sync

  • The node no longer crashes with IPFS Exception: Timeout during DB bootstrap — it retries and, if IPFS still isn't reachable, syncs from scratch instead of dying.
  • The post-bootstrap wait now tolerates transient DigiByte RPC errors across the multi-day sync and stays responsive to Ctrl+C.
  • The installer waits for IPFS + DigiByte to be ready before launching the node, with a supervised, retrying launcher — no dependency race at logon.

Pool

  • The world map of nodes works: the pool geolocates each node by the IP seen at registration (via X-Forwarded-For behind the Caddy proxy). (Requires the updated DigiAssetPoolServer.exe on the pool host.)

Tooling & housekeeping

  • New update-binaries.ps1 — pull the latest exes from Releases (or deploy a local build): stop, copy, restart.
  • Repo/product renamed to DigiAsset for Windows; executables are DigiAssetWindows.exe / DigiAssetWindows-cli.exe. Upstream DigiAsset Core credit preserved.

Downloads

File What it is
DigiAssetWindows.exe The node (run this)
DigiAssetWindows-cli.exe Command-line client
DigiAssetPoolServer.exe Pool server (operators only)
setup-digiasset.ps1 The installer
monitor-node.ps1 / stop-node.ps1 Status / stop-remove helpers
update-binaries.ps1 Pull latest binaries

Requirements: Windows 10/11 x64. The installer handles the VC++ runtime, DigiByte Core, and IPFS Desktop for you.

Windows port of DigiAsset Core by mctrivia.

win.42 - node world map on the pool page

Choose a tag to compare

@chopperbriano chopperbriano released this 03 Jul 13:31

The pool web page now shows a world map of all nodes: the pool server geolocates each node's IP (server-side, ip-api, per-IP cached) and the landing page plots them with Leaflet + marker clustering on dark map tiles. Only coarse lat/lon + city/country reach the browser - no IPs or peerIds. Redeploy: copy the new DigiAssetPoolServer.exe and re-copy pool/deploy/site/ (or re-run setup-caddy.ps1).

win.41 - renamed to DigiAsset for Windows (DigiAssetWindows.exe)

Choose a tag to compare

@chopperbriano chopperbriano released this 03 Jul 13:19

Rebranded: the app is now DigiAsset for Windows and the executable is DigiAssetWindows.exe (cli: DigiAssetWindows-cli.exe). The one-click installer, monitor, stop scripts, and docs all use the new names. If upgrading an existing node, re-run install-node.ps1 so the boot task points at the new exe (the old DigiAssetCore.exe boot task can be removed with stop-node.ps1 -DisableAutostart first). Upstream 'DigiAsset Core' by mctrivia is unchanged and still credited.

win.40 - quieter INFO logging

Choose a tag to compare

@chopperbriano chopperbriano released this 02 Jul 19:42

Log-level scrub: the per-block sync ticker, the 20-min keepalive 'Reported online' line, and the 10-min '100% coverage' line are now DEBUG, so INFO mode stays sparse (startup + real status/warnings only). Press [L] for the full DEBUG detail. Includes win.39 (pool node list with IPs + self-check) and win.38 (donation treasury, NAT-tolerant payouts).

win.39 - pool node list shows IPs + self-check in help

Choose a tag to compare

@chopperbriano chopperbriano released this 02 Jul 19:34

Node dashboard: press [N] to list the pool's online nodes with their IP + peerId, marking your own node. Large lists are capped (full list on /nodes.json). N is now shown in the [H] help menu and the Pool section. Also includes everything from win.38 (donation treasury, NAT-tolerant payouts, DigiStamp default pool).

win.38 - donation treasury, NAT-tolerant payouts, pool node self-check

Choose a tag to compare

@chopperbriano chopperbriano released this 02 Jul 15:22

Windows build 38. Changes since win.33:

Pool payouts

  • Fixed a bug where a failed sendtoaddress was logged as SENT (and written to the ledger) instead of an error.
  • Once-per-period spend guard (poolpayoutperiodhours) so a double [E] press can't double-pay.
  • Balance-derived payouts: poolpayoutpercent pays a percent of the wallet balance — can't overspend, scales with donations.

Getting more nodes paid

  • Hybrid node verification: direct dial first, then a NAT-tolerant DHT findprovs + bitswap fallback, so nodes behind NAT can earn without forwarding a port (forwarding still recommended).
  • Default pool is now https://pool.digistamp.co; first-run wizard prompts for the pool.

Donation treasury

  • GET /pool/stats.json + a public landing page: live donation QR, treasury balance (read from a public explorer, so it can be an external/cold address), total paid to hosts, and a public payout ledger.

Website / deploy

  • Caddy reverse-proxy bootstrap (pool/deploy/setup-caddy.ps1) for HTTPS + the landing page.
  • start-digistamp.ps1 (start the stack after reboot, waits for DigiByte Core) and backup-digistamp.ps1 (rotated data + wallet backup).

Dashboard / misc

  • New [N] key in DigiAssetCore.exe: lists the pool's online nodes and self-checks whether your node is registered.
  • "Nodes online" count now reflects your configured pool, not a hardcoded server.
  • Version string now bumps with the release (was frozen at .33).
  • Fixed firewall docs: forward IPFS swarm port 4001, keep the API port 5001 localhost-only.

Binaries: DigiAssetCore.exe (node), DigiAssetPoolServer.exe (pool, optional), DigiAssetCore-cli.exe (CLI). You still need DigiByte Core and IPFS Desktop — see the README.

win.33 - Phase 2 dial-back verification + Phase 3 payout pipeline + peerId fix

Choose a tag to compare

@chopperbriano chopperbriano released this 12 Apr 15:59

Phase 2 verified working (413/413 probes passed overnight) + Phase 3 payout pipeline ready

Phase 2: dial-back verification

New PoolVerifier background thread probes each registered node every 60 seconds via IPFS swarm/connect. Nodes that pass are marked verified; nodes with 3+ consecutive failures are excluded from /nodes.json and from payouts.

Ran overnight on a real Windows box with one client: 413 out of 413 probes succeeded (100% pass rate). The self-detection feature auto-verifies when the pool server and client are on the same machine (NAT hairpinning workaround).

Phase 3: operator-approved payout pipeline (code complete)

  • [P] Payout Preview: shows verified node count, pool budget, per-node share, and each eligible payout address. Read-only, safe to press anytime.
  • [E] Execute Payout: shows preview then requires explicit Y keypress. Calls sendtoaddress on the local DigiByte Core wallet via JSON-RPC for each eligible node. Logs txid/error per node, records in payouts_ledger table. Dashboard shows real paid-total from the ledger.
  • Guards: refuses to execute if poolpayouts=0, poolspendperperiod missing/zero, zero verified nodes, or rpcuser not configured. Each guard prints a clear reason.
  • New pool.cfg keys: rpcuser, rpcpassword, rpcport (wallet RPC), poolspendperperiod (DGB per payout cycle)

PeerId bug fix

IPFS::getPeerId now filters the /id response addresses by the local node's own ID field. Previously could return a DigitalOcean bootstrap node's address as "ours". Confirmed fixed: log now shows the real 12D3KooW... peerId.

UI polish

  • [H] help sub-menus: press H for a 3-line topic index, then 1-6 for detail sections that fit on one screen
  • Pool dashboard aligned columns: same cell() fixed-width helper as the main exe
  • Pool header matches main exe format: DigiAsset Pool Server for Windows v0.3.0-win.33
  • Dynamic log area: fills terminal height, no blank gap
  • Uptime format matches: N sec / N min / N.N hours / N.N days
  • Phase 3 keys dimmed in key-hints bar since payouts default off

Files

  • DigiAssetCore-0.3.0-win.33-x64.zip — all three exes
  • DigiAssetCore.exe — main client
  • DigiAssetCore-cli.exe — JSON-RPC CLI
  • DigiAssetPoolServer.exe — pool server (Phase 1 + 2 + 3)

win.32 - DigiAssetPoolServer.exe Phase 1 + honest Payment row

Choose a tag to compare

@chopperbriano chopperbriano released this 12 Apr 03:22

Headline: the first real tool for getting off mctrivia's dead pool server

win.32 ships a new optional executable, DigiAssetPoolServer.exe, that re-implements the exact wire protocol mctrivia's original pool server uses so the Windows fork's client can register payout addresses and fetch the permanent asset list from a pool YOU run, on the same Windows box as DigiByte Core and DigiAssetCore.

This is not yet full "DGB flowing to node operators" — that's Phase 3, still to come — but it is the first time a Windows operator can stop depending on an unreachable third-party server. Every part of the protocol loop except automated payout distribution is working end-to-end, verified both when the pool declares payouts enabled and when it declares them disabled.

New binary: DigiAssetPoolServer.exe

Ships alongside DigiAssetCore.exe and DigiAssetCore-cli.exe in the release zip. Completely optional — only operators who want to run their own pool need it. Same C++ toolchain, same Boost, same SQLite amalgamation, no new language or build dependency.

Running it:

cd C:\path\to\unpacked\release
.\DigiAssetPoolServer.exe

On first launch it:

  1. Creates a local pool.db SQLite database in the current directory.

  2. Snapshots mctrivia's current /permanent/0..23.json pages into that database so the pool has an immediately usable canonical asset list (about 7,800 entries).

  3. Opens a minimal TUI dashboard showing listening port, registered node count, permanent asset count, payouts config state, and uptime.

  4. Listens on port 14028 (configurable via poolpayouts/poolport in pool.cfg) and serves:

    • GET /permanent/<page>.json
    • POST /list/<floor>.json
    • POST /keepalive
    • GET /nodes.json
    • GET /map.json
    • GET /bad.json

The endpoint shapes match mctrivia's protocol so both the win.32 C++ client and the legacy NodeJS digiasset_node client can connect to it unchanged.

Point the client at your pool

Add one line to the DigiAssetCore config.cfg:

psp1server=http://127.0.0.1:14028

Default (absent) remains https://ipfs.digiassetx.com for upstream compatibility. When present, every /permanent, /list, /keepalive, and /bad.json call the client makes goes to your pool instead.

Honest Payment: dashboard row

Before this release, the DigiAssetCore dashboard printed green Payment: active the moment any pool server accepted a /list registration request. That meant pointing at a brand-new DigiAssetPoolServer with poolpayouts=0 (which is the default!) would falsely tell the operator they were earning DGB when in reality no money was flowing anywhere. Not shipping that.

The pool server now emits {"payoutsEnabled": false} or {"payoutsEnabled": true} in its /list response body. The client parses it and the dashboard renders four distinct states:

Pool state Dashboard
/list returns 200 with payoutsEnabled: true Payment: active (green)
/list returns 200 with payoutsEnabled: false Payment: registered (no payouts yet) (yellow) + explanation
/list returns 500 or fails Payment: unavailable (red) + "pool payment service offline"
no probe yet Payment: checking... (dim)

On the pool server side, setting poolpayouts=1 in pool.cfg additionally prints a pre-dashboard warning block to stdout reminding the operator that Phase 3 automated distribution has not shipped — flipping the flag on advertises "paying" to every client without DGB actually moving. That's a deliberate and explicit foot-gun guard.

Pool server dashboard

The pool server has its own minimal TUI dashboard so the operator always sees the live state of their pool without needing to inspect the database:

                        DigiAsset Pool Server (experimental) - Phase 1
------------------------------------------------------------------------------------------
  Listening:     Port 14028            Requests:      4
  Registered:    1 nodes           Active (1h):   1 nodes
  Permanent:     3,442 assets / 24 pages
  Payouts:       disabled  (clients see 'registered (no payouts yet)')
  Time:          22:17:42            Uptime:        0 min 44 sec

Key hints: [Q] Quit [N] Nodes [A] Assets [P] Pending Payouts [E] Execute Payout [H] Help. The [P] and [E] key handlers are placeholders for Phase 3 — pressing them today prints an informational log line explaining Phase 3 is not yet implemented.

Bug fix: keepalive log line no longer lies

DigiAssetCore's keepalive log message previously hardcoded "Reported online to ipfs.digiassetx.com" even when it was actually talking to a local pool. Now uses _baseUrl so the log reflects reality:

INFO: Reported online to http://127.0.0.1:14028 (server id: /ip4/...)

Expanded [H] help

Pressing H in the DigiAssetCore dashboard now explains all four Payment: states in plain English and documents the psp1server config key so first-time operators know how to point at a different pool.

End-to-end smoke test, both branches

Before shipping, verified:

  • poolpayouts=0 (default): pool dashboard shows yellow disabled, client dashboard shows yellow registered (no payouts yet) - pool operator has not enabled payouts.
  • poolpayouts=1: pool dashboard shows green ENABLED, client dashboard flips to green active within the next /list probe interval (or on client restart).
  • Pool server's Requests: counter increments as the client hits /keepalive, /permanent/23.json, and /list/<floor>.json on the normal cadence.
  • First-run snapshot successfully imported all 24 pages from mctrivia into the local pool.db (about 7,800 entries, dominated by two fat pages at 3,115 and 1,032 entries).

Known limitations

  • Phase 2 (dial-back verification) of registered peers is not yet built. Any client that POSTs /list gets marked registered; the pool does not verify they are actually serving the assets they claim.
  • Phase 3 (operator-approved automated payout distribution) via local DigiByte Core RPC is not yet built. poolpayouts=1 makes clients report "active" but DGB must still be sent manually from digibyte-qt if the operator wants to pay out today. The pool's payouts_ledger SQLite table is stubbed and will be the basis for a DigiAssetPoolServer.exe payout CLI subcommand in a later release.
  • mctrivia's original pool server at ipfs.digiassetx.com is still broken for payouts and this release does not and cannot fix that. The whole point of the new server is to route around the dead upstream.

Files in this release

  • DigiAssetCore-0.3.0-win.32-x64.zip — all three exes in a folder
  • DigiAssetCore.exe — main client (2,461,696 bytes)
  • DigiAssetCore-cli.exe — JSON-RPC CLI (328,704 bytes)
  • DigiAssetPoolServer.exe — new optional pool server (1,245,696 bytes)

win.31 - Dashboard serving/coverage rows, getnodestats RPC, fix RPC server actually listens

Choose a tag to compare

@chopperbriano chopperbriano released this 12 Apr 01:27

Headline fix: the RPC server actually listens now. For the first time.

src/boost/asio.hpp in this fork was a hand-written no-op stub that silently emulated boost::asio's socket API with empty implementations. Because src/ sat on the include path, #include <boost/asio.hpp> in RPC/Server.cpp resolved to the stub, not to real boost. Every bind() / listen() / accept() call was a no-op:

class acceptor {
    void open(int) {}
    void set_option(const reuse_address&) {}
    void bind(const endpoint&) {}
    void listen() {}
    void accept(socket&) {
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
};

The RPC Server listening on port 14024 log line was printed after a no-op listen() returned. The RPC call # received debug entries were the stub's sleeping accept loop spinning once per second, not real inbound connections. netstat never showed port 14024 bound because no socket was ever actually created.

DigiAssetCore-cli.exe has never worked on this Windows fork for any RPC command. Not version, not getblockcount, not listassets, nothing. Every call failed with a libcurl-style error because there was nothing listening to connect to.

Upstream src/CMakeLists.txt even acknowledged the stub existed, for WebServer.cpp:

# WebServer.cpp needs real Boost Beast headers (not the stub in src/boost/)

…but nothing else got the fix. RPC::Server silently compiled against the stub for every previous release. This commit finally fixes it globally by adding the real boost headers to the front of the include path for every source file, and switching Server.h/Server.cpp to explicit sub-header includes as a belt-and-braces guarantee.

After this release:

  • netstat -ano | findstr 14024 shows TCP 0.0.0.0:14024 0.0.0.0:0 LISTENING <pid> for the first time.
  • DigiAssetCore-cli.exe version returns "0.3.0-win.31".
  • DigiAssetCore-cli.exe getnodestats returns a real JSON snapshot of the node.
  • Every pre-existing RPC method (version, listassets, getblockcount, getassetdata, etc.) now works from the cli because there's finally something listening.

New features (the original reason for this release)

Dashboard: Serving: row

Polls IPFS bitswap stats every 30 seconds via POST /api/v0/stats/bitswap and displays total blocks sent, rate per minute, and total bytes sent, in a human-readable form. Answers "is this node actually serving DigiAsset content out to the network?" with a direct measurement, not a guess.

Dashboard: Asset index: row

Every 10 minutes, walks /permanent/<page>.json on mctrivia's server (24 pages, ~3,442 assetIds total as of this release) and cross-checks each assetId against the local assets table. Reports local count, tracked count, and coverage percentage. 100% is strong evidence the chain analyzer is not missing any issuances, because PSP-enrolled and non-PSP-enrolled assets go through the same parse path. Missing assetIds are logged at WARNING so they're visible without flipping to DEBUG.

RPC: new getnodestats method

Returns a snapshot of buildVersion, syncHeight, assetCount, bitswap stats, and permanent-list coverage as JSON. Designed for side-by-side node comparison:

DigiAssetCore-cli.exe getnodestats

Run it on two nodes at the same syncHeight. If assetCount differs, one of them has a chain-analyzer bug. If permanentCoverage.missingCount > 0, that node is missing specific assets that the other has.

Expanded [H] help

Pressing H now prints a multi-section plain-English explanation of every dashboard row, what each number means, and what the node is actually doing. Readable by a first-time operator with no DigiAsset background.

Latent bugs fixed along the way

  • Server::Server work_guard was a local variable. Changed to a member so _io stays alive. (Previously the 16 worker threads exited immediately after construction — invisible against the stub since run() was a no-op, but fatal once real boost was linked.)
  • Server::Server _acceptor now initialized in the member init list with the executor. Real boost::asio::basic_socket_acceptor has no default constructor.
  • Server::start() now clears AppMain::_rpcServer to nullptr when accept() returns, so the dashboard's RPC probe reports honestly if the accept loop ever dies in a future build instead of showing a green dangling pointer.
  • DigiByteCore::makeConnection() prints the RPC URL to stderr when DGBCORE_DEBUG_URL=1 is set — diagnostic hook for libcurl URL-parser errors.
  • Dashboard spawn-race guards for the bitswap poll and coverage scan now rely only on the elapsed >= interval check. Previously the || !_probed fallback caused the 500ms render loop to fire duplicate probe threads during the ~2s window before the first probe completed.
  • cli/main.cpp drops an unused #include "RPC/Server.h" so the cli build doesn't need real boost headers at all.

Known current state

  • mctrivia's pool still doesn't pay. That's a server-side bug at ipfs.digiassetx.com (HTTP 500 on the payout registration endpoint, broken since ~July 2024) and the pool operator is uncontactable. No client-side fix can change this; see the win.30 release notes for the full story. This release doesn't fix payment — but it does make the RPC server work for everything else, and the node continues to contribute storage to the network.

Files

  • DigiAssetCore-0.3.0-win.31-x64.zip — both exes in a folder
  • DigiAssetCore.exe — main binary
  • DigiAssetCore-cli.exe — command-line helper